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

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

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Меню. Ошибка после обновления до 73 (Вылет сервера)
Меню. Ошибка после обновления до 73
Naykon Дата: Четверг, 23.08.2012, 18:52:34 | Сообщение # 1
Сообщений: 439
Репутация: -4 [ +/- ]
Написал довольно емкий плагин будучи на 71 версии игры. На 71, 72 плагин работал отлично, но после обновления до 73 версии плагин стал выключать сервер, если кто либо выберет, какой либо пункт в меню, запускаемом этим плагином... огромная просьба помочь, в чем может быть дело?

В плагине много менюшек, но я выделил одну чтоб выяснить суть проблемы...

Перед вами плагин который работал на 71-72 версиях, игроки Т в начале раунда голосуют за 1 игрока СТ.... как только игрок Т нажмет кнопочку в меню сервер упадет((((

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

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

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;
    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, 10);
    }
      
    all_votes = 0; // сколько всего было голосов
    timer_sec = 10; // время голосования в сек.
    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;
     decl Handle:h;
     if ((h = StartMessageAll("SayText2")) != INVALID_HANDLE)
     {
     BfWriteByte(h, target_index);
     BfWriteByte(h, true);
     decl String:xStR[75];
     Format(xStR, sizeof(xStR), "\x04Игрок \x03%N \x04проголосовал за\x03 %N", i, target_index);
     BfWriteString(h, xStR);
     EndMessage();
     }
    }
    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();
    ct_client = random_client;
    if (random_client > 0)
    {
     decl Handle:j;
     if ((j = StartMessageAll("SayText2")) != INVALID_HANDLE)
     {
     BfWriteByte(j, random_client);
     BfWriteByte(j, true);
     decl String:xStR[75];
     Format(xStR, sizeof(xStR), "\x03***\x04Игрок\x03 %N \x03***", random_client);
     BfWriteString(j, xStR);
     EndMessage();
     }
    }
    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;
      ct_client = target_index;
           }
       
       }
       if (target_index > 0 && IsClientInGame(target_index))
       {
     decl Handle:k;
    if ((k = StartMessageAll("SayText2")) != INVALID_HANDLE)
     {
     BfWriteByte(k, target_index);
     BfWriteByte(k, true);
     decl String:xStR[75];
     Format(xStR, sizeof(xStR), "\x03***\x04Игрок\x03 %N \x03***", target_index);
     BfWriteString(k, xStR);
     EndMessage();
     }
       }
       else
    {
     target_index = GetRandomClient();
    ct_client = target_index;
    if (target_index > 0)
    {
     decl Handle:n;
     if ((n = StartMessageAll("SayText2")) != INVALID_HANDLE)
     {
     BfWriteByte(n, target_index);
     BfWriteByte(n, true);
     decl String:xStR[75];
     Format(xStR, sizeof(xStR), "\x03***\x04Игрок\x03 %N \x04стал Командиром!\x03***", target_index);
     BfWriteString(n, xStR);
     EndMessage();
     }
    }
   }
       return Plugin_Stop;
}

     
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;
}

Прикрепления: Naykon.sp(4.8 Kb)


Сообщение отредактировал Naykon - Четверг, 23.08.2012, 19:01:07
 
_wS_ Дата: Четверг, 23.08.2012, 19:28:59 | Сообщение # 2
Попробуй вместо StartMessageAll PrintToChatAll, может из-за этого. А в логах что? Пусто?
 
Naykon Дата: Четверг, 23.08.2012, 22:46:00 | Сообщение # 3
Сообщений: 439
Репутация: -4 [ +/- ]
нет.... не в сообщении пробела а в самом меню, протестируйте пожалуйста у себя на тест сервере 63 версии мой скрипт и сами все увидите....
Зайдти за Т и постаить бота за СТ....


Сообщение отредактировал Naykon - Пятница, 24.08.2012, 00:32:10
 
nikola31rus Дата: Пятница, 24.08.2012, 09:54:46 | Сообщение # 4
Сообщений: 37
Репутация: 4 [ +/- ]
Попробуй обновить Sourcemod на сервере)


Сообщение отредактировал nikola31rus - Пятница, 24.08.2012, 10:06:44
 
Naykon Дата: Пятница, 24.08.2012, 11:21:39 | Сообщение # 5
Сообщений: 439
Репутация: -4 [ +/- ]
обновил толку 0 ((
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Меню. Ошибка после обновления до 73 (Вылет сервера)
  • Страница 1 из 1
  • 1
Поиск: