소스 검색

DB Import2

Add db/import-tmpl/ and add all file that could currently be
overwritten, (please add note if a db is missing)

db/import folder is created by "make import" just like conf/import and
msg_conff/import, (didn't found the visual equivalent)
lighta 11 년 전
부모
커밋
ff29c234cc
82개의 변경된 파일2459개의 추가작업 그리고 97개의 파일을 삭제
  1. 3 0
      .gitignore
  2. 5 2
      Makefile.in
  3. 14 0
      db/import-tmpl/abra_db.txt
  4. 6 0
      db/import-tmpl/attr_fix.txt
  5. 11 0
      db/import-tmpl/castle_db.txt
  6. 12 0
      db/import-tmpl/create_arrow_db.txt
  7. 9 0
      db/import-tmpl/elemental_db.txt
  8. 7 0
      db/import-tmpl/elemental_skill_db.txt
  9. 2 0
      db/import-tmpl/exp_guild.txt
  10. 1 0
      db/import-tmpl/exp_homun.txt
  11. 13 0
      db/import-tmpl/guild_skill_tree.txt
  12. 15 0
      db/import-tmpl/homun_skill_tree.txt
  13. 20 0
      db/import-tmpl/homunculus_db.txt
  14. 5 0
      db/import-tmpl/instance_db.txt
  15. 11 0
      db/import-tmpl/item_avail.txt
  16. 10 0
      db/import-tmpl/item_buyingstore.txt
  17. 18 0
      db/import-tmpl/item_cash_db.txt
  18. 5 0
      db/import-tmpl/item_combo_db.txt
  19. 63 0
      db/import-tmpl/item_db.txt
  20. 8 0
      db/import-tmpl/item_delay.txt
  21. 2 0
      db/import-tmpl/item_group_db.txt
  22. 27 0
      db/import-tmpl/item_noequip.txt
  23. 137 0
      db/import-tmpl/item_nouse.txt
  24. 18 0
      db/import-tmpl/item_stack.txt
  25. 22 0
      db/import-tmpl/item_trade.txt
  26. 14 0
      db/import-tmpl/job_basehpsp_db.txt
  27. 5 0
      db/import-tmpl/job_db1.txt
  28. 14 0
      db/import-tmpl/job_db2.txt
  29. 9 0
      db/import-tmpl/job_exp.txt
  30. 15 0
      db/import-tmpl/job_param_db.txt
  31. 13 0
      db/import-tmpl/level_penalty.txt
  32. 29 0
      db/import-tmpl/magicmushroom_db.txt
  33. 987 0
      db/import-tmpl/map_index.txt
  34. 5 0
      db/import-tmpl/mercenary_db.txt
  35. 4 0
      db/import-tmpl/mercenary_skill_db.txt
  36. 16 0
      db/import-tmpl/mob_avail.txt
  37. 5 0
      db/import-tmpl/mob_boss.txt
  38. 5 0
      db/import-tmpl/mob_branch.txt
  39. 46 0
      db/import-tmpl/mob_chat_db.txt
  40. 5 0
      db/import-tmpl/mob_classchange.txt
  41. 47 0
      db/import-tmpl/mob_db.txt
  42. 30 0
      db/import-tmpl/mob_item_ratio.txt
  43. 5 0
      db/import-tmpl/mob_poring.txt
  44. 4 0
      db/import-tmpl/mob_pouch.txt
  45. 6 0
      db/import-tmpl/mob_race2_db.txt
  46. 137 0
      db/import-tmpl/mob_skill_db.txt
  47. 35 0
      db/import-tmpl/packet_db.txt
  48. 60 0
      db/import-tmpl/pet_db.txt
  49. 9 0
      db/import-tmpl/produce_db.txt
  50. 5 0
      db/import-tmpl/quest_db.txt
  51. 32 0
      db/import-tmpl/refine_db.txt
  52. 7 0
      db/import-tmpl/size_fix.txt
  53. 17 0
      db/import-tmpl/skill_cast_db.txt
  54. 16 0
      db/import-tmpl/skill_castnodex_db.txt
  55. 8 0
      db/import-tmpl/skill_changematerial_db.txt
  56. 51 0
      db/import-tmpl/skill_copyable_db.txt
  57. 36 0
      db/import-tmpl/skill_damage_db.txt
  58. 66 0
      db/import-tmpl/skill_db.txt
  59. 5 0
      db/import-tmpl/skill_improvise_db.txt
  60. 24 0
      db/import-tmpl/skill_nocast_db.txt
  61. 28 0
      db/import-tmpl/skill_nonearnpc_db.txt
  62. 33 0
      db/import-tmpl/skill_require_db.txt
  63. 1 0
      db/import-tmpl/skill_tree.txt
  64. 29 0
      db/import-tmpl/skill_unit_db.txt
  65. 7 0
      db/import-tmpl/spellbook_db.txt
  66. 1 0
      db/import-tmpl/statpoint.txt
  67. 5 0
      db/import/item_combo_db.txt
  68. 5 0
      db/import/mob_boss.txt
  69. 5 0
      db/import/mob_branch.txt
  70. 5 0
      db/import/mob_classchange.txt
  71. 5 0
      db/import/mob_poring.txt
  72. 4 0
      db/import/mob_pouch.txt
  73. 1 1
      db/packet_db.txt
  74. 5 1
      src/char/int_guild.c
  75. 18 4
      src/map/guild.c
  76. 13 24
      src/map/homunculus.c
  77. 10 10
      src/map/itemdb.c
  78. 10 2
      src/map/mercenary.c
  79. 1 1
      src/map/mob.c
  80. 1 1
      src/map/pc.c
  81. 3 5
      src/map/pet.c
  82. 53 46
      src/map/quest.c

+ 3 - 0
.gitignore

@@ -40,6 +40,9 @@
 /3rdparty/mt19937ar/Makefile
 /3rdparty/mt19937ar/*.o
 
+# /db/
+/db/import
+
 # /conf/
 /conf/import
 /conf/msg_conf/import

+ 5 - 2
Makefile.in

@@ -64,13 +64,16 @@ import:
 # 1) create conf/import folder
 # 2) add missing files
 # 3) remove remaining .svn folder
-	@echo "building conf/import and conf/msg_conf/import folder..."
+	@echo "building conf/import, conf/msg_conf/import and db/import folder..."
 	@if test ! -d conf/import ; then mkdir conf/import ; fi
 	@for f in $$(ls conf/import-tmpl) ; do if test ! -e conf/import/$$f ; then cp conf/import-tmpl/$$f conf/import ; fi ; done
 	@rm -rf conf/import/.svn
 	@if test ! -d conf/msg_conf/import ; then mkdir conf/msg_conf/import ; fi
 	@for f in $$(ls conf/msg_conf/import-tmpl) ; do if test ! -e conf/msg_conf/import/$$f ; then cp conf/msg_conf/import-tmpl/$$f conf/msg_conf/import ; fi ; done
 	@rm -rf conf/msg_conf/import/.svn
+	@if test ! -d db/import ; then mkdir db/import ; fi
+	@for f in $$(ls db/import-tmpl) ; do if test ! -e db/import/$$f ; then cp db/import-tmpl/$$f db/import ; fi ; done
+	@rm -rf db/import/.svn
 
 clean:
 	@$(MAKE) -C src/common $@
@@ -92,7 +95,7 @@ help:
 	@echo "'char'        - builds char server"
 	@echo "'map'        - builds map server"
 	@echo "'tools'       - builds all the tools in src/tools"
-	@echo "'import'      - builds conf/import folder from the template conf/import-tmpl"
+	@echo "'import'      - builds conf/import, conf/msg_conf/import and db/import folders from their template folders (x-tmpl)"
 	@echo "'all'         - builds all the above targets"
 	@echo "'sql'         - builds servers (targets 'common_sql' 'login' 'char' 'map' and 'import')"
 	@echo "'test'        - builds tests"

+ 14 - 0
db/import-tmpl/abra_db.txt

@@ -0,0 +1,14 @@
+// Hocus-Pocus (Abracadabra) Castable Skills Database
+//
+// Structure of Database:
+// SkillID,DummyName,RatePerLvl
+//
+// 01. SkillID                  Skill ID to be casted by hocus pocus.
+// 02. DummyName                Name of the skill (informative, not used by server).
+// 03. RatePerLvl               Chance at which the skill is selected (1 = 0.01%, 10000 = 100%).
+//
+// NOTE: The skill is picked at random from the entire database and then tested for rate. If it
+//       does not succeed at that rate, another skill is picked and tested. This continues
+//       until a skill succeeds. Abracadabra-specific skills have a different chance to occur
+//       depending on skill level used. All other skills have an equal chance and appear from
+//       level 1 onward.

+ 6 - 0
db/import-tmpl/attr_fix.txt

@@ -0,0 +1,6 @@
+// Elemental Attribute Damage Adjustment Tables
+//
+// Structure of Database:
+// Columns - attacker's weapon element
+// Rows    - target's defense element
+

+ 11 - 0
db/import-tmpl/castle_db.txt

@@ -0,0 +1,11 @@
+// Guild Castles Database
+//
+// Structure of Database:
+// CastleID,MapName,CastleName,OnGuildBreakEventName,Flag
+//
+// 01. CastleID                 Unique ID of the castle. Must remain unique across all map-servers.
+// 02. MapName                  Map name to be considered as the castle map.
+// 03. CastleName               Name of the castle (used by scripts and guardian name tags).
+// 04. OnGuildBreakEventName    NPC unique name to invoke ::OnGuildBreak on, when a occupied
+//                              castle is abandoned during guild break.
+// 05. Flag                     Switch flag (reserved as of athena-dev mod0796~0801, not used by server).

+ 12 - 0
db/import-tmpl/create_arrow_db.txt

@@ -0,0 +1,12 @@
+// Arrow Crafting Database
+//
+// Structure of Database:
+// SourceID,MakeID1,MakeAmount1,...,MakeID5,MakeAmount5
+//
+// 01. SourceID     ID of the item, that is consumed by Arrow Crafting.
+// 02. MakeID       ID of the item received from Arrow Crafting.
+// 03. MakeAmount   Amount of MakeID item received from Arrow Crafting.
+// ...
+//
+// NOTE: Up to MAX_ARROW_RESOURCE (typically 5) ID/Amount pairs can be specified.
+

+ 9 - 0
db/import-tmpl/elemental_db.txt

@@ -0,0 +1,9 @@
+// Elemental Summons Database
+//
+// Structure of Database:
+// ID,Sprite_Name,Name,LV,HP,SP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Speed,aDelay,aMotion,dMotion
+//
+// Notes:
+// Summoned Elemental’s STATs are affected by the Caster’s Base Level and STATs.
+// In other words, all values specified will be added to (and will not override) the calculated STATs of the summoned elemental.
+

+ 7 - 0
db/import-tmpl/elemental_skill_db.txt

@@ -0,0 +1,7 @@
+// Elemental Summons Skill Database
+//
+// Structure of Database:
+// ElementalID,SkillID,SkillLevel,ReqMode
+//
+// Spirit Modes:
+//	1 = Passive, 2 = Defensive, 4 = Aggressive

+ 2 - 0
db/import-tmpl/exp_guild.txt

@@ -0,0 +1,2 @@
+// Guild Experience Tables
+

+ 1 - 0
db/import-tmpl/exp_homun.txt

@@ -0,0 +1 @@
+// Homunculus Experience Tables

+ 13 - 0
db/import-tmpl/guild_skill_tree.txt

@@ -0,0 +1,13 @@
+// Guild Skill Tree Database
+//
+// Structure of Database:
+// SkillID,MaxLv,Prerequisite SkillID1,Prerequisite SkillLv1,PrereqSkillID2,PrereqSkillLv2,PrereqSkillID3,PrereqSkillLv3,PrereqSkillID4,PrereqSkillLv4,PrereqSkillID5,PrereqSkillLv5	//GUILD SKILLNAME#Skill Name#
+//
+// 01. SkillID                  Skill ID of the guild skill.
+// 02. MaxLv                    Maximum level of the guild skill.
+// 03. Prerequisite SkillID     Guild skill required for the skill to become available.
+// 04. Prerequisite SkillLv     Level of the required guild skill.
+// ...
+//
+// NOTE: MAX_GUILD_SKILL_REQUIRE (typically 5) ID/Lv pairs must be specified.
+

+ 15 - 0
db/import-tmpl/homun_skill_tree.txt

@@ -0,0 +1,15 @@
+// Homunculus Skill Tree Database
+//
+// Structure of Database:
+// Class,SkillID,MaxLv[,JobLevel],Prerequisite SkillID1,Prerequisite SkillLv1,PrereqSkillID2,PrereqSkillLv2,PrereqSkillID3,PrereqSkillLv3,PrereqSkillID4,PrereqSkillLv4,PrereqSkillID5,PrereqSkillLv5,IntimacyLvReq //SKILLNAME#Skill Name#
+//
+// 01. Class                    Homunculus ID.
+// 02. SkillID                  Skill ID of the homunuculus skill.
+// 03. MaxLv                    Maximum level of the homunuculus skill.
+// 04. JobLevel                 Job level required for the skill to become available (optional, reserved, not used by server).
+// 05. Prerequisite SkillID     Homunculus skill required for the skill to become available.
+// 06. Prerequisite SkillLv     Level of the required homunculus skill.
+// ...
+// 15. IntimacyLvReq			Minimum level of intimacy to unlock skill.
+//
+// NOTE: MAX_PC_SKILL_REQUIRE (typically 5) ID/Lv pairs must be specified.

+ 20 - 0
db/import-tmpl/homunculus_db.txt

@@ -0,0 +1,20 @@
+// Homunculus Database
+//
+// Structure of Database:
+// Class,EvoClass,Name,FoodID,HungryDelay,BaseSize,EvoSize,Race,Element,bASPD,bHP,bSP,bSTR,bAGI,bVIT,bINT,bDEX,bLUK,gnHP,gxHP,gnSP,gxSP,gnSTR,gxSTR,gnAGI,gxAGI,gnVIT,gxVIT,gnINT,gxINT,gnDEX,gxDEX,gnLUK,gxLUK,enHP,exHP,enSP,exSP,enSTR,exSTR,enAGI,exAGI,enVIT,exVIT,enINT,exINT,enDEX,exDEX,enLUK,exLUK
+//
+// 01. Class        Homunculus ID.
+// 02. EvoClass     Homunculus ID of the evolved version.
+// 03. Name         Name of the homunculus.
+// 04. FoodID       Item ID of the homunuclus food.
+// 05. HungryDelay  Time interval in milliseconds after which the homunculus' hunger value is altered.
+// 06. BaseSize     Size of the base homunculus class (0 = small, 1 = normal, 2 = large).
+// 07. EvoSize      Size of the evolved homunculus class (0 = small, 1 = normal, 2 = large).
+// 08. Race         Race of the homunculus (0 = formless, 1 = undead, 2 = brute, 3 = plant, 4 = insect, 5 = fish, 6 = demon, 7 = demi-human, 8 = angel, 9 = dragon).
+// 09. Element      Element of the homunculus (0 = neutral, 1 = water, 2 = earth, 3 = fire, 4 = wind, 5 = poison, 6 = holy, 7 = dark, 8 = ghost, 9 = undead).
+//                  The element level is always 1.
+// ...
+//
+// Legend: b: base, gn: growth min, gx: growth max, en: evolution min, ex: evolution max
+// NOTE: Only the growth values are in a 1/10 scale, the other stats are 1/1 (eg: 5 gmAGI means 0.5 agi)
+

+ 5 - 0
db/import-tmpl/instance_db.txt

@@ -0,0 +1,5 @@
+// Instance Database
+//
+// Structure of Database:
+// ID,Name,LimitTime,EnterMap,EnterX,EnterY,Map1,Map2,Map3,Map4,Map5,Map6,Map7,Map8
+

+ 11 - 0
db/import-tmpl/item_avail.txt

@@ -0,0 +1,11 @@
+// Item Availability and Alias Database
+//
+// Structure of Database:
+// ItemID,SpriteID
+//
+// 01. ItemID       Item ID to change.
+// 02. SpriteID     Item ID which will be sent to the client instead of ItemID.
+//                  If 0, the item becomes unavailable for use. If item_check is enabled and a player owns such an item, it will be removed upon next login/teleport.
+//
+// NOTE: Replaces an item client-side while keeping them separate server-side.
+// Think of it as a way to disguise items.

+ 10 - 0
db/import-tmpl/item_buyingstore.txt

@@ -0,0 +1,10 @@
+// Buying Store Item List
+// List of items that can be sold to buying stores.
+//
+// Structure of Database:
+// ItemID
+//
+// Note:
+//  Items are in same order as data\buyingstoreitemlist.txt, which
+//  must be edited as well for the client to accept added items.
+

+ 18 - 0
db/import-tmpl/item_cash_db.txt

@@ -0,0 +1,18 @@
+// Cash Shop Database
+// Contains the items sold in the ingame cash shop.
+//
+// Structure of Database:
+// Type,ItemID,Price
+//
+// Type:
+//    0: New
+//    1: Hot
+//    2: Limited
+//    3: Rental
+//    4: Gear
+//    5: Buff
+//    6: Heal
+//    7: Other
+//
+// Price:
+//    Item cost, in cash points (#CASHPOINTS).

+ 5 - 0
db/import-tmpl/item_combo_db.txt

@@ -0,0 +1,5 @@
+// Item Combos Database
+//
+// Structure of Database:
+// ID:ID:ID:ID,{ Script }
+

+ 63 - 0
db/import-tmpl/item_db.txt

@@ -0,0 +1,63 @@
+// Items Additional Database
+//
+// Structure of Database:
+// ID,Name,Name,Type,Price,Sell,Weight,ATK,DEF,Range,Slot,Job,Class,Gender,Loc,wLV,eLV,Refineable,View,{ Script },{ OnEquip_Script },{ OnUnequip_Script }
+//
+// THQ Quest Items
+//=============================================================
+//7950,THG_Membership,THG Membership,3,,10,10,,,,,,,,,,,,,{},{},{}
+//7951,Token_Bag,Token Bag,3,,10,10,,,,,,,,,,,,,{},{},{}
+//1998,Jeramiah's_Jur,Jeramiah's Jur,3,,10,10,,,,,,,,,,,,,{},{},{}
+//1999,Zed's_Staff,Zed's Staff,3,,10,10,,,,,,,,,,,,,{},{},{}
+
+// Official Event Items that had their Effects removed after the event was completed
+//585,Wurst,Brusti,11,2,,40,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(15,20),0; itemskill "PR_MAGNIFICAT",3; },{},{}
+//679,Gold_Pill,Pilule,0,5000,,300,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 50,50; },{},{}
+
+//2681,Republic_Ring,Republic Anniversary Ring,4,20,,100,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bAllStats,3; },{},{}
+
+//5134,Pumpkin_Hat,Pumpkin-Head,4,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,0,1,206,{ bonus2 bSubRace,RC_Demon,5; },{},{}
+//5136,Santa's_Hat_,Louise's Santa Hat,4,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,20,{ bonus bMdef,1; bonus bLuk,1; bonus3 bAutoSpellWhenHit,"AL_HEAL",3,50; bonus3 bAutoSpellWhenHit,"AL_BLESSING",10,50; },{},{}
+//5145,Carnival_Joker_Jester,Carnival Jester,4,10,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,89,{ bonus bAllStats,3; },{},{}
+//5147,Baseball_Cap,Baseball Cap,4,0,,200,,3,,0,0xFFFFFFFF,7,2,256,,0,1,216,{ bonus2 bExpAddRace,RC_Boss,50; bonus2 bExpAddRace,RC_NonBoss,50; },{},{}
+//5201,Party_Hat_B,2nd Anniversary Party Hat,4,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,0,1,144,{ bonus bAllStats,3; },{},{}
+//5202,Pumpkin_Hat_,Pumpkin Hat,4,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,0,1,206,{ bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,1500; },{},{}
+//5204,Event_Pierrot_Nose,Rudolf's Red Nose,4,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,49,{ bonus2 bResEff,Eff_Blind,3000; bonus2 bAddMonsterDropItem,12130,30; },{},{}
+//5264,Aussie_Flag_Hat,Australian Flag Hat,4,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,0,1,304,{ bonus bAllStats,2; },{},{}
+//5356,Pumpkin_Hat_H,Pumpkin Hat,4,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,0,1,206,{ bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus2 bMagicAddRace,RC_Demon,5; },{},{}
+//5811,Santa_Beard,Santa Beard,4,20,,100,,5,,0,0xFFFFFFFF,7,2,1,,0,0,25,{ bonus2 bSubRace,RC_Brute,5; },{},{}
+
+//11702,Moon_Cookie,Moon Cookie,11,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_end SC_Poison; sc_end SC_Silence; sc_end SC_Blind; sc_end SC_Confusion; sc_end SC_Curse; sc_end SC_Hallucination; itemskill "AL_BLESSING",7; },{},{}
+//12131,Lucky_Potion,Lucky Potion,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_LUKFood,180000,15; },{},{}
+//12143,Red_Can,Red Can,2,50000,,300,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 25,25; },{},{}
+//Event effect: Summon monster? Probably Rice_Cake. x_x
+//12199,Rice_Scroll,Rice Scroll,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+//12200,Event_Cake,Event Cake,2,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "PR_MAGNIFICAT",3; },{},{}
+//12238,New_Year_Rice_Cake_1,New Year Rice Cake,0,20,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 20,15; sc_start SC_STRFood,1200000,3; sc_start SC_INTFood,1200000,3; sc_start SC_LUKFood,1200000,3; sc_start SC_SpeedUp1,5000,0; },{},{}
+//12239,New_Year_Rice_Cake_2,New Year Rice Cake,0,20,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 20,15; sc_start SC_DEXFood,1200000,3; sc_start SC_AGIFood,1200000,3; sc_start SC_VITFood,1200000,3; sc_start SC_SpeedUp1,5000,0; },{},{}
+
+// iRO St. Patrick's Day Event 2008
+//=============================================================
+//12715,Black_Treasure_Chest,Black Treasure Chest,2,0,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ callfunc "F_08stpattyseventbox"; },{},{}
+
+// iRO Valentine's Day Event 2009
+//=============================================================
+//12742,Valentine_Gift_Box_M,Valentine Gift Box,2,10,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 7946,1; },{},{}
+//12743,Valentine_Gift_Box_F,Valentine Gift Box,2,10,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 7947,1; },{},{}
+//12744,Chocolate_Box,Chocolate Box,2,10,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 558,1; },{},{}
+//14466,Valentine's_Emblem_Box,Valentine's Emblem Box,2,10,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5817,1; },{},{}
+//7946,Gold_Ring_Of_Valentine,Gold Ring Of Valentine,3,10,,0,,,,,,,,,,,,,{},{},{}
+//7947,Silver_Ring_Of_Valentine,Silver Ring Of Valentine,3,10,,0,,,,,,,,,,,,,{},{},{}
+//7948,Box,Box,3,10,,10,,,,,,,,,,,,,{},{},{}
+//5817,Valentine's_Emblem,Valentine's Emblem,4,10,,0,,3,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bAtkRate,3; bonus bMatkRate,3; bonus bAllStats,2; bonus bFlee,10; bonus bAspd,1; bonus bMdef,3; bonus2 bSkillAtk,"AL_HEAL",10; bonus2 bSkillHeal,"AL_HEAL",10; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bAddItemHealRate,IG_Potion,10; },{},{}
+
+// iRO Halloween Event 2009
+//=============================================================
+//5668,Weird_Pumpkin_Hat,Weird Pumpkin Hat,4,20,,0,,5,,0,0xFFFFFFFF,7,2,256,,0,1,206,{ bonus bMdef,5; bonus2 bAddMonsterDropItem,12192,2500; },{},{}
+//6298,Crushed_Pumpkin,Crushed Pumpkin,3,0,,0,,,,,,,,,,,,,{},{},{}
+//6299,Worn_Fabric,Worn Fabric,3,0,,0,,,,,,,,,,,,,{},{},{}
+
+// Old Tuxedo and Wedding Dress, will display the outfit when worn.
+//==================================================================
+//2338,Wedding_Dress,Wedding Dress,4,43000,,500,,0,,0,0xFFFFFFFE,7,0,16,,0,1,0,{},{ setoption Option_Wedding,1; },{ setoption Option_Wedding,0; }
+//7170,Tuxedo,Tuxedo,4,43000,,10,,0,,0,0xFFFFFFFE,7,1,16,,0,1,0,{},{ setoption Option_Wedding,1; },{ setoption Option_Wedding,0; }

+ 8 - 0
db/import-tmpl/item_delay.txt

@@ -0,0 +1,8 @@
+// Item Delay Database
+//
+// Structure of Database:
+// Item ID,Delay in Milliseconds
+//
+// NOTE:
+// There is a max concurrent number of entries set in src/map/itemdb.h as MAX_ITEMDELAYS.
+

+ 2 - 0
db/import-tmpl/item_group_db.txt

@@ -0,0 +1,2 @@
+//import: db/import/item_groupid.txt
+

+ 27 - 0
db/import-tmpl/item_noequip.txt

@@ -0,0 +1,27 @@
+// Forbidden Items Database
+// Defines restrictions on equipment, items, and cards in map types and zones.
+//
+// Structure of Database:
+// ItemID,Flag
+//
+// Legend for 'Flag' field (bitmask):
+// 1    - restricted in normal maps
+// 2    - restricted in PVP
+// 4    - restricted in GVG
+// 8    - restricted in Battlegrounds
+// Restricted zones - configured by 'restricted <number>' mapflag
+// 32   - restricted in zone 1
+// 64   - restricted in zone 2
+// 128  - restricted in zone 3
+// 256  - restricted in zone 4
+// 512  - restricted in zone 5
+// 1024 - restricted in zone 6
+// 2048 - restricted in zone 7
+//
+// Examples:
+// 1201,1   // Knife can't be worn on normal maps
+// 608,4    // Yggdrasil Seed can't be consumed in both GvG and WoE Castles
+// 4174,6   // Deviling Card has no effect in every PVP or GVG map, and during WoE
+// 501,32   // Red Potion can't be consumed on maps marked as 'restricted zone 1'
+// 519,322  // Milk can't be consumed in PVP and maps marked as 'restricted zone 2' or 'restricted zone 4' (256+64+2)
+

+ 137 - 0
db/import-tmpl/item_nouse.txt

@@ -0,0 +1,137 @@
+// Item Usage Restriction Configuration File
+// Defines if an item cannot be used under special circumstances.
+//
+// Structure of Database:
+// ItemID,Flag,Group ID Override
+//
+// Flag:
+//	1 = Cannot use item while sitting
+//	... [more to come]
+//
+// Group ID Override:
+//	Group ID necessary to override this setting.
+
+619,1,100	// Unripe_Apple
+620,1,100	// Orange_Juice
+621,1,100	// Bitter_Herb
+622,1,100	// Rainbow_Carrot
+623,1,100	// Earthworm_The_Dude
+624,1,100	// Rotten_Fish
+625,1,100	// Lusty_Iron
+626,1,100	// Monster_Juice
+627,1,100	// Sweet_Milk
+628,1,100	// Well_Dried_Bone
+629,1,100	// Singing_Flower
+630,1,100	// Dew_Laden_Moss
+631,1,100	// Deadly_Noxious_Herb
+632,1,100	// Fatty_Chubby_Earthworm
+633,1,100	// Baked_Yam
+634,1,100	// Tropical_Banana
+635,1,100	// Horror_Of_Tribe
+636,1,100	// No_Recipient
+637,1,100	// Old_Broom
+638,1,100	// Silver_Knife_Of_Chaste
+639,1,100	// Armlet_Of_Obedience
+640,1,100	// Shining_Stone
+641,1,100	// Contracts_In_Shadow
+642,1,100	// Book_Of_Devil
+659,1,100	// Heart_Of_Her
+660,1,100	// Prohibition_Red_Candle
+661,1,100	// Sway_Apron
+686,1,100	// Earth_Scroll_1_3
+687,1,100	// Earth_Scroll_1_5
+688,1,100	// Cold_Scroll_1_3
+689,1,100	// Cold_Scroll_1_5
+690,1,100	// Fire_Scroll_1_3
+691,1,100	// Fire_Scroll_1_5
+692,1,100	// Wind_Scroll_1_3
+693,1,100	// Wind_Scroll_1_5
+694,1,100	// Ghost_Scroll_1_3
+695,1,100	// Ghost_Scroll_1_5
+696,1,100	// Fire_Scroll_2_1
+697,1,100	// Fire_Scroll_2_5
+698,1,100	// Fire_Scroll_3_1
+699,1,100	// Fire_Scroll_3_5
+700,1,100	// Cold_Scroll_2_1
+11702,1,100	// Moon_Cookie
+12000,1,100	// Cold_Scroll_2_5
+12001,1,100	// Holy_Scroll_1_3
+12002,1,100	// Holy_Scroll_1_5
+12027,1,100	// Giggling_Box
+12028,1,100	// Box_Of_Thunder
+12029,1,100	// Gloomy_Box
+12030,1,100	// Box_Of_Grudge
+12031,1,100	// Sleepy_Box
+12032,1,100	// Box_Of_Storm
+12033,1,100	// Box_Of_Sunlight
+12034,1,100	// Painting_Box
+12215,1,100	// Blessing_10_Scroll
+12216,1,100	// Inc_Agi_10_Scroll
+12217,1,100	// Aspersio_5_Scroll
+12218,1,100	// Assumptio_5_Scroll
+12219,1,100	// Wind_Walk_10_Scroll
+12220,1,100	// Adrenaline_Scroll
+12225,1,100	// Sweet_Candy_Striper
+12235,1,100	// Strawberry_Choco
+12236,1,100	// Choco_Tart
+12237,1,100	// Choco_Lump
+12290,1,100	// Mysterious_Can
+12291,1,100	// Mysterious_PET_Bottle
+12310,1,100	// Spray_Of_Flowers
+12311,1,100	// Large_Spray_Of_Flowers
+12313,1,100	// Protection_Of_Angel
+12323,1,100	// N_Fly_Wing
+12324,1,100	// N_Butterfly_Wing
+12325,1,100	// N_Magnifier
+12340,1,100	// Mysterious_Rice_Powder
+12347,1,100	// Acorn_Jelly
+12350,1,100	// Angeling_Potion
+12358,1,100	// Fan_Of_Wind
+12359,1,100	// Very_Soft_Plant
+12360,1,100	// Very_Red_Juice
+12361,1,100	// Delicious_Shaved_Ice
+12362,1,100	// Kuloren
+12363,1,100	// Fit_Pipe
+12364,1,100	// Staff_Of_Leader
+12365,1,100	// Charming_Lotus
+12366,1,100	// Gril_Doll
+12367,1,100	// Luxury_Whisky_Bottle
+12368,1,100	// Splendid_Mirror
+12369,1,100	// Oilpalm_Coconut
+12370,1,100	// Gril's_Naivety
+12371,1,100	// Magical_Lithography
+12372,1,100	// Hell_Contract
+12373,1,100	// Boy's_Naivety
+12374,1,100	// Flaming_Ice
+12376,1,100	// Mysterious_Can2
+12377,1,100	// Mysterious_PET_Bottle2
+12388,1,100	// Runstone_Crush
+12389,1,100	// Runstone_Storm
+12390,1,100	// Runstone_Millennium
+12396,1,100	// Fools_Day_Box
+12397,1,100	// Fools_Day_Box2
+12415,1,100	// Siege_Teleport_Scroll2
+12473,1,100	// RWC_Parti_Box
+12474,1,100	// RWC_Final_Comp_Box
+12706,1,100	// Lucky_Cookie01
+12707,1,100	// Lucky_Cookie02
+12708,1,100	// Lucky_Cookie03
+12725,1,100	// Runstone_Nosiege
+12726,1,100	// Runstone_Rhydo
+12727,1,100	// Runstone_Verkana
+12728,1,100	// Runstone_Isia
+12729,1,100	// Runstone_Asir
+12730,1,100	// Runstone_Urj
+12731,1,100	// Runstone_Turisus
+12732,1,100	// Runstone_Pertz
+12733,1,100	// Runstone_Hagalas
+14521,1,100	// Repair_Scroll
+14529,1,100	// Greed_Scroll
+14532,1,100	// Battle_Manual25
+14587,1,100	// Repair_Scroll_
+14591,1,100	// Siege_Teleport_Scroll
+14592,1,100	// Job_Manual50
+14593,1,100	// Magic_Power_Scroll
+14594,1,100	// Quagmire_Scroll
+14599,1,100	// Greed_Scroll_C
+14606,1,100	// Job_Manual25

+ 18 - 0
db/import-tmpl/item_stack.txt

@@ -0,0 +1,18 @@
+// Item Stacking Restriction File
+// Prevents an item to be stacked more than x times in given
+// inventory types. Generally used by 3rd class related skill items.
+//
+// Structure of Database:
+// ItemID,MaxStackAmount,Type
+//
+// MaxStackAmount:
+//	Stack limit for the item. Use 0 to disable a restriction.
+//
+// Type mask values:
+//	&1: Character inventory restriction
+//	&2: Character cart restriction
+//	&4: Account storage restriction
+//	&8: Guild storage restriction
+//
+// Example:
+// 512,4,12  // Will not allow more than 4 Apples in storages.

+ 22 - 0
db/import-tmpl/item_trade.txt

@@ -0,0 +1,22 @@
+// Item Trade Restrictions Database
+// Defines special trade rules for individual items.
+//
+// Structure of Database:
+// Item ID, TradeMask,Group Level Override
+//
+// Legend for 'TradeMask' field (bitmask):
+// 1   - item can't be dropped
+// 2   - item can't be traded (nor vended)
+// 4   - wedded partner can override restriction 2
+// 8   - item can't be sold to npcs
+// 16  - item can't be placed in the cart
+// 32  - item can't be placed in the storage
+// 64  - item can't be placed in the guild storage
+// 128 - item can't be attached to mail
+// 256 - item can't be auctioned
+//
+// Example:
+// 1161,67,50
+//	Balmung cannot be dropped, traded, or placed in Guild Storage (1+2+64).
+//	Only groups of group-level 50 and up can override this setting.
+

+ 14 - 0
db/import-tmpl/job_basehpsp_db.txt

@@ -0,0 +1,14 @@
+// Base HP/SP Tables
+// Supports up to base level 500.
+//
+// Structure of Database:
+// StartLevel,EndLevel,JobID,Type,Base value for Lv 1,2,...,Base value for 'Max level'
+//
+// Type:
+//	0 = BaseHP, 1 = BaseSP
+
+//===============================
+// Base HP Table
+// According to base HP calculation on http://irowiki.org/wiki/Max_HP
+//===============================
+

+ 5 - 0
db/import-tmpl/job_db1.txt

@@ -0,0 +1,5 @@
+// Job-specific Values Database
+//
+// Structure of Database:
+// JobID,Weight,HPFactor,HPMultiplicator,SPFactor,Unarmed,Dagger,1HSword,2HSword,1HSpear,2HSpear,1HAxe,2HAxe,1HMace,2HMace(unused),Rod,Bow,Knuckle,Instrument,Whip,Book,Katar,Revolver,Rifle,Gatling Gun,Shotgun,Grenade Launcher,Fuuma Shuriken,2HStaff,Shield
+//

+ 14 - 0
db/import-tmpl/job_db2.txt

@@ -0,0 +1,14 @@
+// Job-specific Stat Bonuses Database
+//
+// Structure of Database:
+// JobID,JobLv1,JobLv2,JobLv3,...
+//
+// Legend for 'JobLvN' fields:
+//  0 = No stat bonus at this job level
+//  1 = STR increased by 1 at this job level
+//  2 = AGI increased by 1 at this job level
+//  3 = VIT increased by 1 at this job level
+//  4 = INT increased by 1 at this job level
+//  5 = DEX increased by 1 at this job level
+//  6 = LUK increased by 1 at this job level
+

+ 9 - 0
db/import-tmpl/job_exp.txt

@@ -0,0 +1,9 @@
+// Experience Tables [Renewal]
+// Supports up to base level 1000 and job level 255 (excluding Novice/High Novice).
+//
+// Structure of Database:
+// Max Level,Class list,Type,Exp for Lv 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98
+//
+// Type:
+//	0 = Base Exp, 1 = Job Exp
+

+ 15 - 0
db/import-tmpl/job_param_db.txt

@@ -0,0 +1,15 @@
+// Max Parameter Database
+// Sets maximum stat parameters for specific jobs.
+//
+// Structure of Database:
+// JobID,MaxParam
+//	OR
+// JobID,MaxStr,MaxAgi,MaxVit,MaxInt,MaxDex,MaxLuk
+//
+// JobID: Job constants in 'db/const.txt'
+// MaxParams: Value between 10 ~ 32767 (SHRT_MAX)
+//
+// Examples:
+// Job_Novice,60
+//	Normally, Novice's max. param uses 'max_parameter' in 'conf/battle/player.conf'.
+//	With this config, Novice's max. param will be 60 (for all stats).

+ 13 - 0
db/import-tmpl/level_penalty.txt

@@ -0,0 +1,13 @@
+// Experience & Drop Rate Modifier Database
+//
+// Structure of Database:
+// Type,Class,Level difference,Rate
+//
+// TYPE:
+//   1=experience, 2=item drop
+// CLASS:
+//   0=Normal monsters, 1=Boss monsters, 2=Guardians
+//
+// Note: RENEWAL_DROP and/or RENEWAL_EXP must be enabled.
+
+// EXP modifiers due to level difference

+ 29 - 0
db/import-tmpl/magicmushroom_db.txt

@@ -0,0 +1,29 @@
+// Magic Mushroom Database
+// List of skills that are randomly used through Magic Mushroom status change.
+//
+// Structure of Database:
+// SkillID
+
+7	//SM_MAGNUM
+8	//SM_ENDURE
+10	//MG_SIGHT
+24	//AL_RUWACH
+32	//AL_CRUCIS
+33	//AL_ANGELUS
+45	//AC_CONCENTRATION
+61	//KN_AUTOCOUNTER
+74	//PR_MAGNIFICAT
+110	//BS_HAMMERFALL
+114	//BS_MAXIMIZE
+142	//NV_FIRSTAID
+150	//TF_BACKSLIDING
+151	//TF_PICKSTONE
+157	//MG_ENERGYCOAT
+249	//CR_AUTOGUARD
+256	//CR_PROVIDENCE
+261	//MO_CALLSPIRITS
+270	//MO_EXPLOSIONSPIRITS
+326	//DC_SCREAM
+500	//GS_GLITTERING
+527	//NJ_TATAMIGAESHI
+531	//NJ_UTSUSEMI

+ 987 - 0
db/import-tmpl/map_index.txt

@@ -0,0 +1,987 @@
+//======================================================================================
+// Map Index
+//======================================================================================
+//Contains the list of maps with their respective IDs for inter-server use.
+//IDs must never change, therefore any new maps need to be added at the end,
+//and old ones must not be removed, but may be replaced.
+//Format:
+//mapname<tab>index <- specifies index for this map
+//mapname <- map will use index of previous map +1
+//Note that map index 0 is special and reserved for "error" status. 
+
+alb_ship 1
+alb2trea
+alberta
+alberta_in
+alde_dun01
+alde_dun02
+alde_dun03
+alde_dun04
+aldeba_in
+aldebaran
+anthell01
+anthell02
+arena_room
+c_tower1
+c_tower2
+c_tower3
+c_tower4
+force_1-1
+force_1-2
+force_1-3
+force_2-1
+force_2-2
+force_2-3
+force_3-1
+force_3-2
+force_3-3
+gef_dun00
+gef_dun01
+gef_dun02
+gef_dun03
+gef_fild00
+gef_fild01
+gef_fild02
+gef_fild03
+gef_fild04
+gef_fild05
+gef_fild06
+gef_fild07
+gef_fild08
+gef_fild09
+gef_fild10
+gef_fild11
+gef_fild12
+gef_fild13
+gef_fild14
+gef_tower
+geffen
+geffen_in
+gl_cas01
+gl_cas02
+gl_church
+gl_chyard
+gl_dun01
+gl_dun02
+gl_in01
+gl_knt01
+gl_knt02
+gl_prison
+gl_prison1
+gl_sew01
+gl_sew02
+gl_sew03
+gl_sew04
+gl_step
+glast_01
+hunter_1-1
+hunter_2-1
+hunter_3-1
+in_hunter
+in_moc_16
+in_orcs01
+in_sphinx1
+in_sphinx2
+in_sphinx3
+in_sphinx4
+in_sphinx5
+iz_dun00
+iz_dun01
+iz_dun02
+iz_dun03
+iz_dun04
+job_sword1
+izlu2dun
+izlude
+izlude_in
+job_thief1
+knight_1-1
+knight_2-1
+knight_3-1
+mjo_dun01
+mjo_dun02
+mjo_dun03
+mjolnir_01
+mjolnir_02
+mjolnir_03
+mjolnir_04
+mjolnir_05
+mjolnir_06
+mjolnir_07
+mjolnir_08
+mjolnir_09
+mjolnir_10
+mjolnir_11
+mjolnir_12
+moc_castle
+moc_fild01
+moc_fild02
+moc_fild03
+moc_fild04
+moc_fild05
+moc_fild06
+moc_fild07
+moc_fild08
+moc_fild09
+moc_fild10
+moc_fild11
+moc_fild12
+moc_fild13
+moc_fild14
+moc_fild15
+moc_fild16
+moc_fild17
+moc_fild18
+moc_fild19
+moc_pryd01
+moc_pryd02
+moc_pryd03
+moc_pryd04
+moc_pryd05
+moc_pryd06
+moc_prydb1
+moc_ruins
+monk_in
+morocc
+morocc_in
+new_1-1
+new_1-2
+new_1-3
+new_1-4
+new_2-1
+new_2-2
+new_2-3
+new_2-4
+new_3-1
+new_3-2
+new_3-3
+new_3-4
+new_4-1
+new_4-2
+new_4-3
+new_4-4
+new_5-1
+new_5-2
+new_5-3
+new_5-4
+orcsdun01
+orcsdun02
+ordeal_1-1
+ordeal_1-2
+//ordeal_1-3
+//ordeal_1-4
+ordeal_2-1
+ordeal_2-2
+//ordeal_2-3
+//ordeal_2-4
+ordeal_3-1
+ordeal_3-2
+//ordeal_3-3
+//ordeal_3-4
+pay_arche
+pay_dun00
+pay_dun01
+pay_dun02
+pay_dun03
+pay_dun04
+pay_fild01
+pay_fild02
+pay_fild03
+pay_fild04
+pay_fild05
+pay_fild06
+pay_fild07
+pay_fild08
+pay_fild09
+pay_fild10
+pay_fild11
+payon
+payon_in01
+payon_in02
+priest_1-1
+priest_2-1
+priest_3-1
+prontera
+prt_are_in
+prt_are01
+pvp_room
+prt_castle
+prt_church
+prt_fild00
+prt_fild01
+prt_fild02
+prt_fild03
+prt_fild04
+prt_fild05
+prt_fild06
+prt_fild07
+prt_fild08
+prt_fild09
+prt_fild10
+prt_fild11
+prt_in
+prt_maze01
+prt_maze02
+prt_maze03
+prt_monk
+prt_sewb1
+prt_sewb2
+prt_sewb3
+prt_sewb4
+pvp_2vs2
+pvp_c_room
+pvp_n_1-1
+pvp_n_1-2
+pvp_n_1-3
+pvp_n_1-4
+pvp_n_1-5
+pvp_n_2-1
+pvp_n_2-2
+pvp_n_2-3
+pvp_n_2-4
+pvp_n_2-5
+pvp_n_3-1
+pvp_n_3-2
+pvp_n_3-3
+pvp_n_3-4
+pvp_n_3-5
+pvp_n_4-1
+pvp_n_4-2
+pvp_n_4-3
+pvp_n_4-4
+pvp_n_4-5
+pvp_n_5-1
+pvp_n_5-2
+pvp_n_5-3
+pvp_n_5-4
+pvp_n_5-5
+pvp_n_6-1
+pvp_n_6-2
+pvp_n_6-3
+pvp_n_6-4
+pvp_n_6-5
+pvp_n_7-1
+pvp_n_7-2
+pvp_n_7-3
+pvp_n_7-4
+pvp_n_7-5
+pvp_n_8-1
+pvp_n_8-2
+pvp_n_8-3
+pvp_n_8-4
+pvp_n_8-5
+pvp_n_room
+pvp_y_1-1
+pvp_y_1-2
+pvp_y_1-3
+pvp_y_1-4
+pvp_y_1-5
+pvp_y_2-1
+pvp_y_2-2
+pvp_y_2-3
+pvp_y_2-4
+pvp_y_2-5
+pvp_y_3-1
+pvp_y_3-2
+pvp_y_3-3
+pvp_y_3-4
+pvp_y_3-5
+pvp_y_4-1
+pvp_y_4-2
+pvp_y_4-3
+pvp_y_4-4
+pvp_y_4-5
+pvp_y_5-1
+pvp_y_5-2
+pvp_y_5-3
+pvp_y_5-4
+pvp_y_5-5
+pvp_y_6-1
+pvp_y_6-2
+pvp_y_6-3
+pvp_y_6-4
+pvp_y_6-5
+pvp_y_7-1
+pvp_y_7-2
+pvp_y_7-3
+pvp_y_7-4
+pvp_y_7-5
+pvp_y_8-1
+pvp_y_8-2
+pvp_y_8-3
+pvp_y_8-4
+pvp_y_8-5
+pvp_y_room
+sword_1-1
+sword_2-1
+sword_3-1
+treasure01
+treasure02
+wizard_1-1
+wizard_2-1
+wizard_3-1
+xmas
+xmas_dun01
+xmas_dun02
+xmas_fild01
+xmas_in
+beach_dun
+beach_dun2
+beach_dun3
+cmd_fild01
+cmd_fild02
+cmd_fild03
+cmd_fild04
+cmd_fild05
+cmd_fild06
+cmd_fild07
+cmd_fild08
+cmd_fild09
+cmd_in01
+cmd_in02
+comodo
+quiz_00
+quiz_01
+g_room1-1
+g_room1-2
+g_room1-3
+g_room2
+tur_dun01
+tur_dun02
+tur_dun03
+tur_dun04
+tur_dun05
+tur_dun06
+alde_gld
+aldeg_cas01
+aldeg_cas02
+aldeg_cas03
+aldeg_cas04
+aldeg_cas05
+gefg_cas01
+gefg_cas02
+gefg_cas03
+gefg_cas04
+gefg_cas05
+gld_dun01
+gld_dun02
+gld_dun03
+gld_dun04
+guild_room
+guild_vs1
+guild_vs2
+guild_vs3
+guild_vs4
+guild_vs5
+guild_vs1-1
+guild_vs1-2
+guild_vs1-3
+guild_vs1-4
+guild_vs2-1
+guild_vs2-2
+job_hunte
+job_knt
+job_prist
+job_wiz
+pay_gld
+payg_cas01
+payg_cas02
+payg_cas03
+payg_cas04
+payg_cas05
+prt_gld
+prtg_cas01
+prtg_cas02
+prtg_cas03
+prtg_cas04
+prtg_cas05
+alde_alche
+in_rogue
+job_cru
+job_duncer
+job_monk
+job_sage
+mag_dun01
+mag_dun02
+monk_test
+quiz_test
+yuno
+yuno_fild01
+yuno_fild02
+yuno_fild03
+yuno_fild04
+yuno_in01
+yuno_in02
+yuno_in03
+yuno_in04
+yuno_in05
+ama_dun01
+ama_dun02
+ama_dun03
+ama_fild01
+ama_in01
+ama_in02
+ama_test
+amatsu
+gon_dun01
+gon_dun02
+gon_dun03
+gon_fild01
+gon_in
+gon_test
+gonryun
+sec_in01
+sec_in02
+sec_pri
+umbala
+um_dun01
+um_dun02
+um_fild01
+um_fild02
+um_fild03
+um_fild04
+um_in
+niflheim
+nif_fild01
+nif_fild02
+nif_in
+yggdrasil01
+valkyrie
+himinn
+lou_in01
+lou_in02
+lou_dun03
+lou_dun02
+lou_dun01
+lou_fild01
+louyang
+siege_test
+n_castle
+nguild_gef
+nguild_prt
+nguild_pay
+nguild_alde
+jawaii
+jawaii_in
+gefenia01
+gefenia02
+gefenia03
+gefenia04
+new_zone01
+new_zone02
+new_zone03
+new_zone04
+payon_in03
+ayothaya
+ayo_in01
+ayo_in02
+ayo_fild01
+ayo_fild02
+ayo_dun01
+ayo_dun02
+que_god01
+que_god02
+yuno_fild05
+yuno_fild07
+yuno_fild08
+yuno_fild09
+yuno_fild11
+yuno_fild12
+alde_tt02
+turbo_n_1
+turbo_n_4
+turbo_n_8
+turbo_n_16
+turbo_e_4
+turbo_e_8
+turbo_e_16
+turbo_room
+airplane
+airport
+einbech
+einbroch
+ein_dun01
+ein_dun02
+ein_fild06
+ein_fild07
+ein_fild08
+ein_fild09
+ein_fild10
+ein_in01
+que_sign01
+que_sign02
+ein_fild03
+ein_fild04
+lhz_fild02
+lhz_fild03
+yuno_pre
+lhz_fild01
+lighthalzen
+lhz_in01
+lhz_in02
+lhz_in03
+lhz_que01
+lhz_dun01
+lhz_dun02
+lhz_dun03
+lhz_cube
+juperos_01
+juperos_02
+jupe_area1
+jupe_area2
+jupe_core
+jupe_ele
+jupe_ele_r
+jupe_gate
+y_airport
+lhz_airport
+airplane_01
+jupe_cave
+quiz_02
+hu_fild07
+hu_fild05
+hu_fild04
+hu_fild01
+yuno_fild06
+job_soul
+job_star
+que_job01
+que_job02
+que_job03
+abyss_01
+abyss_02
+abyss_03
+thana_step
+thana_boss
+tha_scene01
+tha_t01
+tha_t02
+tha_t03
+tha_t04
+tha_t07
+tha_t05
+tha_t06
+tha_t08
+tha_t09
+tha_t10
+tha_t11
+tha_t12
+auction_01
+auction_02
+hugel
+hu_in01
+que_bingo
+que_hugel
+p_track01
+p_track02
+odin_tem01
+odin_tem02
+odin_tem03
+hu_fild02
+hu_fild03
+hu_fild06
+ein_fild01
+ein_fild02
+ein_fild05
+yuno_fild10
+kh_kiehl02
+kh_kiehl01
+kh_dun02
+kh_dun01
+kh_mansion
+kh_rossi
+kh_school
+kh_vila
+force_map1
+force_map2
+force_map3
+job_hunter
+job_knight
+job_priest
+job_wizard
+ve_in02
+rachel
+ra_in01
+ra_fild01
+ra_fild02
+ra_fild03
+ra_fild04
+ra_fild05
+ra_fild06
+ra_fild07
+ra_fild08
+ra_fild09
+ra_fild10
+ra_fild11
+ra_fild12
+ra_fild13
+ra_san01
+ra_san02
+ra_san03
+ra_san04
+ra_san05
+ra_temin
+ra_temple
+ra_temsky
+que_rachel
+ice_dun01
+ice_dun02
+ice_dun03
+ice_dun04
+que_thor
+thor_camp
+thor_v01
+thor_v02
+thor_v03
+veins
+ve_in
+ve_fild01
+ve_fild02
+ve_fild03
+ve_fild04
+ve_fild05
+ve_fild06
+ve_fild07
+poring_c01
+poring_c02
+que_ng
+nameless_i
+nameless_n
+nameless_in
+abbey01
+abbey02
+abbey03
+poring_w01
+poring_w02
+que_san04
+moscovia
+mosk_in
+mosk_ship
+mosk_fild01
+mosk_fild02
+mosk_dun01
+mosk_dun02
+mosk_dun03
+mosk_que
+force_4-1
+force_5-1
+06guild_r
+06guild_01
+06guild_02
+06guild_03
+06guild_04
+06guild_05
+06guild_06
+06guild_07
+06guild_08
+z_agit
+que_temsky
+itemmall
+bossnia_01
+bossnia_02
+bossnia_03
+bossnia_04
+schg_cas01
+schg_cas02
+schg_cas03
+schg_cas04
+schg_cas05
+sch_gld
+cave
+moc_fild20
+moc_fild21
+moc_fild22
+que_ba
+que_moc_16
+que_moon
+arug_cas01
+arug_cas02
+arug_cas03
+arug_cas04
+arug_cas05
+aru_gld
+bat_room
+bat_a01
+bat_a02
+bat_b01
+bat_b02
+que_qsch01
+que_qsch02
+que_qsch03
+que_qsch04
+que_qsch05
+que_qaru01
+que_qaru02
+que_qaru03
+que_qaru04
+que_qaru05
+1@cata
+2@cata
+e_tower
+1@tower
+2@tower
+3@tower
+4@tower
+5@tower
+6@tower
+mid_camp
+mid_campin
+man_fild01
+man_fild03
+spl_fild02
+spl_fild03
+moc_fild22b
+que_dan01
+que_dan02
+schg_que01
+schg_dun01
+arug_que01
+arug_dun01
+1@orcs
+2@orcs
+1@nyd
+2@nyd
+nyd_dun01
+nyd_dun02
+manuk
+man_fild02
+man_in01
+splendide
+spl_fild01
+spl_in01
+spl_in02
+bat_c01
+bat_c02
+bat_c03
+moc_para01
+job3_arch01
+job3_arch02
+job3_arch03
+job3_guil01
+job3_guil02
+job3_guil03
+job3_rang01
+job3_rang02
+job3_rune01
+job3_rune02
+job3_rune03
+job3_war01
+job3_war02
+jupe_core2
+brasilis
+bra_in01
+bra_fild01
+bra_dun01
+bra_dun02
+dicastes01
+dicastes02
+dic_in01
+dic_fild01
+dic_fild02
+dic_dun01
+dic_dun02
+job3_gen01
+s_atelier
+job3_sha01
+//evt_zombie
+//evt_coke
+//ac_sl_area
+//ac_cl_hall
+//ac_cl_room
+//jp_s_dun11
+mora
+bif_fild01
+bif_fild02
+1@mist
+dewata
+dew_in01
+dew_fild01
+dew_dun01
+dew_dun02
+que_house_s
+malangdo
+mal_in01
+mal_in02
+mal_dun01
+1@pump
+2@pump
+1@cash
+iz_dun05
+evt_mobroom
+alde_tt03
+dic_dun03
+//mjolnir_04_1
+1@lhz
+lhz_dun04
+que_lhz
+evt_swar_b
+evt_swar_r
+evt_swar_s
+evt_swar_t
+gld2_ald
+gld2_gef
+gld2_pay
+gld2_prt
+gld_dun01_2
+gld_dun02_2
+gld_dun03_2
+gld_dun04_2
+malaya
+job_ko
+ma_scene01
+1@ma_b
+1@ma_c
+1@ma_h
+ma_in01
+ma_dun01
+ma_fild01
+ma_fild02
+ma_zif01
+ma_zif02
+ma_zif03
+ma_zif04
+ma_zif05
+ma_zif06
+ma_zif07
+ma_zif08
+ma_zif09
+new_event
+eclage
+ecl_fild01
+ecl_tdun01
+ecl_tdun02
+ecl_tdun03
+ecl_tdun04
+que_avan01
+1@ecl
+ecl_in01
+ecl_in02
+ecl_in03
+ecl_in04
+ecl_hub01
+moc_prydn1
+moc_prydn2
+iz_ac01
+iz_ac02
+treasure_n1
+treasure_n2
+iz_int
+iz_ng01
+iz_int01
+iz_int02
+iz_int03
+iz_int04
+iz_ac01_a
+iz_ac02_a
+iz_ac01_b
+iz_ac02_b
+iz_ac01_c
+iz_ac02_c
+iz_ac01_d
+iz_ac02_d
+te_prtcas01
+te_prtcas02
+te_prtcas03
+te_prtcas04
+te_prtcas05
+te_aldecas1
+te_aldecas2
+te_aldecas3
+te_aldecas4
+te_aldecas5
+prt_fild08a
+prt_fild08b
+prt_fild08c
+prt_fild08d
+izlude_a
+izlude_b
+izlude_c
+izlude_d
+te_prt_gld
+te_alde_gld
+teg_dun01
+teg_dun02
+1@gl_k
+2@gl_k
+gl_chyard_
+gl_cas02_
+evt_bomb
+1@def01
+1@def02
+1@def03
+1@gef
+1@face
+1@sara
+1@gef_in
+dali
+
+// Only add maps under this line if they are not standard maps!
+
+
+//======================================================================================
+// - Other/Extra maps -
+//======================================================================================
+//rwc01	1000
+//rwc02
+//rwc03
+//2009rwc_f01
+//2009rwc_01
+//2009rwc_02
+//2009rwc_03
+//2009rwc_04
+//2008rwc_04
+//prontera_x
+//alberta_x
+//aldebaran_x
+//geffen_x
+//izlude_x
+//prt_church_x
+//prontera_s
+//pay_arche_s
+//xmas_old
+//ordeal_a00
+//ordeal_a02
+//fay_vilg00
+//fay_vilg01
+//gef_vilg00
+//gef_vilg01
+//moc_dugn01
+//moc_dugn02
+//moc_fild01
+//moc_fild02
+//moc_fild03
+//moc_fild04
+//moc_intr00
+//moc_intr01
+//moc_intr02
+//moc_intr04
+//moc_vilg00
+//moc_vilg01
+//moc_vilg02
+//probemap
+//probemap02
+//prt_cstl01
+//prt_dugn00
+//prt_dugn01
+//prt_fild00
+//prt_fild01
+//prt_fild03
+//prt_fild04
+//prt_fild05
+//prt_intr01
+//prt_intr01_a
+//prt_intr02
+//prt_vilg00
+//prt_vilg01
+//prt_vilg02
+//tank_test
+//tank_test2
+//test
+
+//======================================================================================
+//Place your custom maps with a starting ID here.
+//======================================================================================
+//Example:
+//
+//mymap	1250
+//mymap-2

+ 5 - 0
db/import-tmpl/mercenary_db.txt

@@ -0,0 +1,5 @@
+// Mercenary Database
+//
+// Structure of Database:
+// ID,Sprite_Name,Name,LV,HP,SP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Speed,aDelay,aMotion,dMotion
+

+ 4 - 0
db/import-tmpl/mercenary_skill_db.txt

@@ -0,0 +1,4 @@
+// Mercenary Skill Database
+//
+// Structure of Database:
+// MercenryID,SkillID,SkillLevel

+ 16 - 0
db/import-tmpl/mob_avail.txt

@@ -0,0 +1,16 @@
+// Mob Availability and Alias Database
+//
+// Structure of Database:
+// MobID,SpriteID{,Equipment}
+//
+// 01. MobID        Mob ID to change.
+// 02. SpriteID     Mob ID which will be sent to the client instead of MobID.
+//                  If 0, the mob becomes unavailable for use.
+// 03. Equipment    Item ID of pet equipment (must be available for pet counterpart, or this will cause problems).
+//
+// To disguise a mob as a player:
+// MobID,SpriteID,Sex,Hair_Style,Hair_Color,Weapon,Shield,Head_Top,Head_Middle,Head_Bottom,Option,Dye_Color
+//
+// SpriteID is a job class value.
+// Weapon and Shield uses Item ID, while Head uses View ID.
+

+ 5 - 0
db/import-tmpl/mob_boss.txt

@@ -0,0 +1,5 @@
+// Bloody Branch Summonable Monsters Database
+//
+// Structure of Database:
+// MobID,DummyName,Rate
+

+ 5 - 0
db/import-tmpl/mob_branch.txt

@@ -0,0 +1,5 @@
+// Dead Branch Summonable Monsters Database
+//
+// Structure of Database:
+// MobID,DummyName,Rate
+

+ 46 - 0
db/import-tmpl/mob_chat_db.txt

@@ -0,0 +1,46 @@
+// Monster Chat Database
+//
+// Structure of Database:
+// Line_ID#Color_Code#Dialog
+
+1#0xFF0000#Weakling! Challenge me if you have any courage!
+2#0xFF0000#Impressive! I wonder how far your recklessness will take you.
+3#0xFF0000#I almost pity how outmatched you are against me. Now prepare for my attack!
+4#0xFF0000#My loyal servants! Welcome them with a painful death!
+5#0xFF0000#Don't you run away!
+6#0xFF0000#You worthless humans. Your so-called holy powers have no effect on me!
+7#0xFF0000#Useless underlings!...Well, that's fine, I have more weapons to use and dispose.
+8#0xFF0000#Pray to your gods!
+9#0xFF0000#Do you still think you're a match to me?!
+10#0xFF0000#Vanish!
+11#0xFF0000#Let's see how long you can endure my power!
+12#0xFF0000#Is this all you've got?!
+13#0xFF0000#You're tickling me!
+14#0xFF0000#This is how you attack? Watch and learn, weaklings!
+15#0xFF0000#It's time to finish the game!
+16#0xFF0000#Oh, you're stronger than I thought!
+17#0xFF0000#No, this can't be happening! I'm Satan Morroc, Demon King of Destruction!
+18#0xFF0000#I can never die! I'll be coming back for you!
+19#0xFF0000#I was born to conquer this world! None shall stop me!
+20#0xFF0000#Your days are numbered!
+21#0xFF0000#Pulse Strike! My fingers tear steel!
+22#0xFF0000#Hahaha, tell me who I am! I'm Baphomet, the Heir of Hell!
+23#0xFF0000#Enjoy your time on the mortal plane while you can, your hope will soon turn into despair!
+24#0xFF0000#When are you going to learn your lesson? In death?
+25#0xFF0000#No... I can't lose! I won't beg for my life! I'm not running away! I don't accept this as defeat!
+26#0xFF0000#Argh... I... I'm weakening...
+27#0xFF0000#What do you want from me?
+28#0xFF0000#No! I didn't do this! He's the one who planned out all this!
+29#0xFF0000#I just wanted to find peace..!  That's why I have been fleeing away!
+30#0xFF0000#Ahhhh!!! Now, I just have to kill you all!
+31#0xFF0000#Annoying flies!! Get off of me!
+32#0xFF0000#Suffer in Hell!
+33#0xFF0000#Mwahahaha! Taste the anger of the earth!!!
+34#0xFF0000#No... I won't accept this as defeat!
+35#0xFF0000#Will it ease your loneliness to hit me?  Why don't you stay here with me forever, human?
+36#0xFF0000#You will forgot the meaning of time.  I wonder how long can you last in here...
+37#0xFF0000#Is there anyone waiting for you outside of here?  Throw them all away, you are mine now...
+38#0xFF0000#Discard your life and stay confined here.  You will yearn for freedom in captivity !!
+39#0xFF0000#How much will the outside world change if you stay here in solitude for one thousand years?
+40#0xFF0000#Yes! Yearn for your freedom from this confined place, your captivity here will be permanent !!
+

+ 5 - 0
db/import-tmpl/mob_classchange.txt

@@ -0,0 +1,5 @@
+// Class Change Summonable Monsters Database
+// List of monsters generated through Abracadabra's SA_CLASSCHANGE ability.
+//
+// Structure of Database:
+// MobID,DummyName,Rate

+ 47 - 0
db/import-tmpl/mob_db.txt

@@ -0,0 +1,47 @@
+// Monsters Additional Database
+//
+// Structure of Database :
+// ID,Sprite_Name,kROName,iROName,LV,HP,SP,EXP,JEXP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Mode,Speed,aDelay,aMotion,dMotion,MEXP,MVP1id,MVP1per,MVP2id,MVP2per,MVP3id,MVP3per,Drop1id,Drop1per,Drop2id,Drop2per,Drop3id,Drop3per,Drop4id,Drop4per,Drop5id,Drop5per,Drop6id,Drop6per,Drop7id,Drop7per,Drop8id,Drop8per,Drop9id,Drop9per,DropCardid,DropCardper
+
+// rAthena Dev Team
+//1900,VALARIS,Valaris,Valaris,99,668000,0,107250,37895,2,3220,4040,35,45,1,152,96,85,120,95,10,10,2,6,67,0x1973,100,1068,768,576,13000,608,1000,750,400,923,3800,1466,200,2256,200,2607,800,714,500,617,3000,984,4300,985,5600,0,0,0,0,4147,1
+//1901,VALARIS_WORSHIPPER,Valaris's Worshipper,Valaris's Worshipper,50,8578,0,2706,1480,1,487,590,15,25,1,75,55,1,93,45,10,12,0,6,27,0x1685,100,868,480,120,0,0,0,0,0,0,0,923,500,984,63,1464,2,607,50,610,100,503,300,2405,50,0,0,0,0,4129,1
+//1902,MC_CAMERI,MC Cameri,MC Cameri,99,668000,0,107250,37895,2,3220,4040,35,45,1,152,96,85,120,95,10,10,2,6,67,0x1973,100,1068,768,576,13000,608,1000,750,400,923,3800,1466,200,2256,200,2607,800,714,500,617,3000,984,4300,985,5600,0,0,0,0,4147,1
+//1903,POKI,Poki#3,Poki#3,99,1349000,0,4093000,1526000,9,4892,9113,22,35,1,180,39,67,193,130,10,12,1,7,64,0x1973,120,500,672,480,92100,603,5500,617,3000,1723,1000,1228,100,1236,500,617,2500,1234,75,1237,125,1722,250,1724,100,1720,50,0,0,0,0
+//1904,SENTRY,Sentry,Sentry,99,668000,0,107250,37895,2,3220,4040,35,45,1,152,96,85,120,95,10,10,2,6,67,0x1973,100,1068,768,576,13000,608,1000,750,400,923,3800,1466,200,2256,200,2607,800,714,500,617,3000,984,4300,985,5600,0,0,0,0,4147,1
+
+// Custom Hollow Poring (overrrides/collides with META_ANDRE)
+//1237,HOLLOW_PORING,Hollow Poring,Hollow Poring,1,50,0,2,1,1,7,10,0,5,1,1,1,0,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,909,7000,1202,100,938,400,512,1000,713,1500,512,150,619,20,0,0,0,0,4001,10
+// Custom Fire Poring. Warning, Colides with META_DENIRO
+//1239,FIRE_PORING,Fire Poring,Fire Poring,1,50,0,2,1,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x131,400,1872,672,480,0,0,0,0,0,0,0,909,7000,1202,100,938,400,512,1000,713,1500,741,5,619,20,0,0,0,0,4001,20
+
+// Lunar New Year 2008 Event Monster overrides
+// Uncomment if event is enabled, as these drops modifications are nessecary.
+//1145,MARTIN,Martin,Martin,18,1109,0,134,86,1,52,63,0,5,12,18,30,15,15,5,10,12,0,2,42,0x81,300,1480,480,480,0,0,0,0,0,0,0,1017,9000,1018,500,1251,10,2225,5,5009,1,10010,10,2224,15,7869,1500,0,0,4046,1
+//1175,TAROU,Tarou,Tarou,11,284,0,57,28,1,34,45,0,0,1,20,11,10,24,5,10,12,0,2,27,0x91,150,1744,1044,684,0,0,0,0,0,0,0,1016,9000,919,3000,949,800,528,1000,701,2,7869,2500,0,0,0,0,0,0,4028,1
+//1209,CRAMP,Cramp,Cramp,56,4720,0,2300,1513,1,395,465,0,5,1,85,35,5,65,60,10,12,0,2,45,0x3095,100,1000,500,1000,0,0,0,0,0,0,0,7007,4656,528,1000,726,80,746,110,568,250,510,70,984,95,7869,1500,0,0,4296,1
+
+// iRO St. Patricks Day 2008 Event Monster overrides
+// Uncomment if event is enabled, as these drops modifications are nessecary.
+//1841,G_SNAKE_,Snake Lord's Minon,Snake Lord's Minon,15,471,0,72,48,1,46,55,0,0,1,15,15,10,35,5,10,12,1,2,22,0x81,200,1576,576,576,0,0,0,0,0,0,0,7915,1000,7916,100,7720,30,12715,7,0,0,0,0,0,0,0,0,0,0,0,0
+//1842,G_ANACONDAQ_,Snake Lord's Minon,Snake Lord's Minon,23,1109,0,300,149,1,124,157,0,0,1,23,28,10,36,5,10,12,1,2,25,0x91,200,1576,576,576,0,0,0,0,0,0,0,7915,1000,7916,100,7720,30,12715,7,0,0,0,0,0,0,0,0,0,0,0,0
+//1843,SIDE_WINDER_,Snake Lord's Minon,Snake Lord's Minon,43,4929,0,1996,993,1,240,320,5,10,38,43,40,15,115,20,10,12,1,2,25,0x3095,200,1576,576,576,0,0,0,0,0,0,0,7915,1000,7916,100,7720,30,12715,7,0,0,0,0,0,0,0,0,0,0,0,0
+//1844,G_ISIS_,Snake Lord's Minon,Snake Lord's Minon,47,7003,0,3709,1550,1,423,507,10,35,38,65,43,50,66,15,10,12,2,6,27,0x3195,200,1384,768,336,0,0,0,0,0,0,0,7915,1000,7916,100,7720,30,12715,8,0,0,0,0,0,0,0,0,0,0,0,0
+
+// iRO Christmas 2008 Event
+// Uncomment if event is enabled, as these drops modifications are nessecary.
+//1244,JAKK_XMAS,Christmas Jakk,Christmas Jakk,38,3581,0,1113,688,1,315,382,5,30,1,38,38,43,75,45,10,12,1,0,43,0x81,200,1180,480,648,0,0,0,0,0,0,0,529,1000,530,1000,14546,1000,14550,1000,7174,1000,7175,1000,6092,1000,12355,1250,0,0,0,0
+//1245,GOBLINE_XMAS,Christmas Goblin,Christmas Goblin,25,1176,0,282,171,1,118,140,10,5,1,53,25,20,38,45,10,12,1,7,24,0x81,100,1120,620,240,0,0,0,0,0,0,0,529,1000,530,1000,14546,1000,14550,1000,7174,1000,7175,1000,6092,1000,12355,1250,0,0,0,0
+//1246,COOKIE_XMAS,Christmas Cookie,Christmas Cookie,28,2090,0,461,284,1,140,170,0,50,1,24,30,53,45,100,10,12,0,7,46,0x91,400,1248,1248,240,0,0,0,0,0,0,0,529,1000,530,1000,14546,1000,14550,1000,7174,1000,7175,1000,6092,1000,12355,1250,0,0,0,0
+//1247,ANTONIO,Antonio,Antonio,10,10,0,3,2,1,13,20,100,0,1,1,1,50,100,100,10,12,1,3,66,0xC1,100,720,720,432,0,0,0,0,0,0,0,604,500,12354,500,14550,500,5136,500,12132,500,12225,500,5811,500,0,0,0,0,4243,1
+
+// iRO Halloween 2009 Event
+// Uncomment if event is enabled. Uncomment the skills for Halloween Whisper in mob_skill_db2.
+//3014,HALLOWEEN_WHISPER,Halloween Whisper,Halloween Whisper,1,800,0,0,0,1,10,13,0,45,1,51,14,0,60,0,10,12,0,6,68,0x81,150,1960,960,504,0,0,0,0,0,0,0,12396,150,6299,5335,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+//3015,HALLOWEEN_DARK_LORD,Halloween Dark Lord,Halloween Dark Lord,1,45,0,0,0,1,10,13,0,45,1,51,14,0,60,0,10,12,2,6,89,0x81,100,868,768,480,0,0,0,0,0,0,0,12396,800,12397,5335,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+
+// iRO Halloween 2008 Event
+// Uncomment if event is enabled.
+//3000,ZOMBIE,Zombie,Zombie,15,534,0,50,33,1,67,79,0,10,1,8,7,0,15,0,10,12,1,1,29,0x3885,400,2612,912,288,0,0,0,0,0,0,0,957,9000,724,5,938,1000,958,50,727,70,0,0,0,0,0,0,0,0,4038,1
+//3001,GHOUL,Ghoul,Ghoul,40,5418,0,1088,622,1,420,500,5,20,1,20,29,0,45,20,10,12,1,1,49,0x3885,250,2456,912,504,0,0,0,0,0,0,0,958,6000,756,110,509,700,511,800,2609,60,934,150,1260,1,0,0,0,0,4110,1
+//3002,ZOMBIE_MASTER,Zombie Master,Zombie Master,62,14211,0,7610,2826,1,824,1084,37,26,25,20,30,5,77,35,10,12,1,1,29,0x3695,175,2612,912,288,0,0,0,0,0,0,0,7071,4413,938,1500,958,1500,723,200,727,100,1260,1,2324,2,0,0,0,0,4274,1

+ 30 - 0
db/import-tmpl/mob_item_ratio.txt

@@ -0,0 +1,30 @@
+// Specific Item Drop Ratio Database
+// Overrides for global item_rate* values from conf/battle/drops.conf
+//
+// Structure of Database:
+// ItemID,Ratio{,MonsterID}
+//
+// Result:
+// ItemID base drop rates defined in mob_db will not get multiplied
+//  by global item_rate* values (aka drop rates) from
+//  conf/battle/drops.conf. Instead Ratio will be used (100 = 1x).
+// If no MonsterID is specified, all monsters will be affected,
+//  otherwise only listed ones.
+//
+// Examples:
+// 909,100 // Jellopies from monsters will drop with 1x drop rate regardless of global drop rate
+// 909,1000 // Jellopies from monsters will drop with 10x drop rate regardless of global drop rate
+// 909,100,1002 // Jellopies from Porings will drop with 1x drop rate. Other monsters that drop Jellopies are unaffected (use global drop rate).
+//
+// Notes:
+// - By default you can list up to 10 MonsterIDs per ItemID.
+//   It can be changed in src/map/mob.c by adjusting MAX_ITEMRATIO_MOBS.
+// - Only ItemIDs up to MAX_ITEMDB are supported (default: 32768).
+// - Does not override item_drop_*_min/max settings.
+// - Does not affect card/item-granted drops. To adjust card/item-granted
+//   drops, edit them in item_db.
+// - Does affect MVP prizes and Treasure Boxes.
+// - You can add only ONE line per ItemID. If you need various ratios
+//   for different monsters, override drop rate with Ratio=100 and edit
+//   base drop rates in mob_db.
+// - This file is reloaded by @reloadmobdb.

+ 5 - 0
db/import-tmpl/mob_poring.txt

@@ -0,0 +1,5 @@
+// Poring Box Summonable Monsters Database
+//
+// Structure of Database:
+// MobID,DummyName,Rate
+

+ 4 - 0
db/import-tmpl/mob_pouch.txt

@@ -0,0 +1,4 @@
+// Red Pouch of Surprise Summonable Monsters Database
+//
+// Structure of Database:
+// MobID,DummyName,Rate

+ 6 - 0
db/import-tmpl/mob_race2_db.txt

@@ -0,0 +1,6 @@
+// Monster Racial Groups Database
+//
+// Structure of Database:
+// Race2ID,MobID1,MobID2,MobID3,...,MobID9
+
+

+ 137 - 0
db/import-tmpl/mob_skill_db.txt

@@ -0,0 +1,137 @@
+// Custom Mob Skill Database
+//
+// Structure of Database:
+// MobID,Dummy value (info only),State,SkillID,SkillLv,Rate,CastTime,Delay,Cancelable,Target,Condition type,Condition value,val1,val2,val3,val4,val5,Emotion,Chat
+//
+// RATE: the chance of the skill being casted when the condition is fulfilled (10000 = 100%).
+// DELAY: the time (in milliseconds) before attempting to recast the same skill.
+//
+// STATE:
+//	any (except dead) / idle (in standby) / walk (in movement) / dead (on killed) /
+//	loot /attack / angry (like attack, except player has not attacked mob yet) /
+//	chase (following target, after being attacked) / follow (following target,
+//	without being attacked) / anytarget (attack+angry+chase+follow)
+//
+// TARGET:
+//	target (current target) / self / friend / master / randomtarget (any enemy within skill's range)
+//
+//	The following are for ground-skills, a random target tile is selected from the specified area:
+//	    around1 (3x3 area around self) / around2 (5x5 area around self) /
+//	    around3 (7x7 area around self) / around4 (9x9 area around self) /
+//	    around5 (3x3 area around target) / around6 (5x5 area around target) /
+//	    around7 (7x7 area around target) / around8 (9x9 area around target) /
+//	    around = around4
+//
+// CONDITION:
+//	always			Unconditional (no condition value).
+//	onspawn			When mob spawns/respawns (no condition value).
+//	myhpltmaxrate		When mob's HP drops to the specified %.
+//	myhpinrate		When mob's HP is in a certain % range (condition value = lower bound, val1 = upper bound).
+//	mystatuson		If mob has the specified abnormality in status.
+//	mystatusoff		If mob has ended the specified abnormality in status.
+//	friendhpltmaxrate	When mob's friend's HP drops to the specified %.
+//	friendhpinrate		When mob's friend's HP is in a certain % range (condition value = lower bound, val1 = upper bound).
+//	friendstatuson		If friend has the specified abnormality in status.
+//	friendstatusoff		If friend has ended the specified abnormality in status.
+//	attackpcgt		When attack PCs become greater than specified number.
+//	attackpcge		When attack PCs become greater than or equal to the specified number.
+//	slavelt			When number of slaves is less than the original specified number.
+//	slavele			When number of slaves is less than or equal to the original specified number.
+//	closedattacked		When close range melee attacked (no condition value).
+//	longrangeattacked	When long range attacked, ex. bows, guns, ranged skills (no condition value).
+//	skillused		When the specified skill is used on the mob.
+//	afterskill		After mob casts the specified skill.
+//	casttargeted		When a target is in cast range (no condition value).
+//	rudeattacked		When mob is rude attacked (no condition value).
+//
+//	Status abnormalities specified through the statuson/statusoff system:
+//	    anybad (any type of state change) / stone / freeze / stun / sleep /
+//	    poison / curse / silence / confusion / blind / hiding / sight (unhidden)
+//
+// Note: if a negative MobID is provided, the skill will be treated as 'global':
+//	-1: added for all boss types.
+//	-2: added for all normal types.
+//	-3: added for all mobs.
+
+// rAthena Dev Team
+//1900,Valaris@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,,,,,,,,
+//1900,Valaris@AL_TELEPORT,walk,26,1,500,0,5000,yes,self,rudeattacked,,,,,,,,
+//1900,Valaris@KN_BRANDISHSPEAR,attack,57,10,2000,500,5000,no,target,always,0,,,,,,29,
+//1900,Valaris@MO_BODYRELOCATION,chase,264,1,200,200,1000,yes,target,always,0,,,,,,,
+//1900,Valaris@NPC_ARMORBRAKE,attack,344,10,2000,0,5000,no,target,always,0,,,,,,,
+//1900,Valaris@NPC_CALLSLAVE,attack,352,1,10000,0,30000,yes,target,always,0,,,,,,,
+//1900,Valaris@NPC_CALLSLAVE,idle,352,1,10000,0,30000,yes,self,always,0,,,,,,,
+//1900,Valaris@NPC_DARKBREATH,attack,202,5,2000,800,5000,no,target,always,0,,,,,,29,
+//1900,Valaris@NPC_DARKSTRIKE,chase,340,10,200,0,1000,yes,target,always,0,,,,,,,
+//1900,Valaris@NPC_GUIDEDATTACK,attack,172,5,500,0,20000,no,target,always,0,,,,,,,
+//1900,Valaris@NPC_POWERUP,attack,349,5,10000,0,30000,yes,self,myhpltmaxrate,30,,,,,,6,
+//1900,Valaris@NPC_SUMMONSLAVE,attack,196,6,10000,700,10000,no,self,slavele,3,1902,,,,,,
+//1900,Valaris@NPC_SUMMONSLAVE,idle,196,6,10000,700,10000,no,self,slavele,3,1902,,,,,,
+//1900,Valaris@WZ_VERMILION,attack,85,10,2000,500,2000,no,target,always,0,,,,,,29,
+//1900,Valaris@WZ_VERMILION,chase,85,10,200,500,2000,no,target,always,0,,,,,,29,
+//1900,Valaris@WZ_VERMILION,chase,85,10,500,500,2000,no,target,skillused,18,,,,,,29,
+//1901,Valaris's Worshipper@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,,,,,,,,
+//1901,Valaris's Worshipper@NPC_CURSEATTACK,attack,181,3,500,800,5000,no,target,always,0,,,,,,29,
+//1901,Valaris's Worshipper@NPC_DARKNESSATTACK,attack,190,2,500,500,5000,no,target,always,0,,,,,,6,
+//1901,Valaris's Worshipper@NPC_EMOTION,chase,197,1,20,0,5000,yes,self,always,0,19,129,,,,,
+//1901,Valaris's Worshipper@NPC_EMOTION,idle,197,1,200,0,5000,yes,self,always,0,6,1173,,,,,
+//1901,Valaris's Worshipper@NPC_EMOTION,walk,197,1,200,0,5000,yes,self,always,0,2,,,,,,
+//1901,Valaris's Worshipper@NPC_HALLUCINATION,attack,207,1,500,500,5000,yes,target,always,0,,,,,,29,
+//1901,Valaris's Worshipper@NPC_HALLUCINATION,chase,207,1,50,500,5000,yes,target,always,0,,,,,,29,
+//1901,Valaris's Worshipper@SA_DISPELL,attack,289,1,0,0,30000,yes,target,always,0,,,,,,29,
+//1902,MC Cameri@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,,,,,,,,
+//1902,MC Cameri@AL_TELEPORT,walk,26,1,500,0,5000,yes,self,rudeattacked,,,,,,,,
+//1902,MC Cameri@KN_BRANDISHSPEAR,attack,57,10,2000,500,5000,no,target,always,0,,,,,,29,
+//1902,MC Cameri@MO_BODYRELOCATION,chase,264,1,200,200,1000,yes,target,always,0,,,,,,,
+//1902,MC Cameri@NPC_ARMORBRAKE,attack,344,10,2000,0,5000,no,target,always,0,,,,,,,
+//1902,MC Cameri@NPC_DARKBREATH,attack,202,5,2000,800,5000,no,target,always,0,,,,,,29,
+//1902,MC Cameri@NPC_DARKSTRIKE,chase,340,10,200,0,1000,yes,target,always,0,,,,,,,
+//1902,MC Cameri@NPC_GUIDEDATTACK,attack,172,5,500,0,20000,no,target,always,0,,,,,,,
+//1902,MC Cameri@NPC_POWERUP,attack,349,5,10000,0,30000,yes,self,myhpltmaxrate,30,,,,,,6,
+//1902,MC Cameri@WZ_VERMILION,attack,85,10,2000,500,2000,no,target,always,0,,,,,,29,
+//1902,MC Cameri@WZ_VERMILION,chase,85,10,200,500,2000,no,target,always,0,,,,,,29,
+//1902,MC Cameri@WZ_VERMILION,chase,85,10,500,500,2000,no,target,skillused,18,,,,,,29,
+//1903,Poki#3@AC_DOUBLE,attack,46,10,500,1000,5000,no,target,always,0,,,,,,,
+//1903,Poki#3@AC_SHOWER,attack,47,8,2000,1000,5000,no,target,attackpcgt,2,,,,,,,
+//1903,Poki#3@BS_MAXIMIZE,chase,114,5,500,1000,5000,no,self,always,0,,,,,,,
+//1903,Poki#3@BS_MAXIMIZE,attack,114,5,500,1000,5000,no,self,always,0,,,,,,,
+//1903,Poki#3@NPC_AGIUP,chase,350,5,2500,0,5000,no,self,always,0,,,,,,,
+//1903,Poki#3@NPC_POWERUP,attack,349,5,500,0,30000,yes,self,myhpltmaxrate,30,,,,,,,
+//1903,Poki#3@SN_SHARPSHOOTING,attack,382,5,500,1000,5000,no,target,always,0,,,,,,,
+//1903,Poki#3@HT_SKIDTRAP,idle,115,5,50,0,5000,yes,self,always,0,,,,,,29,
+//1903,Poki#3@HT_FREEZINGTRAP,idle,120,5,50,0,300000,yes,self,always,0,,,,,,,
+//1903,Poki#3@HT_FREEZINGTRAP,idle,121,5,50,0,300000,yes,self,always,0,,,,,,,
+//1903,Poki#3@AC_CHARGEARROW,attack,148,1,500,0,5000,yes,target,always,0,,,,,,,
+//1903,Poki#3@HT_FLASHER,idle,120,5,50,0,300000,yes,self,always,0,,,,,,,
+//1903,Poki#3@NPC_SUMMONSLAVE,idle,196,5,10000,2000,120000,no,self,slavele,1,1659,1660,1661,1662,1663,0,
+//1903,Poki#3@NPC_CALLSLAVE,attack,352,1,2000,0,10000,yes,target,always,0,,,,,,,
+//1903,Poki#3@NPC_CALLSLAVE,idle,352,1,2000,0,10000,yes,self,always,0,,,,,,,
+//1903,Poki#3@NPC_CHANGEWATER,attack,162,1,10000,2000,600000,no,self,myhpltmaxrate,30,,,,,,,
+//1903,Poki#3@NPC_CHANGETELEKINESIS,attack,169,1,500,2000,5000,no,self,myhpltmaxrate,10,,,,,,7,
+//1903,Poki#3@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,,,,,,,,
+
+// Easter Bunny (not in the db?? it's in db2!)
+//1921,Easter Bunny@NPC_SUMMONSLAVE,attack,196,5,10000,3000,10000,no,self,slavele,2,1063,,,,,,
+//1921,Easter Bunny@NPC_SUMMONSLAVE,idle,196,5,5000,2000,40000,no,self,always,2,1920,,,,,,
+
+//Custom Fire Poring. Warning, Colides with META_DENIRO
+//1239,Fire Poring@AL_HEAL,idle,28,10,10000,0,2000,yes,self,always,0,,,,,,4,
+//1239,Fire Poring@AL_HEAL,walk,28,10,10000,0,2000,yes,self,always,0,,,,,,4,
+//1239,Fire Poring@AL_TELEPORT,attack,26,1,1000,5000,60000,no,self,myhpltmaxrate,30,,,,,,,
+//1239,Fire Poring@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,,,,,,,,
+//1239,Fire Poring@NPC_DARKBLESSING,attack,203,1,1000,2000,5000,no,target,always,0,,,,,,18,
+//1239,Fire Poring@NPC_SUMMONSLAVE,attack,196,16,10000,2000,10000,no,self,slavele,3,1491,1431,1433,,,18,
+//1239,Fire Poring@NPC_SUMMONSLAVE,idle,196,16,10000,2000,10000,no,self,slavele,3,1491,1431,1433,,,18,
+//1239,Fire Poring@RG_INTIMIDATE,attack,219,5,1000,0,3000,yes,target,always,0,,,,,,,
+//1239,Fire Poring@RG_STRIPARMOR,attack,217,5,2000,0,3000,yes,target,always,0,,,,,,,
+//1239,Fire Poring@RG_STRIPHELM,attack,218,5,2000,0,3000,yes,target,always,0,,,,,,,
+//1239,Fire Poring@RG_STRIPSHIELD,attack,216,5,2000,0,3000,yes,target,always,0,,,,,,,
+//1239,Fire Poring@RG_STRIPWEAPON,attack,215,5,2000,0,3000,yes,target,always,0,,,,,,,
+
+//iRO Halloween Event 2009
+//3014,Halloween Whisper@AS_CLOAKING,idle,135,1,2000,200,5000,yes,self,always,0,,,,,,,
+//3014,Halloween Whisper@AS_CLOAKING,chase,135,1,2000,200,5000,yes,self,always,0,,,,,,,
+//3014,Halloween Whisper@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,,,,,,,
+//3014,Halloween Whisper@NPC_EMOTION,chase,197,1,200,0,5000,yes,self,always,0,19,0x81,,,,,
+
+// Here you can place your custom mob skills

+ 35 - 0
db/import-tmpl/packet_db.txt

@@ -0,0 +1,35 @@
+// Client<->Map Packet Database
+//
+// Structure of Database:
+// PacketType,PacketLength[,Name,FieldIndex1:FieldIndex2:FieldIndex3:...]
+//
+// 01. PacketType       ID of the packet.
+// 02. PacketLength     Length of the packet. If 0, packet is disabled in current packet version. If -1, packet has variable size.
+// 03. Name             Name of the packet parser function (optional, for incoming packets only).
+// 04. FieldIndex       Specifies the offset of a packet field in bytes from the begin of the packet (only specified when Name is given).
+//                      Can be 0, when the layout is not known.
+// ...
+//
+// NOTE: Up to MAX_PACKET_POS (typically 20) field indexes may be used.
+//
+// The packet database allows you to add support for new clients,
+// because packets change every release.
+//
+// Note: Every packet version needs a wanttoconnection specification, since
+// that is the packet used to identify a client's version.
+// If multiple versions have the same connection packet, the higher version
+// will be used (unless the lower one is specified as the default)
+//
+// Incoming packets have their parser function and layout specified, which enables
+// them for the current and all higher versions, unless explicitely disabled.
+//
+// Outgoing packets must be specified in order to enable them for the current
+// and all higher versions, unless explicitely disabled. Packets that are not
+// enabled for a packet version are silently discarded when sent as multicast.
+//
+// Every packet version inherits packet definitions from the previous (lower)
+// packet version.
+//
+// Main packet version of the DB to use (default = max available version)
+// Client detection is faster when all clients use this version.
+// Version 23 is the latest Sakexe (above versions are for Renewal clients)

+ 60 - 0
db/import-tmpl/pet_db.txt

@@ -0,0 +1,60 @@
+// Pet Additional Database
+//
+// Structure of Database:
+// MobID,Name,JName,LureID,EggID,EquipID,FoodID,Fullness,HungryDelay,R_Hungry,R_Full,Intimate,Die,Capture,Speed,S_Performance,talk_convert_class,attack_rate,defence_attack_rate,change_target_rate,pet_script,loyal_script
+//
+// 01. MobID			Monster ID of the pet.
+// 02. Name			Name of the monster as defined in the database.
+// 03. JName			The display name of the monster when hatched.
+// 04. LureID			Pet Tame Item ID.
+// 05. EggID			Pet Egg ID.
+// 06. EquipID			Pet Accessory ID.
+// 07. FoodID			Pet Food ID.
+// 08. Fullness			The amount Hunger is decreased every [HungryDelay] seconds.
+// 09. HungryDelay		The amount of time it takes for hunger to decrease after feeding. (Default: 60 seconds)
+// 10. R_Hungry			Amount of Intimacy that is increased when fed.
+// 11. R_Full			Amount of Intimacy that is decreased when over-fed.
+// 12. Intimate			Amount of Intimacy the pet starts with.
+// 13. Die			Amount of Intimacy that is decreased when the pet owner dies.
+// 14. Capture			Capture succes rate (10000 = 100%)
+// 15. Speed			Pet's walk speed. (Defaul: 150)
+// 16. S_Performance		Special Performance. (Yes = 1, No = 0)
+// 17. talk_convert_class	Disables pet talk (instead of talking they emote  with /!.)
+// 18. attack_rate			Rate of which the pet will attack (requires at least pet_support_min_friendly intimacy).
+// 19. defence_attack_rate	Rate of which the pet will retaliate when master is being attacked (requires at least pet_support_min_friendly intimacy).
+// 20. change_target_rate	Rate of which the pet will change its attack target.
+// 21. pet_script		Script to execute when the pet is hatched.
+// 22. loyal_script		Script to execute when the pet is hatched (requires at least pet_equip_min_friendly intimacy, independent of pet_script).
+//NOTE: The max value (100%) of attack_rate, defense_rate & change_target_rate is 10000.
+
+//In theory you can use any valid script, but it is run only once upon pet
+//loading, so it is recommended you use the specific pet scripts:
+
+//petskillattack skillid, skilllv, rate, bonusrate
+//Skill attack that triggers while the pet is attacking. Rate is the base
+//chance of execution per attack. Bonusrate is an additional success rate when
+//intimacy reaches max.
+
+//petskillattack2 skillid, damage, hits, rate, bonusrate
+//Same as petskillattack, but the damage and number of hits is fixed
+//the damage specified is total, not per hit.
+
+//petskillsupport skillid, skilllv, delay, hp%, sp%
+//Casts a support skill when the health levels are below the specified hp% and
+//sp%. Delay is the minimum time in seconds before the skill can be cast again
+
+//petheal amount, delay, hp%, sp%
+//Similar to petskillsupport, but the skill is fixed to heal (28) and the
+//heal-amount is fixed to the value given.
+
+//petrecovery type, delay: Cures the "type" status effect after "delay" seconds
+
+//petskillbonus type, value, duration, delay
+//Gives bonus stats. Type is the stat to increase (bStr, bLuk), value is the
+//amount by which it is increased, duration signals how long the bonus lasts
+//delay is the time elapsed after the bonus ends and before it starts again.
+
+//A single pet can have petloot, petskillbonus, petskillattack (or
+//petskillattack2) and petskillsupport (or petheal) at the same time,
+//but only one of each.
+

+ 9 - 0
db/import-tmpl/produce_db.txt

@@ -0,0 +1,9 @@
+// Item Produce Database
+//
+// Structure of Database:
+// ProduceItemID,ItemLV,RequireSkill,RequireSkillLv,MaterialID1,MaterialAmount1,......
+//
+// Notes:
+// If MaterialAmount is 0, the player must have that item in their inventory (i.e. guides).
+// For example, Mine Bottle requires 0x Marine Sphere Creation Guide (ID 7131).
+

+ 5 - 0
db/import-tmpl/quest_db.txt

@@ -0,0 +1,5 @@
+// Quest Database
+//
+// Structure of Database:
+// Quest ID,Time Limit,Target1,Val1,Target2,Val2,Target3,Val3,Quest Title
+

+ 32 - 0
db/import-tmpl/refine_db.txt

@@ -0,0 +1,32 @@
+// Refine Database [Renewal]
+//
+// Structure of Database:
+// Type,Stats per level,Random bonus start level,Random bonus value,Chance+1:Bonus+1,Chance+2:Bonus+2,Chance+3:Bonus+3,...
+//
+// For armors, values of 100 add 1 armor defense.
+// For weapons, values of 100 add 1 ATK&MATK.
+//
+// Type:
+//	0 - Armors
+//	1 - Level 1 weapons
+//	2 - Level 2 weapons
+//	3 - Level 3 weapons
+//	4 - Level 4 weapons
+//
+// Stats per level:
+// This value is applied for every upgrade level.
+//
+// Random bonus start level:
+// This value specifies the start point for those levels that give a random bonus value (usually the first unsafe upgrade).
+//
+// Random bonus value:
+// A random number between 0 and (Random bonus start level - Upgrade level + 1) * this value is applied for all upgrades past
+// Random bonus start level. This is only applied for weapons, and not displayed client-side.
+//
+// Chance:
+// 100 = 100%
+//
+// Notes:
+// Changing the number of upgrade levels requires modifying MAX_REFINE in src/map/status.h.
+// For Renewal Armors, there may or may not be another bonus, according to iRO wiki: Every upgrade gives floor[( 3 + current upgrade ) / 4] equipment DEF)
+

+ 7 - 0
db/import-tmpl/size_fix.txt

@@ -0,0 +1,7 @@
+// Size Fix Tables
+// Contains size fixes for weapon damage.
+//
+// Struture of Database:
+// Columns - Weapon type
+// Rows    - Target size
+

+ 17 - 0
db/import-tmpl/skill_cast_db.txt

@@ -0,0 +1,17 @@
+// Skill Times Database
+//
+// Structure of Database:
+// SkillID,CastingTime,AfterCastActDelay,AfterCastWalkDelay,Duration1,Duration2,Cool Down,Fixed Casting Time
+//
+// CastingTime: time to cast this skill, in miliseconds
+// AfterCastActDelay: "normal" delay, character cannot use skills, in miliseconds
+// AfterCastWalkDleay: amount of time before character can move again, in miliseconds
+// Duration1/Duration2: usually the durations used by the skill, at special cases it is used to hold special data
+// Cool Down: amount of time until character can re-use this skill, in miliseconds
+// Fixed Casting Time: the skills fixed casting time (when 0, uses 20% of cast time and less than 0 means no fixed cast time)
+//
+// On all fields you can use ':' as a delimiter for level-specific values.
+// For example:
+// - Original: 6,0,0,0,30000,0,1000
+// - Modified: 6,0,0,0,30000,0,1000:2500:3000:...
+// Gives Level 1 1000ms cool down, Level 2 2500ms, Level 3 3000ms, and so on.

+ 16 - 0
db/import-tmpl/skill_castnodex_db.txt

@@ -0,0 +1,16 @@
+// <Skill id>,<Cast>,<Delay (optional)>
+//
+// Cast:  0 - everything affects the skill's cast time
+//        1 - skill's cast time is not affected by dex
+//        2 - skill's cast time is not affected by statuses (Suffragium, etc)
+//        4 - skill's cast time is not affected by item bonuses (equip, cards)
+//
+// Delay: 0 - everything affects the skill's delay
+//        1 - skill's delay is not affected by dex
+//        2 - skill's delay is not affected by Magic Strings / Bragi
+//        4 - skill's delay is not affected by item bonuses (equip, cards)
+//
+// Note: Values are bit fields, add them up to combine their effects.
+// Note: Delay setting '1' only makes sense when delay_dependon_dex is enabled.
+// Example: 46,1,1 = Double Strafe's cast time and delay is not affected by dex.
+

+ 8 - 0
db/import-tmpl/skill_changematerial_db.txt

@@ -0,0 +1,8 @@
+// Change Material Database
+//
+// Structure of Database:
+// ProductID,BaseRate,MakeAmount1,MakeAmountRate1...,MakeAmount5,MakeAmountRate5
+//
+// NOTE: 
+// Up to 5 ID/Amount pairs can be specified.
+// Rate = n/10%

+ 51 - 0
db/import-tmpl/skill_copyable_db.txt

@@ -0,0 +1,51 @@
+// Copyable Skills Database
+// List of skills able to be copied by Intimidate/Plagiarism and Reproduce.
+//
+// Sources:
+// http://irowiki.org/wiki/Intimidate
+//    -> "Intimidate will copy any 2nd class skill"
+// http://irowiki.org/wiki/Reproduce/List_of_reproducible_skills
+//    -> "Players can reproduce 1-x, 2-x, and 3-x skills and Expanded Class,
+//        but cannot reproduce transcendent skills"
+//
+// Structure of Database:
+// SkillName,Option{,JobAllowed{,RequirementRemoved}}
+//
+// Option (bitmask) determines how a skill can be copied.
+//	1 = Plagiarism
+//	2 = Reproduce
+//
+// JobAllowed (bitmask) restricts copying the skill to certain classes.
+// By default, all jobs can copy the skill (0).
+//	 1 = Rogue
+//	 2 = Stalker
+//	 4 = Shadow Chaser
+//	 8 = Trans. Shadow Chaser
+//	16 = Baby Rouge
+//	32 = Baby Shadow Chaser
+//	
+// RequirementRemoved (bitmask) removes requirements when casting a copied skill.
+// See 'skill_require_db.txt' for specific skill requirements.
+//	   0 = uses original requirement(s)
+//	   1 = hp
+//	   2 = maxhptrigger
+//	   4 = sp
+//	   8 = hprate
+//	  16 = sprate
+//	  32 = zeny
+//	  64 = weapon type
+//	 128 = ammo (with the amount)
+//	 256 = state
+//	 512 = statuses
+//	1024 = spirit sphere
+//	2048 = items (with the amount)
+//	4096 = equipments
+//
+// Examples:
+// AS_SONICBLOW,2,63,64
+//	Sonic Blow can be copied by all jobs with only Plagiarism.
+//	To use the copied skill, a Katar is not needed (a Sonic Blow weapon type requirement).
+//
+// CR_ACIDDEMONSTRATION,3,10
+//	Acid Demonstration can only be copied by Stalker/Trans. Shadow Chaser with Plagiarism or Reproduce.
+//	This mode simulates the previous battle config, which allowed only Trans. classes to copy Trans. skills.

+ 36 - 0
db/import-tmpl/skill_damage_db.txt

@@ -0,0 +1,36 @@
+// Skill Damage Adjustment Database
+//
+// Structure of Database:
+// SkillName,Caster,Map,Damage against Players{,Damage against Mobs{,Damage against Bosses{,Damage against Other}}}
+//
+// Caster: The groups for which the adjustment takes effect. (bitmask)
+//		 1 = Player
+//		 2 = Monster
+//		 4 = Pet
+//		 8 = Homunculus
+//		16 = Mercenary
+//		32 = Elemental
+//
+// Map:
+// 		1    - Normal (the maps that aren't classified as these maps below)
+// 		2    - PVP
+// 		4    - GVG
+// 		8    - Battlegrounds
+// 		16   - 'skill_damage' mapflag
+// Restricted zones - they're configured by 'restricted <number>' mapflag
+// 		32   - Zone 1
+// 		64   - Zone 2
+// 		128  - Zone 3
+// 		256  - Zone 4
+// 		512  - Zone 5
+// 		1024 - Zone 6
+// 		2048 - Zone 7
+//
+// Notes:
+//  	Damage is a percentage between -100 and 100000.
+//  	Negative values decrease damage and positive values increase it (0 = no change).
+//
+// Examples:
+// MC_MAMMONITE,1,1,50 // In normal maps, players deal +50% damage to other players with Mammonite.
+// MO_EXTREMITYFIST,1,6,-50 // In PVP and GVG, players deal -50% (half) damage to other players with Asura Strike.
+// AB_ADORAMUS,1,6,50,0,10,15 // In PVP and GVG, players deal +50% damage to other players, +0% to mobs, +10% to bosses, and +15% to other with Adoramus.

+ 66 - 0
db/import-tmpl/skill_db.txt

@@ -0,0 +1,66 @@
+//id,range,hit,inf,element,nk,splash,max,list_num,castcancel,cast_defence_rate,inf2,maxcount,skill_type,blow_count,inf3,name,description
+// 01 ID
+// 02 range (combo skills do not check for range when used,
+//           if range is < 5, the skill is considered melee-range)
+// 03 hit (8- repeated hitting, 6- single-hit)
+// 04 inf (0- passive, 1- enemy, 2- place, 4- self, 16- friend, 32- trap)
+// 05 element (0 - neutral, 1 - water, 2 - earth, 3 - fire, 4 - wind, 5 - poison,
+//             6 - holy, 7 - dark, 8 - ghost, 9 - undead, -1 - use weapon element
+//             -2 - use endowed element, -3 - use random element.)
+// 06 nk (skill damage properties):
+//    0x01 - No damage skill
+//    0x02 - Has splash area
+//    0x04 - Damage should be split among targets
+//    0x08 - Skill ignores caster's % damage cards (misc type always ignores)
+//    0x10 - Skill ignores elemental adjustments
+//    0x20 - Skill ignores target's defense (misc type always ignores)
+//    0x40 - Skill ignores target's flee (magic type always ignores)
+//    0x80 - Skill ignores target's def cards
+// 07 splash/effect range (-1 for screen-wide)
+// 08 MaxLv
+// 09 Number of hits (when positive, damage is increased by hits, 
+//    negative values just show number of hits without increasing total damage)
+// 10 Cast interrupted when hit?
+// 11 defense-reduction rate during cast.
+// 12 inf2 (skill information 2):
+//    0x00001- quest skill
+//    0x00002- npc skill
+//    0x00004- wedding skill
+//    0x00008- spirit skill
+//    0x00010- guild skill
+//    0x00020- song/dance
+//    0x00040- ensemble skill
+//    0x00080- trap
+//    0x00100- skill that damages/targets yourself
+//    0x00200- cannot be casted on self (if inf = 4, auto-select target skill)
+//    0x00400- usable only on party-members (and enemies if skill is offensive)
+//    0x00800- usable only on guild-mates (and enemies if skill is offensive)
+//    0x01000- disable usage on enemies (for non-offensive skills).
+//    0x02000- free
+//    0x04000- chorus skill
+//    0x08000- spell that ignore bg reduction
+//    0x10000- spell that ignore gvg reduction
+//    0x20000- makes 'self'/'place' skill cannot be casted/placed when near NPC (see 'db/skill_nonearnpc_db.txt' for more options)
+// 13 maxcount: max amount of skill instances to place on the ground when
+//    player_land_skill_limit/monster_land_skill_limit is enabled. For skills
+//    that attack using a path, this is the path length to be used.
+// 14 attack type (none, weapon, magic, misc)
+// 15 Blowcount (amount of tiles skill knockbacks)
+// 16 inf3 (skill information 3):
+//    0x0001- skill ignores land protector (e.g. arrow shower)
+//    0x0002- spell that doesn't end camouflage
+//    0x0004- usable skills while hiding
+//    0x0008- spell that can be use while in dancing state
+//    0x0010- spell that could hit emperium
+//    0x0020- spell blocked by statis
+//    0x0040- spell blocked by kagehumi
+//    0x0080- spell range affected by AC_VULTURE
+//    0x0100- spell range affected by GS_SNAKEEYE
+//    0x0200- spell range affected by NJ_SHADOWJUMP
+//    0x0400- spell range affected by WL_RADIUS
+//    0x0800- spell range affected by RA_RESEARCHTRAP
+//    0x1000- spell that can't be copied
+//    0x2000- spell that can be using while riding warg
+//    0x4000- spell that can't be used while in mado
+// 17 Name
+// 18 Description

+ 5 - 0
db/import-tmpl/skill_improvise_db.txt

@@ -0,0 +1,5 @@
+// Improvise Database
+// Database for skills that can be summoned trough Randomize Spell/Improvised Song (Minstrel/Wanderer Skill).
+//
+// Structure of Database:
+// SkillID,Rate

+ 24 - 0
db/import-tmpl/skill_nocast_db.txt

@@ -0,0 +1,24 @@
+// Forbidden Skills Database
+// Defines unusable skills in map types and zones.
+//
+// Structure of Database:
+// SkillID,Flag
+//
+// Legend for 'Flag' field (bitmask):
+// 1    - cannot be used in normal maps
+// 2    - cannot be used in PvP maps (use this instead of 1 for PK-mode servers)
+// 4    - cannot be used in GvG maps
+// 8    - cannot be used in Battleground maps
+// 16   - cannot be cloned (clones will not copy this skill)
+// Restricted zones - configured by 'restricted <number>' mapflag
+// 32   - cannot be used in zone 1 maps
+// 64   - cannot be used in zone 2 maps
+// 128  - cannot be used in zone 3 maps
+// 256  - cannot be used in zone 4 maps
+// 512  - cannot be used in zone 5 maps
+// 1024 - cannot be used in zone 6 maps
+// 2048 - cannot be used in zone 7 maps
+//
+// Example:
+// 8,6  // Endure cannot be used in PvP and GvG maps (2+4)
+

+ 28 - 0
db/import-tmpl/skill_nonearnpc_db.txt

@@ -0,0 +1,28 @@
+// Skill Distance-to-NPC Database
+// Prevents skills from being used near NPC types using INF2_NO_NEARNPC.
+//
+// Structure of Database:
+// SkillName,AdditionalRange{,NPC Type}
+//
+// AdditionalRange:
+//	Number of cells from an NPC where the skill can be cast.
+//	If zero, this will read the splash range value from skill_db;
+//	if that is also zero, range+layout's range from skill_unit_db will be used.
+//
+// NPC Type (bitmask):
+//	1 = warp portal, 2 = shop NPC, 4 = normal NPC script, 8 = tomb
+//
+// Examples:
+// MG_SAFETYWALL,2
+//	Safety Wall can't be placed within 2 ground cells of an NPC.
+//	(MG_SAFETYWALL doesn't have splash, layout range, and range value,
+//	so we must add the 'additional_range', or it will be pointless.)
+//
+// GS_DESPERADO,2
+//	Desperado can't be casted if the caster is standing within 5 cells of an NPC.
+//	(Why? GS_DESPERADO has 3 cells of splash range +2 'additional_range' here.)
+//
+// SC_CHAOSPANIC,0,1
+//	Chaos Panic can't be placed within 2 ground cells of a warp portal.
+//	(Because SC_CHAOSPANIC doesn't have splash range, it uses layout range.)
+

+ 33 - 0
db/import-tmpl/skill_require_db.txt

@@ -0,0 +1,33 @@
+// Skill Requirements Database
+//
+// Structure of Database:
+// SkillID,HPCost,MaxHPTrigger,SPCost,HPRateCost,SPRateCost,ZenyCost,RequiredWeapons,RequiredAmmoTypes,RequiredAmmoAmount,RequiredState,RequiredStatuses,SpiritSphereCost,RequiredItemID1,RequiredItemAmount1,RequiredItemID2,RequiredItemAmount2,RequiredItemID3,RequiredItemAmount3,RequiredItemID4,RequiredItemAmount4,RequiredItemID5,RequiredItemAmount5,RequiredItemID6,RequiredItemAmount6,RequiredItemID7,RequiredItemAmount7,RequiredItemID8,RequiredItemAmount8,RequiredItemID9,RequiredItemAmount9,RequiredItemID10,RequiredItemAmount10,RequiredEquipment
+//
+// If HP/SPratecost is positive, it is a percent of your current life, otherwise it is a percent of your max life.
+//
+// Legend for 'RequiredState' field:
+//  none = Nothing special
+//  hidden = Requires on hidden status by using Hiding, Cloaking, or maybe Chasewalk
+//  riding = Requires to ride either a peco or a dragon
+//  falcon = Requires a Falcon
+//  cart = Requires a Pushcart (for renewal can replace this state by SC_PUSH_CART in 'RequiredStatuses' field)
+//  shield = Requires a 0,shield equipped
+//  recover_weight_rate = Requires to be less than 50% weight
+//  move_enable = Requires to be able to move
+//  water = Requires to be standing on a water cell
+//  dragon = Requires to ride a Dragon
+//  warg = Requires a Warg
+//  ridingwarg = Requires to ride a Warg
+//  mado = Requires to have an active mado
+//  elementalspirit = Requires to have an Elemental Spirit summoned.
+//  peco = Requires riding a peco
+//
+// 'RequiredStatuses'
+//	Fill the value only with SC_STATUS (see db/const.txt for more details)
+//	Usage for multiple status requirements: SC_STATUS1:SC_STATUS2:SC_STATUS3
+//	Max. multiple value is 3 (skill.h: MAX_SKILL_STATUS_REQUIRE)
+//	Use any number or SC_ALL will disable status requirements
+// 'RequiredEquipment'
+//	Specified equipment to be equipped. For multiple values, use : as delimiter.
+//	Max. multiple value is 10 (skill.h: MAX_SKILL_EQUIP_REQUIRE)
+

+ 1 - 0
db/import-tmpl/skill_tree.txt

@@ -0,0 +1 @@
+//JobNo,Skill-ID,MaxLV{,JobLV},Prerequisite Skill-ID-1,Prerequisite Skill-ID-1-Lv,PrereqSkill-ID-2,PrereqSkill-ID-2-Lv,PrereqSkill-ID-3,PrereqSkill-ID-3-Lv,PrereqSkill-ID-4,PrereqSkill-ID-4-Lv,PrereqSkill-ID-5,PrereqSkill-ID-5-Lv//CLASS_SKILLNAME#Skill Name#

+ 29 - 0
db/import-tmpl/skill_unit_db.txt

@@ -0,0 +1,29 @@
+// Skill Unit Database
+//
+// Structure of Database:
+// ID,unit ID,unit ID 2,layout,range,interval,target,flag
+//
+// layout = -1:special, 0:1*1, 1:3*3, 2:5*5, up to 5:11*11
+// target = friend (party +guildmates +neutral players) / party / guild
+//          ally (party +guildmates) / all / enemy
+// flag 0x0001(UF_DEFNOTENEMY)		If 'defunit_not_enemy' is set, the target is changed to 'friend'
+//      0x0002(UF_NOREITERRATION)	Spell cannot be stacked
+//      0x0004(UF_NOFOOTSET)		Spell cannot be cast near/on targets
+//      0x0008(UF_NOOVERLAP)		Spell effects do not overlap
+//      0x0010(UF_PATHCHECK)		Only cells with a shootable path will be placed
+//      0x0020(UF_NOPC)				Spell cannot affect players.
+//      0x0040(UF_NOMOB)			Spell cannot affect mobs.
+//      0x0080(UF_SKILL)			Spell CAN affect skills.
+//      0x0100(UF_DANCE)			Dance skill
+//      0x0200(UF_ENSEMBLE)			Ensemble skill
+//      0x0400(UF_SONG)				Song skill
+//      0x0800(UF_DUALMODE)			Spell has effects both at an interval and when you step in/out
+//      0x2000(UF_RANGEDSINGLEUNIT)	Layout hack, use layout range propriety but only display center.
+// 	Example: 0x006 = 0x002+0x004 -> Cannot be stacked nor cast near targets
+//
+// Notes:
+//    0x89,0x8a,0x8b without indication
+//
+//    u1   u2 lay  r intr target  flag
+//
+

+ 7 - 0
db/import-tmpl/spellbook_db.txt

@@ -0,0 +1,7 @@
+// Reading Spellbook Preserve Points Database
+//
+// Structure of Database:
+// SkillID,PreservePoints,Required Book
+//
+// NOTE: To add more entries, increase MAX_SKILL_SPELLBOOK_DB in skill.h.
+

+ 1 - 0
db/import-tmpl/statpoint.txt

@@ -0,0 +1 @@
+//statpoint per lvl

+ 5 - 0
db/import/item_combo_db.txt

@@ -0,0 +1,5 @@
+// Item Combos Database
+//
+// Structure of Database:
+// ID:ID:ID:ID,{ Script }
+

+ 5 - 0
db/import/mob_boss.txt

@@ -0,0 +1,5 @@
+// Bloody Branch Summonable Monsters Database
+//
+// Structure of Database:
+// MobID,DummyName,Rate
+

+ 5 - 0
db/import/mob_branch.txt

@@ -0,0 +1,5 @@
+// Dead Branch Summonable Monsters Database
+//
+// Structure of Database:
+// MobID,DummyName,Rate
+

+ 5 - 0
db/import/mob_classchange.txt

@@ -0,0 +1,5 @@
+// Class Change Summonable Monsters Database
+// List of monsters generated through Abracadabra's SA_CLASSCHANGE ability.
+//
+// Structure of Database:
+// MobID,DummyName,Rate

+ 5 - 0
db/import/mob_poring.txt

@@ -0,0 +1,5 @@
+// Poring Box Summonable Monsters Database
+//
+// Structure of Database:
+// MobID,DummyName,Rate
+

+ 4 - 0
db/import/mob_pouch.txt

@@ -0,0 +1,4 @@
+// Red Pouch of Surprise Summonable Monsters Database
+//
+// Structure of Database:
+// MobID,DummyName,Rate

+ 1 - 1
db/packet_db.txt

@@ -33,7 +33,7 @@
 // Main packet version of the DB to use (default = max available version)
 // Client detection is faster when all clients use this version.
 // Version 23 is the latest Sakexe (above versions are for Renewal clients)
-//packet_db_ver: 25
+//packet_db_ver: 45
 packet_db_ver: default
 
 packet_ver: 5

+ 5 - 1
src/char/int_guild.c

@@ -720,12 +720,16 @@ int inter_guild_CharOffline(int char_id, int guild_id)
 // Initialize guild sql
 int inter_guild_sql_init(void)
 {
+	const char *filename[]={ DBPATH"exp_guild.txt","import/exp_guild.txt"};
+	int i;
 	//Initialize the guild cache
 	guild_db_= idb_alloc(DB_OPT_RELEASE_DATA);
 	castle_db = idb_alloc(DB_OPT_RELEASE_DATA);
 
 	//Read exp file
-	sv_readdb("db", DBPATH"exp_guild.txt", ',', 1, 1, 100, exp_guild_parse_row, 0);
+	for(i = 0; i<ARRAYLENGTH(filename); i++){
+		sv_readdb(db_path, filename[i], ',', 1, 1, 100, exp_guild_parse_row, i);
+	}
 
 	add_timer_func_list(guild_save_timer, "guild_save_timer");
 	add_timer(gettick() + 10000, guild_save_timer, 0, 0);

+ 18 - 4
src/map/guild.c

@@ -2181,6 +2181,12 @@ void guild_flags_clear(void) {
 }
 
 void do_init_guild(void) {
+	const char* dbsubpath[] = {
+		"",
+		"import/",
+	};
+	int i;
+	
 	guild_db           = idb_alloc(DB_OPT_RELEASE_DATA);
 	castle_db          = idb_alloc(DB_OPT_BASE);
 	guild_expcache_db  = idb_alloc(DB_OPT_BASE);
@@ -2189,11 +2195,19 @@ void do_init_guild(void) {
 
 	guild_flags_count = 0;
 
-	sv_readdb(db_path, "castle_db.txt", ',', 4, 5, -1, &guild_read_castledb, 0);
-
 	memset(guild_skill_tree,0,sizeof(guild_skill_tree));
-	sv_readdb(db_path, "guild_skill_tree.txt", ',', 2+MAX_GUILD_SKILL_REQUIRE*2, 2+MAX_GUILD_SKILL_REQUIRE*2, -1, &guild_read_guildskill_tree_db, 0); //guild skill tree [Komurka]
-
+	
+	for(i=0; i<ARRAYLENGTH(dbsubpath); i++){
+		int n1 = strlen(db_path)+strlen(dbsubpath[i])+1;
+		char* dbsubpath1 = aMalloc(n1+1);
+		safesnprintf(dbsubpath1,n1+1,"%s/%s",db_path,dbsubpath[i]);
+		
+		sv_readdb(dbsubpath1, "castle_db.txt", ',', 4, 5, -1, &guild_read_castledb, i);
+		sv_readdb(dbsubpath1, "guild_skill_tree.txt", ',', 2+MAX_GUILD_SKILL_REQUIRE*2, 2+MAX_GUILD_SKILL_REQUIRE*2, -1, &guild_read_guildskill_tree_db, i); //guild skill tree [Komurka]
+		
+		aFree(dbsubpath1);
+	}
+	
 	add_timer_func_list(guild_payexp_timer,"guild_payexp_timer");
 	add_timer_func_list(guild_send_xy_timer, "guild_send_xy_timer");
 	add_timer_interval(gettick()+GUILD_PAYEXP_INVERVAL,guild_payexp_timer,0,0,GUILD_PAYEXP_INVERVAL);

+ 13 - 24
src/map/homunculus.c

@@ -1219,26 +1219,11 @@ static bool read_homunculusdb_sub(char* str[], int columns, int current)
 int read_homunculusdb(void)
 {
 	int i;
-	const char *filename[]={DBPATH"homunculus_db.txt","homunculus_db2.txt"};
-
+	const char *filename[]={DBPATH"homunculus_db.txt","import/homunculus_db.txt"};
 	memset(homunculus_db,0,sizeof(homunculus_db));
-	for(i = 0; i<ARRAYLENGTH(filename); i++)
-	{
-		if( i > 0 )
-		{
-			char path[256];
-
-			sprintf(path, "%s/%s", db_path, filename[i]);
-
-			if( !exists(path) )
-			{
-				continue;
-			}
-		}
-
-		sv_readdb(db_path, filename[i], ',', 50, 50, MAX_HOMUNCULUS_CLASS, &read_homunculusdb_sub, 0);
+	for(i = 0; i<ARRAYLENGTH(filename); i++){
+		sv_readdb(db_path, filename[i], ',', 50, 50, MAX_HOMUNCULUS_CLASS, &read_homunculusdb_sub, i);
 	}
-
 	return 0;
 }
 
@@ -1286,9 +1271,12 @@ static bool read_homunculus_skilldb_sub(char* split[], int columns, int current)
 
 int read_homunculus_skilldb(void)
 {
+	const char *filename[]={ "homun_skill_tree.txt","import/homun_skill_tree.txt"};
+	int i;
 	memset(hskill_tree,0,sizeof(hskill_tree));
-	sv_readdb(db_path, "homun_skill_tree.txt", ',', 13, 15, -1, &read_homunculus_skilldb_sub, 0);
-
+	for(i = 0; i<ARRAYLENGTH(filename); i++){
+		sv_readdb(db_path, filename[i], ',', 13, 15, -1, &read_homunculus_skilldb_sub, i);
+	}
 	return 0;
 }
 
@@ -1299,16 +1287,17 @@ void read_homunculus_expdb(void)
 	int i, j=0;
 	char *filename[]={
 		DBPATH"exp_homun.txt",
-		"exp_homun2.txt"};
+		"import/exp_homun.txt"
+	};
 
 	memset(hexptbl,0,sizeof(hexptbl));
-	for(i=0; i<2; i++){
+	for(i=0; i<ARRAYLENGTH(filename); i++){
 		sprintf(line, "%s/%s", db_path, filename[i]);
 		fp=fopen(line,"r");
 		if(fp == NULL){
 			if(i != 0)
 				continue;
-			ShowError("can't read %s\n",line);
+			if(i==0) ShowError("can't read %s\n",line);
 			return;
 		}
 		while(fgets(line, sizeof(line), fp) && j < MAX_LEVEL)
@@ -1322,7 +1311,7 @@ void read_homunculus_expdb(void)
 		}
 		if (hexptbl[MAX_LEVEL - 1]) // Last permitted level have to be 0!
 		{
-			ShowWarning("read_hexptbl: Reached max level in exp_homun [%d]. Remaining lines were not read.\n ", MAX_LEVEL);
+			ShowWarning("read_hexptbl: Reached max level in %s [%d]. Remaining lines were not read.\n ",filename,MAX_LEVEL);
 			hexptbl[MAX_LEVEL - 1] = 0;
 		}
 		fclose(fp);

+ 10 - 10
src/map/itemdb.c

@@ -646,14 +646,14 @@ static bool itemdb_read_itemavail(char* str[], int columns, int current)
  * read item group data
  * GroupID,ItemID,Rate{,Amount,isMust,isAnnounced,Duration,isNamed,isBound}
  *------------------------------------------*/
-static void itemdb_read_itemgroup_sub(const char* filename)
+static void itemdb_read_itemgroup_sub(const char* filename, bool silent)
 {
 	FILE *fp;
 	int ln=0, entries=0;
 	char line[1024];
 
 	if ((fp=fopen(filename,"r")) == NULL) {
-		ShowError("can't read %s\n", filename);
+		if(silent == 0) ShowError("can't read %s\n", filename);
 		return;
 	}
 	
@@ -670,7 +670,7 @@ static void itemdb_read_itemgroup_sub(const char* filename)
 			if (sscanf(line,"%[^:]: %[^\r\n]",w1,w2) == 2 &&
 				strcmpi(w1,"import") == 0)
 			{
-				itemdb_read_itemgroup_sub(w2);
+				itemdb_read_itemgroup_sub(w2, 0);
 				continue;
 			}
 		}
@@ -765,12 +765,12 @@ static void itemdb_read_itemgroup_sub(const char* filename)
 	return;
 }
 
-static void itemdb_read_itemgroup(void)
+static void itemdb_read_itemgroup(const char* basedir, bool silent)
 {
-	char path[256];
-	snprintf(path, 255, "%s/"DBPATH"item_group_db.txt", db_path);
+	char filepath[256];
+	sprintf(filepath, "%s/%s", basedir, "item_group_db.txt");
 	memset(&itemgroup_db, 0, sizeof(itemgroup_db));
-	itemdb_read_itemgroup_sub(path);
+	itemdb_read_itemgroup_sub(filepath, silent);
 	return;
 }
 
@@ -1538,7 +1538,7 @@ static void itemdb_read(void) {
 		itemdb_readdb();
 
 	
-	itemdb_read_itemgroup();
+	
 	
 	for(i=0; i<ARRAYLENGTH(dbsubpath); i++){
 		int n1 = strlen(db_path)+strlen(dbsubpath[i])+1;
@@ -1550,8 +1550,8 @@ static void itemdb_read(void) {
 		sv_readdb(dbsubpath2, "item_stack.txt",         ',', 3, 3, -1, &itemdb_read_stack, i);
 		sv_readdb(dbsubpath2, "item_nouse.txt",         ',', 3, 3, -1, &itemdb_read_nouse, i);
 		
-		if(i==0) 
-			safesnprintf(dbsubpath2,n2,"%s/%s%s",db_path,DBPATH,dbsubpath[i]);
+		if(i==0) safesnprintf(dbsubpath2,n2,"%s/%s%s",db_path,DBPATH,dbsubpath[i]);
+		itemdb_read_itemgroup(dbsubpath2, i);
 		itemdb_read_combos(dbsubpath2,i); //TODO change this to sv_read ? id#script ?
 		sv_readdb(dbsubpath2, "item_noequip.txt",       ',', 2, 2, -1, &itemdb_read_noequip, i);
 		sv_readdb(dbsubpath2, "item_trade.txt",         ',', 3, 3, -1, &itemdb_read_itemtrade, i);

+ 10 - 2
src/map/mercenary.c

@@ -462,8 +462,12 @@ static bool read_mercenarydb_sub(char* str[], int columns, int current)
 
 int read_mercenarydb(void)
 {
+	const char *filename[]={ "mercenary_db.txt","import/mercenary_db.txt"};
+	int i;
 	memset(mercenary_db,0,sizeof(mercenary_db));
-	sv_readdb(db_path, "mercenary_db.txt", ',', 26, 26, MAX_MERCENARY_CLASS, &read_mercenarydb_sub, 0);
+	for(i = 0; i<ARRAYLENGTH(filename); i++){
+		sv_readdb(db_path, filename[i], ',', 26, 26, MAX_MERCENARY_CLASS, &read_mercenarydb_sub, i);
+	}
 
 	return 0;
 }
@@ -501,7 +505,11 @@ static bool read_mercenary_skilldb_sub(char* str[], int columns, int current)
 
 int read_mercenary_skilldb(void)
 {
-	sv_readdb(db_path, "mercenary_skill_db.txt", ',', 3, 3, -1, &read_mercenary_skilldb_sub, 0);
+	const char *filename[]={ "mercenary_skill_db.txt","import/mercenary_skill_db.txt"};
+	int i;
+	for(i = 0; i<ARRAYLENGTH(filename); i++){
+		sv_readdb(db_path, filename[i], ',', 3, 3, -1, &read_mercenary_skilldb_sub, i);
+	}
 
 	return 0;
 }

+ 1 - 1
src/map/mob.c

@@ -4052,7 +4052,7 @@ static int mob_read_randommonster(void)
 		sprintf(line, "%s/%s", db_path, mobfile[i]);
 		fp=fopen(line,"r");
 		if(fp==NULL){
-			if(i>=ARRAYLENGTH(mobfile)/2-1) ShowError("mob_read_randommonster: can't read %s\n",line);
+			if(i<=ARRAYLENGTH(mobfile)/2-1) ShowError("mob_read_randommonster: can't read %s\n",line);
 			return -1;
 		}
 		while(fgets(line, sizeof(line), fp))

+ 1 - 1
src/map/pc.c

@@ -10146,7 +10146,7 @@ int pc_read_statsdb(const char *basedir, bool silent){
 			entries++;
 		}
 		fclose(fp);
-		ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", entries, DBPATH"statpoint.txt");
+		ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s%s"CL_RESET"'.\n", entries, basedir,"statpoint.txt");
 	}
 	return i;
 }

+ 3 - 5
src/map/pet.c

@@ -1213,7 +1213,7 @@ int pet_skill_support_timer(int tid, unsigned int tick, int id, intptr_t data)
  *------------------------------------------*/
 int read_petdb()
 {
-	char* filename[] = {"pet_db.txt","pet_db2.txt"};
+	char* filename[] = {"pet_db.txt","import/pet_db.txt"};
 	FILE *fp;
 	int nameid,i,j,k;
 
@@ -1243,10 +1243,8 @@ int read_petdb()
 
 		sprintf(line, "%s/%s", db_path, filename[i]);
 		fp=fopen(line,"r");
-		if( fp == NULL )
-		{
-			if( i == 0 )
-				ShowError("can't read %s\n",line);
+		if( fp == NULL ) {
+			if( i == 0 ) ShowError("can't read %s\n",line);
 			continue;
 		}
 

+ 53 - 46
src/map/quest.c

@@ -288,63 +288,70 @@ int quest_check(TBL_PC * sd, int quest_id, quest_check_type type) {
 }
 
 int quest_read_db(void) {
-	FILE *fp;
-	char line[1024];
-	int i,j,k = 0;
-	char *str[20],*p,*np;
-
-	sprintf(line, "%s/quest_db.txt", db_path);
-	if( (fp=fopen(line,"r"))==NULL ){
-		ShowError("can't read %s\n", line);
-		return -1;
-	}
+	const char* dbsubpath[] = {
+		"",
+		"import/",
+	};
+	int f;
+
+	for(f=0; f<ARRAYLENGTH(dbsubpath); f++){
+		FILE *fp;
+		char line[1024];
+		int i,j,k = 0;
+		char *str[20],*p,*np;
+		char filename[256];
 	
-	while(fgets(line, sizeof(line), fp)) {
-		
-		if (k == MAX_QUEST_DB) {
-			ShowError("quest_read_db: Too many entries specified in %s/quest_db.txt!\n", db_path);
-			break;
+		sprintf(filename, "%s/%s%s", db_path,dbsubpath[f],"quest_db.txt");
+		if( (fp=fopen(filename,"r"))==NULL ){
+			if(f==0) ShowError("can't read %s\n", filename);
+			return -1;
 		}
-		
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		memset(str,0,sizeof(str));
 
-		for( j = 0, p = line; j < 8; j++ ) {
-			if( ( np = strchr(p,',') ) != NULL ) {
-				str[j] = p;
-				*np = 0;
-				p = np + 1;
+		while(fgets(line, sizeof(line), fp)) {
+			if (k == MAX_QUEST_DB) {
+				ShowError("quest_read_db: Too many entries specified in %s/quest_db.txt!\n", db_path);
+				break;
 			}
-			else if (str[0] == NULL)
-				continue;
-			else {
-				ShowError("quest_read_db: insufficient columns in line %s\n", line);
+			if(line[0]=='/' && line[1]=='/')
 				continue;
+			memset(str,0,sizeof(str));
+
+			for( j = 0, p = line; j < 8; j++ ) {
+				if( ( np = strchr(p,',') ) != NULL ) {
+					str[j] = p;
+					*np = 0;
+					p = np + 1;
+				}
+				else if (str[0] == NULL)
+					continue;
+				else {
+					ShowError("quest_read_db: insufficient columns in line %s\n", line);
+					continue;
+				}
 			}
-		}
-		if(str[0]==NULL)
-			continue;
+			if(str[0]==NULL)
+				continue;
 
-		memset(&quest_db[k], 0, sizeof(quest_db[0]));
+			memset(&quest_db[k], 0, sizeof(quest_db[0]));
 
-		quest_db[k].id = atoi(str[0]);
-		quest_db[k].time = atoi(str[1]);
-		
-		for( i = 0; i < MAX_QUEST_OBJECTIVES; i++ ) {
-			quest_db[k].mob[i] = atoi(str[2*i+2]);
-			quest_db[k].count[i] = atoi(str[2*i+3]);
+			quest_db[k].id = atoi(str[0]);
+			quest_db[k].time = atoi(str[1]);
 
-			if( !quest_db[k].mob[i] || !quest_db[k].count[i] )
-				break;
-		}
-		
-		quest_db[k].num_objectives = i;
+			for( i = 0; i < MAX_QUEST_OBJECTIVES; i++ ) {
+				quest_db[k].mob[i] = atoi(str[2*i+2]);
+				quest_db[k].count[i] = atoi(str[2*i+3]);
 
-		k++;
+				if( !quest_db[k].mob[i] || !quest_db[k].count[i] )
+					break;
+			}
+
+			quest_db[k].num_objectives = i;
+
+			k++;
+		}
+		fclose(fp);
+		ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", k, filename);
 	}
-	fclose(fp);
-	ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", k, "quest_db.txt");
 	return 0;
 }