Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
3389 lines (3133 sloc)
139 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //===== rAthena Script ======================================= | |
| //= Battle Royale Arenas | |
| //===== By =================================================== | |
| //= llchrisll | |
| //===== Version ============================================== | |
| //= 1.0 - Initial Version | |
| //= 1.1 - Revamped the Win code to actually support duo and squad | |
| // and added a custom event of OnPCDieEvent for all arenas | |
| // - Revamped Loot Boxes to have more loot and give equipment based on class | |
| // - Added Starter Armor config | |
| // - Changed Reward item to Gold Coin (7720) | |
| // - Added Taekwon Classes and Summoner to the job list | |
| // - Added Star Emperor/Soul Reaper and Summoner Skills to Restricted Skills | |
| // - Fixed a bug related to the Arena Mode (Solo, Duo and Squad) | |
| // - Added allowed skills for Soul Emperor/Soul Reaper/Rebellion/Kagerou&Oboro and Summoner | |
| // as well as changed some restricted skill of other classes | |
| // - Added the "Downed" feature, which allows party members to revive other members | |
| // - Added a way to use global configs instead of the same values for each area | |
| // - Added a config to make it to a Event, GM controlled | |
| // - Changed Arena Menu to be able to join only an active Battle Royale and for GM controlled Arenas | |
| // - Removed Restricted Gear stuff | |
| // - Changed Main NPC Sprite | |
| // - Added @brstart command for GM's, usable when '.Arena_Event' is active | |
| // - Modified the BR Arena Shop to use .br_shop array as item list | |
| //===== Tested With ========================================== | |
| //= rAthena 03/29/2021 Revision | |
| //= GIT Hash: 47c471e3d0e7997ae605ebf45760349f3b25d365 | |
| //===== Description ========================================== | |
| //= Easy configurable | |
| //= 20 Arenas to choose from (expandable) | |
| //= Loot Boxes with easy setup (Loot drops on the floor) | |
| //= Solo, Duo or Squad Types available (random every Day, if not set otherwise) | |
| //= Item Restriction to equipped Costumes (Top/Middle/Lower Headgear) | |
| //= Battle Royale Shop (Costumes) to spend your hard earned Gold Coins ($@BR_RewID) | |
| //= The items of dead players will drop around them | |
| //= Give starting weapon on spawn (.BR_StartWeapon) | |
| //= Give starting armor on spawn (.BR_StartArmor) | |
| //= Restricted Skills, see 'db/import/skill_nocast_db.txt' | |
| //= Save whole Inventory at Arena Start/Join or manually beforehand to prevent "cheating" | |
| //= Restore saved Inventory after Match or manually at the NPC | |
| //= Either GM controlled or Player controlled (Default) | |
| //===== Comments ============================================= | |
| //= Inspired by Battle Royale Games like PUBG | |
| //= Required File: BattleRoyale.rar | |
| //= By not having an command to theck for tradeable/storeable items, I added an workround: | |
| // Saving every equipment via array and delete them, by restoring you get everything back how it was. | |
| //===== ToDO ================================================= | |
| //= Optional: Add a check to define the server type (pre-renewal or renewal) | |
| // (Would affect Classes and Random Options) | |
| //============================================================ | |
| // Inventory Function | |
| function script BR_Inv { | |
| // getarg(0) = Behaviour: | |
| // > 1 = Delete (on Win) | |
| // > 2 = Drop (on Death) | |
| // Note: This below is a to prevent deletion of non-storeable equipments, like WoE Gear so it won't get deleted/dropped accidently | |
| // > 3 = Save Equip | |
| // > 4 = Load saved Equip | |
| if(getarg(0) == 4) { // Load saved Equipment | |
| if(getarraysize(BR_EQ_ID) == 0) | |
| return; | |
| for ( set .@g,0; .@g < getarraysize(BR_EQ_ID); set .@g,.@g + 1) { | |
| if(BR_EQ_OPT_ID1[.@g] == 0) | |
| getitem2 BR_EQ_ID[.@g],BR_EQ_AM[.@g],BR_EQ_IFY[.@g],BR_EQ_REF[.@g],BR_EQ_ATT[.@g],BR_EQ_C1[.@g],BR_EQ_C2[.@g],BR_EQ_C3[.@g],BR_EQ_C4[.@g]; | |
| else if(BR_EQ_OPT_ID1[.@g] != 0) { | |
| deletearray .@OptID[0],getarraysize(.@OptID); | |
| deletearray .@OptVal[0],getarraysize(.@OptVal); | |
| deletearray .@OptParam[0],getarraysize(.@OptParam); | |
| for ( set .@o,1; .@o <= 5; set .@o,.@o + 1) { | |
| setarray .@OptID[getarraysize(.@OptID)],getd("BR_EQ_OPT_ID"+.@o+"["+.@g+"]"); | |
| setarray .@OptVal[getarraysize(.@OptVal)],getd("BR_EQ_OPT_VAL"+.@o+"["+.@g+"]"); | |
| setarray .@OptParam[getarraysize(.@OptParam)],getd("BR_EQ_OPT_PAR"+.@o+"["+.@g+"]"); | |
| } | |
| getitem3 BR_EQ_ID[.@g],BR_EQ_AM[.@g],BR_EQ_IFY[.@g],BR_EQ_REF[.@g],BR_EQ_ATT[.@g],BR_EQ_C1[.@g],BR_EQ_C2[.@g],BR_EQ_C3[.@g],BR_EQ_C4[.@g],.@OptID,.@OptVal,.@OptParam; | |
| } | |
| if(BR_EQ_EQUIP[.@g]) | |
| equip BR_EQ_ID[.@g]; | |
| } | |
| // Array Clean-Up | |
| deletearray BR_EQ_ID[0],getarraysize(BR_EQ_ID); | |
| deletearray BR_EQ_AM[0],getarraysize(BR_EQ_AM); | |
| deletearray BR_EQ_EQUIP[0],getarraysize(BR_EQ_EQUIP); | |
| deletearray BR_EQ_REF[0],getarraysize(BR_EQ_REF); | |
| deletearray BR_EQ_IFY[0],getarraysize(BR_EQ_IFY); | |
| deletearray BR_EQ_ATT[0],getarraysize(BR_EQ_ATT); | |
| deletearray BR_EQ_C1[0],getarraysize(BR_EQ_C1); | |
| deletearray BR_EQ_C2[0],getarraysize(BR_EQ_C2); | |
| deletearray BR_EQ_C3[0],getarraysize(BR_EQ_C3); | |
| deletearray BR_EQ_C4[0],getarraysize(BR_EQ_C4); | |
| deletearray BR_EQ_EXP[0],getarraysize(BR_EQ_EXP); | |
| deletearray BR_EQ_BOUND[0],getarraysize(BR_EQ_BOUND); | |
| for ( set .@o,1; .@o <= 5; set .@o,.@o + 1) { | |
| deletearray getd("BR_EQ_OPT_ID"+.@o+"[0]"),getarraysize(getd("BR_EQ_OPT_ID"+.@o)); | |
| deletearray getd("BR_EQ_OPT_VAL"+.@o+"[0]"),getarraysize(getd("BR_EQ_OPT_VAL"+.@o)); | |
| deletearray getd("BR_EQ_OPT_PAR"+.@o+"[0]"),getarraysize(getd("BR_EQ_OPT_PAR"+.@o)); | |
| } | |
| // Information that the equipment has been restored | |
| announce "[Battle Royale]: You're entire equipment has been restored. See ya next time!",bc_blue|bc_self; | |
| return; | |
| } else if(getarg(0) == 3 && getarraysize(BR_EQ_ID) != 0) | |
| return; | |
| getinventorylist; | |
| for ( set .@l,0; .@l < @inventorylist_count; set .@l,.@l + 1) { | |
| if(@inventorylist_id[.@l] == 0) continue; | |
| if(getiteminfo(@inventorylist_id[.@l],2) == 3 && getiteminfo(@inventorylist_id[.@l],2) != 10) continue; // Ignoring ETC Items, except Ammo | |
| // Ignoring Character/Account Bounded Items | |
| if(@inventorylist_bound[.@i] == Bound_Char || @inventorylist_bound[.@i] == Bound_Account) continue; | |
| // Ignore equipped Costume Top + Middle + Lower Headgear | |
| if( @inventorylist_id[.@l] == getequipid(EQI_COSTUME_HEAD_TOP) || @inventorylist_id[.@l] == getequipid(EQI_COSTUME_HEAD_MID) || @inventorylist_id[.@l] == getequipid(EQI_COSTUME_HEAD_LOW) ) continue; | |
| if(getarg(0) == 1) // Delete | |
| delitem @inventorylist_id[.@l],@inventorylist_amount[.@l]; | |
| else if(getarg(0) == 2) { // Drop Item (makeitem usage) | |
| getmapxy(.@map$,.@x,.@y,BL_PC); | |
| set .@m,3; // Set range of area around the Player for makeitem | |
| switch(getiteminfo(@inventorylist_id[.@l],2)) { | |
| case 0: // Healing | |
| case 10: // Ammonation | |
| makeitem @inventorylist_id[.@l],@inventorylist_amount[.@l],.@map$,rand((.@x-.@m),(.@x+.@m)),rand((.@y-.@m),(.@y+.@m)); | |
| delitem @inventorylist_id[.@l],@inventorylist_amount[.@l]; | |
| break; | |
| case 4: // Armor | |
| case 5: // Weapon | |
| if(@inventorylist_option_id1[.@l] != 0) { // If Random Options are used | |
| for ( set .@o,1; .@o <= 5; set .@o,.@o + 1) { | |
| setarray .@OptID[getarraysize(.@OptID)],getd("@inventorylist_option_id"+.@o+"["+.@l+"]"); | |
| setarray .@OptVal[getarraysize(.@OptVal)],getd("@inventorylist_option_value"+.@o+"["+.@l+"]"); | |
| setarray .@OptParam[getarraysize(.@OptParam)],getd("@inventorylist_option_parameter"+.@o+"["+.@l+"]"); | |
| } | |
| makeitem3 @inventorylist_id[.@l],@inventorylist_amount[.@l],.@map$,rand((.@x-.@m),(.@x+.@m)),rand((.@y-.@m),(.@y+.@m)),1,@inventorylist_refine[.@l],0,@inventorylist_card1[.@l],@inventorylist_card2[.@l],@inventorylist_card3[.@l],@inventorylist_card4[.@l],.@OptID,.@OptVal,.@OptParam; | |
| delitem3 @inventorylist_id[.@l],@inventorylist_amount[.@l],1,@inventorylist_refine[.@l],0,@inventorylist_card1[.@l],@inventorylist_card2[.@l],@inventorylist_card3[.@l],@inventorylist_card4[.@l],.@OptID,.@OptVal,.@OptParam; | |
| } else { // If no Random Option are used | |
| makeitem2 @inventorylist_id[.@l],@inventorylist_amount[.@l],.@map$,rand((.@x-.@m),(.@x+.@m)),rand((.@y-.@m),(.@y+.@m)),1,@inventorylist_refine[.@l],0,@inventorylist_card1[.@l],@inventorylist_card2[.@l],@inventorylist_card3[.@l],@inventorylist_card4[.@l]; | |
| delitem2 @inventorylist_id[.@l],@inventorylist_amount[.@l],1,@inventorylist_refine[.@l],0,@inventorylist_card1[.@l],@inventorylist_card2[.@l],@inventorylist_card3[.@l],@inventorylist_card4[.@l]; | |
| } | |
| break; | |
| } | |
| } else if(getarg(0) == 3) { // Save Equipment | |
| setarray BR_EQ_ID[.@s],@inventorylist_id[.@l]; | |
| setarray BR_EQ_AM[.@s],@inventorylist_amount[.@l]; | |
| setarray BR_EQ_EQUIP[.@s],@inventorylist_equip[.@l]; | |
| setarray BR_EQ_REF[.@s],@inventorylist_refine[.@l]; | |
| setarray BR_EQ_IFY[.@s],@inventorylist_identify[.@l]; | |
| setarray BR_EQ_ATT[.@s],@inventorylist_attribute[.@l]; | |
| setarray BR_EQ_C1[.@s],@inventorylist_card1[.@l]; | |
| setarray BR_EQ_C2[.@s],@inventorylist_card2[.@l]; | |
| setarray BR_EQ_C3[.@s],@inventorylist_card3[.@l]; | |
| setarray BR_EQ_C4[.@s],@inventorylist_card4[.@l]; | |
| setarray BR_EQ_EXP[.@s],@inventorylist_expire[.@l]; | |
| setarray BR_EQ_BOUND[.@s],@inventorylist_bound[.@l]; | |
| for ( set .@o,1; .@o <= 5; set .@o,.@o + 1) { | |
| setarray getd("BR_EQ_OPT_ID"+.@o+"["+.@s+"]"),getd("@inventorylist_option_id"+.@o+"["+.@l+"]"); | |
| setarray getd("BR_EQ_OPT_VAL"+.@o+"["+.@s+"]"),getd("@inventorylist_option_value"+.@o+"["+.@l+"]"); | |
| setarray getd("BR_EQ_OPT_PAR"+.@o+"["+.@s+"]"),getd("@inventorylist_option_parameter"+.@o+"["+.@l+"]"); | |
| } | |
| set .@s,.@s + 1; | |
| // After saving the item data, delete it | |
| delitem @inventorylist_id[.@l],@inventorylist_amount[.@l]; | |
| } | |
| } | |
| if(getarg(0) == 3) | |
| announce "[Battle Royale]: You're entire equipment has been saved. You will get it restored, either after the Match or by talking to the NPC.",bc_blue|bc_self; | |
| return; | |
| } | |
| // Function to auto store invalid Items | |
| // Will be called when getting warped to the battlefield, so it won't overwrite the saved equipment from BR_Inv | |
| function script BR_AutoStorage { | |
| getinventorylist; | |
| for ( set .@i,0; .@i < @inventorylist_count; set .@i,.@i + 1) { | |
| if(getiteminfo(@inventorylist_id[.@i],2) == 3 || getiteminfo(@inventorylist_id[.@i],2) != 10) continue; // Ignoring ETC Items, except Ammo | |
| // Ignoring Character/Account Bounded Items | |
| if(@inventorylist_bound[.@i] == Bound_Char || @inventorylist_bound[.@i] == Bound_Account) continue; | |
| set .@it_ct,.@it_ct + 1; | |
| if( @inventorylist_id[.@i] == getequipid(EQI_COSTUME_HEAD_TOP) || @inventorylist_id[.@i] == getequipid(EQI_COSTUME_HEAD_MID) || @inventorylist_id[.@i] == getequipid(EQI_COSTUME_HEAD_LOW) ) { | |
| setarray .@id[.@c],@inventorylist_id[.@i]; | |
| setarray .@ref[.@c],@inventorylist_refine[.@i]; | |
| setarray .@c1[.@c],@inventorylist_card1[.@i]; | |
| setarray .@c2[.@c],@inventorylist_card2[.@i]; | |
| setarray .@c3[.@c],@inventorylist_card3[.@i]; | |
| setarray .@c4[.@c],@inventorylist_card4[.@i]; | |
| if(@inventorylist_option_id1[.@i] != 0) { | |
| setarray .@opt_id1[.@c],@inventorylist_option_id1[.@i]; | |
| setarray .@opt_v1[.@c],@inventorylist_option_value1[.@i]; | |
| setarray .@opt_p1[.@c],@inventorylist_option_parameter1[.@i]; | |
| setarray .@opt_ct[.@c],.@opt_ct[.@c] + 1; // Increase the Counter of Random Options for later | |
| if(@inventorylist_option_id2[.@i] != 0) { | |
| setarray .@opt_id2[.@c],@inventorylist_option_id2[.@i]; | |
| setarray .@opt_v2[.@c],@inventorylist_option_value2[.@i]; | |
| setarray .@opt_p2[.@c],@inventorylist_option_parameter2[.@i]; | |
| setarray .@opt_ct[.@c],.@opt_ct[.@c] + 1; | |
| if(@inventorylist_option_id3[.@i] != 0) { | |
| setarray .@opt_id3[.@c],@inventorylist_option_id3[.@i]; | |
| setarray .@opt_v3[.@c],@inventorylist_option_value3[.@i]; | |
| setarray .@opt_p3[.@c],@inventorylist_option_parameter3[.@i]; | |
| setarray .@opt_ct[.@c],.@opt_ct[.@c] + 1; | |
| if(@inventorylist_option_id4[.@i] != 0) { | |
| setarray .@opt_id4[.@c],@inventorylist_option_id4[.@i]; | |
| setarray .@opt_v4[.@c],@inventorylist_option_value4[.@i]; | |
| setarray .@opt_p4[.@c],@inventorylist_option_parameter4[.@i]; | |
| setarray .@opt_ct[.@c],.@opt_ct[.@c] + 1; | |
| if(@inventorylist_option_id5[.@i] != 0) { | |
| setarray .@opt_id5[.@c],@inventorylist_option_id5[.@i]; | |
| setarray .@opt_v5[.@c],@inventorylist_option_value5[.@i]; | |
| setarray .@opt_p5[.@c],@inventorylist_option_parameter5[.@i]; | |
| setarray .@opt_ct[.@c],.@opt_ct[.@c] + 1; | |
| } | |
| } | |
| } | |
| } | |
| setarray .@opt[.@c],1; // Quick Check if Random Options are on the current Item | |
| } | |
| set .@c_ct,.@c_ct + 1; | |
| set .@c,.@c + 1; // Proper Equipment List | |
| } | |
| } | |
| // If they equipped items are only Costumes, then skip the process below | |
| if(.@c_ct == .@it_ct) | |
| return; | |
| // Check if there are equipped costumes before deleting them | |
| if(getequipid(EQI_COSTUME_HEAD_TOP) != 0) delequip EQI_COSTUME_HEAD_TOP; | |
| if(getequipid(EQI_COSTUME_HEAD_MID) != 0) delequip EQI_COSTUME_HEAD_MID; | |
| if(getequipid(EQI_COSTUME_HEAD_LOW) != 0) delequip EQI_COSTUME_HEAD_LOW; | |
| atcommand "@storeall"; | |
| for ( set .@e,0; .@e < getarraysize(.@id); set .@e,.@e + 1) { | |
| if(.@opt[.@e] == 1) { | |
| for ( set .@o,1; .@o <= .@opt_ct[.@e]; set .@o,.@o + 1) { | |
| setarray .@OptID[getarraysize(.@OptID)],getd(".@opt_id"+.@o+"["+.@e+"]"); | |
| setarray .@OptVal[getarraysize(.@OptVal)],getd(".@opt_v"+.@o+"["+.@e+"]"); | |
| setarray .@OptParam[getarraysize(.@OptParam)],getd(".@opt_p"+.@o+"["+.@e+"]"); | |
| } | |
| getitem3 .@id[.@e],1,1,.@ref[.@e],0,.@c1[.@e],.@c2[.@e],.@c3[.@e],.@c4[.@e],.@OptID,.@OptVal,.@OptParam; | |
| } else if(!.@opt[.@e]) | |
| getitem2 .@id[.@e],1,1,.@ref[.@e],0,.@c1[.@e],.@c2[.@e],.@c3[.@e],.@c4[.@e]; | |
| equip .@id[.@e]; | |
| } | |
| return; | |
| } | |
| prontera,147,170,4 script Battle Royale#BR_NPC 4_M_KNIGHT_GOLD,{ | |
| function BR_TxTColor; | |
| mes .n$; | |
| mes "Welcome to the Battle Royale Arena!"; | |
| mes "What can I do for you?"; | |
| next; | |
| switch(select("- Register for Battle Royale:- Battle Royale Shop:- Information:- Equipment Settings:- Nevermind")) { | |
| case 1: | |
| if(getvariableofnpc(.BR_StartWeapon,"BR_Init") == 1 && !BR_WeaponType) { | |
| mes .n$; | |
| mes "You have to choose your starter weapon before starting/joining an arena."; | |
| next; | |
| switch(BaseClass) { | |
| case Job_Novice: | |
| switch(select("- Dagger:- Sword:- Mace:- Staff")) { | |
| case 1: set BR_WeaponType,1; break; | |
| case 2: set BR_WeaponType,2; break; | |
| case 3: set BR_WeaponType,8; break; | |
| case 4: set BR_WeaponType,10; break; | |
| } | |
| break; | |
| case Job_Swordman: | |
| if(BaseJob == Job_Knight) | |
| switch(select("- Sword:- Two-Handed Sword:- Spear")) { | |
| case 1: set BR_WeaponType,2; break; | |
| case 2: set BR_WeaponType,3; break; | |
| case 3: set BR_WeaponType,4; break; | |
| } | |
| else if(BaseJob == Job_Crusader) | |
| switch(select("- Sword:- Two-Handed Spear:- Spear")) { | |
| case 1: set BR_WeaponType,2; break; | |
| case 2: set BR_WeaponType,5; break; | |
| case 3: set BR_WeaponType,4; break; | |
| } | |
| else | |
| switch(select("- Sword:- Two-Handed Sword:- Spear")) { | |
| case 1: set BR_WeaponType,2; break; | |
| case 2: set BR_WeaponType,3; break; | |
| case 3: set BR_WeaponType,4; break; | |
| } | |
| break; | |
| case Job_Mage: | |
| if(BaseJob == Job_Wizard) | |
| switch(select("- Two-Handed Staff:- Staff")) { | |
| case 1: set BR_WeaponType,23; break; | |
| case 2: set BR_WeaponType,10; break; | |
| } | |
| else if(BaseJob == Job_Sage) | |
| switch(select("- Staff:- Book")) { | |
| case 1: set BR_WeaponType,10; break; | |
| case 2: set BR_WeaponType,15; break; | |
| } | |
| else | |
| switch(select("- Dagger:- Staff")) { | |
| case 1: set BR_WeaponType,1; break; | |
| case 2: set BR_WeaponType,10; break; | |
| } | |
| break; | |
| case Job_Archer: | |
| if(BaseJob == Job_Hunter) | |
| switch(select("- Dagger:- Bow")) { | |
| case 1: set BR_WeaponType,1; break; | |
| case 2: set BR_WeaponType,11; break; | |
| } | |
| else if(BaseJob == Job_Bard) | |
| switch(select("- Bow:- Musical Instrument")) { | |
| case 1: set BR_WeaponType,11; break; | |
| case 2: set BR_WeaponType,13; break; | |
| } | |
| else if(BaseJob == Job_Dancer) | |
| switch(select("- Bow:- Whip")) { | |
| case 1: set BR_WeaponType,11; break; | |
| case 2: set BR_WeaponType,14; break; | |
| } | |
| else | |
| switch(select("- Dagger:- Bow")) { | |
| case 1: set BR_WeaponType,1; break; | |
| case 2: set BR_WeaponType,11; break; | |
| } | |
| break; | |
| case Job_Acolyte: | |
| if(BaseJob == Job_Priest) | |
| switch(select("- Mace:- Staff:- Book")) { | |
| case 1: set BR_WeaponType,8; break; | |
| case 2: set BR_WeaponType,10; break; | |
| case 3: set BR_WeaponType,15; break; | |
| } | |
| else if(BaseJob == Job_Monk) | |
| switch(select("- Mace:- Knuckle")) { | |
| case 1: set BR_WeaponType,8; break; | |
| case 2: set BR_WeaponType,12; break; | |
| } | |
| else | |
| switch(select("- Mace:- Staff")) { | |
| case 1: set BR_WeaponType,8; break; | |
| case 2: set BR_WeaponType,10; break; | |
| } | |
| break; | |
| case Job_Merchant: | |
| if(BaseJob == Job_Blacksmith) | |
| switch(select("- Axe:- Two-Handed Axe")) { | |
| case 1: set BR_WeaponType,6; break; | |
| case 2: set BR_WeaponType,7; break; | |
| } | |
| else if(BaseJob == Job_Alchemist) | |
| switch(select("- Dagger:- Axe")) { | |
| case 1: set BR_WeaponType,1; break; | |
| case 2: set BR_WeaponType,6; break; | |
| } | |
| else | |
| switch(select("- Sword:- Mace:- Dagger:- Axe")) { | |
| case 1: set BR_WeaponType,2; break; | |
| case 2: set BR_WeaponType,8; break; | |
| case 3: set BR_WeaponType,1; break; | |
| case 4: set BR_WeaponType,6; break; | |
| } | |
| break; | |
| case Job_Thief: | |
| if(BaseJob == Job_Assassin) | |
| switch(select("- Dagger:- Katar")) { | |
| case 1: set BR_WeaponType,1; break; | |
| case 2: set BR_WeaponType,16; break; | |
| } | |
| else if(BaseJob == Job_Rogue) | |
| switch(select("- Dagger:- Bow")) { | |
| case 1: set BR_WeaponType,1; break; | |
| case 2: set BR_WeaponType,11; break; | |
| } | |
| else | |
| switch(select("- Sword:- Dagger")) { | |
| case 1: set BR_WeaponType,2; break; | |
| case 2: set BR_WeaponType,1; break; | |
| } | |
| break; | |
| case Job_Ninja: | |
| switch(select("- Dagger:- Fuuma Shuriken")) { | |
| case 1: set BR_WeaponType,1; break; | |
| case 2: set BR_WeaponType,22; break; | |
| } | |
| break; | |
| case Job_Gunslinger: | |
| switch(select("- Revolver:- Rifle:- Gatling Gun:- Shotgun")) { | |
| case 1: set BR_WeaponType,17; break; | |
| case 2: set BR_WeaponType,18; break; | |
| case 3: set BR_WeaponType,19; break; | |
| case 4: set BR_WeaponType,20; break; | |
| } | |
| break; | |
| case Job_Taekwon: | |
| if(BaseJob == Job_Star_Gladiator) | |
| set BR_WeaponType,15; | |
| else if(BaseJob == Job_Soul_Linker) | |
| switch(select("- Dagger:- Staff")) { | |
| case 1: set BR_WeaponType,1; break; | |
| case 2: set BR_WeaponType,10; break; | |
| } | |
| break; | |
| } | |
| } else if(getvariableofnpc(.BR_StartWeapon,"BR_Init") == 0 && BR_WeaponType) | |
| set BR_WeaponType,0; | |
| for ( set .@a,1; .@a <= .arena_size; set .@a,.@a + 1) | |
| if(getd("$@BR_Status_"+.@a) == 1) | |
| set .@c,.@a; | |
| mes .n$; | |
| if(.Arena_Event && getgroupid() < .Arena_Access && !.@c) { | |
| mes "The Battle Royale Arena was not started yet. Please come back later."; | |
| close; | |
| } | |
| if(!.@c) { | |
| for ( set .@c,1; .@c <= .arena_size; set .@c,.@c + 1) | |
| set .@a_menu$,.@a_menu$ + ( (getd("$@BR_Status_"+.@c) < 2)?"- "+.arena$[.@c*6-6] + " - ["+ ( (.arena$[.@c*6-1] == "1")?"Solo":( (.arena$[.@c*6-1] == "2")?"Duo":"Squad"))+"] (Inactive)":"")+ ( (.@c < .arena_size)?":":""); | |
| mes "Please choose the Arena:"; | |
| next; | |
| set .@id,select(.@a_menu$); // Arena ID | |
| mes .n$; | |
| } else | |
| set .@id,.@c; // Arena ID | |
| set .@i,.@id*6-6; // Array Index | |
| // Set different variables for easier access to the required data | |
| set .@name$,.arena$[.@i]; | |
| set .@min_p,atoi(.arena$[.@i+1]); | |
| set .@max_p,atoi(.arena$[.@i+2]); | |
| set .@min_l,atoi(.arena$[.@i+3]); | |
| set .@max_l,atoi(.arena$[.@i+4]); | |
| set .@type,atoi(.arena$[.@i+5]); | |
| // Reset variable if respective arena is not active | |
| if(getd("$@BR_Status_"+.@id) == 0 && .@id == @BR_ID) | |
| set @BR_ID,0; | |
| if(getd("$@BR_Status_"+.@id) == 1 && .@id == @BR_ID) { | |
| mes "Please wait until the Match has started."; | |
| close; | |
| } | |
| if(BaseLevel < .@min_l || BaseLevel > .@max_l) { | |
| mes "I'm sorry, but your level doesn't meet the requirement."; | |
| mes "Level Requirement: "+.@min_l+" - "+.@max_l; | |
| close; | |
| } | |
| if(.@type == 1 && getcharid(1)) { | |
| mes "I'm sorry, but you need to leave your party first."; | |
| close; | |
| } else if(.@type >= 2 && getcharid(1) == 0) { | |
| mes "I'm sorry, but you need to create a party first."; | |
| close; | |
| } | |
| if(.@type != 1) { | |
| if(getpartyleader(getcharid(1),1) != getcharid(3)) { | |
| mes "I'm sorry, but only the party leader can register the party."; | |
| close; | |
| } | |
| getpartymember(getcharid(1),1); | |
| getpartymember(getcharid(1),2); | |
| set .@pty_ct,$@partymembercount; | |
| copyarray .@pty_aid[0],$@partymemberaid[0],.@pty_ct; | |
| copyarray .@pty_cid[0],$@partymembercid[0],.@pty_ct; | |
| for ( set .@p,0; .@p < .@pty_ct; set .@p,.@p + 1) | |
| if(isloggedin(.@pty_aid[.@p],.@pty_cid[.@p]) == 1) | |
| set .@online,.@online + 1; | |
| if(.@online != .@type) { | |
| mes "It seems like there are either too many or too less members in your party."; | |
| mes "Please be sure to match the correct player limit."; | |
| close; | |
| } | |
| } | |
| mes "===== ^FF0000["+.@name$+"]^000000 ====="; | |
| if(!getd("$@BR_Status_"+.@id)) { | |
| mes "Do you want to start an Battle Royale?"; | |
| if(select("- Yes:- No") - 1) close; | |
| if( (.Arena_Event && getgroupid() < .Arena_Access) || !.Arena_Event) { | |
| next; | |
| mes .n$; | |
| mes "I will now store every equipment except your Costume Headgears for you, if you didn't do that already!"; | |
| mes "You will retrieve it after the match."; | |
| close2; | |
| if(.@type == 1) { | |
| BR_Inv(3); | |
| setarray getd("$@BR_RegQ"+.@id+"[0]"),getcharid(0); | |
| } else { | |
| for ( set .@a,0; .@a < .@pty_ct; set .@a,.@a + 1) | |
| if(isloggedin(.@pty_aid[.@a],.@pty_cid[.@a]) == 1) { | |
| attachrid(.@pty_aid[.@a]); | |
| setarray getd("$@BR_RegQ"+.@id+"["+getarraysize(getd("$@BR_RegQ"+.@id))+"]"),getcharid(0); | |
| set @BR_ID,.@id; | |
| BR_Inv(3); | |
| } | |
| } | |
| set @BR_ID,.@id; | |
| } | |
| announce "[Battle Royale - "+.arena$[.@i]+"]: The Arena has been opened. Everybody which want to participate come to me! You have "+$@BR_RegTimer+" Minute"+(($@BR_RegTimer > 1)?"s":"")+" to register!",bc_all; | |
| setd("$@BR_Status_"+.@id),1; | |
| enablenpc "BR_Arena#"+.@id; | |
| donpcevent "BR_Arena#"+.@id+"::OnRegisterTimer"; | |
| } else if(getd("$@BR_Status_"+.@id) == 1) { | |
| mes "Do you want to join the Battle Royale?"; | |
| if(select("- Yes:- No") - 1) close; | |
| next; | |
| mes .n$; | |
| for ( set .@c,0; .@c < getarraysize(getd("$@BR_RegQ"+.@id)); set .@c,.@c + 1) | |
| if(getcharid(0) == getd("$@BR_RegQ"+.@id+"["+.@c+"]")) { | |
| mes "It seems like you are registered already."; | |
| close; | |
| } | |
| mes "I will now store every equipment except your Costume Headgears for you, if you didn't do that already!"; | |
| mes "You will retrieve it after the match."; | |
| close2; | |
| if(.@type == 1) { | |
| BR_Inv(3); | |
| setarray getd("$@BR_RegQ"+.@id+"["+getarraysize(getd("$@BR_RegQ"+.@id))+"]"),getcharid(0); | |
| } else { | |
| for ( set .@a,0; .@a < .@pty_ct; set .@a,.@a + 1) | |
| if(isloggedin(.@pty_aid[.@a],.@pty_cid[.@a]) == 1) { | |
| attachrid(.@pty_aid[.@a]); | |
| setarray getd("$@BR_RegQ"+.@id+"["+getarraysize(getd("$@BR_RegQ"+.@id))+"]"),getcharid(0); | |
| set @BR_ID,.@id; | |
| BR_Inv(3); | |
| } | |
| } | |
| set @BR_ID,.@id; | |
| } else { | |
| mes "I'm sorry, but you can't register currently for the chosen Arena, since it's still in progress."; | |
| close; | |
| } | |
| end; | |
| // Battle Royale Shop | |
| case 2: | |
| mes .n$; | |
| mes "Your currently have "+countitem($@BR_RewID)+"x "+getitemname($@BR_RewID)+"."; | |
| mes " "; | |
| mes "Do you want to open the Shop?"; | |
| if(select("- Yes:- No") - 1) close; | |
| close2; | |
| npcshopattach "BR_Shop"; | |
| callshop "BR_Shop",1; | |
| break; | |
| // Information | |
| case 3: | |
| mes .n$; | |
| mes "About what do you want to learn more?"; | |
| next; | |
| switch(select("- Game Mode:- Arena's:- Restricted Skills:- Nevermind")) { | |
| // ===== Game Mode ===== | |
| case 1: | |
| mes .n$; | |
| mes "There are 3 different Types of Battle Royale, which are randomized every day per Arena or are specified:"; | |
| mes " > Solo: No parties allowed"; | |
| mes " > Duo: Two members per Party."; | |
| mes " > Squad: 4 members per Party."; | |
| next; | |
| mes .n$; | |
| mes "To register just select \"Register\" in the main menu. Depending on the current type, you need either a total of 2 players (Duo) or 4 players (Squad) to participate."; | |
| mes "Solo should be obvious. Also you are only allowed to have equipped Costumes, which are limited to Head, Middle and Low Headgears."; | |
| mes "Also your whole inventory will be saved before the actual match starts, to prevent anyone from cheating by having unstoreable equipment."; | |
| mes "After the match your inventory will be restored back to how it was. You also can do that manually by choosing \"Equipment Settings\"."; | |
| mes "After passing these conditions and enough player have registered, you'll be warped randomly on the battlefield."; | |
| mes "Every @Command is disabled and only a few Skills are enabled. See \"Restricted Skills\" for more info."; | |
| mes "The zone is where you should be inside of to be safe from the damage you will recieve every 5 seconds while outside of it."; | |
| mes "It's also getting smaller everytime after a certain time has passed."; | |
| mes "But that will be announced before it starts to move."; | |
| next; | |
| mes .n$; | |
| if(getvariableofnpc(.BR_StartWeapon,"BR_Init") == 1) { | |
| mes "Every class recieves an starter weapon on entering the battlefield."; | |
| mes "But you have to choose it before you start/join an arena."; | |
| } | |
| if(getvariableofnpc(.BR_StartArmor,"BR_Init") == 1) | |
| mes "Every class recieves starter armor on entering the battlefield."; | |
| mes "On the battlefield you can find equipment in Lootboxes, which are hidden."; | |
| mes "The Lootboxes can contain random equipment and healing items."; | |
| next; | |
| mes .n$; | |
| mes "The reward for participating are "+getitemname($@BR_RewID)+"'s, the total amount what you can gain is affected by Kills and your Placement."; | |
| mes "The placement will counted when you die or win the match."; | |
| break; | |
| // ===== Arena Information ===== | |
| case 2: | |
| mes .n$; | |
| mes "By choosing any of the following Arena's, I will display you every Information:"; | |
| for ( set .@c,1; .@c <= .arena_size; set .@c,.@c + 1) | |
| set .@a_menu$,.@a_menu$ + "- "+.arena$[.@c*6-6] + ( (.@c < .arena_size)?":":""); | |
| set .@id,select(.@a_menu$); // Arena ID | |
| set .@i,.@id*6-6; // Array Index | |
| next; | |
| mes "[ === "+.arena$[.@i]+" === ]"; | |
| mes "[ > Basic < ]"; | |
| mes " > Minimum players: "+atoi(.arena$[.@i+1]); | |
| mes " > Maximum players: "+atoi(.arena$[.@i+2]); | |
| mes " > Registration Timer: "+$@BR_RegTimer+" Minute"+ ($@BR_RegTimer > 1)?"s":""; | |
| mes " > Minimum Level: "+atoi(.arena$[.@i+3]); | |
| mes " > Maximum Level: "+atoi(.arena$[.@i+4]); | |
| mes " "; | |
| mes "[ > Zone < ]"; | |
| mes " > Last Zone Size: "+getvariableofnpc(getd(".last_zone_size_"+.@id),"BR_Init")+" Cells"; | |
| mes " > Minimum cells from borders: "+getvariableofnpc(getd(".zone_start_"+.@id),"BR_Init")+" Cells"; | |
| mes " > Zone Movement: "+getvariableofnpc(getd(".zone_move_"+.@id),"BR_Init")+" Cells"; | |
| mes " > Zone Timer: "+getvariableofnpc(getd(".zone_time_"+.@id),"BR_Init")+" seconds"; | |
| mes " > Reveal Timer: "+getvariableofnpc(getd(".reveal_time_"+.@id),"BR_Init")+" seconds"; | |
| mes " "; | |
| mes "[ > Reward < ]"; | |
| mes " > Multiplier of Placements:"; | |
| for ( set .@p,1; .@p < getarraysize(getvariableofnpc(getd(".rew_place_"+.@id),"BR_Init")); set .@p,.@p + 1) | |
| mes " - "+(.@p+1)+": x"+getvariableofnpc(getd(".rew_place_"+.@id+"["+.@p+"]"),"BR_Init"); | |
| mes " > Minimum Reward: "+getvariableofnpc(getd(".rew_base_"+.@id),"BR_Init")+" "+getitemname($@BR_RewID)+"'s"; | |
| mes " "; | |
| mes "[ > Loot Box < ]"; | |
| mes " > Amount of Loot Boxes available: "+getvariableofnpc(getd(".loot_box_"+.@id),"BR_Init"); | |
| break; | |
| // ===== Restricted Skills ===== | |
| case 3: | |
| mes .n$; | |
| mes "In Battle Royale every Class only has a few skills available."; | |
| mes "Yes, even a Novice is included."; | |
| next; | |
| mes .n$; | |
| mes "Please select the Class from which you want to available skills being listed:"; | |
| mes "Note: The skills are ordered by their Base Class."; | |
| while(@menu != 255) { | |
| next; | |
| switch(prompt("- Novice:- Swordsman:- Mage:- Archer:- Acolyte:- Merchant:- Thief:- Ninja:- Gunslinger:- Taekwon:- Summoner")) { | |
| // Skill Formating - Use the function like below: | |
| // BR_TxTColor(1,"Class") = Color for the Class | |
| // BR_TxTColor(2,"Skill") = Color for the Skill | |
| // BR_TxTColor(3," ") = Just an empty space, didn't want to use mes for that. | |
| case 1: | |
| BR_TxTColor(1,"Novice"); | |
| BR_TxTColor(2,"First Aid"); | |
| break; | |
| case 2: | |
| BR_TxTColor(1,"Swordman"); | |
| BR_TxTColor(2,"Bash"); | |
| BR_TxTColor(2,"Endure"); | |
| next; | |
| BR_TxTColor(1,"Knight"); | |
| BR_TxTColor(2,"Spear Boomerang"); | |
| BR_TxTColor(2,"Two-Handed Quicken"); | |
| BR_TxTColor(2,"Bowling Bash"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Lord Knight"); | |
| BR_TxTColor(2,"Concentration"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Rune Knight"); | |
| BR_TxTColor(2,"Enchant Blade"); | |
| BR_TxTColor(2,"Sonic Wave"); | |
| BR_TxTColor(2,"Phantom Thrust"); | |
| next; | |
| BR_TxTColor(1,"Crusader"); | |
| BR_TxTColor(2,"Auto Guard"); | |
| BR_TxTColor(2,"Shield Boomerang"); | |
| BR_TxTColor(2,"Spear Quicken"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Paladin"); | |
| BR_TxTColor(2,"Pressure"); | |
| BR_TxTColor(2,"Shield Chain"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Royal Guard"); | |
| BR_TxTColor(2,"Cannon Spear"); | |
| BR_TxTColor(2,"Pinpoint Attack"); | |
| BR_TxTColor(2,"Shield Spell"); | |
| BR_TxTColor(2,"Over Brand"); | |
| break; | |
| case 3: | |
| BR_TxTColor(1,"Mage"); | |
| BR_TxTColor(2,"Sight"); | |
| BR_TxTColor(2,"Fire Ball"); | |
| BR_TxTColor(2,"Fire Wall"); | |
| next; | |
| BR_TxTColor(1,"Wizard"); | |
| BR_TxTColor(2,"Jupital Thunder"); | |
| BR_TxTColor(2,"Earth Spike"); | |
| BR_TxTColor(2,"Quagmire"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"High Wizard"); | |
| BR_TxTColor(2,"Magic Crusher"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Warlock"); | |
| BR_TxTColor(2,"Soul Expansion"); | |
| BR_TxTColor(2,"Recognized Spell"); | |
| BR_TxTColor(2,"Crimson Rock"); | |
| BR_TxTColor(2,"Chain Lightning"); | |
| next; | |
| BR_TxTColor(1,"Sage"); | |
| BR_TxTColor(2,"Magic Rod"); | |
| BR_TxTColor(2,"Spell Breaker"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Professor"); | |
| BR_TxTColor(2,"Indulge"); | |
| BR_TxTColor(2,"Soul Change"); | |
| BR_TxTColor(2,"Memorize"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Scholar"); | |
| BR_TxTColor(2,"Fire Walk"); | |
| BR_TxTColor(2,"Diamond Dust"); | |
| BR_TxTColor(2,"Vacuum Extreme"); | |
| break; | |
| case 4: | |
| BR_TxTColor(1,"Archer"); | |
| BR_TxTColor(2,"Improve Concentration"); | |
| next; | |
| BR_TxTColor(1,"Hunter"); | |
| BR_TxTColor(2,"Blitz Beat"); | |
| BR_TxTColor(2,"Detect"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Sniper"); | |
| BR_TxTColor(2,"True Sight"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Ranger"); | |
| BR_TxTColor(2,"Fear Breeze"); | |
| BR_TxTColor(2,"Aimed Bolt"); | |
| BR_TxTColor(2,"Sensitive Keen"); | |
| BR_TxTColor(2,"Camouflage"); | |
| next; | |
| BR_TxTColor(1,"Bard"); | |
| BR_TxTColor(2,"Adapation"); | |
| BR_TxTColor(2,"Encore"); | |
| BR_TxTColor(2,"Melody Strike"); | |
| BR_TxTColor(2,"Frost Joker"); | |
| BR_TxTColor(2,"Assassin Cross of Sunset"); | |
| BR_TxTColor(2,"Poem of Bragi"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Dancer"); | |
| BR_TxTColor(2,"Adapation"); | |
| BR_TxTColor(2,"Encore"); | |
| BR_TxTColor(2,"Slinging Arrow"); | |
| BR_TxTColor(2,"Scream"); | |
| BR_TxTColor(2,"Fortune's Kiss"); | |
| BR_TxTColor(2,"Service for you"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Clown/Gypsy"); | |
| BR_TxTColor(2,"Arrow Vulcan"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Minstrel/Wanderer"); | |
| BR_TxTColor(2,"Severe Rainstorm"); | |
| break; | |
| case 5: | |
| BR_TxTColor(1,"Acolyte"); | |
| BR_TxTColor(2,"Increase AGI"); | |
| BR_TxTColor(2,"Blessing"); | |
| BR_TxTColor(2,"Holy Light"); | |
| BR_TxTColor(3," "); | |
| next; | |
| BR_TxTColor(1,"Priest"); | |
| BR_TxTColor(2,"Impositio Magnus"); | |
| BR_TxTColor(2,"Kyrie Eleison"); | |
| BR_TxTColor(2,"Magnificat"); | |
| BR_TxTColor(2,"Lex Divina"); | |
| BR_TxTColor(2,"Lex Aeterna"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"High Priest"); | |
| BR_TxTColor(2,"Assumptio"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Arch Bishop"); | |
| BR_TxTColor(2,"Judex"); | |
| BR_TxTColor(2,"Highness Heal"); | |
| BR_TxTColor(2,"Duple Light"); | |
| BR_TxTColor(2,"Sacrament"); | |
| next; | |
| BR_TxTColor(1,"Monk"); | |
| BR_TxTColor(2,"Call Spirits"); | |
| BR_TxTColor(2,"Absorb Spirits"); | |
| BR_TxTColor(2,"Chain Combo"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Champion"); | |
| BR_TxTColor(2,"Dangerous Soul Collect"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Sura"); | |
| BR_TxTColor(2,"Dragon Combo"); | |
| BR_TxTColor(2,"Sky Net Blow"); | |
| BR_TxTColor(2,"Lightning Walk"); | |
| BR_TxTColor(2,"Raising Dragon"); | |
| break; | |
| case 6: | |
| BR_TxTColor(1,"Merchant"); | |
| BR_TxTColor(2,"Cart Revolution"); | |
| BR_TxTColor(2,"Crazy Uproar"); | |
| next; | |
| BR_TxTColor(1,"Blacksmith"); | |
| BR_TxTColor(2,"Hammer Fall"); | |
| BR_TxTColor(2,"Adrenaline Rush"); | |
| BR_TxTColor(2,"Weapon Perfection"); | |
| BR_TxTColor(2,"Power Trust"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Whitesmith"); | |
| BR_TxTColor(2,"Cart Termination"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Mechanic"); | |
| BR_TxTColor(2,"Arm Cannon"); | |
| BR_TxTColor(2,"Acceleration"); | |
| BR_TxTColor(2,"Front-Side Slide"); | |
| BR_TxTColor(2,"Axe Boomerang"); | |
| BR_TxTColor(2,"Axe Tornado"); | |
| next; | |
| BR_TxTColor(1,"Alchemist"); | |
| BR_TxTColor(2,"Call Homunculus"); | |
| BR_TxTColor(2,"Vaporize"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Creator"); | |
| BR_TxTColor(2,"Slim Potion Pitcher"); | |
| BR_TxTColor(2,"Acid Demonstration"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Genetic"); | |
| BR_TxTColor(2,"Cart Tornado"); | |
| BR_TxTColor(2,"Cart Boost"); | |
| BR_TxTColor(2,"Fire Expansion"); | |
| break; | |
| case 7: | |
| BR_TxTColor(1,"Thief"); | |
| BR_TxTColor(2,"Envenom"); | |
| BR_TxTColor(2,"Back Slide"); | |
| next; | |
| BR_TxTColor(1,"Assassin"); | |
| BR_TxTColor(2,"Cloaking"); | |
| BR_TxTColor(2,"Enchant Poison"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Assassin Cross"); | |
| BR_TxTColor(2,"Meteor Assault"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Guillotine Cross"); | |
| BR_TxTColor(2,"Cross Impact"); | |
| BR_TxTColor(2,"Weapon Blocking"); | |
| BR_TxTColor(2,"Cloaking Exceed"); | |
| BR_TxTColor(2,"Rolling Cutter"); | |
| next; | |
| BR_TxTColor(1,"Rogue"); | |
| BR_TxTColor(2,"Back Stab"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Stalker"); | |
| BR_TxTColor(2,"Reject Sword"); | |
| BR_TxTColor(2,"Preserve"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Shadow Chaser"); | |
| BR_TxTColor(2,"Reproduce"); | |
| BR_TxTColor(2,"Auto Shadow Spell"); | |
| BR_TxTColor(2,"Shadow Form"); | |
| BR_TxTColor(2,"Traingle Shot"); | |
| break; | |
| case 8: | |
| BR_TxTColor(1,"Ninja"); | |
| BR_TxTColor(2,"Throw Huuma Shuriken"); | |
| BR_TxTColor(2,"Flip Tatami"); | |
| BR_TxTColor(2,"Cicada Skin Sheeding"); | |
| BR_TxTColor(2,"Crimson Fire Petal"); | |
| next; | |
| BR_TxTColor(1,"Kagerou/Oboro"); | |
| BR_TxTColor(2,"Shadow Hiding"); | |
| BR_TxTColor(2,"Cross Slash"); | |
| BR_TxTColor(2,"Swirling Petal"); | |
| BR_TxTColor(2,"Pure Soul"); | |
| BR_TxTColor(2,"Illusion - Shadow"); | |
| BR_TxTColor(2,"Illusion - Death"); | |
| BR_TxTColor(2,"Cast Ninja Spell"); | |
| BR_TxTColor(2,"16th Night"); | |
| BR_TxTColor(2,"Shadow Trampling"); | |
| break; | |
| case 9: | |
| BR_TxTColor(1,"Gunslinger"); | |
| BR_TxTColor(2,"Flip the Coin"); | |
| BR_TxTColor(2,"Fling"); | |
| BR_TxTColor(2,"Triple Action"); | |
| BR_TxTColor(2,"Madness Canceller"); | |
| BR_TxTColor(2,"Adjustment"); | |
| BR_TxTColor(2,"Increasing Accuracy"); | |
| BR_TxTColor(2,"Piercing Shot"); | |
| BR_TxTColor(2,"Rapid Shower"); | |
| BR_TxTColor(2,"Desperado"); | |
| BR_TxTColor(2,"Dust"); | |
| BR_TxTColor(2,"Full Buster"); | |
| BR_TxTColor(2,"Spread Attack"); | |
| BR_TxTColor(2,"Ground Drift"); | |
| next; | |
| BR_TxTColor(1,"Rebellion"); | |
| BR_TxTColor(2,"Rich's Coin"); | |
| BR_TxTColor(2,"Shattering Storm"); | |
| BR_TxTColor(2,"Crimson Marker"); | |
| BR_TxTColor(2,"Fire Dance"); | |
| BR_TxTColor(2,"Platinum Alter"); | |
| BR_TxTColor(2,"Round Trip"); | |
| BR_TxTColor(2,"Fire Rain"); | |
| BR_TxTColor(2,"Heat Barrel"); | |
| BR_TxTColor(2,"Anti-Material Blast"); | |
| break; | |
| case 10: | |
| BR_TxTColor(1,"Taekwon"); | |
| BR_TxTColor(2,"Running"); | |
| BR_TxTColor(2,"Tumbling"); | |
| BR_TxTColor(2,"Flying Kick"); | |
| BR_TxTColor(2,"Mild Wind"); | |
| next; | |
| BR_TxTColor(1,"Star Gladiator"); | |
| BR_TxTColor(2,"No Skills"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Star Emporer"); | |
| BR_TxTColor(2,"Star Stance"); | |
| BR_TxTColor(2,"Flash Kick"); | |
| BR_TxTColor(2,"Falling Star"); | |
| BR_TxTColor(2,"Sun Stance"); | |
| BR_TxTColor(2,"Prominence Kick"); | |
| BR_TxTColor(2,"Solar Burst"); | |
| BR_TxTColor(2,"Universe Stance"); | |
| BR_TxTColor(2,"Nova Explosion"); | |
| next; | |
| BR_TxTColor(1,"Soul Linker"); | |
| BR_TxTColor(2,"Alchemist Spirit"); | |
| BR_TxTColor(2,"Monk Spirit"); | |
| BR_TxTColor(2,"Star Gladiator Spirit"); | |
| BR_TxTColor(2,"Sage Spirit"); | |
| BR_TxTColor(2,"Crusader Spirit"); | |
| BR_TxTColor(2,"Super Novice Spirit"); | |
| BR_TxTColor(2,"Knight Spirit"); | |
| BR_TxTColor(2,"Wizard Spirit"); | |
| BR_TxTColor(2,"Priest Spirit"); | |
| BR_TxTColor(2,"Bard and Dancer Spirit"); | |
| BR_TxTColor(2,"Rogue Spirit"); | |
| BR_TxTColor(2,"Assassin Spirit"); | |
| BR_TxTColor(2,"Blacksmith Spirit"); | |
| BR_TxTColor(2,"Hunter Spirit"); | |
| BR_TxTColor(2,"Soul Linker Spirit"); | |
| BR_TxTColor(2,"Rebirth Spirit"); | |
| BR_TxTColor(2,"Kaahi"); | |
| BR_TxTColor(2,"Kaupe"); | |
| BR_TxTColor(2,"Kaute"); | |
| BR_TxTColor(3," "); | |
| BR_TxTColor(1,"Soul Reaper"); | |
| BR_TxTColor(2,"Golem Soul"); | |
| BR_TxTColor(2,"Shadow Soul"); | |
| BR_TxTColor(2,"Falcon Soul"); | |
| BR_TxTColor(2,"Fairy Soul"); | |
| BR_TxTColor(2,"Curse Explosion"); | |
| BR_TxTColor(2,"Curse of Wicked Soul"); | |
| BR_TxTColor(2,"Soul Reaper"); | |
| BR_TxTColor(2,"Soul Revolution"); | |
| BR_TxTColor(2,"Soul Collect"); | |
| BR_TxTColor(2,"Soul Explosion"); | |
| BR_TxTColor(2,"Kaute"); | |
| break; | |
| case 11: | |
| BR_TxTColor(1,"Summoner"); | |
| BR_TxTColor(2,"Bite"); | |
| BR_TxTColor(2,"Hide"); | |
| BR_TxTColor(2,"Scratch"); | |
| BR_TxTColor(2,"Stoop"); | |
| BR_TxTColor(2,"Lope"); | |
| BR_TxTColor(2,"Silvervine Stem Spear"); | |
| BR_TxTColor(2,"Silvervine Root Twist"); | |
| BR_TxTColor(2,"Picky Peck"); | |
| BR_TxTColor(2,"Arclouse Dash"); | |
| BR_TxTColor(2,"Tuna Party"); | |
| BR_TxTColor(2,"Fresh Shrimp"); | |
| BR_TxTColor(2,"Power of Flock"); | |
| BR_TxTColor(2,"Hiss"); | |
| BR_TxTColor(2,"Grooming"); | |
| BR_TxTColor(2,"Purring"); | |
| BR_TxTColor(2,"Tasty Shrimp Party"); | |
| BR_TxTColor(2,"Chattering"); | |
| break; | |
| } | |
| continue; | |
| } // End of while(@menu != 255) | |
| break; | |
| // ===== Nevermind ===== | |
| case 4: break; | |
| } | |
| break; | |
| // ===== Equipment Settings ===== | |
| case 4: | |
| mes .n$; | |
| mes "What would you like to do?"; | |
| next; | |
| if(select("- Reset Starter Weapon:- Restore Equipment") == 1) { | |
| mes .n$; | |
| // ===== Reset Starter Weapon ===== | |
| if(getvariableofnpc(.BR_StartWeapon,"BR_Init") == 0 || !BR_WeaponType) { | |
| mes "It seems like you can't reset your starter weapon."; | |
| mes "The feature is disabled or you didn't chose one yet."; | |
| close; | |
| } | |
| mes "Do you really want to reset your starter weapon?"; | |
| if(select("- Yes:- No") - 1) close; | |
| next; | |
| mes .n$; | |
| mes "Here we go!"; | |
| set BR_WeaponType,0; | |
| // ===== Restore Equipment ===== | |
| } else { | |
| mes .n$; | |
| if(getarraysize(BR_EQ_ID) != 0) | |
| BR_Inv(4); | |
| else { | |
| mes "There is nothing to restore!"; | |
| break; | |
| } | |
| mes "Restoring Equipment done."; | |
| } | |
| break; | |
| // ===== Nevermind ===== | |
| case 5: break; | |
| } | |
| end; | |
| OnWaitingRoom: | |
| while(1) { | |
| set .@w,0; | |
| for ( set .@p,1; .@p <= .arena_size; set .@p,.@p + 1) { | |
| if(getd("$@BR_Status_"+.@p)) { | |
| set .@w,.@w + 1; | |
| if(getd("$@BR_Status_"+.@p) == 1) | |
| set .@pub_txt$,"Registration - "+getarraysize(getd("$@BR_RegQ"+.@p))+"/"+atoi(.arena$[.@p*6-4]); | |
| else if(getd("$@BR_Status_"+.@p) == 2) | |
| set .@pub_txt$,"Match in Progress"; | |
| delwaitingroom; | |
| waitingroom .arena$[.@p*6-6]+" - "+.@pub_txt$,0; | |
| } else if(getd("$@BR_Status_"+.@p) == 0) // If arena is inactive, don't display it | |
| continue; | |
| sleep 5000; // Delay until the status of the next Arena will be displayed (5 sec) (if it's active) | |
| } | |
| if(!.@w) { | |
| delwaitingroom; | |
| waitingroom "Battle Royal - Inactive",0; | |
| } | |
| sleep 5000; // Delay until the above repeats (5 sec) | |
| } | |
| end; | |
| OnInit: | |
| set .n$,"["+strnpcinfo(1)+"]"; | |
| // GM Control | |
| // - Defines if the Battle Royale is GM controlled or not | |
| // > 1 = Yes, 0 = No (Default) | |
| set .Arena_Event,0; | |
| // Defines the minimum required GM Group ID, only if GM Control is on | |
| if(.Arena_Event) { | |
| set .Arena_Access,4; // Default: 4 (Event Manager) | |
| // Enables also a custom command - @brstart | |
| bindatcmd "brstart",strnpcinfo(0)+"::OnAtCommand",.Arena_Access; | |
| } | |
| // ===== Battle Royale Shop (only Costumes) ======= | |
| // - Item ID for cost is set in header of NPC "BR_Shop" | |
| // Format: Item ID, Price | |
| setarray .br_shop[0], | |
| 18740,50, | |
| 18741,50, | |
| 18742,50, | |
| 18743,50, | |
| 18744,50, | |
| 19509,50, | |
| 19534,50, | |
| 19537,50; | |
| // Remove the initial item from the shop | |
| npcshopdelitem "BR_Shop",512; | |
| // Add every item from the .br_shop array | |
| for ( set .@s,0; .@s < getarraysize(.br_shop); set .@s,.@s + 2) | |
| npcshopadditem "BR_Shop",.br_shop[.@s],.br_shop[.@s+1]; | |
| // Server Max Level | |
| set .m_level,300; | |
| // ====== Battle Royale Arena Settings ====== | |
| // > [0] = Arena Name | |
| // > [1] = Min Players | |
| // > [2] = Max Players | |
| // > [3] = Min Level | |
| // > [4] = Max Level | |
| // > [5] = Randomized Battle Type: 0 = Random, 1 = Solo, 2 = Duo, 4 = Squad | |
| // =================================== | |
| // Note: 1 Arena = 6 Values! So Index*6 | |
| // Array [ ]: 0, 1, 2, 3, 4, 5 | |
| setarray .arena$[0],"Alberta","2","20","50",""+.m_level,"0", | |
| "Aldebaran","2","15","50",""+.m_level,"0", | |
| "Dewata","2","20","50",""+.m_level,"0", | |
| "Einbech","2","20","50",""+.m_level,"0", | |
| "Einbroch","2","20","50",""+.m_level,"0", | |
| "Geffen","2","20","50",""+.m_level,"0", | |
| "Gonryun","2","20","50",""+.m_level,"0", | |
| "Hugel","2","20","50",""+.m_level,"0", | |
| "Izlude","2","20","50",""+.m_level,"0", | |
| "Lasagna","2","20","50",""+.m_level,"0", | |
| "Malaya","2","15","50",""+.m_level,"0", | |
| "Morroc","2","20","50",""+.m_level,"0", | |
| "Moscovia","2","20","50",""+.m_level,"1", | |
| "Niflheim","2","20","50",""+.m_level,"1", | |
| "Payon","2","20","50",""+.m_level,"1", | |
| "Prontera","2","20","50",""+.m_level,"1", | |
| "Rachel","2","20","50",""+.m_level,"1", | |
| "Splendide","2","20","50",""+.m_level,"1", | |
| "Veins","2","20","50",""+.m_level,"1", | |
| "Yuno","2","20","50",""+.m_level,"1"; | |
| // Total count of the arenas | |
| set .arena_size,getarraysize(.arena$)/6; | |
| // Register Timer in minutes | |
| set $@BR_RegTimer,1; | |
| // Create waitingroom on Server Start | |
| waitingroom "Battle Royale - Inactive",0; | |
| donpcevent strnpcinfo(0)+"::OnWaitingRoom"; | |
| OnClock0000: | |
| for ( set .@a,0; .@a < getarraysize(.arena$); set .@a,.@a + 6) | |
| if(.arena$[.@a+5] == "0") { | |
| set .@r,rand(1,3); | |
| setarray .arena$[.@a+5],""+( (.@r == 3)?4:.@r); | |
| } | |
| end; | |
| OnAtCommand: | |
| if(.@atcmd_numparameters != 1) { | |
| dispbottom "Invalid Input! Required Arena ID for "+.@atcmd_command$+":"; | |
| dispbottom "Note: You can use the ID or the Name!"; | |
| dispbottom "--------------------------------------------"; | |
| dispbottom "> 1 = Alberta | 2 = Aldebaran | 3 = Dewata"; | |
| dispbottom "> 4 = Einbech | 5 = Einbroch | 6 = Geffen"; | |
| dispbottom "> 7 = Gonryun | 8 = Hugel | 9 = Izlude"; | |
| dispbottom "> 10 = Lasagna | 11 = Malaya | 12 = Morroc"; | |
| dispbottom "> 13 = Moscovia | 14 = Niflheim | 15 = Payon"; | |
| dispbottom "> 16 = Prontera | 17 = Rachel | 18 = Splendide"; | |
| dispbottom "> 19 = Veins | 20 = Yuno"; | |
| } else if(compare(.@atcmd_parameters$[0],"1") == 1 || compare(.@atcmd_parameters$[0],"Alberta") == 1) | |
| set .@id,1; | |
| else if(compare(.@atcmd_parameters$[0],"2") == 1 || compare(.@atcmd_parameters$[0],"Aldebaran") == 1) | |
| set .@id,2; | |
| else if(compare(.@atcmd_parameters$[0],"3") == 1 || compare(.@atcmd_parameters$[0],"Dewata") == 1) | |
| set .@id,3; | |
| else if(compare(.@atcmd_parameters$[0],"4") == 1 || compare(.@atcmd_parameters$[0],"Einbech") == 1) | |
| set .@id,4; | |
| else if(compare(.@atcmd_parameters$[0],"5") == 1 || compare(.@atcmd_parameters$[0],"Einbroch") == 1) | |
| set .@id,5; | |
| else if(compare(.@atcmd_parameters$[0],"6") == 1 || compare(.@atcmd_parameters$[0],"Geffen") == 1) | |
| set .@id,6; | |
| else if(compare(.@atcmd_parameters$[0],"7") == 1 || compare(.@atcmd_parameters$[0],"Gonryun") == 1) | |
| set .@id,7; | |
| else if(compare(.@atcmd_parameters$[0],"8") == 1 || compare(.@atcmd_parameters$[0],"Hugel") == 1) | |
| set .@id,8; | |
| else if(compare(.@atcmd_parameters$[0],"9") == 1 || compare(.@atcmd_parameters$[0],"Izlude") == 1) | |
| set .@id,9; | |
| else if(compare(.@atcmd_parameters$[0],"10") == 1 || compare(.@atcmd_parameters$[0],"Lasagna") == 1) | |
| set .@id,10; | |
| else if(compare(.@atcmd_parameters$[0],"11") == 1 || compare(.@atcmd_parameters$[0],"Malaya") == 1) | |
| set .@id,11; | |
| else if(compare(.@atcmd_parameters$[0],"12") == 1 || compare(.@atcmd_parameters$[0],"Morroc") == 1) | |
| set .@id,12; | |
| else if(compare(.@atcmd_parameters$[0],"13") == 1 || compare(.@atcmd_parameters$[0],"Moscovia") == 1) | |
| set .@id,13; | |
| else if(compare(.@atcmd_parameters$[0],"14") == 1 || compare(.@atcmd_parameters$[0],"Niflheim") == 1) | |
| set .@id,14; | |
| else if(compare(.@atcmd_parameters$[0],"15") == 1 || compare(.@atcmd_parameters$[0],"Payon") == 1) | |
| set .@id,15; | |
| else if(compare(.@atcmd_parameters$[0],"16") == 1 || compare(.@atcmd_parameters$[0],"Prontera") == 1) | |
| set .@id,16; | |
| else if(compare(.@atcmd_parameters$[0],"17") == 1 || compare(.@atcmd_parameters$[0],"Rachel") == 1) | |
| set .@id,17; | |
| else if(compare(.@atcmd_parameters$[0],"18") == 1 || compare(.@atcmd_parameters$[0],"Splendide") == 1) | |
| set .@id,18; | |
| else if(compare(.@atcmd_parameters$[0],"19") == 1 || compare(.@atcmd_parameters$[0],"Veins") == 1) | |
| set .@id,19; | |
| else if(compare(.@atcmd_parameters$[0],"20") == 1 || compare(.@atcmd_parameters$[0],"Yuno") == 1) | |
| set .@id,20; | |
| if(.@id) { | |
| announce "[Battle Royale - "+.arena$[.@id*6-6]+"]: The Arena has been opened. Everybody which want to participate come to me! You have "+$@BR_RegTimer+" Minute"+(($@BR_RegTimer > 1)?"s":"")+" to register!",bc_all; | |
| setd("$@BR_Status_"+.@id),1; | |
| enablenpc "BR_Arena#"+.@id; | |
| donpcevent "BR_Arena#"+.@id+"::OnRegisterTimer"; | |
| } | |
| end; | |
| OnPCDieEvent: | |
| if(!@BR_ID) end; | |
| if(!(getvariableofnpc(.Arena_Status[@BR_ID],"BR_Arena#"+@BR_ID))) end; | |
| doevent "BR_Arena#"+@BR_ID+"::OnBRPlayerDiedEvent"; | |
| end; | |
| OnPCKillEvent: | |
| if(!@BR_ID) end; | |
| if(!.Arena_Status[@BR_ID]) end; | |
| set @BR_Kills,@BR_Kills + 1; | |
| announce .n$+": You have killed ["+rid2name(killedrid)+"]!",bc_self; | |
| end; | |
| function BR_TxTColor { | |
| // getarg(0): | |
| // 1 = Class | |
| // 2 = Skill | |
| // 3 = Empty Line | |
| if(getarg(0) == 1) | |
| mes "^FF0000[ "+getarg(1)+" ]^000000"; | |
| else if(getarg(0) == 2) | |
| mes " > ^0000FF "+getarg(1)+"^000000"; | |
| else if(getarg(0) == 3) | |
| mes ""+getarg(1); | |
| return; | |
| } | |
| } | |
| // Battle Royale NPC Shop (7720 = Price Item ID) | |
| // - Item List is set in .br_shop array | |
| - itemshop BR_Shop HIDDEN_NPC,7720,512:-1 | |
| // Arena Script Template | |
| - script BR_Init HIDDEN_NPC,{ | |
| end; | |
| OnInit: | |
| set .n$,"[Battle Royale]"; | |
| function BR_Reward; | |
| function BR_Rank; | |
| // * Reward Settings | |
| // Note: If you want to change the item reward, change it also in the BR_Shop above! | |
| set $@BR_RewID,7720; // Gold Coin | |
| // Enable Starter Weapon > 1= On/0= Off | |
| set .BR_StartWeapon,1; | |
| if(.BR_StartWeapon) | |
| setarray .BR_WeapID[0], 1218, // Dagger > Stiletto | |
| 1109, // One-Handed Sword > Blade | |
| 1160, // Two-Handed Sword > Broad Sword | |
| 1410, // One-Handed Spear > Lance | |
| 1465, // Two-Handed Spear > Halbert | |
| 1305, // One-Handed Axe > Cleaver | |
| 1360, // Two-Handed Axe | |
| 1519, // Mace > Chain | |
| 0, // Unused | |
| 1615, // Staff > Evil Bone Wand | |
| 1714, // Bow > Gakkung Bow | |
| 1814, // Knuckle > Berserk | |
| 1909, // Musical Instrument > Harp | |
| 1960, // Whip | |
| 1560, // Book > Sage's Diary | |
| 1255, // Katar > Jamadhar | |
| 13102, // Revolver > Crimson Bolt | |
| 13151, // Rifle > Cyclone | |
| 13158, // Gatling Gun > Butcher | |
| 13154, // Shotgun > Rolling Stone | |
| 13160, // Grenade Launcher > Destroyer | |
| 13301, // Fuuma Shuriken > Huuma Giant Wheel Shuriken | |
| 1472; // Two-Handed Staff > Soul Staff | |
| // Enable Starter Armor > 1= On/0= Off, config is a bit below | |
| set .BR_StartArmor,1; | |
| // * Positon Check Delay in seconds | |
| set .PosTimer,3; | |
| // Mapflags | |
| setarray .mf[0],mf_nogo, | |
| mf_nowarp, | |
| mf_nowarpto, | |
| mf_noreturn, | |
| mf_nosave, | |
| mf_nomemo, | |
| mf_partylock, | |
| mf_noteleport, | |
| mf_pvp; | |
| if(strnpcinfo(0) == "BR_Init") end; | |
| // ====== Battle Royale Zone Settings ====== | |
| // * Variable Description: | |
| // Note: There is a global config, except .arena_ and .area, at the end of these lines. | |
| // Uncomment the line and edit it in case you want to use different values. | |
| // > .@BR_ID = ID of the Arena | |
| // > .area[] = Define the area where the zone will be selected from! | |
| // > .last_zone_size = Size of the last zone in cells (in all directions!) | |
| // > .zone_move = How many cells should the zone move towards the centre | |
| // > .zone_time = Time until the zone moves (in seconds) | |
| // > .reveal_time = Time until the next Zone will be revealed (in seconds) | |
| // > .rew_place = Multiplier for Reward depending on Placement | |
| // ex: 1st place gets *10 more points, eveything after tenth place gets *1 | |
| // Note: You can increase the placements by adding more values to the array. Like making 20 different multipliers. | |
| // > .rew_base = Minimum (Base) Points of Reward | |
| // > .loot_box = How many loot boxes are available? | |
| // Note: You can increase this value, but you also need to add more duplicates to match it; Search for "duplicate(BR_LootBox)" | |
| // > .downed_slots = How many slots of NPC Duplicates are for downed players available? (Experimental - Default: Half of max players) | |
| // Note: There are 10 duplicates ready, if you require more just add them; Search for "duplicate(#BR" | |
| // ==================================== | |
| set .@BR_ID,atoi(strnpcinfo(2)); | |
| switch(.@BR_ID) { | |
| default: | |
| debugmes "Error - BR_Init::OnInit - .@BR_ID = "+.@BR_ID; | |
| end; | |
| case 1: // Alberta | |
| setd(".arena_"+.@BR_ID+"$"),"Alberta"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),26,25,206,227; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 2: // Aldebaran | |
| setd(".arena_"+.@BR_ID+"$"),"Aldebaran"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),35,40,236,238; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 3: // Dewata | |
| setd(".arena_"+.@BR_ID+"$"),"Dewata"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),47,75,283,310; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 4: // Einbech | |
| setd(".arena_"+.@BR_ID+"$"),"Einbech"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),33,53,257,220; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 5: // Einbroch | |
| setd(".arena_"+.@BR_ID+"$"),"Einbroch"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),45,36,317,326; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 6: // Geffen | |
| setd(".arena_"+.@BR_ID+"$"),"Geffen"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),50,50,189,189; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 7: // Gonryun | |
| setd(".arena_"+.@BR_ID+"$"),"Gonryun"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),35,15,271,223; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 8: // Hugel | |
| setd(".arena_"+.@BR_ID+"$"),"Hugel"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),44,58,218,231; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 9: // Izlude | |
| setd(".arena_"+.@BR_ID+"$"),"Izlude"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),44,89,143,262; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| setd(".zone_move_"+.@BR_ID),5; | |
| setd(".zone_time_"+.@BR_ID),15; | |
| setd(".reveal_time_"+.@BR_ID),15; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 10: // Lasagna | |
| setd(".arena_"+.@BR_ID+"$"),"Lasagna"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),48,90,353,266; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 11: // Malaya | |
| setd(".arena_"+.@BR_ID+"$"),"Malaya"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),101,31,302,257; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 12: // Morroc | |
| setd(".arena_"+.@BR_ID+"$"),"Morroc"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),22,22,290,290; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 13: // Moscovia | |
| setd(".arena_"+.@BR_ID+"$"),"Moscovia"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),137,47,267,209; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 14: // Niflheim | |
| setd(".arena_"+.@BR_ID+"$"),"Niflheim"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),66,81,362,274; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 15: // Payon | |
| setd(".arena_"+.@BR_ID+"$"),"Payon"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),62,64,260,312; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 16: // Prontera | |
| setd(".arena_"+.@BR_ID+"$"),"Prontera"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),44,26,267,365; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| setd(".zone_move_"+.@BR_ID),15; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 17: // Rachel | |
| setd(".arena_"+.@BR_ID+"$"),"Rachel"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),30,25,241,241; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 18: // Splendide | |
| setd(".arena_"+.@BR_ID+"$"),"Splendide"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),57,93,383,255; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 19: // Veins | |
| setd(".arena_"+.@BR_ID+"$"),"Veins"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),112,47,335,316; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| case 20: // Yuno | |
| setd(".arena_"+.@BR_ID+"$"),"Yuno"; | |
| setarray getd(".area_"+.@BR_ID+"[0]"),36,80,356,326; | |
| //setd(".last_zone_size_"+.@BR_ID),3; | |
| //setd(".zone_move_"+.@BR_ID),10; | |
| //setd(".zone_time_"+.@BR_ID),30; | |
| //setd(".reveal_time_"+.@BR_ID),30; | |
| //setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| //setd(".rew_base_"+.@BR_ID),5; | |
| //setd(".loot_box_"+.@BR_ID),10; | |
| //setd(".downed_slots_"+.@BR_ID),10; | |
| break; | |
| } | |
| // Global Config | |
| // - Takes effect if the setting for a specific arena is not set | |
| if(getd(".last_zone_size_"+.@BR_ID) == 0) | |
| setd(".last_zone_size_"+.@BR_ID),3; | |
| if(getd(".zone_move_"+.@BR_ID) == 0) | |
| setd(".zone_move_"+.@BR_ID),10; | |
| if(getd(".zone_time_"+.@BR_ID) == 0) | |
| setd(".zone_time_"+.@BR_ID),30; | |
| if(getd(".reveal_time_"+.@BR_ID) == 0) | |
| setd(".reveal_time_"+.@BR_ID),30; | |
| if(getarraysize(getd(".rew_place_"+.@BR_ID)) == 0) | |
| setarray getd(".rew_place_"+.@BR_ID+"[1]"),10,8,8,8,5,5,3,2,2,1; | |
| if(getd(".rew_base_"+.@BR_ID) == 0) | |
| setd(".rew_base_"+.@BR_ID),5; | |
| if(getd(".loot_box_"+.@BR_ID) == 0) | |
| setd(".loot_box_"+.@BR_ID),10; | |
| if(getd(".downed_slots_"+.@BR_ID) == 0) | |
| setd(".downed_slots_"+.@BR_ID),10; | |
| // Setting Mapflags | |
| for ( set .@m,0; .@m < getarraysize(.mf); set .@m,.@m + 1) | |
| setmapflag strnpcinfo(4),.mf[.@m]; | |
| // * Allowing Admins(Group 99) to use @commands | |
| setmapflag strnpcinfo(4),mf_nocommand,99; | |
| // * Restricted Skills for custom Zone 9 > 8192 | |
| // > db/import/skill_nocast_db.txt | |
| setmapflag strnpcinfo(4),mf_restricted,9; | |
| if(strnpcinfo(0) != "BR_Init") | |
| disablenpc strnpcinfo(0); | |
| end; | |
| OnRegisterTimer: | |
| set .@id,atoi(strnpcinfo(2)); // Arena ID | |
| set .@i,.@id*6-6; // Array Index of the Arena | |
| set .@rpl,atoi(getvariableofnpc(.arena$[.@i+1],"Battle Royale#BR_NPC")); | |
| set .@type,atoi(getvariableofnpc(.arena$[.@i+5],"Battle Royale#BR_NPC")); | |
| while(getd("$@BR_Status_"+.@id) == 1) { | |
| sleep 60000; // Every minute | |
| setd(".Timer_"+.@id),getd(".Timer_"+.@id) + 1; | |
| if(getarraysize(getd("$@BR_RegQ"+.@id)) < (.@rpl*.@type) && getd(".Timer_"+.@id) < $@BR_RegTimer) | |
| continue; | |
| else if(getarraysize(getd("$@BR_RegQ"+.@id)) < (.@rpl*.@type) && getd(".Timer_"+.@id) >= $@BR_RegTimer) { | |
| announce "[Battle Royale Arena - "+getd(".arena_"+.@id+"$")+"]: The time limit to register has been reached, but not enough players have registered. Therefore I will cancel it.",bc_all; | |
| setd("$@BR_Status_"+.@id),0; | |
| setd(".Timer_"+.@id),0; | |
| for ( set .@q,0; .@q < getarraysize(getd("$@BR_RegQ"+.@id)); set .@q,.@q + 1) { | |
| attachrid(getcharid(3,strcharinfo(0,getd("$@BR_RegQ"+.@id+"["+.@q+"]")))); | |
| set @BR_ID,0; | |
| } | |
| deletearray getd("$@BR_RegQ"+.@t+"[0]"),getarraysize(getd("$@BR_RegQ"+.@id)); | |
| break; | |
| } | |
| setd("$@BR_Status_"+.@id),2; | |
| setd(".Timer_"+.@id),0; | |
| donpcevent "BR_Arena#"+.@id+"::OnBRStart"; | |
| break; | |
| } | |
| end; | |
| OnBRStart: | |
| set .@BR_ID,atoi(strnpcinfo(2)); | |
| // Define centre of the zone | |
| while(1) { | |
| setd(".@zone_c_x_"+.@BR_ID),rand( (getd(".area_"+.@BR_ID+"[0]")+getd(".last_zone_size_"+.@BR_ID)),(getd(".area_"+.@BR_ID+"[2]")-getd(".last_zone_size_"+.@BR_ID)) ); | |
| setd(".@zone_c_y_"+.@BR_ID),rand( (getd(".area_"+.@BR_ID+"[1]")+getd(".last_zone_size_"+.@BR_ID)),(getd(".area_"+.@BR_ID+"[3]")-getd(".last_zone_size_"+.@BR_ID)) ); | |
| if(checkcell(strnpcinfo(4),getd(".@zone_c_x_"+.@BR_ID) - getd(".last_zone_size_"+.@BR_ID),getd(".@zone_c_y_"+.@BR_ID) - getd(".last_zone_size_"+.@BR_ID),cell_chkpass) == 0 || checkcell(strnpcinfo(4),getd(".@zone_c_x_"+.@BR_ID) + getd(".last_zone_size_"+.@BR_ID),getd(".@zone_c_y_"+.@BR_ID) + getd(".last_zone_size_"+.@BR_ID),cell_chkpass) == 0) | |
| continue; | |
| // Last zone: | |
| // [0] + [1] = x1 + y1, [2] + [3] = x2 + y2 | |
| setarray getd(".zone_"+.@BR_ID+"[0]"),getd(".@zone_c_x_"+.@BR_ID) - getd(".last_zone_size_"+.@BR_ID),getd(".@zone_c_y_"+.@BR_ID) - getd(".last_zone_size_"+.@BR_ID),getd(".@zone_c_x_"+.@BR_ID) + getd(".last_zone_size_"+.@BR_ID),getd(".@zone_c_y_"+.@BR_ID) + getd(".last_zone_size_"+.@BR_ID); | |
| break; | |
| } | |
| // Calculating each zone away from the centre/last zone | |
| for ( set .@z,0; .@z < getarraysize(getd(".zone_"+.@BR_ID)); set .@z,.@z + 4) { | |
| set .@x1,getd(".zone_"+.@BR_ID+"["+.@z+"]") - getd(".zone_move_"+.@BR_ID); | |
| set .@y1,getd(".zone_"+.@BR_ID+"["+(.@z+1)+"]") - getd(".zone_move_"+.@BR_ID); | |
| set .@x2,getd(".zone_"+.@BR_ID+"["+(.@z+2)+"]") + getd(".zone_move_"+.@BR_ID); | |
| set .@y2,getd(".zone_"+.@BR_ID+"["+(.@z+3)+"]") + getd(".zone_move_"+.@BR_ID); | |
| // Checking if the new coordinates don't go over the area | |
| if(!.@l_x1 && .@x1 <= (getd(".area_"+.@BR_ID+"[0]") + getd(".last_zone_size_"+.@BR_ID))) | |
| set .@l_x1,1; | |
| if(!.@l_y1 && .@y1 <= (getd(".area_"+.@BR_ID+"[1]") + getd(".last_zone_size_"+.@BR_ID))) | |
| set .@l_y1,1; | |
| if(!.@l_x2 && .@x2 >= (getd(".area_"+.@BR_ID+"[2]") - getd(".last_zone_size_"+.@BR_ID))) | |
| set .@l_x2,1; | |
| if(!.@l_y2 && .@y2 >= (getd(".area_"+.@BR_ID+"[3]") - getd(".last_zone_size_"+.@BR_ID))) | |
| set .@l_y2,1; | |
| if(.@l_x1 && .@l_y1 && .@l_x2 && .@l_y2) | |
| break; | |
| setarray getd(".zone_"+.@BR_ID+"["+getarraysize(getd(".zone_"+.@BR_ID))+"]"),((!.@l_x1)?.@x1:getd(".zone_"+.@BR_ID+"["+.@z+"]")),((!.@l_y1)?.@y1:getd(".zone_"+.@BR_ID+"["+(.@z+1)+"]")),((!.@l_x2)?.@x2:getd(".zone_"+.@BR_ID+"["+(.@z+2)+"]")),((!.@l_y2)?.@y2:getd(".zone_"+.@BR_ID+"["+(.@z+3)+"]")); | |
| } | |
| /* | |
| for ( set .@t,0; .@t < getarraysize(getd(".zone_"+.@BR_ID)); set .@t,.@t + 4) | |
| debugmes "X1["+.@t+"] = "+getd(".zone_"+.@BR_ID+"["+.@t+"]")+", Y1["+(.@t+1)+"] = "+getd(".zone_"+.@BR_ID+"["+(.@t+1)+"]")+", X2["+(.@t+2)+"] = "+getd(".zone_"+.@BR_ID+"["+(.@t+2)+"]")+", Y2["+(.@t+3)+"] = "+getd(".zone_"+.@BR_ID+"["+(.@t+3)+"]"); | |
| */ | |
| // Enabling Loot Boxes | |
| for ( set .@s,1; .@s <= getd(".loot_box_"+.@BR_ID); set .@s,.@s + 1) { | |
| while(1) { // Moving the Loot Boxes to random locations, which are passable/walkable | |
| set .@x,rand(getd(".area_"+.@BR_ID+"[0]"),getd(".area_"+.@BR_ID+"[2]")); | |
| set .@y,rand(getd(".area_"+.@BR_ID+"[1]"),getd(".area_"+.@BR_ID+"[3]")); | |
| if(checkcell(strnpcinfo(4),.@x,.@y,cell_chkpass) == 1) | |
| break; | |
| } | |
| movenpc "Chest#BR"+.@BR_ID+"_"+.@s,.@x,.@y; | |
| enablenpc "Chest#BR"+.@BR_ID+"_"+.@s; | |
| } | |
| announce "[Battle Royale - "+getd(".arena_"+.@BR_ID+"$")+"]: The zone has been declared, every participant will be warped soon on the battlefield!",bc_all; | |
| setcell strnpcinfo(4),getd(".zone_"+.@BR_ID+"["+(getarraysize(getd(".zone_"+.@BR_ID))-4)+"]"),getd(".zone_"+.@BR_ID+"["+(getarraysize(getd(".zone_"+.@BR_ID))-3)+"]"),getd(".zone_"+.@BR_ID+"["+(getarraysize(getd(".zone_"+.@BR_ID))-2)+"]"),getd(".zone_"+.@BR_ID+"["+(getarraysize(getd(".zone_"+.@BR_ID))-1)+"]"),cell_landprotector,1; | |
| sleep 2000; | |
| for ( set .@p,0; .@p < getarraysize(getd("$@BR_RegQ"+.@BR_ID)); set .@p,.@p + 1) { | |
| attachrid(getcharid(3,strcharinfo(0,getd("$@BR_RegQ"+.@BR_ID+"["+.@p+"]")))); | |
| BR_AutoStorage; | |
| sc_end SC_ALL; // Debuff everything | |
| warp strnpcinfo(4),0,0; | |
| recovery 0; | |
| if(.BR_StartWeapon) { | |
| getitem .BR_WeapID[BR_WeaponType-1],1; | |
| equip .BR_WeapID[BR_WeaponType-1]; | |
| switch(BR_WeaponType) { | |
| default: break; | |
| case 11: // Bow | |
| getitem 12007,1; // 1x Oridecon Arrow Quiver | |
| break; | |
| case 17: // Revolvers | |
| case 18: // Rifles | |
| case 19: // Gatling Guns | |
| getitem 13200,1; // 1x Cartridge = 500 Bullets | |
| break; | |
| case 20: // Shotguns | |
| getitem 13202,1; // 1x Blood Cartridge = 500 Surplus Bloody Shells | |
| break; | |
| case 21: // Grenade Launchers | |
| getitem 12148,1; // 1x Flare Sphere Pack | |
| break; | |
| } | |
| } | |
| if(.BR_StartArmor) { | |
| // Depending on the class, they will recieve Armor, Shield, Garment and Shoes | |
| switch(BaseClass) { | |
| case Job_Novice: | |
| getitem 2355,1; // Angelic Protection | |
| equip 2355; | |
| getitem 2116,1; // Angelic Guard | |
| equip 2116; | |
| getitem 2521,1; // Angelic Cardigan | |
| equip 2521; | |
| getitem 2420,1; // Angel's Reincarnation | |
| equip 2420; | |
| break; | |
| case Job_Swordman: | |
| getitem 2314,1; // Chain Mail | |
| equip 2314; | |
| if(.BR_StartWeapon) // Check for Two-Handed Weapons | |
| if(BR_WeaponType != 3 || BR_WeaponType != 5) { | |
| getitem 2104,1; // Buckler | |
| equip 2104; | |
| } | |
| break; | |
| case Job_Mage: | |
| getitem 2334,1; // Mage Coat | |
| equip 2334; | |
| if(.BR_StartWeapon) // Check for Two-Handed Weapons | |
| if(BR_WeaponType != 23) { | |
| getitem 2101,1; // Guard | |
| equip 2101; | |
| } | |
| break; | |
| case Job_Archer: | |
| getitem 2330,1; // Tights | |
| equip 2330; | |
| if(.BR_StartWeapon) // Check for Two-Handed Weapons | |
| if(BR_WeaponType != 11) { | |
| getitem 2101,1; // Guard | |
| equip 2101; | |
| } | |
| break; | |
| case Job_Acolyte: | |
| getitem 2325,1; // Saint's Robe | |
| equip 2325; | |
| getitem 2104,1; // Buckler | |
| equip 2104; | |
| break; | |
| case Job_Merchant: | |
| if(.BR_StartWeapon) // Check for Two-Handed Weapons | |
| if(BR_WeaponType != 7) { | |
| getitem 2104,1; // Buckler | |
| equip 2104; | |
| } | |
| case Job_Thief: | |
| getitem 2335,1; // Thief Clothes | |
| equip 2335; | |
| if(.BR_StartWeapon) // Check for Two-Handed Weapons | |
| if(BR_WeaponType != 16 || BR_WeaponType != 11) { | |
| getitem 2104,1; // Buckler | |
| equip 2104; | |
| } | |
| break; | |
| case Job_Ninja: | |
| getitem 2335,1; // Thief Clothes | |
| equip 2335; | |
| if(.BR_StartWeapon) // Check for Two-Handed Weapons | |
| if(BR_WeaponType != 22) { | |
| getitem 2101,1; // Guard | |
| equip 2101; | |
| } | |
| break; | |
| case Job_Gunslinger: | |
| getitem 2309,1; // Coat | |
| equip 2309; | |
| break; | |
| } | |
| if(Class != Job_Novice) { | |
| getitem 2404,1; // Shoes | |
| equip 2404; | |
| getitem 2504,1; // Muffler | |
| equip 2504; | |
| } | |
| } | |
| } | |
| detachrid; | |
| deletearray getd("$@BR_RegQ"+.@BR_ID),getarraysize(getd("$@BR_RegQ"+.@BR_ID)); | |
| sleep 2000; // Let the players finish loading | |
| getmapunits(BL_PC,strnpcinfo(4),.@accid); | |
| // Saves every party with each member for later usage | |
| for ( set .@w,0; .@w < getarraysize(.@accid); set .@w,.@w + 1) { | |
| attachrid(.@accid[.@w]); | |
| addtimer (.PosTimer*1000),strnpcinfo(0)+"::OnZoneCheck"; | |
| set @BRZ_Start,1; // Delay the damage ticks until the first zone has been displayed | |
| if(getcharid(1) == 0) break; // Checks if player is in party, saves me another check for game mode | |
| if(getarraysize(getd(".BR_PTY_"+getcharid(1))) == 0) // Checks if the party is not saved yet | |
| setarray getd(".BR_PTY_Total_"+.@BR_ID+"["+getarraysize(getd(".BR_PTY_Total_"+.@BR_ID))+"]"),getcharid(1); | |
| setarray getd(".BR_PTY_"+getcharid(1)+"["+getarraysize(getd(".BR_PTY_"+getcharid(1)))+"]"),getcharid(0); // Saves Players Account ID in Party Array | |
| } | |
| // Battle Royale Start + Zone Movement | |
| setarray .Arena_Status[.@BR_ID],1; | |
| setd(".z_"+.@BR_ID),getarraysize(getd(".zone_"+.@BR_ID))-4; // Marking first zone | |
| for ( set .@e,1; .@e <= 4; set .@e,.@e + 1) { | |
| donpcevent "#BRZ"+.@BR_ID+"-"+.@e+"::OnBRStart"; | |
| donpcevent "#BRZ"+.@BR_ID+"-"+.@e+"::OnZoneDisplay"; | |
| } | |
| while(.Arena_Status[.@BR_ID] && getd(".z_"+.@BR_ID) != 0) { | |
| mapannounce strnpcinfo(4),.n$+": The Zone will be revealed in "+( (getd(".reveal_time_"+.@BR_ID)%60 == 0)?getd(".reveal_time_"+.@BR_ID)/60+" minute"+( (getd(".reveal_time_"+.@BR_ID)/60 > 1)?"s":""):getd(".reveal_time_"+.@BR_ID))+" seconds.",bc_all; | |
| sleep (getd(".reveal_time_"+.@BR_ID)*1000); // Timer until the next Zone will be revealed | |
| // Distance/2 of a Border | |
| set .@m1,getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+1)+"]")+(distance(getd(".zone_"+.@BR_ID+"["+getd(".z_"+.@BR_ID)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+1)+"]"),getd(".zone_"+.@BR_ID+"["+getd(".z_"+.@BR_ID)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+3)+"]"))/2); // Border#1+3 | |
| set .@m2,getd(".zone_"+.@BR_ID+"["+getd(".z_"+.@BR_ID)+"]")+(distance(getd(".zone_"+.@BR_ID+"["+getd(".z_"+.@BR_ID)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+1)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+2)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+1)+"]"))/2); // Border#2+4 | |
| // Adding the Viewpoints to the mini-map to each Player on the map | |
| for( set .@i,0; .@i < getarraysize(.@accid); set .@i,.@i + 1) { | |
| attachrid(.@accid[.@i]); | |
| if(@BRZ_Start) // Deactivate the zone damage tick delay | |
| set @BRZ_Start,0; | |
| // Border #1 | |
| viewpoint 1,getd(".zone_"+.@BR_ID+"["+getd(".z_"+.@BR_ID)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+1)+"]"),1,0xFF0000; // Left Bottom Corner | |
| viewpoint 1,getd(".zone_"+.@BR_ID+"["+getd(".z_"+.@BR_ID)+"]"),.@m1,2,0xFF0000; // Left Middle | |
| viewpoint 1,getd(".zone_"+.@BR_ID+"["+getd(".z_"+.@BR_ID)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+3)+"]"),3,0xFF0000; // Left Top Corner | |
| // Border #2 | |
| viewpoint 1,.@m2,getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+1)+"]"),4,0xFF0000; // Middle Bottom | |
| viewpoint 1,getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+2)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+1)+"]"),5,0xFF0000; // Right Bottom Corner | |
| // Border #3 | |
| viewpoint 1,getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+2)+"]"),.@m1,6,0xFF0000; // Right Middle | |
| viewpoint 1,getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+2)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+3)+"]"),7,0xFF0000; // Right Top Corner | |
| // Border #4 | |
| viewpoint 1,.@m2,getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+3)+"]"),8,0xFF0000; // Middle Top | |
| detachrid; // No RID need anymore | |
| } | |
| mapannounce strnpcinfo(4),.n$+": The Zone will move in "+( (getd(".zone_time_"+.@BR_ID)%60 == 0)?getd(".zone_time_"+.@BR_ID)/60+" Minute"+( (getd(".zone_time_"+.@BR_ID)/60 > 1)?"s":""):getd(".zone_time_"+.@BR_ID))+" seconds.",bc_all; | |
| sleep (getd(".zone_time_"+.@BR_ID)*1000); // Timer until the Zone actually moves | |
| // Removing the cell_landprotector flag from the current zone of the until next zone | |
| // Border #1+3 | |
| setcell strnpcinfo(4),getd(".zone_"+.@BR_ID+"["+getd(".z_"+.@BR_ID)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+1)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)-4)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)-1)+"]"),cell_landprotector,0; | |
| setcell strnpcinfo(4),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+2)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+1)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)-2)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)-1)+"]"),cell_landprotector,0; | |
| // Border #2+4 | |
| setcell strnpcinfo(4),getd(".zone_"+.@BR_ID+"["+getd(".z_"+.@BR_ID)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+1)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)-2)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)-3)+"]"),cell_landprotector,0; | |
| setcell strnpcinfo(4),getd(".zone_"+.@BR_ID+"["+getd(".z_"+.@BR_ID)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)+3)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)-2)+"]"),getd(".zone_"+.@BR_ID+"["+(getd(".z_"+.@BR_ID)-1)+"]"),cell_landprotector,0; | |
| setd(".z_"+.@BR_ID),getd(".z_"+.@BR_ID) - 4; // Moving Index to next zone | |
| } | |
| mapannounce strnpcinfo(4),.n$+": The final zone has been reached!",bc_all; | |
| end; | |
| OnZoneCheck: | |
| deltimer strnpcinfo(0)+"::OnZoneCheck"; | |
| if(!.Arena_Status[atoi(strnpcinfo(2))] || !@BR_ID) end; | |
| if(!@BRZ_Start) { // Zone Damage Tick Delay until first zone has been displayed | |
| getmapxy(.@map$,.@x,.@y,BL_PC); | |
| if(checkcell(strnpcinfo(4),.@x,.@y,CELL_CHKLANDPROTECTOR) == 0) { | |
| percentheal -1,0; | |
| if(HP == 1) { | |
| atcommand "@die"; | |
| end; | |
| } | |
| } | |
| } | |
| addtimer (.PosTimer*1000),strnpcinfo(0)+"::OnZoneCheck"; | |
| end; | |
| OnBRPlayerDiedEvent: | |
| set .@BR_ID,atoi(strnpcinfo(2)); | |
| set .@type,atoi(getvariableofnpc(.arena$[.@BR_ID*6-1],"Battle Royale#BR_NPC")); | |
| if(killerrid && killerrid != getcharid(3)) // Killed by Player | |
| announce .n$+": You were killed by ["+rid2name(killerrid)+"]!",bc_self; | |
| else // Killed by Zone | |
| announce .n$+": You have died outside the zone.",bc_self; | |
| BR_Inv(2); | |
| // Check the game type | |
| if(.@type > 1) { // Duo and Squad | |
| // Downed Feature | |
| set @BR_Downed,@BR_Downed + 1; | |
| set @BR_Downed_Status,1; | |
| set .@origin,getcharid(3); // Save current Player for later before attaching others below | |
| for ( set .@p,0; .@p < getarraysize(getd(".BR_PTY_"+getcharid(1))); set .@p,.@p + 1) | |
| // Get the index of the party member which died | |
| if(getd(".BR_PTY_"+getcharid(1)+"["+.@p+"]") == getcharid(0)) { | |
| // Check if other party members where also downed | |
| getpartymember getcharid(1),2; | |
| for ( set .@r,0; .@r < $@partymembercount; set .@r,.@r + 1) { | |
| attachrid($@partymemberaid[.@r]); | |
| if(@BR_Downed_Status || @BR_Downed == 2) | |
| set .@d_ct,.@d_ct + 1; | |
| } | |
| if(.@d_ct >= $@partymembercount) | |
| // Delete the whole party from the array, if everyone was downed | |
| deletearray getd(".BR_PTY_"+getcharid(1)+"[0]"),getarraysize(getd(".BR_PTY_"+getcharid(1))); | |
| else { | |
| attachrid(.@origin); // Reattach previously saved player | |
| if(@BR_Downed < 2) { | |
| for ( set .@d,0; .@d < getd(".downed_slots_"+.@BR_ID); set .@d,.@d + 1) | |
| if(getd(".Downed_"+.@BR_ID+"["+.@d+"]") == 0) | |
| break; | |
| setarray getd(".Downed_"+.@BR_ID+"["+.@d+"]"),1; | |
| set @BR_Downed_Spot,(.@d+1); | |
| enablenpc "#BR"+( (.@BR_ID < 10)?"0"+.@BR_ID:.@BR_ID)+"-"+@BR_Downed_Spot; | |
| doevent "#BR"+( (.@BR_ID < 10)?"0"+.@BR_ID:.@BR_ID)+"-"+@BR_Downed_Spot+"::OnDownedInit"; | |
| end; | |
| } | |
| deletearray getd(".BR_PTY_"+getcharid(1)+"["+.@p+"]"),1; | |
| } | |
| } | |
| // Check if every member from the party has died and remove it from the total count | |
| if(getarraysize(getd(".BR_PTY_"+getcharid(1))) == 0) { | |
| for ( set .@l,0; .@l < getarraysize(getd(".BR_PTY_Total_"+.@BR_ID)); set .@l,.@l + 1) | |
| if(getd(".BR_PTY_Total_"+.@BR_ID+"["+.@l+"]") == getcharid(1)) | |
| deletearray getd(".BR_PTY_Total_"+.@BR_ID+"["+.@l+"]"),1; | |
| set .@place,BR_Rank(getmapusers(strnpcinfo(4)),.@type,getarraysize(getd(".rew_place_"+.@BR_ID))); | |
| getpartymember getcharid(1),2; | |
| for ( set .@r,0; .@r < $@partymembercount; set .@r,.@r + 1) { | |
| attachrid($@partymemberaid[.@r]); | |
| BR_Inv(4); | |
| BR_Reward(@BR_Kills,getd(".rew_place_"+.@BR_ID+"["+.@place+"]"),getd(".rew_base_"+.@BR_ID)); | |
| announce .n$+": Well done! You're "+( (.@type == 2)?"Duo":"Squad")+" has placed rank "+.@place+" in the Battle Royale Arena ["+getd(".arena_"+.@BR_ID+"$")+"]!",bc_self; | |
| if(@BR_Downed_Status == 1 && @BR_Downed_Spot) | |
| doevent "#BR"+( (.@BR_ID < 10)?"0"+.@BR_ID:.@BR_ID)+"-"+@BR_Downed_Spot+"::OnClear"; | |
| set @BR_ID,0; | |
| set @BR_Downed,0; | |
| set @BR_Downed_Status,0; | |
| set @BR_Kills,0; | |
| warp "SavePoint",0,0; | |
| } | |
| sleep2 1500; | |
| recovery 1,getcharid(1),1; | |
| } | |
| if(getarraysize(getd(".BR_PTY_Total_"+.@BR_ID)) == 1) { | |
| getpartymember getd(".BR_PTY_Total_"+.@BR_ID+"[0]"),2; | |
| for ( set .@r,0; .@r < $@partymembercount; set .@r,.@r + 1) { | |
| attachrid($@partymemberaid[.@r]); | |
| BR_Inv(1); | |
| BR_Reward(@BR_Kills,getd(".rew_place_"+.@BR_ID+"["+.@place+"]"),getd(".rew_base_"+.@BR_ID)); | |
| BR_Inv(4); | |
| if(@BR_Downed_Status == 1 && @BR_Downed_Spot) | |
| doevent "#BR"+( (.@BR_ID < 10)?"0"+.@BR_ID:.@BR_ID)+"-"+@BR_Downed_Spot+"::OnClear"; | |
| set @BR_ID,0; | |
| set @BR_Downed,0; | |
| set @BR_Downed_Status,0; | |
| set @BR_Kills,0; | |
| warp "SavePoint",0,0; | |
| } | |
| sleep2 1500; | |
| recovery 1,getcharid(1),1; | |
| announce .n$+": Congratulation to the "+( (.@type == 2)?"Duo":"Squad")+" ["+getpartyname(getcharid(1))+"] for winning in the Battle Royale Arena ["+getd(".arena_"+.@BR_ID+"$")+"]!",bc_all; | |
| } else | |
| end; | |
| } else if(.@type == 1) { | |
| set .@place,BR_Rank(getmapusers(strnpcinfo(4)),.@type,getarraysize(getd(".rew_place_"+.@BR_ID))); | |
| warp "SavePoint",0,0; | |
| sleep2 1500; | |
| recovery 0; | |
| BR_Reward(@BR_Kills,getd(".rew_place_"+.@BR_ID+"["+.@place+"]"),getd(".rew_base_"+.@BR_ID)); | |
| BR_Inv(4); | |
| set @BR_ID,0; | |
| announce .n$+": Well done! You have placed rank "+.@place+" in the Battle Royale Arena ["+getd(".arena_"+.@BR_ID+"$")+"]!",bc_self; | |
| if(getmapusers(strnpcinfo(4)) == 1) { | |
| attachrid(killerrid); | |
| BR_Inv(1); | |
| warp "SavePoint",0,0; | |
| sleep2 1500; | |
| recovery 0; | |
| announce .n$+": Congratulation to ["+strcharinfo(0)+"] for winning in the Battle Royale Arena ["+getd(".arena_"+.@BR_ID+"$")+"]!",bc_all; | |
| BR_Reward(@BR_Kills,getd(".rew_place_"+.@BR_ID+"["+.@place+"]"),getd(".rew_base_"+.@BR_ID)); | |
| BR_Inv(4); | |
| set @BR_ID,0; | |
| } else | |
| end; | |
| } | |
| donpcevent strnpcinfo(0)+"::OnBREnd"; | |
| end; | |
| OnClearSpotEvent: | |
| set .@BR_ID,atoi(strnpcinfo(2)); | |
| deletearray getd(".Downed_"+.@BR_ID+"["+(@BR_Downed_Spot-1)+"]"),1; | |
| set @BR_Downed_Spot,0; | |
| end; | |
| OnBREnd: // Battle Royale Stop | |
| if(!.Arena_Status[atoi(strnpcinfo(2))]) end; | |
| set .@BR_ID,atoi(strnpcinfo(2)); | |
| for ( set .@s,1; .@s < getd(".loot_box_"+.@BR_ID); set .@s,.@s + 1) | |
| disablenpc "Chest#BR"+.@BR_ID+"_"+.@s; | |
| setd(".z_"+.@BR_ID),0; | |
| deletearray getd(".Downed_"+.@BR_ID+"[0]"),getarraysize(getd(".Downed_"+.@BR_ID)); | |
| // Clear Party Arrays | |
| for ( set .@w,0; .@w < getarraysize(getd(".BR_PTY_Total_"+.@BR_ID)); set .@w,.@w + 1) | |
| if(getarraysize(getd(".BR_PTY_"+getd(".BR_PTY_Total_"+.@BR_ID+"["+.@w+"]"))) != 0) // Checks if the party is not saved yet | |
| deletearray getd(".BR_PTY_"+getd(".BR_PTY_Total_"+.@BR_ID+"["+.@w+"]")+"[0]"),getarraysize(getd(".BR_PTY_"+getd(".BR_PTY_Total_"+.@BR_ID+"["+.@w+"]"))); // Saves Players Account ID in Party Array | |
| deletearray getd(".BR_PTY_Total_"+.@BR_ID+"[0]"),getarraysize(getd(".BR_PTY_Total_"+.@BR_ID)); | |
| setd("$@BR_Status_"+.@BR_ID),0; | |
| deletearray getd(".zone_"+.@BR_ID+"[0]"),getarraysize(getd(".zone_"+.@BR_ID)); | |
| set .Arena_Status[.@BR_ID],0; | |
| for ( set .@e,1; .@e <= 4; set .@e,.@e + 1) | |
| donpcevent "#BRZ"+.@BR_ID+"-"+.@e+"::OnBREnd"; | |
| disablenpc strnpcinfo(0); | |
| end; | |
| // Battle Royale Reward Function | |
| function BR_Reward { | |
| // getarg(0) == Kills | |
| // getarg(1) == Placement Points | |
| // getarg(2) == Base Reward | |
| // Reward Formula: (Kills + Base Reward)*Placement Points | |
| // Example: 5 Kills, 4th Place, 50 Base Reward: | |
| // (5 + 50)*8 = 220 Battle Royale Coins | |
| set .@calc,(getarg(0) + getarg(2))*getarg(1); | |
| getitem $@BR_RewID,.@calc; | |
| dispbottom "[Battle Royale]: You have recieved "+.@calc+"x "+getitemname($@BR_RewID)+"s."; | |
| return; | |
| } | |
| // Battle Royale Rank function | |
| function BR_Rank { | |
| // getarg(0) = Player Amount on Map | |
| // getarg(1) = Arena Type (1 = Solo, 2 = Duo, 4 = Squad) | |
| // getarg(2) = Array Size of .rew_place_<BR_ID> | |
| set .@r,(getarg(0)/getarg(1) > 0)?getarg(0)/getarg(1):getarg(1); | |
| // Defines the reward of the last place if its above 10 or the actual rank for the .rew_place variable | |
| return ( (.@r >= getarg(2))?getarg(2):.@r); | |
| } | |
| } | |
| // Arena Duplicates | |
| br_alberta,0,0,0 duplicate(BR_Init) BR_Arena#1 HIDDEN_NPC | |
| br_aldeb,0,0,0 duplicate(BR_Init) BR_Arena#2 HIDDEN_NPC | |
| br_dewata,0,0,0 duplicate(BR_Init) BR_Arena#3 HIDDEN_NPC | |
| br_einbech,0,0,0 duplicate(BR_Init) BR_Arena#4 HIDDEN_NPC | |
| br_einbroch,0,0,0 duplicate(BR_Init) BR_Arena#5 HIDDEN_NPC | |
| br_geffen,0,0,0 duplicate(BR_Init) BR_Arena#6 HIDDEN_NPC | |
| br_gonryun,0,0,0 duplicate(BR_Init) BR_Arena#7 HIDDEN_NPC | |
| br_hugel,0,0,0 duplicate(BR_Init) BR_Arena#8 HIDDEN_NPC | |
| br_izlude,0,0,0 duplicate(BR_Init) BR_Arena#9 HIDDEN_NPC | |
| br_lasagna,0,0,0 duplicate(BR_Init) BR_Arena#10 HIDDEN_NPC | |
| br_malaya,0,0,0 duplicate(BR_Init) BR_Arena#11 HIDDEN_NPC | |
| br_morocc,0,0,0 duplicate(BR_Init) BR_Arena#12 HIDDEN_NPC | |
| br_moscovia,0,0,0 duplicate(BR_Init) BR_Arena#13 HIDDEN_NPC | |
| br_niflheim,0,0,0 duplicate(BR_Init) BR_Arena#14 HIDDEN_NPC | |
| br_payon,0,0,0 duplicate(BR_Init) BR_Arena#15 HIDDEN_NPC | |
| br_prontera,0,0,0 duplicate(BR_Init) BR_Arena#16 HIDDEN_NPC | |
| br_rachel,0,0,0 duplicate(BR_Init) BR_Arena#17 HIDDEN_NPC | |
| br_splend,0,0,0 duplicate(BR_Init) BR_Arena#18 HIDDEN_NPC | |
| br_veins,0,0,0 duplicate(BR_Init) BR_Arena#19 HIDDEN_NPC | |
| br_yuno,0,0,0 duplicate(BR_Init) BR_Arena#20 HIDDEN_NPC | |
| - script BR_Downed -1,{ | |
| if(!@BR_ID) end; | |
| if(getcharid(1) != getd(".PTYID_"+strnpcinfo(2))) end; | |
| if(playerattached() != getcharid(3)) end; | |
| set .Res,1; | |
| if(countitem(717) == 0) // Give required Blue Gemstone | |
| getitem 717,1; | |
| unitskilluseid getcharid(3),"ALL_RESURRECTION",1,getd(".ID_"+strnpcinfo(2)),.ResTime; | |
| while(.@r_ct < .ResTime) { | |
| set .@r_ct,.@r_ct + 1; | |
| sleep2 1000; | |
| } | |
| set .Res,0; | |
| end; | |
| OnRes: | |
| set @BR_Downed_Status,0; | |
| OnClear: | |
| // Prevent RID errors | |
| if(getd(".ID_"+strnpcinfo(2)) == 0 && getattachedrid() == 0) | |
| end; | |
| // If no player is attached an the variable is still set, attach the player | |
| else if(getd(".ID_"+strnpcinfo(2)) != 0 && getattachedrid() == 0) | |
| attachrid(getd(".ID_"+strnpcinfo(2))); | |
| doevent "BR_Arena#"+getd(".BRID_"+strnpcinfo(2))+"::OnClearSpotEvent"; | |
| delwaitingroom; | |
| disablenpc strnpcinfo(0); | |
| setd(".ID_"+strnpcinfo(2)),0; | |
| setd(".PTYID_"+strnpcinfo(2)),0; | |
| setd(".BRID_"+strnpcinfo(2)),0; | |
| set .Res,0; | |
| end; | |
| OnDownedInit: | |
| getmapxy(.@map$,.@x,.@y,BL_PC); | |
| movenpc strnpcinfo(0),.@x,.@y; | |
| setd(".ID_"+strnpcinfo(2)),getcharid(3); | |
| setd(".PTYID_"+strnpcinfo(2)),getcharid(1); | |
| setd(".BRID_"+strnpcinfo(2)),@BR_ID; | |
| set .@ct,.DownTime; | |
| addtimer 1000,strnpcinfo(0)+"::OnResCheck"; | |
| detachrid; | |
| while(.@ct > 0 && getd(".ID_"+strnpcinfo(2))) { | |
| waitingroom .@ct+" seconds left!",0; | |
| while(.Res) | |
| sleep 100; | |
| set .@ct,.@ct - 1; | |
| sleep 1000; | |
| delwaitingroom; | |
| } | |
| end; | |
| OnResCheck: | |
| deltimer strnpcinfo(0)+"::OnResCheck"; | |
| if(HP > 1) // Player was revived | |
| goto OnRes; | |
| else if(HP <= 1 && getd(".ID_"+strnpcinfo(2)) == 0) { // Timer has run out and player is still dead | |
| set @BR_Downed_Status,2; | |
| goto OnClear; | |
| } | |
| addtimer 1000,strnpcinfo(0)+"::OnResCheck"; | |
| end; | |
| OnInit: | |
| if(strnpcinfo(0) != "BR_Downed") | |
| disablenpc strnpcinfo(0); | |
| set .ResTime,10; // Required amount of seconds to resurrect | |
| set .DownTime,30; // Maximum amount of seconds before the player can't resurrected anymore | |
| // Define what NPC Sprite you want to be displayed - use whatever you like | |
| // > CLEAR_NPC | |
| // > 1_SHADOW_NPC | |
| // > 4_ENERGY_BLACK (Default) | |
| // The following needs the ID: | |
| // > NYDHOG_MEMORY1_1 > 2138 | |
| // > NYDHOG_MEMORY1_2 > 2139 | |
| set .NPCID,4_ENERGY_BLACK; | |
| setnpcdisplay strnpcinfo(0),.NPCID; | |
| end; | |
| } | |
| // Duplicate to check the NPC Sprite: | |
| //prontera,160,163,0 duplicate(BR_Downed) #BR00-1 4_ENERGY_BLACK | |
| br_alberta,0,0,0 duplicate(BR_Downed) #BR01-1 4_ENERGY_BLACK | |
| br_alberta,0,0,0 duplicate(BR_Downed) #BR01-2 4_ENERGY_BLACK | |
| br_alberta,0,0,0 duplicate(BR_Downed) #BR01-3 4_ENERGY_BLACK | |
| br_alberta,0,0,0 duplicate(BR_Downed) #BR01-4 4_ENERGY_BLACK | |
| br_alberta,0,0,0 duplicate(BR_Downed) #BR01-5 4_ENERGY_BLACK | |
| br_alberta,0,0,0 duplicate(BR_Downed) #BR01-6 4_ENERGY_BLACK | |
| br_alberta,0,0,0 duplicate(BR_Downed) #BR01-7 4_ENERGY_BLACK | |
| br_alberta,0,0,0 duplicate(BR_Downed) #BR01-8 4_ENERGY_BLACK | |
| br_alberta,0,0,0 duplicate(BR_Downed) #BR01-9 4_ENERGY_BLACK | |
| br_alberta,0,0,0 duplicate(BR_Downed) #BR01-10 4_ENERGY_BLACK | |
| br_aldeb,0,0,0 duplicate(BR_Downed) #BR02-1 4_ENERGY_BLACK | |
| br_aldeb,0,0,0 duplicate(BR_Downed) #BR02-2 4_ENERGY_BLACK | |
| br_aldeb,0,0,0 duplicate(BR_Downed) #BR02-3 4_ENERGY_BLACK | |
| br_aldeb,0,0,0 duplicate(BR_Downed) #BR02-4 4_ENERGY_BLACK | |
| br_aldeb,0,0,0 duplicate(BR_Downed) #BR02-5 4_ENERGY_BLACK | |
| br_aldeb,0,0,0 duplicate(BR_Downed) #BR02-6 4_ENERGY_BLACK | |
| br_aldeb,0,0,0 duplicate(BR_Downed) #BR02-7 4_ENERGY_BLACK | |
| br_aldeb,0,0,0 duplicate(BR_Downed) #BR02-8 4_ENERGY_BLACK | |
| br_aldeb,0,0,0 duplicate(BR_Downed) #BR02-9 4_ENERGY_BLACK | |
| br_aldeb,0,0,0 duplicate(BR_Downed) #BR02-10 4_ENERGY_BLACK | |
| br_dewata,0,0,0 duplicate(BR_Downed) #BR03-1 4_ENERGY_BLACK | |
| br_dewata,0,0,0 duplicate(BR_Downed) #BR03-2 4_ENERGY_BLACK | |
| br_dewata,0,0,0 duplicate(BR_Downed) #BR03-3 4_ENERGY_BLACK | |
| br_dewata,0,0,0 duplicate(BR_Downed) #BR03-4 4_ENERGY_BLACK | |
| br_dewata,0,0,0 duplicate(BR_Downed) #BR03-5 4_ENERGY_BLACK | |
| br_dewata,0,0,0 duplicate(BR_Downed) #BR03-6 4_ENERGY_BLACK | |
| br_dewata,0,0,0 duplicate(BR_Downed) #BR03-7 4_ENERGY_BLACK | |
| br_dewata,0,0,0 duplicate(BR_Downed) #BR03-8 4_ENERGY_BLACK | |
| br_dewata,0,0,0 duplicate(BR_Downed) #BR03-9 4_ENERGY_BLACK | |
| br_dewata,0,0,0 duplicate(BR_Downed) #BR03-10 4_ENERGY_BLACK | |
| br_einbech,0,0,0 duplicate(BR_Downed) #BR04-1 4_ENERGY_BLACK | |
| br_einbech,0,0,0 duplicate(BR_Downed) #BR04-2 4_ENERGY_BLACK | |
| br_einbech,0,0,0 duplicate(BR_Downed) #BR04-3 4_ENERGY_BLACK | |
| br_einbech,0,0,0 duplicate(BR_Downed) #BR04-4 4_ENERGY_BLACK | |
| br_einbech,0,0,0 duplicate(BR_Downed) #BR04-5 4_ENERGY_BLACK | |
| br_einbech,0,0,0 duplicate(BR_Downed) #BR04-6 4_ENERGY_BLACK | |
| br_einbech,0,0,0 duplicate(BR_Downed) #BR04-7 4_ENERGY_BLACK | |
| br_einbech,0,0,0 duplicate(BR_Downed) #BR04-8 4_ENERGY_BLACK | |
| br_einbech,0,0,0 duplicate(BR_Downed) #BR04-9 4_ENERGY_BLACK | |
| br_einbech,0,0,0 duplicate(BR_Downed) #BR04-10 4_ENERGY_BLACK | |
| br_einbroch,0,0,0 duplicate(BR_Downed) #BR05-1 4_ENERGY_BLACK | |
| br_einbroch,0,0,0 duplicate(BR_Downed) #BR05-2 4_ENERGY_BLACK | |
| br_einbroch,0,0,0 duplicate(BR_Downed) #BR05-3 4_ENERGY_BLACK | |
| br_einbroch,0,0,0 duplicate(BR_Downed) #BR05-4 4_ENERGY_BLACK | |
| br_einbroch,0,0,0 duplicate(BR_Downed) #BR05-5 4_ENERGY_BLACK | |
| br_einbroch,0,0,0 duplicate(BR_Downed) #BR05-6 4_ENERGY_BLACK | |
| br_einbroch,0,0,0 duplicate(BR_Downed) #BR05-7 4_ENERGY_BLACK | |
| br_einbroch,0,0,0 duplicate(BR_Downed) #BR05-8 4_ENERGY_BLACK | |
| br_einbroch,0,0,0 duplicate(BR_Downed) #BR05-9 4_ENERGY_BLACK | |
| br_einbroch,0,0,0 duplicate(BR_Downed) #BR05-10 4_ENERGY_BLACK | |
| br_geffen,0,0,0 duplicate(BR_Downed) #BR06-1 4_ENERGY_BLACK | |
| br_geffen,0,0,0 duplicate(BR_Downed) #BR06-2 4_ENERGY_BLACK | |
| br_geffen,0,0,0 duplicate(BR_Downed) #BR06-3 4_ENERGY_BLACK | |
| br_geffen,0,0,0 duplicate(BR_Downed) #BR06-4 4_ENERGY_BLACK | |
| br_geffen,0,0,0 duplicate(BR_Downed) #BR06-5 4_ENERGY_BLACK | |
| br_geffen,0,0,0 duplicate(BR_Downed) #BR06-6 4_ENERGY_BLACK | |
| br_geffen,0,0,0 duplicate(BR_Downed) #BR06-7 4_ENERGY_BLACK | |
| br_geffen,0,0,0 duplicate(BR_Downed) #BR06-8 4_ENERGY_BLACK | |
| br_geffen,0,0,0 duplicate(BR_Downed) #BR06-9 4_ENERGY_BLACK | |
| br_geffen,0,0,0 duplicate(BR_Downed) #BR06-10 4_ENERGY_BLACK | |
| br_gonryun,0,0,0 duplicate(BR_Downed) #BR07-1 4_ENERGY_BLACK | |
| br_gonryun,0,0,0 duplicate(BR_Downed) #BR07-2 4_ENERGY_BLACK | |
| br_gonryun,0,0,0 duplicate(BR_Downed) #BR07-3 4_ENERGY_BLACK | |
| br_gonryun,0,0,0 duplicate(BR_Downed) #BR07-4 4_ENERGY_BLACK | |
| br_gonryun,0,0,0 duplicate(BR_Downed) #BR07-5 4_ENERGY_BLACK | |
| br_gonryun,0,0,0 duplicate(BR_Downed) #BR07-6 4_ENERGY_BLACK | |
| br_gonryun,0,0,0 duplicate(BR_Downed) #BR07-7 4_ENERGY_BLACK | |
| br_gonryun,0,0,0 duplicate(BR_Downed) #BR07-8 4_ENERGY_BLACK | |
| br_gonryun,0,0,0 duplicate(BR_Downed) #BR07-9 4_ENERGY_BLACK | |
| br_gonryun,0,0,0 duplicate(BR_Downed) #BR07-10 4_ENERGY_BLACK | |
| br_hugel,0,0,0 duplicate(BR_Downed) #BR08-1 4_ENERGY_BLACK | |
| br_hugel,0,0,0 duplicate(BR_Downed) #BR08-2 4_ENERGY_BLACK | |
| br_hugel,0,0,0 duplicate(BR_Downed) #BR08-3 4_ENERGY_BLACK | |
| br_hugel,0,0,0 duplicate(BR_Downed) #BR08-4 4_ENERGY_BLACK | |
| br_hugel,0,0,0 duplicate(BR_Downed) #BR08-5 4_ENERGY_BLACK | |
| br_hugel,0,0,0 duplicate(BR_Downed) #BR08-6 4_ENERGY_BLACK | |
| br_hugel,0,0,0 duplicate(BR_Downed) #BR08-7 4_ENERGY_BLACK | |
| br_hugel,0,0,0 duplicate(BR_Downed) #BR08-8 4_ENERGY_BLACK | |
| br_hugel,0,0,0 duplicate(BR_Downed) #BR08-9 4_ENERGY_BLACK | |
| br_hugel,0,0,0 duplicate(BR_Downed) #BR08-10 4_ENERGY_BLACK | |
| br_izlude,0,0,0 duplicate(BR_Downed) #BR09-1 4_ENERGY_BLACK | |
| br_izlude,0,0,0 duplicate(BR_Downed) #BR09-2 4_ENERGY_BLACK | |
| br_izlude,0,0,0 duplicate(BR_Downed) #BR09-3 4_ENERGY_BLACK | |
| br_izlude,0,0,0 duplicate(BR_Downed) #BR09-4 4_ENERGY_BLACK | |
| br_izlude,0,0,0 duplicate(BR_Downed) #BR09-5 4_ENERGY_BLACK | |
| br_izlude,0,0,0 duplicate(BR_Downed) #BR09-6 4_ENERGY_BLACK | |
| br_izlude,0,0,0 duplicate(BR_Downed) #BR09-7 4_ENERGY_BLACK | |
| br_izlude,0,0,0 duplicate(BR_Downed) #BR09-8 4_ENERGY_BLACK | |
| br_izlude,0,0,0 duplicate(BR_Downed) #BR09-9 4_ENERGY_BLACK | |
| br_izlude,0,0,0 duplicate(BR_Downed) #BR09-10 4_ENERGY_BLACK | |
| br_lasagna,0,0,0 duplicate(BR_Downed) #BR10-1 4_ENERGY_BLACK | |
| br_lasagna,0,0,0 duplicate(BR_Downed) #BR10-2 4_ENERGY_BLACK | |
| br_lasagna,0,0,0 duplicate(BR_Downed) #BR10-3 4_ENERGY_BLACK | |
| br_lasagna,0,0,0 duplicate(BR_Downed) #BR10-4 4_ENERGY_BLACK | |
| br_lasagna,0,0,0 duplicate(BR_Downed) #BR10-5 4_ENERGY_BLACK | |
| br_lasagna,0,0,0 duplicate(BR_Downed) #BR10-6 4_ENERGY_BLACK | |
| br_lasagna,0,0,0 duplicate(BR_Downed) #BR10-7 4_ENERGY_BLACK | |
| br_lasagna,0,0,0 duplicate(BR_Downed) #BR10-8 4_ENERGY_BLACK | |
| br_lasagna,0,0,0 duplicate(BR_Downed) #BR10-9 4_ENERGY_BLACK | |
| br_lasagna,0,0,0 duplicate(BR_Downed) #BR10-10 4_ENERGY_BLACK | |
| br_malaya,0,0,0 duplicate(BR_Downed) #BR11-1 4_ENERGY_BLACK | |
| br_malaya,0,0,0 duplicate(BR_Downed) #BR11-2 4_ENERGY_BLACK | |
| br_malaya,0,0,0 duplicate(BR_Downed) #BR11-3 4_ENERGY_BLACK | |
| br_malaya,0,0,0 duplicate(BR_Downed) #BR11-4 4_ENERGY_BLACK | |
| br_malaya,0,0,0 duplicate(BR_Downed) #BR11-5 4_ENERGY_BLACK | |
| br_malaya,0,0,0 duplicate(BR_Downed) #BR11-6 4_ENERGY_BLACK | |
| br_malaya,0,0,0 duplicate(BR_Downed) #BR11-7 4_ENERGY_BLACK | |
| br_malaya,0,0,0 duplicate(BR_Downed) #BR11-8 4_ENERGY_BLACK | |
| br_malaya,0,0,0 duplicate(BR_Downed) #BR11-9 4_ENERGY_BLACK | |
| br_malaya,0,0,0 duplicate(BR_Downed) #BR11-10 4_ENERGY_BLACK | |
| br_morocc,0,0,0 duplicate(BR_Downed) #BR12-1 4_ENERGY_BLACK | |
| br_morocc,0,0,0 duplicate(BR_Downed) #BR12-2 4_ENERGY_BLACK | |
| br_morocc,0,0,0 duplicate(BR_Downed) #BR12-3 4_ENERGY_BLACK | |
| br_morocc,0,0,0 duplicate(BR_Downed) #BR12-4 4_ENERGY_BLACK | |
| br_morocc,0,0,0 duplicate(BR_Downed) #BR12-5 4_ENERGY_BLACK | |
| br_morocc,0,0,0 duplicate(BR_Downed) #BR12-6 4_ENERGY_BLACK | |
| br_morocc,0,0,0 duplicate(BR_Downed) #BR12-7 4_ENERGY_BLACK | |
| br_morocc,0,0,0 duplicate(BR_Downed) #BR12-8 4_ENERGY_BLACK | |
| br_morocc,0,0,0 duplicate(BR_Downed) #BR12-9 4_ENERGY_BLACK | |
| br_morocc,0,0,0 duplicate(BR_Downed) #BR12-10 4_ENERGY_BLACK | |
| br_moscovia,0,0,0 duplicate(BR_Downed) #BR13-1 4_ENERGY_BLACK | |
| br_moscovia,0,0,0 duplicate(BR_Downed) #BR13-2 4_ENERGY_BLACK | |
| br_moscovia,0,0,0 duplicate(BR_Downed) #BR13-3 4_ENERGY_BLACK | |
| br_moscovia,0,0,0 duplicate(BR_Downed) #BR13-4 4_ENERGY_BLACK | |
| br_moscovia,0,0,0 duplicate(BR_Downed) #BR13-5 4_ENERGY_BLACK | |
| br_moscovia,0,0,0 duplicate(BR_Downed) #BR13-6 4_ENERGY_BLACK | |
| br_moscovia,0,0,0 duplicate(BR_Downed) #BR13-7 4_ENERGY_BLACK | |
| br_moscovia,0,0,0 duplicate(BR_Downed) #BR13-8 4_ENERGY_BLACK | |
| br_moscovia,0,0,0 duplicate(BR_Downed) #BR13-9 4_ENERGY_BLACK | |
| br_moscovia,0,0,0 duplicate(BR_Downed) #BR13-10 4_ENERGY_BLACK | |
| br_niflheim,0,0,0 duplicate(BR_Downed) #BR14-1 4_ENERGY_BLACK | |
| br_niflheim,0,0,0 duplicate(BR_Downed) #BR14-2 4_ENERGY_BLACK | |
| br_niflheim,0,0,0 duplicate(BR_Downed) #BR14-3 4_ENERGY_BLACK | |
| br_niflheim,0,0,0 duplicate(BR_Downed) #BR14-4 4_ENERGY_BLACK | |
| br_niflheim,0,0,0 duplicate(BR_Downed) #BR14-5 4_ENERGY_BLACK | |
| br_niflheim,0,0,0 duplicate(BR_Downed) #BR14-6 4_ENERGY_BLACK | |
| br_niflheim,0,0,0 duplicate(BR_Downed) #BR14-7 4_ENERGY_BLACK | |
| br_niflheim,0,0,0 duplicate(BR_Downed) #BR14-8 4_ENERGY_BLACK | |
| br_niflheim,0,0,0 duplicate(BR_Downed) #BR14-9 4_ENERGY_BLACK | |
| br_niflheim,0,0,0 duplicate(BR_Downed) #BR14-10 4_ENERGY_BLACK | |
| br_payon,0,0,0 duplicate(BR_Downed) #BR15-1 4_ENERGY_BLACK | |
| br_payon,0,0,0 duplicate(BR_Downed) #BR15-2 4_ENERGY_BLACK | |
| br_payon,0,0,0 duplicate(BR_Downed) #BR15-3 4_ENERGY_BLACK | |
| br_payon,0,0,0 duplicate(BR_Downed) #BR15-4 4_ENERGY_BLACK | |
| br_payon,0,0,0 duplicate(BR_Downed) #BR15-5 4_ENERGY_BLACK | |
| br_payon,0,0,0 duplicate(BR_Downed) #BR15-6 4_ENERGY_BLACK | |
| br_payon,0,0,0 duplicate(BR_Downed) #BR15-7 4_ENERGY_BLACK | |
| br_payon,0,0,0 duplicate(BR_Downed) #BR15-8 4_ENERGY_BLACK | |
| br_payon,0,0,0 duplicate(BR_Downed) #BR15-9 4_ENERGY_BLACK | |
| br_payon,0,0,0 duplicate(BR_Downed) #BR15-10 4_ENERGY_BLACK | |
| br_prontera,0,0,0 duplicate(BR_Downed) #BR16-1 4_ENERGY_BLACK | |
| br_prontera,0,0,0 duplicate(BR_Downed) #BR16-2 4_ENERGY_BLACK | |
| br_prontera,0,0,0 duplicate(BR_Downed) #BR16-3 4_ENERGY_BLACK | |
| br_prontera,0,0,0 duplicate(BR_Downed) #BR16-4 4_ENERGY_BLACK | |
| br_prontera,0,0,0 duplicate(BR_Downed) #BR16-5 4_ENERGY_BLACK | |
| br_prontera,0,0,0 duplicate(BR_Downed) #BR16-6 4_ENERGY_BLACK | |
| br_prontera,0,0,0 duplicate(BR_Downed) #BR16-7 4_ENERGY_BLACK | |
| br_prontera,0,0,0 duplicate(BR_Downed) #BR16-8 4_ENERGY_BLACK | |
| br_prontera,0,0,0 duplicate(BR_Downed) #BR16-9 4_ENERGY_BLACK | |
| br_prontera,0,0,0 duplicate(BR_Downed) #BR16-10 4_ENERGY_BLACK | |
| br_rachel,0,0,0 duplicate(BR_Downed) #BR17-1 4_ENERGY_BLACK | |
| br_rachel,0,0,0 duplicate(BR_Downed) #BR17-2 4_ENERGY_BLACK | |
| br_rachel,0,0,0 duplicate(BR_Downed) #BR17-3 4_ENERGY_BLACK | |
| br_rachel,0,0,0 duplicate(BR_Downed) #BR17-4 4_ENERGY_BLACK | |
| br_rachel,0,0,0 duplicate(BR_Downed) #BR17-5 4_ENERGY_BLACK | |
| br_rachel,0,0,0 duplicate(BR_Downed) #BR17-6 4_ENERGY_BLACK | |
| br_rachel,0,0,0 duplicate(BR_Downed) #BR17-7 4_ENERGY_BLACK | |
| br_rachel,0,0,0 duplicate(BR_Downed) #BR17-8 4_ENERGY_BLACK | |
| br_rachel,0,0,0 duplicate(BR_Downed) #BR17-9 4_ENERGY_BLACK | |
| br_rachel,0,0,0 duplicate(BR_Downed) #BR17-10 4_ENERGY_BLACK | |
| br_splend,0,0,0 duplicate(BR_Downed) #BR18-1 4_ENERGY_BLACK | |
| br_splend,0,0,0 duplicate(BR_Downed) #BR18-2 4_ENERGY_BLACK | |
| br_splend,0,0,0 duplicate(BR_Downed) #BR18-3 4_ENERGY_BLACK | |
| br_splend,0,0,0 duplicate(BR_Downed) #BR18-4 4_ENERGY_BLACK | |
| br_splend,0,0,0 duplicate(BR_Downed) #BR18-5 4_ENERGY_BLACK | |
| br_splend,0,0,0 duplicate(BR_Downed) #BR18-6 4_ENERGY_BLACK | |
| br_splend,0,0,0 duplicate(BR_Downed) #BR18-7 4_ENERGY_BLACK | |
| br_splend,0,0,0 duplicate(BR_Downed) #BR18-8 4_ENERGY_BLACK | |
| br_splend,0,0,0 duplicate(BR_Downed) #BR18-9 4_ENERGY_BLACK | |
| br_splend,0,0,0 duplicate(BR_Downed) #BR18-10 4_ENERGY_BLACK | |
| br_veins,0,0,0 duplicate(BR_Downed) #BR19-1 4_ENERGY_BLACK | |
| br_veins,0,0,0 duplicate(BR_Downed) #BR19-2 4_ENERGY_BLACK | |
| br_veins,0,0,0 duplicate(BR_Downed) #BR19-3 4_ENERGY_BLACK | |
| br_veins,0,0,0 duplicate(BR_Downed) #BR19-4 4_ENERGY_BLACK | |
| br_veins,0,0,0 duplicate(BR_Downed) #BR19-5 4_ENERGY_BLACK | |
| br_veins,0,0,0 duplicate(BR_Downed) #BR19-6 4_ENERGY_BLACK | |
| br_veins,0,0,0 duplicate(BR_Downed) #BR19-7 4_ENERGY_BLACK | |
| br_veins,0,0,0 duplicate(BR_Downed) #BR19-8 4_ENERGY_BLACK | |
| br_veins,0,0,0 duplicate(BR_Downed) #BR19-9 4_ENERGY_BLACK | |
| br_veins,0,0,0 duplicate(BR_Downed) #BR19-10 4_ENERGY_BLACK | |
| br_yuno,0,0,0 duplicate(BR_Downed) #BR20-1 4_ENERGY_BLACK | |
| br_yuno,0,0,0 duplicate(BR_Downed) #BR20-2 4_ENERGY_BLACK | |
| br_yuno,0,0,0 duplicate(BR_Downed) #BR20-3 4_ENERGY_BLACK | |
| br_yuno,0,0,0 duplicate(BR_Downed) #BR20-4 4_ENERGY_BLACK | |
| br_yuno,0,0,0 duplicate(BR_Downed) #BR20-5 4_ENERGY_BLACK | |
| br_yuno,0,0,0 duplicate(BR_Downed) #BR20-6 4_ENERGY_BLACK | |
| br_yuno,0,0,0 duplicate(BR_Downed) #BR20-7 4_ENERGY_BLACK | |
| br_yuno,0,0,0 duplicate(BR_Downed) #BR20-8 4_ENERGY_BLACK | |
| br_yuno,0,0,0 duplicate(BR_Downed) #BR20-9 4_ENERGY_BLACK | |
| br_yuno,0,0,0 duplicate(BR_Downed) #BR20-10 4_ENERGY_BLACK | |
| - script BR_ZEffect -1,{ | |
| end; | |
| OnInit: | |
| if(strnpcinfo(0) != "BR_ZEffect") | |
| disablenpc strnpcinfo(0); | |
| end; | |
| OnBRStart: | |
| enablenpc strnpcinfo(0); | |
| set .Arena_Status[atoi(charat(strnpcinfo(2),3))],1; | |
| set .ZoneRefresh,100; // Timer in milliseconds to refresh the zone | |
| function BR_ZoneEffect; | |
| end; | |
| OnZoneDisplay: | |
| set .@BR_ID,atoi(charat(strnpcinfo(2),3)); | |
| while(.Arena_Status[.@BR_ID]) { | |
| set .@z,getvariableofnpc(getd(".z_"+.@BR_ID),"BR_Arena#"+.@BR_ID); | |
| set .@x1,getvariableofnpc(getd(".zone_"+.@BR_ID+"["+.@z+"]"),"BR_Arena#"+.@BR_ID); | |
| set .@y1,getvariableofnpc(getd(".zone_"+.@BR_ID+"["+(.@z+1)+"]"),"BR_Arena#"+.@BR_ID); | |
| set .@x2,getvariableofnpc(getd(".zone_"+.@BR_ID+"["+(.@z+2)+"]"),"BR_Arena#"+.@BR_ID); | |
| set .@y2,getvariableofnpc(getd(".zone_"+.@BR_ID+"["+(.@z+3)+"]"),"BR_Arena#"+.@BR_ID); | |
| BR_ZoneEffect(.@x1,.@y1,.@x2,.@y2,atoi(charat(strnpcinfo(2),5)),.@BR_ID); | |
| if(.ZoneRefresh) | |
| sleep .ZoneRefresh; | |
| } | |
| end; | |
| OnBREnd: | |
| set .Arena_Status[atoi(charat(strnpcinfo(2),3))],0; | |
| set .ZoneRefresh,0; | |
| disablenpc strnpcinfo(0); | |
| end; | |
| // Function for issuing Zone Movement | |
| function BR_ZoneEffect { | |
| // ===================================== | |
| // getarg: | |
| // - 0 = X 1 | |
| // - 1 = Y 1 | |
| // - 2 = X 2 | |
| // - 3 = Y 2 | |
| // - 4 = Corner | |
| // - 5 = Arena ID | |
| // ===================================== | |
| // Borders: | |
| // |---#4---| | |
| // | | | |
| // #1 #3 | |
| // | | | |
| // |---#2---| | |
| // Border #1: x1/y1 to x1/y2 ( South West to North West ) | |
| // Border #2: x1/y1 to x2/y1 ( South West to South East ) | |
| // Border #3: x2/y1 to x2/y2 ( South East to North East ) | |
| // Border #4: x1/y2 to x2/y2 ( North West to North East ) | |
| // ===================================== | |
| set .@x,getarg(0); | |
| set .@y,getarg(1); | |
| set .@nm,10; // NPC's should move every X cells to new location | |
| // Border #1+3 | |
| while( .@y != getarg(3) ) { | |
| //Skilleffect of Ice Wall | |
| if(getarg(4) == 1) { | |
| npcskilleffect "WZ_ICEWALL",1,getarg(0),.@y; | |
| if(.@npc%.@nm == 0) | |
| movenpc "#BRZ"+getarg(5)+"-"+getarg(4),getarg(0),.@y; | |
| } | |
| if(getarg(4) == 3) { | |
| npcskilleffect "WZ_ICEWALL",1,getarg(2),.@y; | |
| if(.@npc%.@nm == 0) | |
| movenpc "#BRZ"+getarg(5)+"-"+getarg(4),getarg(2),.@y; | |
| } | |
| // Increase the respective coordinate for the next loop | |
| set .@y,.@y + 1; | |
| set .@npc,.@npc + 1; | |
| sleep 1; | |
| } | |
| set .@npc,0; | |
| // Border #2+4 | |
| while( .@x != getarg(2) ) { | |
| //Skilleffect of Ice Wall | |
| if(getarg(4) == 2) { | |
| npcskilleffect "WZ_ICEWALL",1,.@x,getarg(1); | |
| if(.@npc%.@nm == 0) | |
| movenpc "#BRZ"+getarg(5)+"-"+getarg(4),.@x,getarg(1); | |
| } | |
| if(getarg(4) == 4) { | |
| npcskilleffect "WZ_ICEWALL",1,.@x,getarg(3); | |
| if(.@npc%.@nm == 0) | |
| movenpc "#BRZ"+getarg(5)+"-"+getarg(4),.@x,getarg(3); | |
| } | |
| // Increase the respective coordinate for the next loop | |
| set .@x,.@x + 1; | |
| set .@npc,.@npc + 1; | |
| sleep 1; | |
| } | |
| return; | |
| } | |
| } | |
| // Zone Corner NPC Duplicates | |
| br_alberta,0,0,0 duplicate(BR_ZEffect) #BRZ1-1 HIDDEN_NPC | |
| br_alberta,0,0,0 duplicate(BR_ZEffect) #BRZ1-2 HIDDEN_NPC | |
| br_alberta,0,0,0 duplicate(BR_ZEffect) #BRZ1-3 HIDDEN_NPC | |
| br_alberta,0,0,0 duplicate(BR_ZEffect) #BRZ1-4 HIDDEN_NPC | |
| br_aldeb,0,0,0 duplicate(BR_ZEffect) #BRZ2-1 HIDDEN_NPC | |
| br_aldeb,0,0,0 duplicate(BR_ZEffect) #BRZ2-2 HIDDEN_NPC | |
| br_aldeb,0,0,0 duplicate(BR_ZEffect) #BRZ2-3 HIDDEN_NPC | |
| br_aldeb,0,0,0 duplicate(BR_ZEffect) #BRZ2-4 HIDDEN_NPC | |
| br_dewata,0,0,0 duplicate(BR_ZEffect) #BRZ3-1 HIDDEN_NPC | |
| br_dewata,0,0,0 duplicate(BR_ZEffect) #BRZ3-2 HIDDEN_NPC | |
| br_dewata,0,0,0 duplicate(BR_ZEffect) #BRZ3-3 HIDDEN_NPC | |
| br_dewata,0,0,0 duplicate(BR_ZEffect) #BRZ3-4 HIDDEN_NPC | |
| br_einbech,0,0,0 duplicate(BR_ZEffect) #BRZ4-1 HIDDEN_NPC | |
| br_einbech,0,0,0 duplicate(BR_ZEffect) #BRZ4-2 HIDDEN_NPC | |
| br_einbech,0,0,0 duplicate(BR_ZEffect) #BRZ4-3 HIDDEN_NPC | |
| br_einbech,0,0,0 duplicate(BR_ZEffect) #BRZ4-4 HIDDEN_NPC | |
| br_einbroch,0,0,0 duplicate(BR_ZEffect) #BRZ5-1 HIDDEN_NPC | |
| br_einbroch,0,0,0 duplicate(BR_ZEffect) #BRZ5-2 HIDDEN_NPC | |
| br_einbroch,0,0,0 duplicate(BR_ZEffect) #BRZ5-3 HIDDEN_NPC | |
| br_einbroch,0,0,0 duplicate(BR_ZEffect) #BRZ5-4 HIDDEN_NPC | |
| br_geffen,0,0,0 duplicate(BR_ZEffect) #BRZ6-1 HIDDEN_NPC | |
| br_geffen,0,0,0 duplicate(BR_ZEffect) #BRZ6-2 HIDDEN_NPC | |
| br_geffen,0,0,0 duplicate(BR_ZEffect) #BRZ6-3 HIDDEN_NPC | |
| br_geffen,0,0,0 duplicate(BR_ZEffect) #BRZ6-4 HIDDEN_NPC | |
| br_gonryun,0,0,0 duplicate(BR_ZEffect) #BRZ7-1 HIDDEN_NPC | |
| br_gonryun,0,0,0 duplicate(BR_ZEffect) #BRZ7-2 HIDDEN_NPC | |
| br_gonryun,0,0,0 duplicate(BR_ZEffect) #BRZ7-3 HIDDEN_NPC | |
| br_gonryun,0,0,0 duplicate(BR_ZEffect) #BRZ7-4 HIDDEN_NPC | |
| br_hugel,0,0,0 duplicate(BR_ZEffect) #BRZ8-1 HIDDEN_NPC | |
| br_hugel,0,0,0 duplicate(BR_ZEffect) #BRZ8-2 HIDDEN_NPC | |
| br_hugel,0,0,0 duplicate(BR_ZEffect) #BRZ8-3 HIDDEN_NPC | |
| br_hugel,0,0,0 duplicate(BR_ZEffect) #BRZ8-4 HIDDEN_NPC | |
| br_izlude,0,0,0 duplicate(BR_ZEffect) #BRZ9-1 HIDDEN_NPC | |
| br_izlude,0,0,0 duplicate(BR_ZEffect) #BRZ9-2 HIDDEN_NPC | |
| br_izlude,0,0,0 duplicate(BR_ZEffect) #BRZ9-3 HIDDEN_NPC | |
| br_izlude,0,0,0 duplicate(BR_ZEffect) #BRZ9-4 HIDDEN_NPC | |
| br_lasagna,0,0,0 duplicate(BR_ZEffect) #BRZ10-1 HIDDEN_NPC | |
| br_lasagna,0,0,0 duplicate(BR_ZEffect) #BRZ10-2 HIDDEN_NPC | |
| br_lasagna,0,0,0 duplicate(BR_ZEffect) #BRZ10-3 HIDDEN_NPC | |
| br_lasagna,0,0,0 duplicate(BR_ZEffect) #BRZ10-4 HIDDEN_NPC | |
| br_malaya,0,0,0 duplicate(BR_ZEffect) #BRZ11-1 HIDDEN_NPC | |
| br_malaya,0,0,0 duplicate(BR_ZEffect) #BRZ11-2 HIDDEN_NPC | |
| br_malaya,0,0,0 duplicate(BR_ZEffect) #BRZ11-3 HIDDEN_NPC | |
| br_malaya,0,0,0 duplicate(BR_ZEffect) #BRZ11-4 HIDDEN_NPC | |
| br_morocc,0,0,0 duplicate(BR_ZEffect) #BRZ12-1 HIDDEN_NPC | |
| br_morocc,0,0,0 duplicate(BR_ZEffect) #BRZ12-2 HIDDEN_NPC | |
| br_morocc,0,0,0 duplicate(BR_ZEffect) #BRZ12-3 HIDDEN_NPC | |
| br_morocc,0,0,0 duplicate(BR_ZEffect) #BRZ12-4 HIDDEN_NPC | |
| br_moscovia,0,0,0 duplicate(BR_ZEffect) #BRZ13-1 HIDDEN_NPC | |
| br_moscovia,0,0,0 duplicate(BR_ZEffect) #BRZ13-2 HIDDEN_NPC | |
| br_moscovia,0,0,0 duplicate(BR_ZEffect) #BRZ13-3 HIDDEN_NPC | |
| br_moscovia,0,0,0 duplicate(BR_ZEffect) #BRZ13-4 HIDDEN_NPC | |
| br_niflheim,0,0,0 duplicate(BR_ZEffect) #BRZ14-1 HIDDEN_NPC | |
| br_niflheim,0,0,0 duplicate(BR_ZEffect) #BRZ14-2 HIDDEN_NPC | |
| br_niflheim,0,0,0 duplicate(BR_ZEffect) #BRZ14-3 HIDDEN_NPC | |
| br_niflheim,0,0,0 duplicate(BR_ZEffect) #BRZ14-4 HIDDEN_NPC | |
| br_payon,0,0,0 duplicate(BR_ZEffect) #BRZ15-1 HIDDEN_NPC | |
| br_payon,0,0,0 duplicate(BR_ZEffect) #BRZ15-2 HIDDEN_NPC | |
| br_payon,0,0,0 duplicate(BR_ZEffect) #BRZ15-3 HIDDEN_NPC | |
| br_payon,0,0,0 duplicate(BR_ZEffect) #BRZ15-4 HIDDEN_NPC | |
| br_prontera,0,0,0 duplicate(BR_ZEffect) #BRZ16-1 HIDDEN_NPC | |
| br_prontera,0,0,0 duplicate(BR_ZEffect) #BRZ16-2 HIDDEN_NPC | |
| br_prontera,0,0,0 duplicate(BR_ZEffect) #BRZ16-3 HIDDEN_NPC | |
| br_prontera,0,0,0 duplicate(BR_ZEffect) #BRZ16-4 HIDDEN_NPC | |
| br_rachel,0,0,0 duplicate(BR_ZEffect) #BRZ17-1 HIDDEN_NPC | |
| br_rachel,0,0,0 duplicate(BR_ZEffect) #BRZ17-2 HIDDEN_NPC | |
| br_rachel,0,0,0 duplicate(BR_ZEffect) #BRZ17-3 HIDDEN_NPC | |
| br_rachel,0,0,0 duplicate(BR_ZEffect) #BRZ17-4 HIDDEN_NPC | |
| br_splend,0,0,0 duplicate(BR_ZEffect) #BRZ18-1 HIDDEN_NPC | |
| br_splend,0,0,0 duplicate(BR_ZEffect) #BRZ18-2 HIDDEN_NPC | |
| br_splend,0,0,0 duplicate(BR_ZEffect) #BRZ18-3 HIDDEN_NPC | |
| br_splend,0,0,0 duplicate(BR_ZEffect) #BRZ18-4 HIDDEN_NPC | |
| br_veins,0,0,0 duplicate(BR_ZEffect) #BRZ19-1 HIDDEN_NPC | |
| br_veins,0,0,0 duplicate(BR_ZEffect) #BRZ19-2 HIDDEN_NPC | |
| br_veins,0,0,0 duplicate(BR_ZEffect) #BRZ19-3 HIDDEN_NPC | |
| br_veins,0,0,0 duplicate(BR_ZEffect) #BRZ19-4 HIDDEN_NPC | |
| br_yuno,0,0,0 duplicate(BR_ZEffect) #BRZ20-1 HIDDEN_NPC | |
| br_yuno,0,0,0 duplicate(BR_ZEffect) #BRZ20-2 HIDDEN_NPC | |
| br_yuno,0,0,0 duplicate(BR_ZEffect) #BRZ20-3 HIDDEN_NPC | |
| br_yuno,0,0,0 duplicate(BR_ZEffect) #BRZ20-4 -1 | |
| // Loot Boxes Template | |
| - script BR_LootBox -1,{ | |
| freeloop(1); // Preventing infinite loop error, sleep 100; didn't work... | |
| getmapxy(.@map$,.@x,.@y,BL_NPC,strnpcinfo(0)); // For makeitem | |
| set .@m,3; // Set range of area around the Loot Box for makeitem | |
| // Healing + Buff Items | |
| set .@loot,( (.randlimit == 1)?rand(1,.heal_limit):.heal_limit); | |
| set .@c,1; | |
| while(.@c <= .@loot) { | |
| // Getting the Item ID via the Array Index | |
| set .@h,rand(1,.heal_size)*3-3; | |
| if(rand(1,100) <= .heal[.@h+2]) | |
| makeitem .heal[.@h],.heal[.@h+1],.@map$,rand((.@x-.@m),(.@x+.@m)),rand((.@y-.@m),(.@y+.@m)); break; | |
| set .@c,.@c + 1; | |
| } | |
| // Equipment | |
| set .@loot,( (.randlimit == 1)?rand(1,.equip_limit):.equip_limit); | |
| set .@c,1; | |
| if(Class >= 4046 || Class <= 4049) // Check if the Class is not Taekwon | |
| set .@bclass,BaseClass; | |
| else | |
| set .@bclass,Class; | |
| while(.@c <= .@loot) { | |
| // Randomize if Weapon or Armor is created | |
| set .@et,rand(1,2); | |
| // ================== Weapons ================== | |
| if(.@et == 1) { // Depending on loop counter, choose the equipment type | |
| // ========= Randomize Item ========= | |
| set .@e,rand(1,getarraysize(getd(".weap_"+.@bclass))/15)*15-15; | |
| // ========= Loot Chance ========= | |
| if(rand(1,100) >= getd(".weap_"+.@bclass+"["+(.@e+2)+"]")) | |
| continue; | |
| // ========= Item ID ========= | |
| set .@id,getd(".weap_"+.@bclass+"["+.@e+"]"); | |
| // ========= Amount ========= | |
| set .@am,getd(".weap_"+.@bclass+"["+(.@e+1)+"]"); | |
| // ========= Refine ========= | |
| if(getd(".weap_"+.@bclass+"["+(.@e+3)+"]")) // If refine is enabled, randomize it | |
| set .@ref,rand(getd(".weap_"+.@bclass+"["+(.@e+4)+"]"),getd(".weap_"+.@bclass+"["+(.@e+5)+"]")); | |
| // ========= Cards ========= | |
| if(getd(".weap_"+.@bclass+"["+(.@e+6)+"]")) { | |
| // Andre, Archer Skeleton, Armed Guard Soheon, Atroce, Banaspaty, Breeze | |
| setarray .@cards[0],4043,4094,4575,4425,4518,4390; | |
| // Define the Max Card Slots to use via | |
| if(getd(".weap_"+.@bclass+"["+(.@e+7)+"]")) // Random | |
| set .@cs,rand(0,getitemslots(getd(".weap_"+.@bclass+"["+.@e+"]"))); | |
| else // Count how many max slots the equipment has available | |
| set .@cs,getitemslots(getd(".weap_"+.@bclass+"["+.@e+"]")); | |
| } | |
| // Enchants enabled? | |
| if(getd(".weap_"+.@bclass+"["+(.@e+8)+"]")) { | |
| if(getd(".weap_"+.@bclass+"["+(.@e+11)+"]")) // If random amount of Enchantments is enabled | |
| set .@er,rand(getd(".weap_"+.@bclass+"["+(.@e+9)+"]"),getd(".weap_"+.@bclass+"["+(.@e+10)+"]")); | |
| else if(!getd(".weap_"+.@bclass+"["+(.@e+11)+"]")) // If not, set max amount | |
| set .@er,getd(".weap_"+.@bclass+"["+(.@e+10)+"]"); | |
| } | |
| // If Random Options is enabled | |
| if(getd(".weap_"+.@bclass+"["+(.@e+12)+"]")) { | |
| // Randomize the amount of Random Options | |
| set .@or,rand(getd(".weap_"+.@bclass+"["+(.@e+13)+"]"),getd(".weap_"+.@bclass+"["+(.@e+14)+"]")); | |
| if(.@or) { | |
| // Random Options - Format: | |
| // = Put in the ID's for the respective Random Option Slot, they will be randomly selected | |
| // > .@rand = ID | |
| // > .@rval = Value | |
| // > .@rpar = Param | |
| // 1st Random Option Slot - Status | |
| setarray .@rand1[0],RDMOPT_VAR_STRAMOUNT,RDMOPT_VAR_AGIAMOUNT,RDMOPT_VAR_VITAMOUNT,RDMOPT_VAR_INTAMOUNT,RDMOPT_VAR_DEXAMOUNT,RDMOPT_VAR_LUKAMOUNT,RDMOPT_VAR_ATKPERCENT,RDMOPT_VAR_MAGICATKPERCENT,RDMOPT_VAR_PLUSASPD,RDMOPT_VAR_PLUSASPDPERCENT,RDMOPT_VAR_ATTPOWER,RDMOPT_VAR_HITSUCCESSVALUE,RDMOPT_VAR_ATTMPOWER,RDMOPT_VAR_CRITICALSUCCESSVALUE; | |
| setarray .@rmin1[0],10,10,1,1,1,1,1,1,1,1,1,1,1,1; | |
| setarray .@rmax1[0],100,100,10,10,10,10,10,10,10,10,10,10,10,10; | |
| setarray .@rpar1[0],0; | |
| // 2nd Random Option Slot - Race/Class/Size Damage Multipliers | |
| setarray .@rand2[0],RDMOPT_RACE_DAMAGE_HUMAN,RDMOPT_RACE_MDAMAGE_HUMAN,RDMOPT_RACE_CRI_PERCENT_HUMAN,RDMOPT_RACE_IGNORE_DEF_PERCENT_HUMAN,RDMOPT_RACE_IGNORE_MDEF_PERCENT_HUMAN,RDMOPT_CLASS_DAMAGE_NORMAL_TARGET,RDMOPT_CLASS_MDAMAGE_NORMAL,RDMOPT_CLASS_IGNORE_DEF_PERCENT_NORMAL,RDMOPT_CLASS_IGNORE_MDEF_PERCENT_NORMAL,RDMOPT_DAMAGE_SIZE_MIDIUM_TARGET,RDMOPT_MDAMAGE_SIZE_MIDIUM_TARGET; | |
| setarray .@rmin2[0],1,1,1,1,1,1,1,1,1,1,1; | |
| setarray .@rmax2[0],10,10,10,10,10,10,10,10,10,10,10; | |
| setarray .@rpar2[0],0; | |
| // 3rd Random Option Slot - Crit/Range Damage Multiplier | |
| setarray .@rand3[0],RDMOPT_DAMAGE_CRI_TARGET,RDMOPT_RANGE_ATTACK_DAMAGE_TARGET; | |
| setarray .@rmin3[0],1,1; | |
| setarray .@rmax3[0],5,5; | |
| setarray .@rpar3[0],0; | |
| } | |
| } | |
| // ================== Armor ================== | |
| } else if(.@et == 2) { | |
| // ========= Randomize Item ========= | |
| set .@e,rand(1,getarraysize(.equip)/15)*15-15; | |
| // ========= Loot Chance ========= | |
| if(rand(1,100) >= .equip[.@e+2]) | |
| continue; | |
| // ========= Item ID ========= | |
| set .@id,.equip[.@e]; | |
| // ========= Amount ========= | |
| set .@am,.equip[.@e+1]; | |
| // ========= Refine ========= | |
| if(.equip[.@e+3]) // If refine is enabled, randomize it | |
| set .@ref,rand(.equip[.@e+4],.equip[.@e+5]); | |
| // ========= Cards ========= | |
| if(.equip[.@e+6]) { | |
| // Depending on the Item Type, use the correct Cards for it | |
| switch(getiteminfo(.equip[.@e],5)) { | |
| case 1: // Lower Headgear | |
| case 256: // Middle Headgear | |
| case 512: // Top Headgear | |
| // Blue Acidus, Dark Pinguicula, Dolomedes, Elder Willow, Gibbet, King Dramoh | |
| setarray .@cards[0],4379,4468,4506,4052,4278,4524; | |
| break; | |
| case 16: // Armor | |
| // Bakonawa, Bangungot, Buwaya, Cornutus, Echio, Entweihen Crothen | |
| setarray .@cards[0],4591,4590,4592,4061,4410,4451; | |
| break; | |
| case 32: // Shield | |
| // Ambernite, High Orc, Horn, Khalitzburg Knight, Ogretooth, Thara Frog | |
| setarray .@cards[0],4032,4322,4045,4609,4254,4058; | |
| break; | |
| case 4: // Garment | |
| // Choco, Giant Whisper, Kasa, Noxious, Orc Baby, Punk | |
| setarray .@cards[0],4285,4303,4431,4334,4375,4313; | |
| break; | |
| case 64: // Shoes | |
| // Amon Ra, Cat O' Nine Tails, Firelock Soldier, Freezer, Ice Titan, Verit | |
| setarray .@cards[0],4236,4290,4160,4319,4417,4107; | |
| break; | |
| case 8: // Accessory Right | |
| case 128: // Accessory Left | |
| // Alligator, Gazeti, GC109, Greatest General, Ifrit, Mantis | |
| setarray .@cards[0],4252,4418,27018,4283,4430,4079; | |
| break; | |
| } | |
| // Define the Max Card Slots to use via | |
| if(.equip[.@e+7]) // Random | |
| set .@cs,rand(0,getitemslots(.equip[.@e])); | |
| else // max slots the equipment has available | |
| set .@cs,getitemslots(.equip[.@e]); | |
| } | |
| // Enchants enabled? | |
| if(.equip[.@e+8]) { // Enchants enabled? | |
| if(.equip[.@e+11]) // If random amount of Enchantments is enabled | |
| set .@er,rand(.equip[.@e+9],.equip[.@e+10]); | |
| else if(!.equip[.@e+11]) // If not, set max amount | |
| set .@er,.equip[.@e+10]; | |
| } | |
| if(.equip[.@e+12]) { // If Random Options is enabled | |
| // Randomize the amount of Random Options | |
| set .@or,rand(.equip[.@e+13],.equip[.@e+14]); | |
| if(.@or) { | |
| // Random Options - Format: | |
| // = Put in the ID's for the respective Random Option Slot, they will be randomly selected | |
| // > .@rand = ID | |
| // > .@rval = Value | |
| // > .@rpar = Param | |
| // 1st Random Option Slot - Status | |
| setarray .@rand1[0],RDMOPT_VAR_MAXHPAMOUNT,RDMOPT_VAR_MAXSPAMOUNT,RDMOPT_VAR_STRAMOUNT,RDMOPT_VAR_AGIAMOUNT,RDMOPT_VAR_VITAMOUNT,RDMOPT_VAR_INTAMOUNT,RDMOPT_VAR_DEXAMOUNT,RDMOPT_VAR_LUKAMOUNT,RDMOPT_VAR_MAXHPPERCENT,RDMOPT_VAR_MAXSPPERCENT,RDMOPT_VAR_HPACCELERATION,RDMOPT_VAR_SPACCELERATION,RDMOPT_VAR_ITEMDEFPOWER,RDMOPT_VAR_MDEFPOWER,RDMOPT_VAR_AVOIDSUCCESSVALUE,RDMOPT_VAR_PLUSAVOIDSUCCESSVALUE; | |
| setarray .@rmin1[0],10,10,1,1,1,1,1,1,1,1,1,1,1,1,1,1; | |
| setarray .@rmax1[0],100,100,10,10,10,10,10,10,10,10,10,10,10,10,10,10; | |
| setarray .@rpar1[0],0; | |
| // 2nd Random Option Slot - Race/Class/Size Damage Reductions - Human/Medium | |
| setarray .@rand2[0],RDMOPT_RACE_TOLERACE_HUMAN,RDMOPT_CLASS_DAMAGE_NORMAL_USER,RDMOPT_DAMAGE_SIZE_MIDIUM_USER; | |
| setarray .@rmin2[0],1,1,1; | |
| setarray .@rmax2[0],10,10,10; | |
| setarray .@rpar2[0],0; | |
| // 3rd Random Option Slot - Heal/Cast/Crit Reduction | |
| setarray .@rand3[0],RDMOPT_DAMAGE_CRI_USER,RDMOPT_RANGE_ATTACK_DAMAGE_USER,RDMOPT_HEAL_VALUE,RDMOPT_HEAL_MODIFY_PERCENT,RDMOPT_DEC_SPELL_CAST_TIME,RDMOPT_DEC_SPELL_DELAY_TIME,RDMOPT_DEC_SP_CONSUMPTION; | |
| setarray .@rmin3[0],1,1,1,1,1,1,1; | |
| setarray .@rmax3[0],5,5,5,5,5,5,5; | |
| setarray .@rpar3[0],0; | |
| } | |
| } | |
| } | |
| // Check if Cards are enabled | |
| if(.@cs) | |
| for ( set .@s,1; .@s <= .@cs; set .@s,.@s + 1) | |
| setd(".@c"+.@s),.@cards[rand(getarraysize(.@cards))]; | |
| // ========= Enchantments ========= | |
| if(.@er) { // Check if Amount is not 0 | |
| // ===== Enchantment Data ===== | |
| // * Enchant Slot 1 (Card Slot 4) - Status Enchants (STR/AGI/VIT/INT/DEX/LUK - 1~10) | |
| // > STR: 4700,4701,4702,4703,4704,4705,4706,4707,4708,4709 | |
| setarray .@enchant3[0], 4700,4701,4702,4703,4704,4705,4706,4707,4708,4709, | |
| // > AGI: 4730,4731,4732,4733,4734,4735,4736,4737,4738,4739 | |
| 4710,4711,4712,4713,4714,4715,4716,4717,4718,4719, | |
| // > VIT: 4740,4741,4742,4743,4744,4745,4746,4747,4748,4749 | |
| 4720,4721,4722,4723,4724,4725,4726,4727,4728,4729, | |
| // > INT: 4710,4711,4712,4713,4714,4715,4716,4717,4718,4719 | |
| 4730,4731,4732,4733,4734,4735,4736,4737,4738,4739, | |
| // > DEX: 4720,4721,4722,4723,4724,4725,4726,4727,4728,4729 | |
| 4740,4741,4742,4743,4744,4745,4746,4747,4748,4749, | |
| // > LUK: 4750,4751,4752,4753,4754,4755,4756,4757,4758,4759 | |
| 4750,4751,4752,4753,4754,4755,4756,4757,4758,4759; | |
| // * Enchant Slot 2 (Card Slot 3) - ATK/MATK/FLEE/CRIT/DEF/MDEF/HP/SP/ASPD Enchants | |
| // > ATK: 4882,4766,4767,4894,4895,4904,4905 | |
| setarray .@enchant2[0], 4882,4766,4767,4894,4895,4904,4905, | |
| // > MATK: 4883,4896,4897,4898,4899,4906,4907,4760,4761,4806 | |
| 4883,4896,4897,4898,4899,4906,4907,4760,4761,4806, | |
| // > FLEE: 4859,4860,4762,4763,4942,4943,4944 | |
| 4859,4860,4762,4763,4942,4943,4944, | |
| // > CRIT: 4926,4939,4940,4941,4764,4765, | |
| 4926,4939,4940,4941,4764,4765, | |
| // > DEF: 4791,4792,4793,4794,4893,4902,4903 | |
| 4791,4792,4793,4794,4893,4902,4903, | |
| // > MDEF: 4890,4786,4891,4787,4892,4788,4789,4790 | |
| 4890,4786,4891,4787,4892,4788,4789,4790, | |
| // > HP: 4927,4795,4796,4797,4798,4799,4861,4862,4867,4868,4900 | |
| 4927,4795,4796,4797,4798,4799,4861,4862,4867,4868,4900, | |
| // > SP: 4870,4800,4871,4801,4802,4929 | |
| 4870,4800,4871,4801,4802,4929, | |
| // > ASPD: 4807,4842 | |
| 4807,4842, | |
| // > Regeneration: 4930,4931,4932 | |
| 4930,4931,4932, | |
| // > SP Consume: 4945,4946,4947 | |
| 4945,4946,4947; | |
| // * Enchant Slot 3 (Card Slot 2) - Special Enchants | |
| // > Heal Amount: 4850,4851,4852 | |
| setarray .@enchant1[0], 4850,4851,4852, | |
| // > Fighting Spirit: 4811,4810,4809,4808,4820,4821,4822,4823,4824,4825 | |
| 4811,4810,4809,4808,4820,4821,4822,4823,4824,4825, | |
| // > Spell: 4815,4814,4813,4812,4826,4827,4828,4829,4830,4831 | |
| 4815,4814,4813,4812,4826,4827,4828,4829,4830,4831, | |
| // > Sharp: 4818,4817,4816,4843,4844 | |
| 4818,4817,4816,4843,4844, | |
| // > Expert Archer: 4832,4833,4834,4835,4836,4837,4838,4839,4840,4841 | |
| 4832,4833,4834,4835,4836,4837,4838,4839,4840,4841, | |
| // > Neutral Resistance/Immune: 4933,4934,4935,4848 | |
| 4933,4934,4935,4848, | |
| // > Cranial: 4849 | |
| 4849, | |
| // > Special <STAT>: 4853,4854,4855,4856,4857,4858 | |
| 4853,4854,4855,4856,4857,4858, | |
| // > Fatal: 4863,4864,4865,4866 | |
| 4863,4864,4865,4866, | |
| // > Attack Delay: 4869,4872,4873,4881 | |
| 4869,4872,4873,4881, | |
| // > After Skill Delay: 4948,4949,4950 | |
| 4948,4949,4950, | |
| // > Conjure (Spell): 4885,4886,4887,4888,4889 | |
| 4885,4886,4887,4888,4889, | |
| // > Highness Heal, Coluceo Heal, Archbishop, Bear's Power, Runaway Magic, Speed of Light, Muscle Fool, Hawkeye, Lucky Day | |
| // > 4803,4804,4805,4875,4876,4877,4878,4879,4880 | |
| 4803,4804,4805,4875,4876,4877,4878,4879,4880, | |
| // > ATK Small + Medium Size: 4938,4937 | |
| 4938,4937, | |
| // > Darklord Essence Force: 4908,4909,4910 | |
| 4908,4909,4910, | |
| // > Darklord Essence Intelligence: 4911,4912,4913 | |
| 4911,4912,4913, | |
| // > Darklord Essence Speed: 4914,4915,4916 | |
| 4914,4915,4916, | |
| // > Darklord Essence Vitality: 4917,4918,4919 | |
| 4917,4918,4919, | |
| // > Darklord Essence Concentration: 4920,4921,4922 | |
| 4920,4921,4922, | |
| // > Darklord Essence Luck: 4923,4924,4925 | |
| 4923,4924,4925; | |
| // If you encounter problems or you are unsure if you put every value correctly, use this to check the array sizes: | |
| // Either comment the /* and */ or delete them until you don't need it anymore | |
| /* | |
| debugmes ".@enchant3 - "+getarraysize(.@enchant3); | |
| debugmes ".@enchant2 - "+getarraysize(.@enchant2); | |
| debugmes ".@enchant1 - "+getarraysize(.@enchant1); | |
| */ | |
| set .@s,4; // Define first Card Slot for first Enchant | |
| for ( set .@es,1; .@es <= .@er; set .@es,.@es + 1) { | |
| if(!getd(".@c"+.@s)) // If Card Slot .@s is not used | |
| setd(".@c"+.@s),getd(".@enchant"+(.@s-1)+"["+rand(getarraysize(getd(".@enchant"+(.@s-1))))+"]"); | |
| set .@s,.@s - 1; | |
| } | |
| } | |
| // ========= Random Options ========= | |
| if(.@or) { // If Random Options is enabled | |
| // If you encounter problems or you are unsure if you put every value correctly, use this to check the array sizes: | |
| // Either comment the /* and */ or delete them until you don't need it anymore | |
| /* | |
| debugmes "rand1 - "+getarraysize(.@rand1)+", "+getarraysize(.@rmin1)+", "+getarraysize(.@rmax1)+", "+getarraysize(.@rpar1); | |
| debugmes "rand2 - "+getarraysize(.@rand2)+", "+getarraysize(.@rmin2)+", "+getarraysize(.@rmax2)+", "+getarraysize(.@rpar2); | |
| debugmes "rand3 - "+getarraysize(.@rand3)+", "+getarraysize(.@rmin3)+", "+getarraysize(.@rmax3)+", "+getarraysize(.@rpar3); | |
| debugmes "rand4 - "+getarraysize(.@rand4)+", "+getarraysize(.@rmin4)+", "+getarraysize(.@rmax4)+", "+getarraysize(.@rpar4); | |
| */ | |
| for ( set .@o,1; .@o <= .@or; set .@o,.@o + 1) { | |
| set .@r,rand(getarraysize(getd(".@rand"+.@o))); | |
| setarray .@OptID[getarraysize(.@OptID)],getd(".@rand"+.@o+"["+.@r+"]"); | |
| setarray .@OptVal[getarraysize(.@OptVal)],rand(getd(".@rmin"+.@o+"["+.@r+"]"),getd(".@rmax"+.@o+"["+.@r+"]")); | |
| setarray .@OptParam[getarraysize(.@OptParam)],getd(".@rpar"+.@o+"["+.@r+"]"); | |
| } | |
| makeitem3 .@id,.@am,.@map$,rand((.@x-.@m),(.@x+.@m)),rand((.@y-.@m),(.@y+.@m)),1,.@ref,0,.@c1,.@c2,.@c3,.@c4,.@OptID,.@OptVal,.@OptParam; | |
| } else if(!.@or) | |
| makeitem2 .@id,.@am,.@map$,rand((.@x-.@m),(.@x+.@m)),rand((.@y-.@m),(.@y+.@m)),1,.@ref,0,.@c1,.@c2,.@c3,.@c4; | |
| // Give respective Ammo for Bow/Guns | |
| switch(getiteminfo(.@id,11)) { | |
| default: break; | |
| case 11: // Bows | |
| makeitem 12007,1,.@map$,rand((.@x-.@m),(.@x+.@m)),rand((.@y-.@m),(.@y+.@m)); // 1x Oridecon Arrow Quiver | |
| break; | |
| case 17: // Revolvers | |
| case 18: // Rifles | |
| case 19: // Gatling Guns | |
| case 20: // Shotguns | |
| makeitem 13200,1,.@map$,rand((.@x-.@m),(.@x+.@m)),rand((.@y-.@m),(.@y+.@m)); // 1x Cartridge = 500 Bullets | |
| break; | |
| case 21: // Grenade Launchers | |
| makeitem 12148,1,.@map$,rand((.@x-.@m),(.@x+.@m)),rand((.@y-.@m),(.@y+.@m)); // 1x Flare Sphere Pack | |
| break; | |
| } | |
| // Clear Variables and Arrays | |
| set .@id,0; | |
| set .@am,0; | |
| set .@ref,0; | |
| set .@cs,0; | |
| set .@er,0; | |
| set .@or,0; | |
| set .@c1,0; | |
| set .@c2,0; | |
| set .@c3,0; | |
| set .@c4,0; | |
| deletearray .@cards[0],getarraysize(.@cards); | |
| deletearray .@rand1,getarraysize(.@rand1); | |
| deletearray .@rmin1,getarraysize(.@rmin1); | |
| deletearray .@rmax1,getarraysize(.@rmax1); | |
| deletearray .@rpar1,getarraysize(.@rpar1); | |
| deletearray .@rand2,getarraysize(.@rand2); | |
| deletearray .@rmin2,getarraysize(.@rmin2); | |
| deletearray .@rmax2,getarraysize(.@rmax2); | |
| deletearray .@rpar2,getarraysize(.@rpar2); | |
| deletearray .@rand3,getarraysize(.@rand3); | |
| deletearray .@rmin3,getarraysize(.@rmin3); | |
| deletearray .@rmax3,getarraysize(.@rmax3); | |
| deletearray .@rpar3,getarraysize(.@rpar3); | |
| deletearray .@OptID[0],getarraysize(.@OptID); | |
| deletearray .@OptVal[0],getarraysize(.@OptVal); | |
| deletearray .@OptParam[0],getarraysize(.@OptParam); | |
| set .@c,.@c + 1; | |
| } | |
| if(strnpcinfo(2) != "BR_TestBox") // Preventing the disabling of the Test Box | |
| disablenpc strnpcinfo(0); | |
| freeloop(0); | |
| end; | |
| OnInit: | |
| // ==== Loot Boxes Distribution ==== | |
| // * Randomize the Max Amount of Items based on .heal_limit/.equip_limit | |
| // > 0 = No, use every item available | |
| // > 1 = Yes, limit the amount of the dropped items | |
| set .randlimit,1; | |
| // ======= Loot Boxes Content ======= | |
| // ========= Healing + Buff ========= | |
| // > [0] = ID | |
| // > [1] = Amount | |
| // > [2] = Percent | |
| // =================================== | |
| // Note: 1 Heal/Buff Item = 3 Values! So Index*3 | |
| // Array [ ]: 0, 1, 2 | |
| setarray .heal[0], 547,10,50, // Condensed White Potion | |
| 533,10,50, // Grape Juice | |
| 546,10,50; // Condensed Yellow Potion | |
| // Define the max healing/buff items available | |
| set .heal_size,getarraysize(.heal)/3; | |
| // Max Heal Items per Loot Box (Default: 2) | |
| set .heal_limit,2; | |
| // ============ Equipment ============ | |
| // .weap_<Base Class ID>: | |
| // > Novice = 0, Swordman = 1, Magician = 2, Archer = 3, Acolyte = 4, Merchant = 5, Thief = 6, Gunslinger = 24, Ninja = 25 | |
| // = You are free to edit these as you like! But respect the order and values! | |
| // > [0] = ID | |
| // > [1] = Amount | |
| // > [2] = Percent | |
| // > [3] = Refine > 1= Yes/0= No (Refine Amount is Random) | |
| // > [4] = Min Refine | |
| // > [5] = Max Refine | |
| // > [6] = Cards > 1= Yes/0= No (Card Amount is Random) | |
| // > [7] = Card Slots | |
| // > [8] = Enchantments > 1= Yes/0= No | |
| // > [9] = Min Enchantments | |
| // > [10] = Max Enchantments | |
| // > [11] = Random Enchantments > 1= Yes/0= No | |
| // > [12] = Random Options > 1= Yes/0= No (Random...) | |
| // > [13] = Min Random Options | |
| // > [14] = Max Random Options | |
| // =================================== | |
| // Note: 1 Equip = 15 Values! So Index*15 | |
| // Array [ ]: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 | |
| // > Novice | |
| setarray .weap_0[0], 1108,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Blade | |
| 1105,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Falchion | |
| 1505,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Mace | |
| 1246,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Cinquedea | |
| 1605,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Wand | |
| 1622,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Hypnotist's Staff | |
| 13019,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Ginnungagap | |
| 1217,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Stiletto | |
| 13036,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Brave Damascus | |
| 13411,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Brave Gladiator Blade | |
| 1543,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3; // Brave Morning Star | |
| // > Swordman | |
| setarray .weap_1[0], 1127,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Saber | |
| 1152,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Slayer | |
| 1158,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Two-Handed Sword | |
| 1171,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Zweihander | |
| 21003,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Muramasa | |
| 1421,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Battle Hook | |
| 1462,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Trident | |
| 1463,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Halbert | |
| 1410,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Lance | |
| 1485,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3; // Battle Fork | |
| // > Magician | |
| setarray .weap_2[0], 1222,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Damascus | |
| 1228,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Combat Knife | |
| 1220,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Gladius | |
| 1611,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Arc Wand | |
| 1613,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Mighty Staff | |
| 1645,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Lich's Bone Wand | |
| 2000,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Staff of Destruction | |
| 1574,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Brave Strategy Book | |
| 1558,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Girl's Diary | |
| 1560,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3; // Sage's Diary | |
| // > Archer | |
| setarray .weap_3[0], 1222,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Damascus | |
| 1228,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Combat Knife | |
| 1708,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Great Bow | |
| 1716,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Gakkung Bow | |
| 1723,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Luna Bow | |
| 1908,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Guitar | |
| 1924,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Brave Guitar | |
| 1920,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Berserk Guitar | |
| 1969,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Blade Whip | |
| 1971,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Eletric Wire | |
| 1978,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3; // Brave Lariat | |
| // > Acolyte | |
| setarray .weap_4[0], 1532,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Stunner | |
| 1517,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Sword Mace | |
| 1520,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Chain | |
| 1611,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Arc Wand | |
| 1634,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Brave Recovery Wand | |
| 1574,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Brave Strategy Book | |
| 1558,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Girl's Diary | |
| 1560,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Sage's Diary | |
| 1810,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Claw | |
| 1813,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Kaiser Knuckle | |
| 1822,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3; // Combo Battle Glove | |
| // > Merchant | |
| setarray .weap_5[0], 1108,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Blade | |
| 1105,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Falchion | |
| 1222,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Damascus | |
| 1228,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Combat Knife | |
| 13036,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Brave Damascus | |
| 1517,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Sword Mace | |
| 1520,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Chain | |
| 1302,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Axe | |
| 1307,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Windhawk | |
| 1309,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Orcish Axe | |
| 1352,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Battle Axe | |
| 1380,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Brave Battle Axe | |
| 1371,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3; // Doom Slayer | |
| // > Thief | |
| setarray .weap_6[0], 1222,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Damascus | |
| 1228,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Combat Knife | |
| 1708,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Great Bow | |
| 1716,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Gakkung Bow | |
| 1255,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Jamadhar | |
| 1288,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Bloody Fear | |
| 1266,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3; // Infiltrator | |
| // > Gunslinger | |
| setarray .weap_24[0], 13101,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Six Shooter | |
| 13105,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Garrison | |
| 13152,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Cyclone | |
| 13170,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Lever Action Rifle | |
| 13157,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Drifter | |
| 13159,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Butcher | |
| 13155,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Black Rose | |
| 13156,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Gate Keeper | |
| 13161,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Destroyer | |
| 13162,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3; // Inferno | |
| // > Ninja | |
| setarray .weap_25[0], 13011,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Asura | |
| 1228,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Combat Knife | |
| 13036,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Brave Damascus | |
| 13302,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Huuma Giant Wheel Shuriken | |
| 13305,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Brave Huuma Front Shuriken | |
| 13311,1,10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3; // Huuma Shadow | |
| // > Star Gladiator | |
| setarray .weap_4047[0], 1574,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Brave Strategy Book | |
| 1558,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Girl's Diary | |
| 1560,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3; // Sage's Diary | |
| // > Soul Linker | |
| setarray .weap_4049[0], 1222,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Damascus | |
| 1228,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Combat Knife | |
| 1611,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Arc Wand | |
| 1615,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3; // Evil Bone Wand | |
| // Equipment | |
| setarray .equip[0], 2147,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Round Buckler | |
| 2110,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Holy Guard | |
| 2105,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Shield | |
| 2185,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Magic Reflector | |
| 2320,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Formal Suit | |
| 2353,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Odin's Blessing | |
| 2311,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Mink Coat | |
| 2376,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Assaulter Plate | |
| 2375,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Diabolus Armor | |
| 2314,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Chain Mail | |
| 2332,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Silver Robe | |
| 2374,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Diabolus Robe | |
| 2366,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Divine Cloth | |
| 2378,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Assassin Robe | |
| 2381,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Elite Archer Suit | |
| 2538,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Captain's Manteau | |
| 2517,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Vali's Manteau | |
| 2436,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Combat Boots | |
| 2433,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Diabolus Boots | |
| 2432,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // High Heels | |
| 2418,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // Vidar's Boots | |
| 2422,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3, // High Fashion Sandals | |
| 2435,1, 10, 1, 0, 10, 1, 1, 1, 0, 3, 1, 1, 0, 3; // Battle Greaves | |
| // Max Equipments per Loot Box (Default: 3) | |
| set .equip_limit,3; | |
| // =================================== | |
| if(strnpcinfo(0) != "BR_LootBox" && strnpcinfo(0) != "Chest#BR_TestBox") | |
| disablenpc strnpcinfo(0); | |
| end; | |
| } | |
| // Loot Box Duplicates | |
| // Note: You can duplicate as much as you want, but edit the Chest#BR<Arena>_<LootBoxID> to match the number, | |
| // like Chest#BR1_11 for 11 Boxes in Arena 1 | |
| //prontera,156,177,0 duplicate(BR_LootBox) Chest#BR_TestBox 4_STEELBOX // Testing Purposes | |
| br_alberta,0,0,0 duplicate(BR_LootBox) Chest#BR1_1 4_STEELBOX | |
| br_alberta,0,0,0 duplicate(BR_LootBox) Chest#BR1_2 4_STEELBOX | |
| br_alberta,0,0,0 duplicate(BR_LootBox) Chest#BR1_3 4_STEELBOX | |
| br_alberta,0,0,0 duplicate(BR_LootBox) Chest#BR1_4 4_STEELBOX | |
| br_alberta,0,0,0 duplicate(BR_LootBox) Chest#BR1_5 4_STEELBOX | |
| br_alberta,0,0,0 duplicate(BR_LootBox) Chest#BR1_6 4_STEELBOX | |
| br_alberta,0,0,0 duplicate(BR_LootBox) Chest#BR1_7 4_STEELBOX | |
| br_alberta,0,0,0 duplicate(BR_LootBox) Chest#BR1_8 4_STEELBOX | |
| br_alberta,0,0,0 duplicate(BR_LootBox) Chest#BR1_9 4_STEELBOX | |
| br_alberta,0,0,0 duplicate(BR_LootBox) Chest#BR1_10 4_STEELBOX | |
| br_aldeb,0,0,0 duplicate(BR_LootBox) Chest#BR2_1 4_STEELBOX | |
| br_aldeb,0,0,0 duplicate(BR_LootBox) Chest#BR2_2 4_STEELBOX | |
| br_aldeb,0,0,0 duplicate(BR_LootBox) Chest#BR2_3 4_STEELBOX | |
| br_aldeb,0,0,0 duplicate(BR_LootBox) Chest#BR2_4 4_STEELBOX | |
| br_aldeb,0,0,0 duplicate(BR_LootBox) Chest#BR2_5 4_STEELBOX | |
| br_aldeb,0,0,0 duplicate(BR_LootBox) Chest#BR2_6 4_STEELBOX | |
| br_aldeb,0,0,0 duplicate(BR_LootBox) Chest#BR2_7 4_STEELBOX | |
| br_aldeb,0,0,0 duplicate(BR_LootBox) Chest#BR2_8 4_STEELBOX | |
| br_aldeb,0,0,0 duplicate(BR_LootBox) Chest#BR2_9 4_STEELBOX | |
| br_aldeb,0,0,0 duplicate(BR_LootBox) Chest#BR2_10 4_STEELBOX | |
| br_dewata,0,0,0 duplicate(BR_LootBox) Chest#BR3_1 4_STEELBOX | |
| br_dewata,0,0,0 duplicate(BR_LootBox) Chest#BR3_2 4_STEELBOX | |
| br_dewata,0,0,0 duplicate(BR_LootBox) Chest#BR3_3 4_STEELBOX | |
| br_dewata,0,0,0 duplicate(BR_LootBox) Chest#BR3_4 4_STEELBOX | |
| br_dewata,0,0,0 duplicate(BR_LootBox) Chest#BR3_5 4_STEELBOX | |
| br_dewata,0,0,0 duplicate(BR_LootBox) Chest#BR3_6 4_STEELBOX | |
| br_dewata,0,0,0 duplicate(BR_LootBox) Chest#BR3_7 4_STEELBOX | |
| br_dewata,0,0,0 duplicate(BR_LootBox) Chest#BR3_8 4_STEELBOX | |
| br_dewata,0,0,0 duplicate(BR_LootBox) Chest#BR3_9 4_STEELBOX | |
| br_dewata,0,0,0 duplicate(BR_LootBox) Chest#BR3_10 4_STEELBOX | |
| br_einbech,0,0,0 duplicate(BR_LootBox) Chest#BR4_1 4_STEELBOX | |
| br_einbech,0,0,0 duplicate(BR_LootBox) Chest#BR4_2 4_STEELBOX | |
| br_einbech,0,0,0 duplicate(BR_LootBox) Chest#BR4_3 4_STEELBOX | |
| br_einbech,0,0,0 duplicate(BR_LootBox) Chest#BR4_4 4_STEELBOX | |
| br_einbech,0,0,0 duplicate(BR_LootBox) Chest#BR4_5 4_STEELBOX | |
| br_einbech,0,0,0 duplicate(BR_LootBox) Chest#BR4_6 4_STEELBOX | |
| br_einbech,0,0,0 duplicate(BR_LootBox) Chest#BR4_7 4_STEELBOX | |
| br_einbech,0,0,0 duplicate(BR_LootBox) Chest#BR4_8 4_STEELBOX | |
| br_einbech,0,0,0 duplicate(BR_LootBox) Chest#BR4_9 4_STEELBOX | |
| br_einbech,0,0,0 duplicate(BR_LootBox) Chest#BR4_10 4_STEELBOX | |
| br_einbroch,0,0,0 duplicate(BR_LootBox) Chest#BR5_1 4_STEELBOX | |
| br_einbroch,0,0,0 duplicate(BR_LootBox) Chest#BR5_2 4_STEELBOX | |
| br_einbroch,0,0,0 duplicate(BR_LootBox) Chest#BR5_3 4_STEELBOX | |
| br_einbroch,0,0,0 duplicate(BR_LootBox) Chest#BR5_4 4_STEELBOX | |
| br_einbroch,0,0,0 duplicate(BR_LootBox) Chest#BR5_5 4_STEELBOX | |
| br_einbroch,0,0,0 duplicate(BR_LootBox) Chest#BR5_6 4_STEELBOX | |
| br_einbroch,0,0,0 duplicate(BR_LootBox) Chest#BR5_7 4_STEELBOX | |
| br_einbroch,0,0,0 duplicate(BR_LootBox) Chest#BR5_8 4_STEELBOX | |
| br_einbroch,0,0,0 duplicate(BR_LootBox) Chest#BR5_9 4_STEELBOX | |
| br_einbroch,0,0,0 duplicate(BR_LootBox) Chest#BR5_10 4_STEELBOX | |
| br_geffen,0,0,0 duplicate(BR_LootBox) Chest#BR6_1 4_STEELBOX | |
| br_geffen,0,0,0 duplicate(BR_LootBox) Chest#BR6_2 4_STEELBOX | |
| br_geffen,0,0,0 duplicate(BR_LootBox) Chest#BR6_3 4_STEELBOX | |
| br_geffen,0,0,0 duplicate(BR_LootBox) Chest#BR6_4 4_STEELBOX | |
| br_geffen,0,0,0 duplicate(BR_LootBox) Chest#BR6_5 4_STEELBOX | |
| br_geffen,0,0,0 duplicate(BR_LootBox) Chest#BR6_6 4_STEELBOX | |
| br_geffen,0,0,0 duplicate(BR_LootBox) Chest#BR6_7 4_STEELBOX | |
| br_geffen,0,0,0 duplicate(BR_LootBox) Chest#BR6_8 4_STEELBOX | |
| br_geffen,0,0,0 duplicate(BR_LootBox) Chest#BR6_9 4_STEELBOX | |
| br_geffen,0,0,0 duplicate(BR_LootBox) Chest#BR6_10 4_STEELBOX | |
| br_gonryun,0,0,0 duplicate(BR_LootBox) Chest#BR7_1 4_STEELBOX | |
| br_gonryun,0,0,0 duplicate(BR_LootBox) Chest#BR7_2 4_STEELBOX | |
| br_gonryun,0,0,0 duplicate(BR_LootBox) Chest#BR7_3 4_STEELBOX | |
| br_gonryun,0,0,0 duplicate(BR_LootBox) Chest#BR7_4 4_STEELBOX | |
| br_gonryun,0,0,0 duplicate(BR_LootBox) Chest#BR7_5 4_STEELBOX | |
| br_gonryun,0,0,0 duplicate(BR_LootBox) Chest#BR7_6 4_STEELBOX | |
| br_gonryun,0,0,0 duplicate(BR_LootBox) Chest#BR7_7 4_STEELBOX | |
| br_gonryun,0,0,0 duplicate(BR_LootBox) Chest#BR7_8 4_STEELBOX | |
| br_gonryun,0,0,0 duplicate(BR_LootBox) Chest#BR7_9 4_STEELBOX | |
| br_gonryun,0,0,0 duplicate(BR_LootBox) Chest#BR7_10 4_STEELBOX | |
| br_hugel,0,0,0 duplicate(BR_LootBox) Chest#BR8_1 4_STEELBOX | |
| br_hugel,0,0,0 duplicate(BR_LootBox) Chest#BR8_2 4_STEELBOX | |
| br_hugel,0,0,0 duplicate(BR_LootBox) Chest#BR8_3 4_STEELBOX | |
| br_hugel,0,0,0 duplicate(BR_LootBox) Chest#BR8_4 4_STEELBOX | |
| br_hugel,0,0,0 duplicate(BR_LootBox) Chest#BR8_5 4_STEELBOX | |
| br_hugel,0,0,0 duplicate(BR_LootBox) Chest#BR8_6 4_STEELBOX | |
| br_hugel,0,0,0 duplicate(BR_LootBox) Chest#BR8_7 4_STEELBOX | |
| br_hugel,0,0,0 duplicate(BR_LootBox) Chest#BR8_8 4_STEELBOX | |
| br_hugel,0,0,0 duplicate(BR_LootBox) Chest#BR8_9 4_STEELBOX | |
| br_hugel,0,0,0 duplicate(BR_LootBox) Chest#BR8_10 4_STEELBOX | |
| br_izlude,0,0,0 duplicate(BR_LootBox) Chest#BR9_1 4_STEELBOX | |
| br_izlude,0,0,0 duplicate(BR_LootBox) Chest#BR9_2 4_STEELBOX | |
| br_izlude,0,0,0 duplicate(BR_LootBox) Chest#BR9_3 4_STEELBOX | |
| br_izlude,0,0,0 duplicate(BR_LootBox) Chest#BR9_4 4_STEELBOX | |
| br_izlude,0,0,0 duplicate(BR_LootBox) Chest#BR9_5 4_STEELBOX | |
| br_izlude,0,0,0 duplicate(BR_LootBox) Chest#BR9_6 4_STEELBOX | |
| br_izlude,0,0,0 duplicate(BR_LootBox) Chest#BR9_7 4_STEELBOX | |
| br_izlude,0,0,0 duplicate(BR_LootBox) Chest#BR9_8 4_STEELBOX | |
| br_izlude,0,0,0 duplicate(BR_LootBox) Chest#BR9_9 4_STEELBOX | |
| br_izlude,0,0,0 duplicate(BR_LootBox) Chest#BR9_10 4_STEELBOX | |
| br_lasagna,0,0,0 duplicate(BR_LootBox) Chest#BR10_1 4_STEELBOX | |
| br_lasagna,0,0,0 duplicate(BR_LootBox) Chest#BR10_2 4_STEELBOX | |
| br_lasagna,0,0,0 duplicate(BR_LootBox) Chest#BR10_3 4_STEELBOX | |
| br_lasagna,0,0,0 duplicate(BR_LootBox) Chest#BR10_4 4_STEELBOX | |
| br_lasagna,0,0,0 duplicate(BR_LootBox) Chest#BR10_5 4_STEELBOX | |
| br_lasagna,0,0,0 duplicate(BR_LootBox) Chest#BR10_6 4_STEELBOX | |
| br_lasagna,0,0,0 duplicate(BR_LootBox) Chest#BR10_7 4_STEELBOX | |
| br_lasagna,0,0,0 duplicate(BR_LootBox) Chest#BR10_8 4_STEELBOX | |
| br_lasagna,0,0,0 duplicate(BR_LootBox) Chest#BR10_9 4_STEELBOX | |
| br_lasagna,0,0,0 duplicate(BR_LootBox) Chest#BR10_10 4_STEELBOX | |
| br_malaya,0,0,0 duplicate(BR_LootBox) Chest#BR11_1 4_STEELBOX | |
| br_malaya,0,0,0 duplicate(BR_LootBox) Chest#BR11_2 4_STEELBOX | |
| br_malaya,0,0,0 duplicate(BR_LootBox) Chest#BR11_3 4_STEELBOX | |
| br_malaya,0,0,0 duplicate(BR_LootBox) Chest#BR11_4 4_STEELBOX | |
| br_malaya,0,0,0 duplicate(BR_LootBox) Chest#BR11_5 4_STEELBOX | |
| br_malaya,0,0,0 duplicate(BR_LootBox) Chest#BR11_6 4_STEELBOX | |
| br_malaya,0,0,0 duplicate(BR_LootBox) Chest#BR11_7 4_STEELBOX | |
| br_malaya,0,0,0 duplicate(BR_LootBox) Chest#BR11_8 4_STEELBOX | |
| br_malaya,0,0,0 duplicate(BR_LootBox) Chest#BR11_9 4_STEELBOX | |
| br_malaya,0,0,0 duplicate(BR_LootBox) Chest#BR11_10 4_STEELBOX | |
| br_morocc,0,0,0 duplicate(BR_LootBox) Chest#BR12_1 4_STEELBOX | |
| br_morocc,0,0,0 duplicate(BR_LootBox) Chest#BR12_2 4_STEELBOX | |
| br_morocc,0,0,0 duplicate(BR_LootBox) Chest#BR12_3 4_STEELBOX | |
| br_morocc,0,0,0 duplicate(BR_LootBox) Chest#BR12_4 4_STEELBOX | |
| br_morocc,0,0,0 duplicate(BR_LootBox) Chest#BR12_5 4_STEELBOX | |
| br_morocc,0,0,0 duplicate(BR_LootBox) Chest#BR12_6 4_STEELBOX | |
| br_morocc,0,0,0 duplicate(BR_LootBox) Chest#BR12_7 4_STEELBOX | |
| br_morocc,0,0,0 duplicate(BR_LootBox) Chest#BR12_8 4_STEELBOX | |
| br_morocc,0,0,0 duplicate(BR_LootBox) Chest#BR12_9 4_STEELBOX | |
| br_morocc,0,0,0 duplicate(BR_LootBox) Chest#BR12_10 4_STEELBOX | |
| br_moscovia,0,0,0 duplicate(BR_LootBox) Chest#BR13_1 4_STEELBOX | |
| br_moscovia,0,0,0 duplicate(BR_LootBox) Chest#BR13_2 4_STEELBOX | |
| br_moscovia,0,0,0 duplicate(BR_LootBox) Chest#BR13_3 4_STEELBOX | |
| br_moscovia,0,0,0 duplicate(BR_LootBox) Chest#BR13_4 4_STEELBOX | |
| br_moscovia,0,0,0 duplicate(BR_LootBox) Chest#BR13_5 4_STEELBOX | |
| br_moscovia,0,0,0 duplicate(BR_LootBox) Chest#BR13_6 4_STEELBOX | |
| br_moscovia,0,0,0 duplicate(BR_LootBox) Chest#BR13_7 4_STEELBOX | |
| br_moscovia,0,0,0 duplicate(BR_LootBox) Chest#BR13_8 4_STEELBOX | |
| br_moscovia,0,0,0 duplicate(BR_LootBox) Chest#BR13_9 4_STEELBOX | |
| br_moscovia,0,0,0 duplicate(BR_LootBox) Chest#BR13_10 4_STEELBOX | |
| br_niflheim,0,0,0 duplicate(BR_LootBox) Chest#BR14_1 4_STEELBOX | |
| br_niflheim,0,0,0 duplicate(BR_LootBox) Chest#BR14_2 4_STEELBOX | |
| br_niflheim,0,0,0 duplicate(BR_LootBox) Chest#BR14_3 4_STEELBOX | |
| br_niflheim,0,0,0 duplicate(BR_LootBox) Chest#BR14_4 4_STEELBOX | |
| br_niflheim,0,0,0 duplicate(BR_LootBox) Chest#BR14_5 4_STEELBOX | |
| br_niflheim,0,0,0 duplicate(BR_LootBox) Chest#BR14_6 4_STEELBOX | |
| br_niflheim,0,0,0 duplicate(BR_LootBox) Chest#BR14_7 4_STEELBOX | |
| br_niflheim,0,0,0 duplicate(BR_LootBox) Chest#BR14_8 4_STEELBOX | |
| br_niflheim,0,0,0 duplicate(BR_LootBox) Chest#BR14_9 4_STEELBOX | |
| br_niflheim,0,0,0 duplicate(BR_LootBox) Chest#BR14_10 4_STEELBOX | |
| br_payon,0,0,0 duplicate(BR_LootBox) Chest#BR15_1 4_STEELBOX | |
| br_payon,0,0,0 duplicate(BR_LootBox) Chest#BR15_2 4_STEELBOX | |
| br_payon,0,0,0 duplicate(BR_LootBox) Chest#BR15_3 4_STEELBOX | |
| br_payon,0,0,0 duplicate(BR_LootBox) Chest#BR15_4 4_STEELBOX | |
| br_payon,0,0,0 duplicate(BR_LootBox) Chest#BR15_5 4_STEELBOX | |
| br_payon,0,0,0 duplicate(BR_LootBox) Chest#BR15_6 4_STEELBOX | |
| br_payon,0,0,0 duplicate(BR_LootBox) Chest#BR15_7 4_STEELBOX | |
| br_payon,0,0,0 duplicate(BR_LootBox) Chest#BR15_8 4_STEELBOX | |
| br_payon,0,0,0 duplicate(BR_LootBox) Chest#BR15_9 4_STEELBOX | |
| br_payon,0,0,0 duplicate(BR_LootBox) Chest#BR15_10 4_STEELBOX | |
| br_prontera,0,0,0 duplicate(BR_LootBox) Chest#BR16_1 4_STEELBOX | |
| br_prontera,0,0,0 duplicate(BR_LootBox) Chest#BR16_2 4_STEELBOX | |
| br_prontera,0,0,0 duplicate(BR_LootBox) Chest#BR16_3 4_STEELBOX | |
| br_prontera,0,0,0 duplicate(BR_LootBox) Chest#BR16_4 4_STEELBOX | |
| br_prontera,0,0,0 duplicate(BR_LootBox) Chest#BR16_5 4_STEELBOX | |
| br_prontera,0,0,0 duplicate(BR_LootBox) Chest#BR16_6 4_STEELBOX | |
| br_prontera,0,0,0 duplicate(BR_LootBox) Chest#BR16_7 4_STEELBOX | |
| br_prontera,0,0,0 duplicate(BR_LootBox) Chest#BR16_8 4_STEELBOX | |
| br_prontera,0,0,0 duplicate(BR_LootBox) Chest#BR16_9 4_STEELBOX | |
| br_prontera,0,0,0 duplicate(BR_LootBox) Chest#BR16_10 4_STEELBOX | |
| br_rachel,0,0,0 duplicate(BR_LootBox) Chest#BR17_1 4_STEELBOX | |
| br_rachel,0,0,0 duplicate(BR_LootBox) Chest#BR17_2 4_STEELBOX | |
| br_rachel,0,0,0 duplicate(BR_LootBox) Chest#BR17_3 4_STEELBOX | |
| br_rachel,0,0,0 duplicate(BR_LootBox) Chest#BR17_4 4_STEELBOX | |
| br_rachel,0,0,0 duplicate(BR_LootBox) Chest#BR17_5 4_STEELBOX | |
| br_rachel,0,0,0 duplicate(BR_LootBox) Chest#BR17_6 4_STEELBOX | |
| br_rachel,0,0,0 duplicate(BR_LootBox) Chest#BR17_7 4_STEELBOX | |
| br_rachel,0,0,0 duplicate(BR_LootBox) Chest#BR17_8 4_STEELBOX | |
| br_rachel,0,0,0 duplicate(BR_LootBox) Chest#BR17_9 4_STEELBOX | |
| br_rachel,0,0,0 duplicate(BR_LootBox) Chest#BR17_10 4_STEELBOX | |
| br_splend,0,0,0 duplicate(BR_LootBox) Chest#BR18_1 4_STEELBOX | |
| br_splend,0,0,0 duplicate(BR_LootBox) Chest#BR18_2 4_STEELBOX | |
| br_splend,0,0,0 duplicate(BR_LootBox) Chest#BR18_3 4_STEELBOX | |
| br_splend,0,0,0 duplicate(BR_LootBox) Chest#BR18_4 4_STEELBOX | |
| br_splend,0,0,0 duplicate(BR_LootBox) Chest#BR18_5 4_STEELBOX | |
| br_splend,0,0,0 duplicate(BR_LootBox) Chest#BR18_6 4_STEELBOX | |
| br_splend,0,0,0 duplicate(BR_LootBox) Chest#BR18_7 4_STEELBOX | |
| br_splend,0,0,0 duplicate(BR_LootBox) Chest#BR18_8 4_STEELBOX | |
| br_splend,0,0,0 duplicate(BR_LootBox) Chest#BR18_9 4_STEELBOX | |
| br_splend,0,0,0 duplicate(BR_LootBox) Chest#BR18_10 4_STEELBOX | |
| br_veins,0,0,0 duplicate(BR_LootBox) Chest#BR19_1 4_STEELBOX | |
| br_veins,0,0,0 duplicate(BR_LootBox) Chest#BR19_2 4_STEELBOX | |
| br_veins,0,0,0 duplicate(BR_LootBox) Chest#BR19_3 4_STEELBOX | |
| br_veins,0,0,0 duplicate(BR_LootBox) Chest#BR19_4 4_STEELBOX | |
| br_veins,0,0,0 duplicate(BR_LootBox) Chest#BR19_5 4_STEELBOX | |
| br_veins,0,0,0 duplicate(BR_LootBox) Chest#BR19_6 4_STEELBOX | |
| br_veins,0,0,0 duplicate(BR_LootBox) Chest#BR19_7 4_STEELBOX | |
| br_veins,0,0,0 duplicate(BR_LootBox) Chest#BR19_8 4_STEELBOX | |
| br_veins,0,0,0 duplicate(BR_LootBox) Chest#BR19_9 4_STEELBOX | |
| br_veins,0,0,0 duplicate(BR_LootBox) Chest#BR19_10 4_STEELBOX | |
| br_yuno,0,0,0 duplicate(BR_LootBox) Chest#BR20_1 4_STEELBOX | |
| br_yuno,0,0,0 duplicate(BR_LootBox) Chest#BR20_2 4_STEELBOX | |
| br_yuno,0,0,0 duplicate(BR_LootBox) Chest#BR20_3 4_STEELBOX | |
| br_yuno,0,0,0 duplicate(BR_LootBox) Chest#BR20_4 4_STEELBOX | |
| br_yuno,0,0,0 duplicate(BR_LootBox) Chest#BR20_5 4_STEELBOX | |
| br_yuno,0,0,0 duplicate(BR_LootBox) Chest#BR20_6 4_STEELBOX | |
| br_yuno,0,0,0 duplicate(BR_LootBox) Chest#BR20_7 4_STEELBOX | |
| br_yuno,0,0,0 duplicate(BR_LootBox) Chest#BR20_8 4_STEELBOX | |
| br_yuno,0,0,0 duplicate(BR_LootBox) Chest#BR20_9 4_STEELBOX | |
| br_yuno,0,0,0 duplicate(BR_LootBox) Chest#BR20_10 4_STEELBOX |