-
Posts
364 -
Joined
-
Last visited
-
Days Won
6
Everything posted by DRW
-
Sorry for bothering you again, but it has collisions until I restart the script many times...
-
Dammit, thank you, at least now I know that it's a not problem of the script May the problem be caused by Map Editor?
-
Strange, today I said: "Man, I wish I could add a browser to my server so people could use the soundsystem without having to actually get out of the game". Someone heard me up there, dammit. It's a good version, but don't you think that the words in the chatbox are too separate from each other? Just sayin', maybe it's a problem of my server or something.
-
Still the same, I've tried setElementCollisionsEnabled and createObject with the nil rotation values and false lowLOD, this is so strange...
-
Hello, in this script I've created some objects, but these don't have any collision, why? SERVER mines={} mines[1]={316.623046875, 2310.3662109375, 175.88377380371} mines[2]={368.55038452148, 2279.5004882812, 179.28540039062} mines[3]={371.35195922852, 2383.2370605469, 204.61744689941} mines[4]={322.07421875, 2455.6181640625, 209.29032897949} mines[5]={459.70449829102, 2427.0690917969, 191.66717529297} mines[6]={534.01818847656, 2469.5270996094, 183.58447265625} mines[7]={ 635.9619140625, 2403.568359375, 180.75654602051} mines[8]={629.318359375, 2513.05859375, 166.53332519531} mines[9]={ 757.48828125, 2565.681640625, 159.08197021484} mines[10]={881.20446777344, 2574.3151855469, 160.68569946289} mines[11]={778.15057373047, 2687.6740722656, 155.58869934082} mines[12]={958.9248046875, 2667.8623046875, 157.94715881348} mines[13]={912.7998046875, 2766.8828125, 182.83726501465} mines[14]={821.197265625, 2795.1171875, 166.05780029297} mines[15]={822.2978515625, 2455.7451171875, 140.25344848633} objects = {} marke = {} function createMarkerAttachedTo(element, mType, size, r, g, b, a, visibleTo, xOffset, yOffset, zOffset) mType, size, r, g, b, a, visibleTo, xOffset, yOffset, zOffset = mType or "checkpoint", size or 4, r or 0, g or 0, b or 255, a or 255, visibleTo or getRootElement(), xOffset or 0, yOffset or 0, zOffset or 0 assert(isElement(element), "Bad argument @ 'createMarkerAttachedTo' [Expected element at argument 1, got " .. type(element) .. "]") assert(type(mType) == "string", "Bad argument @ 'createMarkerAttachedTo' [Expected string at argument 2, got " .. type(mType) .. "]") assert(type(size) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 3, got " .. type(size) .. "]") assert(type(r) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 4, got " .. type(r) .. "]") assert(type(g) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 5, got " .. type(g) .. "]") assert(type(b) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 6, got " .. type(b) .. "]") assert(type(a) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 7, got " .. type(a) .. "]") assert(isElement(visibleTo), "Bad argument @ 'createMarkerAttachedTo' [Expected element at argument 8, got " .. type(visibleTo) .. "]") assert(type(xOffset) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 9, got " .. type(xOffset) .. "]") assert(type(yOffset) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 10, got " .. type(yOffset) .. "]") assert(type(zOffset) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 11, got " .. type(zOffset) .. "]") local m = createMarker(0, 0, 0, mType, size, r, g, b, a, visibleTo) if m then if attachElements(m, element) then return m end end return false end addEvent ("objs",true) addEventHandler ("objs",getRootElement(),function() for i,v in ipairs(mines) do yx,yy,yz=unpack(v) objects[i] = createObject (3929,yx,yy,yz) setElementData (objects[i],"mineununtrium","true") setElementData(objects[i],"qununtrium",5) marke[i] = createMarkerAttachedTo (objects[i],"corona",4,255,255,255,50,getRootElement(),0,0,10) end end) addEvent ("give1",true) addEventHandler ("give1",getRootElement(),function() local uut = getElementData (source,"ununtrium") for i=1, #mines do destroyElement(objects[i]) destroyElement (marke[i]) objects[i] = nil marke[i] = nil setElementData (source,"ununtrium",uut+3) end end) addEvent ("give1",true) addEventHandler ("give1",getRootElement(),function() local uut = getElementData (source,"ununtrium") destroyElement (marke) setElementData (source,"ununtrium",uut+3) end) addEventHandler ("onPlayerLogin",getRootElement(),function() if not getAccountData (getPlayerAccount(source),"primera3") then setAccountData (getPlayerAccount(source), "ununtrium",0) setAccountData (getPlayerAccount(source), "ununquadium",0) setAccountData (getPlayerAccount(source), "ununpentium",0) setAccountData (getPlayerAccount(source), "ununhexium",0) setAccountData (getPlayerAccount(source), "ununseptium",0) setAccountData (getPlayerAccount(source), "ununoctium",0) setElementData (source, "ununtrium", 0) setElementData (source, "ununquadium", 0) setElementData (source, "ununpentium", 0) setElementData (source, "ununhexium", 0) setElementData (source, "ununseptium", 0) setElementData (source, "ununoctium", 0) setAccountData (getPlayerAccount(source),"primera3","true") else setElementData (source, "ununtrium", getAccountData (getPlayerAccount(source), "ununtrium")) setElementData (source, "ununquadium", getAccountData (getPlayerAccount(source), "ununquadium")) setElementData (source, "ununpentium", getAccountData (getPlayerAccount(source), "ununpentium")) setElementData (source, "ununhexium",getAccountData (getPlayerAccount(source), "ununhexium")) setElementData (source, "ununseptium",getAccountData (getPlayerAccount(source), "ununseptium")) setElementData (source, "ununoctium", getAccountData (getPlayerAccount(source), "ununoctium")) end end) addEventHandler ("onResourceStart",getResourceRootElement(getThisResource()),function() triggerEvent ("objs",source) end) CLIENT addEventHandler ("onClientObjectDamage", getRootElement(), function(loss,attacker) Zx,Zy,Zz= getElementPosition (source) weapons = getPedWeapon (localPlayer) if weapons == 5 and getElementData (source,"mineununtrium") then local uutt = getElementData (source,"qununtrium") setElementData (source,"qununtrium",uutt-1) if getElementData(source,"qununtrium") == 0 then triggerServerEvent ("give1",attacker) local sound1 = playSound3D ("sonido/roto.wav",Zx,Zy,Zz,false) outputChatBox ("#666666You have extracted #ffffff3 #666666units of #ffffffUnuntrium",255,255,255,true) end else cancelEvent() end end)
-
I can't test it, the objects have no collisions, I don't know why
-
Line 62 '=' expected near destroyElement, tried to fix it but it gives me other errors
-
It's all ok, thank you so much! But now I have another problem, the objects start losing their collisions one by one until all of this script's objects' collisions dissapear, I've restarted the script but it got worse, for what I can see, the only solution is restarting the server. What the hell is happening?
-
What you mean there ? You want to destroy the object, element and marker ? Yes, I want to destroy the object along with the marker
-
Hello, I'm using ipairs to create various objects with the same name, but I want to destroy the exact element that I've used, I mean, if 20 objects are created with the ipairs iterator and I damage one of them, the object that I've damaged has to be destroyed, instead of that, the element and marker don't get destroyed. What can I do? Client addEventHandler ("onClientObjectDamage", getRootElement(), function(loss,attacker) Zx,Zy,Zz= getElementPosition (source) weapons = getPedWeapon (localPlayer) if weapons == 5 and getElementData (source,"mineununtrium") then local uutt = getElementData (source,"qununtrium") setElementData (source,"qununtrium",uutt-1) if getElementData(source,"qununtrium") == 0 then triggerServerEvent ("give1",attacker) local sound1 = playSound3D ("sonido/roto.wav",Zx,Zy,Zz,false) outputChatBox ("#666666You have extracted #ffffff3 #666666units of #ffffffUnuntrium",255,255,255,true) end else cancelEvent() end end) Server mines={} mines[1]={316.623046875, 2310.3662109375, 175.88377380371} mines[2]={368.55038452148, 2279.5004882812, 179.28540039062} mines[3]={371.35195922852, 2383.2370605469, 204.61744689941} mines[4]={322.07421875, 2455.6181640625, 209.29032897949} mines[5]={459.70449829102, 2427.0690917969, 191.66717529297} mines[6]={534.01818847656, 2469.5270996094, 183.58447265625} mines[7]={ 635.9619140625, 2403.568359375, 180.75654602051} mines[8]={629.318359375, 2513.05859375, 166.53332519531} mines[9]={ 757.48828125, 2565.681640625, 159.08197021484} mines[10]={881.20446777344, 2574.3151855469, 160.68569946289} mines[11]={778.15057373047, 2687.6740722656, 155.58869934082} mines[12]={958.9248046875, 2667.8623046875, 157.94715881348} mines[13]={912.7998046875, 2766.8828125, 182.83726501465} mines[14]={821.197265625, 2795.1171875, 166.05780029297} mines[15]={822.2978515625, 2455.7451171875, 140.25344848633} function createMarkerAttachedTo(element, mType, size, r, g, b, a, visibleTo, xOffset, yOffset, zOffset) mType, size, r, g, b, a, visibleTo, xOffset, yOffset, zOffset = mType or "checkpoint", size or 4, r or 0, g or 0, b or 255, a or 255, visibleTo or getRootElement(), xOffset or 0, yOffset or 0, zOffset or 0 assert(isElement(element), "Bad argument @ 'createMarkerAttachedTo' [Expected element at argument 1, got " .. type(element) .. "]") assert(type(mType) == "string", "Bad argument @ 'createMarkerAttachedTo' [Expected string at argument 2, got " .. type(mType) .. "]") assert(type(size) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 3, got " .. type(size) .. "]") assert(type(r) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 4, got " .. type(r) .. "]") assert(type(g) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 5, got " .. type(g) .. "]") assert(type(b) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 6, got " .. type(b) .. "]") assert(type(a) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 7, got " .. type(a) .. "]") assert(isElement(visibleTo), "Bad argument @ 'createMarkerAttachedTo' [Expected element at argument 8, got " .. type(visibleTo) .. "]") assert(type(xOffset) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 9, got " .. type(xOffset) .. "]") assert(type(yOffset) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 10, got " .. type(yOffset) .. "]") assert(type(zOffset) == "number", "Bad argument @ 'createMarkerAttachedTo' [Expected number at argument 11, got " .. type(zOffset) .. "]") local m = createMarker(0, 0, 0, mType, size, r, g, b, a, visibleTo) if m then if attachElements(m, element) then return m end end return false end addEvent ("objs",true) addEventHandler ("objs",getRootElement(),function() for variable,minee in pairs(mines) do yx,yy,yz=unpack(minee) object1 = createObject (3929,yx,yy,yz) setElementData (object1,"mineununtrium","true") setElementData(object1,"qununtrium",5) marke = createMarkerAttachedTo (object1,"corona",4,255,255,255,50,getRootElement(),0,0,10) end end) addEvent ("give1",true) addEventHandler ("give1",getRootElement(),function() local uut = getElementData (source,"ununtrium") destroyElement (marke) setElementData (source,"ununtrium",uut+3) end)
-
Tried that before, nothing happens.
-
But I can't set normal peds to be at the same team as the bots' team, I've tried to use the export function setBotTeam to a normal ped but it obviously didn't work, then I tried to set slothbot-related elementdatas to the original peds (Because the ped bots aren't really in a team, they just have an elementdata that makes them act differently if they find a bot or player of the same team).
-
Thank you very much, didn't know about the createWeapon function D:
-
Due to character limits I had to split clientside and serverside into 2 posts, sorry Slothbot clientside STUFF --detects when a bot changes status and starts the new behaviour function changestatus (dataName) if getElementType ( source ) == "ped" and dataName == "status" and (getElementData (source, "slothbot") == true) then if (getElementData ( source, "status" ) == "chasing" ) then local player = getElementData ( source, "target" ) local oldTx, oldTy, oldTz = getElementPosition( player ) local oldPx, oldPy, oldPz = getElementPosition( source ) setTimer ( chase_aim, 80, 1, source) setTimer ( chase_move, 700, 1, source, oldTx, oldTy, oldTz, oldPx, oldPy, oldPz ) setTimer ( chase_shoot, 1500, 1, source ) elseif (getElementData ( source, "status" ) == "hunting" ) then local oldPx, oldPy, oldPz = getElementPosition( source ) setTimer ( enemy_check, 600 ,1 , source )-- starts scanning for enemies setTimer ( hunt_move, 800, 1, source, oldPx, oldPy, oldPz, oldPx, oldPy, oldPz ) elseif (getElementData ( source, "status" ) == "following" ) then local player = getElementData ( source, "leader" ) local oldTx, oldTy, oldTz = getElementPosition( player ) local oldPx, oldPy, oldPz = getElementPosition( source ) setTimer ( follow_enemy_check, 500 ,1 , source ) setTimer ( follow_move, 800, 1, source, oldPx, oldPy, oldPz, oldPx, oldPy, oldPz ) elseif (getElementData ( source, "status" ) == "waiting" ) then setTimer ( wait_enemy_check, 500 ,1 , source ) elseif (getElementData ( source, "status" ) == "guarding" ) then setTimer ( guard_enemy_check, 800 ,1 , source )-- starts scanning for enemies setTimer ( guard_move, 400 ,1 , source ) end end end addEventHandler( "onClientElementDataChange", getRootElement(), changestatus ) --keeps the bot's aim slightly lagged function chase_aim(ped) if (isElement(ped)) then local player = getElementData ( ped, "target" ) if (getElementData ( ped, "status" ) == "chasing" ) and (isElement(player)) and (getElementData (ped, "slothbot") == true) then if getElementType(player) == "player" then local pedhp = getElementHealth ( ped ) if pedhp > 0 and (isPlayerDead(player) == false) then local x,y,z = getElementPosition( player ) local ex,ey,ez = getElementPosition( ped ) local isclear = isLineOfSightClear (ex, ey, ez+.6, x, y, z+.6, true, false, false, true, false, false, false) if (isclear == true) then -- if the player target is in sight if isPedDucked(player) then setPedAimTarget ( ped, x, y, z-.5 ) else setPedAimTarget ( ped, x, y, z ) end end setTimer ( chase_aim, 80, 1, ped, player ) end elseif getElementType(player) == "ped" then local pedhp = getElementHealth ( ped ) if pedhp > 0 and (getElementHealth(player) > 0) then local x,y,z = getElementPosition( player ) local ex,ey,ez = getElementPosition( ped ) local isclear = isLineOfSightClear (ex, ey, ez+.6, x, y, z+.6, true, false, false, true, false, false, false) if (isclear == true) then -- if the player target is in sight if isPedDucked(player) then setPedAimTarget ( ped, x, y, z-.5 ) else setPedAimTarget ( ped, x, y, z ) end end setTimer ( chase_aim, 80, 1, ped, player ) end end end end end --bot behaviour while in chase mode function chase_move (ped, oldTx, oldTy, oldTz, oldPx, oldPy, oldPz) if (isElement(ped)) then local thetarget = getElementData ( ped, "target" ) if (getElementData ( ped, "status" ) == "chasing" ) and (isElement(thetarget)) and (getElementData (ped, "slothbot") == true) then local pedhp = getElementHealth ( ped ) local tarhp = getElementHealth ( thetarget ) if pedhp > 0 and tarhp > 0 then local tx,ty,tz = getElementPosition( thetarget ) local px,py,pz = getElementPosition( ped ) local isclear = isLineOfSightClear (px, py, pz+.6, tx, ty, tz+.6, true, false, false, true, false, false, false) local angle = ( 360 - math.deg ( math.atan2 ( ( tx - px ), ( ty - py ) ) ) ) % 360 --set the peds angle to the target setPedRotation( ped, angle ) if (isclear == true) then -- if the ped can see the target local angle = ( 360 - math.deg ( math.atan2 ( ( tx - px ), ( ty - py ) ) ) ) % 360 --set the peds angle to the target setPedRotation( ped, angle ) setElementData ( ped, "seestarget", true ) setTimer ( chase_move, 700, 1, ped, tx, ty, tz, px, py, pz) else local angle = ( 360 - math.deg ( math.atan2 ( ( oldTx - px ), ( oldTy - py ) ) ) ) % 360 --set the peds angle to the target setPedRotation( ped, angle ) setElementData ( ped, "seestarget", false ) setTimer ( chase_move, 700, 1, ped, oldTx, oldTy, oldTz, px, py, pz) end end end end end --tells the bot when to fire its gun. (only run by the peds controller) function chase_shoot(ped) if (isElement(ped)) then local player = getElementData ( ped, "target" ) if (isElement(player)) and (getElementData (ped, "slothbot") == true) then if (getElementType(player) == "ped") or (getElementType(player) == "player") then if (getElementData ( ped, "status" ) == "chasing" ) and (isElement(player)) then if (getElementHealth(ped)>0) and (getElementHealth(player)>0) and (getElementData ( ped, "controller" ) == getLocalPlayer()) then local x,y,z = getElementPosition( player ) local ex,ey,ez = getElementPosition( ped ) local isclear = isLineOfSightClear (ex, ey, ez+1, x, y, z+1, true, false, false, true, false, false, false) if isclear == true then -- if the ped can see the local player local distance = (getDistanceBetweenPoints3D (ex, ey, ez, x, y, z)) if (getPedWeapon(ped) < 19) and (getPedWeapon(ped) ~= 9) then -- if its a melee weapon hat isnt a chainsaw if (distance < 2 ) then triggerServerEvent ( "pedShootTrigger", ped, "melee" ) setTimer ( chase_shoot, 2300, 1, ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 9) then -- if it is a chainsaw (watch out, the peds are deadly with these) if (distance < 2 ) then local length = 1500 triggerServerEvent ( "pedShootTrigger", ped, "chainsawA", length ) setTimer ( chase_shoot, 6000, 1, ped, player ) else local length = math.random( 2100, 5500 ) triggerServerEvent ( "pedShootTrigger", ped, "chainsawB", length ) setTimer ( chase_shoot, length+900 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 22) then if (distance < 35 ) then local length = math.random( 2100, 5500 ) triggerServerEvent ( "pedShootTrigger", ped, "gun", length ) setTimer ( chase_shoot, length+500 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 23) then if (distance < 35 ) then local length = math.random( 2000, 5500 ) triggerServerEvent ( "pedShootTrigger", ped, "gun", length ) setTimer ( chase_shoot, length+400 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 24) then if (distance < 35 ) then local length = math.random( 2000, 5500 ) triggerServerEvent ( "pedShootTrigger", ped, "gun", length ) setTimer ( chase_shoot, length+400 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 25) then if (distance < 27 ) then local length = 300 triggerServerEvent ( "pedShootTrigger", ped, "gun", length) setTimer ( chase_shoot, 1400 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 26) then if (distance < 20 ) then local length = 1200 triggerServerEvent ( "pedShootTrigger", ped, "gun", length) setTimer ( chase_shoot, 800 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 27) then if (distance < 25 ) then local length = 1200 triggerServerEvent ( "pedShootTrigger", ped, "gun", length) setTimer ( chase_shoot, 1800 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 28) then if (distance < 40 ) then local length = math.random( 2100, 5500 ) triggerServerEvent ( "pedShootTrigger", ped, "gun", length ) setTimer ( chase_shoot, length+500 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 29) then if (distance < 55 ) then local length = math.random( 2000, 5500 ) triggerServerEvent ( "pedShootTrigger", ped, "gun", length ) setTimer ( chase_shoot, length+1500 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 30) then if (distance < 60 ) then local length = math.random( 2000, 5500 ) triggerServerEvent ( "pedShootTrigger", ped, "gun", length ) setTimer ( chase_shoot, length+1500 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 31) then if (distance < 60 ) then local length = 700 triggerServerEvent ( "pedShootTrigger", ped, "gun", length) setTimer ( chase_shoot, 1200 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 32) then if (distance < 30 ) then local length = math.random( 2000, 5500 ) triggerServerEvent ( "pedShootTrigger", ped, "gun", length ) setTimer ( chase_shoot, length+600 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 33) then if (distance < 75 ) then local length = 400 triggerServerEvent ( "pedShootTrigger", ped, "gun", length) setTimer ( chase_shoot, 1600 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 34) then if (distance < 75 ) then triggerServerEvent ( "pedShootTrigger", ped, "sniper") setTimer ( chase_shoot, 2000 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 37) then if (distance < 15 ) then local length = math.random( 2000, 5500 ) triggerServerEvent ( "pedShootTrigger", ped, "gun", length ) setTimer ( chase_shoot, length+900 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (getPedWeapon(ped) == 38) then if (distance < 65 ) then local length = math.random( 2000, 5500 ) triggerServerEvent ( "pedShootTrigger", ped, "gun", length ) setTimer ( chase_shoot, length+900 ,1 , ped, player ) else setTimer ( chase_shoot, 1500 ,1 , ped, player ) end elseif (
-
Hello, I've created some peds and I don't want them to get shot by slothbots, I've set some slothbot-related elementdatas to the peds but it's not working, also, I've tried to modify the original script but I do always manage to break it instead of making it how I want it to be, what can I do? Note: I just want to make bots attack ONLY players. Slothbot serverside STUFF --when a bot dies, tells the bot what to do next function peddeath(ammo, attacker, weapon, bodypart) if (getElementData (source, "slothbot") == true) then -- if its a slothbot triggerEvent ( "onBotWasted", source, attacker, weapon, bodypart ) if (attacker) then if getElementType (attacker) == "player" then --nothing end end setElementData ( source, "status", "dead" ) setTimer ( destroyElement, 5000, 1, source) local peds = getElementsByType ( "ped" ) for theKey,thePed in ipairs(peds) do if (getElementData ( thePed, "leader" ) == source ) then if (getElementData ( thePed, "status" ) == "following" ) then setElementData ( thePed, "leader", nil ) setTimer (beginsearch, 800, 1, thePed ) -- move on else setElementData ( thePed, "leader", nil ) end end if (getElementData ( thePed, "target" ) == source ) then setElementData ( thePed, "target", nil ) end end else -- if its a non slothbot ped if (attacker) then if (getElementType(attacker) == "ped") and (getElementData (attacker, "slothbot") == true) then --nothing (might add something later) end end end end addEventHandler("onPedWasted", getRootElement(), peddeath) --when a player dies, tells the bot what to do next function playerdeath( ammo, attacker, weapon, bodypart ) if (attacker) then if (getElementData (attacker, "slothbot") == true) then --nothing end end local peds = getElementsByType ( "ped" ) for theKey,thePed in ipairs(peds) do if (getElementData (thePed, "slothbot") == true) then if (getElementData ( thePed, "leader" ) == source ) then if (getElementData ( thePed, "status" ) == "following" ) then setTimer (beginsearch, 800, 1, thePed ) -- move on to the next target setElementData ( thePed, "leader", nil ) else setElementData ( thePed, "leader", nil ) end end if (getElementData ( thePed, "target" ) == source ) then setElementData ( thePed, "target", nil ) end end end end addEventHandler("onPlayerWasted", getRootElement(), playerdeath) --when a bot sees an enemy addEvent( "onBotFindEnemy", true ) function assigntarget ( player ) if ( not wasEventCancelled() ) then if (isElement(player)) and (getElementData (source, "slothbot") == true) then if (getElementData ( source, "target" ) ~= player ) and (getElementType ( player ) == "player") then setElementData ( source, "target", player ) if (getElementData ( source, "status" ) ~= "chasing" ) then assigncontroller(source) setElementData ( source, "status", "chasing" ) end elseif (getElementData ( source, "target" ) ~= player ) and (getElementType ( player ) == "ped") then setElementData ( source, "target", player ) if (getElementData ( source, "status" ) ~= chasing ) then assigncontroller(source) setElementData ( source, "status", "chasing" ) end end end end end addEventHandler( "onBotFindEnemy", getRootElement(), assigntarget ) --initializes the ped to start walking the paths addEvent( "onHuntStart", true ) function beginsearch (theped) if (isElement(theped)) then if (getElementData (theped, "slothbot") == true) then setElementData ( theped, "target", nil ) setElementData ( theped, "leader", nil ) assigncontroller(theped) setElementData ( theped, "status", "hunting" ) end end end addEventHandler( "onHuntStart", getRootElement(), beginsearch ) --detects what mode the ped is changed to and activates the correct behaviour (hunting, shooting, following, etc) function changestatus (dataName) if getElementType ( source ) == "ped" and dataName == "status" and (getElementData (source, "slothbot") == true) then if (getElementData ( source, "status" ) ~= "stasis" ) then local allshapes = getElementsByType ( "colshape" ) for SKey,theShape in ipairs(allshapes) do if (isElement(theShape)) then if getElementParent (theShape) == source then destroyElement (theShape) -- removes the target colshape that the ped was running towards in hunt mode end end end end if (getElementData ( source, "status" ) == "chasing" ) then local player = getElementData ( source, "target" ) local oldTx, oldTy, oldTz = getElementPosition( player ) local oldPx, oldPy, oldPz = getElementPosition( source ) setTimer ( chase_move, 700, 1, source, oldTx, oldTy, oldTz, oldPx, oldPy, oldPz ) elseif (getElementData ( source, "status" ) == "hunting" ) then setTimer ( findPath, 200, 1, source ) elseif (getElementData ( source, "status" ) == "waiting" ) then setTimer ( wait_mode, 200, 1, source ) elseif (getElementData ( source, "status" ) == "following" ) then local player = getElementData ( source, "leader" ) local oldTx, oldTy, oldTz = getElementPosition( player ) local oldPx, oldPy, oldPz = getElementPosition( source ) setTimer ( follow_move, 700, 1, source, oldTx, oldTy, oldTz, oldPx, oldPy, oldPz ) elseif (getElementData ( source, "status" ) == "guarding" ) then local px,py,pz = getElementPosition( source ) guard_move (source, px, py, pz) end end end addEventHandler( "onElementDataChange", getRootElement(), changestatus ) -- tells the bot how to chase enemies function chase_move (ped, oldTx, oldTy, oldTz, oldPx, oldPy, oldPz) if (isElement(ped)) then if (getElementData ( ped, "status" ) == "chasing" ) and (getElementData (ped, "slothbot") == true) then local px,py,pz = getElementPosition( ped ) local player = getElementData ( ped, "target" ) if (isElement(player)) then local tx,ty,tz = getElementPosition( player ) local pedhp = getElementHealth ( ped ) if getElementType(player) == "player" then if pedhp > 0 and (isPedDead(player) == false) then if (getElementData ( ped, "seestarget" ) == true ) then-- if the ped can see the target local inrange = 0 local tdist = (getDistanceBetweenPoints3D (px, py, pz, tx, ty, tz)) if (getPedWeaponSlot(ped) == 0 ) then -- fists triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 elseif (getPedWeaponSlot(ped) == 1 ) then -- melee triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 elseif (getPedWeaponSlot(ped) == 2 ) then -- pistols if tdist < 14 then triggerClientEvent ( "bot_Stop", ped ) inrange = 1 else triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 end elseif (getPedWeaponSlot(ped) == 3 ) then -- shotguns if tdist < 10 then triggerClientEvent ( "bot_Stop", ped ) inrange = 1 else triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 end elseif (getPedWeaponSlot(ped) == 4 ) then -- submachine if tdist < 7 then triggerClientEvent ( "bot_Stop", ped ) inrange = 1 else triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 end elseif (getPedWeaponSlot(ped) == 5 ) then -- assault if tdist < 14 then triggerClientEvent ( "bot_Stop", ped ) inrange = 1 else triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 end elseif (getPedWeaponSlot(ped) == 6 ) then --rifles if tdist < 22 then triggerClientEvent ( "bot_Stop", ped ) inrange = 1 else triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 end elseif (getPedWeaponSlot(ped) == 7 ) then --heavy if tdist < 12 then triggerClientEvent ( "bot_Stop", ped ) inrange = 1 else triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 end elseif (getPedWeaponSlot(ped) == 8 ) then --projectiles (dont work afaik) triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 elseif (getPedWeaponSlot(ped) == 9 ) then -- special if tdist < 2 then triggerClientEvent ( "bot_Stop", ped ) inrange = 1 else triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 end elseif (getPedWeaponSlot(ped) == 10 ) then -- gifts triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 elseif (getPedWeaponSlot(ped) == 11 ) then -- special2 triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 elseif (getPedWeaponSlot(ped) == 12 ) then -- detonator triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 else -- probably useless part. triggerClientEvent ( "bot_Forwards", ped ) inrange = 0 end local pdistance = (getDistanceBetweenPoints3D (oldPx, oldPy, oldPz, px, py, pz)) if (pdistance < 1 ) and (inrange == 0 ) then -- if the ped is stuck but not in range of the player 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 ( chase_move, 600, 1, ped, tx, ty, tz, px, py, pz) else setTimer ( chase_move, 600, 1, ped, tx, ty, tz, px, py, pz) end else -- if the ped cant see the target triggerClientEvent ( "bot_Forwards", ped ) local pdistance = (getDistanceBetweenPoints3D (oldPx, oldPy, oldPz, px, py, pz)) if (pdistance < 1.2 ) then --if the ped is stuck local decide = math.random( 1, 7 ) -- randomly decide to if decide == 1 then -- give up chasing and go back on the hunt setTimer (beginsearch, 800, 1, ped ) elseif decide <4 then -- jump
-
Please, I need this, I don't have any idea to make something like that, I just want to know what should I use.
-
Alright, thanks, the problem was that onClientPedWasted didn't trigger because of the onClientPedDamage event setting the ped's health to -25, so when it reached 0 it died but this was not triggered, but I need that, is there any way to make this event to get triggered even with setElementHealth(getElementHealth(minepedt1)-25)?
-
Well, it dies when hit it several times, so I think yes.
-
I'm making a kind of a primitive "mining" system that creates a ped so when it dies it sets +1 to an elementData, but it's not working, so I tried outputting to the chatbox a phrase, still not working, and nothing at the debugscript, what's happening? Client minepedt1 = createPed (0,-1321.708984375, 1353.8212890625, 119.890625,0) addEventHandler ("onClientResourceStart",getResourceRootElement(getThisResource()),function() setElementDimension (minepedt1, 200) setPedFrozen (minepedt1,true) end) addEventHandler ("onClientPedWasted",minepedt1, function() triggerServerEvent ("give1",localPlayer) end) addEventHandler ("onClientPedDamage", minepedt1, function(attacker,weapon,bodypart) if (weapon == 5) then cancelEvent() setElementHealth (minepedt1,getElementHealth(minepedt1)-50) else cancelEvent() end end) Server addEvent ("give1",true) addEventHandler ("give1",getRootElement(),function() local uut = getElementData (source,"ununtrium") setElementData (source,"ununtrium",uut+1) end) addEventHandler ("onPlayerLogin",getRootElement(),function() if not getAccountData (getPlayerAccount(source),"primera3") then setAccountData (getPlayerAccount(source), "ununtrium",0) setAccountData (getPlayerAccount(source), "ununquadium",0) setAccountData (getPlayerAccount(source), "ununpentium",0) setAccountData (getPlayerAccount(source), "ununhexium",0) setAccountData (getPlayerAccount(source), "ununseptium",0) setAccountData (getPlayerAccount(source), "ununoctium",0) setElementData (source, "ununtrium", 0) setElementData (source, "ununquadium", 0) setElementData (source, "ununpentium", 0) setElementData (source, "ununhexium", 0) setElementData (source, "ununseptium", 0) setElementData (source, "ununoctium", 0) setAccountData (getPlayerAccount(source),"primera3","true") else setElementData (source, "ununtrium", getAccountData (getPlayerAccount(source), "ununtrium")) setElementData (source, "ununquadium", getAccountData (getPlayerAccount(source), "ununquadium")) setElementData (source, "ununpentium", getAccountData (getPlayerAccount(source), "ununpentium")) setElementData (source, "ununhexium",getAccountData (getPlayerAccount(source), "ununhexium")) setElementData (source, "ununseptium",getAccountData (getPlayerAccount(source), "ununseptium")) setElementData (source, "ununoctium", getAccountData (getPlayerAccount(source), "ununoctium")) end end)
-
I've tried this, but it's not working, it says that an "(" is missing, but it's not, even if I do it as the debugscript says, there appear other errors that prevent the script from loading properly, so, no idea. Any way to make it play random sounds from 1 to 7? local numbers = {1,2,3,4,5,6,7} addEventHandler ("onClientPlayerDamage",localPlayer, function() local Zx,Zy,Zz = getElementPosition( localPlayer ) local sound = playSound3D ("sonido/hurt"[math.random(#numbers)]".WAV",Zx,Zy,Zz,false) setSoundMaxDistance (sound, 20) end)