Контакты Поиск

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

  • Страница 2 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Меню выбора игроков
Меню выбора игроков
_wS_ Дата: Воскресенье, 19.02.2012, 22:19:06 | Сообщение # 16
Вот и ошибка:

Code
new players = 0;
for (new i = 1; i <= MaxClients; i++)
{
     votes[i] = 0;
     if (i == players && IsClientInGame(i) && !IsFakeClient(i))
     {
         //..


Переменная players = 0 и условие if (i == players) не проходит проверку конечно же.
 
Naykon Дата: Вторник, 21.02.2012, 14:55:47 | Сообщение # 17
Сообщений: 439
Репутация: -4 [ +/- ]
Блин вот что значит не внимательно........ спс

Пишет при нажатии 1 или 2 "Игрок не найден" нужно сделать чтоб просто ничего не происходило. И меню не пропадало... + пункт 1 и 2 сделать белого цвета на не желтого. + меню сильно быстро пропадает как исправить.. а и вот еще как тогда сделать чтоб игрока выбирало РАНДОМОМ (АВТОМАТИЧЕСКИ) ЕСЛИ НИКТО НЕ ПРОГОЛОСОВАЛ
Code
#include <sourcemod>

new Handle:h_Menu, Handle:h_Timer, kick_vots[MAXPLAYERS+1], timer_sec, all_votes;

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);
       SetMenuTitle(h_Menu, "Кого кикнуть?\n \n");
   AddMenuItem(h_Menu, "1", "Подумай! Не клацай напрасно!", ITEMDRAW_DEFAULT);  
      AddMenuItem(h_Menu, "2", "********************", ITEMDRAW_DEFAULT);  
       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++)
       {
           kick_vots[i] = 0; // очищаем кол-во голосов за кик игрока (i = его индекс)
           if (IsClientInGame(i) && GetClientTeam(i) == 3 && IsPlayerAlive(i))
           {
               // получаем userid игрока и делаем его строкой, чтобы добавить в меню
               IntToString(GetClientUserId(i), StR_Id, sizeof(StR_Id));
               GetClientName(i, StR_Name, sizeof(StR_Name));
               AddMenuItem(h_Menu, StR_Id, StR_Name);
               players += 1;
           }
       }
       // если игроков на сервере > 0
       if (players > 0)
       {
           // показываем игрокам созданное меню и запускаем таймер
           for (new i = 1; i <= MaxClients; i++)
           {
               if (IsClientInGame(i) && GetClientTeam(i) == 2) DisplayMenu(h_Menu, i, 10);
           }
           all_votes = 0; // сколько всего было голосов
           timer_sec = 15; // время голосования в сек.
           h_Timer = CreateTimer(1.0, Timer_Func, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
       }
       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)
           {
               all_votes += 1;
               kick_vots[target_index] += 1;
               PrintToChatAll("%N выбрал игрока %N", i, target_index);
           }
           else PrintToChat(i, "Игрок не найден");
       }
}

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 (h_Menu != INVALID_HANDLE)
       {
           CloseHandle(h_Menu);
           h_Menu = INVALID_HANDLE;
       }
       PrintHintTextToAll("Голосование завершено (%d голосов)", all_votes);
       if (all_votes < 1)
       {
           return Plugin_Stop;
       }
       // Находим игрока, за которого больше всего проголосовали
       new vots = 0, target_index = 0;
       for (new i = 1; i <= MaxClients; i++)
       {
           if (kick_vots[i] > vots)
           {
               vots = kick_vots[i];
               target_index = i;
           }
       }
       if (target_index > 0 && IsClientInGame(target_index))
       {
           PrintToChatAll("Игрок %N кикнут", target_index);
           KickClient(target_index, "бб");
       }
       else PrintToChatAll("Игрок не найден");
       return Plugin_Stop;
}

Добавлено (21.02.2012, 14:55:47)
---------------------------------------------

Code
  HookEvent("player_death", playerDeath, EventHookMode_PostNoCopy);


Code
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)
    {
      all_votes += 1;
              votes[target_index] += 1;
     PrintToChatAll("%N проголосовал за %N", i, target_index);
    }
    else PrintToChat(i, "Игрок не найден");
      }
}

public Action:playerDeath(Handle:event, const String:name[], bool:dontBroadcast)  
{
  new client = GetClientOfUserId(GetEventInt(event, "userid"));
  if (client == target_index)  
  {
  PrintToChatAll("Fuck", client);
  }

}


public Action:playerDeath не видит что такое target_index хотя эта перменная задана выше... new target_index = GetClientOfUserId(StringToInt(StR_Id));

Однако
Code
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 (h_Menu != INVALID_HANDLE)
      {
          CloseHandle(h_Menu);
          h_Menu = INVALID_HANDLE;
      }
      PrintHintTextToAll("Голосование завершено (%d голосов)", all_votes);
      if (all_votes < 1)
      {
          return Plugin_Stop;
      }
      // Находим игрока, за которого больше всего проголосовали
      new vots = 0, target_index = 0;
      for (new i = 1; i <= MaxClients; i++)
      {
          if (votes[i] > vots)
          {
              vots = votes[i];
              target_index = i;
          }
      }
      if (target_index > 0 && IsClientInGame(target_index))
      {
          PrintToChatAll("Игрок %N стал командиром!", target_index);
    SetEntityRenderColor(target_index, 0, 0, 255, 130);
      }
      else PrintToChatAll("Игрок не найден");
      return Plugin_Stop;
}
Прекрастно видит что target_index это сущ. переменная.. В чем проблема?


Сообщение отредактировал Naykon - Вторник, 21.02.2012, 14:15:44
 
_wS_ Дата: Вторник, 21.02.2012, 17:15:44 | Сообщение # 18
Quote (Naykon)
Пишет при нажатии 1 или 2 "Игрок не найден" нужно сделать чтоб просто ничего не происходило. И меню не пропадало... + пункт 1 и 2 сделать белого цвета на не желтого

Мы же сколько раз уже обсуждали ITEMDRAW_DISABLED и ты до сих пор это не понял.

Code
// Вместо этого
AddMenuItem(h_Menu, "1", "Подумай! Не клацай напрасно!", ITEMDRAW_DEFAULT);

// Надо это
AddMenuItem(h_Menu, "", "Подумай! Не клацай напрасно!", ITEMDRAW_DISABLED);


Quote (Naykon)
+ меню сильно быстро пропадает как исправить..

DisplayMenu(h_Menu, i, 10); - 10 это количество секунд отображения меню, если 0, то всегда.

Quote (Naykon)
а и вот еще как тогда сделать чтоб игрока выбирало РАНДОМОМ (АВТОМАТИЧЕСКИ) ЕСЛИ НИКТО НЕ ПРОГОЛОСОВАЛ

Ответил в ЭТОЙ теме.

Quote (Naykon)
public Action:playerDeath не видит что такое target_index хотя эта перменная задана выше... new target_index = GetClientOfUserId(StringToInt(StR_Id));

target_index - это локальная временная переменная, которая уничтожится после выполнения функции, в которой она используется. И она не может быть доступна/видима в других функциях. Только глобальные переменные можно так использовать.

Да и как ты собираешься получить какую-то переменную из события player_death, если ты сделал EventHookMode_PostNoCopy? Невнимательно читаешь уроки. Используй команды по порядку, пойми как они работают, а уже потом используй их вместе.
 
Naykon Дата: Вторник, 21.02.2012, 19:24:06 | Сообщение # 19
Сообщений: 439
Репутация: -4 [ +/- ]
Code
#include <sourcemod>

new Handle:h_Menu, Handle:h_Timer, kick_vots[MAXPLAYERS+1], timer_sec, all_votes;

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);
      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++)
      {
          kick_vots[i] = 0; // очищаем кол-во голосов за кик игрока (i = его индекс)
          if (IsClientInGame(i))
          {
              // получаем userid игрока и делаем его строкой, чтобы добавить в меню
              IntToString(GetClientUserId(i), StR_Id, sizeof(StR_Id));
              GetClientName(i, StR_Name, sizeof(StR_Name));
              AddMenuItem(h_Menu, StR_Id, StR_Name);
              players += 1;
          }
      }
      // если игроков на сервере > 0
      if (players > 0)
      {
          // показываем игрокам созданное меню и запускаем таймер
          for (new i = 1; i <= MaxClients; i++)
          {
              if (IsClientInGame(i)) DisplayMenu(h_Menu, i, 10);
          }
          all_votes = 0; // сколько всего было голосов
          timer_sec = 15; // время голосования в сек.
          h_Timer = CreateTimer(1.0, Timer_Func, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
      }
      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)
          {
              all_votes += 1;
              kick_vots[target_index] += 1;
              PrintToChatAll("%N выбрал игрока %N", i, target_index);
          }
          else PrintToChat(i, "Игрок не найден");
      }
}

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 (h_Menu != INVALID_HANDLE)
      {
          CloseHandle(h_Menu);
          h_Menu = INVALID_HANDLE;
      }
      PrintHintTextToAll("Голосование завершено (%d голосов)", all_votes);
      if (all_votes < 1)
      {
          return Plugin_Stop;
      }
      // Находим игрока, за которого больше всего проголосовали
      new vots = 0, target_index = 0;
      for (new i = 1; i <= MaxClients; i++)
      {
          if (kick_vots[i] > vots)
          {
              vots = kick_vots[i];
              target_index = i;
          }
      }
      if (target_index > 0 && IsClientInGame(target_index))
      {
          PrintToChatAll("Игрок %N кикнут", target_index);
          KickClient(target_index, "бб");
      }
      else PrintToChatAll("Игрок не найден");
      return Plugin_Stop;
}


Вот пример из урока покажите наглядно как в нем использовать РАНДОМ в случае 0 голосов
 
_wS_ Дата: Среда, 22.02.2012, 05:45:38 | Сообщение # 20
В блоке public Action:Timer_Func(Handle:timer, any:x), в условии if (all_votes < 1)

Code
if (all_votes < 1)
{
     new random_client = GetRandomClient();
     if (random_client > 0)
     {
         // случайный игрок выбран, что-то делаем
     }
     return Plugin_Stop;
}

GetRandomClient()
{
     new indexes[MaxClients+1], players = 0;
     for (new i = 1; i <= MaxClients; i++)
     {
         if (IsClientInGame(i)) indexes[players++] = i;
     }
     if (players > 0) return indexes[GetRandomInt(0, players-1)];
     return 0;
}
 
Naykon Дата: Среда, 22.02.2012, 17:49:00 | Сообщение # 21
Сообщений: 439
Репутация: -4 [ +/- ]
Нужно чтоб Рандомом выбирало ЖИВОГО СТ
Вот пробывал так не получилось, итог - выбирает кого попало.
Code
  if (all_votes < 1)
  {
   new random_client = GetRandomClient();
   if (random_client > 0)
   {
    PrintToChatAll("Игрок %N Кикнут!", random_client);
     KickClient(random_client, "бб");  
   }
   return Plugin_Stop;
  }

  GetRandomClient()
  {
   new indexes[MaxClients+1], players = 0;
   for (new i = 1; i <= MaxClients; i++)
   {
    if (IsClientInGame(i) && IsClientInGame(i) && GetClientTeam(i) == 3 && IsPlayerAlive(i)) indexes[players++] = i;
   }
   if (players > 0) return indexes[GetRandomInt(0, players-1)];
   return 0;
  }
 
_wS_ Дата: Среда, 22.02.2012, 18:31:21 | Сообщение # 22
Это должно работать

Code
GetRandomClient()
{
     new indexes[MaxClients+1], players = 0;
     for (new i = 1; i <= MaxClients; i++)
     {
         if (IsClientInGame(i) && GetClientTeam(i) == 3 && IsPlayerAlive(i))
         {
             indexes[players++] = i;
         }
     }
     if (players > 0) return indexes[GetRandomInt(0, players-1)];
     return 0;
}


В твоем коде вроде все правильно, только зачем 2 раза делать IsClientInGame(i)
 
Naykon Дата: Среда, 22.02.2012, 21:35:16 | Сообщение # 23
Сообщений: 439
Репутация: -4 [ +/- ]
Заработало но почему то рандомом выбирает постоянно одного и того же но небеда)))

Теперь представьте что я заменил KickClient(random_client, "бб"); на SetEntityRenderColor(target_index, 0, 0, 255, 130); Теперь игроки становятся синими а не вылетают из игры.

Еще подскажите как сделать чтоб в случае смерти выбранного голосованием игрока , синим становился любой другой живой СТ... и в случае смерти этого "другого" становился синий следующий живой СТ...

Я понимаю нужно отловить момент player_death и в нем уже править... но для этого нужна внешняя переменная которая будет ссылаться на выбранного игрока путем голосования... а там уже условие if else и т п

Добавлено (22.02.2012, 21:35:16)
---------------------------------------------
Я представляю решение вопроса примерно так
Code
public OnPluginStart()
{
       HookEvent("round_start", Round_Start, EventHookMode_PostNoCopy);
    HookEvent("player_death", playerDeath);
}

public Action:playerDeath(Handle:event, const String:name[], bool:dontBroadcast)   
{   
   new userid = GetEventInt(event, "userid");
   new client = GetClientOfUserId(userid);
   if (target_index = client)
   {
    PrintToChatAll("Игрок погиб", client)
                    //Тут условие If, раз уж погиб тогда берем РАНДОМОМ любого другого из GetRandomClient()
   }    
}


target_index - результат голосования... но вот проблема как переменную которая содержит "синего игрока" playerDeath уже не видит т.е target_index локальная...

Идея такого вида прокати ДА, нет?


Сообщение отредактировал Naykon - Среда, 22.02.2012, 21:37:31
 
_wS_ Дата: Четверг, 23.02.2012, 04:02:24 | Сообщение # 24
Хм, создай глобальную переменную, это делается в верхнем уровне.

Code
// Это глобальная переменная
new target_index = 0;

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

public OnMapStart()
{
     target_index = 0;
}
 
Naykon Дата: Четверг, 23.02.2012, 18:06:59 | Сообщение # 25
Сообщений: 439
Репутация: -4 [ +/- ]
В общем вот целый код... Цель - сделать так чтоб после смерти выбранного игрока ПУТЕМ ГОЛОСОВАНИЯ "выбранным" становился автоматически любой другой живой СТ

Code
#include <sourcemod>
#include <cstrike>
#include <sdktools>

new Handle:h_Menu, Handle:h_Timer, votes[MAXPLAYERS+1], timer_sec, all_votes;
new i = 0;

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

public OnMapStart()
{
i = 0;
}

public Action:playerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
new userid = GetEventInt(event, "userid");
new client = GetClientOfUserId(userid);
if (i = client)
{
PrintToChatAll("Игрок погиб", client)
}
}

GetRandomClient()
{
new indexes[MaxClients+1], players = 0;
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i) && GetClientTeam(i) == 3 && IsPlayerAlive(i))
{
indexes[players++] = i;
}
}
if (players > 0) return indexes[GetRandomInt(0, players-1)];
return 0;
}

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);
SetMenuTitle(h_Menu, "Кто будит синим?\n \n");
AddMenuItem(h_Menu, "", "Подумай дважды! Прежде чем тыкать!", ITEMDRAW_DISABLED);
AddMenuItem(h_Menu, "", "Куда нибудь!\n \n", 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++)
{
votes[i] = 0;
if (IsClientInGame(i) && GetClientTeam(i) == 3 && IsPlayerAlive(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, 15);
}
all_votes = 0; // сколько всего было голосов
timer_sec = 15; // время голосования в сек.
h_Timer = CreateTimer(1.0, Timer_Func, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
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)
{
all_votes += 1;
votes[target_index] += 1;
PrintToChatAll("%N проголосовал за %N", i, target_index);
}
else PrintToChat(i, "Игрок не найден");
}
}

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 (h_Menu != INVALID_HANDLE)
{
CloseHandle(h_Menu);
h_Menu = INVALID_HANDLE;
}
PrintHintTextToAll("Голосование завершено (%d голосов)", all_votes);
if (all_votes < 1)
{
new random_client = GetRandomClient();
if (random_client > 0)
{
PrintToChatAll("Игрок %N стал синим D", random_client);
SetEntityRenderColor(random_client, 0, 0, 255, 130);
}
return Plugin_Stop;
}

// Находим игрока, за которого больше всего проголосовали
new vots = 0, target_index = 0
for (new i = 1; i <= MaxClients; i++)
{
if (votes[i] > vots)
{
vots = votes[i];
target_index = i;

}
}
if (target_index > 0 && IsClientInGame(target_index))
{
PrintToChatAll("Игрок %N стал СИНИМ!", target_index);
SetEntityRenderColor(target_index, 0, 0, 255, 130);
}
else PrintToChatAll("Игрок не найден");
return Plugin_Stop;
}


Как??


Сообщение отредактировал Naykon - Четверг, 23.02.2012, 18:09:13
 
_wS_ Дата: Четверг, 23.02.2012, 19:33:11 | Сообщение # 26
Я не хочу вникать в весь этот код и исправлять ошибки. Говори конкретно, что не получается, и будет разговор. Данный код не компилируется и в черном окне прекрасно видно из-за чего. Ты создал глобальную переменную i и создаешь такую же локальную, что нельзя делать (for new i = 1 и тд). Да и ты не использовал эту переменную, не сохранил в ней выбранного синего игрока. И перед тем, как ставить цвет, надо проверить жив ли игрок. И перед тем, как игрок голосует, надо проверить, может уже есть живой синий ct и тд.

Все детали надо учитывать. Ты используешь много кода, который не понимаешь, это глупо. Например, как мы получили случайного игрока? Ты видишь код, цикл, условия и тд, но понимаешь ли ты как оно работает? Если нет, то ты не можешь быть уверен в своем скрипте. И вот, например, ты пишешь: PrintToChatAll("Игрок погиб", client) - синтаксис неверный.

Если ты не уверен в какой-то строке и др, вставляй PrintToServer в нужные места, чтобы понять, например, какая часть кода была выполнена, а какая нет и тд.
 
Naykon Дата: Четверг, 23.02.2012, 20:34:29 | Сообщение # 27
Сообщений: 439
Репутация: -4 [ +/- ]
Как можно обозначить выбранного игрока, если переменная указывающая на этого игрока локальная переменная, следовательно я не могу отловить player_death т.е умершего синего игрока player_death не видит.

Как использовать локальную одной функции в другой функцие?
 
_wS_ Дата: Пятница, 24.02.2012, 10:42:10 | Сообщение # 28
Я же сказал, глобальная переменная..

Code
new ct_client = 0;

public Action:Timer_Func(Handle:timer, any:x)
{
     // ...

     // Находим игрока, за которого больше всего проголосовали
     new vots = 0, target_index = 0;
     for (new i = 1; i <= MaxClients; i++)
     {
         if (votes[i] > vots)
         {
             vots = votes[i];
             target_index = i;
         }
     }
     if (target_index > 0 && IsClientInGame(target_index) && IsPlayerAlive(i))
     {
         ct_client = target_index;
         PrintToChatAll("Игрок %N стал СИНИМ!", ct_client);
         SetEntityRenderColor(ct_client, 0, 0, 255, 130);
     }
     else PrintToChatAll("Игрок не найден или мертв");

     return Plugin_Stop;
}


Переменная ct_client доступна во всех функциях.
 
Naykon Дата: Пятница, 24.02.2012, 14:51:12 | Сообщение # 29
Сообщений: 439
Репутация: -4 [ +/- ]
Нужно чтоб у игроков писало сообщением Когда за Т то Красное а за СТ - синее..
Из урока пробывал в таком виде.. в итоге сервер упал))))))
Code
     new Handle:h = StartMessageAll("SayText2");
         if (h != INVALID_HANDLE)
         {
            BfWriteByte(h, ct_client);
            BfWriteByte(h, true);
            BfWriteString(h, "\x03Цветное %N\x04сообщение", ct_client);
            EndMessage();
         }
 
_wS_ Дата: Пятница, 24.02.2012, 15:58:43 | Сообщение # 30
Что тебе мешает зайти СЮДА и посмотреть синтаксис команды, которую ты используешь? Ошибка в BfWriteString.

Code
BfWriteString(h, "так можно");
BfWriteString(h, "а так нельзя %N", ct_client);


Если есть: ', any:..' :
PrintToChat(client, const String:format[], any:...);

Code
PrintToChat(client, "значит это можно %N", ct_client);


Если 'any' нет, создай нужную строку с помощью Format.
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Меню выбора игроков
  • Страница 2 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск: