Same requirements as previous plugin.
Code:
#include <amxmodx>
#include <hlsdk_const>
#include <orpheu>
#include <orpheu_stocks>
new gHideLadder;
#define CanSeeLadder(%1) (~gHideLadder & (1 << (%1 & 31)))
#define HideLadder(%1) gHideLadder |= (1 << (%1 & 31))
#define ShowLadder(%1) gHideLadder &= ~(1 << (%1 & 31))
new gDisableJump;
#define CanJump(%1) (~gDisableJump & (1 << (%1 & 31)))
#define DisableJump(%1) gDisableJump |= (1 << (%1 & 31))
#define EnableJump(%1) gDisableJump &= ~(1 << (%1 & 31))
new OrpheuStruct:ppmove;
public plugin_init() {
register_plugin("Ladder & Jump Disabler", "0.0.1", "Exolent");
register_clcmd("say /ladder", "CmdLadder");
register_clcmd("say /jump", "CmdJump");
OrpheuRegisterHook(OrpheuGetDLLFunction("pfnPM_Move", "PM_Move"), "PM_Move");
OrpheuRegisterHook(OrpheuGetFunction("PM_Ladder"), "PM_Ladder");
OrpheuRegisterHook(OrpheuGetFunction("PM_Jump"), "PM_Jump");
}
public client_disconnect(id) {
ShowLadder(id);
EnableJump(id);
}
public CmdLadder(id) {
if(CanSeeLadder(id)) {
HideLadder(id);
client_print(id, print_chat, "* Ladders are now unusable.");
} else {
ShowLadder(id);
client_print(id, print_chat, "* Ladders are now usable.");
}
}
public CmdJump(id) {
if(CanJump(id)) {
DisableJump(id);
client_print(id, print_chat, "* Jumping is now disabled.");
} else {
EnableJump(id);
client_print(id, print_chat, "* Jumping has been enabled.");
}
}
public OrpheuHookReturn:PM_Move(OrpheuStruct:_ppmove, server) {
ppmove = _ppmove;
}
public OrpheuHookReturn:PM_Ladder() {
new id = OrpheuGetStructMember(ppmove, "player_index") + 1;
if(!CanSeeLadder(id)) {
OrpheuSetReturn(0);
return OrpheuOverride;
}
return OrpheuIgnored;
}
public OrpheuHookReturn:PM_Jump() {
new id = OrpheuGetStructMember(ppmove, "player_index") + 1;
if(!CanJump(id)) {
OrpheuSetStructMember(ppmove, "oldbuttons", OrpheuGetStructMember(ppmove, "oldbuttons") | IN_JUMP);
}
return OrpheuIgnored;
}
__________________