oleg_nelasy
Участник
- Сообщения
- 664
- Реакции
- 46
C-подобный:
int g_iPlayerTag;
public int Menu_playersTag(Menu menu, MenuAction action, int iClient, int iItem)
{
int iNumberItem;
//char name[255];
switch (action)
{
case MenuAction_Select:
{
for (int i = 1; i <= MaxClients; i++)
if (IsClientInGame(i) && !IsFakeClient(i)) //&& IsPlayerAlive(iClient)
{
iNumberItem=i-1;
if(iItem == iNumberItem)
{
//GetClientName(i, name, sizeof(name))
//PrintToChatAll("Nмя выбраного игрока %s индекс равен %d", name, i);
ReasonsTag(iClient);
g_iPlayerTag = i;
}
}
}
case MenuAction_Cancel: // Меню было отменено
{
if(iItem == MenuCancel_ExitBack && g_hAdminMenu != null) // Если игрок нажал кнопку "Назад"
{
g_hAdminMenu.DisplayCategory(g_hAdminMenu.FindCategory(ADMINMENU_PLAYERCOMMANDS), iClient);
}
}
}
}
public void PlayersMenuTag(int iClient)
{
char name[255];
char Player[10];
Menu hMenuPlayers = new Menu(Menu_playersTag, MenuAction_Select);
hMenuPlayers.SetTitle("%t", "SetTitlePlayers");
for (int i = 1; i <= MaxClients; i++)
if (IsClientInGame(i) && !IsFakeClient(i))
{
GetClientName(i, name, sizeof(name))
FormatEx(Player, sizeof(Player), "Player %d", i);
//PrintToChatAll("Player = %s", Player)
hMenuPlayers.AddItem(Player, name);
}
hMenuPlayers.ExitBackButton = true;
hMenuPlayers.Display(iClient, 0);
}
public int Menu_ReasonsTag(Menu menu, MenuAction action, int iClient, int iItem)
{
AdminId PlayerID, PlayerID2;
switch (action)
{
case MenuAction_Select:
{
switch (iItem)
{
case 0:
{
PlayerID = GetUserAdmin(iClient);
PlayerID2 = GetUserAdmin(g_iPlayerTag);
if(GetAdminImmunityLevel(PlayerID) >= GetAdminImmunityLevel(PlayerID2))
CS_SetClientClanTag(g_iPlayerTag, "");
else CGOPrintToChat(iClient, "%t %t", "Tag", "No access")
}
case 1:
{
PlayerID = GetUserAdmin(iClient);
PlayerID2 = GetUserAdmin(g_iPlayerTag);
if(GetAdminImmunityLevel(PlayerID) >= GetAdminImmunityLevel(PlayerID2))
CS_SetClientClanTag(g_iPlayerTag, sReasonsTag[1]);
else CGOPrintToChat(iClient, "%t %t", "Tag", "No access")
}
}
}
case MenuAction_Cancel: // Меню было отменено
{
if(iItem == MenuCancel_ExitBack) // Если игрок нажал кнопку "Назад"
{
PlayersMenuTag(iClient);
}
}
}
}
public void ReasonsTag(int iClient)
{
//char sReasonsTag[2][50];
SetGlobalTransTarget(iClient);
FormatEx(sReasonsTag[0], sizeof(sReasonsTag[]), "%t", "ReasonsTag1");
FormatEx(sReasonsTag[1], sizeof(sReasonsTag[]), "%t", "ReasonsTag2");
Menu hMenuReasonsTag = new Menu(Menu_ReasonsTag, MenuAction_Select);
hMenuReasonsTag.SetTitle("%t", "SetTitleTag");
hMenuReasonsTag.AddItem(sReasonsTag[0], sReasonsTag[0]);
hMenuReasonsTag.AddItem(sReasonsTag[1], sReasonsTag[1]);
hMenuReasonsTag.ExitBackButton = true;
hMenuReasonsTag.Display(iClient, 0);
}
Поймал себя на мысли если несколько админов решать воспользоваться эти меню одновременно на разных игроков то они начнут перезаписывать друг другу g_iPlayerTag и начнется жесть. Подскажете можно как-то передать индекс игрока из одного меню в другое другими методами кроме как глобальная переменная g_iPlayerTag?