Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Меню выбора игроков
Меню выбора игроков
Naykon Дата: Четверг, 16.02.2012, 16:10:32 | Сообщение # 1
Сообщений: 439
Репутация: -4 [ +/- ]
Нужено чтобы игроки не могли нажимать клавишу 1 и 2 при голосовании. просто б ничего не происходило. А в меню голосование начиналось бы с 3
 
_wS_ Дата: Четверг, 16.02.2012, 22:58:02 | Сообщение # 2
Thanks
Надо просто установить флаг ITEMDRAW_DISABLED, когда добавляешь опцию, об этом уже есть тема.
 
Naykon Дата: Пятница, 17.02.2012, 11:10:42 | Сообщение # 3
Сообщений: 439
Репутация: -4 [ +/- ]
Code
#include <sourcemod>

new Handle:h_Menu, Handle:h_Timer, votes[MAXPLAYERS+1];

public OnPluginStart()
{
      HookEvent("round_start", Round_Start, EventHookMode_PostNoCopy);
}

public Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
{
  if (h_Timer != INVALID_HANDLE)
  {
   KillTimer(h_Timer);
   h_Timer = INVALID_HANDLE;
  }
      if (h_Menu != INVALID_HANDLE) CloseHandle(h_Menu);
      SetMenuTitle(h_Menu, "Заглавие\n \n");
      SetMenuExitButton(h_Menu, true);
      decl String:StR_Id[15], String:StR_Name[MAX_NAME_LENGTH];
      new players = 0;
      for (new i = 1; i <= MaxClients; i++)
   {
    votes[i] = 0;
   if(IsClientInGame(i))
   {
    IntToString(GetClientUserId(i), StR_Id, sizeof(StR_Id));
    GetClientName(i,StR_Name, sizeof(StR_Name));
    AddMenuItem(h_Menu, StR_Id, StR_Name);
    players += 1;
   }
  }
  if (players > 0)
  {
   for (new i = 1; i <= MaxClients; i++)
   {
    if (IsClientInGame(i)) DisplayMenu(h_Menu, i, 10);
   }
  }
  else
  {
   CloseHandle(h_Menu);
   h_Menu = INVALID_HANDLE;
  }
}
  


Почему не работает но компелируется!?
 
_wS_ Дата: Пятница, 17.02.2012, 11:16:48 | Сообщение # 4
Thanks
Quote
if (h_Menu != INVALID_HANDLE) CloseHandle(h_Menu);
SetMenuTitle(h_Menu, "Заглавие\n \n");


Ты само меню не создал, где CreateMenu?
 
Naykon Дата: Пятница, 17.02.2012, 11:28:17 | Сообщение # 5
Сообщений: 439
Репутация: -4 [ +/- ]
Уже разобрался СПС =)

Добавлено (17.02.2012, 11:28:17)
---------------------------------------------
Как сделать чтоб себя небыло в меню выбора?

 
_wS_ Дата: Пятница, 17.02.2012, 11:55:37 | Сообщение # 6
Thanks
Ну как как, с помощью условий 'если' и 'то', перед тем как делаешь AddMenuItem, да и раньше наверно, сравнивай/проверяй индекс игрока.
 
Naykon Дата: Пятница, 17.02.2012, 15:28:19 | Сообщение # 7
Сообщений: 439
Репутация: -4 [ +/- ]
Думал думал ниче не получилось я так понимаю с помощью этой RemoveMenuItem ф-ции это можно сделать теоретически.. дай еще подсказку))) i индекс голосующего игрока, если я правильно прочитал скрипт то нужно составить так "Если у i высветилось h_Menu то ..." кароче не доходит до меня.


Сообщение отредактировал Naykon - Пятница, 17.02.2012, 15:32:52
 
_wS_ Дата: Пятница, 17.02.2012, 16:54:49 | Сообщение # 8
Thanks
Quote (Naykon)
Как сделать чтоб себя небыло в меню выбора?

А как можно узнать, что это ты? Нужно что-то знать, индекс, ip, steam и т.д, вот пример:

Code
decl String:SteaM[20];
for (new i = 1; i <= MaxClients; i++)
{  
     if (IsClientInGame(i) && !IsFakeClient(i))
     {
         GetClientAuthString(i, SteaM, 20);
         if (!StrEqual(SteaM, "STEAM_12345")) DisplayMenu(h_Menu, i, 10);  
     }
}
 
Naykon Дата: Пятница, 17.02.2012, 17:02:04 | Сообщение # 9
Сообщений: 439
Репутация: -4 [ +/- ]
Я имел в веду чтоб никто не мог голосовать за себя
 
_wS_ Дата: Пятница, 17.02.2012, 17:17:07 | Сообщение # 10
Thanks
Есть разные варианты как это можно сделать. Например:

Code
for (new i = 1; i <= MaxClients; i++)
{  
     if (IsClientInGame(i) && !IsFakeClient(i)) SendMyMenu(i);
}

SendMyMenu(player)
{
     // тут создаешь меню
     new Handle:h = CreateMenu(xz_func);
     SetMenuTitle.. и тд

     // теперь добавляем в меню всех, кроме player, так как мы ему отправим меню
     for (new i = 1; i <= MaxClients; i++)  
     {  
         if (i != player && IsClientInGame(i) && !IsFakeClient(i))
         {
             // тут получаешь имя игрока, userid (или др. и тд.), добавляешь опцию
             AddMenuItem(h, "...", "...");
         }
     }
     DisplayMenu(h, player, 10);
}
 
Naykon Дата: Суббота, 18.02.2012, 16:07:07 | Сообщение # 11
Сообщений: 439
Репутация: -4 [ +/- ]
Code

}
      if (h_Menu != INVALID_HANDLE) CloseHandle(h_Menu);
   h_Menu = CreateMenu(Select_Func);  
      SetMenuTitle(h_Menu, "Заглавие\n \n");
   DrawPanelItem(h_Menu,"Опция 1", ITEMDRAW_DISABLED);
      SetMenuExitButton(h_Menu, false);
      decl String:StR_Id[15], String:StR_Name[MAX_NAME_LENGTH];
      new players = 0;
      for (new i = 1; i <= MaxClients; i++)
{


Меню не работает когда DrawPanelItem(h_Menu,"Опция 1", ITEMDRAW_DISABLED); , когда этого нет оно работате. Как тут быть нужно чтоб опция 1 была но ее нельзя выбрать.
 
_wS_ Дата: Суббота, 18.02.2012, 17:36:02 | Сообщение # 12
Thanks
Ты спутал команды =) DrawPanelItem это если было CreatePanel(), а у тебя CreateMenu, значит:

Code
AddMenuItem(menu, "select", "textmenu", style=ITEMDRAW_DEFAULT);
SetMenuTitle(menu, "название\n \n");
SetMenuExitButton(Handle:menu, bool:button);
DisplayMenu(Handle:menu, client, time);
DisplayMenuAtItem(menu, client, GetMenuSelectionPosition(), 0);

new String:Info[16];
GetMenuItem(menu, param2, Info, sizeof(Info));
 
Naykon Дата: Суббота, 18.02.2012, 19:05:00 | Сообщение # 13
Сообщений: 439
Репутация: -4 [ +/- ]
Я так понимаю это левый пример??

вставил в мой - результат тот же не открывается меню.
Code
public Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
{
  if (h_Timer != INVALID_HANDLE)
  {
   KillTimer(h_Timer);
   h_Timer = INVALID_HANDLE;
  }
      if (h_Menu != INVALID_HANDLE) CloseHandle(h_Menu);
   h_Menu = CreateMenu(Select_Func);  
   AddMenuItem(h_Menu, "select", "textmenu", ITEMDRAW_DEFAULT);  
      SetMenuTitle(h_Menu, "Заглавие\n \n");
      SetMenuExitButton(h_Menu, false);
      decl String:StR_Id[15], String:StR_Name[MAX_NAME_LENGTH];
      new players = 0;
      for (new i = 1; i <= MaxClients; i++)
   {
    votes[i] = 0;
   if (i == players && IsClientInGame(i) && !IsFakeClient(i))
   {
    IntToString(GetClientUserId(i), StR_Id, sizeof(StR_Id));
    GetClientName(i,StR_Name, sizeof(StR_Name));
    AddMenuItem(h_Menu, StR_Id, StR_Name);
 
_wS_ Дата: Суббота, 18.02.2012, 20:25:41 | Сообщение # 14
Thanks
Ну этот код выше не весь, ты же следи за скобками и тд, и главное, смотри в консоль сервера/логи, ибо только так можно легко понять, в чем ты ошибся. Если нашел ошибку в консоле, но всеравно не можешь ее исправить, скопируй ее сюда и разберемся.
 
Naykon Дата: Воскресенье, 19.02.2012, 14:09:31 | Сообщение # 15
Сообщений: 439
Репутация: -4 [ +/- ]
Code
#include <sourcemod>

new Handle:h_Menu, Handle:h_Timer, votes[MAXPLAYERS+1];

public OnPluginStart()
{
       HookEvent("round_start", Round_Start, EventHookMode_PostNoCopy);
}

public Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
{
   if (h_Timer != INVALID_HANDLE)
   {
    KillTimer(h_Timer);
    h_Timer = INVALID_HANDLE;
   }
       if (h_Menu != INVALID_HANDLE) CloseHandle(h_Menu);
    h_Menu = CreateMenu(Select_Func);   
    AddMenuItem(h_Menu, "select", "textmenu", ITEMDRAW_DEFAULT);   
       SetMenuTitle(h_Menu, "Заглавие\n \n");
       SetMenuExitButton(h_Menu, false);
       decl String:StR_Id[15], String:StR_Name[MAX_NAME_LENGTH];
       new players = 0;
       for (new i = 1; i <= MaxClients; i++)
    {
     votes[i] = 0;
    if (i == players && IsClientInGame(i) && !IsFakeClient(i))
    {
     IntToString(GetClientUserId(i), StR_Id, sizeof(StR_Id));
     GetClientName(i,StR_Name, sizeof(StR_Name));
     AddMenuItem(h_Menu, StR_Id, StR_Name);
       
     players += 1;
    }
   }
   if (players > 0)
   {
    for (new i = 1; i <= MaxClients; i++)
    {
     if (IsClientInGame(i) && GetClientTeam(i) == 2) DisplayMenu(h_Menu, i, 10);
    }
   }
   else
   {
    CloseHandle(h_Menu);
    h_Menu = INVALID_HANDLE;
   }
}
     
public Select_Func(Handle:menu, MenuAction:action, i, option)
{
       if (action == MenuAction_Select)
       {
           decl String:StR_Id[15];
           GetMenuItem(menu, option, StR_Id, sizeof(StR_Id));
           new target_index = GetClientOfUserId(StringToInt(StR_Id));
     if (target_index > 0)
     {
      PrintToChatAll("%N проголосовал за %N", i, target_index);
     }
     else PrintToChat(i, "Игрок не найден");
       }
}


В сонсоле:
Code
maxplayers set to 32
No '-replayserverdir' parameter found - using default replay folder.
Unknown command "r_decal_cullsize"
Network: IP 192.168.0.102, mode MP, dedicated Yes, ports 27015 SV / 27005 CL
L 02/19/2012 - 13:18:39: -------- Mapchange to de_dust2 --------
'server.cfg' not present; not executing.
Client "Naykon by Alchevsk" connected (192.168.0.102:27006).
Game will not start until both teams have players.
Dropped Dan from server (Server shutting down)
Dropped Tim from server (Server shutting down)
Dropped Ron from server (Server shutting down)
Dropped Andy from server (Server shutting down)
Dropped Jon from server (Server shutting down)
Dropped Colin from server (Server shutting down)
Dropped Naykon by Alchevsk from server (Server shutting down)


Сообщение отредактировал Naykon - Воскресенье, 19.02.2012, 14:20:49
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Меню выбора игроков
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск: