Advertisement
Noneatme

Untitled

Aug 30th, 2012
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 28.08 KB | None | 0 0
  1. local spectators = {}
  2. local getPlayerSpectatee = {}
  3. resourceRoot = getResourceRootElement(getThisResource())
  4.  
  5. function teamstealthgamestart()
  6.     killmessageRes = getResourceFromName"killmessages"
  7.     call(getResourceFromName("scoreboard"), "addScoreboardColumn", "Score")
  8.     call(getResourceFromName("scoreboard"), "addScoreboardColumn", "kills")
  9.     call(getResourceFromName("scoreboard"), "addScoreboardColumn", "deaths")
  10.     playingaround = 0
  11.     redwinsdisplay = textCreateDisplay()
  12.     local redtext = textCreateTextItem ( "RED Team Wins the Match!", 0.5, 0.5, "low", 255, 0, 0, 255, 3, "center", "center" )
  13.     textDisplayAddText ( redwinsdisplay, redtext )
  14.     bluewinsdisplay = textCreateDisplay()
  15.     local bluetext = textCreateTextItem ( "BLUE Team Wins the Match!", 0.5, 0.5, "low", 0, 0, 255, 255, 3, "center", "center" )
  16.     textDisplayAddText ( bluewinsdisplay, bluetext )
  17.     tiegamedisplay = textCreateDisplay()
  18.     local tietext = textCreateTextItem ( "The Match was a Tie!", 0.5, 0.5, "low", 255, 255, 255, 255, 3, "center", "center" )
  19.     textDisplayAddText ( tiegamedisplay, tietext )
  20.     waitDisplay = textCreateDisplay()
  21.     local waittext = textCreateTextItem ( "Wait for next round to spawn.", 0.5, 0.9, "low", 255, 255, 255, 255, 1.6, "center", "center" )
  22.     textDisplayAddText ( waitDisplay, waittext )
  23.     team1 = createTeam("RED",255,0,0)
  24.     team2 = createTeam("BLUE",0,0,255)
  25.     teamprotect = get("stealth.teamdamage")
  26.     if teamprotect == 1 then   
  27.         setTeamFriendlyFire( team1, false )
  28.         setTeamFriendlyFire( team2, false )
  29.     elseif teamprotect == 0 then
  30.         setTeamFriendlyFire( team1, true )
  31.         setTeamFriendlyFire( team2, true )
  32.     end
  33.     setElementData ( team1, "Score", 0 )
  34.     setElementData ( team2, "Score", 0 )
  35.     teamswap = 0
  36.     local players = getElementsByType("player")
  37.     for k,v in ipairs(players) do
  38.         killPed(v)
  39.         fadeCamera(v,true)
  40.         thisplayer = v
  41.         triggerClientEvent(v,"swaptoggle",getRootElement(), thisplayer, teamswap)
  42.         setElementData ( v, "kills", 0 )
  43.         setElementData ( v, "deaths", 0 )
  44.         setPlayerNametagShowing ( v, false )
  45.         spectators[v] = true
  46.         bindKey ( v, "F3", "down", selectTeamKey )
  47.     end
  48.     --Enable laser sight
  49.     setElementData(getRootElement(),"lasersight",get("stealth.lasersight"))
  50. end
  51. addEventHandler ( "onResourceStart", getResourceRootElement(), teamstealthgamestart )
  52. --addEventHandler ( "onGamemodeStart", getRootElement(), teamstealthgamestart )
  53.  
  54. function joinTeam( player, team )
  55.     setPlayerTeam(player, team)
  56.     if team == team1 then
  57.         setPlayerNametagColor ( player, 255, 0, 0 )
  58.     elseif team == team2 then
  59.         setPlayerNametagColor ( player, 0, 0, 255 )
  60.     end
  61. end
  62.  
  63. addEvent("dojoinTeam1",true )
  64. function joinTeam1( source )
  65.     if (countPlayersInTeam(getTeamFromName("RED")) - countPlayersInTeam(getTeamFromName("BLUE")) > balanceamount) then
  66.         outputChatBox("Can't join RED too many players", source, 255, 69, 0)
  67.         triggerClientEvent(source,"doshowTeamWindow",source)
  68.     else
  69.         joinTeam(source, team1)
  70.     end
  71. end
  72. addEventHandler ( "dojoinTeam1", getRootElement(), joinTeam1 )
  73.  
  74. addEvent("dojoinTeam2",true )
  75. function joinTeam2( source )
  76.     if (countPlayersInTeam(team2) - countPlayersInTeam(team1) > balanceamount) then
  77.         outputChatBox("Can't join BLUE too many players", source, 255, 69, 0)
  78.         triggerClientEvent(source,"doshowTeamWindow",source)
  79.     else
  80.         joinTeam(source, team2)
  81.     end
  82. end
  83. addEventHandler ( "dojoinTeam2", getRootElement(), joinTeam2 )
  84.  
  85. function selectTeam( player )
  86.     setPlayerTeam(player, nil)
  87.     local thisplayer = player
  88.     triggerClientEvent(player,"doshowTeamWindow",getRootElement())
  89.     setCameraFixed(player,"cameramode",getRootElement(), thisplayer)
  90.     balanceamount = get("stealth.teambalance")
  91.     tonumber(balanceamount)
  92. end
  93.  
  94. function selectTeamKey(source)
  95.     ishespawning = getElementData ( source, "cantchangespawns" )
  96.     if ( isPedDead ( source ) ) and (ishespawning == 0) then
  97.         selectTeam( source )
  98.         getPlayerSpectatee[source] = nil
  99.         triggerClientEvent(source,"showSpectateText",source,"",false)
  100.         unbindKey ( source, "r", "down", spectateNext )
  101.         setPlayerTeam(source, nil)
  102.     else
  103.         outputChatBox("You can only change teams when your dead.", source, 255, 69, 0)
  104.     end
  105. end
  106.  
  107. function onStealthPlayerJoin ()
  108.     playersin = getPlayerCount()
  109.     if playersin < 3 then
  110.         if playingaround == 1 then
  111.             outputChatBox("Not enough active players, restarting round.", player, 255, 69, 0)
  112.             roundend = setTimer ( stealthroundended, 10000, 1, roundfinish, thisplayer )
  113.             destroyMissionTimer ( roundfinish )
  114.         end
  115.     end
  116.     selectTeam (source)
  117.     setElementData ( source, "kills", 0 )
  118.     setElementData ( source, "deaths", 0 )
  119.     setPlayerNametagShowing ( source, false )
  120.     spectators[source] = true
  121.     bindKey ( source, "F3", "down", selectTeamKey )
  122.     thisplayer = source
  123.     setCameraFixed(source,"cameramode",getRootElement(), thisplayer)
  124.     destroyshield = setTimer ( destroyElement, 3000, 1, dummyshield )
  125.     setCameraFixed(source,"cameramode",getRootElement(), thisplayer)
  126.     triggerClientEvent(source,"swaptoggle",getRootElement(), thisplayer, teamswap)
  127.     textDisplayAddObserver ( waitDisplay, thisplayer )
  128.     fadeCamera(thisplayer,true)
  129. end
  130.  
  131. --addEventHandler ( "onPlayerJoin", getRootElement(), onStealthPlayerJoin )
  132.  
  133. function teamstealthmapstart(startedMap)
  134.     mapRoot = source
  135.     roundstart = setTimer ( startstealthround, 15000, 1, player )
  136.     setElementData ( team1, "Score", 0 )
  137.     setElementData ( team2, "Score", 0 )
  138.     round_count = 0
  139.     local teams = {team1,team2}
  140.     local stealthplayers = getElementsByType("player")
  141.     for index, thisplayer in ipairs(stealthplayers) do
  142.         fadeCamera(thisplayer,true)
  143.         setElementData ( thisplayer, "kills", 0 )
  144.         setElementData ( thisplayer, "deaths", 0 )
  145.         setCameraFixed(thisplayer,"cameramode",getRootElement(), thisplayer)
  146.         selectTeam (thisplayer)
  147.     end
  148.     teamprotect = get("stealth.teamprotect")
  149.     if teamprotect == 1 then   
  150.         setTeamFriendlyFire( team1, false )
  151.         setTeamFriendlyFire( team2, false )
  152.     elseif teamprotect == 0 then
  153.         setTeamFriendlyFire( team1, true )
  154.         setTeamFriendlyFire( team2, true )
  155.     end
  156.     setElementData ( team1, "Score", 0 )
  157.     setElementData ( team2, "Score", 0 )
  158.     currentmap = startedMap
  159.     local maptime = get(getResourceName(currentmap)..".#time")
  160.     if maptime then
  161.         local splitString = split(maptime, string.byte(':'))
  162.         setTime(tonumber(splitString[1]),tonumber(splitString[2]))
  163.     end
  164.     local mapweather = get(getResourceName(currentmap)..".#weather")
  165.     if mapweather then
  166.         setWeather (mapweather)
  167.     end
  168.     local mapwaves = get(getResourceName(currentmap)..".#waveheight")
  169.     if mapwaves then
  170.         setWaveHeight ( mapwaves )
  171.     end
  172.     local mapspeed = get(getResourceName(currentmap)..".#gamespeed")
  173.     if mapspeed then
  174.         setGameSpeed ( mapspeed )
  175.     end
  176.     local mapgravity = get(getResourceName(currentmap)..".#gravity")
  177.     if mapgravity then
  178.         setGravity ( mapgravity )
  179.     end
  180.     --Create our camera element (if settings system was used)
  181.     if ( not getElementsByType"camera"[1] ) and ( get(getResourceName(currentmap)..".camera") ) then
  182.         local cameraInfo = get(getResourceName(currentmap)..".camera")
  183.         if not cameraInfo then
  184.             local xi, yi, zi = 0, 0, 0
  185.             local spawns = table.merge(getElementsByType("spawnpoint",mapRoot),getElementsByType("spyspawn",mapRoot),getElementsByType("mercenaryspawn",mapRoot))
  186.             for i,spawnpoint in ipairs(spawns) do
  187.                 xi = xi + getElementData( spawnpoint, "posX" )
  188.                 yi = yi + getElementData( spawnpoint, "posY" )
  189.                 zi = zi + getElementData( spawnpoint, "posZ" )
  190.             end
  191.             xi = xi/spawns
  192.             yi = yi/spawns
  193.             zi = zi/spawns
  194.             cameraInfo = { {xi, yi, zi}, {xi, yi, zi} }
  195.         end
  196.         setElementData ( getResourceRootElement(getThisResource()), "camera", cameraInfo )
  197.         local camera = createElement("camera")
  198.         setElementData ( camera, "posX", cameraInfo[1][1] )
  199.         setElementData ( camera, "posY", cameraInfo[1][2] )
  200.         setElementData ( camera, "posZ", cameraInfo[1][3] )
  201.         setElementData ( camera, "targetX", cameraInfo[2][1] )
  202.         setElementData ( camera, "targetY", cameraInfo[2][2] )
  203.         setElementData ( camera, "targetZ", cameraInfo[2][3] )
  204.     end
  205. end
  206. addEventHandler( "onResourceStart", getRootElement(), teamstealthmapstart )
  207.  
  208. function teamstealthmapstop(startedMap)
  209.     local alltheplayers = getElementsByType("player")
  210.     playingaround = 0
  211.     for index, thisplayer in ipairs(alltheplayers) do
  212.         triggerClientEvent(thisplayer,"onClientGamemodeMapStop",getRootElement())
  213.         setElementData ( thisplayer, "waitingtospawn", "nope" )
  214.         local isplayercloaked =  getElementData ( thisplayer, "stealthmode" )
  215.         if isplayercloaked == "on" then
  216.             local player = thisplayer
  217.             cloakstop(player)
  218.         end
  219.     end
  220.     local timers = getTimers()
  221.     for timerKey, timerValue in ipairs(timers) do
  222.         if timerValue ~= keytimer then
  223.             killTimer ( timerValue )
  224.         end
  225.     end
  226.     removeEventHandler ( "missionTimerActivated", getRootElement(), stealthroundended )
  227.     destroyMissionTimer ( roundfinish )
  228.     local objectlist = getElementsByType ( "object" )
  229.     for index, object in ipairs(objectlist) do
  230.         if ( getElementData ( object, "renew" ) == "1" ) then
  231.             destroyElement(object)
  232.         end
  233.     end
  234. end
  235.  
  236. addEventHandler( "onGamemodeMapStop", getRootElement(), teamstealthmapstop )
  237.  
  238. function startstealthround()
  239.     local alltheplayers = getElementsByType("player")
  240.     for index, thisplayer in ipairs(alltheplayers) do
  241.         triggerClientEvent(thisplayer,"swaptoggle",getRootElement(), thisplayer, teamswap)
  242.         textDisplayRemoveObserver( redwinsdisplay, thisplayer )
  243.         textDisplayRemoveObserver( bluewinsdisplay, thisplayer )
  244.         textDisplayRemoveObserver( tiegamedisplay, thisplayer )
  245.         textDisplayRemoveObserver( waitDisplay, thisplayer )
  246.     end
  247.     currentmap = call(getResourceFromName"mapmanager","getRunningGamemodeMap")
  248.     local maptime = get(getResourceName(currentmap)..".#time")
  249.     if maptime then
  250.         local splitString = split(maptime, string.byte(':'))
  251.         setTime(tonumber(splitString[1]),tonumber(splitString[2]))
  252.     end
  253.     playingaround = 1
  254.     local players = getElementsByType("player")
  255.     for index, player in ipairs(players) do
  256.         setElementData ( player, "waitingtospawn", "indeed" )
  257.         setElementData ( player, "cantchangespawns", 1 )
  258.         triggerClientEvent(player,"Startround",getRootElement(),player)
  259.     end
  260.     stoptheidlers = setTimer ( idleblockstop, 30000, 1, player )
  261.     rawroundlength = get("stealth.roundlimit")
  262.     roundlength= rawroundlength*60
  263.     if (roundfinish) then
  264.         destroyMissionTimer ( roundfinish )
  265.     end
  266.     roundfinish = createMissionTimer ( player, roundlength, "<", 1.5, 0.5, 0.03, 255, 255, 255, true )
  267.     addEventHandler ( "missionTimerActivated", getRootElement(), stealthroundended )
  268.     startTimer ( roundfinish )
  269.     freshround = 1
  270.     moldyround = setTimer ( agetheround, 30000, 1 )
  271.     roundnotover = 1
  272. end
  273.  
  274. function agetheround()
  275.     freshround = 0
  276.     local everyone = getElementsByType("player")
  277.     local playerCount = #everyone
  278.     if playerCount > 1 then
  279.         playerleftcount ()
  280.     end
  281. end
  282.  
  283. addEvent ("domercspawn", true )
  284.  
  285. function mercspawn(thisplayer)
  286.     currentmap = call(getResourceFromName"mapmanager","getRunningGamemodeMap")
  287.     local mapinterior = get(getResourceName(currentmap)..".#interior")
  288.     if mapinterior == false then
  289.         mapinterior = 0
  290.     end
  291.     mercteamspawns = getElementByID("mercspawns")
  292.     local mercpoints
  293.     if mercteamspawns then
  294.         mercpoints = getElementsByType ( "spawnpoint", mercteamspawns )
  295.     else
  296.         mercpoints = getElementsByType ( "mercenaryspawn", mapRoot or getRootElement() )
  297.     end
  298.     local random = math.random ( 1, table.getn ( mercpoints ) )
  299.     local posX = getElementData(mercpoints[random], "posX")
  300.     local posY = getElementData(mercpoints[random], "posY")
  301.     local posZ = getElementData(mercpoints[random], "posZ")
  302.     local rot = getElementData(mercpoints[random], "rot") or getElementData(mercpoints[random], "rotZ") or 0
  303.     spawnPlayer ( thisplayer, posX, posY, posZ, rot, 285, mapinterior )
  304.     --setCameraMode ( thisplayer, "player" )
  305.     setCameraTarget ( thisplayer, thisplayer )
  306.     setElementData ( thisplayer, "waitingtospawn", "nope" )
  307.     getPlayerSpectatee[thisplayer] = nil
  308.     triggerClientEvent(source,"showSpectateText",source,"",false)
  309.     spectators[source] = nil
  310.     giveWeapon ( thisplayer, 3, 1 )
  311.     setPedFightingStyle ( thisplayer, 7 )
  312. end
  313.  
  314. addEventHandler ( "domercspawn", getRootElement(), mercspawn )
  315.  
  316. addEvent ("dospyspawn", true )
  317.  
  318. function spyspawn(thisplayer)
  319.     currentmap = call(getResourceFromName"mapmanager","getRunningGamemodeMap")
  320.     local mapinterior = get(getResourceName(currentmap)..".#interior")
  321.     if mapinterior == false then
  322.         mapinterior = 0
  323.     end
  324.     spyteamspawns = getElementByID("spyspawns")
  325.     local spypoints
  326.     if spyteamspawns then
  327.         spypoints = getElementsByType ( "spawnpoint", spyteamspawns )
  328.     else
  329.         spypoints = getElementsByType ( "spyspawn", mapRoot or getRootElement() )
  330.     end
  331.     local random = math.random ( 1, table.getn ( spypoints ) )
  332.     local posX = getElementData(spypoints[random], "posX")
  333.     local posY = getElementData(spypoints[random], "posY")
  334.     local posZ = getElementData(spypoints[random], "posZ")
  335.     local rot = getElementData(spypoints[random], "rot") or getElementData(spypoints[random], "rotZ") or 0
  336.     spawnPlayer ( thisplayer, posX, posY, posZ, rot, 163, mapinterior )
  337.     setCameraTarget( thisplayer, thisplayer )
  338.     --setCameraMode ( thisplayer, "player" )
  339.     setElementData ( thisplayer, "waitingtospawn", "nope" )
  340.     getPlayerSpectatee[source] = nil
  341.     triggerClientEvent(source,"showSpectateText",source,"",false)
  342.     spectators[source] = nil
  343.     giveWeapon ( thisplayer, 4, 1 )
  344.     setPedFightingStyle ( thisplayer, 6 )
  345. end
  346.  
  347. addEventHandler ( "dospyspawn", getRootElement(), spyspawn )
  348.  
  349. addEvent ( "givetheguns",true )
  350.  
  351. function gearup (thisplayer, primarySelection, secondarySelection, throwableSelection, spygadgetSelection)
  352.     setPedStat ( thisplayer, 69, 999 )
  353.     setPedStat ( thisplayer, 70, 999 )
  354.     setPedStat ( thisplayer, 71, 999 )
  355.     setPedStat ( thisplayer, 72, 999 )
  356.     setPedStat ( thisplayer, 74, 200 )
  357.     setPedStat ( thisplayer, 75, 999 )
  358.     setPedStat ( thisplayer, 76, 500 )
  359.     setPedStat ( thisplayer, 77, 999 )
  360.     setPedStat ( thisplayer, 78, 200 )
  361.     setPedStat ( thisplayer, 79, 999 )
  362.     setPedStat ( thisplayer, 225, 999 )
  363.     local sx,sy,sz = getElementPosition( thisplayer )
  364.     setElementAlpha ( thisplayer, 255 )
  365.     local dummyshield = createObject ( 1631, sx, sy, -60 )
  366.     triggerClientEvent(thisplayer,"Clientshieldload",getRootElement(), thisplayer)
  367.     spazammo = get("stealth.spazammo")
  368.     m4ammo = get("stealth.m4ammo")
  369.     shotgunammo = get("stealth.shotgunammo")
  370.     sniperammo = get("stealth.sniperammo")
  371.     ak47ammo = get("stealth.ak47ammo")
  372.     rifleammo = get("stealth.rifleammo")
  373.     deserteagleammo = get("stealth.deserteagleammo")
  374.     pistolammo = get("stealth.pistolammo")
  375.     uziammo = get("stealth.uziammo")
  376.     tec9ammo = get("stealth.tec9ammo")
  377.     silencedammo = get("stealth.silencedammo")
  378.     grenadeammo = get("stealth.grenadeammo")
  379.     satchelammo = get("stealth.satchelammo")
  380.     teargasammo = get("stealth.teargasammo")
  381.     molatovammo = get("stealth.molatovammo")
  382.     local skinnumber = getElementModel ( thisplayer )
  383.     setElementData ( thisplayer, "playerskin", skinnumber )
  384.     if primarySelection == "spaz-12" then
  385.         teamprotect = get("stealth.teamdamage")
  386.         giveWeapon ( thisplayer, 27, spazammo )
  387.     end
  388.     if primarySelection == "m4" then
  389.         giveWeapon ( thisplayer, 31, m4ammo )
  390.     end
  391.     if primarySelection == "shotgun" then
  392.         giveWeapon ( thisplayer, 25, shotgunammo )
  393.     end
  394.     if primarySelection == "sniper" then
  395.         giveWeapon ( thisplayer, 34, sniperammo )
  396.     end
  397.     if primarySelection == "ak47" then
  398.         giveWeapon ( thisplayer, 30, ak47ammo )
  399.     end
  400.     if primarySelection == "rifle" then
  401.         giveWeapon ( thisplayer, 33, rifleammo )
  402.     end
  403.     if secondarySelection == "desert eagle" then
  404.         giveWeapon ( thisplayer, 24, deserteagleammo )
  405.     end
  406.     if secondarySelection == "pistols" then
  407.         giveWeapon ( thisplayer, 22, pistolammo )
  408.     end
  409.     if secondarySelection == "uzis" then
  410.         giveWeapon ( thisplayer, 28, uziammo )
  411.     end
  412.     if secondarySelection == "tec-9s" then
  413.         giveWeapon ( thisplayer, 32, tec9ammo )
  414.     end
  415.     if secondarySelection == "silenced" then
  416.         giveWeapon ( thisplayer, 23, silencedammo )
  417.     end
  418.     if throwableSelection == "grenade" then
  419.         giveWeapon ( thisplayer, 16, grenadeammo )
  420.     end
  421.     if throwableSelection == "satchel" then
  422.         giveWeapon ( thisplayer, 39, satchelammo )
  423.     end
  424.     if throwableSelection == "teargas" then
  425.         giveWeapon ( thisplayer, 17, teargasammo )
  426.     end
  427.     if throwableSelection == "molotov" then
  428.         giveWeapon ( thisplayer, 18, molatovammo )
  429.     end
  430.     if spygadgetSelection == "goggles" then
  431.         giveWeapon ( thisplayer, 44, 1 )
  432.     end
  433. end
  434.  
  435. addEventHandler ( "givetheguns", getRootElement(), gearup )
  436.  
  437. function idleblockstop ()
  438.     local alltheplayers = getElementsByType("player")
  439.     for index, thisplayer in ipairs(alltheplayers) do
  440.         setElementData ( thisplayer, "waitingtospawn", "nope" )
  441.         if ( isPedDead ( thisplayer ) ) then
  442.             setElementData ( thisplayer, "cantchangespawns", 0 )
  443.         end
  444.     end
  445. end
  446.  
  447. function stealthplayerdied ( totalAmmo, killer, killerWeapon, bodypart )
  448.     if playingaround == 1 then
  449.         local playerdeaths = getElementData ( source, "deaths" )
  450.         setElementData ( source, "deaths", playerdeaths+1  )
  451.         if (killer) then
  452.             if killer ~= source then
  453.                 local killersscore =  getElementData ( killer, "kills" )
  454.                 setElementData ( killer, "kills", killersscore+1  )
  455.             end
  456.         end
  457.     end
  458.     waittospec = setTimer ( spectateNext, 6000, 1, source )
  459.     setElementData ( source, "cantchangespawns", 0 )
  460.     textDisplayAddObserver ( waitDisplay, source )
  461.     setElementData ( source, "legdamage", 0 )
  462.     local isplayercloaked =  getElementData ( source, "stealthmode" )
  463.     if isplayercloaked == "on" then
  464.         local player = source
  465.         local oldskin = getElementData ( player, "playerskin" )
  466.         setElementModel ( thisplayer, oldskin )
  467.         setElementAlpha ( thisplayer, 255 )
  468.         cloakstop(player)
  469.     end
  470.     if playingaround == 1 then
  471.         if freshround ~= 1 then
  472.             local deadguysteam = getPlayerTeam ( source )
  473.             local teammates = getPlayersInTeam ( deadguysteam )
  474.             for playerKey, playerValue in ipairs(teammates) do
  475.                 local isDead = isPedDead(playerValue)
  476.                 if (isDead == false) then return end
  477.             end
  478.             local thisplayer = source
  479.             if roundnotover == 1 then
  480.                 roundnotover = 0
  481.                 roundend = setTimer ( stealthroundended, 4000, 1, roundfinish, thisplayer )
  482.                 destroyMissionTimer ( roundfinish )
  483.                 setCameraFixed(thisplayer,"cameramode",getRootElement(), thisplayer)
  484.             end
  485.         end
  486.     end
  487. end
  488.  
  489. addEventHandler( "onPlayerWasted", getRootElement(), stealthplayerdied )
  490.  
  491. addCommandHandler ( "Use Gadget/Spectate Next",
  492.     function ( player, command, state )
  493.         if state ~= "0" and spectators[player] then
  494.             spectateNext ( player )
  495.         end
  496.     end
  497. )
  498.  
  499. function spectateNext (source) -- THIS IS THE FUNCTION USED TO SWICH WHO IS BEING SPECTATED BY PRESSING R
  500.     if playingaround == 1 then  -- IF A ROUND IS IN PROGRESS
  501.         if ( isPedDead ( source ) ) then --IF THE PLAYER IS DEAD
  502.             local specPlayer = getPlayerSpectatee[source] -- gets the spectatee player
  503.             if not specPlayer then
  504.                 specPlayer = 1
  505.                 spectators[source] = true
  506.             end
  507.             local deadplayerTeam = getPlayerTeam(source)
  508.             local playersTable = getPlayersInTeam ( deadplayerTeam )
  509.             playersTable = filterPlayersTable ( playersTable )
  510.             --
  511.             local playerCount = #playersTable
  512.             if playerCount == 0 then
  513.                 outputSpectateMessage("Nobody to Spectate",source) -- IF ITS JUST THE 1 PLAYER, SPECTATING IS IMPOSSIBLE
  514.             else
  515.                 specPlayer = specPlayer+1
  516.                 while isPedDead ( playersTable[specPlayer] ) do
  517.                     specPlayer = specPlayer+1
  518.                 end
  519.                 if specPlayer > playerCount then
  520.                     specPlayer = 1
  521.                 end
  522.                 --setCameraMode ( source, "player" )    
  523.                 setCameraTarget ( source, playersTable[specPlayer] )
  524.                 outputSpectateMessage("Now spectating "..getPlayerName(playersTable[specPlayer]),source)
  525.                 getPlayerSpectatee[source] = specPlayer
  526.             end
  527.         end
  528.     end
  529. end
  530.  
  531. function outputSpectateMessage(text,source)
  532.     triggerClientEvent(source,"showSpectateText",source,text,true)
  533. end
  534.  
  535. function filterPlayersTable ( playerTable ) --this function clears out useless players from spectators table
  536.     for k,v in ipairs(playerTable) do
  537.         if isPedDead ( v ) then
  538.             table.remove(playerTable,k)
  539.         end
  540.     end
  541.     return playerTable
  542. end
  543.  
  544. function stealthroundended( timerID, player )
  545.     if playingaround == 1 then
  546.         if ( tostring(timerID) == tostring(roundfinish) ) then
  547.             destroyMissionTimer ( timerID )
  548.             if (roundend) then
  549.                 killTimer (roundend)
  550.                 roundend = nil
  551.             end
  552.             playingaround = 0
  553.             if teamswap == 0 then
  554.                 teamswap = 1
  555.             else
  556.                 teamswap = 0
  557.             end
  558.             local leftgadgetslist = getElementsByType ( "colshape" )
  559.             for index, gadget in ipairs(leftgadgetslist) do
  560.                 if ( getElementData ( gadget, "type" ) == "alandmine" ) then
  561.                     destroyElement ( gadget ) --DESTROYS ALL LANDMINES AT THE END OF EVERY ROUND
  562.                 elseif ( getElementData ( gadget, "type" ) == "acamera" ) then
  563.                     destroyElement ( gadget ) --DESTROYS ALL CAMERAS AT THE END OF EVERY ROUND     
  564.                 end
  565.             end
  566.             local objectlist = getElementsByType ( "object" )
  567.             for index, object in ipairs(objectlist) do
  568.                 if ( getElementData ( object, "renew" ) == "1" ) then
  569.                     local x,y,z = getElementPosition( object )
  570.                     local rx,ry,rz = getObjectRotation ( object )
  571.                     local obid = getElementModel ( object )
  572.                     destroyElement(object)
  573.                     local newobject = createObject ( obid, x, y, z, rx, ry, rz )
  574.                     setElementData ( newobject, "renew", "1"  )
  575.                 end
  576.             end
  577.             local team1survivers = 0
  578.             local team2survivers = 0   
  579.             local firstteam = getPlayersInTeam ( team1 )
  580.             for index, thisplayer in ipairs(firstteam) do
  581.                 setElementData ( thisplayer, "waitingtospawn", "indeed" )
  582.                 setCameraFixed(thisplayer,"cameramode",getRootElement(), thisplayer)
  583.                 triggerClientEvent(thisplayer,"swaptoggle",getRootElement(), thisplayer, teamswap)
  584.                 local isDead = isPedDead(thisplayer)
  585.                 if (isDead == false) then
  586.                     team1survivers = team1survivers +1
  587.                     killPed(thisplayer, thisplayer, 99, 99)
  588.                 end
  589.             end
  590.             local secondteam = getPlayersInTeam ( team2 )
  591.             for index, thisplayer in ipairs(secondteam) do
  592.                 setElementData ( thisplayer, "waitingtospawn", "indeed" )
  593.                 setCameraFixed(thisplayer,"cameramode",getRootElement(), thisplayer)
  594.                 triggerClientEvent(thisplayer,"swaptoggle",getRootElement(), thisplayer, teamswap)
  595.                 local isDead = isPedDead(thisplayer)
  596.                 if (isDead == false) then
  597.                     team2survivers = team2survivers +1     
  598.                     killPed(thisplayer, thisplayer, 99, 99)
  599.                 end
  600.             end
  601.             local everyone = getElementsByType("player")
  602.             for index, thisplayer in ipairs(everyone) do
  603.                 if (sitthisoneout) then
  604.                     killTimer (sitthisoneout)
  605.                     sitthisoneout = nil
  606.                 end
  607.             end
  608.             if team1survivers > team2survivers then
  609.                 local alltheplayers = getElementsByType("player")
  610.                 for index, thisplayer in ipairs(alltheplayers) do
  611.                     textDisplayAddObserver( redwinsdisplay, thisplayer )
  612.                 end
  613.                 local teampoints = getElementData ( team1, "Score" )
  614.                 setElementData ( team1, "Score", teampoints+1  )
  615.             end
  616.             if team2survivers > team1survivers then
  617.                 local alltheplayers = getElementsByType("player")
  618.                 for index, thisplayer in ipairs(alltheplayers) do
  619.                     textDisplayAddObserver( bluewinsdisplay, thisplayer )
  620.                 end
  621.                 local teampoints = getElementData ( team2, "Score" )
  622.                 setElementData ( team2, "Score", teampoints+1  )
  623.             end
  624.             if team2survivers == team1survivers then
  625.                 local alltheplayers = getElementsByType("player")
  626.                 for index, thisplayer in ipairs(alltheplayers) do
  627.                     textDisplayAddObserver( tiegamedisplay, thisplayer )
  628.                 end
  629.             end
  630.             roundstart = setTimer ( startstealthround, 7000, 1, player )
  631.             roundcycle = setTimer ( roundtick, 3000, 1, player )
  632.             removeEventHandler ( "missionTimerActivated", getRootElement(), stealthroundended )
  633.         end
  634.     end
  635. end
  636.  
  637. addEvent ( "onPlayerKillMessage", true)
  638.  
  639. function checkforemokids (killer, weapon, bodypart)
  640.     if weapon == 99 then
  641.         cancelEvent()
  642.     end
  643. end
  644.  
  645. addEventHandler( "onPlayerKillMessage", getRootElement(), checkforemokids )
  646.  
  647. function roundtick()
  648.     round_count = round_count+1
  649.     round_limit = get("stealth.round_countlimit")*2
  650.     if round_count == round_limit then
  651.         triggerEvent("onRoundFinished", getResourceRootElement(getThisResource()))
  652.     end
  653. end
  654.  
  655. function stealthplayerleft (source)
  656.     countplayers = setTimer ( playerleftcount, 2000, 1 )
  657. end
  658.  
  659. addEventHandler( "onPlayerQuit", getRootElement(), stealthplayerleft )
  660.  
  661. function setCameraFixed ( player )
  662.     triggerClientEvent(player,"cameramode",getRootElement(), player )
  663.     --showSpectateText("",false)
  664. end
  665.  
  666. function playerleftcount (source)
  667.     if playingaround == 1 then
  668.         livingteam1 = 0
  669.         livingteam2 = 0
  670.         local firstteam = getPlayersInTeam ( team1 )
  671.         for playerKey, playerValue in ipairs(firstteam) do
  672.             local isDead = isPedDead(playerValue)
  673.             if (isDead == false) then
  674.                 livingteam1 = livingteam1+1
  675.             end
  676.         end
  677.         local secondteam = getPlayersInTeam ( team2 )
  678.         for playerKey, playerValue in ipairs(secondteam) do
  679.             local isDead = isPedDead(playerValue)
  680.             if (isDead == false) then
  681.                 livingteam2 = livingteam2+1
  682.             end
  683.         end
  684.         if livingteam1 == 0 then
  685.             roundend = setTimer ( stealthroundended, 4000, 1, roundfinish, thisplayer ) --THIS TRIGGERS THE ROUND ENDING
  686.             destroyMissionTimer ( roundfinish )
  687.         end
  688.         if livingteam2 == 0 then
  689.             roundend = setTimer ( stealthroundended, 4000, 1, roundfinish, thisplayer )
  690.             destroyMissionTimer ( roundfinish )
  691.         end
  692.     end
  693. end
  694.  
  695. function playerhurt ( attacker, weapon, bodypart, loss )--HEADSHOT INSTAKILL
  696.     if not (getElementData(source,"armor")) then
  697.         if ( bodypart == 9 ) then
  698.             killPed ( source, attacker, weapon, bodypart )
  699.         end
  700.     end
  701. end
  702.  
  703. addEventHandler ( "onPlayerDamage", getRootElement (), playerhurt )
  704.  
  705. function outputHeadshotIcon (killer, weapon, bodypart)
  706.     if bodypart == 9 then
  707.         cancelEvent()
  708.         local r2,g2,b2 = getTeamColor ( getPlayerTeam(killer) )
  709.         local r1,g1,b1 = getTeamColor ( getPlayerTeam(source) )
  710.         exports.killmessages:outputMessage (
  711.             {getPlayerName(killer),{"padding",width=3},{"icon",id=weapon},{"padding",width=3},{"icon",id=256},{"padding",width=3},{"color",r=r1,g=g1,b=b1},getPlayerName(source) },
  712.             getRootElement(),r2,g2,b2 )
  713.     end
  714. end
  715.  
  716. addEventHandler( "onPlayerKillMessage", getRootElement(), outputHeadshotIcon )
  717.  
  718. function teamstealthgamestop()
  719.     call(getResourceFromName("scoreboard"), "removeScoreboardColumn", "Score")
  720.     call(getResourceFromName("scoreboard"), "removeScoreboardColumn", "kills")
  721.     call(getResourceFromName("scoreboard"), "removeScoreboardColumn", "deaths")
  722.     local alltheplayers = getElementsByType("player")
  723.     for index, thisplayer in ipairs(alltheplayers) do
  724.         playSoundFrontEnd (thisplayer, 35 )
  725.         setPlayerTeam(thisplayer, nil)
  726.         setPlayerNametagShowing ( thisplayer, true )
  727.         setPedFightingStyle ( thisplayer, 1 )
  728.         --setCameraMode ( thisplayer, "player" )
  729.         setCameraTarget ( thisplayer, thisplayer )
  730.         textDisplayRemoveObserver( redwinsdisplay, thisplayer )
  731.         textDisplayRemoveObserver( bluewinsdisplay, thisplayer )
  732.         textDisplayRemoveObserver( tiegamedisplay, thisplayer )
  733.         textDisplayRemoveObserver( waitDisplay, thisplayer )
  734.         unbindKey ( thisplayer, "F3", "down", selectTeamKey )
  735.     end
  736.     local timers = getTimers()
  737.     for timerKey, timerValue in ipairs(timers) do
  738.         killTimer ( timerValue )
  739.     end
  740.     local objectlist = getElementsByType ( "object" )
  741.     for index, object in ipairs(objectlist) do
  742.         if ( getElementData ( object, "renew" ) == "1" ) then
  743.             destroyElement(object)
  744.         end
  745.     end
  746. end
  747.  
  748. addEventHandler( "onResourceStop", resourceRoot, teamstealthgamestop )
  749.  
  750.  
  751. function table.merge(appendTo, ...)
  752.     -- table.merge(targetTable, table1, table2, ...)
  753.     -- Append the values of one or more tables to a target table.
  754.     --
  755.     -- In the arguments list, a table pointer can be followed by a
  756.     -- numeric or textual key. In that case the values in the table
  757.     -- will be assumed to be tables, and of each of these the value
  758.     -- corresponding to the given key will be appended instead of the
  759.     -- subtable itself.
  760.     local appendval
  761.     for i=1,arg.n do
  762.         if type(arg[i]) == 'table' then
  763.             for k,v in pairs(arg[i]) do
  764.                 if arg[i+1] and type(arg[i+1]) ~= 'table' then
  765.                     appendval = v[arg[i+1]]
  766.                 else
  767.                     appendval = v
  768.                 end
  769.                 if appendval then
  770.                     if type(k) == 'number' then
  771.                         table.insert(appendTo, appendval)
  772.                     else
  773.                         appendTo[k] = appendval
  774.                     end
  775.                 end
  776.             end
  777.         end
  778.     end
  779.     return appendTo
  780. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement