From 4d01d5625ca9339fe6bafa8ab748c7a6367c4edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johnny=20Bergstr=C3=B6m?= Date: Mon, 19 Apr 2004 11:25:26 +0000 Subject: [PATCH] Removed block from Autobuy and rebuy. Blocked items are stripped from autobuy calls. --- plugins/restmenu.sma | 420 +++++++++++++++++++++++++++++-------------- 1 file changed, 282 insertions(+), 138 deletions(-) diff --git a/plugins/restmenu.sma b/plugins/restmenu.sma index 9726460e..7d19bdee 100755 --- a/plugins/restmenu.sma +++ b/plugins/restmenu.sma @@ -83,7 +83,7 @@ new g_AliasBlock[MAXMENUPOS] // Second is a key for TERRORIST (all is key are minus one, 1 is 0, 2 is 1 etc.) // Third is a key for CT // Position with -1 doesn't exist -new g_Keys[MAXMENUPOS][3] = { +new g_Keys[MAXMENUPOS][3] = { #if !defined NO_STEAM {1,1,1}, // H&K USP .45 Tactical {1,0,0}, // Glock18 Select Fire @@ -150,7 +150,7 @@ new g_Keys[MAXMENUPOS][3] = { {6,-1,5}, // Defuse Kit {6,6,6}, // NightVision Goggles {0,5,5}, // Primary weapon ammo - {0,6,6} // Secondary weapon ammo + {0,6,6} // Secondary weapon ammo #endif } @@ -188,52 +188,52 @@ new g_WeaponNames[MAXMENUPOS][] = { "Smoke Grenade", "Defuse Kit", "NightVision Goggles", -#if !defined NO_STEAM +#if !defined NO_STEAM "Tactical Shield", #endif "Primary weapon ammo", - "Secondary weapon ammo" + "Secondary weapon ammo" } -new g_MenuItem[MAXMENUPOS][] = { - "\yHandguns^n\w^n%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w^n", +new g_MenuItem[MAXMENUPOS][] = { + "\yHandguns^n\w^n%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w^n", - "\yShotguns^n\w^n%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w^n", + "\yShotguns^n\w^n%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w^n", - "\ySub-Machine Guns^n\w^n%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w^n", + "\ySub-Machine Guns^n\w^n%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w^n", - "\yAssault Rifles^n\w^n%d. %s\y\R%s^n\w", + "\yAssault Rifles^n\w^n%d. %s\y\R%s^n\w", #if !defined NO_STEAM "%d. %s\y\R%s^n\w", "%d. %s\y\R%s^n\w", -#endif - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w^n", +#endif + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w^n", - "\ySniper Rifles^n\w^n%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w^n", + "\ySniper Rifles^n\w^n%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w^n", - "\yMachine Guns^n\w^n%d. %s\y\R%s^n\w^n", - - "\yEquipment^n\w^n%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", - "%d. %s\y\R%s^n\w", + "\yMachine Guns^n\w^n%d. %s\y\R%s^n\w^n", + + "\yEquipment^n\w^n%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", + "%d. %s\y\R%s^n\w", #if !defined NO_STEAM "%d. %s\y\R%s^n\w", "%d. %s\y\R%s^n\w^n", @@ -241,9 +241,9 @@ new g_MenuItem[MAXMENUPOS][] = { "%d. %s\y\R%s^n\w^n", #endif - "\yAmmunition^n\w^n%d. %s\y\R%s^n\w", + "\yAmmunition^n\w^n%d. %s\y\R%s^n\w", "%d. %s\y\R%s^n\w" -} +} new g_Aliases[MAXMENUPOS][] = { "usp",//Pistols @@ -334,46 +334,11 @@ new g_Aliases2[MAXMENUPOS][] = { "secammo" } #endif - -public plugin_init(){ - register_plugin("Restrict Weapons","0.16","AMXX Dev Team") - register_clcmd("buyammo1","ammoRest1") - register_clcmd("buyammo2","ammoRest2") #if !defined NO_STEAM - register_clcmd("cl_setautobuy","blockcommand") - register_clcmd("cl_autobuy","blockcommand") - register_clcmd("cl_setrebuy","blockcommand") - register_clcmd("cl_rebuy","blockcommand") +#define AUTOBUYLENGTH 511 +new g_Autobuy[33][AUTOBUYLENGTH + 1] +//new g_Rebuy[33][AUTOBUYLENGTH + 1] #endif - register_clcmd("amx_restmenu","cmdMenu",ADMIN_CFG,"- displays weapons restriction menu") - register_menucmd(register_menuid("#Buy", 1 ),511,"menuBuy") - register_menucmd(register_menuid("\yRestrict Weapons"),1023,"actionMenu") - register_menucmd(register_menuid("BuyPistol", 1 ),511,"menuPistol") - register_menucmd(register_menuid("BuyShotgun", 1 ),511,"menuShotgun") - register_menucmd(register_menuid("BuySub", 1 ),511,"menuSub") - register_menucmd(register_menuid("BuyRifle", 1 ),511,"menuRifle") - register_menucmd(register_menuid("BuyMachine", 1 ),511,"menuMachine") - register_menucmd(register_menuid("BuyItem", 1 ),511,"menuItem") - register_menucmd(-28,511,"menuBuy" ) - register_menucmd(-29,511,"menuPistol" ) - register_menucmd(-30,511,"menuShotgun") - register_menucmd(-32,511,"menuSub") - register_menucmd(-31,511,"menuRifle") - register_menucmd(-33,511,"menuMachine") - register_menucmd(-34,511,"menuItem") - register_concmd("amx_restrict","cmdRest",ADMIN_CFG,"- displays help for weapons restriction") - - new configsDir[64]; - get_configsdir(configsDir, 63); -#if defined MAPSETTINGS - new mapname[32] - get_mapname(mapname,31) - format(g_saveFile,63,"%s/weaprest_%s.ini",configsDir,mapname) -#else - format(g_saveFile,63,"%s/weaprest.ini",configsDir) -#endif - loadSettings(g_saveFile) -} setWeapon( a , action ){ new b, m = g_Keys[a][0] * 8 @@ -403,7 +368,7 @@ setWeapon( a , action ){ } if ( action && g_AliasBlockNum < MAXMENUPOS ) g_AliasBlock[ g_AliasBlockNum++ ] = a -#endif +#endif } findMenuId( name[] ){ @@ -432,7 +397,7 @@ switchCommand( id, action ){ new bool:found = false for(new b = 2; b < c; ++b){ read_argv(b,arg,31) - if ( (a = findMenuId( arg )) != -1 ){ + if ( (a = findMenuId( arg )) != -1 ){ c = g_menusSets[a][1] for(new i = g_menusSets[a][0]; i < c; ++i) setWeapon( i , action ) @@ -457,7 +422,7 @@ positionBlocked( a ) { return d } -public cmdRest(id,level,cid){ +public cmdRest(id,level,cid){ if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED new cmd[8] @@ -472,21 +437,21 @@ public cmdRest(id,level,cid){ if (--start < 0) start = 0 if (start >= MAXMENUPOS) start = MAXMENUPOS - 1 new end = start + 10 - if (end > MAXMENUPOS) end = MAXMENUPOS + if (end > MAXMENUPOS) end = MAXMENUPOS console_print(id, "^n----- Weapons Restriction: -----") console_print(id, " %-32.31s %-10.9s %-9.8s","name","value","status") - if ( start != -1 ) { + if ( start != -1 ) { for(new a = start; a < end; ++a){ console_print(id, "%3d: %-32.31s %-10.9s %-9.8s",a + 1, g_WeaponNames[a], g_Aliases[a], positionBlocked(a) ? "ON" : "OFF") } } - console_print(id,"----- Entries %i - %i of %i -----",start+1,end,MAXMENUPOS) + console_print(id,"----- Entries %i - %i of %i -----",start+1,end,MAXMENUPOS) if (end < MAXMENUPOS) console_print(id,"----- Use 'amx_restrict list %i' for more -----",end+1) else console_print(id,"----- Use 'amx_restrict list 1' for begin -----") - } + } else if ( equali( "save" , cmd ) ) { if ( saveSettings( g_saveFile ) ){ console_print( id , "Configuration has been saved (file ^"%s^")" , g_saveFile ) @@ -497,12 +462,12 @@ public cmdRest(id,level,cid){ else if ( equali( "load" , cmd ) ) { setc( g_blockPos, 112, 0 ) // Clear current settings new arg1[64] - if ( read_argv(2, arg1 , 63 ) ) - { - new configsdir[32] - get_configsdir(configsdir,31) - format(arg1,63,"%s/%s",configsdir,arg1) - } + if ( read_argv(2, arg1 , 63 ) ) + { + new configsdir[32] + get_configsdir(configsdir,31) + format(arg1,63,"%s/%s",configsdir,arg1) + } if ( loadSettings( arg1 ) ){ console_print( id , "Configuration has been loaded (file ^"%s^")" , arg1 ) g_Modified = true @@ -512,39 +477,39 @@ public cmdRest(id,level,cid){ else { console_print(id,"Usage: amx_restrict [value]") console_print(id,"Commands:") - console_print(id,"^ton - set restriction on whole equipment") - console_print(id,"^toff - remove restriction from whole equipment") + console_print(id,"^ton - set restriction on whole equipment") + console_print(id,"^toff - remove restriction from whole equipment") console_print(id,"^ton [...] - set specified restriction") console_print(id,"^toff [...] - remove specified restriction") console_print(id,"^tlist - display list of available equipment and weapons") console_print(id,"^tsave - save restriction") console_print(id,"^tload [file] - load restriction [from a file]") console_print(id,"Available values to restrict are:^nammo, equip, pistol, shotgun, sub, rifle, machine") - console_print(id,"Type 'amx_restrict list' for more specified values") + console_print(id,"Type 'amx_restrict list' for more specified values") } return PLUGIN_HANDLED -} +} -displayMenu(id,pos){ +displayMenu(id,pos){ if (pos < 0) return - new menubody[512], start = pos * 7 - if (start >= MAXMENUPOS) start = pos = g_Position[id] = 0 - new len = format(menubody,511,"\yRestrict Weapons\R%d/5^n\w^n",pos+1) + new menubody[512], start = pos * 7 + if (start >= MAXMENUPOS) start = pos = g_Position[id] = 0 + new len = format(menubody,511,"\yRestrict Weapons\R%d/5^n\w^n",pos+1) new end = start + 7, keys = (1<<9)|(1<<7), k = 0 - if (end > MAXMENUPOS) end = MAXMENUPOS - for(new a = start; a < end; ++a){ + if (end > MAXMENUPOS) end = MAXMENUPOS + for(new a = start; a < end; ++a){ keys |= (1< 11 ) /* Longest buy command has 11 chars so if command is longer then don't care */ - return PLUGIN_CONTINUE - new a = 0 - do { - if ( equal( g_Aliases[g_AliasBlock[ a ]] , arg ) || - equal( g_Aliases2[g_AliasBlock[ a ]] , arg ) ) { - client_print(id,print_center,g_Restricted ) - return PLUGIN_HANDLED - } - } while( ++a < g_AliasBlockNum ) - } - return PLUGIN_CONTINUE + if ( g_AliasBlockNum ) { + new arg[13] + + if ( read_argv( 0, arg , 12 ) > 11 ) /* Longest buy command has 11 chars so if command is longer then don't care */ + return PLUGIN_CONTINUE + + new a = 0 + + do { + if ( equal( g_Aliases[g_AliasBlock[ a ]] , arg ) || + equal( g_Aliases2[g_AliasBlock[ a ]] , arg ) ) { + client_print(id,print_center,g_Restricted ) + return PLUGIN_HANDLED + } + } while( ++a < g_AliasBlockNum ) + } + return PLUGIN_CONTINUE +} + +// JGHG: Send weapon string to this function and it returns true if weapon is blocked or false if not blocked... +stock WeaponIsBlocked(weapon[]) { + for (new a = 0; a < g_AliasBlockNum; a++) { + server_print("%d", a) + server_print(weapon) + server_print(g_Aliases[g_AliasBlock[ a ]]) + server_print(g_Aliases2[g_AliasBlock[ a ]]) + + if ( equal( g_Aliases[g_AliasBlock[ a ]] , weapon ) || + equal( g_Aliases2[g_AliasBlock[ a ]] , weapon ) ) { + return true // blocked + } + } + + return false // not blocked } #endif #if !defined NO_STEAM public blockcommand(id) { client_print(id,print_center, g_Restricted ) - return PLUGIN_HANDLED + return PLUGIN_HANDLED } #endif -public cmdMenu(id,level,cid){ - if (cmd_access(id,level,cid,1)) - displayMenu(id, g_Position[id] = 0 ) - return PLUGIN_HANDLED -} +public cmdMenu(id,level,cid){ + if (cmd_access(id,level,cid,1)) + displayMenu(id, g_Position[id] = 0 ) + return PLUGIN_HANDLED +} checkRest(id,menu,key){ if ( g_blockPos[ (menu * 8 + key) + (get_user_team(id) - 1) * 56 ] ){ engclient_cmd(id,"menuselect","10") //client_cmd(id,"slot10") client_print(id,print_center, g_Restricted ) - return PLUGIN_HANDLED - } + return PLUGIN_HANDLED + } return PLUGIN_CONTINUE -} +} public ammoRest1(id) return checkRest(id,0,5) public ammoRest2(id) return checkRest(id,0,6) @@ -619,20 +604,20 @@ public menuRifle(id,key) return checkRest(id,4,key) public menuMachine(id,key) return checkRest(id,5,key) public menuItem(id,key) return checkRest(id,6,key) -saveSettings(filename[]){ - if (file_exists(filename)) - delete_file(filename) - if (!write_file(filename,"; Generated by Restrict Weapons Plugin. Do not modify!^n; value name")) +saveSettings(filename[]){ + if (file_exists(filename)) + delete_file(filename) + if (!write_file(filename,"; Generated by Restrict Weapons Plugin. Do not modify!^n; value name")) return 0 - new text[64] - for(new a = 0; a < MAXMENUPOS; ++a){ + new text[64] + for(new a = 0; a < MAXMENUPOS; ++a){ if ( positionBlocked( a ) ) { format(text,63,"%-16.15s ; %s", g_Aliases[a] , g_WeaponNames[a]) write_file(filename,text) - } + } } return 1 -} +} loadSettings(filename[]){ if (!file_exists(filename)) return 0 @@ -645,4 +630,163 @@ loadSettings(filename[]){ setWeapon( a , 1 ) } return 1 +} + +// JGHG +public fn_setautobuy(id) { + // Don't do anything if no items are blocked. + if (!g_AliasBlockNum) + return PLUGIN_CONTINUE + + // Empty user's autobuy prefs. (unnecessary?) + g_Autobuy[id][0] = '^0' + + new argCount = read_argc() + + new arg[128] + new autobuyLen = 0 + for (new i = 1; i < argCount; i++) { // Start at parameter 1; parameter 0 is just "cl_setautobuy" + read_argv(i, arg, 127) + + // Add this parameter to user's autobuy prefs + autobuyLen += format(g_Autobuy[id][autobuyLen], AUTOBUYLENGTH - autobuyLen, "%s", arg) + // If we detect more parameters, add a space + if (i + 1 < argCount) + autobuyLen += format(g_Autobuy[id][autobuyLen], AUTOBUYLENGTH - autobuyLen, " ") + } + + // Strip any blocked items + new strippedItems[AUTOBUYLENGTH + 1] + if (!StripBlockedItems(g_Autobuy[id], strippedItems)) + return PLUGIN_CONTINUE // don't touch anything if we didn't strip anything... + + //server_print("Stripped items: ^"%s^"", strippedItems) + engclient_cmd(id, "cl_setautobuy", strippedItems) + return PLUGIN_HANDLED + + /* + // Check g_Autobuy[id] for blocked items. + if (g_AliasBlockNum > 0) { + new blockedItem[AUTOBUYLENGTH + 1] + if (CheckBlockedItems(g_Autobuy[id], blockedItem)) { + client_print(id, print_center, "%c%s is blocked!", blockedItem[0] < 'a' || blockedItem[0] > 'z' ? blockedItem[0] : blockedItem[0] - 32, blockedItem[1]) // Tell what item is blocked (if first char is a letter it will be capital) + return PLUGIN_HANDLED + } + } + */ + + //return PLUGIN_CONTINUE +} + +// Returns true if this strips any items, else false. +StripBlockedItems(inString[AUTOBUYLENGTH + 1], outString[AUTOBUYLENGTH + 1]) { + // First copy string + format(outString, AUTOBUYLENGTH, inString) + + // Then strip those that are blocked. + for (new i = 0; i < g_AliasBlockNum; i++) { + while (contain(outString, g_Aliases[g_AliasBlock[i]]) != -1) + replace(outString, AUTOBUYLENGTH, g_Aliases[g_AliasBlock[i]], "") + while (contain(outString, g_Aliases2[g_AliasBlock[i]]) != -1) + replace(outString, AUTOBUYLENGTH, g_Aliases2[g_AliasBlock[i]], "") + } + + // We COULD trim white space from outString here, but I don't think it really is necessary currently... + + if (strlen(outString) < strlen(inString)) + return true // outstring is shorter: we stripped items, return true + + return false // else end here, return false, no items were stripped +} + +// Returns true if any of the items in items[] are blocked, else false. +stock CheckBlockedItems(items[], blockedItem[AUTOBUYLENGTH + 1]) { + if (g_AliasBlockNum <= 0) + return false + + new l_items[AUTOBUYLENGTH + 1] + format(l_items, AUTOBUYLENGTH, items) + + new aValueWasParsed, parsedItem[128] + do { + aValueWasParsed = parse(l_items, parsedItem, 127) + if (strlen(parsedItem) == 0) + return false // no more items + + if (aValueWasParsed) { + replace(l_items, AUTOBUYLENGTH, parsedItem, "") // Remove first parameter + + if (WeaponIsBlocked(parsedItem)) { + format(blockedItem, AUTOBUYLENGTH, parsedItem) + return true // item is blocked, return true + } + } + else + break + } + while (aValueWasParsed) + + return false // no blocked items found +} + +public fn_autobuy(id) { + // Don't do anything if no items are blocked. + if (!g_AliasBlockNum) + return PLUGIN_CONTINUE + + // Strip any blocked items + new strippedItems[AUTOBUYLENGTH + 1] + if (!StripBlockedItems(g_Autobuy[id], strippedItems)) + return PLUGIN_CONTINUE // don't touch anything if we didn't strip anything... + + //server_print("Stripped items: ^"%s^"", strippedItems) + engclient_cmd(id, "cl_setautobuy", strippedItems) + return PLUGIN_HANDLED +} + +/* +public fn_setrebuy(id) { +} +public fn_rebuy(id) { +} +*/ + +public plugin_init() { + register_plugin("Restrict Weapons","0.16","AMXX Dev Team") + register_clcmd("buyammo1","ammoRest1") + register_clcmd("buyammo2","ammoRest2") +#if !defined NO_STEAM + register_clcmd("cl_setautobuy", "fn_setautobuy") + register_clcmd("cl_autobuy", "fn_autobuy") + //register_clcmd("cl_setrebuy", "fn_setrebuy") + //register_clcmd("cl_rebuy", "fn_rebuy") +#endif + register_clcmd("amx_restmenu","cmdMenu",ADMIN_CFG,"- displays weapons restriction menu") + register_menucmd(register_menuid("#Buy", 1 ),511,"menuBuy") + register_menucmd(register_menuid("\yRestrict Weapons"),1023,"actionMenu") + register_menucmd(register_menuid("BuyPistol", 1 ),511,"menuPistol") + register_menucmd(register_menuid("BuyShotgun", 1 ),511,"menuShotgun") + register_menucmd(register_menuid("BuySub", 1 ),511,"menuSub") + register_menucmd(register_menuid("BuyRifle", 1 ),511,"menuRifle") + register_menucmd(register_menuid("BuyMachine", 1 ),511,"menuMachine") + register_menucmd(register_menuid("BuyItem", 1 ),511,"menuItem") + register_menucmd(-28,511,"menuBuy" ) + register_menucmd(-29,511,"menuPistol" ) + register_menucmd(-30,511,"menuShotgun") + register_menucmd(-32,511,"menuSub") + register_menucmd(-31,511,"menuRifle") + register_menucmd(-33,511,"menuMachine") + register_menucmd(-34,511,"menuItem") + register_concmd("amx_restrict","cmdRest",ADMIN_CFG,"- displays help for weapons restriction") + + new configsDir[64]; + get_configsdir(configsDir, 63); +#if defined MAPSETTINGS + new mapname[32] + get_mapname(mapname,31) + format(g_saveFile,63,"%s/weaprest_%s.ini",configsDir,mapname) +#else + format(g_saveFile,63,"%s/weaprest.ini",configsDir) +#endif + loadSettings(g_saveFile) } \ No newline at end of file