Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Show Rider Names v2
- -- Designed for Halo PC/CE
- -- Script will show names of teammates who enter the same vehicle, or are in the same vehicle and types 'WHO IS'
- -- changelog
- -- 7/31/2016 -- re-wrote entire script
- -- 1/17/2017 -- edited some passenger values as it sometimes would not show passenger names
- -- don't edit --
- api_version = "1.9.0.0"
- player_seat = {}
- vehicles = {}
- function OnScriptLoad()
- register_callback(cb['EVENT_GAME_START'],"OnNewGame")
- register_callback(cb['EVENT_GAME_END'], "OnGameEnd")
- register_callback(cb['EVENT_JOIN'],"OnPlayerJoin")
- register_callback(cb['EVENT_LEAVE'],"OnPlayerLeave")
- register_callback(cb['EVENT_DIE'], "OnPlayerDeath")
- register_callback(cb['EVENT_CHAT'], "OnPlayerChat")
- register_callback(cb['EVENT_VEHICLE_ENTER'], "OnVehicleEnter")
- register_callback(cb['EVENT_VEHICLE_EXIT'], "OnVehicleEject")
- if get_var(0, "$gt") ~= "n/a" then
- game_started = true
- -- if script is reloaded during a game, repopulate player_seat values
- for PlayerIndex=1,16 do
- if player_present(PlayerIndex) then
- player_seat[PlayerIndex] = {}
- local player_object = get_dynamic_player(PlayerIndex)
- local player_object_id = read_dword(get_player(PlayerIndex) + 0x34)
- if (player_object ~= 0) then
- local vehicle_id = read_dword(player_object + 0x11C)
- if (vehicle_id ~= 0xFFFFFFFF) then
- local veh_obj = get_object_memory(vehicle_id)
- if (veh_obj ~= 0) then
- local passenger = read_dword(veh_obj + 0x32C)
- if (vehicles[vehicle_id] == nil) then
- vehicles[vehicle_id] = {}
- end
- if (read_byte(player_object + 0x2F0) == 0) then -- << driver
- player_seat[PlayerIndex].vehicleid = vehicle_id
- player_seat[PlayerIndex].seat = 0
- player_seat[PlayerIndex].vehobj = veh_obj
- vehicles[vehicle_id].driver = PlayerIndex
- elseif (read_byte(player_object + 0x2F0) == 1) then -- << passenger
- player_seat[PlayerIndex].vehicleid = vehicle_id
- player_seat[PlayerIndex].seat = 1
- player_seat[PlayerIndex].vehobj = veh_obj
- vehicles[vehicle_id].passenger = PlayerIndex
- if (passenger == 0xFFFFFFFF) then
- write_dword(player_seat[PlayerIndex].vehobj + 0x32C, player_object_id)
- end
- elseif (read_byte(player_object + 0x2F0) == 2) then -- << gunner
- player_seat[PlayerIndex].vehicleid = vehicle_id
- player_seat[PlayerIndex].seat = 2
- player_seat[PlayerIndex].vehobj = veh_obj
- vehicles[vehicle_id].gunner = PlayerIndex
- elseif (read_byte(player_object + 0x2F0) == 0xFFFFFFFF) then -- << invalid/dead/not in vehicle
- player_seat[PlayerIndex] = {}
- end
- end
- end
- else
- player_seat[PlayerIndex] = {}
- end
- end
- end
- end
- end
- function OnScriptUnload()
- player_seat = {}
- vehicles = {}
- end
- function OnNewGame()
- game_started = true
- for i=1,16 do
- if player_present(i) then
- player_seat[i] = {}
- end
- end
- end
- function OnGameEnd()
- game_started = false
- vehicles = {}
- for i=1,16 do
- if player_present(i) then
- player_seat[i] = nil
- end
- end
- end
- function OnPlayerJoin(PlayerIndex)
- player_seat[PlayerIndex] = {}
- end
- function OnPlayerLeave(PlayerIndex)
- if (player_seat[PlayerIndex].seat == 1) then
- write_dword(player_seat[PlayerIndex].vehobj + 0x32C, 0xFFFFFFFF)
- end
- player_seat[PlayerIndex] = {}
- end
- function OnPlayerDeath(PlayerIndex, KillerIndex)
- if game_started then
- if (player_seat[PlayerIndex].seat == 1) then
- if (player_seat[PlayerIndex].vehobj ~= nil) then
- write_dword(player_seat[PlayerIndex].vehobj + 0x32C, 0xFFFFFFFF)
- end
- player_seat[PlayerIndex] = {}
- end
- player_seat[PlayerIndex] = {}
- end
- end
- function OnVehicleEnter(PlayerIndex, Seat)
- if player_present(PlayerIndex) then
- local player_object = get_dynamic_player(PlayerIndex)
- local player_object_id = read_dword(get_player(PlayerIndex) + 0x34)
- local vehicle_id = read_dword(player_object + 0x11C)
- if (player_object ~= 0) then
- if (vehicle_id ~= 0xFFFFFFFF) then
- if (vehicles[vehicle_id] == nil) then
- vehicles[vehicle_id] = {}
- end
- local veh_obj = get_object_memory(vehicle_id)
- if (veh_obj ~= 0) then
- if (Seat == "0") then
- player_seat[PlayerIndex].vehicleid = vehicle_id
- player_seat[PlayerIndex].seat = 0
- player_seat[PlayerIndex].vehobj = veh_obj
- vehicles[vehicle_id].driver = PlayerIndex
- elseif (Seat == "1") then
- write_dword(veh_obj + 0x32C, player_object_id)
- player_seat[PlayerIndex].vehicleid = vehicle_id
- player_seat[PlayerIndex].seat = 1
- player_seat[PlayerIndex].vehobj = veh_obj
- vehicles[vehicle_id].passenger = PlayerIndex
- elseif (Seat == "2") then
- player_seat[PlayerIndex].vehicleid = vehicle_id
- player_seat[PlayerIndex].seat = 2
- player_seat[PlayerIndex].vehobj = veh_obj
- vehicles[vehicle_id].gunner = PlayerIndex
- end
- showplayers = timer(34, "Show_Players", vehicle_id)
- end
- end
- end
- end
- end
- function OnVehicleEject(PlayerIndex)
- if player_alive(PlayerIndex) then
- if (player_seat[PlayerIndex].seat == 1) then
- if (player_seat[PlayerIndex].vehobj ~= nil) then
- write_dword(player_seat[PlayerIndex].vehobj + 0x32C, 0xFFFFFFFF)
- end
- player_seat[PlayerIndex] = {}
- else
- player_seat[PlayerIndex] = {}
- end
- end
- end
- function OnPlayerChat(PlayerIndex, Message)
- local response = nil
- local name = get_var(PlayerIndex,"$name")
- local Message = string.lower(Message)
- if (Message == "whois") or (Message == "who is") or (Message == "/whois") or (Message == "/who is") then
- response = false
- local player_object = get_dynamic_player(PlayerIndex)
- if game_started then
- if (player_object ~= 0) then
- local vehicle_id = read_dword(player_object + 0x11C)
- if (vehicle_id ~= 0xFFFFFFFF) then
- local veh_obj = get_object_memory(vehicle_id)
- if (veh_obj ~= 0) then
- message_players(getdriverplayer(veh_obj), getgunnerplayer(veh_obj), getpassengerplayer(veh_obj))
- end
- else
- say(PlayerIndex, "**Who Is** You must be in a vehicle to use this feature.")
- end
- end
- else
- say(PlayerIndex, "**Who Is** You must for new game to use this feature.")
- end
- end
- return response
- end
- function Show_Players(vehicle_id)
- if (vehicle_id == 0xFFFFFFFF) or (vehicle_id == nil) then return end
- local veh_obj = get_object_memory(vehicle_id)
- if (veh_obj ~= 0) then
- message_players(getdriverplayer(veh_obj), getgunnerplayer(veh_obj), getpassengerplayer(veh_obj))
- end
- return false
- end
- function ObjectIDtoPlayer(ObjectID) -- returns PlayerIndex from an ObjectID
- local object = get_object_memory(ObjectID)
- if object ~= 0 then
- local playerId = read_word(object + 0xC0)
- return to_player_index(playerId) ~= 0 and playerId or nil end
- end
- function getpassengerobjid(veh_obj) -- returns passenger object id
- if (veh_obj == nil) then return end
- return read_dword(veh_obj + 0x32C)
- end
- function getdriverplayer(veh_obj) -- returns the DriverIndex of vehicle
- if (veh_obj == nil) then say_all("driver veh_obj nil") return end
- local obj_id = read_dword(veh_obj + 0x324)
- if obj_id and (obj_id ~= 0xFFFFFFFF) then return ObjectIDtoPlayer(obj_id) end
- end
- function getgunnerplayer(veh_obj) -- returns the GunnerIndex of vehicle
- if (veh_obj == nil) then return say_all("gunner veh_obj nil") end
- local obj_id = read_dword(veh_obj + 0x328)
- if obj_id and (obj_id ~= 0xFFFFFFFF) then return ObjectIDtoPlayer(obj_id) end
- end
- function getpassengerplayer(veh_obj) -- returns the PassengerIndex of vehicle
- if (veh_obj == nil) then return end
- local obj_id = getpassengerobjid(veh_obj)
- if obj_id and (obj_id ~= 0xFFFFFFFF) then return ObjectIDtoPlayer(obj_id) end
- end
- function message_players(driver, gunner, passenger) -- returns the seats and names of players in the vehicle
- local t,n = {}, {}
- if driver then
- table.insert(t, driver)
- table.insert(n, "Driver")
- end
- if gunner then
- table.insert(t, gunner)
- table.insert(n, "Gunner")
- end
- if passenger then
- table.insert(t, passenger)
- table.insert(n, "Passenger")
- end
- for k,v in pairs(t) do
- for key,value in pairs(t) do
- if (v ~= value) then
- rprint(to_player_index(v), n[key] .. ": " .. get_var(to_player_index(value), "$name"))
- end
- end
- end
- end
- -- assign passenger seat player to vehicle
- -- overcomes defect in reliability of passenger seat reading for scripts
- function assignpassenger(veh_obj, player_object_id)
- if (veh_obj == nil) or (player_object_id == nil) then return false end
- if game_started then
- write_dword(veh_obj + 0x32C, player_object_id)
- end
- return false
- end
- -- resets passenger seat to empty if player exits, dies or leaves
- function resetpassenger(PlayerIndex)
- if (player_seat[PlayerIndex].vehobj == nil) then return false end
- write_dword(player_seat[PlayerIndex].vehobj + 0x32C, 0xFFFFFFFF)
- player_seat[PlayerIndex] = {}
- return false
- end
- function OnError(Message)
- print(debug.traceback())
- end
- -- Created by H® Shaft
- -- Visit http://halorace.org/forum/index.php
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement