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

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

  • Страница 1 из 1
  • 1
Вопрос..
Naykon Дата: Понедельник, 05.03.2012, 03:08:01 | Сообщение # 1
Сообщений: 439
Репутация: -4 [ +/- ]
Code
#include <sourcemod>       

new Handle:h_Timer, timer_sec;
new Handle:pMenu;
new String:Otvet[55];  
   
public OnPluginStart()
{
       HookEvent("round_start", round_start);
}

public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
       new i = GetClientOfUserId(GetEventInt(event, "userid"));
   if (IsClientInGame(i) && GetClientTeam(i) == 3)  DisplayMenu(Vote_Menu, i, 15);
   timer_sec = 15;
   h_Timer = CreateTimer(1.0, Timer_Func, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);    
}

Vote_Menu(i)
{
   Otvet = "2x";
       new Handle:pMenu = CreateMenu(Menu_Select);
       SetMenuTitle(pMenu, "Хочу Пить!\n \n");
       AddMenuItem(pMenu, "1", "Напиток 1");
       AddMenuItem(pMenu, "2x", "Напиток 2");
       AddMenuItem(pMenu, "3", "Напиток 3");
       SetMenuExitButton(pMenu, true);
       DisplayMenu(pMenu, i, 0);
}

public Action:Timer_Func(Handle:timer, any:x)
{
      timer_sec -= 1;
      if (timer_sec > 0)
      {
          PrintHintTextToAll("До завершения голосования:\n< %d сек >", timer_sec);
          return Plugin_Continue;
      }
      h_Timer = INVALID_HANDLE;
   if (pMenu != INVALID_HANDLE)
      {
          CloseHandle(pMenu);
          pMenu = INVALID_HANDLE;
      }
      return Plugin_Stop;
}

public Menu_Select(Handle:pMenu, MenuAction:action, i, option)
{
      if (action == MenuAction_End)
      {
          CloseHandle(pMenu);
          return;
      }
      if (action != MenuAction_Select) return;

      decl String:Info[55];
      GetMenuItem(pMenu, option, Info, sizeof(Info));
      if (StrEqual(Info, "2x"))
      {
          return;
      }
      else
      {
          ChangeClientTeam(i, 2);
      }
}


Что хочу получить: У Живых Ст высвечитвается вопрос. Если ст ответил правильно то все ок. если нет то валит за Т опров заканчивается через 15 секунд.

Добавлено (05.03.2012, 03:08:01)
---------------------------------------------
Компелируется но не работает...

 
_wS_ Дата: Понедельник, 05.03.2012, 05:15:39 | Сообщение # 2
Разве в событии round_start есть переменная userid?
http://wiki.alliedmods.net/Generic_Source_Events#round_start

И попробуй после старта раунда сделать mp_restartgame 1, увидишь что и прошлый и новый таймер будут работать = ошибка. В начале раунда надо проверить, если h_Timer != INVALID_HANDLE, то делаем KillTimer(h_Timer) и только после этого создаем новый таймер. А в самой функции таймера, перед тем, как делаешь return Plugin_Stop;, сделай h_Timer = INVALID_HANDLE, чтобы указать что активного таймера нет.
 
Naykon Дата: Понедельник, 05.03.2012, 12:39:50 | Сообщение # 3
Сообщений: 439
Репутация: -4 [ +/- ]
Code
#include <sourcemod>       

new Handle:h_Timer, timer_sec;
new Handle:pMenu;
new String:Otvet[55];  
   
public OnPluginStart()
{
       HookEvent("round_start", round_start);
}

public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
   if (h_Timer != INVALID_HANDLE)
      {
   KillTimer(h_Timer);
      }
   new i
   if (IsClientInGame(i) && GetClientTeam(i) == 3)  DisplayMenu(Vote_Menu, i, 15);
   timer_sec = 15;
   h_Timer = CreateTimer(1.0, Timer_Func, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);    
}

Vote_Menu(i)
{
   Otvet = "2x";
       new Handle:pMenu = CreateMenu(Menu_Select);
       SetMenuTitle(pMenu, "Хочу Пить!\n \n");
       AddMenuItem(pMenu, "1", "Напиток 1");
       AddMenuItem(pMenu, "2x", "Напиток 2");
       AddMenuItem(pMenu, "3", "Напиток 3");
       SetMenuExitButton(pMenu, true);
       DisplayMenu(pMenu, i, 0);
}

public Action:Timer_Func(Handle:timer, any:x)
{
      timer_sec -= 1;
      if (timer_sec > 0)
      {
          PrintHintTextToAll("До завершения голосования:\n< %d сек >", timer_sec);
          return Plugin_Continue;
      }
   if (timer_sec == 0)
      {
          CloseHandle(pMenu);
          pMenu = INVALID_HANDLE;
      }
  h_Timer = INVALID_HANDLE
      return Plugin_Stop;
}

public Menu_Select(Handle:pMenu, MenuAction:action, i, option)
{
      if (action == MenuAction_End)
      {
          CloseHandle(pMenu);
          return;
      }
      if (action != MenuAction_Select) return;

      decl String:Info[55];
      GetMenuItem(pMenu, option, Info, sizeof(Info));
      if (StrEqual(Info, "2x"))
      {
          return;
      }
      else
      {
          ChangeClientTeam(i, 2);
      }
}


Тот же самый нулевой эффект.. немного видоизменил таймер... но побывал и по старому виду.

Добавлено (05.03.2012, 12:39:50)
---------------------------------------------
Если ошибка просто напишите как оно должно выглядеть.. И еще мне нужно чтоб СТ вопросы выпадали разные (рандомом)... - Для этого я думаю создать несколько меню с разными вопросами и вариантами ответов.. но я не знаю какой код можно использовать для Рандомного подбора Этих самых разных менюшек...

 
_wS_ Дата: Понедельник, 05.03.2012, 18:25:00 | Сообщение # 4
Блин, ты опять пишешь код и не понимаешь его. Что это:

Quote
new i;
if (IsClientInGame(i) && GetClientTeam(i) == 3) DisplayMenu(Vote_Menu, i, 15);


Ты создал переменную i с значением 0 и почему-то думаешь, что в ней индекс игрока.

Quote (Naykon)
нужно чтоб СТ вопросы выпадали разные (рандомом)

Если бы ты знал, что такое массив и как с ним работать, ты бы легко мог это сделать.

Code
new String:XZ[3][] =   
{
     "kot",
     "enot",
     "barsuk"
};

PrintToServer("random otvet = %s", XZ[GetRandomInt(0, 2)]);


XZ[3][] - 3 это количество строк, во вторых скобках это максимальное количество символов в строке, в этом случае можно не указывать, определится само. Если бы в массиве были целые числа, то делали бы просто

Code
new XZ[3] =  
{
     3,
     5,
     7
};


Если количество строк 3, то индексы доступны от 0 до 2, XZ[0] = "kot", XZ[1] = "enot", XZ[2] = "barsuk". Ставь в нужные места кода PrintToChatAll или PrintToServer, чтобы узнать что чему равно и что когда было выполнено.
 
Naykon Дата: Понедельник, 02.04.2012, 12:31:46 | Сообщение # 5
Сообщений: 439
Репутация: -4 [ +/- ]
Code
Menu_2(admin)
{
       hMenu = CreateMenu(hSelect);
       SetMenuTitle(hMenu, "Убить:\n \n");
       SetMenuExitButton(hMenu, true);
    DisplayMenu(hMenu, admin, 0);
     decl String:StR_Id[15], String:StR_Name[MAX_NAME_LENGTH];
   new players = 0;
   for (new i = 1; i <= MaxClients; i++)
   {
    if (IsClientInGame(i))
    {
     IntToString(GetClientUserId(i), StR_Id, sizeof(StR_Id));
     GetClientName(i,StR_Name, sizeof(StR_Name));
     AddMenuItem(hMenu, StR_Id, StR_Name);
   
     players += 1;
    }
   }
    
}


Не показывает список игроков пробывал просто поставить пункты - заработало, а игроков не хочет((

Добавлено (02.04.2012, 12:09:27)
---------------------------------------------
+ Дайте маленький пример. Только игроки с определеннмы стим id могут выполнять X команду... а сам список id в отдельном документе (для удобства) =) кроме этого игрок xid - гл.админ, может добавлять игроков id прям в игровом процессе (не перезагружая сервер) - полезное из примера в урок - "Присвоение прав id прям в игре"

Добавлено (02.04.2012, 12:31:46)
---------------------------------------------
1 проблему решил сам.. Ошибка в том что я показал меню раньше чем добавил игроков =)
На остальные жду ответа =)

 
_wS_ Дата: Понедельник, 02.04.2012, 12:45:29 | Сообщение # 6
 
  • Страница 1 из 1
  • 1
Поиск: