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

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

  • Страница 1 из 1
  • 1
Лучшие фраги
Naykon Дата: Пятница, 22.06.2012, 13:06:13 | Сообщение # 1
Сообщений: 439
Репутация: -4 [ +/- ]
Написал не большой плагин типа у кого больше всего фрагов за Т у того через 15 мин скин и хп. В итоге тот кто 1 станет Лучшим игроком (Паханом) в 1 раунде будит им всегда независимо от счета.. как это исправить???

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

new Handle:Timer[MAXPLAYERS+1];

public OnMapStart()
{
  HookEvent("round_start", round_start);
  HookEvent("player_spawn", player_spawn);
         // Тут все параметры скинов - я их отсюда убрал чтоб код не был огромным.
          
}  

new BT;

public round_start(Handle:event, const String:name[], bool:dontBroadcast)  
{
   // Сохраняем Handle таймера
   Timer[BT] = CreateTimer(15.0, BOSS, BT);     
}

public player_spawn(Handle:event, const String:name[], bool:dontBroadcast)  
{
  new client = GetClientOfUserId(GetEventInt(event, "userid"));
  if (IsClientInGame(client) && GetClientTeam(client) == 2 && IsPlayerAlive(client))
  {
   SetEntityModel(client, "models/player/sourcegaming.ru/jail/ter1/t_leet.mdl");
  }
   
}

public Action:BOSS(Handle:timer, any:client)
{
  new best_frags = 0, bad_frags = 0, best_terrorist = 0, bad_terrorist = 0, value, value1;
   for (new i = 1; i <= MaxClients; i++)
   {
    if (IsClientInGame(i) && GetClientTeam(i) == 2 && (value = GetClientFrags(i)) > best_frags)
    {
     best_frags = value;
     best_terrorist = i;
    }
     
    if (best_terrorist > 0)
    {
     SetEntityModel(best_terrorist, "models/player/sourcegaming.ru/jail/avt/zakhaev.mdl");
     SetEntityHealth(best_terrorist, 250);
     GivePlayerItem(best_terrorist, "item_nvgs");
     // Приветствуем через чат
     decl Handle:x;
     if ((x = StartMessageAll("SayText2")) != INVALID_HANDLE)
     {
     BfWriteByte(x, best_terrorist);
     BfWriteByte(x, true);
     decl String:xStR[150];
     Format(xStR, sizeof(xStR), "\x04Игрок \x03%N %s\x04стал Паханом!", best_terrorist, best_terrorist);
     BfWriteString(x, xStR);
     EndMessage();
     }
     return;
    }
     
     
   }
  Timer[BT] = INVALID_HANDLE;

}

Гости не могут скачивать файлы
 
_wS_ Дата: Пятница, 22.06.2012, 13:27:29 | Сообщение # 2
Сколько раз ты уже использовал таймер, но все равно делаешь ошибки.
Зачем Timer[BT]? Нужно просто Handle:xz_timer.

Code
public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
     // Это неправильно. Сделай несколько рестартов и у тебя куча таймеров лишних активных
     xz_timer = CreateTimer(15.0, BOSS, BT);

     // Так надо
     if (xz_timer != INVALID_HANDLE) KillTimer(xz_timer);
     xz_timer = CreateTimer(15.0, BOSS, BT);
}

Урок про циклы есть, ты так и не разобрался.

Code
for (new i = 1; i <= MaxClients; i++)   
{   
     if (...)
     {
         best_terrorist = i;
     }
        
     // Это условие должно быть вне цикла (под ним), т.к. он не завершен и лучший игрок еще не найден..
     if (best_terrorist > 0)   
     {
         ...
     }
}

Ты ставишь скин, hp и тд, но не знаешь, жив ли игрок..
Делать IsClientInGame и IsPlayerAlive внутри player_spawn бессмысленно.

Code
И лучше вместо этого:

decl Handle:x;
if ((x = StartMessageAll("SayText2")) != INVALID_HANDLE)

Делать так:

new Handle:x = StartMessageAll("SayText2");
if (x != INVALID_HANDLE)

decl советуют использовать только для массивов.
 
Naykon Дата: Пятница, 22.06.2012, 14:29:48 | Сообщение # 3
Сообщений: 439
Репутация: -4 [ +/- ]
GivePlayerItem(best_terrorist, "vesthelm"); - почему так не катит?
а так катит:
GivePlayerItem(best_terrorist, "item_nvgs");
????
 
_wS_ Дата: Пятница, 22.06.2012, 14:51:25 | Сообщение # 4
Не знаю, попробуй так:

Code
SetEntProp(client, Prop_Send, "m_bHasHelmet", 1);
SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
 
  • Страница 1 из 1
  • 1
Поиск: