From cdd78b2ec3c46c63fad5bc29b9e89b2920add612 Mon Sep 17 00:00:00 2001 From: Liam Date: Sun, 28 Dec 2008 18:28:57 -0500 Subject: [PATCH] Added rename command to PlayerCommands. Merged rename.phrases.txt and slapslay.phrases.txt into plugin.playercommands.txt. (Bug 2150 r=dvander) --- plugins/playercommands.sp | 22 +- plugins/playercommands/rename.sp | 196 ++++++++++++++++++ ....phrases.txt => plugin.playercommands.txt} | 74 ++++--- 3 files changed, 257 insertions(+), 35 deletions(-) create mode 100644 plugins/playercommands/rename.sp rename translations/{slapslay.phrases.txt => plugin.playercommands.txt} (60%) diff --git a/plugins/playercommands.sp b/plugins/playercommands.sp index 0318dca1..4ca50555 100644 --- a/plugins/playercommands.sp +++ b/plugins/playercommands.sp @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod SlapSlay Commands Plugin + * SourceMod Player Commands Plugin * Implements slap and slay commands * * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. @@ -40,9 +40,9 @@ public Plugin:myinfo = { - name = "SlapSlay Commands", + name = "Player Commands", author = "AlliedModders LLC", - description = "Slap and Slay Commands", + description = "Misc. Player Commands", version = SOURCEMOD_VERSION, url = "http://www.sourcemod.net/" }; @@ -51,14 +51,16 @@ new Handle:hTopMenu = INVALID_HANDLE; #include "playercommands/slay.sp" #include "playercommands/slap.sp" +#include "playercommands/rename.sp" public OnPluginStart() { LoadTranslations("common.phrases"); - LoadTranslations("slapslay.phrases"); + LoadTranslations("plugin.playercommands"); RegAdminCmd("sm_slap", Command_Slap, ADMFLAG_SLAY, "sm_slap <#userid|name> [damage]"); RegAdminCmd("sm_slay", Command_Slay, ADMFLAG_SLAY, "sm_slay <#userid|name>"); + RegAdminCmd("sm_rename", Command_Rename, ADMFLAG_SLAY, "sm_rename <#userid|name>"); /* Account for late loading */ new Handle:topmenu; @@ -98,6 +100,14 @@ public OnAdminMenuReady(Handle:topmenu) AdminMenu_Slap, player_commands, "sm_slap", - ADMFLAG_SLAY); + ADMFLAG_SLAY); + + AddToTopMenu(hTopMenu, + "sm_rename", + TopMenuObject_Item, + AdminMenu_Rename, + player_commands, + "sm_rename", + ADMFLAG_SLAY); } -} \ No newline at end of file +} diff --git a/plugins/playercommands/rename.sp b/plugins/playercommands/rename.sp new file mode 100644 index 00000000..b4c2b19e --- /dev/null +++ b/plugins/playercommands/rename.sp @@ -0,0 +1,196 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod Rename Plugin + * Provides renaming functionality + * + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or . + * + * Version: $Id$ + */ + +new String:g_NewName[MAXPLAYERS+1][MAX_NAME_LENGTH]; + +PerformRename(client, target) +{ + LogAction(client, target, "\"%L\" renamed \"%L\" to \"%s\")", client, target, g_NewName[target]); + ClientCommand(target, "name \"%s\"", g_NewName[target]); +} + +public AdminMenu_Rename(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DisplayOption) + { + Format(buffer, maxlength, "%T", "Rename player", param); + } + else if (action == TopMenuAction_SelectOption) + { + DisplayRenameTargetMenu(param); + } +} + +DisplayRenameTargetMenu(client) +{ + new Handle:menu = CreateMenu(MenuHandler_Rename); + + decl String:title[100]; + Format(title, sizeof(title), "%T:", "Rename player", client); + SetMenuTitle(menu, title); + SetMenuExitBackButton(menu, true); + + AddTargetsToMenu(menu, client, true); + + DisplayMenu(menu, client, MENU_TIME_FOREVER); +} + +public MenuHandler_Rename(Handle:menu, MenuAction:action, param1, param2) +{ + if (action == MenuAction_End) + { + CloseHandle(menu); + } + else if (action == MenuAction_Cancel) + { + if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE) + { + DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory); + } + } + else if (action == MenuAction_Select) + { + decl String:info[32]; + new userid, target; + + GetMenuItem(menu, param2, info, sizeof(info)); + userid = StringToInt(info); + + if ((target = GetClientOfUserId(userid)) == 0) + { + PrintToChat(param1, "[SM] %t", "Player no longer available"); + } + else if (!CanUserTarget(param1, target)) + { + PrintToChat(param1, "[SM] %t", "Unable to target"); + } + else + { + decl String:name[MAX_NAME_LENGTH]; + GetClientName(target, name, sizeof(name)); + + RandomizeName(target); + ShowActivity2(param1, "[SM] ", "%t", "Renamed target", "_s", name); + PerformRename(param1, target); + } + DisplayRenameTargetMenu(param1); + } +} + +RandomizeName(client) +{ + decl String:name[MAX_NAME_LENGTH]; + GetClientName(client, name, sizeof(name)); + + new len = strlen(name); + g_NewName[client][0] = '\0'; + + for (new i = 0; i < len; i++) + { + g_NewName[client][i] = name[GetRandomInt(0, len - 1)]; + } + g_NewName[client][len] = '\0'; +} + +public Action:Command_Rename(client, args) +{ + if (args < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_rename <#userid|name> [newname]"); + return Plugin_Handled; + } + + decl String:arg[MAX_NAME_LENGTH], String:arg2[MAX_NAME_LENGTH]; + GetCmdArg(1, arg, sizeof(arg)); + + new bool:randomize; + if (args > 1) + { + GetCmdArg(2, arg2, sizeof(arg2)); + } + else + { + randomize = true; + } + + decl String:target_name[MAX_TARGET_LENGTH]; + decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml; + + if ((target_count = ProcessTargetString( + arg, + client, + target_list, + MAXPLAYERS, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) > 0) + { + if (tn_is_ml) + { + ShowActivity2(client, "[SM] ", "%t", "Renamed target", target_name); + } + else + { + ShowActivity2(client, "[SM] ", "%t", "Renamed target", "_s", target_name); + } + + if (target_count > 1) /* We cannot name everyone the same thing. */ + { + randomize = true; + } + + for (new i = 0; i < target_count; i++) + { + if(randomize) + { + RandomizeName(target_list[i]); + } + else + { + Format(g_NewName[target_list[i]], MAX_NAME_LENGTH, "%s", arg2); + } + PerformRename(client, target_list[i]); + } + } + else + { + ReplyToTargetError(client, target_count); + } + return Plugin_Handled; +} diff --git a/translations/slapslay.phrases.txt b/translations/plugin.playercommands.txt similarity index 60% rename from translations/slapslay.phrases.txt rename to translations/plugin.playercommands.txt index ae8dc245..a56b1ec9 100644 --- a/translations/slapslay.phrases.txt +++ b/translations/plugin.playercommands.txt @@ -1,29 +1,45 @@ -"Phrases" -{ - "Slap player" - { - "en" "Slap player" - } - - "Slap damage" - { - "en" "Slap damage" - } - - "Slay player" - { - "en" "Slay player" - } - - "Slapped target" - { - "#format" "{1:t}" - "en" "Slapped {1}." - } - - "Slayed target" - { - "#format" "{1:t}" - "en" "Slayed {1}." - } -} +"Phrases" +{ + "Name changed" + { + "en" "An admin has changed your name" + } + + "Renamed target" + { + "#format" "{1:t}" + "en" "Renamed {1}." + } + + "Rename player" + { + "en" "Rename player" + } + + "Slap player" + { + "en" "Slap player" + } + + "Slap damage" + { + "en" "Slap damage" + } + + "Slay player" + { + "en" "Slay player" + } + + "Slapped target" + { + "#format" "{1:t}" + "en" "Slapped {1}." + } + + "Slayed target" + { + "#format" "{1:t}" + "en" "Slayed {1}." + } +} \ No newline at end of file