Sie sind auf Seite 1von 64

//Final Fantasy X Mod //*** indicates unfinished function /* credits Z4Kn4F31N for the original Final Fantasy X Mod

Emp for a couple of the stocks Vittu's sh_monitor plugin */ /* History alpha 0.1 intial creation beta 0.1 core functions tested, move to a mainstream testing server beta 0.2 added magic system, weapon system, and armor system beta 0.3 added nvault saving, backpack system beta 0.4 fixed bugs, added items system beta 0.5 removed cstrike, fun. Replaced with fakemeta equivalents beta 0.6 final testing, removed bugs beta 0.7 bug fix beta 0.8 gil added to improve upon item system, various suggestions imple mented 0.9 minor optimzation, implementation of hamsandwhich module , switched to a knife mod 1.0 after profiling fakemeta vs cstrike re implemented cstri ke module due to superior handling */ enum { SAVE_SQL, SAVE_NVAULT } #define SAVE_METHOD SAVE_SQL #include #include #include #include #include #include #include <amxmodx> <amxmisc> <fakemeta> <hamsandwich> <cstrike> <fun> <xs>

#if SAVE_METHOD == SAVE_NVAULT #include <nvault> new g_vault, g_storevault, g_itemvault; #endif #if SAVE_METHOD == SAVE_SQL #include <sqlx> new Handle:g_SqlX; static const sql_table[] = "ffx_table"; #endif #pragma semicolon 1 static const PLUGIN[] = "Final Fantasy X MOD"; static const VERSION[] = "1.0"; static const AUTHOR[] = "Random1";

/* cvars

copy/paste into server.cfg //turn the mod on or off //0 = don't save xp, 1 = save xp //after x kill's player level's up //set whether or not to allow normal gun damage atk and def factor into dmg dealt to players?

ffx_enable 1 (def: 1) ffx_savexp 1 (def: 1) ffx_level_break 5 (def: 5) ffx_block_damage 1 or only knife (def: 1) ffx_refactor_damage 1 //will (def: 1) */

#define MAX_PLAYERS 24 #define STAT_MAX 255 mag,mdef) #define NUM_OF_ARMOR 30 const aLevel = ADMIN_RCON; mands static const prefix[] = "[FFX]";

//should reflect max slots on server //maximium value for base stats(str,def, //admin level required to access set com //prefix appended to chat messages

static const mburn[] = "sprites/steam1.spr", mfire[] = "sprites/xfire.spr", mbubble[] = "sprites/bubble.spr", mlight[] = "sprites/lgtning.spr", sthunder[] = "ambience/thunder_clap.wav", //these 2 are custom(must be dled by server) slevel[] = "FFX/LevelUp.wav", scast[] = "FFX/cast.wav"; // Task offsets enum (+= 50) { POISON_TASK = 50, REGEN_TASK, LIGHT_TASK, BASE_TASK } enum { MAG_FIRE = 1, MAG_LIGHTNING, MAG_WATER, MAG_ICE, MAG_BIO, MAG_DEMI, MAG_D EATH, MAG_DRAIN, MAG_OSMOSE, MAG_FLARE, MAG_ULTIMA, MAG_CURE, MAG_SCAN, MAG_ESUNA, MAG_DISPEL, MA G_LIFE, MAG_HASTE, MAG_SLOW, MAG_SHELL, MAG_PROTECT, MAG_REFLECT, MAG_HOLY, NUM_OF_MAGIC } //bitwise enumeration enum (*= 2){ WEP_FIRESTRIKE = 1, WEP_LIGHTNINGSTRIKE, WEP_WATERSTRIKE, WEP_ICEST RIKE, WEP_SENSOR, WEP_PIERCE, WEP_DARKSTRIKE, WEP_SILENCESTRIKE, WEP_SLEEPSTRIKE, WEP_POISONSTRIKE, WEP_DEATHS TRIKE, WEP_ZOMBIESTRIKE, WEP_SLOWSTRIKE, WEP_STRENGTH10, WEP_STRENGTH20, WEP_MAGIC10, WEP_MAGIC20, WEP_CO UNTER, WEP_MAGCOUNTER, WEP_MAGBOOST, WEP_HALFMP, WEP_ONEMP, WEP_GILLIONAIRE, WEP_BREAKDMG } enum (*= 2){ ARMOR_EATFIRE = 1, ARMOR_EATLIGHTNING, ARMOR_EATWATER, ARMOR_EATICE , ARMOR_DARKPROOF, ARMOR_SILENCEPROOF,

ARMOR_SLEEPPROOF, ARMOR_POISONPROOF, ARMOR_DEATHPROOF, ARMOR_ZOMBIEPROOF, ARMOR_ SLOWPROOF, ARMOR_SHELL, ARMOR_PROTECT, ARMOR_REFLECT, ARMOR_HASTE, ARMOR_REGEN, ARMOR_DEF10, ARMOR_DEF20, ARMOR_MDEF10, ARMOR_MDEF20, ARMOR_HP20, ARMOR_HP30, ARMOR_MP20, ARMOR_MP30, ARMOR_PICKPOCKET, ARMOR_MASTERTHIEF, ARMOR_BREAKHP, ARMO R_BREAKMP, ARMOR_RIBBON } new playerstring[7][] = { "", "Tidus", "Auron", "Wakka", "Lulu", "Yuna", "Rikku" }; new strbonus[7] = { 0, 3, 4, 3, 1, 1, 2 }; new defbonus[7] = { 0, 3, 3, 3, 1, 1, 2 }; new magbonus[7] = { 0, 2, 1, 2, 4, 4, 2 }; new mdefbonus[7] = { 0, 2, 1, 2, 3, 4, 2 }; new hpbonus[7] = { 0, 25, 35, 30, 10, 10, 50 }; new mpbonus[7] = { 0, 25, 10, 20, 30, 30, 40 }; new statstring[9][] = { "", "Strength", "Defense", "Magic", "Magic Defense", "All Stats", "Health", "Mp" , "Gil" }; new wepstring[25][] = { "Empty", "Firestrike", "Lightningstrike", "Waterstrike", "Icestrike", "Sensor", "Piercing", "Darkstrike", "Silencestrike", "Sleepstrike", "Poisonstrike", "Deathstrike", "Zombiestrike", "Slowstrike", "Str ength +10%", "Strength +20%", "Magic +10%", "Magic +20%", "Counterattack", "Magic Counter", "Magic Booster", "Half MP Cost", "One MP Cost", "Gillionaire", "Break Damage Limit" }; new armstring[NUM_OF_ARMOR][] = { "Empty", "Fire Eater", "Lightning Eater", "Water Eater", "Ice Eater", "Darkproof ", "Silenceproof", "Sleepproof", "Poisonproof", "Deathproof", "Zombieproof", "Slowproof", "Auto Shell", "Auto Protect", "Auto Re flect", "Auto Haste", "Auto Regen", "Defense +10%", "Defense +20%", "Magic Defense +10%", "Magic Defense +20%", "HP +20%", "HP +30%" , "MP +20%", "MP +30%", "Pickpocket", "Masterthief", "Break HP Limit", "Break MP Limit", "Ribbon" }; new weptomag[33] = { 0,1,0,2,0,3,0,4,5,0,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,0,21,0,22,24,0,0,0 }; new itemsellcount[51] = { 12,125,300,375,250,750,1250,5000,12,12,12,75,37,25,50,25,50,25,50,25,50,75,12,25 ,50,37,37,50,

75,125,250,25,25,37,75,100,7500,50,45,45,45,150,75,75,100,70,200,500,400,400,200 }; new buyitem[9] = { 0, 50, 500, 50, 50, 50, 300, 1500, 300 }; new buytoslot[9] = { 0, 1, 2, 9, 10, 11, 12, 13, 22 }; new wepformag[NUM_OF_MAGIC][] = { "","weapon_p228","weapon_scout","weapon_xm1014","weapon_mac10","weapon_aug","wea pon_elite", "weapon_fiveseven","weapon_ump45","weapon_sg550","weapon_galil","weapon_famas"," weapon_usp", "weapon_glock18","weapon_awp","weapon_mp5navy","weapon_m249","weapon_m3","weapon _m4a1", "weapon_tmp","weapon_g3sg1","weapon_deagle","weapon_ak47" }; new magicname[NUM_OF_MAGIC+2][] = { "","Fire","Lightning","Water","Blizzard","Bio","Demi","Death","Drain","Osmose"," Flare","Ultima", "Cure","Scan","Esuna","Dispel","Life","Haste","Slow","Shell","Protect","Reflect" ,"Holy","","OverDrive" }; new magiccost[NUM_OF_MAGIC] = { 0,4,4,4,4,10,32,20,12,12,54,90,4,1,5,12,18,8,12,10,12,14,85 }; new itemnamestring[51][] = { "Potion", "Hi-Potion", "X-Potion", "Mega-Potion", "Ether", "Turbo Ether", "Elixi r", "Megalixir", "Antidote", "Eye Drops", "Echo Screen", "Holy Water", "Remedy", "Antarctic Wind" , "Arctic Wind", "Bomb Fragment", "Bomb Core", "Electro Marble", "Lightning Marble", "Fish Scale" , "Dragon Scale", "Grenade", "Frag Gernade", "Sleeping Powder", "Dream Powder", "Silence Gernade", "Smoke Bomb", "Shadow Gem", "Shining Gem", "Blessed Gem", "Supreme Gem", "Poison Fang", "Silve r Hourglass", "Gold Hourglass", "Farplane Shadow", "Farplane Wind", "Dark Matter", "Chocobo Wi ng", "Lunar Curtain", "Light Curtain", "Star Curtain", "Healing Spring", "Mana Spring", "Stamina Sprin g", "Soul Spring", "Purifying Salt", "Stamina Tablet", "Mana Tablet", "Stamina Tonic", "Mana Tonic" , "Twin Stars" }; new itemhelpstring[51][] = { "Heals HP for 200", "Heals HP for 600", "Heals HP for 9999", "Heals Whole Team f or 1000", "Restores MP for 50", "Restrores MP for 500", "Restores HP/MP by 9999", "Restores HP/MP of Whole Team by 9999", "Removes Poison", "Removes Dark", "Removes Silence", "Removes Zombie", "Removes all status", "Deal

s Ice Damage to Target", "Deals Ice Damage to Target", "Deals Fire Damage to Target", "Deals Fire Damage to Target", "Deals Lightning Damage to Target", "Deals Lightning Damage to Target", "Deals Water Damage to Target", "Deals Water Damage to Target", "Damage all Enemies", "Damage/Armor Break all Enemies", "Damage/Sleep all Enemies", "Damage/Sleep all Enemies", "Damage/Silence all Enemies", "Damage/Darkness all Enemies", "Reduces HP of all Enemies by Half", "Damages Tar get", "Damages Target", "Damages Enemies", "Damage/Poison on Target", "Delays all Enemies", "Damage/Delay all Enemies", "De ath on Target", "Death on all Enemies", "Major Damage all Enemies", "Haste on Team", "Shell Target", "Protect Target", " Reflect on Target", "Regen on Target", "Absorb Targets MP", "Absorb Targets HP", "Absorb Targets HP/MP", "Damage/Disple on Target", "MAXHP X 2 for Round,self", "MAXMP X 2 for Round,self", "MAXHP X 2 for Round,team", "MAXMP X 2 for Round,tea m", "Reduce MP cost to 0 all magics/skill" }; enum storage { magicstore = 0, weaponstore, armorstore, gilcount, stat_str, stat_magic, stat_def, stat_mdef, stat_health, stat_mp, stat_xp, stat_lev, curplayer } new MassStorage[MAX_PLAYERS+1][storage]; the info. new PackStorage[MAX_PLAYERS+1][11]; pons new backpack[MAX_PLAYERS+1][51]; new itemcount[MAX_PLAYERS+1][51]; new 1]; new new new //the 4 major arrays holding all //bitsum storage of backpack wea

UserHealth[MAX_PLAYERS+1], UserArmor[MAX_PLAYERS+1], UserWeapon[MAX_PLAYERS+ speed_stat[MAX_PLAYERS+1]; menutype[MAX_PLAYERS+1]; overdrive[MAX_PLAYERS+1];

enum (*= 2){ blockmenu = 1, mag_block, zombie_stat, can_cast, shell_status, protect_s tatus, reflect_status, fury_state, stars_stat, delay, brkarm, brkwep, brkmag, brkmdef, dbl_hp, dbl_mp, keydown } new massbool[MAX_PLAYERS+1]; //pcvar holders enum pcvar { save_xp, block_dmg,

level_count, on_off, factoratk, ff_pointer } new pcvars[pcvar]; //miscelaneous new gmsgDeathMsg, gmsgDamage, gmsgScreenFade, smoke; new monitor, iconstatus, burning, light, bubbles, gmsgSayText; new MonitorHudSync, advert_think; //-------------------------------------------------------------------------------------public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); pcvars[on_off] = pcvars[save_xp] = pcvars[block_dmg] = ; pcvars[level_count] = pcvars[factoratk] = "); pcvars[ff_pointer] = get_cvar_pointer("mp_friendlyfire"); #if SAVE_METHOD == SAVE_NVAULT g_vault = nvault_open("ffx_mod"); g_storevault = nvault_open("ffx_storage"); g_itemvault = nvault_open("ffx_items"); #endif #if SAVE_METHOD == SAVE_SQL set_task(0.5, "sql_init"); #endif //Events the server will respond to RegisterHam(Ham_Spawn, "player", "Spawn_Event", 1); RegisterHam(Ham_Killed, "player", "deathfunct"); RegisterHam(Ham_TakeDamage, "player", "damagefunct"); register_event("Health", "health_change", "b"); register_event("Battery", "armor_change", "b"); register_event("CurWeapon","weapon_change", "be", "1=1"); register_clcmd("say", "say_event"); register_clcmd("say_team","say_event"); register_clcmd("ffhelp", "helpFF"); //register_clcmd("main_menu", "show_primary_menu"); register_clcmd("+magic", "magic_key"); register_clcmd("-magic", "magic_keyup"); //admin register_concmd("ff_setxp","adminSetXP", aLevel,"<nick @team @ALL #userid> <xp> - Sets Players XP"); register_concmd("ff_setstats","adminSetSTAT", aLevel,"<nick @team @A LL #userid> <@str @def @mag @mdef @all> <amnt> - Sets Players STAT"); register_concmd("ff_setmagic","adminSetMAGIC", aLevel,"<nick @team @ ALL #userid> <flags> - Sets Players Magic"); register_concmd("ff_setweapon","adminSetWEAPON", aLevel,"<nick @team @ALL #userid> <flags> - Sets Players Weapon"); register_concmd("ff_setarmor","adminSetARMOR", aLevel,"<nick @team @ register_cvar( "ffx_level_break", "5" ); register_cvar( "ffx_refactor_damage", "1 register_cvar( "ffx_enable", "1" ); register_cvar( "ffx_savexp", "1" ); register_cvar( "ffx_block_damage", "1" )

ALL

#userid> <flags> - Sets Players Armor"); MonitorHudSync = CreateHudSyncObj();

monitor = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString , "info_target")); if ( pev_valid(monitor) ) { advert_think = 800; //4 minutes divided by .3 second intervals set_pev(monitor, pev_classname, "monitorloop"); set_pev(monitor, pev_nextthink, get_gametime() + 0.3); register_forward(FM_Think, "monitor_think"); } //msgid's gmsgDeathMsg = get_user_msgid("DeathMsg"); gmsgDamage = get_user_msgid("Damage"); gmsgScreenFade = get_user_msgid("ScreenFade"); iconstatus = get_user_msgid("StatusIcon"); gmsgSayText = get_user_msgid("SayText"); } //-------------------------------------------------------------------------------------public plugin_precache() { smoke = engfunc(EngFunc_PrecacheModel, mburn); burning = engfunc(EngFunc_PrecacheModel, mfire); bubbles = engfunc(EngFunc_PrecacheModel, mbubble); light = engfunc(EngFunc_PrecacheModel, mlight); engfunc(EngFunc_PrecacheSound, slevel); engfunc(EngFunc_PrecacheSound, scast); engfunc(EngFunc_PrecacheSound, sthunder); } //-------------------------------------------------------------------------------------public client_putinserver(id) { initialize_stats(id); //cleans our variables before attempting to load since if person doesn't exsist in database they'll have last person vars if ( get_pcvar_num(pcvars[save_xp]) && !is_user_bot(id) ) { massbool[id] = blockmenu; LoadData(id); } } //-------------------------------------------------------------------------------------public plugin_end() { #if SAVE_METHOD == SAVE_NVAULT nvault_close(g_vault); nvault_close(g_storevault); nvault_close(g_itemvault); #endif #if SAVE_METHOD == SAVE_SQL SQL_FreeHandle(g_SqlX); #endif

} //-------------------------------------------------------------------------------------public cleanXP(type) { #if SAVE_METHOD == SAVE_NVAULT switch(type) { case 1: nvault_prune(g_vault, 0, 0); case 2: nvault_prune(g_storevault, 0, 0); case 3: nvault_prune(g_itemvault, 0, 0); case 4: { nvault_prune(g_vault, 0, 0); nvault_prune(g_storevault, 0, 0); nvault_prune(g_itemvault, 0, 0); } } #endif #if SAVE_METHOD == SAVE_SQL static query[64]; if ( type != 4 ) formatex(query, sizeof query - 1, "ALTER TABLE `%s` DROP `%s`", sql_table, type == 1 ? "STAT_SAVE" : type == 2 ? "BACKPA CK_WEP" : "BACKPACK_ITEM"); else formatex(query, sizeof query - 1, "TRUNCATE TABLE `%s`", sql_table) ; SQL_ThreadQuery(g_SqlX, "handle_error", query); #endif for( new id = 1; id <= MAX_PLAYERS; id++) { if ( !is_user_connected(id) ) continue; initialize_stats(id); } } //-------------------------------------------------------------------------------------public magic_key(id) { if ( !get_pcvar_num(pcvars[on_off]) !is_user_alive(id) ) return; new weapon = get_user_weapon(id); cast_magic(id, weptomag[weapon]); massbool[id] = keydown; } public magic_keyup(id) massbool[id] = massbool[id] &~ keydown; //-------------------------------------------------------------------------------------public give_weapons(id) { id -= BASE_TASK; for( new i = 1; i < NUM_OF_MAGIC; i++ ) if( MassStorage[id][magicstore] & (1<<i-1) ) give_item(id, wepfo rmag[i]); } //--------------------------------------------------------------------------------------

public client_disconnect(id) { overdrive[id] = 0; if ( get_pcvar_num(pcvars[save_xp]) == 1 && !is_user_bot(id) ) SaveData(id); } //-------------------------------------------------------------------------------------SaveData(id) { static AuthID[35]; get_user_authid(id,AuthID,34); static vaultkey[40],vaultdata[156], storagedata[128], itemdata[170]; formatex( vaultkey, 39, "__%s__", AuthID); formatex( vaultdata, 155, "%i %i %i %i %i %i %i %i %i %i %i %i %i", Mass Storage[id][magicstore], MassStorage[id][weaponstore], MassStorage[id][armorstor e], MassStorage[id][stat_str], MassStorage[id][stat_magic], MassStorage[id][ stat_def], MassStorage[id][stat_mdef], MassStorage[id][stat_health], MassStorage[id][stat_mp], MassStorage[id][stat_xp], MassStorage[id][stat _lev], MassStorage[id][curplayer], MassStorage[id][gilcount] ); formatex( storagedata, 127, "%i %i %i %i %i %i %i %i %i %i", PackStorage [id][1], PackStorage[id][2], PackStorage[id][3], PackStorage[id][4], PackStorage[id][5], PackStorage[id][6], PackStorage[id][7], PackStorage[ id][8], PackStorage[id][9], PackStorage[id][10] ); itemdata[0] = '^0'; for(new i = 0; i < 51; i++) format( itemdata, 169, "%s%i ", itemdata, itemcount[id][i] ); #if SAVE_METHOD == SAVE_NVAULT nvault_set(g_vault, vaultkey, vaultdata); nvault_set(g_storevault, vaultkey, storagedata); nvault_set(g_itemvault, vaultkey, itemdata); #endif #if SAVE_METHOD == SAVE_SQL static squery[1024]; format(squery, sizeof squery - 1, "INSERT INTO `%s` SET USER_KEY='%s', S TAT_SAVE=%s, BACKPACK_WEP=%s, BACKPACK_ITEM=%s, LAST_PLAY_DATE=SYSDATE() ON DUPL ICATE KEY UPDATE STAT_SAVE=%s, BACKPACK_WEP=%s, BACKPACK_ITEM=%s, LAST_PLAY_DATE =SYSDATE()", sql_table, AuthID, vaultdata, storagedata, itemdata, vaultdata, storagedata, itemdata); SQL_ThreadQuery(g_SqlX, "handle_error", squery); #endif } //-------------------------------------------------------------------------------------#if SAVE_METHOD == SAVE_NVAULT LoadData(id) { static AuthID[35], vaultkey[40]; get_user_authid(id,AuthID,34); formatex(vaultkey, 39, "__%s__", AuthID); static buffer[160], left[11], i;

nvault_get(g_vault, vaultkey, buffer, sizeof buffer - 1); static rmagic[11], rweapon[11], rarmor[11], rstr[11], rmag[11], rdef[11] , rmdef[11], rhp[11], rmp[11], rxp[11], rlevel[11], rplaya[4], rgil[11]; parse(buffer, rmagic, 10, rweapon, 10, rarmor, 10, rstr, 10, rmag, 10, r def, 10, rmdef, 10, rhp, 10, rmp, 10, rxp, 10, rlevel, 10, rplaya, 3, rgil, 10); MassStorage[id][magicstore] = str_to_num(rmagic); MassStorage[id][weaponstore] = str_to_num(rweapon); MassStorage[id][armorstore] = str_to_num(rarmor); MassStorage[id][stat_str] = str_to_num(rstr); MassStorage[id][stat_magic] = str_to_num(rmag); MassStorage[id][stat_def] = str_to_num(rdef); MassStorage[id][stat_mdef] = str_to_num(rmdef); MassStorage[id][stat_health] = str_to_num(rhp); MassStorage[id][stat_mp] = str_to_num(rmp); MassStorage[id][stat_xp] = str_to_num(rxp); MassStorage[id][stat_lev] = str_to_num(rlevel); MassStorage[id][curplayer] = str_to_num(rplaya); MassStorage[id][gilcount] = str_to_num(rgil); nvault_get(g_storevault, vaultkey, buffer, sizeof buffer - 1); for(i = 1; i < 10; i++) { strtok(buffer, left, sizeof left - 1, buffer, sizeof buffer - 1, ' '); PackStorage[id][i] = str_to_num(left); } initial_load(id); //checks a few things, items storage doesn't eff ect nvault_get(g_itemvault, vaultkey, buffer, sizeof buffer - 1); for(i = 0; i < 51; i++) { strtok(buffer, left, sizeof left - 1, buffer, sizeof buffer - 1, ' '); itemcount[id][i] = str_to_num(left); } } #endif #if SAVE_METHOD == SAVE_SQL LoadData(id) { static AuthID[35]; get_user_authid(id,AuthID,34); static rquery[128], data[1]; format(rquery, sizeof rquery - 1, "SELECT STAT_SAVE,BACKPACK_WEP,BACKPAC K_ITEM FROM `%s` WHERE USER_KEY='%s'", sql_table, AuthID); data[0] = id; SQL_ThreadQuery(g_SqlX, "handle_retrieve", rquery, data, 1); } public handle_retrieve(failstate, Handle:hrquery, error[], errnum, data[], size) { new id = data[0]; if ( !is_user_connected(id) ) return; if (failstate)

{ log_amx("[%s] SQL error: '%s'", PLUGIN, error); return; } else if ( SQL_NumResults(hrquery) ) { static buffer[160], left[11], i; SQL_ReadResult(hrquery, 0, buffer, sizeof buffer - 1); static rmagic[11], rweapon[11], rarmor[11], rstr[11], rmag[11], rdef[11], rmdef[11], rhp[11], rmp[11], rxp[11], rlevel[11], rplaya[4], rgil[11]; parse(buffer, rmagic, 10, rweapon, 10, rarmor, 10, rstr, 10, rma g, 10, rdef, 10, rmdef, 10, rhp, 10, rmp, 10, rxp, 10, rlevel, 10, rplaya, 3, rg il, 10); MassStorage[id][magicstore] = str_to_num(rmagic); MassStorage[id][weaponstore] = str_to_num(rweapon); MassStorage[id][armorstore] = str_to_num(rarmor); MassStorage[id][stat_str] = str_to_num(rstr); MassStorage[id][stat_magic] = str_to_num(rmag); MassStorage[id][stat_def] = str_to_num(rdef); MassStorage[id][stat_mdef] = str_to_num(rmdef); MassStorage[id][stat_health] = str_to_num(rhp); MassStorage[id][stat_mp] = str_to_num(rmp); MassStorage[id][stat_xp] = str_to_num(rxp); MassStorage[id][stat_lev] = str_to_num(rlevel); MassStorage[id][curplayer] = str_to_num(rplaya); MassStorage[id][gilcount] = str_to_num(rgil); SQL_ReadResult(hrquery, 1, buffer, sizeof buffer - 1); for(i = 1; i < 10; i++) { strtok(buffer, left, sizeof left - 1, buffer, sizeof buf fer - 1, ' '); PackStorage[id][i] = str_to_num(left); } SQL_ReadResult(hrquery, 2, buffer, sizeof buffer - 1); for(i = 0; i < 51; i++) { strtok(buffer, left, sizeof left - 1, buffer, sizeof buf fer - 1, ' '); itemcount[id][i] = str_to_num(left); } } initial_load(id); //runs a few checks and removes the blockmenu st atus whether data was loaded or not } public sql_init() { g_SqlX = SQL_MakeStdTuple(); static cquery[512]; format(cquery, sizeof cquery - 1, "CREATE TABLE IF NOT EXISTS `%s` (\ USER_KEY VARCHAR(36) NOT NULL PRIMARY KEY, \ STAT_SAVE VARCHAR(255) NOT NULL, \ BACKPACK_WEP VARCHAR(255) NOT NULL, \ BACKPACK_ITEM VARCHAR(255) NOT NULL, \ LAST_PLAY_DATE TIMESTAMP(10) NOT NULL \ ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", sql_table);

SQL_ThreadQuery(g_SqlX, "handle_error", cquery); } public handle_error(failstate, Handle:query, error[], errnum, data[], size) { if (failstate) { server_print("[%s] SQL error: '%s'", PLUGIN, error); log_amx("[%s] SQL error: '%s'", PLUGIN, error); } } #endif //-------------------------------------------------------------------------------------stat_check(id) { //after a vault prune stats need to be reinitialized to lowest values(hp should never be set to 0) if ( MassStorage[id][magicstore] < 15 ) MassStorage[id][magicstore] = 15 ; if ( MassStorage[id][stat_str] < 5 ) MassStorage[id][stat_str] = 5; if ( MassStorage[id][stat_magic] < 5 ) MassStorage[id][stat_magic] = 5; if ( MassStorage[id][stat_def] < 5 ) MassStorage[id][stat_def] = 5; if ( MassStorage[id][stat_mdef] < 5 ) MassStorage[id][stat_mdef] = 5; if ( MassStorage[id][stat_health] < 100 ) MassStorage[id][stat_health] = 100; if ( MassStorage[id][stat_mp] < 25 ) MassStorage[id][stat_mp] = 25; } initialize_stats(id) { MassStorage[id][magicstore] = 15; MassStorage[id][weaponstore] = 0; MassStorage[id][armorstore] = 0; MassStorage[id][stat_str] = 5; MassStorage[id][stat_magic] = 5; MassStorage[id][stat_def] = 5; MassStorage[id][stat_mdef] = 5; MassStorage[id][stat_health] = 100; MassStorage[id][stat_mp] = 25; MassStorage[id][stat_xp] = 0; MassStorage[id][stat_lev] = 1; MassStorage[id][curplayer] = 0; MassStorage[id][gilcount] = 0; static i; for ( i = 1; i <= 10; i++ ) PackStorage[id][i] = 0; for( i = 0; i < 51; i++) itemcount[id][i] = 0; } //-------------------------------------------------------------------------------------initial_load(id) { stat_check(id); backpack_load(id); massbool[id] = massbool[id] &~ blockmenu; } backpack_load(id) {

