Jump to content

Вопросы и ответы по MTA.


Recommended Posts

Почему объект не удаляется? Вот что пишет дебаг: attemp to index field '?' (a nil value)

P.S(3-я строчка в удалении объекта)

Вот две функции создания и удаления объекта:

function createFire() 
  
    local x,y,z = unpack ( firePos[math.random(#firePos)]) 
    for i=1, 6 do 
    hx = math.random(-10, 10) + x 
    hy = math.random(-10,10) + y 
    local fireElem = createObject(fireModel,hx,hy,z) 
    setElementCollisionsEnabled(fireElem,false) 
    local col = createColSphere(hx,hy,z+1,2) 
    fires[fireElem] = {fireElem,col} 
    addEventHandler("onColShapeHit",col,setFire) 
    fire = fire +1 
    outputDebugString ("fire:"..fire) 
    --return fireElem 
    end 
end 
addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), createFire ) 

function fireExtinguished(fireElem) 
    triggerEvent("onFireExtinguished",source,fireElem) 
    destroyElement(fires[fireElem][1]) 
    destroyElement(fires[fireElem][2]) 
    fires[fireElem] = nil 
    fire = fire-1 
    outputDebugString ("fire:"..fire) 
    givePlayerMoney(source,10) 
    if (fire) < 1 then 
    setTimer(createFire, 3000, 1) 
    end 
end 
addEvent("fireExtinguished",true) 
addEventHandler("fireExtinguished",root,fireExtinguished) 
addEventHandler("onResourceStop",getResourceRootElement(getThisResource()),fireExtinguished) 

Link to comment

Ошибка в индексе. Попробуй так

function createFire() 
    local x,y,z = unpack ( firePos[math.random(#firePos)]) 
    for i=1, 6 do 
    hx = math.random(-10, 10) + x 
    hy = math.random(-10,10) + y 
    local fireElem = createObject(fireModel,hx,hy,z) 
    setElementCollisionsEnabled(fireElem,false) 
    local col = createColSphere(hx,hy,z+1,2) 
    fire = fire +1 
    fires[fire] = {fireElem,col} 
    addEventHandler("onColShapeHit",col,setFire) 
    outputDebugString ("fire:"..fire) 
    --return fireElem 
    end 
end 
addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), createFire ) 

function fireExtinguished(fireElem) 
    triggerEvent("onFireExtinguished",source,fireElem) 
    destroyElement(fires[1]) 
    destroyElement(fires[2]) 
    fires[fire] = nil 
    fire = fire-1 
    outputDebugString ("fire:"..fire) 
    givePlayerMoney(source,10) 
    if (fire) < 1 then 
    setTimer(createFire, 3000, 1) 
    end 
end 
addEvent("fireExtinguished",true) 
addEventHandler("fireExtinguished",root,fireExtinguished) 
addEventHandler("onResourceStop",getResourceRootElement(getThisResource()),fireExtinguished) 

Если не получится, попробуй использовать table.insert, мне как-то раз помогло. Хотя казалось бы действие тоже.

Link to comment
function createExtinguisher(wep,_,_,hitX,hitY,hitZ) 
    if wep ~= 42 then return end 
    for k, v in ipairs(getElementsByType("object",root)) do 
        if getElementModel(v) == 658 then 
            local fX,fY,fZ = getElementPosition(v) 
            local dist = getDistanceBetweenPoints2D(hitX,hitY,fX,fY) 
            if dist < 5 then 
                if not t[v] then t[v] = 0 end 
                if t[v] < 250 then 
                    t[v] = t[v] + 1 
                    dxDrawRectangle(sx/2-65, sy - 55, 127, 22, tocolor(0, 0, 0, 150), true) 
                    dxDrawRectangle(sx/2-63, sy - 53, t[v]/ 2, 18, tocolor(255, 0, 0, 255), true) 
                else 
                    --triggerServerEvent("fireExtinguished",localPlayer,v) 
                    t[v] = nil 
                end 
            end 
        end 
    end 
end 
addEventHandler("onClientWeaponFire",root,createExtinguisher) 

Ребят как сделать подобное только для холодного оружия? Ибо onClientWeaponFire на холодное не пашет((

Link to comment
  
onClientKey 
getPedWeapon 
-- Если объект/игрок/транспорт, то 
getPedTarget 
getDistanceBetweenPoints2D 
-- Иначе 
processLineOfSight -- вперед на нужную дистанцию 
  

Примерно так

а onClientKey разве для 1.3.4?

Link to comment
  
onClientKey 
getPedWeapon 
-- Если объект/игрок/транспорт, то 
getPedTarget 
getDistanceBetweenPoints2D 
-- Иначе 
processLineOfSight -- вперед на нужную дистанцию 
  

Примерно так

а onClientKey разве для 1.3.4?

Данное событие было приблизительно с 1.1

Link to comment

Данное событие было приблизительно с 1.1

Действительно :) не туда посмотрел:)

а можно ваш скайп? Пару вопросов задам буквально, ибо здесь не особо удобно..

Link to comment

Данное событие было приблизительно с 1.1

Действительно :) не туда посмотрел:)

а можно ваш скайп? Пару вопросов задам буквально, ибо здесь не особо удобно..

Оффтоп

Не использую скайп

Link to comment
  • 2 weeks later...

Народ, я, может туплю, но почему тут:

  
function HealthChekcer ()  
  for i,player in pairs( getElementsByType("player") ) do 
    if getElementHealth (player) >= 100 then 
      outputChatBox("!") 
      kickPlayer(player,'2') 
    end 
  end 
end   
setTimer ( HealthChekcer, 2000, 0 ) 
  

kickPlayer вовзращает nil?

Link to comment
Есть ли в МТА возможность сохранения координат игрока/транспорта прямо из игры ?(аналог /save в SA-MP)

FullSave скрипт.

Server:

function playerLogin (thePreviousAccount, theCurrentAccount, autoLogin) 
  if  not (isGuestAccount (getPlayerAccount (source))) then 
    local accountData = getAccountData (theCurrentAccount, "funmodev2-money") 
    if (accountData) then 
      local playerMoney = getAccountData (theCurrentAccount, "funmodev2-money") 
      local playerSkin = getAccountData (theCurrentAccount, "funmodev2-skin") 
      local playerHealth = getAccountData (theCurrentAccount, "funmodev2-health") 
      local playerArmor = getAccountData (theCurrentAccount, "funmodev2-armor") 
      local R = getAccountData (theCurrentAccount, "funmodev2-R") 
      local G = getAccountData (theCurrentAccount, "funmodev2-G") 
      local B = getAccountData (theCurrentAccount, "funmodev2-B") 
      local playerX = getAccountData (theCurrentAccount, "funmodev2-x") 
      local playerY = getAccountData (theCurrentAccount, "funmodev2-y") 
      local playerZ = getAccountData (theCurrentAccount, "funmodev2-z") 
      local playerInt = getAccountData (theCurrentAccount, "funmodev2-int") 
      local playerDim = getAccountData (theCurrentAccount, "funmodev2-dim") 
      local playerWanted = getAccountData (theCurrentAccount, "funmodev2-wantedlevel") 
     local playerTeam = getAccountData (theCurrentAccount, "funmodev2-Team") 
      local playerWeaponID0 = getAccountData (theCurrentAccount, "funmodev2-weaponID0") 
      local playerWeaponID1 = getAccountData (theCurrentAccount, "funmodev2-weaponID1") 
      local playerWeaponID2 = getAccountData (theCurrentAccount, "funmodev2-weaponID2") 
      local playerWeaponID3 = getAccountData (theCurrentAccount, "funmodev2-weaponID3") 
      local playerWeaponID4 = getAccountData (theCurrentAccount, "funmodev2-weaponID4") 
      local playerWeaponID5 = getAccountData (theCurrentAccount, "funmodev2-weaponID5") 
      local playerWeaponID6 = getAccountData (theCurrentAccount, "funmodev2-weaponID6") 
      local playerWeaponID7 = getAccountData (theCurrentAccount, "funmodev2-weaponID7") 
      local playerWeaponID8 = getAccountData (theCurrentAccount, "funmodev2-weaponID8") 
      local playerWeaponID9 = getAccountData (theCurrentAccount, "funmodev2-weaponID9") 
      local playerWeaponID10 = getAccountData (theCurrentAccount, "funmodev2-weaponID10") 
      local playerWeaponID11 = getAccountData (theCurrentAccount, "funmodev2-weaponID11") 
      local playerWeaponID12 = getAccountData (theCurrentAccount, "funmodev2-weaponID12") 
      local playerWeaponAmmo0 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo0") 
      local playerWeaponAmmo1 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo1") 
      local playerWeaponAmmo2 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo2") 
      local playerWeaponAmmo3 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo3") 
      local playerWeaponAmmo4 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo4") 
      local playerWeaponAmmo5 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo5") 
      local playerWeaponAmmo6 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo6") 
      local playerWeaponAmmo7 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo7") 
      local playerWeaponAmmo8 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo8") 
      local playerWeaponAmmo9 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo9") 
      local playerWeaponAmmo10 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo10") 
      local playerWeaponAmmo11 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo11") 
      local playerWeaponAmmo12 = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo12") 
      spawnPlayer (source, playerX, playerY, playerZ +1, 0, playerSkin, playerInt, playerDim) 
      setPlayerMoney (source, playerMoney) 
      setTimer (setElementHealth, 50, 1, source, playerHealth) 
      setTimer (setPedArmor, 50, 1, source, playerArmor) 
      setTimer (setPlayerWantedLevel, 50, 1, source, playerWanted) 
      giveWeapon(source, playerWeaponID0, playerWeaponAmmo0, true) 
      giveWeapon(source, playerWeaponID1, playerWeaponAmmo1, false) 
      giveWeapon(source, playerWeaponID2, playerWeaponAmmo2, false) 
      giveWeapon(source, playerWeaponID3, playerWeaponAmmo3, false) 
      giveWeapon(source, playerWeaponID4, playerWeaponAmmo4, false) 
      giveWeapon(source, playerWeaponID5, playerWeaponAmmo5, false) 
      giveWeapon(source, playerWeaponID6, playerWeaponAmmo6, false) 
      giveWeapon(source, playerWeaponID7, playerWeaponAmmo7, false) 
      giveWeapon(source, playerWeaponID8, playerWeaponAmmo8, false) 
      giveWeapon(source, playerWeaponID9, playerWeaponAmmo9, false) 
      giveWeapon(source, playerWeaponID10, playerWeaponAmmo10, false) 
      giveWeapon(source, playerWeaponID11, playerWeaponAmmo11, false) 
      giveWeapon(source, playerWeaponID12, playerWeaponAmmo12, false) 
      setCameraTarget (source, source) 
      fadeCamera(source, true, 2.0) 
      setPlayerNametagColor (source, R, G, B)  
    else 
      spawnPlayer (source, 1481.0855712891, -1771.2996826172, 18.795753479004, 0,78, 0, 0) 
      setPlayerMoney (source, 200) 
      setCameraTarget (source, source) 
      fadeCamera(source, true, 2.0)   
      setPlayerNametagColor (source, 255, 255, 255)  
    end    
  end 
