Jump to content

Внезапные проблемы с DayZ сервером


Recommended Posts

Около года назад с друзьями играли нашем сервере DayZ, сборку которого скачали откуда-то... После того сервер мирно лежал на диске и никому не мешал, но недавно я его случайно нашел и предложил друзьям снова вместе играть, после чего запустил и увидел горсть ошибок в консоли, хотя раньше их не было и сервер работал нормально. В общем, почти все проблемы я решил, только теперь остаются всего 2:

1. Зомби не спавнятся.

2. Сохраненные палатки при загрузке не загружают свой угол поворота, а только позицию и данные.

Итак, проблема номер 1:

В консоли вылезла ошибка: ERROR: [DayZ-MTA]\DayZ\zombies.lua:338: attempt to perform arithmetic on a boolean value

Вот функция, на которую ссылается ошибка:

function createZomieForPlayer (x,y,z)
   x,y,= getElementPosition(source)
   counter = 0
   
   
   --outputChatBox ( "Zumbis Perto: " .. zombiesaliveee, player, 0, 238, 0, true )
   --outputChatBox ( "Zumbis Limite: " .. zombieslimite, player, 0, 238, 0, true )
   
   if getElementData(source,"lastzombiespawnposition") then
      local xL,yL,zL = getElementData(source,"lastzombiespawnposition")[1] or false,getElementData(source,"lastzombiespawnposition")[2] or false,getElementData(source,"lastzombiespawnposition")[3] or false
      if xL then
         if getDistanceBetweenPoints3D (x,y,z,xL,yL,zL) < 20 then
         --outputChatBox("Server: canceled zombie create (reason: is near old position)")
            return
         end
      end
   end  
 
     --Строка ниже и есть строка 338
   if getElementData(source, "spawnedzombies") + 3 <= gameplayVariables.playerzombies then -- If spawned zombies + 3 lower or equal to 9 -> Create zombies -> Increase digit (default: 9) to let more zombies spawn. WARNING: THE HIGHER THE VALUE, THE MORE LAG CAN OCCUR!
    -- for i = 1, gameplayVariables["amountzombies"] = 2 do --здесь ранее была ошибка: 'do' expected near '='
    for i = 1, gameplayVariables["amountzombies"] do
      counter = counter+1
     
      local number1 = math.random(-49,40)
      local number2 = math.random(-38,42)

     
      randomZskin = math.random ( 1, table.getn ( ZombiePedSkins ) )
      local zombie = createPed ( tonumber( ZombiePedSkins[randomZskin] ),x+number1, y+number2,z, math.random(0, 360))
      local Zx, Zy, Zz = getElementPosition( zombie )
     
      setElementData(zombie,"zombie",true)
    --   setElementData(zombie,"blood",gameplayVariables["zombieblood"] = 10) -- [ID:0000009 - Zombie menace] //L
      setElementData(zombie,"blood",gameplayVariables["zombieblood"])
      setElementData(zombie,"owner",source)
     
      --------------  
      if not rot then rot = math.random (1,359) end
      if not interior then interior = 0 end
      if not dimension then dimension = 0 end
      setTimer ( setElementInterior, 100, 1, zombie, tonumber(interior)) --sets interior
      setTimer ( setElementDimension, 100, 1, zombie, tonumber(dimension)) --sets dimension
      setElementData ( zombie, "zombie", true  )
      setElementData ( zombie, "forcedtoexist", true  )
      setTimer ( function (zombie, rot) if ( isElement ( zombie ) ) then setPedRotation ( zombie, rot ) end end, 500, 1, zombie, rot )
      setTimer ( function (zombie) if ( isElement ( zombie ) ) then setElementData ( zombie, "status", "idle" ) end end, 2000, 1, zombie )
      setTimer ( function (zombie) if ( isElement ( zombie ) ) then setElementData ( zombie, "forcedtoexist", true ) end end, 1000, 1, zombie )
      setTimer ( function (zombie) if ( isElement ( zombie ) ) then table.insert( everyZombie, zombie ) end end, 1000, 1, zombie )
      triggerClientEvent ( "Zomb_STFU", getRootElement(), zombie )
      -- ( "#ff0000[INFO]: #ffffffCriou Zumbi ", player, 0, 238, 0, true )  
      --------------  
     
    end
   setElementData(source,"lastzombiespawnposition",{x,y,z})
   setElementData(source,"spawnedzombies",getElementData(source,"spawnedzombies")+3)
   zombiesaliveee = zombiesaliveee + 3
   end
   

end
addEvent("createZomieForPlayer",true)
addEventHandler("createZomieForPlayer",getRootElement(),createZomieForPlayer)
 
     getElementData(source, "spawnedzombies") ссылается на:
 
function createZombieTable (player)
      --createtabel
      setElementData(player,"playerZombies",{"no","no","no","no","no","no","no","no","no"})
      setElementData(player,"spawnedzombies",0)
end

Я, честно говоря, уже и понять не могу, в чём может быть дело...

Проблема номер 2:

Скрипт сохранения палаток и машин сохраняет их в свой .db файл. Я просматривал содержимое этого файла, там всё впорядке, но вот уже в игре при вводе команды /load всё считывается из базы данных и машины с палатками возвращаются на карту, вот только вращение у машин сохраняется, а у палаток сбрасывается в 0.

Вот функции загрузки и сохранения машин и палаток:

function loadDataBase()
    local qh = dbQuery(database,"SELECT * FROM vehicles")
    if qh then
        local result,num_affected_rows,errmsg = dbPoll(qh,-1)
        if num_affected_rows > 0 then
            for result,row in pairs (result) do
                createNewVehicle(row)
            end
        end
    end
    local qh = dbQuery(database,"SELECT * FROM tents")
    if qh then
        local result,num_affected_rows,errmsg = dbPoll(qh,-1)
        if num_affected_rows > 0 then
            for result,row in pairs (result) do
                createNewTent(row,"tent")
            end
        end
    end
end

function saveDataBased()
    outputChatBox(" ",getRootElement(),255,255,255,true)
    outputChatBox("#FF0000Project Paradise:#FFFFFF Идет сохранение данных сервера...",getRootElement(),255,255,255,true)
    destroyDataBase("tents")
    destroyDataBase("vehicles")
    for i,tent in ipairs(getElementsByType("colshape")) do
        if getElementData(tent,"tent") then
            local x,y,= getElementPosition(tent)
            local col = getElementData(tent,"parent")
            local rotx,roty,rot = getElementRotation(getElementData(tent,"parent"))
            local dataT = {}
            local noDeleteTent = false
            for i,in ipairs(serverData["items"]) do
                local data = getElementData(tent,v[1]) or 0
                if data > 0 then
                    noDeleteTent = true
                end
                table.insert(dataT,{v[1],data})
            end
            if noDeleteTent == true then
                local result = dbQuery( database,"INSERT INTO  `tents` VALUES ('"..x.."', '"..y.."', '"..z.."','"..toJSON(dataT).."', '"..rot.."');")
                dbFree (result)
            else
                destroyElement(tent)
                destroyElement(col)
            end
        end
    end
    for index,element in ipairs(getElementsByType("vehicle")) do
        local x,y,= getElementPosition(element)
        local col = getElementData(element,"parent")
        local rotx,roty,rot = getElementRotation(element)
        local model = getElementModel(element)
        local health = getElementHealth(element)
        local dataT = {}
        for i,in ipairs(serverData["items"]) do
            if col ~= false then
                local data = getElementData(col,v[1]) or 0
                table.insert(dataT,{v[1],data})
            end
        end
        for i,in ipairs(serverData["vehicle"]) do
            if col ~= false then
                local data = getElementData(col,v[1]) or 0
                table.insert(dataT,{v[1],data})
            end
        end
        local result = dbQuery(database,"INSERT INTO  `vehicles` VALUES ('"..model.."','"..x.."', '"..y.."', '"..z.."', '"..rot.."','"..health.."', '"..toJSON(dataT).."');")
        dbFree(result)
    end
    outputChatBox("#FF0000Project Paradise:#FFFFFF Сохранение данных успешно завершено..",getRootElement(),255,255,255,true)
    setTimer ( function()
    baseCopy()
    end,10000,1)
end

По моему, здесь всё впорядке и я подозреваю, что дело может крыться в функции установки палатки:

function createNewTent(row,class)
    local data = fromJSON(row['data'])
    local x = tonumber(row['x'])
    local y = tonumber(row['y'])
    local z = tonumber(row['z'])
    local r = tonumber(row['r'])
    if class == "tent" then
        tent = createObject(2220,x,y,z,0,0,r)
        tentCol = createColSphere(x,y,z,4)
        attachElements(tentCol,tent,0,0,0)
        setElementData(tentCol,"parent",tent)
        setElementData(tent,"parent",tentCol)
        setElementData(tentCol,"tent",true)
        setElementData(tentCol,"vehicle",true)
        for i,in pairs(data) do
            setElementData(tentCol,v[1],v[2])
        end
        if getElementData(tentCol,"MAX_Slots") == false or nil then
            setElementData(tentCol,"MAX_Slots",200)
        end
        if getElementData(tentCol,"MAX_Slots") == 200 then
            setElementModel(tent,2220)
        elseif getElementData(tentCol,"MAX_Slots") == 300 then
            setElementModel(tent,2218)
        elseif getElementData(tentCol,"MAX_Slots") == 500 then
            setElementModel(tent,2222)
        end
    end
end

Хотя она идентична с функцией установки машин, но всё-равно почему-то не хочет работать... Функция установки машин:

function createNewVehicle(row)
    local model = tonumber(row['model'])
    local data = fromJSON(row['data'])
    local x = tonumber(row['x'])
    local y = tonumber(row['y'])
    local z = tonumber(row['z'])
    local r = tonumber(row['r'])
    local health = tonumber(row['health'])
    veh = createVehicle(model,x,y,z,0,0,r)
    vehCol = createColSphere(x,y,z,3)
    attachElements(vehCol,veh,0,0,0)
    setElementData(vehCol,"parent",veh)
    setElementData(veh,"parent",vehCol)
    setElementData(vehCol,"vehicle",true)
    setElementData(vehCol,"ID",row)
    setElementHealth(veh,health)
    for i,in pairs(data) do
        setElementData(vehCol,v[1],v[2])
    end
end

В общем, я не знаю, в чём проблема... Год назад всё нормальн оработало, но сейчас я просто запустил этот сервер и спавн зомби и загрузка вращения палаток перестали работать...

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...