Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Как заставить эти два плагина работать вместе?

, сервер падает спустя 2-3 секунды
Статус пользователя LaFA
сообщение 8.7.2015, 4:54
Сообщение #1


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

Первый изменяет работу банихоп блоков, делает их более проходимыми, а второй плагин исправляет недочеты в прозрачности. Сервер падает спустя 2-3 секунды на картах где есть банихоп.
upd и еще по умолчанию mpbhops 0 т.е. отключен и все равно он мешает второму плагину.
+ еще пробовал отключить все функции второго плагина, везде 0 поставил, сервер все равно повис :(
Код:
/*
MultiPlayer Bunny Hops v1.2
*/

#include <amxmodx>
#include <engine>
#include <fakemeta>

#define VERSION "1.2"

#define MAX_DOORS 500

#define TSK_BHOP 50
#define TSK_CLEAR_FAIL 100

//func_doors[x]{ id, speed, angles }
new door_count = 0, func_doors[MAX_DOORS][3], Float:door_tp_pos[MAX_DOORS][3]
new bhop_failid[32], bool:bhop_fail[32]
new p_enabled
new MAXPLAYERS

public plugin_init( )
{
MAXPLAYERS = get_maxplayers( )

register_plugin( "MP Bhops", VERSION, "Ian Cammarata" )
register_cvar( "mpbhops_version", VERSION, FCVAR_SERVER )

p_enabled = register_cvar( "mpbhops", "0", FCVAR_SERVER )
}

public pfn_keyvalue( ent )
{
static last_ent
new class[31], key[31], val[31]
copy_keyvalue( class, 30, key, 30, val, 30 )

if( ent != last_ent && func_doors[door_count][0] && door_count < MAX_DOORS )
door_count++

if( equal( class, "func_door" ) )
{
if( ent != last_ent ) func_doors[door_count][0] = ent

if( equal( key, "speed" ) )
func_doors[door_count][1] = str_to_num(val)
if( equal( key, "dmg" ) )
func_doors[door_count][0] = 0
if( equal( key, "angles" ) )
{
new angles[5]
parse( val, angles, 4 )
func_doors[door_count][2] = str_to_num( angles )
}
last_ent = ent
}

return PLUGIN_CONTINUE
}

public plugin_cfg( )
{
if( func_doors[door_count][0] && door_count < MAX_DOORS )
door_count++

new ent, ent2, tmpstr[33]
new Float:dmins[3], Float:dmaxs[3]

//Find tp spots for doors, in case they're used for bhop
for( new i = 0; i < door_count; i++ )
{
ent = func_doors[i][0]
if( !is_valid_ent( ent ) ) func_doors[i][0] = 0
else
{
entity_get_vector( ent, EV_VEC_mins, dmins )
entity_get_vector( ent, EV_VEC_maxs, dmaxs )

new dwid = floatround( dmaxs[0] - dmins[0] )
new dlen = floatround( dmaxs[1] - dmins[1] )

//If the door moves up, or is thin, remove it's id from the array
if( func_doors[i][2] < 0 || dwid < 24 || dlen < 24 )
func_doors[i][0] = 0
//Otherwise find a safe tp spot in case it's a bhop door
else
{
//If it has a targetname, change the id in array to targeter
entity_get_string( ent, EV_SZ_targetname, tmpstr, 32 )
if( strlen( tmpstr ) )
{
ent2 = find_ent_by_target( -1, tmpstr )
if( ent2 )
{
func_doors[i][0] = ent2

//If targeter is a button, remove it's id from the array
entity_get_string( ent2, EV_SZ_classname, tmpstr, 32 )
if( equal( tmpstr, "func_button" ) )
func_doors[i][0] = 0
}
}

new Float:tmpvec[3], Float:tmpvec2[3]

new Float:dr_tc[3]
dr_tc[0] = ( dmaxs[0] + dmins[0] ) / 2
dr_tc[1] = ( dmaxs[1] + dmins[1] ) / 2
dr_tc[2] = dmaxs[2]

tmpvec[0] = ( dmaxs[0] + dmins[0] ) / 2
tmpvec[1] = dmaxs[1] + 20
tmpvec[2] = dmaxs[2] + 20
trace_line( ent, dr_tc, tmpvec, tmpvec2 )
if( !trace_hull( tmpvec, HULL_HUMAN ) && tmpvec2[2] == tmpvec[2] )
door_tp_pos[i] = tmpvec
else
{
tmpvec[1] = dmins[1] - 20
trace_line( ent, dr_tc, tmpvec, tmpvec2 )
if( !trace_hull( tmpvec, HULL_HUMAN ) && tmpvec2[2] == tmpvec[2] )
door_tp_pos[i] = tmpvec
else
{
tmpvec[0] = dmaxs[0] + 20
tmpvec[1] = ( dmaxs[1] + dmins[1] ) / 2
trace_line( ent, dr_tc, tmpvec, tmpvec2 )
if( !trace_hull( tmpvec, HULL_HUMAN ) && tmpvec2[2] == tmpvec[2] )
door_tp_pos[i] = tmpvec
else
{
tmpvec[0] = dmins[0] - 20
door_tp_pos[i] = tmpvec
}
}
}
}
}
}
}

//This is a semiclip fix
public client_PreThink( id )
{
//If they're on the ground and not solid...
if( ( pev( id, pev_flags ) & FL_ONGROUND ) && !pev( id, pev_solid ) )
{
new Float:orig[3]
entity_get_vector( id, EV_VEC_origin, orig )

//do a hull trace 1 unit below their origin
orig[2] -= 1
engfunc( EngFunc_TraceHull, orig, orig, DONT_IGNORE_MONSTERS, HULL_HUMAN, id, 0 )
new ent = get_tr2( 0, TR_pHit )

//if all we hit is world or another player, who cares, exit
if( ent <= MAXPLAYERS ) return PLUGIN_CONTINUE

//if we hit a door in the array, send it to the handler then exit
new dpos = door_in_array( ent )
if( dpos > -1 )
{
bhop_check_fail( id, ent, dpos )
return PLUGIN_CONTINUE
}

//if we hit a BCM entity, force touch so the BCM plugin can handle it
new class[32]
entity_get_string( ent, EV_SZ_classname, class, 31 )
if( equal( class, "bcm" ) || equal( class, "bm_block" ) )
fake_touch( ent, id )
}

return PLUGIN_CONTINUE
}

public pfn_touch( ent, id )
{
if( !get_pcvar_num( p_enabled ) || !ent || !id )
return PLUGIN_CONTINUE

//Make sure id is player and ent is object
if( 0 < ent <= MAXPLAYERS )
{
new tmp = id
id = ent
ent = tmp
}
else if( !( 0 < id <= MAXPLAYERS ) )
return PLUGIN_CONTINUE

//Bhop stuff
new dpos = door_in_array( ent )
if( dpos > -1 )
{
bhop_check_fail( id, ent, dpos )
return PLUGIN_HANDLED
}

return PLUGIN_CONTINUE
}

public bhop_check_fail( id, ent, dpos )
{
if( bhop_failid[id-1] != ent )
{
bhop_failid[id-1] = ent
bhop_fail[id-1] = false

new tskid = TSK_BHOP + id
if( task_exists( tskid ) )
remove_task( tskid )
set_task( 0.2, "bhop_set_fail", tskid )
tskid = TSK_CLEAR_FAIL + id
if( task_exists( tskid ) )
remove_task( tskid )
set_task( 0.7, "bhop_clear_fail", tskid )
}
else if( bhop_fail[id-1] )
{
//Teleport to fail position
entity_set_vector( id, EV_VEC_velocity, Float:{0.0, 0.0, 0.0} )
entity_set_vector( id, EV_VEC_origin, door_tp_pos[dpos] )

//Reset fail vars
bhop_failid[id-1] = 0
bhop_fail[id-1] = false
}
}

public door_in_array( door )
{
for( new i = 0; i < door_count; i++ )
if( func_doors[i][0] == door )
return i
return -1
}

public bhop_set_fail( tskid )
{
bhop_fail[ tskid - TSK_BHOP - 1 ] = true
return PLUGIN_HANDLED
}

public bhop_clear_fail( tskid )
{
new id = tskid - TSK_CLEAR_FAIL
bhop_failid[id-1] = 0
bhop_fail[id-1] = false
return PLUGIN_HANDLED
}


Код:
/*
Created By AlexALX © 2010-2011
DRM: Triggers & Entities Fix is free software;
*/
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <xs>

// Change this values to higher, if you have errors
#define MAX_ENTS 1024
#define MAX_ITEMS 384
#define MAX_BUTTONS 256

new Float:g_flEntMins[ MAX_ENTS ][ 3 ];
new Float:g_flEntMaxs[ MAX_ENTS ][ 3 ];
new g_eEnt[ MAX_ENTS ];
new g_eCount, g_dCount;

new Float:g_flItemMins[ MAX_ITEMS ][ 3 ];
new Float:g_flItemMaxs[ MAX_ITEMS ][ 3 ];
new g_iEnt[ MAX_ITEMS ], n_iEnt[ MAX_ITEMS ];
new g_iCount;

new Float:g_flButMins[ MAX_BUTTONS ][ 3 ];
new Float:g_flButMaxs[ MAX_BUTTONS ][ 3 ];
new g_bEnt[ MAX_BUTTONS ], n_bEnt[ MAX_BUTTONS ];
new g_bCount;

new register_hurt, register_push, register_teleport, register_gravity, register_multiple, register_once, register_counter;
new register_breakable, register_breakable_render, register_button, register_button_delay, register_item, register_item_delay, register_door, register_door_open;
new register_door_rotating, register_door_rotating_open, register_momentary_door, register_train, register_train_render, register_vehicle, register_tracktrain;
new register_rotating, register_rotating_render, register_pendulum, register_block;
new cvar_breakable, cvar_button, cvar_item, cvar_door, cvar_door_open, cvar_door_rotating, cvar_door_rotating_open, cvar_momentary_door;
new cvar_train, cvar_vehicle, cvar_tracktrain, cvar_rotating, cvar_pendulum, cvar_block;

#define VERSION "1.4.1"

public plugin_init() {
register_plugin( "DRM: Triggers & Entities Fix", VERSION, "AlexALX" );
register_cvar( "semiclip_fix_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY );
register_hurt = register_cvar( "semiclip_fix_hurt", "1" );
register_push = register_cvar( "semiclip_fix_push", "1" );
register_teleport = register_cvar( "semiclip_fix_teleport", "1" );
register_gravity = register_cvar( "semiclip_fix_gravity", "1" );
register_multiple = register_cvar( "semiclip_fix_multiple", "1" );
register_once = register_cvar( "semiclip_fix_once", "1" );
register_counter = register_cvar( "semiclip_fix_counter", "1" );
register_breakable = register_cvar( "semiclip_fix_breakable", "1" );
register_breakable_render = register_cvar( "semiclip_fix_breakable_render", "1" );
register_button = register_cvar( "semiclip_fix_button", "1" );
register_button_delay = register_cvar( "semiclip_fix_button_delay", "2.0" );
register_item = register_cvar( "semiclip_fix_item", "1" );
register_item_delay = register_cvar( "semiclip_fix_item_delay", "2.0" );
register_door = register_cvar( "semiclip_fix_door", "1" );
register_door_open = register_cvar( "semiclip_fix_door_open", "1" );
register_door_rotating = register_cvar( "semiclip_fix_door_rotating", "1" );
register_door_rotating_open = register_cvar( "semiclip_fix_door_rotating_open", "1" );
register_momentary_door = register_cvar( "semiclip_fix_momentary_door", "1" );
register_train = register_cvar( "semiclip_fix_train", "1" );
register_train_render = register_cvar( "semiclip_fix_train_render", "1" );
register_vehicle = register_cvar( "semiclip_fix_vehicle", "1" );
register_tracktrain = register_cvar( "semiclip_fix_tracktrain", "1" );
register_rotating = register_cvar( "semiclip_fix_rotating", "1" );
register_rotating_render = register_cvar( "semiclip_fix_rotating_render", "1" );
register_pendulum = register_cvar( "semiclip_fix_pendulum", "1" );
register_block = register_cvar( "semiclip_fix_block", "1" );
}

public plugin_cfg() {
set_task(0.1,"check_plugins");
set_task(7.0,"delay_load");
}

public check_plugins() {
if(find_plugin_byfile("linux_func_rotating_fix_fakemeta.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: linux_func_rotating_fix_fakemeta.amxx plugin running! stopped.");
pause("acd","linux_func_rotating_fix_fakemeta.amxx");
}
if(find_plugin_byfile("linux_func_rotating_fix_engine.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: linux_func_rotating_fix_engine.amxx plugin running! stopped.");
pause("acd","linux_func_rotating_fix_engine.amxx");
}
if(find_plugin_byfile("func_rotating_bugfix.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: func_rotating_bugfix.amxx plugin running! stopped.");
pause("acd","func_rotating_bugfix.amxx");
}
if(find_plugin_byfile("DRM_trigger_hurt_fix.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: DRM_trigger_hurt_fix.amxx plugin running! stopped.");
pause("acd","DRM_trigger_hurt_fix.amxx");
}
if(find_plugin_byfile("linux_func_train_fm.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: linux_func_train_fm.amxx plugin running! stopped.");
pause("acd","linux_func_train_fm.amxx");
}
if(find_plugin_byfile("BreakableFix.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: BreakableFix.amxx plugin running! stopped.");
pause("acd","BreakableFix.amxx");
}
}

public delay_load()
{
new cvar_hurt = get_pcvar_num(register_hurt);
new cvar_push = get_pcvar_num(register_push);
new cvar_teleport = get_pcvar_num(register_teleport);
new cvar_gravity = get_pcvar_num(register_gravity);
new cvar_multiple = get_pcvar_num(register_multiple);
new cvar_once = get_pcvar_num(register_once);
new cvar_counter = get_pcvar_num(register_counter);
cvar_breakable = get_pcvar_num(register_breakable);
new cvar_breakable_render = get_pcvar_num(register_breakable_render);
cvar_button = get_pcvar_num(register_button);
new Float:cvar_button_delay = get_pcvar_float(register_button_delay);
cvar_item = get_pcvar_num(register_item);
new Float:cvar_item_delay = get_pcvar_float(register_item_delay);
cvar_door = get_pcvar_num(register_door);
cvar_door_open = get_pcvar_num(register_door_open);
cvar_door_rotating = get_pcvar_num(register_door_rotating);
cvar_door_rotating_open = get_pcvar_num(register_door_rotating_open);
cvar_momentary_door = get_pcvar_num(register_momentary_door);
cvar_train = get_pcvar_num(register_train);
new cvar_train_render = get_pcvar_num(register_train_render);
cvar_vehicle = get_pcvar_num(register_vehicle);
cvar_tracktrain = get_pcvar_num(register_tracktrain);
cvar_rotating = get_pcvar_num(register_rotating);
new cvar_rotating_render = get_pcvar_num(register_rotating_render);
cvar_pendulum = get_pcvar_num(register_pendulum);
cvar_block = get_pcvar_num(register_block);

// Searching entities
new iEntity = -1;
new g_iPushCount, g_iBreakCount, g_iTrainCount, g_iRotatingCount, classname[32];
while( (iEntity = engfunc(EngFunc_FindEntityInSphere, iEntity, Float:{0.0,0.0,0.0}, 8192.0)) > 0 ) {
if (pev_valid(iEntity)) {
classname[0] = '^0';
pev(iEntity,pev_classname,classname, 31);
if (cvar_hurt&&equali(classname,"trigger_hurt")||cvar_push&&equali(classname,"trigger_push")
||cvar_teleport&&equali(classname,"trigger_teleport")||cvar_gravity&&equali(classname,"trigger_gravity")
||cvar_multiple&&equali(classname,"trigger_multiple")||cvar_once&&equali(classname,"trigger_once")
||cvar_counter&&equali(classname,"trigger_counter")||cvar_breakable&&equali(classname,"func_breakable")) {
pev( iEntity, pev_absmin, g_flEntMins[ g_eCount ] );
pev( iEntity, pev_absmax, g_flEntMaxs[ g_eCount ] );
g_eEnt[ g_eCount ] = iEntity;
g_eCount++;
if (equali(classname,"trigger_push")) g_iPushCount++;
}
if (cvar_breakable_render&&equali(classname,"func_breakable")) g_iBreakCount++;
if (cvar_door&&equali(classname,"func_door")||cvar_door_rotating&&equali(classname,"func_door_rotating")
||cvar_momentary_door&&equali(classname,"momentary_door")||cvar_rotating&&equali(classname,"func_rotating")
||cvar_pendulum&&equali(classname,"func_pendulum")||cvar_train&&equali(classname,"func_train")
||cvar_vehicle&&equali(classname,"func_vehicle")||cvar_tracktrain&&equali(classname,"func_tracktrain"))
g_dCount++;
if (is_linux_server()&&cvar_train_render&&equali(classname,"func_train")) g_iTrainCount++;
if (is_linux_server()&&cvar_rotating_render&&equali(classname,"func_rotating")) g_iRotatingCount++;
if (cvar_item&&(containi(classname,"item_")!=-1||equali(classname,"armoury_entity"))) g_iCount++;
if (cvar_button&&equali(classname,"func_button")) g_bCount++;
}
}

if(g_eCount>0||g_iCount>0||g_bCount>0) {
register_forward(FM_PlayerPreThink, "FwdPlayerPreThink");
if (g_iPushCount > 0) RegisterHam(Ham_Touch, "trigger_push", "CTriggerPush_Touch");
}
if (g_dCount>0) set_task(0.1, "check_players", 0, "", 0, "b");
if (cvar_breakable_render&&g_iBreakCount > 0) RegisterHam( Ham_Think , "func_breakable" , "FwdThinkBreak" );
if (is_linux_server()&&cvar_train_render&&g_iTrainCount > 0) RegisterHam( Ham_Think , "func_train", "Think_FixAngles", 1 );
if (is_linux_server()&&cvar_rotating_render&&g_iRotatingCount > 0) RegisterHam( Ham_Think , "func_rotating", "Think_FixAngles", 1 );
if (cvar_item_delay>0.0) set_task(cvar_item_delay, (g_iCount > 0 ? "abs_update_items" : "abs_update_boxs"), 1, "", 0, "b");
else if (cvar_item_delay<=0.0&&g_iCount > 0) set_task(0.1, "abs_update_items",0);
if (cvar_button_delay>0.0&&g_bCount > 0) set_task(cvar_button_delay, "abs_update_buttons", 0, "", 0, "b");
else if (cvar_button_delay<=0.0&&g_bCount > 0) set_task(0.1, "abs_update_buttons");
}

public abs_update_items(weaponbox) {
g_iEnt = n_iEnt;
g_iCount = 0;

// Searching entities
new iEntity = -1, classname[32];
while( (iEntity = engfunc(EngFunc_FindEntityInSphere, iEntity, Float:{0.0,0.0,0.0}, 8192.0)) > 0 ) {
if (pev_valid(iEntity)) {
classname[0] = '^0';
pev(iEntity,pev_classname,classname, 31)
if (containi(classname,"item_")!=-1||equali(classname,"armoury_entity")||weaponbox&&equali(classname,"weaponbox")) {
pev( iEntity, pev_absmin, g_flItemMins[ g_iCount ] );
pev( iEntity, pev_absmax, g_flItemMaxs[ g_iCount ] );
g_iEnt[ g_iCount ] = iEntity;
g_iCount++;
}
}
}
}

public abs_update_boxs() {
g_iEnt = n_iEnt;
g_iCount = 0;

// Searching entities
new iEntity = -1;
while( (iEntity = engfunc(EngFunc_FindEntityByString, iEntity, "classname", "weaponbox")) > 0 ) {
if (pev_valid(iEntity)) {
pev( iEntity, pev_absmin, g_flItemMins[ g_iCount ] );
pev( iEntity, pev_absmax, g_flItemMaxs[ g_iCount ] );
g_iEnt[ g_iCount ] = iEntity;
g_iCount++;
}
}
}

public abs_update_buttons() {
g_bEnt = n_bEnt;
g_bCount = 0;

// Searching entities
new iEntity = -1;
while( (iEntity = engfunc(EngFunc_FindEntityByString, iEntity, "classname", "func_button")) > 0 ) {
if (pev_valid(iEntity)) {
pev( iEntity, pev_absmin, g_flButMins[ g_bCount ] );
pev( iEntity, pev_absmax, g_flButMaxs[ g_bCount ] );
g_bEnt[ g_bCount ] = iEntity;
g_bCount++;
}
}
}

public FwdPlayerPreThink( id ) {
if( !is_user_alive( id ) || pev( id, pev_solid ) != SOLID_NOT )
return FMRES_IGNORED;

if (g_eCount>0||g_iCount>0||g_bCount>0) {
new Float:flMins[ 3 ], Float:flMaxs[ 3 ];
pev( id, pev_absmin, flMins );
pev( id, pev_absmax, flMaxs );
if (g_eCount>0) {
// Head and Legs fix oO
new Float:flMinsF[ 3 ], Float:flMaxsF[ 3 ];
flMinsF[0] = flMins[0]+1;
flMinsF[1] = flMins[1]+1;
flMinsF[2] = flMins[2]+3;
flMaxsF[0] = flMaxs[0]-1;
flMaxsF[1] = flMaxs[1]-1;
flMaxsF[2] = flMaxs[2]-17;
new classname[32];
for( new i = 0; i < g_eCount; i++ ) {
if (pev_valid(g_eEnt[i])) {
if (pev( g_eEnt[i], pev_solid ) != SOLID_NOT) {
classname[0] = '^0';
pev(g_eEnt[i],pev_classname,classname, 31);
if (cvar_breakable&&equali(classname,"func_breakable")) {
if( !( g_flEntMins[i][0] > flMaxs[0] || g_flEntMaxs[i][0] < flMins[0] )
&& !( g_flEntMins[i][1] > flMaxs[1] || g_flEntMaxs[i][1] < flMins[1] )
&& !( g_flEntMins[i][2] > flMaxs[2] || g_flEntMaxs[i][2] < flMins[2] ) ) {
ExecuteHamB( Ham_Touch, g_eEnt[i], id );
}
} else {
if( !( g_flEntMins[i][0] > flMaxsF[0] || g_flEntMaxs[i][0] < flMinsF[0] )
&& !( g_flEntMins[i][1] > flMaxsF[1] || g_flEntMaxs[i][1] < flMinsF[1] )
&& !( g_flEntMins[i][2] > flMaxsF[2] || g_flEntMaxs[i][2] < flMinsF[2] ) ) {
ExecuteHamB( Ham_Touch, g_eEnt[i], id );
}
}
}
}
}
}
if (g_iCount>0) {
for( new i = 0; i < g_iCount; i++ ) {
if (pev_valid(g_iEnt[i])) {
if (pev( g_iEnt[i], pev_solid ) != SOLID_NOT) {
if( !( g_flItemMins[i][0] > flMaxs[0] || g_flItemMaxs[i][0] < flMins[0] )
&& !( g_flItemMins[i][1] > flMaxs[1] || g_flItemMaxs[i][1] < flMins[1] )
&& !( g_flItemMins[i][2] > flMaxs[2] || g_flItemMaxs[i][2] < flMins[2] ) ) {
ExecuteHamB( Ham_Touch, g_iEnt[i], id );
}
}
}
}
}
if (g_bCount>0) {
for( new i = 0; i < g_bCount; i++ ) {
if (pev_valid(g_bEnt[i])) {
if (pev( g_bEnt[i], pev_solid ) != SOLID_NOT) {
if( !( g_flButMins[i][0] > flMaxs[0] || g_flButMaxs[i][0] < flMins[0] )
&& !( g_flButMins[i][1] > flMaxs[1] || g_flButMaxs[i][1] < flMins[1] )
&& !( g_flButMins[i][2] > flMaxs[2] || g_flButMaxs[i][2] < flMins[2] ) ) {
ExecuteHamB( Ham_Touch, g_bEnt[i], id );
}
}
}
}
}
}
return FMRES_IGNORED;
}

public check_players() {
new players[32], num, id, iEntity;
get_players(players, num,"a")
new Float:origin[3], trace, ent, hull, classname[32], Float:dmg;
for(new i=0; i<num; i++) {
id = players[i];
if (!is_user_alive(id) || pev( id, pev_solid ) != SOLID_NOT) continue;
if (cvar_door||cvar_door_rotating||cvar_momentary_door||cvar_rotating||cvar_pend
ulum||cvar_train||cvar_vehicle||cvar_tracktrain) {
if (!fm_get_user_godmode(id) && !fm_get_user_noclip(id)) {
pev(id, pev_origin,origin)
hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
engfunc(EngFunc_TraceHull, origin, origin, IGNORE_MONSTERS, hull, id, trace)
ent = get_tr2(trace, TR_pHit)
free_tr2(trace)
if (ent>0) {
classname[0] = '^0';
pev(ent,pev_classname,classname, 31)
if (cvar_door&&equali(classname,"func_door")||cvar_door_rotating&&equali(classname,"func_door_rotating")
||cvar_momentary_door&&equali(classname,"momentary_door")||cvar_rotating&&equali(classname,"func_rotating")
||cvar_pendulum&&equali(classname,"func_pendulum")||cvar_train&&equali(classname,"func_train")
||cvar_vehicle&&equali(classname,"func_vehicle")||cvar_tracktrain&&equali(classname,"func_tracktrain")) {
if (cvar_block) {
ExecuteHamB( Ham_Blocked, ent, id );
} else {
pev(ent,pev_dmg,dmg)
if (dmg>=0.0) fm_fakedamage(id, classname, dmg, DMG_GENERIC)
}
}
}
}
if (cvar_door_open||cvar_door_rotating_open) {
pev(id, pev_origin,origin);
engfunc(EngFunc_TraceHull, origin, origin, IGNORE_MONSTERS, HULL_LARGE, id, trace);
iEntity = get_tr2(trace, TR_pHit);
free_tr2(trace);
if (iEntity>0) {
classname[0] = '^0';
pev(iEntity,pev_classname,classname, 31)
if (cvar_door_open&&equali(classname,"func_door")||cvar_door_rotating_open&&equali(classname,"func_door_rotating"))
ExecuteHamB( Ham_Touch, iEntity, id );
}
}
}
}
}

// Thanks ConnorMcLeod
public CTriggerPush_Touch( iEnt , pevToucher )
{
static const fBadMoveTypeBit = (1<<MOVETYPE_NONE)|(1<<MOVETYPE_PUSH)|(1<<MOVETYPE_NOCLIP)|(1<<MOVETYPE_FOLLOW)
static const fBadSolidBit = (1<<SOLID_BSP) //(1<<SOLID_NOT)|
if( ( fBadMoveTypeBit & (1<<pev(pevToucher, pev_movetype)) )
|| ( fBadSolidBit & (1<<pev(pevToucher, pev_solid)) ) )
{
return HAM_SUPERCEDE
}

if( pev(iEnt, pev_spawnflags) & SF_TRIG_PUSH_ONCE )
{
// Instant trigger, just transfer velocity and remove
new Float:vecVelocity[3], Float:flSpeed, Float:vecMoveDir[3]
pev(pevToucher, pev_velocity, vecVelocity)
pev(iEnt, pev_speed, flSpeed)
pev(iEnt, pev_movedir, vecMoveDir)
xs_vec_mul_scalar(vecMoveDir, flSpeed, vecMoveDir)
xs_vec_add(vecVelocity, vecMoveDir, vecVelocity)
if( vecVelocity[2] > 0.0 )
{
set_pev(pevToucher, pev_flags, pev(pevToucher, pev_flags) & ~FL_ONGROUND)
}
set_pev(pevToucher, pev_velocity, vecVelocity)
set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME)
}
else
{ // Push field, transfer to base velocity
new Float:flSpeed, Float:vecPush[3]
pev(iEnt, pev_speed, flSpeed)
pev(iEnt, pev_movedir, vecPush)
xs_vec_mul_scalar(vecPush, flSpeed, vecPush)

new iFlags = pev(pevToucher, pev_flags)
if( iFlags & FL_BASEVELOCITY )
{
new Float:vecBaseVelocity[3]
pev(pevToucher, pev_basevelocity, vecBaseVelocity)
xs_vec_add(vecPush, vecBaseVelocity, vecPush)
}
else
{
set_pev(pevToucher, pev_flags, iFlags | FL_BASEVELOCITY)
}

set_pev(pevToucher, pev_basevelocity, vecPush)
}
return HAM_SUPERCEDE;
}

// func_rotating rendering fix (for linux) by ConnorMcLeod
public Think_FixAngles( iEnt )
{
new Float:vecAngles[3], bSet, i, Float:fAngle;
pev(iEnt, pev_angles, vecAngles);
bSet = false;
for(i=0; i<3; i++) {
fAngle = vecAngles[i];
if( fAngle < -360.0 || fAngle > 360.0 ) {
vecAngles[i] -= floatround(fAngle) / 360 * 360;
bSet = true;
}
}
if( bSet ) set_pev(iEnt, pev_angles, vecAngles);
}

// func_breakable rendering fix by xPaw (convert to fakemeta by AlexALX)
public FwdThinkBreak( iEntity ) {
if( pev( iEntity, pev_solid ) == SOLID_NOT ) {
new iEffects = pev( iEntity, pev_effects );

if( !( iEffects & EF_NODRAW ) )
set_pev( iEntity, pev_effects, iEffects | EF_NODRAW );

if( pev( iEntity, pev_deadflag ) != DEAD_DEAD )
set_pev( iEntity, pev_deadflag, DEAD_DEAD );
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
4iter
сообщение 12.7.2015, 22:38
Сообщение #2
Стаж: 10 лет

Сообщений: 10
Благодарностей: 2
Полезность: 0

что делают эти плагины. хоть 2 строчки напиши
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя LaFA
сообщение 13.7.2015, 0:04
Сообщение #3


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

Первый делает более удобными для прыжков бхоп блоки, второй исправляет разные баги прозрачности в стоковом семиклипе дизранменеджера.
Я пробовал отключать все квары во втором плагине и оставил его включенным, сервер все равно упал, следовательно, причина в какой-то функции вне кваров, но не хватает знаний чтобы понять какая именно..
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя kolobok1
сообщение 13.7.2015, 21:47
Сообщение #4


Стаж: 11 лет

Сообщений: 464
Благодарностей: 23
Полезность: 71

В логах что при падении?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя LaFA
сообщение 13.7.2015, 23:27
Сообщение #5


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

kolobok1, пусто, ну как я понял пересекаются функции и в таком случае редко ошибки в логах записываются.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя LaFA
сообщение 14.7.2015, 3:50
Сообщение #6


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

Цитата
semiclip_fix_button_delay <sec> - default 2.0 seconds, delay to update coordinates of a button. The lower the value - the higher the load for CPU. The higher the value - the lower the load for CPU. 0 - disable, but then fix will not work for moved buttons.
* semiclip_fix_item_delay <sec> - default 2.0 seconds, delay to update coordinates of a entities (weapon/healthkit/armor/longjump). The lower the value - the higher the load for CPU. The higher the value - the lower the load for CPU. 0 - disable, but then fix will not work for moved entities.

Думаю, как раз два этих пункта за кварами и именно из-за них падает сервер после 2 секунды.

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

Код:
#include <amxmodx>
#include <engine>

#define PLUGIN "Block Bhop Blocks"
#define VERSION "1.0"
#define AUTHOR "Stimul"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);

register_touch("func_door", "player", "fw_Touch");
register_touch("func_door", "weaponbox", "fw_Touch");
register_touch("func_door", "weapon_shield", "fw_Touch");
register_touch("func_door", "grenade", "fw_Touch");
}

public fw_Touch()
return PLUGIN_HANDLED;

Deathrun Triggers & Entities Fix

Код:
/*
Created By AlexALX © 2010-2011
DRM: Triggers & Entities Fix is free software;
*/
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <xs>

// Change this values to higher, if you have errors
#define MAX_ENTS 1024
#define MAX_ITEMS 384
#define MAX_BUTTONS 256

new Float:g_flEntMins[ MAX_ENTS ][ 3 ];
new Float:g_flEntMaxs[ MAX_ENTS ][ 3 ];
new g_eEnt[ MAX_ENTS ];
new g_eCount, g_dCount;

new Float:g_flItemMins[ MAX_ITEMS ][ 3 ];
new Float:g_flItemMaxs[ MAX_ITEMS ][ 3 ];
new g_iEnt[ MAX_ITEMS ], n_iEnt[ MAX_ITEMS ];
new g_iCount;

new Float:g_flButMins[ MAX_BUTTONS ][ 3 ];
new Float:g_flButMaxs[ MAX_BUTTONS ][ 3 ];
new g_bEnt[ MAX_BUTTONS ], n_bEnt[ MAX_BUTTONS ];
new g_bCount;

new register_hurt, register_push, register_teleport, register_gravity, register_multiple, register_once, register_counter;
new register_breakable, register_breakable_render, register_button, register_button_delay, register_item, register_item_delay, register_door, register_door_open;
new register_door_rotating, register_door_rotating_open, register_momentary_door, register_train, register_train_render, register_vehicle, register_tracktrain;
new register_rotating, register_rotating_render, register_pendulum, register_block;
new cvar_breakable, cvar_button, cvar_item, cvar_door, cvar_door_open, cvar_door_rotating, cvar_door_rotating_open, cvar_momentary_door;
new cvar_train, cvar_vehicle, cvar_tracktrain, cvar_rotating, cvar_pendulum, cvar_block;

#define VERSION "1.4.1"

public plugin_init() {
register_plugin( "DRM: Triggers & Entities Fix", VERSION, "AlexALX" );
register_cvar( "semiclip_fix_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY );
register_hurt = register_cvar( "semiclip_fix_hurt", "1" );
register_push = register_cvar( "semiclip_fix_push", "1" );
register_teleport = register_cvar( "semiclip_fix_teleport", "1" );
register_gravity = register_cvar( "semiclip_fix_gravity", "1" );
register_multiple = register_cvar( "semiclip_fix_multiple", "1" );
register_once = register_cvar( "semiclip_fix_once", "1" );
register_counter = register_cvar( "semiclip_fix_counter", "1" );
register_breakable = register_cvar( "semiclip_fix_breakable", "1" );
register_breakable_render = register_cvar( "semiclip_fix_breakable_render", "1" );
register_button = register_cvar( "semiclip_fix_button", "1" );
register_button_delay = register_cvar( "semiclip_fix_button_delay", "2.0" );
register_item = register_cvar( "semiclip_fix_item", "1" );
register_item_delay = register_cvar( "semiclip_fix_item_delay", "2.0" );
register_door = register_cvar( "semiclip_fix_door", "1" );
register_door_open = register_cvar( "semiclip_fix_door_open", "1" );
register_door_rotating = register_cvar( "semiclip_fix_door_rotating", "1" );
register_door_rotating_open = register_cvar( "semiclip_fix_door_rotating_open", "1" );
register_momentary_door = register_cvar( "semiclip_fix_momentary_door", "1" );
register_train = register_cvar( "semiclip_fix_train", "1" );
register_train_render = register_cvar( "semiclip_fix_train_render", "1" );
register_vehicle = register_cvar( "semiclip_fix_vehicle", "1" );
register_tracktrain = register_cvar( "semiclip_fix_tracktrain", "1" );
register_rotating = register_cvar( "semiclip_fix_rotating", "1" );
register_rotating_render = register_cvar( "semiclip_fix_rotating_render", "1" );
register_pendulum = register_cvar( "semiclip_fix_pendulum", "1" );
register_block = register_cvar( "semiclip_fix_block", "1" );
}

public plugin_cfg() {
set_task(0.1,"check_plugins");
set_task(7.0,"delay_load");
}

public check_plugins() {
if(find_plugin_byfile("linux_func_rotating_fix_fakemeta.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: linux_func_rotating_fix_fakemeta.amxx plugin running! stopped.");
pause("acd","linux_func_rotating_fix_fakemeta.amxx");
}
if(find_plugin_byfile("linux_func_rotating_fix_engine.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: linux_func_rotating_fix_engine.amxx plugin running! stopped.");
pause("acd","linux_func_rotating_fix_engine.amxx");
}
if(find_plugin_byfile("func_rotating_bugfix.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: func_rotating_bugfix.amxx plugin running! stopped.");
pause("acd","func_rotating_bugfix.amxx");
}
if(find_plugin_byfile("DRM_trigger_hurt_fix.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: DRM_trigger_hurt_fix.amxx plugin running! stopped.");
pause("acd","DRM_trigger_hurt_fix.amxx");
}
if(find_plugin_byfile("linux_func_train_fm.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: linux_func_train_fm.amxx plugin running! stopped.");
pause("acd","linux_func_train_fm.amxx");
}
if(find_plugin_byfile("BreakableFix.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: BreakableFix.amxx plugin running! stopped.");
pause("acd","BreakableFix.amxx");
}
}

public delay_load()
{
new cvar_hurt = get_pcvar_num(register_hurt);
new cvar_push = get_pcvar_num(register_push);
new cvar_teleport = get_pcvar_num(register_teleport);
new cvar_gravity = get_pcvar_num(register_gravity);
new cvar_multiple = get_pcvar_num(register_multiple);
new cvar_once = get_pcvar_num(register_once);
new cvar_counter = get_pcvar_num(register_counter);
cvar_breakable = get_pcvar_num(register_breakable);
new cvar_breakable_render = get_pcvar_num(register_breakable_render);
cvar_button = get_pcvar_num(register_button);
new Float:cvar_button_delay = get_pcvar_float(register_button_delay);
cvar_item = get_pcvar_num(register_item);
new Float:cvar_item_delay = get_pcvar_float(register_item_delay);
cvar_door = get_pcvar_num(register_door);
cvar_door_open = get_pcvar_num(register_door_open);
cvar_door_rotating = get_pcvar_num(register_door_rotating);
cvar_door_rotating_open = get_pcvar_num(register_door_rotating_open);
cvar_momentary_door = get_pcvar_num(register_momentary_door);
cvar_train = get_pcvar_num(register_train);
new cvar_train_render = get_pcvar_num(register_train_render);
cvar_vehicle = get_pcvar_num(register_vehicle);
cvar_tracktrain = get_pcvar_num(register_tracktrain);
cvar_rotating = get_pcvar_num(register_rotating);
new cvar_rotating_render = get_pcvar_num(register_rotating_render);
cvar_pendulum = get_pcvar_num(register_pendulum);
cvar_block = get_pcvar_num(register_block);

// Searching entities
new iEntity = -1;
new g_iPushCount, g_iBreakCount, g_iTrainCount, g_iRotatingCount, classname[32];
while( (iEntity = engfunc(EngFunc_FindEntityInSphere, iEntity, Float:{0.0,0.0,0.0}, 8192.0)) > 0 ) {
if (pev_valid(iEntity)) {
classname[0] = '^0';
pev(iEntity,pev_classname,classname, 31);
if (cvar_hurt&&equali(classname,"trigger_hurt")||cvar_push&&equali(classname,"trigger_push")
||cvar_teleport&&equali(classname,"trigger_teleport")||cvar_gravity&&equali(classname,"trigger_gravity")
||cvar_multiple&&equali(classname,"trigger_multiple")||cvar_once&&equali(classname,"trigger_once")
||cvar_counter&&equali(classname,"trigger_counter")||cvar_breakable&&equali(classname,"func_breakable")) {
pev( iEntity, pev_absmin, g_flEntMins[ g_eCount ] );
pev( iEntity, pev_absmax, g_flEntMaxs[ g_eCount ] );
g_eEnt[ g_eCount ] = iEntity;
g_eCount++;
if (equali(classname,"trigger_push")) g_iPushCount++;
}
if (cvar_breakable_render&&equali(classname,"func_breakable")) g_iBreakCount++;
if (cvar_door&&equali(classname,"func_door")||cvar_door_rotating&&equali(classname,"func_door_rotating")
||cvar_momentary_door&&equali(classname,"momentary_door")||cvar_rotating&&equali(classname,"func_rotating")
||cvar_pendulum&&equali(classname,"func_pendulum")||cvar_train&&equali(classname,"func_train")
||cvar_vehicle&&equali(classname,"func_vehicle")||cvar_tracktrain&&equali(classname,"func_tracktrain"))
g_dCount++;
if (is_linux_server()&&cvar_train_render&&equali(classname,"func_train")) g_iTrainCount++;
if (is_linux_server()&&cvar_rotating_render&&equali(classname,"func_rotating")) g_iRotatingCount++;
if (cvar_item&&(containi(classname,"item_")!=-1||equali(classname,"armoury_entity"))) g_iCount++;
if (cvar_button&&equali(classname,"func_button")) g_bCount++;
}
}

if(g_eCount>0||g_iCount>0||g_bCount>0) {
register_forward(FM_PlayerPreThink, "FwdPlayerPreThink");
if (g_iPushCount > 0) RegisterHam(Ham_Touch, "trigger_push", "CTriggerPush_Touch");
}
if (g_dCount>0) set_task(0.1, "check_players", 0, "", 0, "b");
if (cvar_breakable_render&&g_iBreakCount > 0) RegisterHam( Ham_Think , "func_breakable" , "FwdThinkBreak" );
if (is_linux_server()&&cvar_train_render&&g_iTrainCount > 0) RegisterHam( Ham_Think , "func_train", "Think_FixAngles", 1 );
if (is_linux_server()&&cvar_rotating_render&&g_iRotatingCount > 0) RegisterHam( Ham_Think , "func_rotating", "Think_FixAngles", 1 );
if (cvar_item_delay>0.0) set_task(cvar_item_delay, (g_iCount > 0 ? "abs_update_items" : "abs_update_boxs"), 1, "", 0, "b");
else if (cvar_item_delay<=0.0&&g_iCount > 0) set_task(0.1, "abs_update_items",0);
if (cvar_button_delay>0.0&&g_bCount > 0) set_task(cvar_button_delay, "abs_update_buttons", 0, "", 0, "b");
else if (cvar_button_delay<=0.0&&g_bCount > 0) set_task(0.1, "abs_update_buttons");
}

public abs_update_items(weaponbox) {
g_iEnt = n_iEnt;
g_iCount = 0;

// Searching entities
new iEntity = -1, classname[32];
while( (iEntity = engfunc(EngFunc_FindEntityInSphere, iEntity, Float:{0.0,0.0,0.0}, 8192.0)) > 0 ) {
if (pev_valid(iEntity)) {
classname[0] = '^0';
pev(iEntity,pev_classname,classname, 31)
if (containi(classname,"item_")!=-1||equali(classname,"armoury_entity")||weaponbox&&equali(classname,"weaponbox")) {
pev( iEntity, pev_absmin, g_flItemMins[ g_iCount ] );
pev( iEntity, pev_absmax, g_flItemMaxs[ g_iCount ] );
g_iEnt[ g_iCount ] = iEntity;
g_iCount++;
}
}
}
}

public abs_update_boxs() {
g_iEnt = n_iEnt;
g_iCount = 0;

// Searching entities
new iEntity = -1;
while( (iEntity = engfunc(EngFunc_FindEntityByString, iEntity, "classname", "weaponbox")) > 0 ) {
if (pev_valid(iEntity)) {
pev( iEntity, pev_absmin, g_flItemMins[ g_iCount ] );
pev( iEntity, pev_absmax, g_flItemMaxs[ g_iCount ] );
g_iEnt[ g_iCount ] = iEntity;
g_iCount++;
}
}
}

public abs_update_buttons() {
g_bEnt = n_bEnt;
g_bCount = 0;

// Searching entities
new iEntity = -1;
while( (iEntity = engfunc(EngFunc_FindEntityByString, iEntity, "classname", "func_button")) > 0 ) {
if (pev_valid(iEntity)) {
pev( iEntity, pev_absmin, g_flButMins[ g_bCount ] );
pev( iEntity, pev_absmax, g_flButMaxs[ g_bCount ] );
g_bEnt[ g_bCount ] = iEntity;
g_bCount++;
}
}
}

public FwdPlayerPreThink( id ) {
if( !is_user_alive( id ) || pev( id, pev_solid ) != SOLID_NOT )
return FMRES_IGNORED;

if (g_eCount>0||g_iCount>0||g_bCount>0) {
new Float:flMins[ 3 ], Float:flMaxs[ 3 ];
pev( id, pev_absmin, flMins );
pev( id, pev_absmax, flMaxs );
if (g_eCount>0) {
// Head and Legs fix oO
new Float:flMinsF[ 3 ], Float:flMaxsF[ 3 ];
flMinsF[0] = flMins[0]+1;
flMinsF[1] = flMins[1]+1;
flMinsF[2] = flMins[2]+3;
flMaxsF[0] = flMaxs[0]-1;
flMaxsF[1] = flMaxs[1]-1;
flMaxsF[2] = flMaxs[2]-17;
new classname[32];
for( new i = 0; i < g_eCount; i++ ) {
if (pev_valid(g_eEnt[i])) {
if (pev( g_eEnt[i], pev_solid ) != SOLID_NOT) {
classname[0] = '^0';
pev(g_eEnt[i],pev_classname,classname, 31);
if (cvar_breakable&&equali(classname,"func_breakable")) {
if( !( g_flEntMins[i][0] > flMaxs[0] || g_flEntMaxs[i][0] < flMins[0] )
&& !( g_flEntMins[i][1] > flMaxs[1] || g_flEntMaxs[i][1] < flMins[1] )
&& !( g_flEntMins[i][2] > flMaxs[2] || g_flEntMaxs[i][2] < flMins[2] ) ) {
ExecuteHamB( Ham_Touch, g_eEnt[i], id );
}
} else {
if( !( g_flEntMins[i][0] > flMaxsF[0] || g_flEntMaxs[i][0] < flMinsF[0] )
&& !( g_flEntMins[i][1] > flMaxsF[1] || g_flEntMaxs[i][1] < flMinsF[1] )
&& !( g_flEntMins[i][2] > flMaxsF[2] || g_flEntMaxs[i][2] < flMinsF[2] ) ) {
ExecuteHamB( Ham_Touch, g_eEnt[i], id );
}
}
}
}
}
}
if (g_iCount>0) {
for( new i = 0; i < g_iCount; i++ ) {
if (pev_valid(g_iEnt[i])) {
if (pev( g_iEnt[i], pev_solid ) != SOLID_NOT) {
if( !( g_flItemMins[i][0] > flMaxs[0] || g_flItemMaxs[i][0] < flMins[0] )
&& !( g_flItemMins[i][1] > flMaxs[1] || g_flItemMaxs[i][1] < flMins[1] )
&& !( g_flItemMins[i][2] > flMaxs[2] || g_flItemMaxs[i][2] < flMins[2] ) ) {
ExecuteHamB( Ham_Touch, g_iEnt[i], id );
}
}
}
}
}
if (g_bCount>0) {
for( new i = 0; i < g_bCount; i++ ) {
if (pev_valid(g_bEnt[i])) {
if (pev( g_bEnt[i], pev_solid ) != SOLID_NOT) {
if( !( g_flButMins[i][0] > flMaxs[0] || g_flButMaxs[i][0] < flMins[0] )
&& !( g_flButMins[i][1] > flMaxs[1] || g_flButMaxs[i][1] < flMins[1] )
&& !( g_flButMins[i][2] > flMaxs[2] || g_flButMaxs[i][2] < flMins[2] ) ) {
ExecuteHamB( Ham_Touch, g_bEnt[i], id );
}
}
}
}
}
}
return FMRES_IGNORED;
}

public check_players() {
new players[32], num, id, iEntity;
get_players(players, num,"a")
new Float:origin[3], trace, ent, hull, classname[32], Float:dmg;
for(new i=0; i<num; i++) {
id = players[i];
if (!is_user_alive(id) || pev( id, pev_solid ) != SOLID_NOT) continue;
if (cvar_door||cvar_door_rotating||cvar_momentary_door||cvar_rotating||cvar_pend
ulum||cvar_train||cvar_vehicle||cvar_tracktrain) {
if (!fm_get_user_godmode(id) && !fm_get_user_noclip(id)) {
pev(id, pev_origin,origin)
hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
engfunc(EngFunc_TraceHull, origin, origin, IGNORE_MONSTERS, hull, id, trace)
ent = get_tr2(trace, TR_pHit)
free_tr2(trace)
if (ent>0) {
classname[0] = '^0';
pev(ent,pev_classname,classname, 31)
if (cvar_door&&equali(classname,"func_door")||cvar_door_rotating&&equali(classname,"func_door_rotating")
||cvar_momentary_door&&equali(classname,"momentary_door")||cvar_rotating&&equali(classname,"func_rotating")
||cvar_pendulum&&equali(classname,"func_pendulum")||cvar_train&&equali(classname,"func_train")
||cvar_vehicle&&equali(classname,"func_vehicle")||cvar_tracktrain&&equali(classname,"func_tracktrain")) {
if (cvar_block) {
ExecuteHamB( Ham_Blocked, ent, id );
} else {
pev(ent,pev_dmg,dmg)
if (dmg>=0.0) fm_fakedamage(id, classname, dmg, DMG_GENERIC)
}
}
}
}
if (cvar_door_open||cvar_door_rotating_open) {
pev(id, pev_origin,origin);
engfunc(EngFunc_TraceHull, origin, origin, IGNORE_MONSTERS, HULL_LARGE, id, trace);
iEntity = get_tr2(trace, TR_pHit);
free_tr2(trace);
if (iEntity>0) {
classname[0] = '^0';
pev(iEntity,pev_classname,classname, 31)
if (cvar_door_open&&equali(classname,"func_door")||cvar_door_rotating_open&&equali(classname,"func_door_rotating"))
ExecuteHamB( Ham_Touch, iEntity, id );
}
}
}
}
}

// Thanks ConnorMcLeod
public CTriggerPush_Touch( iEnt , pevToucher )
{
static const fBadMoveTypeBit = (1<<MOVETYPE_NONE)|(1<<MOVETYPE_PUSH)|(1<<MOVETYPE_NOCLIP)|(1<<MOVETYPE_FOLLOW)
static const fBadSolidBit = (1<<SOLID_BSP) //(1<<SOLID_NOT)|
if( ( fBadMoveTypeBit & (1<<pev(pevToucher, pev_movetype)) )
|| ( fBadSolidBit & (1<<pev(pevToucher, pev_solid)) ) )
{
return HAM_SUPERCEDE
}

if( pev(iEnt, pev_spawnflags) & SF_TRIG_PUSH_ONCE )
{
// Instant trigger, just transfer velocity and remove
new Float:vecVelocity[3], Float:flSpeed, Float:vecMoveDir[3]
pev(pevToucher, pev_velocity, vecVelocity)
pev(iEnt, pev_speed, flSpeed)
pev(iEnt, pev_movedir, vecMoveDir)
xs_vec_mul_scalar(vecMoveDir, flSpeed, vecMoveDir)
xs_vec_add(vecVelocity, vecMoveDir, vecVelocity)
if( vecVelocity[2] > 0.0 )
{
set_pev(pevToucher, pev_flags, pev(pevToucher, pev_flags) & ~FL_ONGROUND)
}
set_pev(pevToucher, pev_velocity, vecVelocity)
set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME)
}
else
{ // Push field, transfer to base velocity
new Float:flSpeed, Float:vecPush[3]
pev(iEnt, pev_speed, flSpeed)
pev(iEnt, pev_movedir, vecPush)
xs_vec_mul_scalar(vecPush, flSpeed, vecPush)

new iFlags = pev(pevToucher, pev_flags)
if( iFlags & FL_BASEVELOCITY )
{
new Float:vecBaseVelocity[3]
pev(pevToucher, pev_basevelocity, vecBaseVelocity)
xs_vec_add(vecPush, vecBaseVelocity, vecPush)
}
else
{
set_pev(pevToucher, pev_flags, iFlags | FL_BASEVELOCITY)
}

set_pev(pevToucher, pev_basevelocity, vecPush)
}
return HAM_SUPERCEDE;
}

// func_rotating rendering fix (for linux) by ConnorMcLeod
public Think_FixAngles( iEnt )
{
new Float:vecAngles[3], bSet, i, Float:fAngle;
pev(iEnt, pev_angles, vecAngles);
bSet = false;
for(i=0; i<3; i++) {
fAngle = vecAngles[i];
if( fAngle < -360.0 || fAngle > 360.0 ) {
vecAngles[i] -= floatround(fAngle) / 360 * 360;
bSet = true;
}
}
if( bSet ) set_pev(iEnt, pev_angles, vecAngles);
}

// func_breakable rendering fix by xPaw (convert to fakemeta by AlexALX)
public FwdThinkBreak( iEntity ) {
if( pev( iEntity, pev_solid ) == SOLID_NOT ) {
new iEffects = pev( iEntity, pev_effects );

if( !( iEffects & EF_NODRAW ) )
set_pev( iEntity, pev_effects, iEffects | EF_NODRAW );

if( pev( iEntity, pev_deadflag ) != DEAD_DEAD )
set_pev( iEntity, pev_deadflag, DEAD_DEAD );
}
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: