раунд старт
| |
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. Ты же значение глобальной переменной хочешь изменить, а не локальной.
|
|
| |
|