Advertisement
HR_Shaft

Show Rider Names v2 for SAPP

Aug 1st, 2016
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 9.17 KB | None | 0 0
  1. -- Show Rider Names v2
  2. -- Designed for Halo PC/CE
  3.  
  4. -- Script will show names of teammates who enter the same vehicle, or are in the same vehicle and types 'WHO IS'
  5.  
  6. -- changelog
  7.     -- 7/31/2016 -- re-wrote entire script
  8.     -- 1/17/2017 -- edited some passenger values as it sometimes would not show passenger names
  9.  
  10. -- don't edit --
  11. api_version = "1.9.0.0"
  12. player_seat = {}
  13. vehicles = {}
  14.    
  15. function OnScriptLoad()
  16.     register_callback(cb['EVENT_GAME_START'],"OnNewGame")
  17.     register_callback(cb['EVENT_GAME_END'], "OnGameEnd")
  18.     register_callback(cb['EVENT_JOIN'],"OnPlayerJoin")
  19.     register_callback(cb['EVENT_LEAVE'],"OnPlayerLeave")
  20.     register_callback(cb['EVENT_DIE'], "OnPlayerDeath")
  21.     register_callback(cb['EVENT_CHAT'], "OnPlayerChat")
  22.     register_callback(cb['EVENT_VEHICLE_ENTER'], "OnVehicleEnter")
  23.     register_callback(cb['EVENT_VEHICLE_EXIT'], "OnVehicleEject")
  24.    
  25.     if get_var(0, "$gt") ~= "n/a" then
  26.         game_started = true
  27.         -- if script is reloaded during a game, repopulate player_seat values
  28.         for PlayerIndex=1,16 do
  29.             if player_present(PlayerIndex) then
  30.                 player_seat[PlayerIndex] = {}
  31.                 local player_object = get_dynamic_player(PlayerIndex)
  32.                 local player_object_id = read_dword(get_player(PlayerIndex) + 0x34)
  33.                 if (player_object ~= 0) then
  34.                     local vehicle_id = read_dword(player_object + 0x11C)
  35.                     if (vehicle_id ~= 0xFFFFFFFF) then
  36.                         local veh_obj = get_object_memory(vehicle_id)
  37.                         if (veh_obj ~= 0) then
  38.                             local passenger = read_dword(veh_obj + 0x32C)
  39.                             if (vehicles[vehicle_id] == nil) then
  40.                                 vehicles[vehicle_id] = {}
  41.                             end                        
  42.                             if (read_byte(player_object + 0x2F0) == 0) then -- << driver
  43.                                 player_seat[PlayerIndex].vehicleid = vehicle_id
  44.                                 player_seat[PlayerIndex].seat = 0
  45.                                 player_seat[PlayerIndex].vehobj = veh_obj
  46.                                 vehicles[vehicle_id].driver = PlayerIndex                              
  47.                             elseif (read_byte(player_object + 0x2F0) == 1) then -- << passenger
  48.                                 player_seat[PlayerIndex].vehicleid = vehicle_id
  49.                                 player_seat[PlayerIndex].seat = 1
  50.                                 player_seat[PlayerIndex].vehobj = veh_obj
  51.                                 vehicles[vehicle_id].passenger = PlayerIndex
  52.                                 if (passenger == 0xFFFFFFFF) then
  53.                                     write_dword(player_seat[PlayerIndex].vehobj + 0x32C, player_object_id)
  54.                                 end
  55.                             elseif (read_byte(player_object + 0x2F0) == 2) then -- << gunner
  56.                                 player_seat[PlayerIndex].vehicleid = vehicle_id
  57.                                 player_seat[PlayerIndex].seat = 2
  58.                                 player_seat[PlayerIndex].vehobj = veh_obj
  59.                                 vehicles[vehicle_id].gunner = PlayerIndex
  60.                             elseif (read_byte(player_object + 0x2F0) == 0xFFFFFFFF) then -- << invalid/dead/not in vehicle
  61.                                 player_seat[PlayerIndex] = {}
  62.                             end
  63.                         end
  64.                     end
  65.                 else
  66.                     player_seat[PlayerIndex] = {}              
  67.                 end
  68.             end
  69.         end
  70.     end    
  71. end
  72.        
  73. function OnScriptUnload()
  74.     player_seat = {}
  75.     vehicles = {}
  76. end
  77.  
  78. function OnNewGame()
  79.     game_started = true
  80.     for i=1,16 do
  81.         if player_present(i) then
  82.             player_seat[i] = {}
  83.         end
  84.     end
  85. end
  86.  
  87. function OnGameEnd()
  88.     game_started = false
  89.     vehicles = {}
  90.     for i=1,16 do
  91.         if player_present(i) then
  92.             player_seat[i] = nil
  93.         end
  94.     end    
  95. end
  96.  
  97. function OnPlayerJoin(PlayerIndex)
  98.     player_seat[PlayerIndex] = {}
  99. end
  100.  
  101. function OnPlayerLeave(PlayerIndex)
  102.     if (player_seat[PlayerIndex].seat == 1) then
  103.         write_dword(player_seat[PlayerIndex].vehobj + 0x32C, 0xFFFFFFFF)
  104.     end
  105.     player_seat[PlayerIndex] = {}  
  106. end
  107.  
  108. function OnPlayerDeath(PlayerIndex, KillerIndex)
  109.     if game_started then
  110.         if (player_seat[PlayerIndex].seat == 1) then
  111.             if (player_seat[PlayerIndex].vehobj ~= nil) then
  112.                 write_dword(player_seat[PlayerIndex].vehobj + 0x32C, 0xFFFFFFFF)
  113.             end
  114.             player_seat[PlayerIndex] = {}
  115.         end
  116.         player_seat[PlayerIndex] = {}  
  117.     end
  118. end
  119.  
  120. function OnVehicleEnter(PlayerIndex, Seat)
  121.     if player_present(PlayerIndex) then
  122.         local player_object = get_dynamic_player(PlayerIndex)
  123.         local player_object_id = read_dword(get_player(PlayerIndex) + 0x34)
  124.         local vehicle_id = read_dword(player_object + 0x11C)
  125.         if (player_object ~= 0) then
  126.             if (vehicle_id ~= 0xFFFFFFFF) then
  127.                 if (vehicles[vehicle_id] == nil) then
  128.                     vehicles[vehicle_id] = {}
  129.                 end
  130.                 local veh_obj = get_object_memory(vehicle_id)
  131.                 if (veh_obj ~= 0) then
  132.                     if (Seat == "0") then
  133.                         player_seat[PlayerIndex].vehicleid = vehicle_id
  134.                         player_seat[PlayerIndex].seat = 0
  135.                         player_seat[PlayerIndex].vehobj = veh_obj
  136.                         vehicles[vehicle_id].driver = PlayerIndex                          
  137.                     elseif (Seat == "1") then
  138.                         write_dword(veh_obj + 0x32C, player_object_id) 
  139.                         player_seat[PlayerIndex].vehicleid = vehicle_id
  140.                         player_seat[PlayerIndex].seat = 1
  141.                         player_seat[PlayerIndex].vehobj = veh_obj
  142.                         vehicles[vehicle_id].passenger = PlayerIndex
  143.                     elseif (Seat == "2") then
  144.                         player_seat[PlayerIndex].vehicleid = vehicle_id
  145.                         player_seat[PlayerIndex].seat = 2
  146.                         player_seat[PlayerIndex].vehobj = veh_obj
  147.                         vehicles[vehicle_id].gunner = PlayerIndex              
  148.                     end
  149.                     showplayers = timer(34, "Show_Players", vehicle_id)
  150.                 end
  151.             end    
  152.         end
  153.     end    
  154. end
  155.  
  156. function OnVehicleEject(PlayerIndex)
  157.     if player_alive(PlayerIndex) then
  158.         if (player_seat[PlayerIndex].seat == 1) then
  159.             if (player_seat[PlayerIndex].vehobj ~= nil) then
  160.                 write_dword(player_seat[PlayerIndex].vehobj + 0x32C, 0xFFFFFFFF)
  161.             end
  162.             player_seat[PlayerIndex] = {}
  163.         else
  164.             player_seat[PlayerIndex] = {}
  165.         end
  166.     end    
  167. end
  168.  
  169. function OnPlayerChat(PlayerIndex, Message)
  170.     local response = nil
  171.     local name = get_var(PlayerIndex,"$name")
  172.     local Message = string.lower(Message)
  173.     if (Message == "whois") or (Message == "who is") or (Message == "/whois") or (Message == "/who is") then
  174.         response = false
  175.         local player_object = get_dynamic_player(PlayerIndex)
  176.         if game_started then
  177.             if (player_object ~= 0) then
  178.                 local vehicle_id = read_dword(player_object + 0x11C)
  179.                 if (vehicle_id ~= 0xFFFFFFFF) then
  180.                     local veh_obj = get_object_memory(vehicle_id)
  181.                     if (veh_obj ~= 0) then                     
  182.                         message_players(getdriverplayer(veh_obj), getgunnerplayer(veh_obj), getpassengerplayer(veh_obj))
  183.                     end    
  184.                 else
  185.                     say(PlayerIndex, "**Who Is** You must be in a vehicle to use this feature.")
  186.                 end
  187.             end
  188.         else
  189.             say(PlayerIndex, "**Who Is** You must for new game to use this feature.")
  190.         end
  191.     end
  192.     return response
  193. end
  194.  
  195. function Show_Players(vehicle_id)
  196.     if (vehicle_id == 0xFFFFFFFF) or (vehicle_id == nil) then return end
  197.     local veh_obj = get_object_memory(vehicle_id)
  198.     if (veh_obj ~= 0) then
  199.         message_players(getdriverplayer(veh_obj), getgunnerplayer(veh_obj), getpassengerplayer(veh_obj))   
  200.     end
  201.     return false   
  202. end
  203.  
  204. function ObjectIDtoPlayer(ObjectID) -- returns PlayerIndex from an ObjectID
  205.     local object = get_object_memory(ObjectID)
  206.     if object ~= 0 then
  207.     local playerId = read_word(object + 0xC0)
  208.     return to_player_index(playerId) ~= 0 and playerId or nil end
  209. end
  210.  
  211. function getpassengerobjid(veh_obj) -- returns passenger object id
  212.     if (veh_obj == nil) then return end
  213.     return read_dword(veh_obj + 0x32C)
  214. end
  215.  
  216. function getdriverplayer(veh_obj) -- returns the DriverIndex of vehicle
  217.     if (veh_obj == nil) then say_all("driver veh_obj nil") return end
  218.     local obj_id = read_dword(veh_obj + 0x324)
  219.     if obj_id and (obj_id ~= 0xFFFFFFFF) then return ObjectIDtoPlayer(obj_id) end
  220. end
  221.    
  222. function getgunnerplayer(veh_obj) -- returns the GunnerIndex of vehicle
  223.     if (veh_obj == nil) then return say_all("gunner veh_obj nil") end
  224.     local obj_id = read_dword(veh_obj + 0x328)
  225.     if obj_id and (obj_id ~= 0xFFFFFFFF) then return ObjectIDtoPlayer(obj_id) end
  226. end
  227.  
  228. function getpassengerplayer(veh_obj) -- returns the PassengerIndex of vehicle
  229.     if (veh_obj == nil) then return end
  230.     local obj_id = getpassengerobjid(veh_obj)
  231.     if obj_id and (obj_id ~= 0xFFFFFFFF)  then return ObjectIDtoPlayer(obj_id) end
  232. end
  233.  
  234. function message_players(driver, gunner, passenger) -- returns the seats and names of players in the vehicle
  235.     local t,n = {}, {}
  236.     if driver then
  237.         table.insert(t, driver)
  238.         table.insert(n, "Driver")
  239.     end
  240.     if gunner then
  241.         table.insert(t, gunner)
  242.         table.insert(n, "Gunner")
  243.     end
  244.     if passenger then
  245.         table.insert(t, passenger)
  246.         table.insert(n, "Passenger")
  247.     end
  248.     for k,v in pairs(t) do
  249.         for key,value in pairs(t) do
  250.             if (v ~= value) then
  251.                 rprint(to_player_index(v), n[key] .. ": " .. get_var(to_player_index(value), "$name"))
  252.             end
  253.         end
  254.     end
  255. end
  256.  
  257. -- assign passenger seat player to vehicle
  258. -- overcomes defect in reliability of passenger seat reading for scripts
  259. function assignpassenger(veh_obj, player_object_id)
  260.     if (veh_obj == nil) or (player_object_id == nil) then return false end
  261.     if game_started then
  262.         write_dword(veh_obj + 0x32C, player_object_id)
  263.     end
  264.     return false
  265. end
  266.  
  267. -- resets passenger seat to empty if player exits, dies or leaves
  268. function resetpassenger(PlayerIndex)
  269.     if (player_seat[PlayerIndex].vehobj == nil) then return false end
  270.     write_dword(player_seat[PlayerIndex].vehobj + 0x32C, 0xFFFFFFFF)
  271.     player_seat[PlayerIndex] = {}      
  272.     return false   
  273. end
  274.  
  275. function OnError(Message)
  276.     print(debug.traceback())
  277. end
  278.  
  279. -- Created by H® Shaft
  280. -- Visit http://halorace.org/forum/index.php
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement