https://dev-cs.ru/resources/50/
модели
спрайты ни откуда. Пока вспомнишь название плагина 100 лет пройдет. Стоки удобнее и индексируются.
модели
спрайты ни откуда. Пока вспомнишь название плагина 100 лет пройдет. Стоки удобнее и индексируются.
stock rg_get_player_item(const id, const WeaponIdType:wid, const InventorySlotType:slot = NONE_SLOT) {
new item = get_member(id, m_rgpPlayerItems, slot);
while (!is_nullent(item)) {
if (get_member(item, m_iId) == wid) {
return item;
}
item = get_member(item, m_pNext);
}
return 0;
}
stock valve_build_number(date[])
{
static mond[12] =
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
new m, d, y, b = 0;
new mon = str_to_num(date[0])
for (m = 0; m < 11; m++)
{
if (mon == m+1)
break;
d += mond[m];
}
d += str_to_num(date[3]) - 1;
y = str_to_num(date[6]) - 1900;
b = d + floatround((y - 1) * 365.25, floatround_floor);
if (((y % 4) == 0) && m > 1)
{
b += 1;
}
return b;
}
register_plugin(PLUGIN, fmt("%d", valve_build_number(__DATE__)-valve_build_number("10/24/1996")), AUTHOR);
// get_cvar_ifloat( "cvar_param_float", "1.1" )
stock Float:get_cvar_ifloat( key[], value[] )
{
static t_cvar
t_cvar = register_cvar( key, value )
return get_pcvar_float( t_cvar )
}
// get_cvar_iint( "cvar_param_int", "1" )
stock get_cvar_iint( key[], value[] )
{
static t_cvar
t_cvar = register_cvar( key, value )
return get_pcvar_num( t_cvar )
}
// get_cvar_iflags( "cvar_param_flags", "ace" )
// or
// get_cvar_iflags( "cvar_param_flags", "all" )
stock get_cvar_iflags( key[], value[] )
{
static t_cvar, tszcvar[25]
t_cvar = register_cvar( key, value )
get_pcvar_string(t_cvar,tszcvar,charsmax(tszcvar))
return ( ( equal(tszcvar, "all") ) ? ADMIN_ALL : read_flags(tszcvar) )
}
// get_cvar_ibool( "cvar_param_bool", "1" )
stock bool:get_cvar_ibool( key[], value[] )
{
static t_cvar
t_cvar = register_cvar( key, value )
return bool:( get_pcvar_num( t_cvar ) )
}
// get_cvar_isplit( "cvar_param_split", "240.0 43 0" )
stock get_cvar_isplit( key[], value[], wtype )
{
static t_cvar, tszcvar[25], values[3][8]
t_cvar = register_cvar( key, value )
get_pcvar_string(t_cvar,tszcvar,charsmax(tszcvar))
parse( tszcvar, values[0], 7, values[1], 7, values[2], 7 )
new Float:param1 = str_to_float( values[0] )
new param2 = str_to_num( values[1] )
new bool:param3 = bool(str_to_num( values[1] ))
return true
}
stock bool:check_player_spawn( id, Float:radius = 100.0 )
{
static Float:origin[ 3 ], ent, szClassName[32], CsTeams:myTeam;
ent = -1;
myTeam = cs_get_user_team( id )
get_entvar( id, var_origin, origin )
while ( ( ent = find_ent_in_sphere( ent, origin, radius ) ) )
{
get_entvar( ent, var_classname, szClassName, charsmax ( szClassName ) )
if( equal( szClassName, "info_player_start" ) && myTeam == CS_TEAM_T )
{
return true;
} else if( equal( szClassName, "info_player_deathmatch" ) && myTeam == CS_TEAM_CT )
{
return true;
}
}
return false;
}
stock ProtectedShield( entity, target )
{
static Float:EntityOrigin[3], Float:TargetOrigin[3], tr;
get_entvar( entity, var_origin, EntityOrigin )
get_entvar( target, var_origin, TargetOrigin )
engfunc( EngFunc_TraceLine, EntityOrigin, TargetOrigin, DONT_IGNORE_MONSTERS, entity, tr )
// Что видим и есть ли щит
if( get_tr2( tr, TR_iHitgroup ) == 8 && get_member( target, m_bOwnsShield ) )
{
return true;
}
return false;
}
Есть bind_pcvar_*Упращенное получение значения кваров сразу же после регистрации в plugin_init или же в других функциях по выбору.
Не придумал как проще реализовать get_cvar_isplit, если каждое проверять, получиться больше итераций, но для того, что бы показать как можно реализовать всё, сгодиться и такое исполнение
Код:// get_cvar_ifloat( "cvar_param_float", "1.1" ) stock Float:get_cvar_ifloat( key[], value[] ) { static t_cvar t_cvar = register_cvar( key, value ) return get_pcvar_float( t_cvar ) } // get_cvar_iint( "cvar_param_int", "1" ) stock get_cvar_iint( key[], value[] ) { static t_cvar t_cvar = register_cvar( key, value ) return get_pcvar_num( t_cvar ) } // get_cvar_iflags( "cvar_param_flags", "ace" ) // or // get_cvar_iflags( "cvar_param_flags", "all" ) stock get_cvar_iflags( key[], value[] ) { static t_cvar, tszcvar[25] t_cvar = register_cvar( key, value ) get_pcvar_string(t_cvar,tszcvar,charsmax(tszcvar)) return ( ( equal(tszcvar, "all") ) ? ADMIN_ALL : read_flags(tszcvar) ) } // get_cvar_ibool( "cvar_param_bool", "1" ) stock bool:get_cvar_ibool( key[], value[] ) { static t_cvar t_cvar = register_cvar( key, value ) return bool:( get_pcvar_num( t_cvar ) ) } // get_cvar_isplit( "cvar_param_split", "240.0 43 0" ) stock get_cvar_isplit( key[], value[], wtype ) { static t_cvar, tszcvar[25], values[3][8] t_cvar = register_cvar( key, value ) get_pcvar_string(t_cvar,tszcvar,charsmax(tszcvar)) parse( tszcvar, values[0], 7, values[1], 7, values[2], 7 ) new Float:param1 = str_to_float( values[0] ) new param2 = str_to_num( values[1] ) new bool:param3 = bool(str_to_num( values[1] )) return true }
Можно онли реапи.Когда то написал эти строки, что бы запретить игрокам ставить объект не долеко от спавна противника.
Проверка находиться ли игрок в радиусе от спавна противника.
Код:stock bool:check_player_spawn( id, Float:radius = 100.0 ) { static Float:origin[ 3 ], ent, szClassName[32], CsTeams:myTeam; ent = -1; myTeam = cs_get_user_team( id ) get_entvar( id, var_origin, origin ) while ( ( ent = find_ent_in_sphere( ent, origin, radius ) ) ) { get_entvar( ent, var_classname, szClassName, charsmax ( szClassName ) ) if( equal( szClassName, "info_player_start" ) && myTeam == CS_TEAM_T ) { return true; } else if( equal( szClassName, "info_player_deathmatch" ) && myTeam == CS_TEAM_CT ) { return true; } } return false; }
Можно просто хитбокс щита включить игроку.Увидел продавали мод DM, где мне очень понравился щит, а именно то как он защищает от пушек. Только аналог EngFunc_TraceLine не нашел в ReApi
Код:stock ProtectedShield( entity, target ) { static Float:EntityOrigin[3], Float:TargetOrigin[3], tr; get_entvar( entity, var_origin, EntityOrigin ) get_entvar( target, var_origin, TargetOrigin ) engfunc( EngFunc_TraceLine, EntityOrigin, TargetOrigin, DONT_IGNORE_MONSTERS, entity, tr ) // Что видим и есть ли щит if( get_tr2( tr, TR_iHitgroup ) == 8 && get_member( target, m_bOwnsShield ) ) { return true; } return false; }
Есть пример?Можно просто хитбокс щита включить игроку.
В регеймдлл посмотри как щит работает.Есть пример?
А вот bind_pcvar_ на 1.8.2 не было, так что использую то, что естьЕсть bind_pcvar_*
Ну тут если кому то очень хочется его использовать, то может использовать CBasePlayer_Members структуру из reapiМожно онли реапи.
Здесь не поддерживаются унылые версии.А вот bind_pcvar_ на 1.8.2 не было, так что использую то, что есть
А в кстрайке не тоже самое?Ну тут если кому то очень хочется его использовать, то может использовать CBasePlayer_Members структуру из reapi
Там нет такого треша.как бы я на тот момент использовал пример из regamedll
Для кого как, но я мыслю логически. учитывая каждую деталь, да бы не возникло недоразумений в момент эксплуатации того или иного продукта в продакшене.Здесь не поддерживаются унылые версии.
Я так и не могу понять, что с ним не так, любой может использовать то, что ему нравиться.А в кстрайке не тоже самое?
Видим я мыслю иначе, так как вижу код по другому.Там нет такого треша.
static const SING_CONST = 0x80000000;
stock Float:itof(num){
static _exp,_isNegative,_abs,_mantissa;
if (!num)return 0.0;
_exp=158; _isNegative=0, _abs = num;
if (num < 0){
_isNegative = SING_CONST;
_abs = -num; // less memory using? im'not sure, maybe we should use bitwise operation + 1?
// btw i think it's better to use - there instead bitiwse.
}
while (!(_abs & SING_CONST)){_exp--;_abs <<= 1;}
_mantissa=_abs>>8;
return Float:(_isNegative | (_exp << 23) | (_mantissa & 0x7fffff));
}
new num123 = 5;
new num1234 = itof(num123);
server_print("%d is %d %f",num123, num1234, Float:num1234);
// output: 5 is 1084227584 5.000000
ftoi(Float: num){
static iNum, isNeg, _exp, _mantissa, i;
iNum = _:num;
isNeg = ((iNum >> 31)&1);
_exp=((iNum >> 23)&0xFF); if(!_exp)return 0;
_mantissa = ((iNum>>0)&0x7FFFFF)|0x800000;
i = _mantissa>>(22-(_exp-128));
return isNeg?-i:i;
}
server_print("%d %f is %d %f",num123, num123, num1234, Float:num1234);
// output is: 1084227584 5.000000 is 5 0.000000
#include <amxmodx>
#include <TeamChanged>
new const JUST_CONNECTED = -1;
new const DISCONNECTED = -2;
new playerTeams[32];
public client_putinserver(id){
playerTeams[id-1]=JUST_CONNECTED;
}
public client_disconnected(id){
playerTeams[id-1]=DISCONNECTED;
}
new fwd;
public plugin_init(){
fwd = RegisterTeamChanged("OnTeamChanged");
}
public OnTeamChanged(const player, const oldTeam, const newTeam, const forwardIndex){
client_print(0,print_chat,"Player %n changed team from %d to %d",player, oldTeam, newTeam);
playerTeams[player-1]=newTeam;
// ...
// maybe also you should add connection check's, depend's on your implementation
}
/*
* Hook player changed team event
*
* @note The function will be called in the following manner:
*
* public Handler(const player, const newTeam, const oldTeam, const forwardIndex)
*
* player - Client index
* newTeam - New team
* oldTeam - Previous team
* forwardIndex - Forward value which was returned from RegisterTeamChanged
*
* @param callback The forward to call
*
* @return Returns a hook handle. Use EnableTeamChanged/DisableTeamChanged to toggle the forward on or off
*/
native RegisterTeamChanged(const callback[]);
/*
* Unregisters and remove a hook handle.
* Use the return value from RegisterTeamChanged as the parameter here!
*
* @param fwdId The hook to stop
*
* @return Returns true if the function is successfully executed, otherwise false
*/
native bool:UnRegisterTeamChanged(const fwdId);
/*
* Stops a hook from triggering.
* Use the return value from RegisterTeamChanged as the parameter here!
*
* @param fwdId The hook to disable
*
* @return Returns true if the function is successfully executed, otherwise false
*/
native bool:DisableTeamChanged(const fwdId);
/*
* Starts a hook back up.
* Use the return value from RegisterTeamChanged as the parameter here!
*
* @note Sometimes you should force-update values via SetPlayerTeam native if there's no active hooks in module,
*
* otherwise you gonna get instantly triggered event's if players teams were changed.
*
* @param fwdId The hook to enable
*
* @return Returns true if the function is successfully executed, otherwise false
*/
native bool:EnableTeamChanged(const fwdId);
/*
* Force set temporary team index
* Can be used for manual update team index if there r no active hook's and/or values r too old.
*
* @param client Client index from 1 to 32
* @param team Team index
*
* @return Returns true if the function is successfully executed, otherwise false
*/
native bool:SetPlayerTeam(const client, const team);