Kostyan_Sigaev Posted April 22, 2023 Share Posted April 22, 2023 Около года назад с друзьями играли нашем сервере 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,z = 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,z = getElementPosition(tent) local col = getElementData(tent,"parent") local rotx,roty,rot = getElementRotation(getElementData(tent,"parent")) local dataT = {} local noDeleteTent = false for i,v 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,z = 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,v 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,v 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,v 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,v in pairs(data) do setElementData(vehCol,v[1],v[2]) end end В общем, я не знаю, в чём проблема... Год назад всё нормальн оработало, но сейчас я просто запустил этот сервер и спавн зомби и загрузка вращения палаток перестали работать... Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now