liamknight24 Posted October 7, 2010 Share Posted October 7, 2010 hi everybody i tried using the gui from the cp gamemode to control bots as i wanted each player to have a bot that they can control, the only problem is that it dosent work , here is what i put together: Server: function spawnBot(pedname,player,pedweapon,pedskin) if isElement(player) then local team = getPlayerTeam(player) local randomnumber = math.random(1,#spawns) local randx = math.random(0,6)-3 local randy = math.random(0,6)-3 local newped = call(getResourceFromName("Slothbot"),"spawnBot",getElementData(spawns[randomnumber],"posX")+randx,getElementData(spawns[randomnumber],"posY")+randy,getElementData(spawns[randomnumber],"posZ"),getElementData(spawns[randomnumber],"rotZ"),pedskin,0,0,team,pedweapon,"waiting") setElementData(newped,"name",pedname) setElementData(newped,"squadleader",player) setElementData(newped,"pedteam",team) setElementData(newped,"pedweapon",pedweapon) setElementData(newped,"pedskin",pedskin) triggerClientEvent(player,"onClientSendSquadmembers",player,{newped}) end end addCommandHandler("onPlayerSpawn",getRootElement(), spawnBot) function botDied() local squadleader = getElementData(source,"squadleader") triggerClientEvent(squadleader,"onSquadmemberDie",source) for i,v in ipairs(getAttachedElements(source)) do destroyElement(v) end local killtimer = setTimer(spawnBot,respawntime,1,getElementData(source,"name"),squadleader,tonumber(getElementData(source,"pedweapon")),tonumber(getElementData(source,"pedskin"))) table.insert(botspawntimers,killtimer) end addEvent("onBotDied",true) addEventHandler("onBotDied",getRootElement(),botDied) addEvent("onBotWasted",true) addEventHandler("onBotWasted",getRootElement(),botDied) function quitHandler() for i,v in ipairs(getAttachedElements(source)) do destroyElement(v) end for i,v in ipairs(getElementsByType("ped")) do if getElementData(v,"squadleader") == player then for i1,v1 in ipairs(getAttachedElements(v)) do destroyElement(v1) end destroyElement(getElementData(v,"targetmarker")) destroyElement(v) end end end addEventHandler("onPlayerQuit",getRootElement(),quitHandler) function killFunction(player) killPed(player) end addCommandHandler("kill",killFunction) and the client: function markSquadPeds(peds) for i,v in ipairs(peds) do local marker = createMarker(0,0,0,"arrow",0.5,255,255,255,128) attachElements(marker,v) setElementAttachedOffsets(marker,0,0,1.5) createBlipAttachedTo(v,0,1,255,255,255,255,10,99999,getRootElement()) local targetmarker = createMarker(0,0,0,"corona",1.5,255,255,255,0) setElementData(v,"targetmarker",targetmarker) end end addEvent("onClientSendSquadmembers",true) addEventHandler("onClientSendSquadmembers",getRootElement(),markSquadPeds) function drawPedTags() for i,v in ipairs(getElementsByType("ped")) do local name = getElementData(v,"name") if name then local x,y,z = getElementPosition(v) local cx,cy,cz = getCameraMatrix() if isLineOfSightClear(cx,cy,cz,x,y,z,true,true,false,true,false,true,false,v) then if getDistanceBetweenPoints3D(cx,cy,cz,x,y,z) <= 45 then local px,py = getScreenFromWorldPosition(x,y,z+0.3,0.06) if px then local hp = getElementHealth(v) if hp > 0 then local width = dxGetTextWidth(name,1,default) local armor = getPedArmor(v) local r,g,b = 255,255,255 if getElementData(v,"pedteam") then r,g,b = getTeamColor(getElementData(v,"pedteam")) end local ucAlpha = 128 hp = hp * 7.52 hp = hp / ( 750 / 510 ) local lRed = 0 local lGreen = 0 if hp > 255 then lRed = 512 - hp if lRed < 0 then lRed = 0 end if lRed > 255 then lRed = 255 end lGreen = 255 elseif hp <= 255 then lRed = 255 lGreen = hp end -- nametags with shadow dxDrawText(name, px + 1, py + 1, px + 1, py + 1, tocolor(0, 0, 0, 255), 1, "default", "center", "center", false, false) dxDrawText(name, px, py, px, py, tocolor(r, g, b, 255), 1, "default", "center", "center", false, false) local lRedBlack = lRed * 0.33 local lGreenBlack = lGreen * 0.33 -- health and armor bar -- TR - TL - BR - BL local fHeight = sy * 0.011 local fWidth = sx * 0.060 local fTopOffset = sy * 0.025 local fSizeIncreaseBorder = sx * 0.003 local fRemovedWidth = fWidth - (hp / 512 * fWidth) local fMaxArmor = 100 local fArmorAlpha = ( armor / fMaxArmor ) * 255 -- Base rectangle local vecTopLeftBaseX = px - fWidth * 0.5 local vecTopLeftBaseY = py + fTopOffset local vecBotRightBaseX = px + fWidth * 0.5 local vecBotRightBaseY = py + fTopOffset + fHeight -- background local vecTopLeftX = vecTopLeftBaseX - fSizeIncreaseBorder local vecTopLeftY = vecTopLeftBaseY - fSizeIncreaseBorder local vecBotRightX = vecBotRightBaseX + fSizeIncreaseBorder local vecBotRightY = vecBotRightBaseY + fSizeIncreaseBorder dxDrawRectangle(vecTopLeftX, vecTopLeftY, vecBotRightX - vecTopLeftX, vecBotRightY - vecTopLeftY, tocolor(0, 0, 0, ucAlpha)) if armor > 0 then -- armor background vecTopLeftX = vecTopLeftBaseX - fSizeIncreaseBorder vecTopLeftY = vecTopLeftBaseY - fSizeIncreaseBorder vecBotRightX = vecBotRightBaseX + fSizeIncreaseBorder vecBotRightY = vecBotRightBaseY + fSizeIncreaseBorder dxDrawRectangle(vecTopLeftX, vecTopLeftY, vecBotRightX - vecTopLeftX, vecBotRightY - vecTopLeftY, tocolor(179, 177, 167, fArmorAlpha)) end -- the colored bit vecTopLeftX = vecTopLeftBaseX vecTopLeftY = vecTopLeftBaseY vecBotRightX = vecBotRightBaseX - fRemovedWidth vecBotRightY = vecBotRightBaseY dxDrawRectangle(vecTopLeftX, vecTopLeftY, vecBotRightX - vecTopLeftX, vecBotRightY - vecTopLeftY, tocolor(lRed, lGreen, 0, ucAlpha)) -- the black bit vecTopLeftX = vecTopLeftBaseX + fWidth - fRemovedWidth vecTopLeftY = vecTopLeftBaseY vecBotRightX = vecBotRightBaseX vecBotRightY = vecBotRightBaseY dxDrawRectangle(vecTopLeftX, vecTopLeftY, vecBotRightX - vecTopLeftX, vecBotRightY - vecTopLeftY, tocolor(lRedBlack, lGreenBlack, 0, ucAlpha)) end end end end end end end addEventHandler("onClientRender",getRootElement(),drawPedTags) local agreetable = { "affirmative", "positive", "understood", "got it", "alright", "aye", "i'm on it", "sure", "fine", "okay", } local localplayer = getLocalPlayer() function getCloseSquadMembers() local matches = {} for i,v in ipairs(getElementsByType("ped")) do if getElementData(v,"squadleader") == localplayer then local px,py,pz = getElementPosition(localplayer) local mx,my,mz = getElementPosition(v) if getDistanceBetweenPoints3D(px,py,pz,mx,my,mz) <= 15 then table.insert(matches,v) end end end return matches end function makePedFollow(income) doForAll(income,"doMakePedFollow",", follow") end function makePedWait(income) doForAll(income,"doMakePedWait",", wait") end function makePedStopFire(income) doForAll(income,"doMakePedStopFire",", hold fire") end function makePedStartFire(income) doForAll(income,"doMakePedStartFire",", open fire") end function makePedMoveTo(income) local x,y,z = getElementPosition(getElementData(localplayer,"targetmarker")) if isElement(income) then local marker = getElementData(income,"targetmarker") setElementPosition(marker,x,y,z) setMarkerColor(marker,255,255,255,128) triggerServerEvent("doMakePedMoveTo",localplayer,income,x,y,z) triggerEvent("onMessageIncome",income,agreetable[math.random(1,#agreetable)]..", move to position",0) elseif type(income) == "table" then for i,v in ipairs(income) do local marker = getElementData(v,"targetmarker") setElementPosition(marker,x,y,z) setMarkerColor(marker,255,255,255,42) triggerEvent("onMessageIncome",v,agreetable[math.random(1,#agreetable)]..", move to position",0) end triggerServerEvent("doMakePedMoveTo",localplayer,income,x,y,z) end end function makePedGuardHere(income) if isElement(income) then local x,y,z = getElementPosition(income) local marker = getElementData(income,"targetmarker") setElementPosition(marker,x,y,z) setMarkerColor(marker,255,255,255,128) triggerServerEvent("doMakePedGuardHere",localplayer,income,x,y,z) triggerEvent("onMessageIncome",income,agreetable[math.random(1,#agreetable)]..", guard here",0) elseif type(income) == "table" then for i,v in ipairs(income) do local x,y,z = getElementPosition(v) local marker = getElementData(v,"targetmarker") setElementPosition(marker,x,y,z) setMarkerColor(marker,255,255,255,128) triggerServerEvent("doMakePedGuardHere",localplayer,v,x,y,z) triggerEvent("onMessageIncome",v,agreetable[math.random(1,#agreetable)]..", guard here",0) end end end function makePedAttack(income) local attackers = getCloseSquadMembers() for i,v in ipairs(attackers) do triggerServerEvent("doMakePedAttack",localplayer,v,income) triggerEvent("onMessageIncome",v,agreetable[math.random(1,#agreetable)]..", attack",0) setMarkerColor(getElementData(v,"targetmarker"),255,255,255,0) end end function makePedGuard(income) local x,y,z = getElementPosition(getElementData(localplayer,"targetmarker")) if isElement(income) then local marker = getElementData(income,"targetmarker") setElementPosition(marker,x,y,z) setMarkerColor(marker,255,255,255,128) triggerServerEvent("doMakePedGuardPosition",localplayer,income,x,y,z) triggerEvent("onMessageIncome",income,agreetable[math.random(1,#agreetable)]..", guard position",0) elseif type(income) == "table" then for i,v in ipairs(income) do local marker = getElementData(v,"targetmarker") setElementPosition(marker,x,y,z) setMarkerColor(marker,255,255,255,42) triggerEvent("onMessageIncome",v,agreetable[math.random(1,#agreetable)]..", guard position",0) end triggerServerEvent("doMakePedGuardPosition",localplayer,income,x,y,z) end end function doForAll(unit,event,stringaddition) if isElement(unit) then triggerServerEvent(event,localplayer,unit) triggerEvent("onMessageIncome",unit,agreetable[math.random(1,#agreetable)]..stringaddition,0) setMarkerColor(getElementData(unit,"targetmarker"),255,255,255,0) elseif type(unit) == "table" then triggerServerEvent(event,localplayer,unit) for i,v in ipairs(unit) do triggerEvent("onMessageIncome",v,agreetable[math.random(1,#agreetable)]..stringaddition,0) setMarkerColor(getElementData(v,"targetmarker"),255,255,255,0) end end end but it dosent work i dont understand sorry, thanks for any help guys. Link to comment
liamknight24 Posted October 7, 2010 Author Share Posted October 7, 2010 nah no errors Link to comment
Castillo Posted October 7, 2010 Share Posted October 7, 2010 i've done this before for fun, here is what i did and working, local botslist = { [1] = {"Terminator"}, [2] = {"Pete"}, [3] = {"Doug"}, [4] = {"Sue"}, [5] = {"Claire"}, [6] = {"Lou"}, [7] = {"Francis"}, [8] = {"Nick",} } civi = createTeam ("civilians",255,12,15) local teamsetup = {1,2,3} function spawnhunt(source) local pedchoice = teamsetup[1] local x, y, z = getElementPosition ( source ) local rot = 90 local skin = math.random(28,165) local interior = 0 local dimension = 0 local team = civi local weapon = 31 local mode = "hunting" ped = call(getResourceFromName("Slothbot"), "spawnBot", x, y+1, z, rot, skin, interior, dimension, team, weapon, mode, modesubject ) setElementData(ped,"name",botslist[pedchoice][1]) setElementData(ped,"squadleader",source) setPedStat(ped,78,999) end addCommandHandler ( "spawnsloth", spawnhunt ) Link to comment
liamknight24 Posted October 7, 2010 Author Share Posted October 7, 2010 thank you!!! but what about the gui controlling them?? edit: sorry it works fine thankyou!! Edit again : what about the bots talking? Link to comment
Castillo Posted October 7, 2010 Share Posted October 7, 2010 install resource "chatbubbles" Link to comment
liamknight24 Posted October 9, 2010 Author Share Posted October 9, 2010 chat bubbles worked, but got another problem i left the server for a day and didnt touch a thing and now the bots arnt working at all, Warning: bad argument @ setElementData and setPedStat 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