Jump to content

Erreur & Warning


Recommended Posts

Salut à tous !

J'aurai besoin de vos aide en effet je "travaille" sur un serveur DayZ et j'aurai quelques soucis. Dès que les zombies meurent ou spawn j'ai souvent des messages d'erreur !

Voici les messages :

[2019-12-04 20:15:15] WARNING: slothbot\sbserver.Lua:877: Bad argument @ 'getElementPosition' [Expected element at argument 1, got boolean]
[2019-12-04 20:15:15] WARNING: slothbot\sbserver.Lua:879: Bad argument @ 'getDistanceBetweenPoints3D' [Expected vector3 at argument 4, got boolean]
[2019-12-04 20:15:15] ERROR: slothbot\sbserver.Lua:880: attempt to compare number with boolean
[2019-12-04 20:15:15] WARNING: slothbot\sbserver.Lua:877: Bad argument @ 'getElementPosition' [Expected element at argument 1, got boolean]
[2019-12-04 20:15:21] WARNING: slothbot\sbserver.Lua:879: Bad argument @ 'getDistanceBetweenPoints3D' [Expected vector3 at argument 4, got boolean]
[2019-12-04 20:15:21] ERROR: slothbot\sbserver.Lua:880: attempt to compare number with boolean
[2019-12-04 20:15:21] WARNING: slothbot\sbserver.Lua:877: Bad argument @ 'getElementPosition' [Expected element at argument 1, got boolean]
[2019-12-04 20:15:21] WARNING: slothbot\sbserver.Lua:879: Bad argument @ 'getDistanceBetweenPoints3D' [Expected vector3 at argument 4, got boolean]
[2019-12-04 20:15:21] ERROR: slothbot\sbserver.Lua:880: attempt to compare number with boolean
[2019-12-04 20:15:58] WARNING: slothbot\sbserver.Lua:877: Bad argument @ 'getElementPosition' [Expected element at argument 1, got boolean]
[2019-12-04 20:15:58] WARNING: slothbot\sbserver.Lua:879: Bad argument @ 'getDistanceBetweenPoints3D' [Expected vector3 at argument 4, got boolean]
[2019-12-04 20:15:58] ERROR: slothbot\sbserver.Lua:880: attempt to compare number with boolean
[2019-12-04 20:16:42] WARNING: slothbot\sbserver.Lua:877: Bad argument @ 'getElementPosition' [Expected element at argument 1, got boolean]
[2019-12-04 20:16:42] WARNING: slothbot\sbserver.Lua:879: Bad argument @ 'getDistanceBetweenPoints3D' [Expected vector3 at argument 4, got boolean]
[2019-12-04 20:16:42] ERROR: slothbot\sbserver.Lua:880: attempt to compare number with boolean

Voici le fichier en question :

function guard_move (ped, oldpx, oldpy, oldpz)
	if (isElement(ped)) then
		if (getElementData ( ped, "status" ) ==  "guarding" ) and (getElementData (ped, "slothbot") == true) then
			local guardcol = getElementData ( ped, "guardcol" )
			local pedhp = getElementHealth ( ped )
			if pedhp > 0 then
				local tx,ty,tz = getElementPosition( guardcol )
				local px,py,pz = getElementPosition( ped )
				local fdist = (getDistanceBetweenPoints3D (px, py, pz, tx, ty, tz))
				if fdist > 4 then
					triggerClientEvent ( "bot_Forwards", ped )
					local pdistance = (getDistanceBetweenPoints3D (oldpx, oldpy, oldpz, px, py, pz))
					if (pdistance < 1 ) then
						local decide = math.random( 1, 7 ) -- randomly decide to
						if decide == 1 then -- do nothing
							setTimer ( guard_move, 600, 1, ped, px, py, pz)
						elseif decide <4 then -- jump
							local weap = getPedWeaponSlot(ped)
							if (weap == 1) or (weap == 7) then
								setPedWeaponSlot(ped, 0 )
								triggerClientEvent ( "bot_Jump", ped )
								setTimer ( setPedWeaponSlot, 850, 1, ped, weap)
							else
								triggerClientEvent ( "bot_Jump", ped )
							end
							setTimer ( guard_move, 600, 1, ped, px, py, pz)
						else -- randomly turn a new direction, walk a bit, then resume
							local randomangle = math.random( 1, 360 )
							setPedRotation( ped, randomangle )
							setTimer ( guard_move, 1200, 1, ped, px, py, pz)
						end
					else -- if the ped isnt stuck
						setTimer ( guard_move, 700, 1, ped, px, py, pz)
					end
				else
					triggerClientEvent ( "bot_Stop", ped ) --already arrived at place to guard
					if (getElementData ( ped, "forcedmoving" ) ==  true ) then
						setElementData ( ped, "forcedmoving", false )
					end
					setTimer ( guard_move, 1500, 1, ped, px, py, pz) -- keep looping in case ped gets moved some other way
				end
			end
		end
	end
end

Je tiens juste à dire  la première ligne = la 871 sur mon fichier

 

Merci d'avance pour votre aide !

Link to comment
  • Moderators

Bonsoir Dewen,

Alors de ce que j'en comprends, il est possible d'avoir un bot qui garde une position donnée.
Normalement le système est censé lui créer un colshape qui représente le point à garder et stock cette instance de colshape dans un element data du bot ("guardcol"). Hors si tu as ces erreurs qui là, ça signifie qu'on a bien un bot jouant le rôle de gardien (puisque son "status" est "guarding") mais qu'on ne lui a pas affecté de colshape puisque "guardcol" vaut très certainement false lors de sa récupération ligne 874.

Et on se doute que ce n'est pas censé arriver puisqu'on ne vient pas vérifier si "guardcol" est une valeur valide et on l'utilise directement ligne 877 pour récupérer sa position (= la position à garder).

Donc il y a 2 choses à faire:

  1. comprendre pourquoi on se retrouve avec un bot qui doit monter la garde sur un colshape qui n'existe pas (ou qui existe mais qui ne lui a pas été affecté correctement) et corriger le problème à la source donc.
  2. blinder le code de guard_move pour éviter de continuer l'exécution du code si on a un gardien sans colshape.

Pour le 1er il faut regarder dans le reste du gamemode.

Pour le 2ème on peut rajouter une condition dans le "if" ligne 876:

function guard_move (ped, oldpx, oldpy, oldpz)
    if (isElement(ped)) then
        if (getElementData ( ped, "status" ) ==  "guarding" ) and (getElementData (ped, "slothbot") == true) then
            local guardcol = getElementData ( ped, "guardcol" )
            local pedhp = getElementHealth ( ped )
            if guardcol and pedhp > 0 then -- L.876 la condition vérifie maintenant que guardcol ne soit pas égale à false
                local tx,ty,tz = getElementPosition( guardcol )
                local px,py,pz = getElementPosition( ped )
                local fdist = (getDistanceBetweenPoints3D (px, py, pz, tx, ty, tz))
                if fdist > 4 then
                    triggerClientEvent ( "bot_Forwards", ped )
                    local pdistance = (getDistanceBetweenPoints3D (oldpx, oldpy, oldpz, px, py, pz))
                    if (pdistance < 1 ) then
                        local decide = math.random( 1, 7 ) -- randomly decide to
                        if decide == 1 then -- do nothing
                            setTimer ( guard_move, 600, 1, ped, px, py, pz)
                        elseif decide <4 then -- jump
                            local weap = getPedWeaponSlot(ped)
                            if (weap == 1) or (weap == 7) then
                                setPedWeaponSlot(ped, 0 )
                                triggerClientEvent ( "bot_Jump", ped )
                                setTimer ( setPedWeaponSlot, 850, 1, ped, weap)
                            else
                                triggerClientEvent ( "bot_Jump", ped )
                            end
                            setTimer ( guard_move, 600, 1, ped, px, py, pz)
                        else -- randomly turn a new direction, walk a bit, then resume
                            local randomangle = math.random( 1, 360 )
                            setPedRotation( ped, randomangle )
                            setTimer ( guard_move, 1200, 1, ped, px, py, pz)
                        end
                    else -- if the ped isnt stuck
                        setTimer ( guard_move, 700, 1, ped, px, py, pz)
                    end
                else
                    triggerClientEvent ( "bot_Stop", ped ) --already arrived at place to guard
                    if (getElementData ( ped, "forcedmoving" ) ==  true ) then
                        setElementData ( ped, "forcedmoving", false )
                    end
                    setTimer ( guard_move, 1500, 1, ped, px, py, pz) -- keep looping in case ped gets moved some other way
                end
            end
        end
    end
end

 

Edited by Citizen
Link to comment
11 hours ago, Citizen said:

Bonsoir Dewen,

Alors de ce que j'en comprends, il est possible d'avoir un bot qui garde une position donnée.
Normalement le système est censé lui créer un colshape qui représente le point à garder et stock cette instance de colshape dans un element data du bot ("guardcol"). Hors si tu as ces erreurs qui là, ça signifie qu'on a bien un bot jouant le rôle de gardien (puisque son "status" est "guarding") mais qu'on ne lui a pas affecté de colshape puisque "guardcol" vaut très certainement false lors de sa récupération ligne 874.

Et on se doute que ce n'est pas censé arriver puisqu'on ne vient pas vérifier si "guardcol" est une valeur valide et on l'utilise directement ligne 877 pour récupérer sa position (= la position à garder).

Donc il y a 2 choses à faire:

  1. comprendre pourquoi on se retrouve avec un bot qui doit monter la garde sur un colshape qui n'existe pas (ou qui existe mais qui ne lui a pas été affecté correctement) et corriger le problème à la source donc.
  2. blinder le code de guard_move pour éviter de continuer l'exécution du code si on a un gardien sans colshape.

Pour le 1er il faut regarder dans le reste du gamemode.

Pour le 2ème on peut rajouter une condition dans le "if" ligne 876:


function guard_move (ped, oldpx, oldpy, oldpz)
    if (isElement(ped)) then
        if (getElementData ( ped, "status" ) ==  "guarding" ) and (getElementData (ped, "slothbot") == true) then
            local guardcol = getElementData ( ped, "guardcol" )
            local pedhp = getElementHealth ( ped )
            if guardcol and pedhp > 0 then -- L.876 la condition vérifie maintenant que guardcol ne soit pas égale à false
                local tx,ty,tz = getElementPosition( guardcol )
                local px,py,pz = getElementPosition( ped )
                local fdist = (getDistanceBetweenPoints3D (px, py, pz, tx, ty, tz))
                if fdist > 4 then
                    triggerClientEvent ( "bot_Forwards", ped )
                    local pdistance = (getDistanceBetweenPoints3D (oldpx, oldpy, oldpz, px, py, pz))
                    if (pdistance < 1 ) then
                        local decide = math.random( 1, 7 ) -- randomly decide to
                        if decide == 1 then -- do nothing
                            setTimer ( guard_move, 600, 1, ped, px, py, pz)
                        elseif decide <4 then -- jump
                            local weap = getPedWeaponSlot(ped)
                            if (weap == 1) or (weap == 7) then
                                setPedWeaponSlot(ped, 0 )
                                triggerClientEvent ( "bot_Jump", ped )
                                setTimer ( setPedWeaponSlot, 850, 1, ped, weap)
                            else
                                triggerClientEvent ( "bot_Jump", ped )
                            end
                            setTimer ( guard_move, 600, 1, ped, px, py, pz)
                        else -- randomly turn a new direction, walk a bit, then resume
                            local randomangle = math.random( 1, 360 )
                            setPedRotation( ped, randomangle )
                            setTimer ( guard_move, 1200, 1, ped, px, py, pz)
                        end
                    else -- if the ped isnt stuck
                        setTimer ( guard_move, 700, 1, ped, px, py, pz)
                    end
                else
                    triggerClientEvent ( "bot_Stop", ped ) --already arrived at place to guard
                    if (getElementData ( ped, "forcedmoving" ) ==  true ) then
                        setElementData ( ped, "forcedmoving", false )
                    end
                    setTimer ( guard_move, 1500, 1, ped, px, py, pz) -- keep looping in case ped gets moved some other way
                end
            end
        end
    end
end

 

Je tiens à te remercier pour la réponse qui a été très rapide ! Je vais d'abord essayer la 2ème solution et si sa persiste je vais devoir surement revenir vers vous ^^

  • Like 1
Link to comment
1 hour ago, Citizen said:

Ok mais il faut bien se dire que tu vas simplement masquer le problème au lieu de le corriger.

En effet je n'ai plus ma console qui est spam par se problème mais j'ai d'autres erreurs

==================================================================
= Multi Theft Auto: San Andreas v1.5.7
==================================================================
= Server name      : Dayz [Test]
= Server IP address: auto
= Server port      : 22003
= 
= Log file         : .. 1.5/server/mods/deathmatch/logs/server.log
= Maximum players  : 32
= HTTP port        : 22005
= Voice Chat       : Disabled
= Bandwidth saving : Medium
==================================================================
[2019-12-05 13:01:42] Resource 'Mods' requests some acl rights. Use the command 'aclrequest list Mods'
[2019-12-05 13:02:22] Resource 'mapmanager' requests some acl rights. Use the command 'aclrequest list mapmanager'
[2019-12-05 13:03:09] Resources: 251 loaded, 0 failed
[2019-12-05 13:03:09] Starting resources...
[2019-12-05 13:03:10] Server minclientversion is now 1.5.7-9.18957.0
[2019-12-05 13:03:11] INFO: MAPMANAGER: Some important ACL permissions are missing. To ensure the correct functioning of Mapmanager, please write: aclrequest allow mapmanager all
[2019-12-05 13:03:13] WARNING: File 'items/backpack_Rucksack.txd' in resource 'DayZ' contains errors.
[2019-12-05 13:03:17] WARNING: [DayZ]\DayZ\survivorSystem.Lua:2339: Bad argument @ 'addEventHandler' [Expected element at argument 2, got nil]
[2019-12-05 13:03:17] WARNING: [DayZ]\DayZ\survivorSystem.Lua:2340: Bad argument @ 'addEventHandler' [Expected element at argument 2, got nil]
[2019-12-05 13:03:18] Gamemode 'DayZ' started.
[2019-12-05 13:03:34] ERROR: [Ressources]\SytemeDeTeam\gang_server.Lua:4: exports: Call to non-running server resource (scoreboard) [string "?"]
[2019-12-05 13:03:34] Creating new DB table gangs
[2019-12-05 13:03:34] Creating new DB table gang_members
[2019-12-05 13:03:34] Creating new DB table level_system
[2019-12-05 13:03:46] Querying MTA master server... success! (Auto detected IP:**.**.**.**)
[2019-12-05 13:03:46] Authorized serial account protection is enabled for the ACL group(s): `Admin`  See http://mtasa.com/authserial
[2019-12-05 13:03:46] WARNING: <owner_email_address> not set
[2019-12-05 13:03:46] Server started and is ready to accept connections!
[2019-12-05 13:03:46] To stop the server, type 'shutdown' or press Ctrl-C
[2019-12-05 13:03:46] Type 'help' for a list of commands.
[2019-12-05 13:03:48] Starting addon_tentfull
[2019-12-05 13:03:48] startResource: Resource 'addon_tentfull' started
[2019-12-05 13:05:33] CONNECT: Dewen connected (IP: ***.**.*.**  Serial: *********************************  Version: 1.5.7-9.20348.0)
[2019-12-05 13:05:38] JOIN: Dewen joined the game (IP: ***.**.**.**)
[2019-12-05 13:06:39] WARNING: [Ressources]\CreadorLogeo\silvers.Lua:65: Bad argument @ 'isObjectInACLGroup' [Expected acl-group at argument 2, got boolean]
[2019-12-05 13:06:39] LOGIN: (Everyone, Admin, Console, PanelAdmin) Dewen successfully logged in as 'Dewen' (IP: ***.***.*.***  Serial: *******************************)
[2019-12-05 13:06:46] ERROR: Client (Dewen) triggered serverside event onZombieLostPlayer, but event is not added serverside
[2019-12-05 13:06:52] ERROR: Client (Dewen) triggered serverside event onZombieLostPlayer, but event is not added serverside
[2019-12-05 13:07:31] WARNING: [DayZ]\DayZ\survivorSystem.Lua:769: Bad argument @ 'destroyElement' [Expected element at argument 1, got nil]
[2019-12-05 13:07:35] WARNING: [DayZ]\DayZ\zombies.Lua:223: Bad argument @ 'getElementData' [Expected element at argument 1, got boolean]
[2019-12-05 13:07:35] ERROR: [DayZ]\DayZ\zombies.Lua:223: attempt to perform arithmetic on a boolean value
[2019-12-05 13:07:35] WARNING: [DayZ]\DayZ\zombies.Lua:223: Bad argument @ 'getElementData' [Expected element at argument 1, got boolean]
[2019-12-05 13:07:35] ERROR: [DayZ]\DayZ\zombies.Lua:223: attempt to perform arithmetic on a boolean value

: Mon SurvivorSytsem.Lua (pour l'erreur ligne 769. Dans mon fichier la ligne 769 = l'avant dernière)

elementWeaponBack2 = {}
function weaponSwitchBack2 ( previousWeaponID, currentWeaponID )
    local weapon2 = getElementData(source,"currentweapon_2")
    if not weapon2 then return end
    local ammoData2,weapID2 = getWeaponAmmoType(weapon2)
    local x,y,z = getElementPosition(source)
    local rx,ry,rz = getElementRotation(source)
    triggerClientEvent(source, "MultiArmasSkins2", source)
    if previousWeaponID == weapID2 then
        if elementWeaponBack2[source] then
            detachElementFromBone(elementWeaponBack2[source])
            destroyElement(elementWeaponBack2[source])
            elementWeaponBack2[source] = false
        end
        if weapon2 == "MP5A5" then 
            elementWeaponBack2[source] = createObject(353,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.875) 
        elseif weapon2 == "MP5A5 SD" then 
            elementWeaponBack2[source] = createObject(353,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.875)
        elseif weapon2 == "M16 Christmas Edition" then 
            elementWeaponBack2[source] = createObject(353,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.875) 			
        elseif weapon2 == "Bizon PP-19 SD" then 
            elementWeaponBack2[source] = createObject(353,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.875)     
        elseif weapon2 == "Pelle" then 
            elementWeaponBack2[source] = createObject(337,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.0)
        elseif weapon2 == "Bate" then 
            elementWeaponBack2[source] = createObject(336,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.0)
        elseif weapon2 == "Hache" then 
            elementWeaponBack2[source] = createObject(339,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.0)
        elseif weapon2 == "Fusil de Chasse " then 
            elementWeaponBack2[source] = createObject(350,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.875)
        elseif weapon2 == "M9" then 
            elementWeaponBack2[source] = createObject(346,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.0)
        elseif weapon2 == "Micro UZI SD" then 
            elementWeaponBack2[source] = createObject(352,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.0)
        elseif weapon2 == "Micro UZI" then 
            elementWeaponBack2[source] = createObject(352,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.0)
        elseif weapon2 == "M9 SD" then 
            elementWeaponBack2[source] = createObject(339,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.0)
        elseif weapon2 == "Revolver" then 
            elementWeaponBack2[source] = createObject(348,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.0)
        elseif weapon2 == "Couteau" then 
            elementWeaponBack2[source] = createObject(335,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.0)
        elseif weapon2 == "Couteau PointBlack" then 
            elementWeaponBack2[source] = createObject(335,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.0)
        elseif weapon2 == "Marteau" then 
            elementWeaponBack2[source] = createObject(333,x,y,z) 
            setObjectScale(elementWeaponBack2[source],0.0)    
        else
          elementWeaponBack2[source] = createObject(getWeaponObjectID(weapID2),x,y,z)
          setObjectScale(elementWeaponBack2[source],0.875)
        end  
        --[[if elementWeaponBack2[source] then
            attachElementToBone(elementWeaponBack2[source],source,3,-0.18,-0.05,-0.1,-0.1,0,260)
        else
            attachElementToBone(elementWeaponBack2[source],source,3,-0.18,-0.05,-0.1,-0.1,0,260) 
            end    ]]    --3,-0.18,-0.05,-0.1,-0.1,0,260)
        if elementWeaponBack2[source] then    --3,-0.18,-0.31,-0.1,0,270,-90) esta es pocison buena                  
          attachElementToBone(elementWeaponBack2[source],source,3,-0.20,-0.31,-0.1,0,270,-90) 
        else 
          attachElementToBone(elementWeaponBack2[source],source,3,-0.20,-0.31,-0.1,0,270,-90)
        end 
    elseif currentWeaponID == weapID2 then
      detachElementFromBone(elementWeaponBack2[source])
      destroyElement(elementWeaponBack2[source])
      elementWeaponBack2[source] = false

L'erreur ligne 2339 :

----function = ligne 2324
function Player ( thePlayer, dim )  
  local nivel = getElementData(thePlayer, "level")
  if dim == true and nivel > 10 then
    setElementData ( thePlayer, "blood", 20000 )
    setElementData( thePlayer,"food",100)
    setElementData( thePlayer,"thirst",100)
    setElementData( thePlayer,"brokenbone",false)
    setElementData( thePlayer,"bleeding",0)
    setElementData( thePlayer,"pain",false)
    setElementData( thePlayer,"infection",false)
    triggerClientEvent("onRollMessageStart", thePlayer, " #FFFFFFVous avez guéri et nourri!", 255, 255, 255)
  else
    triggerClientEvent("onRollMessageStart", thePlayer, " #FFFFFFVous avez besoin du niveau 10!", 255, 5, 0)
  end
end
addEventHandler ( "onMarkerHit", Blood, Player )
addEventHandler ( "onMarkerHit", Blood2, Player )

 le fichier Zombies.Lua pour l'erreur l.223


