Убить спектатора
| |
Sunday
|
Дата: Вторник, 18.09.2012, 22:19:08 | Сообщение # 1 |
|
Сообщений: 186
Репутация: 24 [ +/- ]
|
|
Здравствуйте форумчане, пытаюсь сделать маленький плагин, он будет убивать игрока перед тем как он зайдет в спектейт. У меня свой паблик сервер и хочу перестраховаться от нечестной игры, некоторые игроки что бы их не убили, перескакивают в спектейт. Вот собственно цель плагина.. У меня получилось сделать так - когда кто то заходит в спектейт то убивают всех...))) забавно)) но я к сожалению не владею павном, как сделать, что бы убивало только того кто заходит в спектейт? Прилагаю скрипт моих кривых ручек):
#include <sourcemod> #include <sdktools>
public OnPluginStart() { HookEvent("player_team", ev_PlayerTeam, EventHookMode_Pre); }
public Action:ev_PlayerTeam(Handle:event, const String:name[], bool:dontBroadcast) { for(new i = 1; i <= GetMaxClients(); ++i) { if(IsClientInGame(i)) { FakeClientCommand(i,"kill"); } } return Plugin_Continue; }
Сообщение отредактировал Sunday - Вторник, 18.09.2012, 22:26:35 |
|
| |
_wS_
|
Дата: Вторник, 18.09.2012, 23:21:26 | Сообщение # 2 |
|
Попробуй так:
Code #pragma semicolon 1 #include <sourcemod>
public OnPluginStart() { AddCommandListener(jointeam, "jointeam"); }
public Action:jointeam(client, const String:command[], args) { if (client > 0 && args > 0 && IsPlayerAlive(client)) { decl String:str_team[5]; GetCmdArg(1, str_team, 5); if (StringToInt(str_team) == 1) FakeClientCommand(client, "kill"); } return Plugin_Continue; }
|
|
| |
Scarface_slv
|
Дата: Вторник, 18.09.2012, 23:26:10 | Сообщение # 3 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
А какой смысл? Если игрок живой и он переходит в спекторы его ведь итак должно убить, да и вроде когда ты живой ты не можешь попасть в спекторы, если тока заранее не нажать "M" когда мертвый.
Сообщение отредактировал Scarface_slv - Вторник, 18.09.2012, 23:27:02 |
|
| |
Beelzebub
|
Дата: Вторник, 18.09.2012, 23:34:39 | Сообщение # 4 |
|
Сообщений: 202
Репутация: 13 [ +/- ]
|
|
Quote (Scarface_slv) А какой смысл? Если игрок живой и он переходит в спекторы его ведь итак должно убить, да и вроде когда ты живой ты не можешь попасть в спекторы, если тока заранее не нажать "M" когда мертвый.
Вот вот. Легче тогда запретить вход в спектаторы или запретить вход в спектаторы когда игрок мертвый.
|
|
| |
Sunday
|
Дата: Среда, 19.09.2012, 00:28:19 | Сообщение # 5 |
|
Сообщений: 186
Репутация: 24 [ +/- ]
|
|
Scarface_slv Все просто ребят, в игре ХалфЛайф, когда режим игры командный то при переходе в спектейт игрок умирает и получает - 1 очко но когда игра Детмачь то при заходе в спектейт игрок не получает - 1 очко. Изходя из всего этого, нечестный игрок когда видит что умрет то он быстро жмет забиндинную клавишу спектейта и уходит в него и сразу выходит живой и без - 1 очка.... Это жутко бесит всех нормальных игроков.
Спасибо Ws, сейчас попробую.Добавлено (19.09.2012, 00:28:19) --------------------------------------------- ********************** К сожалению ни чего не происходит, есть какие ни будь еще идеи ребят?
|
|
| |
Beelzebub
|
Дата: Среда, 19.09.2012, 03:11:45 | Сообщение # 6 |
|
Сообщений: 202
Репутация: 13 [ +/- ]
|
|
А почему бы не запретить спектаторы?
|
|
| | |
_wS_
|
Дата: Среда, 19.09.2012, 04:04:50 | Сообщение # 8 |
|
Code public player_team(Handle:event, const String:name[], bool:dontBroadcast) { if (GetEventInt(event, "team") == 1) { new client = GetClientOfUserId(GetEventInt(event, "userid")); if (client > 0 && IsPlayerAlive(client)) FakeClientCommand(client, "kill"); } }
|
|
| |
Sunday
|
Дата: Среда, 19.09.2012, 15:10:16 | Сообщение # 9 |
|
Сообщений: 186
Репутация: 24 [ +/- ]
|
|
_wS_, Спасибо Огроменное, я в Вас не сомневался, последний скрипт работает так как нужно! Протестировал на сервере с игроками, все идеально, есть маленькая особенность правда, когда игрок мертвый и жмет зайти в спектейт, ему не -1 очко добавляется, а +1)) и если лежать и жать бинды выйти и зайти в спек, можно набить очков)))), надеюсь этого ни кто не заметит))). Еще раз спасибо.
Сообщение отредактировал Sunday - Среда, 19.09.2012, 15:33:46 |
|
| |
Scarface_slv
|
Дата: Среда, 19.09.2012, 17:06:27 | Сообщение # 10 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
Это тоже можно исправить...
Добавлено (19.09.2012, 17:06:27) --------------------------------------------- так попробуй Code public OnPluginStart() { HookEvent("player_team", player_team, EventHookMode_Pre); }
public player_team(Handle:event, const String:name[], bool:dontBroadcast) { if (GetEventInt(event, "team") == 1) { new client = GetClientOfUserId(GetEventInt(event, "userid")); if (client > 0 && IsPlayerAlive(client)) FakeClientCommand(client, "kill"); if (client > 0 && !IsPlayerAlive(client)) { new frag = GetClientFrags(client); frag = frag - 2; SetEntProp(client, Prop_Data, "m_iFrags", frag); } } }
Сообщение отредактировал Scarface_slv - Среда, 19.09.2012, 17:10:46 |
|
| |
Sunday
|
Дата: Среда, 19.09.2012, 21:20:42 | Сообщение # 11 |
|
Сообщений: 186
Репутация: 24 [ +/- ]
|
|
Scarface_slv так убивает в -3 в ДМ и в -2 в ТДМ.)) И тут меня осенило проверить в ТДМ без плагина! И что я вижу, дефект в игре ребят оказывается, просто по дефолту, когда ты скачишь мертвый из "spectate" и "jointeam 2" в Командном режиме, то накручиваются очки))) жесть)) , ни когда до этого не замечал. Так что тут дело в Valve но можно ведь попробывать это изменить.)
Добавлено (19.09.2012, 21:20:42) ---------------------------------------------
Подредактировал, сделал вот так:
Code #include <sourcemod> #include <sdktools>
public OnPluginStart() { HookEvent("player_team", player_team, EventHookMode_Pre); }
public player_team(Handle:event, const String:name[], bool:dontBroadcast) { if (GetEventInt(event, "team") == 1) { new client = GetClientOfUserId(GetEventInt(event, "userid")); new frag = GetClientFrags(client); if (client > 0 && IsPlayerAlive(client)) FakeClientCommand(client, "kill"); { frag = frag - 0; SetEntProp(client, Prop_Data, "m_iFrags", frag); } if (client > 0 && !IsPlayerAlive(client)) { frag = frag - 1; SetEntProp(client, Prop_Data, "m_iFrags", frag); } } }
Теперь когда в режиме ТДМ игрок жмет в спектейт, его как всегда убивает в -1, если он лежит мертвый и тыкает в спектейт то накручивание очков в плюса не происходит , тут все как надо, выходит еще и дефекты вальве исправили по своему. Когда в режиме ДМ, то игрока убивает в -1, когда он лежит мертвый и тыкает туда сюда то очки в минус добавляются))) но это не страшно, ни кто так делать не станет...
п.с. Спасибо _wS_, спасибо Scarface_slv и спасибо сайту http://world-source.ru, Вы мне очень помогли.
Сообщение отредактировал Sunday - Среда, 19.09.2012, 21:54:36 |
|
| |
Scarface_slv
|
Дата: Среда, 19.09.2012, 22:36:12 | Сообщение # 12 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
|
|
| |
|