static abil[5], x, i; for(i = 1; i < 11; i++) { get_abilities(abil, PackStorage[id][i]); x = (i - 1) * 5; backpack[id][x] = backpack[id][x+1] backpack[id][x+2] backpack[id][x+3] backpack[id][x+4] abil[0]; = abil[1]; = abil[2]; = abil[3]; = abil[4];

} } //-------------------------------------------------------------------------------------say_item(id, said[]) { static said2[25], spaceIdx, i; spaceIdx = contain(said, " " ); if ( spaceIdx > 0 && strlen(said) > spaceIdx+2 ) { copy(said2, 24, said[spaceIdx+1] ); } else { client_print(id, print_chat, "%s Please provide at least two let ters of the item you wish to use(or use item menu instead)" ); return; } for(i = 0; i < 51; i++ ) { if ( containi( itemnamestring[i], said2 ) != -1 && itemcount[id] [i] > 0 ) { itemcount[id][i]--; use_item(id, i); break; } } } scan_effect(id, vic) { static vicname[32]; get_user_name(vic, vicname, 31); client_print(id, print_center, "%s: Hp:%d/%d Mp:%d/%d Str:%d Def:%d Mag: %d Mdef:%d",vicname, UserHealth[vic],MassStorage[vic][stat_health],UserArmor[vic],MassStorage [vic][stat_mp], MassStorage[vic][stat_str],MassStorage[vic][stat_def],MassStorage[vic][s tat_magic], MassStorage[vic][stat_mdef]); } use_item(id, num) { num++; switch(num) { case 1: ff_heal(id, id, 200, true);

//potion

case case case case case //elixir

2: 3: 5: 6: 7:

ff_heal(id, id, 600, true); ff_heal(id, id, 9999, true); ff_mp_change(id, 50); ff_mp_change(id, 500); { ff_heal(id, id, 9999, true); ff_mp_change(id, 9999);

//hi potion //x potion //ether //trurbo ether

} case 9: if ( task_exists(POISON_TASK+id) ) remove_task(POISON_TA SK + id); case case case case case case case case case case 10: reset_light(id+LIGHT_TASK); 11: massbool[id] = massbool[id] &~ mag_block; 12: massbool[id] = massbool[id] &~ zombie_stat; 13: remove_negative(id); 4, 8, 38, 49 .. 51: item_team(id, num); 14 .. 21, 29, 30, 32, 35, 43 .. 46: item_target(id, num); 22 .. 28, 31, 33, 34, 36, 37: item_mtarget(id, num); 39 .. 42: item_ftarget(id, num); 47: massbool[id] = dbl_hp; 48: massbool[id] = dbl_mp;

} } item_team(id, num) { static players[MAX_PLAYERS], pnum, player, i; ff_get_players(players, pnum, "ae", _:cs_get_user_team(id)); if ( !pnum ) return; for (i = 0; i < pnum; i++) { player = players[i]; switch(num) { case 4: ff_heal(player, id, 1000, true); case 8: { ff_heal(id, id, 9999, true); ff_mp_change(id, 9999); } case 38: speed_stat[player] = 2; case 49: massbool[player] = dbl_hp; case 50: massbool[player] = dbl_mp; case 51: massbool[player] = stars_stat; default: { client_print(id, print_chat, "%s Internal Error" , prefix); return; } } } } item_target(id, num) { static Float:userorigin[3], Float:playerorigin[3]; pev(id, pev_origin, userorigin); static players[MAX_PLAYERS], pnum, Float:ftemp, player; new Float:dist = 3000.0, target = 0; ff_get_players(players, pnum, "afi", _:cs_get_user_team(id)); if ( !pnum ) return;

for(new i = 0; i < pnum; i++) { player = players[i]; pev(player, pev_origin, playerorigin); ftemp = get_distance_f(userorigin, playerorigin); if ( ftemp < dist ) { dist = ftemp; target = player; } } switch(num) { case 14: { if ( !(MassStorage[target][armorstore] & ARMOR_EATICE) ) ff_damage(target, id, 600, "Antarctic Wind"); else ff_heal(target, id, 600); _set_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRende rNormal, 30); set_task(10.0, "reset_glow", id+BASE_TASK); } case 15: { if ( !(MassStorage[target][armorstore] & ARMOR_EATICE) ) ff_damage(target, id, 1000, "Arctic Wind"); else ff_heal(target, id, 1000); _set_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRende rNormal, 30); set_task(10.0, "reset_glow", id+BASE_TASK); } case 16: { if ( !(MassStorage[target][armorstore] & ARMOR_EATFIRE) ) ff_damage(target, id, 600, "Bomb Fragment"); else ff_heal(target, id, 600); set_fire(target); } case 17: { if ( !(MassStorage[target][armorstore] & ARMOR_EATFIRE) ) ff_damage(target, id, 1000, "Bomb Core"); else ff_heal(target, id, 1000); set_fire(target); } case 18: { if ( !(MassStorage[target][armorstore] & ARMOR_EATLIGHTN ING) ) ff_damage(target, id, 600, "Electro Marble"); else ff_heal(target, id, 600); set_lightning(target); } case 19: { if ( !(MassStorage[target][armorstore] & ARMOR_EATLIGHTN ING) ) ff_damage(target, id, 1000, "Lightning Marble");

else ff_heal(target, id, 1000); set_lightning(target); } case 20: { if ( !(MassStorage[target][armorstore] & ARMOR_EATWATER) ) ff_damage(target, id, 600, "Fish Scale"); else ff_heal(target, id, 600); set_fire(target, 1); } case 21: { if ( !(MassStorage[target][armorstore] & ARMOR_EATWATER) ) ff_damage(target, id, 1000, "Dragon Scale"); else ff_heal(target, id, 1000); set_fire(target, 1); } case 29: ff_damage(target, id, 6000, "Shining Gem");//*** nonele ment effect case 30: ff_damage(target, id, 7500, "Blessed Gem");//*** holy e ffect case 32: { ff_damage(target, id, 2000, "Poison Fang"); if ( MassStorage[target][armorstore] & ARMOR_POISONPROOF ) return; new args[2]; args[0] = id; args[1] = target; set_task(10.0, "poisoned", POISON_TASK+target, args, 2, "b", 1); } case 35: { if ( MassStorage[target][armorstore] & ARMOR_DEATHPROOF ) return; ff_damage(target, id, 1, "Farplane Shadow", true); } case 43: { ff_mp_change(target, -1000); ff_mp_change(id, 1000); } case 44: { ff_damage(target, id, 400, "Stamina Spring"); ff_heal(id, target, 400); } case 45: { ff_mp_change(target, -1500); ff_damage(target, id, 1500, "Soul Spring"); ff_mp_change(id, 1500); ff_heal(id, target, 1500); } case 46: { ff_damage(target, id, 1100, "Purifying Salt"); remove_positive(target); } default: { client_print(id, print_chat, "%s Internal Error", prefix

); return; } } } item_mtarget(id, num) { static players[MAX_PLAYERS], pnum, player, i; ff_get_players(players, pnum, "afi", _:cs_get_user_team(id)); if ( !pnum ) return; for (i = 0; i < pnum; i++) { player = players[i]; switch(num) { case 22: ff_damage(player, id, 800, "Grenade", _, true); case 23: { ff_damage(player, id, 800, "Frag Grenade"); massbool[player] = brkarm; } case 24: { ff_damage(player, id, 750, "Sleeping Powder"); if ( MassStorage[player][armorstore] & ARMOR_SLE EPPROOF ) continue; sleep_effect(player); } case 25: { ff_damage(player, id, 1000, "Dream Powder"); if ( MassStorage[player][armorstore] & ARMOR_SLE EPPROOF ) continue; sleep_effect(player); } case 26: { ff_damage(player, id, 750, "Silence Grenade"); if ( MassStorage[player][armorstore] & ARMOR_SIL ENCEPROOF ) continue; massbool[player] = mag_block; } case 27: { ff_damage(player, id, 750, "Smoke Bomb"); if ( MassStorage[player][armorstore] & ARMOR_DAR KPROOF ) continue; darkness_effect(player, random_num(30, 120)); } case 28: ff_damage(player, id, UserHealth[player]/2, "Sh adow Gem"); case 31: ff_damage(player, id, 9999, "Supreme Gem");//** * nonelemt effect case 33: delay_effect(player, 3.0); case 34: { ff_damage(player, id, 1000, "Gold Hourglass"); delay_effect(player, 3.0); } case 36: { if ( MassStorage[player][armorstore] & ARMOR_DEA THPROOF ) continue; ff_damage(player, id, 1, "Farplane Wind", true);

} case 37: ff_damage(player, id, 13000, "Black Matter");// *** nonelemt effect default: { client_print(id, print_chat, "%s Internal Error" , prefix); break; } } } } item_ftarget(id, num) { static Float:userorigin[3], Float:playerorigin[3], i; pev(id, pev_origin, userorigin); static players[MAX_PLAYERS], pnum, Float:ftemp, player; new Float:dist = 3000.0, target = 0; ff_get_players(players, pnum, "ae", _:cs_get_user_team(id)); if ( !pnum ) return; for(i = 0; i < pnum; i++) { player = players[i]; pev(player, pev_origin, playerorigin); ftemp = get_distance_f(userorigin, playerorigin); if ( ftemp < dist ) { dist = ftemp; target = player; } } switch(num) { case case case case

39: 40: 41: 42:

massbool[target] = shell_status; massbool[target] = protect_status; massbool[target] = reflect_status; { if ( !task_exists(REGEN_TASK+target) ) set_task(2.0, "regen", REGEN_TASK+target);

} default: { client_print(id, print_chat, "%s Internal Error", prefix ); return; } } } delay_effect(id, Float:time) { massbool[id] = delay; set_task(time, "remove_delay", id+BASE_TASK); set_pev(id, pev_maxspeed, 1.0); } public remove_delay(id) { id -= BASE_TASK; massbool[id] = massbool[id] &~ delay; } cast_magic(id, slot) { if ( slot == 0 ) return;

if ( slot == 24 ) { execute_overdrive(id); return; } if ( !(massbool[id] & can_cast) ) return; if ( !(massbool[id] & fury_state) ) { massbool[id] = massbool[id] &~ can_cast; set_task(10.0,"reset_cast",id+BASE_TASK); } //while caster may not be able to cast do to next check, this //prevents the message from spamming because user is holding fire if ( massbool[id] & mag_block ) { client_print(id, print_chat, "%s You Are Currently Silenced", pr efix); return; } if ( !(MassStorage[id][magicstore] & (1<<slot-1)) ) { client_print(id, print_chat, "%s You Must First Learn %s Before You Can Try Casting It.", magicname[slot] ); return; } new mp = UserArmor[id]; new mpcost = magiccost[slot]; if ( MassStorage[id][weaponstore] & WEP_HALFMP ) mpcost /= 2; if ( MassStorage[id][weaponstore] & WEP_ONEMP ) mpcost = 1; if ( massbool[id] & stars_stat ) mpcost = 0; if ( mp < mpcost ) { client_print(id, print_chat, "%s You only have %d of the %d need ed mp to cast %s", mp, mpcost, magicname[slot] ); return; } emit_sound(id, CHAN_STATIC, scast, 0.8, ATTN_NORM, 0, PITCH_NORM); switch(slot) { case 1 .. 11, 13, 15, 18, 22: aim_type(id, slot, 0); case 12, 16, 17, 19 .. 21: self_type(id, slot); case 14: { aim_type(id, 14, 0); self_type(id, 14); } } set_user_armor(id, (mp - mpcost)); } //-------------------------------------------------------------------------------------aim_type(id, slot, count) { new magic = MassStorage[id][stat_magic]; if ( MassStorage[id][weaponstore] & WEP_MAGBOOST ) magic *= 2; static players[MAX_PLAYERS], pnum, player, mdef, diff, i; if ( slot == 14 ) {

//esuna ff_get_players(players, pnum, "ae", _:cs_get_user_team(id)); if ( !pnum ) return; for (i = 0; i < pnum; i++) { player = players[i]; if ( ff_in_sight(id, player) ) { remove_negative(player); } } return; } //negative effect's for enemy team ff_get_players(players, pnum, "afi", _:cs_get_user_team(id)); if ( !pnum ) return; for (i = 0; i < pnum; i++) { player = players[i]; mdef = MassStorage[player][stat_mdef]; if ( !count && ((massbool[player] & reflect_status) ge[player][armorstore] & ARMOR_REFLECT )) { aim_type(player, slot, 1); continue; } diff = (magic - mdef) * 5; if ( diff < 0 ) diff = 0;

MassStora

if ( ff_in_sight(id, player) ) { switch(slot) { case 1: { if ( !(MassStorage[player][armorstore] & ARMOR_EATFIRE) ) ff_damage(player, id, diff, "Fire"); else ff_heal(player, id, diff); set_fire(player); } case 2: { if ( !(MassStorage[player][armorstore] & ARMOR_EATLIGHTNING) ) ff_damage(player, id, diff, "Lig htning"); else ff_heal(player, id, diff); set_lightning(player); } case 3: { if ( !(MassStorage[player][armorstore] & ARMOR_EATWATER) ) ff_damage(player, id, diff, "Water"); else ff_heal(player, id, diff); set_fire(player, 1); }

case 4: { if ( !(MassStorage[player][armorstore] & ARMOR_EATICE) ) ff_damage(player, id, diff, "Blizzard"); else ff_heal(player, id, diff); _set_rendering(id, kRenderFxGlowShell, 0 , 0, 255, kRenderNormal, 30); set_task(10.0, "reset_glow", id+BASE_TAS K); } case 5: { if ( diff <= 55 ) continue; if ( MassStorage[player][armorstore] & A RMOR_POISONPROOF ) continue; static args[2]; args[0] = id; args[1] = player; set_task(10.0, "poisoned", POISON_TASK+p layer, args, 2, "b", 1); } case 6: { if ( diff <= 80 ) continue; set_user_health(player, (UserHealth[play er]/4)); } case 7: { if ( diff <= 105 ) continue; if ( MassStorage[player][armorstore] & A RMOR_DEATHPROOF ) continue; ff_damage(player, id, 1, "Death", true); } case 8: { ff_damage(player, id, diff, "Drain"); ff_heal(id, player, diff); } case 9: { ff_mp_change(player, -1 * diff); ff_mp_change(id, diff); } case 10: { ff_damage(player, id, diff * 3, "Flare") ; } case 11: { ff_damage(player, id, diff * 5, "Ultima" ); } case 13: { scan_effect(id, player); } case 15: { remove_positive(player); } case 18: { if ( diff > 10 && !(MassStorage[player][ armorstore] & ARMOR_HASTE)) { if ( speed_stat[player] == 0 ) s peed_stat[player] = 1; set_pev(player, pev_maxspeed, 22

0.0); } } case 22: { ff_damage(player, id, diff * 3, "Holy"); } } if ( MassStorage[player][weaponstore] & WEP_MAGCOUNTER ) ff_damage(id, player, diff, "Magic Counter"); } } } //-------------------------------------------------------------------------------------self_type(id, slot) { switch(slot) { case 12: ff_heal(id, id, MassStorage[id][stat_health] / 3); case 14: remove_negative(id); case 16: { static players[MAX_PLAYERS], pnum, player, iname[32], i; get_user_name(id, iname, 31); ff_get_players(players, pnum, "be", _:cs_get_user_team(i d)); if ( !pnum ) return; for (i = 0; i < pnum; i++) { player = players[i]; ExecuteHamB(Ham_CS_RoundRespawn, player); client_print(player, print_chat, "%s %s has revi ved you with his Life spell", iname); } } case 17: { set_pev(id, pev_maxspeed, 420.0); speed_stat[id] = 2; } case 19: massbool[id] = protect_status; case 20: massbool[id] = shell_status; case 21: massbool[id] = reflect_status; } } //-------------------------------------------------------------------------------------remove_positive(id) { massbool[id] = massbool[id] &~ protect_status; massbool[id] = massbool[id] &~ shell_status; massbool[id] = massbool[id] &~ reflect_status; if ( pev(id, pev_maxspeed) > 330.0 && !(MassStorage[id][armorstore] & AR MOR_HASTE) ) { set_pev(id, pev_maxspeed, 320.0); speed_stat[id] = 0; }

} remove_negative(id) { if ( task_exists(POISON_TASK+id) ) remove_task(POISON_TASK + id); set_task(0.1,"reset_light",id+LIGHT_TASK); massbool[id] = massbool[id] &~ mag_block; massbool[id] = massbool[id] &~ zombie_stat; } execute_overdrive(id) { if ( overdrive[id] < 100 ) return; new user = MassStorage[id][curplayer]; new atk = MassStorage[id][stat_str] * 2; new randomnum = random_num(1, 4); static Float:userorigin[3], Float:playerorigin[3]; pev(id, pev_origin, userorigin); static players[MAX_PLAYERS], pnum, temp, Float:ftemp, player, i; new Float:dist = 3000.0, target = 0; ff_get_players(players, pnum, "afi", _:cs_get_user_team(id)); if ( pnum < 1 ) return; for(i = 0; i < pnum; i++) { player = players[i]; pev(player, pev_origin, playerorigin); ftemp = get_distance_f(userorigin, playerorigin); if ( ftemp < dist ) { dist = ftemp; target = player; } } if ( !target ) return; switch(user) { case 1: { switch(randomnum) { case 1: { ff_damage(target, id, atk, "Spiral Cut", _, true); } case 2: { for( i = 1; i < 7;i++) { temp = random_num(1, pnum); player = players[temp]; ff_damage(player, id, atk, "Slic e & Dice", _, true); } } case 3: { for(i = 1; i < pnum; i++) { player = players[i]; ff_damage(player, id, atk, "Ener gy Rain", _, true);

} } case 4: { ff_damage(target, id, (atk*9), "Blitz Ac e", _, true); } } } case 2: { switch(randomnum) { case 1: { for(i = 1; i < pnum; i++) { player = players[i]; ff_damage(player, id, atk, "Drag on Fang", _, true); } } case 2: { ff_damage(target, id, atk, "Shooting Sta r", _, true); new Float:Origin[3]; pev(target, pev_origin, Origin); new Float:velocity[3]; pev(target, pev_velocity, velocity); new Float:avelocity[3]; velocity_by_aim(id, 1500, avelocity); velocity[0] += avelocity[0]; velocity[1] += avelocity[1]; velocity[2] += avelocity[2] + random_flo at(200.0, 225.0); set_pev(target, pev_velocity, velocity); } case 3: { ff_damage(target, id, atk, "Banishing Bl ade", _, true); massbool[target] = brkarm; massbool[target] = brkwep; massbool[target] = brkmag; massbool[target] = brkmdef; } case 4: { for(i = 1; i < pnum; i++) { player = players[i]; ff_damage(player, id, (atk*4), " Tornado", _, true); } } } } case 3: { switch(randomnum) { case 1: { randomnum = random_num(1, 4); ff_damage(target, id, atk, "Element Reel s"); switch(randomnum)

{ case case case case RenderFxGlowShell, 0, 0, 255, kRenderNormal, 30); set_task(10.0, "reset_gl ow", target+BASE_TASK); } } } case 2: { randomnum = random_num(3, 9); for(i = 1; i < randomnum; i++) ff_damage(target, id, atk, "Atta ck Reels", _, true); } case 3: { randomnum = random_num(1, 5); ff_damage(target, id, atk, "Status Reels ", _, true); switch(randomnum) { case 1: { if ( !(MassStorage[targe t][armorstore] & ARMOR_DARKPROOF) ) darkness_effect( target, random_num(30,255)); } case 2: { if ( !(MassStorage[targe t][armorstore] & ARMOR_SILENCEPROOF) ) massbool[target] = mag_block; } case 3: { if ( !(MassStorage[targe t][armorstore] & ARMOR_SLEEPPROOF) ) sleep_effect(tar get); } case 4: { if ( !(MassStorage[targe t][armorstore] & ARMOR_POISONPROOF) ) { static args[2]; args[0] = id; args[1] = target ; set_task(10.0, " poisoned", POISON_TASK+target, args, 2, "b", 1); } } case 5: { if ( !(MassStorage[targe t][armorstore] & ARMOR_SLOWPROOF ARMOR_HASTE) ) { set_pev(target, pev_maxspeed, 220.0); speed_stat[targe 1: 2: 3: 4: set_fire(target); set_lightning(target); set_fire(target, 1); { _set_rendering(target, k

t] = 1; } } } } case 4: { ff_damage(target, id, atk*4, "Auroch Ree ls", _, true); set_fire(target); set_lightning(target); set_fire(target, 1); _set_rendering(target, kRenderFxGlowShel l, 0, 0, 255, kRenderNormal, 30); set_task(10.0, "reset_glow", target+BASE _TASK); if ( !(MassStorage[target][armorstore] & ARMOR_SLOWPROOF ARMOR_HASTE) ) { set_pev(target, pev_maxspeed, 22 0.0); speed_stat[target] = 1; } } } } case 4: { massbool[id] = fury_state; set_task(15.0, "reset_fury", id+BASE_TASK); client_print(id, print_chat, "%s You Have Entered Fury M ode, No Cooldown on casting magic for 15 seconds!", prefix); } case 5, 6: { set_pev(id, pev_takedamage, DAMAGE_NO); client_print(id, print_chat, "%s You are being protected ", prefix); set_task(6.0, "reset_god", id+BASE_TASK); } /* case 6: { client_print(id, print_chat, "%s Sorry Mixture has not b een implemented yet", prefix); return; } */ default: { client_print(id, print_chat, "%s You cannot use overdriv e w/o selecting a character first!", prefix); return; } } overdrive[id] = 0; } public reset_fury(id) { id -= BASE_TASK; massbool[id] = massbool[id] &~ fury_state; } public reset_god(id)

{ id -= BASE_TASK; set_pev(id, pev_takedamage, DAMAGE_AIM); } //-------------------------------------------------------------------------------------give_wep(id, slots) { new usedslots = bittotal(MassStorage[id][weaponstore]); new user_atk = MassStorage[id][stat_str]; if ( usedslots > slots ) return; if ( slots > usedslots ) slots -= usedslots; if ( slots < 1 ) return; new x; for( x = 1; x <= slots; x++) { new randnum = random_num(1, user_atk); new value = 0; switch(randnum) { case 1 .. 3: value = WEP_FIRESTRIKE; case 4 .. 6: value = WEP_LIGHTNINGSTRIKE; case 7 .. 9: value = WEP_WATERSTRIKE; case 10 .. 12: value = WEP_ICESTRIKE; case 13 .. 17: value = WEP_SENSOR; case 18 .. 22: value = WEP_PIERCE; case 23 .. 27: value = WEP_DARKSTRIKE; case 28 .. 32: value = WEP_SILENCESTRIKE; case 33 .. 34: value = WEP_SLEEPSTRIKE; case 35 .. 37: value = WEP_POISONSTRIKE; case 38 .. 39: value = WEP_DEATHSTRIKE; case 40 .. 41: value = WEP_ZOMBIESTRIKE; case 42 .. 43: value = WEP_SLOWSTRIKE; case 44 .. 48: value = WEP_STRENGTH10; case 49 .. 51: value = WEP_STRENGTH20; case 52 .. 56: value = WEP_MAGIC10; case 57 .. 59: value = WEP_MAGIC20; case 60: value = WEP_COUNTER; case 61: value = WEP_MAGCOUNTER; case 62: value = WEP_MAGBOOST; case 63: value = WEP_HALFMP; case 66: value = WEP_ONEMP; case 67 .. 69: value = WEP_GILLIONAIRE; case 100: value = WEP_BREAKDMG; } if ( !value ) continue; MassStorage[id][weaponstore] = value; } } //-------------------------------------------------------------------------------------give_arm(id, slots) { new usedslots = bittotal(MassStorage[id][armorstore]); new user_def = MassStorage[id][stat_def]; if ( usedslots > slots ) return;

if ( slots > usedslots ) slots -= usedslots; if ( slots < 1 ) return; new x; for( x = 1; x <= slots; x++) { new randnum = random_num(1, user_def); new value = 0; switch(randnum) { case 1 .. 3: value = ARMOR_EATFIRE; case 4 .. 6: value = ARMOR_EATLIGHTNING; case 7 .. 9: value = ARMOR_EATWATER; case 10 .. 12: value = ARMOR_EATICE; case 13 .. 17: value = ARMOR_HASTE; case 18 .. 22: value = ARMOR_SLEEPPROOF; case 23 .. 27: value = ARMOR_DARKPROOF; case 28 .. 32: value = ARMOR_SILENCEPROOF; case 33 .. 37: value = ARMOR_POISONPROOF; case 38 .. 39: value = ARMOR_DEATHPROOF; case 40 .. 41: value = ARMOR_ZOMBIEPROOF; case 42 .. 43: value = ARMOR_SLOWPROOF; case 44 .. 48: value = ARMOR_SHELL; case 49 .. 51: value = ARMOR_PROTECT; case 52 .. 54: value = ARMOR_REFLECT; case 56 .. 58: value = ARMOR_REGEN; case 59 .. 62: value = ARMOR_DEF10; case 63 .. 65: value = ARMOR_DEF20; case 66 .. 69: value = ARMOR_MDEF10; case 70 .. 72: value = ARMOR_MDEF20; case 73 .. 76: value = ARMOR_HP20; case 77 .. 79: value = ARMOR_HP30; case 80 .. 83: value = ARMOR_MP20; case 84 .. 86: value = ARMOR_MP30; case 87: value = ARMOR_PICKPOCKET; case 92: value = ARMOR_MASTERTHIEF; case 100: { new randomnum = random_num(1, 10); switch(randomnum) { case 1 .. 5: value = ARMOR_BREAKHP; case 6 .. 10: value = ARMOR_BREAKMP; } } } if ( !value ) continue; MassStorage[id][armorstore] = value; } } //-------------------------------------------------------------------------------------level_up(id) { new xp = MassStorage[id][stat_xp]; new user = MassStorage[id][curplayer]; if ( !user xp < get_pcvar_num(pcvars[level_count]) ) return;

emit_sound(id, CHAN_VOICE, slevel, 0.8, ATTN_NORM, 0, PITCH_NORM);

//new system start new menu = menu_create("Select Stat:^n", "stat_choice" ); menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_setprop(menu, } public stat_choice(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], iName[64]; new access, callback, key; menu_item_getinfo(menu, item, access, data,5, iName, 63, callback); key = str_to_num(data); new user = MassStorage[id][curplayer]; switch(key) { case case case case case case case "Strength", "1", 0); "Defense", "2", 0); "Magic", "3", 0); "Magic Defense", "4", 0); "Health", "5", 0); "Magic Points", "6", 0); "Learn Magic", "7", 0); MPROP_EXIT, MEXIT_ALL);

menu_display(id, menu, 0);

MassStorage[id][stat_str] += strbonus[user]; MassStorage[id][stat_def] += defbonus[user]; MassStorage[id][stat_magic] += magbonus[user]; MassStorage[id][stat_mdef] += mdefbonus[user]; MassStorage[id][stat_health] += hpbonus[user]; MassStorage[id][stat_mp] += mpbonus[user]; if ( !learn_skill(id) ) { client_print(id, print_chat, "%s Couldn't learn a new ma gic skill rechoose upgrade", prefix); menu_destroy(menu); level_up(id); return PLUGIN_HANDLED; } default: { client_print(id, print_chat, "%s Internal Error", prefix ); menu_destroy(menu); return PLUGIN_HANDLED; } } check_max(id); MassStorage[id][stat_xp] -= get_pcvar_num(pcvars[level_count]); MassStorage[id][stat_lev]++; level_up(id); //in case our player has enough xp for another level up menu_destroy(menu); return PLUGIN_HANDLED;

1: 2: 3: 4: 5: 6: 7:

} //-------------------------------------------------------------------------------------check_max(id) { new max_hp = MassStorage[id][stat_health]; new max_mp = MassStorage[id][stat_mp]; new str = MassStorage[id][stat_str]; new def = MassStorage[id][stat_def]; new mag = MassStorage[id][stat_magic]; new mdef = MassStorage[id][stat_mdef]; //health check if ( max_hp > 9999 ) { if ( !(MassStorage[id][armorstore] & ARMOR_BREAKHP) ) MassStorag e[id][stat_health] = 9999; else if ( max_hp > 99999 ) MassStorage[id][stat_health] = 99999; } //mp check if ( max_mp > 999 ) { if ( !(MassStorage[id][armorstore] & ARMOR_BREAKMP) ) MassStorag e[id][stat_mp] = 999; else if ( max_mp > 9999 ) MassStorage[id][stat_mp] = 9999; } //str check if ( str > STAT_MAX ) MassStorage[id][stat_str] = STAT_MAX; //defense if ( def > STAT_MAX ) MassStorage[id][stat_def] = STAT_MAX; //magic if ( mag > STAT_MAX ) MassStorage[id][stat_magic] = STAT_MAX; //magic defense if ( mdef > STAT_MAX ) MassStorage[id][stat_mdef] = STAT_MAX; } //-------------------------------------------------------------------------------------bool:learn_skill(id) { static user_mp, user_mag, user_mdef, user, special; user_mp = MassStorage[id][stat_mp]; user_mag = MassStorage[id][stat_magic]; user_mdef = MassStorage[id][stat_mdef]; user = MassStorage[id][curplayer]; special = 5; if if if if if if if if if if if ( ( ( ( ( ( ( ( ( ( ( user_mp user_mp user_mp user_mp user_mp user_mag user_mag user_mag user_mag user_mag user_mag >= >= >= >= >= >= >= >= >= >= >= 30 ) special++; 60 ) special++; 100 ) special++; 300 ) special++; 500 ) special++; 10 ) special++; 20 ) special++; 35 ) special++; 50 ) special++; 100 ) special++; 200 ) special++;

if ( user_mdef >= 20 ) special++;

if ( user_mdef >= 100 ) special++; if ( user_mdef >= 200 ) special++; switch(user) { case 1: special += case 2: special -= case 3: special += case 4, 5: special case 6: special -= default: special = } special *= 10;

4; 2; 3; += 5; 4; 4; //should never happen

new randnum = random_num(1, special); new value = 0; switch(randnum) { case 1 .. 10: value = MAG_FIRE; case 11 .. 20: value = MAG_LIGHTNING; case 21 .. 30: value = MAG_WATER; case 31 .. 40: value = MAG_ICE; case 41 .. 60: value = MAG_CURE; case 61 .. 90: value = MAG_SCAN; case 91 .. 100: value = MAG_BIO; case 101 .. 105: value = MAG_PROTECT; case 106 .. 110: value = MAG_SHELL; case 111 .. 113: value = MAG_HASTE; case 114 .. 120: value = MAG_SLOW; case 121 .. 130: value = MAG_DISPEL; case 131 .. 145: value = MAG_OSMOSE; case 146 .. 160: value = MAG_ESUNA; case 161 .. 163: value = MAG_LIFE; case 164 .. 165: value = MAG_REFLECT; case 166 .. 175: value = MAG_DRAIN; case 176 .. 190: value = MAG_DEMI; case 191 .. 200: value = MAG_DEATH; case 201 .. 210: value = MAG_FLARE; case 211 .. 215: value = MAG_HOLY; case 216 .. 240: value = MAG_ULTIMA; } if ( !value ) return false; if ( !(MassStorage[id][magicstore] & (1<<value-1)) ) { MassStorage[id][magicstore] = (1<<value-1); give_item(id, wepformag[value]); client_print(id, print_chat, "%s You Have Just Learned %s", magi cname[value]); return true; } return false; } //-------------------------------------------------------------------------------------public regen(id) { id -= REGEN_TASK; ff_heal(id, id, MassStorage[id][stat_health] / 25); set_task(2.0, "regen", REGEN_TASK+id);

} //-------------------------------------------------------------------------------------//*** all special effects stuff here, need more set_fire(id,water = 0){ static rx,ry,rz,forigin[3]; rx = random_num(-30,30); ry = random_num(-30,30); rz = random_num(-30,30); get_user_origin(id,forigin); //TE_SPRITE - additive sprite, plays 1 cycle message_begin( MSG_BROADCAST,SVC_TEMPENTITY); write_byte( 17 ); write_coord(forigin[0]+rx); // coord, coord, coord (position) write_coord(forigin[1]+ry); write_coord(forigin[2]+10+rz); switch(water) { case 0: write_short( burning ); // short (sprite index) case 1: write_short( bubbles ); } write_byte( 30 ); // byte (scale in 0.1's) write_byte( 200 ); // byte (brightness) message_end(); switch(water) { case 0: {//Smoke message_begin( MSG_BROADCAST,SVC_TEMPENTITY); write_byte( 5 ); write_coord(forigin[0]+(rx*2)); // coord, coord, coord ( position) write_coord(forigin[1]+(ry*2)); write_coord(forigin[2]+100+(rz*2)); write_short( smoke );// short (sprite index) write_byte( 60 ); // byte (scale in 0.1's) write_byte( 15 ); // byte (framerate) message_end(); } case 1: { message_begin(MSG_ONE,iconstatus,{0,0,0},id); write_byte(2); // status (0=hide, 1=show, 2=flash) write_string("dmg_cold"); // sprite name write_byte(0); // red write_byte(0); // green write_byte(127); // blue message_end(); } } return PLUGIN_CONTINUE; } set_lightning(id) { static vec1[3], vec2[3]; get_user_origin(id,vec2);

vec2[2] vec1[0] vec1[1] vec1[2]

-= 26; = vec2[0]+150; = vec2[1]+150; = vec2[2]+400;

//Lightning message_begin( MSG_BROADCAST,SVC_TEMPENTITY); write_byte( 0 ); write_coord(vec1[0]); write_coord(vec1[1]); write_coord(vec1[2]); write_coord(vec2[0]); write_coord(vec2[1]); write_coord(vec2[2]); write_short( light ); write_byte( 1 ); // framestart write_byte( 5 ); // framerate write_byte( 2 ); // life write_byte( 20 ); // width write_byte( 30 ); // noise write_byte( 200 ); // r, g, b write_byte( 200 ); // r, g, b write_byte( 200 ); // r, g, b write_byte( 200 ); // brightness write_byte( 200 ); // speed message_end(); //Sparks message_begin( MSG_PVS, SVC_TEMPENTITY,vec2); write_byte( 9 ); write_coord( vec2[0] ); write_coord( vec2[1] ); write_coord( vec2[2] ); message_end(); //Smoke message_begin( MSG_BROADCAST,SVC_TEMPENTITY,vec2); write_byte( 5 ); write_coord(vec2[0]); write_coord(vec2[1]); write_coord(vec2[2]); write_short( smoke ); write_byte( 10 ); write_byte( 10 ); message_end(); emit_sound(id,CHAN_ITEM, sthunder, 1.0, ATTN_NORM, 0, PITCH_NORM); } sleep_effect(id) { client_cmd(id,"+duck"); message_begin(MSG_ONE,gmsgScreenFade,{0,0,0},id); write_short(~0); write_short(~0); write_short(4096); write_byte(0); write_byte(0); write_byte(0); write_byte(255); message_end();

set_pev(id, pev_maxspeed, 1.0); set_task(3.0,"reset_light",id+LIGHT_TASK); } darkness_effect(id, alpha) { message_begin(MSG_ONE,gmsgScreenFade,{0,0,0},id); write_short(16384); write_short(16384); write_short(65536); write_byte(0); write_byte(0); write_byte(0); write_byte(alpha); message_end(); set_task(6.0,"reset_light",id+LIGHT_TASK); } public poisoned(args[]) { static poisoner, victim, str, def, damage; poisoner = args[0]; victim = args[1]; if ( !is_user_connected(poisoner) !is_user_connected(victim) ) { remove_task(POISON_TASK+victim); return; } if ( MassStorage[victim][armorstore] & ARMOR_POISONPROOF ) { remove_task(POISON_TASK+victim); return; } str = MassStorage[poisoner][stat_str]; def = MassStorage[victim][stat_def]; if ( str == 0 ) str = 1; if ( def == 0 ) def = 1; damage = (str/def) * str; _set_rendering(victim, kRenderFxGlowShell, 0, 127, 0, kRenderNormal, 10) ; set_task(0.5, "reset_glow", victim+BASE_TASK); message_begin(MSG_ONE,iconstatus,{0,0,0},victim); write_byte(2); // status (0=hide, 1=show, 2=flash) write_string("dmg_poison"); // sprite name write_byte(0); // red write_byte(255); // green write_byte(0); // blue message_end(); ff_damage(victim, poisoner, damage, "Poison"); } //-------------------------------------------------------------------------------------public reset_light(id) { id -= LIGHT_TASK; if ( !is_user_connected(id) ) return; if( MassStorage[id][armorstore] & ARMOR_HASTE ) set_pev(id, pev_maxspeed, 420.0);

else set_pev(id, pev_maxspeed, 320.0); if ( speed_stat[id] != 2 ) speed_stat[id] = 0; client_cmd(id,"-duck"); message_begin(MSG_ONE,gmsgScreenFade,{0,0,0},id); write_short(~0); write_short(~0); write_short(4096); write_byte(0); write_byte(0); write_byte(0); write_byte(0); message_end(); } //-------------------------------------------------------------------------------------public reset_glow(id) { id -= BASE_TASK; _set_rendering(id); } //-------------------------------------------------------------------------------------public reset_cast(id) { id -= BASE_TASK; massbool[id] = can_cast; } //-------------------------------------------------------------------------------------//==================================MENU'S====================================== ========= //-------------------------------------------------------------------------------------public showchoose(id) { id -= BASE_TASK; if ( MassStorage[id][curplayer] != 0 ) return; new menu = menu_create("\ySelect player:^n", "MenuCommand" ); menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_setprop(menu, } public MenuCommand(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } "Tidus", "1", 0); "Auron", "2", 0); "Wakka", "3", 0); "Lulu", "4", 0); "Yuna", "5", 0); "Rikku", "6", 0); MPROP_EXIT, MEXIT_ALL);

menu_display(id, menu, 0);

new data[6], iName[64]; new access, callback, key; menu_item_getinfo(menu, item, access, data,5, iName, 63, callback); key = str_to_num(data); MassStorage[id][curplayer] = key; menu_destroy(menu); return PLUGIN_HANDLED; } //-------------------------------------------------------------------------------------show_primary_menu(id) { new menu = menu_create("\yStorage System:^n", "storagecmd" ); menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_additem(menu, menu_additem(menu, "Current Weapon/Armor", "1", 0); "Change Weapon/Armor", "2", 0); "Toss Weapon/Armor", "3", 0); "Use Item", "4", 0); "Buy Item", "5", 0); "Sell Item", "6", 0); "Check level", "7", 0); "help motd", "8", 0);

//items will also be part of this menu menu_setprop(menu, MPROP_EXIT, MEXIT_ALL); menu_display(id, menu, 0); } public storagecmd(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], iName[64]; new access, callback, key; menu_item_getinfo(menu, item, access, data,5, iName, 63, callback); key = str_to_num(data); switch(key) { case 1: display_info(id); case 2: { menutype[id] = 1; change_menu(id); } case 3: { menutype[id] = 2; change_menu(id); } case 4: item_menu(id); case 5: itempurchase_menu(id);

case 6: sell_menu(id); case 7: level_up(id); //basicly runs a check and brings up lev el up menu if they can case 8: helpFF(id); } menu_destroy(menu); return PLUGIN_HANDLED; } //-------------------------------------------------------------------------------------display_info(id) { static temp[5], buffer[128]; get_abilities(temp, MassStorage[id][weaponstore]); switch(temp[0]) { case 1 .. 4: { formatex( buffer, sizeof buffer - 1, "^x01 Weapon:^x03 % s, %s, %s, %s", wepstring[temp[1]], wepstring[temp[2]], wepstring[temp[3]], wepstring[temp[4 ]]); } case 0: formatex( buffer, sizeof buffer - 1, "^x01 No Weapon Equ iped" ); default: formatex( buffer, sizeof buffer - 1, "^x01 Admin Weapon (Too many abilities to list!)" ); } message_begin(MSG_ONE, gmsgSayText, _,id); write_byte(id); write_string(buffer); message_end(); get_abilities(temp, MassStorage[id][armorstore]); switch(temp[0]) { case 1 .. 4: { formatex( buffer, sizeof buffer - 1, "^x04 Armor:^x03 %s , %s, %s, %s", armstring[temp[1]], armstring[temp[2]], armstring[temp[3]], armstring[temp[4 ]]); } case 0: formatex( buffer, sizeof buffer - 1, "^x04 No Armor Equi ped" ); default: formatex( buffer, sizeof buffer - 1, "^x04 Admin Armor( Too many abilities to list!)" ); } message_begin(MSG_ONE, gmsgSayText, _,id); write_byte(id); write_string(buffer); message_end(); } //********************************************CHANGE WEP/ARM******************** ********* change_menu(id) { new menu = menu_create("Weapon/Armor:^n^nWeapons:^n", "change_handler");

new temp[256], slots, abil1, abil2, abil3, abil4, x, string[10]; for(new i = 1; i < 11; i++) { num_to_str(i, string, 9); x = (i - 1) * 5; if ( backpack[id][x] == 0 ) { if ( i == 5 ) menu_additem(menu, "Empty^nArmors:", strin g, 0); else menu_additem(menu, "Empty", string, 0); continue; } slots = backpack[id][x]; abil1 = backpack[id][x+1]; abil2 = backpack[id][x+2]; abil3 = backpack[id][x+3]; abil4 = backpack[id][x+4]; if ( slots > 4 ) { if ( i < 6 ) format(temp, 255, "Admin Weapon(too many ab ilities to list)%i", slots); else format(temp, 255, "Admin Armor(too many abilities t o list)%i", slots); } else { if ( i < 6) format(temp, 255, "%s, %s, %s, %s", wepstrin g[abil1],wepstring[abil2], wepstring[abil3], wepstring[abil4] ); else format(temp, 255, "%s, %s, %s, %s", armstring[abil1 ],armstring[abil2], armstring[abil3], armstring[abil4] ); } if ( i == 5 ) add(temp, 255, "^nArmors:"); menu_additem(menu, temp, string, 0); } menu_setprop(menu, MPROP_EXIT, MEXIT_ALL); menu_display(id, menu, 0); } public change_handler(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], iName[64]; new access, callback, key, x; menu_item_getinfo(menu, item, access, data,5, iName, 63, callback); key = str_to_num(data);

switch(menutype[id]) { case 1: { x = PackStorage[id][key]; switch(key) { case 1 .. 5 : { PackStorage[id][key] = MassStorage[id][w eaponstore]; MassStorage[id][weaponstore] = x; backpack_load(id); //reinitialize o ur ability cache for each weapon } case 6 .. 10 : { PackStorage[id][key] = MassStorage[id][a rmorstore]; MassStorage[id][armorstore] = x; backpack_load(id); } } } case 2: { x = (key - 1) * 5; backpack[id][x] = 0; backpack[id][x+1] = 0; backpack[id][x+2] = 0; backpack[id][x+3] = 0; backpack[id][x+4] = 0; PackStorage[id][key] = 0; } } menu_destroy(menu); return PLUGIN_HANDLED; } //****************************************USE ITEMS***************************** ********* item_menu(id) { new menu = menu_create("Choose Item:^n^n", "item_handler"); static temp[10], menustring[256], i; for(i = 0; i < 51; i++ ) { if ( itemcount[id][i] ) { num_to_str(i, temp, 9); format(menustring, 255, "%i:%s - %s", itemcount[id][i], itemnamestring[i], itemhelpstring[i]); menu_additem(menu, menustring, temp, 0); } } if ( menu_items(menu) >= 1 ) { menu_setprop(menu, MPROP_EXIT, MEXIT_ALL); menu_display(id, menu, 0); } else {

menu_destroy(menu); client_print(id, print_chat, "%s item stock empty", prefix); } } public item_handler(id, menu, item) { if ( !is_user_connected(id) ) return PLUGIN_HANDLED; if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], iName[64]; new access, callback, key; menu_item_getinfo(menu, item, access, data,5, iName, 63, callback); key = str_to_num(data); if( itemcount[id][key] == 0 ) { client_print(id, print_chat, "%s You need at least one %s in ord er to use it.", itemnamestring[key]); return PLUGIN_HANDLED; } itemcount[id][key]--; use_item(id, key); menu_destroy(menu); return PLUGIN_HANDLED; } //******************************************PURCHASE ITEMS********************** ********* itempurchase_menu(id) { new menu = menu_create("Welcome to Oaka's:^n^n", "purchase_handler"); menu_additem( menu, "Potion : 50 gil", menu_additem( menu, "Hi-Potion : 500 gil", menu_additem( menu, "Antidote : 50 gil", menu_additem( menu, "Eye Drops : 50 gil", menu_additem( menu, "Echo Screen : 50 gil", menu_additem( menu, "Holy Water : 50 gil", menu_additem( menu, "Remedy : 1500 gil", menu_additem( menu, "Grenade : 300 gil", menu_setprop(menu, MPROP_EXIT, MEXIT_ALL); menu_display(id, menu, 0); "1", "2", "3", "4", "5", "6", "7", "8", 0 0 0 0 0 0 0 0 ); ); ); ); ); ); ); );

} public purchase_handler(id, menu, item) { if ( !is_user_connected(id) ) return PLUGIN_HANDLED; if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], iName[64]; new access, callback, key;

menu_item_getinfo(menu, item, access, data,5, iName, 63, callback); key = str_to_num(data); key--; if ( MassStorage[id][gilcount] >= buyitem[key] ) { if ( itemcount[id][buytoslot[key]] + 1 > 99 ) { client_print(id, print_chat, "%s You already have 99 %s' s", itemnamestring[buytoslot[key]] ); return PLUGIN_HANDLED; } else { itemcount[id][buytoslot[key]] += 1; MassStorage[id][gilcount] -= buyitem[key]; client_print(id, print_chat, "%s You just purchased a %s ", itemnamestring[buytoslot[key]] ); } } else client_print(id, print_chat, "%s You don't have enough to purchase a %s at this time.", itemnamestring[buytoslot[key]] ); menu_destroy(menu); return PLUGIN_HANDLED; } //********************************SELL ITEMS************************************ ********* sell_menu(id) { new menu = menu_create("Sell Your Item's:^n^n", "sell_handler"); static temp[10], menustring[256]; for(new i = 1; i < 52; i++ ) { num_to_str(i, temp, 9); format(menustring, 255, "%i:%s %i gil", itemcount[id][i-1], ite mnamestring[i-1], itemsellcount[i-1] ); menu_additem(menu, menustring, temp, 0); } menu_setprop(menu, MPROP_EXIT, MEXIT_ALL); menu_display(id, menu, 0); } public sell_handler(id, menu, item) { if ( !is_user_connected(id) ) return PLUGIN_HANDLED; if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], iName[64]; new access, callback, key; menu_item_getinfo(menu, item, access, data,5, iName, 63, callback); key = str_to_num(data); key -= 1;

if( itemcount[id][key] == 0 ) { client_print(id, print_chat, "%s You need at least one %s to sel l it.", itemnamestring[key]); return PLUGIN_HANDLED; } itemcount[id][key]--; gil_change(id, itemsellcount[key] ); menu_destroy(menu); return PLUGIN_HANDLED; } //-------------------------------------------------------------------------------------public localAddXP(id, vic, xp) { if ( !is_user_connected(id) ) return; if ( massbool[id] & blockmenu ) return; //prevent scripts from running till after everything has been loaded static playerxp, atk, vicdef, mult, temp, special; playerxp = MassStorage[id][stat_xp]; //after battle spoils if ( is_user_connected(vic) ) { //multiplier based on defferance atk = MassStorage[id][stat_lev]; vicdef = MassStorage[vic][stat_lev]; mult = 1; for( temp = 1; temp < 20; temp++) { if( ((atk + 10) * temp) < vicdef ) mult += 1; else break; } xp *= mult; //item stuff temp = random_num(1, 1000); etting an item special = 0; switch(temp) { case 1 .. 4: special = random_num(1, 13); ased items case 5 .. 8: special = random_num(38, 51); reflect,etc. case 9 .. 10: special = random_num(14, 37); ouse items } if ( temp <= 10 ) { temp = random_num(1, 4); if ( itemcount[id][special] + temp < 99 ) itemcount[id][ special] += temp; else itemcount[id][special] = 99; client_print(id, print_chat, "%s You just gained %i %s%s ", prefix, temp, itemnamestring[special], temp > 1 ? "'s": ""); } //weapon/armor stuff //powerh //haste, //1 out of a hundred chance of g

//cure b

temp = random_num(1, 20); switch(temp) { case 1 .. 4: give_wep(id, case 5 .. 7: give_wep(id, case 8 .. 9: give_wep(id, case 10: give_wep(id, 4); } temp = random_num(1, 20); switch(temp) { case 1 .. 4: give_arm(id, case 5 .. 7: give_arm(id, case 8 .. 9: give_arm(id, case 10: give_arm(id, 4); } }

1); 2); 3);

1); 2); 3);

//xp handling stuff if ( xp < 0 ) { if ( (playerxp - xp) > 0 ) MassStorage[id][stat_xp] -= xp; else MassStorage[id][stat_xp] = 0; } else { MassStorage[id][stat_xp] += xp; if ( (playerxp + xp) > get_pcvar_num(pcvars[level_count]) ) leve l_up(id); } } //-------------------------------------------------------------------------------------ff_heal(id, attacker, curepnts, bool:isitem = false) { if ( !is_user_alive(id) ) return; new maxhealth = MassStorage[id][stat_health]; if ( massbool[id] & dbl_hp ) maxhealth *= 2; new curhealth = UserHealth[id]; new Float:temp; if ( MassStorage[id][armorstore] & ARMOR_HP20 ) { temp = float(maxhealth); temp *= 1.2; maxhealth = floatround(temp); } if ( MassStorage[id][armorstore] & ARMOR_HP30 ) { temp = float(maxhealth); temp *= 1.3; maxhealth = floatround(temp); } if ( !(massbool[id] & zombie_stat) isitem ) { if ( (curhealth + curepnts) <= maxhealth ) { set_user_health(id, (curhealth + curepnts) ); } else set_user_health(id, maxhealth); } else ff_damage(id, attacker, curepnts, "Zombie Effect"); } ff_mp_change(id, curepnts) {

if ( !is_user_alive(id) ) return; new maxmp = MassStorage[id][stat_mp]; if ( massbool[id] & dbl_mp ) maxmp *= 2; new curarmor = UserArmor[id]; if ( curepnts < 0 ) { if ( (curepnts + curarmor) <= 0 ) set_user_armor(id, 0); else set_user_armor(id, (curepnts + curarmor)); return; } new Float:temp; if ( MassStorage[id][armorstore] & ARMOR_MP20 ) { temp = float(maxmp); temp *= 1.2; maxmp = floatround(temp); } if ( MassStorage[id][armorstore] & ARMOR_MP30 ) { temp = float(maxmp); temp *= 1.3; maxmp = floatround(temp); } if ( (curarmor + curepnts) <= maxmp ) { set_user_armor(id, (curarmor + curepnts) ); } else set_user_armor(id, maxmp); } //-------------------------------------------------------------------------------------ff_damage(id, attacker, damage, weaponDescription[], autokill = false, physical = false) { if ( !is_user_alive(id) !is_user_connected(attacker) ) return; if ( pev(id, pev_takedamage) == DAMAGE_NO ) return; //godmode if ( damage <= 0 ) return; //prly an overflow if ( physical && (massbool[id] & protect_status (MassStorage[id][armo rstore] & ARMOR_PROTECT)) ) damage /= 4; //cut normal weapon dmg down by 3/4 if ( !physical && (massbool[id] & shell_status (MassStorage[id][armor store] & ARMOR_SHELL)) ) damage /= 4; //cut magic dmg down by 3/4 if ( !(MassStorage[attacker][weaponstore] & WEP_BREAKDMG) && damage > 99 99 ) damage = 9999; if ( damage > 99999 ) damage = 99999; new userhp = UserHealth[id]; new victeam = _:cs_get_user_team(id); new atkteam = _:cs_get_user_team(attacker); new money = cs_get_user_money(attacker); overdrive[id] += (damage*30)/userhp; overdrive[attacker] += (damage*10)/MassStorage[id][stat_str]; if (userhp - damage <= 0 autokill ) { new bool:kill = false; if (id == attacker) {

kill = true; } else if (get_pcvar_num(pcvars[ff_pointer]) && victeam == atkteam ) { kill = true; localAddXP(attacker, id, -1); set_user_frags(attacker, get_user_frags(attacker) -1); client_print(attacker,print_center,"You killed a teammat e"); if (money != 0) cs_set_user_money(attacker,money - 150,1 ); gil_change( attacker, -150 ); } else if (victeam != atkteam) { kill = true; localAddXP(attacker, id, 1); set_user_frags(attacker, get_user_frags(attacker) + 1); if (money < 16000) cs_set_user_money(attacker,money + 30 0,1); gil_change( attacker, 150 ); } if (!kill) return; set_msg_block(gmsgDeathMsg, BLOCK_SET); ExecuteHamB(Ham_Killed, id, attacker, 2); set_msg_block(gmsgDeathMsg, BLOCK_NOT); message_begin(MSG_BROADCAST, gmsgDeathMsg); write_byte(attacker); write_byte(id); write_byte(0); write_string(weaponDescription); message_end(); new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], v team[10]; get_user_name(attacker, kname, 31); get_user_team(attacker, kteam, 9); get_user_authid(attacker, kauthid, 31); get_user_name(id, vname, 31); get_user_team(id, vteam, 9); get_user_authid(id, vauthid, 31); log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^ "%s^"", kname, get_user_userid(attacker), kauthid, kteam, vname, get_user_userid(id), vauthid, vteam, weaponDescription); } else { new bool:hurt = false; if (id == attacker) { hurt = true; } else if (get_pcvar_num(pcvars[ff_pointer]) && victeam == atkteam ) {

hurt = true; new name[33]; get_user_name(attacker,name,32); client_print(0,print_chat,"%s attacked a teammate",name) ; } else if (victeam != atkteam) { hurt = true; } if (!hurt) return; set_user_health(id, (userhp - damage)); new aOrigin[3]; get_user_origin(attacker, aOrigin); //Damage message message_begin(MSG_ONE, gmsgDamage, {0,0,0}, id); write_byte(0); // dmg_save write_byte(damage); // dmg_take write_long(0); // visibleDamageBits write_coord(aOrigin[0]); // damageOrigin.x write_coord(aOrigin[1]); // damageOrigin.y write_coord(aOrigin[2]); // damageOrigin.z message_end(); } } //-------------------------------------------------------------------------------------//==================================EVENTS====================================== ========= //-------------------------------------------------------------------------------------public health_change(id) { if ( !is_user_alive(id) is_user_bot(id) ) return; new userHp = read_data(1); UserHealth[id] = userHp; } //-------------------------------------------------------------------------------------public armor_change(id) { if ( !is_user_alive(id) is_user_bot(id) ) return; new userAp = read_data(1); UserArmor[id] = userAp; } //-------------------------------------------------------------------------------------public say_event(id) { if ( !get_pcvar_num(pcvars[on_off]) !is_user_connected(id) ) return P LUGIN_CONTINUE;

static said[25]; read_args(said,24); remove_quotes(said); //rather than accounting for / in each say command strip it if it's ther e if ( equali( said, "/", 1 ) ) copy( said, 24, said[1] ); if ( equali(said, "change",6) equali(said, "switch",6) ) { MassStorage[id][curplayer] = 0; MassStorage[id][stat_xp] = 0; overdrive[id] = 0; showchoose(id+BASE_TASK); return PLUGIN_HANDLED; } if ( equali(said, "ffmenu",6) ) { if ( massbool[id] & blockmenu ) { //w/o check a glitch is possible where items would duplicate or get deleted client_print(id, print_chat, "Please wait a few seconds while everything is reinitialzed"); return PLUGIN_HANDLED; } show_primary_menu(id); return PLUGIN_HANDLED; } if ( equali(said, "ffhelp", 6) ) { helpFF(id); return PLUGIN_HANDLED; } if ( equali(said, "use", 3) ) { say_item(id, said); return PLUGIN_HANDLED; } if ( equali(said, "choosestat", 10) ) { level_up(id); return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } //-------------------------------------------------------------------------------------public weapon_change(id) { if ( !get_pcvar_num(pcvars[on_off]) !is_user_alive(id) is_user_bot (id) ) return; new userWep = get_user_weapon(id); UserWeapon[id] = userWep; if ( get_pcvar_num(pcvars[block_dmg]) ) { switch(userWep) { case 2, 4, 6, 9, 25, 29, 31, 32: {} default: set_pev(id, pev_viewmodel2, ""); model for weapons since they deal no dmg } }

//empty

if ( massbool[id] & delay ) { set_pev(id, pev_maxspeed, 1.0); return; } if ( MassStorage[id][armorstore] & ARMOR_HASTE ) { set_pev(id, pev_maxspeed, 500.0); return; } switch(speed_stat[id]) { case 0: set_pev(id, pev_maxspeed, 320.0); case 1: set_pev(id, pev_maxspeed, 150.0); case 2: set_pev(id, pev_maxspeed, 450.0); } } //-------------------------------------------------------------------------------------public monitor_think(ent) { if ( !get_pcvar_num(pcvars[on_off]) ent != monitor ) return FMRES_IGN ORED; static limitbrk, maxhealth, maxarmor, id; for ( id = 1; id <= MAX_PLAYERS; id++ ) { if ( !is_user_alive(id) is_user_bot(id) ) continue; if ( massbool[id] & keydown ) magic_key(id); limitbrk = overdrive[id]; maxhealth = MassStorage[id][stat_health]; maxarmor = MassStorage[id][stat_mp]; if ( massbool[id] & dbl_hp ) maxhealth *= 2; if ( massbool[id] & dbl_mp ) maxarmor *= 2; set_hudmessage(0, 255, 255, 0.02, 0.76, 0, 0.0, 0.3, 0.0, 0.0); ShowSyncHudMsg(id, MonitorHudSync, "%s: HP:%d/%d MP:%d/%d Gil:%d ^n^nCurSpell:%s Str:%d Def:%d Mag:%d Mdef:%d^n^nOverdrive: %d%%", playerstring[M assStorage[id][curplayer]], UserHealth[id], maxhealth, UserArmor[id], maxarmor, MassStorage[ id][gilcount], magicname[weptomag[UserWeapon[id]]], MassStorage[id][stat_str],MassStorage[id][stat_def],MassStorage[ id][stat_magic],MassStorage[id][stat_mdef],limitbrk); } set_pev(ent, pev_nextthink, get_gametime() + 0.3); advert_think--; if ( advert_think <= 0 ) { advert_think = 800; client_print(0, print_center, "Welcome to %s, for help type out ffhelp either in console or say", PLUGIN); } return FMRES_HANDLED; } //-------------------------------------------------------------------------------------public deathfunct(id, attacker, shouldgib) {

if ( !get_pcvar_num(pcvars[on_off]) r_connected(attacker) ) return; localAddXP(attacker, id, 1);

!is_user_connected(id)

!is_use

if ( MassStorage[id][stat_xp] >= get_pcvar_num(pcvars[level_count]) ) level_up(id); } //-------------------------------------------------------------------------------------public Spawn_Event(id) { if ( !get_pcvar_num(pcvars[on_off]) !is_user_alive(id) ) return; new Float:temp; new health = get_user_health(id); new armor = get_user_armor(id); UserHealth[id] = health; //must be initialzed to avoid starting a t 0 UserArmor[id] = armor; new max_health = MassStorage[id][stat_health]; if ( MassStorage[id][armorstore] & ARMOR_HP20 ) { temp = float(max_health); temp *= 1.2; max_health = floatround(temp); } if ( MassStorage[id][armorstore] & ARMOR_HP30 ) { temp = float(max_health); temp *= 1.3; max_health = floatround(temp); } new max_mp = MassStorage[id][stat_mp]; if ( MassStorage[id][armorstore] & ARMOR_MP20 ) { temp = float(max_mp); temp *= 1.2; max_mp = floatround(temp); } if ( MassStorage[id][armorstore] & ARMOR_MP30 ) { temp = float(max_mp); temp *= 1.3; max_mp = floatround(temp); } new playerclass = MassStorage[id][curplayer]; if ( health < max_health ) set_user_health(id, max_health); if ( armor < max_mp ) set_user_armor(id, max_mp); if ( !playerclass ) set_task(3.0, "showchoose", id+BASE_TASK); set_task(0.2,"reset_light",id+LIGHT_TASK); //resets light(sleep/dar kness), and speed(normal/haste) massbool[id] = massbool[id] &~ protect_status; massbool[id] = massbool[id] &~ shell_status; massbool[id] = massbool[id] &~ reflect_status; massbool[id] = massbool[id] &~ mag_block; massbool[id] = massbool[id] &~ zombie_stat; massbool[id] = can_cast; massbool[id] = massbool[id] &~ fury_state; massbool[id] = massbool[id] &~ stars_stat; massbool[id] = massbool[id] &~ brkarm; massbool[id] = massbool[id] &~ brkwep; massbool[id] = massbool[id] &~ brkmag; massbool[id] = massbool[id] &~ brkmdef; massbool[id] = massbool[id] &~ dbl_hp;

massbool[id] = massbool[id] &~ dbl_mp; delay_effect(id, 0.1); speed_stat[id] = 0; if ( task_exists(POISON_TASK+id) ) remove_task(POISON_TASK+id); if ( task_exists(REGEN_TASK+id) && !(MassStorage[id][armorstore] & ARMOR _REGEN) ) remove_task(REGEN_TASK+id); if ( !task_exists(REGEN_TASK+id) && (MassStorage[id][armorstore] & ARMOR _REGEN) ) set_task(2.0, "regen", REGEN_TASK+id); set_task(1.0, "give_weapons", id+BASE_TASK); if ( massbool[id] & blockmenu ) initial_load(id); //just in case l oad data was interupted by spawn } //-------------------------------------------------------------------------------------public damagefunct(id, blank, attacker, Float:damage, dmgtype) { if ( !get_pcvar_num(pcvars[on_off]) !is_user_alive(id) !is_user_al ive(attacker) ) return; if ( attacker == id ) return; static weapon; weapon = get_user_weapon(attacker); if ( dmgtype & DMG_BULLET && weapon != CSW_KNIFE ) { //block the dmg if a gun if ( get_pcvar_num(pcvars[block_dmg]) ) SetHamParamFloat(4, 0.0) ; return; } if ( get_user_weapon(attacker) != CSW_KNIFE ) return; extra weapon stuff on magics, etc //don't run the

if ( _:cs_get_user_team(id) != _:cs_get_user_team(attacker) ) return; overdrive[id] += floatround((damage*30.0)/float(UserHealth[id])); overdrive[attacker] += floatround((damage*10.0)/float(MassStorage[id][st at_str])); static atk_str, atk_mag, vic_def, vic_mdef, Float:tempval; tempval = float(MassStorage[attacker][stat_str]); if ( MassStorage[attacker][weaponstore] & WEP_STRENGTH10 ) tempval *= 1. 1; if ( MassStorage[attacker][weaponstore] & WEP_STRENGTH20 ) tempval *= 1. 2; if ( massbool[attacker] & brkwep ) tempval = 0.0; atk_str = floatround(tempval); tempval = float(MassStorage[id][stat_def]); if ( MassStorage[id][armorstore] & ARMOR_DEF10 ) tempval *= 1.1; if ( MassStorage[id][armorstore] & ARMOR_DEF20 ) tempval *= 1.2; if ( massbool[id] & brkarm ) tempval = 0.0; vic_def = floatround(tempval); tempval = float(MassStorage[attacker][stat_magic]); if ( MassStorage[attacker][weaponstore] & WEP_MAGIC10 ) tempval *= 1.1; if ( MassStorage[attacker][weaponstore] & WEP_MAGIC20 ) tempval *= 1.2; if ( massbool[attacker] & brkmag ) tempval = 0.0; atk_mag = floatround(tempval);

tempval = float(MassStorage[id][stat_mdef]); if ( MassStorage[id][armorstore] & ARMOR_MDEF10 ) tempval *= 1.1; if ( MassStorage[id][armorstore] & ARMOR_MDEF20 ) tempval *= 1.2; if ( massbool[id] & brkmdef ) tempval = 0.0; vic_mdef = floatround(tempval); static pctchance, extradmg; pctchance = random_num((atk_str/2), atk_str); extradmg = 0; //extra dmg based on atk v def if ( get_pcvar_num(pcvars[factoratk]) ) { //this is the formula used in actuall ffx game, overflow is poss ible if STAT_MAX is set too high. static Float:true_atk, Float:true_def; true_atk = (((((atk_str*atk_str*atk_str)/32) + 32) * (damage / 1 6)) / 730); true_def = ((((vic_def - 280.4)*(vic_def - 280.4)) / 110) + 16); extradmg = floatround(true_atk * true_def); if ( extradmg > 0 ) ff_damage(id, attacker, extradmg, "Weapon", _, true); //run this as extra dmg so it'll factor in protect status etc in stead of changing the dmg extradmg = 0; //reset variable for our elemental stuff } //pierce if ( MassStorage[attacker][weaponstore] & WEP_PIERCE ) vic_def = 0; //counter if ( MassStorage[id][weaponstore] & WEP_COUNTER ) ff_damage(attacker, id, floatround(0.25*damage), "Counter Attack ", _, true); //gillionaire if ( MassStorage[attacker][weaponstore] & WEP_GILLIONAIRE ) gil_change( attacker, 350 ); //pickpocket if ( MassStorage[attacker][armorstore] & ARMOR_PICKPOCKET ) { gil_change( attacker, 150 ); gil_change( id , -150 ); } //masterthief if ( MassStorage[attacker][armorstore] & ARMOR_MASTERTHIEF ) { static vic_weapon, trash; vic_weapon = get_user_weapon(id, trash, trash); cs_set_user_bpammo(id, vic_weapon, cs_get_user_bpammo(id, vic_we apon) - 10); cs_set_user_bpammo(attacker, vic_weapon, cs_get_user_bpammo(atta cker, vic_weapon) + 10); } //fire if ( MassStorage[attacker][weaponstore] & WEP_FIRESTRIKE ) {

extradmg += (atk_mag - ( vic_mdef * 2 ) ); if ( MassStorage[id][armorstore] & ARMOR_EATFIRE ) extradmg *= 1; extradmg > 1 ? ff_damage(id, attacker, extradmg, "Fire Strike") : ff_heal(id, attacker, extradmg); extradmg = 0; set_fire(id); } //blizzard if ( MassStorage[attacker][weaponstore] & WEP_ICESTRIKE ) { extradmg += (atk_mag - ( vic_mdef * 2 ) ); if ( MassStorage[id][armorstore] & ARMOR_EATICE ) extradmg *= -1 ; extradmg > 1 ? ff_damage(id, attacker, extradmg, "Blizzard Strik e") : ff_heal(id, attacker, extradmg); extradmg = 0; _set_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 30); set_task(10.0, "reset_glow", id+BASE_TASK); } //water if ( MassStorage[attacker][weaponstore] & WEP_WATERSTRIKE ) { extradmg += (atk_mag - ( vic_mdef * 2 ) ); if ( MassStorage[id][armorstore] & ARMOR_EATWATER ) extradmg *= -1; extradmg > 1 ? ff_damage(id, attacker, extradmg, "Water Strike") : ff_heal(id, attacker, extradmg); extradmg = 0; set_fire(id, 1); } //lightning if ( MassStorage[attacker][weaponstore] & WEP_LIGHTNINGSTRIKE ) { extradmg += (atk_mag - ( vic_mdef * 2 ) ); if ( MassStorage[id][armorstore] & ARMOR_EATLIGHTNING ) extradmg *= -1; extradmg > 1 ? ff_damage(id, attacker, extradmg, "Lightning Stri ke") : ff_heal(id, attacker, extradmg); extradmg = 0; set_lightning(id); } //darkstrike if ( MassStorage[attacker][weaponstore] & WEP_DARKSTRIKE ) if ( !(MassStorage[id][armorstore] & ARMOR_DARKPROOF ARMOR_RIBBO N) ) if ( pctchance > vic_def ) { static idiff; idiff = pctchance - vic_def; if ( idiff >= 256 ) idiff = 255; s impossible assmuming STAT_MAX is left to default value darkness_effect(id, idiff); }

//this i

//silence if ( MassStorage[attacker][weaponstore] & WEP_SILENCESTRIKE ) if ( !(MassStorage[id][armorstore] & ARMOR_SILENCEPROOF ARMOR_RI BBON) ) if ( pctchance > vic_def ) massbool[id] = mag_block; //sleep if ( MassStorage[attacker][weaponstore] & WEP_SLEEPSTRIKE ) if ( !(MassStorage[id][armorstore] & ARMOR_SLEEPPROOF ARMOR_RIBB ON) ) if ( pctchance > vic_def ) sleep_effect(id); //poison if ( MassStorage[attacker][weaponstore] & WEP_POISONSTRIKE ) if ( !(MassStorage[id][armorstore] & ARMOR_POISONPROOF ARMOR_RIB BON) ) if ( pctchance > vic_def ) { static args[2]; args[0] = attacker; args[1] = id; set_task(10.0, "poisoned", POISON_TASK+id, args, 2, "b", 1); } //death if ( MassStorage[attacker][weaponstore] & WEP_DEATHSTRIKE ) if ( !(MassStorage[id][armorstore] & ARMOR_DEATHPROOF ARMOR_RIBB ON) ) if ( pctchance / 2 > vic_def ) ff_damage(id, attacker, 1, "Deathstrike", true); //zombie if ( MassStorage[attacker][weaponstore] & WEP_ZOMBIESTRIKE ) if ( !(MassStorage[id][armorstore] & ARMOR_ZOMBIEPROOF ARMOR_RIB BON) ) if ( pctchance > vic_def ) massbool[id] = zombie_stat; //slow if ( MassStorage[attacker][weaponstore] & WEP_SLOWSTRIKE ) if ( !(MassStorage[id][armorstore] & ARMOR_SLOWPROOF ARMOR_RIBBO N ARMOR_HASTE) ) if ( pctchance > vic_def ) { set_pev(id, pev_maxspeed, 220.0); speed_stat[id] = 1; } //sensor if ( MassStorage[attacker][weaponstore] & WEP_SENSOR ) scan_effect(attacker, id); } //***************************************************HELP MOTD****************** ********* public helpFF(id) { if ( !get_pcvar_num(pcvars[on_off]) ) return;

console_print(id, "===================================================== "); console_print(id, "%s HELP FILE", PLUGIN); console_print(id, "Plugin Author: %s", AUTHOR); console_print(id, "===================================================== ="); console_print(id, "USEFULL SAY COMMANDS:"); console_print(id, "ffmenu:brings up the main menu for weapon/armor stora ge, items, etc."); console_print(id, "switch:brings up a menu to change your player"); console_print(id, "Xp Based Mod(i.e. kill people in order to improve). When you gain a specific amount of kills"); console_print(id, "a menu will pop up allowing you to choose to improve 1 of 6 stats, or attempt to learn magic."); console_print(id, "When Learn Magic is choosin, you will learn 1 random magic based on a specific formuala"); console_print(id, "Keep in mind that the chance is dependant on several stats, and if you learn a magic you already know"); console_print(id, "Then you won't learn anything, so it is not wise to a lways choose learn magic when you first start out."); console_print(id, "To use magic you must bind a key to +magic(^"bind <ke y> +magic^" w/o quotes in console) and push that key"); console_print(id, "while holding the corresponding weapon(note that you are automaticly givin the weapon upon spawn and learning."); console_print(id, "Overdrive is also used with +magic key while holding knife."); console_print(id, "Weapon's which are givin based on random chance only work for the knife. Armor(also gained randomly) work's at all times"); console_print(id, "Your weapon and armor will only have a max of 4 abili ties at one time(unless it's an admin item)."); console_print(id, "To check current weapon/armor, use ffmenu:Current Wea pon/Armor(choice 1). Due to the 4 ability limit"); console_print(id, "It is suggested that you change(using ffmenu:Change W eapon/Armor) to an emptly sloted weapon to gain new abilities"); } //-------------------------------------------------------------------------------------//================STOCKS, unless an api is needed no reason to tag them as such= ========= //-------------------------------------------------------------------------------------bittotal(num) { if ( num == 0 ) return 0; static x, value; value = 0; for( x = 0; x < 30; x++) //(1<<29) is the greatest bit this funct ion would ever need if ( (1<<x) & num ) value += 1; return value; } //-------------------------------------------------------------------------------------bool:ff_in_sight(index, index2) { static Float:point[3], Float:angles[3]; pev(index2, pev_origin, point); pev(index, pev_angles, angles); engfunc(EngFunc_MakeVectors, angles);

global_get(glb_v_forward, angles); angles[2] = 0.0; static Float:origin[3], Float:diff[3], Float:norm[3]; pev(index, pev_origin, origin); xs_vec_sub(point, origin, diff); diff[2] = 0.0; xs_vec_normalize(diff, norm); static Float:dot, Float:fov; dot = xs_vec_dot(norm, angles); pev(index, pev_fov, fov); if (dot >= floatcos(fov * M_PI / 360)) { //they are in viewcone, but now we need to make sure theres no w alls between them. static trace = 0; engfunc(EngFunc_TraceLine, origin, point, IGNORE_MONSTERS, 0, tr ace); static Float:fraction; get_tr2(trace, TR_flFraction, fraction); if (fraction == 1.0) return true; } return false; } //-------------------------------------------------------------------------------------ff_get_players(players[MAX_PLAYERS], &pnum, const flags[]="", team=-1) { static total, bitwise, i; total = 0, bitwise = read_flags(flags); for( i = 1; i <= MAX_PLAYERS; i++) if(is_user_connected(i)) { if( is_user_alive(i) ? (bitwise & 2) : (bitwise & 1)) continue; if( is_user_bot(i) ? (bitwise & 4) : (bitwise & 8)) continue; if( (bitwise & 16) && team != -1 && _:cs_get_user_team(i ) != team) continue; if( (bitwise & 32) && (MassStorage[i][armorstore] & ARMO R_RIBBON) ) continue; // & 64 if( (bitwise & 128) && is_user_hltv(i)) continue; if( (bitwise & 256) && team != -1 && _:cs_get_user_team( i) == team) continue; players[total] = i; total++; } pnum = total; return 1; }

//-------------------------------------------------------------------------------------get_abilities(abil[5], bitstorage) { static n, i, total; n = 1, total = 0; for(i = 0; i < NUM_OF_ARMOR; i++) if ( (1<<i) & bitstorage ) { total++; if ( n <= 4 ) abil[n++] = i+1; } abil[0] = total; return 1; } //-------------------------------------------------------------------------------------_set_rendering(index, fx=kRenderFxNone, r=255, g=255, b=255, render=kRenderNorma l, amount=16) { set_pev(index, pev_renderfx, fx); static Float:RenderColor[3]; RenderColor[0] = float(r); RenderColor[1] = float(g); RenderColor[2] = float(b); set_pev(index, pev_rendercolor, RenderColor); set_pev(index, pev_rendermode, render); set_pev(index, pev_renderamt, float(amount)); return 1; } //-------------------------------------------------------------------------------------gil_change(index, amnt) { if ( !is_user_connected(index) amnt == 0 ) return; static curgil; curgil = MassStorage[index][gilcount]; //prevents overflow if (amnt > 0 && curgil + amnt < curgil) MassStorage[index][gilcount] = 2 147483647; else if (amnt < 0 && (curgil + amnt < -1000000 )) MassStorage[index][gilcount] = -1000000; else MassStorage[index][gilcount] += amnt; } //-------------------------------------------------------------------------------------//==========================ADMIN COMMAND HANDLERS============================== ========= //-------------------------------------------------------------------------------------public adminSetXP(id,level,cid) { if (!cmd_access(id,level,cid,3)) { curgil + amnt > curgil

console_print(id,"You have no access to that command"); return PLUGIN_HANDLED; } if (read_argc() > 3) { console_print(id,"%s Too many arguments supplied. Do not use a s pace in the name.", prefix); console_print(id,"%s You only need to put in a partial name to u se this command.", prefix); return PLUGIN_HANDLED; } new arg[32], arg2[32]; new name2[32], authid2[35]; read_argv(1,arg,31); read_argv(2,arg2,31); if ( equali(arg, "@clearall", 9) ) { if ( equali(arg2, "@stats", 6) ) { console_print(id,"%s cleaning stats file", prefix); cleanXP(1); } else if ( equali(arg2, "@store", 6) ) { console_print(id,"%s cleaning weapon storage file", pref ix); cleanXP(2); } else if ( equali(arg2, "@items", 6) ) { console_print(id, "%s cleaning item storage file", prefi x); cleanXP(3); } else { console_print(id,"%s cleaning all files", prefix); cleanXP(4); } return PLUGIN_HANDLED; } if ( !(isdigit(arg2[0]) { console_print(id,"%s Second argument must be a XP value.", prefi x); return PLUGIN_HANDLED; } get_user_name(id,name2,31); get_user_authid(id,authid2,34); new xp = str_to_num(arg2); if (arg[0]=='@'){ new players[32], inum; if (equali("T",arg[1])) { copy(arg[1],31,"TERRORIST"); } if (equali("ALL",arg[1])) { get_players(players,inum); } else { get_players(players,inum,"eg",arg[1]); (equal(arg2[0],"-",1) && isdigit(arg2[1]))) )

} if (inum == 0) { console_print(id,"No clients in such team"); return PLUGIN_HANDLED; } for(new a = 0;a < inum; a++) { localAddXP(players[a], 0, xp); } switch(get_cvar_num("amx_show_activity")) { case 2: client_print(0,print_chat,"ADMIN %s: set %d XP o n %s players",name2,xp,arg[1]); case 1: client_print(0,print_chat,"ADMIN: set %d XP on % s players",xp,arg[1]); } console_print(id,"%s set %d XP on %s players",xp,arg[1]); } else { new player = cmd_target(id,arg,2); if (!player) return PLUGIN_HANDLED; localAddXP(player, 0, xp); new name[32], authid[35]; get_user_name(player,name,31); get_user_authid(player,authid,34); switch(get_cvar_num("amx_show_activity")) { case 2: client_print(0,print_chat,"ADMIN %s: set %d XP o n %s",name2,xp,name); case 1: client_print(0,print_chat,"ADMIN: set %d XP on % s",xp,name); } console_print(id,"%s Client ^"%s^" has been set to %d XP",name,x p); } return PLUGIN_HANDLED; } //-------------------------------------------------------------------------------------public adminSetSTAT(id,level,cid) { if (!cmd_access(id,level,cid,4)) { console_print(id,"You have no access to that command"); return PLUGIN_HANDLED; } if (read_argc() > 4) { console_print(id,"%s Too many arguments supplied. Do not use a s pace in the name.", prefix); console_print(id,"%s You only need to put in a partial name to u se this command.", prefix); return PLUGIN_HANDLED; } static arg[32], arg2[32], arg3[32], name2[32], authid2[35]; read_argv(1,arg,31); read_argv(2,arg2,31); read_argv(3,arg3,31); if ( !(isdigit(arg3[0]) (equal(arg3[0],"-",1) && isdigit(arg3[1]))) )

{ console_print(id,"%s Third argument must be a numerical value.", prefix); return PLUGIN_HANDLED; } get_user_name(id,name2,31); get_user_authid(id,authid2,34); new stat = str_to_num(arg3); new targetstat = 0; if ( arg2[0] == '@' ) { if ( arg2[1] == 's' ) targetstat = 1; else if ( arg2[1] == 'd' ) targetstat = 2; else if ( arg2[1] == 'a' ) targetstat = 5; else if ( arg2[1] == 'g' ) targetstat = 8; else { if ( arg2[2] == 'a' ) targetstat = 3; else if ( arg2[2] == 'd' ) targetstat = 4; } } else { if (arg2[0]=='h') targetstat = 6; else if(arg2[0]=='m') targetstat = 7; } if (targetstat == 0 ) { console_print(id,"No Such Modifiable stat"); return PLUGIN_HANDLED; } if (arg[0]=='@'){ static players[32], inum; if (equali("T",arg[1])) { copy(arg[1],31,"TERRORIST"); } if (equali("ALL",arg[1])) { get_players(players,inum); } else { get_players(players,inum,"eg",arg[1]); } if (inum == 0) { console_print(id,"No clients in such team"); return PLUGIN_HANDLED; } static targ, a; for(a = 0;a < inum; a++) { targ = players[a]; switch(targetstat) { case 1: MassStorage[targ][stat_str] = stat; case 2: MassStorage[targ][stat_def] = stat; case 3: MassStorage[targ][stat_magic] = stat; case 4: MassStorage[targ][stat_mdef] = stat; case 5: { MassStorage[targ][stat_str] = stat; MassStorage[targ][stat_def] = stat; MassStorage[targ][stat_magic] = stat; MassStorage[targ][stat_mdef] = stat;

} case 6: MassStorage[targ][stat_health] = stat; case 7: MassStorage[targ][stat_mp] = stat; case 8: MassStorage[targ][gilcount] = stat; } } check_max(targ); switch(get_cvar_num("amx_show_activity")) { case 2: client_print(0,print_chat,"ADMIN %s: set %d %s o n %s players",name2,stat,statstring[targetstat],arg[1]); case 1: client_print(0,print_chat,"ADMIN: set %d %s on % s players",stat,statstring[targetstat],arg[1]); } console_print(id,"%s set %d %s on %s players",stat,statstring[ta rgetstat],arg[1]); } else { new player = cmd_target(id,arg,2); if (!player) return PLUGIN_HANDLED; switch(targetstat) { case 1: MassStorage[player][stat_str] = stat; case 2: MassStorage[player][stat_def] = stat; case 3: MassStorage[player][stat_magic] = stat; case 4: MassStorage[player][stat_mdef] = stat; case 5: { MassStorage[player][stat_str] = stat; MassStorage[player][stat_def] = stat; MassStorage[player][stat_magic] = stat; MassStorage[player][stat_mdef] = stat; } case 6: MassStorage[player][stat_health] = stat; case 7: MassStorage[player][stat_mp] = stat; case 8: MassStorage[player][gilcount] = stat; } check_max(player); static name[32], authid[35]; get_user_name(player,name,31); get_user_authid(player,authid,34); switch(get_cvar_num("amx_show_activity")) { case 2: client_print(0,print_chat,"ADMIN %s: set %d %s o n %s",name2,stat,statstring[targetstat],name); case 1: client_print(0,print_chat,"ADMIN: set %d %s on % s",stat,statstring[targetstat],name); } console_print(id,"%s Client ^"%s^" has been set to %d %s",name,s tat,statstring[targetstat]); } return PLUGIN_HANDLED; } //-------------------------------------------------------------------------------------public adminSetMAGIC(id,level,cid) { if (!cmd_access(id,level,cid,3)) { console_print(id,"You have no access to that command"); return PLUGIN_HANDLED; }

if (read_argc() > 3) { console_print(id,"%s Too many arguments supplied. Do not use a s pace in the name.", prefix); console_print(id,"%s You only need to put in a partial name to u se this command.", prefix); return PLUGIN_HANDLED; } static arg[32], arg2[32]; static name2[32], authid2[35]; read_argv(1,arg,31); read_argv(2,arg2,31); get_user_name(id,name2,31); get_user_authid(id,authid2,34); new bitnum = read_flags(arg2); if (arg[0]=='@'){ static players[32], inum; if (equali("T",arg[1])) { copy(arg[1],31,"TERRORIST"); } if (equali("ALL",arg[1])) { get_players(players,inum); } else { get_players(players,inum,"eg",arg[1]); } if (inum == 0) { console_print(id,"No clients in such team"); return PLUGIN_HANDLED; } static temp, a; for(a = 0;a < inum; a++) { temp = players[a]; MassStorage[temp][magicstore] = bitnum; set_task(1.0, "mag_load", temp+BASE_TASK); } console_print(id,"%s set %d on %s players magic",bitnum,arg[1]); } else { new player = cmd_target(id,arg,2); if (!player) return PLUGIN_HANDLED; MassStorage[player][magicstore] = bitnum; set_task(1.0, "mag_load", player+BASE_TASK); static name[32], authid[35]; get_user_name(player,name,31); get_user_authid(player,authid,34); console_print(id,"%s Client ^"%s^" magic has been set to %d",nam e,bitnum); } return PLUGIN_HANDLED; } //--------------------------------------------------------------------------------------

public adminSetWEAPON(id,level,cid) { if (!cmd_access(id,level,cid,3)) { console_print(id,"You have no access to that command"); return PLUGIN_HANDLED; } if (read_argc() > 3) { console_print(id,"%s Too many arguments supplied. Do not use a s pace in the name.", prefix); console_print(id,"%s You only need to put in a partial name to u se this command.", prefix); return PLUGIN_HANDLED; } new arg[32], arg2[32]; new name2[32], authid2[35]; read_argv(1,arg,31); read_argv(2,arg2,31); get_user_name(id,name2,31); get_user_authid(id,authid2,34); new bitnum = read_flags(arg2); if (arg[0]=='@'){ new players[32], inum; if (equali("T",arg[1])) { copy(arg[1],31,"TERRORIST"); } if (equali("ALL",arg[1])) { get_players(players,inum); } else { get_players(players,inum,"eg",arg[1]); } if (inum == 0) { console_print(id,"No clients in such team"); return PLUGIN_HANDLED; } new temp; for(new a = 0;a < inum; a++) { temp = players[a]; MassStorage[temp][weaponstore] = bitnum; } console_print(id,"%s set %d on %s players weapon",bitnum,arg[1]) ; } else { new player = cmd_target(id,arg,2); if (!player) return PLUGIN_HANDLED; MassStorage[player][weaponstore] = bitnum; new name[32], authid[35]; get_user_name(player,name,31); get_user_authid(player,authid,34); console_print(id,"%s Client ^"%s^" weapon has been set to %d",na me,bitnum);

} return PLUGIN_HANDLED; } //-------------------------------------------------------------------------------------public adminSetARMOR(id,level,cid) { if (!cmd_access(id,level,cid,3)) { console_print(id,"You have no access to that command"); return PLUGIN_HANDLED; } if (read_argc() > 3) { console_print(id,"%s Too many arguments supplied. Do not use a s pace in the name.", prefix); console_print(id,"%s You only need to put in a partial name to u se this command.", prefix); return PLUGIN_HANDLED; } new arg[32], arg2[32]; new name2[32], authid2[35]; read_argv(1,arg,31); read_argv(2,arg2,31); get_user_name(id,name2,31); get_user_authid(id,authid2,34); new bitnum = read_flags(arg2); if (arg[0]=='@'){ new players[32], inum; if (equali("T",arg[1])) { copy(arg[1],31,"TERRORIST"); } if (equali("ALL",arg[1])) { get_players(players,inum); } else { get_players(players,inum,"eg",arg[1]); } if (inum == 0) { console_print(id,"No clients in such team"); return PLUGIN_HANDLED; } new temp; for(new a = 0;a < inum; a++) { temp = players[a]; MassStorage[temp][armorstore] = bitnum; } console_print(id,"%s set %d on %s players armor",bitnum,arg[1]); } else { new player = cmd_target(id,arg,2); if (!player) return PLUGIN_HANDLED; MassStorage[player][armorstore] = bitnum; new name[32], authid[35]; get_user_name(player,name,31);

get_user_authid(player,authid,34); console_print(id,"%s Client ^"%s^" armor has been set to %d",nam e,bitnum); } return PLUGIN_HANDLED; }

Das könnte Ihnen auch gefallen