diff --git a/src/lua_hook.h b/src/lua_hook.h index ce79cd1cb..39d9161b0 100644 --- a/src/lua_hook.h +++ b/src/lua_hook.h @@ -62,6 +62,7 @@ automatically. X (ShieldSpecial),/* shield abilities */\ X (PlayerCanDamage),/* P_PlayerCanDamage */\ X (PlayerQuit),\ + X (NameChange),\ X (IntermissionThinker),/* Y_Ticker */\ X (TeamSwitch),/* team switching in... uh... *what* speak, spit it the fuck out */\ X (ViewpointSwitch),/* spy mode (no trickstabs) */\ @@ -153,6 +154,7 @@ int LUA_HookMapThingSpawn(mobj_t *, mapthing_t *); int LUA_HookFollowMobj(player_t *, mobj_t *); int LUA_HookPlayerCanDamage(player_t *, mobj_t *); void LUA_HookPlayerQuit(player_t *, kickreason_t); +int LUA_HookNameChange(player_t *plr, const char *name); int LUA_HookTeamSwitch(player_t *, int newteam, boolean fromspectators, boolean tryingautobalance, boolean tryingscramble); int LUA_HookViewpointSwitch(player_t *player, player_t *newdisplayplayer, boolean forced); int LUA_HookSeenPlayer(player_t *player, player_t *seenfriend); diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c index 1bf3caf65..c7d2f3f4b 100644 --- a/src/lua_hooklib.c +++ b/src/lua_hooklib.c @@ -1077,6 +1077,18 @@ void LUA_HookPlayerQuit(player_t *plr, kickreason_t reason) } } +int LUA_HookNameChange(player_t *plr, const char *name) +{ + Hook_State hook; + if (prepare_hook(&hook, true, HOOK(NameChange))) + { + LUA_PushUserdata(gL, plr, META_PLAYER); // Player that changed name + lua_pushstring(gL, name); // New player name + call_hooks(&hook, 1, res_false); + } + return hook.status; +} + int LUA_HookTeamSwitch(player_t *player, int newteam, boolean fromspectators, boolean tryingautobalance, boolean tryingscramble) { Hook_State hook; diff --git a/src/netcode/d_netcmd.c b/src/netcode/d_netcmd.c index 35e28db36..fefddff37 100644 --- a/src/netcode/d_netcmd.c +++ b/src/netcode/d_netcmd.c @@ -1170,6 +1170,13 @@ static void SetPlayerName(INT32 playernum, char *newname) { if (strcasecmp(newname, player_names[playernum]) != 0) { + if (!LUA_HookNameChange(&players[playernum], newname)) + { + // Name change rejected by Lua + if (playernum == consoleplayer) + CV_StealthSet(&cv_playername, player_names[consoleplayer]); + return; + } if (netgame) HU_AddChatText(va("\x82*%s renamed to %s", player_names[playernum], newname), false);