Если игрок убил с ножа и т.п
|
|
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 [ +/- ]
|
|
все разобрался сам))) даже удалось кое что еще добавить.
|
|
| |