Бег на выживание

Бег на выживание 2.0.dev11

selax

Добрая душа
Сообщения
1,172
Реакции
521
@CAH4E3, на сколько я помню там 1.7.1 был. Сейчас уже есть 1.7.2 с несколькими фиксами.
Это этот же плагин только старая ветка, для Source.
Тут лежит ветка 2, из основных нововведений - поддержка GO.
 

CAH4E3

Сосанчез.
Сообщения
1,597
Реакции
779
@CAH4E3, на сколько я помню там 1.7.1 был. Сейчас уже есть 1.7.2 с несколькими фиксами.
Это этот же плагин только старая ветка, для Source.
Тут лежит ветка 2, из основных нововведений - поддержка GO.
А,понятно.Спасибо за плагин!
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Полностью переработанный модуль респавна игроков: достаточно оптимизирован и стабилен.
Полное выключение кварами, в частности, ненужных частей кода при смене типа респавна.
@selax, Оффтоп
Работает и без мода.
Где CVAR_DEATHRUN_ENABLE - квар для зависимости от мода Deathrun или любого другого плагина.
:ps: Лично я запускал без мода.
 

Вложения

  • Deathrun - Respawn v2.0.0e.rar
    1.5 КБ · Просмотры: 35
Последнее редактирование:

selax

Добрая душа
Сообщения
1,172
Реакции
521
@AlmazON, таки десран же.. немодульный. О_о
Выложи его куды нить на Git, посмотреть чо там, а то я вроде и скачал, а открыть не могу. >.<

Ошибок у меня ни одной ни сыпалось на сервере. Полностью чистые логи. о_О
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755

selax

Добрая душа
Сообщения
1,172
Реакции
521
Архив rar с максимальным сжатием, WinRAR в помощь.
Какой WinRar на телефоне?
P.S. ладно, у меня телефон, как оказалось, даже его не скачал...

Может сюда выложишь, в тег PHP? Ведь интересно что там. :c
 

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Какой WinRar на телефоне?
P.S. ладно, у меня телефон, как оказалось, даже его не скачал...

Может сюда выложишь, в тег PHP? Ведь интересно что там. :c
PHP:
#pragma semicolon    1

#include <sourcemod>
#include <cstrike>

#pragma newdecls    required

#include <deathrun>

public Plugin myinfo =
{
    name        = "Deathrun - Respawn",
    author        = "selax & AlmazON edition",
    description    = "Respawn functions for deathrun plugin",
    version        = "2.0.0e",
    url            = "https://github.com/selax/deathrun"
};

bool    HintMessagesEnabled;
bool    AutoRespawnType;
float    AutoRespawnTime;

bool    AutoRespawnActive;
int        AutoRespawnSeconds;
Handle    AutoRespawnTimerHandle;

bool GameCSGO;

public void OnPluginStart ( )
{
    if ( GetEngineVersion ( ) == Engine_CSGO ) GameCSGO = true;

    ConVar cvars;
   
    cvars        = CreateConVar    ( "dr_respawn",            "1",    "Enable respawn module of deathrun plugin?",    FCVAR_NONE, true, 0.0, true, 1.0    );
    HookConVarChange( cvars, CvarRespawnEnabled );
    if ( cvars.BoolValue ) CvarRespawnEnabled ( cvars, "0", "" );
    cvars        = CreateConVar    ( "dr_respawn_hints",    "1",    "Enable or disable hint messages?",                FCVAR_NONE, true, 0.0, true, 1.0    );
    HintMessagesEnabled = cvars.BoolValue;
    HookConVarChange( cvars, CvarHintMessagesEnabled );
    cvars        = CreateConVar    ( "dr_respawn_type",    "0",    "Type of autorespawn",                            FCVAR_NONE, true, 0.0, true, 1.0    );
    HookConVarChange( cvars, CvarAutoRespawnType );
    CvarAutoRespawnType( cvars, "", "" );
    cvars        = CreateConVar    ( "dr_respawn_time",    "15",    "Respawn time in seconds",                        FCVAR_NONE, true, 1.0, false        );
    AutoRespawnTime = cvars.FloatValue;
    HookConVarChange( cvars, CvarAutoRespawnTime );
   
    LoadTranslations ( "deathrun.respawn" );
   
    AutoExecConfig ( false, "respawn", "deathrun" );
}

public void CvarRespawnEnabled( ConVar convar, const char[] oldValue, const char[] newValue )
{
    if (oldValue[0] == '0')
    {
        HookEvent ( "round_start",        RoundStart,        EventHookMode_PostNoCopy );
        HookEvent ( "round_end",        RoundEnd,        EventHookMode_PostNoCopy );
        if ( !AutoRespawnType ) AutoRespawnTypeSeconds ( );
    }
    else
    {
        UnhookEvent ( "round_start",    RoundStart,        EventHookMode_PostNoCopy );
        UnhookEvent ( "round_end",        RoundEnd,        EventHookMode_PostNoCopy );
        AutoRespawnTypeNoSeconds ( );
        RoundEnd ( null, "", false );
    }
}
public void CvarHintMessagesEnabled ( ConVar convar, const char[] oldValue, const char[] newValue )
{
    HintMessagesEnabled = convar.BoolValue;
}
public void CvarAutoRespawnType ( ConVar convar, const char[] oldValue, const char[] newValue )
{
    (AutoRespawnType = convar.BoolValue) ? AutoRespawnTypeNoSeconds ( ) : AutoRespawnTypeSeconds ( );
    RoundEnd ( null, "", false );
}
public void CvarAutoRespawnTime ( ConVar convar, const char[] oldValue, const char[] newValue )
{
    AutoRespawnTime = convar.FloatValue;
}

public void RoundStart ( Event ev, const char[] name, bool dontBroadcast )
{
    if ( DR_PluginEnabled () )
    {
        AutoRespawnTimerHandle = AutoRespawnType ? CreateTimer ( AutoRespawnTime, AutoRespawnTimer, _, TIMER_FLAG_NO_MAPCHANGE ) :
        CreateTimer ( 1.0, AutoRespawnTimer, _, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE );
        AutoRespawnSeconds = RoundToCeil ( AutoRespawnTime );
    }
}

public void RoundEnd ( Event ev, const char[] name, bool dontBroadcast )
{
    if ( AutoRespawnSeconds )
    {
        delete AutoRespawnTimerHandle;
        AutoRespawnSeconds = 0;
    }
}

public void PlayerDeath ( Event ev, const char[] name, bool dontBroadcast )
{
    if ( AutoRespawnSeconds )
    {
        int client = GetClientOfUserId ( ev.GetInt ( "userid" ) );
        if ( GetClientTeam ( client ) == DR_GetPlayersTeam ( ) )
        {
            CreateTimer ( 1.0, RespawnTimer, client, TIMER_FLAG_NO_MAPCHANGE );
        }
    }
}

public Action AutoRespawnTimer ( Handle timer )
{
    if ( DR_PluginEnabled () )
    {
        if ( AutoRespawnType )
        {
            for ( int i = 1; i <= MaxClients; ++i )
            {
                if ( IsClientInGame ( i ) && GetClientTeam ( i ) > CS_TEAM_SPECTATOR )
                {
                    CS_RespawnPlayer ( i );
                }
            }
        }
        else if ( AutoRespawnSeconds-- )
        {
            if ( HintMessagesEnabled )
            {
                if ( GameCSGO )
                {
                    CGOPrintHintTextToAll (    "  {{#00FFFF==%t}}\n  %t", "AUTORESPAWN", "AUTORESPAWN_TIME_LEFT", AutoRespawnSeconds );
                }
                else
                {
                    PrintHintTextToAll ( "%t: %t", "AUTORESPAWN", "AUTORESPAWN_TIME_LEFT", AutoRespawnSeconds );
                }
            }
            return Plugin_Continue;
        }
    }

    AutoRespawnSeconds = 0;
    return Plugin_Stop;
}

public Action RespawnTimer ( Handle timer, int client )
{
    if ( IsClientInGame( client ) && ( GetClientTeam ( client ) == DR_GetPlayersTeam ( ) ) )
    {
        CS_RespawnPlayer ( client );
    }
   
    return Plugin_Stop;
}

void AutoRespawnTypeSeconds ( )
{
    if ( !AutoRespawnActive )
    {
        HookEvent ( "player_death",        PlayerDeath );
        AutoRespawnActive = true;
    }
}
void AutoRespawnTypeNoSeconds ( )
{
    if ( AutoRespawnActive )
    {
        UnhookEvent ( "player_death",    PlayerDeath );
        AutoRespawnActive = false;
    }
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Ошибок у меня ни одной ни сыпалось на сервере
Оффтоп
Кстати, кому нужен респавн, отвязанный от мода - так и заюзал для чистоты эксперимента (минимум изменений оригинала):
PHP:
#pragma semicolon    1

#include <cstrike>

#pragma newdecls    required

#include <sourcemod>
//Закомментируем файл от мода, чтобы спокойно скомпилировать без него.
//#include <deathrun>
//Напрямую добавляем окраску для CS:GO.
#include <csgo_colors>

public Plugin myinfo =
{
    name        = "No need Deathrun - Respawn",
    author        = "selax",
    description    = "Respawn functions for deathrun plugin",
    version        = "2.0.0",
    url            = "https://github.com/selax/deathrun"
};

ConVar    RespawnEnabled;
ConVar    HintMessagesEnabled;
ConVar    AutoRespawnType;
ConVar    AutoRespawnTime;

bool    AutoRespawnActive    = false;
int        AutoRespawnSeconds    = 0;
Handle    AutoRespawnTimerHandle;

EngineVersion GameVersion;

//Создаём глобальную переменную, имитирующую "включалку" самого мода (на самом деле, у нас его нет).
ConVar DR_Enable;

public void OnPluginStart ( )
{
    GameVersion = GetEngineVersion ( );
   
    RespawnEnabled        = CreateConVar    ( "dr_respawn",            "1",    "Enable respawn module of deathrun plugin?",    FCVAR_NONE, true, 0.0, true, 1.0    );
    HintMessagesEnabled    = CreateConVar    ( "dr_respawn_hints",    "1",    "Enable or disable hint messages?",                FCVAR_NONE, true, 0.0, true, 1.0    );
    AutoRespawnType        = CreateConVar    ( "dr_respawn_type",    "0",    "Type of autorespawn",                            FCVAR_NONE, true, 0.0, true, 1.0    );
    AutoRespawnTime        = CreateConVar    ( "dr_respawn_time",    "15",    "Respawn time in seconds",                        FCVAR_NONE, true, 0.0, false        );
   
    HookEvent ( "round_start",    RoundStart,        EventHookMode_PostNoCopy );
    HookEvent ( "round_end",    RoundEnd,        EventHookMode_PostNoCopy );
    HookEvent ( "player_death",    PlayerDeath,    EventHookMode_PostNoCopy );
   
    LoadTranslations ( "deathrun.respawn" );
   
    AutoExecConfig ( false, "respawn", "deathrun" );

    //Создаём "невидимый" квар, имитирующего активацию/деактивацию мода DR.
    DR_Enable        = CreateConVar    ( "dr_enable",            "1",    "Enable deathrun mod?",    FCVAR_NONE|FCVAR_DONTRECORD, true, 0.0, true, 1.0    );
}

public Action RoundStart ( Event ev, const char[] name, bool dontBroadcast )
{
    if ( !DR_PluginEnabled () || !RespawnEnabled.BoolValue )
    {
        return Plugin_Continue;
    }
   
    if ( AutoRespawnType.IntValue == 0 )
    {
        AutoRespawnActive = true;
        AutoRespawnSeconds = AutoRespawnTime.IntValue;
        AutoRespawnTimerHandle = CreateTimer ( 1.0, AutoRespawnTimer, _, TIMER_REPEAT );
    }
    else if    ( AutoRespawnType.IntValue == 1 )
    {
        AutoRespawnActive = false;
        AutoRespawnTimerHandle = CreateTimer ( AutoRespawnTime.FloatValue, AutoRespawnTimer );
    }
   
    return Plugin_Continue;
}

public Action RoundEnd ( Event ev, const char[] name, bool dontBroadcast )
{
    if ( !DR_PluginEnabled () || !RespawnEnabled.BoolValue )
    {
        return Plugin_Continue;
    }
   
    AutoRespawnActive = false;
   
    delete AutoRespawnTimerHandle;
   
    return Plugin_Continue;
}

public Action PlayerDeath ( Event ev, const char[] name, bool dontBroadcast )
{
    if ( !DR_PluginEnabled () || !RespawnEnabled.BoolValue )
    {
        return Plugin_Continue;
    }
   
    int client = GetClientOfUserId ( ev.GetInt ( "userid" ) );
   
    if ( AutoRespawnActive && ( GetClientTeam ( client ) == DR_GetPlayersTeam ( ) ) )
    {
        CreateTimer ( 1.0, RespawnTimer, client );
    }
   
    return Plugin_Continue;
}

public Action AutoRespawnTimer ( Handle timer )
{
    if ( !DR_PluginEnabled () || !RespawnEnabled.BoolValue )
    {
        return Plugin_Continue;
    }
   
    if ( ( AutoRespawnType.IntValue == 0 ) && AutoRespawnActive )
    {
        AutoRespawnSeconds--;
       
        if ( HintMessagesEnabled.BoolValue )
        {
            if ( GameVersion == Engine_CSGO )
            {
                CGOPrintHintTextToAll (    "  {{#00FFFF==%t}}\n  %t", "AUTORESPAWN", "AUTORESPAWN_TIME_LEFT", AutoRespawnSeconds );
            }
            else if ( GameVersion == Engine_CSS )
            {
                PrintHintTextToAll ( "%t: %t", "AUTORESPAWN", "AUTORESPAWN_TIME_LEFT", AutoRespawnSeconds );
            }
        }
       
        if ( AutoRespawnSeconds <= 0 )
        {
            AutoRespawnActive = false;
        }
    }
    else if ( AutoRespawnType.IntValue == 1 )
    {
        for ( int i = 1; i <= MaxClients; i++ )
        {
            if ( IsClientInGame ( i ) && ( GetClientTeam ( i ) > 1 ) )
            {
                CS_RespawnPlayer ( i );
            }
        }
    }
   
    return Plugin_Continue;
}

public Action RespawnTimer ( Handle timer, int client )
{
    if ( !DR_PluginEnabled () || !RespawnEnabled.BoolValue )
    {
        return Plugin_Continue;
    }
   
    if ( IsClientInGame( client ) && ( GetClientTeam ( client ) == DR_GetPlayersTeam ( ) ) )
    {
        CS_RespawnPlayer ( client );
    }
   
    return Plugin_Continue;
}

//Для бОльшей чистоты имитации, чтобы ничего не менять во всём коде, делаем так (возврат):
bool DR_PluginEnabled ()
{
    return DR_Enable.BoolValue;
}
//Имитируем работу второго натива мода:
int DR_GetPlayersTeam ( )
{
    return 2; //Для 0 типа респавна: 2 - воскрешать Т, 3 - воскрешать КТ.
}
Оффтоп
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
У меня там нативы есть?
Собственноручно подписал так:
C-подобный:
/**
* Check main plugin enabled
*
* @return            Players team
*
*/
native int DR_PluginEnabled ( );

/**
* Get players team
*
* @return            Players team
*
*/
native int DR_GetPlayersTeam ( );
Так то глянул немного и не нашёл, куда идут - похоже, нет такого файла в наличии.
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
@AlmazON, ну правильно, это ж нерабочая версия. Там я просто всякую хрень писал какая мне в голову лезла под градусом. Она не для публики была. :beer:
Ты давай не модули клепай, а полностью перепиши оптимально и без багов.

Пока вижу только хрень. Прям точно такая же как у меня, но совсем другая и лютая какая то....
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
нерабочая версия
Отдельно от мода работает отлично, на все квары реагирует. А что нативы ничего не делают - я их и не нашёл, пришлось положиться на автора.
вижу только хрень
Если для тебя Action при EventHookMode_PostNoCopy - это нормально, да ещё и при том же методе хука берёшь данные события, то да, я пониманию, что ты ничего не понимаешь. Кстати, от последнего как раз ошибка в логах может быть. В SM это раз починили, но, видимо, опять поломали.
перепиши оптимально
Тебе же нравится куча проверок "включалок" при каждом вызове функции вместо полного отключения. Тут тебе не понравится. Оффтоп
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
Пиздец. Написал второе сообщение - первое пропало...

В кратце - переписывай мод, а не кусок. PostNoCopy уже делал без Action - не компилировался. То что нативы ничего не делают - твоя проблема, ибо нативов в последней версии нет.

И учитывай - тут выложена не релизная и даже не бета версия. Это своего рода набор кода, чтобы сформировать общую картину каким должен быть плагин. Кто то рисует на бумаге/доске - я пишу сначала работающие наброски, потом переписываю всё. Тут же я даже наброски не закончил, что и подразумевается префиксом "dev".
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
обматерит про себя
Неа, автора. :haha: Квары работают в полной аналогии с оригиналом, изменения только в коде - результат тот же.
А учитывая, что:
думал я тот мусор удалил с GH, оказывается оно еще там
Мусор не выгреб, то из-за тех ныне не существующих нативов неизвестно, как будет работать и будет ли вообще.
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
то из-за тех ныне не существующих нативов
Что значит "ныне"? Их не существовало и не существует. Все версии плагина, которые я выкладывал (dev1-dev11), не содержат нативов. То что переписал ты - не являлось и не является рабочей версией мода.

Вряд ли. Человек качает мой плагин - у него всё работает, качает твои "улучшения" и у него "вдруг" люди начинают воскрешаться по нескольку раз... Это кстати даже не отключить никак, ведь квары то одинаковые...

По моему ты унизил сам себя - переписал модуль от версии, которая никогда не позиционировалась как рабочая и поэтому не была тут выложена. Так что берись за работу, переписывай то что и обещал переписать, твоя ссылка вела на эту тему, тут лежит dev11. Чтобы скачать - нажми на большую красную кнопку справа вверху.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Поскольку автор сам признался, что версия плагина респавна:
никогда не позиционировалась как рабочая и поэтому не была тут выложена
Т.е. у него там выложено не понятно чего и как, с неизвестными моду нативами:
думал я тот мусор удалил с GH, оказывается оно еще там...
Обновил пост с плагином, выкинув все его мусор-нативы. Теперь ему не нужен никакой мод - он запустится прямо так. А если запускаете вместе с модом Deathrun, то плагин респавна будет включаться/отключаться вместе с ним (слушаться "включалке" мода).
Будет респавнить всех мёртвых игроков среди КТ и Т. Квары идентичны оригиналу.
:ps: Поскольку я этот мод вообще не видел в действии, не играл, то не знаю, как на самом деле должно респавнить. Если что - сообщите.
@selax, Оффтоп
 

skywalker

Участник
Сообщения
1,153
Реакции
263
@AlmazON, респавн нужен только кт которые проходят через ловушки,за т всегда 1 игрок,который активирует эти ловушки и респавн ему не нужен,если что могу посодействовать реализации мода,детран сервер держу не один год,давно нуждается в доработке...:bye:
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
респавн нужен только кт
С одним типом респавна прояснилось - подставлю команду КТ. А что с типом респавна 1, кто-нибудь в курсе? Там просто по прошествии определённого времени возрождает всех мёртвых игроков разом и всё, дальше без возрождений. Автор сам подставил команду и КТ, и Т. Получается и это ненормально, править на контр-терр-ов?
UPD: Обновил. При dr_respawn_type 0 возрождает только мёртвых КТ.
 
Последнее редактирование:

selax

Добрая душа
Сообщения
1,172
Реакции
521
Поскольку автор сам признался, что версия плагина респавна:
Меня ещё никто так не злил.Это написано про ту версию мода что ты скачал где респавн отдельно. В последней выложенной здесь версии всё в одном плагине.

Придет игрок, скачает мой мод. Поставит твой респавн. Что ему делать с 2 респавнами? отключить один он не сможет - квары одинаковые.

На счёт респавна
Первый режим - сразу после смерти возраждает либо обычных игроков, либо избранных, либо всех.
Второй режим - через некоторое время после начала раунда воскрешает всех мертвых обычных игроков, либо избранных, либо всех.

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

Лучше посмотри как сухарик мой старый (1.7.1) мод переписал - судя по гейммонитору количество серверов с моим модом так и было большинство, но по личным ощущениям он меня не то что подвинул, скорее задвинул. Ощущения были такие же как и после оого как пошатнули мою монополию на DR сервера в СНГ и пришлось срочно выкладывать. Назывался что то вроде exclusive deathrun. Посмотри его, поучись как нужно меня обижать. :ab:

Лучше бы ты так дорабатывал свой же мод, как ныл)[/
За такие слова можно и по роже получить. Посмотрел бы я на тебя, как бы ты дорабатывал мод с телефона и без возможности самостоятельно протестировать. Это действительно возможно - не спорю, но я не настолько помешан на этом. :)

Как уже много раз писал - последняя версия dev11 выложена в этой теме, с ней корректно работать твой модуль не будет. Следущая версия dev12 выйдет не раньше августа по причине того что у меня нет ПК, а шлак за 40к я покупать не хочу. Из за обамы мне нужно несколько месяцев чтобы накопить ~200к и купить классный игровой комп. Хотя лучше перенесу срок на октябрь, так как примерно в тот период времени будет операция на глазах, тут даже вариант с телефоном отметается.
 
Сверху Снизу