end 
addEventHandler ("onPlayerLogin", getRootElement(), playerLogin) 
  
function onLogout () 
    kickPlayer (source, nil, "Logging out is disallowed.") 
end 
addEventHandler ("onPlayerLogout", getRootElement(), onLogout) 
  
function onQuit (quitType, reason, responsibleElement) 
  if not (isGuestAccount (getPlayerAccount (source))) then 
    account = getPlayerAccount (source) 
    if (account) then 
      local x,y,z = getElementPosition (source) 
      local r,g,b = getPlayerNametagColor (source) 
      setAccountData (account, "funmodev2-money", tostring (getPlayerMoney (source))) 
      setAccountData (account, "funmodev2-skin", tostring (getPedSkin (source))) 
      setAccountData (account, "funmodev2-health", tostring (getElementHealth (source))) 
      setAccountData (account, "funmodev2-armor", tostring (getPedArmor (source))) 
      setAccountData (account, "funmodev2-R", r) 
      setAccountData (account, "funmodev2-G", g) 
      setAccountData (account, "funmodev2-B", b) 
      setAccountData (account, "funmodev2-x", x) 
      setAccountData (account, "funmodev2-y", y) 
      setAccountData (account, "funmodev2-z", z) 
      setAccountData (account, "funmodev2-int", getElementInterior (source)) 
      setAccountData (account, "funmodev2-dim", getElementDimension (source)) 
      setAccountData (account, "funmodev2-wantedlevel", getPlayerWantedLevel (source)) 
      setAccountData (account, "funmodev2-weaponID0", getPedWeapon (source, 0)) 
      setAccountData (account, "funmodev2-weaponID1", getPedWeapon (source, 1)) 
      setAccountData (account, "funmodev2-weaponID2", getPedWeapon (source, 2)) 
      setAccountData (account, "funmodev2-weaponID3", getPedWeapon (source, 3)) 
      setAccountData (account, "funmodev2-weaponID4", getPedWeapon (source, 4)) 
      setAccountData (account, "funmodev2-weaponID5", getPedWeapon (source, 5)) 
      setAccountData (account, "funmodev2-weaponID6", getPedWeapon (source, 6)) 
      setAccountData (account, "funmodev2-weaponID7", getPedWeapon (source, 7)) 
      setAccountData (account, "funmodev2-weaponID8", getPedWeapon (source, -- s8) -->) 
      setAccountData (account, "funmodev2-weaponID9", getPedWeapon (source, 9)) 
      setAccountData (account, "funmodev2-weaponID10", getPedWeapon (source, 10)) 
      setAccountData (account, "funmodev2-weaponID11", getPedWeapon (source, 11)) 
      setAccountData (account, "funmodev2-weaponID12", getPedWeapon (source, 12)) 
      setAccountData (account, "funmodev2-weaponAmmo0", getPedTotalAmmo (source, 0)) 
      setAccountData (account, "funmodev2-weaponAmmo1", getPedTotalAmmo (source, 1)) 
      setAccountData (account, "funmodev2-weaponAmmo2", getPedTotalAmmo (source, 2)) 
      setAccountData (account, "funmodev2-weaponAmmo3", getPedTotalAmmo (source, 3)) 
      setAccountData (account, "funmodev2-weaponAmmo4", getPedTotalAmmo (source, 4)) 
      setAccountData (account, "funmodev2-weaponAmmo5", getPedTotalAmmo (source, 5)) 
      setAccountData (account, "funmodev2-weaponAmmo6", getPedTotalAmmo (source, 6)) 
      setAccountData (account, "funmodev2-weaponAmmo7", getPedTotalAmmo (source, 7)) 
      setAccountData (account, "funmodev2-weaponAmmo8", getPedTotalAmmo (source, -- s8) -->) 
      setAccountData (account, "funmodev2-weaponAmmo9", getPedTotalAmmo (source, 9)) 
      setAccountData (account, "funmodev2-weaponAmmo10", getPedTotalAmmo (source, 10)) 
      setAccountData (account, "funmodev2-weaponAmmo11", getPedTotalAmmo (source, 11)) 
      setAccountData (account, "funmodev2-weaponAmmo12", getPedTotalAmmo (source, 12)) 
    end 
  end 
end 
addEventHandler ("onPlayerQuit", getRootElement(), onQuit) 
  
function onWasted(totalAmmo, killer, killerWeapon, bodypart, stealth) 
  if not( isGuestAccount (getPlayerAccount(source)) ) then 
    local theWeapon = getPedWeapon (source) 
    local weaponAmmo = getPedTotalAmmo (source) 
    fadeCamera (source, false) 
    setTimer (spawnPlayer, 1000, 1, source, 2036.1735839844, -1413.0563964844, 16.9921875, 0, getPedSkin (source), 0, 0, getPlayerTeam(source)) 
    setTimer (setCameraTarget, 1250, 1, source, source) 
    setTimer (fadeCamera, 2000, 1, source, true) 
    setTimer (giveWeapon, 2000, 1, source, theWeapon, weaponAmmo, true) 
  end 
end 
addEventHandler ("onPlayerWasted", getRootElement(), onWasted) 
  
--- 
  
function setTeam() 
local account = getPlayerAccount(source) -- gets players account 
local team = getAccountData (account, "team") -- gets players team 
if (team) and getTeamFromName(team) then 
      setPlayerTeam(source, getTeamFromName(team)) -- sets players team 
     end 
end 
addEventHandler("onPlayerLogin",root,setTeam) -- sets players team on login 
  
function save() 
 local team = getPlayerTeam(source) -- Gets the players team 
local account = getPlayerAccount(source) 
if (team) and not isGuestAccount(account) then -- Checks to see if the player is a guest or not 
setAccountData(account, "team", getTeamName(team)) --saves team 
 end 
    end 
addEventHandler("onPlayerQuit", getRootElement(), save) -- saves team on quit 
  

Link to comment

nikitafloy, дай мне координаты того чувака, который это написал. Я приду и убью его.

Есть ли в МТА возможность сохранения координат игрока/транспорта прямо из игры ?(аналог /save в SA-MP)

Пишите простенький скрипт с биндом на клавишу. 5 строк кода лень написать?

Link to comment
nikitafloy, дай мне координаты того чувака, который это написал. Я приду и убью его.
Есть ли в МТА возможность сохранения координат игрока/транспорта прямо из игры ?(аналог /save в SA-MP)

Пишите простенький скрипт с биндом на клавишу. 5 строк кода лень написать?

Я хотел попробовать, на вики искал статьи про работу с файлами, но нашёл только про XML, но думаю лучше с простыми файлами работать...

Link to comment
Я хотел попробовать, на вики искал статьи про работу с файлами, но нашёл только про XML, но думаю лучше с простыми файлами работать...

https://wiki.multitheftauto.com/wiki/Se ... _functions

Поражаюсь, насколько все стали ленивы. Заходите на главную страницу, в меню кликаете на Server Functions, все функции перед тобой. Даже по категориям разбиты!

Link to comment

Люди помогите понять структуру скриптов, я вроде уже все по чучуть понял, но путаюсь с агрументами в скобках возле функции (выделил):

function playerDied[u][b](totalAmmo, killer, killerWeapon, bodypart)[/b][/u] 
    outputChatBox(getPlayerName(source).." умер!") 
end 
addEventHandler("onPlayerWasted",getRootElement(),playerDied) 
  

объясните кому не лень просто и ясно что за что отвечает и когда оно нужно когда нет, желательно на каком-то ясном примере, буду очень признателен.

Кидать ссылки на мта-вики и уроки lua не надо, а хотя если есть очень толковый туториал давайте :lol:

Edited by Guest
Link to comment
Люди помогите понять структуру скриптов, я вроде уже все по чучуть понял, но путаюсь с агрументами в скобках возле функции (выделил):

function playerDied[u][b](totalAmmo, killer, killerWeapon, bodypart)[/b][/u] 
    outputChatBox(getPlayerName(source).." умер!") 
end 
addEventHandler("onPlayerWasted",getRootElement(),playerDied) 
  

объясните кому не лень просто и ясно что за что отвечает и когда оно нужно когда нет, желательно на каком-то ясном примере, буду очень признателен.

Кидать ссылки на мта-вики и уроки lua не надо, а хотя если есть очень толковый туториал давайте :lol:

(totalAmmo, killer, killerWeapon, bodypart) --- спешлы которые можно использовать,если те есть в addEventHandler эвенте(событии) 

https://wiki.multitheftauto.com/wiki/OnPlayerWasted -- почитай,поймешь что за что отвечает.В каждом событии РАЗНЫЕ спешлы и они идут по порядку!!! Если первое,это Игрок,значит будь он source,будь он thePlayer или ped,и даже weapon это будет Игрок! Ты задаешь лишь название к спешлу который привязан к событию

Link to comment
Люди помогите понять структуру скриптов, я вроде уже все по чучуть понял, но путаюсь с агрументами в скобках возле функции (выделил):

function playerDied[u][b](totalAmmo, killer, killerWeapon, bodypart)[/b][/u] 
    outputChatBox(getPlayerName(source).." умер!") 
end 
addEventHandler("onPlayerWasted",getRootElement(),playerDied) 
  

объясните кому не лень просто и ясно что за что отвечает и когда оно нужно когда нет, желательно на каком-то ясном примере, буду очень признателен.

Кидать ссылки на мта-вики и уроки lua не надо, а хотя если есть очень толковый туториал давайте :lol:

Тебе как раз и нужно накидать ссылок на МТА-вики и на доки по Lua . Учится по своим догадкам не очень хорошо.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...