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

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

  • Страница 1 из 1
  • 1
Если игрок убил с ножа и т.п
Naykon Дата: Пятница, 02.03.2012, 19:07:21 | Сообщение # 1
Сообщений: 439
Репутация: -4 [ +/- ]
Дайте пример выполнения скрипта.
Игрок который убил с USP последним тот станет синим.. в общем Игрок-1 убил Игрока-2 то Игрок-1 - синий. Если Игрок-3 убил Игрока-4 то Игрок-1 стал норм цвета, а Игрок-3 синим.

Пример можно использовать в уроке как пример выполнения ф-й с оружием.
 
_wS_ Дата: Пятница, 02.03.2012, 19:34:59 | Сообщение # 2
Напишу прямо в этой теме.

Code
#include <sourcemod>

// Глобальная переменная для хранения индекса синего игрока
new x_client;

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

public OnMapStart()
{
     // Карта стартовала, говорим что синего игрока нет
     x_client = 0;
}

public player_death(Handle:event, const String:name[], bool:dontBroadcast)
{
     // Получаем оружие, из которого игрок был убит
     decl String:x_weapon[10];
     GetEventString(event, "weapon", x_weapon, sizeof(x_weapon));

     // Если это usp, то..
     if (StrEqual(x_weapon, "usp"))
     {
         // Если убийца НЕ синий игрок, то..
         new a = GetClientOfUserId(GetEventInt(event, "attacker"));
         if (a > 0 && a != x_client)
         {
             // Если есть живой синий игрок, ставим ему стандартный цвет
             if (x_client > 0 && IsClientInGame(x_client) && IsPlayerAlive(x_client))
             {
                 SetEntityRenderMode(x_client, RENDER_TRANSCOLOR);
                 SetEntityRenderColor(x_client, 255, 255, 255, 255);
             }

             // Теперь делаем текущего убийцу синим игроком
             x_client = a;
             SetEntityRenderMode(a, RENDER_TRANSCOLOR);
             SetEntityRenderColor(a, 0, 0, 255, 255);
         }
     }
}

public OnClientDisconnect(i)
{
     // Если с сервера уходит синий чел, очищаем переменную x_client
     if (i == x_client) x_client = 0;
}


Лучше скачайте файл в прикреплениях (просто код копируется с неправильными отступами).

Гости не могут скачивать файлы
 
_wS_ Дата: Пятница, 02.03.2012, 22:25:26 | Сообщение # 3
Подправил код, это было лишнее:

Code
// Если жертва = синий игрок, очищаем x_client и игнорируем все команды ниже (return)
new i = GetClientOfUserId(GetEventInt(event, "userid"));
if (i == x_client)
{
     x_client = 0;
     return;
}
 
Naykon Дата: Вторник, 13.03.2012, 19:19:21 | Сообщение # 4
Сообщений: 439
Репутация: -4 [ +/- ]
Дайте пример еще одного скриптика.
Т у которого больше всего фрагов становиться синим до конца карты.. если вдруг он выходит или его опрережает другой Т то у предидущего лидера цвет меняется на стандарт а у нового на синий =)
 
_wS_ Дата: Среда, 14.03.2012, 07:18:27 | Сообщение # 5
Code
round_start
{
     new best_frags = 0, best_terrorist = 0, value;
     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)
     {
         // Лучший террорист найден (best_terrorist)
     }
}
 
Naykon Дата: Среда, 14.03.2012, 10:30:53 | Сообщение # 6
Сообщений: 439
Репутация: -4 [ +/- ]
А как еще чтоб самый худший игрок был красный? (именно 1 игрок лучший и 1 игрок худший)
А вдруг будет счет равный у двоих тогда синими станут оба?
Code
  if (best_terrorist > 0)
      {
          // Лучший террорист найден (best_terrorist)
      }  

Так для худшего не прокатит будут все ост красные....

Добавлено (14.03.2012, 10:30:53)
---------------------------------------------

Code

round_start
{
      new best_frags = 0, best_terrorist = 0, value;
      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 (IsClientInGame(i) && GetClientTeam(i) == 2 && (value = GetClientFrags(i)) < best_frags)
          {
              best_frags = value;
              best_terrorist = i;
          }
      }

      if (best_terrorist > 0)
      {
          // Лучший террорист найден (best_terrorist)
      }  

      if (best_terrorist >= 0)
      {
          // Худший террорист найден (best_terrorist)
      }
}


Для худшкго возможно так но я не уверен..

Остается вопрос нужно не будет ли такого если у 2 игроков одинаковые фраги то они оба синие или крастные????
 
_wS_ Дата: Среда, 14.03.2012, 10:48:47 | Сообщение # 7
Эххх.. Смотря на твой код, видно что ты и не стараешься. Смысла в нём ноль.

Quote (Naykon)
А вдруг будет счет равный у двоих тогда синими станут оба?

Если бы ты хоть пытался понять код, то понял бы, что в переменной best_terrorist сохранится только 1 игрок. И если количество фрагов одинаковое у нескольких игроков, то лучшим будет тот, чей индекс наименьший.

Зачем ты повторяешь один и тот же код? Что это?

Quote
if (IsClientInGame(i) && GetClientTeam(i) == 2 && (value = GetClientFrags(i)) < best_frags)

Чуть выше посмотри, там уже есть эти условия.

Тут вообще просто смешно:

Code
if (best_terrorist > 0)  
{  
     // Лучший террорист найден (best_terrorist)  
}   

if (best_terrorist >= 0)  
{  
     // Худший террорист найден (best_terrorist)  
}
 
Naykon Дата: Среда, 14.03.2012, 11:15:51 | Сообщение # 8
Сообщений: 439
Репутация: -4 [ +/- ]
Code


#include <sourcemod>  

public OnMapStart()
{
  HookEvent("round_start", round_start);
}  

public round_start(Handle:event, const String:name[], bool:dontBroadcast)  
{
      new best_frags = 0, best_terrorist = 0, value;
   new best_frags_1 = 0, best_terrorist_1 = 0, value_1;
      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 (IsClientInGame(i) && GetClientTeam(i) == 2 && (value = GetClientFrags(i)) > best_frags_1)
          {
              best_frags_1 = value_1;
              best_terrorist_1 = i;
          }
      }
      if (best_terrorist > 0)
      {
          SetEntityRenderColor(best_terrorist, 0, 0, 255, 255);
      }
    
   if (best_terrorist_1 >= 0)
      {
          SetEntityRenderColor(best_terrorist_1, 255, 0, 0, 255);
      }
}

Работает так.. но есть 2проблемы желательно чтоб если
1) игрок опережает другого игрока в середине раунда то синим становился именно тот другой игрок а предидущий стал норм цвета. Аналогично с худшим.

2)Заметил что если у игрока 0 фрагов и он последний то он не крастного цвета, а красного цвета игрок который имеет хотяб 1 смерть.

Добавлено (14.03.2012, 11:10:21)
---------------------------------------------
Редактирую проблему 2.
Игрок который меньше всего убил становиться красным... Нужно заменить команду GetClientFrags на ту что показывает его смерти. А нужно чтоб ХУДШИЙ игрок становился им

Добавлено (14.03.2012, 11:15:51)
---------------------------------------------
ппЦ чертишо получилось... если игрок был на последнем место он красный ... и если этот же игрок вырвался на 1 место он тоже красный((((

 
_wS_ Дата: Среда, 14.03.2012, 11:17:57 | Сообщение # 9
Не хочу тебе давать готовый код, ты его все равно не поймешь, так как повторяешь и не хочешь исправлять свои ошибки.
 
Naykon Дата: Среда, 14.03.2012, 20:29:39 | Сообщение # 10
Сообщений: 439
Репутация: -4 [ +/- ]
все разобрался сам))) даже удалось кое что еще добавить.
 
  • Страница 1 из 1
  • 1
Поиск: