summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/battlegrounds.conf14
-rw-r--r--configure.in1
-rw-r--r--db/const.txt6
-rw-r--r--db/pre-re/item_group.conf1704
-rw-r--r--db/re/item_group.conf1784
-rw-r--r--npc/custom/bgqueue/flavius.txt723
-rw-r--r--src/char/pincode.c1
-rw-r--r--src/char/pincode.h1
-rw-r--r--src/common/mmo.h3
-rw-r--r--src/common/socket.h2
-rw-r--r--src/map/atcommand.c2
-rw-r--r--src/map/atcommand.h2
-rw-r--r--src/map/battle.c433
-rw-r--r--src/map/battle.h2
-rw-r--r--src/map/battleground.c69
-rw-r--r--src/map/battleground.h4
-rw-r--r--src/map/buyingstore.c2
-rw-r--r--src/map/buyingstore.h2
-rw-r--r--src/map/chrif.c12
-rw-r--r--src/map/chrif.h11
-rw-r--r--src/map/clif.c67
-rw-r--r--src/map/clif.h6
-rw-r--r--src/map/guild.c1
-rw-r--r--src/map/guild.h2
-rw-r--r--src/map/homunculus.c2
-rw-r--r--src/map/homunculus.h2
-rw-r--r--src/map/instance.c2
-rw-r--r--src/map/instance.h2
-rw-r--r--src/map/irc-bot.c2
-rw-r--r--src/map/irc-bot.h2
-rw-r--r--src/map/itemdb.c2
-rw-r--r--src/map/itemdb.h2
-rw-r--r--src/map/log.c1
-rw-r--r--src/map/log.h2
-rw-r--r--src/map/mail.c2
-rw-r--r--src/map/mail.h2
-rw-r--r--src/map/map.c6
-rw-r--r--src/map/map.h2
-rw-r--r--src/map/npc.c120
-rw-r--r--src/map/packets_struct.h6
-rw-r--r--src/map/party.c2
-rw-r--r--src/map/party.h2
-rw-r--r--src/map/pc.c2
-rw-r--r--src/map/pc.h8
-rw-r--r--src/map/script.c191
-rw-r--r--src/map/script.h16
-rw-r--r--src/map/searchstore.c1
-rw-r--r--src/map/searchstore.h2
-rw-r--r--src/map/skill.c117
-rw-r--r--src/map/skill.h21
-rw-r--r--src/map/status.c94
-rw-r--r--src/map/status.h2
-rw-r--r--src/map/storage.c3
-rw-r--r--src/map/storage.h4
-rw-r--r--src/map/trade.c2
-rw-r--r--src/map/trade.h2
-rw-r--r--src/map/unit.c2
-rw-r--r--src/map/vending.c2
-rw-r--r--src/map/vending.h2
59 files changed, 4357 insertions, 1129 deletions
diff --git a/conf/battlegrounds.conf b/conf/battlegrounds.conf
index b43899dd7..1c32d32ce 100644
--- a/conf/battlegrounds.conf
+++ b/conf/battlegrounds.conf
@@ -36,9 +36,11 @@ battlegrounds: (
minTeamPlayers: 6 /* minimum amount of team members required for a team (party or guild) to join */
delay_var: "Tierra_BG_Tick" /* npc variable name that will store the delay for this match */
maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */
+ fillDuration: 20 /* time in seconds to wait for more applications when minimum has been reached */
+ pGameDuration: 20 /* time to wait for players to confirm their attendence after queueing process has finished */
},{
name: "Flavius" //must match the name in client files
- event: "Flavius_BG1::OnPlayerListReady"
+ event: "start#bat_b01::OnPlayerListReady"
minLevel: 80
maxLevel: 150
reward: {/* amount of badges awarded on each case */
@@ -46,11 +48,13 @@ battlegrounds: (
loss: 3
draw: 3
}
- minPlayers: 6 /* minimum amount of players to start */
+ minPlayers: 3 /* minimum amount of players to start (DEBUG VALUE, CHANGE BACK) */
maxPlayers: 60 /* maximum amount of players */
minTeamPlayers: 6 /* minimum amount of team members required for a team (party or guild) to join */
delay_var: "Flavius_BG_Tick" /* npc variable name that will store the delay for this match */
maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */
+ fillDuration: 20 /* time in seconds to wait for more applications when minimum has been reached */
+ pGameDuration: 20 /* time to wait for players to confirm their attendence after queueing process has finished */
},{
name: "KVM (Level 80 and up)" //must match the name in client files
event: "KvM03_BG::OnPlayerListReady"
@@ -66,6 +70,8 @@ battlegrounds: (
minTeamPlayers: 5 /* minimum amount of team members required for a team (party or guild) to join */
delay_var: "KVM_BG_Tick" /* npc variable name that will store the delay for this match */
maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */
+ fillDuration: 20 /* time in seconds to wait for more applications when minimum has been reached */
+ pGameDuration: 20 /* time to wait for players to confirm their attendence after queueing process has finished */
},{
name: "KVM (Level 60~79)" //must match the name in client files
event: "KvM03_BG::OnPlayerListReady"
@@ -81,6 +87,8 @@ battlegrounds: (
minTeamPlayers: 5 /* minimum amount of team members required for a team (party or guild) to join */
delay_var: "KVM_BG_Tick" /* npc variable name that will store the delay for this match */
maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */
+ fillDuration: 20 /* time in seconds to wait for more applications when minimum has been reached */
+ pGameDuration: 20 /* time to wait for players to confirm their attendence after queueing process has finished */
},{
name: "KVM (Level 59 and below)" //must match the name in client files
event: "KvM03_BG::OnPlayerListReady"
@@ -96,6 +104,8 @@ battlegrounds: (
minTeamPlayers: 5 /* minimum amount of team members required for a team (party or guild) to join */
delay_var: "KVM_BG_Tick" /* npc variable name that will store the delay for this match */
maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */
+ fillDuration: 20 /* time in seconds to wait for more applications when minimum has been reached */
+ pGameDuration: 20 /* time to wait for players to confirm their attendence after queueing process has finished */
}
)
}) \ No newline at end of file
diff --git a/configure.in b/configure.in
index f52fcf00b..d98badbfb 100644
--- a/configure.in
+++ b/configure.in
@@ -569,6 +569,7 @@ if test "$compiler_supports_shared_objects" = "no" ; then
else
AC_MSG_RESULT([$compiler_shared_objects])
SOFLAGS="$SOFLAGS $compiler_shared_objects"
+ AC_SUBST([SOFLAGS])
#
# shared objects need position independent code; some platforms emit
diff --git a/db/const.txt b/db/const.txt
index b048dfd86..4a5b0f4a3 100644
--- a/db/const.txt
+++ b/db/const.txt
@@ -1053,7 +1053,7 @@ SC_BANDING_DEFENCE 384
SC_EARTHDRIVE 385
SC_INSPIRATION 386
SC_SPELLFIST 387
-SC_CRYSTALIZE 388
+SC_COLD 388
SC_STRIKING 389
SC_WARMER 390
SC_VACUUM_EXTREME 391
@@ -3159,3 +3159,7 @@ IT_PETARMOR 8
IT_AMMO 10
IT_DELAYCONSUME 11
IT_CASH 18
+
+HQO_OnDeath 0
+HQO_OnLogout 1
+HQO_OnMapChange 2
diff --git a/db/pre-re/item_group.conf b/db/pre-re/item_group.conf
index b2f4b1ac4..a8beeca43 100644
--- a/db/pre-re/item_group.conf
+++ b/db/pre-re/item_group.conf
@@ -19,7 +19,7 @@
*/
Old_Card_Album: (
- ("Poring_Card",8),
+ ("Poring_Card",9),
("Fabre_Card",10),
("Pupa_Card",6),
("Drops_Card",11),
@@ -140,7 +140,6 @@ Old_Card_Album: (
"Baphomet__Card",
"Daydric_Card",
"Khalitzburg_Card",
- "Joker_Card",
"Evil_Druid_Card",
"Gargoyle_Card",
"Goat_Card",
@@ -191,6 +190,7 @@ Old_Card_Album: (
"Mystcase_Card",
"Miyabi_Ningyo_Card",
"Violy_Card",
+ "Wander_Man_Card",
"Bon_Gun_Card",
"Brilight_Card",
"Bloody_Murderer_Card",
@@ -293,6 +293,7 @@ Old_Card_Album: (
"Hyegun_Card",
"Phendark_Card",
"Heater_Card",
+ "Antonio_Card",
"Agav_Card",
"Echio_Card",
"Vanberk_Card",
@@ -324,12 +325,6 @@ Old_Card_Album: (
"Necromancer_Card"
)
Gift_Box: (
- ("Oridecon_Stone",4),
- ("Elunium_Stone",2),
- ("Oridecon",2),
- "Elunium",
- "Emperium",
- "Steel",
"Star_Crumb",
"Flame_Heart",
"Mistic_Frozen",
@@ -387,24 +382,20 @@ Gift_Box: (
"Red_Potion",
"Orange_Potion",
"Yellow_Potion",
+ "White_Potion",
+ "Blue_Potion",
"Green_Potion",
+ "Royal_Jelly",
"Candy",
"Candy_Striper",
"Pet_Food",
"Well_Baked_Cookie",
"Piece_Of_Cake",
- "Old_Blue_Box",
"Old_Violet_Box",
("Gift_Box",19),
"Girl's_Diary"
)
Gift_Box_1: (
- ("Oridecon_Stone",4),
- ("Elunium_Stone",2),
- ("Oridecon",2),
- "Elunium",
- "Emperium",
- "Steel",
"Star_Crumb",
"Flame_Heart",
"Mistic_Frozen",
@@ -462,24 +453,20 @@ Gift_Box_1: (
"Red_Potion",
"Orange_Potion",
"Yellow_Potion",
+ "White_Potion",
+ "Blue_Potion",
"Green_Potion",
+ "Royal_Jelly",
"Candy",
"Candy_Striper",
"Pet_Food",
"Well_Baked_Cookie",
"Piece_Of_Cake",
- "Old_Blue_Box",
"Old_Violet_Box",
("Gift_Box",19),
"Girl's_Diary"
)
Gift_Box_2: (
- ("Oridecon_Stone",4),
- ("Elunium_Stone",2),
- ("Oridecon",2),
- "Elunium",
- "Emperium",
- "Steel",
"Star_Crumb",
"Flame_Heart",
"Mistic_Frozen",
@@ -537,24 +524,20 @@ Gift_Box_2: (
"Red_Potion",
"Orange_Potion",
"Yellow_Potion",
+ "White_Potion",
+ "Blue_Potion",
"Green_Potion",
+ "Royal_Jelly",
"Candy",
"Candy_Striper",
"Pet_Food",
"Well_Baked_Cookie",
"Piece_Of_Cake",
- "Old_Blue_Box",
"Old_Violet_Box",
("Gift_Box",19),
"Girl's_Diary"
)
Gift_Box_3: (
- ("Oridecon_Stone",4),
- ("Elunium_Stone",2),
- ("Oridecon",2),
- "Elunium",
- "Emperium",
- "Steel",
"Star_Crumb",
"Flame_Heart",
"Mistic_Frozen",
@@ -612,24 +595,20 @@ Gift_Box_3: (
"Red_Potion",
"Orange_Potion",
"Yellow_Potion",
+ "White_Potion",
+ "Blue_Potion",
"Green_Potion",
+ "Royal_Jelly",
"Candy",
"Candy_Striper",
"Pet_Food",
"Well_Baked_Cookie",
"Piece_Of_Cake",
- "Old_Blue_Box",
"Old_Violet_Box",
("Gift_Box",19),
"Girl's_Diary"
)
Gift_Box_4: (
- ("Oridecon_Stone",4),
- ("Elunium_Stone",2),
- ("Oridecon",2),
- "Elunium",
- "Emperium",
- "Steel",
"Star_Crumb",
"Flame_Heart",
"Mistic_Frozen",
@@ -687,13 +666,15 @@ Gift_Box_4: (
"Red_Potion",
"Orange_Potion",
"Yellow_Potion",
+ "White_Potion",
+ "Blue_Potion",
"Green_Potion",
+ "Royal_Jelly",
"Candy",
"Candy_Striper",
"Pet_Food",
"Well_Baked_Cookie",
"Piece_Of_Cake",
- "Old_Blue_Box",
"Old_Violet_Box",
("Gift_Box",19),
"Girl's_Diary"
@@ -742,7 +723,6 @@ Old_Blue_Box: (
("Thief_Clothes",3),
("Thief_Clothes_",3),
("Ninja_Suit",3),
- ("Wedding_Dress",3),
("G_Strings",3),
("Novice_Breast",3),
("Full_Plate_Armor",3),
@@ -999,6 +979,7 @@ Old_Blue_Box: (
("Snowy_Horn",3),
("Mini_Propeller",3),
("Mini_Glasses",3),
+ ("Prontera_Army_Cap",3),
("Pierrot_Nose",3),
("Gangster_Patch",3),
("Ganster_Mask",3),
@@ -1024,7 +1005,6 @@ Old_Blue_Box: (
("Viking_Helm",3),
("Joker_Jester",3),
("Machoman_Glasses",3),
- ("Puppy_Love",3),
("Safety_Helmet",3),
("Indian_Hair_Piece",3),
("Antenna",3),
@@ -1074,7 +1054,7 @@ Old_Blue_Box: (
("Illusion_Flower",12),
("Shoot",12),
("Flower",12),
- ("Emperium",12),
+ ("Empty_Bottle",12),
("Yellow_Gemstone",12),
("Red_Gemstone",12),
("Blue_Gemstone",12),
@@ -1115,8 +1095,6 @@ Old_Blue_Box: (
("Grasshopper_Doll",12),
("Monkey_Doll",12),
("Raccoondog_Doll",12),
- ("Oridecon_Stone",12),
- ("Elunium_Stone",12),
("Danggie",12),
("Tree_Root",12),
("Reptile_Tongue",12),
@@ -1184,7 +1162,6 @@ Old_Blue_Box: (
("Turtle_Shell",12),
("Voucher_Of_Orcish_Hero",12),
("Gold",12),
- ("Alchol",12),
("Detrimindexta",12),
("Karvodailnirol",12),
("Counteragent",12),
@@ -1197,8 +1174,6 @@ Old_Blue_Box: (
("Violet_Dyestuffs",12),
("White_Dyestuffs",12),
("Black_Dyestuffs",12),
- ("Oridecon",12),
- ("Elunium",12),
("Anvil",12),
("Oridecon_Anvil",12),
("Golden_Anvil",12),
@@ -1243,7 +1218,6 @@ Old_Blue_Box: (
("Porcupine_Spike",12),
("Wild_Boar's_Mane",12),
("Tiger's_Skin",12),
- ("Tiger_Footskin",12),
("Limb_Of_Mantis",12),
("Blossom_Of_Maneater",12),
("Root_Of_Maneater",12),
@@ -1393,7 +1367,6 @@ Old_Blue_Box: (
("Mystery_Iron_Bit",12),
("Great_Wing",12),
("Taegeuk_Plate",12),
- ("Tuxedo",12),
("Leopard_Skin",12),
("Leopard_Talon",12),
("Packing_Ribbon",12),
@@ -1468,7 +1441,9 @@ Old_Blue_Box: (
("Red_Potion",12),
("Orange_Potion",12),
("Yellow_Potion",12),
- ("Green_Potion",11),
+ ("White_Potion",12),
+ ("Blue_Potion",12),
+ ("Green_Potion",12),
("Red_Herb",12),
("Yellow_Herb",12),
("White_Herb",12),
@@ -1487,6 +1462,7 @@ Old_Blue_Box: (
("Fruit_Of_Mastela",12),
("Holy_Water",12),
("Panacea",12),
+ ("Royal_Jelly",12),
("Monster's_Feed",12),
("Candy",12),
("Candy_Striper",12),
@@ -1511,8 +1487,9 @@ Old_Blue_Box: (
("Rice_Cake",12),
("Chocolate",12),
("White_Chocolate",12),
- "Wing_Of_Butterfly",
- ("Old_Blue_Box",1173),
+ ("Wing_Of_Fly",12),
+ ("Wing_Of_Butterfly",12),
+ ("Branch_Of_Dead_Tree",512),
("Anodyne",12),
("Aloebera",12),
("Yggdrasilberry",12),
@@ -1568,6 +1545,7 @@ Old_Blue_Box: (
"Angelic_Chain",
"Satanic_Chain",
"Sharp_Gear",
+ "Ghost_Bandana",
"Ring_",
"Earring_",
"Necklace_",
@@ -1674,14 +1652,14 @@ Old_Blue_Box: (
"Pot",
"Burnt_Parts",
"Pocket_Watch",
- ("Ice_Heart",21),
- ("Ice_Scale",22),
- ("Bloody_Rune",22),
- ("Rotten_Meat",22),
- ("Sticky_Poison",22),
+ ("Ice_Heart",15),
+ ("Ice_Scale",15),
+ ("Bloody_Rune",15),
+ ("Rotten_Meat",15),
+ ("Sticky_Poison",15),
"Suspicious_Hat",
"White_Mask",
- ("Old_White_Cloth",33),
+ ("Old_White_Cloth",34),
("Clattering_Skull",32),
("Broken_Farming_Utensil",34),
"Orleans_Server",
@@ -1750,7 +1728,6 @@ Old_Violet_Box: (
("Silver_Robe_",7),
("Thief_Clothes_",7),
("Ninja_Suit",7),
- ("Wedding_Dress",7),
("G_Strings",7),
("Novice_Breast",7),
("Novice_Plate",7),
@@ -1926,6 +1903,7 @@ Old_Violet_Box: (
("Snowy_Horn",7),
("Mini_Propeller",7),
("Mini_Glasses",7),
+ ("Prontera_Army_Cap",7),
("Pierrot_Nose",7),
("Gangster_Patch",7),
("Ganster_Mask",7),
@@ -1951,7 +1929,6 @@ Old_Violet_Box: (
("Viking_Helm",7),
("Joker_Jester",7),
("Machoman_Glasses",7),
- ("Puppy_Love",7),
("Safety_Helmet",7),
("Indian_Hair_Piece",7),
("Antenna",7),
@@ -2001,7 +1978,7 @@ Old_Violet_Box: (
("Illusion_Flower",14),
("Shoot",14),
("Flower",14),
- ("Emperium",14),
+ ("Empty_Bottle",14),
("Yellow_Gemstone",14),
("Red_Gemstone",14),
("Blue_Gemstone",14),
@@ -2042,8 +2019,6 @@ Old_Violet_Box: (
("Grasshopper_Doll",14),
("Monkey_Doll",14),
("Raccoondog_Doll",14),
- ("Oridecon_Stone",14),
- ("Elunium_Stone",14),
("Danggie",14),
("Tree_Root",14),
("Reptile_Tongue",14),
@@ -2111,7 +2086,6 @@ Old_Violet_Box: (
("Turtle_Shell",14),
("Voucher_Of_Orcish_Hero",14),
("Gold",14),
- ("Alchol",14),
("Detrimindexta",14),
("Karvodailnirol",14),
("Counteragent",14),
@@ -2124,9 +2098,7 @@ Old_Violet_Box: (
("Violet_Dyestuffs",14),
("White_Dyestuffs",14),
("Black_Dyestuffs",14),
- ("Oridecon",14),
- ("Elunium",14),
- ("Anvil",14),
+ ("Anvil",13),
("Oridecon_Anvil",14),
("Golden_Anvil",14),
("Emperium_Anvil",14),
@@ -2170,7 +2142,6 @@ Old_Violet_Box: (
("Porcupine_Spike",14),
("Wild_Boar's_Mane",14),
("Tiger's_Skin",14),
- ("Tiger_Footskin",14),
("Limb_Of_Mantis",14),
("Blossom_Of_Maneater",14),
("Root_Of_Maneater",14),
@@ -2320,7 +2291,6 @@ Old_Violet_Box: (
("Mystery_Iron_Bit",14),
("Great_Wing",14),
("Taegeuk_Plate",14),
- ("Tuxedo",14),
("Leopard_Skin",14),
("Leopard_Talon",14),
("Packing_Ribbon",14),
@@ -2395,6 +2365,8 @@ Old_Violet_Box: (
("Red_Potion",14),
("Orange_Potion",14),
("Yellow_Potion",14),
+ ("White_Potion",14),
+ ("Blue_Potion",14),
("Green_Potion",14),
("Red_Herb",14),
("Yellow_Herb",14),
@@ -2414,6 +2386,7 @@ Old_Violet_Box: (
("Fruit_Of_Mastela",14),
("Holy_Water",14),
("Panacea",14),
+ ("Royal_Jelly",14),
("Monster's_Feed",14),
("Candy",14),
("Candy_Striper",14),
@@ -2438,7 +2411,9 @@ Old_Violet_Box: (
("Rice_Cake",14),
("Chocolate",14),
("White_Chocolate",14),
- ("Old_Blue_Box",614),
+ ("Wing_Of_Fly",14),
+ ("Wing_Of_Butterfly",14),
+ ("Branch_Of_Dead_Tree",214),
("Anodyne",14),
("Aloebera",14),
("Yggdrasilberry",14),
@@ -2490,12 +2465,11 @@ Old_Violet_Box: (
("Poison_Bottle",14),
("Gold_Pill",14),
("Guard_",6),
- "Tiara",
- "Crown",
"Coronet",
"Angelic_Chain",
"Satanic_Chain",
"Sharp_Gear",
+ "Ghost_Bandana",
"Elven_Ears",
"Holy_Robe",
"Mage_Coat",
@@ -2512,8 +2486,6 @@ Old_Violet_Box: (
"Pair_Of_Red_Ribbon",
"Loard_Circlet",
"Bone_Helm",
- "Corsair",
- "Assassin_Mask",
"Horn_Of_Succubus",
"Inccubus_Horn",
"Spinx_Helm",
@@ -2619,7 +2591,7 @@ Old_Violet_Box: (
"Suspicious_Hat",
"White_Mask",
("Old_Violet_Box",103),
- ("Old_White_Cloth",16),
+ ("Old_White_Cloth",17),
("Clattering_Skull",16),
("Broken_Farming_Utensil",17),
"Inverse_Scale",
@@ -2747,13 +2719,13 @@ Accessory_Box: (
"Rosary_",
"Brooch_",
"Earring_",
+ ("Vesper_Core01",2),
("Vesper_Core02",2),
("Vesper_Core03",2),
("Vesper_Core04",2),
"Thimble_Of_Archer_",
("Red_Silk_Seal",2),
"Orleans_Glove",
- "Vesper_Core01",
"Spiritual_Ring",
"Shinobi's_Sash",
"Hyper_Changer",
@@ -2776,7 +2748,8 @@ Wrapped_Mask: (
("Goblin_Mask_03",10),
("Goblin_Mask_04",10),
("Mr_Smile",9),
- "Zherlthsh_Mask"
+ "Zherlthsh_Mask",
+ ("Hahoe_Mask",2)
)
Bundle_Of_Magic_Scroll: (
"Earth_Scroll_1_5",
@@ -2836,6 +2809,7 @@ Food_Package: (
"Leaflet_Of_Hinal",
"Leaflet_Of_Aloe",
"Fruit_Of_Mastela",
+ "Royal_Jelly",
"Milk",
"Lemon",
"Long_Rice_Cake",
@@ -2846,6 +2820,8 @@ First_Aid_Kit: (
("Orange_Potion",5),
("Yellow_Potion",5),
("Slow_Down_Potion",5),
+ ("White_Potion",5),
+ ("Blue_Potion",5),
("Green_Potion",5),
("Red_Slim_Potion",5),
("Yellow_Slim_Potion",5),
@@ -2876,14 +2852,19 @@ Cookie_Bag: (
"Chocolate_Drink",
("Candy",4)
)
+Red_Box_: (
+ ("Magic_Eyes",9),
+ ("Hibiscus",10),
+ ("Charming_Ribbon",10)
+)
Egg_Boy: (
("Grape",299),
("Rice_Ball",522),
("Prohibition_Red_Candle",20),
("Realgar_Wine",100),
("Exorcize_Herb",50),
- ("Crown",2),
- "Inccubus_Horn"
+ ("Ghost_Bandana",5),
+ ("Inccubus_Horn",2)
)
Egg_Girl: (
("Grape",299),
@@ -2891,18 +2872,20 @@ Egg_Girl: (
("Sway_Apron",20),
("Realgar_Wine",100),
("Exorcize_Herb",50),
- ("Tiara",2),
("Hair_Protector",5),
- "Horn_Of_Succubus"
+ ("Horn_Of_Succubus",2)
)
Giftbox_China: (
"Orange_Potion",
"Yellow_Potion",
+ "White_Potion",
+ "Blue_Potion",
"Green_Potion",
"Honey",
"Leaflet_Of_Hinal",
("Leaflet_Of_Aloe",2),
"Panacea",
+ "Royal_Jelly",
"Candy",
"Candy_Striper",
("Old_Blue_Box",40),
@@ -2924,7 +2907,6 @@ Giftbox_China: (
"Singing_Plant",
"Ment",
"Illusion_Flower",
- "Emperium",
"Yellow_Gemstone",
"Red_Gemstone",
"Blue_Gemstone",
@@ -2960,8 +2942,6 @@ Giftbox_China: (
"Grasshopper_Doll",
"Monkey_Doll",
"Raccoondog_Doll",
- "Oridecon_Stone",
- "Elunium_Stone",
"Jellopy",
"Garlet",
"Scell",
@@ -2970,7 +2950,6 @@ Giftbox_China: (
"Mementos",
"Voucher_Of_Orcish_Hero",
"Gold",
- "Alchol",
"Detrimindexta",
"Karvodailnirol",
"Counteragent",
@@ -2983,8 +2962,6 @@ Giftbox_China: (
"Violet_Dyestuffs",
"White_Dyestuffs",
"Black_Dyestuffs",
- "Oridecon",
- "Elunium",
"Anvil",
"Oridecon_Anvil",
"Golden_Anvil",
@@ -3135,7 +3112,6 @@ Giftbox_China: (
"Silver_Robe_",
"Thief_Clothes_",
"Ninja_Suit",
- "Wedding_Dress",
"G_Strings",
"Sandals_",
"Shoes_",
@@ -3159,48 +3135,51 @@ Giftbox_China: (
"Silver_Ring",
"Flower_Ring",
"Diamond_Ring",
- "Puppy_Love",
"Safety_Helmet",
"Indian_Hair_Piece",
"Fin_Helm",
- "Egg_Shell"
-)
-Old_Bleu_Box: (
- ("Cold_Scroll_1_5",2),
- ("Fire_Scroll_1_5",2),
- ("Wind_Scroll_1_5",2),
- ("Fire_Scroll_2_5",2),
- ("Fire_Scroll_3_5",2),
- ("Holy_Scroll_1_5",2),
- ("Cold_Scroll_2_5",2),
- ("Gift_Box",2),
- ("Milk",2),
- ("Well_Baked_Cookie",2)
+ ("Egg_Shell",2)
)
-Holy_Egg_2: (
- ("Oridecon",3),
- ("Elunium",10),
- ("White_Slim_Potion",30),
- ("Blue_Potion",30),
- ("Yggdrasilberry",3),
- ("Seed_Of_Yggdrasil",2),
- ("Leaf_Of_Yggdrasil",15),
- ("Old_Card_Album",5),
- "Drooping_Bunny"
+Red_Box: (
+ ("Twin_Ribbon",9),
+ ("Helm_Of_Darkness",11),
+ "Puppy_Hat",
+ ("Geographer_Band",11),
+ ("Laurel_Wreath",11),
+ ("Bird_Nest_Hat",11),
+ ("Alice_Doll",11),
+ ("Hibiscus",11),
+ ("Magic_Eyes",11),
+ ("Charming_Ribbon",11),
+ "Chinese_Crown",
+ ("Crescent_Helm",11),
+ ("Kabuki_Mask",12),
+ "Cat_Hat"
)
-Red_Box_: (
- ("Magic_Eyes",9),
- ("Hibiscus",10),
- ("Charming_Ribbon",10)
+Green_Box: (
+ ("Str_Dish10",99),
+ ("Int_Dish10",100),
+ ("Vit_Dish10",100),
+ ("Agi_Dish10",100),
+ ("Dex_Dish10",100),
+ ("Luk_Dish10",100),
+ ("Yggdrasilberry",99),
+ ("Seed_Of_Yggdrasil",100),
+ ("Fire_Cracker",100),
+ ("Chocolate_Drink",100),
+ "Puppy_Hat"
)
-Hometown_Gift: (
- "Hearty_Rice_Cake",
- "Salty_Rice_Cake",
- "Lucky_Rice_Cake",
- "Sesame_Pastry",
- "Honey_Pastry",
- "Rainbow_Cake",
- "Korea_Rice_Cake"
+Old_Bleu_Box: (
+ "Cold_Scroll_1_5",
+ "Fire_Scroll_1_5",
+ "Wind_Scroll_1_5",
+ "Fire_Scroll_2_5",
+ "Fire_Scroll_3_5",
+ "Holy_Scroll_1_5",
+ "Cold_Scroll_2_5",
+ "Gift_Box",
+ "Milk",
+ "Well_Baked_Cookie"
)
Old_Yellow_Box: (
"Cookie_Hat",
@@ -3213,6 +3192,8 @@ Old_Gift_Box: (
("Fallen_Leaves_",45)
)
Magic_Card_Album: (
+ "Angeling_Card",
+ "Gryphon_Card",
"Dark_Illusion_Card",
"Deviling_Card",
("Dragon_Fly_Card",10),
@@ -3248,30 +3229,21 @@ Masquerade_Ball_Box: (
("Marvelous_Wig_",10),
("Ati_Atihan_Hat_",10)
)
-Louise_Costume_Box: (
- ("Red_Bag",16),
- ("Cool_Summer_Outfit",2)
-)
-Xmas_Gift: (
- ("Fire_Cracker_Love",6),
- ("Gift_Box",66),
- ("Old_Bleu_Box",36),
- ("Set_Of_Taiming_Item",6),
- ("Wrapped_Mask",6),
- ("Old_Blue_Box",24),
- ("Bundle_Of_Magic_Scroll",12),
- ("Buche_De_Noel",24),
- ("Speed_Up_Potion",12),
- ("Slow_Down_Potion",12),
- ("Cookie_Bag",12),
- ("Red_Bag",6),
- ("First_Aid_Kit",12),
- ("Crystal_Jewel__",12),
- ("HandMade_Chocolate",18),
- ("HandMade_Chocolate_",18),
- ("Chocolate_Drink",18),
- ("Santa's_Hat_",12),
- ("Fire_Cracker_Xmas",4)
+Easter_Scroll: (
+ ("Silver_Knife_Of_Chaste",109),
+ ("Heart_Of_Her",110),
+ ("No_Recipient",110),
+ ("Old_Broom",110),
+ ("Armlet_Of_Obedience",110),
+ ("Shining_Stone",110),
+ ("Contracts_In_Shadow",110),
+ ("Book_Of_Devil",110),
+ ("Pet_Incubator",205),
+ "Munak_Turban",
+ "Bongun_Hat",
+ "Munak_Turban_",
+ "Bongun_Hat_",
+ "Ghost_Bandana"
)
Tresure_Box_WoE: (
("Wind_Arrow_Container",23),
@@ -3301,6 +3273,31 @@ Masquerade_Ball_Box2: (
("Cap_Of_Blindness",10),
"Dress_Hat"
)
+Louise_Costume_Box: (
+ ("Red_Bag",16),
+ ("Cool_Summer_Outfit",2)
+)
+Xmas_Gift: (
+ ("Fire_Cracker_Love",6),
+ ("Gift_Box",66),
+ ("Old_Bleu_Box",36),
+ ("Set_Of_Taiming_Item",6),
+ ("Wrapped_Mask",6),
+ ("Old_Blue_Box",24),
+ ("Bundle_Of_Magic_Scroll",12),
+ ("Buche_De_Noel",24),
+ ("Speed_Up_Potion",12),
+ ("Slow_Down_Potion",12),
+ ("Cookie_Bag",12),
+ ("Red_Bag",6),
+ ("First_Aid_Kit",12),
+ ("Crystal_Jewel__",12),
+ ("HandMade_Chocolate",18),
+ ("HandMade_Chocolate_",18),
+ ("Chocolate_Drink",18),
+ ("Santa's_Hat_",12),
+ ("Fire_Cracker_Xmas",4)
+)
Pierre_Treasurebox: (
("Scarlet_Dyestuffs",3),
("Lemon_Dyestuffs",3),
@@ -3342,35 +3339,1352 @@ Cherish_Box_Ori: (
("Ragnarok_Limited_Ed",3)
)
Splendid_Box: (
- //not yet supported/not in pre-re "Imperial_Guard",
+//unknown/unsupported - ("2153",2),
+ ("Bone_Plate",2),
+//unknown/unsupported - ("15014",2),
+ ("Krasnaya",2),
+//unknown/unsupported - ("1191",2),
+//unknown/unsupported - ("1196",2),
+ ("Krishna",2),
+ ("Cakram",2),
+//unknown/unsupported - ("1287",2),
+ ("Vecer_Axe",2),
+ ("Giant_Axe",2),
+//unknown/unsupported - ("1433",2),
+//unknown/unsupported - ("1649",2),
+ ("Falken_Blitz",2),
+//unknown/unsupported - ("1746",2),
+//unknown/unsupported - ("1930",2),
+//unknown/unsupported - ("1984",2),
+ ("Krieg",2),
+ ("Weihna",2),
+//unknown/unsupported - ("13061",2),
+ ("Ruber",2),
+ ("Erde",2),
+ ("Red_Square_Bag",2)
+//unknown/unsupported - ("16003",2),
+//unknown/unsupported - ("16010",2),
+//unknown/unsupported - ("18103",2)
+)
+/* currently unsupported or unknown ('Old_C_Album_Armor')
+Old_C_Album_Armor: (
+ ("Pupa_Card",2),
+ ("Picky_Card",2),
+ ("Picky__Card",2),
+ ("Roda_Frog_Card",2),
+ ("Thief_Bug_Card",2),
+ ("Rocker_Card",2),
+ ("Desert_Wolf_Babe_Card",2),
+ ("Pecopeco_Card",2),
+ ("Steel_Chonchon_Card",2),
+ ("Cornutus_Card",2),
+ ("Savage_Card",2),
+ ("Sword_Fish_Card",2),
+ ("Dokebi_Card",2),
+ ("Pasana_Card",2),
+ ("Sand_Man_Card",2),
+ ("Marc_Card",2),
+ ("Argiope_Card",2),
+ ("Bathory_Card",2),
+ ("Evil_Druid_Card",2),
+ ("Goat_Card",2),
+ ("Flying_Deleter_Card",2),
+ ("Grizzly_Card",2),
+ ("Nightmare_Terror_Card",2),
+ ("Dark_Frame_Card",2),
+ ("Demon_Pungus_Card",2),
+ ("Disguise_Card",2),
+ ("Wraith_Dead_Card",2),
+ ("Loli_Ruri_Card",2),
+ ("Rybio_Card",2),
+ ("Majoruros_Card",2),
+ ("Brilight_Card",2),
+ ("Sasquatch_Card",2),
+ ("Succubus_Card",2),
+ ("Solider_Card",2),
+ ("Skel_Prisoner_Card",2),
+ ("Baby_Leopard_Card",2),
+ ("Anolian_Card",2),
+ ("Apocalips_Card",2),
+ ("Antonio_Card",2),
+ ("Wooden_Golem_Card",2),
+ ("Giant_Spider_Card",2),
+ ("Deleter_Card",2),
+ ("Geographer_Card",2),
+ ("Karakasa_Card",2),
+ ("Kraben_Card",2),
+ ("Cremy_Fear_Card",2),
+ ("Clock_Card",2),
+ ("Chimera_Card",2),
+ ("Killer_Mantis_Card",2),
+ ("Pest_Card",2),
+ ("Waste_Stove_Card",2),
+ ("Venomous_Card",2),
+ ("Porcellio_Card",2),
+ ("Obsidian_Card",2),
+ ("Mineral_Card",2),
+ ("Ygnizem_Card",2),
+ ("Removal_Card",2),
+ ("Venatu_Card",2),
+ ("Dimik_Card",2),
+ ("Archdam_Card",2),
+ ("Novus__Card",2),
+ ("Novus_Card",2),
+ ("Ancient_Mimic_Card",2),
+ ("Observation_Card",2),
+ ("Shelter_Card",2),
+ ("Aliza_Card",2),
+ ("Alicel_Card",2),
+ ("Skogul_Card",2),
+ ("Frus_Card",2),
+ ("Agav_Card",2),
+ ("Echio_Card",2),
+ ("Byorgue_Card",2),
+ ("Banshee_Master_Card",2),
+//unknown/unsupported - "4462"
+)
+*/
+/* currently unsupported or unknown ('Old_C_Album_Helm')
+Old_C_Album_Helm: (
+ ("Stainer_Card",2),
+ ("Coco_Card",2),
+ ("Martin_Card",2),
+ ("Elder_Wilow_Card",2),
+ ("Giearth_Card",2),
+ ("Ghoul_Card",2),
+ ("Marduk_Card",2),
+ ("Deviruchi_Card",2),
+ ("Nightmare_Card",2),
+ ("Grand_Peco_Card",2),
+ ("Dark_Illusion_Card",2),
+ ("Dryad_Card",2),
+ ("Rideword_Card",2),
+ ("Leib_Olmai_Card",2),
+ ("Leaf_Cat_Card",2),
+ ("Mystcase_Card",2),
+ ("Stalactic_Golem_Card",2),
+ ("C_Tower_Manager_Card",2),
+ ("Archangeling_Card",2),
+ ("Wicked_Nymph_Card",2),
+ ("Wootan_Shooter_Card",2),
+ ("Wootan_Fighter_Card",2),
+ ("Incubus_Card",2),
+ ("Giant_Honet_Card",2),
+ ("Gibbet_Card",2),
+ ("Carat_Card",2),
+ ("Cramp_Card",2),
+ ("Permeter_Card",2),
+ ("Ungoliant_Card",2),
+ ("Mole_Card",2),
+ ("Gemini_Card",2),
+ ("Seyren_Card",2),
+ ("Magaleta_Card",2),
+ ("Katrinn_Card",2),
+ ("Acidus__Card",2),
+ ("Vanberk_Card",2),
+ ("Isilla_Card",2),
+ ("Knocker_Card",2),
+ ("Banshee_Card",2),
+//unknown/unsupported - "4458",
+//unknown/unsupported - "4459",
+//unknown/unsupported - "4460",
+//unknown/unsupported - "4461",
+//unknown/unsupported - "4468"
+)
+*/
+/* currently unsupported or unknown ('Old_C_Album_Acc')
+Old_C_Album_Acc: (
+ ("Kukre_Card",2),
+ ("Tarou_Card",2),
+ ("Poporing_Card",2),
+ ("Worm_Tail_Card",2),
+ ("Muka_Card",2),
+ ("Creamy_Card",2),
+ ("Smokie_Card",2),
+ ("Poison_Spore_Card",2),
+ ("Yoyo_Card",2),
+ ("Vitata_Card",2),
+ ("Zerom_Card",2),
+ ("Pirate_Skel_Card",2),
+ ("Phen_Card",2),
+ ("Mantis_Card",2),
+ ("Marine_Sphere_Card",2),
+ ("Kobold_Card",2),
+ ("Obeaune_Card",2),
+ ("Horong_Card",2),
+ ("Joker_Card",2),
+ ("Gargoyle_Card",2),
+ ("Galapago_Card",2),
+ ("Rice_Cake_Boy_Card",2),
+ ("Poison_Toad_Card",2),
+ ("Raydric_Archer_Card",2),
+ ("Wraith_Card",2),
+ ("Lude_Card",2),
+ ("Marin_Card",2),
+ ("Mimic_Card",2),
+ ("Violy_Card",2),
+ ("Bon_Gun_Card",2),
+ ("Blazzer_Card",2),
+ ("Sageworm_Card",2),
+ ("Stem_Worm_Card",2),
+ ("Spring_Rabbit_Card",2),
+ ("Sleeper_Card",2),
+ ("Shinobi_Card",2),
+ ("Wild_Ginseng_Card",2),
+ ("Owl_Duke_Card",2),
+ ("Owl_Baron_Card",2),
+ ("Alligator_Card",2),
+ ("Orc_Archer_Card",2),
+ ("Evil_Cloud_Hermit_Card",2),
+ ("Wind_Ghost_Card",2),
+ ("Li_Me_Mang_Ryang_Card",2),
+ ("Dancing_Dragon_Card",2),
+ ("Tengu_Card",2),
+ ("Greatest_General_Card",2),
+ ("Cookie_Card",2),
+ ("Quve_Card",2),
+ ("Hylozoist_Card",2),
+ ("See_Otter_Card",2),
+ ("Blood_Butterfly_Card",2),
+ ("Heater_Card",2),
+ ("Anopheles_Card",2),
+ ("Armaia_Card",2),
+ ("Whikebain_Card",2),
+ ("Erend_Card",2),
+ ("Gremlin_Card",2),
+ ("Beholder_Card",2),
+ ("Green_Iguana_Card",2),
+ ("Hydro_Card",2),
+ ("Dragon_Egg_Card",2),
+ ("Plasma_Card",2),
+ ("Retribution_Card",2),
+ ("Snowier_Card",2),
+ ("Siroma_Card",2),
+ ("Gazeti_Card",2),
+ ("Galion_Card",2),
+ ("Stapo_Card",2),
+ ("Imp_Card",2),
+ ("Ragged_Zombie_Card",2),
+ ("Hell_Poodle_Card",2)
+)
+*/
+/* currently unsupported or unknown ('Old_C_Album_Shoes')
+Old_C_Album_Shoes: (
+ ("Zombie_Card",2),
+ ("Thief_Bug_Male_Card",2),
+ ("Eggyra_Card",2),
+ ("Matyr_Card",2),
+ ("Sohee_Card",2),
+ ("Verit_Card",2),
+ ("Gajomart_Card",2),
+ ("Antique_Firelock_Card",2),
+ ("Gullinbursti_Card",2),
+ ("Raggler_Card",2),
+ ("Merman_Card",2),
+ ("Megalith_Card",2),
+ ("Mini_Demon_Card",2),
+ ("Miyabi_Ningyo_Card",2),
+ ("Skeleton_General_Card",2),
+ ("Cookie_XMAS_Card",2),
+ ("Iron_Fist_Card",2),
+ ("Alarm_Card",2),
+ ("Am_Mut_Card",2),
+ ("Ancient_Worm_Card",2),
+ ("Wild_Rose_Card",2),
+ ("Explosion_Card",2),
+ ("Zombie_Prisoner_Card",2),
+ ("Cat_O_Nine_Tail_Card",2),
+ ("Freezer_Card",2),
+ ("Acidus_Card",2),
+ ("Ferus__Card",2),
+ ("Tha_Odium_Card",2),
+ ("Ice_Titan_Card",2),
+ ("Zombie_Slaughter_Card",2),
+//unknown/unsupported - "4467"
+)
+*/
+/* currently unsupported or unknown ('Old_C_Album_Shield')
+Old_C_Album_Shield: (
+ ("Andre_Egg_Card",2),
+ ("Ambernite_Card",2),
+ ("Horn_Card",2),
+ ("Thara_Frog_Card",2),
+ ("Orc_Warrior_Card",2),
+ ("Megalodon_Card",2),
+ ("BigFoot_Card",2),
+ ("Argos_Card",2),
+ ("Rafflesia_Card",2),
+ ("Munak_Card",2),
+ ("Petit__Card",2),
+ ("Medusa_Card",2),
+ ("Khalitzburg_Card",2),
+ ("Anubis_Card",2),
+ ("Mysteltainn_Card",2),
+ ("Live_Peach_Tree_Card",2),
+ ("Sting_Card",2),
+ ("Increase_Soil_Card",2),
+ ("Arclouse_Card",2),
+ ("Ancient_Mummy_Card",2),
+ ("Executioner_Card",2),
+ ("Alice_Card",2),
+ ("Tirfing_Card",2),
+ ("Zherlthsh_Card",2),
+ ("Tamruan_Card",2),
+ ("Parasite_Card",2),
+ ("Penomena_Card",2),
+ ("High_Orc_Card",2),
+ ("Teddy_Bear_Card",2),
+ ("Tha_Despero_Card",2),
+ ("Hodremlin_Card",2),
+ ("Seeker_Card",2),
+ ("Muscipular_Card",2),
+ ("Flame_Skull_Card",2),
+ ("Tatacho_Card",2),
+ ("Aqua_Elemental_Card",2),
+ ("Draco_Card",2),
+ ("Luciola_Vespa_Card",2),
+ ("Centipede_Card",2),
+ ("Cornus_Card",2),
+ ("Dark_Shadow_Card",2)
+)
+*/
+/* currently unsupported or unknown ('Old_C_Album_Garment')
+Old_C_Album_Garment: (
+ ("Dustiness_Card",2),
+ ("Orc_Zombie_Card",2),
+ ("Hode_Card",2),
+ ("Frilldora_Card",2),
+ ("Marse_Card",2),
+ ("Whisper_Card",2),
+ ("Myst_Card",2),
+ ("Jakk_Card",2),
+ ("Marionette_Card",2),
+ ("Isis_Card",2),
+ ("Baphomet__Card",2),
+ ("Daydric_Card",2),
+ ("Nine_Tail_Card",2),
+ ("Deviling_Card",2),
+ ("Dragon_Tail_Card",2),
+ ("Dragon_Fly_Card",2),
+ ("Vagabond_Wolf_Card",2),
+ ("Mastering_Card",2),
+ ("Wander_Man_Card",2),
+ ("Vocal_Card",2),
+ ("Eclipse_Card",2),
+ ("Choco_Card",2),
+ ("Kapha_Card",2),
+ ("Whisper_Boss_Card",2),
+ ("Toad_Card",2),
+ ("Punk_Card",2),
+ ("Harpy_Card",2),
+ ("Hyegun_Card",2),
+ ("Noxious_Card",2),
+ ("Kavac_Card",2),
+ ("Chung_E_Card",2),
+ ("Orc_Baby_Card",2),
+ ("Aliot_Card",2),
+ ("Roween_Card",2),
+ ("Salamander_Card",2),
+ ("Kasa_Card",2),
+ ("Magmaring_Card",2)
+)
+*/
+/* currently unsupported or unknown ('Old_C_Album_Weapon')
+Old_C_Album_Weapon: (
+ ("Drops_Card",2),
+ ("Poring__Card",2),
+ ("Lunatic_Card",2),
+ ("Pecopeco_Egg_Card",2),
+ ("Savage_Babe_Card",2),
+ ("Andre_Larva_Card",2),
+ ("Hornet_Card",2),
+ ("Farmiliar_Card",2),
+ ("Plankton_Card",2),
+ ("Skeleton_Card",2),
+ ("Thief_Bug_Female_Card",2),
+ ("Wolf_Card",2),
+ ("Mandragora_Card",2),
+ ("Hydra_Card",2),
+ ("Snake_Card",2),
+ ("Andre_Card",2),
+ ("Vadon_Card",2),
+ ("Marina_Card",2),
+ ("Metaller_Card",2),
+ ("Goblin_Card",2),
+ ("Anacondaq_Card",2),
+ ("Caramel_Card",2),
+ ("Kaho_Card",2),
+ ("Scorpion_Card",2),
+ ("Drainliar_Card",2),
+ ("Golem_Card",2),
+ ("Magnolia_Card",2),
+ ("Flora_Card",2),
+ ("Desert_Wolf_Card",2),
+ ("Orc_Skeleton_Card",2),
+ ("Soldier_Skeleton_Card",2),
+ ("Skel_Worker_Card",2),
+ ("Archer_Skeleton_Card",2),
+ ("Zenorc_Card",2),
+ ("Requiem_Card",2),
+ ("Mummy_Card",2),
+ ("Strouf_Card",2),
+ ("Hunter_Fly_Card",2),
+ ("Side_Winder_Card",2),
+ ("Petit_Card",2),
+ ("Deviace_Card",2),
+ ("Minorous_Card",2),
+ ("Scorpion_King_Card",2),
+ ("Knight_Of_Abyss_Card",2),
+ ("Crab_Card",2),
+ ("Goblin_Leader_Card",2),
+ ("Steam_Goblin_Card",2),
+ ("Goblin_Archer_Card",2),
+ ("Gryphon_Card",2),
+ ("Gig_Card",2),
+ ("Neraid_Card",2),
+ ("Dark_Priest_Card",2),
+ ("The_Paper_Card",2),
+ ("Dullahan_Card",2),
+ ("Driller_Card",2),
+ ("Diabolic_Card",2),
+ ("Lava_Golem_Card",2),
+ ("Rotar_Zairo_Card",2),
+ ("Civil_Servant_Card",2),
+ ("Mutant_Dragon_Card",2),
+ ("Bloody_Murderer_Card",2),
+ ("Stone_Shooter_Card",2),
+ ("Assulter_Card",2),
+ ("Aster_Card",2),
+ ("Elder_Card",2),
+ ("Orc_Lady_Card",2),
+ ("Injustice_Card",2),
+ ("Shellfish_Card",2),
+ ("Zombie_Master_Card",2),
+ ("Zipper_Bear_Card",2),
+ ("Chepet_Card",2),
+ ("Caterpillar_Card",2),
+ ("Kobold_Leader_Card",2),
+ ("Kobold_Archer_Card",2),
+ ("Cruiser_Card",2),
+ ("Kind_Of_Beetle_Card",2),
+ ("Tri_Joint_Card",2),
+ ("Panzer_Goblin_Card",2),
+ ("Fur_Seal_Card",2),
+ ("Fake_Angel_Card",2),
+ ("Mobster_Card",2),
+ ("Garm_Baby_Card",2),
+ ("Phendark_Card",2),
+ ("Pitman_Card",2),
+ ("Metaling_Card",2),
+ ("Hill_Wind_Card",2),
+ ("Rawrel_Card",2),
+ ("Eremes_Card",2),
+ ("Harword_Card",2),
+ ("Shecil_Card",2),
+ ("Ferus_Card",2),
+ ("Deathword_Card",2),
+ ("Breeze_Card",2),
+ ("Solace_Card",2),
+ ("Tha_Maero_Card",2),
+ ("Tha_Dolor_Card",2),
+ ("Skeggiold_Card",2),
+ ("Drosera_Card",2),
+ ("Sword_Guardian_Card",2),
+ ("Bow_Guardian_Card",2),
+ ("Necromancer_Card",2),
+ ("Centipede_Larva_Card",2),
+ ("Hilsrion_Card",2),
+ ("Bloody_Knight_Card",2),
+//unknown/unsupported - "4463",
+//unknown/unsupported - "4464",
+//unknown/unsupported - "4465",
+//unknown/unsupported - "4466",
+//unknown/unsupported - "4469",
+//unknown/unsupported - "4470",
+//unknown/unsupported - "4471",
+//unknown/unsupported - "4472",
+//unknown/unsupported - "4473",
+//unknown/unsupported - "4474",
+//unknown/unsupported - "4475",
+//unknown/unsupported - "4476",
+//unknown/unsupported - "4477"
+)
+*/
+/* currently unsupported or unknown ('Splendid_Box2')
+Splendid_Box2: (
+//unknown/unsupported - "2153",
"Bone_Plate",
- //not yet supported/not in pre-re "Ebone_Armor",
+//unknown/unsupported - "15014",
"Krasnaya",
- //not yet supported/not in pre-re "Alca_Bringer",
- //not yet supported/not in pre-re "Chrome_Twohand_Sword",
+//unknown/unsupported - "1191",
+//unknown/unsupported - "1196",
"Krishna",
"Cakram",
- //not yet supported/not in pre-re "Durga",
+//unknown/unsupported - "1287",
"Vecer_Axe",
"Giant_Axe",
- //not yet supported/not in pre-re "Imperial_Spear",
- //not yet supported/not in pre-re "Rafini_Staff",
+//unknown/unsupported - "1433",
+//unknown/unsupported - "1649",
"Falken_Blitz",
- //not yet supported/not in pre-re "Elven_Bow",
- //not yet supported/not in pre-re "Green_Whistle",
- //not yet supported/not in pre-re "Stem_Whip",
+//unknown/unsupported - "1746",
+//unknown/unsupported - "1930",
+//unknown/unsupported - "1984",
"Krieg",
"Weihna",
- //not yet supported/not in pre-re "Black_Wing",
+//unknown/unsupported - "13061",
"Ruber",
"Erde",
- "Red_Square_Bag"
- //not yet supported/not in pre-re "Carga_Mace",
- //not yet supported/not in pre-re "Red_Ether_Bag",
- //not yet supported/not in pre-re "Mystic_Bow"
+ "Red_Square_Bag",
+//unknown/unsupported - "16003",
+//unknown/unsupported - "16010",
+//unknown/unsupported - "18103",
+ "Hunting_Spear",
+ "Piece_Of_Angent_Skin",
+ "Diabolus_Robe",
+ "Diabolus_Armor",
+ "Diabolus_Boots",
+ "Diabolus_Manteau",
+ "Bison_Horn",
+ "Dragon_Vest",
+ "Dragon_Manteau",
+ "Elven_Ears",
+ "Tidal_Shoes",
+ "Black_Leather_Boots",
+ "Black_Leather_Boots_",
+ "Variant_Shoes",
+ "Twin_Edge_B",
+ "Twin_Edge_R"
+)
+*/
+/* currently unsupported or unknown ('Mysterious_Egg')
+Mysterious_Egg: (
+ ("Lucky_Egg2",3),
+ ("Lucky_Egg_C3",3),
+ ("Lucky_Egg_C4",3),
+ ("Lucky_Egg_C5",3),
+ ("Lucky_Egg_C6",3),
+ ("Lucky_Egg_C",2)
+)
+*/
+/* currently unsupported or unknown ('High_Weapon_Box')
+High_Weapon_Box: (
+ ("Mail_Breaker",5),
+ ("Weeder_Knife",5),
+ ("Mama's_Knife",5),
+ ("Assasin_Dagger",5),
+ ("Exercise",5),
+ ("Azoth",5),
+ ("Sucsamad",5),
+ ("Grimtooth_",5),
+ ("Princess_Knife",5),
+ ("Cursed_Dagger",5),
+ ("Counter_Dagger",5),
+ ("Holy_Dagger",5),
+ ("Krieg",5),
+ ("Weihna",5),
+//unknown/unsupported - ("13061",5),
+ ("Blood_Tears",5),
+ ("Unholy_Touch",5),
+ ("Drill_Katar",5),
+ ("Krishna",5),
+ ("Cakram",5),
+ ("Cleaver",5),
+ ("Great_Axe",5),
+ ("Sabbath",5),
+ ("Bradium_Stonehammer",5),
+ ("Slaughter",5),
+ ("Tomahawk",5),
+ ("Vecer_Axe",5),
+ ("Ice_Falchon",7),
+ ("Fire_Brand",7),
+ ("Scissores_Sword",7),
+ ("Cutlas",7),
+ ("Solar_Sword",7),
+ ("Mysteltainn_",7),
+ ("Tale_Fing_",7),
+ ("Byeorrun_Gum",7),
+ ("Immaterial_Sword",7),
+ ("Star_Dust_Blade",7),
+ ("Muramasa",7),
+ ("Dragon_Slayer",7),
+ ("Schweizersabel",7),
+ ("Zweihander",7),
+ ("Katzbalger",7),
+ ("Zweihander_",7),
+ ("Muscle_Cutter",7),
+ ("Schweizersabel_",7),
+ ("Dragon_Slayer_",7),
+ ("Tae_Goo_Lyeon",7),
+ ("Bloody_Eater",7),
+ ("Veteran_Sword",7),
+ ("Ruber",5),
+ ("Krasnaya",5),
+ ("Gungnir",5),
+ ("Gelerdria",5),
+ ("Tjungkuletti",5),
+ ("Gungnir_",5),
+ ("Crescent_Scythe",5),
+ ("Bill_Guisarme",5),
+ ("Zephyrus",5),
+ ("Longinus's_Spear",5),
+ ("Brionac",5),
+ ("Hell_Fire",5),
+ ("Gae_Bolg",5),
+ ("Crescent_Scythe_",5),
+ ("Spectral_Spear",5),
+ ("Ahlspiess",5),
+ ("Spectral_Spear_",5),
+ ("Gae_Bolg_",5),
+ ("Zephyrus_",5),
+ ("Wizardy_Staff",5),
+ ("Staff_Of_Wing",5),
+ ("Walking_Stick",5),
+ ("Holy_Stick",5),
+ ("Dead_Tree_Cane",5),
+ ("Kronos",5),
+ ("Dea_Staff",5),
+ ("Divine_Cross",5),
+ ("Golden_Mace",5),
+ ("Long_Mace",5),
+ ("Quadrille",5),
+ ("Golden_Mace_",5),
+ ("Nemesis",5),
+ ("Erde",5),
+ ("Red_Square_Bag",5),
+//unknown/unsupported - ("16010",5),
+ ("Book_Of_The_Apocalypse",5),
+ ("Girl's_Diary",5),
+ ("Legacy_Of_Dragon",5),
+ ("Hardback",5),
+ ("Bible_Of_Battlefield",5),
+ ("Kaiser_Knuckle",5),
+ ("Claw_Of_Garm",5),
+ ("Dragon_Wing",5),
+ ("Bow_Of_Minstrel",5),
+ ("Ixion_Wing",5),
+ ("Nepenthes_Bow",5),
+ ("Cursed_Lyre",5),
+ ("Falken_Blitz",5),
+//unknown/unsupported - ("18103",5),
+ ("Electronic_Guitar",5),
+ ("Oriental_Lute",5),
+ ("Oriental_Lute_",5),
+ ("Harp_Of_Nepenthes",5),
+ ("Lariat",5),
+ ("Rapture_Rose",5),
+ ("Chemeti",5),
+ ("Bladed_Whip",5),
+ ("Electric_Eel",5),
+ ("Sea_Witch_Foot",5),
+ ("Queen's_Whip",5),
+ ("Carrot_Whip",5),
+ ("Queen's_Whip_",5),
+ ("Stem_Of_Nepenthes",5),
+ "Thorn_Staff",
+ "Eraser",
+ "Destruction_Rod",
+ "Infiltrator",
+ "Infiltrator_",
+ "Heart_Breaker",
+ "Hurricane_Fury",
+ "Right_Epsilon",
+ "Doom_Slayer",
+ ("Sword_Breaker",4),
+//unknown/unsupported - ("13431",2),
+//unknown/unsupported - ("1196",2),
+ ("Excalibur",2),
+ ("Masamune",2),
+ ("Nagan",2),
+ ("Executioner_",2),
+ ("Executioner__",2),
+ ("Altas_Weapon",2),
+ ("Giant_Axe",2),
+ ("Guillotine",2),
+ ("Brood_Axe",2),
+ ("Wild_Beast_Claw",2),
+ ("Inverse_Scale",2),
+ ("Bloody_Roar",2),
+ ("Cardo",2),
+//unknown/unsupported - ("1433",2),
+ ("Skewer",2),
+ ("Battle_Hook",2),
+//unknown/unsupported - ("1654",2),
+ "Doom_Slayer_",
+ "Hunting_Spear",
+ "Edge",
+ "Violet_Fear",
+ "Death_Guidance",
+ "House_Auger",
+ "Bazerald",
+//unknown/unsupported - "13062",
+ "Grand_Cross",
+ "Grand_Cross_",
+ "Death_Note",
+ "Berserk",
+ "Berserk_",
+ "Berserk_Guitar",
+//unknown/unsupported - "1985",
+ ("Forturn_Sword",2),
+ ("Combat_Knife",2),
+ ("Moonlight_Sword",2),
+ ("Spike",2),
+ ("Spike_",2),
+ ("Slash",2),
+//unknown/unsupported - ("1830",2),
+ ("Bow_Of_Roguemaster",2),
+ ("Balistar",2),
+ ("Balistar_",2),
+ ("Bow_Of_Rudra",2),
+//unknown/unsupported - ("1930",2),
+//unknown/unsupported - ("1984",2),
+//unknown/unsupported - "1290",
+//unknown/unsupported - "1291",
+//unknown/unsupported - "1392",
+//unknown/unsupported - "1393",
+//unknown/unsupported - "1435",
+//unknown/unsupported - "1584",
+//unknown/unsupported - "1659",
+//unknown/unsupported - "13069",
+//unknown/unsupported - "13070",
+//unknown/unsupported - "16017",
+//unknown/unsupported - "18109",
+//unknown/unsupported - "18110",
+//unknown/unsupported - "18111"
+)
+*/
+/* currently unsupported or unknown ('Ink_Ball')
+Ink_Ball: (
+ ("Jellopy",39),
+ ("Large_Jellopy",20),
+ ("Gift_Box",20),
+ ("Food_Package",10),
+ ("Treasure_Box",6),
+ ("Blue_Gemstone",10),
+ ("First_Aid_Kit",5),
+ "Old_Blue_Box",
+ "Old_Violet_Box",
+ ("Hometown_Gift",14),
+ "Accessory_Box",
+ "Wrapped_Mask",
+ "Old_Card_Album",
+ ("Crystal_Blue",20)
+)
+*/
+/* currently unsupported or unknown ('God_Material_Box')
+God_Material_Box: (
+ "Iron_Glove",
+ "Iron_Maiden",
+ "Mystery_Wheel",
+ "Silver_Fancy",
+ "Anger_Of_Valkurye",
+ "Feather_Of_Angel",
+ "Foot_Step_Of_Cat",
+ "Beard_Of_Women",
+ "Root_Of_Stone",
+ "Soul_Of_Fish",
+ "Saliva_Of_Bird",
+ "Tendon_Of_Bear",
+ "Symbol_Of_Sun",
+ "Breath_Of_Soul",
+ "Crystal_Of_Snow",
+ "Indication_Of_Tempest",
+ "Slilince_Wave",
+ "Rough_Billows",
+ "Air_Stream"
+)
+*/
+/* currently unsupported or unknown ('Sg_Weapon_Supply_Box')
+Sg_Weapon_Supply_Box: (
+//unknown/unsupported - "1294",
+//unknown/unsupported - "1395",
+//unknown/unsupported - ("1492",8),
+//unknown/unsupported - ("2016",8),
+//unknown/unsupported - ("21001",8),
+//unknown/unsupported - "21002",
+//unknown/unsupported - ("18113",3),
+//unknown/unsupported - ("18114",8),
+//unknown/unsupported - ("1586",8),
+//unknown/unsupported - ("1587",8),
+//unknown/unsupported - ("1832",3),
+//unknown/unsupported - ("13072",3),
+//unknown/unsupported - ("16020",3),
+//unknown/unsupported - ("16021",3),
+//unknown/unsupported - ("1396",8),
+//unknown/unsupported - ("1436",8),
+//unknown/unsupported - ("12677",13),
+//unknown/unsupported - ("12678",13),
+//unknown/unsupported - ("1293",2)
)
-//unknown carrier / unsupported
-/*Candy_Holder: (
+*/
+/* currently unsupported or unknown ('Old_Card_Album_')
+Old_Card_Album_: (
+ ("Poring_Card",14),
+ ("Fabre_Card",17),
+ ("Pupa_Card",6),
+ ("Drops_Card",18),
+ ("Poring__Card",2),
+ ("Lunatic_Card",14),
+ ("Pecopeco_Egg_Card",4),
+ ("Picky_Card",17),
+ ("Chonchon_Card",17),
+ ("Wilow_Card",17),
+ ("Picky__Card",17),
+ ("Thief_Bug_Egg_Card",19),
+ ("Andre_Egg_Card",12),
+ ("Roda_Frog_Card",5),
+ ("Condor_Card",12),
+ ("Thief_Bug_Card",12),
+ ("Savage_Babe_Card",5),
+ ("Hornet_Card",10),
+ ("Farmiliar_Card",10),
+ ("Rocker_Card",10),
+ ("Spore_Card",10),
+ ("Desert_Wolf_Babe_Card",5),
+ ("Plankton_Card",5),
+ ("Skeleton_Card",5),
+ ("Thief_Bug_Female_Card",9),
+ ("Kukre_Card",3),
+ ("Tarou_Card",9),
+ ("Wolf_Card",9),
+ ("Mandragora_Card",9),
+ ("Pecopeco_Card",3),
+ ("Ambernite_Card",6),
+ ("Poporing_Card",6),
+ ("Worm_Tail_Card",6),
+ ("Hydra_Card",3),
+ ("Muka_Card",3),
+ ("Snake_Card",3),
+ ("Zombie_Card",3),
+ ("Stainer_Card",3),
+ ("Creamy_Card",3),
+ ("Coco_Card",3),
+ ("Steel_Chonchon_Card",3),
+ ("Andre_Card",3),
+ ("Smokie_Card",3),
+ ("Horn_Card",3),
+ ("Martin_Card",3),
+ "Ghostring_Card",
+ ("Poison_Spore_Card",3),
+ ("Vadon_Card",3),
+ ("Thief_Bug_Male_Card",3),
+ ("Yoyo_Card",3),
+ ("Elder_Wilow_Card",3),
+ "Vitata_Card",
+ "Angeling_Card",
+ ("Marina_Card",3),
+ ("Dustiness_Card",3),
+ ("Metaller_Card",2),
+ ("Thara_Frog_Card",2),
+ ("Goblin_Card",2),
+ ("Cornutus_Card",2),
+ ("Anacondaq_Card",2),
+ ("Caramel_Card",2),
+ ("Zerom_Card",2),
+ ("Kaho_Card",2),
+ ("Orc_Warrior_Card",2),
+ ("Megalodon_Card",2),
+ ("Scorpion_Card",2),
+ ("Drainliar_Card",2),
+ ("Eggyra_Card",2),
+ ("Orc_Zombie_Card",2),
+ ("Golem_Card",2),
+ ("Pirate_Skel_Card",2),
+ ("BigFoot_Card",2),
+ ("Argos_Card",2),
+ ("Magnolia_Card",2),
+ ("Phen_Card",2),
+ ("Savage_Card",2),
+ ("Mantis_Card",2),
+ ("Flora_Card",2),
+ ("Hode_Card",2),
+ "Desert_Wolf_Card",
+ "Rafflesia_Card",
+ "Marine_Sphere_Card",
+ "Orc_Skeleton_Card",
+ "Soldier_Skeleton_Card",
+ "Giearth_Card",
+ "Frilldora_Card",
+ "Sword_Fish_Card",
+ "Munak_Card",
+ "Kobold_Card",
+ "Skel_Worker_Card",
+ "Obeaune_Card",
+ "Archer_Skeleton_Card",
+ "Marse_Card",
+ "Zenorc_Card",
+ "Matyr_Card",
+ "Dokebi_Card",
+ "Pasana_Card",
+ "Sohee_Card",
+ "Sand_Man_Card",
+ "Whisper_Card",
+ "Horong_Card",
+ "Requiem_Card",
+ "Marc_Card",
+ "Mummy_Card",
+ "Verit_Card",
+ "Myst_Card",
+ "Jakk_Card",
+ "Ghoul_Card",
+ "Strouf_Card",
+ "Marduk_Card",
+ "Marionette_Card",
+ "Argiope_Card",
+ "Hunter_Fly_Card",
+ "Isis_Card",
+ "Side_Winder_Card",
+ "Petit_Card",
+ "Bathory_Card",
+ "Petit__Card",
+ "Deviruchi_Card",
+ "Deviace_Card",
+ "Nightmare_Card",
+ "Baphomet__Card",
+ "Daydric_Card",
+ "Khalitzburg_Card",
+ "Joker_Card",
+ "Evil_Druid_Card",
+ "Gargoyle_Card",
+ "Goat_Card",
+ "Gajomart_Card",
+ "Galapago_Card",
+ "Crab_Card",
+ "Rice_Cake_Boy_Card",
+ "Steam_Goblin_Card",
+ "Goblin_Archer_Card",
+ "Flying_Deleter_Card",
+ "Nine_Tail_Card",
+ "Antique_Firelock_Card",
+ "Grand_Peco_Card",
+ "Grizzly_Card",
+ "Gullinbursti_Card",
+ "Gig_Card",
+ "Nightmare_Terror_Card",
+ "Neraid_Card",
+ "Dark_Frame_Card",
+ "The_Paper_Card",
+ "Demon_Pungus_Card",
+ "Poison_Toad_Card",
+ "Dullahan_Card",
+ "Dryad_Card",
+ "Dragon_Tail_Card",
+ "Driller_Card",
+ "Disguise_Card",
+ "Diabolic_Card",
+ "Lava_Golem_Card",
+ "Rideword_Card",
+ "Raggler_Card",
+ "Raydric_Archer_Card",
+ "Leib_Olmai_Card",
+ "Wraith_Dead_Card",
+ "Wraith_Card",
+ "Loli_Ruri_Card",
+ "Rotar_Zairo_Card",
+ "Lude_Card",
+ "Rybio_Card",
+ "Leaf_Cat_Card",
+ "Marin_Card",
+ "Merman_Card",
+ "Megalith_Card",
+ "Majoruros_Card",
+ "Civil_Servant_Card",
+ "Mini_Demon_Card",
+ "Mimic_Card",
+ "Mystcase_Card",
+ "Miyabi_Ningyo_Card",
+ "Violy_Card",
+ "Wander_Man_Card",
+ "Bon_Gun_Card",
+ "Brilight_Card",
+ "Bloody_Murderer_Card",
+ "Blazzer_Card",
+ "Sasquatch_Card",
+ "Live_Peach_Tree_Card",
+ "Succubus_Card",
+ "Sageworm_Card",
+ "Solider_Card",
+ "Skeleton_General_Card",
+ "Skel_Prisoner_Card",
+ "Stalactic_Golem_Card",
+ "Stem_Worm_Card",
+ "Stone_Shooter_Card",
+ "Sting_Card",
+ "Spring_Rabbit_Card",
+ "Sleeper_Card",
+ "C_Tower_Manager_Card",
+ "Shinobi_Card",
+ "Increase_Soil_Card",
+ "Wild_Ginseng_Card",
+ "Baby_Leopard_Card",
+ "Anolian_Card",
+ "Cookie_XMAS_Card",
+ "Owl_Duke_Card",
+ "Owl_Baron_Card",
+ "Iron_Fist_Card",
+ "Arclouse_Card",
+ "Apocalips_Card",
+ "Antonio_Card",
+ "Alarm_Card",
+ "Am_Mut_Card",
+ "Assulter_Card",
+ "Aster_Card",
+ "Ancient_Mummy_Card",
+ "Ancient_Worm_Card",
+ "Elder_Card",
+ "Alligator_Card",
+ "Alice_Card",
+ "Orc_Lady_Card",
+ "Orc_Archer_Card",
+ "Wild_Rose_Card",
+ "Wicked_Nymph_Card",
+ "Wooden_Golem_Card",
+ "Wootan_Shooter_Card",
+ "Wootan_Fighter_Card",
+ "Evil_Cloud_Hermit_Card",
+ "Wind_Ghost_Card",
+ "Li_Me_Mang_Ryang_Card",
+ "Explosion_Card",
+ "Injustice_Card",
+ "Incubus_Card",
+ "Giant_Spider_Card",
+ "Giant_Honet_Card",
+ "Dancing_Dragon_Card",
+ "Shellfish_Card",
+ "Zombie_Master_Card",
+ "Zombie_Prisoner_Card",
+ "Zherlthsh_Card",
+ "Gibbet_Card",
+ "Deleter_Card",
+ "Geographer_Card",
+ "Zipper_Bear_Card",
+ "Tengu_Card",
+ "Greatest_General_Card",
+ "Chepet_Card",
+ "Choco_Card",
+ "Karakasa_Card",
+ "Kapha_Card",
+ "Carat_Card",
+ "Caterpillar_Card",
+ "Cat_O_Nine_Tail_Card",
+ "Kobold_Archer_Card",
+ "Cookie_Card",
+ "Quve_Card",
+ "Kraben_Card",
+ "Cramp_Card",
+ "Cruiser_Card",
+ "Cremy_Fear_Card",
+ "Clock_Card",
+ "Chimera_Card",
+ "Killer_Mantis_Card",
+ "Tamruan_Card",
+ "Kind_Of_Beetle_Card",
+ "Tri_Joint_Card",
+ "Parasite_Card",
+ "Panzer_Goblin_Card",
+ "Permeter_Card",
+ "Fur_Seal_Card",
+ "Punk_Card",
+ "Penomena_Card",
+ "Pest_Card",
+ "Fake_Angel_Card",
+ "Freezer_Card",
+ "Hylozoist_Card",
+ "High_Orc_Card",
+ "Garm_Baby_Card",
+ "Harpy_Card",
+ "See_Otter_Card",
+ "Blood_Butterfly_Card",
+ "Hyegun_Card",
+ "Phendark_Card",
+ "Heater_Card",
+ "Waste_Stove_Card",
+ ("Venomous_Card",3),
+ "Noxious_Card",
+ ("Pitman_Card",3),
+ "Ungoliant_Card",
+ "Porcellio_Card",
+ "Obsidian_Card",
+ "Mineral_Card",
+ "Teddy_Bear_Card",
+ "Metaling_Card",
+ "Mole_Card",
+ ("Anopheles_Card",3),
+ ("Hill_Wind_Card",3),
+ "Ygnizem_Card",
+ ("Armaia_Card",3),
+ "Whikebain_Card",
+ "Erend_Card",
+ ("Rawrel_Card",3),
+ "Kavac_Card",
+ "Removal_Card",
+ "Gemini_Card",
+ ("Gremlin_Card",3),
+ "Beholder_Card",
+ "Seyren_Card",
+ ("Eremes_Card",3),
+ "Harword_Card",
+ "Katrinn_Card",
+ "Shecil_Card",
+ "Venatu_Card",
+ "Dimik_Card",
+ "Archdam_Card",
+ "Chung_E_Card",
+ "Orc_Baby_Card",
+ ("Green_Iguana_Card",3),
+ "Acidus_Card",
+ "Acidus__Card",
+ ("Ferus_Card",3),
+ "Ferus__Card",
+ "Novus__Card",
+ ("Novus_Card",3),
+ "Hydro_Card",
+ ("Dragon_Egg_Card",3),
+ "Ancient_Mimic_Card",
+ ("Deathword_Card",3),
+ "Plasma_Card",
+ "Breeze_Card",
+ ("Retribution_Card",3),
+ "Observation_Card",
+ "Shelter_Card",
+ "Solace_Card",
+ "Tha_Maero_Card",
+ "Tha_Odium_Card",
+ "Tha_Despero_Card",
+ "Aliza_Card",
+ "Alicel_Card",
+ "Aliot_Card",
+ "Skogul_Card",
+ "Frus_Card",
+ "Agav_Card",
+ "Echio_Card",
+ "Vanberk_Card",
+ "Isilla_Card",
+ "Hodremlin_Card",
+ "Seeker_Card",
+ ("Snowier_Card",2),
+ "Siroma_Card",
+ "Ice_Titan_Card",
+ "Gazeti_Card",
+ "Muscipular_Card",
+ ("Drosera_Card",2),
+ "Roween_Card",
+ "Galion_Card",
+ ("Stapo_Card",3),
+ "Byorgue_Card",
+ "Sword_Guardian_Card",
+ "Bow_Guardian_Card",
+ "Salamander_Card",
+ "Kasa_Card",
+ ("Magmaring_Card",2),
+ "Imp_Card",
+ "Knocker_Card",
+ "Zombie_Slaughter_Card",
+ ("Ragged_Zombie_Card",2),
+ ("Hell_Poodle_Card",2),
+ ("Banshee_Card",2),
+ "Flame_Skull_Card",
+ "Necromancer_Card"
+)
+*/
+/* currently unsupported or unknown ('High_Weapon_Box_')
+High_Weapon_Box_: (
+ ("Mail_Breaker",5),
+ ("Weeder_Knife",5),
+ ("Mama's_Knife",5),
+ ("Assasin_Dagger",5),
+ ("Exercise",5),
+ ("Azoth",5),
+ ("Sucsamad",5),
+ ("Grimtooth_",5),
+ ("Princess_Knife",5),
+ ("Cursed_Dagger",5),
+ ("Counter_Dagger",5),
+ ("Holy_Dagger",5),
+ ("Krieg",5),
+ ("Weihna",5),
+//unknown/unsupported - ("13061",5),
+ ("Blood_Tears",5),
+ ("Unholy_Touch",5),
+ ("Drill_Katar",5),
+ ("Krishna",5),
+ ("Cakram",5),
+ ("Cleaver",5),
+ ("Great_Axe",5),
+ ("Sabbath",5),
+ ("Bradium_Stonehammer",5),
+ ("Slaughter",5),
+ ("Tomahawk",5),
+ ("Vecer_Axe",5),
+ ("Ice_Falchon",7),
+ ("Fire_Brand",7),
+ ("Scissores_Sword",7),
+ ("Cutlas",7),
+ ("Solar_Sword",7),
+ ("Mysteltainn_",7),
+ ("Tale_Fing_",7),
+ ("Byeorrun_Gum",7),
+ ("Immaterial_Sword",7),
+ ("Star_Dust_Blade",7),
+ ("Muramasa",7),
+ ("Dragon_Slayer",7),
+ ("Schweizersabel",7),
+ ("Zweihander",7),
+ ("Katzbalger",7),
+ ("Zweihander_",7),
+ ("Muscle_Cutter",7),
+ ("Schweizersabel_",7),
+ ("Dragon_Slayer_",7),
+ ("Tae_Goo_Lyeon",7),
+ ("Bloody_Eater",7),
+ ("Veteran_Sword",7),
+ ("Ruber",5),
+ ("Krasnaya",5),
+ ("Gungnir",5),
+ ("Gelerdria",5),
+ ("Tjungkuletti",5),
+ ("Gungnir_",5),
+ ("Crescent_Scythe",5),
+ ("Bill_Guisarme",5),
+ ("Zephyrus",5),
+ ("Longinus's_Spear",5),
+ ("Brionac",5),
+ ("Hell_Fire",5),
+ ("Gae_Bolg",5),
+ ("Crescent_Scythe_",5),
+ ("Spectral_Spear",5),
+ ("Ahlspiess",5),
+ ("Spectral_Spear_",5),
+ ("Gae_Bolg_",5),
+ ("Zephyrus_",5),
+ ("Wizardy_Staff",5),
+ ("Staff_Of_Wing",5),
+ ("Walking_Stick",5),
+ ("Holy_Stick",5),
+ ("Dead_Tree_Cane",5),
+ ("Kronos",5),
+ ("Dea_Staff",5),
+ ("Divine_Cross",5),
+ ("Golden_Mace",5),
+ ("Long_Mace",5),
+ ("Quadrille",5),
+ ("Golden_Mace_",5),
+ ("Nemesis",5),
+ ("Erde",5),
+ ("Red_Square_Bag",5),
+//unknown/unsupported - ("16010",5),
+ ("Book_Of_The_Apocalypse",5),
+ ("Girl's_Diary",5),
+ ("Legacy_Of_Dragon",5),
+ ("Hardback",5),
+ ("Bible_Of_Battlefield",5),
+ ("Kaiser_Knuckle",5),
+ ("Claw_Of_Garm",5),
+ ("Dragon_Wing",5),
+ ("Bow_Of_Minstrel",5),
+ ("Ixion_Wing",5),
+ ("Nepenthes_Bow",5),
+ ("Cursed_Lyre",5),
+ ("Falken_Blitz",5),
+//unknown/unsupported - ("18103",5),
+ ("Electronic_Guitar",5),
+ ("Oriental_Lute",5),
+ ("Oriental_Lute_",5),
+ ("Harp_Of_Nepenthes",5),
+ ("Lariat",5),
+ ("Rapture_Rose",5),
+ ("Chemeti",5),
+ ("Bladed_Whip",5),
+ ("Electric_Eel",5),
+ ("Sea_Witch_Foot",5),
+ ("Queen's_Whip",5),
+ ("Carrot_Whip",5),
+ ("Queen's_Whip_",5),
+ ("Stem_Of_Nepenthes",5),
+ "Thorn_Staff",
+ "Eraser",
+ "Destruction_Rod",
+ "Infiltrator",
+ "Infiltrator_",
+ "Heart_Breaker",
+ "Hurricane_Fury",
+ "Right_Epsilon",
+ "Doom_Slayer",
+ ("Sword_Breaker",4),
+//unknown/unsupported - ("13431",2),
+//unknown/unsupported - ("1196",2),
+ ("Excalibur",2),
+ ("Masamune",2),
+ ("Nagan",2),
+ ("Executioner_",2),
+ ("Executioner__",2),
+ ("Altas_Weapon",2),
+ ("Giant_Axe",2),
+ ("Guillotine",2),
+ ("Brood_Axe",2),
+ ("Wild_Beast_Claw",2),
+ ("Inverse_Scale",2),
+ ("Bloody_Roar",2),
+ ("Cardo",2),
+//unknown/unsupported - ("1433",2),
+ ("Skewer",2),
+ ("Battle_Hook",2),
+//unknown/unsupported - ("1654",2),
+ "Doom_Slayer_",
+ "Hunting_Spear",
+ "Edge",
+ "Violet_Fear",
+ "Death_Guidance",
+ "House_Auger",
+ "Bazerald",
+//unknown/unsupported - "13062",
+ "Grand_Cross",
+ "Grand_Cross_",
+ "Death_Note",
+ "Berserk",
+ "Berserk_",
+ "Berserk_Guitar",
+//unknown/unsupported - "1985",
+ ("Forturn_Sword",2),
+ ("Combat_Knife",2),
+ ("Moonlight_Sword",2),
+ ("Spike",2),
+ ("Spike_",2),
+ ("Slash",2),
+//unknown/unsupported - ("1830",2),
+ ("Bow_Of_Roguemaster",2),
+ ("Balistar",2),
+ ("Balistar_",2),
+ ("Bow_Of_Rudra",2),
+//unknown/unsupported - ("1930",2),
+//unknown/unsupported - ("1984",2),
+//unknown/unsupported - "1290",
+//unknown/unsupported - "1291",
+//unknown/unsupported - "1392",
+//unknown/unsupported - "1393",
+//unknown/unsupported - "1435",
+//unknown/unsupported - "1584",
+//unknown/unsupported - "1659",
+//unknown/unsupported - "13069",
+//unknown/unsupported - "13070",
+//unknown/unsupported - "16017",
+//unknown/unsupported - "18109",
+//unknown/unsupported - "18110",
+//unknown/unsupported - "18111"
+)
+*/
+Holy_Egg_2: (
+ ("Oridecon",3),
+ ("Elunium",10),
+ ("White_Slim_Potion",30),
+ ("Blue_Potion",30),
+ ("Yggdrasilberry",3),
+ ("Seed_Of_Yggdrasil",2),
+ ("Leaf_Of_Yggdrasil",15),
+ ("Old_Card_Album",5),
+ "Drooping_Bunny"
+)
+/* currently unsupported or unknown ('Candy_Holder')
+Candy_Holder: (
("Honey",9),
("Candy",20),
("Well_Baked_Cookie",15),
@@ -3382,6 +4696,66 @@ Splendid_Box: (
"Old_Violet_Box",
"Contracts_In_Shadow",
("Niflheim_Ticket",10),
- ("Pumpkin_Cake",5),
+//unknown/unsupported - ("11550",5),
("Pumpkin_Pie",5)
-)*/ \ No newline at end of file
+)
+*/
+Lotto_Box01: (
+ "Lotto02",
+ "Lotto03",
+ "Lotto04",
+ "Lotto05",
+ "Lotto06",
+ "Lotto07",
+ "Lotto08",
+ "Lotto09"
+)
+Lotto_Box02: (
+ "Lotto11",
+ "Lotto12",
+ "Lotto13",
+ "Lotto14",
+ "Lotto15",
+ "Lotto16",
+ "Lotto17",
+ "Lotto18"
+)
+Lotto_Box03: (
+ "Lotto20",
+ "Lotto21",
+ "Lotto22",
+ "Lotto23",
+ "Lotto24",
+ "Lotto25",
+ "Lotto26",
+ "Lotto27"
+)
+Lotto_Box04: (
+ "Lotto29",
+ "Lotto30",
+ "Lotto31",
+ "Lotto32",
+ "Lotto33",
+ "Lotto34",
+ "Lotto35",
+ "Lotto36"
+)
+Lotto_Box05: (
+ "Lotto38",
+ "Lotto39",
+ "Lotto40",
+ "Lotto41",
+ "Lotto42",
+ "Lotto43",
+ "Lotto44",
+ "Lotto45"
+)
+/* currently unsupported or unknown ('Lucky_Bag')
+Lucky_Bag: (
+ ("Fire_Cracker",7),
+ ("Korea_Rice_Cake",6),
+ ("Handsei",2),
+//unknown/unsupported - ("7647",3),
+//unknown/unsupported - "7649"
+)
+*/ \ No newline at end of file
diff --git a/db/re/item_group.conf b/db/re/item_group.conf
index e392ae2b6..a58b88e91 100644
--- a/db/re/item_group.conf
+++ b/db/re/item_group.conf
@@ -19,7 +19,7 @@
*/
Old_Card_Album: (
- ("Poring_Card",8),
+ ("Poring_Card",9),
("Fabre_Card",10),
("Pupa_Card",6),
("Drops_Card",11),
@@ -140,7 +140,6 @@ Old_Card_Album: (
"Baphomet__Card",
"Daydric_Card",
"Khalitzburg_Card",
- "Joker_Card",
"Evil_Druid_Card",
"Gargoyle_Card",
"Goat_Card",
@@ -191,6 +190,7 @@ Old_Card_Album: (
"Mystcase_Card",
"Miyabi_Ningyo_Card",
"Violy_Card",
+ "Wander_Man_Card",
"Bon_Gun_Card",
"Brilight_Card",
"Bloody_Murderer_Card",
@@ -293,6 +293,7 @@ Old_Card_Album: (
"Hyegun_Card",
"Phendark_Card",
"Heater_Card",
+ "Antonio_Card",
"Agav_Card",
"Echio_Card",
"Vanberk_Card",
@@ -324,12 +325,6 @@ Old_Card_Album: (
"Necromancer_Card"
)
Gift_Box: (
- ("Oridecon_Stone",4),
- ("Elunium_Stone",2),
- ("Oridecon",2),
- "Elunium",
- "Emperium",
- "Steel",
"Star_Crumb",
"Flame_Heart",
"Mistic_Frozen",
@@ -387,24 +382,20 @@ Gift_Box: (
"Red_Potion",
"Orange_Potion",
"Yellow_Potion",
+ "White_Potion",
+ "Blue_Potion",
"Green_Potion",
+ "Royal_Jelly",
"Candy",
"Candy_Striper",
"Pet_Food",
"Well_Baked_Cookie",
"Piece_Of_Cake",
- "Old_Blue_Box",
"Old_Violet_Box",
("Gift_Box",19),
"Girl's_Diary"
)
Gift_Box_1: (
- ("Oridecon_Stone",4),
- ("Elunium_Stone",2),
- ("Oridecon",2),
- "Elunium",
- "Emperium",
- "Steel",
"Star_Crumb",
"Flame_Heart",
"Mistic_Frozen",
@@ -462,24 +453,20 @@ Gift_Box_1: (
"Red_Potion",
"Orange_Potion",
"Yellow_Potion",
+ "White_Potion",
+ "Blue_Potion",
"Green_Potion",
+ "Royal_Jelly",
"Candy",
"Candy_Striper",
"Pet_Food",
"Well_Baked_Cookie",
"Piece_Of_Cake",
- "Old_Blue_Box",
"Old_Violet_Box",
("Gift_Box",19),
"Girl's_Diary"
)
Gift_Box_2: (
- ("Oridecon_Stone",4),
- ("Elunium_Stone",2),
- ("Oridecon",2),
- "Elunium",
- "Emperium",
- "Steel",
"Star_Crumb",
"Flame_Heart",
"Mistic_Frozen",
@@ -537,24 +524,20 @@ Gift_Box_2: (
"Red_Potion",
"Orange_Potion",
"Yellow_Potion",
+ "White_Potion",
+ "Blue_Potion",
"Green_Potion",
+ "Royal_Jelly",
"Candy",
"Candy_Striper",
"Pet_Food",
"Well_Baked_Cookie",
"Piece_Of_Cake",
- "Old_Blue_Box",
"Old_Violet_Box",
("Gift_Box",19),
"Girl's_Diary"
)
Gift_Box_3: (
- ("Oridecon_Stone",4),
- ("Elunium_Stone",2),
- ("Oridecon",2),
- "Elunium",
- "Emperium",
- "Steel",
"Star_Crumb",
"Flame_Heart",
"Mistic_Frozen",
@@ -612,24 +595,20 @@ Gift_Box_3: (
"Red_Potion",
"Orange_Potion",
"Yellow_Potion",
+ "White_Potion",
+ "Blue_Potion",
"Green_Potion",
+ "Royal_Jelly",
"Candy",
"Candy_Striper",
"Pet_Food",
"Well_Baked_Cookie",
"Piece_Of_Cake",
- "Old_Blue_Box",
"Old_Violet_Box",
("Gift_Box",19),
"Girl's_Diary"
)
Gift_Box_4: (
- ("Oridecon_Stone",4),
- ("Elunium_Stone",2),
- ("Oridecon",2),
- "Elunium",
- "Emperium",
- "Steel",
"Star_Crumb",
"Flame_Heart",
"Mistic_Frozen",
@@ -687,13 +666,15 @@ Gift_Box_4: (
"Red_Potion",
"Orange_Potion",
"Yellow_Potion",
+ "White_Potion",
+ "Blue_Potion",
"Green_Potion",
+ "Royal_Jelly",
"Candy",
"Candy_Striper",
"Pet_Food",
"Well_Baked_Cookie",
"Piece_Of_Cake",
- "Old_Blue_Box",
"Old_Violet_Box",
("Gift_Box",19),
"Girl's_Diary"
@@ -742,7 +723,6 @@ Old_Blue_Box: (
("Thief_Clothes",3),
("Thief_Clothes_",3),
("Ninja_Suit",3),
- ("Wedding_Dress",3),
("G_Strings",3),
("Novice_Breast",3),
("Full_Plate_Armor",3),
@@ -999,6 +979,7 @@ Old_Blue_Box: (
("Snowy_Horn",3),
("Mini_Propeller",3),
("Mini_Glasses",3),
+ ("Prontera_Army_Cap",3),
("Pierrot_Nose",3),
("Gangster_Patch",3),
("Ganster_Mask",3),
@@ -1024,7 +1005,6 @@ Old_Blue_Box: (
("Viking_Helm",3),
("Joker_Jester",3),
("Machoman_Glasses",3),
- ("Puppy_Love",3),
("Safety_Helmet",3),
("Indian_Hair_Piece",3),
("Antenna",3),
@@ -1074,7 +1054,7 @@ Old_Blue_Box: (
("Illusion_Flower",12),
("Shoot",12),
("Flower",12),
- ("Emperium",12),
+ ("Empty_Bottle",12),
("Yellow_Gemstone",12),
("Red_Gemstone",12),
("Blue_Gemstone",12),
@@ -1115,8 +1095,6 @@ Old_Blue_Box: (
("Grasshopper_Doll",12),
("Monkey_Doll",12),
("Raccoondog_Doll",12),
- ("Oridecon_Stone",12),
- ("Elunium_Stone",12),
("Danggie",12),
("Tree_Root",12),
("Reptile_Tongue",12),
@@ -1184,7 +1162,6 @@ Old_Blue_Box: (
("Turtle_Shell",12),
("Voucher_Of_Orcish_Hero",12),
("Gold",12),
- ("Alchol",12),
("Detrimindexta",12),
("Karvodailnirol",12),
("Counteragent",12),
@@ -1197,8 +1174,6 @@ Old_Blue_Box: (
("Violet_Dyestuffs",12),
("White_Dyestuffs",12),
("Black_Dyestuffs",12),
- ("Oridecon",12),
- ("Elunium",12),
("Anvil",12),
("Oridecon_Anvil",12),
("Golden_Anvil",12),
@@ -1243,7 +1218,6 @@ Old_Blue_Box: (
("Porcupine_Spike",12),
("Wild_Boar's_Mane",12),
("Tiger's_Skin",12),
- ("Tiger_Footskin",12),
("Limb_Of_Mantis",12),
("Blossom_Of_Maneater",12),
("Root_Of_Maneater",12),
@@ -1393,7 +1367,6 @@ Old_Blue_Box: (
("Mystery_Iron_Bit",12),
("Great_Wing",12),
("Taegeuk_Plate",12),
- ("Tuxedo",12),
("Leopard_Skin",12),
("Leopard_Talon",12),
("Packing_Ribbon",12),
@@ -1468,7 +1441,9 @@ Old_Blue_Box: (
("Red_Potion",12),
("Orange_Potion",12),
("Yellow_Potion",12),
- ("Green_Potion",11),
+ ("White_Potion",12),
+ ("Blue_Potion",12),
+ ("Green_Potion",12),
("Red_Herb",12),
("Yellow_Herb",12),
("White_Herb",12),
@@ -1487,6 +1462,7 @@ Old_Blue_Box: (
("Fruit_Of_Mastela",12),
("Holy_Water",12),
("Panacea",12),
+ ("Royal_Jelly",12),
("Monster's_Feed",12),
("Candy",12),
("Candy_Striper",12),
@@ -1511,8 +1487,9 @@ Old_Blue_Box: (
("Rice_Cake",12),
("Chocolate",12),
("White_Chocolate",12),
- "Wing_Of_Butterfly",
- ("Old_Blue_Box",1173),
+ ("Wing_Of_Fly",12),
+ ("Wing_Of_Butterfly",12),
+ ("Branch_Of_Dead_Tree",512),
("Anodyne",12),
("Aloebera",12),
("Yggdrasilberry",12),
@@ -1568,6 +1545,7 @@ Old_Blue_Box: (
"Angelic_Chain",
"Satanic_Chain",
"Sharp_Gear",
+ "Ghost_Bandana",
"Ring_",
"Earring_",
"Necklace_",
@@ -1674,14 +1652,14 @@ Old_Blue_Box: (
"Pot",
"Burnt_Parts",
"Pocket_Watch",
- ("Ice_Heart",21),
- ("Ice_Scale",22),
- ("Bloody_Rune",22),
- ("Rotten_Meat",22),
- ("Sticky_Poison",22),
+ ("Ice_Heart",15),
+ ("Ice_Scale",15),
+ ("Bloody_Rune",15),
+ ("Rotten_Meat",15),
+ ("Sticky_Poison",15),
"Suspicious_Hat",
"White_Mask",
- ("Old_White_Cloth",33),
+ ("Old_White_Cloth",34),
("Clattering_Skull",32),
("Broken_Farming_Utensil",34),
"Orleans_Server",
@@ -1750,7 +1728,6 @@ Old_Violet_Box: (
("Silver_Robe_",7),
("Thief_Clothes_",7),
("Ninja_Suit",7),
- ("Wedding_Dress",7),
("G_Strings",7),
("Novice_Breast",7),
("Novice_Plate",7),
@@ -1926,6 +1903,7 @@ Old_Violet_Box: (
("Snowy_Horn",7),
("Mini_Propeller",7),
("Mini_Glasses",7),
+ ("Prontera_Army_Cap",7),
("Pierrot_Nose",7),
("Gangster_Patch",7),
("Ganster_Mask",7),
@@ -1951,7 +1929,6 @@ Old_Violet_Box: (
("Viking_Helm",7),
("Joker_Jester",7),
("Machoman_Glasses",7),
- ("Puppy_Love",7),
("Safety_Helmet",7),
("Indian_Hair_Piece",7),
("Antenna",7),
@@ -2001,7 +1978,7 @@ Old_Violet_Box: (
("Illusion_Flower",14),
("Shoot",14),
("Flower",14),
- ("Emperium",14),
+ ("Empty_Bottle",14),
("Yellow_Gemstone",14),
("Red_Gemstone",14),
("Blue_Gemstone",14),
@@ -2042,8 +2019,6 @@ Old_Violet_Box: (
("Grasshopper_Doll",14),
("Monkey_Doll",14),
("Raccoondog_Doll",14),
- ("Oridecon_Stone",14),
- ("Elunium_Stone",14),
("Danggie",14),
("Tree_Root",14),
("Reptile_Tongue",14),
@@ -2111,7 +2086,6 @@ Old_Violet_Box: (
("Turtle_Shell",14),
("Voucher_Of_Orcish_Hero",14),
("Gold",14),
- ("Alchol",14),
("Detrimindexta",14),
("Karvodailnirol",14),
("Counteragent",14),
@@ -2124,9 +2098,7 @@ Old_Violet_Box: (
("Violet_Dyestuffs",14),
("White_Dyestuffs",14),
("Black_Dyestuffs",14),
- ("Oridecon",14),
- ("Elunium",14),
- ("Anvil",14),
+ ("Anvil",13),
("Oridecon_Anvil",14),
("Golden_Anvil",14),
("Emperium_Anvil",14),
@@ -2170,7 +2142,6 @@ Old_Violet_Box: (
("Porcupine_Spike",14),
("Wild_Boar's_Mane",14),
("Tiger's_Skin",14),
- ("Tiger_Footskin",14),
("Limb_Of_Mantis",14),
("Blossom_Of_Maneater",14),
("Root_Of_Maneater",14),
@@ -2320,7 +2291,6 @@ Old_Violet_Box: (
("Mystery_Iron_Bit",14),
("Great_Wing",14),
("Taegeuk_Plate",14),
- ("Tuxedo",14),
("Leopard_Skin",14),
("Leopard_Talon",14),
("Packing_Ribbon",14),
@@ -2395,6 +2365,8 @@ Old_Violet_Box: (
("Red_Potion",14),
("Orange_Potion",14),
("Yellow_Potion",14),
+ ("White_Potion",14),
+ ("Blue_Potion",14),
("Green_Potion",14),
("Red_Herb",14),
("Yellow_Herb",14),
@@ -2414,6 +2386,7 @@ Old_Violet_Box: (
("Fruit_Of_Mastela",14),
("Holy_Water",14),
("Panacea",14),
+ ("Royal_Jelly",14),
("Monster's_Feed",14),
("Candy",14),
("Candy_Striper",14),
@@ -2438,7 +2411,9 @@ Old_Violet_Box: (
("Rice_Cake",14),
("Chocolate",14),
("White_Chocolate",14),
- ("Old_Blue_Box",614),
+ ("Wing_Of_Fly",14),
+ ("Wing_Of_Butterfly",14),
+ ("Branch_Of_Dead_Tree",214),
("Anodyne",14),
("Aloebera",14),
("Yggdrasilberry",14),
@@ -2490,12 +2465,11 @@ Old_Violet_Box: (
("Poison_Bottle",14),
("Gold_Pill",14),
("Guard_",6),
- "Tiara",
- "Crown",
"Coronet",
"Angelic_Chain",
"Satanic_Chain",
"Sharp_Gear",
+ "Ghost_Bandana",
"Elven_Ears",
"Holy_Robe",
"Mage_Coat",
@@ -2512,8 +2486,6 @@ Old_Violet_Box: (
"Pair_Of_Red_Ribbon",
"Loard_Circlet",
"Bone_Helm",
- "Corsair",
- "Assassin_Mask",
"Horn_Of_Succubus",
"Inccubus_Horn",
"Spinx_Helm",
@@ -2619,7 +2591,7 @@ Old_Violet_Box: (
"Suspicious_Hat",
"White_Mask",
("Old_Violet_Box",103),
- ("Old_White_Cloth",16),
+ ("Old_White_Cloth",17),
("Clattering_Skull",16),
("Broken_Farming_Utensil",17),
"Inverse_Scale",
@@ -2747,13 +2719,13 @@ Accessory_Box: (
"Rosary_",
"Brooch_",
"Earring_",
+ ("Vesper_Core01",2),
("Vesper_Core02",2),
("Vesper_Core03",2),
("Vesper_Core04",2),
"Thimble_Of_Archer_",
("Red_Silk_Seal",2),
"Orleans_Glove",
- "Vesper_Core01",
"Spiritual_Ring",
"Shinobi's_Sash",
"Hyper_Changer",
@@ -2776,7 +2748,8 @@ Wrapped_Mask: (
("Goblin_Mask_03",10),
("Goblin_Mask_04",10),
("Mr_Smile",9),
- "Zherlthsh_Mask"
+ "Zherlthsh_Mask",
+ ("Hahoe_Mask",2)
)
Bundle_Of_Magic_Scroll: (
"Earth_Scroll_1_5",
@@ -2836,6 +2809,7 @@ Food_Package: (
"Leaflet_Of_Hinal",
"Leaflet_Of_Aloe",
"Fruit_Of_Mastela",
+ "Royal_Jelly",
"Milk",
"Lemon",
"Long_Rice_Cake",
@@ -2846,6 +2820,8 @@ First_Aid_Kit: (
("Orange_Potion",5),
("Yellow_Potion",5),
("Slow_Down_Potion",5),
+ ("White_Potion",5),
+ ("Blue_Potion",5),
("Green_Potion",5),
("Red_Slim_Potion",5),
("Yellow_Slim_Potion",5),
@@ -2876,14 +2852,19 @@ Cookie_Bag: (
"Chocolate_Drink",
("Candy",4)
)
+Red_Box_: (
+ ("Magic_Eyes",9),
+ ("Hibiscus",10),
+ ("Charming_Ribbon",10)
+)
Egg_Boy: (
("Grape",299),
("Rice_Ball",522),
("Prohibition_Red_Candle",20),
("Realgar_Wine",100),
("Exorcize_Herb",50),
- ("Crown",2),
- "Inccubus_Horn"
+ ("Ghost_Bandana",5),
+ ("Inccubus_Horn",2)
)
Egg_Girl: (
("Grape",299),
@@ -2891,18 +2872,20 @@ Egg_Girl: (
("Sway_Apron",20),
("Realgar_Wine",100),
("Exorcize_Herb",50),
- ("Tiara",2),
("Hair_Protector",5),
- "Horn_Of_Succubus"
+ ("Horn_Of_Succubus",2)
)
Giftbox_China: (
"Orange_Potion",
"Yellow_Potion",
+ "White_Potion",
+ "Blue_Potion",
"Green_Potion",
"Honey",
"Leaflet_Of_Hinal",
("Leaflet_Of_Aloe",2),
"Panacea",
+ "Royal_Jelly",
"Candy",
"Candy_Striper",
("Old_Blue_Box",40),
@@ -2924,7 +2907,6 @@ Giftbox_China: (
"Singing_Plant",
"Ment",
"Illusion_Flower",
- "Emperium",
"Yellow_Gemstone",
"Red_Gemstone",
"Blue_Gemstone",
@@ -2960,8 +2942,6 @@ Giftbox_China: (
"Grasshopper_Doll",
"Monkey_Doll",
"Raccoondog_Doll",
- "Oridecon_Stone",
- "Elunium_Stone",
"Jellopy",
"Garlet",
"Scell",
@@ -2970,7 +2950,6 @@ Giftbox_China: (
"Mementos",
"Voucher_Of_Orcish_Hero",
"Gold",
- "Alchol",
"Detrimindexta",
"Karvodailnirol",
"Counteragent",
@@ -2983,8 +2962,6 @@ Giftbox_China: (
"Violet_Dyestuffs",
"White_Dyestuffs",
"Black_Dyestuffs",
- "Oridecon",
- "Elunium",
"Anvil",
"Oridecon_Anvil",
"Golden_Anvil",
@@ -3135,7 +3112,6 @@ Giftbox_China: (
"Silver_Robe_",
"Thief_Clothes_",
"Ninja_Suit",
- "Wedding_Dress",
"G_Strings",
"Sandals_",
"Shoes_",
@@ -3159,48 +3135,51 @@ Giftbox_China: (
"Silver_Ring",
"Flower_Ring",
"Diamond_Ring",
- "Puppy_Love",
"Safety_Helmet",
"Indian_Hair_Piece",
"Fin_Helm",
- "Egg_Shell"
+ ("Egg_Shell",2)
)
-Old_Bleu_Box: (
- ("Cold_Scroll_1_5",2),
- ("Fire_Scroll_1_5",2),
- ("Wind_Scroll_1_5",2),
- ("Fire_Scroll_2_5",2),
- ("Fire_Scroll_3_5",2),
- ("Holy_Scroll_1_5",2),
- ("Cold_Scroll_2_5",2),
- ("Gift_Box",2),
- ("Milk",2),
- ("Well_Baked_Cookie",2)
+Red_Box: (
+ ("Twin_Ribbon",9),
+ ("Helm_Of_Darkness",11),
+ "Puppy_Hat",
+ ("Geographer_Band",11),
+ ("Laurel_Wreath",11),
+ ("Bird_Nest_Hat",11),
+ ("Alice_Doll",11),
+ ("Hibiscus",11),
+ ("Magic_Eyes",11),
+ ("Charming_Ribbon",11),
+ "Chinese_Crown",
+ ("Crescent_Helm",11),
+ ("Kabuki_Mask",12),
+ "Cat_Hat"
)
-Holy_Egg_2: (
- ("Oridecon",3),
- ("Elunium",10),
- ("White_Slim_Potion",30),
- ("Blue_Potion",30),
- ("Yggdrasilberry",3),
- ("Seed_Of_Yggdrasil",2),
- ("Leaf_Of_Yggdrasil",15),
- ("Old_Card_Album",5),
- "Drooping_Bunny"
+Green_Box: (
+ ("Str_Dish10",99),
+ ("Int_Dish10",100),
+ ("Vit_Dish10",100),
+ ("Agi_Dish10",100),
+ ("Dex_Dish10",100),
+ ("Luk_Dish10",100),
+ ("Yggdrasilberry",99),
+ ("Seed_Of_Yggdrasil",100),
+ ("Fire_Cracker",100),
+ ("Chocolate_Drink",100),
+ "Puppy_Hat"
)
-Red_Box_: (
- ("Magic_Eyes",9),
- ("Hibiscus",10),
- ("Charming_Ribbon",10)
-)
-Hometown_Gift: (
- "Hearty_Rice_Cake",
- "Salty_Rice_Cake",
- "Lucky_Rice_Cake",
- "Sesame_Pastry",
- "Honey_Pastry",
- "Rainbow_Cake",
- "Korea_Rice_Cake"
+Old_Bleu_Box: (
+ "Cold_Scroll_1_5",
+ "Fire_Scroll_1_5",
+ "Wind_Scroll_1_5",
+ "Fire_Scroll_2_5",
+ "Fire_Scroll_3_5",
+ "Holy_Scroll_1_5",
+ "Cold_Scroll_2_5",
+ "Gift_Box",
+ "Milk",
+ "Well_Baked_Cookie"
)
Old_Yellow_Box: (
"Cookie_Hat",
@@ -3213,6 +3192,8 @@ Old_Gift_Box: (
("Fallen_Leaves_",45)
)
Magic_Card_Album: (
+ "Angeling_Card",
+ "Gryphon_Card",
"Dark_Illusion_Card",
"Deviling_Card",
("Dragon_Fly_Card",10),
@@ -3248,30 +3229,21 @@ Masquerade_Ball_Box: (
("Marvelous_Wig_",10),
("Ati_Atihan_Hat_",10)
)
-Louise_Costume_Box: (
- ("Red_Bag",16),
- ("Cool_Summer_Outfit",2)
-)
-Xmas_Gift: (
- ("Fire_Cracker_Love",6),
- ("Gift_Box",66),
- ("Old_Bleu_Box",36),
- ("Set_Of_Taiming_Item",6),
- ("Wrapped_Mask",6),
- ("Old_Blue_Box",24),
- ("Bundle_Of_Magic_Scroll",12),
- ("Buche_De_Noel",24),
- ("Speed_Up_Potion",12),
- ("Slow_Down_Potion",12),
- ("Cookie_Bag",12),
- ("Red_Bag",6),
- ("First_Aid_Kit",12),
- ("Crystal_Jewel__",12),
- ("HandMade_Chocolate",18),
- ("HandMade_Chocolate_",18),
- ("Chocolate_Drink",18),
- ("Santa's_Hat_",12),
- ("Fire_Cracker_Xmas",4)
+Easter_Scroll: (
+ ("Silver_Knife_Of_Chaste",109),
+ ("Heart_Of_Her",110),
+ ("No_Recipient",110),
+ ("Old_Broom",110),
+ ("Armlet_Of_Obedience",110),
+ ("Shining_Stone",110),
+ ("Contracts_In_Shadow",110),
+ ("Book_Of_Devil",110),
+ ("Pet_Incubator",205),
+ "Munak_Turban",
+ "Bongun_Hat",
+ "Munak_Turban_",
+ "Bongun_Hat_",
+ "Ghost_Bandana"
)
Tresure_Box_WoE: (
("Wind_Arrow_Container",23),
@@ -3301,6 +3273,31 @@ Masquerade_Ball_Box2: (
("Cap_Of_Blindness",10),
"Dress_Hat"
)
+Louise_Costume_Box: (
+ ("Red_Bag",16),
+ ("Cool_Summer_Outfit",2)
+)
+Xmas_Gift: (
+ ("Fire_Cracker_Love",6),
+ ("Gift_Box",66),
+ ("Old_Bleu_Box",36),
+ ("Set_Of_Taiming_Item",6),
+ ("Wrapped_Mask",6),
+ ("Old_Blue_Box",24),
+ ("Bundle_Of_Magic_Scroll",12),
+ ("Buche_De_Noel",24),
+ ("Speed_Up_Potion",12),
+ ("Slow_Down_Potion",12),
+ ("Cookie_Bag",12),
+ ("Red_Bag",6),
+ ("First_Aid_Kit",12),
+ ("Crystal_Jewel__",12),
+ ("HandMade_Chocolate",18),
+ ("HandMade_Chocolate_",18),
+ ("Chocolate_Drink",18),
+ ("Santa's_Hat_",12),
+ ("Fire_Cracker_Xmas",4)
+)
Pierre_Treasurebox: (
("Scarlet_Dyestuffs",3),
("Lemon_Dyestuffs",3),
@@ -3342,6 +3339,465 @@ Cherish_Box_Ori: (
("Ragnarok_Limited_Ed",3)
)
Splendid_Box: (
+ ("Imperial_Guard",2),
+ ("Bone_Plate",2),
+ ("Ebone_Armor",2),
+ ("Krasnaya",2),
+ ("Alca_Bringer",2),
+ ("Chrome_Twohand_Sword",2),
+ ("Krishna",2),
+ ("Cakram",2),
+ ("Durga",2),
+ ("Vecer_Axe",2),
+ ("Giant_Axe",2),
+ ("Imperial_Spear",2),
+ ("Rafini_Staff",2),
+ ("Falken_Blitz",2),
+ ("Elven_Bow",2),
+ ("Green_Whistle",2),
+ ("Stem_Whip",2),
+ ("Krieg",2),
+ ("Weihna",2),
+ ("Black_Wing",2),
+ ("Ruber",2),
+ ("Erde",2),
+ ("Red_Square_Bag",2),
+ ("Carga_Mace",2),
+ ("Red_Ether_Bag",2),
+ ("Mystic_Bow",2)
+)
+Old_C_Album_Armor: (
+ ("Pupa_Card",2),
+ ("Picky_Card",2),
+ ("Picky__Card",2),
+ ("Roda_Frog_Card",2),
+ ("Thief_Bug_Card",2),
+ ("Rocker_Card",2),
+ ("Desert_Wolf_Babe_Card",2),
+ ("Pecopeco_Card",2),
+ ("Steel_Chonchon_Card",2),
+ ("Cornutus_Card",2),
+ ("Savage_Card",2),
+ ("Sword_Fish_Card",2),
+ ("Dokebi_Card",2),
+ ("Pasana_Card",2),
+ ("Sand_Man_Card",2),
+ ("Marc_Card",2),
+ ("Argiope_Card",2),
+ ("Bathory_Card",2),
+ ("Evil_Druid_Card",2),
+ ("Goat_Card",2),
+ ("Flying_Deleter_Card",2),
+ ("Grizzly_Card",2),
+ ("Nightmare_Terror_Card",2),
+ ("Dark_Frame_Card",2),
+ ("Demon_Pungus_Card",2),
+ ("Disguise_Card",2),
+ ("Wraith_Dead_Card",2),
+ ("Loli_Ruri_Card",2),
+ ("Rybio_Card",2),
+ ("Majoruros_Card",2),
+ ("Brilight_Card",2),
+ ("Sasquatch_Card",2),
+ ("Succubus_Card",2),
+ ("Solider_Card",2),
+ ("Skel_Prisoner_Card",2),
+ ("Baby_Leopard_Card",2),
+ ("Anolian_Card",2),
+ ("Apocalips_Card",2),
+ ("Antonio_Card",2),
+ ("Wooden_Golem_Card",2),
+ ("Giant_Spider_Card",2),
+ ("Deleter_Card",2),
+ ("Geographer_Card",2),
+ ("Karakasa_Card",2),
+ ("Kraben_Card",2),
+ ("Cremy_Fear_Card",2),
+ ("Clock_Card",2),
+ ("Chimera_Card",2),
+ ("Killer_Mantis_Card",2),
+ ("Pest_Card",2),
+ ("Waste_Stove_Card",2),
+ ("Venomous_Card",2),
+ ("Porcellio_Card",2),
+ ("Obsidian_Card",2),
+ ("Mineral_Card",2),
+ ("Ygnizem_Card",2),
+ ("Removal_Card",2),
+ ("Venatu_Card",2),
+ ("Dimik_Card",2),
+ ("Archdam_Card",2),
+ ("Novus__Card",2),
+ ("Novus_Card",2),
+ ("Ancient_Mimic_Card",2),
+ ("Observation_Card",2),
+ ("Shelter_Card",2),
+ ("Aliza_Card",2),
+ ("Alicel_Card",2),
+ ("Skogul_Card",2),
+ ("Frus_Card",2),
+ ("Agav_Card",2),
+ ("Echio_Card",2),
+ ("Byorgue_Card",2),
+ ("Banshee_Master_Card",2),
+ "Hardrock_Mammoth_Card"
+)
+Old_C_Album_Helm: (
+ ("Stainer_Card",2),
+ ("Coco_Card",2),
+ ("Martin_Card",2),
+ ("Elder_Wilow_Card",2),
+ ("Giearth_Card",2),
+ ("Ghoul_Card",2),
+ ("Marduk_Card",2),
+ ("Deviruchi_Card",2),
+ ("Nightmare_Card",2),
+ ("Grand_Peco_Card",2),
+ ("Dark_Illusion_Card",2),
+ ("Dryad_Card",2),
+ ("Rideword_Card",2),
+ ("Leib_Olmai_Card",2),
+ ("Leaf_Cat_Card",2),
+ ("Mystcase_Card",2),
+ ("Stalactic_Golem_Card",2),
+ ("C_Tower_Manager_Card",2),
+ ("Archangeling_Card",2),
+ ("Wicked_Nymph_Card",2),
+ ("Wootan_Shooter_Card",2),
+ ("Wootan_Fighter_Card",2),
+ ("Incubus_Card",2),
+ ("Giant_Honet_Card",2),
+ ("Gibbet_Card",2),
+ ("Carat_Card",2),
+ ("Cramp_Card",2),
+ ("Permeter_Card",2),
+ ("Ungoliant_Card",2),
+ ("Mole_Card",2),
+ ("Gemini_Card",2),
+ ("Seyren_Card",2),
+ ("Magaleta_Card",2),
+ ("Katrinn_Card",2),
+ ("Acidus__Card",2),
+ ("Vanberk_Card",2),
+ ("Isilla_Card",2),
+ ("Knocker_Card",2),
+ ("Banshee_Card",2),
+ "Duneyrr_Card",
+ "Rata_Card",
+ "Rhyncho_Card",
+ "Phylla_Card",
+ "Dark_Pinguicula_Card"
+)
+Old_C_Album_Acc: (
+ ("Kukre_Card",2),
+ ("Tarou_Card",2),
+ ("Poporing_Card",2),
+ ("Worm_Tail_Card",2),
+ ("Muka_Card",2),
+ ("Creamy_Card",2),
+ ("Smokie_Card",2),
+ ("Poison_Spore_Card",2),
+ ("Yoyo_Card",2),
+ ("Vitata_Card",2),
+ ("Zerom_Card",2),
+ ("Pirate_Skel_Card",2),
+ ("Phen_Card",2),
+ ("Mantis_Card",2),
+ ("Marine_Sphere_Card",2),
+ ("Kobold_Card",2),
+ ("Obeaune_Card",2),
+ ("Horong_Card",2),
+ ("Joker_Card",2),
+ ("Gargoyle_Card",2),
+ ("Galapago_Card",2),
+ ("Rice_Cake_Boy_Card",2),
+ ("Poison_Toad_Card",2),
+ ("Raydric_Archer_Card",2),
+ ("Wraith_Card",2),
+ ("Lude_Card",2),
+ ("Marin_Card",2),
+ ("Mimic_Card",2),
+ ("Violy_Card",2),
+ ("Bon_Gun_Card",2),
+ ("Blazzer_Card",2),
+ ("Sageworm_Card",2),
+ ("Stem_Worm_Card",2),
+ ("Spring_Rabbit_Card",2),
+ ("Sleeper_Card",2),
+ ("Shinobi_Card",2),
+ ("Wild_Ginseng_Card",2),
+ ("Owl_Duke_Card",2),
+ ("Owl_Baron_Card",2),
+ ("Alligator_Card",2),
+ ("Orc_Archer_Card",2),
+ ("Evil_Cloud_Hermit_Card",2),
+ ("Wind_Ghost_Card",2),
+ ("Li_Me_Mang_Ryang_Card",2),
+ ("Dancing_Dragon_Card",2),
+ ("Tengu_Card",2),
+ ("Greatest_General_Card",2),
+ ("Cookie_Card",2),
+ ("Quve_Card",2),
+ ("Hylozoist_Card",2),
+ ("See_Otter_Card",2),
+ ("Blood_Butterfly_Card",2),
+ ("Heater_Card",2),
+ ("Anopheles_Card",2),
+ ("Armaia_Card",2),
+ ("Whikebain_Card",2),
+ ("Erend_Card",2),
+ ("Gremlin_Card",2),
+ ("Beholder_Card",2),
+ ("Green_Iguana_Card",2),
+ ("Hydro_Card",2),
+ ("Dragon_Egg_Card",2),
+ ("Plasma_Card",2),
+ ("Retribution_Card",2),
+ ("Snowier_Card",2),
+ ("Siroma_Card",2),
+ ("Gazeti_Card",2),
+ ("Galion_Card",2),
+ ("Stapo_Card",2),
+ ("Imp_Card",2),
+ ("Ragged_Zombie_Card",2),
+ ("Hell_Poodle_Card",2)
+)
+Old_C_Album_Shoes: (
+ ("Zombie_Card",2),
+ ("Thief_Bug_Male_Card",2),
+ ("Eggyra_Card",2),
+ ("Matyr_Card",2),
+ ("Sohee_Card",2),
+ ("Verit_Card",2),
+ ("Gajomart_Card",2),
+ ("Antique_Firelock_Card",2),
+ ("Gullinbursti_Card",2),
+ ("Raggler_Card",2),
+ ("Merman_Card",2),
+ ("Megalith_Card",2),
+ ("Mini_Demon_Card",2),
+ ("Miyabi_Ningyo_Card",2),
+ ("Skeleton_General_Card",2),
+ ("Cookie_XMAS_Card",2),
+ ("Iron_Fist_Card",2),
+ ("Alarm_Card",2),
+ ("Am_Mut_Card",2),
+ ("Ancient_Worm_Card",2),
+ ("Wild_Rose_Card",2),
+ ("Explosion_Card",2),
+ ("Zombie_Prisoner_Card",2),
+ ("Cat_O_Nine_Tail_Card",2),
+ ("Freezer_Card",2),
+ ("Acidus_Card",2),
+ ("Ferus__Card",2),
+ ("Tha_Odium_Card",2),
+ ("Ice_Titan_Card",2),
+ ("Zombie_Slaughter_Card",2),
+ "Heavy_Metaling_Card"
+)
+Old_C_Album_Shield: (
+ ("Andre_Egg_Card",2),
+ ("Ambernite_Card",2),
+ ("Horn_Card",2),
+ ("Thara_Frog_Card",2),
+ ("Orc_Warrior_Card",2),
+ ("Megalodon_Card",2),
+ ("BigFoot_Card",2),
+ ("Argos_Card",2),
+ ("Rafflesia_Card",2),
+ ("Munak_Card",2),
+ ("Petit__Card",2),
+ ("Medusa_Card",2),
+ ("Khalitzburg_Card",2),
+ ("Anubis_Card",2),
+ ("Mysteltainn_Card",2),
+ ("Live_Peach_Tree_Card",2),
+ ("Sting_Card",2),
+ ("Increase_Soil_Card",2),
+ ("Arclouse_Card",2),
+ ("Ancient_Mummy_Card",2),
+ ("Executioner_Card",2),
+ ("Alice_Card",2),
+ ("Tirfing_Card",2),
+ ("Zherlthsh_Card",2),
+ ("Tamruan_Card",2),
+ ("Parasite_Card",2),
+ ("Penomena_Card",2),
+ ("High_Orc_Card",2),
+ ("Teddy_Bear_Card",2),
+ ("Tha_Despero_Card",2),
+ ("Hodremlin_Card",2),
+ ("Seeker_Card",2),
+ ("Muscipular_Card",2),
+ ("Flame_Skull_Card",2),
+ ("Tatacho_Card",2),
+ ("Aqua_Elemental_Card",2),
+ ("Draco_Card",2),
+ ("Luciola_Vespa_Card",2),
+ ("Centipede_Card",2),
+ ("Cornus_Card",2),
+ ("Dark_Shadow_Card",2)
+)
+Old_C_Album_Garment: (
+ ("Dustiness_Card",2),
+ ("Orc_Zombie_Card",2),
+ ("Hode_Card",2),
+ ("Frilldora_Card",2),
+ ("Marse_Card",2),
+ ("Whisper_Card",2),
+ ("Myst_Card",2),
+ ("Jakk_Card",2),
+ ("Marionette_Card",2),
+ ("Isis_Card",2),
+ ("Baphomet__Card",2),
+ ("Daydric_Card",2),
+ ("Nine_Tail_Card",2),
+ ("Deviling_Card",2),
+ ("Dragon_Tail_Card",2),
+ ("Dragon_Fly_Card",2),
+ ("Vagabond_Wolf_Card",2),
+ ("Mastering_Card",2),
+ ("Wander_Man_Card",2),
+ ("Vocal_Card",2),
+ ("Eclipse_Card",2),
+ ("Choco_Card",2),
+ ("Kapha_Card",2),
+ ("Whisper_Boss_Card",2),
+ ("Toad_Card",2),
+ ("Punk_Card",2),
+ ("Harpy_Card",2),
+ ("Hyegun_Card",2),
+ ("Noxious_Card",2),
+ ("Kavac_Card",2),
+ ("Chung_E_Card",2),
+ ("Orc_Baby_Card",2),
+ ("Aliot_Card",2),
+ ("Roween_Card",2),
+ ("Salamander_Card",2),
+ ("Kasa_Card",2),
+ ("Magmaring_Card",2)
+)
+Old_C_Album_Weapon: (
+ ("Drops_Card",2),
+ ("Poring__Card",2),
+ ("Lunatic_Card",2),
+ ("Pecopeco_Egg_Card",2),
+ ("Savage_Babe_Card",2),
+ ("Andre_Larva_Card",2),
+ ("Hornet_Card",2),
+ ("Farmiliar_Card",2),
+ ("Plankton_Card",2),
+ ("Skeleton_Card",2),
+ ("Thief_Bug_Female_Card",2),
+ ("Wolf_Card",2),
+ ("Mandragora_Card",2),
+ ("Hydra_Card",2),
+ ("Snake_Card",2),
+ ("Andre_Card",2),
+ ("Vadon_Card",2),
+ ("Marina_Card",2),
+ ("Metaller_Card",2),
+ ("Goblin_Card",2),
+ ("Anacondaq_Card",2),
+ ("Caramel_Card",2),
+ ("Kaho_Card",2),
+ ("Scorpion_Card",2),
+ ("Drainliar_Card",2),
+ ("Golem_Card",2),
+ ("Magnolia_Card",2),
+ ("Flora_Card",2),
+ ("Desert_Wolf_Card",2),
+ ("Orc_Skeleton_Card",2),
+ ("Soldier_Skeleton_Card",2),
+ ("Skel_Worker_Card",2),
+ ("Archer_Skeleton_Card",2),
+ ("Zenorc_Card",2),
+ ("Requiem_Card",2),
+ ("Mummy_Card",2),
+ ("Strouf_Card",2),
+ ("Hunter_Fly_Card",2),
+ ("Side_Winder_Card",2),
+ ("Petit_Card",2),
+ ("Deviace_Card",2),
+ ("Minorous_Card",2),
+ ("Scorpion_King_Card",2),
+ ("Knight_Of_Abyss_Card",2),
+ ("Crab_Card",2),
+ ("Goblin_Leader_Card",2),
+ ("Steam_Goblin_Card",2),
+ ("Goblin_Archer_Card",2),
+ ("Gryphon_Card",2),
+ ("Gig_Card",2),
+ ("Neraid_Card",2),
+ ("Dark_Priest_Card",2),
+ ("The_Paper_Card",2),
+ ("Dullahan_Card",2),
+ ("Driller_Card",2),
+ ("Diabolic_Card",2),
+ ("Lava_Golem_Card",2),
+ ("Rotar_Zairo_Card",2),
+ ("Civil_Servant_Card",2),
+ ("Mutant_Dragon_Card",2),
+ ("Bloody_Murderer_Card",2),
+ ("Stone_Shooter_Card",2),
+ ("Assulter_Card",2),
+ ("Aster_Card",2),
+ ("Elder_Card",2),
+ ("Orc_Lady_Card",2),
+ ("Injustice_Card",2),
+ ("Shellfish_Card",2),
+ ("Zombie_Master_Card",2),
+ ("Zipper_Bear_Card",2),
+ ("Chepet_Card",2),
+ ("Caterpillar_Card",2),
+ ("Kobold_Leader_Card",2),
+ ("Kobold_Archer_Card",2),
+ ("Cruiser_Card",2),
+ ("Kind_Of_Beetle_Card",2),
+ ("Tri_Joint_Card",2),
+ ("Panzer_Goblin_Card",2),
+ ("Fur_Seal_Card",2),
+ ("Fake_Angel_Card",2),
+ ("Mobster_Card",2),
+ ("Garm_Baby_Card",2),
+ ("Phendark_Card",2),
+ ("Pitman_Card",2),
+ ("Metaling_Card",2),
+ ("Hill_Wind_Card",2),
+ ("Rawrel_Card",2),
+ ("Eremes_Card",2),
+ ("Harword_Card",2),
+ ("Shecil_Card",2),
+ ("Ferus_Card",2),
+ ("Deathword_Card",2),
+ ("Breeze_Card",2),
+ ("Solace_Card",2),
+ ("Tha_Maero_Card",2),
+ ("Tha_Dolor_Card",2),
+ ("Skeggiold_Card",2),
+ ("Drosera_Card",2),
+ ("Sword_Guardian_Card",2),
+ ("Bow_Guardian_Card",2),
+ ("Necromancer_Card",2),
+ ("Centipede_Larva_Card",2),
+ ("Hilsrion_Card",2),
+ ("Bloody_Knight_Card",2),
+ "Tendrilrion_Card",
+ "Aunoe_Card",
+ "Fanat_Card",
+ "Beholder_Master_Card",
+ "Naga_Card",
+ "Nepenthes_Card",
+ "Draco_Egg_Card",
+ "Bradium_Golem_Card",
+ "Ancient_Tree_Card",
+ "Zakudam_Card",
+ "Cobalt_Mineral_Card",
+ "Pinguicula_Card",
+ "Hell_Apocalypse_Card"
+)
+/* currently unsupported or unknown ('Splendid_Box2')
+Splendid_Box2: (
"Imperial_Guard",
"Bone_Plate",
"Ebone_Armor",
@@ -3367,434 +3823,655 @@ Splendid_Box: (
"Red_Square_Bag",
"Carga_Mace",
"Red_Ether_Bag",
- "Mystic_Bow"
+ "Mystic_Bow",
+ "Hunting_Spear",
+ "Piece_Of_Angent_Skin",
+ "Diabolus_Robe",
+ "Diabolus_Armor",
+ "Diabolus_Boots",
+ "Diabolus_Manteau",
+ "Bison_Horn",
+ "Dragon_Vest",
+ "Dragon_Manteau",
+ "Elven_Ears",
+ "Tidal_Shoes",
+ "Black_Leather_Boots",
+ "Black_Leather_Boots_",
+ "Variant_Shoes",
+ "Twin_Edge_B",
+ "Twin_Edge_R"
)
-Old_C_Album_Armor: (
- "Pupa_Card",
- "Picky_Card",
- "Picky__Card",
- "Roda_Frog_Card",
- "Thief_Bug_Card",
- "Rocker_Card",
- "Desert_Wolf_Babe_Card",
- "Pecopeco_Card",
- "Steel_Chonchon_Card",
- "Cornutus_Card",
- "Savage_Card",
+*/
+/* currently unsupported or unknown ('Mysterious_Egg')
+Mysterious_Egg: (
+ ("Lucky_Egg2",3),
+ ("Lucky_Egg_C3",3),
+ ("Lucky_Egg_C4",3),
+ ("Lucky_Egg_C5",3),
+ ("Lucky_Egg_C6",3),
+ ("Lucky_Egg_C",2)
+)
+*/
+High_Weapon_Box: (
+ ("Mail_Breaker",5),
+ ("Weeder_Knife",5),
+ ("Mama's_Knife",5),
+ ("Assasin_Dagger",5),
+ ("Exercise",5),
+ ("Azoth",5),
+ ("Sucsamad",5),
+ ("Grimtooth_",5),
+ ("Princess_Knife",5),
+ ("Cursed_Dagger",5),
+ ("Counter_Dagger",5),
+ ("Holy_Dagger",5),
+ ("Krieg",5),
+ ("Weihna",5),
+ ("Black_Wing",5),
+ ("Blood_Tears",5),
+ ("Unholy_Touch",5),
+ ("Drill_Katar",5),
+ ("Krishna",5),
+ ("Cakram",5),
+ ("Cleaver",5),
+ ("Great_Axe",5),
+ ("Sabbath",5),
+ ("Bradium_Stonehammer",5),
+ ("Slaughter",5),
+ ("Tomahawk",5),
+ ("Vecer_Axe",5),
+ ("Ice_Falchon",7),
+ ("Fire_Brand",7),
+ ("Scissores_Sword",7),
+ ("Cutlas",7),
+ ("Solar_Sword",7),
+ ("Mysteltainn_",7),
+ ("Tale_Fing_",7),
+ ("Byeorrun_Gum",7),
+ ("Immaterial_Sword",7),
+ ("Star_Dust_Blade",7),
+ ("Muramasa",7),
+ ("Dragon_Slayer",7),
+ ("Schweizersabel",7),
+ ("Zweihander",7),
+ ("Katzbalger",7),
+ ("Zweihander_",7),
+ ("Muscle_Cutter",7),
+ ("Schweizersabel_",7),
+ ("Dragon_Slayer_",7),
+ ("Tae_Goo_Lyeon",7),
+ ("Bloody_Eater",7),
+ ("Veteran_Sword",7),
+ ("Ruber",5),
+ ("Krasnaya",5),
+ ("Gungnir",5),
+ ("Gelerdria",5),
+ ("Tjungkuletti",5),
+ ("Gungnir_",5),
+ ("Crescent_Scythe",5),
+ ("Bill_Guisarme",5),
+ ("Zephyrus",5),
+ ("Longinus's_Spear",5),
+ ("Brionac",5),
+ ("Hell_Fire",5),
+ ("Gae_Bolg",5),
+ ("Crescent_Scythe_",5),
+ ("Spectral_Spear",5),
+ ("Ahlspiess",5),
+ ("Spectral_Spear_",5),
+ ("Gae_Bolg_",5),
+ ("Zephyrus_",5),
+ ("Wizardy_Staff",5),
+ ("Staff_Of_Wing",5),
+ ("Walking_Stick",5),
+ ("Holy_Stick",5),
+ ("Dead_Tree_Cane",5),
+ ("Kronos",5),
+ ("Dea_Staff",5),
+ ("Divine_Cross",5),
+ ("Golden_Mace",5),
+ ("Long_Mace",5),
+ ("Quadrille",5),
+ ("Golden_Mace_",5),
+ ("Nemesis",5),
+ ("Erde",5),
+ ("Red_Square_Bag",5),
+ ("Red_Ether_Bag",5),
+ ("Book_Of_The_Apocalypse",5),
+ ("Girl's_Diary",5),
+ ("Legacy_Of_Dragon",5),
+ ("Hardback",5),
+ ("Bible_Of_Battlefield",5),
+ ("Kaiser_Knuckle",5),
+ ("Claw_Of_Garm",5),
+ ("Dragon_Wing",5),
+ ("Bow_Of_Minstrel",5),
+ ("Ixion_Wing",5),
+ ("Nepenthes_Bow",5),
+ ("Cursed_Lyre",5),
+ ("Falken_Blitz",5),
+ ("Mystic_Bow",5),
+ ("Electronic_Guitar",5),
+ ("Oriental_Lute",5),
+ ("Oriental_Lute_",5),
+ ("Harp_Of_Nepenthes",5),
+ ("Lariat",5),
+ ("Rapture_Rose",5),
+ ("Chemeti",5),
+ ("Bladed_Whip",5),
+ ("Electric_Eel",5),
+ ("Sea_Witch_Foot",5),
+ ("Queen's_Whip",5),
+ ("Carrot_Whip",5),
+ ("Queen's_Whip_",5),
+ ("Stem_Of_Nepenthes",5),
+ "Thorn_Staff",
+ "Eraser",
+ "Destruction_Rod",
+ "Infiltrator",
+ "Infiltrator_",
+ "Heart_Breaker",
+ "Hurricane_Fury",
+ "Right_Epsilon",
+ "Doom_Slayer",
+ ("Sword_Breaker",4),
+ ("Chrome_Sword",2),
+ ("Chrome_Twohand_Sword",2),
+ ("Excalibur",2),
+ ("Masamune",2),
+ ("Nagan",2),
+ ("Executioner_",2),
+ ("Executioner__",2),
+ ("Altas_Weapon",2),
+ ("Giant_Axe",2),
+ ("Guillotine",2),
+ ("Brood_Axe",2),
+ ("Wild_Beast_Claw",2),
+ ("Inverse_Scale",2),
+ ("Bloody_Roar",2),
+ ("Cardo",2),
+ ("Imperial_Spear",2),
+ ("Skewer",2),
+ ("Battle_Hook",2),
+ ("Mental_Stick",2),
+ "Doom_Slayer_",
+ "Hunting_Spear",
+ "Edge",
+ "Violet_Fear",
+ "Death_Guidance",
+ "House_Auger",
+ "Bazerald",
+ "Ancient_Dagger",
+ "Grand_Cross",
+ "Grand_Cross_",
+ "Death_Note",
+ "Berserk",
+ "Berserk_",
+ "Berserk_Guitar",
+ "Rosebine",
+ ("Forturn_Sword",2),
+ ("Combat_Knife",2),
+ ("Moonlight_Sword",2),
+ ("Spike",2),
+ ("Spike_",2),
+ ("Slash",2),
+ ("Sura_Rampage",2),
+ ("Bow_Of_Roguemaster",2),
+ ("Balistar",2),
+ ("Balistar_",2),
+ ("Bow_Of_Rudra",2),
+ ("Green_Whistle",2),
+ ("Stem_Whip",2),
+ "Agent_Katar",
+ "Guillotine_Katar",
+ "Ignus_Steel",
+ "End_Sectora",
+ "Cannon_Spear",
+ "Cold_Magic_Book",
+ "Light_of_Recovery",
+ "As-nail",
+ "Scarlet-nail",
+ "Bloody_Cross",
+ "Thief_Crossbow",
+ "Giant_Crossbow",
+ "Creeper_Bow"
+)
+/* currently unsupported or unknown ('Ink_Ball')
+Ink_Ball: (
+ ("Jellopy",39),
+ ("Large_Jellopy",20),
+ ("Gift_Box",20),
+ ("Food_Package",10),
+ ("Treasure_Box",6),
+ ("Blue_Gemstone",10),
+ ("First_Aid_Kit",5),
+ "Old_Blue_Box",
+ "Old_Violet_Box",
+ ("Hometown_Gift",14),
+ "Accessory_Box",
+ "Wrapped_Mask",
+ "Old_Card_Album",
+ ("Crystal_Blue",20)
+)
+*/
+/* currently unsupported or unknown ('God_Material_Box')
+God_Material_Box: (
+ "Iron_Glove",
+ "Iron_Maiden",
+ "Mystery_Wheel",
+ "Silver_Fancy",
+ "Anger_Of_Valkurye",
+ "Feather_Of_Angel",
+ "Foot_Step_Of_Cat",
+ "Beard_Of_Women",
+ "Root_Of_Stone",
+ "Soul_Of_Fish",
+ "Saliva_Of_Bird",
+ "Tendon_Of_Bear",
+ "Symbol_Of_Sun",
+ "Breath_Of_Soul",
+ "Crystal_Of_Snow",
+ "Indication_Of_Tempest",
+ "Slilince_Wave",
+ "Rough_Billows",
+ "Air_Stream"
+)
+*/
+/* currently unsupported or unknown ('Sg_Weapon_Supply_Box')
+Sg_Weapon_Supply_Box: (
+ "Velum_Scale",
+ "Velum_Buster",
+ ("Velum_Glaive",8),
+ ("Velum_Arcwand",8),
+ ("Velum_Claymore",8),
+ "Velum_Katzbalger",
+ ("Velum_Balista",3),
+ ("Velum_Crossbow",8),
+ ("Velum_Bible",8),
+ ("Velum_Great_Encyclopedia",8),
+ ("Velum_Claw",3),
+ ("Velum_Damascus",3),
+ ("Velum_Stunner",3),
+ ("Velum_Flail",3),
+ ("Velum_Guillotine",8),
+ ("Velum_Spear",8),
+//unknown/unsupported - ("12677",13),
+//unknown/unsupported - ("12678",13),
+ ("Velum_Jahmadar",2)
+)
+*/
+/* currently unsupported or unknown ('Old_Card_Album_')
+Old_Card_Album_: (
+ ("Poring_Card",14),
+ ("Fabre_Card",17),
+ ("Pupa_Card",6),
+ ("Drops_Card",18),
+ ("Poring__Card",2),
+ ("Lunatic_Card",14),
+ ("Pecopeco_Egg_Card",4),
+ ("Picky_Card",17),
+ ("Chonchon_Card",17),
+ ("Wilow_Card",17),
+ ("Picky__Card",17),
+ ("Thief_Bug_Egg_Card",19),
+ ("Andre_Egg_Card",12),
+ ("Roda_Frog_Card",5),
+ ("Condor_Card",12),
+ ("Thief_Bug_Card",12),
+ ("Savage_Babe_Card",5),
+ ("Hornet_Card",10),
+ ("Farmiliar_Card",10),
+ ("Rocker_Card",10),
+ ("Spore_Card",10),
+ ("Desert_Wolf_Babe_Card",5),
+ ("Plankton_Card",5),
+ ("Skeleton_Card",5),
+ ("Thief_Bug_Female_Card",9),
+ ("Kukre_Card",3),
+ ("Tarou_Card",9),
+ ("Wolf_Card",9),
+ ("Mandragora_Card",9),
+ ("Pecopeco_Card",3),
+ ("Ambernite_Card",6),
+ ("Poporing_Card",6),
+ ("Worm_Tail_Card",6),
+ ("Hydra_Card",3),
+ ("Muka_Card",3),
+ ("Snake_Card",3),
+ ("Zombie_Card",3),
+ ("Stainer_Card",3),
+ ("Creamy_Card",3),
+ ("Coco_Card",3),
+ ("Steel_Chonchon_Card",3),
+ ("Andre_Card",3),
+ ("Smokie_Card",3),
+ ("Horn_Card",3),
+ ("Martin_Card",3),
+ "Ghostring_Card",
+ ("Poison_Spore_Card",3),
+ ("Vadon_Card",3),
+ ("Thief_Bug_Male_Card",3),
+ ("Yoyo_Card",3),
+ ("Elder_Wilow_Card",3),
+ "Vitata_Card",
+ "Angeling_Card",
+ ("Marina_Card",3),
+ ("Dustiness_Card",3),
+ ("Metaller_Card",2),
+ ("Thara_Frog_Card",2),
+ ("Goblin_Card",2),
+ ("Cornutus_Card",2),
+ ("Anacondaq_Card",2),
+ ("Caramel_Card",2),
+ ("Zerom_Card",2),
+ ("Kaho_Card",2),
+ ("Orc_Warrior_Card",2),
+ ("Megalodon_Card",2),
+ ("Scorpion_Card",2),
+ ("Drainliar_Card",2),
+ ("Eggyra_Card",2),
+ ("Orc_Zombie_Card",2),
+ ("Golem_Card",2),
+ ("Pirate_Skel_Card",2),
+ ("BigFoot_Card",2),
+ ("Argos_Card",2),
+ ("Magnolia_Card",2),
+ ("Phen_Card",2),
+ ("Savage_Card",2),
+ ("Mantis_Card",2),
+ ("Flora_Card",2),
+ ("Hode_Card",2),
+ "Desert_Wolf_Card",
+ "Rafflesia_Card",
+ "Marine_Sphere_Card",
+ "Orc_Skeleton_Card",
+ "Soldier_Skeleton_Card",
+ "Giearth_Card",
+ "Frilldora_Card",
"Sword_Fish_Card",
+ "Munak_Card",
+ "Kobold_Card",
+ "Skel_Worker_Card",
+ "Obeaune_Card",
+ "Archer_Skeleton_Card",
+ "Marse_Card",
+ "Zenorc_Card",
+ "Matyr_Card",
"Dokebi_Card",
"Pasana_Card",
+ "Sohee_Card",
"Sand_Man_Card",
+ "Whisper_Card",
+ "Horong_Card",
+ "Requiem_Card",
"Marc_Card",
+ "Mummy_Card",
+ "Verit_Card",
+ "Myst_Card",
+ "Jakk_Card",
+ "Ghoul_Card",
+ "Strouf_Card",
+ "Marduk_Card",
+ "Marionette_Card",
"Argiope_Card",
+ "Hunter_Fly_Card",
+ "Isis_Card",
+ "Side_Winder_Card",
+ "Petit_Card",
"Bathory_Card",
+ "Petit__Card",
+ "Deviruchi_Card",
+ "Deviace_Card",
+ "Nightmare_Card",
+ "Baphomet__Card",
+ "Daydric_Card",
+ "Khalitzburg_Card",
+ "Joker_Card",
"Evil_Druid_Card",
+ "Gargoyle_Card",
"Goat_Card",
+ "Gajomart_Card",
+ "Galapago_Card",
+ "Crab_Card",
+ "Rice_Cake_Boy_Card",
+ "Steam_Goblin_Card",
+ "Goblin_Archer_Card",
"Flying_Deleter_Card",
+ "Nine_Tail_Card",
+ "Antique_Firelock_Card",
+ "Grand_Peco_Card",
"Grizzly_Card",
+ "Gullinbursti_Card",
+ "Gig_Card",
"Nightmare_Terror_Card",
+ "Neraid_Card",
"Dark_Frame_Card",
+ "The_Paper_Card",
"Demon_Pungus_Card",
+ "Poison_Toad_Card",
+ "Dullahan_Card",
+ "Dryad_Card",
+ "Dragon_Tail_Card",
+ "Driller_Card",
"Disguise_Card",
+ "Diabolic_Card",
+ "Lava_Golem_Card",
+ "Rideword_Card",
+ "Raggler_Card",
+ "Raydric_Archer_Card",
+ "Leib_Olmai_Card",
"Wraith_Dead_Card",
+ "Wraith_Card",
"Loli_Ruri_Card",
+ "Rotar_Zairo_Card",
+ "Lude_Card",
"Rybio_Card",
+ "Leaf_Cat_Card",
+ "Marin_Card",
+ "Merman_Card",
+ "Megalith_Card",
"Majoruros_Card",
+ "Civil_Servant_Card",
+ "Mini_Demon_Card",
+ "Mimic_Card",
+ "Mystcase_Card",
+ "Miyabi_Ningyo_Card",
+ "Violy_Card",
+ "Wander_Man_Card",
+ "Bon_Gun_Card",
"Brilight_Card",
+ "Bloody_Murderer_Card",
+ "Blazzer_Card",
"Sasquatch_Card",
+ "Live_Peach_Tree_Card",
"Succubus_Card",
+ "Sageworm_Card",
"Solider_Card",
+ "Skeleton_General_Card",
"Skel_Prisoner_Card",
+ "Stalactic_Golem_Card",
+ "Stem_Worm_Card",
+ "Stone_Shooter_Card",
+ "Sting_Card",
+ "Spring_Rabbit_Card",
+ "Sleeper_Card",
+ "C_Tower_Manager_Card",
+ "Shinobi_Card",
+ "Increase_Soil_Card",
+ "Wild_Ginseng_Card",
"Baby_Leopard_Card",
"Anolian_Card",
+ "Cookie_XMAS_Card",
+ "Owl_Duke_Card",
+ "Owl_Baron_Card",
+ "Iron_Fist_Card",
+ "Arclouse_Card",
"Apocalips_Card",
+ "Antonio_Card",
+ "Alarm_Card",
+ "Am_Mut_Card",
+ "Assulter_Card",
+ "Aster_Card",
+ "Ancient_Mummy_Card",
+ "Ancient_Worm_Card",
+ "Elder_Card",
+ "Alligator_Card",
+ "Alice_Card",
+ "Orc_Lady_Card",
+ "Orc_Archer_Card",
+ "Wild_Rose_Card",
+ "Wicked_Nymph_Card",
"Wooden_Golem_Card",
+ "Wootan_Shooter_Card",
+ "Wootan_Fighter_Card",
+ "Evil_Cloud_Hermit_Card",
+ "Wind_Ghost_Card",
+ "Li_Me_Mang_Ryang_Card",
+ "Explosion_Card",
+ "Injustice_Card",
+ "Incubus_Card",
"Giant_Spider_Card",
+ "Giant_Honet_Card",
+ "Dancing_Dragon_Card",
+ "Shellfish_Card",
+ "Zombie_Master_Card",
+ "Zombie_Prisoner_Card",
+ "Zherlthsh_Card",
+ "Gibbet_Card",
"Deleter_Card",
"Geographer_Card",
+ "Zipper_Bear_Card",
+ "Tengu_Card",
+ "Greatest_General_Card",
+ "Chepet_Card",
+ "Choco_Card",
"Karakasa_Card",
+ "Kapha_Card",
+ "Carat_Card",
+ "Caterpillar_Card",
+ "Cat_O_Nine_Tail_Card",
+ "Kobold_Archer_Card",
+ "Cookie_Card",
+ "Quve_Card",
"Kraben_Card",
+ "Cramp_Card",
+ "Cruiser_Card",
"Cremy_Fear_Card",
"Clock_Card",
"Chimera_Card",
"Killer_Mantis_Card",
+ "Tamruan_Card",
+ "Kind_Of_Beetle_Card",
+ "Tri_Joint_Card",
+ "Parasite_Card",
+ "Panzer_Goblin_Card",
+ "Permeter_Card",
+ "Fur_Seal_Card",
+ "Punk_Card",
+ "Penomena_Card",
"Pest_Card",
+ "Fake_Angel_Card",
+ "Freezer_Card",
+ "Hylozoist_Card",
+ "High_Orc_Card",
+ "Garm_Baby_Card",
+ "Harpy_Card",
+ "See_Otter_Card",
+ "Blood_Butterfly_Card",
+ "Hyegun_Card",
+ "Phendark_Card",
+ "Heater_Card",
"Waste_Stove_Card",
- "Venomous_Card",
+ ("Venomous_Card",3),
+ "Noxious_Card",
+ ("Pitman_Card",3),
+ "Ungoliant_Card",
"Porcellio_Card",
"Obsidian_Card",
"Mineral_Card",
+ "Teddy_Bear_Card",
+ "Metaling_Card",
+ "Mole_Card",
+ ("Anopheles_Card",3),
+ ("Hill_Wind_Card",3),
"Ygnizem_Card",
+ ("Armaia_Card",3),
+ "Whikebain_Card",
+ "Erend_Card",
+ ("Rawrel_Card",3),
+ "Kavac_Card",
"Removal_Card",
+ "Gemini_Card",
+ ("Gremlin_Card",3),
+ "Beholder_Card",
+ "Seyren_Card",
+ ("Eremes_Card",3),
+ "Harword_Card",
+ "Katrinn_Card",
+ "Shecil_Card",
"Venatu_Card",
"Dimik_Card",
"Archdam_Card",
+ "Chung_E_Card",
+ "Orc_Baby_Card",
+ ("Green_Iguana_Card",3),
+ "Acidus_Card",
+ "Acidus__Card",
+ ("Ferus_Card",3),
+ "Ferus__Card",
"Novus__Card",
- "Novus_Card",
+ ("Novus_Card",3),
+ "Hydro_Card",
+ ("Dragon_Egg_Card",3),
"Ancient_Mimic_Card",
+ ("Deathword_Card",3),
+ "Plasma_Card",
+ "Breeze_Card",
+ ("Retribution_Card",3),
"Observation_Card",
"Shelter_Card",
+ "Solace_Card",
+ "Tha_Maero_Card",
+ "Tha_Odium_Card",
+ "Tha_Despero_Card",
"Aliza_Card",
"Alicel_Card",
+ "Aliot_Card",
"Skogul_Card",
"Frus_Card",
"Agav_Card",
"Echio_Card",
- "Byorgue_Card",
- "Banshee_Master_Card"
-)
-Old_C_Album_Helm: (
- "Stainer_Card",
- "Coco_Card",
- "Martin_Card",
- "Elder_Wilow_Card",
- "Giearth_Card",
- "Ghoul_Card",
- "Marduk_Card",
- "Deviruchi_Card",
- "Nightmare_Card",
- "Grand_Peco_Card",
- "Dark_Illusion_Card",
- "Dryad_Card",
- "Rideword_Card",
- "Leib_Olmai_Card",
- "Leaf_Cat_Card",
- "Mystcase_Card",
- "Stalactic_Golem_Card",
- "C_Tower_Manager_Card",
- "Archangeling_Card",
- "Wicked_Nymph_Card",
- "Wootan_Shooter_Card",
- "Wootan_Fighter_Card",
- "Incubus_Card",
- "Giant_Honet_Card",
- "Gibbet_Card",
- "Carat_Card",
- "Cramp_Card",
- "Permeter_Card",
- "Ungoliant_Card",
- "Mole_Card",
- "Gemini_Card",
- "Seyren_Card",
- "Magaleta_Card",
- "Katrinn_Card",
- "Acidus__Card",
"Vanberk_Card",
"Isilla_Card",
- "Knocker_Card",
- "Banshee_Card"
-)
-Old_C_Album_Acc: (
- "Kukre_Card",
- "Tarou_Card",
- "Poporing_Card",
- "Worm_Tail_Card",
- "Muka_Card",
- "Smokie_Card",
- "Poison_Spore_Card",
- "Yoyo_Card",
- "Vitata_Card",
- "Zerom_Card",
- "Pirate_Skel_Card",
- "Phen_Card",
- "Mantis_Card",
- "Marine_Sphere_Card",
- "Kobold_Card",
- "Obeaune_Card",
- "Horong_Card",
- "Joker_Card",
- "Gargoyle_Card",
- "Galapago_Card",
- "Rice_Cake_Boy_Card",
- "Poison_Toad_Card",
- "Raydric_Archer_Card",
- "Wraith_Card",
- "Lude_Card",
- "Marin_Card",
- "Mimic_Card",
- "Violy_Card",
- "Bon_Gun_Card",
- "Blazzer_Card",
- "Sageworm_Card",
- "Stem_Worm_Card",
- "Spring_Rabbit_Card",
- "Sleeper_Card",
- "Shinobi_Card",
- "Wild_Ginseng_Card",
- "Owl_Duke_Card",
- "Owl_Baron_Card",
- "Alligator_Card",
- "Orc_Archer_Card",
- "Evil_Cloud_Hermit_Card",
- "Wind_Ghost_Card",
- "Li_Me_Mang_Ryang_Card",
- "Dancing_Dragon_Card",
- "Tengu_Card",
- "Greatest_General_Card",
- "Cookie_Card",
- "Quve_Card",
- "Hylozoist_Card",
- "See_Otter_Card",
- "Blood_Butterfly_Card",
- "Heater_Card",
- "Anopheles_Card",
- "Armaia_Card",
- "Whikebain_Card",
- "Erend_Card",
- "Gremlin_Card",
- "Beholder_Card",
- "Green_Iguana_Card",
- "Hydro_Card",
- "Dragon_Egg_Card",
- "Plasma_Card",
- "Retribution_Card",
- "Snowier_Card",
- "Siroma_Card",
- "Gazeti_Card",
- "Galion_Card",
- "Stapo_Card",
- "Imp_Card",
- "Ragged_Zombie_Card",
- "Hell_Poodle_Card"
-)
-Old_C_Album_Shoes: (
- "Zombie_Card",
- "Thief_Bug_Male_Card",
- "Eggyra_Card",
- "Matyr_Card",
- "Sohee_Card",
- "Verit_Card",
- "Gajomart_Card",
- "Antique_Firelock_Card",
- "Gullinbursti_Card",
- "Raggler_Card",
- "Merman_Card",
- "Megalith_Card",
- "Mini_Demon_Card",
- "Miyabi_Ningyo_Card",
- "Skeleton_General_Card",
- "Cookie_XMAS_Card",
- "Iron_Fist_Card",
- "Alarm_Card",
- "Am_Mut_Card",
- "Ancient_Worm_Card",
- "Wild_Rose_Card",
- "Explosion_Card",
- "Zombie_Prisoner_Card",
- "Cat_O_Nine_Tail_Card",
- "Freezer_Card",
- "Acidus_Card",
- "Ferus__Card",
- "Tha_Odium_Card",
- "Ice_Titan_Card",
- "Zombie_Slaughter_Card"
-)
-Old_C_Album_Shield: (
- "Andre_Egg_Card",
- "Ambernite_Card",
- "Horn_Card",
- "Thara_Frog_Card",
- "Orc_Warrior_Card",
- "Megalodon_Card",
- "BigFoot_Card",
- "Argos_Card",
- "Rafflesia_Card",
- "Munak_Card",
- "Petit__Card",
- "Medusa_Card",
- "Khalitzburg_Card",
- "Anubis_Card",
- "Mysteltainn_Card",
- "Live_Peach_Tree_Card",
- "Sting_Card",
- "Increase_Soil_Card",
- "Arclouse_Card",
- "Ancient_Mummy_Card",
- "Executioner_Card",
- "Alice_Card",
- "Tirfing_Card",
- "Zherlthsh_Card",
- "Tamruan_Card",
- "Parasite_Card",
- "Penomena_Card",
- "High_Orc_Card",
- "Teddy_Bear_Card",
- "Tha_Despero_Card",
"Hodremlin_Card",
"Seeker_Card",
+ ("Snowier_Card",2),
+ "Siroma_Card",
+ "Ice_Titan_Card",
+ "Gazeti_Card",
"Muscipular_Card",
- "Flame_Skull_Card",
- "Tatacho_Card",
- "Aqua_Elemental_Card",
- "Draco_Card",
- "Luciola_Vespa_Card",
- "Centipede_Card",
- "Cornus_Card",
- "Dark_Shadow_Card"
-)
-Old_C_Album_Weapon: (
- "Drops_Card",
- "Poring__Card",
- "Lunatic_Card",
- "Pecopeco_Egg_Card",
- "Savage_Babe_Card",
- "Andre_Larva_Card",
- "Hornet_Card",
- "Farmiliar_Card",
- "Plankton_Card",
- "Skeleton_Card",
- "Thief_Bug_Female_Card",
- "Wolf_Card",
- "Mandragora_Card",
- "Hydra_Card",
- "Snake_Card",
- "Andre_Card",
- "Vadon_Card",
- "Marina_Card",
- "Metaller_Card",
- "Goblin_Card",
- "Anacondaq_Card",
- "Caramel_Card",
- "Kaho_Card",
- "Scorpion_Card",
- "Drainliar_Card",
- "Golem_Card",
- "Magnolia_Card",
- "Flora_Card",
- "Desert_Wolf_Card",
- "Orc_Skeleton_Card",
- "Soldier_Skeleton_Card",
- "Skel_Worker_Card",
- "Archer_Skeleton_Card",
- "Zenorc_Card",
- "Requiem_Card",
- "Mummy_Card",
- "Strouf_Card",
- "Hunter_Fly_Card",
- "Side_Winder_Card",
- "Petit_Card",
- "Deviace_Card",
- "Minorous_Card",
- "Scorpion_King_Card",
- "Knight_Of_Abyss_Card",
- "Crab_Card",
- "Goblin_Leader_Card",
- "Steam_Goblin_Card",
- "Goblin_Archer_Card",
- "Gryphon_Card",
- "Gig_Card",
- "Neraid_Card",
- "Dark_Priest_Card",
- "The_Paper_Card",
- "Dullahan_Card",
- "Driller_Card",
- "Diabolic_Card",
- "Lava_Golem_Card",
- "Rotar_Zairo_Card",
- "Civil_Servant_Card",
- "Mutant_Dragon_Card",
- "Bloody_Murderer_Card",
- "Stone_Shooter_Card",
- "Assulter_Card",
- "Aster_Card",
- "Elder_Card",
- "Orc_Lady_Card",
- "Injustice_Card",
- "Shellfish_Card",
- "Zombie_Master_Card",
- "Zipper_Bear_Card",
- "Chepet_Card",
- "Caterpillar_Card",
- "Kobold_Leader_Card",
- "Kobold_Archer_Card",
- "Cruiser_Card",
- "Kind_Of_Beetle_Card",
- "Tri_Joint_Card",
- "Panzer_Goblin_Card",
- "Fur_Seal_Card",
- "Fake_Angel_Card",
- "Mobster_Card",
- "Garm_Baby_Card",
- "Phendark_Card",
- "Pitman_Card",
- "Metaling_Card",
- "Hill_Wind_Card",
- "Rawrel_Card",
- "Eremes_Card",
- "Harword_Card",
- "Shecil_Card",
- "Ferus_Card",
- "Deathword_Card",
- "Breeze_Card",
- "Solace_Card",
- "Tha_Maero_Card",
- "Tha_Dolor_Card",
- "Skeggiold_Card",
- "Drosera_Card",
+ ("Drosera_Card",2),
+ "Roween_Card",
+ "Galion_Card",
+ ("Stapo_Card",3),
+ "Byorgue_Card",
"Sword_Guardian_Card",
"Bow_Guardian_Card",
- "Necromancer_Card",
- "Centipede_Larva_Card",
- "Hilsrion_Card",
- "Bloody_Knight_Card"
-)
-Old_C_Album_Garment: (
- ("Dustiness_Card",32),
- ("Orc_Zombie_Card",32),
- ("Hode_Card",32),
- ("Frilldora_Card",32),
- ("Marse_Card",32),
- ("Whisper_Card",32),
- ("Myst_Card",32),
- ("Jakk_Card",32),
- ("Marionette_Card",32),
- ("Isis_Card",32),
- ("Baphomet__Card",32),
- ("Daydric_Card",32),
- ("Nine_Tail_Card",32),
- "Deviling_Card",
- ("Dragon_Tail_Card",32),
- ("Dragon_Fly_Card",32),
- "Vagabond_Wolf_Card",
- "Mastering_Card",
- "Wander_Man_Card",
- "Vocal_Card",
- ("Eclipse_Card",32),
- ("Choco_Card",32),
- ("Kapha_Card",32),
- ("Whisper_Boss_Card",32),
- "Toad_Card",
- ("Punk_Card",32),
- ("Harpy_Card",32),
- ("Hyegun_Card",32),
- ("Noxious_Card",32),
- "Kavac_Card",
- ("Chung_E_Card",32),
- ("Orc_Baby_Card",32),
- ("Aliot_Card",32),
- ("Roween_Card",32),
- ("Salamander_Card",32),
- ("Kasa_Card",32),
- ("Magmaring_Card",33),
- ("Condor_Card",31)
+ "Salamander_Card",
+ "Kasa_Card",
+ ("Magmaring_Card",2),
+ "Imp_Card",
+ "Knocker_Card",
+ "Zombie_Slaughter_Card",
+ ("Ragged_Zombie_Card",2),
+ ("Hell_Poodle_Card",2),
+ ("Banshee_Card",2),
+ "Flame_Skull_Card",
+ "Necromancer_Card"
)
-//unknown carrier / unsupported
-/*Candy_Holder: (
- ("Honey",9),
- ("Candy",20),
- ("Well_Baked_Cookie",15),
- ("Piece_Of_Cake",10),
- ("Bread",20),
- "Old_Blue_Box",
- "Yggdrasilberry",
- "Old_Card_Album",
- "Old_Violet_Box",
- "Contracts_In_Shadow",
- ("Niflheim_Ticket",10),
- ("Pumpkin_Cake",5),
- ("Pumpkin_Pie",5)
-)*/
-High_Weapon_Box: (
+*/
+/* currently unsupported or unknown ('High_Weapon_Box_')
+High_Weapon_Box_: (
("Mail_Breaker",5),
("Weeder_Knife",5),
("Mama's_Knife",5),
@@ -3917,7 +4594,6 @@ High_Weapon_Box: (
"Right_Epsilon",
"Doom_Slayer",
("Sword_Breaker",4),
- //("14420",2), -- Unknown/Unsupported
("Chrome_Sword",2),
("Chrome_Twohand_Sword",2),
("Excalibur",2),
@@ -3978,4 +4654,92 @@ High_Weapon_Box: (
"Thief_Crossbow",
"Giant_Crossbow",
"Creeper_Bow"
-) \ No newline at end of file
+)
+*/
+Holy_Egg_2: (
+ ("Oridecon",3),
+ ("Elunium",10),
+ ("White_Slim_Potion",30),
+ ("Blue_Potion",30),
+ ("Yggdrasilberry",3),
+ ("Seed_Of_Yggdrasil",2),
+ ("Leaf_Of_Yggdrasil",15),
+ ("Old_Card_Album",5),
+ "Drooping_Bunny"
+)
+/* currently unsupported or unknown ('Candy_Holder')
+Candy_Holder: (
+ ("Honey",9),
+ ("Candy",20),
+ ("Well_Baked_Cookie",15),
+ ("Piece_Of_Cake",10),
+ ("Bread",20),
+ "Old_Blue_Box",
+ "Yggdrasilberry",
+ "Old_Card_Album",
+ "Old_Violet_Box",
+ "Contracts_In_Shadow",
+ ("Niflheim_Ticket",10),
+ ("Pumpkin_Cake",5),
+ ("Pumpkin_Pie",5)
+)
+*/
+Lotto_Box01: (
+ "Lotto02",
+ "Lotto03",
+ "Lotto04",
+ "Lotto05",
+ "Lotto06",
+ "Lotto07",
+ "Lotto08",
+ "Lotto09"
+)
+Lotto_Box02: (
+ "Lotto11",
+ "Lotto12",
+ "Lotto13",
+ "Lotto14",
+ "Lotto15",
+ "Lotto16",
+ "Lotto17",
+ "Lotto18"
+)
+Lotto_Box03: (
+ "Lotto20",
+ "Lotto21",
+ "Lotto22",
+ "Lotto23",
+ "Lotto24",
+ "Lotto25",
+ "Lotto26",
+ "Lotto27"
+)
+Lotto_Box04: (
+ "Lotto29",
+ "Lotto30",
+ "Lotto31",
+ "Lotto32",
+ "Lotto33",
+ "Lotto34",
+ "Lotto35",
+ "Lotto36"
+)
+Lotto_Box05: (
+ "Lotto38",
+ "Lotto39",
+ "Lotto40",
+ "Lotto41",
+ "Lotto42",
+ "Lotto43",
+ "Lotto44",
+ "Lotto45"
+)
+/* currently unsupported or unknown ('Lucky_Bag')
+Lucky_Bag: (
+ ("Fire_Cracker",7),
+ ("Korea_Rice_Cake",6),
+ ("Handsei",2),
+//unknown/unsupported - ("7647",3),
+//unknown/unsupported - "7649"
+)
+*/ \ No newline at end of file
diff --git a/npc/custom/bgqueue/flavius.txt b/npc/custom/bgqueue/flavius.txt
new file mode 100644
index 000000000..ee729783f
--- /dev/null
+++ b/npc/custom/bgqueue/flavius.txt
@@ -0,0 +1,723 @@
+//===== Hercules Script ======================================
+// BattleGround System - Flavius
+//===== By: ==================================================
+//= L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.4
+//===== Description: =========================================
+//= [AEGIS Conversion]
+//= Flavius Battleground.
+//= - Winning Team: 9 badges
+//= - Losing Team: 3 badge
+//===== Additional Comments: =================================
+//= 1.0 First Version.
+//= 1.1 Fixed pink crystal spawning as blue. [L0ne_W0lf]
+//= 1.2 Updated 'waitingroom' to support required zeny/lvl. [Kisuka]
+//= 1.3 Removed MaxLvl check in waitingrooms. Replaced setwall with setcell.
+//= 1.4 Attempt at implementing BG Queue [Ind/Hercules]
+//============================================================
+
+
+//Tacham, while the script is under testings the original will remain, meaning if you wanna test this you need to disable the other, or they'll conflict.
+bat_b01,15,15,3 script start#bat_b01 844,{
+OnInit:
+ mapwarp "bat_b01","bat_room",154,150;
+ end;
+
+//$@bg_queue_id is cleared after this event ends
+OnPlayerListReady:
+ set $@FlaviusBG1_id1, bg_create_team("bat_b01",10,290);
+ set $@FlaviusBG1_id2, bg_create_team("bat_b01",390,10);
+
+ set $@Croix_QueueBG1, queue();
+ set $@Guill_QueueBG1, queue();
+
+ queueopt($@Guill_QueueBG1,HQO_OnLogout,"start#bat_b01::OnGuillaumeQuit");
+ queueopt($@Croix_QueueBG1,HQO_OnLogout,"start#bat_b01::OnCroixQuit");
+
+ set .@it,queueiterator($@bg_queue_id);
+ set .@i, 0;
+
+ for( set .@member, qiget(.@it); qicheck(.@it); set .@member,qiget(.@it) ) {
+ if( .@i % 2 == 0 ) {
+ bg_join_team($@FlaviusBG1_id1,.@member);
+ queueadd($@Guill_QueueBG1,.@member);
+ } else {
+ bg_join_team($@FlaviusBG1_id2,.@member);
+ queueadd($@Croix_QueueBG1,.@member);
+ }
+ set .@i,.@i + 1;
+ }
+ qiclear(.@it);
+
+ set $@FlaviusBG1, 1;
+ set $@FlaviusBG1_Victory, 0;
+ set $@Croix_ScoreBG1, 0;
+ set $@Guill_ScoreBG1, 0;
+
+ bg_updatescore "bat_b01",$@Guill_ScoreBG1,$@Croix_ScoreBG1;
+
+ donpcevent "OBJ#bat_b01_a::Onkill";
+ donpcevent "OBJ#bat_b01_a::OnEnable";
+ donpcevent "OBJ#bat_b01_b::Onkill";
+ donpcevent "OBJ#bat_b01_b::OnEnable";
+ donpcevent "guardian#bat_b01_a::Onkill";
+ donpcevent "guardian#bat_b01_b::Onkill";
+ donpcevent "guardian#bat_b01_a::OnEnable";
+ donpcevent "guardian#bat_b01_b::OnEnable";
+ donpcevent "cell#bat_b01_a::Onred";
+ donpcevent "cell#bat_b01_b::Onred";
+ donpcevent "time#bat_b01::OnEnable";
+ disablenpc "Guillaume Vintenar#b01_a";
+ disablenpc "Croix Vintenar#b01_b";
+ disablenpc "Vintenar#bat_b01_aover";
+ disablenpc "Vintenar#bat_b01_bover";
+ bg_warp $@FlaviusBG1_id1,"bat_b01",87,75;
+ bg_warp $@FlaviusBG1_id2,"bat_b01",311,224;
+ donpcevent "countdown#bat_b01::OnEnable";
+ initnpctimer;
+ end;
+
+OnReset:
+ donpcevent "OBJ#bat_b01_a::Onkill";
+ donpcevent "OBJ#bat_b01_a::OnEnable";
+ donpcevent "OBJ#bat_b01_b::Onkill";
+ donpcevent "OBJ#bat_b01_b::OnEnable";
+ donpcevent "guardian#bat_b01_a::Onkill";
+ donpcevent "guardian#bat_b01_b::Onkill";
+ donpcevent "guardian#bat_b01_a::OnEnable";
+ donpcevent "guardian#bat_b01_b::OnEnable";
+ donpcevent "cell#bat_b01_a::Onred";
+ donpcevent "cell#bat_b01_b::Onred";
+ donpcevent "time#bat_b01::OnEnable";
+ disablenpc "Guillaume Vintenar#b01_a";
+ disablenpc "Croix Vintenar#b01_b";
+ disablenpc "Vintenar#bat_b01_aover";
+ disablenpc "Vintenar#bat_b01_bover";
+ bg_warp $@FlaviusBG1_id1,"bat_b01",87,75;
+ bg_warp $@FlaviusBG1_id2,"bat_b01",311,224;
+ end;
+
+OnGuillaumeQuit:
+OnCroixQuit:
+ bg_leave;
+ end;
+
+OnTimer10000:
+ stopnpctimer;
+ donpcevent "#bat_b01_timer::OnEnable";
+ end;
+
+OnMatchOver:
+ bg_match_over("Flavius");
+ queuedel($@Croix_QueueBG1);
+ queuedel($@Guill_QueueBG1);
+ end;
+}
+
+bat_b01,1,1,3 script OBJ#bat_b01_a 844,{
+OnEnable:
+ bg_monster $@FlaviusBG1_id1,"bat_b01",61,150,"Pink Crystal",1915,"OBJ#bat_b01_a::OnMyMobDead";
+ end;
+
+Onkill:
+ killmonster "bat_b01","OBJ#bat_b01_a::OnMyMobDead";
+ end;
+
+OnMyMobDead:
+ if (mobcount("bat_b01","OBJ#bat_b01_a::OnMyMobDead") < 1) {
+ mapannounce "bat_b01", "Guillaume's Crystal has been destroyed.",bc_map,"0xFFCE00";
+ if ($@Croix_ScoreBG1 > 0) {
+ set $@FlaviusBG1_Victory,2;
+ set $@Croix_ScoreBG1,$@Croix_ScoreBG1+1;
+ enablenpc "Guillaume Vintenar#b01_a";
+ enablenpc "Croix Vintenar#b01_b";
+ donpcevent "time#bat_b01::Onstop";
+ donpcevent "start#bat_b01::OnMatchOver";
+ }
+ else {
+ set $@Croix_ScoreBG1,1;
+ donpcevent "time#bat_b01::OnEnable";
+ donpcevent "start#bat_b01::onReset";
+ }
+ donpcevent "#bat_b01_timer::OnStop";
+ bg_updatescore "bat_b01",$@Guill_ScoreBG1,$@Croix_ScoreBG1;
+ bg_warp $@FlaviusBG1_id1,"bat_b01",10,290;
+ bg_warp $@FlaviusBG1_id2,"bat_b01",390,10;
+ donpcevent "#bat_b01_timer::OnEnable";
+ }
+ end;
+}
+bat_room,2,151,3 script #bat_b01_timer 844,{
+ end;
+
+OnEnable:
+ initnpctimer;
+ end;
+
+OnStop:
+ stopnpctimer;
+ end;
+
+OnTimer1000:
+ stopnpctimer;
+ initnpctimer;
+ set .@chk_bat_a01,getmapusers("bat_b01");
+ if (.@chk_bat_a01 < 1) {
+ set $@FlaviusBG1, 0;
+ if( $@FlaviusBG1_id1 ) { bg_destroy $@FlaviusBG1_id1; set $@FlaviusBG1_id1, 0; }
+ if( $@FlaviusBG1_id2 ) { bg_destroy $@FlaviusBG1_id2; set $@FlaviusBG1_id2, 0; }
+ }
+ end;
+}
+
+bat_b01,1,2,3 script OBJ#bat_b01_b 844,{
+OnEnable:
+ bg_monster $@FlaviusBG1_id2,"bat_b01",328,150,"Blue Crystal",1914,"OBJ#bat_b01_b::OnMyMobDead";
+ end;
+
+Onkill:
+ killmonster "bat_b01","OBJ#bat_b01_b::OnMyMobDead";
+ end;
+
+OnMyMobDead:
+ if (mobcount("bat_b01","OBJ#bat_b01_b::OnMyMobDead") < 1) {
+ mapannounce "bat_b01", "Croix's Crystal has been destroyed.",bc_map,"0xFFCE00";
+ if ($@Guill_ScoreBG1 > 0) {
+ set $@FlaviusBG1_Victory,1;
+ set $@Guill_ScoreBG1,$@Guill_ScoreBG1+1;
+ enablenpc "Guillaume Vintenar#b01_a";
+ enablenpc "Croix Vintenar#b01_b";
+ donpcevent "time#bat_b01::Onstop";
+ donpcevent "start#bat_b01::OnMatchOver";
+ }
+ else {
+ set $@Guill_ScoreBG1,1;
+ donpcevent "time#bat_b01::OnEnable";
+ donpcevent "start#bat_b01::onReset";
+ }
+ donpcevent "#bat_b01_timer::OnStop";
+ bg_updatescore "bat_b01",$@Guill_ScoreBG1,$@Croix_ScoreBG1;
+ bg_warp $@FlaviusBG1_id1,"bat_b01",10,290;
+ bg_warp $@FlaviusBG1_id2,"bat_b01",390,10;
+ donpcevent "#bat_b01_timer::OnEnable";
+ }
+ end;
+}
+
+bat_b01,1,3,3 script guardian#bat_b01_a 844,{
+OnEnable:
+ bg_monster $@FlaviusBG1_id1,"bat_b01",108,159,"Guillaume Camp Guardian",1949,"guardian#bat_b01_a::OnMyMobDead";
+ bg_monster $@FlaviusBG1_id1,"bat_b01",108,141,"Guillaume Camp Guardian",1949,"guardian#bat_b01_a::OnMyMobDead";
+ end;
+
+Onkill:
+ killmonster "bat_b01","guardian#bat_b01_a::OnMyMobDead";
+ end;
+
+OnMyMobDead:
+ if (mobcount("bat_b01","guardian#bat_b01_a::OnMyMobDead") < 1) {
+ donpcevent "cell#bat_b01_a::Ongreen";
+ mapannounce "bat_b01", "The Guardian protecting Guillaume's Crystal has been slain.",bc_map,"0xFFCE00";
+ }
+ end;
+}
+
+bat_b01,1,3,3 script guardian#bat_b01_b 844,{
+OnEnable:
+ bg_monster $@FlaviusBG1_id2,"bat_b01",307,160,"Croix Camp Guardian",1949,"guardian#bat_b01_b::OnMyMobDead";
+ bg_monster $@FlaviusBG1_id2,"bat_b01",307,138,"Croix Camp Guardian",1949,"guardian#bat_b01_b::OnMyMobDead";
+ end;
+
+Onkill:
+ killmonster "bat_b01","guardian#bat_b01_b::OnMyMobDead";
+ end;
+
+OnMyMobDead:
+ if (mobcount("bat_b01","guardian#bat_b01_b::OnMyMobDead") < 1) {
+ donpcevent "cell#bat_b01_b::Ongreen";
+ mapannounce "bat_b01", "The Guardian protecting Croix's Crystal has been slain.",bc_map,"0xFFCE00";
+ }
+ end;
+}
+
+bat_b01,1,4,3 script cell#bat_b01_a 844,{
+Onred:
+ setcell "bat_b01",62,149,60,151,cell_basilica,1;
+ setcell "bat_b01",62,149,60,151,cell_walkable,0;
+ end;
+
+Ongreen:
+ setcell "bat_b01",62,149,60,151,cell_basilica,0;
+ setcell "bat_b01",62,149,60,151,cell_walkable,1;
+ end;
+}
+
+bat_b01,1,5,3 script cell#bat_b01_b 844,{
+Onred:
+ setcell "bat_b01",327,151,329,149,cell_basilica,1;
+ setcell "bat_b01",327,151,329,149,cell_walkable,0;
+ end;
+
+Ongreen:
+ setcell "bat_b01",327,151,329,149,cell_basilica,0;
+ setcell "bat_b01",327,151,329,149,cell_walkable,1;
+ end;
+}
+
+bat_b01,1,6,1 script time#bat_b01 844,{
+OnEnable:
+ donpcevent "Battle Therapist#b01_a::OnEnable";
+ donpcevent "Battle Therapist#b01_b::OnEnable";
+ end;
+
+Onstop:
+ donpcevent "Battle Therapist#b01_a::OnStop";
+ donpcevent "Battle Therapist#b01_b::OnStop";
+ end;
+}
+
+bat_b01,10,294,3 script Battle Therapist#b01_a 95,{
+ specialeffect2 EF_HEAL;
+ mes "[Battle Therapist]";
+ mes "Just close your eyes,";
+ mes "and take a deep breath.";
+ mes "You can be free from pain.";
+ close;
+
+OnTimer25000:
+ specialeffect EF_SANCTUARY;
+ enablenpc "bat_b01_rp1_a_warp";
+ end;
+
+OnTimer26000:
+ disablenpc "bat_b01_rp1_a_warp";
+ end;
+
+OnTimer26500:
+ stopnpctimer;
+ donpcevent "Battle Therapist#b01_a::onEnable";
+ end;
+
+OnEnable:
+ initnpctimer;
+ enablenpc "Battle Therapist#b01_a";
+ end;
+
+Onstop:
+ disablenpc "bat_b01_rp1_a_warp";
+ disablenpc "Battle Therapist#b01_a";
+ stopnpctimer;
+ end;
+}
+
+bat_b01,10,290,0 script bat_b01_rp1_a_warp 45,10,10,{
+OnInit:
+ disablenpc "bat_b01_rp1_a_warp";
+ end;
+
+OnTouch:
+ percentheal 100,100;
+ warp "bat_b01",87,73;
+ end;
+}
+
+bat_b01,389,14,3 script Battle Therapist#b01_b 95,{
+ specialeffect2 EF_HEAL;
+ mes "[Battle Therapist]";
+ mes "Just close your eyes,";
+ mes "and take a deep breath.";
+ mes "You can be free from pain.";
+ close;
+
+OnTimer25000:
+ specialeffect EF_SANCTUARY;
+ enablenpc "bat_b01_rp1_b_warp";
+ end;
+
+OnTimer26000:
+ disablenpc "bat_b01_rp1_b_warp";
+ end;
+
+OnTimer26500:
+ stopnpctimer;
+ donpcevent "Battle Therapist#b01_b::OnEnable";
+ end;
+
+OnEnable:
+ initnpctimer;
+ enablenpc "Battle Therapist#b01_b";
+ end;
+
+Onstop:
+ disablenpc "bat_b01_rp1_b_warp";
+ disablenpc "Battle Therapist#b01_b";
+ stopnpctimer;
+ end;
+}
+
+bat_b01,389,10,0 script bat_b01_rp1_b_warp 45,9,9,{
+OnInit:
+ disablenpc "bat_b01_rp1_a_warp";
+ end;
+
+OnTouch:
+ percentheal 100,100;
+ warp "bat_b01",312,225;
+ end;
+}
+
+bat_b01,87,76,0 script A_CODE#bat_b01 -1,5,5,{
+OnTouch:
+ if (checkquest(2070) < 0)
+ setquest 2070;
+ end;
+}
+
+bat_b01,312,224,0 script B_CODE#bat_b01 -1,5,5,{
+OnTouch:
+ if (checkquest(2070) < 0)
+ setquest 2070;
+ end;
+}
+
+bat_b01,10,294,3 script Guillaume Vintenar#b01_a 934,{
+ if ($@FlaviusBG1_id1 == getcharid(4)) {
+ if ($@FlaviusBG1_Victory == 1) {
+ set .@your_medal,countitem(7829);
+ set .@medal_gap,500 - .@your_medal;
+ if (.@medal_gap > 8) {
+ mes "[Axl Rose]";
+ mes "Blessed Guillaume!";
+ mes "Let's enjoy our glorious victory!";
+ mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+ close2;
+ getitem 7829,9; //BF_Badge2
+ }
+ else {
+ mes "[Axl Rose]";
+ mes "Blessed Guillaume!";
+ mes "Let's enjoy our glorious victory!";
+ mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+ close2;
+ getitem 7829,.@medal_gap; //BF_Badge2
+ }
+ }
+ else {
+ set .@your_medal,countitem(7829);
+ set .@medal_gap,500 - .@your_medal;
+ if (.@medal_gap > 2) {
+ mes "[Axl Rose]";
+ mes "You lost, but you're dedicated to this battle.";
+ mes "This is a reward for your great dedication by Guillaume Marollo!";
+ mes "Just take this defeat as a lesson, next time you will definitely win.";
+ close2;
+ getitem 7829,3; //BF_Badge2
+ }
+ else {
+ mes "[Axl Rose]";
+ mes "You lost, but you're dedicated to this battle.";
+ mes "This is a reward for your great dedication by Guillaume Marollo!";
+ mes "Just take this defeat as a lesson, next time you will definitely win.";
+ close2;
+ getitem 7829,.@medal_gap; //BF_Badge2
+ }
+ }
+ }
+ bg_leave;
+ warp "bat_room",154,150;
+ end;
+
+OnInit:
+ disablenpc "Guillaume Vintenar#b01_a";
+ end;
+}
+
+bat_b01,389,14,3 script Croix Vintenar#b01_b 934,{
+ if ($@FlaviusBG1_id2 == getcharid(4)) {
+ if ($@FlaviusBG1_Victory == 2) {
+ set .@your_medal,countitem(7829);
+ set .@medal_gap,500 - .@your_medal;
+ if (.@medal_gap > 8) {
+ mes "[Swandery]";
+ mes "Blessed Croix!";
+ mes "Let's enjoy our glorious victory!";
+ mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+ close2;
+ getitem 7829,9; //BF_Badge2
+ }
+ else {
+ mes "[Swandery]";
+ mes "Blessed Croix!";
+ mes "Let's enjoy our glorious victory!";
+ mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+ close2;
+ getitem 7829,.@medal_gap; //BF_Badge2
+ }
+ }
+ else {
+ set .@your_medal,countitem(7829);
+ set .@medal_gap,500 - .@your_medal;
+ if (.@medal_gap > 2) {
+ mes "[Swandery]";
+ mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+ mes "Even though we didn't win, we did our best.";
+ mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+ close2;
+ getitem 7829,3; //BF_Badge2
+ }
+ else {
+ mes "[Swandery]";
+ mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+ mes "Even though we didn't win, we did our best.";
+ mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+ close2;
+ getitem 7829,.@medal_gap; //BF_Badge2
+ }
+ }
+ }
+ bg_leave;
+ warp "bat_room",154,150;
+ end;
+
+OnInit:
+ disablenpc "Croix Vintenar#b01_b";
+ end;
+}
+
+bat_b01,1,5,3 script countdown#bat_b01 844,{
+OnInit:
+ stopnpctimer;
+ end;
+
+OnEnable:
+ stopnpctimer;
+ initnpctimer;
+ end;
+
+Onstop:
+ stopnpctimer;
+ end;
+
+OnTimer7000:
+ mapannounce "bat_b01", "Guillaume Vintenar Axl Rose : Let's attack to destroy that Crystal!",bc_map,"0xFF9900";
+ end;
+
+OnTimer8000:
+ mapannounce "bat_b01", "Croix Vintenar Swandery : Even though Guillaume is struggling to win against us, the victory is ours. Let's show them our power.",bc_map,"0xFF99CC";
+ end;
+
+OnTimer1800000:
+ mapannounce "bat_b01", "Marollo VII : Guillaume Marollo, Croix Marollo! And their followers!",bc_map,"0x99CC00";
+ end;
+
+OnTimer1803000:
+ mapannounce "bat_b01", "Marollo VII : Both camps are competitive, so it's hard to judge which team is superior.",bc_map,"0x99CC00";
+ end;
+
+OnTimer1808000:
+ mapannounce "bat_b01", "Marollo VII : This battle of Flavian is such a waste of time. I will decide victory and defeat by your progress.",bc_map,"0x99CC00";
+ end;
+
+OnTimer1822000:
+ mapannounce "bat_b01", "Marollo VII : If you can't accept the results, try again in another valley battle!",bc_map,"0x99CC00";
+ end;
+
+OnTimer1825000:
+ mapannounce "bat_b01", "Axl Rose, Swandery : Yes, sir.",bc_map,"0x99CC00";
+ end;
+
+OnTimer1830000:
+ donpcevent "time#bat_b01::Onstop";
+ bg_warp $@FlaviusBG1_id1,"bat_b01",10,290;
+ bg_warp $@FlaviusBG1_id2,"bat_b01",390,10;
+ enablenpc "Vintenar#bat_b01_aover";
+ enablenpc "Vintenar#bat_b01_bover";
+ end;
+
+OnTimer1900000:
+ mapwarp "bat_b01","bat_room",154,150;
+ donpcevent "countdown#bat_b01::Onstop";
+ donpcevent "start#bat_b01::OnMatchOver";
+ end;
+}
+
+bat_b01,81,83,3 script Guillaume Camp#flag21 973,{ end; }
+bat_b01,94,83,3 script Guillaume Camp#flag22 973,{ end; }
+bat_b01,81,66,3 script Guillaume Camp#flag23 973,{ end; }
+bat_b01,94,66,3 script Guillaume Camp#flag24 973,{ end; }
+bat_b01,139,142,3 script Guillaume Camp#flag25 973,{ end; }
+bat_b01,139,158,3 script Guillaume Camp#flag26 973,{ end; }
+bat_b01,110,161,3 script Guillaume Camp#flag27 973,{ end; }
+bat_b01,110,137,3 script Guillaume Camp#flag28 973,{ end; }
+bat_b01,63,135,3 script Guillaume Camp#flag29 973,{ end; }
+bat_b01,63,165,3 script Guillaume Camp#flag30 973,{ end; }
+bat_b01,10,296,3 script Guillaume Camp#flag31 973,{ end; }
+
+bat_b01,306,233,3 script Croix Camp#flag21 974,{ end; }
+bat_b01,317,233,3 script Croix Camp#flag22 974,{ end; }
+bat_b01,306,216,3 script Croix Camp#flag23 974,{ end; }
+bat_b01,317,216,3 script Croix Camp#flag24 974,{ end; }
+bat_b01,257,158,3 script Croix Camp#flag25 974,{ end; }
+bat_b01,257,141,3 script Croix Camp#flag26 974,{ end; }
+bat_b01,297,164,3 script Croix Camp#flag27 974,{ end; }
+bat_b01,297,136,3 script Croix Camp#flag28 974,{ end; }
+bat_b01,336,161,3 script Croix Camp#flag29 974,{ end; }
+bat_b01,336,139,3 script Croix Camp#flag30 974,{ end; }
+bat_b01,389,16,3 script Croix Camp#flag31 974,{ end; }
+
+bat_b01,10,294,3 script Vintenar#bat_b01_aover 419,{
+ set .@A_B_gap,$@Guill_ScoreBG1 - $@Croix_ScoreBG1;
+ if ($@FlaviusBG1_id1 == getcharid(4)) {
+ if (.@A_B_gap > 0) {
+ set .@your_medal,countitem(7829);
+ set .@medal_gap,500 - .@your_medal;
+ if (.@medal_gap > 8) {
+ mes "[Axl Rose]";
+ mes "Blessed Guillaume!";
+ mes "Let's enjoy our glorious victory!";
+ mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+ close2;
+ getitem 7829,9; //BF_Badge2
+ }
+ else {
+ mes "[Axl Rose]";
+ mes "Blessed Guillaume!";
+ mes "Let's enjoy our glorious victory!";
+ mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+ close2;
+ getitem 7829,.@medal_gap; //BF_Badge2
+ }
+ }
+ else if (.@A_B_gap == 0) {
+ set .@your_medal,countitem(7829);
+ set .@medal_gap,500 - .@your_medal;
+ if (.@medal_gap > 2) {
+ mes "[Axl Rose]";
+ mes "You lost, but you're dedicated to this battle.";
+ mes "This is a reward for your great dedication by Guillaume Marollo!";
+ mes "Just take this defeat as a lesson, next time you will definitely win.";
+ close2;
+ getitem 7829,3; //BF_Badge2
+ }
+ else {
+ mes "[Axl Rose]";
+ mes "You lost, but you're dedicated to this battle.";
+ mes "This is a reward for your great dedication by Guillaume Marollo!";
+ mes "Just take this defeat as a lesson, next time you will definitely win.";
+ close2;
+ getitem 7829,.@medal_gap; //BF_Badge2
+ }
+ }
+ else {
+ set .@your_medal,countitem(7829);
+ set .@medal_gap,500 - .@your_medal;
+ if (.@medal_gap > 2) {
+ mes "[Axl Rose]";
+ mes "You lost, but you're dedicated to this battle.";
+ mes "This is a reward for your great dedication by Guillaume Marollo!";
+ mes "Just take this defeat as a lesson, next time you will definitely win.";
+ close2;
+ getitem 7829,3; //BF_Badge2
+ }
+ else {
+ mes "[Axl Rose]";
+ mes "You lost, but you're dedicated to this battle.";
+ mes "This is a reward for your great dedication by Guillaume Marollo!";
+ mes "Just take this defeat as a lesson, next time you will definitely win.";
+ close2;
+ getitem 7829,.@medal_gap; //BF_Badge2
+ }
+ }
+ }
+ else {
+ mes "[Axl Rose]";
+ mes "Why are you here, Croix mercenary? I am definitely sure of victory against foolish Croix such as you. Ha!";
+ close;
+ }
+ bg_leave;
+ warp "bat_room",154,150;
+ end;
+
+OnInit:
+ disablenpc "Vintenar#bat_b01_aover";
+ end;
+}
+
+bat_b01,389,14,3 script Vintenar#bat_b01_bover 415,{
+ set .@A_B_gap,$@Guill_ScoreBG1 - $@Croix_ScoreBG1;
+ if ($@FlaviusBG1_id2 == getcharid(4)) {
+ if (.@A_B_gap > 0) {
+ set .@your_medal,countitem(7829);
+ set .@medal_gap,500 - .@your_medal;
+ if (.@medal_gap > 2) {
+ mes "[Swandery]";
+ mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+ mes "Even though we didn't win, we did our best.";
+ mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+ close2;
+ getitem 7829,3; //BF_Badge2
+ }
+ else {
+ mes "[Swandery]";
+ mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+ mes "Even though we didn't win, we did our best.";
+ mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+ close2;
+ getitem 7829,.@medal_gap; //BF_Badge2
+ }
+ }
+ else if (.@A_B_gap == 0) {
+ set .@your_medal,countitem(7829);
+ set .@medal_gap,500 - .@your_medal;
+ if (.@medal_gap > 2) {
+ mes "[Swandery]";
+ mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+ mes "Even though we didn't win, we did our best.";
+ mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+ close2;
+ getitem 7829,3; //BF_Badge2
+ }
+ else {
+ mes "[Swandery]";
+ mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+ mes "Even though we didn't win, we did our best.";
+ mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+ close2;
+ getitem 7829,.@medal_gap; //BF_Badge2
+ }
+ }
+ else {
+ set .@your_medal,countitem(7829);
+ set .@medal_gap,500 - .@your_medal;
+ if (.@medal_gap > 8) {
+ mes "[Swandery]";
+ mes "Blessed Croix!";
+ mes "Let's enjoy our glorious victory!";
+ mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+ close2;
+ getitem 7829,9; //BF_Badge2
+ }
+ else {
+ mes "[Swandery]";
+ mes "Blessed Croix!";
+ mes "Let's enjoy our glorious victory!";
+ mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+ close2;
+ getitem 7829,.@medal_gap; //BF_Badge2
+ }
+ }
+ }
+ else {
+ mes "[Swandery]";
+ mes "Why do you come here as a Guillaume? You will be sent to where you should be!";
+ close;
+ }
+ bg_leave;
+ warp "bat_room",154,150;
+ end;
+
+OnInit:
+ disablenpc "Vintenar#bat_b01_bover";
+ end;
+}
diff --git a/src/char/pincode.c b/src/char/pincode.c
index 2603df2d8..d51953448 100644
--- a/src/char/pincode.c
+++ b/src/char/pincode.c
@@ -1,5 +1,6 @@
// Copyright (c) Hercules Dev Team, licensed under GNU GPL.
// See the LICENSE file
+// Portions Copyright (c) Athena Dev Teams
#include "../common/cbasetypes.h"
#include "../common/mmo.h"
diff --git a/src/char/pincode.h b/src/char/pincode.h
index 358f21ff7..a17f70de5 100644
--- a/src/char/pincode.h
+++ b/src/char/pincode.h
@@ -1,5 +1,6 @@
// Copyright (c) Hercules Dev Team, licensed under GNU GPL.
// See the LICENSE file
+// Portions Copyright (c) Athena Dev Teams
#ifndef _PINCODE_H_
#define _PINCODE_H_
diff --git a/src/common/mmo.h b/src/common/mmo.h
index 6e5dae099..17caf917a 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -92,6 +92,9 @@
#define MAX_CART 100
#define MAX_SKILL 1478
#define MAX_SKILL_ID 10015 // [Ind/Hercules] max used skill ID
+//Update this max as necessary. 55 is the value needed for Super Baby currently
+//Raised to 84 since Expanded Super Novice needs it.
+#define MAX_SKILL_TREE 84
#define GLOBAL_REG_NUM 256 // Max permanent character variables per char
#define ACCOUNT_REG_NUM 64 // Max permanent local account variables per account
#define ACCOUNT_REG2_NUM 16 // Max permanent global account variables per account
diff --git a/src/common/socket.h b/src/common/socket.h
index b58cbdccf..82f8b84c3 100644
--- a/src/common/socket.h
+++ b/src/common/socket.h
@@ -50,7 +50,7 @@
} while(0)
/* [Ind/Hercules] */
-#define RFIFO2PTR(fd,len) (void*)(session[fd]->rdata + len)
+#define RFIFO2PTR(fd) (void*)(session[fd]->rdata + session[fd]->rdata_pos)
// buffer I/O macros
#define RBUFP(p,pos) (((uint8*)(p)) + (pos))
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index b778aab6c..f35bf8a12 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -51,6 +51,8 @@
#include <string.h>
#include <math.h>
+struct atcommand_interface atcommand_s;
+
static char* msg_table[MAX_MSG]; // Server messages (0-499 reserved for GM commands, 500-999 reserved for others)
static char atcmd_output[CHAT_SIZE_MAX];
diff --git a/src/map/atcommand.h b/src/map/atcommand.h
index f09b1f2b8..12439ab32 100644
--- a/src/map/atcommand.h
+++ b/src/map/atcommand.h
@@ -86,7 +86,7 @@ struct atcommand_interface {
void (*final_msg) (void);
/* atcommand binding */
struct atcmd_binding_data* (*get_bind_byname) (const char* name);
-} atcommand_s;
+};
struct atcommand_interface *atcommand;
diff --git a/src/map/battle.c b/src/map/battle.c
index d67684e7b..1d14c1828 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -39,6 +39,7 @@
int attr_fix_table[4][ELE_MAX][ELE_MAX];
struct Battle_Config battle_config;
+struct battle_interface battle_s;
static struct eri *delay_damage_ers; //For battle delay damage structures.
int battle_getcurrentskill(struct block_list *bl) { //Returns the current/last skill in use by this bl.
@@ -367,8 +368,8 @@ int battle_attr_fix(struct block_list *src, struct block_list *target, int damag
status_change_end(target, SC_THORNS_TRAP, INVALID_TIMER);
if( tsc->data[SC_FIRE_CLOAK_OPTION])
damage -= damage * tsc->data[SC_FIRE_CLOAK_OPTION]->val2 / 100;
- if( tsc->data[SC_CRYSTALIZE] && target->type != BL_MOB)
- status_change_end(target, SC_CRYSTALIZE, INVALID_TIMER);
+ if( tsc->data[SC_COLD] && target->type != BL_MOB)
+ status_change_end(target, SC_COLD, INVALID_TIMER);
if( tsc->data[SC_EARTH_INSIGNIA]) damage += damage/2;
if( tsc->data[SC_VOLCANIC_ASH]) damage += damage/2; //150%
break;
@@ -379,7 +380,7 @@ int battle_attr_fix(struct block_list *src, struct block_list *target, int damag
if( tsc->data[SC_VENOMIMPRESS]) ratio += tsc->data[SC_VENOMIMPRESS]->val2;
break;
case ELE_WIND:
- if( tsc->data[SC_CRYSTALIZE] && target->type != BL_MOB) damage += damage/2;
+ if( tsc->data[SC_COLD] && target->type != BL_MOB) damage += damage/2;
if( tsc->data[SC_WATER_INSIGNIA]) damage += damage/2;
break;
case ELE_WATER:
@@ -704,17 +705,21 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int
*------------------------------------------*/
int battle_calc_masteryfix(struct block_list *src, struct block_list *target, uint16 skill_id, uint16 skill_lv, int damage, int div, bool left, bool weapon){
int skill, i;
- struct map_session_data *sd;
struct status_change *sc;
+ struct map_session_data *sd;
+ struct status_data *tstatus;
nullpo_ret(src);
nullpo_ret(target);
-
- sd = BL_CAST(BL_PC, src);
+
sc = status_get_sc(src);
+ sd = BL_CAST(BL_PC, src);
+ tstatus = status_get_status_data(target);
if ( !sd )
return damage;
+
+ damage = battle->add_mastery(sd, target, damage, left);
switch( skill_id ){ // specific skill masteries
case MO_INVESTIGATE:
@@ -737,29 +742,48 @@ int battle_calc_masteryfix(struct block_list *src, struct block_list *target, ui
damage += 60;
break;
#endif
- case RA_WUGDASH:
+ case RA_WUGDASH://(Caster Current Weight x 10 / 8)
+ if( sd->weight )
+ damage += sd->weight / 8 ;
case RA_WUGSTRIKE:
case RA_WUGBITE:
damage += 30*pc->checkskill(sd, RA_TOOTHOFWUG);
break;
- }
-
- if ( sc && sc->data[SC_MIRACLE] ) i = 2; //Star anger
- else
- ARR_FIND(0, MAX_PC_FEELHATE, i, status_get_class(target) == sd->hate_mob[i]);
- if ( i < MAX_PC_FEELHATE && (skill=pc->checkskill(sd,sg_info[i].anger_id)) && weapon ){
- int ratio = sd->status.base_level + status_get_dex(src) + status_get_luk(src);
- if ( i == 2 ) ratio += status_get_str(src); //Star Anger
- if (skill < 4 )
- ratio /= (12 - 3 * skill);
- damage += damage * ratio / 100;
+ case HT_FREEZINGTRAP:
+ damage += 40 * pc->checkskill(sd, RA_RESEARCHTRAP);
+ break;
}
- if( sc ){
+ if( sc ){ // sc considered as masteries
if(sc->data[SC_GN_CARTBOOST])
damage += 10 * sc->data[SC_GN_CARTBOOST]->val1;
if(sc->data[SC_CAMOUFLAGE])
damage += 30 * ( 10 - sc->data[SC_CAMOUFLAGE]->val4 );
+#ifdef RENEWAL
+ if(sc->data[SC_NIBELUNGEN] && weapon)
+ damage += sc->data[SC_NIBELUNGEN]->val2;
+ if(sc->data[SC_IMPOSITIO])
+ damage += sc->data[SC_IMPOSITIO]->val2;
+ if(sc->data[SC_DRUMBATTLE]){
+ if(tstatus->size == SZ_SMALL)
+ damage += sc->data[SC_DRUMBATTLE]->val2;
+ else if(tstatus->size == SZ_MEDIUM)
+ damage += 10 * sc->data[SC_DRUMBATTLE]->val1;
+ //else no bonus for large target
+ }
+ if(sc->data[SC_GS_MADNESSCANCEL])
+ damage += 100;
+ if(sc->data[SC_GS_GATLINGFEVER]){
+ if(tstatus->size == SZ_SMALL)
+ damage += 10 * sc->data[SC_GS_GATLINGFEVER]->val1;
+ else if(tstatus->size == SZ_MEDIUM)
+ damage += -5 * sc->data[SC_GS_GATLINGFEVER]->val1;
+ else
+ damage += sc->data[SC_GS_GATLINGFEVER]->val1;
+ }
+ //if(sc->data[SC_SPECIALZONE])
+ // damage += sc->data[SC_SPECIALZONE]->val2 >> 4;
+#endif
}
// general skill masteries
@@ -770,18 +794,35 @@ int battle_calc_masteryfix(struct block_list *src, struct block_list *target, ui
damage += div * sd->spiritball * 3;
if( skill_id != CR_SHIELDBOOMERANG ) // Only Shield boomerang doesn't takes the Star Crumbs bonus.
damage += div * (left ? sd->left_weapon.star : sd->right_weapon.star);
+
+ if(sd->status.party_id && (skill=pc->checkskill(sd,TK_POWER)) > 0){
+ if( (i = party_foreachsamemap(party->sub_count, sd, 0)) > 1 )
+ damage += 2 * skill * i * (damage /*+ unknown value*/) / 100 /*+ unknown value*/;
+ }
#else
if( skill_id != ASC_BREAKER && weapon ) // Adv Katar Mastery is does not applies to ASC_BREAKER, but other masteries DO apply >_>
if( sd->status.weapon == W_KATAR && (skill=pc->checkskill(sd,ASC_KATAR)) > 0 )
damage += damage * (10 + 2 * skill) / 100;
#endif
+ // percentage factor masteries
+ if ( sc && sc->data[SC_MIRACLE] )
+ i = 2; //Star anger
+ else
+ ARR_FIND(0, MAX_PC_FEELHATE, i, status_get_class(target) == sd->hate_mob[i]);
+ if ( i < MAX_PC_FEELHATE && (skill=pc->checkskill(sd,sg_info[i].anger_id)) && weapon ){
+ int ratio = sd->status.base_level + status_get_dex(src) + status_get_luk(src);
+ if ( i == 2 ) ratio += status_get_str(src); //Star Anger
+ if (skill < 4 )
+ ratio /= (12 - 3 * skill);
+ damage += damage * ratio / 100;
+ }
- damage = battle->add_mastery(sd, target, damage, left);
-
- if((skill = pc->checkskill(sd,AB_EUCHARISTICA)) > 0 &&
- (status_get_status_data(target)->race == RC_DEMON || status_get_status_data(target)->def_ele == ELE_DARK) )
- damage += damage * skill / 100;
+ if( sd->status.class_ == JOB_ARCH_BISHOP_T || sd->status.class_ == JOB_ARCH_BISHOP ){
+ if((skill = pc->checkskill(sd,AB_EUCHARISTICA)) > 0 &&
+ (tstatus->race == RC_DEMON || tstatus->def_ele == ELE_DARK) )
+ damage += damage * skill / 100;
+ }
return damage;
}
@@ -817,12 +858,12 @@ int battle_calc_elefix(struct block_list *src, struct block_list *target, uint16
#ifndef RENEWAL
if( sc && sc->data[SC_SUB_WEAPONPROPERTY] )
{ // Descriptions indicate this means adding a percent of a normal attack in another element. [Skotlex]
- damage = battle->calc_base_damage(sstatus, &sstatus->rhw, sc, tstatus->size, BL_CAST(BL_PC, src), (flag?2:0)) * sc->data[SC_SUB_WEAPONPROPERTY]->val2 / 100;
- damage += battle->attr_fix(src, target, damage, sc->data[SC_SUB_WEAPONPROPERTY]->val1, tstatus->def_ele, tstatus->ele_lv);
- if( left ){
- damage = battle->calc_base_damage(sstatus, &sstatus->lhw, sc, tstatus->size, BL_CAST(BL_PC, src), (flag?2:0)) * sc->data[SC_SUB_WEAPONPROPERTY]->val2 / 100;
- damage += battle->attr_fix(src, target, damage, sc->data[SC_SUB_WEAPONPROPERTY]->val1, tstatus->def_ele, tstatus->ele_lv);
- }
+ int temp = battle->calc_base_damage(sstatus, &sstatus->rhw, sc, tstatus->size, BL_CAST(BL_PC, src), (flag?2:0)) * sc->data[SC_SUB_WEAPONPROPERTY]->val2 / 100;
+ damage += battle->attr_fix(src, target, temp, sc->data[SC_SUB_WEAPONPROPERTY]->val1, tstatus->def_ele, tstatus->ele_lv);
+ if( left ){
+ temp = battle->calc_base_damage(sstatus, &sstatus->lhw, sc, tstatus->size, BL_CAST(BL_PC, src), (flag?2:0)) * sc->data[SC_SUB_WEAPONPROPERTY]->val2 / 100;
+ damage += battle->attr_fix(src, target, temp, sc->data[SC_SUB_WEAPONPROPERTY]->val1, tstatus->def_ele, tstatus->ele_lv);
+ }
}
#endif
return damage;
@@ -918,39 +959,14 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
break;
case BF_WEAPON:
t_race2 = status_get_race2(target);
- if( cflag&2 && sd && !(nk&NK_NO_CARDFIX_ATK) )
- {
- short cardfix_ = 1000;
- if(sd->state.arrow_atk)
- {
- cardfix = cardfix * (100 + sd->right_weapon.addrace[tstatus->race] + sd->arrow_addrace[tstatus->race]) / 100;
- if (!(nk&NK_NO_ELEFIX))
- {
- int ele_fix = sd->right_weapon.addele[tstatus->def_ele] + sd->arrow_addele[tstatus->def_ele];
- for (i = 0; ARRAYLENGTH(sd->right_weapon.addele2) > i && sd->right_weapon.addele2[i].rate != 0; i++) {
- if (sd->right_weapon.addele2[i].ele != tstatus->def_ele) continue;
- if(!(sd->right_weapon.addele2[i].flag&wflag&BF_WEAPONMASK &&
- sd->right_weapon.addele2[i].flag&wflag&BF_RANGEMASK &&
- sd->right_weapon.addele2[i].flag&wflag&BF_SKILLMASK))
- continue;
- ele_fix += sd->right_weapon.addele2[i].rate;
- }
- cardfix = cardfix * (100 + ele_fix) / 100;
- }
- cardfix = cardfix * (100 + sd->right_weapon.addsize[tstatus->size]+sd->arrow_addsize[tstatus->size]) / 100;
- cardfix = cardfix * (100 + sd->right_weapon.addrace2[t_race2]) / 100;
- cardfix = cardfix * (100 + sd->right_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS] + sd->arrow_addrace[is_boss(target)?RC_BOSS:RC_NONBOSS]) / 100;
- if( tstatus->race != RC_DEMIHUMAN )
- cardfix = cardfix * (100 + sd->right_weapon.addrace[RC_NONDEMIHUMAN]+sd->arrow_addrace[RC_NONDEMIHUMAN]) / 100;
- }
- else
- { // Melee attack
- if( !battle_config.left_cardfix_to_right )
- {
- cardfix=cardfix*(100+sd->right_weapon.addrace[tstatus->race])/100;
- if (!(nk&NK_NO_ELEFIX)) {
- int ele_fix = sd->right_weapon.addele[tstatus->def_ele];
- for (i = 0; ARRAYLENGTH(sd->right_weapon.addele2) > i && sd->right_weapon.addele2[i].rate != 0; i++) {
+ if( cflag&2 ){
+ if( sd && !(nk&NK_NO_CARDFIX_ATK) ){
+ short cardfix_ = 1000;
+ if( sd->state.arrow_atk ){
+ cardfix = cardfix * (100 + sd->right_weapon.addrace[tstatus->race] + sd->arrow_addrace[tstatus->race]) / 100;
+ if( !(nk&NK_NO_ELEFIX) ){
+ int ele_fix = sd->right_weapon.addele[tstatus->def_ele] + sd->arrow_addele[tstatus->def_ele];
+ for(i = 0; ARRAYLENGTH(sd->right_weapon.addele2) > i && sd->right_weapon.addele2[i].rate != 0; i++){
if (sd->right_weapon.addele2[i].ele != tstatus->def_ele) continue;
if(!(sd->right_weapon.addele2[i].flag&wflag&BF_WEAPONMASK &&
sd->right_weapon.addele2[i].flag&wflag&BF_RANGEMASK &&
@@ -958,154 +974,161 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
continue;
ele_fix += sd->right_weapon.addele2[i].rate;
}
- cardfix = cardfix * (100+ele_fix) / 100;
+ cardfix = cardfix * (100 + ele_fix) / 100;
}
- cardfix = cardfix * (100+sd->right_weapon.addsize[tstatus->size]) / 100;
- cardfix = cardfix * (100+sd->right_weapon.addrace2[t_race2]) / 100;
- cardfix = cardfix * (100+sd->right_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS]) / 100;
+ cardfix = cardfix * (100 + sd->right_weapon.addsize[tstatus->size]+sd->arrow_addsize[tstatus->size]) / 100;
+ cardfix = cardfix * (100 + sd->right_weapon.addrace2[t_race2]) / 100;
+ cardfix = cardfix * (100 + sd->right_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS] + sd->arrow_addrace[is_boss(target)?RC_BOSS:RC_NONBOSS]) / 100;
if( tstatus->race != RC_DEMIHUMAN )
- cardfix = cardfix * (100 + sd->right_weapon.addrace[RC_NONDEMIHUMAN]) / 100;
-
- if( cflag&1 )
- {
- cardfix_=cardfix_*(100+sd->left_weapon.addrace[tstatus->race])/100;
- if (!(nk&NK_NO_ELEFIX)) {
- int ele_fix_lh = sd->left_weapon.addele[tstatus->def_ele];
- for (i = 0; ARRAYLENGTH(sd->left_weapon.addele2) > i && sd->left_weapon.addele2[i].rate != 0; i++) {
- if (sd->left_weapon.addele2[i].ele != tstatus->def_ele) continue;
- if(!(sd->left_weapon.addele2[i].flag&wflag&BF_WEAPONMASK &&
- sd->left_weapon.addele2[i].flag&wflag&BF_RANGEMASK &&
- sd->left_weapon.addele2[i].flag&wflag&BF_SKILLMASK))
+ cardfix = cardfix * (100 + sd->right_weapon.addrace[RC_NONDEMIHUMAN]+sd->arrow_addrace[RC_NONDEMIHUMAN]) / 100;
+ }else{ // Melee attack
+ if( !battle_config.left_cardfix_to_right ){
+ cardfix=cardfix*(100+sd->right_weapon.addrace[tstatus->race])/100;
+ if( !(nk&NK_NO_ELEFIX) ){
+ int ele_fix = sd->right_weapon.addele[tstatus->def_ele];
+ for (i = 0; ARRAYLENGTH(sd->right_weapon.addele2) > i && sd->right_weapon.addele2[i].rate != 0; i++) {
+ if (sd->right_weapon.addele2[i].ele != tstatus->def_ele) continue;
+ if(!(sd->right_weapon.addele2[i].flag&wflag&BF_WEAPONMASK &&
+ sd->right_weapon.addele2[i].flag&wflag&BF_RANGEMASK &&
+ sd->right_weapon.addele2[i].flag&wflag&BF_SKILLMASK))
continue;
- ele_fix_lh += sd->left_weapon.addele2[i].rate;
+ ele_fix += sd->right_weapon.addele2[i].rate;
}
- cardfix = cardfix * (100+ele_fix_lh) / 100;
+ cardfix = cardfix * (100+ele_fix) / 100;
}
- cardfix_ = cardfix_ * (100+sd->left_weapon.addsize[tstatus->size]) / 100;
- cardfix_ = cardfix_ * (100+sd->left_weapon.addrace2[t_race2]) / 100;
- cardfix_ = cardfix_ * (100+sd->left_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS]) / 100;
+ cardfix = cardfix * (100+sd->right_weapon.addsize[tstatus->size]) / 100;
+ cardfix = cardfix * (100+sd->right_weapon.addrace2[t_race2]) / 100;
+ cardfix = cardfix * (100+sd->right_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS]) / 100;
if( tstatus->race != RC_DEMIHUMAN )
- cardfix_=cardfix_*(100+sd->left_weapon.addrace[RC_NONDEMIHUMAN])/100;
- }
- }
- else
- {
- int ele_fix = sd->right_weapon.addele[tstatus->def_ele] + sd->left_weapon.addele[tstatus->def_ele];
- for (i = 0; ARRAYLENGTH(sd->right_weapon.addele2) > i && sd->right_weapon.addele2[i].rate != 0; i++) {
- if (sd->right_weapon.addele2[i].ele != tstatus->def_ele) continue;
- if(!(sd->right_weapon.addele2[i].flag&wflag&BF_WEAPONMASK &&
- sd->right_weapon.addele2[i].flag&wflag&BF_RANGEMASK &&
- sd->right_weapon.addele2[i].flag&wflag&BF_SKILLMASK))
- continue;
- ele_fix += sd->right_weapon.addele2[i].rate;
- }
- for (i = 0; ARRAYLENGTH(sd->left_weapon.addele2) > i && sd->left_weapon.addele2[i].rate != 0; i++) {
- if (sd->left_weapon.addele2[i].ele != tstatus->def_ele) continue;
- if(!(sd->left_weapon.addele2[i].flag&wflag&BF_WEAPONMASK &&
- sd->left_weapon.addele2[i].flag&wflag&BF_RANGEMASK &&
- sd->left_weapon.addele2[i].flag&wflag&BF_SKILLMASK))
- continue;
- ele_fix += sd->left_weapon.addele2[i].rate;
- }
-
- cardfix = cardfix * (100 + sd->right_weapon.addrace[tstatus->race] + sd->left_weapon.addrace[tstatus->race]) / 100;
- cardfix = cardfix * (100 + ele_fix) / 100;
- cardfix = cardfix * (100 + sd->right_weapon.addsize[tstatus->size] + sd->left_weapon.addsize[tstatus->size])/100;
- cardfix = cardfix * (100 + sd->right_weapon.addrace2[t_race2] + sd->left_weapon.addrace2[t_race2])/100;
- cardfix = cardfix * (100 + sd->right_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS] + sd->left_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS]) / 100;
- if( tstatus->race != RC_DEMIHUMAN )
- cardfix = cardfix * (100+sd->right_weapon.addrace[RC_NONDEMIHUMAN] + sd->left_weapon.addrace[RC_NONDEMIHUMAN]) / 100;
- }
- }
+ cardfix = cardfix * (100 + sd->right_weapon.addrace[RC_NONDEMIHUMAN]) / 100;
+
+ if( cflag&1 ){
+ cardfix_ = cardfix_*(100+sd->left_weapon.addrace[tstatus->race])/100;
+ if (!(nk&NK_NO_ELEFIX)){
+ int ele_fix_lh = sd->left_weapon.addele[tstatus->def_ele];
+ for (i = 0; ARRAYLENGTH(sd->left_weapon.addele2) > i && sd->left_weapon.addele2[i].rate != 0; i++) {
+ if (sd->left_weapon.addele2[i].ele != tstatus->def_ele) continue;
+ if(!(sd->left_weapon.addele2[i].flag&wflag&BF_WEAPONMASK &&
+ sd->left_weapon.addele2[i].flag&wflag&BF_RANGEMASK &&
+ sd->left_weapon.addele2[i].flag&wflag&BF_SKILLMASK))
+ continue;
+ ele_fix_lh += sd->left_weapon.addele2[i].rate;
+ }
+ cardfix = cardfix * (100+ele_fix_lh) / 100;
+ }
+ cardfix_ = cardfix_ * (100+sd->left_weapon.addsize[tstatus->size]) / 100;
+ cardfix_ = cardfix_ * (100+sd->left_weapon.addrace2[t_race2]) / 100;
+ cardfix_ = cardfix_ * (100+sd->left_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS]) / 100;
+ if( tstatus->race != RC_DEMIHUMAN )
+ cardfix_ = cardfix_*(100+sd->left_weapon.addrace[RC_NONDEMIHUMAN])/100;
+ }
+ }else{
+ int ele_fix = sd->right_weapon.addele[tstatus->def_ele] + sd->left_weapon.addele[tstatus->def_ele];
+ for (i = 0; ARRAYLENGTH(sd->right_weapon.addele2) > i && sd->right_weapon.addele2[i].rate != 0; i++){
+ if (sd->right_weapon.addele2[i].ele != tstatus->def_ele) continue;
+ if(!(sd->right_weapon.addele2[i].flag&wflag&BF_WEAPONMASK &&
+ sd->right_weapon.addele2[i].flag&wflag&BF_RANGEMASK &&
+ sd->right_weapon.addele2[i].flag&wflag&BF_SKILLMASK))
+ continue;
+ ele_fix += sd->right_weapon.addele2[i].rate;
+ }
+ for (i = 0; ARRAYLENGTH(sd->left_weapon.addele2) > i && sd->left_weapon.addele2[i].rate != 0; i++){
+ if (sd->left_weapon.addele2[i].ele != tstatus->def_ele) continue;
+ if(!(sd->left_weapon.addele2[i].flag&wflag&BF_WEAPONMASK &&
+ sd->left_weapon.addele2[i].flag&wflag&BF_RANGEMASK &&
+ sd->left_weapon.addele2[i].flag&wflag&BF_SKILLMASK))
+ continue;
+ ele_fix += sd->left_weapon.addele2[i].rate;
+ }
- for( i = 0; i < ARRAYLENGTH(sd->right_weapon.add_dmg) && sd->right_weapon.add_dmg[i].rate; i++ )
- {
- if( sd->right_weapon.add_dmg[i].class_ == t_class )
- {
- cardfix = cardfix * (100 + sd->right_weapon.add_dmg[i].rate) / 100;
- break;
+ cardfix = cardfix * (100 + sd->right_weapon.addrace[tstatus->race] + sd->left_weapon.addrace[tstatus->race]) / 100;
+ cardfix = cardfix * (100 + ele_fix) / 100;
+ cardfix = cardfix * (100 + sd->right_weapon.addsize[tstatus->size] + sd->left_weapon.addsize[tstatus->size])/100;
+ cardfix = cardfix * (100 + sd->right_weapon.addrace2[t_race2] + sd->left_weapon.addrace2[t_race2])/100;
+ cardfix = cardfix * (100 + sd->right_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS] + sd->left_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS]) / 100;
+ if( tstatus->race != RC_DEMIHUMAN )
+ cardfix = cardfix * (100+sd->right_weapon.addrace[RC_NONDEMIHUMAN] + sd->left_weapon.addrace[RC_NONDEMIHUMAN]) / 100;
+ }
}
- }
- if( cflag&1 )
- {
- for( i = 0; i < ARRAYLENGTH(sd->left_weapon.add_dmg) && sd->left_weapon.add_dmg[i].rate; i++ )
- {
- if( sd->left_weapon.add_dmg[i].class_ == t_class )
- {
- cardfix_ = cardfix_ * (100 + sd->left_weapon.add_dmg[i].rate) / 100;
+ for( i = 0; i < ARRAYLENGTH(sd->right_weapon.add_dmg) && sd->right_weapon.add_dmg[i].rate; i++ ){
+ if( sd->right_weapon.add_dmg[i].class_ == t_class ){
+ cardfix = cardfix * (100 + sd->right_weapon.add_dmg[i].rate) / 100;
break;
}
}
- }
- if( wflag&BF_LONG )
- cardfix = cardfix * (100 + sd->bonus.long_attack_atk_rate) / 100;
+ if( cflag&1 ){
+ for( i = 0; i < ARRAYLENGTH(sd->left_weapon.add_dmg) && sd->left_weapon.add_dmg[i].rate; i++ ){
+ if( sd->left_weapon.add_dmg[i].class_ == t_class ){
+ cardfix_ = cardfix_ * (100 + sd->left_weapon.add_dmg[i].rate) / 100;
+ break;
+ }
+ }
+ }
- if( (cflag&1) && cardfix_ != 1000 )
- damage = damage * cardfix_ / 1000;
- else if( cardfix != 1000 )
- damage = damage * cardfix / 1000;
+ if( wflag&BF_LONG )
+ cardfix = cardfix * (100 + sd->bonus.long_attack_atk_rate) / 100;
- break; // end Attacker side
- }
- // Target side
- if( tsd && !(nk&NK_NO_CARDFIX_DEF) )
- {
- if( !(nk&NK_NO_ELEFIX) )
- {
- int ele_fix = tsd->subele[s_ele];
- for (i = 0; ARRAYLENGTH(tsd->subele2) > i && tsd->subele2[i].rate != 0; i++)
- {
- if(tsd->subele2[i].ele != s_ele) continue;
- if(!(tsd->subele2[i].flag&wflag&BF_WEAPONMASK &&
- tsd->subele2[i].flag&wflag&BF_RANGEMASK &&
- tsd->subele2[i].flag&wflag&BF_SKILLMASK))
- continue;
- ele_fix += tsd->subele2[i].rate;
- }
- cardfix=cardfix*(100-ele_fix)/100;
- if( cflag&1 && s_ele_ != s_ele )
- {
- int ele_fix_lh = tsd->subele[s_ele_];
+ if( (cflag&1) && cardfix_ != 1000 )
+ damage = damage * cardfix_ / 1000;
+ else if( cardfix != 1000 )
+ damage = damage * cardfix / 1000;
+ }
+ }else{
+ // Target side
+ if( tsd && !(nk&NK_NO_CARDFIX_DEF) ){
+ if( !(nk&NK_NO_ELEFIX) ){
+ int ele_fix = tsd->subele[s_ele];
for (i = 0; ARRAYLENGTH(tsd->subele2) > i && tsd->subele2[i].rate != 0; i++)
{
- if(tsd->subele2[i].ele != s_ele_) continue;
+ if(tsd->subele2[i].ele != s_ele) continue;
if(!(tsd->subele2[i].flag&wflag&BF_WEAPONMASK &&
tsd->subele2[i].flag&wflag&BF_RANGEMASK &&
tsd->subele2[i].flag&wflag&BF_SKILLMASK))
continue;
- ele_fix_lh += tsd->subele2[i].rate;
+ ele_fix += tsd->subele2[i].rate;
+ }
+ cardfix = cardfix * (100-ele_fix) / 100;
+ if( cflag&1 && s_ele_ != s_ele ){
+ int ele_fix_lh = tsd->subele[s_ele_];
+ for (i = 0; ARRAYLENGTH(tsd->subele2) > i && tsd->subele2[i].rate != 0; i++){
+ if(tsd->subele2[i].ele != s_ele_) continue;
+ if(!(tsd->subele2[i].flag&wflag&BF_WEAPONMASK &&
+ tsd->subele2[i].flag&wflag&BF_RANGEMASK &&
+ tsd->subele2[i].flag&wflag&BF_SKILLMASK))
+ continue;
+ ele_fix_lh += tsd->subele2[i].rate;
+ }
+ cardfix = cardfix * (100 - ele_fix_lh) / 100;
}
- cardfix = cardfix * (100 - ele_fix_lh) / 100;
}
- }
- cardfix = cardfix * (100-tsd->subsize[sstatus->size]) / 100;
- cardfix = cardfix * (100-tsd->subrace2[s_race2]) / 100;
- cardfix = cardfix * (100-tsd->subrace[sstatus->race]) / 100;
- cardfix = cardfix * (100-tsd->subrace[is_boss(src)?RC_BOSS:RC_NONBOSS]) / 100;
- if( sstatus->race != RC_DEMIHUMAN )
- cardfix = cardfix * (100-tsd->subrace[RC_NONDEMIHUMAN]) / 100;
-
- for( i = 0; i < ARRAYLENGTH(tsd->add_def) && tsd->add_def[i].rate;i++ )
- {
- if( tsd->add_def[i].class_ == s_class )
- {
- cardfix = cardfix * (100 - tsd->add_def[i].rate) / 100;
- break;
+ cardfix = cardfix * (100-tsd->subsize[sstatus->size]) / 100;
+ cardfix = cardfix * (100-tsd->subrace2[s_race2]) / 100;
+ cardfix = cardfix * (100-tsd->subrace[sstatus->race]) / 100;
+ cardfix = cardfix * (100-tsd->subrace[is_boss(src)?RC_BOSS:RC_NONBOSS]) / 100;
+ if( sstatus->race != RC_DEMIHUMAN )
+ cardfix = cardfix * (100-tsd->subrace[RC_NONDEMIHUMAN]) / 100;
+
+ for( i = 0; i < ARRAYLENGTH(tsd->add_def) && tsd->add_def[i].rate;i++ ){
+ if( tsd->add_def[i].class_ == s_class )
+ {
+ cardfix = cardfix * (100 - tsd->add_def[i].rate) / 100;
+ break;
+ }
}
- }
- if( wflag&BF_SHORT )
- cardfix = cardfix * (100 - tsd->bonus.near_attack_def_rate) / 100;
- else // BF_LONG (there's no other choice)
- cardfix = cardfix * (100 - tsd->bonus.near_attack_def_rate) / 100;
+ if( wflag&BF_SHORT )
+ cardfix = cardfix * (100 - tsd->bonus.near_attack_def_rate) / 100;
+ else // BF_LONG (there's no other choice)
+ cardfix = cardfix * (100 - tsd->bonus.near_attack_def_rate) / 100;
- if( tsd->sc.data[SC_PROTECT_DEF] )
- cardfix = cardfix * (100 - tsd->sc.data[SC_PROTECT_DEF]->val1) / 100;
+ if( tsd->sc.data[SC_PROTECT_DEF] )
+ cardfix = cardfix * (100 - tsd->sc.data[SC_PROTECT_DEF]->val1) / 100;
- if( cardfix != 1000 )
- damage = damage * cardfix / 1000;
+ if( cardfix != 1000 )
+ damage = damage * cardfix / 1000;
+ }
}
break;
case BF_MISC:
@@ -1489,7 +1512,7 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block
skillratio += 300 + 100 * skill_lv + status_get_int(src);
RE_LVL_DMOD(100);
break;
- case WL_FROSTMISTY: // MATK [{( Skill Level x 100 ) + 200 } x ( Caster�s Base Level / 100 )] %
+ case WL_FROSTMISTY: // MATK [{( Skill Level x 100 ) + 200 } x ( Caster?s Base Level / 100 )] %
skillratio += 100 + 100 * skill_lv;
RE_LVL_DMOD(100);
break;
@@ -2712,7 +2735,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
damage += damage / 2; // 1.5 times more damage while in Deep Sleep.
status_change_end(bl,SC_DEEP_SLEEP,INVALID_TIMER);
}
- if( tsd && sd && sc->data[SC_CRYSTALIZE] && flag&BF_WEAPON ){
+ if( tsd && sd && sc->data[SC_COLD] && flag&BF_WEAPON ){
switch(tsd->status.weapon){
case W_MACE:
case W_2HMACE:
@@ -3358,7 +3381,8 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
//Constant/misc additions from skills
if (skill_id == WZ_FIREPILLAR)
MATK_ADD(50);
- if( sd && (i=pc->checkskill(sd,AB_EUCHARISTICA)) > 0 &&
+ if( sd && ( sd->status.class_ == JOB_ARCH_BISHOP_T || sd->status.class_ == JOB_ARCH_BISHOP ) &&
+ (i=pc->checkskill(sd,AB_EUCHARISTICA)) > 0 &&
(tstatus->race == RC_DEMON || tstatus->def_ele == ELE_DARK) )
MATK_ADDRATE(i);
}
@@ -4377,20 +4401,21 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
ATK_ADD(-totaldef);
if( is_boss(target) )
ATK_RATE(50);
- flag.idef = 1;
}
break;
case NJ_SYURIKEN: // [malufett]
GET_NORMAL_ATTACK( (sc && sc->data[SC_MAXIMIZEPOWER]?1:0)|(sc && sc->data[SC_WEAPONPERFECT]?8:0) );
wd.damage += battle->calc_masteryfix(src, target, skill_id, skill_lv, 4 * skill_lv + (sd ? sd->bonus.arrow_atk : 0), wd.div_, 0, flag.weapon) - status_get_total_def(target);
- flag.idef = 1;
break;
case MO_EXTREMITYFIST: // [malufett]
- GET_NORMAL_ATTACK( (sc && sc->data[SC_MAXIMIZEPOWER]?1:0)|8 );
- // first value is still not confirm.
- if( wd.damage )
- wd.damage = status_get_sp(src) + 10 * status_get_sp(src) * wd.damage / 100 + 8 * wd.damage + 250 + 150 * skill_lv;
- flag.tdef = 1;
+ {
+ short totaldef = status_get_total_def(target);
+ GET_NORMAL_ATTACK( (sc && sc->data[SC_MAXIMIZEPOWER]?1:0)|8 );
+ if( wd.damage ){
+ wd.damage = (250 + 150 * skill_lv) + (10 * (status_get_sp(src)+1) * wd.damage / 100) + (8 * wd.damage);
+ ATK_ADD(-totaldef);
+ }
+ }
#endif
break;
#ifndef RENEWAL
@@ -4490,6 +4515,7 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
if (sd->bonus.atk_rate)
ATK_ADDRATE(sd->bonus.atk_rate);
+#ifndef RENEWAL
if(flag.cri && sd->bonus.crit_atk_rate)
ATK_ADDRATE(sd->bonus.crit_atk_rate);
@@ -4497,6 +4523,7 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
if( (i = party_foreachsamemap(party->sub_count, sd, 0)) > 1 ) // exclude the player himself [Inkfish]
ATK_ADDRATE(2*temp*i);
}
+#endif
}
break;
} //End default case
@@ -4595,14 +4622,6 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
ATK_ADD(4*skill_lv);
#endif
break;
- case HT_FREEZINGTRAP:
- if(sd)
- ATK_ADD( 40 * pc->checkskill(sd, RA_RESEARCHTRAP) );
- break;
- case RA_WUGDASH ://(Caster Current Weight x 10 / 8)
- if( sd && sd->weight )
- ATK_ADD( sd->weight / 8 );
- break;
case GC_COUNTERSLASH:
ATK_ADD( status_get_agi(src) * 2 + (sd?sd->status.job_level:0) * 4 );
break;
@@ -4797,8 +4816,8 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
if( flag.lh)
wd.damage2 = battle->calc_masteryfix(src, target, skill_id, skill_lv, wd.damage2, wd.div_, 1, flag.weapon);
#else
- if( flag.cri )
- ATK_ADDRATE(40);
+ if( sd && flag.cri )
+ ATK_ADDRATE(sd->bonus.crit_atk_rate >= 100 ? sd->bonus.crit_atk_rate : 40);
#endif
} //Here ends flag.hit section, the rest of the function applies to both hitting and missing attacks
else if(wd.div_ < 0) //Since the attack missed...
@@ -4848,13 +4867,11 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
ATK_ADD(wd.div_*sd->spiritball*3);
}
//Card Fix, sd side
+
wd.damage = battle->calc_cardfix(BF_WEAPON, src, target, nk, s_ele, s_ele_, wd.damage, 2, wd.flag);
if( flag.lh )
wd.damage2 = battle->calc_cardfix(BF_WEAPON, src, target, nk, s_ele, s_ele_, wd.damage2, 3, wd.flag);
-#ifdef RENEWAL
- if( flag.cri )
- ATK_ADDRATE(sd->bonus.crit_atk_rate>=100?sd->bonus.crit_atk_rate-60:40);
-#endif
+
if( skill_id == CR_SHIELDBOOMERANG || skill_id == PA_SHIELDCHAIN )
{ //Refine bonus applies after cards and elements.
short index= sd->equip_index[EQI_HAND_L];
diff --git a/src/map/battle.h b/src/map/battle.h
index 37968f53a..9a8c18fd7 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -556,7 +556,7 @@ struct battle_interface {
struct block_list* (*get_enemy_area) (struct block_list *src, int x, int y, int range, int type, int ignore_id);
/* damages area, originally for royal guard's reflect damage */
int (*damage_area) ( struct block_list *bl, va_list ap);
-} battle_s;
+};
struct battle_interface *battle;
diff --git a/src/map/battleground.c b/src/map/battleground.c
index 88cc323bf..4bf0843d5 100644
--- a/src/map/battleground.c
+++ b/src/map/battleground.c
@@ -21,12 +21,14 @@
#include "pet.h"
#include "homunculus.h"
#include "mercenary.h"
+#include "mapreg.h"
#include <string.h>
#include <stdio.h>
static DBMap* bg_team_db; // int bg_id -> struct battleground_data*
static unsigned int bg_team_counter = 0; // Next bg_id
+struct battleground_interface bg_s;
struct battleground_data* bg_team_search(int bg_id) { // Search a BG Team using bg_id
if( !bg_id ) return NULL;
@@ -254,7 +256,7 @@ void bg_config_read(void) {
config_setting_t *settings = config_setting_get_elem(data, 0);
config_setting_t *arenas;
const char *delay_var;
- int i, arena_count = 0, total = 0, offline = 0;
+ int i, arena_count = 0, offline = 0;
if( !config_setting_lookup_string(settings, "global_delay_var", &delay_var) )
delay_var = "BG_Delay_Tick";
@@ -264,7 +266,7 @@ void bg_config_read(void) {
config_setting_lookup_int(settings, "maximum_afk_seconds", &bg->mafksec);
config_setting_lookup_bool(settings, "feature_off", &offline);
-
+
if( offline == 0 )
bg->queue_on = true;
@@ -279,7 +281,7 @@ void bg_config_read(void) {
int prizeWin, prizeLoss, prizeDraw;
int minPlayers, maxPlayers, minTeamPlayers;
int maxDuration;
- int fillup_duration, pregame_duration;
+ int fillup_duration = 0, pregame_duration = 0;
bg->arena[i] = NULL;
@@ -305,7 +307,7 @@ void bg_config_read(void) {
maxLevel = MAX_LEVEL;
}
- if( !(reward = config_setting_get_member(settings, "reward")) ) {
+ if( !(reward = config_setting_get_member(arena, "reward")) ) {
ShowError("bg_config_read: failed to find 'reward' for arena '%s'/#%d\n",aName,i);
continue;
}
@@ -385,18 +387,16 @@ void bg_config_read(void) {
bg->arena[i]->min_team_players = minTeamPlayers;
safestrncpy(bg->arena[i]->delay_var, aDelayVar, NAME_LENGTH);
bg->arena[i]->maxDuration = maxDuration;
- bg->arena[i]->queue_id = -1;
+ bg->arena[i]->queue_id = script->queue_create();
bg->arena[i]->begin_timer = INVALID_TIMER;
bg->arena[i]->fillup_timer = INVALID_TIMER;
bg->arena[i]->pregame_duration = pregame_duration;
bg->arena[i]->fillup_duration = fillup_duration;
-
- total++;
+
}
bg->arenas = arena_count;
}
- ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' arenas in '"CL_WHITE"%s"CL_RESET"'.\n", total, config_filename);
config_destroy(&bg_conf);
}
}
@@ -425,17 +425,35 @@ void bg_queue_ready_ack (struct bg_arena *arena, struct map_session_data *sd, bo
bg->queue_pc_cleanup(sd);
return;
}
- if( response ) {
+ if( !response )
+ bg->queue_pc_cleanup(sd);
+ else {
+ struct hQueue *queue = &script->hq[arena->queue_id];
+ int i, count = 0;
sd->bg_queue.ready = 1;
+
+ for( i = 0; i < queue->items; i++ ) {
+ if( ( sd = iMap->id2sd(queue->item[i]) ) ) {
+ if( sd->bg_queue.ready == 1 )
+ count++;
+ }
+ }
/* check if all are ready then cancell timer, and start game */
- } else
- bg->queue_pc_cleanup(sd);
+ if( count == i ) {
+ iTimer->delete_timer(arena->begin_timer,bg->begin_timer);
+ arena->begin_timer = INVALID_TIMER;
+ bg->begin(arena);
+ }
+
+ }
+
}
void bg_queue_player_cleanup(struct map_session_data *sd) {
if ( sd->bg_queue.client_has_bg_data ) {
clif->bgqueue_notice_delete(sd,BGQND_CLOSEWINDOW, sd->bg_queue.arena ? sd->bg_queue.arena->id : 0);
}
- script->queue_remove(sd->bg_queue.arena->queue_id,sd->status.account_id);
+ if( sd->bg_queue.arena )
+ script->queue_remove(sd->bg_queue.arena->queue_id,sd->status.account_id);
sd->bg_queue.arena = NULL;
sd->bg_queue.ready = 0;
sd->bg_queue.client_has_bg_data = 0;
@@ -443,27 +461,27 @@ void bg_queue_player_cleanup(struct map_session_data *sd) {
}
void bg_match_over(struct bg_arena *arena, bool canceled) {
struct hQueue *queue = &script->hq[arena->queue_id];
- int i;//, count = 0;
-
- /* if( !canceled ) <check time/score> */
+ int i;
for( i = 0; i < queue->items; i++ ) {
struct map_session_data * sd = NULL;
if( ( sd = iMap->id2sd(queue->item[i]) ) ) {
bg->queue_pc_cleanup(sd);
- clif->colormes(sd->fd,COLOR_RED,"BG Match Cancelled: not enough players");
+ if( canceled )
+ clif->colormes(sd->fd,COLOR_RED,"BG Match Cancelled: not enough players");
}
}
bg->arena[i]->begin_timer = INVALID_TIMER;
bg->arena[i]->fillup_timer = INVALID_TIMER;
/* reset queue */
+ script->queue_clear(arena->queue_id);
}
void bg_begin(struct bg_arena *arena) {
struct hQueue *queue = &script->hq[arena->queue_id];
int i, count = 0;
-
+
for( i = 0; i < queue->items; i++ ) {
struct map_session_data * sd = NULL;
@@ -476,12 +494,14 @@ void bg_begin(struct bg_arena *arena) {
}
if( count < arena->min_players ) {
- bg_match_over(arena,true);
+ bg->match_over(arena,true);
} else {
- ;
+ mapreg_setreg(add_str("$@bg_queue_id"),arena->queue_id);/* TODO: make this a arena-independant var? or just .@? */
+ npc_event_do(arena->npc_event);
/* we split evenly? */
/* but if a party of say 10 joins, it cant be split evenly unless by luck there are 10 soloers in the queue besides them */
/* not sure how to split T_T needs more info */
+ /* currently running only on solo mode so we do it evenly */
}
}
int bg_begin_timer(int tid, unsigned int tick, int id, intptr_t data) {
@@ -599,11 +619,12 @@ void bg_queue_add(struct map_session_data *sd, struct bg_arena *arena, enum bg_q
clif->bgqueue_ack(sd,BGQA_SUCCESS,arena->id);
+ bg->queue_check(arena);
}
enum BATTLEGROUNDS_QUEUE_ACK bg_canqueue(struct map_session_data *sd, struct bg_arena *arena, enum bg_queue_types type) {
int tick;
unsigned int tsec;
- if ( sd->status.base_level > arena->max_level || sd->status.base_level < arena->max_level )
+ if ( sd->status.base_level > arena->max_level || sd->status.base_level < arena->min_level )
return BGQA_FAIL_LEVEL_INCORRECT;
if ( !(sd->class_&JOBL_2) ) /* TODO: maybe make this a per-arena setting, so users may make custom arenas like baby-only,whatever. */
@@ -633,6 +654,11 @@ enum BATTLEGROUNDS_QUEUE_ACK bg_canqueue(struct map_session_data *sd, struct bg_
if( sd->bg_queue.arena != NULL )
return BGQA_DUPLICATE_REQUEST;
+
+ if( type != BGQT_INDIVIDUAL ) {/* until we get the damn balancing correct */
+ clif->colormes(sd->fd,COLOR_RED,"Queueing is only currently enabled only for Solo Mode");
+ return BGQA_FAIL_TEAM_COUNT;
+ }
switch(type) {
case BGQT_GUILD:
@@ -704,6 +730,7 @@ void do_init_battleground(void) {
bg_team_db = idb_alloc(DB_OPT_RELEASE_DATA);
iTimer->add_timer_func_list(bg_send_xy_timer, "bg_send_xy_timer");
iTimer->add_timer_interval(iTimer->gettick() + battle_config.bg_update_interval, bg_send_xy_timer, 0, 0, battle_config.bg_update_interval);
+ bg->config_read();
}
void do_final_battleground(void) {
@@ -738,6 +765,8 @@ void battleground_defaults(void) {
bg->queue_pregame = bg_queue_pregame;
bg->fillup_timer = bg_fillup_timer;
bg->queue_ready_ack = bg_queue_ready_ack;
+ bg->match_over = bg_match_over;
+ bg->queue_check = bg_queue_check;
/* */
bg->config_read = bg_config_read;
}
diff --git a/src/map/battleground.h b/src/map/battleground.h
index 030d13d90..88d75f953 100644
--- a/src/map/battleground.h
+++ b/src/map/battleground.h
@@ -97,9 +97,11 @@ struct battleground_interface {
void (*queue_pregame) (struct bg_arena *arena);
int (*fillup_timer) (int tid, unsigned int tick, int id, intptr_t data);
void (*queue_ready_ack) (struct bg_arena *arena, struct map_session_data *sd, bool response);
+ void (*match_over) (struct bg_arena *arena, bool canceled);
+ void (*queue_check) (struct bg_arena *arena);
/* */
void (*config_read) (void);
-} bg_s;
+};
struct battleground_interface *bg;
diff --git a/src/map/buyingstore.c b/src/map/buyingstore.c
index 7041042df..73c50b0bf 100644
--- a/src/map/buyingstore.c
+++ b/src/map/buyingstore.c
@@ -37,7 +37,7 @@ enum e_buyingstore_failure
static unsigned int buyingstore_nextid = 0;
static const short buyingstore_blankslots[MAX_SLOTS] = { 0 }; // used when checking whether or not an item's card slots are blank
-
+struct buyingstore_interface buyingstore_s;
/// Returns unique buying store id
static unsigned int buyingstore_getuid(void)
diff --git a/src/map/buyingstore.h b/src/map/buyingstore.h
index a416317be..ae5fcb9e5 100644
--- a/src/map/buyingstore.h
+++ b/src/map/buyingstore.h
@@ -29,7 +29,7 @@ struct buyingstore_interface {
void (*trade) (struct map_session_data* sd, int account_id, unsigned int buyer_id, const uint8* itemlist, unsigned int count);
bool (*search) (struct map_session_data* sd, unsigned short nameid);
bool (*searchall) (struct map_session_data* sd, const struct s_search_store_search* s);
-} buyingstore_s;
+};
struct buyingstore_interface *buyingstore;
diff --git a/src/map/chrif.c b/src/map/chrif.c
index 9e8b18d3b..c2067dbd1 100644
--- a/src/map/chrif.c
+++ b/src/map/chrif.c
@@ -48,6 +48,8 @@ static const int packet_len_table[0x3d] = { // U - used, F - free
-1,10, 8, 2, 2,14,19,19, // 2b20-2b27: U->2b20, U->2b21, U->2b22, U->2b23, U->2b24, U->2b25, U->2b26, U->2b27
};
+struct chrif_interface chrif_s;
+
//Used Packets:
//2af8: Outgoing, chrif_connect -> 'connect to charserver / auth @ charserver'
//2af9: Incoming, chrif_connectack -> 'answer of the 2af8 login(ok / fail)'
@@ -456,7 +458,7 @@ int chrif_connectack(int fd) {
ShowStatus("Successfully logged on to Char Server (Connection: '"CL_WHITE"%d"CL_RESET"').\n",fd);
chrif_state = 1;
- chrif->chrif_connected = 1;
+ chrif->connected = 1;
chrif_sendmap(fd);
@@ -1331,9 +1333,9 @@ int chrif_char_online(struct map_session_data *sd) {
/// Called when the connection to Char Server is disconnected.
void chrif_on_disconnect(void) {
- if( chrif->chrif_connected != 1 )
+ if( chrif->connected != 1 )
ShowWarning("Connection to Char Server lost.\n\n");
- chrif->chrif_connected = 0;
+ chrif->connected = 0;
chrif->other_mapserver_count = 0; //Reset counter. We receive ALL maps from all map-servers on reconnect.
iMap->eraseallipport();
@@ -1544,7 +1546,7 @@ static int check_connect_char_server(int tid, unsigned int tick, int id, intptr_
realloc_fifo(char_fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK);
chrif_connect(char_fd);
- chrif->chrif_connected = (chrif_state == 2);
+ chrif->connected = (chrif_state == 2);
srvinfo = 0;
} else {
if (srvinfo == 0) {
@@ -1657,7 +1659,7 @@ void chrif_defaults(void) {
/* vars */
- chrif->chrif_connected = 0;
+ chrif->connected = 0;
chrif->other_mapserver_count = 0;
/* funcs */
diff --git a/src/map/chrif.h b/src/map/chrif.h
index faabedeed..a6a5fc6bf 100644
--- a/src/map/chrif.h
+++ b/src/map/chrif.h
@@ -1,11 +1,15 @@
// Copyright (c) Hercules Dev Team, licensed under GNU GPL.
// See the LICENSE file
// Portions Copyright (c) Athena Dev Teams
+
#ifndef _CHRIF_H_
#define _CHRIF_H_
+
#include "../common/cbasetypes.h"
#include <time.h>
+
enum sd_state { ST_LOGIN, ST_LOGOUT, ST_MAPCHANGE };
+
struct auth_node {
int account_id, char_id;
int login_id1, login_id2, sex, fd;
@@ -16,9 +20,6 @@ struct auth_node {
enum sd_state state; //To track whether player was login in/out or changing maps.
};
-
-
-
/*=====================================
* Interface : chrif.h
* Generated by HerculesInterfaceMaker
@@ -28,7 +29,7 @@ struct chrif_interface {
/* vars */
- int chrif_connected;
+ int connected;
int other_mapserver_count; //Holds count of how many other map servers are online (apart of this instance) [Skotlex]
/* funcs */
@@ -78,7 +79,7 @@ struct chrif_interface {
int (*flush_fifo) (void);
void (*skillid2idx) (int fd);
-} chrif_s;
+};
struct chrif_interface *chrif;
diff --git a/src/map/clif.c b/src/map/clif.c
index e5132a938..f925fcf55 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -53,6 +53,8 @@
#include <stdarg.h>
#include <time.h>
+struct clif_interface clif_s;
+
//#define DUMP_UNKNOWN_PACKET
//#define DUMP_INVALID_PACKET
@@ -545,8 +547,24 @@ int clif_send(const void* buf, int len, struct block_list* bl, enum send_target
}
break;
+ case BG_QUEUE:
+ if( sd && sd->bg_queue.arena ) {
+ struct hQueue *queue = &script->hq[sd->bg_queue.arena->queue_id];
+
+ for( i = 0; i < queue->items; i++ ) {
+ struct map_session_data * sd = NULL;
+
+ if( ( sd = iMap->id2sd(queue->item[i]) ) ) {
+ WFIFOHEAD(sd->fd,len);
+ memcpy(WFIFOP(sd->fd,0), buf, len);
+ WFIFOSET(sd->fd,len);
+ }
+ }
+ }
+ break;
+
default:
- ShowError("clif->send: Unrecognized type %d\n",type);
+ ShowError("clif_send: Unrecognized type %d\n",type);
return -1;
}
@@ -17317,7 +17335,6 @@ void clif_status_change_end(struct block_list *bl, int tid, enum send_target tar
}
void clif_bgqueue_ack(struct map_session_data *sd, enum BATTLEGROUNDS_QUEUE_ACK response, unsigned char arena_id) {
-
switch (response) {
case BGQA_FAIL_COOLDOWN:
case BGQA_FAIL_DESERTER:
@@ -17348,15 +17365,16 @@ void clif_bgqueue_notice_delete(struct map_session_data *sd, enum BATTLEGROUNDS_
}
void clif_parse_bgqueue_register(int fd, struct map_session_data *sd) {
- struct packet_bgqueue_register *p = P2PTR(fd, bgqueue_registerType);
+ struct packet_bgqueue_register *p = P2PTR(fd);
struct bg_arena *arena = NULL;
-
if( !bg->queue_on ) return; /* temp, until feature is complete */
if( !(arena = bg->name2arena(p->bg_name)) ) {
clif->bgqueue_ack(sd,BGQA_FAIL_BGNAME_INVALID,0);
return;
}
+ //debug
+ safestrncpy(arena->name, p->bg_name, sizeof(arena->name));
switch( (enum bg_queue_types)p->type ) {
case BGQT_INDIVIDUAL:
@@ -17387,7 +17405,6 @@ void clif_parse_bgqueue_checkstate(int fd, struct map_session_data *sd) {
//struct packet_bgqueue_checkstate *p = P2PTR(fd, bgqueue_checkstateType); /* TODO: bgqueue_notice_delete should use this p->bg_name */
if( !bg->queue_on ) return; /* temp, until feature is complete */
if ( sd->bg_queue.arena && sd->bg_queue.type ) {
- sd->bg_queue.client_has_bg_data = true;
clif->bgqueue_update_info(sd,sd->bg_queue.arena->id,bg->id2pos(sd->bg_queue.arena->queue_id,sd->status.account_id));
} else
clif->bgqueue_notice_delete(sd, BGQND_FAIL_NOT_QUEUING,0);/* TODO: wrong response, should respond with p->bg_name not id 0 */
@@ -17400,10 +17417,10 @@ void clif_parse_bgqueue_revoke_req(int fd, struct map_session_data *sd) {
}
void clif_parse_bgqueue_battlebegin_ack(int fd, struct map_session_data *sd) {
- struct packet_bgqueue_battlebegin_ack *p = P2PTR(fd, bgqueue_checkstateType);
+ struct packet_bgqueue_battlebegin_ack *p = P2PTR(fd);
struct bg_arena *arena;
if( !bg->queue_on ) return; /* temp, until feature is complete */
- if( ( arena = bg->name2arena(p->bg_name) ) ) {
+ if( ( arena = bg->name2arena(p->bg_name) ) ) {
bg->queue_ready_ack(arena,sd, ( p->result == 1 ) ? true : false);
} else {
clif->bgqueue_ack(sd,BGQA_FAIL_BGNAME_INVALID, 0);
@@ -17463,6 +17480,41 @@ void clif_package_item_announce(struct map_session_data *sd, unsigned short name
clif->send(&p,sizeof(p), &sd->bl, ALL_CLIENT);
}
+/* [Ind/Hercules] special thanks to Yommy~! */
+void clif_skill_cooldown_list(int fd, struct skill_cd* cd) {
+#if PACKETVER >= 20120604
+ const int offset = 10;
+#else
+ const int offset = 6;
+#endif
+ int i, count = 0;
+
+ WFIFOHEAD(fd,4+(offset*cd->cursor));
+
+#if PACKETVER >= 20120604
+ WFIFOW(fd,0) = 0x985;
+#else
+ WFIFOW(fd,0) = 0x43e;
+#endif
+
+ for( i = 0; i < cd->cursor; i++ ) {
+ if( cd->duration[i] < 1 ) continue;
+#if PACKETVER >= 20120604
+ WFIFOW(fd, 4 + (i*10)) = cd->nameid[i];
+ WFIFOL(fd, 6 + (i*10)) = cd->total[i];
+ WFIFOL(fd, 10 + (i*10)) = cd->duration[i];
+#else
+ WFIFOW(fd, 4 + (i*6)) = cd->nameid[i];
+ WFIFOL(fd, 6 + (i*6)) = cd->duration[i];
+#endif
+ count++;
+ }
+
+ WFIFOW(fd,2) = 4+(offset*count);
+
+ WFIFOSET(fd,4+(offset*count));
+}
+
/* */
unsigned short clif_decrypt_cmd( int cmd, struct map_session_data *sd ) {
if( sd ) {
@@ -17929,6 +17981,7 @@ void clif_defaults(void) {
clif->sc_load = clif_status_change2;
clif->sc_end = clif_status_change_end;
clif->initialstatus = clif_initialstatus;
+ clif->cooldown_list = clif_skill_cooldown_list;
/* player-unit-specific-related */
clif->updatestatus = clif_updatestatus;
clif->changestatus = clif_changestatus;
diff --git a/src/map/clif.h b/src/map/clif.h
index bea701223..a0946a48a 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -38,12 +38,13 @@ struct quest;
struct party_booking_ad_info;
struct view_data;
struct eri;
+struct skill_cd;
/**
* Defines
**/
#define packet_len(cmd) packet_db[cmd].len
-#define P2PTR(fd,cmd) RFIFO2PTR(fd,packet_db[cmd].len)
+#define P2PTR(fd) RFIFO2PTR(fd)
#define clif_menuskill_clear(sd) (sd)->menuskill_id = (sd)->menuskill_val = (sd)->menuskill_val2 = 0;
#define HCHSYS_NAME_LENGTH 20
@@ -632,6 +633,7 @@ struct clif_interface {
void (*sc_load) (struct block_list *bl, int tid, enum send_target target, int type, int val1, int val2, int val3);
void (*sc_end) (struct block_list *bl, int tid, enum send_target target, int type);
void (*initialstatus) (struct map_session_data *sd);
+ void (*cooldown_list) (int fd, struct skill_cd* cd);
/* player-unit-specific-related */
void (*updatestatus) (struct map_session_data *sd,int type);
void (*changestatus) (struct map_session_data* sd,int type,int val);
@@ -1147,7 +1149,7 @@ struct clif_interface {
void (*pPartyBookingRefuseVolunteer) (int fd, struct map_session_data *sd);
void (*pPartyBookingCancelVolunteer) (int fd, struct map_session_data *sd);
#endif
-} clif_s;
+};
struct clif_interface *clif;
diff --git a/src/map/guild.c b/src/map/guild.c
index e093fdf92..aa1d8c7a9 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -30,6 +30,7 @@
#include <stdlib.h>
#include <string.h>
+struct guild_interface guild_s;
static DBMap* guild_db; // int guild_id -> struct guild*
static DBMap* castle_db; // int castle_id -> struct guild_castle*
diff --git a/src/map/guild.h b/src/map/guild.h
index 9841f5451..1f61df09e 100644
--- a/src/map/guild.h
+++ b/src/map/guild.h
@@ -104,7 +104,7 @@ struct guild_interface {
void (*flags_clear) (void);
/* guild aura */
void (*aura_refresh) (struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
-} guild_s;
+};
struct guild_interface *guild;
diff --git a/src/map/homunculus.c b/src/map/homunculus.c
index efb5c0eb3..0d1b6ebcb 100644
--- a/src/map/homunculus.c
+++ b/src/map/homunculus.c
@@ -40,6 +40,8 @@
#include <string.h>
#include <math.h>
+struct homunculus_interface homunculus_s;
+
//Returns the viewdata for homunculus
struct view_data* homunculus_get_viewdata(int class_) {
if (homdb_checkid(class_))
diff --git a/src/map/homunculus.h b/src/map/homunculus.h
index 86d437e73..4b35c0992 100644
--- a/src/map/homunculus.h
+++ b/src/map/homunculus.h
@@ -133,7 +133,7 @@ struct homunculus_interface {
void (*exp_db_read) (void);
void (*addspiritball) (struct homun_data *hd, int max);
void (*delspiritball) (struct homun_data *hd, int count, int type);
-} homunculus_s;
+};
struct homunculus_interface *homun;
diff --git a/src/map/instance.c b/src/map/instance.c
index 6b80f5d75..9207c1d53 100644
--- a/src/map/instance.c
+++ b/src/map/instance.c
@@ -25,6 +25,8 @@
#include <stdarg.h>
#include <time.h>
+struct instance_interface instance_s;
+
/// Checks whether given instance id is valid or not.
bool instance_is_valid(int instance_id) {
if( instance_id < 0 || instance_id >= instance->instances ) {// out of range
diff --git a/src/map/instance.h b/src/map/instance.h
index e86586e44..164aaf662 100644
--- a/src/map/instance.h
+++ b/src/map/instance.h
@@ -62,7 +62,7 @@ struct instance_interface {
void (*check_kick) (struct map_session_data *sd);
void (*set_timeout) (int instance_id, unsigned int progress_timeout, unsigned int idle_timeout);
bool (*valid) (int instance_id);
-} instance_s;
+};
struct instance_interface *instance;
diff --git a/src/map/irc-bot.c b/src/map/irc-bot.c
index 7f03ed8d4..0be8074c8 100644
--- a/src/map/irc-bot.c
+++ b/src/map/irc-bot.c
@@ -19,6 +19,8 @@
#include <stdlib.h>
#include <string.h>
+struct irc_bot_interface irc_bot_s;
+
char send_string[200];
int irc_connect_timer(int tid, unsigned int tick, int id, intptr_t data) {
diff --git a/src/map/irc-bot.h b/src/map/irc-bot.h
index 911a15b0e..1fd4b58ab 100644
--- a/src/map/irc-bot.h
+++ b/src/map/irc-bot.h
@@ -52,7 +52,7 @@ struct irc_bot_interface {
void (*pong) (int fd, char *cmd, char *source, char *target, char *msg);
void (*join) (int fd, char *cmd, char *source, char *target, char *msg);
void (*privmsg) (int fd, char *cmd, char *source, char *target, char *msg);
-} irc_bot_s;
+};
struct irc_bot_interface *ircbot;
diff --git a/src/map/itemdb.c b/src/map/itemdb.c
index 5fae29500..4e0477b75 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -24,6 +24,8 @@ static DBMap* itemdb_other;// int nameid -> struct item_data*
struct item_data dummy_item; //This is the default dummy item used for non-existant items. [Skotlex]
+struct itemdb_interface itemdb_s;
+
/**
* Search for item name
* name = item alias, so we should find items aliases first. if not found then look for "jname" (full name)
diff --git a/src/map/itemdb.h b/src/map/itemdb.h
index 5e870a5f2..dcd0ae644 100644
--- a/src/map/itemdb.h
+++ b/src/map/itemdb.h
@@ -302,7 +302,7 @@ struct itemdb_interface {
int (*group_item) (struct item_group *group);
int (*chain_item) (unsigned short chain_id, int *rate);
void (*package_item) (struct map_session_data *sd, struct item_package *package);
-} itemdb_s;
+};
struct itemdb_interface *itemdb;
diff --git a/src/map/log.c b/src/map/log.c
index ae516b84e..79e3b87e6 100644
--- a/src/map/log.c
+++ b/src/map/log.c
@@ -18,6 +18,7 @@
#include <stdlib.h>
#include <string.h>
+struct log_interface log_s;
/// filters for item logging
typedef enum e_log_filter {
diff --git a/src/map/log.h b/src/map/log.h
index 462a12ff5..376483fe7 100644
--- a/src/map/log.h
+++ b/src/map/log.h
@@ -78,7 +78,7 @@ struct log_interface {
int (*config_read) (const char* cfgName);
void (*config_done) (void);
-} log_s;
+};
struct log_interface *logs;
diff --git a/src/map/mail.c b/src/map/mail.c
index 9a8d4e521..021a51cde 100644
--- a/src/map/mail.c
+++ b/src/map/mail.c
@@ -15,6 +15,8 @@
#include <time.h>
#include <string.h>
+struct mail_interface mail_s;
+
void mail_clear(struct map_session_data *sd)
{
sd->mail.nameid = 0;
diff --git a/src/map/mail.h b/src/map/mail.h
index 99742c7bd..b2b9048cb 100644
--- a/src/map/mail.h
+++ b/src/map/mail.h
@@ -17,7 +17,7 @@ struct mail_interface {
int (*openmail) (struct map_session_data *sd);
void (*deliveryfail) (struct map_session_data *sd, struct mail_message *msg);
bool (*invalid_operation) (struct map_session_data *sd);
-} mail_s;
+};
struct mail_interface *mail;
diff --git a/src/map/map.c b/src/map/map.c
index ee56f140f..10d413676 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -132,6 +132,8 @@ int enable_grf = 0; //To enable/disable reading maps from GRF files, bypassing m
struct eri *map_iterator_ers;
char *map_cache_buffer = NULL; // Has the uncompressed gat data of all maps, so just one allocation has to be made
+struct map_interface iMap_s;
+
/*==========================================
* server player count (of all mapservers)
*------------------------------------------*/
@@ -1647,6 +1649,7 @@ int map_quit(struct map_session_data *sd) {
if( sd->bg_id )
bg_team_leave(sd,1);
+ skill->cooldown_save(sd);
pc->itemcd_do(sd,false);
for( i = 0; i < sd->queues_count; i++ ) {
@@ -1657,7 +1660,8 @@ int map_quit(struct map_session_data *sd) {
}
/* two times, the npc event above may assign a new one or delete others */
for( i = 0; i < sd->queues_count; i++ ) {
- script->queue_remove(sd->queues[i],sd->status.account_id);
+ if( sd->queues[i] != -1 )
+ script->queue_remove(sd->queues[i],sd->status.account_id);
}
npc_script_event(sd, NPCE_LOGOUT);
diff --git a/src/map/map.h b/src/map/map.h
index 3b53b71cc..6002e56da 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -906,7 +906,7 @@ struct map_interface {
void (*clean) (int i);
void (*do_shutdown) (void);
-} iMap_s;
+};
struct map_interface *iMap;
diff --git a/src/map/npc.c b/src/map/npc.c
index 77758bc00..33d0c48f1 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -1862,7 +1862,7 @@ int npc_unload(struct npc_data* nd, bool single) {
aFree(nd->u.scr.timer_event);
if (nd->src_id == 0) {
if(nd->u.scr.script) {
- script_stop_instances(nd->bl.id);
+ script_stop_instances(nd->u.scr.script);
script_free_code(nd->u.scr.script);
nd->u.scr.script = NULL;
}
@@ -2275,52 +2275,34 @@ static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const
return strchr(start,'\n');// continue
}
-/**
- * NPC other label
- * Not sure, seem to add label in a chainlink
- * @see DBApply
- */
-int npc_convertlabel_db(DBKey key, DBData *data, va_list ap)
-{
- const char* lname = (const char*)key.str;
- int lpos = DB->data2i(data);
- struct npc_label_list** label_list;
- int* label_list_num;
- const char* filepath;
- struct npc_label_list* label;
- const char *p;
- int len;
-
- nullpo_ret(label_list = va_arg(ap,struct npc_label_list**));
- nullpo_ret(label_list_num = va_arg(ap,int*));
- nullpo_ret(filepath = va_arg(ap,const char*));
-
- // In case of labels not terminated with ':', for user defined function support
- p = lname;
- while( ISALNUM(*p) || *p == '_' )
- ++p;
- len = p-lname;
-
- // here we check if the label fit into the buffer
- if( len > 23 )
- {
- ShowError("npc_parse_script: label name longer than 23 chars! '%s'\n (%s)", lname, filepath);
- return 0;
- }
-
- if( *label_list == NULL )
- {
- *label_list = (struct npc_label_list *) aCalloc (1, sizeof(struct npc_label_list));
- *label_list_num = 0;
- } else
- *label_list = (struct npc_label_list *) aRealloc (*label_list, sizeof(struct npc_label_list)*(*label_list_num+1));
- label = *label_list+*label_list_num;
+void npc_convertlabel_db(struct npc_label_list* label_list, const char *filepath) {
+ int i;
+
+ for( i = 0; i < script->label_count; i++ ) {
+ const char* lname = get_str(script->labels[i].key);
+ int lpos = script->labels[i].pos;
+ struct npc_label_list* label;
+ const char *p;
+ int len;
+
+ // In case of labels not terminated with ':', for user defined function support
+ p = lname;
- safestrncpy(label->name, lname, sizeof(label->name));
- label->pos = lpos;
- ++(*label_list_num);
+ while( ISALNUM(*p) || *p == '_' )
+ ++p;
+ len = p-lname;
- return 0;
+ // here we check if the label fit into the buffer
+ if( len > 23 ) {
+ ShowError("npc_parse_script: label name longer than 23 chars! '%s'\n (%s)", lname, filepath);
+ return;
+ }
+
+ label = &label_list[i];
+
+ safestrncpy(label->name, lname, sizeof(label->name));
+ label->pos = lpos;
+ }
}
// Skip the contents of a script.
@@ -2388,7 +2370,7 @@ static const char* npc_skip_script(const char* start, const char* buffer, const
static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath, bool runOnInit) {
int x, y, dir = 0, m, xs = 0, ys = 0, class_ = 0; // [Valaris] thanks to fov
char mapname[32];
- struct script_code *script;
+ struct script_code *scriptroot;
int i;
const char* end;
const char* script_start;
@@ -2426,14 +2408,13 @@ static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, cons
if( end == NULL )
return NULL;// (simple) parse error, don't continue
- script = parse_script(script_start, filepath, strline(buffer,script_start-buffer), SCRIPT_USE_LABEL_DB);
+ scriptroot = parse_script(script_start, filepath, strline(buffer,script_start-buffer), SCRIPT_USE_LABEL_DB);
label_list = NULL;
label_list_num = 0;
- if( script )
- {
- DBMap* label_db = script_get_label_db();
- label_db->foreach(label_db, npc_convertlabel_db, &label_list, &label_list_num, filepath);
- db_clear(label_db); // not needed anymore, so clear the db
+ if( script->label_count ) {
+ CREATE(label_list,struct npc_label_list,script->label_count);
+ label_list_num = script->label_count;
+ npc_convertlabel_db(label_list,filepath);
}
CREATE(nd, struct npc_data, 1);
@@ -2458,7 +2439,7 @@ static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, cons
nd->bl.id = npc_get_new_npc_id();
nd->class_ = class_;
nd->speed = 200;
- nd->u.scr.script = script;
+ nd->u.scr.script = scriptroot;
nd->u.scr.label_list = label_list;
nd->u.scr.label_list_num = label_list_num;
@@ -3782,24 +3763,27 @@ int npc_reload(void) {
db_clear(npcname_db);
db_clear(ev_db);
+ npc_last_npd = NULL;
+ npc_last_path = NULL;
+ npc_last_ref = NULL;
+
//Remove all npcs/mobs. [Skotlex]
iter = mapit_geteachiddb();
for( bl = (struct block_list*)mapit->first(iter); mapit->exists(iter); bl = (struct block_list*)mapit->next(iter) ) {
switch(bl->type) {
- case BL_NPC:
- if( bl->id != fake_nd->bl.id )// don't remove fake_nd
- npc_unload((struct npc_data *)bl, false);
- break;
- case BL_MOB:
- unit_free(bl,CLR_OUTSIGHT);
- break;
+ case BL_NPC:
+ if( bl->id != fake_nd->bl.id )// don't remove fake_nd
+ npc_unload((struct npc_data *)bl, false);
+ break;
+ case BL_MOB:
+ unit_free(bl,CLR_OUTSIGHT);
+ break;
}
}
mapit->free(iter);
- if(battle_config.dynamic_mobs)
- {// dynamic check by [random]
+ if(battle_config.dynamic_mobs) {// dynamic check by [random]
for (m = 0; m < iMap->map_num; m++) {
for (i = 0; i < MAX_MOB_LIST_PER_MAP; i++) {
if (map[m].moblist[i] != NULL) {
@@ -3812,9 +3796,9 @@ int npc_reload(void) {
map[m].mob_delete_timer = INVALID_TIMER;
}
}
+ if (map[m].npc_num > 0)
+ ShowWarning("npc_reload: %d npcs weren't removed at map %s!\n", map[m].npc_num, map[m].name);
}
- if (map[m].npc_num > 0)
- ShowWarning("npc_reload: %d npcs weren't removed at map %s!\n", map[m].npc_num, map[m].name);
}
// clear mob spawn lookup index
@@ -3970,10 +3954,14 @@ int do_init_npc(void)
ev_db = strdb_alloc((DBOptions)(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA),2*NAME_LENGTH+2+1);
npcname_db = strdb_alloc(DB_OPT_BASE,NAME_LENGTH);
- npc_path_db = strdb_alloc(DB_OPT_BASE|DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA,80);
+ npc_path_db = strdb_alloc(DB_OPT_BASE|DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA,0);
timer_event_ers = ers_new(sizeof(struct timer_event_data),"clif.c::timer_event_ers",ERS_OPT_NONE);
+ npc_last_npd = NULL;
+ npc_last_path = NULL;
+ npc_last_ref = NULL;
+
// process all npc files
ShowStatus("Loading NPCs...\r");
for( file = npc_src_files; file != NULL; file = file->next ) {
@@ -3988,7 +3976,7 @@ int do_init_npc(void)
"\t-'"CL_WHITE"%d"CL_RESET"' Mobs Cached\n"
"\t-'"CL_WHITE"%d"CL_RESET"' Mobs Not Cached\n",
npc_id - START_NPC_NUM, npc_warp, npc_shop, npc_script, npc_mob, npc_cache_mob, npc_delay_mob);
-
+
iMap->zone_init();
npc->motd = npc_name2id("HerculesMOTD"); /* [Ind/Hercules] */
diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h
index d77784dc5..8e7506686 100644
--- a/src/map/packets_struct.h
+++ b/src/map/packets_struct.h
@@ -404,13 +404,13 @@ struct packet_maptypeproperty2 {
struct packet_bgqueue_ack {
short PacketType;
- short type;
+ unsigned char type;
char bg_name[NAME_LENGTH];
} __attribute__((packed));
struct packet_bgqueue_notice_delete {
short PacketType;
- short type;
+ unsigned char type;
char bg_name[NAME_LENGTH];
} __attribute__((packed));
@@ -438,7 +438,7 @@ struct packet_bgqueue_revoke_req {
struct packet_bgqueue_battlebegin_ack {
short PacketType;
- short result;
+ unsigned char result;
char bg_name[NAME_LENGTH];
char game_name[NAME_LENGTH];
} __attribute__((packed));
diff --git a/src/map/party.c b/src/map/party.c
index 154f84207..30740b058 100644
--- a/src/map/party.c
+++ b/src/map/party.c
@@ -33,6 +33,8 @@ static DBMap* party_db; // int party_id -> struct party_data* (releases data)
static DBMap* party_booking_db; // int char_id -> struct party_booking_ad_info* (releases data) // Party Booking [Spiria]
static unsigned long party_booking_nextid = 1;
+struct party_interface party_s;
+
int party_send_xy_timer(int tid, unsigned int tick, int id, intptr_t data);
/*==========================================
diff --git a/src/map/party.h b/src/map/party.h
index f215baa56..3ce47141c 100644
--- a/src/map/party.h
+++ b/src/map/party.h
@@ -123,7 +123,7 @@ struct party_interface {
void (*booking_search) (struct map_session_data *sd, short level, short mapid, unsigned long lastindex, short resultcount);
#endif
bool (*booking_delete) (struct map_session_data *sd);
-} party_s;
+};
struct party_interface *party;
diff --git a/src/map/pc.c b/src/map/pc.c
index 3e823bb97..3ddae9222 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -89,6 +89,8 @@ struct item_cd {
short nameid[MAX_ITEMDELAYS];//skill id
};
+struct pc_interface pc_s;
+
//Converts a class to its array index for CLASS_COUNT defined arrays.
//Note that it does not do a validity check for speed purposes, where parsing
//player input make sure to use a pcdb_checkid first!
diff --git a/src/map/pc.h b/src/map/pc.h
index 442b55965..0bc1f7325 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -3,6 +3,7 @@
// Portions Copyright (c) Athena Dev Teams
#ifndef _PC_H_
#define _PC_H_
+
#include "../common/mmo.h" // JOB_*, MAX_FAME_LIST, struct fame_list, struct mmo_charstatus
#include "../common/ers.h"
#include "../common/timer.h" // INVALID_TIMER
@@ -20,9 +21,11 @@
#include "mob.h"
#include "log.h"
#include "pc_groups.h"
+
#define MAX_PC_BONUS 10
#define MAX_PC_SKILL_REQUIRE 5
#define MAX_PC_FEELHATE 3
+
//Equip indexes constants. (eg: sd->equip_index[EQI_AMMO] returns the index
//where the arrows are equipped)
enum equip_index {
@@ -507,9 +510,6 @@ struct map_session_data {
struct eri *pc_sc_display_ers;
-//Update this max as necessary. 55 is the value needed for Super Baby currently
-//Raised to 84 since Expanded Super Novice needs it.
-#define MAX_SKILL_TREE 84
//Total number of classes (for data storage)
#define CLASS_COUNT (JOB_MAX - JOB_NOVICE_HIGH + JOB_MAX_BASIC)
@@ -951,7 +951,7 @@ struct pc_interface {
#if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
int (*level_penalty_mod) (struct map_session_data *sd, struct mob_data * md, int type);
#endif
-} pc_s;
+};
struct pc_interface *pc;
diff --git a/src/map/script.c b/src/map/script.c
index 4ceb32991..ee1143f05 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -97,10 +97,8 @@ int str_hash[SCRIPT_HASH_SIZE];
//#define SCRIPT_HASH_SDBM
#define SCRIPT_HASH_ELF
-static DBMap* scriptlabel_db=NULL; // const char* label_name -> int script_pos
static DBMap* userfunc_db=NULL; // const char* func_name -> struct script_code*
static int parse_options=0;
-DBMap* script_get_label_db(void){ return scriptlabel_db; }
DBMap* script_get_userfunc_db(void){ return userfunc_db; }
// important buildin function references for usage in scripts
@@ -178,6 +176,8 @@ int potion_hp=0, potion_per_hp=0, potion_sp=0, potion_per_sp=0;
int potion_target=0;
+struct script_interface script_s;
+
c_op get_com(unsigned char *script,int *pos);
int get_num(unsigned char *script,int *pos);
@@ -1650,7 +1650,7 @@ const char* parse_syntax(const char* p)
script->str_data[l].type = C_USERFUNC;
set_label(l, script_pos, p);
if( parse_options&SCRIPT_USE_LABEL_DB )
- strdb_iput(scriptlabel_db, get_str(l), script_pos);
+ script->label_add(l,script_pos);
}
else
disp_error_message("parse_syntax:function: function name is invalid", func_name);
@@ -2090,7 +2090,7 @@ struct script_code* parse_script(const char *src,const char *file,int line,int o
// who called parse_script is responsible for clearing the database after using it, but just in case... lets clear it here
if( options&SCRIPT_USE_LABEL_DB )
- db_clear(scriptlabel_db);
+ script->label_count = 0;
parse_options = options;
if( setjmp( error_jump ) != 0 ) {
@@ -2164,7 +2164,7 @@ struct script_code* parse_script(const char *src,const char *file,int line,int o
i=add_word(p);
set_label(i,script_pos,p);
if( parse_options&SCRIPT_USE_LABEL_DB )
- strdb_iput(scriptlabel_db, get_str(i), script_pos);
+ script->label_add(i,script_pos);
p=tmpp+1;
p=skip_space(p);
continue;
@@ -3286,7 +3286,7 @@ void run_script(struct script_code *rootscript,int pos,int rid,int oid) {
run_script_main(st);
}
-void script_stop_instances(int id) {
+void script_stop_instances(struct script_code *code) {
DBIterator *iter;
struct script_state* st;
@@ -3296,7 +3296,7 @@ void script_stop_instances(int id) {
iter = db_iterator(script->st_db);
for( st = dbi_first(iter); dbi_exists(iter); st = dbi_next(iter) ) {
- if( st->oid == id ) {
+ if( st->script == code ) {
script_free_state(st);
}
}
@@ -3308,17 +3308,19 @@ void script_stop_instances(int id) {
* Timer function for sleep
*------------------------------------------*/
int run_script_timer(int tid, unsigned int tick, int id, intptr_t data) {
- struct script_state *st = (struct script_state *)data;
- TBL_PC *sd = iMap->id2sd(st->rid);
+ struct script_state *st = idb_get(script->st_db,(int)data);
+ if( st ) {
+ TBL_PC *sd = iMap->id2sd(st->rid);
- if((sd && sd->status.char_id != id) || (st->rid && !sd)) { //Character mismatch. Cancel execution.
- st->rid = 0;
- st->state = END;
+ if((sd && sd->status.char_id != id) || (st->rid && !sd)) { //Character mismatch. Cancel execution.
+ st->rid = 0;
+ st->state = END;
+ }
+ st->sleep.timer = INVALID_TIMER;
+ if(st->state != RERUNLINE)
+ st->sleep.tick = 0;
+ run_script_main(st);
}
- st->sleep.timer = INVALID_TIMER;
- if(st->state != RERUNLINE)
- st->sleep.tick = 0;
- run_script_main(st);
return 0;
}
@@ -3514,7 +3516,7 @@ void run_script_main(struct script_state *st)
sd = iMap->id2sd(st->rid); // Get sd since script might have attached someone while running. [Inkfish]
st->sleep.charid = sd?sd->status.char_id:0;
st->sleep.timer = iTimer->add_timer(iTimer->gettick()+st->sleep.tick,
- run_script_timer, st->sleep.charid, (intptr_t)st);
+ run_script_timer, st->sleep.charid, (intptr_t)st->id);
} else if(st->state != END && st->rid){
//Resume later (st is already attached to player).
if(st->bk_st) {
@@ -3761,7 +3763,6 @@ void do_final_script(void) {
mapreg_final();
- db_destroy(scriptlabel_db);
userfunc_db->destroy(userfunc_db, db_script_free_code_sub);
autobonus_db->destroy(autobonus_db, db_script_free_code_sub);
@@ -3817,6 +3818,9 @@ void do_final_script(void) {
ers_destroy(script->stack_ers);
db_destroy(script->st_db);
+
+ if( script->labels != NULL )
+ aFree(script->labels);
}
/*==========================================
* Initialization
@@ -3824,7 +3828,6 @@ void do_final_script(void) {
void do_init_script(void) {
script->st_db = idb_alloc(DB_OPT_BASE);
userfunc_db = strdb_alloc(DB_OPT_DUP_KEY,0);
- scriptlabel_db = strdb_alloc(DB_OPT_DUP_KEY,50);
autobonus_db = strdb_alloc(DB_OPT_DUP_KEY,0);
script->st_ers = ers_new(sizeof(struct script_state), "script.c::st_ers", ERS_OPT_NONE);
@@ -3844,7 +3847,7 @@ int script_reload() {
struct script_state *st;
userfunc_db->clear(userfunc_db, db_script_free_code_sub);
- db_clear(scriptlabel_db);
+ script->label_count = 0;
for( i = 0; i < atcommand->binding_count; i++ ) {
aFree(atcommand->binding[i]);
@@ -17016,9 +17019,7 @@ struct hQueue *script_hqueue_get(int idx) {
return NULL;
return &script->hq[idx];
}
-/* set .@id,queue(); */
-/* creates queue, returns created queue id */
-BUILDIN(queue) {
+int script_hqueue_create(void) {
int idx = script->hqs;
int i;
@@ -17039,8 +17040,12 @@ BUILDIN(queue) {
script->hq[ idx ].onDeath[0] = '\0';
script->hq[ idx ].onLogOut[0] = '\0';
script->hq[ idx ].onMapChange[0] = '\0';
-
- script_pushint(st,idx);
+ return idx;
+}
+/* set .@id,queue(); */
+/* creates queue, returns created queue id */
+BUILDIN(queue) {
+ script_pushint(st,script->queue_create());
return true;
}
/* set .@length,queuesize(.@queue_id); */
@@ -17051,8 +17056,14 @@ BUILDIN(queuesize) {
if( idx < 0 || idx >= script->hqs || script->hq[idx].items == -1 ) {
ShowWarning("buildin_queuesize: unknown queue id %d\n",idx);
script_pushint(st, 0);
- } else
- script_pushint(st, script->hq[ idx ].items );
+ } else {
+ /* value of script->hq[].items isn't to be trusted for we dont reduce the size when members are removed to save on memory allocation */
+ int i, count = 0;
+ for( i = 0; i < script->hq[ idx ].items; i++ )
+ if( script->hq[ idx ].item[i] != -1 )
+ count++;
+ script_pushint(st, count);
+ }
return true;
}
@@ -17119,17 +17130,17 @@ bool script_hqueue_remove(int idx, int var) {
for(i = 0; i < script->hq[idx].items; i++) {
if( script->hq[idx].item[i] == var ) {
- return true;
+ break;
}
}
if( i != script->hq[idx].items ) {
struct map_session_data *sd;
- script->hq[idx].item[i] = 0;
+ script->hq[idx].item[i] = -1;
if( var >= START_ACCOUNT_NUM && (sd = iMap->id2sd(var)) ) {
for(i = 0; i < sd->queues_count; i++) {
- if( sd->queues[i] == var ) {
+ if( sd->queues[i] == idx ) {
break;
}
}
@@ -17231,7 +17242,33 @@ BUILDIN(queuedel) {
return true;
}
+void script_hqueue_clear(int idx) {
+ if( idx < 0 || idx >= script->hqs || script->hq[idx].items == -1 ) {
+ ShowWarning("script_hqueue_clear: unknown queue id %d\n",idx);
+ return;
+ } else {
+ struct map_session_data *sd;
+ int i, j;
+
+ for(i = 0; i < script->hq[idx].items; i++) {
+ if( script->hq[idx].item[i] != -1 ) {
+ if( script->hq[idx].item[i] >= START_ACCOUNT_NUM && (sd = iMap->id2sd(script->hq[idx].item[i])) ) {
+ for(j = 0; j < sd->queues_count; j++) {
+ if( sd->queues[j] == idx ) {
+ break;
+ }
+ }
+
+ if( j != sd->queues_count )
+ sd->queues[j] = -1;
+ }
+ script->hq[idx].item[i] = -1;
+ }
+ }
+ }
+ return;
+}
/* set .@id, queueiterator(.@queue_id); */
/* creates a new queue iterator, returns its id */
BUILDIN(queueiterator) {
@@ -17240,7 +17277,7 @@ BUILDIN(queueiterator) {
int idx = script->hqis;
int i;
- if( qid < 0 || qid >= script->hqs || script->hq[idx].items == -1 || !(queue = script->queue(qid)) ) {
+ if( qid < 0 || qid >= script->hqs || script->hq[qid].items == -1 || !(queue = script->queue(qid)) ) {
ShowWarning("queueiterator: invalid queue id %d\n",qid);
return true;
}
@@ -17258,8 +17295,8 @@ BUILDIN(queueiterator) {
idx = i;
RECREATE(script->hqi[ idx ].item, int, queue->items);
-
- memcpy(&script->hqi[idx].item, &queue->item, sizeof(int)*queue->items);
+
+ memcpy(script->hqi[idx].item, queue->item, sizeof(int)*queue->items);
script->hqi[ idx ].items = queue->items;
script->hqi[ idx ].pos = 0;
@@ -17275,7 +17312,7 @@ BUILDIN(qiget) {
if( idx < 0 || idx >= script->hqis ) {
ShowWarning("buildin_qiget: unknown queue iterator id %d\n",idx);
script_pushint(st, 0);
- } else if ( script->hqi[idx].pos == script->hqi[idx].items ) {
+ } else if ( script->hqi[idx].pos -1 == script->hqi[idx].items ) {
script_pushint(st, 0);
} else {
struct hQueueIterator *it = &script->hqi[idx];
@@ -17292,7 +17329,7 @@ BUILDIN(qicheck) {
if( idx < 0 || idx >= script->hqis ) {
ShowWarning("buildin_qicheck: unknown queue iterator id %d\n",idx);
script_pushint(st, 0);
- } else if ( script->hqi[idx].pos == script->hqi[idx].items ) {
+ } else if ( script->hqi[idx].pos -1 == script->hqi[idx].items ) {
script_pushint(st, 0);
} else {
script_pushint(st, 1);
@@ -17349,7 +17386,66 @@ BUILDIN(packageitem) {
return true;
}
+/* New Battlegrounds Stuff */
+/* bg_team_create(map_name,respawn_x,respawn_y) */
+/* returns created team id or -1 when fails */
+BUILDIN(bg_create_team) {
+ const char *map_name, *ev = "", *dev = "";//ev and dev will be dropped.
+ int x, y, mapindex = 0, bg_id;
+
+ map_name = script_getstr(st,2);
+ if( strcmp(map_name,"-") != 0 ) {
+ mapindex = mapindex_name2id(map_name);
+ if( mapindex == 0 ) { // Invalid Map
+ script_pushint(st,0);
+ return true;
+ }
+ }
+
+ x = script_getnum(st,3);
+ y = script_getnum(st,4);
+
+ if( (bg_id = bg_create(mapindex, x, y, ev, dev)) == 0 ) { // Creation failed
+ script_pushint(st,-1);
+ } else
+ script_pushint(st,bg_id);
+
+ return true;
+}
+/* bg_join_team(team_id{,optional account id}) */
+/* when account id is not present it tries to autodetect from the attached player (if any) */
+/* returns 0 when successful, 1 otherwise */
+BUILDIN(bg_join_team) {
+ struct map_session_data *sd;
+ int team_id = script_getnum(st, 2);
+
+ if( script_hasdata(st, 3) )
+ sd = iMap->id2sd(script_getnum(st, 3));
+ else
+ sd = script->rid2sd(st);
+
+ if( !sd )
+ script_pushint(st, 1);
+ else
+ script_pushint(st,bg_team_join(team_id, sd)?0:1);
+
+ return true;
+}
+/* bg_match_over( arena_name {, optional canceled } ) */
+/* returns 0 when successful, 1 otherwise */
+BUILDIN(bg_match_over) {
+ bool canceled = script_hasdata(st,3) ? true : false;
+ struct bg_arena *arena = bg->name2arena((char*)script_getstr(st, 2));
+
+ if( arena ) {
+ bg->match_over(arena,canceled);
+ script_pushint(st, 0);
+ } else
+ script_pushint(st, 1);
+
+ return true;
+}
// declarations that were supposed to be exported from npc_chat.c
#ifdef PCRE_SUPPORT
BUILDIN(defpattern);
@@ -17866,6 +17962,10 @@ void script_parse_builtin(void) {
BUILDIN_DEF(packageitem,"?"),
+ /* New BG Commands [Hercules] */
+ BUILDIN_DEF(bg_create_team,"sii"),
+ BUILDIN_DEF(bg_join_team,"i?"),
+ BUILDIN_DEF(bg_match_over,"s?"),
};
int i,n, len = ARRAYLENGTH(BUILDIN), start = script->buildin_count;
char* p;
@@ -17916,6 +18016,19 @@ void script_parse_builtin(void) {
}
}
+void script_label_add(int key, int pos) {
+ int idx = script->label_count;
+
+ if( script->labels_size == script->label_count ) {
+ script->labels_size += 1024;
+ RECREATE(script->labels, struct script_label_entry, script->labels_size);
+ }
+
+ script->labels[idx].key = key;
+ script->labels[idx].pos = pos;
+ script->label_count++;
+}
+
void script_defaults(void) {
script = &script_s;
@@ -17945,6 +18058,10 @@ void script_defaults(void) {
script->current_item_id = 0;
+ script->labels = NULL;
+ script->label_count = 0;
+ script->labels_size = 0;
+
script->init = do_init_script;
script->final = do_final_script;
@@ -17968,4 +18085,8 @@ void script_defaults(void) {
script->queue_add = script_hqueue_add;
script->queue_del = script_hqueue_del;
script->queue_remove = script_hqueue_remove;
+ script->queue_create = script_hqueue_create;
+ script->queue_clear = script_hqueue_clear;
+
+ script->label_add = script_label_add;
}
diff --git a/src/map/script.h b/src/map/script.h
index a047779a8..25a891897 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -191,14 +191,13 @@ int set_var(struct map_session_data *sd, char *name, void *val);
int run_script_timer(int tid, unsigned int tick, int id, intptr_t data);
void run_script_main(struct script_state *st);
-void script_stop_instances(int id);
+void script_stop_instances(struct script_code *code);
struct linkdb_node* script_erase_sleepdb(struct linkdb_node *n);
void script_free_code(struct script_code* code);
void script_free_vars(struct DBMap *storage);
struct script_state* script_alloc_state(struct script_code* rootscript, int pos, int rid, int oid);
void script_free_state(struct script_state* st);
-struct DBMap* script_get_label_db(void);
struct DBMap* script_get_userfunc_db(void);
void script_run_autobonus(const char *autobonus,int id, int pos);
@@ -231,6 +230,10 @@ struct str_data_struct {
int next;
};
+struct script_label_entry {
+ int key,pos;
+};
+
///////////////////////////////////////////////////////////////////////////////
//## TODO possible enhancements: [FlavioJS]
// - 'callfunc' supporting labels in the current npc "::LabelName"
@@ -359,6 +362,10 @@ struct script_interface {
int word_size;
/* */
unsigned short current_item_id;
+ /* */
+ struct script_label_entry *labels;
+ int label_count;
+ int labels_size;
/* */
void (*init) (void);
void (*final) (void);
@@ -378,12 +385,15 @@ struct script_interface {
void (*set_constant) (const char* name, int value, bool isparameter);
void (*set_constant2) (const char *name, int value, bool isparameter);
bool (*get_constant) (const char* name, int* value);
+ void (*label_add)(int key, int pos);
/* */
struct hQueue *(*queue) (int idx);
bool (*queue_add) (int idx, int var);
bool (*queue_del) (int idx);
bool (*queue_remove) (int idx, int var);
-} script_s;
+ int (*queue_create) (void);
+ void (*queue_clear) (int idx);
+};
struct script_interface *script;
diff --git a/src/map/searchstore.c b/src/map/searchstore.c
index d346a0de6..c7f4f9fed 100644
--- a/src/map/searchstore.c
+++ b/src/map/searchstore.c
@@ -39,6 +39,7 @@ enum e_searchstore_effecttype {
typedef bool (*searchstore_search_t)(struct map_session_data* sd, unsigned short nameid);
typedef bool (*searchstore_searchall_t)(struct map_session_data* sd, const struct s_search_store_search* s);
+struct searchstore_interface searchstore_s;
/// retrieves search function by type
static inline searchstore_search_t searchstore_getsearchfunc(unsigned char type) {
diff --git a/src/map/searchstore.h b/src/map/searchstore.h
index 61e65c7d2..42d47c7c0 100644
--- a/src/map/searchstore.h
+++ b/src/map/searchstore.h
@@ -52,7 +52,7 @@ struct searchstore_interface {
bool (*queryremote) (struct map_session_data* sd, int account_id);
void (*clearremote) (struct map_session_data* sd);
bool (*result) (struct map_session_data* sd, unsigned int store_id, int account_id, const char* store_name, unsigned short nameid, unsigned short amount, unsigned int price, const short* card, unsigned char refine);
-} searchstore_s;
+};
struct searchstore_interface *searchstore;
diff --git a/src/map/skill.c b/src/map/skill.c
index 1431d27a7..dc89f3170 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -46,7 +46,7 @@
#define SKILLUNITTIMER_INTERVAL 100
// ranges reserved for mapping skill ids to skilldb offsets
-#define HM_SKILLRANGEMIN 700
+#define HM_SKILLRANGEMIN 750
#define HM_SKILLRANGEMAX HM_SKILLRANGEMIN + MAX_HOMUNSKILL
#define MC_SKILLRANGEMIN HM_SKILLRANGEMAX + 1
#define MC_SKILLRANGEMAX MC_SKILLRANGEMIN + MAX_MERCSKILL
@@ -64,20 +64,6 @@ static struct eri *skill_timer_ers = NULL; //For handling skill_timerskills [Sko
DBMap* skillunit_db = NULL; // int id -> struct skill_unit*
/**
- * Skill Cool Down Delay Saving
- * Struct skill_cd is not a member of struct map_session_data
- * to keep cooldowns in memory between player log-ins.
- * All cooldowns are reset when server is restarted.
- **/
-DBMap* skillcd_db = NULL; // char_id -> struct skill_cd
-struct skill_cd {
- int duration[MAX_SKILL_TREE];//milliseconds
- short skidx[MAX_SKILL_TREE];//the skill index entries belong to
- short nameid[MAX_SKILL_TREE];//skill id
- unsigned char cursor;
-};
-
-/**
* Skill Unit Persistency during endack routes (mostly for songs see bugreport:4574)
**/
DBMap* skillusave_db = NULL; // char_id -> struct skill_usave
@@ -118,6 +104,9 @@ struct s_skill_unit_layout skill_unit_layout[MAX_SKILL_UNIT_LAYOUT];
int firewall_unit_pos;
int icewall_unit_pos;
int earthstrain_unit_pos;
+
+struct skill_interface skill_s;
+
//Since only mob-casted splash skills can hit ice-walls
static inline int splash_target(struct block_list* bl) {
#ifndef RENEWAL
@@ -851,11 +840,9 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
break;
case SM_BASH:
- if( sd && skill_lv > 5 && pc->checkskill(sd,SM_FATALBLOW)>0 ){
- //TODO: How much % per base level it actually is?
- sc_start(bl,SC_STUN,(5*(skill_lv-5)+(int)sd->status.base_level/10),
- skill_lv,skill->get_time2(SM_FATALBLOW,skill_lv));
- }
+ if( sd && skill_lv > 5 && pc->checkskill(sd,SM_FATALBLOW)>0 )
+ status_change_start(bl,SC_STUN,500*(skill_lv-5)*sd->status.base_level/50,
+ skill_lv,0,0,0,skill->get_time2(SM_FATALBLOW,skill_lv),0);
break;
case MER_CRASH:
@@ -949,8 +936,8 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
break;
case TF_THROWSTONE:
- sc_start(bl,SC_STUN,3,skill_lv,skill->get_time(skill_id,skill_lv));
- sc_start(bl,SC_BLIND,3,skill_lv,skill->get_time2(skill_id,skill_lv));
+ if( !sc_start(bl,SC_STUN,3,skill_lv,skill->get_time(skill_id,skill_lv)) )
+ sc_start(bl,SC_BLIND,3,skill_lv,skill->get_time2(skill_id,skill_lv));
break;
case NPC_DARKCROSS:
@@ -1182,7 +1169,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
sc_start4(bl,SC_BURNING,5+5*skill_lv,skill_lv,0,src->id,0,skill->get_time(skill_id,skill_lv));
break;
case RK_DRAGONBREATH_WATER:
- sc_start4(bl,SC_FROSTMISTY,5+5*skill_lv,skill_lv,0,src->id,0,skill->get_time(skill_id,skill_lv));
+ sc_start(bl,SC_FROSTMISTY,5+5*skill_lv,skill_lv,skill->get_time(skill_id,skill_lv));
break;
case AB_ADORAMUS:
if( tsc && !tsc->data[SC_DEC_AGI] ) //Prevent duplicate agi-down effect.
@@ -1344,7 +1331,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
rate = 5 + 5 * skill_lv;
if( sc && sc->data[SC_COOLER_OPTION] )
rate += rate * sc->data[SC_COOLER_OPTION]->val2 / 100;
- sc_start(bl, SC_CRYSTALIZE, rate, skill_lv, skill->get_time2(skill_id, skill_lv));
+ sc_start(bl, SC_COLD, rate, skill_lv, skill->get_time2(skill_id, skill_lv));
break;
case SO_VARETYR_SPEAR:
sc_start(bl, SC_STUN, 5 + 5 * skill_lv, skill_lv, skill->get_time2(skill_id, skill_lv));
@@ -7676,9 +7663,24 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case NPC_WIDESTUN:
case NPC_SLOWCAST:
case NPC_WIDEHELLDIGNITY:
- if (flag&1)
- sc_start2(bl,type,100,skill_lv,src->id,skill->get_time2(skill_id,skill_lv));
- else {
+ case NPC_WIDEHEALTHFEAR:
+ case NPC_WIDEBODYBURNNING:
+ case NPC_WIDEFROSTMISTY:
+ case NPC_WIDECOLD:
+ case NPC_WIDE_DEEP_SLEEP:
+ case NPC_WIDESIREN:
+ if (flag&1){
+ switch( type ){
+ case SC_BURNING:
+ sc_start4(bl,type,100,skill_lv,0,src->id,0,skill->get_time2(skill_id,skill_lv));
+ break;
+ case SC_SIREN:
+ sc_start2(bl,type,100,skill_lv,src->id,skill->get_time2(skill_id,skill_lv));
+ break;
+ default:
+ sc_start2(bl,type,100,skill_lv,src->id,skill->get_time2(skill_id,skill_lv));
+ }
+ }else {
skill_area_temp[2] = 0; //For SD_PREAMBLE
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
iMap->foreachinrange(skill->area_sub, bl,
@@ -7939,7 +7941,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case AB_LAUDAAGNUS:
if( flag&1 || sd == NULL ) {
if( tsc && (tsc->data[SC_FREEZE] || tsc->data[SC_STONE] || tsc->data[SC_BLIND] ||
- tsc->data[SC_BURNING] || tsc->data[SC_FROSTMISTY] || tsc->data[SC_CRYSTALIZE])) {
+ tsc->data[SC_BURNING] || tsc->data[SC_FROSTMISTY] || tsc->data[SC_COLD])) {
// Success Chance: (40 + 10 * Skill Level) %
if( rnd()%100 > 40+10*skill_lv ) break;
status_change_end(bl, SC_FREEZE, INVALID_TIMER);
@@ -7947,7 +7949,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
status_change_end(bl, SC_BLIND, INVALID_TIMER);
status_change_end(bl, SC_BURNING, INVALID_TIMER);
status_change_end(bl, SC_FROSTMISTY, INVALID_TIMER);
- status_change_end(bl, SC_CRYSTALIZE, INVALID_TIMER);
+ status_change_end(bl, SC_COLD, INVALID_TIMER);
}else //Success rate only applies to the curing effect and not stat bonus. Bonus status only applies to non infected targets
clif->skill_nodamage(bl, bl, skill_id, skill_lv,
sc_start(bl, type, 100, skill_lv, skill->get_time(skill_id, skill_lv)));
@@ -8037,9 +8039,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
else if(bl->type == BL_PC) rate += 20 + 10 * skill_lv; // On Players, (20 + 10 * Skill Level) %
else rate += 40 + 10 * skill_lv; // On Monsters, (40 + 10 * Skill Level) %
- if( sd )
- skill->blockpc_start(sd,skill_id,4000, false);
-
if( !(tsc && tsc->data[type]) ){
i = sc_start2(bl,type,rate,skill_lv,src->id,(src == bl)?5000:(bl->type == BL_PC)?skill->get_time(skill_id,skill_lv):skill->get_time2(skill_id, skill_lv));
clif->skill_nodamage(src,bl,skill_id,skill_lv,i);
@@ -8451,7 +8450,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case SC_BLOODING: case SC_CURSE:
case SC_CONFUSION: case SC_ILLUSION:
case SC_SILENCE: case SC_BURNING:
- case SC_CRYSTALIZE: case SC_FROSTMISTY:
+ case SC_COLD: case SC_FROSTMISTY:
case SC_DEEP_SLEEP: case SC_FEAR:
case SC_MANDRAGORA:
status_change_end(bl, (sc_type)i, INVALID_TIMER);
@@ -8556,7 +8555,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
status_change_end(bl, SC_POISON, INVALID_TIMER);
status_change_end(bl, SC_SILENCE, INVALID_TIMER);
status_change_end(bl, SC_BLIND, INVALID_TIMER);
- status_change_end(bl, SC_ILLUSION, INVALID_TIMER);
+ status_change_end(bl, SC_ILLUSION, INVALID_TIMER);
status_change_end(bl, SC_BURNING, INVALID_TIMER);
status_change_end(bl, SC_FROSTMISTY, INVALID_TIMER);
}
@@ -11801,7 +11800,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
if( battle->check_target(&src->bl,bl,BCT_ENEMY) > 0 ){
switch( sg->unit_id ){
case UNT_ZENKAI_WATER:
- sc_start(bl, SC_CRYSTALIZE, sg->val1*5, sg->skill_lv, skill->get_time2(sg->skill_id, sg->skill_lv));
+ sc_start(bl, SC_COLD, sg->val1*5, sg->skill_lv, skill->get_time2(sg->skill_id, sg->skill_lv));
sc_start(bl, SC_FREEZE, sg->val1*5, sg->skill_lv, skill->get_time2(sg->skill_id, sg->skill_lv));
sc_start(bl, SC_FROSTMISTY, sg->val1*5, sg->skill_lv, skill->get_time2(sg->skill_id, sg->skill_lv));
break;
@@ -16875,16 +16874,24 @@ int skill_blockpc_end(int tid, unsigned int tick, int id, intptr_t data) {
int i,cursor;
ARR_FIND( 0, cd->cursor+1, cursor, cd->skidx[cursor] == data );
cd->duration[cursor] = 0;
+#if PACKETVER >= 20120604
+ cd->total[cursor] = 0;
+#endif
cd->skidx[cursor] = 0;
cd->nameid[cursor] = 0;
+ cd->started[cursor] = 0;
// compact the cool down list
for( i = 0, cursor = 0; i < cd->cursor; i++ ) {
if( cd->duration[i] == 0 )
continue;
if( cursor != i ) {
cd->duration[cursor] = cd->duration[i];
+#if PACKETVER >= 20120604
+ cd->total[cursor] = cd->total[i];
+#endif
cd->skidx[cursor] = cd->skidx[i];
cd->nameid[cursor] = cd->nameid[i];
+ cd->started[cursor] = cd->started[i];
}
cursor++;
}
@@ -16920,7 +16927,7 @@ int skill_blockpc_start_(struct map_session_data *sd, uint16 skill_id, int tick,
return -1;
}
- if( battle_config.display_status_timers )
+ if( !load && battle_config.display_status_timers )
clif->skill_cooldown(sd, skill_id, tick);
if( !load ) {// not being loaded initially so ensure the skill delay is recorded
@@ -16931,8 +16938,12 @@ int skill_blockpc_start_(struct map_session_data *sd, uint16 skill_id, int tick,
// record the skill duration in the database map
cd->duration[cd->cursor] = tick;
+#if PACKETVER >= 20120604
+ cd->total[cd->cursor] = tick;
+#endif
cd->skidx[cd->cursor] = idx;
cd->nameid[cd->cursor] = skill_id;
+ cd->started[cd->cursor] = iTimer->gettick();
cd->cursor++;
}
@@ -17425,13 +17436,37 @@ int skill_get_elemental_type( uint16 skill_id , uint16 skill_lv ) {
}
/**
+ * update stored skill cooldowns for player logout
+ * @param sd the affected player structure
+ */
+void skill_cooldown_save(struct map_session_data * sd) {
+ int i;
+ struct skill_cd* cd = NULL;
+ unsigned int now = 0;
+
+ // always check to make sure the session properly exists
+ nullpo_retv(sd);
+
+ if( !(cd = idb_get(skillcd_db, sd->status.char_id)) ) {// no skill cooldown is associated with this character
+ return;
+ }
+
+ now = iTimer->gettick();
+
+ // process each individual cooldown associated with the character
+ for( i = 0; i < cd->cursor; i++ ) {
+ cd->duration[i] = DIFF_TICK(cd->started[i]+cd->duration[i],now);
+ }
+}
+
+/**
* reload stored skill cooldowns when a player logs in.
* @param sd the affected player structure
*/
-void skill_cooldown_load(struct map_session_data * sd)
-{
+void skill_cooldown_load(struct map_session_data * sd) {
int i;
struct skill_cd* cd = NULL;
+ unsigned int now = 0;
// always check to make sure the session properly exists
nullpo_retv(sd);
@@ -17440,8 +17475,13 @@ void skill_cooldown_load(struct map_session_data * sd)
return;
}
+ clif->cooldown_list(sd->fd,cd);
+
+ now = iTimer->gettick();
+
// process each individual cooldown associated with the character
for( i = 0; i < cd->cursor; i++ ) {
+ cd->started[i] = now;
// block the skill from usage but ensure it is not recorded (load = true)
skill->blockpc_start( sd, cd->nameid[i], cd->duration[i], true );
}
@@ -18132,5 +18172,6 @@ void skill_defaults(void) {
skill->elementalanalysis = skill_elementalanalysis;
skill->changematerial = skill_changematerial;
skill->get_elemental_type = skill_get_elemental_type;
+ skill->cooldown_save = skill_cooldown_save;
}
diff --git a/src/map/skill.h b/src/map/skill.h
index 921a682a2..fceef5556 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -1714,11 +1714,29 @@ struct s_skill_magicmushroom_db {
extern struct s_skill_magicmushroom_db skill_magicmushroom_db[MAX_SKILL_MAGICMUSHROOM_DB];
/**
+ * Skill Cool Down Delay Saving
+ * Struct skill_cd is not a member of struct map_session_data
+ * to keep cooldowns in memory between player log-ins.
+ * All cooldowns are reset when server is restarted.
+ **/
+struct skill_cd {
+ int duration[MAX_SKILL_TREE];//milliseconds
+#if PACKETVER >= 20120604
+ int total[MAX_SKILL_TREE];
+#endif
+ short skidx[MAX_SKILL_TREE];//the skill index entries belong to
+ short nameid[MAX_SKILL_TREE];//skill id
+ unsigned int started[MAX_SKILL_TREE];
+ unsigned char cursor;
+};
+
+/**
* Vars
**/
extern int enchant_eff[5];
extern int deluge_eff[5];
DBMap* skilldb_name2id;
+DBMap* skillcd_db; // char_id -> struct skill_cd
/**
* Skill.c Interface
@@ -1917,7 +1935,8 @@ struct skill_interface {
int (*elementalanalysis) (struct map_session_data *sd, int n, uint16 skill_lv, unsigned short *item_list);
int (*changematerial) (struct map_session_data *sd, int n, unsigned short *item_list);
int (*get_elemental_type) (uint16 skill_id, uint16 skill_lv);
-} skill_s;
+ void (*cooldown_save) (struct map_session_data * sd);
+};
struct skill_interface *skill;
diff --git a/src/map/status.c b/src/map/status.c
index dc5d5c5bd..64c591b3b 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -214,7 +214,12 @@ void initChangeTables(void) {
add_sc( TF_POISON , SC_POISON );
set_sc( KN_TWOHANDQUICKEN , SC_TWOHANDQUICKEN , SI_TWOHANDQUICKEN , SCB_ASPD );
add_sc( KN_AUTOCOUNTER , SC_AUTOCOUNTER );
- set_sc( PR_IMPOSITIO , SC_IMPOSITIO , SI_IMPOSITIO , SCB_WATK );
+ set_sc( PR_IMPOSITIO , SC_IMPOSITIO , SI_IMPOSITIO ,
+#ifdef RENEWAL
+ SCB_NONE );
+#else
+ SCB_WATK );
+#endif
set_sc( PR_SUFFRAGIUM , SC_SUFFRAGIUM , SI_SUFFRAGIUM , SCB_NONE );
set_sc( PR_ASPERSIO , SC_ASPERSIO , SI_ASPERSIO , SCB_ATK_ELE );
set_sc( PR_BENEDICTIO , SC_BENEDICTIO , SI_BENEDICTIO , SCB_DEF_ELE );
@@ -427,10 +432,20 @@ void initChangeTables(void) {
add_sc( GS_CRACKER , SC_STUN );
add_sc( GS_DISARM , SC_NOEQUIPWEAPON );
add_sc( GS_PIERCINGSHOT , SC_BLOODING );
- set_sc( GS_MADNESSCANCEL , SC_GS_MADNESSCANCEL , SI_GS_MADNESSCANCEL , SCB_BATK|SCB_ASPD );
+ set_sc( GS_MADNESSCANCEL , SC_GS_MADNESSCANCEL , SI_GS_MADNESSCANCEL , SCB_ASPD
+#ifndef RENEWAL
+ |SCB_BATK );
+#else
+ );
+#endif
set_sc( GS_ADJUSTMENT , SC_GS_ADJUSTMENT , SI_GS_ADJUSTMENT , SCB_HIT|SCB_FLEE );
set_sc( GS_INCREASING , SC_GS_ACCURACY , SI_GS_ACCURACY , SCB_AGI|SCB_DEX|SCB_HIT );
- set_sc( GS_GATLINGFEVER , SC_GS_GATLINGFEVER , SI_GS_GATLINGFEVER , SCB_BATK|SCB_FLEE|SCB_SPEED|SCB_ASPD );
+ set_sc( GS_GATLINGFEVER , SC_GS_GATLINGFEVER , SI_GS_GATLINGFEVER , SCB_FLEE|SCB_SPEED|SCB_ASPD
+#ifndef RENEWAL
+ |SCB_BATK );
+#else
+ );
+#endif
set_sc( NJ_TATAMIGAESHI , SC_NJ_TATAMIGAESHI , SI_BLANK , SCB_NONE );
set_sc( NJ_SUITON , SC_NJ_SUITON , SI_NJ_SUITON , SCB_AGI|SCB_SPEED );
add_sc( NJ_HYOUSYOURAKU , SC_FREEZE );
@@ -691,7 +706,7 @@ void initChangeTables(void) {
set_sc( SO_FIREWALK , SC_PROPERTYWALK , SI_PROPERTYWALK , SCB_NONE );
set_sc( SO_ELECTRICWALK , SC_PROPERTYWALK , SI_PROPERTYWALK , SCB_NONE );
set_sc( SO_SPELLFIST , SC_SPELLFIST , SI_SPELLFIST , SCB_NONE );
- set_sc_with_vfx( SO_DIAMONDDUST , SC_CRYSTALIZE , SI_COLD , SCB_NONE ); // it does show the snow icon on mobs but doesn't affect it.
+ set_sc_with_vfx( SO_DIAMONDDUST , SC_COLD , SI_COLD , SCB_NONE ); // it does show the snow icon on mobs but doesn't affect it.
add_sc( SO_CLOUD_KILL , SC_POISON );
set_sc( SO_STRIKING , SC_STRIKING , SI_STRIKING , SCB_WATK|SCB_CRI );
set_sc( SO_WARMER , SC_WARMER , SI_WARMER , SCB_NONE );
@@ -759,6 +774,13 @@ void initChangeTables(void) {
add_sc( ALL_REVERSEORCISH , SC_ORCISH );
set_sc( ALL_ANGEL_PROTECT , SC_ANGEL_PROTECT , SI_ANGEL_PROTECT , SCB_REGEN );
+
+ add_sc( NPC_WIDEHEALTHFEAR , SC_FEAR );
+ add_sc( NPC_WIDEBODYBURNNING , SC_BURNING );
+ add_sc( NPC_WIDEFROSTMISTY , SC_FROSTMISTY );
+ add_sc( NPC_WIDECOLD , SC_COLD );
+ add_sc( NPC_WIDE_DEEP_SLEEP , SC_DEEP_SLEEP );
+ add_sc( NPC_WIDESIREN , SC_SIREN );
// Storing the target job rather than simply SC_SOULLINK simplifies code later on.
SkillStatusChangeTable[SL_ALCHEMIST] = (sc_type)MAPID_ALCHEMIST,
@@ -1019,7 +1041,7 @@ void initChangeTables(void) {
StatusDisplayType[SC_HALLUCINATIONWALK] = true;
StatusDisplayType[SC_ROLLINGCUTTER] = true;
StatusDisplayType[SC_BANDING] = true;
- StatusDisplayType[SC_CRYSTALIZE] = true;
+ StatusDisplayType[SC_COLD] = true;
StatusDisplayType[SC_DEEP_SLEEP] = true;
StatusDisplayType[SC_CURSEDCIRCLE_ATKER]= true;
StatusDisplayType[SC_CURSEDCIRCLE_TARGET]= true;
@@ -1533,7 +1555,7 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
//on dead characters, said checks are left to skill.c [Skotlex]
if (target && status_isdead(target))
return 0;
- if( src && (sc = status_get_sc(src)) && sc->data[SC_CRYSTALIZE] && src->type != BL_MOB)
+ if( src && (sc = status_get_sc(src)) && sc->data[SC_COLD] && src->type != BL_MOB)
return 0;
}
@@ -1653,7 +1675,7 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
sc->data[SC_OBLIVIONCURSE] ||
sc->data[SC_WHITEIMPRISON] ||
sc->data[SC__INVISIBILITY] ||
- (sc->data[SC_CRYSTALIZE] && src->type != BL_MOB) ||
+ (sc->data[SC_COLD] && src->type != BL_MOB) ||
sc->data[SC__IGNORANCE] ||
sc->data[SC_DEEP_SLEEP] ||
sc->data[SC_SATURDAY_NIGHT_FEVER] ||
@@ -3026,7 +3048,11 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
sd->subele[ELE_FIRE] += skill*10;
}
if((skill=pc->checkskill(sd,SA_DRAGONOLOGY))>0 ){
+#ifdef RENEWAL
+ skill = skill*2;
+#else
skill = skill*4;
+#endif
sd->right_weapon.addrace[RC_DRAGON]+=skill;
sd->left_weapon.addrace[RC_DRAGON]+=skill;
sd->magic_addrace[RC_DRAGON]+=skill;
@@ -4419,13 +4445,13 @@ static unsigned short status_calc_batk(struct block_list *bl, struct status_chan
#ifndef RENEWAL
if(sc->data[SC_PLUSATTACKPOWER])
batk += sc->data[SC_PLUSATTACKPOWER]->val1;
+ if(sc->data[SC_GS_MADNESSCANCEL])
+ batk += 100;
+ if(sc->data[SC_GS_GATLINGFEVER])
+ batk += sc->data[SC_GS_GATLINGFEVER]->val3;
#endif
if(sc->data[SC_BATKFOOD])
batk += sc->data[SC_BATKFOOD]->val1;
- if(sc->data[SC_GS_GATLINGFEVER])
- batk += sc->data[SC_GS_GATLINGFEVER]->val3;
- if(sc->data[SC_GS_MADNESSCANCEL])
- batk += 100;
if(sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 2)
batk += 50;
if(bl->type == BL_ELEM
@@ -4498,13 +4524,14 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan
watk += sc->data[SC_GENTLETOUCH_CHANGE]->val2;
return (unsigned short)cap_value(watk,0,USHRT_MAX);
}
-
+#ifndef RENEWAL
if(sc->data[SC_IMPOSITIO])
watk += sc->data[SC_IMPOSITIO]->val2;
- if(sc->data[SC_WATKFOOD])
- watk += sc->data[SC_WATKFOOD]->val1;
if(sc->data[SC_DRUMBATTLE])
watk += sc->data[SC_DRUMBATTLE]->val2;
+#endif
+ if(sc->data[SC_WATKFOOD])
+ watk += sc->data[SC_WATKFOOD]->val1;
if(sc->data[SC_VOLCANO])
watk += sc->data[SC_VOLCANO]->val2;
if(sc->data[SC_MER_ATK])
@@ -4525,19 +4552,18 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan
watk -= sc->data[SC_WATER_BARRIER]->val3;
if( sc->data[SC_PYROTECHNIC_OPTION] )
watk += sc->data[SC_PYROTECHNIC_OPTION]->val2;
+
+#ifndef RENEWAL
if(sc->data[SC_NIBELUNGEN]) {
if (bl->type != BL_PC)
watk += sc->data[SC_NIBELUNGEN]->val2;
else {
- #ifndef RENEWAL
TBL_PC *sd = (TBL_PC*)bl;
int index = sd->equip_index[sd->state.lr_flag?EQI_HAND_L:EQI_HAND_R];
if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->wlv == 4)
- #endif
watk += sc->data[SC_NIBELUNGEN]->val2;
}
}
-#ifndef RENEWAL
if(sc->data[SC_STRIKING])
watk += sc->data[SC_STRIKING]->val2;
if(sc->data[SC_GENTLETOUCH_CHANGE] && sc->data[SC_GENTLETOUCH_CHANGE]->val2)
@@ -6309,7 +6335,7 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
break;
case SC_FROSTMISTY:
tick -= 1000 * ((status->vit + status->dex) / 20);
- tick = max(tick,6000); // Minimum Duration 10s.
+ tick = max(tick,6000); // Minimum Duration 6s.
break;
case SC_OBLIVIONCURSE: // 100% - (100 - 0.8 x INT)
sc_def = 100 - ( 100 - status->int_* 8 / 10 );
@@ -6323,9 +6349,13 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
if( bl->type == BL_MOB )
tick -= 1000 * (status->agi/10);
break;
- case SC_CRYSTALIZE:
+ case SC_COLD:
tick -= (1000*(status->vit/10))+(status_get_lv(bl)/50);
break;
+ case SC_SIREN:
+ tick -= 1000 * ((status_get_lv(bl) / 10) + ((sd?sd->status.job_level:0) / 5));
+ tick = max(tick,10000);
+ break;
case SC_MANDRAGORA:
sc_def = (status->vit+status->luk)/5;
break;
@@ -6545,7 +6575,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_PYREXIA:
case SC_OBLIVIONCURSE:
case SC_LEECHESEND:
- case SC_CRYSTALIZE: ////08/31/2011 - Class Balance Changes
+ case SC_COLD: ////08/31/2011 - Class Balance Changes
case SC_DEEP_SLEEP:
case SC_MANDRAGORA:
return 0;
@@ -6612,10 +6642,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_SLEEP:
case SC_STUN:
case SC_FROSTMISTY:
- case SC_CRYSTALIZE:
+ case SC_COLD:
if (sc->opt1)
return 0; //Cannot override other opt1 status changes. [Skotlex]
- if((type == SC_FREEZE || type == SC_FROSTMISTY || type == SC_CRYSTALIZE) && sc->data[SC_WARMER])
+ if((type == SC_FREEZE || type == SC_FROSTMISTY || type == SC_COLD) && sc->data[SC_WARMER])
return 0; //Immune to Frozen and Freezing status if under Warmer status. [Jobbie]
break;
@@ -6903,7 +6933,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_ADORAMUS:
case SC_NEEDLE_OF_PARALYZE:
case SC_DEEP_SLEEP:
- case SC_CRYSTALIZE:
+ case SC_COLD:
// Exploit prevention - kRO Fix
case SC_PYREXIA:
@@ -7937,8 +7967,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
// gs_something1 [Vicious]
case SC_GS_GATLINGFEVER:
val2 = 20*val1; //Aspd increase
- val3 = 20+10*val1; //Batk increase
val4 = 5*val1; //Flee decrease
+#ifndef RENEWAL
+ val3 = 20+10*val1; //Batk increase
+#endif
break;
case SC_FLING:
@@ -8244,7 +8276,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
}
break;
case SC_ELECTRICSHOCKER:
- case SC_CRYSTALIZE:
+ case SC_COLD:
case SC_MEIKYOUSISUI:
val4 = tick / 1000;
if( val4 < 1 )
@@ -8331,7 +8363,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_WARMER:
status_change_end(bl, SC_FREEZE, INVALID_TIMER);
status_change_end(bl, SC_FROSTMISTY, INVALID_TIMER);
- status_change_end(bl, SC_CRYSTALIZE, INVALID_TIMER);
+ status_change_end(bl, SC_COLD, INVALID_TIMER);
break;
case SC_STRIKING:
val1 = 6 - val1;//spcost = 6 - level (lvl1:5 ... lvl 5: 1)
@@ -8805,7 +8837,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_WUGBITE:
case SC_THORNS_TRAP:
case SC__MANHOLE:
- case SC_CRYSTALIZE:
+ case SC_COLD:
case SC_CURSEDCIRCLE_ATKER:
case SC_CURSEDCIRCLE_TARGET:
case SC_FEAR:
@@ -8867,7 +8899,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_SLEEP: sc->opt1 = OPT1_SLEEP; break;
case SC_BURNING: sc->opt1 = OPT1_BURNING; break; // Burning need this to be showed correctly. [pakpil]
case SC_WHITEIMPRISON: sc->opt1 = OPT1_IMPRISON; break;
- case SC_CRYSTALIZE: sc->opt1 = OPT1_CRYSTALIZE; break;
+ case SC_COLD: sc->opt1 = OPT1_CRYSTALIZE; break;
//OPT2
case SC_POISON: sc->opt2 |= OPT2_POISON; break;
case SC_CURSE: sc->opt2 |= OPT2_CURSE; break;
@@ -9728,7 +9760,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
case SC_DEEP_SLEEP:
case SC_BURNING:
case SC_WHITEIMPRISON:
- case SC_CRYSTALIZE:
+ case SC_COLD:
sc->opt1 = 0;
break;
@@ -10613,7 +10645,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
}
break;
- case SC_CRYSTALIZE:
+ case SC_COLD:
if( --(sce->val4) > 0 )
{ // Drains 2% of HP and 1% of SP every seconds.
if( bl->type != BL_MOB) // doesn't work on mobs
@@ -11032,7 +11064,7 @@ int status_change_clear_buffs (struct block_list* bl, int type)
switch (i) {
case SC_DEEP_SLEEP:
case SC_FROSTMISTY:
- case SC_CRYSTALIZE:
+ case SC_COLD:
case SC_TOXIN:
case SC_PARALYSE:
case SC_VENOMBLEED:
diff --git a/src/map/status.h b/src/map/status.h
index a469dc71f..380b49879 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -462,7 +462,7 @@ typedef enum sc_type {
* Sorcerer
**/
SC_SPELLFIST,
- SC_CRYSTALIZE,
+ SC_COLD,
SC_STRIKING,
SC_WARMER,
SC_VACUUM_EXTREME,
diff --git a/src/map/storage.c b/src/map/storage.c
index 5b3c75d58..7a4649a98 100644
--- a/src/map/storage.c
+++ b/src/map/storage.c
@@ -24,6 +24,9 @@
#include <stdlib.h>
#include <string.h>
+struct storage_interface storage_s;
+struct guild_storage_interface gstorage_s;
+
/*==========================================
* Sort items in the warehouse
*------------------------------------------*/
diff --git a/src/map/storage.h b/src/map/storage.h
index fc05ef06c..83243a622 100644
--- a/src/map/storage.h
+++ b/src/map/storage.h
@@ -26,7 +26,7 @@ struct storage_interface {
int (*gettocart) (struct map_session_data *sd,int index,int amount);
void (*close) (struct map_session_data *sd);
void (*pc_quit) (struct map_session_data *sd, int flag);
-} storage_s;
+};
struct storage_interface *storage;
struct guild_storage_interface {
@@ -46,7 +46,7 @@ struct guild_storage_interface {
int (*pc_quit) (struct map_session_data *sd,int flag);
int (*save) (int account_id, int guild_id, int flag);
int (*saved) (int guild_id); //Ack from char server that guild store was saved.
-} gstorage_s;
+};
struct guild_storage_interface *gstorage;
diff --git a/src/map/trade.c b/src/map/trade.c
index c44f04884..13b5f5431 100644
--- a/src/map/trade.c
+++ b/src/map/trade.c
@@ -24,6 +24,8 @@
//Max distance from traders to enable a trade to take place.
#define TRADE_DISTANCE 2
+struct trade_interface trade_s;
+
/*==========================================
* Initiates a trade request.
*------------------------------------------*/
diff --git a/src/map/trade.h b/src/map/trade.h
index 8bf918ad2..e8ac4a8c4 100644
--- a/src/map/trade.h
+++ b/src/map/trade.h
@@ -17,7 +17,7 @@ struct trade_interface {
void (*ok) (struct map_session_data *sd);
void (*cancel) (struct map_session_data *sd);
void (*commit) (struct map_session_data *sd);
-} trade_s;
+};
struct trade_interface *trade;
diff --git a/src/map/unit.c b/src/map/unit.c
index 5e836dc2e..e5affb0c2 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -945,7 +945,7 @@ int unit_can_move(struct block_list *bl) {
|| sc->data[SC__MANHOLE]
|| sc->data[SC_CURSEDCIRCLE_ATKER]
|| sc->data[SC_CURSEDCIRCLE_TARGET]
- || (sc->data[SC_CRYSTALIZE] && bl->type != BL_MOB)
+ || (sc->data[SC_COLD] && bl->type != BL_MOB)
|| sc->data[SC_NETHERWORLD]
|| (sc->data[SC_CAMOUFLAGE] && sc->data[SC_CAMOUFLAGE]->val1 < 3 && !(sc->data[SC_CAMOUFLAGE]->val3&1))
|| sc->data[SC_MEIKYOUSISUI]
diff --git a/src/map/vending.c b/src/map/vending.c
index 898008a3a..2784d46a2 100644
--- a/src/map/vending.c
+++ b/src/map/vending.c
@@ -21,6 +21,8 @@
#include <stdio.h>
#include <string.h>
+struct vending_interface vending_s;
+
/// Returns an unique vending shop id.
static inline unsigned int getid(void) {
return vending->next_id++;
diff --git a/src/map/vending.h b/src/map/vending.h
index 0148deb71..1b4381ccd 100644
--- a/src/map/vending.h
+++ b/src/map/vending.h
@@ -29,7 +29,7 @@ struct vending_interface {
void (*purchase) (struct map_session_data* sd, int aid, unsigned int uid, const uint8* data, int count);
bool (*search) (struct map_session_data* sd, unsigned short nameid);
bool (*searchall) (struct map_session_data* sd, const struct s_search_store_search* s);
-} vending_s;
+};
struct vending_interface * vending;