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

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

  • Страница 1 из 1
  • 1
Убить спектатора
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 [ +/- ]
А почему бы не запретить спектаторы?
 
Sunday Дата: Среда, 19.09.2012, 03:53:05 | Сообщение # 7
Сообщений: 186
Репутация: 24 [ +/- ]
Beelzebub потому что эта функция нужна и очень полезна как и для администраторов так и для геймплея. Достаточный ответ? Надеюсь этот вопрос не по теме больше не будет подыматься :)

Добавлено (19.09.2012, 03:53:05)
---------------------------------------------
как еще можно перехватить игрока который совершает Эвент "player_team" и применить на него "kill" ? Тот что скрипт я написал, работает но убивает всех, это и понятно, потому что там GetMaxClients и IsClientInGame. Может попробывать перехватить player_team, перевести переменную в user ID и этот Юзер Ид подставить под админсую стандартную команду соурсмода "Убить игрока"? Такое возможно? dumaem


Сообщение отредактировал Sunday - Среда, 19.09.2012, 03:54:21
 
_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)) и если лежать и жать бинды выйти и зайти в спек, можно набить очков)))), надеюсь этого ни кто не заметит))). Еще раз спасибо. klas


Сообщение отредактировал 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" в Командном режиме, то накручиваются очки))) жесть)) pipec , ни когда до этого не замечал. Так что тут дело в Valve но можно ведь попробывать это изменить.) ulibka

Добавлено (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, Вы мне очень помогли. klas


Сообщение отредактировал Sunday - Среда, 19.09.2012, 21:54:36
 
Scarface_slv Дата: Среда, 19.09.2012, 22:36:12 | Сообщение # 12
Сообщений: 737
Репутация: 61 [ +/- ]
vshapke
 
  • Страница 1 из 1
  • 1
Поиск: