88 lines
2.6 KiB
Lua
88 lines
2.6 KiB
Lua
-- name: Counter-Op
|
|
-- description: All players except the host will try to kill the host
|
|
|
|
gServerSettings.playerInteractions = PLAYER_INTERACTIONS_PVP
|
|
|
|
function get_main_character()
|
|
local np = network_player_from_global_index(0)
|
|
if np == nil then
|
|
np = gNetworkPlayers[0]
|
|
end
|
|
return gMarioStates[np.localIndex]
|
|
end
|
|
|
|
function is_main_character(m)
|
|
local main = get_main_character()
|
|
return m.playerIndex == main.playerIndex
|
|
end
|
|
|
|
function does_level_match(m1, m2)
|
|
local np1 = gNetworkPlayers[m1.playerIndex]
|
|
local np2 = gNetworkPlayers[m2.playerIndex]
|
|
if np1.currActNum ~= np2.currActNum then
|
|
return false
|
|
end
|
|
if np1.currAreaIndex ~= np2.currAreaIndex then
|
|
return false
|
|
end
|
|
if np1.currCourseNum ~= np2.currCourseNum then
|
|
return false
|
|
end
|
|
if np1.currLevelNum ~= np2.currLevelNum then
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
function mario_update_local(m)
|
|
if not is_main_character(m) then
|
|
local main = get_main_character()
|
|
local mainNp = gNetworkPlayers[main.playerIndex]
|
|
--print('>>>', mainNp.globalIndex, mainNp.currAreaSyncValid, mainNp.currLevelSyncValid)
|
|
--if mainNp.currAreaSyncValid and mainNp.currLevelSyncValid then
|
|
if not does_level_match(m, main) then
|
|
warp_to_level(mainNp.currLevelNum, mainNp.currAreaIndex, mainNp.currActNum)
|
|
end
|
|
--end
|
|
end
|
|
end
|
|
|
|
function mario_update(m)
|
|
if m.playerIndex == 0 then
|
|
mario_update_local(m)
|
|
end
|
|
|
|
local np = gNetworkPlayers[m.playerIndex]
|
|
if is_main_character(m) then
|
|
m.visibleToEnemies = 1
|
|
if np.modelIndex == CT_TOAD then
|
|
np.overrideModelIndex = CT_MARIO
|
|
end
|
|
else
|
|
m.visibleToEnemies = 0
|
|
if np.modelIndex ~= CT_TOAD then
|
|
np.overrideModelIndex = CT_TOAD
|
|
end
|
|
end
|
|
end
|
|
|
|
function allow_pvp_attack(m1, m2)
|
|
return m1.visibleToEnemies ~= m2.visibleToEnemies
|
|
end
|
|
|
|
function allow_interact(m, obj, interactType)
|
|
if not is_main_character(m) then
|
|
if (interactType & INTERACT_WARP) ~= 0 then return true end
|
|
if (interactType & INTERACT_WARP_DOOR) ~= 0 then return true end
|
|
if (interactType & INTERACT_STRONG_WIND) ~= 0 then return true end
|
|
if (interactType & INTERACT_BBH_ENTRANCE) ~= 0 then return true end
|
|
if (interactType & INTERACT_PLAYER) ~= 0 then return true end
|
|
return false
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
hook_event(HOOK_ALLOW_INTERACT, allow_interact)
|
|
hook_event(HOOK_ALLOW_PVP_ATTACK, allow_pvp_attack)
|
|
hook_event(HOOK_MARIO_UPDATE, mario_update) |