Advertisement
Guest User

Infinity jump modifié

a guest
Nov 8th, 2012
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.95 KB | None | 0 0
  1. /*
  2. * Infinite-Jumping (Bunny Hop, Double Jump & Initial Jump)
  3. *
  4. * Description:
  5. * Lets user auto jump when holding down space. This plugin includes the DoubleJump plugin too. This plugin should work for all games.
  6. *
  7. * Installation:
  8. * Place infinite-jumping.smx into your '<moddir>/addons/sourcemod/plugins/' folder.
  9. * Place plugin.infinite-jumping.cfg into your '<moddir>/cfg/sourcemod/' folder.
  10. *
  11. *
  12. * For more information see: http://forums.alliedmods.net/showthread.php?p=1239361 OR http://www.mannisfunhouse.eu/
  13. */
  14.  
  15. /*****************************************************************
  16.  
  17.  
  18. C O M P I L E O P T I O N S
  19.  
  20.  
  21. *****************************************************************/
  22. // enforce semicolons after each code statement
  23. #pragma semicolon 1
  24.  
  25. /*****************************************************************
  26.  
  27.  
  28. P L U G I N I N F O
  29.  
  30.  
  31. *****************************************************************/
  32. #define PLUGIN_NAME "Infinite Jumping"
  33. #define PLUGIN_TAG "sm"
  34. #define PLUGIN_PRINT_PREFIX "[SM]"
  35. #define PLUGIN_AUTHOR "Chanz"
  36. #define PLUGIN_DESCRIPTION "Lets user auto jump when holding down space. This plugin includes the DoubleJump plugin too."
  37. #define PLUGIN_VERSION "2.14.40"
  38. #define PLUGIN_URL "http://forums.alliedmods.net/showthread.php?p=1239361 OR http://www.mannisfunhouse.eu/"
  39.  
  40. public Plugin:myinfo = {
  41. name = PLUGIN_NAME,
  42. author = PLUGIN_AUTHOR,
  43. description = PLUGIN_DESCRIPTION,
  44. version = PLUGIN_VERSION,
  45. url = PLUGIN_URL
  46. }
  47.  
  48. /*****************************************************************
  49.  
  50.  
  51. P L U G I N I N C L U D E S
  52.  
  53.  
  54. *****************************************************************/
  55. #include <sourcemod>
  56. #include <sdktools>
  57. #undef REQUIRE_EXTENSIONS
  58. #include <clientprefs>
  59. #include <smlib>
  60. #include <smlib/pluginmanager>
  61. #include <colors>
  62.  
  63. /*****************************************************************
  64.  
  65.  
  66. P L U G I N D E F I N E S
  67.  
  68.  
  69. *****************************************************************/
  70. #define TIMER_THINK 10.0
  71.  
  72. /*****************************************************************
  73.  
  74.  
  75. G L O B A L V A R S
  76.  
  77.  
  78. *****************************************************************/
  79. //ConVar Handles:
  80. new Handle:g_cvarFlag_Infinite = INVALID_HANDLE;
  81. new Handle:g_cvarFlag_Double = INVALID_HANDLE;
  82. new Handle:g_cvarFlag_PerfectDouble = INVALID_HANDLE;
  83. new Handle:g_cvarFlag_GameSlowDowns = INVALID_HANDLE;
  84. new Handle:g_cvarFlag_ForwardBoost = INVALID_HANDLE;
  85. new Handle:g_cvarBoost_Initial = INVALID_HANDLE;
  86. new Handle:g_cvarBoost_Double = INVALID_HANDLE;
  87. new Handle:g_cvarMax_DoubleJumps = INVALID_HANDLE;
  88. new Handle:g_cvarOr_Stamina = INVALID_HANDLE;
  89. new Handle:g_cvarOr_SlowDownOnHurt = INVALID_HANDLE;
  90. new Handle:g_cvarBoost_Forward = INVALID_HANDLE;
  91. new Handle:g_cvarBoost_Forward_WSAD = INVALID_HANDLE;
  92.  
  93. //ConVars runtime saver:
  94. new String:g_szPlugin_Flag_Infinite[11] = "";
  95. new String:g_szPlugin_Flag_Double[11] = "";
  96. new String:g_szPlugin_Flag_PerfectDouble[11] = "";
  97. new String:g_szPlugin_Flag_GameSlowDowns[11] = "";
  98. new String:g_szPlugin_Flag_ForwardBoost[11] = "";
  99. new Float:g_flPlugin_Boost_Initial = 0.0;
  100. new Float:g_flPlugin_Boost_Double = 0.0;
  101. new g_iPlugin_Max_DoubleJumps = 0;
  102. new Float:g_flPlugin_Or_Stamina = 0.0;
  103. new Float:g_flPlugin_Or_SlowDownOnHurt = 1.0;
  104. new Float:g_flPlugin_Boost_Forward = 0.0;
  105. new g_iPlugin_Boost_Forward_WSAD = 1;
  106.  
  107. //Cookies
  108. new bool:g_bCookiesEnabled = false;
  109.  
  110. new Handle:g_hCookie_BanTime = INVALID_HANDLE;
  111. new Handle:g_hCookie_Switch = INVALID_HANDLE;
  112.  
  113. new g_iCooMem_BanTime[MAXPLAYERS+1];
  114. new bool:g_bCooMem_Switch[MAXPLAYERS+1];
  115. new bool:g_bIsBanned[MAXPLAYERS+1];
  116.  
  117. //Allow list for Clients:
  118. new bool:g_bAllow_InfiniteJump[MAXPLAYERS+1];
  119. new bool:g_bAllow_DoubleJump[MAXPLAYERS+1];
  120. new bool:g_bAllow_PerfectDoubleJump[MAXPLAYERS+1];
  121. new bool:g_bAllow_AntiSlowDowns[MAXPLAYERS+1];
  122. new bool:g_bAllow_ForwardBoost[MAXPLAYERS+1];
  123.  
  124. //Counter
  125. new g_iDoubleJumps[MAXPLAYERS+1];
  126.  
  127. //Offsets
  128. new g_Offset_m_flStamina = -1;
  129. new g_Offset_m_flVelocityModifier = -1;
  130.  
  131. /*****************************************************************
  132.  
  133.  
  134. F O R W A R D P U B L I C S
  135.  
  136.  
  137. *****************************************************************/
  138. public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max){
  139.  
  140. MarkNativeAsOptional("SetCookieMenuItem");
  141. MarkNativeAsOptional("RegClientCookie");
  142. MarkNativeAsOptional("AreClientCookiesCached");
  143. MarkNativeAsOptional("SetClientCookie");
  144. MarkNativeAsOptional("GetClientCookie");
  145. return APLRes_Success;
  146. }
  147.  
  148. public OnPluginStart() {
  149.  
  150. //Init for smlib
  151. SMLib_OnPluginStart(PLUGIN_NAME,PLUGIN_TAG,PLUGIN_VERSION,PLUGIN_AUTHOR,PLUGIN_DESCRIPTION,PLUGIN_URL);
  152.  
  153. //Translations (you should use it always when printing something to clients)
  154. //Always with plugin. as prefix, the short name and .phrases as postfix.
  155. decl String:translationsName[PLATFORM_MAX_PATH];
  156. Format(translationsName,sizeof(translationsName),"plugin.%s.phrases",g_sPlugin_Short_Name);
  157. File_LoadTranslations(translationsName);
  158.  
  159.  
  160. //ConVars
  161. g_cvarFlag_Infinite = CreateConVarEx("flags_infinite", "0", "Automatic rejump.\n\"1\" = force on.\n\"0\" = force off.\n\"<adminflag>\" = admin with this flag can (a,b,c,d,...).\nSee: addons/sourcemod/configs/admin_levels.cfg for more info.",FCVAR_PLUGIN);
  162. g_cvarFlag_Double = CreateConVarEx("flags_double", "0", "Rejump in mid air.\n\"\" = everyone can.\n\"0\" = noone can.\n\"<adminflag>\" = admin with this flag can (a,b,c,d,...).\nSee: addons/sourcemod/configs/admin_levels.cfg for more info.",FCVAR_PLUGIN);
  163. g_cvarFlag_PerfectDouble = CreateConVarEx("flags_perfectdouble", "0", "Jump automatic in mid air when jump is pressed.\n\"\" = everyone can.\n\"0\" = noone can.\n\"<adminflag>\" = admin with this flag can (a,b,c,d,...).\nSee: addons/sourcemod/configs/admin_levels.cfg for more info.",FCVAR_PLUGIN);
  164. g_cvarFlag_GameSlowDowns = CreateConVarEx("flags_gameslowdowns", "", "Bypass game slow downs as stamina or slow down on hurt.\n\"\" = everyone can.\n\"0\" = noone can.\n\"<adminflag>\" = admin with this flag can (a,b,c,d,...).\nSee: addons/sourcemod/configs/admin_levels.cfg for more info.",FCVAR_PLUGIN);
  165. g_cvarFlag_ForwardBoost = CreateConVarEx("flags_forwardboost", "0", "Automatic forward boost by each jump.\n\"\" = everyone can.\n\"0\" = noone can.\n\"<adminflag>\" = admin with this flag can (a,b,c,d,...).\nSee: addons/sourcemod/configs/admin_levels.cfg for more info.",FCVAR_PLUGIN);
  166.  
  167. g_cvarBoost_Initial = CreateConVarEx("boost_initial", "0.0", "If you wish to jump higher or lower, then change this value.\nIn units per second.\nnegative values = players can't jump that high anymore\n0.0 = normal jump height\npositive values = players can jump heigher.",FCVAR_PLUGIN);
  168. g_cvarBoost_Double = CreateConVarEx("boost_double", "290.0", "The amount of vertical boost, to apply when mid air double jumping.\nIn units per second.\nnegative values = player are pushed down in mid air, when double/multi jump.\n0.0 = only falling can be stopped, when jump is pressed in mid air.\npositive values = players can jump heigher, when pressing space in midair",FCVAR_PLUGIN);
  169. g_cvarMax_DoubleJumps = CreateConVarEx("max_doublejumps", "1", "The maximum number of re-jumps allowed while in mid air.\n if you want to disable this, don't set it to 0 instead use the sm_infinitejumpging_flags_double console var.",FCVAR_PLUGIN,true,0.0);
  170. g_cvarOr_Stamina = CreateConVarEx("override_stamina", "0.0", "This will be the new stamina value when you land.\n0.0 = full stamina/no speed is lost.\n-1.0 = let the engine handle how much speed a player looses.\nExample: 1315.0 is the default value in css, but use -1.0 instead if you wish to disable.",FCVAR_PLUGIN);
  171. g_cvarOr_SlowDownOnHurt = CreateConVarEx("override_slowdownonhurt", "1.0", "This will override the speed ratio when hurt.\n1.0 = no speed is lost.\n0.5 = 50% slower.\n0.0 = stops\n2.0 = 100% faster.\n-1.0 = let the engine/game handle how much speed players loose.",FCVAR_PLUGIN);
  172. g_cvarBoost_Forward = CreateConVarEx("boost_forward", "50.0", "Amount of boost per second to push the client forward when jumping.\nIn units per second.\nBe careful this value adds ontop of the velocity at each jump.",FCVAR_PLUGIN);
  173. g_cvarBoost_Forward_WSAD = CreateConVarEx("boost_forward_wsad", "1", "If this is 1 then players need to press W,S,A,D (movement keys) and jump, to receive a boost (adds basicly more control).",FCVAR_PLUGIN,true,0.0,true,1.0);
  174.  
  175.  
  176. //ConVar runtime saver
  177. GetConVarString (g_cvarFlag_Infinite,g_szPlugin_Flag_Infinite,sizeof(g_szPlugin_Flag_Infinite));
  178. GetConVarString (g_cvarFlag_Double,g_szPlugin_Flag_Double,sizeof(g_szPlugin_Flag_Double));
  179. GetConVarString (g_cvarFlag_PerfectDouble,g_szPlugin_Flag_PerfectDouble,sizeof(g_szPlugin_Flag_PerfectDouble));
  180. GetConVarString (g_cvarFlag_GameSlowDowns,g_szPlugin_Flag_GameSlowDowns,sizeof(g_szPlugin_Flag_GameSlowDowns));
  181. GetConVarString (g_cvarFlag_ForwardBoost,g_szPlugin_Flag_ForwardBoost,sizeof(g_szPlugin_Flag_ForwardBoost));
  182.  
  183. g_flPlugin_Boost_Initial = GetConVarFloat(g_cvarBoost_Initial);
  184. g_flPlugin_Boost_Double = GetConVarFloat(g_cvarBoost_Double);
  185. g_iPlugin_Max_DoubleJumps = GetConVarInt(g_cvarMax_DoubleJumps);
  186. g_flPlugin_Or_Stamina = GetConVarFloat(g_cvarOr_Stamina);
  187. g_flPlugin_Or_SlowDownOnHurt = GetConVarFloat(g_cvarOr_SlowDownOnHurt);
  188. g_flPlugin_Boost_Forward = GetConVarFloat(g_cvarBoost_Forward);
  189. g_iPlugin_Boost_Forward_WSAD = GetConVarInt(g_cvarBoost_Forward_WSAD);
  190.  
  191.  
  192. //ConVar Hooks
  193. HookConVarChange(g_cvarFlag_Infinite,ConVarChange_Flag_Infinite);
  194. HookConVarChange(g_cvarFlag_Double,ConVarChange_Flag_Double);
  195. HookConVarChange(g_cvarFlag_PerfectDouble,ConVarChange_Flag_PerfectDouble);
  196. HookConVarChange(g_cvarFlag_GameSlowDowns,ConVarChange_Flag_GameSlowDowns);
  197. HookConVarChange(g_cvarFlag_ForwardBoost,ConVarChange_Flag_ForwardBoost);
  198.  
  199. HookConVarChange(g_cvarBoost_Initial,ConVarChange_Boost_Initial);
  200. HookConVarChange(g_cvarBoost_Double,ConVarChange_Boost_Double);
  201. HookConVarChange(g_cvarMax_DoubleJumps,ConVarChange_Max_DoubleJumps);
  202. HookConVarChange(g_cvarOr_Stamina,ConVarChange_Or_Stamina);
  203. HookConVarChange(g_cvarOr_SlowDownOnHurt,ConVarChange_Or_SlowDownOnHurt);
  204. HookConVarChange(g_cvarBoost_Forward,ConVarChange_Boost_Forward);
  205. HookConVarChange(g_cvarBoost_Forward_WSAD,ConVarChange_Boost_Forward_WSAD);
  206.  
  207.  
  208. //Admin Commands
  209. RegAdminCmd("sm_ban_autojump",Command_Ban,ADMFLAG_BAN,"Bans a player for a certain time from Infinite Jumping");
  210.  
  211. //User Commands
  212. //RegConsoleCmd("sm_jumping_reset",Command_Reset,"Resets all your personal Infinite Jumping settings to default values");
  213. RegConsoleCmd("sm_bunny", Command_AutoJump, "On/Off Infinite (Auto) Jumping");
  214.  
  215.  
  216. g_bCookiesEnabled = (GetExtensionFileStatus("clientprefs.ext") == 1);
  217.  
  218. if (g_bCookiesEnabled) {
  219. // prepare title for clientPref menu
  220. decl String:menutitle[64];
  221. Format(menutitle, sizeof(menutitle), "%s",PLUGIN_NAME);
  222. SetCookieMenuItem(PrefMenu, 0, menutitle);
  223.  
  224.  
  225. //Cookies
  226. g_hCookie_BanTime = RegClientCookie("infjumping_bantime","How long a client is banned from Infinite Jumping",CookieAccess_Protected);
  227. g_hCookie_Switch = RegClientCookie("infjumping_switch","Disables/Enables Infinite Jumping",CookieAccess_Public);
  228.  
  229.  
  230. for (new client=1; client <= MaxClients; client++) {
  231.  
  232. if (!IsClientInGame(client)) {
  233. continue;
  234. }
  235.  
  236. if (!AreClientCookiesCached(client)) {
  237. continue;
  238. }
  239.  
  240. ClientIngameAndCookiesCached(client);
  241. }
  242. }
  243.  
  244. //Event Hooks
  245. HookEventEx("player_hurt", Event_Player_Hurt);
  246. HookEvent("round_start", Event_Round_Start);
  247. //Timer
  248. CreateTimer(TIMER_THINK,Timer_Think,INVALID_HANDLE,TIMER_REPEAT);
  249.  
  250. //Auto Config
  251. AutoExecConfig(true,"plugin.infinite-jumping");
  252. }
  253.  
  254. public OnMapStart() {
  255.  
  256. // hax against valvefail (thx psychonic for fix)
  257. if(GuessSDKVersion() == SOURCE_SDK_EPISODE2VALVE){
  258. SetConVarString(g_cvarVersion, PLUGIN_VERSION);
  259. }
  260. }
  261.  
  262. public OnConfigsExecuted(){
  263.  
  264. ClientAll_Init();
  265. }
  266.  
  267. public OnClientConnected(client){
  268.  
  269. Client_Init(client);
  270. }
  271.  
  272. public OnClientPostAdminCheck(client){
  273.  
  274. Client_Init(client);
  275. }
  276.  
  277. public OnClientCookiesCached(client){
  278.  
  279. if (IsClientInGame(client)) {
  280. ClientIngameAndCookiesCached(client);
  281. }
  282. }
  283.  
  284. public OnClientPutInServer(client){
  285. g_bCooMem_Switch[client] = true;
  286. if (g_bCookiesEnabled && AreClientCookiesCached(client)) {
  287. ClientIngameAndCookiesCached(client);
  288. }
  289. }
  290.  
  291. public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon){
  292.  
  293. if(g_iPlugin_Enable != 1){
  294. //PrintToChatAll("[%s] Plugin Disabled",PLUGIN_NAME);
  295. return Plugin_Continue;
  296. }
  297.  
  298. if(!IsClientInGame(client) || !IsPlayerAlive(client) || IsFakeClient(client)){
  299. //PrintToChatAll("[%s] client: %d is not ingame, alive or a bot",PLUGIN_NAME);
  300. return Plugin_Continue;
  301. }
  302.  
  303. return Client_HandleJumping(client,buttons);
  304. }
  305.  
  306. /****************************************************************
  307.  
  308.  
  309. C A L L B A C K F U N C T I O N S
  310.  
  311.  
  312. ****************************************************************/
  313. public Action:Timer_Think(Handle:timer){
  314.  
  315. for(new client=1;client<=MaxClients;client++){
  316.  
  317. if(!Client_IsValid(client,true)){
  318. continue;
  319. }
  320.  
  321. if(!Client_IsBanned(client) && g_bIsBanned[client]){
  322. g_bIsBanned[client] = false;
  323. Client_PrintToChat(client,false,"{B}%s %t",PLUGIN_PRINT_PREFIX,"You have been unbanned",PLUGIN_NAME);
  324. }
  325. }
  326. return Plugin_Continue;
  327. }
  328.  
  329.  
  330. public Action:Command_AutoJump(client, args){
  331.  
  332. if (g_bCooMem_Switch[client]) {
  333. g_bCooMem_Switch[client] = false;
  334. Client_PrintToChat(client, false, "{R}%s %t",PLUGIN_PRINT_PREFIX,"You Disabled",PLUGIN_NAME);
  335.  
  336. if (g_bCookiesEnabled) {
  337. SetClientCookie(client, g_hCookie_Switch, "off");
  338. }
  339. }
  340. else {
  341. g_bCooMem_Switch[client] = true;
  342. Client_PrintToChat(client, false, "{B}%s %t",PLUGIN_PRINT_PREFIX,"You Enabled",PLUGIN_NAME);
  343.  
  344. if (g_bCookiesEnabled) {
  345. SetClientCookie(client, g_hCookie_Switch, "on");
  346. }
  347. }
  348. return Plugin_Handled;
  349. }
  350.  
  351. public PrefMenu(client, CookieMenuAction:action, any:info, String:buffer[], maxlen){
  352.  
  353. if (action == CookieMenuAction_SelectOption) {
  354. DisplaySettingsMenu(client);
  355. }
  356. }
  357.  
  358. public PrefMenuHandler(Handle:prefmenu, MenuAction:action, client, item){
  359.  
  360. if (action == MenuAction_Select) {
  361. decl String:preference[8];
  362.  
  363. GetMenuItem(prefmenu, item, preference, sizeof(preference));
  364.  
  365. g_bCooMem_Switch[client] = bool:StringToInt(preference);
  366.  
  367. if (g_bCooMem_Switch[client]) {
  368. SetClientCookie(client, g_hCookie_Switch, "on");
  369. Client_PrintToChat(client,false,"{B}%s %t",PLUGIN_PRINT_PREFIX,"You Enabled",PLUGIN_NAME);
  370. }
  371. else {
  372. SetClientCookie(client, g_hCookie_Switch, "off");
  373. Client_PrintToChat(client,false,"{R}%s %t",PLUGIN_PRINT_PREFIX,"You Disabled",PLUGIN_NAME);
  374. }
  375.  
  376. DisplaySettingsMenu(client);
  377. }
  378. else if (action == MenuAction_End) {
  379. CloseHandle(prefmenu);
  380. }
  381. }
  382.  
  383. public ConVarChange_Flag_Infinite(Handle:cvar, const String:oldVal[], const String:newVal[]){
  384.  
  385. strcopy(g_szPlugin_Flag_Infinite,sizeof(g_szPlugin_Flag_Infinite),newVal);
  386. ClientAll_CheckJumpFlags();
  387. }
  388.  
  389. public ConVarChange_Flag_Double(Handle:cvar, const String:oldVal[], const String:newVal[]){
  390.  
  391. strcopy(g_szPlugin_Flag_Double,sizeof(g_szPlugin_Flag_Double),newVal);
  392. ClientAll_CheckJumpFlags();
  393. }
  394.  
  395. public ConVarChange_Flag_PerfectDouble(Handle:cvar, const String:oldVal[], const String:newVal[]){
  396.  
  397. strcopy(g_szPlugin_Flag_PerfectDouble,sizeof(g_szPlugin_Flag_PerfectDouble),newVal);
  398. ClientAll_CheckJumpFlags();
  399. }
  400.  
  401. public ConVarChange_Flag_GameSlowDowns(Handle:cvar, const String:oldVal[], const String:newVal[]){
  402.  
  403. strcopy(g_szPlugin_Flag_GameSlowDowns,sizeof(g_szPlugin_Flag_GameSlowDowns),newVal);
  404. ClientAll_CheckJumpFlags();
  405. }
  406.  
  407. public ConVarChange_Flag_ForwardBoost(Handle:cvar, const String:oldVal[], const String:newVal[]){
  408.  
  409. strcopy(g_szPlugin_Flag_ForwardBoost,sizeof(g_szPlugin_Flag_ForwardBoost),newVal);
  410. ClientAll_CheckJumpFlags();
  411. }
  412.  
  413. public ConVarChange_Boost_Initial(Handle:cvar, const String:oldVal[], const String:newVal[]){
  414.  
  415. g_flPlugin_Boost_Initial = StringToFloat(newVal);
  416. }
  417.  
  418. public ConVarChange_Boost_Double(Handle:cvar, const String:oldVal[], const String:newVal[]){
  419.  
  420. g_flPlugin_Boost_Double = StringToFloat(newVal);
  421. }
  422.  
  423. public ConVarChange_Max_DoubleJumps(Handle:cvar, const String:oldVal[], const String:newVal[]){
  424.  
  425. g_iPlugin_Max_DoubleJumps = StringToInt(newVal);
  426. }
  427.  
  428. public ConVarChange_Or_Stamina(Handle:cvar, const String:oldVal[], const String:newVal[]){
  429.  
  430. g_flPlugin_Or_Stamina = StringToFloat(newVal);
  431. }
  432.  
  433. public ConVarChange_Or_SlowDownOnHurt(Handle:cvar, const String:oldVal[], const String:newVal[]){
  434.  
  435. g_flPlugin_Or_SlowDownOnHurt = StringToFloat(newVal);
  436. }
  437.  
  438. public ConVarChange_Boost_Forward(Handle:cvar, const String:oldVal[], const String:newVal[]){
  439.  
  440. g_flPlugin_Boost_Forward = StringToFloat(newVal);
  441. }
  442.  
  443. public ConVarChange_Boost_Forward_WSAD(Handle:cvar, const String:oldVal[], const String:newVal[]){
  444.  
  445. g_iPlugin_Boost_Forward_WSAD = StringToInt(newVal);
  446. }
  447.  
  448. public Action:Command_Ban(client,args){
  449.  
  450. if(args < 1){
  451. decl String:command[32];
  452. GetCmdArg(0,command,sizeof(command));
  453. Client_Reply(client,"%s %t",PLUGIN_PRINT_PREFIX,"Usage: Ban",command);
  454. return Plugin_Handled;
  455. }
  456.  
  457. decl String:target[MAX_TARGET_LENGTH];
  458. GetCmdArg(1,target,sizeof(target));
  459. decl String:arg2[11];
  460. GetCmdArg(2,arg2,sizeof(arg2));
  461.  
  462. decl String:target_name[MAX_TARGET_LENGTH];
  463. decl target_list[MAXPLAYERS+1];
  464. decl bool:tn_is_ml;
  465.  
  466. new target_count = ProcessTargetString(
  467. target,
  468. client,
  469. target_list,
  470. sizeof(target_list),
  471. COMMAND_FILTER_NO_BOTS,
  472. target_name,
  473. sizeof(target_name),
  474. tn_is_ml
  475. );
  476.  
  477. if (target_count <= 0) {
  478. ReplyToTargetError(client, target_count);
  479. return Plugin_Handled;
  480. }
  481.  
  482. new bantime = StringToInt(arg2);
  483.  
  484. if(bantime != 0){
  485.  
  486. Client_PrintToConsole(client,"\n%s Banned %d players from %s for %d minutes:",PLUGIN_PRINT_PREFIX,target_count,PLUGIN_NAME,bantime);
  487. }
  488. else {
  489.  
  490. Client_PrintToConsole(client,"\n%s Unbanned %d players from %s:",PLUGIN_PRINT_PREFIX,target_count,PLUGIN_NAME);
  491. }
  492.  
  493. new i=0;
  494. new String:targetName[MAX_NAME_LENGTH];
  495. for (i=0;i<target_count;++i) {
  496.  
  497. GetClientName(target_list[i],targetName,sizeof(targetName));
  498. Client_PrintToConsole(client,"\n%s",targetName);
  499. if(bantime != 0){
  500.  
  501. Client_Ban(target_list[i],client,bantime);
  502. }
  503. else {
  504.  
  505. Client_UnBan(target_list[i],client);
  506. }
  507. }
  508.  
  509. Client_PrintToConsole(client,"\n-----------------------\n");
  510.  
  511. if(bantime != 0){
  512.  
  513. Client_PrintToChat(client,false,"{R}%s %t",PLUGIN_PRINT_PREFIX,"See console output");
  514. }
  515.  
  516. return Plugin_Handled;
  517. }
  518.  
  519. Client_Ban(client,banner,bantime){
  520.  
  521. new String:bannerName[MAX_NAME_LENGTH];
  522. GetClientName(banner,bannerName,sizeof(bannerName));
  523.  
  524. new String:szTime[11];
  525. g_iCooMem_BanTime[client] = GetTime()+bantime*60;
  526. IntToString(bantime,szTime,sizeof(szTime));
  527.  
  528. if(g_bCookiesEnabled){
  529. SetClientCookie(client,g_hCookie_BanTime,szTime);
  530. }
  531. g_bIsBanned[client] = true;
  532.  
  533. Client_PrintToChat(client,false,"{R}%s %t",PLUGIN_PRINT_PREFIX,"You have been banned by",PLUGIN_NAME,bannerName,bantime);
  534. }
  535.  
  536.  
  537. Client_UnBan(client,banner){
  538.  
  539. new String:bannerName[MAX_NAME_LENGTH];
  540. GetClientName(banner,bannerName,sizeof(bannerName));
  541.  
  542. g_iCooMem_BanTime[client] = 0;
  543.  
  544. if(g_bCookiesEnabled){
  545. SetClientCookie(client,g_hCookie_BanTime,"0");
  546. }
  547. g_bIsBanned[client] = false;
  548.  
  549. Client_PrintToChat(client,false,"{R}%s %t",PLUGIN_PRINT_PREFIX,"You have been unbanned by",PLUGIN_NAME,bannerName);
  550. }
  551.  
  552. public Action:Event_Player_Hurt(Handle:event, const String:name[], bool:dontBroadcast){
  553. public Action:Event_Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
  554. {
  555. CPrintToChatAll("{green}[R4zen'jumping] {lightgreen}Veuillez taper !bunny pour activer/désactiver l'autobunny");
  556. }
  557. if(g_iPlugin_Enable == 0){
  558. return Plugin_Continue;
  559. }
  560.  
  561. if(g_flPlugin_Or_SlowDownOnHurt == -1.0){
  562. return Plugin_Continue;
  563. }
  564.  
  565. if(g_Offset_m_flVelocityModifier < 1){
  566. return Plugin_Continue;
  567. }
  568.  
  569. new client = GetClientOfUserId(GetEventInt(event, "userid"));
  570.  
  571. if(!g_bAllow_AntiSlowDowns[client] || IsFakeClient(client)){
  572. return Plugin_Continue;
  573. }
  574.  
  575. Client_PrintDebug(client,"setting your: m_flVelocityModifier (off: %d) to: %f",g_Offset_m_flVelocityModifier,g_flPlugin_Or_SlowDownOnHurt);
  576.  
  577. SetEntDataFloat(client, g_Offset_m_flVelocityModifier, g_flPlugin_Or_SlowDownOnHurt, true);
  578.  
  579. return Plugin_Continue;
  580. }
  581.  
  582. /*****************************************************************
  583.  
  584.  
  585. P L U G I N F U N C T I O N S
  586.  
  587.  
  588. *****************************************************************/
  589. bool:Client_IsBanned(client){
  590.  
  591. return (g_iCooMem_BanTime[client] > GetTime());
  592. }
  593.  
  594. DisplaySettingsMenu(client){
  595.  
  596. decl String:MenuItem[128];
  597. new Handle:prefmenu = CreateMenu(PrefMenuHandler);
  598.  
  599. Format(MenuItem, sizeof(MenuItem), "%s", PLUGIN_NAME);
  600. SetMenuTitle(prefmenu, MenuItem);
  601.  
  602. new String:checked[] = String:0x9A88E2;
  603.  
  604. Format(MenuItem, sizeof(MenuItem), "%t [%s]", "Enabled", g_bCooMem_Switch[client] ? checked : " ");
  605. AddMenuItem(prefmenu, "1", MenuItem);
  606.  
  607. Format(MenuItem, sizeof(MenuItem), "%t [%s]", "Disabled", g_bCooMem_Switch[client] ? " " : checked);
  608. AddMenuItem(prefmenu, "0", MenuItem);
  609.  
  610. DisplayMenu(prefmenu, client, MENU_TIME_FOREVER);
  611. }
  612.  
  613.  
  614. ClientIngameAndCookiesCached(client){
  615.  
  616. new String:buffer[255];
  617. GetClientCookie(client,g_hCookie_BanTime,buffer,sizeof(buffer));
  618. g_iCooMem_BanTime[client] = StringToInt(buffer);
  619. g_bIsBanned[client] = Client_IsBanned(client);
  620.  
  621. GetClientCookie(client,g_hCookie_Switch,buffer,sizeof(buffer));
  622. g_bCooMem_Switch[client] = (!StrEqual(buffer,"off",false));
  623. }
  624.  
  625. enum VelocityOverride {
  626.  
  627. VelocityOvr_None = 0,
  628. VelocityOvr_Velocity,
  629. VelocityOvr_OnlyWhenNegative,
  630. VelocityOvr_InvertReuseVelocity
  631. };
  632. //Thank you DarthNinja & javalia for this.
  633. stock Client_Push(client, Float:clientEyeAngle[3], Float:power, VelocityOverride:override[3]=VelocityOvr_None)
  634. {
  635. decl Float:forwardVector[3],
  636. Float:newVel[3];
  637.  
  638. GetAngleVectors(clientEyeAngle, forwardVector, NULL_VECTOR, NULL_VECTOR);
  639. NormalizeVector(forwardVector, forwardVector);
  640. ScaleVector(forwardVector, power);
  641.  
  642. Entity_GetAbsVelocity(client,newVel);
  643.  
  644. for(new i=0;i<3;i++){
  645. switch(override[i]){
  646. case VelocityOvr_Velocity:{
  647. newVel[i] = 0.0;
  648. }
  649. case VelocityOvr_OnlyWhenNegative:{
  650. if(newVel[i] < 0.0){
  651. newVel[i] = 0.0;
  652. }
  653. }
  654. case VelocityOvr_InvertReuseVelocity:{
  655. if(newVel[i] < 0.0){
  656. newVel[i] *= -1.0;
  657. }
  658. }
  659. }
  660.  
  661. newVel[i] += forwardVector[i];
  662. }
  663.  
  664. Entity_SetAbsVelocity(client,newVel);
  665. }
  666.  
  667. Client_ForceJump(client,Float:power){
  668.  
  669. Client_Push(client,Float:{-90.0,0.0,0.0},power,VelocityOverride:{VelocityOvr_None,VelocityOvr_None,VelocityOvr_None});
  670. }
  671.  
  672. Client_DoubleJump(client) {
  673.  
  674. if((1 <= g_iDoubleJumps[client] <= g_iPlugin_Max_DoubleJumps)){
  675.  
  676. g_iDoubleJumps[client]++;
  677.  
  678. Client_Push(client,Float:{-90.0,0.0,0.0},g_flPlugin_Boost_Double,VelocityOverride:{VelocityOvr_None,VelocityOvr_None,VelocityOvr_Velocity});
  679. }
  680. }
  681.  
  682.  
  683. stock Action:Client_HandleJumping(client, &buttons){
  684.  
  685. if(g_bIsBanned[client]){
  686. return Plugin_Continue;
  687. }
  688.  
  689. if(!g_bCooMem_Switch[client]){
  690. return Plugin_Continue;
  691. }
  692.  
  693. if(Client_GetWaterLevel(client) > Water_Level:WATER_LEVEL_FEET_IN_WATER){
  694. //PrintToChatAll("[%s] Water level: %d",PLUGIN_NAME,Client_GetWaterLevel(client));
  695. return Plugin_Continue;
  696. }
  697.  
  698. if(Client_IsOnLadder(client)){
  699. //PrintToChatAll("[%s] is on ladder",PLUGIN_NAME);
  700. return Plugin_Continue;
  701. }
  702.  
  703. static ls_iLastButtons[MAXPLAYERS+1] = {0,...};
  704. static ls_iLastFlags[MAXPLAYERS+1] = {0,...};
  705.  
  706. new flags = GetEntityFlags(client);
  707. //new m_bDucked = GetEntProp(client,Prop_Send,"m_bDucked",1);
  708. //new m_bDucking = GetEntProp(client,Prop_Send,"m_bDucking",1);
  709.  
  710. decl Float:clientEyeAngles[3];
  711. GetClientEyeAngles(client,clientEyeAngles);
  712.  
  713. //PrintToChat(client,"m_bDucked: %d; m_bDucking: %d",m_bDucked,m_bDucking);
  714. //new Float:m_flStamina = GetEntDataFloat(client,g_Offset_m_flStamina);
  715. //Client_PrintDebug(client,"your m_flStamina value: %f",m_flStamina);
  716. //PrintToChat(client,"buttons: %d",buttons);
  717.  
  718. if(flags & FL_ONGROUND){
  719. g_iDoubleJumps[client] = 1;
  720. }
  721.  
  722. if(buttons & IN_JUMP){
  723.  
  724. //PrintToChat(client,"m_bDucked: %d; m_bDucking: %d",m_bDucked,m_bDucking);
  725.  
  726. if(flags & FL_ONGROUND){
  727.  
  728. if(g_bAllow_InfiniteJump[client] && g_flPlugin_Boost_Initial != 0.0){
  729.  
  730. Client_ForceJump(client,g_flPlugin_Boost_Initial);
  731. }
  732.  
  733. //boost client
  734. if(g_bAllow_ForwardBoost[client] && g_flPlugin_Boost_Forward != 0.0){
  735.  
  736. clientEyeAngles[0] = 0.0;
  737.  
  738. if(g_iPlugin_Boost_Forward_WSAD == 0){
  739.  
  740. Client_Push(client,clientEyeAngles,g_flPlugin_Boost_Forward,VelocityOverride:{VelocityOvr_None,VelocityOvr_None,VelocityOvr_None});
  741. }
  742. else {
  743.  
  744. if(buttons & IN_FORWARD){
  745. Client_Push(client,clientEyeAngles,g_flPlugin_Boost_Forward,VelocityOverride:{VelocityOvr_None,VelocityOvr_None,VelocityOvr_None});
  746. }
  747.  
  748. if(buttons & IN_BACK){
  749. clientEyeAngles[1] += 180.0;
  750. Client_Push(client,clientEyeAngles,g_flPlugin_Boost_Forward,VelocityOverride:{VelocityOvr_None,VelocityOvr_None,VelocityOvr_None});
  751. }
  752.  
  753. if(buttons & IN_MOVELEFT){
  754. clientEyeAngles[1] += 90.0;
  755. Client_Push(client,clientEyeAngles,g_flPlugin_Boost_Forward,VelocityOverride:{VelocityOvr_None,VelocityOvr_None,VelocityOvr_None});
  756. }
  757.  
  758. if(buttons & IN_MOVERIGHT){
  759. clientEyeAngles[1] += -90.0;
  760. Client_Push(client,clientEyeAngles,g_flPlugin_Boost_Forward,VelocityOverride:{VelocityOvr_None,VelocityOvr_None,VelocityOvr_None});
  761. }
  762. }
  763. }
  764.  
  765. ls_iLastButtons[client] = buttons;
  766. }
  767. else {
  768.  
  769. if(g_bAllow_AntiSlowDowns[client] && g_Offset_m_flStamina != -1 && g_flPlugin_Or_Stamina != -1.0){
  770. //you dont loose speed in css when you hit the ground with this:
  771. SetEntDataFloat(client, g_Offset_m_flStamina, g_flPlugin_Or_Stamina, true);
  772. }
  773.  
  774. if(g_bAllow_DoubleJump[client]){
  775.  
  776. if(g_bAllow_PerfectDoubleJump[client]){
  777.  
  778. decl Float:clientVel[3];
  779. Entity_GetAbsVelocity(client,clientVel);
  780.  
  781. if(clientVel[2] < 0.0){
  782.  
  783. Client_DoubleJump(client);
  784. }
  785. }
  786. else if(!(ls_iLastButtons[client] & IN_JUMP)){
  787.  
  788. Client_DoubleJump(client);
  789. }
  790. }
  791.  
  792. ls_iLastButtons[client] = buttons;
  793.  
  794. //set this here to protect ls_iLastButtons from this changes:
  795. if(g_bAllow_InfiniteJump[client]){
  796.  
  797. buttons &= ~IN_JUMP;
  798. }
  799. }
  800. }
  801. else {
  802.  
  803. //Disabled because scroll wheel users are at a big disadvantage
  804. /*if(g_Offset_m_flStamina != -1 && g_flPlugin_Or_Stamina != -1.0 && ls_iLastButtons[client] & IN_JUMP){
  805.  
  806. Client_PrintDebug(client,"setting your stamina to 1315.0");
  807. //SetEntDataFloat(client, g_Offset_m_flStamina, 1315.0, true);
  808. }*/
  809.  
  810. //need to be set when IN_JUMP is not pressed & set this here to protect ls_iLastButtons from this changes:
  811. ls_iLastButtons[client] = buttons;
  812. }
  813.  
  814. ls_iLastFlags[client] = flags;
  815.  
  816. return Plugin_Continue;
  817. }
  818.  
  819.  
  820.  
  821. //This function will be called within SMLib_OnPluginStart.
  822. stock ClientAll_Init(){
  823.  
  824. for(new client=1;client<=MaxClients;client++){
  825.  
  826. if(!IsClientInGame(client)){
  827. continue;
  828. }
  829.  
  830. Client_Init(client);
  831. }
  832. }
  833.  
  834. stock Client_Init(client){
  835.  
  836. //Variables
  837. Client_InitVars(client);
  838.  
  839. //Functions
  840. Client_CheckJumpFlags(client);
  841. Client_GetOffsetsFrom(client);
  842. }
  843.  
  844. stock Client_InitVars(client){
  845.  
  846. //Plugin Client Vars
  847. g_bAllow_InfiniteJump[client] = false;
  848. g_bAllow_DoubleJump[client] = false;
  849. g_bAllow_PerfectDoubleJump[client] = false;
  850. g_bAllow_AntiSlowDowns[client] = false;
  851. g_bAllow_ForwardBoost[client] = false;
  852. }
  853.  
  854. stock Client_GetOffsetsFrom(client){
  855.  
  856. if(g_Offset_m_flStamina != -1 && g_Offset_m_flVelocityModifier != -1){
  857. return;
  858. }
  859.  
  860. if(!IsValidEntity(client)){
  861. return;
  862. }
  863.  
  864. decl String:netclass[64];
  865.  
  866. GetEntityNetClass(client,netclass,sizeof(netclass));
  867.  
  868. g_Offset_m_flStamina = FindSendPropInfo(netclass,"m_flStamina");
  869. g_Offset_m_flVelocityModifier = FindSendPropInfo(netclass,"m_flVelocityModifier");
  870.  
  871. Server_PrintDebug("Offsets from client %d: m_flStamina: %d; m_flVelocityModifier: %d",client,g_Offset_m_flStamina,g_Offset_m_flVelocityModifier);
  872. }
  873.  
  874. stock ClientAll_CheckJumpFlags(){
  875.  
  876. for(new client=1;client<=MaxClients;client++){
  877.  
  878. if(!IsClientInGame(client)){
  879. continue;
  880. }
  881.  
  882. Client_CheckJumpFlags(client);
  883. }
  884. }
  885.  
  886.  
  887. stock Client_CheckJumpFlags(client){
  888.  
  889. new AdminId:adminid = GetUserAdmin(client);
  890. new AdminFlag:flag;
  891.  
  892. //g_bAllow_InfiniteJump:
  893. if(StrEqual(g_szPlugin_Flag_Infinite,"0",false)){
  894.  
  895. Client_PrintDebug(client,"You are NOT allowed to infinite jump now! (%s)",g_szPlugin_Flag_Infinite);
  896. g_bAllow_InfiniteJump[client] = false;
  897. }
  898. else if(FindFlagByChar(g_szPlugin_Flag_Infinite[0],flag)){
  899.  
  900. if(adminid == INVALID_ADMIN_ID){
  901.  
  902. Client_PrintDebug(client,"You are NOT allowed to infinite jump now! (%s)",g_szPlugin_Flag_Infinite);
  903. g_bAllow_InfiniteJump[client] = false;
  904. }
  905. else if(GetAdminFlag(adminid,flag)){
  906.  
  907. Client_PrintDebug(client,"You are allowed to infinite jump now! (%s)",g_szPlugin_Flag_Infinite);
  908. g_bAllow_InfiniteJump[client] = true;
  909. }
  910. else {
  911.  
  912. Client_PrintDebug(client,"You are NOT allowed to infinite jump now! (%s)",g_szPlugin_Flag_Infinite);
  913. g_bAllow_InfiniteJump[client] = false;
  914. }
  915. }
  916. else {
  917.  
  918. Client_PrintDebug(client,"You are allowed to infinite jump now! (%s)",g_szPlugin_Flag_Infinite);
  919. g_bAllow_InfiniteJump[client] = true;
  920. }
  921.  
  922. //g_bAllow_DoubleJump:
  923. if(StrEqual(g_szPlugin_Flag_Double,"0",false)){
  924.  
  925. Client_PrintDebug(client,"You are NOT allowed to double jump now! (%s)",g_szPlugin_Flag_Double);
  926. g_bAllow_DoubleJump[client] = false;
  927. }
  928. else if(FindFlagByChar(g_szPlugin_Flag_Double[0],flag)){
  929.  
  930. if(adminid == INVALID_ADMIN_ID){
  931.  
  932. Client_PrintDebug(client,"You are NOT allowed to double jump now! (%s)",g_szPlugin_Flag_Double);
  933. g_bAllow_DoubleJump[client] = false;
  934. }
  935. else if(GetAdminFlag(adminid,flag)){
  936.  
  937. Client_PrintDebug(client,"You are allowed to double jump now! (%s)",g_szPlugin_Flag_Double);
  938. g_bAllow_DoubleJump[client] = true;
  939. }
  940. else {
  941.  
  942. Client_PrintDebug(client,"You are NOT allowed to double jump now! (%s)",g_szPlugin_Flag_Double);
  943. g_bAllow_DoubleJump[client] = false;
  944. }
  945. }
  946. else {
  947.  
  948. Client_PrintDebug(client,"You are allowed to double jump now! (%s)",g_szPlugin_Flag_Double);
  949. g_bAllow_DoubleJump[client] = true;
  950. }
  951.  
  952. //g_bAllow_PerfectDoubleJump:
  953. if(StrEqual(g_szPlugin_Flag_PerfectDouble,"0",false)){
  954.  
  955. Client_PrintDebug(client,"You are NOT allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_PerfectDouble);
  956. g_bAllow_PerfectDoubleJump[client] = false;
  957. }
  958. else if(FindFlagByChar(g_szPlugin_Flag_PerfectDouble[0],flag)){
  959.  
  960. if(adminid == INVALID_ADMIN_ID){
  961.  
  962. Client_PrintDebug(client,"You are NOT allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_PerfectDouble);
  963. g_bAllow_PerfectDoubleJump[client] = false;
  964. }
  965. else if(GetAdminFlag(adminid,flag)){
  966.  
  967. Client_PrintDebug(client,"You are allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_PerfectDouble);
  968. g_bAllow_PerfectDoubleJump[client] = true;
  969. }
  970. else {
  971.  
  972. Client_PrintDebug(client,"You are NOT allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_PerfectDouble);
  973. g_bAllow_PerfectDoubleJump[client] = false;
  974. }
  975. }
  976. else {
  977.  
  978. Client_PrintDebug(client,"You are allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_PerfectDouble);
  979. g_bAllow_PerfectDoubleJump[client] = true;
  980. }
  981.  
  982.  
  983.  
  984. //g_bAllow_AntiSlowDowns:
  985. if(StrEqual(g_szPlugin_Flag_GameSlowDowns,"0",false)){
  986.  
  987. Client_PrintDebug(client,"You are NOT allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_GameSlowDowns);
  988. g_bAllow_AntiSlowDowns[client] = false;
  989. }
  990. else if(FindFlagByChar(g_szPlugin_Flag_GameSlowDowns[0],flag)){
  991.  
  992. if(adminid == INVALID_ADMIN_ID){
  993.  
  994. Client_PrintDebug(client,"You are NOT allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_GameSlowDowns);
  995. g_bAllow_AntiSlowDowns[client] = false;
  996. }
  997. else if(GetAdminFlag(adminid,flag)){
  998.  
  999. Client_PrintDebug(client,"You are allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_GameSlowDowns);
  1000. g_bAllow_AntiSlowDowns[client] = true;
  1001. }
  1002. else {
  1003.  
  1004. Client_PrintDebug(client,"You are NOT allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_GameSlowDowns);
  1005. g_bAllow_AntiSlowDowns[client] = false;
  1006. }
  1007. }
  1008. else {
  1009.  
  1010. Client_PrintDebug(client,"You are allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_GameSlowDowns);
  1011. g_bAllow_AntiSlowDowns[client] = true;
  1012. }
  1013.  
  1014.  
  1015.  
  1016.  
  1017. //g_bAllow_ForwardBoost:
  1018. if(StrEqual(g_szPlugin_Flag_ForwardBoost,"0",false)){
  1019.  
  1020. Client_PrintDebug(client,"You are NOT allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_ForwardBoost);
  1021. g_bAllow_ForwardBoost[client] = false;
  1022. }
  1023. else if(FindFlagByChar(g_szPlugin_Flag_ForwardBoost[0],flag)){
  1024.  
  1025. if(adminid == INVALID_ADMIN_ID){
  1026.  
  1027. Client_PrintDebug(client,"You are NOT allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_ForwardBoost);
  1028. g_bAllow_ForwardBoost[client] = false;
  1029. }
  1030. else if(GetAdminFlag(adminid,flag)){
  1031.  
  1032. Client_PrintDebug(client,"You are allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_ForwardBoost);
  1033. g_bAllow_ForwardBoost[client] = true;
  1034. }
  1035. else {
  1036.  
  1037. Client_PrintDebug(client,"You are NOT allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_ForwardBoost);
  1038. g_bAllow_ForwardBoost[client] = false;
  1039. }
  1040. }
  1041. else {
  1042.  
  1043. Client_PrintDebug(client,"You are allowed to perfectdouble jump now! (%s)",g_szPlugin_Flag_ForwardBoost);
  1044. g_bAllow_ForwardBoost[client] = true;
  1045. }
  1046. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement