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

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

  • Страница 1 из 1
  • 1
раунд старт
Naykon Дата: Понедельник, 12.03.2012, 22:13:23 | Сообщение # 1
Сообщений: 439
Репутация: -4 [ +/- ]
Есть переменная y_client (игрок) нужно чтоб в начале раунда этот игрок стал синим.... не пойму как обозначить игрока в событии раундстарт.
 
_wS_ Дата: Вторник, 13.03.2012, 04:31:13 | Сообщение # 2
Омг, мы же это уже проходили. Мне кажется ты просто пытаешься добиться того, чтобы твой скрипт работал, а как он работает и тд, тебе не интересно, ибо я уже не 1 раз говорил про глобальные переменные тебе.

Code
#include <sourcemod>

new xz_client;

public OnPluginStart()
{
     PrintToServer("xz_client = %d", xz_client);
     xz_client = 3;
     xz_func();
     HookEvent("round_start", round_start, EventHookMode_PostNoCopy);
}

xz_func()
{
     PrintToServer("xz_client = %d", xz_client);
}

public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
     xz_client += 1;
     PrintToChatAll("xz_client = %d", xz_client);
     PrintToServer("xz_client = %d", xz_client);
}


Переменная xz_client доступна внутри ЛЮБОЙ функции, потому что она ГЛОБАЛЬНАЯ.
 
Naykon Дата: Вторник, 13.03.2012, 09:36:28 | Сообщение # 3
Сообщений: 439
Репутация: -4 [ +/- ]
Я имел введу что y_client это и есть глобальная перемнная...
Вот в событиии преер дез:
Code
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);
          }
      }
}

мы создали переменную "a" которая содержит тот кто убил с usp.

Что делаю я:
1) делаю глоб перменную y_client
2) HookEvent раундстарт
3) Создаю в событии player_death переменную "new b = GetClientOfUserId(GetEventInt(event, "userid")); - которая соделжит индекс мертвого игрока от usp (рядом с переменной "a")
4) Ниже в playr_death приравниваю "b = y_client" - чтоб в дальнейшем y_client сожержал индекс игрока который погиб от usp
5) Незнаю как сказать чтоб в событии round_start игрок y_client стал зеленым/синим

Добавлено (13.03.2012, 09:36:28)
---------------------------------------------

Code
#include <sourcemod>

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

public OnPluginStart()
{
   HookEvent("round_start", round_start);
      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"));
    new b = GetClientOfUserId(GetEventInt(event, "userid"));
          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 round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
    
}
public OnClientDisconnect(i)
{
      // Если с сервера уходит синий чел, очищаем переменную x_client
      if (i == x_client) x_client = 0;
}

Выше сказаное. Не могу понять как сделать игрока y_client (тот кто умер от usp) чтоб он в начале раунда стал зеленым! а после сметри следующего игрока usp зеленым стал бы теперь тот игрок а этот нет.
 
_wS_ Дата: Вторник, 13.03.2012, 09:39:09 | Сообщение # 4
Ты лучше бы просто объяснил, что именно ты хочешь сделать, а ты мне даешь куски кода и я должен их собрать, не понимая весь смысл того, как ты хочешь чтобы оно работало. Если ты хочешь что-то сделать с последним убитым из usp игроком в начале раунда, то это же совсем просто:

Code
public player_death(Handle:event, const String:name[], bool:dontBroadcast)
{
     decl String:x_weapon[10];
     GetEventString(event, "weapon", x_weapon, 10);
     if (StrEqual(x_weapon, "usp")) y_client = GetClientOfUserId(GetEventInt(event, "userid"));
}


Но нужно не забывать, что y_client может выйти с сервера и другой вошедший может быть равен y_client, так как индексы могут быть только от 1 до MaxClients, это не userid, который растет с каждым заходом игрока. Поэтому, если y_client вышел, надо сделать y_client = 0;

Теперь ты хочешь что-то сделать с y_client в начале раунда? player_spawn выполняется до round_start, но надежнее выполнить нужные команды после рождения этого игрока, или с задержкой в 1 или более секунд после старта раунда.

Quote
приравниваю "b = y_client" - чтоб в дальнейшем y_client сожержал индекс игрока который погиб от usp

ООООмгГгг.. Надо делать y_client = b, а не b = y_client. Ты же значение глобальной переменной хочешь изменить, а не локальной.
 
  • Страница 1 из 1
  • 1
Поиск: