AleksandrM3
Участник
- Сообщения
- 137
- Реакции
- 2
есть стандартный плагин с номинацией карт, мне нужно его переделать, чтобы когда игрок пишет nominate, ему сначала выскакивало меню, где было бы несколько групп :
1. Маленькие карты
2. Стандартные
3. Новые
4. Все
И уже там игрок выбирал нужную карту
если кто то возьмется , вопрос благодарности, в личку
1. Маленькие карты
2. Стандартные
3. Новые
4. Все
И уже там игрок выбирал нужную карту
PHP:
public PlVers:__version =
{
version = 5,
filevers = "1.6.3",
date = "11/25/2014",
time = "07:42:41"
};
new Float:NULL_VECTOR[3];
new String:NULL_STRING[4];
public Extension:__ext_core =
{
name = "Core",
file = "core",
autoload = 0,
required = 0,
};
new MaxClients;
public SharedPlugin:__pl_mapchooser =
{
name = "mapchooser",
file = "mapchooser.smx",
required = 1,
};
public Plugin:myinfo =
{
name = "Map Nominations",
description = "Provides Map Nominations",
author = "AlliedModders LLC",
version = "1.6.3",
url = "http://www.sourcemod.net/"
};
new Handle:g_Cvar_ExcludeOld;
new Handle:g_Cvar_ExcludeCurrent;
new Handle:g_MapList;
new Handle:g_MapMenu;
new g_mapFileSerial = -1;
new Handle:g_mapTrie;
public __ext_core_SetNTVOptional()
{
MarkNativeAsOptional("GetFeatureStatus");
MarkNativeAsOptional("RequireFeature");
MarkNativeAsOptional("AddCommandListener");
MarkNativeAsOptional("RemoveCommandListener");
MarkNativeAsOptional("BfWriteBool");
MarkNativeAsOptional("BfWriteByte");
MarkNativeAsOptional("BfWriteChar");
MarkNativeAsOptional("BfWriteShort");
MarkNativeAsOptional("BfWriteWord");
MarkNativeAsOptional("BfWriteNum");
MarkNativeAsOptional("BfWriteFloat");
MarkNativeAsOptional("BfWriteString");
MarkNativeAsOptional("BfWriteEntity");
MarkNativeAsOptional("BfWriteAngle");
MarkNativeAsOptional("BfWriteCoord");
MarkNativeAsOptional("BfWriteVecCoord");
MarkNativeAsOptional("BfWriteVecNormal");
MarkNativeAsOptional("BfWriteAngles");
MarkNativeAsOptional("BfReadBool");
MarkNativeAsOptional("BfReadByte");
MarkNativeAsOptional("BfReadChar");
MarkNativeAsOptional("BfReadShort");
MarkNativeAsOptional("BfReadWord");
MarkNativeAsOptional("BfReadNum");
MarkNativeAsOptional("BfReadFloat");
MarkNativeAsOptional("BfReadString");
MarkNativeAsOptional("BfReadEntity");
MarkNativeAsOptional("BfReadAngle");
MarkNativeAsOptional("BfReadCoord");
MarkNativeAsOptional("BfReadVecCoord");
MarkNativeAsOptional("BfReadVecNormal");
MarkNativeAsOptional("BfReadAngles");
MarkNativeAsOptional("BfGetNumBytesLeft");
MarkNativeAsOptional("PbReadInt");
MarkNativeAsOptional("PbReadFloat");
MarkNativeAsOptional("PbReadBool");
MarkNativeAsOptional("PbReadString");
MarkNativeAsOptional("PbReadColor");
MarkNativeAsOptional("PbReadAngle");
MarkNativeAsOptional("PbReadVector");
MarkNativeAsOptional("PbReadVector2D");
MarkNativeAsOptional("PbGetRepeatedFieldCount");
MarkNativeAsOptional("PbSetInt");
MarkNativeAsOptional("PbSetFloat");
MarkNativeAsOptional("PbSetBool");
MarkNativeAsOptional("PbSetString");
MarkNativeAsOptional("PbSetColor");
MarkNativeAsOptional("PbSetAngle");
MarkNativeAsOptional("PbSetVector");
MarkNativeAsOptional("PbSetVector2D");
MarkNativeAsOptional("PbAddInt");
MarkNativeAsOptional("PbAddFloat");
MarkNativeAsOptional("PbAddBool");
MarkNativeAsOptional("PbAddString");
MarkNativeAsOptional("PbAddColor");
MarkNativeAsOptional("PbAddAngle");
MarkNativeAsOptional("PbAddVector");
MarkNativeAsOptional("PbAddVector2D");
MarkNativeAsOptional("PbRemoveRepeatedFieldValue");
MarkNativeAsOptional("PbReadMessage");
MarkNativeAsOptional("PbReadRepeatedMessage");
MarkNativeAsOptional("PbAddMessage");
VerifyCoreVersion();
return 0;
}
bool:StrEqual(String:str1[], String:str2[], bool:caseSensitive)
{
return strcmp(str1, str2, caseSensitive) == 0;
}
PrintToChatAll(String:format[])
{
decl String:buffer[192];
new i = 1;
while (i <= MaxClients)
{
if (IsClientInGame(i))
{
SetGlobalTransTarget(i);
VFormat(buffer, 192, format, 2);
PrintToChat(i, "%s", buffer);
}
i++;
}
return 0;
}
ByteCountToCells(size)
{
if (!size)
{
return 1;
}
return size + 3 / 4;
}
public __pl_mapchooser_SetNTVOptional()
{
MarkNativeAsOptional("NominateMap");
MarkNativeAsOptional("RemoveNominationByMap");
MarkNativeAsOptional("RemoveNominationByOwner");
MarkNativeAsOptional("GetExcludeMapList");
MarkNativeAsOptional("GetNominatedMapList");
MarkNativeAsOptional("CanMapChooserStartVote");
MarkNativeAsOptional("InitiateMapChooserVote");
MarkNativeAsOptional("HasEndOfMapVoteFinished");
MarkNativeAsOptional("EndOfMapVoteEnabled");
return 0;
}
public OnPluginStart()
{
LoadTranslations("common.phrases");
LoadTranslations("nominations.phrases");
new arraySize = ByteCountToCells(33);
g_MapList = CreateArray(arraySize, 0);
g_Cvar_ExcludeOld = CreateConVar("sm_nominate_excludeold", "1", "Specifies if the current map should be excluded from the Nominations list", 0, true, 0.0, true, 1.0);
g_Cvar_ExcludeCurrent = CreateConVar("sm_nominate_excludecurrent", "1", "Specifies if the MapChooser excluded maps should also be excluded from Nominations", 0, true, 0.0, true, 1.0);
RegConsoleCmd("sm_nominate", Command_Nominate, "", 0);
RegAdminCmd("sm_nominate_addmap", Command_Addmap, 64, "sm_nominate_addmap <mapname> - Forces a map to be on the next mapvote.", "", 0);
g_mapTrie = CreateTrie();
return 0;
}
public OnConfigsExecuted()
{
if (!(ReadMapList(g_MapList, g_mapFileSerial, "nominations", 3)))
{
if (g_mapFileSerial == -1)
{
SetFailState("Unable to create a valid map list.");
}
}
BuildMapMenu();
return 0;
}
public OnNominationRemoved(String:map[], owner)
{
new status;
if (!GetTrieValue(g_mapTrie, map, status))
{
return 0;
}
if (status & 16 != 16)
{
return 0;
}
SetTrieValue(g_mapTrie, map, any:1, true);
return 0;
}
public Action:Command_Addmap(client, args)
{
if (args < 1)
{
ReplyToCommand(client, "[SM] Usage: sm_nominate_addmap <mapname>");
return Action:3;
}
decl String:mapname[64];
GetCmdArg(1, mapname, 64);
new status;
if (!GetTrieValue(g_mapTrie, mapname, status))
{
ReplyToCommand(client, "%t", "Map was not found", mapname);
return Action:3;
}
new NominateResult:result = NominateMap(mapname, true, 0);
if (result > NominateResult:1)
{
ReplyToCommand(client, "%t", "Map Already In Vote", mapname);
return Action:3;
}
SetTrieValue(g_mapTrie, mapname, any:18, true);
ReplyToCommand(client, "%t", "Map Inserted", mapname);
LogAction(client, -1, "\"%L\" inserted map \"%s\".", client, mapname);
return Action:3;
}
public OnClientSayCommand_Post(client, String:command[], String:sArgs[])
{
if (!client)
{
return 0;
}
if (!(strcmp(sArgs, "nominate", false)))
{
new ReplySource:old = SetCmdReplySource(ReplySource:1);
AttemptNominate(client);
SetCmdReplySource(old);
}
return 0;
}
public Action:Command_Nominate(client, args)
{
if (!client)
{
return Action:3;
}
if (args)
{
decl String:mapname[64];
GetCmdArg(1, mapname, 64);
new status;
if (!GetTrieValue(g_mapTrie, mapname, status))
{
ReplyToCommand(client, "%t", "Map was not found", mapname);
return Action:3;
}
if (status & 2 == 2)
{
if (status & 4 == 4)
{
ReplyToCommand(client, "[SM] %t", "Can't Nominate Current Map");
}
if (status & 8 == 8)
{
ReplyToCommand(client, "[SM] %t", "Map in Exclude List");
}
if (status & 16 == 16)
{
ReplyToCommand(client, "[SM] %t", "Map Already Nominated");
}
return Action:3;
}
new NominateResult:result = NominateMap(mapname, false, client);
if (result > NominateResult:1)
{
if (result == NominateResult:2)
{
ReplyToCommand(client, "%t", "Map Already In Vote", mapname);
}
else
{
ReplyToCommand(client, "[SM] %t", "Map Already Nominated");
}
return Action:3;
}
SetTrieValue(g_mapTrie, mapname, any:18, true);
decl String:name[64];
GetClientName(client, name, 64);
PrintToChatAll("[SM] %t", "Map Nominated", name, mapname);
return Action:0;
}
AttemptNominate(client);
return Action:3;
}
AttemptNominate(client)
{
SetMenuTitle(g_MapMenu, "%T", "Nominate Title", client);
DisplayMenu(g_MapMenu, client, 0);
return 0;
}
BuildMapMenu()
{
if (g_MapMenu)
{
CloseHandle(g_MapMenu);
g_MapMenu = MissingTAG:0;
}
ClearTrie(g_mapTrie);
g_MapMenu = CreateMenu(Handler_MapSelectMenu, MenuAction:796);
decl String:map[64];
new Handle:excludeMaps;
decl String:currentMap[32];
if (GetConVarBool(g_Cvar_ExcludeOld))
{
excludeMaps = CreateArray(ByteCountToCells(33), 0);
GetExcludeMapList(excludeMaps);
}
if (GetConVarBool(g_Cvar_ExcludeCurrent))
{
GetCurrentMap(currentMap, 32);
}
new i;
while (GetArraySize(g_MapList) > i)
{
new status = 1;
GetArrayString(g_MapList, i, map, 64);
if (GetConVarBool(g_Cvar_ExcludeCurrent))
{
if (StrEqual(map, currentMap, true))
{
status = 6;
}
}
new var1;
if (GetConVarBool(g_Cvar_ExcludeOld) && status == 1)
{
if (FindStringInArray(excludeMaps, map) != -1)
{
status = 10;
}
}
AddMenuItem(g_MapMenu, map, map, 0);
SetTrieValue(g_mapTrie, map, status, true);
i++;
}
SetMenuExitButton(g_MapMenu, true);
if (excludeMaps)
{
CloseHandle(excludeMaps);
}
return 0;
}
public Handler_MapSelectMenu(Handle:menu, MenuAction:action, param1, param2)
{
switch (action)
{
case 4:
{
decl String:map[64];
decl String:name[64];
GetMenuItem(menu, param2, map, 64, 0, "", 0);
GetClientName(param1, name, 64);
new NominateResult:result = NominateMap(map, false, param1);
if (result == NominateResult:2)
{
PrintToChat(param1, "[SM] %t", "Map Already Nominated");
return 0;
}
if (result == NominateResult:4)
{
PrintToChat(param1, "[SM] %t", "Max Nominations");
return 0;
}
SetTrieValue(g_mapTrie, map, any:18, true);
if (result == NominateResult:1)
{
PrintToChatAll("[SM] %t", "Map Nomination Changed", name, map);
return 0;
}
PrintToChatAll("[SM] %t", "Map Nominated", name, map);
}
case 256:
{
decl String:map[64];
GetMenuItem(menu, param2, map, 64, 0, "", 0);
new status;
if (!GetTrieValue(g_mapTrie, map, status))
{
LogError("Menu selection of item not in trie. Major logic problem somewhere.");
return 0;
}
if (status & 2 == 2)
{
return 1;
}
return 0;
}
case 512:
{
decl String:map[64];
GetMenuItem(menu, param2, map, 64, 0, "", 0);
new status;
if (!GetTrieValue(g_mapTrie, map, status))
{
LogError("Menu selection of item not in trie. Major logic problem somewhere.");
return 0;
}
decl String:display[100];
if (status & 2 == 2)
{
if (status & 4 == 4)
{
Format(display, 100, "%s (%T)", map, "Current Map", param1);
return RedrawMenuItem(display);
}
if (status & 8 == 8)
{
Format(display, 100, "%s (%T)", map, "Recently Played", param1);
return RedrawMenuItem(display);
}
if (status & 16 == 16)
{
Format(display, 100, "%s (%T)", map, "Nominated", param1);
return RedrawMenuItem(display);
}
}
return 0;
}
default:
{
}
}
return 0;
}