Какой WinRar на телефоне?
P.S. ладно, у меня телефон, как оказалось, даже его не скачал...
Может сюда выложишь, в тег PHP? Ведь интересно что там. :c
#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;
}
}
ОффтопОшибок у меня ни одной ни сыпалось на сервере
#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 - воскрешать КТ.
}
ОффтопPlugin
Собственноручно подписал так:У меня там нативы есть?
/**
* Check main plugin enabled
*
* @return Players team
*
*/
native int DR_PluginEnabled ( );
/**
* Get players team
*
* @return Players team
*
*/
native int DR_GetPlayersTeam ( );
Отдельно от мода работает отлично, на все квары реагирует. А что нативы ничего не делают - я их и не нашёл, пришлось положиться на автора.нерабочая версия
Если для тебя Action при EventHookMode_PostNoCopy - это нормально, да ещё и при том же методе хука берёшь данные события, то да, я пониманию, что ты ничего не понимаешь. Кстати, от последнего как раз ошибка в логах может быть. В SM это раз починили, но, видимо, опять поломали.вижу только хрень
Тебе же нравится куча проверок "включалок" при каждом вызове функции вместо полного отключения. Тут тебе не понравится. Оффтопперепиши оптимально
Неа, автора. :haha: Квары работают в полной аналогии с оригиналом, изменения только в коде - результат тот же.обматерит про себя
Мусор не выгреб, то из-за тех ныне не существующих нативов неизвестно, как будет работать и будет ли вообще.думал я тот мусор удалил с GH, оказывается оно еще там
Что значит "ныне"? Их не существовало и не существует. Все версии плагина, которые я выкладывал (dev1-dev11), не содержат нативов. То что переписал ты - не являлось и не является рабочей версией мода.то из-за тех ныне не существующих нативов
Вряд ли. Человек качает мой плагин - у него всё работает, качает твои "улучшения" и у него "вдруг" люди начинают воскрешаться по нескольку раз... Это кстати даже не отключить никак, ведь квары то одинаковые...Неа, автора.
Т.е. у него там выложено не понятно чего и как, с неизвестными моду нативами:никогда не позиционировалась как рабочая и поэтому не была тут выложена
Обновил пост с плагином, выкинув все его мусор-нативы. Теперь ему не нужен никакой мод - он запустится прямо так. А если запускаете вместе с модом Deathrun, то плагин респавна будет включаться/отключаться вместе с ним (слушаться "включалке" мода).думал я тот мусор удалил с GH, оказывается оно еще там...
С одним типом респавна прояснилось - подставлю команду КТ. А что с типом респавна 1, кто-нибудь в курсе? Там просто по прошествии определённого времени возрождает всех мёртвых игроков разом и всё, дальше без возрождений. Автор сам подставил команду и КТ, и Т. Получается и это ненормально, править на контр-терр-ов?респавн нужен только кт
Меня ещё никто так не злил.Это написано про ту версию мода что ты скачал где респавн отдельно. В последней выложенной здесь версии всё в одном плагине.Поскольку автор сам признался, что версия плагина респавна:
За такие слова можно и по роже получить. Посмотрел бы я на тебя, как бы ты дорабатывал мод с телефона и без возможности самостоятельно протестировать. Это действительно возможно - не спорю, но я не настолько помешан на этом. :)Лучше бы ты так дорабатывал свой же мод, как ныл)[/