Контакты Поиск $ Пожертвовать $

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

  • Страница 3 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Меню выбора игроков
Меню выбора игроков
Naykon Дата: Пятница, 24.02.2012, 17:07:59 | Сообщение # 31
Сообщений: 439
Репутация: -4 [ +/- ]
Та молодой, еще не опытный в pawn меня нужно носом пока что тыкать))))))))

В качестве примера Format(String:buffer[], maxlength, const String:format[], any:...);

Напиши правильно составленный код под Format желательно с пояснением

я это представляю так....
Code
  new String:g[32]  
   new Handle:h = StartMessageAll("SayText2");
         if (h != INVALID_HANDLE)
         {
            BfWriteByte(h, ct_client);
            BfWriteByte(h, true);
      Format(g, h, "\x03Цветное %N \x04сообщение", ct_client);
            EndMessage();
         }


Результат - скомпилировалось НО ничего не произошло.
 
_wS_ Дата: Пятница, 24.02.2012, 18:34:46 | Сообщение # 32
Code
new Handle:h = StartMessageAll("SayText2");
if (h != INVALID_HANDLE)
{
     BfWriteByte(h, ct_client);
     BfWriteByte(h, true);
     decl String:xStR[75];
     Format(xStR, sizeof(xStR), "\x03Цветное %N \x04сообщение", ct_client);

     PrintToServer("xStR = %s", xStR);
     PrintToChatAll("xStR = %s", xStR);

     BfWriteString(h, xStR);
     EndMessage();
}
 
Naykon Дата: Пятница, 24.02.2012, 23:00:59 | Сообщение # 33
Сообщений: 439
Репутация: -4 [ +/- ]
Протестил вышла ошибка (сервер вылетел в тот момент когда должно было высветится цветное сообщение)

Ошибка в консоле:
Code
xStR = ***Игрок Ian выбран Командиром!***
L 02/24/2012 - 21:57:02: [SM] Native "PrintToChat" reported: Could not send a usermessage
L 02/24/2012 - 21:57:02: [SM] Displaying call stack trace for plugin "test.smx":
L 02/24/2012 - 21:57:02: [SM]   [0]  Line 287, E:\test\css\cstrike\addons\sourcemod\scripting\include\halflife.inc::PrintToChatAll()
L 02/24/2012 - 21:57:02: [SM]   [1]  Line 146, E:\test\css\cstrike\addons\sourcemod\scripting\test.sp::Timer_Func()


Ошибка вылетившая в винде:
Code
UserMessageBegin: New message started betore matching coll to EndMessage
 
_wS_ Дата: Пятница, 24.02.2012, 23:14:23 | Сообщение # 34
Ну видимо PrintToChat неправильно использовал, код то покажи весь.
 
Naykon Дата: Суббота, 25.02.2012, 00:56:55 | Сообщение # 35
Сообщений: 439
Репутация: -4 [ +/- ]
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)
   {
   new random_client = GetRandomClient();
   if (random_client > 0)
   {
    ct_client = random_client
    PrintToChatAll("Игрок %N избран синим", ct_client);
    SetEntityModel(ct_client, "models/player/sourcegaming.ru/public_d2/ment1/ct_gsg9.mdl");  
   }
   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))
      {
     ct_client = target_index;
   new Handle:h = StartMessageAll("SayText2");
   if (h != INVALID_HANDLE)
    {
    BfWriteByte(h, ct_client);
    BfWriteByte(h, true);
    decl String:xStR[75];
    Format(xStR, sizeof(xStR), "\x03***\x04Игрок\x03 %N \x04выбран синим!\x03***", ct_client);
    PrintToServer("xStR = %s", xStR);
    PrintToChatAll("xStR = %s", xStR);
   
    BfWriteString(h, xStR);
    EndMessage();
    }
    SetEntityModel(ct_client, "models/player/sourcegaming.ru/public_d2/ment1/ct_gsg9.mdl");  
      }
      else PrintToChatAll("Игрок не найден");
      return Plugin_Stop;
}
 
_wS_ Дата: Суббота, 25.02.2012, 10:00:20 | Сообщение # 36
Да, ошибка есть, видимо из-за того, что мы делаем PrintToChatAll до EndMessage.
Вот так работает:

Code
#include <sourcemod>

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

public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
     new i = GetRandomClient();
     PrintToChatAll("i = %d", i);
     if (i > 0)
     {
         SetEntityRenderMode(i, RENDER_TRANSCOLOR);
         SetEntityRenderColor(i, 0, 0, 255, 150);

         decl Handle:h;
         if ((h = StartMessageAll("SayText2")) != INVALID_HANDLE)
         {
             BfWriteByte(h, i);
             BfWriteByte(h, true);

             decl String:xStR[75];
             Format(xStR, sizeof(xStR), "\x03***\x04Игрок \x03%N \x04выбран синим!\x03***", i);
             BfWriteString(h, xStR);

             EndMessage();

             PrintToChatAll("xStR = %s", xStR);
         }
     }
}

GetRandomClient()
{
     new indexes[MaxClients], 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;
}
 
Naykon Дата: Суббота, 25.02.2012, 11:20:43 | Сообщение # 37
Сообщений: 439
Репутация: -4 [ +/- ]
А как на счет Розового цвета желтого и т д в мани точно помню рекламму настраивал так =)
 
_wS_ Дата: Суббота, 25.02.2012, 13:48:22 | Сообщение # 38
Это только если вверху слева. Попробуй так:

Code
new Handle:h = CreateKeyValues("Stuff", "title", "текст сообщения");
KvSetColor(h, "color", 255, 0, 0, 255);
KvSetNum(h, "level", 1);
KvSetNum(h, "time",  10);
CreateDialog(client, h, DialogType_Msg);
CloseHandle(h);
 
Naykon Дата: Пятница, 02.03.2012, 12:16:56 | Сообщение # 39
Сообщений: 439
Репутация: -4 [ +/- ]
Code
    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;
    decl Handle:h;
    if ((h = StartMessageAll("SayText2")) != INVALID_HANDLE)
    {
    BfWriteByte(h, client);
    BfWriteByte(h, true);
    decl String:xStR[75];
    Format(xStR, sizeof(xStR), "\x03Игрок %N проголосовал за\x04 %N", i, target_index);
    BfWriteString(h, xStR);
    EndMessage();
    }
   }
   else PrintToChat(i, "Игрок не найден");
  }
}


Такая ситуация . Я Т. когда Голосую за СТ в меню фраза "Игрок %N проголосовал за" должна быть Красстного цвета т.к я за Т но она почему-то светло-зеленая))))) И через фраг синяя.. VTF???
 
_wS_ Дата: Пятница, 02.03.2012, 12:20:41 | Сообщение # 40
Попробуй вначале строки \x01 указать.
 
Naykon Дата: Пятница, 02.03.2012, 19:50:57 | Сообщение # 41
Сообщений: 439
Репутация: -4 [ +/- ]
толку 0 =)

Добавлено (02.03.2012, 19:50:57)
---------------------------------------------
Начал писать плагин. ни как не доходит как сделать чтоб у Т в каждом раунде высвечивалось меню в виде теста ( с 1 правильным ответом) и в случет неправильного ответа его кикало.

 
_wS_ Дата: Пятница, 02.03.2012, 22:12:45 | Сообщение # 42
Опять же, с помощью глобальной переменной (строки String). В ней сохраняешь (когда тебе надо) правильный вариант ответа, и когда игрок выбирает опцию (CreateMenu), просто сравниваешь.. Или можно в качестве правильного ответа сохранить номер опции, просто же все. Когда в следующий раз будет вопрос, попробуй его хотя бы сначала сам решить =)
 
Naykon Дата: Суббота, 03.03.2012, 11:17:45 | Сообщение # 43
Сообщений: 439
Репутация: -4 [ +/- ]
пробывал но не понял как обозначить правильный ответ и как обозначить неправильный
 
_wS_ Дата: Суббота, 03.03.2012, 12:31:28 | Сообщение # 44
Зачем обозначать неправильный ответ? запоминать надо только правильный, если будет выбран не он, значит ясно, что он неправильный..

Code
new String:Otvet[55];

round_start
{
     Otvet = "kot";
     new Handle:menu = CreateMenu(select_menu);
     SetMenuTitle(menu, "Найди правильный ответ\n \n");
     AddMenuItem(menu, "sobak", "1");
     AddMenuItem(menu, "kot", "2");
     AddMenuItem(menu, "lemur", "3");
     DisplayMenu(menu, client, 30);
}

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

     decl String:Info[55];
     GetMenuItem(menu, option, Info, sizeof(Info));
     if (StrEqual(Info, "kot"))
     {
         // правильный ответ
     }
     else
     {
         // неправильный
     }
}


Очень легко же mda
 
Naykon Дата: Четверг, 19.04.2012, 02:01:26 | Сообщение # 45
Сообщений: 439
Репутация: -4 [ +/- ]
вот что я хотел узнать спасиб=) Добавте пож урок на статистику по возможности

Добавлено (19.04.2012, 02:01:26)
---------------------------------------------

Code
public BanMenuClientSelect(Handle:menu, MenuAction:action, admin, i)
{
       if (action == MenuAction_Select)
       {
       decl String:Back[25];
     if (StrEqual(Back, "2"))
     {
     AdminMenu(admin);
     }
      
     else  
     {
     decl String:SteamID[25];
     decl String:UserName[65];   
     GetMenuItem(menu, i, SteamID, sizeof(SteamID), _, UserName, sizeof(UserName));
     new BanUser = GetClientOfUserId(StringToInt(SteamID));
     if (BanUser > 0)
     {
       GetMenuItem(menu, i, SteamID, sizeof(SteamID));
       PrintToChat(admin, "\x03Баним: %s", UserName);   
     }
     }
    }
}


Видел пример из БАНА от wS но тут немного другая структура.... подскажите как выйти из ситуации.. нужно чтоб игрок мог нажать "Назад" (2) и вернуться в AdminMenu(admin);

PS. В одной из попыток получилось так сделать но Когда нажимаешь "назад" в чат пишит Баним: Назад.... а нужно чтоб молча вернулось назад и все
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Меню выбора игроков
  • Страница 3 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск: