LUA 190
V2+ Gravity Gun 1.0 By xdedeone on 26th February 2019 04:10:28 PM
  1. -- Gravity Rifle
  2.  
  3. -- Pick up vehicles by shooting them with your plasma rifle.  Shoot them again while they are suspended in front of you to fire them.  Kill people.
  4. -- If you have any questions or comments, PM me (Nuggets) at phasor.proboards.com.
  5.  
  6. gravity = {}
  7. vehicles = {}
  8. activetime = {}
  9.  
  10. function GetRequiredVersion()
  11.  
  12.         return 200
  13. end
  14.  
  15. function OnScriptLoad(processId, game, persistent)
  16.  
  17.        
  18. end
  19.  
  20. --[[
  21. function OnScriptUnload()
  22.  
  23.  
  24. end
  25. --]]
  26.  
  27. --[[
  28. function OnNewGame(map)
  29.  
  30.  
  31. end
  32. --]]
  33.  
  34. --[[
  35. function OnGameEnd(stage)
  36.  
  37.         -- stage 1: F1 Screen
  38.         -- stage 2: PGCR Appears
  39.         -- stage 3: Players may quit
  40. end
  41. --]]
  42.  
  43. --[[
  44. function OnServerChat(player, type, message)
  45.        
  46.         --return true, message, type
  47. end
  48. --]]
  49.  
  50. --[[
  51. function OnServerCommandAttempt(player, command, password)
  52.  
  53.         --return true
  54. end
  55. --]]
  56.  
  57. --[[
  58. function OnServerCommand(admin, command)
  59.  
  60.         --return true
  61. end
  62. --]]
  63.  
  64. --[[
  65. function OnNameRequest(hash, name)
  66.  
  67.         --return true, name
  68. end
  69. --]]
  70.  
  71. --[[
  72. function OnBanCheck(hash, ip)
  73.        
  74.         --return true
  75. end
  76. --]]
  77.  
  78. --[[
  79. function OnPlayerJoin(player)
  80.  
  81.  
  82. end
  83. --]]
  84.  
  85. function OnPlayerLeave(player)
  86.  
  87.         gravity[player] = nil
  88. end
  89.  
  90. function OnPlayerKill(killer, victim, mode)
  91.  
  92.         gravity[victim] = nil
  93. end
  94.  
  95. --[[
  96. function OnKillMultiplier(player, multiplier)
  97.  
  98.         -- Multipliers:
  99.         -- 7: Double Kill
  100.         -- 9: Triple Kill
  101.         -- 10: Killtacular
  102.         -- 11: Killing Spree
  103.         -- 12: Running Riot
  104.         -- 16: Double Kill w/ Score
  105.         -- 17: Triple Kill w/ Score
  106.         -- 14: Killtacular w/ Score
  107.         -- 18: Killing Spree w/ Score
  108.         -- 17: Running Riot w/ Score
  109. end
  110. --]]
  111.  
  112. --[[
  113. function OnPlayerSpawn(player)
  114.        
  115.  
  116. end
  117. --]]
  118.  
  119. --[[
  120. function OnPlayerSpawnEnd(player)
  121.  
  122.  
  123. end
  124. --]]
  125.  
  126. function OnWeaponAssignment(player, objId, slot, weapId)
  127.        
  128.         return gettagid("weap", "weapons\\plasma rifle\\plasma rifle")
  129. end
  130.  
  131. --[[
  132. function OnWeaponReload(player, weapId)
  133.  
  134.         --return true
  135. end
  136. --]]
  137.  
  138. --[[
  139. function OnObjectCreationAttempt(mapId, parentId, player)
  140.        
  141.         --return mapId
  142. end
  143. --]]
  144.  
  145. --[[
  146. function OnObjectCreation(objId)
  147.  
  148.  
  149. end
  150. --]]
  151.  
  152. --[[
  153. function OnObjectInteraction(player, objId, mapId)
  154.  
  155.  
  156. end
  157. --]]
  158.  
  159. --[[
  160. function OnTeamDecision(team)
  161.        
  162.         --return team
  163. end
  164. --]]
  165.  
  166. --[[
  167. function OnTeamChange(player, old_team, new_team, voluntary)
  168.        
  169.         --return true
  170. end
  171. --]]
  172.  
  173. function OnDamageLookup(receiver, causer, mapId)
  174.        
  175.         local tagname = gettaginfo(mapId)
  176.        
  177.         if tagname == "weapons\\plasma rifle\\bolt" then
  178.                 local player = objectidtoplayer(causer)
  179.                 if player then
  180.                         local m_causer = getobject(causer)
  181.                         local m_receiver = getobject(receiver)
  182.                         if m_receiver and m_causer then
  183.                                 local mapId = readdword(m_receiver)
  184.                                 local tagname, tagtype = gettaginfo(mapId)
  185.                                 if tagtype == "vehi" then
  186.                                         if gravity[player] then
  187.                                                 gravity[player] = nil
  188.                                                 writebit(m_receiver, 0x10, 5, 0)
  189.                                                 local x_aim = readfloat(m_causer, 0x230)
  190.                                                 local y_aim = readfloat(m_causer, 0x234)
  191.                                                 local z_aim = readfloat(m_causer, 0x238)
  192.                                                 local vel = 1
  193.                                                 writefloat(m_receiver, 0x68, vel * math.sin(x_aim))
  194.                                                 writefloat(m_receiver, 0x6C, vel * math.sin(y_aim))
  195.                                                 writefloat(m_receiver, 0x70, vel * math.sin(z_aim))
  196.                                                 registertimer(10, "ActiveVehicle", {receiver, player})
  197.                                         else
  198.                                                 local bool
  199.                                                
  200.                                                 for p,r in pairs(gravity) do
  201.                                                         if r == receiver then
  202.                                                                 bool = true
  203.                                                         end
  204.                                                 end
  205.                                                
  206.                                                 if not bool then
  207.                                                         gravity[player] = receiver
  208.                                                         vehicles[receiver] = player
  209.                                                         writebit(m_receiver, 0x10, 5, 0)
  210.                                                         local m_player = getplayer(player)
  211.                                                         local xy_aim = readfloat(m_player, 0x138)
  212.                                                         local z_aim = readfloat(m_player, 0x13C)
  213.                                                         local dist = 4
  214.                                                         local x = readfloat(m_causer, 0x5C)
  215.                                                         local y = readfloat(m_causer, 0x60)
  216.                                                         local z = readfloat(m_causer, 0x64)
  217.                                                         writefloat(m_receiver, 0x5C, x + dist * math.cos(xy_aim))
  218.                                                         writefloat(m_receiver, 0x60, y + dist * math.sin(xy_aim))
  219.                                                         writefloat(m_receiver, 0x64, z + dist * math.sin(z_aim) + 0.5)
  220.                                                         writefloat(m_receiver, 0x68, 0)
  221.                                                         writefloat(m_receiver, 0x6C, 0)
  222.                                                         writefloat(m_receiver, 0x70, 0)
  223.                                                         local angular_velocity_x = readfloat(m_receiver, 0x8C)
  224.                                                         local angular_velocity_y = readfloat(m_receiver, 0x90)
  225.                                                         local angular_velocity_z = readfloat(m_receiver, 0x94)
  226.                                                         writefloat(m_receiver, 0x8C, .2)
  227.                                                         writefloat(m_receiver, 0x90, .3)
  228.                                                         writefloat(m_receiver, 0x94, .05)
  229.                                                 end
  230.                                         end
  231.                                 end
  232.                         end
  233.                 end
  234.        
  235.         elseif tagname == "globals\\vehicle_collision" then
  236.        
  237.                 if vehicles[causer] then
  238.                         local m_player = getplayer(vehicles[causer])
  239.                         if m_player then
  240.                                 local objId = readdword(m_player, 0x34)
  241.                                 applydmgtag(receiver, gettagid("jpt!", "weapons\\rocket launcher\\explosion"), 500, objId)
  242.                                 return false
  243.                         end
  244.                 end
  245.         end
  246. end
  247.  
  248. --[[
  249. function OnDamageApplication(receiver, causer, mapId, location, backtap)
  250.        
  251.         --return true
  252. end
  253. --]]
  254.  
  255. --[[
  256. function OnVehicleEntry(player, vehiId, seat, mapId, voluntary)
  257.        
  258.         --return true
  259. end
  260. --]]
  261.  
  262. --[[
  263. function OnVehicleEject(player, voluntary)
  264.  
  265.         --return true
  266. end
  267. --]]
  268.  
  269. function OnClientUpdate(player)
  270.  
  271.         local vehiId = gravity[player]
  272.         if vehiId then
  273.                 local m_player = getplayer(player)
  274.                 local objId = readdword(m_player, 0x34)
  275.                 local m_object = getobject(objId)
  276.                 local m_vehicle = getobject(vehiId)
  277.                 local x_aim = readfloat(m_object, 0x230)
  278.                 local y_aim = readfloat(m_object, 0x234)
  279.                 local z_aim = readfloat(m_object, 0x238)
  280.                 local x = readfloat(m_object, 0x5C)
  281.                 local y = readfloat(m_object, 0x60)
  282.                 local z = readfloat(m_object, 0x64)
  283.                 local dist = 4
  284.                 writefloat(m_vehicle, 0x5C, x + dist * math.sin(x_aim))
  285.                 writefloat(m_vehicle, 0x60, y + dist * math.sin(y_aim))
  286.                 writefloat(m_vehicle, 0x64, z + dist * math.sin(z_aim) + 0.5)
  287.                 writefloat(m_vehicle, 0x68, 0)
  288.                 writefloat(m_vehicle, 0x6C, 0)
  289.                 writefloat(m_vehicle, 0x70, 0.01285)
  290.         end
  291. end
  292.  
  293. function ActiveVehicle(id, count, info)
  294.  
  295.         local vehiId = info[1]
  296.         local player = info[2]
  297.         local m_vehicle = getobject(vehiId)
  298.         if m_vehicle then
  299.                 if vehicles[vehiId] == player then
  300.                         if getplayer(player) then
  301.                                 local vx = readfloat(m_vehicle, 0x68)
  302.                                 local vy = readfloat(m_vehicle, 0x6C)
  303.                                 local vz = readfloat(m_vehicle, 0x70)
  304.                                 local velocity = math.sqrt(vx ^ 2 + vy ^ 2 + vz ^ 2)
  305.                                 if velocity == 0 then
  306.                                         activetime[vehiId] = activetime[vehiId] or 100 - 1
  307.                                         if activetime[vehiId] <= 0 then
  308.                                                 vehicles[vehiId] = nil
  309.                                                 return false
  310.                                         end
  311.                                 end
  312.                         end
  313.                 else
  314.                         return false
  315.                 end
  316.         end
  317.        
  318.         return true
  319. end

HaloNet.Net is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

Login or Register to edit or fork this paste. It's free.