sm64coopdx/mods/arena/arena-network.lua
2023-12-16 13:57:24 -05:00

113 lines
3.1 KiB
Lua

if SM64COOPDX_VERSION == nil then return end
PACKET_ARENA_DEATH = 1
PACKET_ARENA_HAMMER_HIT = 2
PACKET_ARENA_RESPAWN = 3
PACKET_ARENA_FLAG = 4
-------------
function send_arena_death(victimGlobalId, attackerGlobalId)
network_send(true, {
id = PACKET_ARENA_DEATH,
victimGlobalId = victimGlobalId,
attackerGlobalId = attackerGlobalId,
})
on_arena_player_death(victimGlobalId, attackerGlobalId)
end
function on_packet_arena_death_receive(dataTable)
on_arena_player_death(dataTable.victimGlobalId, dataTable.attackerGlobalId)
end
-------------
function on_packet_arena_respawn_receive(dataTable)
player_respawn(gMarioStates[0])
end
function send_arena_respawn()
network_send(true, {
id = PACKET_ARENA_RESPAWN,
})
on_packet_arena_respawn_receive(nil)
end
-------------
function send_arena_hammer_hit(victimGlobalId, attackerGlobalId)
network_send(true, {
id = PACKET_ARENA_HAMMER_HIT,
victimGlobalId = victimGlobalId,
attackerGlobalId = attackerGlobalId,
})
-- spawn particles
local npVictim = network_player_from_global_index(victimGlobalId)
if npVictim ~= nil then
local mVictim = gMarioStates[npVictim.localIndex]
spawn_vertical_stars(mVictim.pos.x, mVictim.pos.y, mVictim.pos.z)
end
end
function on_packet_arena_hammer_hit_receive(dataTable)
local npVictim = network_player_from_global_index(dataTable.victimGlobalId)
local npAttacker = network_player_from_global_index(dataTable.attackerGlobalId)
local sAttacker = gPlayerSyncTable[npAttacker.localIndex]
-- decrease ammo
if sAttacker ~= nil and sAttacker.localIndex == 0 then
if sAttacker.item == ITEM_HAMMER then
sAttacker.ammo = sAttacker.ammo - 1
end
end
-- spawn particles
if npVictim ~= nil then
local mVictim = gMarioStates[npVictim.localIndex]
spawn_vertical_stars(mVictim.pos.x, mVictim.pos.y, mVictim.pos.z)
end
end
-------------
function on_packet_arena_flag_receive(dataTable)
local np = gNetworkPlayers[0]
local data = gArenaFlagInfo[dataTable.team]
if data ~= nil and data.obj ~= nil then
spawn_sparkles(data.obj.oPosX, data.obj.oPosY, data.obj.oPosZ)
spawn_mist(data.obj, 2)
end
if dataTable.globalIndex == np.globalIndex then
cur_obj_play_sound_2(SOUND_GENERAL_COLLECT_1UP)
end
djui_popup_create(dataTable.msg, 3)
end
function send_arena_flag(team, globalIndex, msg)
local dataTable = {
id = PACKET_ARENA_FLAG,
team = team,
globalIndex = globalIndex,
msg = msg
}
network_send(true, dataTable)
on_packet_arena_flag_receive(dataTable)
end
-------------
sPacketTable = {
[PACKET_ARENA_DEATH] = on_packet_arena_death_receive,
[PACKET_ARENA_HAMMER_HIT] = on_packet_arena_hammer_hit_receive,
[PACKET_ARENA_RESPAWN] = on_packet_arena_respawn_receive,
[PACKET_ARENA_FLAG] = on_packet_arena_flag_receive,
}
function on_packet_receive(dataTable)
if sPacketTable[dataTable.id] ~= nil then
sPacketTable[dataTable.id](dataTable)
end
end
hook_event(HOOK_ON_PACKET_RECEIVE, on_packet_receive)