----function = ligne 193
function zombieKilled (killer,headshot)
    if killer then
        setElementData(killer,"zombieskilled",getElementData(killer,"zombieskilled")+1)
		setElementData(killer,"experience",getElementData(killer,"experience")+115)
    end 
        local skin = getElementModel(source)
        local x,y,z = getElementPosition(source)
        local ped = createPed(skin,x,y,z)
        local pedCol = createColSphere(x,y,z,1.5)
        killPed(ped)
        setTimer(destroyDeadZombie,360000 ,1,ped,pedCol)
        attachElements (pedCol,ped,0,0,0)
        setElementData(pedCol,"parent",ped)
        setElementData(pedCol,"playername","Zombie")
        setElementData(pedCol,"deadman",true)
        setElementData(ped,"deadzombie",true)
        setElementData(pedCol,"deadman",true)
        local time = getRealTime()
        local hours = time.hour
        local minutes = time.minute
        setElementData(pedCol,"deadreason","Zombie mort. Quelqu'un est passe par ici, heure estimee de la mort: "..hours..":"..minutes..".")
        for i, item in ipairs(itemTableZombies) do
            local value =  math.percentChance (item[5]/2.5,1)
                setElementData(pedCol,item[1],value)
            local ammoData,weapID = getWeaponAmmoType (item[1],true)
                if ammoData and value > 0 then
                  setElementData(pedCol,ammoData,1)
                end
        end
        local zombieCreator = getElementData(source,"owner")
        setElementData(zombieCreator,"spawnedzombies",getElementData(zombieCreator,"spawnedzombies")-1)
        destroyElement(source)
        if headshot == true then
            setElementData(killer,"headshots",getElementData(killer,"headshots")+1)
			setElementData(killer,"experience",getElementData(killer,"experience")+63)
        end 
end

 

Link to comment
  • Moderators
11 hours ago, Dewen said:

: Mon SurvivorSytsem.Lua (pour l'erreur ligne 769. Dans mon fichier la ligne 769 = l'avant dernière)

Pareil, il faut blinder le code pour ne pas l'exécuter si ce qu'on veut destroy n'est pas une valeur valide:

elseif currentWeaponID == weapID2 and elementWeaponBack2[source] then

 

11 hours ago, Dewen said:

L'erreur ligne 2339 :


addEventHandler ( "onMarkerHit", Blood, Player )
addEventHandler ( "onMarkerHit", Blood2, Player )

 

Blood et Blood2 sont censés être 2 markers de santé sur la map. Je peux rien faire à ta place ici. supprime le code ou crée les 2 markers.

11 hours ago, Dewen said:

 le fichier Zombies.Lua pour l'erreur l.222


local zombieCreator = getElementData(source,"owner")
setElementData(zombieCreator,"spawnedzombies",getElementData(zombieCreator,"spawnedzombies")-1)

 

Là le code est clairement prévu pour que les zombies puissent être créé par des joueurs et lorsque le zombie est créé par un joueur, on retient quel joueur l'a créé en le mettant dans l'element data "owner" du zombie. Lorsqu'un zombie meurt, il passe dans ce code et la source de cet event est le zombie en question.

Si c'est un zombie classique, il n'aura pas de valeur dans l'element data "owner" donc on va récupérer false dans zombieCreator donc appeler getElementData sur false ça va planter d'où l'erreur "Bad argument @ 'getElementData' [Expected element at argument 1, got boolean]" et retourner false aussi et ensuite on y soustrait 1 pour réduire son compteur "spawnedzombies" de 1 mais false - 1  ça fait planter aussi et provoque l'erreur "attempt to perform arithmetic on a boolean value".

Donc la pareil, faut blinder pour ne pas le faire s'il n'y pas de zombieCreator (et aussi au niveau de la récup du compteur de zombie créé):

local zombieCreator = getElementData(source, "owner")
if zombieCreator then -- on blinde ici
    local currentSpawnedZombies = getElementData(zombieCreator, "spawnedzombies") or 1 -- et ici aussi au cas où avec une valeur par défaut à 1 si non trouvée
    setElementData(zombieCreator, "spawnedzombies", currentSpawnedZombies - 1)
end

 

  • Like 2
Link to comment
19 hours ago, Citizen said:

Pareil, il faut blinder le code pour ne pas l'exécuter si ce qu'on veut destroy n'est pas une valeur valide:


elseif currentWeaponID == weapID2 and elementWeaponBack2[source] then

 

Blood et Blood2 sont censés être 2 markers de santé sur la map. Je peux rien faire à ta place ici. supprime le code ou crée les 2 markers.

Là le code est clairement prévu pour que les zombies puissent être créé par des joueurs et lorsque le zombie est créé par un joueur, on retient quel joueur l'a créé en le mettant dans l'element data "owner" du zombie. Lorsqu'un zombie meurt, il passe dans ce code et la source de cet event est le zombie en question.

Si c'est un zombie classique, il n'aura pas de valeur dans l'element data "owner" donc on va récupérer false dans zombieCreator donc appeler getElementData sur false ça va planter d'où l'erreur "Bad argument @ 'getElementData' [Expected element at argument 1, got boolean]" et retourner false aussi et ensuite on y soustrait 1 pour réduire son compteur "spawnedzombies" de 1 mais false - 1  ça fait planter aussi et provoque l'erreur "attempt to perform arithmetic on a boolean value".

Donc la pareil, faut blinder pour ne pas le faire s'il n'y pas de zombieCreator (et aussi au niveau de la récup du compteur de zombie créé):


local zombieCreator = getElementData(source, "owner")if zombieCreator then -- on blinde ici    local currentSpawnedZombies = getElementData(zombieCreator, "spawnedzombies") or 1 -- et ici aussi au cas où avec une valeur par défaut à 1 si non trouvée    setElementData(zombieCreator, "spawnedzombies", currentSpawnedZombies - 1)end

 

Merci pour ton aide, je vais essayer de faire tous c'que tu m'as dit. Si jamais j'ai des difficultés je reviendrai vers vous !

function zombieKilled (killer,headshot)
    if killer then
        setElementData(killer,"zombieskilled",getElementData(killer,"zombieskilled")+1)
		setElementData(killer,"experience",getElementData(killer,"experience")+115)
    end 
        local skin = getElementModel(source)
        local x,y,z = getElementPosition(source)
        local ped = createPed(skin,x,y,z)
        local pedCol = createColSphere(x,y,z,1.5)
        killPed(ped)
        setTimer(destroyDeadZombie,360000 ,1,ped,pedCol)
        attachElements (pedCol,ped,0,0,0)
        setElementData(pedCol,"parent",ped)
        setElementData(pedCol,"playername","Zombie")
        setElementData(pedCol,"deadman",true)
        setElementData(ped,"deadzombie",true)
        setElementData(pedCol,"deadman",true)
        local time = getRealTime()
        local hours = time.hour
        local minutes = time.minute
        setElementData(pedCol,"deadreason","Zombie mort. Quelqu'un est passe par ici, heure estimee de la mort: "..hours..":"..minutes..".")
        for i, item in ipairs(itemTableZombies) do
            local value =  math.percentChance (item[5]/2.5,1)
                setElementData(pedCol,item[1],value)
            local ammoData,weapID = getWeaponAmmoType (item[1],true)
                if ammoData and value > 0 then
                  setElementData(pedCol,ammoData,1)
                end
        end
		local zombieCreator = getElementData(source,"owner")
		if zombieCreator then
        setElementData(zombieCreator,"spawnedzombies",getElementData(zombieCreator,"spawnedzombies")-1)
        destroyElement(source)
        if headshot == true then
            setElementData(killer,"headshots",getElementData(killer,"headshots")+1)
			setElementData(killer,"experience",getElementData(killer,"experience")+63)
        end 
end
addEvent("onZombieGetsKilled",true)
addEventHandler("onZombieGetsKilled",getRootElement(),zombieKilled)

Dans se fichier j'ai une erreur voici l'erreur :

[2019-12-06 20:50:08] SCRIPT ERROR: [DayZ]\DayZ\zombies.Lua:232: 'end' expected (to close 'function' at line 193) near '<eof>'
[2019-12-06 20:50:08] ERROR: Loading script failed: [DayZ]\DayZ\zombies.Lua:232: 'end' expected (to close 'function' at line 193) near '<eof>'

 

Link to comment
  • 3 weeks later...
  • 3 years later...
On 05/12/2019 at 01:02, Dewen said:

Salut à tous !

J'aurai besoin de vos aide en effet je "travaille" sur un serveur DayZ et j'aurai quelques soucis. Dès que les zombies meurent ou spawn j'ai souvent des messages d'erreur !

Voici les messages :

[2019-12-04 20:15:15] WARNING: slothbot\sbserver.Lua:877: Bad argument @ 'getElementPosition' [Expected element at argument 1, got boolean]
[2019-12-04 20:15:15] WARNING: slothbot\sbserver.Lua:879: Bad argument @ 'getDistanceBetweenPoints3D' [Expected vector3 at argument 4, got boolean]
[2019-12-04 20:15:15] ERROR: slothbot\sbserver.Lua:880: attempt to compare number with boolean
[2019-12-04 20:15:15] WARNING: slothbot\sbserver.Lua:877: Bad argument @ 'getElementPosition' [Expected element at argument 1, got boolean]
[2019-12-04 20:15:21] WARNING: slothbot\sbserver.Lua:879: Bad argument @ 'getDistanceBetweenPoints3D' [Expected vector3 at argument 4, got boolean]
[2019-12-04 20:15:21] ERROR: slothbot\sbserver.Lua:880: attempt to compare number with boolean
[2019-12-04 20:15:21] WARNING: slothbot\sbserver.Lua:877: Bad argument @ 'getElementPosition' [Expected element at argument 1, got boolean]
[2019-12-04 20:15:21] WARNING: slothbot\sbserver.Lua:879: Bad argument @ 'getDistanceBetweenPoints3D' [Expected vector3 at argument 4, got boolean]
[2019-12-04 20:15:21] ERROR: slothbot\sbserver.Lua:880: attempt to compare number with boolean
[2019-12-04 20:15:58] WARNING: slothbot\sbserver.Lua:877: Bad argument @ 'getElementPosition' [Expected element at argument 1, got boolean]
[2019-12-04 20:15:58] WARNING: slothbot\sbserver.Lua:879: Bad argument @ 'getDistanceBetweenPoints3D' [Expected vector3 at argument 4, got boolean]
[2019-12-04 20:15:58] ERROR: slothbot\sbserver.Lua:880: attempt to compare number with boolean
[2019-12-04 20:16:42] WARNING: slothbot\sbserver.Lua:877: Bad argument @ 'getElementPosition' [Expected element at argument 1, got boolean]
[2019-12-04 20:16:42] WARNING: slothbot\sbserver.Lua:879: Bad argument @ 'getDistanceBetweenPoints3D' [Expected vector3 at argument 4, got boolean]
[2019-12-04 20:16:42] ERROR: slothbot\sbserver.Lua:880: attempt to compare number with boolean

Voici le fichier en question :

function guard_move (ped, oldpx, oldpy, oldpz)
	if (isElement(ped)) then
		if (getElementData ( ped, "status" ) ==  "guarding" ) and (getElementData (ped, "slothbot") == true) then
			local guardcol = getElementData ( ped, "guardcol" )
			local pedhp = getElementHealth ( ped )
			if pedhp > 0 then
				local tx,ty,tz = getElementPosition( guardcol )
				local px,py,pz = getElementPosition( ped )
				local fdist = (getDistanceBetweenPoints3D (px, py, pz, tx, ty, tz))
				if fdist > 4 then
					triggerClientEvent ( "bot_Forwards", ped )
					local pdistance = (getDistanceBetweenPoints3D (oldpx, oldpy, oldpz, px, py, pz))
					if (pdistance < 1 ) then
						local decide = math.random( 1, 7 ) -- randomly decide to
						if decide == 1 then -- do nothing
							setTimer ( guard_move, 600, 1, ped, px, py, pz)
						elseif decide <4 then -- jump
							local weap = getPedWeaponSlot(ped)
							if (weap == 1) or (weap == 7) then
								setPedWeaponSlot(ped, 0 )
								triggerClientEvent ( "bot_Jump", ped )
								setTimer ( setPedWeaponSlot, 850, 1, ped, weap)
							else
								triggerClientEvent ( "bot_Jump", ped )
							end
							setTimer ( guard_move, 600, 1, ped, px, py, pz)
						else -- randomly turn a new direction, walk a bit, then resume
							local randomangle = math.random( 1, 360 )
							setPedRotation( ped, randomangle )
							setTimer ( guard_move, 1200, 1, ped, px, py, pz)
						end
					else -- if the ped isnt stuck
						setTimer ( guard_move, 700, 1, ped, px, py, pz)
					end
				else
					triggerClientEvent ( "bot_Stop", ped ) --already arrived at place to guard
					if (getElementData ( ped, "forcedmoving" ) ==  true ) then
						setElementData ( ped, "forcedmoving", false )
					end
					setTimer ( guard_move, 1500, 1, ped, px, py, pz) -- keep looping in case ped gets moved some other way
				end
			end
		end
	end
end

Je tiens juste à dire  la première ligne = la 871 sur mon fichier

 

Merci d'avance pour votre aide !

J'ai également fait face à ce problème, mais cette discussion m'a aidé à le gérer, merci pour les réponses précieuses.
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...