Guest User

Untitled

a guest
Feb 23rd, 2013
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.23 KB | None | 0 0
  1. --client.lua
  2. setDevelopmentMode(true)
  3.  
  4. local alreadyGotPowerup = false
  5. local actualPowerup = "none"
  6.  
  7. --guardar armas creadas por el serverside
  8. local weapons={}
  9. local firing=true
  10. local ammo=0 --ammo of your weapon (clientside)
  11.  
  12. local powerups={--[["rocket","specialrocket",]]"minigun","flame"}
  13. local pickups={}
  14.  
  15. function resetPowerupState()
  16.     unbindKey("mouse1")
  17.     alreadyGotPowerup = false
  18.     actualPowerup = "none"
  19. end
  20.  
  21. function createMarioPickup(x,y,z)
  22.     local pickup={}
  23.     --Elementos
  24.     pickup.object = createObject(2912,x,y,z)
  25.     pickup.colshape = createColCuboid(x-1,y-1,z-1,2,2,2)
  26.     --Movimiento y colision
  27.     setElementCollisionsEnabled ( pickup.object, false )
  28.     pickup.timer = setTimer(
  29.     function()
  30.         local x,y,z =  getElementPosition(pickup.object)
  31.         moveObject ( pickup.object, 5000, x, y, z, 180, 180, 180)
  32.     end,5000,0)
  33.     table.insert(pickups,pickup)
  34. end
  35. --Simular creacion de pickups
  36. addEventHandler("onClientResourceStart",getRootElement(getThisResource()),
  37. function ()
  38.     createMarioPickup(1469,1765,10.2)
  39.     createMarioPickup(1489,1766,10.2)
  40. end
  41. )
  42.  
  43. function onMarioPickupHit(theElement)
  44.     if getElementType(theElement) == "vehicle" then
  45.         local colshapeSource
  46.         local objectSource
  47.         for i,v in ipairs(pickups) do
  48.             if v.colshape == source then
  49.                 colshapeSource = v.colshape
  50.                 objectSource = v.object
  51.                 --respawnear
  52.                 local x,y,z = getElementPosition(v.object)
  53.                 setTimer(
  54.                     function()
  55.                         createMarioPickup(x,y,z)
  56.                     end,5000,1)
  57.                 --Destruir el objeto y todas esas cosas
  58.                 destroyElement ( v.colshape )
  59.                 destroyElement ( v.object )
  60.                 killTimer (v.timer)
  61.                 table.remove(pickups,i)
  62.             end
  63.         end
  64.         if (colshapeSource) then
  65.             if (objectSource) then
  66.                 getRandomPowerUp(theElement)
  67.             end
  68.         end
  69.     end
  70. end
  71. addEventHandler("onClientColShapeHit",getRootElement(),onMarioPickupHit)
  72.  
  73. function getRandomPowerUp(theElement)
  74.     local sourcePlayer=getVehicleOccupant(theElement)
  75.     if sourcePlayer == getLocalPlayer() then --SI tu tomaste el pickup
  76.         local powerupGot=powerups[math.random(1,#powerups)]
  77.         if actualPowerup=="minigun" or actualPowerup=="flame" then
  78.             local sourcePlayer = getLocalPlayer()
  79.             triggerServerEvent("killWeapon",getRootElement(),sourcePlayer)
  80.             removeEventHandler("onClientRender",getRootElement(),updateAmmo)
  81.             removeEventHandler("onClientKey",getRootElement(),triggerStateFiring)
  82.             resetPowerupState()
  83.         end
  84.         if powerupGot == "rocket" then
  85.             rocket(sourcePlayer)
  86.             alreadyGotPowerup = true
  87.             actualPowerup = "rocket"
  88.         elseif powerupGot == "specialrocket" then
  89.             specialrocket(sourcePlayer)
  90.             alreadyGotPowerup = true
  91.             actualPowerup = "specialrocket"
  92.         elseif powerupGot == "minigun" then
  93.             minigun(sourcePlayer)
  94.             alreadyGotPowerup = true
  95.             actualPowerup = "minigun"
  96.         elseif powerupGot == "flame" then
  97.             flamethrower(sourcePlayer)
  98.             alreadyGotPowerup = true
  99.             actualPowerup = "flame"
  100.         end
  101.         outputChatBox(powerupGot)
  102.     end
  103. end
  104.  
  105. function rocket(sourcePlayer)
  106.     bindKey("mouse1","down",
  107.         function()
  108.             if actualPowerup == "rocket" then
  109.                 local theVehicle = getPedOccupiedVehicle ( sourcePlayer )
  110.                 local x,y,z = getElementPosition(theVehicle)
  111.                 local rX,rY,rZ = getElementRotation(theVehicle)
  112.                 local x = x+4*math.cos(math.rad(rZ+90))
  113.                 local y = y+4*math.sin(math.rad(rZ+90))
  114.                 createProjectile(theVehicle, 19, x, y, z, 1.0, nil)
  115.                 resetPowerupState()
  116.             end
  117.         end
  118.     )
  119. end
  120.  
  121. function specialrocket(sourcePlayer)
  122.     bindKey("mouse1","down",
  123.         function()
  124.             if actualPowerup == "specialrocket" then
  125.                 local theVehicle = getPedOccupiedVehicle ( sourcePlayer )
  126.                 local x,y,z = getElementPosition(theVehicle)
  127.                 local rX,rY,rZ = getElementRotation(theVehicle)
  128.                 local x = x+4*math.cos(math.rad(rZ+90))
  129.                 local y = y+4*math.sin(math.rad(rZ+90))
  130.                 --Get nearest enemycar
  131.                 local allCars = getElementsByType("vehicle")
  132.                 local distance = 0
  133.                 local target
  134.                 for i,v in ipairs(allCars) do
  135.                     if v ~= theVehicle then
  136.                         local x,y,z = getElementPosition(v)
  137.                         local x2,y2,z2 = getElementPosition(theVehicle)
  138.                         local carDistance = getDistanceBetweenPoints3D(x,y,z,x2,y2,z2)
  139.                         if carDistance < distance or distance == 0 then
  140.                             distance = carDistance
  141.                             target = v
  142.                         end
  143.                     end
  144.                 end
  145.                 createProjectile(theVehicle, 20, x, y, z, 1.0, target)
  146.                 resetPowerupState()
  147.             end
  148.         end
  149.     )
  150. end
  151.  
  152. function createServerMinigun(sourcePlayer,type)
  153.     triggerServerEvent("triggerCreateMinigun",getRootElement(),sourcePlayer,type)
  154. end
  155.  
  156. addEvent("triggerClientCreateMinigun",true)
  157. function createMinigun(sourcePlayer,type)
  158.     if type == "flame" then
  159.         local x,y,z = getElementPosition(getPedOccupiedVehicle(sourcePlayer))
  160.         local vehicle = getPedOccupiedVehicle(sourcePlayer)
  161.         local flamethrower={}
  162.         flamethrower.wep = createWeapon("flamethrower",x,y,z)
  163.         flamethrower.owner = sourcePlayer
  164.         flamethrower.type = "flame"
  165.         attachElements(flamethrower.wep,vehicle,0,-2,0.2,0,0,270)
  166.         table.insert(weapons,flamethrower)
  167.     else
  168.         local x,y,z = getElementPosition(getPedOccupiedVehicle(sourcePlayer))
  169.         local vehicle = getPedOccupiedVehicle(sourcePlayer)
  170.         local minigun={}
  171.         minigun.wep = createWeapon("minigun",x,y,z)
  172.         minigun.owner = sourcePlayer
  173.         minigun.type = "minigun"
  174.         setWeaponProperty ( minigun.wep, "damage", 0.2 )
  175.         attachElements(minigun.wep,vehicle,1,0,0,0,0,90)
  176.         table.insert(weapons,minigun)
  177.     end
  178. end
  179. addEventHandler("triggerClientCreateMinigun",getRootElement(),createMinigun)
  180.  
  181. local tempval
  182. function minigun(sourcePlayer)
  183.     bindKey("mouse1","down",
  184.         function()
  185.             tempval = sourcePlayer
  186.             if actualPowerup == "minigun" then
  187.                 createServerMinigun(sourcePlayer)
  188.                 unbindKey("mouse1")
  189.                 ammo = 200
  190.                 addEventHandler("onClientRender",getRootElement(),updateAmmo)
  191.                 addEventHandler("onClientKey",getRootElement(),triggerStateFiring)
  192.             end
  193.         end
  194.     )
  195. end
  196.  
  197. function triggerStateFiring(button,state)
  198.     if button == "mouse1" then
  199.         triggerServerEvent("triggerMinigunFire",getRootElement(),tempval,state)
  200.         if state == false then
  201.             firing = false
  202.         elseif state == true then
  203.             firing = true
  204.         end
  205.     end
  206. end
  207.  
  208. addEvent("triggerClientFireMinigun",true)
  209. function toggleFire(sourcePlayer,state)
  210.     for i,v in ipairs(weapons) do
  211.         if sourcePlayer == v.owner then
  212.             if state == true then
  213.                 setWeaponState(v.wep,"firing")
  214.             elseif state == false then
  215.                 setWeaponState(v.wep,"ready")
  216.             end
  217.             if v.type == "flame" then
  218.                 triggerEvent("triggerFire",getRootElement(),sourcePlayer,state)
  219.             end
  220.         end
  221.     end
  222. end
  223. addEventHandler("triggerClientFireMinigun",getRootElement(),toggleFire)
  224.  
  225. addEvent("triggerFire")
  226. function createFire(sourcePlayer,state)
  227.     if state == true then
  228.         if not isTimer(fireTimer) then
  229.             fireTimer = setTimer(
  230.                 function(sourcePlayer,weapons)
  231.                     for i,v in ipairs(weapons) do
  232.                         if v.owner == sourcePlayer then
  233.                             triggerEvent("createFireForReal",getRootElement(),sourcePlayer,v.wep)
  234.                         end
  235.                     end
  236.                 end,100,0,sourcePlayer,weapons
  237.             )
  238.         end
  239.     elseif state == false then
  240.         if isTimer(fireTimer) then
  241.             killTimer(fireTimer)
  242.         end
  243.     end
  244. end
  245. addEventHandler("triggerFire",getRootElement(),createFire)
  246.  
  247. function updateAmmo()
  248.     if firing == true then
  249.         ammo = ammo - 1
  250.     end
  251.     if ammo <= 0 then
  252.         local sourcePlayer = getLocalPlayer()
  253.         triggerServerEvent("killWeapon",getRootElement(),sourcePlayer)
  254.         if isTimer(fireTimer) then
  255.             killTimer(fireTimer)
  256.         end
  257.         removeEventHandler("onClientRender",getRootElement(),updateAmmo)
  258.         removeEventHandler("onClientKey",getRootElement(),triggerStateFiring)
  259.         resetPowerupState()
  260.     end
  261. end
  262.  
  263. addEvent("killClientWeapon",true)
  264. function killWeapon(sourcePlayer)
  265.     for i,v in ipairs(weapons) do
  266.         if sourcePlayer == v.owner then
  267.             destroyElement(v.wep)
  268.             tempval2 = nil
  269.             table.remove(weapons,i)
  270.         end
  271.     end
  272. end
  273. addEventHandler("killClientWeapon",getRootElement(),killWeapon)
  274.  
  275. function flamethrower(sourcePlayer)
  276.     bindKey("mouse1","down",
  277.         function()
  278.             tempval = sourcePlayer
  279.             if actualPowerup == "flame" then
  280.                 local type="flame"
  281.                 createServerMinigun(sourcePlayer,type)
  282.                 unbindKey("mouse1")
  283.                 ammo = 200
  284.                 addEventHandler("onClientRender",getRootElement(),updateAmmo)
  285.                 addEventHandler("onClientKey",getRootElement(),triggerStateFiring)
  286.             end
  287.         end
  288.     )
  289. end
Advertisement
Add Comment
Please, Sign In to add comment