Jump to content

WillJocker

Members
  • Posts

    11
  • Joined

  • Last visited

Everything posted by WillJocker

  1. in the first drop looks like this:can adjust for the first one to appear, for example: Drop available now after passing the 60s it looks like this and counting negative
  2. Hello @Emistry! good day! How do I add a command, example: @check, and the command says how much time is left for a new drop? plss
  3. Nice nice nice! very nice please, is there a way to change it not to count in the mvp rank? inside this room
  4. Hi! Could you please adjust this script so that instead of zenny you need to use a certain item to invoke MVP? Thanks
  5. DROP TABLE IF EXISTS `reward_codes`; DROP TABLE IF EXISTS `reward_logs`; CREATE TABLE IF NOT EXISTS `reward_codes` ( `promo` VARCHAR(26) NOT NULL DEFAULT '', `nameid` INT(11) UNSIGNED NOT NULL DEFAULT '0', `item_name` VARCHAR(50) NOT NULL DEFAULT '', `amount` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0', `time_created` DATETIME NOT NULL DEFAULT '00-00-0000 00:00:00', `limit` INT(10) UNSIGNED NOT NULL DEFAULT '0', `pool` INT(10) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`promo`) ) ENGINE = MYISAM; CREATE TABLE IF NOT EXISTS `reward_logs` ( `account_id` int(11) unsigned NOT NULL default '0', `last_ip` BINARY( 9 ) NOT NULL, `code` VARCHAR( 26 ) NOT NULL, `redeem_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `claim` INT( 10 ) NOT NULL, PRIMARY KEY (`code`) ) ENGINE = MYISAM; error in database, #1067 - Valor padrão (default) inválido para 'time_created' invalid format `time_created` DATETIME NOT NULL DEFAULT '00-00-0000 00:00:00', . Help plis?
  6. Can you make this ds available for the current version of the emulator?
  7. Can you help me please? I'm with the ( ) ARENA MASTER ... but it's not counting the kill ranking, only death, and it's giving an error in the map-server.1.6 but it's not counting the kill ranking, only death, and it's giving an error in the map-server.. print, please help! //===== rAthena Script ======================================= //= Arena Master //===== By =================================================== //= llchrisll //===== Version ============================================== //= 1.0 - Initial Version // Added Multi Kill & SoundEffects // Added Bounty & Promotion Feature // Fully tested & Rewritten most of the code // - Since it didn't wanted to work like I wanted // - Couldn't test the Party PvP option though. // Added a bonus at the bounty feature // - If an player gains a "$@bty_bon_start" spree, "$@bty_bonus" // will be given to the player, who kill him/her. //= 1.1 - Fixed an Bounty bug - Thanks to raijin91 // = Also the bounty bonus wasn't added, kinda forgot that it seems // - Changed the First Blood part // - Changed the Chat blocking part // - Shorted the sphree part a bit, still testing it. // - Added an Cost Multiplier for the shop to adjust the prices for Mid Rate and higher Servers. // - Added another function to get the map users in each room and each pvp. //= 1.2 - Compatible with rAthena // - Fixed some bugs //= 1.3 - Made the Sphree Announcer dynamically // - Made modification regarding the sphree ranking, removed doPromote; function // - Shorted the ranking display choices //= 1.4 - Moved writeStats; into the kill part, bug with Logout prevented from saving in ranking // - Fixed an bug with "First Blood" announcer // - Updated the MvP Ranker to rAthena, @getmonsterinfo has an check for MvP EXP now // - Removed limitation to MvP Arena, against every MvP useable now // - Fixed Ranking bug, didn't save Kills and stuff correctly. // - Added an addtional Player Counter for each PvP Room // - Added Class Limitation regarding 3rd Jobs // - Fixed an bug with Auto-Resurrect on Deathmatch Maps // - Fixed another Ranking bug, didn't display correctly //= 1.5 - Added Custom Bounty Map Feature, see line around '861' // - Added to the Bounty Hunter an Locater, which locates the player... // - Fixed an bug about the Bounty Hunter, forgot to reset the @hunt variable // - Removed First Blood completely // - Removed Chat Block part completely + OnPCMapLoadEvent // - Fixed an Arena Shop bug by using $@arena_pay = 2 (Permanent Price Array) - Thanks to Lelantos for the bug report // - Rewrote the whole check at the Party PvP, also fixxed the check for // online party member counting > misplaced the variables for "isloggedin" ... - Thanks to Lelantos for the bug report //= 1.6 - Reduced PvP Rooms by adding Map Rotation Settings; Fixed Maps + Random Map each Day + Specific Map on an specific Day // - Removed the Player Limitation except Party PvP // - Reduced GvG Maps to 3 // - Removed the functions getPvPMapUsers and getPartyMapUsers // - Added an announcer on Room Entry // - Added in Party PvP an display how many parties are in which room before joining // - Fixed minor bugs // - Exchanged #CASHPOINTS Reward with Custom Variable Support, you can decide now // - Modified the Arena Shop Multiplier by using an array to decide it for each Item seperatly // - Moved the Arena Shop Config to the Arena Master NPC and made $@arena_ to .arena_ or .@arena_ variables //= 1.7 - Fixed PvP KIll Announcer and Kill display message // - Changed `hscore` to `hstreak` (confused people) // - Fixed typo at PvP Deathmatch warp "$dmpvp$" > "$@dmpvp$" // - Added some lines for the dynamic Map setting // - Fixed a typo in mapannounce (Thanks to Questune09 for the bug report) //= 1.8 - Moved the writeStats use on killing to when the player dies or logs out (lessens SQL usage) // - Added OnPCLogoutEvent seperately // - Removed some left over messages I missed to delete with last update // - Removed MvP Ranker // - Fixed an issue the Shop, which made it possible buy items without cost //===== Tested With ========================================== //= rAthena 03/29/2021 Revision //= GIT Hash: 47c471e3d0e7997ae605ebf45760349f3b25d365 //===== Description ========================================== //= PvP / GvG Arenas with ranking ladder //= PvP Types: // - Normal // - Dispell: You'll be dispelled on Room entry. // - Deathmatch: You'll be auto resurrect when you die. // If you type @die, get comaed and similar, you'll be warped to your save point. // - Party PvP: 2vs2, 3vs3, 4vs4, 5vs5 // ----------------------------------------------- //= GvG: 3 Arenas, the default guild_vs1 - guild_vs3. //===== Comments & Credits ============================================= // = Thanks to Lelantos for the idea of the Custom Bounty Map Feature // = Thanks to Vayrus for the bug reports. //===== MySQL Entries ======================================== /* // v1.0 DROP TABLE IF EXISTS `arena_master`; CREATE TABLE `arena_master` ( `char_id` int(10) unsigned NOT NULL, `kills` smallint(5) unsigned DEFAULT '0', `death` smallint(5) unsigned DEFAULT '0', `hstreak` smallint(5) unsigned DEFAULT '0', `bounty` smallint(5) unsigned DEFAULT '0', `bounty_pts` smallint(5) unsigned DEFAULT '0', `killer` smallint(5) unsigned DEFAULT '0', `domi` smallint(5) unsigned DEFAULT '0', `mega` smallint(5) unsigned DEFAULT '0', `unstopp` smallint(5) unsigned DEFAULT '0', `wicked` smallint(5) unsigned DEFAULT '0', `monster` smallint(5) unsigned DEFAULT '0', `godlike` smallint(5) unsigned DEFAULT '0', `holys` smallint(5) unsigned DEFAULT '0', PRIMARY KEY (`char_id`) ) ENGINE=MyISAM; */ //============================================================ // ================= Arena Master ================== // prontera,164,163,5 script Arena Master 808,{ mes .n$; mes "Hello, "+strcharinfo(0)+"!"; if(getgmlevel() > 79) if(select("- GM Menu:- Player Menu") == 1) goto GM_Menu; if($@pvpgvg_load == 1) { mes "I'm sorry, but the Arena and it's features are not available yet. Try again in a few minutes please."; close; } mes "How can I help you?"; mes "Ranking Status: "+ ( ($@pvptable)?"Enabled":"Disabled"); next; switch(select("- Arenas:- Rankings:- Arena Shop:- Information:- Nevermind")) { // Arenas case 1: set @sphr,0; set @bty,0; set @killct,0; mes .n$; mes "In which arena do you want to fight?"; next; switch(select("- PvP:- GvG:- Nevermind")) { // PvP case 1: mes .n$; mes "Please choose the PvP Type:"; mes "In the \"()\" stands, if 3rd Jobs, only 3rd Jobs or All Jobs are allowed to enter."; next; switch($@class_disp[$disppvp_map]) { case 0: set .@m_pvpdisp$,"No 3rd Jobs"; break; case 1: set .@m_pvpdisp$,"Only 3rd Jobs"; break; case 2: set .@m_pvpdisp$,"All Jobs"; break; } switch($@class_n[$npvp_map]) { case 0: set .@m_pvpn$,"No 3rd Jobs"; break; case 1: set .@m_pvpn$,"Only 3rd Jobs"; break; case 2: set .@m_pvpn$,"All Jobs"; break; } switch($@class_dm[$dmpvp_map]) { case 0: set .@m_pvpdm$,"No 3rd Jobs"; break; case 1: set .@m_pvpdm$,"Only 3rd Jobs"; break; case 2: set .@m_pvpdm$,"All Jobs"; break; } switch(select("- PvP Dispell ["+getmapusers($@disppvp$[$disppvp_map])+"] ("+.@m_pvpdisp$+"):- Normal PvP ["+getmapusers($@npvp$[$npvp_map])+"] ("+.@m_pvpn$+"):- PvP Deathmatch["+getmapusers($@dmpvp$[$dmpvp_map])+"] ("+.@m_pvpdm$+"):- Party PvP")) { // PvP Dispell case 1: mes .n$; if($@class_disp[$disppvp_map] == 0 && eaclass()&EAJL_THIRD) { mes "I'm sorry, but 3rd Classes are not allowed in this PvP Room."; close; } else if($@class_disp[$disppvp_map] == 1 && !(eaclass()&EAJL_THIRD)) { mes "I'm sorry, but only 3rd Classes are allowed in this PvP Room."; close; } mes "I'll warp you now to the PvP Room, also remove all your buffs."; close2; sc_end SC_ALL; // Remove every kind of buff warp $@disppvp$[$disppvp_map],0,0; announce "["+strcharinfo(0)+"] has entered the PvP Dispell Arena!",0; end; //PvP Normal case 2: mes .n$; if($@class_n[$npvp_map] == 0 && eaclass()&EAJL_THIRD) { mes "I'm sorry, but 3rd Classes are not allowed in this PvP Room."; close; } else if($@class_n[$npvp_map] == 1 && !(eaclass()&EAJL_THIRD)) { mes "I'm sorry, but only 3rd Classes are allowed in this PvP Room."; close; } mes "I'll warp you now to the Normal PvP Room."; close2; warp $@npvp$[$npvp_map],0,0; announce "["+strcharinfo(0)+"] has entered the Normal PvP Arena",0; end; // PvP DM case 3: mes .n$; if($@class_dm[$dmpvp_map] == 0 && eaclass()&EAJL_THIRD) { mes "I'm sorry, but 3rd Classes are not allowed in this PvP Room."; close; } else if($@class_dm[$dmpvp_map] == 1 && !(eaclass()&EAJL_THIRD)) { mes "I'm sorry, but only 3rd Classes are allowed in this PvP Room."; close; } mes "I'll warp you now to the PvP Deathmatch Room."; close2; set @dm,1; warp $@dmpvp$[$dmpvp_map],0,0; announce "["+strcharinfo(0)+"] has entered the PvP Deathmatch Arena!",0; end; // Party PvP case 4: mes .n$; if(!getcharid(1)) { mes "I'm sorry, but you are not in a party."; mes "Please come back as soon you have found one."; close; } if(getpartyleader(getcharid(1)) != strcharinfo(0)) { mes "I'm sorry, but only your leader can register your party."; close; } mes "Parties in Rooms:"; mes "2vs2: "+getmapusers($@pt2pvp$[$pt2pvp_map])/2; mes "3vs3: "+getmapusers($@pt3pvp$[$pt3pvp_map])/3; mes "4vs4: "+getmapusers($@pt4pvp$[$pt4pvp_map])/4; mes "5vs5: "+getmapusers($@pt5pvp$[$pt5pvp_map])/5; next; mes .n$; set @pty_id,getcharid(1); getpartymember(@pty_id,1); getpartymember(@pty_id,2); set @ptymem,$@partymembercount; copyarray @ptymemid[0],$@partymembercid,@ptymem; // Char ID copyarray @ptymemaid[0],$@partymemberaid,@ptymem; // Account ID set .@pt_ct,0; for ( set .@pm,0; .@pm < @ptymem; set .@pm,.@pm + 1) if( isloggedin(@ptymemaid[.@pm],@ptymemid[.@pm]) == 1) set .@pt_ct,.@pt_ct + 1; if(.@pt_ct < 2) { mes "It seems like you don't the required members for the Party vs Party Mode."; mes "You need at least two players, which have to be online, to be able to participate."; close; } set .@pt,.@pt_ct; mes "Chosen Party vs Party Mode:"; mes .@pt+"vs"+.@pt+" Party PvP"; mes "Class Restriction:"; switch( getd("$@class_p"+.@pt+"["+getd("$pt"+.@pt+"pvp_map")+"]") ) { case 0: mes "No 3rd Jobs allowed"; break; case 1: mes "Only 3rd Jobs allowed"; break; case 2: mes "All Jobs allowed"; break; } next; mes .n$; if(getmapusers(getd("$@pt"+.@pt+"pvp$["+getd("$pt"+.@pt+"pvp_map")+"]")) >= (.@pt+.@pt)) { mes "I'm sorry, but the "+.@pt+"vs"+.@pt+" Arena is already full."; mes "Please come back later."; close; } getpartymember(@pty_id,1); getpartymember(@pty_id,2); set @ptymem,$@partymembercount; copyarray @ptymemid[0],$@partymembercid,@ptymem; // Char ID copyarray @ptymemaid[0],$@partymemberaid,@ptymem; // Account ID for ( set .@pm,0; .@pm < @ptymem; set .@pm,.@pm + 1) if(isloggedin(@ptymemaid[.@pm],@ptymemid[.@pm]) == 1) if(getd("$@class_p"+.@pt+"["+getd("$pt"+.@pt+"pvp_map")+"]") == 0 && eaclass()&EAJL_THIRD) { mes "I'm sorry, but 3rd Classes are not allowed in this PvP Room."; close; } else if(getd("$@class_p"+.@pt+"["+getd("$pt"+.@pt+"pvp_map")+"]") == 1 && !(eaclass()&EAJL_THIRD)) { mes "I'm sorry, but only 3rd Classes are allowed in this PvP Room."; close; } mes "I'll warp your party now."; mes "Good luck."; close2; warpparty getd("$@pt"+.@pt+"pvp$["+getd("$pt"+.@pt+"pvp_map")+"]"),0,0,@pty_id; announce "The Party ["+getpartyname(getcharid(1))+"] has entered the "+.@pt+"vs"+.@pt+" Party PvP Arena!",0; end; } break; // GvG case 2: mes .n$; if(!getcharid(2)) { mes "I'm sorry, but you are not in a guild."; close; } mes "Please choose the room you want to join:"; next; set .@rchoi,select("- GvG 1 ["+getmapusers($@gvgr$[0])+"]:- GvG 2 ["+getmapusers($@gvgr$[1])+"]:- GvG 3 ["+getmapusers($@gvgr$[2])+"]") - 1; mes .n$; mes "I will warp you now."; close2; warp $@gvgr$[.@rchoi],0,0; end; // Nevermind case 3: break; } close; // Ranking case 2: mes .n$; if(!$@pvptable) { mes "I'm sorry, the ranking system is offline and thus I can't show you any ranking."; close; } mes "Which ranking do you wanna see?"; next; set .@rank,select("- Kills:- Deaths:- Highest Streak:- Killing Sphree:- Dominating:- Mega Kill:- Unstoppable:- Wicked Sick:- Monster Kill:- GodLike:- Holy Sh1t"); if(.@rank > 3 && .@rank < 12) // PvP Sphree Ranker set .@listr$,$@sphree_rank$[.@rank-4]; else { // PvP General K/D/Highest Streak Rankers setarray .@db_rank$[0],"kills","death","hstreak"; set .@listr$,.@db_rank$[.@rank-1]; } mes .n$; mes "Which list do you want to see?"; next; set .@limit,select("- Top 5:- Top 10:- Top 15:- Top 20:- Top 25:- Top 30:- Nevermind") * 5; if(.@limit == 35) goto R_Bye; mes .n$; mes "Ranking:"; switch(.@rank) { case 1: mes set(.@rankn$,"Top "+.@limit+" Killers"); set .@rankt$,"Kills"; break; case 2: mes set(.@rankn$,"Top "+.@limit+" Victims"); set .@rankt$,"Deaths"; break; case 3: mes set(.@rankn$,"Top "+.@limit+" Highest Streak"); set .@rankt$,"Highest Streak"; break; default: mes set(.@rankn$,"Top "+.@limit+" "+$@sphree_names$[@rank-4]+" Rankers"); set .@rankt$,$@sphree_names$[.@rank-4]+"s"; break; } mes "Correct?"; next; if(select("- Yes:- No") == 2) goto R_Bye; mes .n$; mes "I will now list the ranking in your Chat Box."; close2; dispbottom "======= "+.@rankn$+" ==========="; dispbottom "Player Name: "+.@rankt$; if(query_sql("SELECT `char_id` , `"+.@listr$+"` FROM `arena_master` WHERE `"+.@listr$+"` > 0 ORDER BY `"+.@listr$+"` DESC LIMIT "+.@limit,.@ch_id,.@sh_r) == 0) { dispbottom "No Player found."; end; } for( set .@r,0; .@r < getarraysize(.@sh_r); set .@r,.@r + 1) { query_sql "SELECT `name` FROM `char` WHERE `char_id` = '"+.@ch_id[.@r]+"'",.@ch_na$; dispbottom .@ch_na$+": "+.@sh_r[.@r]; } end; // Arena Shop case 3: mes .n$; mes "Hello, I can sell your useful items for the daily PvP need and more."; mes "Depending on the bounty, I will open the respective shop."; switch($@bty_type) { case 0: next; mes .n$; mes "I'm sorry, but the bounty feature is not enabled."; close; case 1: dispbottom "[Arena Shop]: I will now open the Bounty Shop, which uses \"Zeny\" as payment."; break; case 2: dispbottom "[Arena Shop]: I will now open the Bounty Shop, which uses \""+$@bty_cvard$+"\" as payment."; dispbottom "[Arena Shop]: You have "+getd(""+$@bty_cvarn$)+" "+$@bty_cvard$+"."; break; case 3: set @pts,0; dispbottom "[Arena Shop]: I will now open the Bounty Shop, which uses \"Bounty Points\" as payment."; query_sql "SELECT `bounty_pts` FROM `arena_master` WHERE `char_id` = '"+getcharid(0)+"'",@pts; dispbottom "[Arena Shop]: You have "+@pts+" Bounty Points."; break; } close2; callshop "Arena_Shop",1; npcshopattach "Arena_Shop"; end; OnBuyItem: for( set .@s,0; .@s < getarraysize(@bought_nameid); set .@s,.@s + 1) for( set .@i,0; .@i < getarraysize(.arena_sh); set .@i,.@i + 1) if(@bought_nameid[.@s] == .arena_sh[.@i]) if(checkweight(@bought_nameid[.@s],@bought_quantity[.@s]) == 1) { set .@c_item,(@bought_quantity[.@s]*.arena_ar[.@i]); set .@total,(.@total + .@c_item); break; } else { dispbottom "[Arena Shop]: You have reached your weight limit, lose some weight and come back please."; end; } switch($@bty_type) { case 1: if(Zeny >= .@total) set Zeny,Zeny - .@total; else { dispbottom "[Arena Shop]: You don't have enough Zeny."; end; } break; case 2: if(getd(""+$@bty_cvarn$) >= .@total) setd(""+$@bty_cvarn$),getd(""+$@bty_cvarn$) - .@total; else { dispbottom "[Arena Shop]: You don't have enough "+$@bty_cvard$+", currently "+getd(""+$@bty_cvarn$)+"."; end; } break; case 3: if(@pts >= .@total) query_sql "UPDATE `arena_master` SET `bounty_pts` = `bounty_pts` - "+.@total+" WHERE `char_id` = '"+getcharid(0)+"'"; else { dispbottom "[Arena Shop]: You don't have enough Bounty Points, currently "+@pts; end; } break; } for ( set .@b,0; .@b < getarraysize(@bought_nameid); set .@b,.@b + 1) getitem @bought_nameid[.@b],@bought_quantity[.@b]; deletearray @bought_nameid[0],getarraysize(@bought_nameid); deletearray @bought_quantity[0],getarraysize(@bought_quantity); end; // Information case 4: mes .n$; mes "What do you want to know about?"; next; switch(select("- PvP:- GvG:- Sphree:- Ranking:- Bounty Feature:- Nevermind")) { case 1: mes "[=== PvP ===]"; mes "PvP Types:"; mes " - Normal"; mes " - Dispell"; mes " - Deathmatch"; mes " - Party PvP:"; mes " - 2vs2"; mes " - 3vs3"; mes " - 4vs4"; mes " - 5vs5"; next; mes "[=== PvP ===]"; mes "Dispell PvP:"; mes " - You'll be dispelled, when you enter the room."; mes " "; mes "Deathmatch PvP:"; mes " - You'll be auto-resurrect on death, except you type @die, get comaed or similar, then you'll be warped to your savepoint."; close; case 2: mes "[=== GvG ===]"; mes "In these rooms, you can see what WoE would look like."; close; case 3: mes "[=== Sphree ===]"; mes "Sphree - Required Kills."; for ( set .@s,0; .@s < getarraysize($@sphree_names$); set .@s,.@s + 1) mes $@sphree_names$[.@s] +" - "+$@sphree_kills[.@s]; next; mes "[=== Sphree ===]"; mes "For each sphree you accomplish, except First Blood, you gain an point for the bounty feature, if it has been activated."; mes "For more ask me about the Bounty Feature."; next; mes "[=== Sphree ===]"; mes "Also there is the Multi Kill Sphrees, but you won't recieve points for them."; mes "The time span you can achieve them is "+ $@multi/1000+" seconds."; next; mes "[=== Sphree ===]"; mes "In this time you, if you kill"; mes " - one more player = Double Kill"; mes " - two more players = Triple Kill"; mes " - three or more players = Ultra Kill"; close; case 4: mes "[=== Ranking ===]"; mes "Kills, Deaths, Sphree Counts (like Killing Sphree), the highest kill count till you died and lists it in either a Top 5, 10, 15, 20, 25 or a Top 30 List with the wanted information you have chosen."; close; case 5: mes .n$; if(!$@bty_type) { mes "This feature isn't activate."; close; } mes "Current Bounty Reward: "+ $@bty_price + " " + ( ($@bty_type == 1)?"Zeny": ( ($@bty_type == 2)?$@bty_cvard$:"Bounty Points") ); mes "Also an Shop exists so you can prepare you for battle easier."; mes "Next is an Bounty Bonus, which automatically activates when someone reaches "+$@bty_bon_start+" kills."; mes "An announce will be displayed, to stop him and that you get an bonus to the bounty price, which depends on the bounty type."; mes "Current Bonus is: "+$@bty_bonus+" " + ( ($@bty_type == 1)?"Zeny": ( ($@bty_type == 2)?$@bty_cvard$:"Bounty Points") ); mes "Also there is an Bounty Bonus Multiplier, but the value of that will stay an secret."; next; mes .n$; mes "The bounty depends on your victims sphree."; mes "Here is a list of them:"; mes " "; mes "Sphree - Points"; for ( set .@s,0; .@s < getarraysize($@sphree_names$); set .@s,.@s + 1) mes $@sphree_names$[.@s] +" - "+.@s; next; case 6: break; } // Nevermind case 5: break; } R_Bye: mes .n$; mes "Okay, see ya."; close; // GM Menu GM_Menu: mes "How can I help you?"; next; switch(select("- Table Settings:- Debug State:- Nevermind")) { case 1: mes .n$; mes "Table Status: "+( ($@pvptable == 1)?"":"Not ")+"Installed"; mes "What do you want to do?"; next; if($@pvptable == 1) { switch(select("- Erase Content from Table:- Delete Table completely:- Nevermind")) { case 1: mes .n$; mes "Are you sure, that you want to delete the rankings from the tables?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "Here we go!"; query_sql "TRUNCATE TABLE `arena_master`"; break; case 2: mes .n$; mes "Are you sure, that you want to delete the whole table from the database?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "Here we go!!!"; query_sql "DROP TABLE IF EXISTS `arena_master`"; set $@pvp_table,0; break; case 3: break; } } else if($@pvptable == 0) { if(select("- Create Tables:- Nevermind") - 1) close; mes .n$; mes "Are you sure, that you want to create the tables for the rankings?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "Here we go!"; query_sql "CREATE TABLE `arena_master` ( `char_id` int(10) unsigned NOT NULL, `kills` smallint(5) unsigned DEFAULT '0', `death` smallint(5) unsigned DEFAULT '0', `hstreak` smallint(5) unsigned DEFAULT '0', `bounty` smallint(5) unsigned DEFAULT '0', `bounty_pts` smallint(5) unsigned DEFAULT '0', `killer` smallint(5) unsigned DEFAULT '0', `domi` smallint(5) unsigned DEFAULT '0', `mega` smallint(5) unsigned DEFAULT '0', `unstopp` smallint(5) unsigned DEFAULT '0', `wicked` smallint(5) unsigned DEFAULT '0', `monster` smallint(5) unsigned DEFAULT '0', `godlike` smallint(5) unsigned DEFAULT '0', `holys` smallint(5) unsigned DEFAULT '0')"; set $@pvp_table,1; break; } close; case 2: mes .n$; mes "Debug State: "+( ($arena_debug == 1)?"Online":"Offline"); mes "Do you want to change it?"; if(select("- Yes:- No") - 1) close; next; mes .n$; mes "Debug State has been turned "+ ( (!$arena_debug)?"on":"off")+"."; set $arena_debug,!$arena_debug; break; case 3: break; } close; OnLoading: set .n$,"["+strnpcinfo(1)+"]"; while($@pvpgvg_load) { delwaitingroom; waitingroom "Arena: Closed",0; sleep 2000; } delwaitingroom; announce "PvP/GvG Arena is now opened.",0; waitingroom "PvP/GvG Arena: Open",0; if($arena_debug) debugmes "Main OnInit Loaded, continuing with Arena Shop"; if($@bty_type) { // If Bounty is enabled // Shop Items: PvP useful stuff, like Elements, Boxes and Food // These will be used for all shops, but the prices depends on the Bounty Type you have set. setarray .arena_sh[0],12020, // [0] == Cursed Water 12028, // [1] == Box of Thunder 12029, // [2] == Box of Gloom 12030, // [3] == Box of Resentment 12031, // [4] == Box of Drowsiness 12032, // [5] == Box of Stroms 12033, // [6] == Box of Sunlight 12034, // [7] == Box of Panting 12108, // [8] == Scroll Package 12215, // [9] == LV 10 Blessing Scroll 12216, // [10] == LV 10 Agi Scroll 12217, // [11] == LV 5 Aspersio Scroll 12218, // [12] == LV 5 Assumptio Scroll 12219, // [13] == LV 10 Wind Walker Scroll 12075, // [14] == Steamed Tongue 12080, // [15] == Dragon Breath Cocktail 12085, // [16] == Immortal Stew 12090, // [17] == Steamed Desert Scorpions 12095, // [18] == Hwergelmir's Tonic 12100, // [19] == Cooked Nice Tail's Tails 12114, // [20] == Elemental Converter[Fire] 12115, // [21] == Elemental Converter[Water] 12116, // [22] == Elemental Converter[Earth] 12117, // [23] == Elemental Converter[Wind] 12118, // [24] == Fireproof Potion 12119, // [25] == Coldproof Potion 12120, // [26] == Earthproof Potion 12121, // [27] == Thunderproof Potion 13543, // [28] == Chemical Protection Helm Scroll Box 13544, // [29] == Chemical Protection Shield Scroll Box 13545, // [30] == Chemical Protection Armor Scroll Box 13546, // [31] == Chemical Protection Weapon Scroll Box 13547, // [32] == Repair Weapon Scroll Box 14593; // [33] == Mystical Amplification Scroll // Prices: // Two ways of doing so: // - Per formula // - Per Array // You can determine for each currency the way of calculation and prices. // If you want to use the formula, set ".@arena_pay" to 1. // If you wanna use the array, set ".@arena_pay" to 2, // but remember to put the prices for all items, also there is no multiplier added for this. set .@arena_pay,1; // Cost Multiplier: // The value here will multiply the costs in the shop. // Fill in the index of the item array for which Item you want to use the multiplier. // * Suggested Values: // - Minimum: 1 // - Maximum: 10 // Note: On Mid Rate and High Rate Servers, it's easy to gain money very fast. // So I added this to only increase the costs in the shop, but not the gain per kill. // Note2: NEVER PUT '0' ALSO I DIDN'T ADD AN PREVENTION IF YOU GO HIGHER THAN '10'!!! setarray .@arena_multi[0],1, // [0] 2, // [1] 2, // [2] 2, // [3] 2, // [4] 2, // [5] 2, // [6] 2, // [7] 4, // [8] 4, // [9] 4, // [10] 4, // [11] 4, // [12] 4, // [13] 5, // [14] 5, // [15] 5, // [16] 5, // [17] 5, // [18] 5, // [19] 3, // [20] 3, // [21] 3, // [22] 3, // [23] 1, // [24] 1, // [25] 1, // [26] 1, // [27] 4, // [28] 4, // [29] 4, // [30] 4, // [31] 3, // [32] 2; // [33] if(.@arena_pay == 1) { // ============== * By Formula * ================ // Note: If the formula results in a decimal number it will be degraded. for ( set .@s,0; .@s < getarraysize(.arena_sh); set .@s,.@s + 1) { // =============== Zeny Formula ========== // // Default: (($@bty_price+(.@s*($@bty_price/10)))/2)*.@arena_multi // Base Price = $@bty_price, "Bonus" = + (Index ID* ($@bty_price/10))/2 // Example: 5000 + (4(=Index of 12031)*(5000/10=500) > 7000/2 = 3500 Zeny for 12031 // With Multiplier: ".@arena_multi[4] = 5": 3500 * 5 = 17500 if($@bty_type == 1) set .@arena_fo,(($@bty_price+(.@s*($@bty_price/10)))/2)*.@arena_multi[.@s]; // =============== Custom Points Formula ========== // // Default: (($@bty_price+.@s)/2)*.@arena_multi // Base Price = $@bty_price, "Bonus" = + Index ID/2 // Example: 2 + 4(=Index of 12031) > 6/2 = 3 Custom Points for 12031 // With Multiplier: ".@arena_multi[4] = 5": 3 * 5 = 15 else if($@bty_type == 2) set .@arena_fo,(($@bty_price+.@s)/2)*.@arena_multi[.@s]; // =============== Bounty Points Formula ========== // // Default: (($@bty_price+(.@s*10))/2)*.@arena_multi // Base Price = $@bty_price, "Bonus" = + (Index ID* 10)/2 // Example: 5 + (4(=Index of 12031)*10) > 45/2 = 22 Bounty Points for 12031 // With Multiplier: ".@arena_multi[4] = 5": 22 * 5 = 110 else if($@bty_type == 3) set .@arena_fo,(($@bty_price+(.@s*10))/2)*.@arena_multi[.@s]; // =============== Adding the price (calculated by the formula) to the array ========== // setarray .arena_ar[.@s],.@arena_fo; } // Price Array } else setarray .arena_ar[0],100, // [0] 100, // [1] 100, // [2] 100, // [3] 100, // [4] 100, // [5] 100, // [6] 100, // [7] 100, // [8] 100, // [9] 100, // [10] 100, // [11] 100, // [12] 100, // [13] 100, // [14] 100, // [15] 100, // [16] 100, // [17] 100, // [18] 100, // [19] 100, // [20] 100, // [21] 100, // [22] 100, // [23] 100, // [24] 100, // [25] 100, // [26] 100, // [27] 100, // [28] 100, // [29] 100, // [30] 100, // [31] 100, // [32] 100; // [33] npcshopdelitem "Arena_Shop",512; // Adding Items and Prices to the Shop for ( set .@s,0; .@s < getarraysize(.arena_sh); set .@s,.@s + 1) npcshopadditem "Arena_Shop",.arena_sh[.@s],.arena_ar[.@s]; if($arena_debug) debugmes "Arena Shop loaded - Items: "+getarraysize(.arena_sh)+", Prices: "+getarraysize(.arena_ar); } end; } // =============== Bounty Shop =========== // - shop Arena_Shop -1,512:-1 // =============== Main Settings ===============// - script PvPGvGMain -1,{ end; OnInit: freeloop(1); // =============== Ranking Check & Debug Messages ================// set $@pvpgvg_load,1; //set $arena_debug,1; initnpctimer; if($arena_debug) debugmes "====== Arena Master - Debug initiate... ========"; if(query_sql("SHOW TABLES LIKE 'arena_master'",.@pvptab) == 0) set $@pvptable,0; else set $@pvptable,1; donpcevent "Arena Master::OnLoading"; // ============== Sphree Settings ============// setarray $@sphree_names$[0],"Killing Sphree","Dominating","Mega Kill","Unstoppable","Wicked Sick","Monster Kill","GodLike","Holy Sh1t"; setarray $@sphree_kills[0],3,5,7,9,11,13,15,17; // Kills required for each sphree. setarray $@sphree_wav$[0],"killingspree","dominating","megakill","unstoppable","wickedsick","monsterkill","godlike","holyshit"; // WAV file names setarray $@sphree_rank$[0],"killer","domi","mega","unstopp","wicked","monster","godlike","holys"; // Variable Names for the ranking of each sphree set $@multi,5000; // Time Span for chance to gain Multi-Kill in milliseconds. if($arena_debug) debugmes "PvP Sphree Names loaded: "+getarraysize($@sphree_names$); if($arena_debug) debugmes "PvP Sphree Kills loaded: "+getarraysize($@sphree_kills); if($arena_debug) debugmes "PvP Sphree WAV Names loaded: "+getarraysize($@sphree_wav$); if($arena_debug) debugmes "PvP Sphree Ranking Names loaded: "+getarraysize($@sphree_rank$); // ============== Bounty Settings =========// // Bounty Type: // * 0 = Off // * 1 = Zeny // * 2 = Custom Points // * 3 = Bounty Points set $@bty_type,2; if($@bty_type) { set $@bty_bonus,5; // Bonus, if you kill an player set $@bty_bon_start,4; //which has achieved an spree of "$@bty_bon_start" set $@bty_bonus_multi,1; // Use Bonus Multiplier depending on the Bounty Type? See seperate sections below set $@bty_bonus_m,1000; // Multiplier for Bounty Bonus // Custom Points Settings set $@bty_cvard$,"Cash Points"; // What to display for players set $@bty_cvarn$,"#CASHPOINTS"; // Actual Variable Name // =============== Zeny ========== // if($@bty_type == 1) set $@bty_price,5000; // Zeny per Sphree // =============== Custom Points ========== // else if($@bty_type == 2) set $@bty_price,2; // Custom Points per Sphree // =============== Bounty Points ========== // else if($@bty_type == 3) set $@bty_price,5; // Bounty Points per Sphree // Custom Bounty Maps // = Maps on which you also can gain the reward // 1 = On // 0 = Off, ordinary ones set $@bty_cmap,1; if($@bty_cmap == 1) { // Map Type: // 1 = Every Map with PvP/GvG Mapflags // 2 = Specific (Array below) set $@bty_cmap_type,2; if($@bty_cmap_type == 2) { // Map Array // Put the either the whole map name // or a part of it to add more maps with the part containing setarray $@bty_cmaps$[0],"prt_fild08","prt_gld"; // Which map is a PvP/GvG Map? // 6 = PvP // 9 = GvG // Note: In the same order as above setarray $@bty_cmap_pg[0],6,9; } // Party Usage // 1 = No parties Allowed // 2 = Parties allowed setarray $@bty_cmap_pty,2,1; // Mapflags setarray $@bty_cmapfl[0],0, //mf_nomemo // 1, //mf_noteleport 2, //mf_nosave 3, //mf_nobranch 4, //mf_nopenalty 5, //mf_nozenypenalty 11, //mf_notrade // 13, //mf_nowarp // 22, //mf_nogo 33, //mf_noreturn // 34, //mf_nowarpto // 35, //mf_nightmaredrop 38, //mf_nodrop 41, //mf_novending 44, //mf_noexppenalty 14, //mf_partylock 7; //mf_pvp_noparty // ======= Auto Mapflag Adding ===============// for ( set .@m,0; .@m < getarraysize($@bty_cmaps$); set .@m,.@m + 1 ) { if($arena_debug) debugmes "Mapflag set at "+$@bty_cmaps$[.@m] + " initiate..."; for ( set .@mf,0; .@mf < getarraysize($@bty_cmapfl); set .@mf,.@mf + 1 ) { if(($@bty_cmapfl[.@mf] == 14 || $@bty_cmapfl[.@mf] == 7) && $@bty_cmap_pty[.@m] == 1) continue; setmapflag $@bty_cmaps$[.@m],$@bty_cmapfl[.@mf]; if($arena_debug) debugmes "Mapflag "+ $@bty_cmapfl[.@mf] +" set at "+$@bty_cmaps$[.@m] + " complete"; } // PvP or GvG Mapflag setmapflag $@bty_cmaps$[.@m],$@bty_cmap_pg[.@m]; if($arena_debug) debugmes "Mapflag "+ $@bty_cmap_pg[.@m] +" set at "+$@bty_cmaps$[.@m] + " complete"; } } } if($arena_debug) debugmes "Bounty Shop - Currency: " + ( ($@bty_type == 1)?"Zeny": ( ($@bty_type == 2)?$@bty_cvard$:"Bounty Points") ) + ", Basic Price: "+ $@bty_price; // Bounty Calculation: // Scroll down till the line with "function getBounty {" if($arena_debug) debugmes "Bounty Type loaded: "+$@bty_type; // ============ GvG Settings ============// setarray $@gvgr$[0],"guild_vs1","guild_vs2","guild_vs3"; if($arena_debug) debugmes "Guild Maps loaded: "+getarraysize($@gvgr$); // Party Usage // 1 = No parties Allowed // 2 = Parties allowed setarray $@gvg_pty[0],2,2,2; // ======== Mapflags ======== // // If you want you can add more mapflags setarray .gvg_mf[0],0, //mf_nomemo 1, //mf_noteleport 2, //mf_nosave 3, //mf_nobranch 4, //mf_nopenalty 5, //mf_nozenypenalty 9, //mf_gvg 11, //mf_notrade 13, //mf_nowarp 15, //mf_noicewall 22, //mf_nogo 33, //mf_noreturn 34, //mf_nowarpto 35, //mf_nightmaredrop 38, //mf_nodrop 41, //mf_novending 44, //mf_noexppenalty 14, //mf_partylock 10; //mf_gvg_noparty if($arena_debug) debugmes "Guild Mapflags loaded: "+getarraysize(.gvg_mf); if($arena_debug) debugmes "Array Reading of GvG Maps complete"; for ( set .@m,0; .@m < getarraysize($@gvgr$); set .@m,.@m + 1 ) { if($arena_debug) debugmes "Mapflag set at "+$@gvgr$[.@m] + " initiate..."; for ( set .@mf,0; .@mf < getarraysize(.gvg_mf); set .@mf,.@mf + 1 ) { if((.gvg_mf[.@mf] == 14 || .gvg_mf[.@mf] == 10) && .gvg_pty[.@m] == 2) continue; setmapflag $@gvgr$[.@m],.gvg_mf[.@mf]; if($arena_debug) debugmes "Mapflag "+ .gvg_mf[.@mf] +" set at "+$@gvgr$[.@m] + " complete"; } } if($arena_debug) debugmes "Guild Mapflag loading completed"; // ============ PvP Settings ============// // = You can use your own Maps as you like, even reduce or put more // = These below are the default PvP Maps // ====== Dispell PvP ==========// setarray $@disppvp$[1],"pvp_y_1-1","pvp_y_1-4","pvp_y_1-2","pvp_y_1-3","pvp_y_1-5"; if($arena_debug) debugmes "PvP Dispell Maps loaded: "+(getarraysize($@disppvp$)-1); // ================== Normal Maps ================// setarray $@npvp$[1],"pvp_y_2-1","pvp_y_2-4","pvp_y_2-2","pvp_y_2-3","pvp_y_2-5"; if($arena_debug) debugmes "PvP Normal Maps loaded: "+(getarraysize($@npvp$)-1); // ================== Deathmatch Maps ================// setarray $@dmpvp$[1],"pvp_y_3-1","pvp_y_3-4","pvp_y_3-2","pvp_y_3-3","pvp_y_3-5"; if($arena_debug) debugmes "PvP DM Maps loaded: "+(getarraysize($@dmpvp$)-1); // ========= 2vs2 Party PvP ==========// setarray $@pt2pvp$[1],"pvp_y_4-1","pvp_y_4-4","pvp_y_4-2","pvp_y_4-3","pvp_y_4-5"; if($arena_debug) debugmes "Party PvP 2vs2 Maps loaded: "+(getarraysize($@pt2pvp$)-1); // ========= 3vs3 Party PvP ==========// setarray $@pt3pvp$[1],"pvp_y_5-1","pvp_y_5-4","pvp_y_5-2","pvp_y_5-3","pvp_y_5-5"; if($arena_debug) debugmes "Party PvP 3vs3 Maps loaded: "+(getarraysize($@pt3pvp$)-1); // ========= 4vs4 Party PvP ==========// setarray $@pt4pvp$[1],"pvp_y_6-1","pvp_y_6-4","pvp_y_6-2","pvp_y_6-3","pvp_y_6-5"; if($arena_debug) debugmes "Party PvP 4vs4 Maps loaded: "+(getarraysize($@pt4pvp$)-1); // ========= 5vs5 Party PvP ==========// setarray $@pt5pvp$[1],"pvp_y_7-1","pvp_y_7-4","pvp_y_7-2","pvp_y_7-3","pvp_y_7-5"; if($arena_debug) debugmes "Party PvP 5vs5 Maps loaded: "+(getarraysize($@pt5pvp$)-1); // ======= Party Usage ========== // 1 = No parties Allowed // 2 = Parties allowed setarray .disp_pty[1],2,2,2,2,2; setarray .n_pty[1],2,2,2,2,2; setarray .dm_pty[1],2,2,2,2,2; // ============= Class Limitation ========// // * Values: // 0 = No 3rd Job Allowed // 1 = Only 3rd Job Allowed // 2 = All // -------------------------------------- // * Dispell PvP Rooms setarray $@class_disp[1],2,2,2,2,2; // * Normal PvP Rooms setarray $@class_n[1],2,2,2,2,2; // * Deathmatch PvP Rooms setarray $@class_dm[1],2,2,2,2,2; // * Party PvP 2vs2 Rooms setarray $@class_p2[1],2,2,2,2,2; // * Party PvP 3vs3 Rooms setarray $@class_p3[1],2,2,2,2,2; // * Party PvP 4vs4 Rooms setarray $@class_p4[1],2,2,2,2,2; // * Party PvP 5vs5 Rooms setarray $@class_p5[1],2,2,2,2,2; //============================== // ===== Map Rotation ====== // // 1 = Fixed Map (Always Default) // 2 = Random each Day // 3 = Each specific Day an specific Map set .pvp_map,3; // ===== 1: Fixed Map (Always Default) ======== // // Type the Index of $@<Type>pvp$ for the Map to be used set $disppvp_map,2; set $npvp_map,3; set $dmpvp_map,1; set $pt2pvp_map,4; set $pt3pvp_map,4; set $pt4pvp_map,4; set $pt5pvp_map,4; // ===== 3: Specific Day ======== // if(.pvp_map == 3) { // > Chose your time in the same row as the $@pvp_maps$ order // > Values for the Array: // MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY // ============================== // setarray $@disppvp_day[1],MONDAY,MONDAY,WEDNESDAY,SATURDAY,TUESDAY; setarray $@npvp_day[1],TUESDAY,SATURDAY,WEDNESDAY,THURSDAY,MONDAY; setarray $@dmpvp_day[1],WEDNESDAY,MONDAY,SUNDAY,TUESDAY,FRIDAY; setarray $@pt2pvp_day[1],FRIDAY,TUESDAY,SATURDAY,MONDAY,TUESDAY; setarray $@pt3pvp_day[1],FRIDAY,TUESDAY,SATURDAY,MONDAY,TUESDAY; setarray $@pt4pvp_day[1],FRIDAY,TUESDAY,SATURDAY,MONDAY,TUESDAY; setarray $@pt5pvp_day[1],FRIDAY,TUESDAY,SATURDAY,MONDAY,TUESDAY; } // ======== Mapflags ======== // // If you want to add more mapflags, // add them before the last two, which are for allowing party or not setarray .pvp_mf[0],0, //mf_nomemo 1, //mf_noteleport 2, //mf_nosave 3, //mf_nobranch 4, //mf_nopenalty 5, //mf_nozenypenalty 11, //mf_notrade 13, //mf_nowarp 22, //mf_nogo 33, //mf_noreturn 34, //mf_nowarpto 35, //mf_nightmaredrop 38, //mf_nodrop 41, //mf_novending 44, //mf_noexppenalty 14, //mf_partylock 7; //mf_pvp_noparty if($arena_debug) debugmes "PvP Mapflags loaded: "+(getarraysize(.pvp_mf)-1); function writeStats; if($arena_debug) debugmes "Write Stats Function loaded."; function getBounty; function writeBounty; if($arena_debug) debugmes "Bounty Function loaded."; function PVP_BTY_CMAP; if($arena_debug) debugmes "Custom Bounty Map Function loaded."; stopnpctimer; set .time,getnpctimer(0); if($arena_debug) debugmes "Loading Time: "+.time+" seconds."; freeloop(0); set $@pvpgvg_load,0; OnClock0001: freeloop(1); setarray .@pre$[0],"disp","n","dm","pt2","pt3","pt4","pt5"; if(.pvp_map == 2) { if($arena_debug) debugmes "Random Map Rotation:"; announce "[Arena Master]: New Day, new Battlefield!!! Random Map rotation has been loaded!",bc_all; for ( set .@l,0; .@l < getarraysize(.@pre$); set .@l,.@l + 1) { if($arena_debug) debugmes ".@pre$ = "+.@pre$[.@l]; if($arena_debug) debugmes "Array Size: $@"+.@pre$[.@l]+"pvp$ = "+getarraysize(getd("$@"+.@pre$[.@l]+"pvp$")); setd("$"+.@pre$[.@l]+"pvp_map"),rand(1,getarraysize(getd("$@"+.@pre$[.@l]+"pvp$"))-1); if($arena_debug) debugmes "$"+.@pre$[.@l]+"pvp_map = "+getd("$"+.@pre$[.@l]+"pvp_map"); if($arena_debug) debugmes "$@"+.@pre$[.@l]+"pvp$["+getd("$"+.@pre$[.@l]+"pvp_map")+"] == "+getd("$@"+.@pre$[.@l]+"pvp$["+getd("$"+.@pre$[.@l]+"pvp_map")+"]"); if(!getd("$"+.@pre$[.@l]+"pvp_last") || getd("$"+.@pre$[.@l]+"pvp_last") != getd("$"+.@pre$[.@l]+"pvp_map")) { setd("$"+.@pre$[.@l]+"pvp_last"),getd("$"+.@pre$[.@l]+"pvp_map"); mapannounce getd("$@"+.@pre$[.@l]+"pvp$["+getd("$"+.@pre$[.@l]+"pvp_last")+"]"),"[Arena Master]: Duo the map change I will move every player from the current map to the new map in 3 seconds!",bc_all,0xFF0000; sleep 3000; mapwarp getd("$@"+.@pre$[.@l]+"pvp$["+getd("$"+.@pre$[.@l]+"pvp_last")+"]"),getd("$@"+.@pre$[.@l]+"pvp$["+getd("$"+.@pre$[.@l]+"pvp_map")+"]"),0,0; } } } else if(.pvp_map == 3) { if($arena_debug) debugmes "Specific Day an Specific Map:"; announce "[Arena Master]: New Day, new Battlefield!!! Map selection depending on the day has been loaded!",bc_all; for ( set .@l,0; .@l < getarraysize(.@pre$); set .@l,.@l + 1) { if($arena_debug) debugmes ".@pre$ = "+.@pre$[.@l]; if($arena_debug) debugmes "Previous Map: "+getd("$"+.@pre$[.@l]+"pvp_map"); // Saving the previous Map if($arena_debug) debugmes "Saving Previous Map: "+getd("$@"+.@pre$[.@l]+"pvp_last"); setd("$"+.@pre$[.@l]+"pvp_last"),getd("$"+.@pre$[.@l]+"pvp_map"); for ( set .@t,1; .@t < getarraysize(getd("$@"+.@pre$[.@l]+"pvp$")); set .@t,.@t + 1) { if($arena_debug) debugmes "Checking Day of ["+.@t+"]: "+getd("$@"+.@pre$[.@l]+"pvp_day["+.@t+"]")+" == "+gettime(DT_DAYOFWEEK); if(getd("$@"+.@pre$[.@l]+"pvp_day["+.@t+"]") == gettime(DT_DAYOFWEEK)) { setd("$"+.@pre$[.@l]+"pvp_map"),.@t; if($arena_debug) debugmes "Day Check passed: "+getd("$"+.@pre$[.@l]+"pvp_map")+" == "+.@t; mapannounce getd("$@"+.@pre$[.@l]+"pvp$["+getd("$"+.@pre$[.@l]+"pvp_last")+"]"),"[Arena Master]: Duo the map change I will move every player from the current map to the new map in 3 seconds!",bc_all,0xFF0000; sleep 3000; mapwarp getd("$@"+.@pre$[.@l]+"pvp$["+getd("$"+.@pre$[.@l]+"pvp_last")+"]"),getd("$@"+.@pre$[.@l]+"pvp$["+getd("$"+.@pre$[.@l]+"pvp_map")+"]"),0,0; } } } } if($arena_debug) debugmes "OnClock0001 and/or OnInit loaded, Auto Mapflag adding now...."; // ======= Auto Mapflag Adding ===============// // ======= Dispell PvP ===============// if($arena_debug) debugmes "Mapflag set at "+$@disppvp$[$disppvp_map] + " initiate..."; for ( set .@mf,0; .@mf < getarraysize(.pvp_mf); set .@mf,.@mf + 1 ) { if((.pvp_mf[.@mf] == 14 || .pvp_mf[.@mf] == 7) && .disp_pty[.@m] == 2) continue; setmapflag $@disppvp$[$disppvp_map],.pvp_mf[.@mf]; if($disppvp_map != $disppvp_last) removemapflag $@disppvp$[$disppvp_last],.pvp_mf[.@mf]; if($arena_debug) debugmes "Mapflag "+ .pvp_mf[.@mf] +" set at "+$@disppvp$[$disppvp_map] + " complete"; } if($arena_debug) debugmes "PvP Dispell Mapflags loaded."; // ======= Normal PvP ===============// if($arena_debug) debugmes "Mapflag set at "+$@npvp$[$npvp_map] + " initiate..."; for ( set .@mf,0; .@mf < getarraysize(.pvp_mf); set .@mf,.@mf + 1 ) { if((.pvp_mf[.@mf] == 14 || .pvp_mf[.@mf] == 7) && .n_pty[.@m] == 2) continue; setmapflag $@npvp$[$npvp_map],.pvp_mf[.@mf]; if($npvp_map != $npvp_last) removemapflag $@npvp$[$npvp_last],.pvp_mf[.@mf]; if($arena_debug) debugmes "Mapflag "+ .pvp_mf[.@mf] +" set at "+$@npvp$[$npvp_map] + " complete"; } if($arena_debug) debugmes "PvP Normal Mapflags loaded."; // ======= Deathmatch PvP ===============// if($arena_debug) debugmes "Mapflag set at "+$@dmpvp$[$dmpvp_map] + " initiate..."; for ( set .@mf,0; .@mf < getarraysize(.pvp_mf); set .@mf,.@mf + 1 ) { if((.pvp_mf[.@mf] == 14 || .pvp_mf[.@mf] == 7) && .dm_pty[.@m] == 2) continue; setmapflag $@dmpvp$[$dmpvp_map],.pvp_mf[.@mf]; if($dmpvp_map != $dmpvp_last) removemapflag $@dmpvp$[$dmpvp_last],.pvp_mf[.@mf]; if($arena_debug) debugmes "Mapflag "+ .pvp_mf[.@mf] +" set at "+$@dmpvp$[$dmpvp_map] + " complete"; } if($arena_debug) debugmes "PvP DM Mapflags loaded."; // ============== Party 2vs2 =================// if($arena_debug) debugmes "Mapflag set at "+$@pt2pvp$[$pt2pvp_map] + " initiate..."; for ( set .@mf,0; .@mf < getarraysize(.pvp_mf); set .@mf,.@mf + 1 ) { if(.pvp_mf[.@mf] == 14 || .pvp_mf[.@mf] == 7) continue; setmapflag $@pt2pvp$[$pt2pvp_map],.pvp_mf[.@mf]; if($pt2pvp_map != $pt2pvp_last) removemapflag $@pt2pvp$[$pt2pvp_last],.pvp_mf[.@mf]; if($arena_debug) debugmes "Mapflag "+ .pvp_mf[.@mf] +" set at "+$@pt2pvp$[$pt2pvp_map] + " complete"; } if($arena_debug) debugmes "Party 2v2 PvP Mapflags loaded."; // ============== Party 3vs3 =================// if($arena_debug) debugmes "Mapflag set at "+$@pt3pvp$[$pt3pvp_map] + " initiate..."; for ( set .@mf,0; .@mf < getarraysize(.pvp_mf); set .@mf,.@mf + 1 ) { if(.pvp_mf[.@mf] == 14 || .pvp_mf[.@mf] == 7) continue; setmapflag $@pt3pvp$[$pt3pvp_map],.pvp_mf[.@mf]; if($pt3pvp_map != $pt3pvp_last) removemapflag $@pt3pvp$[$pt3pvp_last],.pvp_mf[.@mf]; if($arena_debug) debugmes "Mapflag "+ .pvp_mf[.@mf] +" set at "+$@pt3pvp$[$pt3pvp_map] + " complete"; } if($arena_debug) debugmes "Party 3v3 PvP Mapflags loaded."; // ============== Party 4vs4 =================// if($arena_debug) debugmes "Mapflag set at "+$@pt4pvp$[$pt4pvp_map] + " initiate..."; for ( set .@mf,0; .@mf < getarraysize(.pvp_mf); set .@mf,.@mf + 1 ) { if(.pvp_mf[.@mf] == 14 || .pvp_mf[.@mf] == 7) continue; setmapflag $@pt4pvp$[$pt4pvp_map],.pvp_mf[.@mf]; if($pt4pvp_map != $pt4pvp_last) removemapflag $@pt4pvp$[$pt4pvp_last],.pvp_mf[.@mf]; if($arena_debug) debugmes "Mapflag "+ .pvp_mf[.@mf] +" set at "+$@pt4pvp$[$pt4pvp_map] + " complete"; } if($arena_debug) debugmes "Party 4v4 PvP Mapflags loaded."; // ============== Party 5vs5 =================// if($arena_debug) debugmes "Mapflag set at "+$@pt5pvp$[$pt5pvp_map] + " initiate..."; for ( set .@mf,0; .@mf < getarraysize(.pvp_mf); set .@mf,.@mf + 1 ) { if(.pvp_mf[.@mf] == 14 || .pvp_mf[.@mf] == 7) continue; setmapflag $@pt5pvp$[$pt5pvp_map],.pvp_mf[.@mf]; if($pt5pvp_map != $pt5pvp_last) removemapflag $@pt5pvp$[$pt5pvp_last],.pvp_mf[.@mf]; if($arena_debug) debugmes "Mapflag "+ .pvp_mf[.@mf] +" set at "+$@pt5pvp$[$pt5pvp_map] + " complete"; } freeloop(0); if($arena_debug) debugmes "Party 5v5 PvP Mapflags loaded."; if($arena_debug) debugmes "PvP Mapflags loaded."; end; OnPCLogoutEvent: if($@pvptable) { if(@killct) writeStats(@killct,1); if($@bty_type) writeBounty(@sphr,getcharid(0)); } end; OnPCKillEvent: if(PVP_BTY_CMAP() == 0) end; set .@v,killedrid; mapannounce strcharinfo(3),strcharinfo(0) + " has killed "+rid2name(.@v)+"!!!!!",0; set @killct,@killct + 1; if($arena_debug) { debugmes "[Arena]: Showing debug messages"; for ( set .@l,0; .@l < getarraysize($@sphree_kills); set .@l,.@l + 1) debugmes "[Arena]: Sphree Kills Array - Index #"+.@l+": "+$@sphree_kills[.@l]; for ( set .@l,0; .@l < getarraysize($@sphree_names$); set .@l,.@l + 1) debugmes "[Arena]: Sphree Names Array - Index #"+.@l+": "+$@sphree_names$[.@l]; for ( set .@l,0; .@l < getarraysize($@sphree_wav$); set .@l,.@l + 1) debugmes "[Arena]: Sphree WAV Names Array - Index #"+.@l+": "+$@sphree_wav$[.@l]; debugmes "[Arena]: Kill Counter Check and announces..."; debugmes "[Arena]: Kills: "+@killct+", Arraysize $@sphree_kills: "+getarraysize($@sphree_kills)+", last sphree kills: "+$@sphree_kills[getarraysize($@sphree_kills)-1]; } // Checking if the kill counter is below the last sphree number if(@killct <= $@sphree_kills[getarraysize($@sphree_kills)-1]) { if($arena_debug) debugmes "[Arena]: Kills is less than last sphree kill."; // Looping through the array to check for the sphree kill for ( set .@k,0; .@k < getarraysize($@sphree_kills); set .@k,.@k + 1) { if($arena_debug) debugmes "[Arena]: Array Index:"+.@k+", Array Content: "+$@sphree_kills[.@k]; if(@killct == $@sphree_kills[.@k]) { if($arena_debug) debugmes "[Arena]: "+@killct+", "+$@sphree_kills[.@k]; mapannounce strcharinfo(3),strcharinfo(0) + " is now on "+$@sphree_names$[.@k]+"!!!!",0; soundeffectall $@sphree_wav$[.@k]+".wav",0,strcharinfo(3); setd("@"+$@sphree_rank$[.@k]),getd("@"+$@sphree_rank$[.@k]) + 1; // Ranking Variable break; } } // Checking if the kill counter is above the last sphree number } else if(@killct >= $@sphree_kills[getarraysize($@sphree_kills)-1]) { mapannounce strcharinfo(3),strcharinfo(0) + " is now on "+$@sphree_names$[getarraysize($@sphree_names$)-1]+"!!!!",0; soundeffectall $@sphree_wav$[getarraysize($@sphree_wav$)-1]+".wav",0,strcharinfo(3); } if($arena_debug) debugmes "[Arena]: Check Done"; set @prokill,@prokill + 1; set @mkillct,@mkillct + 1; deltimer strnpcinfo(0)+"::OnMultiSpan"; addtimer $@multi,strnpcinfo(0)+"::OnMultiSpan"; if(@mkillct >= 4) sleep2 500; // Slowing down multi-kill sound effects if(@mkillct == 2) { mapannounce strcharinfo(3),strcharinfo(0) + " has made an Double Kill!!!!",0; soundeffectall "doublekill.wav",0,strcharinfo(3); } else if(@mkillct == 3) { mapannounce strcharinfo(3),strcharinfo(0) + " has made an Triple Kill!!!!",0; soundeffectall "triplekill.wav",0,strcharinfo(3); } else if(@mkillct >= 4) { mapannounce strcharinfo(3),strcharinfo(0) + " has made an Ultra Kill!!!!",0; soundeffectall "ultrakill.wav",0,strcharinfo(3); } if($@pvptable && $@bty_type) { if(@killct >= $@bty_bon_start) { if(!@hunt) { announce "Bounty Hunter: Oh My God!!! Someone stop "+strcharinfo(0)+" please!!! I'll give you a bonus of "+($@bty_bonus*$@bty_bonus_m)+" " + ( ($@bty_type == 1)?"Zeny": ( ($@bty_type == 2)?$@bty_cvard$:"Bounty Points") ) + " on "+ ( (Sex)?"his":"her") +" head!!",0; sleep2 2500; setarray .@pvp_pre$[0],"disp","n","dm","pt2","pt3","pt4","pt5"; setarray .@pvp_n$[0],"Dispell","Normal","Deathmatch","Party 2vs2","Party 3vs3","Party 4vs4","Party 5vs5"; for ( set .@l,0; .@l < getarraysize(.@pvp_pre$); set .@l,.@l + 1) for ( set .@m,1; .@m < getarraysize(getd("$@"+.@pvp_pre$[.@l]+"pvp$")); set .@m,.@m + 1) if(strcharinfo(3) == getd("$@"+.@pvp_pre$[.@l]+"pvp$["+.@m+"]")) { announce "Bounty Hunter: "+( (Sex)?"He":"She")+" is in the ["+.@pvp_n$[.@l]+" Arena]!!!",0; break; } for ( set .@m,0; .@m < getarraysize($@gvgr$); set .@m,.@m + 1) if(strcharinfo(3) == $@gvgr$[.@m]) { announce "Bounty Hunter: "+( (Sex)?"He":"She")+" is in the [Guild Room "+(.@m+1)+"]!!!",0; break; } if($@bty_cmap) for ( set .@m,0; .@m < getarraysize($@bty_cmaps$); set .@m,.@m + 1) if(compare(strcharinfo(3),$@bty_cmaps$[.@m]) == 1) { announce "Bounty Hunter: "+( (Sex)?"He":"She")+" is on the map ["+$@bty_cmaps$[.@m]+"]!!!",0; break; } set @hunt,1; } set @sphr,@killct + $@bty_bonus; } if(query_sql("SELECT `bounty` FROM `arena_master` WHERE `char_id` = '"+getcharid(0,rid2name(.@v))+"'",.@bty) != 0) getBounty(.@bty,.@v); writeBounty(@sphr,getcharid(0)); } if(@killct%5==0) message strcharinfo(0),"Defeated Players: "+@killct; end; OnPCDieEvent: if(PVP_BTY_CMAP() == 0) end; // ===== Should affects you only, if you warped to an player via @warpto/@goto or were @recall-ed // ==== so you won't recieve a value for @map, which is required for the respawn in DM Maps if(!@dm) if(strcharinfo(3) == $@dmpvp$[$dmpvp_map]) set @dm,1; if($@pvptable) { writeStats(@killct,1); if($@bty_type) writeBounty(@sphr,getcharid(0)); } set @sphr,0; set @killct,0; if(@dm) { if($arena_debug) debugmes "KillerRid: "+killerrid+", KilledRid: "+killedrid; sleep2 1300; if(killerrid != 0 && killerrid != getcharid(3)) { warp strcharinfo(3),0,0; if(HP == 0) atcommand "@alive"; percentheal 100,100; } else warp "SavePoint",0,0; } set @hunt,0; end; OnMultiSpan: set @mkillct,0; end; function writeStats { if(!$@pvptable) return; // To be save :O set .@k,getarg(0); // Kills set .@d,getarg(1); // Deaths if(query_sql("SELECT `char_id` FROM `arena_master` WHERE `char_id` = '"+getcharid(0)+"'",.@c_id) != 0) { if(.@k > query_sql("SELECT `hstreak` FROM `arena_master` WHERE `char_id` = '"+getcharid(0)+"'",.@hstreak)) set .@hstreak,.@k; // Adding General Kill/Death/Highstreak Values query_sql "UPDATE `arena_master` SET `kills` = `kills` + "+.@k+" , `death` = `death` + "+.@d+" , `hstreak` = '"+.@hstreak+"' , `killer` = `killer` + "+@killer+" , `domi` = `domi` + "+@domi+" , `mega` = `mega` + "+@mega+" , `unstopp` = `unstopp` + "+@unstopp+" , `wicked` = `wicked` + "+@wicked+" , `monster` = `monster` + "+@monster+" , `godlike` = `godlike` + "+@godlike+" , `holys` = `holys` + "+@holys+" WHERE `char_id` = '"+getcharid(0)+"'"; // Reseting Ranking Variables for ( set .@l,0; .@l < getarraysize($@sphree_rank$); set .@l,.@l + 1) setd("@"+$@sphree_rank$[.@l]),0; } else query_sql "INSERT INTO `arena_master` ( `char_id` , `kills` , `death` , `hstreak` , `killer` , `domi` , `mega` , `unstopp` , `wicked` , `monster` , `godlike` , `holys` ) VALUES ( '"+getcharid(0)+"' , '"+@k+"' , '"+@d+"' , '"+@k+"' , '"+@killer+"' , '"+@domi+"' , '"+@mega+"' , '"+@unstopp+"' , '"+@wicked+"' , '"+@monster+"' , '"+@godlike+"' , '"+@holys+"' )"; return; } function getBounty { // getarg(0) == Last Sphree of Victim // getarg(1) == RID of Victim if(!getarg(0)) return; // No Sphree = No Bounty ;I // Calculation: // Exchange the */+ with the symbol you want, // but note that it can be exploited if you change it too much, // like 8 (Sphree Index)*$@bty_price (Custom Points,5) = 40 Custom Points // If Bounty Bonus Multiplier is active if($@bty_bonus_multi == 1) set .@bty_b_gain,$@bty_bonus*$@bty_bonus_m; else set .@bty_b_gain,$@bty_bonus; if(getarg(0) >= $@bty_bon_start) mapannounce strcharinfo(3),"Bounty Hunter: "+strcharinfo(0)+" has ended "+rid2name(getarg(1))+"'s Spree and was rewarded with additional "+.@bty_b_gain+" " + ( ($@bty_type == 1)?"Zeny": ( ($@bty_type == 2)?$@bty_cvard$:"Bounty Points") ),0; switch($@bty_type) { // Bounty Reward Type case 1: // Zeny set Zeny,Zeny + ($@bty_price*getarg(0)) + .@bty_b_gain; dispbottom "Bounty Hunter: You have recieved "+($@bty_price*getarg(0)+.@bty_b_gain)+" Zeny for killing "+rid2name(getarg(1))+"."; break; case 2: // Custom Points setd(""+$@bty_cvarn$),getd(""+$@bty_cvarn$) + ($@bty_price+getarg(0)) + .@bty_b_gain; dispbottom "Bounty Hunter: You have recieved "+($@bty_price+getarg(0)+.@bty_b_gain)+" "+$@bty_cvard$+" for killing "+rid2name(getarg(1))+"."; dispbottom "You have now "+getd(""+$@bty_cvarn$)+" "+$@bty_cvard$+"."; break; case 3: // Bounty Points query_sql "UPDATE `arena_master` SET `bounty_pts` = `bounty_pts` + "+($@bty_price+getarg(0)+.@bty_b_gain)+" WHERE `char_id` = '"+getcharid(0)+"'"; dispbottom "Bounty Hunter: You have recieved "+($@bty_price+getarg(0)+.@bty_b_gain)+" Bounty Points for killing "+rid2name(getarg(1))+"."; break; } writeBounty(0,getcharid(0,rid2name(getarg(1)))); return; } function writeBounty { // getarg(0) == Kills // getarg(1) == Character ID query_sql "UPDATE `arena_master` SET `bounty` = '"+getarg(0)+"' WHERE `char_id` = '"+getarg(1)+"'"; return; } function PVP_BTY_CMAP { // Regular Maps in $@<.>pvp$ & $@gvgr$ array setarray .@pvp_pre$[0],"disp","dm","n","pt2","pt3","pt4","pt5"; for ( set .@l,0; .@l < getarraysize(.@pvp_pre$); set .@l,.@l + 1) for ( set .@m,1; .@m < getarraysize(getd("$@"+.@pvp_pre$[.@l]+"pvp$")); set .@m,.@m + 1) if(strcharinfo(3) == getd("$@"+.@pvp_pre$[.@l]+"pvp$["+.@m+"]")) return 1; for ( set .@m,0; .@m < getarraysize($@gvgr$); set .@m,.@m + 1) if(strcharinfo(3) == $@gvgr$[.@m]) return 1; // Mapflag if($@bty_cmap_type == 1) if(getmapflag(strcharinfo(3),mf_pvp) == 1 && getmapflag(strcharinfo(3),mf_gvg) == 1) return 1; // Custom Maps else if($@bty_cmap_type == 2) { // One Map if(getarraysize($@bty_cmaps$) == 1) if(compare(strcharinfo(3),$@bty_cmaps$[0]) == 1) return 1; // Array else if(getarraysize($@bty_cmaps$) > 1) for ( set .@m,0; .@m < getarraysize($@bty_cmaps$); set .@m,.@m + 1) if(compare(strcharinfo(3),$@bty_cmaps$[.@m]) == 1) return 1; } return 0; } // =========== End of Function ========== } and CREATE TABLE `arena_master` ( `char_id` int(10) unsigned NOT NULL, `kills` smallint(5) unsigned DEFAULT '0', `death` smallint(5) unsigned DEFAULT '0', `hstreak` smallint(5) unsigned DEFAULT '0', `bounty` smallint(5) unsigned DEFAULT '0', `bounty_pts` smallint(5) unsigned DEFAULT '0', `killer` smallint(5) unsigned DEFAULT '0', `domi` smallint(5) unsigned DEFAULT '0', `mega` smallint(5) unsigned DEFAULT '0', `unstopp` smallint(5) unsigned DEFAULT '0', `wicked` smallint(5) unsigned DEFAULT '0', `monster` smallint(5) unsigned DEFAULT '0', `godlike` smallint(5) unsigned DEFAULT '0', `holys` smallint(5) unsigned DEFAULT '0', PRIMARY KEY (`char_id`) ) ENGINE=MyISAM;
×
×
  • Create New...