Kód: #include <amxmodx> #include <amxmisc> #include <engine> #include <fakemeta> #include <hamsandwich>
#define _sens 40.0 #define _block 0.25 #define SPEEDLIMIT 300.0
new jumpnum[33] = 0 new bool:dojump[33] = false new Float:doduck[33] = 0.0 new Float:BlockUntil[33] = 0.0
new Float:NewVelocity[33][3]; new Float:VerticalVelocity[33]; new Float:speed[33]; new bool:g_Alive[33]; new bool:last_FL_ONGROUND[33];
public plugin_init() { //Original code source unknown - Blocking added by Kova register_plugin("MultiJumpBGSBLock","2.3","Kova") register_cvar("amx_maxjumps","1") RegisterHam(Ham_Spawn, "player", "hamPlayerSpawn", 1); register_event("DeathMsg", "eventPlayerDeath", "a"); }
public hamPlayerSpawn(id) { if(!is_user_alive(id)) return; g_Alive[id] = true; }
public eventPlayerDeath() { g_Alive[read_data(2)] = false; }
public client_putinserver(id) { jumpnum[id] = 0 dojump[id] = false doduck[id] = 0.0 BlockUntil[id] = 0.0 last_FL_ONGROUND[id] = true; }
public client_disconnected(id) { jumpnum[id] = 0 dojump[id] = false doduck[id] = 0.0 BlockUntil[id] = 0.0 g_Alive[id] = false; last_FL_ONGROUND[id] = true; }
public client_PreThink(id) { if(!g_Alive[id]) return PLUGIN_CONTINUE new nbut = get_user_button(id) new obut = get_user_oldbutton(id)
if(get_entity_flags(id) & FL_ONGROUND) { if(last_FL_ONGROUND[id] == false) SpeedTester(id); last_FL_ONGROUND[id] = true; if((nbut & IN_DUCK) && !(obut & IN_DUCK)) { doduck[id] = get_gametime() + 0.05; } }
if(!(get_entity_flags(id) & FL_ONGROUND)) { last_FL_ONGROUND[id] = false; if((nbut & IN_JUMP) && !(obut & IN_JUMP)) { if(jumpnum[id] < get_cvar_num("amx_maxjumps")) { dojump[id] = true jumpnum[id]++ return PLUGIN_CONTINUE } } } if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND)) { jumpnum[id] = 0 return PLUGIN_CONTINUE } return PLUGIN_CONTINUE }
public client_PostThink(id) { if(!g_Alive[id]) return PLUGIN_CONTINUE
if(get_gametime() < doduck[id] && fm_distance_to_floor(id) > 0.0) BlockUntil[id] = get_gametime() + _block; if(dojump[id] == true) { if(BlockUntil[id] > get_gametime()) { dojump[id] = false; jumpnum[id]-- return PLUGIN_CONTINUE; }
new Float:velocity[3] entity_get_vector(id,EV_VEC_velocity,velocity) velocity[2] = random_float(265.0,285.0) entity_set_vector(id,EV_VEC_velocity,velocity) dojump[id] = false return PLUGIN_CONTINUE } return PLUGIN_CONTINUE }
public SpeedTester(id) { get_user_velocity(id, NewVelocity[id]); VerticalVelocity[id] = NewVelocity[id][2]; NewVelocity[id][2] = 0.0; speed[id] = vector_length(NewVelocity[id]); if(speed[id] > SPEEDLIMIT) { NewVelocity[id][0] = NewVelocity[id][0] * (SPEEDLIMIT / speed[id]); NewVelocity[id][1] = NewVelocity[id][1] * (SPEEDLIMIT / speed[id]); NewVelocity[id][2] = VerticalVelocity[id]; set_user_velocity(id, NewVelocity[id]); } }
stock Float:fm_distance_to_floor(index, ignoremonsters = 1) { new Float:start[3], Float:dest[3], Float:end[3]; pev(index, pev_origin, start); dest[0] = start[0]; dest[1] = start[1]; dest[2] = -8191.0;
engfunc(EngFunc_TraceLine, start, dest, ignoremonsters, index, 0); get_tr2(0, TR_vecEndPos, end);
pev(index, pev_absmin, start); new Float:ret = start[2] - end[2];
return ret > 0 ? ret : 0.0; }
Ez egy multijump plugin. Ebbe benne van a BGS tiltása, amit azzal ér el, hogy guggolás után _block (0.25mp-ig) nem lehet ugrani a levegőben. (Ha valaki nagyon profi akkor lehet, hogy tud BSGS-t) Továbbá egy rész ami kicsit idegesítő, de hasznos sebesség korlát ami akkor lép életbe amikor leérkezel a földre, így nem tudják kihasználni a tixo-t gyorsulásra (GS/SGS). (Ugrásból ha felgyorsulsz és leérkezel, olyan mit ha megakadnál valamiben és azért idegesítő kicsit)
GS - ground strafe (tixo + strafe) SGS - stand-up ground strafe (tixo + guggolás letartás és és felengedés + strafe) BGS - bhop ground strafe (tixo + multi jump + strafe) BSGS - bhop stand-up ground strafe (tixo + guggolás és multijump majd felengedés + strafe)
|