Grind Team

Приведу в пример ItemTemplate ещё:
/** Item ID для замковых корон */
public static final int[] ITEM_ID_CASTLE_CIRCLET = { 0, // no castle - no circlet.. :)
6838, // Circlet of Gludio
6835, // Circlet of Dion
6839, // Circlet of Giran
6837, // Circlet of Oren
6840, // Circlet of Aden
6834, // Circlet of Innadril
6836, // Circlet of Goddard
8182, // Circlet of Rune
8183, // Circlet of Schuttgart
};

public static final int[] ITEM_ID_FORMAL_WEAR = { 80026, // Steel Costume
80002, // Vampire Hunter Costume
80003, // Camouflage Suit
80004, // Maids Costume
80005, // Shadows Costume
80006, // Wanderer Costume
80007, // Chinese Dress A
80008, // Chinese Dress B
80009, // Chinese Dress C
80010, // Chinese Dress D
80001, // Christmas Wear
6408, // Wedding Wear
80011, // Swimwear A
80012, // Swimwear B
80013, // Swimwear C
80014, // Swimwear D
80015, // Swimwear E
80016, // Swimwear F
80017, // Underwear Tattoos A
80018, // Underwear Tattoos B
80019, // Underwear Tattoos C
};

/**
* Является ли вещь аденой или камнем печати
*/
public boolean isAdena()
{
return _itemId == 57 || _itemId == 6360 || _itemId == 6361 || _itemId == 6362;
}

public boolean isLifeStone()
{
return (_itemId >= 8723 && _itemId <= 8762) || (_itemId >= 9573 && _itemId <= 9576)
|| (_itemId >= 10483 && _itemId <= 10486) || (_itemId >= 12754 && _itemId <= 12763)
|| _itemId == 12821 || _itemId == 12822 || (_itemId >= 12840 && _itemId <= 12851)
|| _itemId == 14008 || (_itemId >= 14166 && _itemId <= 14169) || (_itemId >= 16160 && _itemId <= 16167)
|| _itemId == 16177 || _itemId == 16178;
}

public boolean isEnchantScroll()
{
return (_itemId >= 6569 && _itemId <= 6578) || (_itemId >= 17255 && _itemId <= 17264)
|| (_itemId >= 22314 && _itemId <= 22323) || (_itemId >= 949 && _itemId <= 962)
|| (_itemId >= 729 && _itemId <= 732);
}

public boolean isForgottenScroll()
{
return (_itemId >= 10549 && _itemId <= 10599) || (_itemId >= 12768 && _itemId <= 12778)
|| (_itemId >= 14170 && _itemId <= 14227) || _itemId == 17030
|| (_itemId >= 17034 && _itemId <= 17039);
}

public boolean isShieldNoEnchant()
{
return _itemId == 11508 || _itemId == 6377 || _itemId == 11532 || _itemId == 9441
|| _itemId == 16304 || _itemId == 15621 || _itemId == 16321 || _itemId == 13471
|| _itemId == 15587 || _itemId == 15604;
}

public boolean isNoEnchant()
{
return _itemId == 10514 || _itemId == 10512 || _itemId == 10513;
}

public boolean isSigelNoEnchant()
{
return (_itemId >= 12811 && _itemId <= 12813) || _itemId == 16305 || _itemId == 15588 || _itemId == 15605 || _itemId == 16322 || _itemId == 15622
|| _itemId >= 13078 || _itemId == 10119;
}

public boolean isTerritoryAccessory()
{
return _itemId >= 13740 && _itemId <= 13748 || _itemId >= 14592 && _itemId <= 14600 || _itemId >= 14664 && _itemId <= 14672 || _itemId >= 14801 && _itemId <= 14809 || _itemId >= 15282 && _itemId <= 15299;
}

public boolean isCodexBook()
{
return _itemId >= 9625 && _itemId <= 9627 || _itemId == 6622;
}

public boolean isAttributeStone()
{
return _itemId >= 9546 && _itemId <= 9551;
}

public boolean isAttributeCrystal()
{
return _itemId >= 9552 && _itemId <= 9557;
}

public boolean isAttributeJewel()
{
return _itemId >= 9558 && _itemId <= 9563;
}

public boolean isAttributeEnergy()
{
return _itemId >= 9564 && _itemId <= 9569;
}

public boolean isHeroWeapon()
{
return _itemId >= 6611 && _itemId <= 6621 || _itemId >= 9388 && _itemId <= 9390;
}

public boolean isEpolets()
{
return _itemId == 9912;
}
public boolean isTerritoryFlag()
{
return _itemId == 13560 || _itemId == 13561 || _itemId == 13562 || _itemId == 13563 || _itemId == 13564 || _itemId == 13565 || _itemId == 13566 || _itemId == 13567 || _itemId == 13568;
}
public boolean isNotAugmented()
{
return _itemId == 21712;
}
 

Давайте теперь мы посмотрим предметы и реализацию распаковок:
package handler.items;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.ArrayUtils;
import core.commons.util.Rnd;
import core.gameserver.handler.items.IItemHandler;
import core.gameserver.handler.items.ItemHandler;
import core.gameserver.cache.Msg;
import core.gameserver.model.Playable;
import core.gameserver.model.Player;
import core.gameserver.model.items.ItemInstance;
import core.gameserver.network.l2.s2c.SystemMessage;
import core.gameserver.scripts.Functions;
import core.gameserver.scripts.ScriptFile;

//TODO [G1ta0] вынести в датапак
public class Extractable extends SimpleItemHandler implements ScriptFile
{
private static final int[] ITEM_IDS = new int[]{8534,
9171,
9172,
9173,
9174,
9175,
9176,
8535,
8536,
8537,
8538,
8539,
8540,
5916,
5944,
14841,
5955,
14847,
5966,
5967,
5968,
5969,
6007,
6008,
6009,
6010,
7725,
7637,
7636,
7629,
7630,
7631,
7632,
7633,
7634,
7635,
10408,
10473,
9599,
20069,
20070,
20071,
20072,
20073,
20074,
20210,
20211,
20215,
20216,
20217,
20218,
20219,
20220,
20227,
20228,
20229,
20233,
20234,
20235,
20239,
20240,
20241,
20242,
20243,
20244,
20251,
20254,
20278,
20279,
20041,
20042,
20043,
20044,
20035,
20036,
20037,
20038,
20039,
20040,
20060,
20061,
22000,
22001,
22002,
22003,
22004,
22005,
20326,
20327,
20329,
20330,
20059,
20494,
20493,
20395,
13281,
13282,
13283,
13284,
13285,
13286,
13287,
13288,
13289,
13290,
14267,
14268,
14269,
13280,
22087,
22088,
13713,
13714,
13715,
13716,
13717,
13718,
13719,
13720,
13721,
14549,
14550,
14551,
14552,
14553,
14554,
14555,
14556,
14557,
13695,
13696,
13697,
13698,
13699,
13700,
13701,
13702,
13703,
14531,
14532,
14533,
14534,
14535,
14536,
14537,
14538,
14539,
13704,
13705,
13706,
13707,
13708,
13709,
13710,
13711,
13712,
14540,
14541,
14542,
14543,
14544,
14545,
14546,
14547,
14548,
14884,
14885,
14886,
14887,
14888,
14889,
14890,
14891,
14892,
14893,
14894,
14895,
14896,
14897,
14898,
14899,
14900,
14901,
14616,
20575,
20804,
20807,
20805,
20808,
20806,
20809,
20842,
20843,
20844,
20845,
20846,
20847,
20848,
20849,
20850,
20851,
20852,
20853,
20854,
20855,
20856,
20857,
20858,
20859,
20860,
20861,
20862,
20863,
20864,
20811,
20812,
20813,
20814,
20815,
20816,
20817,
20810,
20865,
20748,
20749,
20750,
20751,
20752,
20195,
20196,
20197,
20198,
13777,
13778,
13779,
13780,
13781,
13782,
13783,
13784,
13785,
13786,
14849,
14834,
14833,
13988,
13989,
13003,
13004,
13005,
13006,
13007,
13990,
13991,
13992,
14850,
14713,
14714,
14715,
14716,
14717,
14718,
17138,
15482,
15483,
13270,
13271,
13272,
14231,
14232,
21747,
21748,
21749,
17169,
21169,
21753,
21752,
17069,
20515,
20516,
20081,
22310,
22311,
17073,
22203,
22340,
22339,
20635,
20636,
20637,
20638,
21092,
21091,
43214,
43215};

@Override
public boolean pickupItem(Playable playable, ItemInstance item)
{
return true;
}

@Override
public void onLoad()
{
ItemHandler.getInstance().registerItemHandler(this);
}

@Override
public void onReload()
{

}

@Override
public void onShutdown()
{

}

@Override
public int[] getItemIds()
{
return ITEM_IDS;
}

@Override
protected boolean useItemImpl(Player player, ItemInstance item, boolean ctrl)
{
int itemId = item.getItemId();

if(!canBeExtracted(player, item))
return false;

if(!useItem(player, item, 1))
return false;

switch(itemId)
{
case 8534:
use8534(player, ctrl);
break;
case 8535:
use8535(player, ctrl);
break;
case 8536:
use8536(player, ctrl);
break;
case 8537:
use8537(player, ctrl);
break;
case 8538:
use8538(player, ctrl);
break;
case 8539:
use8539(player, ctrl);
break;
case 8540:
use8540(player, ctrl);
break;
case 5916:
use5916(player, ctrl);
break;
case 5944:
use5944(player, ctrl);
break;
case 14841:
use14841(player, ctrl);
break;
case 5955:
use5955(player, ctrl);
break;
case 14847:
use14847(player, ctrl);
break;
case 5966:
use5966(player, ctrl);
break;
case 5967:
use5967(player, ctrl);
break;
case 5968:
use5968(player, ctrl);
break;
case 5969:
use5969(player, ctrl);
break;
case 6007:
use6007(player, ctrl);
break;
case 6008:
use6008(player, ctrl);
break;
case 6009:
use6009(player, ctrl);
break;
case 6010:
use6010(player, ctrl);
break;
case 7725:
use7725(player, ctrl);
break;
case 7637:
use7637(player, ctrl);
break;
case 7636:
use7636(player, ctrl);
break;
case 7629:
use7629(player, ctrl);
break;
case 7630:
use7630(player, ctrl);
break;
case 7631:
use7631(player, ctrl);
break;
case 7632:
use7632(player, ctrl);
break;
case 7633:
use7633(player, ctrl);
break;
case 7634:
use7634(player, ctrl);
break;
case 7635:
use7635(player, ctrl);
break;
case 10408:
use10408(player, ctrl);
break;
case 10473:
use10473(player, ctrl);
break;
case 9599:
use9599(player, ctrl);
break;
case 20069:
use20069(player, ctrl);
break;
case 20070:
use20070(player, ctrl);
break;
case 20071:
use20071(player, ctrl);
break;
case 20072:
use20072(player, ctrl);
break;
case 20073:
use20073(player, ctrl);
break;
case 20074:
use20074(player, ctrl);
break;
case 20210:
use20210(player, ctrl);
break;
case 20211:
use20211(player, ctrl);
break;
case 20215:
use20215(player, ctrl);
break;
case 20216:
use20216(player, ctrl);
break;
case 20217:
use20217(player, ctrl);
break;
case 20218:
use20218(player, ctrl);
break;
case 20219:
use20219(player, ctrl);
break;
case 20220:
use20220(player, ctrl);
break;
case 20227:
use20227(player, ctrl);
break;
case 20228:
use20228(player, ctrl);
break;
case 20229:
use20229(player, ctrl);
break;
case 20233:
use20233(player, ctrl);
break;
case 20234:
use20234(player, ctrl);
break;
case 20235:
use20235(player, ctrl);
break;
case 20239:
use20239(player, ctrl);
break;
case 20240:
use20240(player, ctrl);
break;
case 20241:
use20241(player, ctrl);
break;
case 20242:
use20242(player, ctrl);
break;
case 20243:
use20243(player, ctrl);
break;
case 20244:
use20244(player, ctrl);
break;
case 20251:
use20251(player, ctrl);
break;
case 20254:
use20254(player, ctrl);
break;
case 20278:
use20278(player, ctrl);
break;
case 20279:
use20279(player, ctrl);
break;
case 20041:
use20041(player, ctrl);
break;
case 20042:
use20042(player, ctrl);
break;
case 20043:
use20043(player, ctrl);
break;
case 20044:
use20044(player, ctrl);
break;
case 20035:
use20035(player, ctrl);
break;
case 20036:
use20036(player, ctrl);
break;
case 20037:
use20037(player, ctrl);
break;
case 20038:
use20038(player, ctrl);
break;
case 20039:
use20039(player, ctrl);
break;
case 20040:
use20040(player, ctrl);
break;
case 20060:
use20060(player, ctrl);
break;
case 20061:
use20061(player, ctrl);
break;
case 22000:
use22000(player, ctrl);
break;
case 22001:
use22001(player, ctrl);
break;
case 22002:
use22002(player, ctrl);
break;
case 22003:
use22003(player, ctrl);
break;
case 22004:
use22004(player, ctrl);
break;
case 22005:
use22005(player, ctrl);
break;
case 20326:
use20326(player, ctrl);
break;
case 20327:
use20327(player, ctrl);
break;
case 20329:
use20329(player, ctrl);
break;
case 20330:
use20330(player, ctrl);
break;
case 20059:
use20059(player, ctrl);
break;
case 20494:
use20494(player, ctrl);
break;
case 20493:
use20493(player, ctrl);
break;
case 20395:
use20395(player, ctrl);
break;
case 13281:
use13281(player, ctrl);
break;
case 13282:
use13282(player, ctrl);
break;
case 13283:
use13283(player, ctrl);
break;
case 13284:
use13284(player, ctrl);
break;
case 13285:
use13285(player, ctrl);
break;
case 13286:
use13286(player, ctrl);
break;
case 13287:
use13287(player, ctrl);
break;
case 13288:
use13288(player, ctrl);
break;
case 13289:
use13289(player, ctrl);
break;
case 13290:
use13290(player, ctrl);
break;
case 14267:
use14267(player, ctrl);
break;
case 14268:
use14268(player, ctrl);
break;
case 14269:
use14269(player, ctrl);
break;
case 13280:
use13280(player, ctrl);
break;
case 22087:
use22087(player, ctrl);
break;
case 22088:
use22088(player, ctrl);
break;
case 13713:
use13713(player, ctrl);
break;
case 13714:
use13714(player, ctrl);
break;
case 13715:
use13715(player, ctrl);
break;
case 13716:
use13716(player, ctrl);
break;
case 13717:
use13717(player, ctrl);
break;
case 13718:
use13718(player, ctrl);
break;
case 13719:
use13719(player, ctrl);
break;
case 13720:
use13720(player, ctrl);
break;
case 13721:
use13721(player, ctrl);
break;
case 14549:
use14549(player, ctrl);
break;
case 14550:
use14550(player, ctrl);
break;
case 14551:
use14551(player, ctrl);
break;
case 14552:
use14552(player, ctrl);
break;
case 14553:
use14553(player, ctrl);
break;
case 14554:
use14554(player, ctrl);
break;
case 14555:
use14555(player, ctrl);
break;
case 14556:
use14556(player, ctrl);
break;
case 14557:
use14557(player, ctrl);
break;
case 13695:
use13695(player, ctrl);
break;
case 13696:
use13696(player, ctrl);
break;
case 13697:
use13697(player, ctrl);
break;
case 13698:
use13698(player, ctrl);
break;
case 13699:
use13699(player, ctrl);
break;
case 13700:
use13700(player, ctrl);
break;
case 13701:
use13701(player, ctrl);
break;
case 13702:
use13702(player, ctrl);
break;
case 13703:
use13703(player, ctrl);
break;
case 14531:
use14531(player, ctrl);
break;
case 14532:
use14532(player, ctrl);
break;
case 14533:
use14533(player, ctrl);
break;
case 14534:
use14534(player, ctrl);
break;
case 14535:
use14535(player, ctrl);
break;
case 14536:
use14536(player, ctrl);
break;
case 14537:
use14537(player, ctrl);
break;
case 14538:
use14538(player, ctrl);
break;
case 14539:
use14539(player, ctrl);
break;
case 13704:
use13704(player, ctrl);
break;
case 13705:
use13705(player, ctrl);
break;
case 13706:
use13706(player, ctrl);
break;
case 13707:
use13707(player, ctrl);
break;
case 13708:
use13708(player, ctrl);
break;
case 13709:
use13709(player, ctrl);
break;
case 13710:
use13710(player, ctrl);
break;
case 13711:
use13711(player, ctrl);
break;
case 13712:
use13712(player, ctrl);
break;
case 14540:
use14540(player, ctrl);
break;
case 14541:
use14541(player, ctrl);
break;
case 14542:
use14542(player, ctrl);
break;
case 14543:
use14543(player, ctrl);
break;
case 14544:
use14544(player, ctrl);
break;
case 14545:
use14545(player, ctrl);
break;
case 14546:
use14546(player, ctrl);
break;
case 14547:
use14547(player, ctrl);
break;
case 14548:
use14548(player, ctrl);
break;
case 14884:
use14884(player, ctrl);
break;
case 14885:
use14885(player, ctrl);
break;
case 14886:
use14886(player, ctrl);
break;
case 14887:
use14887(player, ctrl);
break;
case 14888:
use14888(player, ctrl);
break;
case 14889:
use14889(player, ctrl);
break;
case 14890:
use14890(player, ctrl);
break;
case 14891:
use14891(player, ctrl);
break;
case 14892:
use14892(player, ctrl);
break;
case 14893:
use14893(player, ctrl);
break;
case 14894:
use14894(player, ctrl);
break;
case 14895:
use14895(player, ctrl);
break;
case 14896:
use14896(player, ctrl);
break;
case 14897:
use14897(player, ctrl);
break;
case 14898:
use14898(player, ctrl);
break;
case 14899:
use14899(player, ctrl);
break;
case 14900:
use14900(player, ctrl);
break;
case 14901:
use14901(player, ctrl);
break;
case 14616:
use14616(player, ctrl);
break;
case 20575:
use20575(player, ctrl);
break;
case 20804:
use20804(player, ctrl);
break;
case 20807:
use20807(player, ctrl);
break;
case 20805:
use20805(player, ctrl);
break;
case 20808:
use20808(player, ctrl);
break;
case 20806:
use20806(player, ctrl);
break;
case 20809:
use20809(player, ctrl);
break;
case 20842:
use20842(player, ctrl);
break;
case 20843:
use20843(player, ctrl);
break;
case 20844:
use20844(player, ctrl);
break;
case 20845:
use20845(player, ctrl);
break;
case 20846:
use20846(player, ctrl);
break;
case 20847:
use20847(player, ctrl);
break;
case 20848:
use20848(player, ctrl);
break;
case 20849:
use20849(player, ctrl);
break;
case 20850:
use20850(player, ctrl);
break;
case 20851:
use20851(player, ctrl);
break;
case 20852:
use20852(player, ctrl);
break;
case 20853:
use20853(player, ctrl);
break;
case 20854:
use20854(player, ctrl);
break;
case 20855:
use20855(player, ctrl);
break;
case 20856:
use20856(player, ctrl);
break;
case 20857:
use20857(player, ctrl);
break;
case 20858:
use20858(player, ctrl);
break;
case 20859:
use20859(player, ctrl);
break;
case 20860:
use20860(player, ctrl);
break;
case 20861:
use20861(player, ctrl);
break;
case 20862:
use20862(player, ctrl);
break;
case 20863:
use20863(player, ctrl);
break;
case 20864:
use20864(player, ctrl);
break;
case 20811:
use20811(player, ctrl);
break;
case 20812:
use20812(player, ctrl);
break;
case 20813:
use20813(player, ctrl);
break;
case 20814:
use20814(player, ctrl);
break;
case 20815:
use20815(player, ctrl);
break;
case 20816:
use20816(player, ctrl);
break;
case 20817:
use20817(player, ctrl);
break;
case 20810:
use20810(player, ctrl);
break;
case 20865:
use20865(player, ctrl);
break;
case 20748:
use20748(player, ctrl);
break;
case 20749:
use20749(player, ctrl);
break;
case 20750:
use20750(player, ctrl);
break;
case 20751:
use20751(player, ctrl);
break;
case 20752:
use20752(player, ctrl);
break;
case 20195:
use20195(player, ctrl);
break;
case 20196:
use20196(player, ctrl);
break;
case 20197:
use20197(player, ctrl);
break;
case 20198:
use20198(player, ctrl);
break;
case 13777:
use13777(player, ctrl);
break;
case 13778:
use13778(player, ctrl);
break;
case 13779:
use13779(player, ctrl);
break;
case 13780:
use13780(player, ctrl);
break;
case 13781:
use13781(player, ctrl);
break;
case 13782:
use13782(player, ctrl);
break;
case 13783:
use13783(player, ctrl);
break;
case 13784:
use13784(player, ctrl);
break;
case 13785:
use13785(player, ctrl);
break;
case 13786:
use13786(player, ctrl);
break;
case 14849:
use14849(player, ctrl);
break;
case 14834:
use14834(player, ctrl);
break;
case 14833:
use14833(player, ctrl);
break;
case 13988:
use13988(player, ctrl);
break;
case 13989:
use13989(player, ctrl);
break;
case 13003:
use13003(player, ctrl);
break;
case 13004:
use13004(player, ctrl);
break;
case 13005:
use13005(player, ctrl);
break;
case 13006:
use13006(player, ctrl);
break;
case 13007:
use13007(player, ctrl);
break;
case 13990:
use13990(player, ctrl);
break;
case 13991:
use13991(player, ctrl);
break;
case 13992:
use13992(player, ctrl);
break;
case 14850:
use14850(player, ctrl);
break;
case 14713:
use14713(player, ctrl);
break;
case 14714:
use14714(player, ctrl);
break;
case 14715:
use14715(player, ctrl);
break;
case 14716:
use14716(player, ctrl);
break;
case 14717:
use14717(player, ctrl);
break;
case 14718:
use14718(player, ctrl);
break;
case 17138:
use17138(player, ctrl);
break;
case 15482:
use15482(player, ctrl);
break;
case 15483:
use15483(player, ctrl);
break;
case 13270:
use13270(player, ctrl);
break;
case 13271:
use13271(player, ctrl);
break;
case 13272:
use13272(player, ctrl);
break;
case 14231:
use14231(player, ctrl);
break;
case 14232:
use14232(player, ctrl);
break;
case 21747:
use21747(player, ctrl);
break;
case 21748:
use21748(player, ctrl);
break;
case 21749:
use21749(player, ctrl);
break;
case 17169:
use17169(player, ctrl);
break;
case 21169:
use21169(player, ctrl);
break;
case 21753:
use21753(player, ctrl);
break;
case 21752:
use21752(player, ctrl);
break;
case 17069:
use17069(player, ctrl);
break;
case 20515:
use20515(player, ctrl);
break;
case 20516:
use20516(player, ctrl);
break;
case 20081:
use20081(player, ctrl);
break;
case 22310:
use22310(player, ctrl);
break;
case 22311:
use22311(player, ctrl);
break;
case 17073:
use17073(player, ctrl);
break;
case 22203:
use22203(player, ctrl);
break;
case 22340:
use22340(player, ctrl);
break;
case 22339:
use22339(player, ctrl);
break;
case 9171:
use9171(player, ctrl);
break;
case 9172:
use9172(player, ctrl);
break;
case 9173:
use9173(player, ctrl);
break;
case 9174:
use9174(player, ctrl);
break;
case 9175:
use9175(player, ctrl);
break;
case 9176:
use9176(player, ctrl);
break;
case 20635:
use20635(player, ctrl);
break;
case 20636:
use20636(player, ctrl);
break;
case 20637:
use20637(player, ctrl);
break;
case 20638:
use20638(player, ctrl);
break;
case 21092:
use21092(player, ctrl);
break;
case 21091:
use21091(player, ctrl);
break;
case 43214:
use43214(player, ctrl);
break;
case 43215:
use43215(player, ctrl);
break;
default:
return false;
}

return true;
}

// Red Philosopher's Stone
public void use9171(Player player, Boolean ctrl)
{
int[] list = new int[] {9177, 9184, 9191, 9198, 9153, 9146, 9150, 8678, 8682, 9156, 9157, 1540, 1539};
int[] chances = new int[] {2, 2, 2, 2, 15, 15, 15, 1, 1, 9, 9, 15, 15};
int[] counts = new int[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
extract_item_r(list, chances, counts, player);
}
// Blue Philisopher's Stone
public void use9172(Player player, Boolean ctrl)
{
int[] list = new int[] {9178, 9185, 9192, 9199, 9147, 9151, 9149, 8685, 8679, 9156, 9157, 1540, 1539};
int[] counts = new int[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int[] chances = new int[] {2, 2, 2, 2, 15, 15, 15, 1, 1, 9, 9, 15, 15};
extract_item_r(list, counts, chances, player);
}
// Orange Philisopher's Stone
public void use9173(Player player, Boolean ctrl)
{
int[] list = new int[] {9180, 9187, 9194, 9201, 9149, 9155, 9150, 8688, 8680, 9156, 9157, 1540, 1539};
int[] counts = new int[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int[] chances = new int[] {2, 2, 2, 2, 15, 15, 15, 1, 1, 9, 9, 15, 15};
extract_item_r(list, counts, chances, player);
}
// Black Philisopher's Stone
public void use9174(Player player, Boolean ctrl)
{
int[] list = new int[] {9182, 9189, 9196, 9203, 9148, 9146, 9154, 8681, 8687, 9156, 9157, 1540, 1539};
int[] counts = new int[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int[] chances = new int[] {2, 2, 2, 2, 15, 15, 15, 1, 1, 9, 9, 15, 15};
extract_item_r(list, counts, chances, player);
}
// White Philisopher's Stone
public void use9175(Player player, Boolean ctrl)
{
int[] list = new int[] {9183, 9190, 9197, 9204, 9152, 9155, 9147, 8685, 8683, 9156, 9157, 1540, 1539};
int[] counts = new int[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int[] chances = new int[] {2, 2, 2, 2, 15, 15, 15, 1, 1, 9, 9, 15, 15};
extract_item_r(list, counts, chances, player);
}
// Green Philisopher's Stone
public void use9176(Player player, Boolean ctrl)
{
int[] list = new int[] {9179, 9186, 9193, 9200, 9148, 9152, 9154, 8686, 8684, 9156, 9157, 1540, 1539};
int[] counts = new int[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int[] chances = new int[] {2, 2, 2, 2, 15, 15, 15, 1, 1, 9, 9, 15, 15};
extract_item_r(list, counts, chances, player);
}

// ------ Adventurer's Boxes ------

// Adventurer's Box: C-Grade Accessory (Low Grade)
private void use8534(Player player, boolean ctrl)
{
int[] list = new int[]{853, 916, 884};
int[] chances = new int[]{17, 17, 17};
int[] counts = new int[]{1, 1, 1};
extract_item_r(list, counts, chances, player);
}

// Adventurer's Box: C-Grade Accessory (Medium Grade)
private void use8535(Player player, boolean ctrl)
{
int[] list = new int[]{854, 917, 885};
int[] chances = new int[]{17, 17, 17};
int[] counts = new int[]{1, 1, 1};
extract_item_r(list, counts, chances, player);
}

// Adventurer's Box: C-Grade Accessory (High Grade)
private void use8536(Player player, boolean ctrl)
{
int[] list = new int[]{855, 119, 886};
int[] chances = new int[]{17, 17, 17};
int[] counts = new int[]{1, 1, 1};
extract_item_r(list, counts, chances, player);
}

// Adventurer's Box: B-Grade Accessory (Low Grade)
private void use8537(Player player, boolean ctrl)
{
int[] list = new int[]{856, 918, 887};
int[] chances = new int[]{17, 17, 17};
int[] counts = new int[]{1, 1, 1};
extract_item_r(list, counts, chances, player);
}

// Adventurer's Box: B-Grade Accessory (High Grade)
private void use8538(Player player, boolean ctrl)
{
int[] list = new int[]{864, 926, 895};
int[] chances = new int[]{17, 17, 17};
int[] counts = new int[]{1, 1, 1};
extract_item_r(list, counts, chances, player);
}

// Adventurer's Box: Hair Accessory
private void use8539(Player player, boolean ctrl)
{
int[] list = new int[]{8179, 8178, 8177};
int[] chances = new int[]{10, 20, 30};
int[] counts = new int[]{1, 1, 1};
extract_item_r(list, counts, chances, player);
}

// Adventurer's Box: Cradle of Creation
private void use8540(Player player, boolean ctrl)
{
if(Rnd.chance(30))
Functions.addItem(player, 8175, 1);
}

// Quest 370: A Wiseman Sows Seeds
private void use5916(Player player, boolean ctrl)
{
int[] list = new int[]{5917, 5918, 5919, 5920, 736};
int[] counts = new int[]{1, 1, 1, 1, 1};
extract_item(list, counts, player);
}

// Quest 376: Giants Cave Exploration, Part 1
private void use5944(Player player, boolean ctrl)
{
int[] list = {5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 5932, 5933, 5934, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5943};
int[] counts = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};

if(ctrl)
{
long item_count = 1 + Functions.removeItem(player, 5944, Functions.getItemCount(player, 5944));
for(int[] res : mass_extract_item(item_count, list, counts, player))
Functions.addItem(player, res[0], res[1]);
}
else
extract_item(list, counts, player);
}

// Quest 376: Giants Cave Exploration, Part 1
private void use14841(Player player, boolean ctrl)
{
int[] list = {14836, 14837, 14838, 14839, 14840};
int[] counts = {1, 1, 1, 1, 1};

if(ctrl)
{
long item_count = 1 + Functions.removeItem(player, 14841, Functions.getItemCount(player, 14841));
for(int[] res : mass_extract_item(item_count, list, counts, player))
Functions.addItem(player, res[0], res[1]);
}
else
extract_item(list, counts, player);
}

// Quest 377: Giants Cave Exploration, Part 2, old
private void use5955(Player player, boolean ctrl)
{
int[] list = {5942, 5943, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5953, 5954};
int[] counts = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};

if(ctrl)
{
long item_count = 1 + Functions.removeItem(player, 5955, Functions.getItemCount(player, 5955));
for(int[] res : mass_extract_item(item_count, list, counts, player))
Functions.addItem(player, res[0], res[1]);
}
else
extract_item(list, counts, player);
}

// Quest 377: Giants Cave Exploration, Part 2, new
private void use14847(Player player, boolean ctrl)
{
int[] list = {14842, 14843, 14844, 14845, 14846};
int[] counts = {1, 1, 1, 1, 1};

if(ctrl)
{
long item_count = 1 + Functions.removeItem(player, 14847, Functions.getItemCount(player, 14847));
for(int[] res : mass_extract_item(item_count, list, counts, player))
Functions.addItem(player, res[0], res[1]);
}
else
extract_item(list, counts, player);
}

// Quest 372: Legacy of Insolence
private void use5966(Player player, boolean ctrl)
{
int[] list = new int[]{5970, 5971, 5977, 5978, 5979, 5986, 5993, 5994, 5995, 5997, 5983, 6001};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
extract_item(list, counts, player);
}

// Quest 372: Legacy of Insolence
private void use5967(Player player, boolean ctrl)
{
int[] list = new int[]{5970, 5971, 5975, 5976, 5980, 5985, 5993, 5994, 5995, 5997, 5983, 6001};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
extract_item(list, counts, player);
}

// Quest 372: Legacy of Insolence
private void use5968(Player player, boolean ctrl)
{
int[] list = new int[]{5973, 5974, 5981, 5984, 5989, 5990, 5991, 5992, 5996, 5998, 5999, 6000, 5988, 5983, 6001};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
extract_item(list, counts, player);
}

// Quest 372: Legacy of Insolence
private void use5969(Player player, boolean ctrl)
{
int[] list = new int[]{5970, 5971, 5982, 5987, 5989, 5990, 5991, 5992, 5996, 5998, 5999, 6000, 5972, 6001};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
extract_item(list, counts, player);
}

/**
* Quest 373: Supplier of Reagents, from Hallate's Maid, Reagent Pouch (Gray)
* 2x Quicksilver (6019) 30%
* 2x Moonstone Shard (6013) 30%
* 1x Rotten Bone Piece (6014) 20%
* 1x Infernium Ore (6016) 20%
*/
private void use6007(Player player, boolean ctrl)
{
int[] list = new int[]{6019, 6013, 6014, 6016};
int[] counts = new int[]{2, 2, 1, 1};
int[] chances = new int[]{30, 30, 20, 20};

if(ctrl)
{
long item_count = 1 + Functions.removeItem(player, 6007, Functions.getItemCount(player, 6007));
for(int[] res : mass_extract_item_r(item_count, list, counts, chances, player))
Functions.addItem(player, res[0], res[1]);
}
else
extract_item_r(list, counts, chances, player);
}

/**
* Quest 373: Supplier of Reagents, from Platinum Tribe Shaman, Reagent Pouch (Yellow)
* 2x Blood Root (6017) 10%
* 2x Sulfur (6020) 20%
* 1x Rotten Bone Piece (6014) 35%
* 1x Infernium Ore (6016) 35%
*/
private void use6008(Player player, boolean ctrl)
{
int[] list = new int[]{6017, 6020, 6014, 6016};
int[] counts = new int[]{2, 2, 1, 1};
int[] chances = new int[]{10, 20, 35, 35};

if(ctrl)
{
long item_count = 1 + Functions.removeItem(player, 6008, Functions.getItemCount(player, 6008));
for(int[] res : mass_extract_item_r(item_count, list, counts, chances, player))
Functions.addItem(player, res[0], res[1]);
}
else
extract_item_r(list, counts, chances, player);
}

/**
* Quest 373: Supplier of Reagents, from Hames Orc Shaman, Reagent Pouch (Brown)
* 1x Lava Stone (6012) 20%
* 2x Volcanic Ash (6018) 20%
* 2x Quicksilver (6019) 20%
* 1x Moonstone Shard (6013) 40%
*/
private void use6009(Player player, boolean ctrl)
{
int[] list = new int[]{6012, 6018, 6019, 6013};
int[] counts = new int[]{1, 2, 2, 1};
int[] chances = new int[]{20, 20, 20, 40};

if(ctrl)
{
long item_count = 1 + Functions.removeItem(player, 6009, Functions.getItemCount(player, 6009));
for(int[] res : mass_extract_item_r(item_count, list, counts, chances, player))
Functions.addItem(player, res[0], res[1]);
}
else
extract_item_r(list, counts, chances, player);
}

/**
* Quest 373: Supplier of Reagents, from Platinum Guardian Shaman, Reagent Box
* 2x Blood Root (6017) 20%
* 2x Sulfur (6020) 20%
* 1x Infernium Ore (6016) 35%
* 2x Demon's Blood (6015) 25%
*/
private void use6010(Player player, boolean ctrl)
{
int[] list = new int[]{6017, 6020, 6016, 6015};
int[] counts = new int[]{2, 2, 1, 2};
int[] chances = new int[]{20, 20, 35, 25};

if(ctrl)
{
long item_count = 1 + Functions.removeItem(player, 6010, Functions.getItemCount(player, 6010));
for(int[] res : mass_extract_item_r(item_count, list, counts, chances, player))
Functions.addItem(player, res[0], res[1]);
}
else
extract_item_r(list, counts, chances, player);
}

// Quest 628: Hunt of Golden Ram
private void use7725(Player player, boolean ctrl)
{
int[] list = new int[]{6035, 1060, 735, 1540, 1061, 1539};
int[] counts = new int[]{1, 1, 1, 1, 1, 1};
int[] chances = new int[]{7, 39, 7, 3, 12, 32};

if(ctrl)
{
long item_count = 1 + Functions.removeItem(player, 7725, Functions.getItemCount(player, 7725));
for(int[] res : mass_extract_item_r(item_count, list, counts, chances, player))
Functions.addItem(player, res[0], res[1]);
}
else
extract_item_r(list, counts, chances, player);
}

// Quest 628: Hunt of Golden Ram
private void use7637(Player player, boolean ctrl)
{
int[] list = new int[]{4039, 4041, 4043, 4044, 4042, 4040};
int[] counts = new int[]{4, 1, 4, 4, 2, 2};
int[] chances = new int[]{20, 10, 20, 20, 15, 15};

if(ctrl)
{
long item_count = 1 + Functions.removeItem(player, 7637, Functions.getItemCount(player, 7637));
for(int[] res : mass_extract_item_r(item_count, list, counts, chances, player))
Functions.addItem(player, res[0], res[1]);
}
else
extract_item_r(list, counts, chances, player);
}

// Quest 628: Hunt of Golden Ram
private void use7636(Player player, boolean ctrl)
{
int[] list = new int[]{1875, 1882, 1880, 1874, 1877, 1881, 1879, 1876};
int[] counts = new int[]{3, 3, 4, 1, 3, 1, 3, 6};
int[] chances = new int[]{10, 20, 10, 10, 10, 12, 12, 16};

if(ctrl)
{
long item_count = 1 + Functions.removeItem(player, 7636, Functions.getItemCount(player, 7636));
for(int[] res : mass_extract_item_r(item_count, list, counts, chances, player))
Functions.addItem(player, res[0], res[1]);
}
else
extract_item_r(list, counts, chances, player);
}

// Looted Goods - White Cargo box
private void use7629(Player player, boolean ctrl)
{
int[] list = new int[]{6688, 6689, 6690, 6691, 6693, 6694, 6695, 6696, 6697, 7579, 57};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 330000};
int[] chances = new int[]{9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10};
extract_item_r(list, counts, chances, player);
}

// Looted Goods - Blue Cargo box #All chances of 8 should be 8.5, must be fixed if possible!!
private void use7630(Player player, boolean ctrl)
{
int[] list = new int[]{6703, 6704, 6705, 6706, 6708, 6709, 6710, 6712, 6713, 6714, 57};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 292000};
int[] chances = new int[]{8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 20};
extract_item_r(list, counts, chances, player);
}

// Looted Goods - Yellow Cargo box
private void use7631(Player player, boolean ctrl)
{
int[] list = new int[]{6701, 6702, 6707, 6711, 57};
int[] counts = new int[]{1, 1, 1, 1, 930000};
int[] chances = new int[]{20, 20, 20, 20, 20};
extract_item_r(list, counts, chances, player);
}

// Looted Goods - Red Filing Cabinet
private void use7632(Player player, boolean ctrl)
{
int[] list;
list = new int[]{6857, 6859, 6861, 6863, 6867, 6869, 6871, 6875, 6877, 6879, 13100, 57};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 340000};
int[] chances = new int[]{8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 7};
extract_item_r(list, counts, chances, player);
}

// Looted Goods - Purple Filing Cabinet
private void use7633(Player player, boolean ctrl)
{
int[] list;
list = new int[]{6853, 6855, 6865, 6873, 57};
int[] counts = new int[]{1, 1, 1, 1, 850000};
int[] chances = new int[]{20, 20, 20, 20, 20};
extract_item_r(list, counts, chances, player);
}

// Looted Goods - Brown Pouch
private void use7634(Player player, boolean ctrl)
{
int[] list = new int[]{1874, 1875, 1876, 1877, 1879, 1880, 1881, 1882, 57};
int[] counts = new int[]{20, 20, 20, 20, 20, 20, 20, 20, 150000};
int[] chances = new int[]{10, 10, 16, 11, 10, 5, 10, 18, 10};
extract_item_r(list, counts, chances, player);
}

// Looted Goods - Gray Pouch
private void use7635(Player player, boolean ctrl)
{
int[] list = new int[]{4039, 4040, 4041, 4042, 4043, 4044, 57};
int[] counts = new int[]{4, 4, 4, 4, 4, 4, 160000};
int[] chances = new int[]{20, 10, 10, 10, 20, 20, 10};
extract_item_r(list, counts, chances, player);
}

// Old Agathion
private void use10408(Player player, boolean ctrl)
{
Functions.addItem(player, 6471, 20);
Functions.addItem(player, 5094, 40);
Functions.addItem(player, 9814, 3);
Functions.addItem(player, 9816, 4);
Functions.addItem(player, 9817, 4);
Functions.addItem(player, 9815, 2);
Functions.addItem(player, 57, 6000000);
}

// Magic Armor Set
private void use10473(Player player, boolean ctrl)
{
Functions.addItem(player, 10470, 2); // Shadow Item - Red Crescent
Functions.addItem(player, 10471, 2); // Shadow Item - Ring of Devotion
Functions.addItem(player, 10472, 1); // Shadow Item - Necklace of Devotion
}

// Ancient Tome of the Demon
private void use9599(Player player, boolean ctrl)
{
int[] list = new int[]{9600, 9601, 9602};
int[] count_min = new int[]{1, 1, 1};
int[] count_max = new int[]{2, 2, 1};
int[] chances = new int[]{4, 10, 1};

if(ctrl)
{
long item_count = 1 + Functions.removeItem(player, 9599, Functions.getItemCount(player, 9599));
for(int[] res : mass_extract_item_r(item_count, list, count_min, count_max, chances, player))
Functions.addItem(player, res[0], res[1]);
}
else
extract_item_r(list, count_min, count_max, chances, player);
}

// Baby Panda Agathion Pack
private void use20069(Player player, boolean ctrl)
{
Functions.addItem(player, 20063, 1);
}

// Bamboo Panda Agathion Pack
private void use20070(Player player, boolean ctrl)
{
Functions.addItem(player, 20064, 1);
}

// Sexy Panda Agathion Pack
private void use20071(Player player, boolean ctrl)
{
Functions.addItem(player, 20065, 1);
}

// Agathion of Baby Panda 15 Day Pack
private void use20072(Player player, boolean ctrl)
{
Functions.addItem(player, 20066, 1);
}

// Bamboo Panda Agathion 15 Day Pack
private void use20073(Player player, boolean ctrl)
{
Functions.addItem(player, 20067, 1);
}

// Agathion of Sexy Panda 15 Day Pack
private void use20074(Player player, boolean ctrl)
{
Functions.addItem(player, 20068, 1);
}

// Charming Valentine Gift Set
private void use20210(Player player, boolean ctrl)
{
Functions.addItem(player, 20212, 1);
}

// Naughty Valentine Gift Set
private void use20211(Player player, boolean ctrl)
{
Functions.addItem(player, 20213, 1);
}

// White Maneki Neko Agathion Pack
private void use20215(Player player, boolean ctrl)
{
Functions.addItem(player, 20221, 1);
}

// Black Maneki Neko Agathion Pack
private void use20216(Player player, boolean ctrl)
{
Functions.addItem(player, 20222, 1);
}

// Brown Maneki Neko Agathion Pack
private void use20217(Player player, boolean ctrl)
{
Functions.addItem(player, 20223, 1);
}

// White Maneki Neko Agathion 7-Day Pack
private void use20218(Player player, boolean ctrl)
{
Functions.addItem(player, 20224, 1);
}

// Black Maneki Neko Agathion 7-Day Pack
private void use20219(Player player, boolean ctrl)
{
Functions.addItem(player, 20225, 1);
}

// Brown Maneki Neko Agathion 7-Day Pack
private void use20220(Player player, boolean ctrl)
{
Functions.addItem(player, 20226, 1);
}

// One-Eyed Bat Drove Agathion Pack
private void use20227(Player player, boolean ctrl)
{
Functions.addItem(player, 20230, 1);
}

// One-Eyed Bat Drove Agathion 7-Day Pack
private void use20228(Player player, boolean ctrl)
{
Functions.addItem(player, 20231, 1);
}

// One-Eyed Bat Drove Agathion 7-Day Pack
private void use20229(Player player, boolean ctrl)
{
Functions.addItem(player, 20232, 1);
}

// Pegasus Agathion Pack
private void use20233(Player player, boolean ctrl)
{
Functions.addItem(player, 20236, 1);
}

// Pegasus Agathion 7-Day Pack
private void use20234(Player player, boolean ctrl)
{
Functions.addItem(player, 20237, 1);
}

// Pegasus Agathion 7-Day Pack
private void use20235(Player player, boolean ctrl)
{
Functions.addItem(player, 20238, 1);
}

// Yellow-Robed Tojigong Pack
private void use20239(Player player, boolean ctrl)
{
Functions.addItem(player, 20245, 1);
}

// Blue-Robed Tojigong Pack
private void use20240(Player player, boolean ctrl)
{
Functions.addItem(player, 20246, 1);
}

// Green-Robed Tojigong Pack
private void use20241(Player player, boolean ctrl)
{
Functions.addItem(player, 20247, 1);
}

// Yellow-Robed Tojigong 7-Day Pack
private void use20242(Player player, boolean ctrl)
{
Functions.addItem(player, 20248, 1);
}

// Blue-Robed Tojigong 7-Day Pack
private void use20243(Player player, boolean ctrl)
{
Functions.addItem(player, 20249, 1);
}

// Green-Robed Tojigong 7-Day Pack
private void use20244(Player player, boolean ctrl)
{
Functions.addItem(player, 20250, 1);
}

// Bugbear Agathion Pack
private void use20251(Player player, boolean ctrl)
{
Functions.addItem(player, 20252, 1);
}

// Agathion of Love Pack (Event)
private void use20254(Player player, boolean ctrl)
{
Functions.addItem(player, 20253, 1);
}

// Gold Afro Hair Pack
private void use20278(Player player, boolean ctrl)
{
Functions.addItem(player, 20275, 1);
}

// Pink Afro Hair Pack
private void use20279(Player player, boolean ctrl)
{
Functions.addItem(player, 20276, 1);
}

// Plaipitak Agathion Pack
private void use20041(Player player, boolean ctrl)
{
Functions.addItem(player, 20012, 1);
}

// Plaipitak Agathion 30-Day Pack
private void use20042(Player player, boolean ctrl)
{
Functions.addItem(player, 20013, 1);
}

// Plaipitak Agathion 30-Day Pack
private void use20043(Player player, boolean ctrl)
{
Functions.addItem(player, 20014, 1);
}

// Plaipitak Agathion 30-Day Pack
private void use20044(Player player, boolean ctrl)
{
Functions.addItem(player, 20015, 1);
}

// Majo Agathion Pack
private void use20035(Player player, boolean ctrl)
{
Functions.addItem(player, 20006, 1);
}

// Gold Crown Majo Agathion Pack
private void use20036(Player player, boolean ctrl)
{
Functions.addItem(player, 20007, 1);
}

// Black Crown Majo Agathion Pack
private void use20037(Player player, boolean ctrl)
{
Functions.addItem(player, 20008, 1);
}

// Majo Agathion 30-Day Pack
private void use20038(Player player, boolean ctrl)
{
Functions.addItem(player, 20009, 1);
}

// Gold Crown Majo Agathion 30-Day Pack
private void use20039(Player player, boolean ctrl)
{
Functions.addItem(player, 20010, 1);
}

// Black Crown Majo Agathion 30-Day Pack
private void use20040(Player player, boolean ctrl)
{
Functions.addItem(player, 20011, 1);
}

// Kat the Cat Hat Pack
private void use20060(Player player, boolean ctrl)
{
Functions.addItem(player, 20031, 1);
}

// Skull Hat Pack
private void use20061(Player player, boolean ctrl)
{
Functions.addItem(player, 20032, 1);
}

// ****** Start Item Mall ******
// Small fortuna box
private void use22000(Player player, boolean ctrl)
{
int[][] list = new int[][]{{22006, 3}, {22007, 2}, {22008, 1}, {22014, 1}, {22022, 3}, {22023, 3}, {22024, 1}, {8743, 1}, {8744, 1}, {8745, 1}, {8753, 1}, {8754, 1}, {8755, 1}, {22025, 5}};
double[] chances = new double[]{20.55555, 14.01515, 6.16666, 0.86999, 3.19444, 6.38888, 5.75, 10, 8.33333, 6.94444, 2, 1.6666, 1.38888, 12.77777};
extractRandomOneItem(player, list, chances);
}

// Middle fortuna box
private void use22001(Player player, boolean ctrl)
{
int[][] list = new int[][]{{22007, 3}, {22008, 2}, {22009, 1}, {22014, 1}, {22015, 1}, {22022, 5}, {22023, 5}, {22024, 2}, {8746, 1}, {8747, 1}, {8748, 1}, {8756, 1}, {8757, 1}, {8758, 1}, {22025, 10}};
double[] chances = new double[]{27.27272, 9, 5, 0.93959, 0.32467, 3.75, 7.5, 5.625, 9.11458, 7.875, 6.5625, 1.82291, 1.575, 1.3125, 12.5};
extractRandomOneItem(player, list, chances);
}

// Large fortuna box
private void use22002(Player player, boolean ctrl)
{
int[][] list = new int[][]{{22008, 2}, {22009, 1}, {22014, 1}, {22015, 1}, {22018, 1}, {22019, 1}, {22022, 10}, {22023, 10}, {22024, 5}, {8749, 1}, {8750, 1}, {8751, 1}, {8759, 1}, {8760, 1}, {8761, 1}, {22025, 20}};
double[] chances = new double[]{27, 15, 0.78299, 0.27056, 0.00775, 0.0027, 3.75, 7.5, 4.5, 9.75, 8.125, 6.77083, 1.95, 1.625, 1.35416, 12.5};
extractRandomOneItem(player, list, chances);
}

// Small fortuna cube
private void use22003(Player player, boolean ctrl)
{
int[][] list = new int[][]{{22010, 3}, {22011, 2}, {22012, 1}, {22016, 1}, {22022, 3}, {22023, 3}, {22024, 1}, {8743, 1}, {8744, 1}, {8745, 1}, {8753, 1}, {8754, 1}, {8755, 1}, {22025, 5}};
double[] chances = new double[]{20.22222, 13.78787, 6.06666, 0.69599, 3.47222, 6.94444, 6.25, 9.5, 7.91666, 6.59722, 1.9, 1.58333, 1.31944, 13.88888};
extractRandomOneItem(player, list, chances);
}

// Middle fortuna cube
private void use22004(Player player, boolean ctrl)
{
int[][] list = new int[][]{{22011, 3}, {22012, 2}, {22013, 1}, {22016, 1}, {22017, 1}, {22022, 5}, {22023, 5}, {22024, 2}, {8746, 1}, {8747, 1}, {8748, 1}, {8756, 1}, {8757, 1}, {8758, 1}, {22025, 10}};
double[] chances = new double[]{26.51515, 8.75, 4.86111, 0.91349, 0.31565, 3.75, 7.5, 5.625, 9.54861, 8.25, 6.875, 1.90972, 1.65, 1.375, 12.5};
extractRandomOneItem(player, list, chances);
}

// Large fortuna cube
private void use22005(Player player, boolean ctrl)
{
int[][] list = new int[][]{{22012, 2}, {22013, 1}, {22016, 1}, {22017, 1}, {22020, 1}, {22021, 1}, {22022, 10}, {22023, 10}, {22024, 5}, {8749, 1}, {8750, 1}, {8751, 1}, {8759, 1}, {8760, 1}, {8761, 1}, {22025, 20}};
double[] chances = new double[]{26.25, 14.58333, 0.69599, 0.24049, 0.00638, 0.0022, 3.95833, 7.91666, 4.75, 9.58333, 7.98611, 6.65509, 1.91666, 1.59722, 1.33101, 13.19444};
extractRandomOneItem(player, list, chances);
}

// Beast Soulshot Pack
private void use20326(Player player, boolean ctrl)
{
Functions.addItem(player, 20332, 5000);
}

// Beast Spiritshot Pack
private void use20327(Player player, boolean ctrl)
{
Functions.addItem(player, 20333, 5000);
}

// Beast Soulshot Large Pack
private void use20329(Player player, boolean ctrl)
{
Functions.addItem(player, 20332, 10000);
}

// Beast Spiritshot Large Pack
private void use20330(Player player, boolean ctrl)
{
Functions.addItem(player, 20333, 10000);
}

// Light Purple Maned Horse Bracelet 30-Day Pack
private void use20059(Player player, boolean ctrl)
{
Functions.addItem(player, 20030, 1);
}

// Steam Beatle Mounting Bracelet 7 Day Pack
private void use20494(Player player, boolean ctrl)
{
Functions.addItem(player, 20449, 1);
}

// Light Purple Maned Horse Mounting Bracelet 7 Day Pack
private void use20493(Player player, boolean ctrl)
{
Functions.addItem(player, 20448, 1);
}

// Steam Beatle Mounting Bracelet Pack
private void use20395(Player player, boolean ctrl)
{
Functions.addItem(player, 20396, 1);
}

// Pumpkin Transformation Stick 7 Day Pack
private void use13281(Player player, boolean ctrl)
{
Functions.addItem(player, 13253, 1);
}

// Kat the Cat Hat 7-Day Pack
private void use13282(Player player, boolean ctrl)
{
Functions.addItem(player, 13239, 1);
}

// Feline Queen Hat 7-Day Pack
private void use13283(Player player, boolean ctrl)
{
Functions.addItem(player, 13240, 1);
}

// Monster Eye Hat 7-Day Pack
private void use13284(Player player, boolean ctrl)
{
Functions.addItem(player, 13241, 1);
}

// Brown Bear Hat 7-Day Pack
private void use13285(Player player, boolean ctrl)
{
Functions.addItem(player, 13242, 1);
}

// Fungus Hat 7-Day Pack
private void use13286(Player player, boolean ctrl)
{
Functions.addItem(player, 13243, 1);
}

// Skull Hat 7-Day Pack
private void use13287(Player player, boolean ctrl)
{
Functions.addItem(player, 13244, 1);
}

// Ornithomimus Hat 7-Day Pack
private void use13288(Player player, boolean ctrl)
{
Functions.addItem(player, 13245, 1);
}

// Feline King Hat 7-Day Pack
private void use13289(Player player, boolean ctrl)
{
Functions.addItem(player, 13246, 1);
}

// Kai the Cat Hat 7-Day Pack
private void use13290(Player player, boolean ctrl)
{
Functions.addItem(player, 13247, 1);
}

// Sudden Agathion 7 Day Pack
private void use14267(Player player, boolean ctrl)
{
Functions.addItem(player, 14093, 1);
}

// Shiny Agathion 7 Day Pack
private void use14268(Player player, boolean ctrl)
{
Functions.addItem(player, 14094, 1);
}

// Sobbing Agathion 7 Day Pack
private void use14269(Player player, boolean ctrl)
{
Functions.addItem(player, 14095, 1);
}

// Agathion of Love 7-Day Pack
private void use13280(Player player, boolean ctrl)
{
Functions.addItem(player, 20201, 1);
}

// A Scroll Bundle of Fighter
private void use22087(Player player, boolean ctrl)
{
Functions.addItem(player, 22039, 1);
Functions.addItem(player, 22040, 1);
Functions.addItem(player, 22041, 1);
Functions.addItem(player, 22042, 1);
Functions.addItem(player, 22043, 1);
Functions.addItem(player, 22044, 1);
Functions.addItem(player, 22047, 1);
Functions.addItem(player, 22048, 1);
}

// A Scroll Bundle of Mage
private void use22088(Player player, boolean ctrl)
{
Functions.addItem(player, 22045, 1);
Functions.addItem(player, 22046, 1);
Functions.addItem(player, 22048, 1);
Functions.addItem(player, 22049, 1);
Functions.addItem(player, 22050, 1);
Functions.addItem(player, 22051, 1);
Functions.addItem(player, 22052, 1);
Functions.addItem(player, 22053, 1);
}

// ****** End Item Mall ******

// ****** Belts ******
// Gludio Supply Box - Belt: Grade B, C
private void use13713(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13894, 1); // Cloth Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13895, 1); // Leather Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Dion Supply Box - Belt: Grade B, C
private void use13714(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13894, 1); // Cloth Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13895, 1); // Leather Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Giran Supply Box - Belt: Grade B, C
private void use13715(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13894, 1); // Cloth Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13895, 1); // Leather Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Oren Supply Box - Belt: Grade B, C
private void use13716(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13894, 1); // Cloth Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13895, 1); // Leather Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Aden Supply Box - Belt: Grade B, C
private void use13717(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13894, 1); // Cloth Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13895, 1); // Leather Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Innadril Supply Box - Belt: Grade B, C
private void use13718(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13894, 1); // Cloth Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13895, 1); // Leather Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Goddard Supply Box - Belt: Grade B, C
private void use13719(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13894, 1); // Cloth Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13895, 1); // Leather Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Rune Supply Box - Belt: Grade B, C
private void use13720(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13894, 1); // Cloth Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13895, 1); // Leather Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Schuttgart Supply Box - Belt: Grade B, C
private void use13721(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13894, 1); // Cloth Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13895, 1); // Leather Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Gludio Supply Box - Belt: Grade S, A
private void use14549(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13896, 1); // Iron Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13897, 1); // Mithril Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Dion Supply Box - Belt: Grade S, A
private void use14550(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13896, 1); // Iron Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13897, 1); // Mithril Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Giran Supply Box - Belt: Grade S, A
private void use14551(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13896, 1); // Iron Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13897, 1); // Mithril Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Oren Supply Box - Belt: Grade S, A
private void use14552(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13896, 1); // Iron Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13897, 1); // Mithril Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Aden Supply Box - Belt: Grade S, A
private void use14553(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13896, 1); // Iron Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13897, 1); // Mithril Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Innadril Supply Box - Belt: Grade S, A
private void use14554(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13896, 1); // Iron Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13897, 1); // Mithril Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Goddard Supply Box - Belt: Grade S, A
private void use14555(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13896, 1); // Iron Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13897, 1); // Mithril Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Rune Supply Box - Belt: Grade S, A
private void use14556(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13896, 1); // Iron Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13897, 1); // Mithril Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Schuttgart Supply Box - Belt: Grade S, A
private void use14557(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13896, 1); // Iron Belt
else if(Rnd.chance(50))
Functions.addItem(player, 13897, 1); // Mithril Belt
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// ****** Magic Pins ******
// Gludio Supply Box - Magic Pin: Grade B, C
private void use13695(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13898, 1); // Sealed Magic Pin (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13899, 1); // Sealed Magic Pin (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Dion Supply Box - Magic Pin: Grade B, C
private void use13696(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13898, 1); // Sealed Magic Pin (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13899, 1); // Sealed Magic Pin (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Giran Supply Box - Magic Pin: Grade B, C
private void use13697(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13898, 1); // Sealed Magic Pin (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13899, 1); // Sealed Magic Pin (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Oren Supply Box - Magic Pin: Grade B, C
private void use13698(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13898, 1); // Sealed Magic Pin (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13899, 1); // Sealed Magic Pin (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Aden Supply Box - Magic Pin: Grade B, C
private void use13699(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13898, 1); // Sealed Magic Pin (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13899, 1); // Sealed Magic Pin (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Innadril Supply Box - Magic Pin: Grade B, C
private void use13700(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13898, 1); // Sealed Magic Pin (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13899, 1); // Sealed Magic Pin (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Goddard Supply Box - Magic Pin: Grade B, C
private void use13701(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13898, 1); // Sealed Magic Pin (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13899, 1); // Sealed Magic Pin (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Rune Supply Box - Magic Pin: Grade B, C
private void use13702(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13898, 1); // Sealed Magic Pin (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13899, 1); // Sealed Magic Pin (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Schuttgart Supply Box - Magic Pin: Grade B, C
private void use13703(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13898, 1); // Sealed Magic Pin (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13899, 1); // Sealed Magic Pin (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Gludio Supply Box - Magic Pin: Grade S, A
private void use14531(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13900, 1); // Sealed Magic Pin (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13901, 1); // Sealed Magic Pin (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Dion Supply Box - Magic Pin: Grade S, A
private void use14532(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13900, 1); // Sealed Magic Pin (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13901, 1); // Sealed Magic Pin (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Giran Supply Box - Magic Pin: Grade S, A
private void use14533(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13900, 1); // Sealed Magic Pin (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13901, 1); // Sealed Magic Pin (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Oren Supply Box - Magic Pin: Grade S, A
private void use14534(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13900, 1); // Sealed Magic Pin (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13901, 1); // Sealed Magic Pin (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Aden Supply Box - Magic Pin: Grade S, A
private void use14535(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13900, 1); // Sealed Magic Pin (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13901, 1); // Sealed Magic Pin (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Innadril Supply Box - Magic Pin: Grade S, A
private void use14536(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13900, 1); // Sealed Magic Pin (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13901, 1); // Sealed Magic Pin (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Goddard Supply Box - Magic Pin: Grade S, A
private void use14537(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13900, 1); // Sealed Magic Pin (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13901, 1); // Sealed Magic Pin (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Rune Supply Box - Magic Pin: Grade S, A
private void use14538(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13900, 1); // Sealed Magic Pin (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13901, 1); // Sealed Magic Pin (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Schuttgart Supply Box - Magic Pin: Grade S, A
private void use14539(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13900, 1); // Sealed Magic Pin (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13901, 1); // Sealed Magic Pin (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// ****** Magic Pouchs ******
// Gludio Supply Box - Magic Pouch: Grade B, C
private void use13704(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13918, 1); // Sealed Magic Pouch (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13919, 1); // Sealed Magic Pouch (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Dion Supply Box - Magic Pouch: Grade B, C
private void use13705(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13918, 1); // Sealed Magic Pouch (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13919, 1); // Sealed Magic Pouch (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Giran Supply Box - Magic Pouch: Grade B, C
private void use13706(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13918, 1); // Sealed Magic Pouch (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13919, 1); // Sealed Magic Pouch (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Oren Supply Box - Magic Pouch: Grade B, C
private void use13707(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13918, 1); // Sealed Magic Pouch (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13919, 1); // Sealed Magic Pouch (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Aden Supply Box - Magic Pouch: Grade B, C
private void use13708(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13918, 1); // Sealed Magic Pouch (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13919, 1); // Sealed Magic Pouch (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Innadril Supply Box - Magic Pouch: Grade B, C
private void use13709(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13918, 1); // Sealed Magic Pouch (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13919, 1); // Sealed Magic Pouch (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Goddard Supply Box - Magic Pouch: Grade B, C
private void use13710(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13918, 1); // Sealed Magic Pouch (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13919, 1); // Sealed Magic Pouch (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Rune Supply Box - Magic Pouch: Grade B, C
private void use13711(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13918, 1); // Sealed Magic Pouch (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13919, 1); // Sealed Magic Pouch (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Schuttgart Supply Box - Magic Pouch: Grade B, C
private void use13712(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13918, 1); // Sealed Magic Pouch (C-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13919, 1); // Sealed Magic Pouch (B-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Gludio Supply Box - Magic Pouch: Grade S, A
private void use14540(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13920, 1); // Sealed Magic Pouch (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13921, 1); // Sealed Magic Pouch (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Dion Supply Box - Magic Pouch: Grade S, A
private void use14541(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13920, 1); // Sealed Magic Pouch (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13921, 1); // Sealed Magic Pouch (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Giran Supply Box - Magic Pouch: Grade S, A
private void use14542(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13920, 1); // Sealed Magic Pouch (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13921, 1); // Sealed Magic Pouch (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Oren Supply Box - Magic Pouch: Grade S, A
private void use14543(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13920, 1); // Sealed Magic Pouch (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13921, 1); // Sealed Magic Pouch (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Aden Supply Box - Magic Pouch: Grade S, A
private void use14544(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13920, 1); // Sealed Magic Pouch (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13921, 1); // Sealed Magic Pouch (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Innadril Supply Box - Magic Pouch: Grade S, A
private void use14545(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13920, 1); // Sealed Magic Pouch (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13921, 1); // Sealed Magic Pouch (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Goddard Supply Box - Magic Pouch: Grade S, A
private void use14546(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13920, 1); // Sealed Magic Pouch (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13921, 1); // Sealed Magic Pouch (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Rune Supply Box - Magic Pouch: Grade S, A
private void use14547(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13920, 1); // Sealed Magic Pouch (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13921, 1); // Sealed Magic Pouch (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Schuttgart Supply Box - Magic Pouch: Grade S, A
private void use14548(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 13920, 1); // Sealed Magic Pouch (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 13921, 1); // Sealed Magic Pouch (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// ****** Magic Rune Clip ******
// Gludio Supply Box - Magic Rune Clip: Grade S, A
private void use14884(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 14902, 1); // Sealed Magic Rune Clip (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 14903, 1); // Sealed Magic Rune Clip (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Dion Supply Box - Magic Rune Clip: Grade S, A
private void use14885(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 14902, 1); // Sealed Magic Rune Clip (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 14903, 1); // Sealed Magic Rune Clip (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Giran Supply Box - Magic Rune Clip: Grade S, A
private void use14886(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 14902, 1); // Sealed Magic Rune Clip (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 14903, 1); // Sealed Magic Rune Clip (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Oren Supply Box - Magic Rune Clip: Grade S, A
private void use14887(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 14902, 1); // Sealed Magic Rune Clip (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 14903, 1); // Sealed Magic Rune Clip (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Aden Supply Box - Magic Rune Clip: Grade S, A
private void use14888(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 14902, 1); // Sealed Magic Rune Clip (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 14903, 1); // Sealed Magic Rune Clip (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Innadril Supply Box - Magic Rune Clip: Grade S, A
private void use14889(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 14902, 1); // Sealed Magic Rune Clip (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 14903, 1); // Sealed Magic Rune Clip (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Goddard Supply Box - Magic Rune Clip: Grade S, A
private void use14890(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 14902, 1); // Sealed Magic Rune Clip (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 14903, 1); // Sealed Magic Rune Clip (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Rune Supply Box - Magic Rune Clip: Grade S, A
private void use14891(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 14902, 1); // Sealed Magic Rune Clip (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 14903, 1); // Sealed Magic Rune Clip (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Schuttgart Supply Box - Magic Rune Clip: Grade S, A
private void use14892(Player player, boolean ctrl)
{
if(Rnd.chance(50))
Functions.addItem(player, 14902, 1); // Sealed Magic Rune Clip (A-Grade)
else if(Rnd.chance(50))
Functions.addItem(player, 14903, 1); // Sealed Magic Rune Clip (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// ****** Magic Ornament ******
// Gludio Supply Box - Magic Ornament: Grade S, A
private void use14893(Player player, boolean ctrl)
{
if(Rnd.chance(20))
Functions.addItem(player, 14904, 1); // Sealed Magic Ornament (A-Grade)
else if(Rnd.chance(20))
Functions.addItem(player, 14905, 1); // Sealed Magic Ornament (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Dion Supply Box - Magic Ornament: Grade S, A
private void use14894(Player player, boolean ctrl)
{
if(Rnd.chance(20))
Functions.addItem(player, 14904, 1); // Sealed Magic Ornament (A-Grade)
else if(Rnd.chance(20))
Functions.addItem(player, 14905, 1); // Sealed Magic Ornament (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Giran Supply Box - Magic Ornament: Grade S, A
private void use14895(Player player, boolean ctrl)
{
if(Rnd.chance(20))
Functions.addItem(player, 14904, 1); // Sealed Magic Ornament (A-Grade)
else if(Rnd.chance(20))
Functions.addItem(player, 14905, 1); // Sealed Magic Ornament (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Oren Supply Box - Magic Ornament: Grade S, A
private void use14896(Player player, boolean ctrl)
{
if(Rnd.chance(20))
Functions.addItem(player, 14904, 1); // Sealed Magic Ornament (A-Grade)
else if(Rnd.chance(20))
Functions.addItem(player, 14905, 1); // Sealed Magic Ornament (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Aden Supply Box - Magic Ornament: Grade S, A
private void use14897(Player player, boolean ctrl)
{
if(Rnd.chance(20))
Functions.addItem(player, 14904, 1); // Sealed Magic Ornament (A-Grade)
else if(Rnd.chance(20))
Functions.addItem(player, 14905, 1); // Sealed Magic Ornament (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Innadril Supply Box - Magic Ornament: Grade S, A
private void use14898(Player player, boolean ctrl)
{
if(Rnd.chance(20))
Functions.addItem(player, 14904, 1); // Sealed Magic Ornament (A-Grade)
else if(Rnd.chance(20))
Functions.addItem(player, 14905, 1); // Sealed Magic Ornament (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Goddard Supply Box - Magic Ornament: Grade S, A
private void use14899(Player player, boolean ctrl)
{
if(Rnd.chance(20))
Functions.addItem(player, 14904, 1); // Sealed Magic Ornament (A-Grade)
else if(Rnd.chance(20))
Functions.addItem(player, 14905, 1); // Sealed Magic Ornament (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Rune Supply Box - Magic Ornament: Grade S, A
private void use14900(Player player, boolean ctrl)
{
if(Rnd.chance(20))
Functions.addItem(player, 14904, 1); // Sealed Magic Ornament (A-Grade)
else if(Rnd.chance(20))
Functions.addItem(player, 14905, 1); // Sealed Magic Ornament (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Schuttgart Supply Box - Magic Ornament: Grade S, A
private void use14901(Player player, boolean ctrl)
{
if(Rnd.chance(20))
Functions.addItem(player, 14904, 1); // Sealed Magic Ornament (A-Grade)
else if(Rnd.chance(20))
Functions.addItem(player, 14905, 1); // Sealed Magic Ornament (S-Grade)
else
player.sendPacket(Msg.THERE_WAS_NOTHING_FOUND_INSIDE_OF_THAT);
}

// Gift from Santa Claus
private void use14616(Player player, boolean ctrl)
{
// Santa Claus' Weapon Exchange Ticket - 12 Hour Expiration Period
Functions.addItem(player, 20107, 1);

// Christmas Red Sock
Functions.addItem(player, 14612, 1);

// Special Christmas Tree
if(Rnd.chance(30))
Functions.addItem(player, 5561, 1);

// Christmas Tree
if(Rnd.chance(50))
Functions.addItem(player, 5560, 1);

// Agathion Seal Bracelet - Rudolph (постоянный предмет)
if(Functions.getItemCount(player, 10606) == 0 && Rnd.chance(5))
Functions.addItem(player, 10606, 1);

// Agathion Seal Bracelet: Rudolph - 30 дней со скилом на виталити
if(Functions.getItemCount(player, 20094) == 0 && Rnd.chance(3))
Functions.addItem(player, 20094, 1);

// Chest of Experience (Event)
if(Rnd.chance(30))
Functions.addItem(player, 20575, 1);
}

// Chest of Experience (Event)
private void use20575(Player player, boolean ctrl)
{
Functions.addItem(player, 20335, 1); // Rune of Experience: 30% - 5 hour limited time
Functions.addItem(player, 20341, 1); // Rune of SP 30% - 5 Hour Expiration Period
}

// Nepal Snow Agathion Pack
private void use20804(Player player, boolean ctrl)
{
Functions.addItem(player, 20782, 1);
}

// Nepal Snow Agathion 7-Day Pack - Snow's Haste
private void use20807(Player player, boolean ctrl)
{
Functions.addItem(player, 20785, 1);
}

// Round Ball Snow Agathion Pack
private void use20805(Player player, boolean ctrl)
{
Functions.addItem(player, 20783, 1);
}

// Round Ball Snow Agathion 7-Day Pack - Snow's Acumen
private void use20808(Player player, boolean ctrl)
{
Functions.addItem(player, 20786, 1);
}

// Ladder Snow Agathion Pack
private void use20806(Player player, boolean ctrl)
{
Functions.addItem(player, 20784, 1);
}

// Ladder Snow Agathion 7-Day Pack - Snow's Wind Walk
private void use20809(Player player, boolean ctrl)
{
Functions.addItem(player, 20787, 1);
}

// Iken Agathion Pack
private void use20842(Player player, boolean ctrl)
{
Functions.addItem(player, 20818, 1);
}

// Iken Agathion 7-Day Pack Prominent Outsider Adventurer's Ability
private void use20843(Player player, boolean ctrl)
{
Functions.addItem(player, 20819, 1);
}

// Lana Agathion Pack
private void use20844(Player player, boolean ctrl)
{
Functions.addItem(player, 20820, 1);
}

// Lana Agathion 7-Day Pack Prominent Outsider Adventurer's Ability
private void use20845(Player player, boolean ctrl)
{
Functions.addItem(player, 20821, 1);
}

// Gnocian Agathion Pack
private void use20846(Player player, boolean ctrl)
{
Functions.addItem(player, 20822, 1);
}

// Gnocian Agathion 7-Day Pack Prominent Outsider Adventurer's Ability
private void use20847(Player player, boolean ctrl)
{
Functions.addItem(player, 20823, 1);
}

// Orodriel Agathion Pack
private void use20848(Player player, boolean ctrl)
{
Functions.addItem(player, 20824, 1);
}

// Orodriel Agathion 7-Day Pack Prominent Outsider Adventurer's Ability
private void use20849(Player player, boolean ctrl)
{
Functions.addItem(player, 20825, 1);
}

// Lakinos Agathion Pack
private void use20850(Player player, boolean ctrl)
{
Functions.addItem(player, 20826, 1);
}

// Lakinos Agathion 7-Day Pack Prominent Outsider Adventurer's Ability
private void use20851(Player player, boolean ctrl)
{
Functions.addItem(player, 20827, 1);
}

// Mortia Agathion Pack
private void use20852(Player player, boolean ctrl)
{
Functions.addItem(player, 20828, 1);
}

// Mortia Agathion 7-Day Pack Prominent Outsider Adventurer's Ability
private void use20853(Player player, boolean ctrl)
{
Functions.addItem(player, 20829, 1);
}

// Hayance Agathion Pack
private void use20854(Player player, boolean ctrl)
{
Functions.addItem(player, 20830, 1);
}

// Hayance Agathion 7-Day Pack Prominent Outsider Adventurer's Ability
private void use20855(Player player, boolean ctrl)
{
Functions.addItem(player, 20831, 1);
}

// Meruril Agathion Pack
private void use20856(Player player, boolean ctrl)
{
Functions.addItem(player, 20832, 1);
}

// Meruril Agathion 7-Day Pack Prominent Outsider Adventurer's Ability
private void use20857(Player player, boolean ctrl)
{
Functions.addItem(player, 20833, 1);
}

// Taman ze Lapatui Agathion Pack
private void use20858(Player player, boolean ctrl)
{
Functions.addItem(player, 20834, 1);
}

// Taman ze Lapatui Agathion 7-Day Pack Prominent Outsider Adventurer's Ability
private void use20859(Player player, boolean ctrl)
{
Functions.addItem(player, 20835, 1);
}

// Kaurin Agathion Pack
private void use20860(Player player, boolean ctrl)
{
Functions.addItem(player, 20836, 1);
}

// Kaurin Agathion 7-Day Pack Prominent Outsider Adventurer's Ability
private void use20861(Player player, boolean ctrl)
{
Functions.addItem(player, 20837, 1);
}

// Ahertbein Agathion Pack
private void use20862(Player player, boolean ctrl)
{
Functions.addItem(player, 20838, 1);
}

// Ahertbein Agathion 7-Day Pack Prominent Outsider Adventurer's Ability
private void use20863(Player player, boolean ctrl)
{
Functions.addItem(player, 20839, 1);
}

// Naonin Agathion Pack
private void use20864(Player player, boolean ctrl)
{
Functions.addItem(player, 20840, 1);
}

// Rocket Gun Hat Pack Continuous Fireworks
private void use20811(Player player, boolean ctrl)
{
Functions.addItem(player, 20789, 1);
}

// Yellow Paper Hat 7-Day Pack Bless the Body
private void use20812(Player player, boolean ctrl)
{
Functions.addItem(player, 20790, 1);
}

// Pink Paper Mask Set 7-Day Pack Bless the Soul
private void use20813(Player player, boolean ctrl)
{
Functions.addItem(player, 20791, 1);
}

// Flavorful Cheese Hat Pack
private void use20814(Player player, boolean ctrl)
{
Functions.addItem(player, 20792, 1);
}

// Sweet Cheese Hat Pack
private void use20815(Player player, boolean ctrl)
{
Functions.addItem(player, 20793, 1);
}

// Flavorful Cheese Hat 7-Day Pack Scent of Flavorful Cheese
private void use20816(Player player, boolean ctrl)
{
Functions.addItem(player, 20794, 1);
}

// Sweet Cheese Hat 7-Day Pack Scent of Sweet Cheese
private void use20817(Player player, boolean ctrl)
{
Functions.addItem(player, 20795, 1);
}

// Flame Box Pack
private void use20810(Player player, boolean ctrl)
{
Functions.addItem(player, 20725, 1);
}

// Naonin Agathion 7-Day Pack Prominent Outsider Adventurer's Ability
private void use20865(Player player, boolean ctrl)
{
Functions.addItem(player, 20841, 1);
}

// Shiny Mask of Giant Hercules 7 day Pack
private void use20748(Player player, boolean ctrl)
{
Functions.addItem(player, 20743, 1);
}

// Shiny Mask of Silent Scream 7 day Pack
private void use20749(Player player, boolean ctrl)
{
Functions.addItem(player, 20744, 1);
}

// Shiny Spirit of Wrath Mask 7 day Pack
private void use20750(Player player, boolean ctrl)
{
Functions.addItem(player, 20745, 1);
}

// Shiny Undecaying Corpse Mask 7 Day Pack
private void use20751(Player player, boolean ctrl)
{
Functions.addItem(player, 20746, 1);
}

// Shiny Planet X235 Alien Mask 7 day Pack
private void use20752(Player player, boolean ctrl)
{
Functions.addItem(player, 20747, 1);
}

// Simple Valentine Cake
private void use20195(Player player, boolean ctrl)
{
// Velvety Valentine Cake
if(Rnd.chance(20))
Functions.addItem(player, 20196, 1);
else
{
// Dragon Bomber Transformation Scroll
// Unicorn Transformation Scroll
if(Rnd.chance(5))
{
Functions.addItem(player, 20371, 1);
Functions.addItem(player, 20367, 1);
}
// Quick Healing Potion
if(Rnd.chance(10))
Functions.addItem(player, 1540, 1);

// Greater Healing Potion
if(Rnd.chance(15))
Functions.addItem(player, 1539, 1);
}
}

// Velvety Valentine Cake
private void use20196(Player player, boolean ctrl)
{
// Delectable Valentine Cake
if(Rnd.chance(15))
Functions.addItem(player, 20197, 1);
else
{
// Scroll: Enchant Armor (C)
if(Rnd.chance(10))
Functions.addItem(player, 952, 1);

// Scroll: Enchant Armor (B)
if(Rnd.chance(5))
Functions.addItem(player, 948, 1);

// Blessed Scroll of Escape
if(Rnd.chance(10))
Functions.addItem(player, 1538, 1);

// Blessed Scroll of Resurrection
if(Rnd.chance(5))
Functions.addItem(player, 3936, 1);

// Agathion of Love - 3 Day Expiration Period
if(Rnd.chance(10))
Functions.addItem(player, 20200, 1);
}
}

// Delectable Valentine Cake
private void use20197(Player player, boolean ctrl)
{
// Decadent Valentine Cake
if(Rnd.chance(10))
Functions.addItem(player, 20198, 1);
else
{
// Scroll: Enchant Weapon (C)
if(Rnd.chance(10))
Functions.addItem(player, 951, 1);

// Scroll: Enchant Weapon (B)
if(Rnd.chance(5))
Functions.addItem(player, 947, 1);

// Agathion of Love - 7 Day Expiration Period
if(Rnd.chance(5))
Functions.addItem(player, 20201, 1);
}
}

// Decadent Valentine Cake
private void use20198(Player player, boolean ctrl)
{
// Scroll: Enchant Weapon (S)
if(Rnd.chance(5))
Functions.addItem(player, 959, 1);

// Scroll: Enchant Weapon (A)
if(Rnd.chance(10))
Functions.addItem(player, 729, 1);

// Agathion of Love - 15 Day Expiration Period
if(Rnd.chance(10))
Functions.addItem(player, 20202, 1);

// Agathion of Love - 30 Day Expiration Period
if(Rnd.chance(5))
Functions.addItem(player, 20203, 1);
}

private static final int[] SOI_books = {14209, // Forgotten Scroll - Hide
14212, // Forgotten Scroll - Enlightenment - Wizard
14213, // Forgotten Scroll - Enlightenment - Healer
10554, // Forgotten Scroll - Anti-Magic Armor
14208, // Forgotten Scroll - Final Secret
10577 // Forgotten Scroll - Excessive Loyalty
};

// Jewel Ornamented Duel Supplies
private void use13777(Player player, boolean ctrl)
{
int rnd = Rnd.get(100);
if(rnd <= 65)
{
Functions.addItem(player, 9630, 3); // 3 Orichalcum
Functions.addItem(player, 9629, 3); // 3 Adamantine
Functions.addItem(player, 9628, 4); // 4 Leonard
Functions.addItem(player, 8639, 6); // 6 Elixir of CP (S-Grade)
Functions.addItem(player, 8627, 6); // 6 Elixir of Life (S-Grade)
Functions.addItem(player, 8633, 6); // 6 Elixir of Mental Strength (S-Grade)
}
else if(rnd <= 95)
Functions.addItem(player, SOI_books[Rnd.get(SOI_books.length)], 1);
else
Functions.addItem(player, 14027, 1); // Collection Agathion Summon Bracelet
}

// Mother-of-Pearl Ornamented Duel Supplies
private void use13778(Player player, boolean ctrl)
{
int rnd = Rnd.get(100);
if(rnd <= 65)
{
Functions.addItem(player, 9630, 2); // 3 Orichalcum
Functions.addItem(player, 9629, 2); // 3 Adamantine
Functions.addItem(player, 9628, 3); // 4 Leonard
Functions.addItem(player, 8639, 5); // 5 Elixir of CP (S-Grade)
Functions.addItem(player, 8627, 5); // 5 Elixir of Life (S-Grade)
Functions.addItem(player, 8633, 5); // 5 Elixir of Mental Strength (S-Grade)
}
else if(rnd <= 95)
Functions.addItem(player, SOI_books[Rnd.get(SOI_books.length)], 1);
else
Functions.addItem(player, 14027, 1); // Collection Agathion Summon Bracelet
}

// Gold-Ornamented Duel Supplies
private void use13779(Player player, boolean ctrl)
{
int rnd = Rnd.get(100);
if(rnd <= 65)
{
Functions.addItem(player, 9630, 1); // 1 Orichalcum
Functions.addItem(player, 9629, 1); // 1 Adamantine
Functions.addItem(player, 9628, 2); // 2 Leonard
Functions.addItem(player, 8639, 4); // 4 Elixir of CP (S-Grade)
Functions.addItem(player, 8627, 4); // 4 Elixir of Life (S-Grade)
Functions.addItem(player, 8633, 4); // 4 Elixir of Mental Strength (S-Grade)
}
else if(rnd <= 95)
Functions.addItem(player, SOI_books[Rnd.get(SOI_books.length)], 1);
else
Functions.addItem(player, 14027, 1); // Collection Agathion Summon Bracelet
}

// Silver-Ornamented Duel Supplies
private void use13780(Player player, boolean ctrl)
{
Functions.addItem(player, 8639, 4); // 4 Elixir of CP (S-Grade)
Functions.addItem(player, 8627, 4); // 4 Elixir of Life (S-Grade)
Functions.addItem(player, 8633, 4); // 4 Elixir of Mental Strength (S-Grade)
}

// Bronze-Ornamented Duel Supplies
private void use13781(Player player, boolean ctrl)
{
Functions.addItem(player, 8639, 4); // 4 Elixir of CP (S-Grade)
Functions.addItem(player, 8627, 4); // 4 Elixir of Life (S-Grade)
Functions.addItem(player, 8633, 4); // 4 Elixir of Mental Strength (S-Grade)
}

// Non-Ornamented Duel Supplies
private void use13782(Player player, boolean ctrl)
{
Functions.addItem(player, 8639, 3); // 3 Elixir of CP (S-Grade)
Functions.addItem(player, 8627, 3); // 3 Elixir of Life (S-Grade)
Functions.addItem(player, 8633, 3); // 3 Elixir of Mental Strength (S-Grade)
}

// Weak-Looking Duel Supplies
private void use13783(Player player, boolean ctrl)
{
Functions.addItem(player, 8639, 3); // 3 Elixir of CP (S-Grade)
Functions.addItem(player, 8627, 3); // 3 Elixir of Life (S-Grade)
Functions.addItem(player, 8633, 3); // 3 Elixir of Mental Strength (S-Grade)
}

// Sad-Looking Duel Supplies
private void use13784(Player player, boolean ctrl)
{
Functions.addItem(player, 8639, 3); // 3 Elixir of CP (S-Grade)
Functions.addItem(player, 8627, 3); // 3 Elixir of Life (S-Grade)
Functions.addItem(player, 8633, 3); // 3 Elixir of Mental Strength (S-Grade)
}

// Poor-Looking Duel Supplies
private void use13785(Player player, boolean ctrl)
{
Functions.addItem(player, 8639, 2); // 2 Elixir of CP (S-Grade)
Functions.addItem(player, 8627, 2); // 2 Elixir of Life (S-Grade)
Functions.addItem(player, 8633, 2); // 2 Elixir of Mental Strength (S-Grade)
}

// Worthless Duel Supplies
private void use13786(Player player, boolean ctrl)
{
Functions.addItem(player, 8639, 1); // 1 Elixir of CP (S-Grade)
Functions.addItem(player, 8627, 1); // 1 Elixir of Life (S-Grade)
Functions.addItem(player, 8633, 1); // 1 Elixir of Mental Strength (S-Grade)
}

// Kahman's Supply Box
private void use14849(Player player, boolean ctrl)
{
int[] list = new int[]{9625, 9626}; // codex_of_giant_forgetting, codex_of_giant_training
int[] chances = new int[]{100, 80};
int[] counts = new int[]{1, 1};
extract_item_r(list, counts, chances, player);
}

// Big Stakato Cocoon
private void use14834(Player player, boolean ctrl)
{
int[][] items = new int[][]{{9575, 1}, // rare_80_s
{10485, 1}, // rare_82_s
{10577, 1}, // sb_excessive_loyalty
{14209, 1}, // sb_hide1
{14208, 1}, // sb_final_secret1
{14212, 1}, // sb_enlightenment_wizard1
{960, 1}, // scrl_of_ench_am_s
{9625, 1}, // codex_of_giant_forgetting
{9626, 1}, // codex_of_giant_training
{959, 1}, // scrl_of_ench_wp_s
{10373, 1}, // rp_icarus_sowsword_i
{10374, 1}, // rp_icarus_disperser_i
{10375, 1}, // rp_icarus_spirits_i
{10376, 1}, // rp_icarus_heavy_arms_i
{10377, 1}, // rp_icarus_trident_i
{10378, 1}, // rp_icarus_chopper_i
{10379, 1}, // rp_icarus_knuckle_i
{10380, 1}, // rp_icarus_wand_i
{10381, 1}}; // rp_icarus_accipiter_i
double[] chances = new double[]{2.77, 2.31, 3.2, 3.2, 3.2, 3.2, 6.4, 3.2, 2.13, 0.64, 1.54, 1.54, 1.54, 1.54, 1.54, 1.54, 1.54, 1.54, 1.54};
extractRandomOneItem(player, items, chances);
}

// Small Stakato Cocoon
private void use14833(Player player, boolean ctrl)
{
int[][] items = new int[][]{{9575, 1}, // rare_80_s
{10485, 1}, // rare_82_s
{10577, 1}, // sb_excessive_loyalty
{14209, 1}, // sb_hide1
{14208, 1}, // sb_final_secret1
{14212, 1}, // sb_enlightenment_wizard1
{960, 1}, // scrl_of_ench_am_s
{9625, 1}, // codex_of_giant_forgetting
{9626, 1}, // codex_of_giant_training
{959, 1}, // scrl_of_ench_wp_s
{10373, 1}, // rp_icarus_sowsword_i
{10374, 1}, // rp_icarus_disperser_i
{10375, 1}, // rp_icarus_spirits_i
{10376, 1}, // rp_icarus_heavy_arms_i
{10377, 1}, // rp_icarus_trident_i
{10378, 1}, // rp_icarus_chopper_i
{10379, 1}, // rp_icarus_knuckle_i
{10380, 1}, // rp_icarus_wand_i
{10381, 1}}; // rp_icarus_accipiter_i
double[] chances = new double[]{2.36, 1.96, 2.72, 2.72, 2.72, 2.72, 5.44, 2.72, 1.81, 0.54, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31};
extractRandomOneItem(player, items, chances);
}

private void use13988(Player player, boolean ctrl)
{
int[] list = new int[]{9442, 9443, 9444, 9445, 9446, 9447, 9448, 9450, 10252, 10253, 10215, 10216, 10217, 10218, 10219, 10220, 10221, 10222, 10223};
int[] chances = new int[]{64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 40, 40, 40, 40, 40, 40, 40, 40, 40};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
extract_item_r(list, counts, chances, player);
}

private void use13989(Player player, boolean ctrl)
{
int[] list = new int[]{9514, 9515, 9516, 9517, 9518, 9519, 9520, 9521, 9522, 9523, 9524, 9525, 9526, 9527, 9528};
int[] chances = new int[]{50, 63, 70, 75, 75, 50, 63, 70, 75, 75, 50, 63, 70, 75, 75};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
extract_item_r(list, counts, chances, player);
}

// Pathfinder's Reward - D-Grade
private void use13003(Player player, boolean ctrl)
{
if(Rnd.chance(3.2))
Functions.addItem(player, 947, 1); // Scroll: Enchant Weapon B
}

// Pathfinder's Reward - C-Grade
private void use13004(Player player, boolean ctrl)
{
if(Rnd.chance(1.6111))
Functions.addItem(player, 729, 1); // Scroll: Enchant Weapon A
}

// Pathfinder's Reward - B-Grade
private void use13005(Player player, boolean ctrl)
{
if(Rnd.chance(1.14))
Functions.addItem(player, 959, 1); // Scroll: Enchant Weapon S
}

// Pathfinder's Reward - A-Grade
private void use13006(Player player, boolean ctrl)
{
int[][] items = new int[][]{{9546, 1}, {9548, 1}, {9550, 1}, {959, 1}, {9442, 1}, {9443, 1}, {9444, 1}, {9445, 1}, {9446, 1}, {9447, 1}, {9448, 1}, {9449, 1}, {9450, 1}, {10252, 1}, {10253, 1}, {15645, 1}, {15646, 1}, {15647, 1}};
double[] chances = new double[]{19.8, 19.8, 19.8, 1.98, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 1, 1, 1};
extractRandomOneItem(player, items, chances);
}

// Pathfinder's Reward - S-Grade
private void use13007(Player player, boolean ctrl)
{
int[][] items = new int[][]{{9546, 1}, {9548, 1}, {9550, 1}, {959, 1}, {10215, 1}, {10216, 1}, {10217, 1}, {10218, 1}, {10219, 1}, {10220, 1}, {10221, 1}, {10222, 1}, {10223, 1}};
double[] chances = new double[]{26.4, 26.4, 26.4, 3.84, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13};
extractRandomOneItem(player, items, chances);
}

//Pathfinder's Reward - AU Karm
private void use13270(Player player, boolean ctrl)
{
if(Rnd.chance(30))
Functions.addItem(player, 13236, 1);
}

//Pathfinder's Reward - AR Karm
private void use13271(Player player, boolean ctrl)
{
if(Rnd.chance(30))
Functions.addItem(player, 13237, 1);
}

//Pathfinder's Reward - AE Karm
private void use13272(Player player, boolean ctrl)
{
if(Rnd.chance(30))
Functions.addItem(player, 13238, 1);
}

private void use13990(Player player, boolean ctrl)
{
int[] list = new int[]{6364, 6365, 6366, 6367, 6368, 6369, 6370, 6371, 6372, 6534, 6579, 7575};
int[] chances = new int[]{83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
extract_item_r(list, counts, chances, player);
}

private void use13991(Player player, boolean ctrl)
{
int[] list = new int[]{6674, 6675, 6676, 6677, 6679, 6680, 6681, 6682, 6683, 6684, 6685, 6686, 6687};
int[] chances = new int[]{70, 80, 95, 95, 90, 55, 95, 95, 90, 55, 95, 95, 90};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
extract_item_r(list, counts, chances, player);
}

private void use13992(Player player, boolean ctrl)
{
int[] list = new int[]{6724, 6725, 6726};
int[] chances = new int[]{25, 32, 42};
int[] counts = new int[]{1, 1, 1};
extract_item_r(list, counts, chances, player);
}

//Droph's Support Items
private void use14850(Player player, boolean ctrl)
{
int rndAA = Rnd.get(80000, 100000);
Functions.addItem(player, 5575, rndAA); // Ancient Adena
}

//Greater Elixir Gift Box (No-Grade)
private void use14713(Player player, boolean ctrl)
{
Functions.addItem(player, 14682, 50); // Greater Elixir of Life (No-Grade)
Functions.addItem(player, 14688, 50); // Greater Elixir of Mental Strength (No-Grade)
Functions.addItem(player, 14694, 50); // Greater Elixir of CP (No Grade)
}

//Greater Elixir Gift Box (D-Grade)
private void use14714(Player player, boolean ctrl)
{
Functions.addItem(player, 14683, 50); // Greater Elixir of Life (D-Grade)
Functions.addItem(player, 14689, 50); // Greater Elixir of Mental Strength (D-Grade)
Functions.addItem(player, 14695, 50); // Greater Elixir of CP (D Grade)
}

//Greater Elixir Gift Box (C-Grade)
private void use14715(Player player, boolean ctrl)
{
Functions.addItem(player, 14684, 50); // Greater Elixir of Life (C-Grade)
Functions.addItem(player, 14690, 50); // Greater Elixir of Mental Strength (C-Grade)
Functions.addItem(player, 14696, 50); // Greater Elixir of CP (C Grade)
}

//Greater Elixir Gift Box (B-Grade)
private void use14716(Player player, boolean ctrl)
{
Functions.addItem(player, 14685, 50); // Greater Elixir of Life (B-Grade)
Functions.addItem(player, 14691, 50); // Greater Elixir of Mental Strength (B-Grade)
Functions.addItem(player, 14697, 50); // Greater Elixir of CP (B Grade)
}

//Greater Elixir Gift Box (A-Grade)
private void use14717(Player player, boolean ctrl)
{
Functions.addItem(player, 14686, 50); // Greater Elixir of Life (A-Grade)
Functions.addItem(player, 14692, 50); // Greater Elixir of Mental Strength (A-Grade)
Functions.addItem(player, 14698, 50); // Greater Elixir of CP (A Grade)
}

//Greater Elixir Gift Box (S-Grade)
private void use14718(Player player, boolean ctrl)
{
Functions.addItem(player, 14687, 50); // Greater Elixir of Life (S-Grade)
Functions.addItem(player, 14693, 50); // Greater Elixir of Mental Strength (S-Grade)
Functions.addItem(player, 14699, 50); // Greater Elixir of CP (S Grade)
}

// Freya's Gift
private void use17138(Player player, boolean ctrl)
{
int[][] items = new int[][]{{16026, 1}, {9627, 1}, {17139, 1}, {17140, 1}, {14052, 1}, {6622, 1}, {2134, 2}, {14701, 1}};
double[] chances = new double[]{0.0001, 0.1417, 1.4172, 1.4172, 2.8345, 18.424, 21.2585, 54.5068};
extractRandomOneItem(player, items, chances);
}

// Beginner Adventurer's Treasure Sack
private void use21747(Player player, boolean ctrl)
{
int group = Rnd.get(7);
int[] items = new int[0];
if(group < 4) //Low D-Grade rewards
items = new int[]{312, 167, 220, 258, 178, 221, 123, 156, 291, 166, 274};
else if(group >= 4) //Low C-Grade rewards
items = new int[]{160, 298, 72, 193, 192, 281, 7887, 226, 2524, 191, 71, 263};

Functions.addItem(player, items[Rnd.get(items.length)], 1);
}

// Experienced Adventurer's Treasure Sack
private void use21748(Player player, boolean ctrl)
{
int group = Rnd.get(10);
int[] items = new int[0];
if(group < 4) //Low B-Grade rewards
items = new int[]{78, 2571, 300, 284, 142, 267, 229, 148, 243, 92, 7892, 91};
else if(group >= 7 && group < 9) //Low A-Grade rewards
items = new int[]{98, 5233, 80, 235, 269, 288, 7884, 2504, 150, 7899, 212};
else if(group == 9) //Low S-Grade rewards
items = new int[]{6365, 6371, 6364, 6366, 6580, 7575, 6579, 6372, 6370, 6369, 6367};

Functions.addItem(player, items[Rnd.get(items.length)], 1);
}

// Great Adventurer's Treasure Sack
private void use21749(Player player, boolean ctrl)
{
int group = Rnd.get(9);
int[] items = new int[0];
if(group < 5) //Top S-Grade rewards
items = new int[]{9447, 9384, 9449, 9380, 9448, 9443, 9450, 10253, 9445, 9442, 9446, 10004, 10252, 9376, 9444};
else if(group >= 5 && group < 8) //S80-Grade rewards
items = new int[]{10226, 10217, 10224, 10215, 10225, 10223, 10220, 10415, 10216, 10221, 10219, 10218, 10222};
else if(group == 8) //Low S84-Grade rewards
items = new int[]{13467, 13462, 13464, 13461, 13465, 13468, 13463, 13470, 13460, 52, 13466, 13459, 13457, 13469, 13458};

Functions.addItem(player, items[Rnd.get(items.length)], 1);
}

// Golden Spice Crate
private void use15482(Player player, boolean ctrl)
{
if(Rnd.chance(10))
{
Functions.addItem(player, 15474, 40);
if(Rnd.chance(50))
Functions.addItem(player, 15476, 5);
else
Functions.addItem(player, 15478, 5);
}
else
Functions.addItem(player, 15474, 50);
}

// Crystal Spice Crate
private void use15483(Player player, boolean ctrl)
{
if(Rnd.chance(10))
{
Functions.addItem(player, 15475, 40);
if(Rnd.chance(50))
Functions.addItem(player, 15477, 5);
else
Functions.addItem(player, 15479, 5);
}
else
Functions.addItem(player, 15475, 50);
}

// Gold Maned Lion Mounting Bracelet 7 Day Pack
private void use14231(Player player, boolean ctrl)
{
Functions.addItem(player, 14053, 1);
}

// Steam Beatle Mounting Bracelet 7 Day Pack
private void use14232(Player player, boolean ctrl)
{
Functions.addItem(player, 14054, 1);
}

// Olympiad Treasure Chest
private void use17169(Player player, boolean ctrl)
{
int[][] items = new int[][]{{13750, 1}, {13751, 1}, {13754, 1}, {13753, 1}, {13752, 1}, {6622, 1}, {8621, 1}};
double[] chances = new double[]{34.7, 12.3, 2.65, 1.2, 1.98, 46.5, 5.4};
if(Rnd.chance(60))
extractRandomOneItem(player, items, chances);
int[] counts = {100, 150, 200, 250, 300, 350};
Functions.addItem(player, 13722, counts[Rnd.get(counts.length)]);
}

// Birthday Present Pack
private void use21169(Player player, boolean ctrl)
{
Functions.addItem(player, 21170, 3);
Functions.addItem(player, 21595, 1);
Functions.addItem(player, 13488, 1);
}

// Pablo's Box
private void use21753(Player player, boolean ctrl)
{
int category = Rnd.get(7);
switch(category)
{
case 0:
Functions.addItem(player, 21122, 1);
break;
case 1:
Functions.addItem(player, 21118, 1);
break;
case 2:
Functions.addItem(player, 21116, 1);
break;
case 3:
Functions.addItem(player, 21114, 1);
break;
case 4:
Functions.addItem(player, 21112, 1);
break;
case 5:
Functions.addItem(player, 21120, 1);
break;
case 6:
Functions.addItem(player, 21126, 1);
break;
}
}

// Rune Jewelry Box - Talisman
private void use21752(Player player, boolean ctrl)
{
final List<Integer> talismans = new ArrayList<Integer>();

//9914-9965
for(int i = 9914; i <= 9965; i++)
if(i != 9923)
talismans.add(i);
//10416-10424
for(int i = 10416; i <= 10424; i++)
talismans.add(i);
//10518-10519
for(int i = 10518; i <= 10519; i++)
talismans.add(i);
//10533-10543
for(int i = 10533; i <= 10543; i++)
talismans.add(i);

Functions.addItem(player, talismans.get(Rnd.get(talismans.size())), 1);
}

// Vesper Weapon Box
private void use17069(Player player, boolean ctrl)
{
int category = Rnd.get(14);
switch(category)
{
case 0:
Functions.addItem(player, 13457, 1);
break;
case 1:
Functions.addItem(player, 13469, 1);
break;
case 2:
Functions.addItem(player, 13468, 1);
break;
case 3:
Functions.addItem(player, 13467, 1);
break;
case 4:
Functions.addItem(player, 13466, 1);
break;
case 5:
Functions.addItem(player, 13465, 1);
break;
case 6:
Functions.addItem(player, 13464, 1);
break;
case 7:
Functions.addItem(player, 13463, 1);
break;
case 8:
Functions.addItem(player, 13462, 1);
break;
case 9:
Functions.addItem(player, 13461, 1);
break;
case 10:
Functions.addItem(player, 13460, 1);
break;
case 11:
Functions.addItem(player, 13459, 1);
break;
case 12:
Functions.addItem(player, 13458, 1);
break;
case 13:
Functions.addItem(player, 13470, 1);
break;
}
}

// S84 Top-grade Weapon Chest
private void use22339(Player player, boolean ctrl)
{
int category = Rnd.get(15);
switch(category)
{
case 0:
Functions.addItem(player, 15553, 1);
break;
case 1:
Functions.addItem(player, 15676, 1);
break;
case 2:
Functions.addItem(player, 15558, 1);
break;
case 3:
Functions.addItem(player, 15544, 1);
break;
case 4:
Functions.addItem(player, 15680, 1);
break;
case 5:
Functions.addItem(player, 15562, 1);
break;
case 6:
Functions.addItem(player, 15548, 1);
break;
case 7:
Functions.addItem(player, 15683, 1);
break;
case 8:
Functions.addItem(player, 15551, 1);
break;
case 9:
Functions.addItem(player, 15546, 1);
break;
case 10:
Functions.addItem(player, 15677, 1);
break;
case 11:
Functions.addItem(player, 15545, 1);
break;
case 12:
Functions.addItem(player, 15549, 1);
break;
case 13:
Functions.addItem(player, 15550, 1);
break;
case 14:
Functions.addItem(player, 15554, 1);
break;
}
}

// Elegia Armor Chest
private void use22340(Player player, boolean ctrl)
{
int category = Rnd.get(15);
switch(category)
{
case 0:
Functions.addItem(player, 15577, 1);
break;
case 1:
Functions.addItem(player, 15576, 1);
break;
case 2:
Functions.addItem(player, 15575, 1);
break;
case 3:
Functions.addItem(player, 15580, 1);
break;
case 4:
Functions.addItem(player, 15579, 1);
break;
case 5:
Functions.addItem(player, 15578, 1);
break;
case 6:
Functions.addItem(player, 15574, 1);
break;
case 7:
Functions.addItem(player, 15573, 1);
break;
case 8:
Functions.addItem(player, 15572, 1);
break;
case 9:
Functions.addItem(player, 15582, 1);
break;
case 10:
Functions.addItem(player, 15583, 1);
break;
case 11:
Functions.addItem(player, 15581, 1);
break;
case 12:
Functions.addItem(player, 15586, 1);
break;
case 13:
Functions.addItem(player, 15585, 1);
break;
case 14:
Functions.addItem(player, 15584, 1);
break;
}
}

// Vorpal Armor Box
private void use22203(Player player, boolean ctrl)
{
int category = Rnd.get(15);
switch(category)
{
case 0:
Functions.addItem(player, 15594, 1);
break;
case 1:
Functions.addItem(player, 15593, 1);
break;
case 2:
Functions.addItem(player, 15592, 1);
break;
case 3:
Functions.addItem(player, 15597, 1);
break;
case 4:
Functions.addItem(player, 15596, 1);
break;
case 5:
Functions.addItem(player, 15595, 1);
break;
case 6:
Functions.addItem(player, 15591, 1);
break;
case 7:
Functions.addItem(player, 15590, 1);
break;
case 8:
Functions.addItem(player, 15589, 1);
break;
case 9:
Functions.addItem(player, 15599, 1);
break;
case 10:
Functions.addItem(player, 15600, 1);
break;
case 11:
Functions.addItem(player, 15598, 1);
break;
case 12:
Functions.addItem(player, 15603, 1);
break;
case 13:
Functions.addItem(player, 15602, 1);
break;
case 14:
Functions.addItem(player, 15601, 1);
break;
}
}

// Moirai Armor Box
private void use17073(Player player, boolean ctrl)
{
int category = Rnd.get(15);
switch(category)
{
case 0:
Functions.addItem(player, 15611, 1);
break;
case 1:
Functions.addItem(player, 15610, 1);
break;
case 2:
Functions.addItem(player, 15609, 1);
break;
case 3:
Functions.addItem(player, 15614, 1);
break;
case 4:
Functions.addItem(player, 15613, 1);
break;
case 5:
Functions.addItem(player, 15612, 1);
break;
case 6:
Functions.addItem(player, 15608, 1);
break;
case 7:
Functions.addItem(player, 15607, 1);
break;
case 8:
Functions.addItem(player, 15606, 1);
break;
case 9:
Functions.addItem(player, 15616, 1);
break;
case 10:
Functions.addItem(player, 15617, 1);
break;
case 11:
Functions.addItem(player, 15615, 1);
break;
case 12:
Functions.addItem(player, 15620, 1);
break;
case 13:
Functions.addItem(player, 15618, 1);
break;
case 14:
Functions.addItem(player, 15619, 1);
break;
}
}

// Huge Fortuna Box
public void use20515(Player player, boolean ctrl)
{
int[] list = new int[] { 22009, 20517, 22015, 20519, 22019, 20521, 10260, 10263, 10268, 8751, 8752, 9575, 8761, 8762, 9576, 22024 };
int[] counts = new int[] { 2, 1, 1, 1, 1, 1, 10, 10, 5, 1, 1, 1, 1, 1, 1, 20 };
int[] chances = new int[] { 27, 15, 1, 1, 1, 1, 4, 8, 4, 10, 8, 6, 2, 2, 1, 13 };
extract_item_r(list, counts, chances, player);
}

// Huge Fortuna Cube
public void use20516(Player player, boolean ctrl)
{
int[] list = new int[] { 22013, 20518, 22017, 20520, 22021, 20522, 10260, 10263, 10268, 8751, 8752, 9575, 8761, 8762, 9576, 22024 };
int[] counts = new int[] { 2, 1, 1, 1, 1, 1, 10, 10, 5, 1, 1, 1, 1, 1, 1, 20 };
int[] chances = new int[] { 27, 15, 1, 1, 1, 1, 4, 8, 4, 10, 8, 6, 2, 2, 1, 13 };
extract_item_r(list, counts, chances, player);
}

//Good Luck Lucky Bag
public void use20081(Player player, boolean ctrl)
{
int[] list = new int[] { 20083, 20084, 20085, 20086, 20087, 20088, 20089, 20090, 20091 };
int[] counts = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 };
int[] chances = new int[] { 5, 5, 5, 5, 5, 5, 5, 5, 5 };
extract_item_r(list, counts, chances, player);
}

//Allegra Box
public void use22310(Player player, boolean ctrl)
{
int[] list = new int[] { 21224, 22325, 10649, 21235, 13276, 14248, 6573, 951, 22006, 22010, 8753, 20392, 15440, 21085, 21602, 20220, 21166, 20798 };// реализовать, 22312, 22313 };
int[] counts = new int[] { 1, 1, 1, 3, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
int[] chances = new int[] { 4, 4, 1, 1, 1, 1, 4, 8, 4, 10, 8, 6, 2, 2, 1, 13, 3, 3, 8, 10 };
extract_item_r(list, counts, chances, player);
}

//Latus Box
public void use22311(Player player, boolean ctrl)
{
int[] list = new int[] { 20521, 20519, 20522, 20520, 6577, 6578, 9627, 9555, 9553, 9554, 9552, 9557, 9556, 10486, 8762, 9575, 8752, 9551, 9549, 9547, 13757, 13758, 13759, 13760, 13761, 13762, 13763, 13764, 13765};
int[] counts = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 10, 10, 10, 10, 10, 10, 10, 10, 10 };
int[] chances = new int[] { 1, 1, 1, 1, 2, 2, 8, 4, 4, 4, 4, 4, 4, 11, 11, 11, 11, 27, 27, 27, 15, 15, 15, 15, 15, 15, 15, 15, 15 };
extract_item_r(list, counts, chances, player);
}

// NO GRADE BEGINNER'S ADVENTURER SUPPORT PACK
private void use20635(Player player, boolean ctrl)
{
Functions.addItem(player, 8973, 1); // Shadow Item: Falchion
Functions.addItem(player, 8977, 1); // Shadow Item: Mage Staff
Functions.addItem(player, 9030, 1); // Shadow Item: Bronze Breastplate
Functions.addItem(player, 9031, 1); // Shadow Item: Bronze Gaiters
Functions.addItem(player, 9032, 1); // Shadow Item: Hard Leather Shirt
Functions.addItem(player, 9033, 1); // Shadow Item: Hard Leather Gaiters
Functions.addItem(player, 9034, 1); // Shadow Item: Tunic of Magic
Functions.addItem(player, 9035, 1); // Shadow Item: Stockings of Magic
Functions.addItem(player, 9037, 1); // Shadow Item: Hard Leather Helmet
Functions.addItem(player, 9038, 1); // Shadow Item: Boots
Functions.addItem(player, 9039, 1); // Shadow Item: Bracer
Functions.addItem(player, 909, 1); // Neck NG
Functions.addItem(player, 846, 2); // Earning NG
Functions.addItem(player, 878, 2); // Rings NG
Functions.addItem(player, 5250, 1); // SS NG
Functions.addItem(player, 5262, 1); // BSS NG
}

// D-GRADE FIGHTER SUPPORT PACK
private void use20636(Player player, boolean ctrl)
{
int[] list = new int[]
{
20639, // Common Item - Elven Long Sword
20640, // Common Item - Light Crossbow
20641, // Common Item - Knight's Sword*Elven
20642, // Common Item - Mithril Gloves
20643, // Common Item - Plate Boots
20644, // Common Item - Plate Shield
20645, // Common Item - Plate Helmet
20646, // Common Item - Plate Gaiters
20647, // Common Item - Half Plate Armor
20648 // Common Item - Salamander Skin Mail
};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int[] chances = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
extract_item_r(list, counts, chances, player);
}

// D-GRADE MAGE SUPPORT PACK
private void use20637(Player player, boolean ctrl)
{
int[] list = new int[]
{
20649, // Common Item - Ghost Staff
20650, // Common Item - Mithril Tunic
20651, // Common Item - Mithril Stockings
20652, // Common Item - Salamander Skin
20653, // Common Item - Ogre Power Gauntlet
20645 // Common Item - Plate Helmet
};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int[] chances = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
extract_item_r(list, counts, chances, player);
}

// BEGINNER'S ADVENTURER REINFORCEMENT PACK
private void use20638(Player player, boolean ctrl)
{
int[] list = new int[]
{
20415, // Afro Hair - Big Head, Firework - 7-day limited period
21091, // Rune of Experience Points 50% 7-Day Pack
21092 // Rune of SP 50% 7-Day Pack
};
int[] counts = new int[]{1, 1, 1};
int[] chances = new int[]{1, 1, 1};
extract_item_r(list, counts, chances, player);
}

// RUNE OF EXPERIENCE POINTS 50% 7-DAY PACK
private void use21091(Player player, boolean ctrl)
{
Functions.addItem(player, 20340, 1);
}

// RUNE OF EXPERIENCE POINTS 50% 7-DAY PACK
private void use21092(Player player, boolean ctrl)
{
Functions.addItem(player, 20346, 1);
}

// Atlantis Armor Chest
private void use43214(Player player, boolean ctrl)
{
int[] list = new int[]{80007, 80008, 80009, 80010};
int[] chances = new int[]{1, 1, 1, 1};
int[] counts = new int[]{1, 1, 1, 1};
extract_item_r(list, counts, chances, player);
}

// Atlantis Weapon Chest
private void use43215(Player player, boolean ctrl)
{
int[] list = new int[]{15676, 15677, 15678, 15679, 15680, 15681, 15682, 15683, 15684, 15685, 15686, 15687, 15688, 15689, 70002, 70003};
int[] chances = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int[] counts = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
extract_item_r(list, counts, chances, player);
}

private static void extract_item(int[] list, int[] counts, Player player)
{
int index = Rnd.get(list.length);
int id = list[index];
int count = counts[index];
Functions.addItem(player, id, count);
}

private static List<int[]> mass_extract_item(long source_count, int[] list, int[] counts, Player player)
{
List<int[]> result = new ArrayList<int[]>((int) Math.min(list.length, source_count));

for(int n = 1; n <= source_count; n++)
{
int index = Rnd.get(list.length);
int item = list[index];
int count = counts[index];

int[] old = null;
for(int[] res : result)
if(res[0] == item)
old = res;

if(old == null)
result.add(new int[]{item, count});
else
old[1] += count;
}

return result;
}

private static void extract_item_r(int[] list, int[] count_min, int[] count_max, int[] chances, Player player)
{
int[] counts = count_min;
for(int i = 0; i < count_min.length; i++)
counts = Rnd.get(count_min, count_max);
extract_item_r(list, counts, chances, player);
}

private static void extract_item_r(int[] list, int[] counts, int[] chances, Player player)
{
int sum = 0;

for(int i = 0; i < list.length; i++)
sum += chances;

int[] table = new int[sum];
int k = 0;

for(int i = 0; i < list.length; i++)
for(int j = 0; j < chances; j++)
{
table[k] = i;
k++;
}

int i = table[Rnd.get(table.length)];
int item = list;
int count = counts;

Functions.addItem(player, item, count);
}

private static List<int[]> mass_extract_item_r(long source_count, int[] list, int[] count_min, int[] count_max, int[] chances, Player player)
{
int[] counts = count_min;
for(int i = 0; i < count_min.length; i++)
counts = Rnd.get(count_min, count_max);
return mass_extract_item_r(source_count, list, counts, chances, player);
}

private static List<int[]> mass_extract_item_r(long source_count, int[] list, int[] counts, int[] chances, Player player)
{
List<int[]> result = new ArrayList<int[]>((int) Math.min(list.length, source_count));

int sum = 0;
for(int i = 0; i < list.length; i++)
sum += chances;

int[] table = new int[sum];
int k = 0;

for(int i = 0; i < list.length; i++)
for(int j = 0; j < chances; j++)
{
table[k] = i;
k++;
}

for(int n = 1; n <= source_count; n++)
{
int i = table[Rnd.get(table.length)];
int item = list;
int count = counts;

int[] old = null;
for(int[] res : result)
if(res[0] == item)
old = res;

if(old == null)
result.add(new int[]{item, count});
else
old[1] += count;
}

return result;
}

private static boolean canBeExtracted(Player player, ItemInstance item)
{
if(player.getWeightPenalty() >= 3 || player.getInventory().getSize() > player.getInventoryLimit() - 10)
{
player.sendPacket(Msg.YOUR_INVENTORY_IS_FULL, new SystemMessage(SystemMessage.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS).addItemName(item.getItemId()));
return false;
}
return true;
}

private static boolean extractRandomOneItem(Player player, int[][] items, double[] chances)
{
if(items.length != chances.length)
return false;

double extractChance = 0;
for(double c : chances)
extractChance += c;

if(Rnd.chance(extractChance))
{
int[] successfulItems = new int[0];
while(successfulItems.length == 0)
for(int i = 0; i < items.length; i++)
if(Rnd.chance(chances))
successfulItems = ArrayUtils.add(successfulItems, i);
int[] item = items[successfulItems[Rnd.get(successfulItems.length)]];
if(item.length < 2)
return false;

Functions.addItem(player, item[0], item[1]);
}
return true;
}
}

Код просто отличный
 
Как говорит гринд, масоны придумали офф скрипты, хорошо смотрим офф скрипты:
item_begin armor 6844 [hair_pin_of_lady] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=500000 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=7 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*귀부인의헤어핀*/ item_end
item_begin armor 7682 [maidens_hairpin] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=500000 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=7 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*숙녀의헤어핀*/ item_end
item_begin armor 7695 [forget_me_not_hairpin] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=500000 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=7 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*물망초헤어핀*/ item_end
item_begin armor 7696 [daisy_hairpin] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=500000 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=7 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*데이지꽃헤어핀*/ item_end
item_begin armor 7846 [pccafe_maidens_hairpin] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*숙녀의헤어핀-이벤트용*/ item_end
item_begin armor 7847 [pccafe_hair_pin_of_lady] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*귀부인의헤어핀-이벤트용*/ item_end
item_begin armor 7848 [pccafe_forget_me_not_hairpin] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*물망초헤어핀-이벤트용*/ item_end
item_begin armor 7849 [pccafe_daisy_hairpin] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*데이지꽃헤어핀-이벤트용*/ item_end
item_begin armor 8912 [cluster_of_flower] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=500000 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=steel crystal_type=none crystal_count=0 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=7 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*꽃한송이*/ item_end
item_begin armor 8913 [butterfly_hearpin] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=500000 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=steel crystal_type=none crystal_count=0 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=7 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*나비머리핀*/ item_end
item_begin armor 8917 [goddess_circlet] item_type=armor slot_bit_type={hairall} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=500000 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=steel crystal_type=none crystal_count=0 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=7 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*여신서클릿*/ item_end
item_begin armor 8923 [scar] item_type=armor slot_bit_type={hair} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=500000 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=steel crystal_type=none crystal_count=0 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=7 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;0}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*흉터*/ item_end
item_begin armor 14772 [flower_coronet_whiteday_event] item_type=armor slot_bit_type={hairall} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=7 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*화관*/ item_end
item_begin armor 17141 [ev_ribbon_band] item_type=armor slot_bit_type={hairall} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=0 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*리본헤어밴드*/ item_end
item_begin armor 20023 [br_ribbon_band] item_type=armor slot_bit_type={hair} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=15 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=0 can_move=1 is_premium=1 /*리본헤어밴드*/ item_end
item_begin armor 20024 [br_visor] item_type=armor slot_bit_type={hairall} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=15 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;0}} is_olympiad_can_use=0 can_move=1 is_premium=1 /*바이저*/ item_end
item_begin armor 22156 [br_cash_daisy_hairpin] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=1 is_premium=0 /*데이지꽃헤어핀*/ item_end
item_begin armor 22157 [br_cash_forget_me_not_hairpin] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=1 is_premium=0 /*물망초헤어핀*/ item_end
item_begin armor 22166 [br_cash_hair_pin_of_lady] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=1 is_premium=0 /*귀부인의헤어핀*/ item_end
item_begin armor 20323 [br_horn_hairband] item_type=armor slot_bit_type={hair} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=9 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=1 is_premium=1 /*뿔헤어밴드*/ item_end
item_begin armor 20420 [br_ribbon_band_reflect_7d] item_type=armor slot_bit_type={hair} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=10080 equip_reuse_delay=0 price=0 default_price=0 item_skill=[s_br_ribbon_band_reflect_7d] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=0 can_move=0 is_premium=1 /*리본헤어밴드*/ item_end
item_begin armor 20421 [br_visor_meditate_7d] item_type=armor slot_bit_type={hairall} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=10080 equip_reuse_delay=0 price=0 default_price=0 item_skill=[s_br_visor_meditate_7d] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;0}} is_olympiad_can_use=0 can_move=0 is_premium=1 /*바이저*/ item_end
item_begin armor 20428 [br_horn_hairband_reflect_7d] item_type=armor slot_bit_type={hair} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=10080 equip_reuse_delay=0 price=0 default_price=0 item_skill=[s_br_horn_hairband_reflect_7d] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=0 can_move=0 is_premium=1 /*뿔헤어밴드*/ item_end
item_begin armor 20431 [br_cash_daisy_hairpin_resist_unholy_7d] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=10080 equip_reuse_delay=0 price=0 default_price=0 item_skill=[s_br_cash_daisy_hairpin_resist_unholy_7d] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=0 can_move=0 is_premium=1 /*데이지꽃헤어핀*/ item_end
item_begin armor 20432 [br_cash_forget_me_not_hairpin_wind_7d] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=10080 equip_reuse_delay=0 price=0 default_price=0 item_skill=[s_br_cash_forget_me_not_hairpin_wind_7d] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=0 can_move=0 is_premium=1 /*물망초헤어핀*/ item_end
item_begin armor 20441 [br_cash_hair_pin_of_lady_death_7d] item_type=armor slot_bit_type={hair2} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=10080 equip_reuse_delay=0 price=0 default_price=0 item_skill=[s_br_cash_hair_pin_of_lady_death_7d] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=0 can_move=0 is_premium=1 /*귀부인의헤어핀*/ item_end
item_begin armor 8559 [flower_coronet] item_type=armor slot_bit_type={hairall} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=10 default_action=action_equip consume_type=consume_type_normal initial_count=1 soulshot_count=0 spiritshot_count=0 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration=-1 use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=0 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[none] capsuled_items={} material_type=wood crystal_type=none crystal_count=0 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=7 physical_damage=0 random_damage=0 weapon_type=none critical=0 hit_modify=0 avoid_modify=0 dual_fhit_rate=0 shield_defense=0 shield_defense_rate=0 attack_range=0 damage_range={} attack_speed=0 reuse_delay=0 mp_consume=0 magical_damage=0 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=0 elemental_enable=0 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={{ec_sex;1}} is_olympiad_can_use=1 can_move=0 is_premium=0 /*화관*/ item_end
А вот теперь давайте посмотри на пример и увидим, какая реализация у гринда согласно официальному серверу и увидим, что сервер у гринда для геев,
да да т.к на птс идёт конд на определение ec_sex и 1 или же 0, а у гринда нету проверки и мужской пол может одевать женского пола, а женский пол одевать мужского. Для этого возьму 2 случайных предмета из этого списка.
Например 8923.
Смотрим на реализацию, согласную официальному серверу:
<armor id="8923" name="Scar">
<set name="crystal_type" value="NONE"/>
<set name="icon" value="icon.Accessary_scar_i00"/>
<set name="price" value="500000"/>
<set name="type" value="NONE"/>
<set name="weight" value="10"/>
<equip>
<slot id="FACE"/>
</equip>
</armor>
Не ну круто, что а где конд на проверку пола? А не где. Мне влом идти на бд руофа и искать ему пруф, по этому идём сюда:
и читаем Шрам. Мужской аксессуар. А теперь создаем персонажа женским полом и выдаём себе этот предмет, и что мы видим баба мужик :D.
Беру теперь другой предмет 7682.
<armor id="7682" name="Maiden's Hairpin">
<set name="crystal_type" value="NONE"/>
<set name="icon" value="icon.accessory_maidens_hairpin_i00"/>
<set name="price" value="500000"/>
<set name="type" value="NONE"/>
<set name="weight" value="10"/>
<equip>
<slot id="HAIR"/>
</equip>
</armor>
Опять таки где реализация официального контента? Хорошо идём смотрим бд
смотрим Головной аксессуар. Только для персонажей женского пола. А теперь заходим на данный сервер и смотрим. Что мужской пол может одеть для женского. Прям гей пати. Ну да офф скрипты придумали масоны и это не как не слитые были с птс офф скрипты. Откуда такая инфа. А база данных тоже врёт ведь единственный офф на Grind-Team и не более
 
Идём в скилы и осуществляем поиск и вы будете шокированы:
<!-- Automatically generated from The High Five: Part 4.5 client files.
Description: none
Target is set to TARGET_NONE, skillType to NOTDONE for server compatability.
created 07-7-2011 19:19
-->
Классная реализация и таких 20 файлов забиты подобным бредом. Ну классная реализация скилов, наверное тоже согласно официальному серверу. А сама то реализация у них
<skill id="..." levels="..." name="none" >
<!-- Automatically generated from The High Five: Part 4.5 client files.
Description: none
Target is set to TARGET_NONE, skillType to NOTDONE for server compatability.
created 07-7-2011 19:19
-->
<set name="icon" val="icon.skill0000" />
<set name="target" val="TARGET_NONE" />
<set name="skillType" val="NOTDONE" />
<set name="operateType" val="OP_ACTIVE" />
</skill>
 
Предметы не лучше реализованы и большинство их реализовывать надо
 
Прошу совета Как я и писал, но гринд назвал балаболом. Ладно смотрим дальше как это гавно реализовано
 
И при этом он может называть все команды гавном, а свою разработку самой лучшей и согласно официальному серверу и заявлять типо офф скриптов не существует. А так же если напишешь, что его эмулятор хлам то ты балабол
 
Если вы хотите выбрать эмулятор хф, запрашивайте всегда тест сервер и тестируйте с командой и вы сразу увидите разницу. К тому же, что сделано у гринда? Да ничего осталось на уровне 2012 года. К тому же обращайте как человек ведёт себя в обществе если он матерится на каждом углу и позволяет называть каждый эмулятор гавном, я бы задумался а стоит ли вообще покупать такой эмулятор
 
Комментарий от разработчика emerald-game, и видно, что гринд как скрипты вешает себе чужие проекты:
29ecddeb877fe971793c6efa7891ea63.png
 
Классный комментарий от его же клиентов?
 
Небольшой квестик с огромной подсказкой и так смотрим:
Ищем код в таком стиле:
Убиваем моба, спавнится другой моб которые используют GameObjectStorage притом весь используется и ищет моба с которого он вылупился.
А теперь представьте 1к игроков лупит такого же моба и 1к раз происходит цикл перебора всех в мире.
Дипломированный специалист однако вам скажу.
 
Как я говорил про аугментацию в том посте? Так а что там изменилось, ничего осталось на том же уровне.
package core.gameserver.tables;

import gnu.trove.list.array.TDoubleArrayList;
import gnu.trove.map.hash.TIntObjectHashMap;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;

import javax.xml.parsers.DocumentBuilderFactory;

import core.commons.crypt.CryptUtil;
import core.commons.util.Rnd;
import core.gameserver.Config;
import core.gameserver.stats.Stats;
import core.gameserver.stats.funcs.Func;
import core.gameserver.stats.funcs.FuncAdd;
import core.gameserver.stats.triggers.TriggerInfo;
import core.gameserver.stats.triggers.TriggerType;
import core.gameserver.templates.item.ItemTemplate;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

public class AugmentationData
{
private static final Logger _log = LoggerFactory.getLogger(AugmentationData.class);

private static AugmentationData _Instance;

public static AugmentationData getInstance()
{
if(_Instance == null)
_Instance = new AugmentationData();
return _Instance;
}

// stats
private static final int STAT_START = 1;
private static final int STAT_END = 14560;
private static final int STAT_BLOCKSIZE = 3640;
//private static final int STAT_NUMBEROF_BLOCKS = 4;
private static final int STAT_SUBBLOCKSIZE = 91;
//private static final int STAT_NUMBEROF_SUBBLOCKS = 40;
private static final int STAT_NUM = 13;

private static final byte[] STATS1_MAP = new byte[STAT_SUBBLOCKSIZE];
private static final byte[] STATS2_MAP = new byte[STAT_SUBBLOCKSIZE];

// skills
private static final int BLUE_START = 14561;
// private static final int PURPLE_START = 14578;
// private static final int RED_START = 14685;
private static final int SKILLS_BLOCKSIZE = 178;

// basestats
private static final int BASESTAT_STR = 16341;
private static final int BASESTAT_CON = 16342;
private static final int BASESTAT_INT = 16343;
private static final int BASESTAT_MEN = 16344;

// accessory
private static final int ACC_START = 16669;
private static final int ACC_BLOCKS_NUM = 10;
private static final int ACC_STAT_SUBBLOCKSIZE = 21;
private static final int ACC_STAT_NUM = 6;

private static final int ACC_RING_START = ACC_START;
private static final int ACC_RING_SKILLS = 18;
private static final int ACC_RING_BLOCKSIZE = ACC_RING_SKILLS + 4 * ACC_STAT_SUBBLOCKSIZE;
private static final int ACC_RING_END = ACC_RING_START + ACC_BLOCKS_NUM * ACC_RING_BLOCKSIZE - 1;

private static final int ACC_EAR_START = ACC_RING_END + 1;
private static final int ACC_EAR_SKILLS = 18;
private static final int ACC_EAR_BLOCKSIZE = ACC_EAR_SKILLS + 4 * ACC_STAT_SUBBLOCKSIZE;
private static final int ACC_EAR_END = ACC_EAR_START + ACC_BLOCKS_NUM * ACC_EAR_BLOCKSIZE - 1;

private static final int ACC_NECK_START = ACC_EAR_END + 1;
private static final int ACC_NECK_SKILLS = 24;
private static final int ACC_NECK_BLOCKSIZE = ACC_NECK_SKILLS + 4 * ACC_STAT_SUBBLOCKSIZE;

private static final int ACC_END = ACC_NECK_START + ACC_BLOCKS_NUM * ACC_NECK_BLOCKSIZE;

private static final byte[] ACC_STATS1_MAP = new byte[ACC_STAT_SUBBLOCKSIZE];
private static final byte[] ACC_STATS2_MAP = new byte[ACC_STAT_SUBBLOCKSIZE];

private List<?>[] _augStats = new ArrayList[4];
private List<?>[] _augAccStats = new ArrayList[4];

private List<?>[] _blueSkills = new ArrayList[10];
private List<?>[] _purpleSkills = new ArrayList[10];
private List<?>[] _redSkills = new ArrayList[10];
private List<?>[] _yellowSkills = new ArrayList[10];

private TIntObjectHashMap<TriggerInfo> _allSkills = new TIntObjectHashMap<TriggerInfo>();

public AugmentationData()
{
_log.info("Initializing AugmentationData.");

_augStats[0] = new ArrayList<augmentationStat>();
_augStats[1] = new ArrayList<augmentationStat>();
_augStats[2] = new ArrayList<augmentationStat>();
_augStats[3] = new ArrayList<augmentationStat>();

_augAccStats[0] = new ArrayList<augmentationStat>();
_augAccStats[1] = new ArrayList<augmentationStat>();
_augAccStats[2] = new ArrayList<augmentationStat>();
_augAccStats[3] = new ArrayList<augmentationStat>();

// Lookup tables structure: STAT1 represent first stat, STAT2 - second.
// If both values are the same - use solo stat, if different - combined.
int idx;
// weapon augmentation block: solo values first
// 00-00, 01-01 ... 11-11,12-12
for(idx = 0; idx < STAT_NUM; idx++)
{
// solo stats
STATS1_MAP[idx] = (byte) idx;
STATS2_MAP[idx] = (byte) idx;
}
// combined values next.
// 00-01,00-02,00-03 ... 00-11,00-12;
// 01-02,01-03 ... 01-11,01-12;
// ...
// 09-10,09-11,09-12;
// 10-11,10-12;
// 11-12
for(int i = 0; i < STAT_NUM; i++)
for(int j = i + 1; j < STAT_NUM; idx++, j++)
{
// combined stats
STATS1_MAP[idx] = (byte) i;
STATS2_MAP[idx] = (byte) j;
}
idx = 0;
// accessory augmentation block, structure is different:
// 00-00,00-01,00-02,00-03,00-04,00-05
// 01-01,01-02,01-03,01-04,01-05
// 02-02,02-03,02-04,02-05
// 03-03,03-04,03-05
// 04-04 \
// 05-05 - order is changed here
// 04-05 /
// First values always solo, next are combined, except last 3 values
for(int i = 0; i < ACC_STAT_NUM - 2; i++)
for(int j = i; j < ACC_STAT_NUM; idx++, j++)
{
ACC_STATS1_MAP[idx] = (byte) i;
ACC_STATS2_MAP[idx] = (byte) j;
}
ACC_STATS1_MAP[idx] = 4;
ACC_STATS2_MAP[idx++] = 4;
ACC_STATS1_MAP[idx] = 5;
ACC_STATS2_MAP[idx++] = 5;
ACC_STATS1_MAP[idx] = 4;
ACC_STATS2_MAP[idx] = 5;

for(int i = 0; i < 10; i++)
{
_blueSkills = new ArrayList<Integer>();
_purpleSkills = new ArrayList<Integer>();
_redSkills = new ArrayList<Integer>();
_yellowSkills = new ArrayList<Integer>();
}

load();

// Use size*4: since theres 4 blocks of stat-data with equivalent size
_log.info("AugmentationData: Loaded: " + _augStats[0].size() * 4 + " augmentation stats.");
_log.info("AugmentationData: Loaded: " + _augAccStats[0].size() * 4 + " accessory augmentation stats.");
for(int i = 0; i < 10; i++)
_log.info("AugmentationData: Loaded: " + _blueSkills.size() + " blue, " + _purpleSkills.size() + " purple and " + _redSkills.size() + " red skills for lifeStoneLevel " + i);
}

public class augmentationStat
{
private final Stats _stat;
private final int _singleSize;
private final int _combinedSize;
private final double _singleValues[];
private final double _combinedValues[];

public augmentationStat(Stats stat, double sValues[], double cValues[])
{
_stat = stat;
_singleSize = sValues.length;
_singleValues = sValues;
_combinedSize = cValues.length;
_combinedValues = cValues;
}

public int getSingleStatSize()
{
return _singleSize;
}

public int getCombinedStatSize()
{
return _combinedSize;
}

public double getSingleStatValue(int i)
{
if(i >= _singleSize || i < 0)
return _singleValues[_singleSize - 1];
return _singleValues;
}

public double getCombinedStatValue(int i)
{
if(i >= _combinedSize || i < 0)
return _combinedValues[_combinedSize - 1];
return _combinedValues;
}

public Stats getStat()
{
return _stat;
}
}

@SuppressWarnings("unchecked")
private final void load()
{
// Load the skillmap
// Note: the skillmap data is only used when generating new augmentations
// the client expects a different id in order to display the skill in the
// items description...
try
{
int badAugmantData = 0;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setIgnoringComments(true);

File file = new File(Config.DATAPACK_ROOT, "data/xml/augmentation/augmentation_skillmap.xml");
FileInputStream stream = new FileInputStream(file);
InputStream output;
if((byte)stream.read() == 0x00)
{
byte[] bytes = new byte[0];
output = new ByteArrayInputStream(bytes);
output = CryptUtil.decrypt(stream, output);
}
else
output = new FileInputStream(file);
Document doc = factory.newDocumentBuilder().parse(output);
for(Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
if("list".equalsIgnoreCase(n.getNodeName()))
for(Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
if("augmentation".equalsIgnoreCase(d.getNodeName()))
{
NamedNodeMap attrs = d.getAttributes();
int skillId = 0, augmentationId = Integer.parseInt(attrs.getNamedItem("id").getNodeValue());
int skillLvL = 0;
String type = "blue";

TriggerType t = null;
double chance = 0;
for(Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling())
{
attrs = cd.getAttributes();
if("skillId".equalsIgnoreCase(cd.getNodeName()))
{
skillId = Integer.parseInt(attrs.getNamedItem("val").getNodeValue());
}
else if("skillLevel".equalsIgnoreCase(cd.getNodeName()))
{
skillLvL = Integer.parseInt(attrs.getNamedItem("val").getNodeValue());
}
else if("type".equalsIgnoreCase(cd.getNodeName()))
{
type = attrs.getNamedItem("val").getNodeValue();
}
else if("trigger_type".equalsIgnoreCase(cd.getNodeName()))
{
t = TriggerType.valueOf(attrs.getNamedItem("val").getNodeValue());
}
else if("trigger_chance".equalsIgnoreCase(cd.getNodeName()))
{
chance = Double.parseDouble(attrs.getNamedItem("val").getNodeValue());
}
}

if(skillId == 0)
{
badAugmantData++;
continue;
}
else if(skillLvL == 0)
{
badAugmantData++;
continue;
}

int k = (augmentationId - BLUE_START) / SKILLS_BLOCKSIZE;
if(type.equalsIgnoreCase("blue"))
((List<Integer>) _blueSkills[k]).add(augmentationId);
else if(type.equalsIgnoreCase("purple"))
((List<Integer>) _purpleSkills[k]).add(augmentationId);
else if(type.equalsIgnoreCase("red"))
((List<Integer>) _redSkills[k]).add(augmentationId);

_allSkills.put(augmentationId, new TriggerInfo(skillId, skillLvL, t, chance));
}

if(badAugmantData != 0)
_log.info("AugmentationData: " + badAugmantData + " bad skill(s) were skipped.");
}
catch(Exception e)
{
_log.error("Error parsing augmentation_skillmap.xml.", e);
return;
}

// Load the stats from xml
for(int i = 1; i < 5; i++)
{
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setIgnoringComments(true);

File file = new File(Config.DATAPACK_ROOT, "data/xml/augmentation/augmentation_stats" + i + ".xml");
FileInputStream stream = new FileInputStream(file);
InputStream output;
if((byte)stream.read() == 0x00)
{
byte[] bytes = new byte[0];
output = new ByteArrayInputStream(bytes);
output = CryptUtil.decrypt(stream, output);
}
else
output = new FileInputStream(file);
Document doc = factory.newDocumentBuilder().parse(output);

for(Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
if("list".equalsIgnoreCase(n.getNodeName()))
for(Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
if("stat".equalsIgnoreCase(d.getNodeName()))
{
NamedNodeMap attrs = d.getAttributes();
String statName = attrs.getNamedItem("name").getNodeValue();
double soloValues[] = null, combinedValues[] = null;

for(Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling())
if("table".equalsIgnoreCase(cd.getNodeName()))
{
attrs = cd.getAttributes();
String tableName = attrs.getNamedItem("name").getNodeValue();

StringTokenizer data = new StringTokenizer(cd.getFirstChild().getNodeValue());
TDoubleArrayList array = new TDoubleArrayList();
while(data.hasMoreTokens())
array.add(Double.parseDouble(data.nextToken()));

if(tableName.equalsIgnoreCase("#soloValues"))
{
soloValues = new double[array.size()];
int x = 0;
for(double value : array.toArray())
soloValues[x++] = value;
}
else
{
combinedValues = new double[array.size()];
int x = 0;
for(double value : array.toArray())
combinedValues[x++] = value;
}
}

// store this stat
((List<augmentationStat>) _augStats[(i - 1)]).add(new augmentationStat(Stats.valueOfXml(statName), soloValues, combinedValues));
}
}
catch(Exception e)
{
_log.error("Error parsing augmentation_stats" + i + ".xml.", e);
return;
}

try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setIgnoringComments(true);

File file = new File(Config.DATAPACK_ROOT, "data/xml/augmentation/augmentation_jewel_stats" + i + ".xml");
FileInputStream stream = new FileInputStream(file);
InputStream output;
if((byte)stream.read() == 0x00)
{
byte[] bytes = new byte[0];
output = new ByteArrayInputStream(bytes);
output = CryptUtil.decrypt(stream, output);
}
else
output = new FileInputStream(file);
Document doc = factory.newDocumentBuilder().parse(output);

for(Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
if("list".equalsIgnoreCase(n.getNodeName()))
for(Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
if("stat".equalsIgnoreCase(d.getNodeName()))
{
NamedNodeMap attrs = d.getAttributes();
String statName = attrs.getNamedItem("name").getNodeValue();
double soloValues[] = null, combinedValues[] = null;

for(Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling())
if("table".equalsIgnoreCase(cd.getNodeName()))
{
attrs = cd.getAttributes();
String tableName = attrs.getNamedItem("name").getNodeValue();

StringTokenizer data = new StringTokenizer(cd.getFirstChild().getNodeValue());
TDoubleArrayList array = new TDoubleArrayList();
while(data.hasMoreTokens())
array.add(Double.parseDouble(data.nextToken()));

if(tableName.equalsIgnoreCase("#soloValues"))
{
soloValues = new double[array.size()];
int x = 0;
for(double value : array.toArray())
soloValues[x++] = value;
}
else
{
combinedValues = new double[array.size()];
int x = 0;
for(double value : array.toArray())
combinedValues[x++] = value;
}
}

// store this stat
((List<augmentationStat>) _augAccStats[(i - 1)]).add(new augmentationStat(Stats.valueOfXml(statName), soloValues, combinedValues));
}
}
catch(Exception e)
{
_log.error("Error parsing jewel augmentation_stats" + i + ".xml.", e);
return;
}
}
}

public int generateRandomAugmentation(int lifeStoneLevel, int lifeStoneGrade, int bodyPart)
{
switch(bodyPart)
{
case ItemTemplate.SLOT_L_FINGER:
case ItemTemplate.SLOT_R_FINGER:
case ItemTemplate.SLOT_L_FINGER | ItemTemplate.SLOT_R_FINGER:
case ItemTemplate.SLOT_L_EAR:
case ItemTemplate.SLOT_R_EAR:
case ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR:
case ItemTemplate.SLOT_NECK:
return generateRandomAccessoryAugmentation(lifeStoneLevel, bodyPart);
default:
return generateRandomWeaponAugmentation(lifeStoneLevel, lifeStoneGrade);
}
}

private int generateRandomWeaponAugmentation(int lifeStoneLevel, int lifeStoneGrade)
{
// Note that stat12 stands for stat 1 AND 2 (same for stat34 ;p )
// this is because a value can contain up to 2 stat modifications
// (there are two int values packed in one integer value, meaning 4 stat modifications at max)
// for more info take a look at getAugStatsById(...)

// Note: lifeStoneGrade: (0 means low grade, 3 top grade)
// First: determine whether we will add a skill/baseStatModifier or not
// because this determine which color could be the result
int stat12 = 0;
int stat34 = 0;
boolean generateSkill = false;
boolean generateGlow = false;

//lifestonelevel is used for stat Id and skill level, but here the max level is 9
lifeStoneLevel = Math.min(lifeStoneLevel, 9);

switch(lifeStoneGrade)
{
case 0:
generateSkill = Rnd.chance(Config.AUGMENTATION_NG_SKILL_CHANCE);
generateGlow = Rnd.chance(Config.AUGMENTATION_NG_GLOW_CHANCE);
break;
case 1:
generateSkill = Rnd.chance(Config.AUGMENTATION_MID_SKILL_CHANCE);
generateGlow = Rnd.chance(Config.AUGMENTATION_MID_GLOW_CHANCE);
break;
case 2:
generateSkill = Rnd.chance(Config.AUGMENTATION_HIGH_SKILL_CHANCE);
generateGlow = Rnd.chance(Config.AUGMENTATION_HIGH_GLOW_CHANCE);
break;
case 3:
generateSkill = Rnd.chance(Config.AUGMENTATION_TOP_SKILL_CHANCE);
generateGlow = Rnd.chance(Config.AUGMENTATION_TOP_GLOW_CHANCE);
break;
}

if(!generateSkill && Rnd.get(1, 100) <= Config.AUGMENTATION_BASESTAT_CHANCE)
stat34 = Rnd.get(BASESTAT_STR, BASESTAT_MEN);

// Second: decide which grade the augmentation result is going to have:
// 0:yellow, 1:blue, 2:purple, 3:red
// The chances used here are most likely custom,
// whats known is: you cant have yellow with skill(or baseStatModifier)
// noGrade stone can not have glow, mid only with skill, high has a chance(custom), top allways glow
int resultColor = Rnd.get(0, 100);
if(stat34 == 0 && !generateSkill)
if(resultColor <= 15 * lifeStoneGrade + 40)
resultColor = 1;
else
resultColor = 0;
else if(resultColor <= 10 * lifeStoneGrade + 5 || stat34 != 0)
resultColor = 3;
else if(resultColor <= 10 * lifeStoneGrade + 10)
resultColor = 1;
else
resultColor = 2;

// generate a skill if neccessary
if(generateSkill)
{
switch(resultColor)
{
case 1: // blue skill
stat34 = (Integer) _blueSkills[lifeStoneLevel].get(Rnd.get(0, _blueSkills[lifeStoneLevel].size() - 1));
break;
case 2: // purple skill
stat34 = (Integer) _purpleSkills[lifeStoneLevel].get(Rnd.get(0, _purpleSkills[lifeStoneLevel].size() - 1));
break;
case 3: // red skill
stat34 = (Integer) _redSkills[lifeStoneLevel].get(Rnd.get(0, _redSkills[lifeStoneLevel].size() - 1));
break;
}
}

// Third: Calculate the subblock offset for the choosen color,
// and the level of the lifeStone
// from large number of retail augmentations:
// no skill part
// Id for stat12:
// A:1-910 B:911-1820 C:1821-2730 D:2731-3640 E:3641-4550 F:4551-5460 G:5461-6370 H:6371-7280
// Id for stat34(this defines the color):
// I:7281-8190(yellow) K:8191-9100(blue) L:10921-11830(yellow) M:11831-12740(blue)
// you can combine I-K with A-D and L-M with E-H
// using C-D or G-H Id you will get a glow effect
// there seems no correlation in which grade use which Id except for the glowing restriction
// skill part
// Id for stat12:
// same for no skill part
// A same as E, B same as F, C same as G, D same as H
// A - no glow, no grade LS
// B - weak glow, mid grade LS?
// C - glow, high grade LS?
// D - strong glow, top grade LS?

// is neither a skill nor basestat used for stat34? then generate a normal stat
int offset;
if(stat34 == 0)
{
int temp = Rnd.get(2, 3);
int colorOffset = resultColor * 10 * STAT_SUBBLOCKSIZE + temp * STAT_BLOCKSIZE + 1;
offset = lifeStoneLevel * STAT_SUBBLOCKSIZE + colorOffset;

stat34 = Rnd.get(offset, offset + STAT_SUBBLOCKSIZE - 1);
if(generateGlow && lifeStoneGrade >= 2)
offset = lifeStoneLevel * STAT_SUBBLOCKSIZE + (temp - 2) * STAT_BLOCKSIZE + lifeStoneGrade * 10 * STAT_SUBBLOCKSIZE + 1;
else
offset = lifeStoneLevel * STAT_SUBBLOCKSIZE + (temp - 2) * STAT_BLOCKSIZE + Rnd.get(0, 1) * 10 * STAT_SUBBLOCKSIZE + 1;
}
else if(!generateGlow)
offset = lifeStoneLevel * STAT_SUBBLOCKSIZE + Rnd.get(0, 1) * STAT_BLOCKSIZE + 1;
else
offset = lifeStoneLevel * STAT_SUBBLOCKSIZE + Rnd.get(0, 1) * STAT_BLOCKSIZE + (lifeStoneGrade + resultColor) / 2 * 10 * STAT_SUBBLOCKSIZE + 1;

stat12 = Rnd.get(offset, offset + STAT_SUBBLOCKSIZE - 1);

return ((stat34 << 16) + stat12);
}

private int generateRandomAccessoryAugmentation(int lifeStoneLevel, int bodyPart)
{
int stat12 = 0;
int stat34 = 0;
int base = 0;
int skillsLength = 0;

lifeStoneLevel = Math.min(lifeStoneLevel, 9);

switch(bodyPart)
{
case ItemTemplate.SLOT_L_FINGER:
case ItemTemplate.SLOT_R_FINGER:
case ItemTemplate.SLOT_L_FINGER | ItemTemplate.SLOT_R_FINGER:
base = ACC_RING_START + ACC_RING_BLOCKSIZE * lifeStoneLevel;
skillsLength = ACC_RING_SKILLS;
break;
case ItemTemplate.SLOT_L_EAR:
case ItemTemplate.SLOT_R_EAR:
case ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR:
base = ACC_EAR_START + ACC_EAR_BLOCKSIZE * lifeStoneLevel;
skillsLength = ACC_EAR_SKILLS;
break;
case ItemTemplate.SLOT_NECK:
base = ACC_NECK_START + ACC_NECK_BLOCKSIZE * lifeStoneLevel;
skillsLength = ACC_NECK_SKILLS;
break;
default:
return 0;
}

int resultColor = Rnd.get(0, 3);
TriggerInfo triggerInfo = null;

// first augmentation (stats only)
stat12 = Rnd.get(ACC_STAT_SUBBLOCKSIZE);

if(Rnd.get(1, 100) <= Config.AUGMENTATION_ACC_SKILL_CHANCE)
{
// second augmentation (skill)
stat34 = base + Rnd.get(skillsLength);
triggerInfo = _allSkills.get(stat34);
}

if(triggerInfo == null)
{
// second augmentation (stats)
// calculating any different from stat12 value inside sub-block
// starting from next and wrapping over using remainder
stat34 = (stat12 + 1 + Rnd.get(ACC_STAT_SUBBLOCKSIZE - 1)) % ACC_STAT_SUBBLOCKSIZE;
// this is a stats - skipping skills
stat34 = base + skillsLength + ACC_STAT_SUBBLOCKSIZE * resultColor + stat34;
}

// stat12 has stats only
stat12 = base + skillsLength + ACC_STAT_SUBBLOCKSIZE * resultColor + stat12;

return ((stat34 << 16) + stat12);
}
}

К тому же в ней есть баг и уже писали Баги/Дюпы/Недоработки овера(лостворлда)
 
Прежде чем называть, что у всех гавно прочитать следует данный стих:
 
Я конечно извиняюсь, но тему тогда можно переименовывать, ибо 99% кода из оригинального овера. Выводы очевидны - работы было сделано маловато.
 
Я конечно извиняюсь, но тему тогда можно переименовывать, ибо 99% кода из оригинального овера. Выводы очевидны - работы было сделано маловато.
Нет, это всё вранье

Работа над данной игровой платформой была начата в 2012 году. За 3 года они достигли успехов в реализации
 
Смотрим каптчу и видим порт с некстгена.
Давайте посмотрим рыбалку и её реализацию. Рыбалка осталась на том же уровне, притом и награда за неё и прочее. Так вот а как же дневная и ночная рыбалка? как бы есть оно, но тут такого нету.
public class ExFishingStart extends L2GameServerPacket
{
private int _charObjId;
private Location _loc;
private int _fishType;
private boolean _isNightLure;

public ExFishingStart(Creature character, int fishType, Location loc, boolean isNightLure)
{
_charObjId = character.getObjectId();
_fishType = fishType;
_loc = loc;
_isNightLure = isNightLure;
}

@Override
protected final void writeImpl()
{
writeEx(0x1e);
writeD(_charObjId);
writeD(_fishType); // fish type
writeD(_loc.x); // x poisson
writeD(_loc.y); // y poisson
writeD(_loc.z); // z poisson
writeC(_isNightLure ? 0x01 : 0x00); // 0 = day lure 1 = night lure
writeC(0x01); // result Button
}
}
У нас забита нулями, что не верно.
 
Краски смотрим офф скрипт и смотрим реализацию у гринда:
dye_begin dye_name=[dye_s1c3_d] dye_id=1 dye_item_id=4445 dye_level=28 str=1 con=-3 dex=0 int=0 men=0 wit=0 need_count=10 wear_fee=37000 cancel_count=5 cancel_fee=7400 wear_class={11;26;39;1;4;7;19;22;32;35;45;47;54;56;15;29;42;50;125;126} dye_end
<henna name="symbol_s+1c-3_d" symbol_id="1" dye_id="4445" price="5100" wit="0" int="0" men="0" dex="0" str="1" con="-3">
<class id="1"/><!--warrior-->
<class id="4"/><!--knight-->
<class id="7"/><!--rogue-->
<class id="10"/><!--mage-->
<class id="11"/><!--wizard-->
<class id="15"/><!--cleric-->
<class id="19"/><!--elvenKnight-->
<class id="22"/><!--elvenScout-->
<class id="26"/><!--elvenWizard-->
<class id="29"/><!--oracle-->
<class id="32"/><!--palusKnight-->
<class id="35"/><!--assassin-->
<class id="39"/><!--darkWizard-->
<class id="42"/><!--shillienOracle-->
<class id="45"/><!--orcRaider-->
<class id="47"/><!--orcMonk-->
<class id="50"/><!--orcShaman-->
<class id="54"/><!--scavenger-->
<class id="56"/><!--artisan-->
<class id="125"/><!--trooper-->
<class id="126"/><!--warder-->
</henna>
И смотрим а где реализация dye_level=28 need_count=10 wear_fee=37000 cancel_count=5 cancel_fee=7400 ? Правильно не где. Но при этом заявление сборка реализована согласна официальному серверу
 
Давайте посмотрим ту же реализацию трансформов которая реализована не верно.
transform_begin // 오닉스 비스트
id = 1 type = COMBAT can_swim = 0 normal_attackable = 1
female_begin
common_begin
collision_box = {12;14.5}
moving_speed = {30; 125; 50; 50; 0; 0; 0; 0}
skill = {[s_transform_power_claw1];[s_transform_fast_moving1];[s_transform_dispel1];[s_transform_slow_attack1]}
additional_skill = {}
action = {1;2;3;4;5;6;7;8;9;11;15;16;17;18;19;21;22;23;32;36;39;40;41;42;43;44;45;46;47;48;50;52;53;54;55;56;57;63;64;65;70;1000;1001;1003;1004;1005;1006;1007;1008;1009;1010;1011;1012;1013;1014;1015;1016;1017;1018;1019;1020;1021;1022;1023;1024;1025;1026;1027;1028;1029;1030;1031;1032;1033;1034;1035;1036;1037;1038;1039;1040;1041;1042;1043;1044;1045;1046;1047;1048;1049;1050;1051;1052;1053;1054;1055;1056;1057;1058;1059;1060;1061;1062;1063;1064;1065;1066;1067;1068;1069;1070;1071;1072;1073;1074;1075;1076;1077;1078;1079;1080;1081;1082;1083;1084;1089;1090;1091;1092;1093;1094;1095;1096;1097;1098}
base_attack_type = sword
// 맨손인 경우에 필요한 것들
base_attack_range = 20
base_random_damage = 10
base_attack_speed = 300
base_critical_prob = 5
base_physical_attack = 5
base_magical_attack = 5
common_end
combat_begin
basic_stat= {40;21;43;30;11;25} // str;int;con;dex;wit;men
base_defend = {31;18;12;7;8;3;1} //맨몸 방어력. {상체;하체;투구;부츠;장갑;속옷;망토} 순서.
base_magic_defend = {9;9;5;5;13} //맨몸 마법 방어력. {오른귀걸이;왼귀걸이;오른반지;왼반지;목} 순서.
//HP, MP, CP 기본 회복량 : {Lv1; Lv2; Lv3; ... ; Lv99}의 각 레벨별 회복량 집합
org_hp_regen = {2;2.05;2.1;2.15;2.2;2.25;2.3;2.35;2.4;2.45;2.5;2.6;2.7;2.8;2.9;3;3.1;3.2;3.3;3.4;3.5;3.6;3.7;3.8;3.9;4;4.1;4.2;4.3;4.4;4.5;4.6;4.7;4.8;4.9;5;5.1;5.2;5.3;5.4;5.5;5.6;5.7;5.8;5.9;6;6.1;6.2;6.3;6.4;6.5;6.6;6.7;6.8;6.9;7;7.1;7.2;7.3;7.4;7.5;7.6;7.7;7.8;7.9;8;8.1;8.2;8.3;8.4;8.5;8.6;8.7;8.8;8.9;9;9.1;9.2;9.3;9.4;9.5;9.6;9.7;9.8;9.9;10;10.1;10.2;10.3;10.4;10.5;10.6;10.7;10.8;10.9;11;11.1;11.2;11.3}
org_mp_regen = {0.9;0.9;0.9;0.9;0.9;0.9;0.9;0.9;0.9;0.9;1.2;1.2;1.2;1.2;1.2;1.2;1.2;1.2;1.2;1.2;1.5;1.5;1.5;1.5;1.5;1.5;1.5;1.5;1.5;1.5;1.8;1.8;1.8;1.8;1.8;1.8;1.8;1.8;1.8;1.8;2.1;2.1;2.1;2.1;2.1;2.1;2.1;2.1;2.1;2.1;2.4;2.4;2.4;2.4;2.4;2.4;2.4;2.4;2.4;2.4;2.7;2.7;2.7;2.7;2.7;2.7;2.7;2.7;2.7;2.7;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3}
org_cp_regen = {2;2;2;2;2;2;2;2;2;2;2.5;2.5;2.5;2.5;2.5;2.5;2.5;2.5;2.5;2.5;3.5;3.5;3.5;3.5;3.5;3.5;3.5;3.5;3.5;3.5;4.5;4.5;4.5;4.5;4.5;4.5;4.5;4.5;4.5;4.5;5.5;5.5;5.5;5.5;5.5;5.5;5.5;5.5;5.5;5.5;6.5;6.5;6.5;6.5;6.5;6.5;6.5;6.5;6.5;6.5;7.5;7.5;7.5;7.5;7.5;7.5;7.5;7.5;7.5;7.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5}
level_bonus = {0.90;0.91;0.92;0.93;0.94;0.95;0.96;0.97;0.98;0.99;1.00;1.01;1.02;1.03;1.04;1.05;1.06;1.07;1.08;1.09;1.10;1.11;1.12;1.13;1.14;1.15;1.16;1.17;1.18;1.19;1.20;1.21;1.22;1.23;1.24;1.25;1.26;1.27;1.28;1.29;1.30;1.31;1.32;1.33;1.34;1.35;1.36;1.37;1.38;1.39;1.40;1.41;1.42;1.43;1.44;1.45;1.46;1.47;1.48;1.49;1.50;1.51;1.52;1.53;1.54;1.55;1.56;1.57;1.58;1.59;1.60;1.61;1.62;1.63;1.64;1.65;1.66;1.67;1.68;1.69;1.70;1.71;1.72;1.73;1.74;1.75;1.76;1.77;1.78;1.79;1.80;1.81;1.82;1.83;1.84;1.85;1.86;1.87;1.88}
str_bonus = {-70;-69;-68;-66;-65;-64;-63;-61;-60;-58;-57;-55;-54;-52;-50;-49;-47;-45;-43;-41;-39;-37;-34;-32;-29;-27;-24;-22;-19;-16;-13;-10;-6;-3;1;4;8;12;16;20;24;29;33;38;43;48;54;59;65;71;77;83;90;97;104;111;119;127;135;143;152;161;171;180;191;201;212;223;235;247;259;272;286;299;314;329;344;360;377;394;412;430;449;469;489;511;533;555;579;603;629;655;682;710;739;770;801;833;867}
int_bonus = {-45;-44;-43;-42;-41;-39;-38;-37;-36;-35;-33;-32;-31;-29;-28;-26;-25;-23;-22;-20;-19;-17;-15;-14;-12;-10;-8;-6;-5;-3;-1;1;3;5;7;10;12;14;16;19;21;23;26;28;31;34;36;39;42;45;47;50;53;57;60;63;66;69;73;76;80;83;87;91;95;99;102;107;111;115;119;124;128;133;137;142;147;152;157;162;167;173;178;184;189;195;201;207;213;219;226;232;239;246;253;260;267;274;282}
con_bonus = {-54;-53;-52;-50;-49;-47;-46;-44;-42;-41;-39;-37;-35;-33;-31;-29;-27;-25;-23;-20;-18;-15;-13;-10;-7;-5;-2;1;4;7;10;14;17;21;24;28;32;36;40;44;48;53;58;62;67;72;77;83;88;94;100;106;112;118;125;131;138;145;153;160;168;176;184;193;202;211;220;230;240;250;260;271;282;294;306;318;330;343;356;370;384;399;414;429;445;461;478;496;513;532;551;570;590;611;633;654;677;700;724}
dex_bonus = {-15;-14;-14;-13;-12;-11;-10;-10;-9;-8;-7;-6;-6;-5;-4;-3;-2;-1;0;1;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;24;25;26;27;28;29;30;32;33;34;35;36;38;39;40;41;43;44;45;47;48;49;51;52;53;55;56;57;59;60;62;63;65;66;68;69;71;72;74;75;77;78;80;82;83;85;87;88;90;92;93;95;97;99;100;102;104}
wit_bonus = {-60;-58;-56;-54;-52;-49;-47;-44;-42;-39;-36;-32;-29;-25;-22;-18;-14;-9;-5;0;5;10;16;22;28;34;41;48;55;63;71;80;89;98;108;118;129;141;153;165;179;193;207;223;239;256;273;292;312;332;354;376;400;425;452;479;508;539;570;604;639;676;715;756;799;843;891;940;992;1047;1104;1164;1227;1294;1364;1437;1514;1594;1679;1768;1861;1959;2062;2170;2284;2403;2528;2660;2798;2943;3095;3255;3422;3598;3783;3977;4181;4395;4620}
men_bonus = {1;2;3;4;5;6;7;8;9;11;12;13;14;15;16;17;19;20;21;22;23;25;26;27;28;30;31;32;34;35;36;38;39;40;42;43;45;46;48;49;50;52;53;55;57;58;60;61;63;65;66;68;70;71;73;75;76;78;80;82;84;85;87;89;91;93;95;97;99;101;103;105;107;109;111;113;115;117;120;122;124;126;129;131;133;135;138;140;143;145;147;150;152;155;158;160;163;165;168}
hp_table = {80.8;92.7483;104.8279;117.0388;129.381;143.259;155.9886;168.8508;181.8456;194.973;210.2745;223.7984;237.4562;251.2479;265.1735;281.944;296.2752;310.7416;325.3432;340.08;374.535;406.0035;437.7555;469.791;502.11;539.805;573.0042;606.4896;640.2612;674.319;715.3485;750.3054;785.5512;821.0859;856.9095;901.368;938.1096;975.1428;1012.4676;1050.084;1110.819;1162.2234;1214.0202;1266.2094;1318.791;1384.35;1438.206;1492.458;1547.106;1616.715;1672.659;1729.0026;1785.7458;1826.286;1883.31;1923.087;1980.3774;2019.3624;2057.6742;2075.535;2091.621;2105.9106;2139.78;2129.0142;2137.785;2144.673;2149.6566;2176.902;2178.5808;2178.294;2176.02;2171.7372;2165.424;2184.7134;2203.11;2220.603;2237.1816;2252.835;2267.5524;2281.323;2294.136;2305.9806;2316.846;2326.7214;2335.596;2343.459;2350.2996;2356.107;2360.8704;2364.579;2367.222;2368.7886;2369.268;2368.6494;2366.922;2364.075;2360.0976;2354.979;2348.7084}
mp_table = {30.3;35.8146;41.3898;47.0256;52.722;59.058;64.9332;70.8696;76.8672;82.926;89.919;96.1608;102.4644;108.8298;115.257;122.928;129.5424;136.2192;142.9584;149.76;161.595;172.0845;182.6685;193.347;204.12;217.035;228.1014;239.2632;250.5204;261.873;275.8995;287.5518;299.3004;311.1453;323.0865;338.256;350.5032;362.8476;375.2892;387.828;412.674;434.0925;455.6745;477.42;499.329;526.185;548.625;571.23;594;622.5435;645.8535;669.33;692.973;710.325;734.085;751.119;774.99;791.694;808.1175;816.48;824.103;830.9775;845.55;842.445;847.02;850.8105;853.8075;865.62;867.24;868.041;868.014;867.15;865.44;873.9375;882.063;889.812;897.18;904.1625;910.755;916.953;922.752;928.1475;933.135;937.71;941.868;945.6045;948.915;951.795;954.24;956.2455;957.807;958.92;959.58;959.7825;959.523;958.797;957.6;955.9275;953.775}
cp_table = {40.4;46.37415;52.41395;58.5194;64.6905;71.6295;77.9943;84.4254;90.9228;97.4865;105.13725;111.8992;118.7281;125.62395;132.58675;140.972;148.1376;155.3708;162.6716;170.04;187.2675;203.00175;218.87775;234.8955;251.055;269.9025;286.5021;303.2448;320.1306;337.1595;357.67425;375.1527;392.7756;410.54295;428.45475;450.684;469.0548;487.5714;506.2338;525.042;555.4095;581.1117;607.0101;633.1047;659.3955;692.175;719.103;746.229;773.553;808.3575;836.3295;864.5013;892.8729;913.143;941.655;961.5435;990.1887;1009.6812;1028.8371;1037.7675;1045.8105;1052.9553;1069.89;1064.5071;1068.8925;1072.3365;1074.8283;1088.451;1089.2904;1089.147;1088.01;1085.8686;1082.712;1092.3567;1101.555;1110.3015;1118.5908;1126.4175;1133.7762;1140.6615;1147.068;1152.9903;1158.423;1163.3607;1167.798;1171.7295;1175.1498;1178.0535;1180.4352;1182.2895;1183.611;1184.3943;1184.634;1184.3247;1183.461;1182.0375;1180.0488;1177.4895;1174.3542}
combat_end
female_end
male_begin
common_begin
collision_box = {12;14.5}
moving_speed = {30; 125; 50; 50; 0; 0; 0; 0}
skill = {[s_transform_power_claw1];[s_transform_fast_moving1];[s_transform_dispel1];[s_transform_slow_attack1]}
additional_skill = {}
action = {1;2;3;4;5;6;7;8;9;11;15;16;17;18;19;21;22;23;32;36;39;40;41;42;43;44;45;46;47;48;50;52;53;54;55;56;57;63;64;65;70;1000;1001;1003;1004;1005;1006;1007;1008;1009;1010;1011;1012;1013;1014;1015;1016;1017;1018;1019;1020;1021;1022;1023;1024;1025;1026;1027;1028;1029;1030;1031;1032;1033;1034;1035;1036;1037;1038;1039;1040;1041;1042;1043;1044;1045;1046;1047;1048;1049;1050;1051;1052;1053;1054;1055;1056;1057;1058;1059;1060;1061;1062;1063;1064;1065;1066;1067;1068;1069;1070;1071;1072;1073;1074;1075;1076;1077;1078;1079;1080;1081;1082;1083;1084;1089;1090;1091;1092;1093;1094;1095;1096;1097;1098}
base_attack_type = sword
// 맨손인 경우에 필요한 것들
base_attack_range = 20
base_random_damage = 10
base_attack_speed = 300
base_critical_prob = 5
base_physical_attack = 5
base_magical_attack = 5
common_end
combat_begin
basic_stat= {40;21;43;30;11;25}
base_defend = {31;18;12;7;8;3;1} //맨몸 방어력. {상체;하체;투구;부츠;장갑;속옷;망토} 순서.
base_magic_defend = {9;9;5;5;13} //맨몸 마법 방어력. {오른귀걸이;왼귀걸이;오른반지;왼반지;목} 순서.
//HP, MP, CP 기본 회복량 : {Lv1; Lv2; Lv3; ... ; Lv99}의 각 레벨별 회복량 집합
org_hp_regen = {2;2.05;2.1;2.15;2.2;2.25;2.3;2.35;2.4;2.45;2.5;2.6;2.7;2.8;2.9;3;3.1;3.2;3.3;3.4;3.5;3.6;3.7;3.8;3.9;4;4.1;4.2;4.3;4.4;4.5;4.6;4.7;4.8;4.9;5;5.1;5.2;5.3;5.4;5.5;5.6;5.7;5.8;5.9;6;6.1;6.2;6.3;6.4;6.5;6.6;6.7;6.8;6.9;7;7.1;7.2;7.3;7.4;7.5;7.6;7.7;7.8;7.9;8;8.1;8.2;8.3;8.4;8.5;8.6;8.7;8.8;8.9;9;9.1;9.2;9.3;9.4;9.5;9.6;9.7;9.8;9.9;10;10.1;10.2;10.3;10.4;10.5;10.6;10.7;10.8;10.9;11;11.1;11.2;11.3}
org_mp_regen = {0.9;0.9;0.9;0.9;0.9;0.9;0.9;0.9;0.9;0.9;1.2;1.2;1.2;1.2;1.2;1.2;1.2;1.2;1.2;1.2;1.5;1.5;1.5;1.5;1.5;1.5;1.5;1.5;1.5;1.5;1.8;1.8;1.8;1.8;1.8;1.8;1.8;1.8;1.8;1.8;2.1;2.1;2.1;2.1;2.1;2.1;2.1;2.1;2.1;2.1;2.4;2.4;2.4;2.4;2.4;2.4;2.4;2.4;2.4;2.4;2.7;2.7;2.7;2.7;2.7;2.7;2.7;2.7;2.7;2.7;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3}
org_cp_regen = {2;2;2;2;2;2;2;2;2;2;2.5;2.5;2.5;2.5;2.5;2.5;2.5;2.5;2.5;2.5;3.5;3.5;3.5;3.5;3.5;3.5;3.5;3.5;3.5;3.5;4.5;4.5;4.5;4.5;4.5;4.5;4.5;4.5;4.5;4.5;5.5;5.5;5.5;5.5;5.5;5.5;5.5;5.5;5.5;5.5;6.5;6.5;6.5;6.5;6.5;6.5;6.5;6.5;6.5;6.5;7.5;7.5;7.5;7.5;7.5;7.5;7.5;7.5;7.5;7.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5;8.5}
level_bonus = {0.90;0.91;0.92;0.93;0.94;0.95;0.96;0.97;0.98;0.99;1.00;1.01;1.02;1.03;1.04;1.05;1.06;1.07;1.08;1.09;1.10;1.11;1.12;1.13;1.14;1.15;1.16;1.17;1.18;1.19;1.20;1.21;1.22;1.23;1.24;1.25;1.26;1.27;1.28;1.29;1.30;1.31;1.32;1.33;1.34;1.35;1.36;1.37;1.38;1.39;1.40;1.41;1.42;1.43;1.44;1.45;1.46;1.47;1.48;1.49;1.50;1.51;1.52;1.53;1.54;1.55;1.56;1.57;1.58;1.59;1.60;1.61;1.62;1.63;1.64;1.65;1.66;1.67;1.68;1.69;1.70;1.71;1.72;1.73;1.74;1.75;1.76;1.77;1.78;1.79;1.80;1.81;1.82;1.83;1.84;1.85;1.86;1.87;1.88}
str_bonus = {-70;-69;-68;-66;-65;-64;-63;-61;-60;-58;-57;-55;-54;-52;-50;-49;-47;-45;-43;-41;-39;-37;-34;-32;-29;-27;-24;-22;-19;-16;-13;-10;-6;-3;1;4;8;12;16;20;24;29;33;38;43;48;54;59;65;71;77;83;90;97;104;111;119;127;135;143;152;161;171;180;191;201;212;223;235;247;259;272;286;299;314;329;344;360;377;394;412;430;449;469;489;511;533;555;579;603;629;655;682;710;739;770;801;833;867}
int_bonus = {-45;-44;-43;-42;-41;-39;-38;-37;-36;-35;-33;-32;-31;-29;-28;-26;-25;-23;-22;-20;-19;-17;-15;-14;-12;-10;-8;-6;-5;-3;-1;1;3;5;7;10;12;14;16;19;21;23;26;28;31;34;36;39;42;45;47;50;53;57;60;63;66;69;73;76;80;83;87;91;95;99;102;107;111;115;119;124;128;133;137;142;147;152;157;162;167;173;178;184;189;195;201;207;213;219;226;232;239;246;253;260;267;274;282}
con_bonus = {-54;-53;-52;-50;-49;-47;-46;-44;-42;-41;-39;-37;-35;-33;-31;-29;-27;-25;-23;-20;-18;-15;-13;-10;-7;-5;-2;1;4;7;10;14;17;21;24;28;32;36;40;44;48;53;58;62;67;72;77;83;88;94;100;106;112;118;125;131;138;145;153;160;168;176;184;193;202;211;220;230;240;250;260;271;282;294;306;318;330;343;356;370;384;399;414;429;445;461;478;496;513;532;551;570;590;611;633;654;677;700;724}
dex_bonus = {-15;-14;-14;-13;-12;-11;-10;-10;-9;-8;-7;-6;-6;-5;-4;-3;-2;-1;0;1;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;24;25;26;27;28;29;30;32;33;34;35;36;38;39;40;41;43;44;45;47;48;49;51;52;53;55;56;57;59;60;62;63;65;66;68;69;71;72;74;75;77;78;80;82;83;85;87;88;90;92;93;95;97;99;100;102;104}
wit_bonus = {-60;-58;-56;-54;-52;-49;-47;-44;-42;-39;-36;-32;-29;-25;-22;-18;-14;-9;-5;0;5;10;16;22;28;34;41;48;55;63;71;80;89;98;108;118;129;141;153;165;179;193;207;223;239;256;273;292;312;332;354;376;400;425;452;479;508;539;570;604;639;676;715;756;799;843;891;940;992;1047;1104;1164;1227;1294;1364;1437;1514;1594;1679;1768;1861;1959;2062;2170;2284;2403;2528;2660;2798;2943;3095;3255;3422;3598;3783;3977;4181;4395;4620}
men_bonus = {1;2;3;4;5;6;7;8;9;11;12;13;14;15;16;17;19;20;21;22;23;25;26;27;28;30;31;32;34;35;36;38;39;40;42;43;45;46;48;49;50;52;53;55;57;58;60;61;63;65;66;68;70;71;73;75;76;78;80;82;84;85;87;89;91;93;95;97;99;101;103;105;107;109;111;113;115;117;120;122;124;126;129;131;133;135;138;140;143;145;147;150;152;155;158;160;163;165;168}
hp_table = {80.8;92.7483;104.8279;117.0388;129.381;143.259;155.9886;168.8508;181.8456;194.973;210.2745;223.7984;237.4562;251.2479;265.1735;281.944;296.2752;310.7416;325.3432;340.08;374.535;406.0035;437.7555;469.791;502.11;539.805;573.0042;606.4896;640.2612;674.319;715.3485;750.3054;785.5512;821.0859;856.9095;901.368;938.1096;975.1428;1012.4676;1050.084;1110.819;1162.2234;1214.0202;1266.2094;1318.791;1384.35;1438.206;1492.458;1547.106;1616.715;1672.659;1729.0026;1785.7458;1826.286;1883.31;1923.087;1980.3774;2019.3624;2057.6742;2075.535;2091.621;2105.9106;2139.78;2129.0142;2137.785;2144.673;2149.6566;2176.902;2178.5808;2178.294;2176.02;2171.7372;2165.424;2184.7134;2203.11;2220.603;2237.1816;2252.835;2267.5524;2281.323;2294.136;2305.9806;2316.846;2326.7214;2335.596;2343.459;2350.2996;2356.107;2360.8704;2364.579;2367.222;2368.7886;2369.268;2368.6494;2366.922;2364.075;2360.0976;2354.979;2348.7084}
mp_table = {30.3;35.8146;41.3898;47.0256;52.722;59.058;64.9332;70.8696;76.8672;82.926;89.919;96.1608;102.4644;108.8298;115.257;122.928;129.5424;136.2192;142.9584;149.76;161.595;172.0845;182.6685;193.347;204.12;217.035;228.1014;239.2632;250.5204;261.873;275.8995;287.5518;299.3004;311.1453;323.0865;338.256;350.5032;362.8476;375.2892;387.828;412.674;434.0925;455.6745;477.42;499.329;526.185;548.625;571.23;594;622.5435;645.8535;669.33;692.973;710.325;734.085;751.119;774.99;791.694;808.1175;816.48;824.103;830.9775;845.55;842.445;847.02;850.8105;853.8075;865.62;867.24;868.041;868.014;867.15;865.44;873.9375;882.063;889.812;897.18;904.1625;910.755;916.953;922.752;928.1475;933.135;937.71;941.868;945.6045;948.915;951.795;954.24;956.2455;957.807;958.92;959.58;959.7825;959.523;958.797;957.6;955.9275;953.775}
cp_table = {40.4;46.37415;52.41395;58.5194;64.6905;71.6295;77.9943;84.4254;90.9228;97.4865;105.13725;111.8992;118.7281;125.62395;132.58675;140.972;148.1376;155.3708;162.6716;170.04;187.2675;203.00175;218.87775;234.8955;251.055;269.9025;286.5021;303.2448;320.1306;337.1595;357.67425;375.1527;392.7756;410.54295;428.45475;450.684;469.0548;487.5714;506.2338;525.042;555.4095;581.1117;607.0101;633.1047;659.3955;692.175;719.103;746.229;773.553;808.3575;836.3295;864.5013;892.8729;913.143;941.655;961.5435;990.1887;1009.6812;1028.8371;1037.7675;1045.8105;1052.9553;1069.89;1064.5071;1068.8925;1072.3365;1074.8283;1088.451;1089.2904;1089.147;1088.01;1085.8686;1082.712;1092.3567;1101.555;1110.3015;1118.5908;1126.4175;1133.7762;1140.6615;1147.068;1152.9903;1158.423;1163.3607;1167.798;1171.7295;1175.1498;1178.0535;1180.4352;1182.2895;1183.611;1184.3943;1184.634;1184.3247;1183.461;1182.0375;1180.0488;1177.4895;1174.3542}
combat_end
male_end
transform_end
У лыжи более менее верно.
А теперь смотрим дальше
Основано всё на базе npc и прописаны тут data/npc - и в корне не верно.
А так же мега реализация в Player:
/**
* Устанавливает режим трансформаии<BR>
*
* @param transformationId идентификатор трансформации
* Известные режимы:<BR>
* <li>0 - стандартный вид чара
* <li>1 - Onyx Beast
* <li>2 - Death Blader
* <li>etc.
*/
public void setTransformation(int transformationId)
{
if(transformationId == _transformationId || _transformationId != 0 && transformationId != 0)
return;

// Для каждой трансформации свой набор скилов
if(transformationId == 0) // Обычная форма
{
// Останавливаем текущий эффект трансформации
for(Effect effect : getEffectList().getAllEffects())
if(effect != null && effect.getEffectType() == EffectType.Transformation)
{
if (effect.calc() == 0) // Не обрываем Dispel
continue;
effect.exit();
preparateToTransform(effect.getSkill());
break;
}

// Удаляем скилы трансформации
if(!_transformationSkills.isEmpty())
{
for(Skill s : _transformationSkills.values())
if(!s.isCommon() && !SkillAcquireHolder.getInstance().isSkillPossible(this, s) && !s.isHeroic())
super.removeSkill(s);
_transformationSkills.clear();
}
}
else
{
int _id = 0;
int _level = 1;

final int baseClassId = getBaseClassIdRvRMode();

switch(baseClassId)
{
case 97://Cardinal
_id = 24001;
break;
case 98://Hierophant
_id = 24002;
break;
case 100://SwordMuse
_id = 24003;
break;
case 105://EvaSaint
_id = 24004;
break;
case 107://SpectralDancer
_id = 24005;
break;
case 112://ShillienSaint
_id = 24006;
break;
case 115://Dominator
_id = 24007;
break;
case 116://Doomcryer
_id = 24008;
break;
}

Skill _skill = SkillTable.getInstance().getInfo(_id, _level);
if(_skill != null)
{
super.removeSkill(_skill);
removeSkillFromShortCut(_skill.getId());
}

if(!isCursedWeaponEquipped())
{
// Добавляем скилы трансформации
for(Effect effect : getEffectList().getAllEffects())
if(effect != null && effect.getEffectType() == EffectType.Transformation)
{
if(effect.getSkill() instanceof Transformation && ((Transformation) effect.getSkill()).isDisguise)
{
for(Skill s : getAllSkills())
if(s != null && (s.isActive() || s.isToggle()))
_transformationSkills.put(s.getId(), s);
}
else
for(AddedSkill s : effect.getSkill().getAddedSkills())
if(s.level == 0) // трансформация позволяет пользоваться обычным скиллом
{
int s2 = getSkillLevel(s.id);
if(s2 > 0)
_transformationSkills.put(s.id, SkillTable.getInstance().getInfo(s.id, s2));
}
else if(s.level == -2) // XXX: дикий изжоп для скиллов зависящих от уровня игрока
{
int learnLevel = Math.max(effect.getSkill().getMagicLevel(), 40);
int maxLevel = SkillTable.getInstance().getBaseLevel(s.id);
int curSkillLevel = 1;
if(maxLevel > 3)
curSkillLevel += getLevel() - learnLevel;
else
curSkillLevel += (getLevel() - learnLevel) / ((76 - learnLevel) / maxLevel); // не спрашивайте меня что это такое
curSkillLevel = Math.min(Math.max(curSkillLevel, 1), maxLevel);
_transformationSkills.put(s.id, SkillTable.getInstance().getInfo(s.id, curSkillLevel));
}
else
_transformationSkills.put(s.id, s.getSkill());
preparateToTransform(effect.getSkill());
break;
}
}
else
preparateToTransform(null);

if(!isInOlympiadMode() && !isCursedWeaponEquipped() && _hero && baseClassId == getActiveClassId())
{
// Добавляем хиро скиллы проклятому трансформу
_transformationSkills.put(395, SkillTable.getInstance().getInfo(395, 1));
_transformationSkills.put(396, SkillTable.getInstance().getInfo(396, 1));
_transformationSkills.put(1374, SkillTable.getInstance().getInfo(1374, 1));
_transformationSkills.put(1375, SkillTable.getInstance().getInfo(1375, 1));
_transformationSkills.put(1376, SkillTable.getInstance().getInfo(1376, 1));
}

for(Skill s : _transformationSkills.values())
addSkill(s, false);
}

_transformationId = transformationId;

sendPacket(new ExBasicActionList(this));
sendPacket(new SkillList(this));
sendPacket(new ShortCutInit(this));
for(int shotId : getAutoSoulShot())
sendPacket(new ExAutoSoulShot(shotId, true));
broadcastUserInfo(true);
}
 
Единственно, что верное в трансформах так это скилы сделаны у гринда, и то не совсем даже и верно
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Давай уже сразу фул сет скриптов OFF HF
А то по кусочках:)
 
Назад
Сверху Снизу