summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAsheraf <acheraf1998@gmail.com>2016-08-25 13:00:05 +0100
committerhemagx <hemagx2@gmail.com>2016-08-26 21:34:19 +0200
commit84c253d2b012bc06b25a843c09a60cb28c678e95 (patch)
tree8af64fb54cd80be5991410d508620b083d90540d
parent13067dc118b790e676dc2cecf272279a850c7ce2 (diff)
downloadhercules-84c253d2b012bc06b25a843c09a60cb28c678e95.tar.gz
hercules-84c253d2b012bc06b25a843c09a60cb28c678e95.tar.bz2
hercules-84c253d2b012bc06b25a843c09a60cb28c678e95.tar.xz
hercules-84c253d2b012bc06b25a843c09a60cb28c678e95.zip
Implementation of Ghost palace instance based on iRO
* Added ghost palace instance script * Add needed monster, item and quest database entries * Added mapflags for instance map (1@spa)
-rw-r--r--db/quest_db.conf18
-rw-r--r--db/re/item_db.conf30
-rw-r--r--db/re/mob_db.conf581
-rw-r--r--db/re/mob_skill_db.txt50
-rw-r--r--npc/mapflag/nobranch.txt3
-rw-r--r--npc/mapflag/noicewall.txt3
-rw-r--r--npc/mapflag/nomemo.txt3
-rw-r--r--npc/mapflag/nopvp.txt1
-rw-r--r--npc/mapflag/nosave.txt3
-rw-r--r--npc/mapflag/noteleport.txt4
-rw-r--r--npc/mapflag/nowarpto.txt3
-rw-r--r--npc/mapflag/partylock.txt3
-rw-r--r--npc/mapflag/zone.txt3
-rw-r--r--npc/re/instances/ghost_palace.txt837
-rw-r--r--npc/re/scripts.conf3
15 files changed, 1531 insertions, 14 deletions
diff --git a/db/quest_db.conf b/db/quest_db.conf
index 233bc2d4c..5b99bac25 100644
--- a/db/quest_db.conf
+++ b/db/quest_db.conf
@@ -585,6 +585,24 @@ quest_db: (
Id: 1228
Name: "Getting back Professor Worm's memory"
},
+// Episode 14.2 Eclage, Memorial Dungeon: Ghost Palace
+{
+ Id: 1260
+ Name: "Cursed Swordman"
+},
+{
+ Id: 1261
+ Name: "Cursed Swordman"
+ TimeLimit: 82800
+},
+{
+ Id: 1262
+ Name: "Cursed Swordman"
+},
+{
+ Id: 1263
+ Name: "Cursed Swordman"
+},
{
Id: 2000
Name: "Job Change to Blacksmith"
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index 395fae977..a8d37ab0f 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -104597,6 +104597,36 @@ item_db: (
Script: <" bonus bAtkEle,Ele_Holy; ">
},
{
+ Id: 13441
+ AegisName: "Thanatos_Sword"
+ Name: "Thanatos Sword"
+ Type: 4
+ Buy: 10
+ Weight: 700
+ Atk: 150
+ Matk: 100
+ Range: 1
+ Slots: 1
+ Job: {
+ Swordsman: true
+ Knight: true
+ Crusader: true
+ }
+ Loc: 2
+ WeaponLv: 4
+ EquipLv: 120
+ View: 2
+ Script: <"
+ bonus bInt, 6;
+ bonus bVit, 6;
+ bonus bLuk, -6;
+ bonus2 bHPDrainRate, 50, 5;
+ bonus2 bSPDrainRate, 10, 5;
+ bonus2 bHPLossRate, 100, 10000;
+ ">
+ OnUnequipScript: <" heal -1000,0; ">
+},
+{
Id: 13442
AegisName: "Old_Parasol"
Name: "Old Parasol"
diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf
index 580c3806d..5a3275805 100644
--- a/db/re/mob_db.conf
+++ b/db/re/mob_db.conf
@@ -82843,20 +82843,575 @@ mob_db: (
//2945,J_MUMMY
//2946,J_ANUBIS
//2947,J_EGGYRA
-//2948,CURSED_SOLDIER
-//2949,CURSED_SENTINEL
-//2950,BROKEN_MIND
-//2951,FLOATING_WORD
-//2952,LIKE_LOVE
-//2953,CURSED_MEMORY
-//2954,COLORLESS_VOW
-//2955,OLD_FRIENDSHIP
-//2956,SWEET_SLAUGHTER
-//2957,FORGOTTEN_NAME
-//2958,FATAL_DAYS
-//2959,TORTUROUS_REDEEMER
+{
+ Id: 2948
+ SpriteName: "CURSED_SOLDIER"
+ Name: "Cursed Solider"
+ Lv: 110
+ Hp: 18574
+ Sp: 1
+ Exp: 1907
+ JExp: 1851
+ AttackRange: 9
+ Attack: [1258, 533]
+ Def: 84
+ Mdef: 35
+ Stats: {
+ Str: 81
+ Agi: 50
+ Vit: 64
+ Int: 56
+ Dex: 178
+ Luk: 23
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_Undead"
+ Element: ("Ele_Undead", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 150
+ AttackDelay: 1960
+ AttackMotion: 576
+ DamageMotion: 420
+ Drops: {
+ Decayed_Nail: 3000
+ Gray_Piece: 1000
+ }
+},
+{
+ Id: 2949
+ SpriteName: "CURSED_SENTINEL"
+ Name: "Cursed Sentinel"
+ Lv: 110
+ Hp: 14099
+ Sp: 1
+ Exp: 1634
+ JExp: 1346
+ AttackRange: 2
+ Attack: [1347, 559]
+ Def: 84
+ Mdef: 41
+ Stats: {
+ Str: 120
+ Agi: 65
+ Vit: 66
+ Int: 41
+ Dex: 107
+ Luk: 26
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Large"
+ Race: "RC_DemiHuman"
+ Element: ("Ele_Dark", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 175
+ AttackDelay: 914
+ AttackMotion: 1344
+ DamageMotion: 384
+ Drops: {
+ Mementos: 2500
+ Worn_Out_Page: 1500
+ Gray_Piece: 1000
+ }
+},
+{
+ Id: 2950
+ SpriteName: "BROKEN_MIND"
+ Name: "Broken Mind"
+ Lv: 110
+ Hp: 13520
+ Sp: 1
+ Exp: 1545
+ JExp: 1557
+ AttackRange: 1
+ Attack: [1259, 540]
+ Def: 84
+ Mdef: 41
+ Stats: {
+ Str: 69
+ Agi: 37
+ Vit: 36
+ Int: 10
+ Dex: 64
+ Luk: 5
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_Demon"
+ Element: ("Ele_Dark", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 200
+ AttackDelay: 920
+ AttackMotion: 720
+ DamageMotion: 200
+ Drops: {
+ Exorcize_Herb: 1000
+ Withered_Flower: 2500
+ Gray_Piece: 1000
+ }
+},
+{
+ Id: 2951
+ SpriteName: "FLOATING_WORD"
+ Name: "Floating Word"
+ Lv: 110
+ Hp: 11276
+ Sp: 1
+ Exp: 1166
+ JExp: 1034
+ AttackRange: 1
+ Attack: [1080, 429]
+ Def: 93
+ Mdef: 40
+ Stats: {
+ Str: 111
+ Agi: 90
+ Vit: 60
+ Int: 70
+ Dex: 139
+ Luk: 65
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Small"
+ Race: "RC_Demon"
+ Element: ("Ele_Ghost", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 150
+ AttackDelay: 972
+ AttackMotion: 648
+ DamageMotion: 432
+ Drops: {
+ Sticky_Mucus: 3000
+ Horn: 2500
+ Gray_Piece: 1000
+ }
+},
+{
+ Id: 2952
+ SpriteName: "LIKE_LOVE"
+ Name: "Like Love"
+ Lv: 110
+ Hp: 14008
+ Sp: 1
+ Exp: 1505
+ JExp: 1667
+ AttackRange: 2
+ Attack: [1182, 1]
+ Def: 64
+ Mdef: 51
+ Stats: {
+ Str: 62
+ Agi: 27
+ Vit: 25
+ Int: 55
+ Dex: 102
+ Luk: 20
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_Demon"
+ Element: ("Ele_Wind", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 150
+ AttackDelay: 1056
+ AttackMotion: 1056
+ DamageMotion: 336
+ Drops: {
+ Immortal_Heart: 2500
+ Gray_Piece: 1000
+ }
+},
+{
+ Id: 2953
+ SpriteName: "CURSED_MEMORY"
+ Name: "Cursed Memory"
+ Lv: 110
+ Hp: 18045
+ Sp: 1
+ Exp: 1802
+ JExp: 1623
+ AttackRange: 1
+ Attack: [1310, 557]
+ Def: 89
+ Mdef: 28
+ Stats: {
+ Str: 87
+ Agi: 39
+ Vit: 58
+ Int: 5
+ Dex: 82
+ Luk: 10
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_Undead"
+ Element: ("Ele_Undead", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 350
+ AttackDelay: 1768
+ AttackMotion: 500
+ DamageMotion: 192
+ Drops: {
+ Decayed_Nail: 3000
+ Gray_Piece: 1000
+ }
+},
+{
+ Id: 2954
+ SpriteName: "COLORLESS_VOW"
+ Name: "Colorless Vow"
+ Lv: 110
+ Hp: 19194
+ Sp: 1
+ Exp: 1939
+ JExp: 1881
+ AttackRange: 1
+ Attack: [1478, 643]
+ Def: 95
+ Mdef: 41
+ Stats: {
+ Str: 84
+ Agi: 35
+ Vit: 60
+ Int: 20
+ Dex: 85
+ Luk: 15
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_Undead"
+ Element: ("Ele_Undead", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 350
+ AttackDelay: 1848
+ AttackMotion: 500
+ DamageMotion: 576
+ Drops: {
+ Horrendous_Mouth: 3500
+ Sharpened_Cuspid: 2000
+ Gray_Piece: 1000
+ }
+},
+{
+ Id: 2955
+ SpriteName: "OLD_FRIENDSHIP"
+ Name: "Old Friendship"
+ Lv: 110
+ Hp: 12614
+ Sp: 1
+ Exp: 1306
+ JExp: 1328
+ AttackRange: 1
+ Attack: [1147, 491]
+ Def: 78
+ Mdef: 5
+ Stats: {
+ Str: 56
+ Agi: 12
+ Vit: 19
+ Int: 11
+ Dex: 30
+ Luk: 10
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_Undead"
+ Element: ("Ele_Undead", 2)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 250
+ AttackDelay: 2456
+ AttackMotion: 912
+ DamageMotion: 504
+ Drops: {
+ Skel_Bone: 3500
+ Manacles: 2500
+ Gray_Piece: 1000
+ }
+},
+{
+ Id: 2956
+ SpriteName: "SWEET_SLAUGHTER"
+ Name: "Sweet Slaughter"
+ Lv: 110
+ Hp: 13986
+ Sp: 1
+ Exp: 1960
+ JExp: 1587
+ AttackRange: 1
+ Attack: [1216, 493]
+ Def: 125
+ Mdef: 10
+ Stats: {
+ Str: 121
+ Agi: 48
+ Vit: 40
+ Int: 31
+ Dex: 125
+ Luk: 32
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Large"
+ Race: "RC_Undead"
+ Element: ("Ele_Undead", 1)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 350
+ AttackDelay: 528
+ AttackMotion: 1000
+ DamageMotion: 396
+ Drops: {
+ Realgar_Wine: 1000
+ Immortal_Heart: 2000
+ Gray_Piece: 1000
+ }
+},
+{
+ Id: 2957
+ SpriteName: "FORGOTTEN_NAME"
+ Name: "Forgotten Name"
+ Lv: 110
+ Hp: 19546
+ Sp: 1
+ Exp: 1505
+ JExp: 1485
+ AttackRange: 2
+ Attack: [1093, 427]
+ Def: 111
+ Mdef: 38
+ Stats: {
+ Str: 121
+ Agi: 29
+ Vit: 51
+ Int: 43
+ Dex: 100
+ Luk: 3
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_Undead"
+ Element: ("Ele_Undead", 2)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 155
+ AttackDelay: 847
+ AttackMotion: 1152
+ DamageMotion: 480
+ Drops: {
+ Realgar_Wine: 5000
+ Exorcize_Herb: 5000
+ Gray_Piece: 1500
+ }
+},
+{
+ Id: 2958
+ SpriteName: "FATAL_DAYS"
+ Name: "Fatal Days"
+ Lv: 120
+ Hp: 24240
+ Sp: 1
+ Exp: 2052
+ JExp: 2026
+ AttackRange: 2
+ Attack: [1025, 403]
+ Def: 84
+ Mdef: 41
+ Stats: {
+ Str: 100
+ Agi: 71
+ Vit: 63
+ Int: 85
+ Dex: 115
+ Luk: 37
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_Demon"
+ Element: ("Ele_Dark", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 170
+ AttackDelay: 720
+ AttackMotion: 384
+ DamageMotion: 480
+ Drops: {
+ Petite_DiablOfs_Horn: 2500
+ Tendon: 2500
+ Gray_Piece: 1500
+ }
+},
+{
+ Id: 2959
+ SpriteName: "TORTUROUS_REDEEMER"
+ Name: "Torturous Redeemer"
+ Lv: 120
+ Hp: 103342
+ Sp: 1
+ Exp: 10599
+ JExp: 8378
+ AttackRange: 1
+ Attack: [1253, 500]
+ Def: 144
+ Mdef: 28
+ Stats: {
+ Str: 133
+ Agi: 69
+ Vit: 72
+ Int: 55
+ Dex: 165
+ Luk: 44
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_DemiHuman"
+ Element: ("Ele_Earth", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ Boss: true
+ CanAttack: true
+ Detector: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 200
+ AttackDelay: 672
+ AttackMotion: 420
+ DamageMotion: 360
+ Drops: {
+ Evil_Horn: 2000
+ Gray_Piece: 10000
+ Gray_Piece: 10000
+ }
+},
//2960,MM_FLAMECROSS
-//2961,E_TORTUROUS_REDEEMER
+{
+ Id: 2961
+ SpriteName: "E_TORTUROUS_REDEEMER"
+ Name: "Torturous Redeemer"
+ Lv: 120
+ Hp: 103342
+ Sp: 1
+ Exp: 1
+ JExp: 1
+ AttackRange: 1
+ Attack: [1, 1]
+ Def: 144
+ Mdef: 28
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Int: 1
+ Dex: 1
+ Luk: 1
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_DemiHuman"
+ Element: ("Ele_Earth", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ Boss: true
+ CanAttack: true
+ Detector: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 200
+ AttackDelay: 672
+ AttackMotion: 420
+ DamageMotion: 360
+},
//2962,E_DEVILING
//2963,WOODIE
//2964,EXP_1000
diff --git a/db/re/mob_skill_db.txt b/db/re/mob_skill_db.txt
index 6ec2e42e1..25a8a803d 100644
--- a/db/re/mob_skill_db.txt
+++ b/db/re/mob_skill_db.txt
@@ -10081,6 +10081,55 @@
2923,Owl Marquees@NPC_EMOTION,chase,197,1,200,0,5000,yes,self,always,0,19,0xA1,,,,,
2923,Owl Marquees@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,6,0x37B5,,,,,
2923,Owl Marquees@NPC_SUMMONSLAVE,idle,196,2,10000,2000,60000,no,self,slavele,0,2921,,,,,,
+
+// Ghost Palace Instance
+2948,Cursed Soldier@AC_DOUBLE,attack,46,5,500,0,5000,no,target,always,,,,,,,,
+2948,Cursed Soldier@AC_SHOWER,attack,47,3,500,0,5000,no,target,always,,,,,,,,
+2948,Cursed Soldier@NPC_BLINDATTACK,attack,177,5,500,0,5000,no,target,always,,,,,,,,
+2948,Cursed Soldier@NPC_MAGICALATTACK,attack,192,1,500,800,5000,yes,target,always,,,,,,,,
+2949,Cursed Sentinel@AS_SONICBLOW,attack,136,7,500,800,5000,yes,target,always,,,,,,,29,
+2949,Cursed Sentinel@NPC_CURSEATTACK,attack,181,5,500,800,5000,yes,target,always,,,,,,,29,
+2950,Broken Mind@CR_REFLECTSHIELD,attack,252,2,500,0,300000,yes,self,always,,,,,,,7,
+2950,Broken Mind@NPC_BLINDATTACK,attack,177,3,1500,0,5000,no,target,always,,,,,,,1,
+2950,Broken Mind@NPC_BLINDATTACK,chase,177,3,1500,0,5000,no,target,always,,,,,,,1,
+2950,Broken Mind@NPC_BLOODDRAIN,attack,199,1,500,0,5000,no,target,always,,,,,,,26,
+2950,Broken Mind@NPC_CURSEATTACK,attack,181,3,500,800,5000,yes,target,always,,,,,,,0,
+2950,Broken Mind@NPC_CURSEATTACK,chase,181,3,500,800,5000,yes,target,always,,,,,,,0,
+2950,Broken Mind@NPC_PETRIFYATTACK,attack,180,3,500,500,5000,yes,target,always,,,,,,,2,
+2950,Broken Mind@NPC_PETRIFYATTACK,chase,180,3,500,500,5000,yes,target,always,,,,,,,2,
+2951,Floating Word@MG_FIREBALL,chase,17,5,1500,500,5000,yes,target,attackpcge,2,,,,,,,
+2951,Floating Word@MO_BODYRELOCATION,chase,264,1,2000,500,5000,yes,target,always,,,,,,,,
+2951,Floating Word@NPC_BLOODDRAIN,attack,199,1,500,0,5000,no,target,always,,,,,,,2,
+2951,Floating Word@NPC_EMOTION,idle,197,1,2000,0,5000,no,self,always,,29,,,,,,
+2952,Like Love@HT_SHOCKWAVE,idle,118,5,500,0,300000,no,around2,always,,,,,,,29,
+2952,Like Love@MG_LIGHTNINGBOLT,attack,20,5,500,1500,5000,no,target,always,,,,,,,6,
+2952,Like Love@MG_LIGHTNINGBOLT,chase,20,5,500,1500,5000,no,target,always,,,,,,,6,
+2952,Like Love@NPC_EMOTION,idle,197,1,2000,0,5000,no,self,always,,29,,,,,,
+2952,Like Love@NPC_MAGICALATTACK,attack,192,1,500,1000,5000,yes,target,always,,,,,,,9,
+2952,Like Love@NPC_UNDEADATTACK,attack,347,2,2000,0,5000,no,target,always,,,,,,,,
+2952,Like Love@WZ_JUPITEL,attack,84,3,500,1500,5000,no,target,always,,,,,,,6,
+2952,Like Love@WZ_JUPITEL,chase,84,3,500,1500,5000,no,target,always,,,,,,,6,
+2953,Cursed Memory@NPC_POISON,attack,176,3,500,800,5000,yes,target,always,,,,,,,,
+2953,Cursed Memory@NPC_POISONATTACK,attack,188,3,500,800,5000,yes,target,always,,,,,,,,
+2953,Cursed Memory@NPC_UNDEADATTACK,attack,347,2,500,500,5000,yes,target,always,,,,,,,,
+2954,Colorless Vow@NPC_CRITICALSLASH,attack,170,1,500,500,5000,yes,target,always,,,,,,,,
+2954,Colorless Vow@NPC_SPLASHATTACK,attack,174,1,2000,0,5000,no,target,attackpcge,2,,,,,,,
+2955,Old Friendship@NPC_POISON,angry,176,3,500,800,5000,yes,target,always,,,,,,,,
+2955,Old Friendship@NPC_POISON,attack,176,3,500,800,5000,yes,target,always,,,,,,,,
+2956,Sweet Slaughter@AS_GRIMTOOTH,chase,137,5,2000,0,5000,no,target,always,,,,,,,,
+2956,Sweet Slaughter@BS_MAXIMIZE,attack,114,5,500,1000,5000,yes,self,always,,,,,,,,
+2956,Sweet Slaughter@BS_MAXIMIZE,chase,114,5,500,1000,5000,yes,self,always,,,,,,,,
+2956,Sweet Slaughter@NPC_SPLASHATTACK,attack,174,1,2000,0,5000,no,target,attackpcge,2,,,,,,,
+2956,Sweet Slaughter@NPC_STUNATTACK,attack,179,3,500,1500,5000,yes,target,always,,,,,,,,
+2957,Forgotten Name@NPC_CRITICALSLASH,attack,170,1,1000,500,5000,yes,target,always,,,,,,,,
+2957,Forgotten Name@NPC_DARKNESSATTACK,attack,190,3,500,500,5000,yes,target,always,,,,,,,6,
+2958,Fatal Days@AS_GRIMTOOTH,idle,137,5,10000,0,700,no,target,mystatuson,hiding,,,,,,,
+2958,Fatal Days@MG_SOULSTRIKE,chase,13,5,2000,0,3000,no,target,always,,,,,,,,
+2959,Torturous Redeemer@SM_BASH,attack,5,5,500,0,5000,no,target,always,,,,,,,,
+2959,Torturous Redeemer@NPC_FIREATTACK,attack,186,3,1000,0,200000,yes,target,always,,,,,,,,
+2959,Torturous Redeemer@WZ_FIREPILLAR,attack,80,5,500,0,10000,no,around2,always,,,,,,,,
+2959,Torturous Redeemer@SM_MAGNUM,attack,7,5,500,0,10000,no,self,always,,,,,,,,
+
3074,Time Holder@NPC_AGIUP,attack,350,5,10000,0,10000,yes,self,myhpltmaxrate,30,,,,,,,
3074,Time Holder@AL_INCAGI,chase,29,10,2000,700,10000,no,self,always,0,,,,,,,
3074,Time Holder@WZ_METEOR,attack,83,11,1000,500,10000,no,target,always,0,,,,,,,
@@ -10089,3 +10138,4 @@
3074,Time Holder@NPC_PULSESTRIKE,attack,661,5,2000,0,30000,yes,self,always,0,,,,,,,
3074,Time Holder@NPC_SUMMONSLAVE,attack,196,5,1000,700,10000,no,self,slavele,0,2917,,,,,,
3074,Time Holder@NPC_SUMMONSLAVE,idle,196,5,1000,700,10000,no,self,slavele,0,2917,,,,,,
+
diff --git a/npc/mapflag/nobranch.txt b/npc/mapflag/nobranch.txt
index 8e69367b2..71672c1a1 100644
--- a/npc/mapflag/nobranch.txt
+++ b/npc/mapflag/nobranch.txt
@@ -405,6 +405,9 @@ ecl_in04 mapflag nobranch
1@ecl mapflag nobranch
ecl_hub01 mapflag nobranch
+// Ghost Palace ===========
+1@spa mapflag nobranch
+
//evt_zombie mapflag nobranch
// Poring War ==================
diff --git a/npc/mapflag/noicewall.txt b/npc/mapflag/noicewall.txt
index 3c5c55dbc..9b6e3940a 100644
--- a/npc/mapflag/noicewall.txt
+++ b/npc/mapflag/noicewall.txt
@@ -200,6 +200,9 @@ nguild_prt mapflag noicewall
// Inside Eclage ===========
1@ecl mapflag noicewall
+// Ghost Palace ===========
+1@spa mapflag noicewall
+
// Poring War ====================
poring_w01 mapflag noicewall
poring_w02 mapflag noicewall
diff --git a/npc/mapflag/nomemo.txt b/npc/mapflag/nomemo.txt
index 89222153d..4ac4837bc 100644
--- a/npc/mapflag/nomemo.txt
+++ b/npc/mapflag/nomemo.txt
@@ -792,6 +792,9 @@ moc_prydn2 mapflag nomemo
1@nyd mapflag nomemo
2@nyd mapflag nomemo
+// Ghost Palace ===========
+1@spa mapflag nomemo
+
//evt_zombie mapflag nomemo
// Poring War ====================
diff --git a/npc/mapflag/nopvp.txt b/npc/mapflag/nopvp.txt
index f69039b06..ee2f8438d 100644
--- a/npc/mapflag/nopvp.txt
+++ b/npc/mapflag/nopvp.txt
@@ -53,6 +53,7 @@
1@ma_c mapflag pvp off
1@ma_b mapflag pvp off
1@ecl mapflag pvp off
+1@spa mapflag pvp off
bat_a01 mapflag pvp off
bat_a02 mapflag pvp off
diff --git a/npc/mapflag/nosave.txt b/npc/mapflag/nosave.txt
index ece12d7bd..f53bf5a83 100644
--- a/npc/mapflag/nosave.txt
+++ b/npc/mapflag/nosave.txt
@@ -346,6 +346,9 @@ que_lhz mapflag nosave SavePoint
// Inside Eclage ===========
1@ecl mapflag nosave SavePoint
+// Ghost Palace ===========
+1@spa mapflag nosave SavePoint
+
//evt_zombie mapflag nosave SavePoint
// Poring War ====================
diff --git a/npc/mapflag/noteleport.txt b/npc/mapflag/noteleport.txt
index 93e8d2e24..e8693678a 100644
--- a/npc/mapflag/noteleport.txt
+++ b/npc/mapflag/noteleport.txt
@@ -467,6 +467,10 @@ nyd_dun02 mapflag noteleport
2@nyd mapflag noteleport
2@nyd mapflag monster_noteleport
+// Ghost Palace ===========
+1@spa mapflag noteleport
+1@spa mapflag monster_noteleport
+
//evt_zombie mapflag noteleport
// Poring War ====================
diff --git a/npc/mapflag/nowarpto.txt b/npc/mapflag/nowarpto.txt
index 596dabbd0..34d093ae2 100644
--- a/npc/mapflag/nowarpto.txt
+++ b/npc/mapflag/nowarpto.txt
@@ -168,6 +168,9 @@ spl_in01 mapflag nowarpto
1@nyd mapflag nowarpto
2@nyd mapflag nowarpto
+// Ghost Palace ===========
+1@spa mapflag nowarpto
+
// Poring War ====================
poring_w01 mapflag nowarpto
poring_w02 mapflag nowarpto
diff --git a/npc/mapflag/partylock.txt b/npc/mapflag/partylock.txt
index 2cb06eefa..ee16cf798 100644
--- a/npc/mapflag/partylock.txt
+++ b/npc/mapflag/partylock.txt
@@ -78,3 +78,6 @@
// Inside Eclage ===========
1@ecl mapflag partylock
+
+// Ghost Palace ===========
+1@spa mapflag partylock
diff --git a/npc/mapflag/zone.txt b/npc/mapflag/zone.txt
index a405934a2..c14ef569f 100644
--- a/npc/mapflag/zone.txt
+++ b/npc/mapflag/zone.txt
@@ -100,6 +100,9 @@ prt_are_in mapflag zone Izlude Battle Arena
// Inside Eclage ===========
1@ecl mapflag zone Memorial Dungeon
+// Ghost Palace ===========
+1@spa mapflag zone Memorial Dungeon
+
//Towns
alberta mapflag zone Towns
aldebaran mapflag zone Towns
diff --git a/npc/re/instances/ghost_palace.txt b/npc/re/instances/ghost_palace.txt
new file mode 100644
index 000000000..ea8f3d853
--- /dev/null
+++ b/npc/re/instances/ghost_palace.txt
@@ -0,0 +1,837 @@
+//================= Hercules Script =======================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2016 Hercules Dev Team
+//= Copyright (C) Asheraf
+//= Copyright (C) pengc2010
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Ghost Palace
+//================= Current Version =======================================
+//= 1.1
+//=========================================================================
+1@spa mapflag src4instance
+
+dali02,44,129,5 script Unpleasent Royal Guard 4_M_SAKRAYROYAL,{
+ if (BaseLevel < 120) {
+ mes("[Unpleasent Royal Guard]");
+ mes("Althought I need help with a task, you are not strong enough to assist me, noob~!");
+ next;
+ mes("[Unpleasent Royal Guard]");
+ mes("Come back after when you have done some training and are at least level 120!");
+ close();
+ }
+ if (questprogress(1261)) {
+ mes("[Unpleasent Royal Guard]");
+ mes("The monsters that attacked the palace are wandering around the secret entrance. It would be very bad if they spotted us... Please wait until the time limit for re-entrance passed.");
+ close();
+ }
+ if (questprogress(1260)) {
+ if (has_instance("1@spa") == "") {
+ mes("[Unpleasent Royal Guard]");
+ mes("Did the gate close?\r"
+ "Please enter the gate as soon as you can next time.");
+ erasequest 1260;
+ close();
+ }
+ mes("[Unpleasent Royal Guard]");
+ mes("Please go ahead, ^0000ffThe entrance is behind me.^000000\r"
+ "I will be right behind you!");
+ close();
+ }
+ .@party_id = getcharid(1);
+ if (!.@party_id) {
+ mes("[Unpleasent Royal Guard]");
+ mes("This is a solo instance. Please form a solo party before continuing.");
+ close();
+ }
+ if (getcharid(0) != getpartyleader(.@party_id,2)) {
+ mes("[Unpleasent Royal Guard]");
+ mes("I'm looking for adventurers to help me!\r"
+ "I want to talk to the team leader, can I?");
+ close();
+ }
+ mes("[Unpleasent Royal Guard]");
+ mes("I need some help, even from the likes of you.");
+ next;
+ mes("[Unpleasent Royal Guard]");
+ mes("In the middle of the battle the princess disappeared while I was guarding the palace.");
+ next;
+ mes("[Unpleasent Royal Guard]");
+ mes("You run ahead and i will catch up.\r"
+ "We must save her.");
+ next;
+ if (select("I will help.", "This is not a good time.") == 2) {
+ mes("[Unpleasent Royal Guard]");
+ mes("Even now all the royal guards are fighting and dying to the monsters.");
+ next;
+ mes("[Unpleasent Royal Guard]");
+ mes("We must save the princess no matter how much fear grips our hearts!");
+ close();
+ }
+ .@instance = instance_create("Ghost Palace", .@party_id);
+ .@p_name$ = getpartyname(.@party_id);
+ .@md_name$ = "Ghost Palace";
+ if (.@instance < 0) {
+ mesf("Party Name: %s", .@p_name$);
+ mesf("Party Leader: %s", strcharinfo(0));
+ mesf("^0000FF%s^000000 - Reservation Failed!", .@md_name$);
+ close();
+ }
+ if (instance_attachmap("1@spa", .@instance) != "") {
+ instance_set_timeout(3600, 300, .@instance);
+ instance_init(.@instance);
+ if (!questprogress(1260)) setquest 1260;
+ mes("[Unpleasent Royal Guard]");
+ mes("Thank You..\r"
+ "I will open the secret passage to ^0000FFGhost Palace.^000000\r"
+ "Please be ready!");
+ close();
+ } else {
+ instance_destroy(.@instance);
+ mesf("^0000FF%s^000000 - Reservation Failed!", .@md_name$);
+ close();
+ }
+}
+
+dali02,41,134,0 script Interdimensional Device::gpportal PORTAL,{
+ if (BaseLevel < 120) {
+ mes("[Unpleasent Royal Guard]");
+ mes("Althought I need help with a task, you are not strong enough to assist me, noob~!");
+ next;
+ mes("[Unpleasent Royal Guard]");
+ mes("Come back after when you have done some training and are at least level 120!");
+ close();
+ }
+ if (questprogress(1261)) {
+ if (questprogress(1261, PLAYTIME) == 2) {
+ erasequest 1261;
+ if (questprogress(1260))
+ erasequest 1260;
+ end;
+ }
+ mes("[Unpleasent Royal Guard]");
+ mes("The monsters that attacked the palace are wandering around the secret entrance. It would be very bad if they spotted us... Please wait until the time limit for re-entrance passed.");
+ close();
+ }
+ if (getcharid(0) == getpartyleader(.@party_id,2) && !questprogress(1260)) {
+ mes("[Unpleasent Royal Guard]");
+ mes("I'm looking for adventurers to help me!\r"
+ "I want to talk to the team leader, can I?");
+ close();
+ }
+ mes("[Unpleasent Royal Guard]");
+ mes("I can see the secret passage into the Palace... Are you ready to save the princess?!");
+ next;
+ if (select("Enter", "Stop") == 2) {
+ mes("[Unpleasent Royal Guard]");
+ mes("Even now all the royal guards are fighting and dying to the monsters.");
+ next;
+ mes("[Unpleasent Royal Guard]");
+ mes("We must save the princess no matter how much fear grips our hearts!");
+ close();
+ }
+ if (has_instance("1@spa") == "") {
+ mes("^FF0000Inside the device you see a dark hole. If you wish to enter you may wish to talk to the Unpleasant Royal Guard first.^000000");
+ close();
+ }
+ mapannounce("dali", sprintf(_$("%s of the party, %s, is entering the Ghost Palace."), strcharinfo(0), getpartyname(getcharid(1))), bc_map, C_SPRINGGREEN);
+ if (!questprogress(1260)) setquest 1260;
+ setquest 1261;
+ warp("1@spa", 198, 188);
+ close();
+}
+
+1@spa,197,204,5 script King#gp1 4_M_RUSKING,{
+ mes("[King]");
+ mes("You are hereby appointed as the personal guard to Princess Tiara. I trust your loyalty above all else.");
+ npctalk(_("You are hereby appointed as the personal guard to Princess Tiara. I trust your loyalty above all else."), instance_npcname("King#gp1"));
+ next;
+ mes("[Lurid Royal Guard]");
+ mes("I will protect the Princess with my life.");
+ npctalk(_("I will protect the Princess with my life."), instance_npcname("Lurid Royal Guard#gp1"));
+ next;
+ mes("[King]");
+ mes("The marriage arrangements are going as planned. The prince is here to meet the princess.");
+ npctalk(_("The marriage arrangements are going as planned. The prince is here to meet the princess."), instance_npcname("King#gp1"));
+ next;
+ mes("[Lurid Royal Guard]");
+ mes("...Yes, your majesty.");
+ npctalk(_("...Yes, your majesty."), instance_npcname("Lurid Royal Guard#gp1"));
+ next;
+ mes("[King]");
+ mes("My gods, there are monsters in the castle! Get rid of them now!");
+ npctalk(_("My gods, there are monsters in the castle! Get rid of them now!"), instance_npcname("King#gp1"));
+ close2();
+ donpcevent instance_npcname("#gp1control")+"::OnStart";
+ end;
+}
+
+1@spa,1,1,1 script #gp1control HIDDEN_NPC,{
+ end;
+OnStart:
+ hideonnpc instance_npcname("Lurid Royal Guard#gp1");
+ hideonnpc instance_npcname("King#gp1");
+ sleep 1000;
+OnSummon:
+ sleep 2000;
+ .@map$ = instance_mapname("1@spa");
+ areamonster(.@map$, 182, 190, 214, 214, _("Cursed Sentinel"), CURSED_SENTINEL, 2, instance_npcname("#gp1control")+"::OnMyMobDead");
+ areamonster(.@map$, 182, 190, 214, 214, _("Cursed Solider"), CURSED_SOLDIER, 2, instance_npcname("#gp1control")+"::OnMyMobDead");
+ end;
+OnMyMobDead:
+ if (mobcount(instance_mapname("1@spa"), instance_npcname("#gp1control")+"::OnMyMobDead"))
+ end;
+ if ('gp1 < 2) {
+ ++'gp1;
+ donpcevent instance_npcname("#gp1control")+"::OnSummon";
+ end;
+ }
+ mapannounce(instance_mapname("1@spa"), _("The passage on 2nd floor in the palace of the ghost is open."), bc_map, C_YELLOW);
+ enablenpc instance_npcname("#gp1warp");
+ disablenpc instance_npcname("#gp1control");
+ end;
+OnInstanceInit:
+ 'gp1 = 0;
+ disablenpc instance_npcname("#gp1warp");
+ end;
+}
+
+1@spa,132,122,0 script Lurid Royal Guard#gp2 4_M_SAKRAYROYAL,{
+ cutin("npc-tiara", 3);
+ mes("[Lurid Royal Guard]");
+ mes("Your Highness, the King has invited a prince from a neighboring country to be your betrothed. Be ready to meet him...");
+ npctalk(_("Your Highness, the King has invited a prince from a neighboring country to be your betrothed. Be ready to meet him..."), instance_npcname("Lurid Royal Guard#gp2"));
+ next;
+ mes("[Princess Tiara]");
+ mes("If...if a marriage is arranged what should I do ?");
+ npctalk(_("If...if a marriage is arranged what should I do ?"), instance_npcname("Tiara Princess#gp2"));
+ next;
+ mes("[Lurid Royal Guard]");
+ mes("The only thing I can do is protect you from physical harm.");
+ npctalk(_("The only thing I can do is protect you from physical harm."), instance_npcname("Lurid Royal Guard#gp2"));
+ next;
+ mes("[Princess Tiara]");
+ mes("Then, what can I do?");
+ npctalk(_("Then, what can I do?"), instance_npcname("Tiara Princess#gp2"));
+ next;
+ mes("[Lurid Royal Guard]");
+ mes("......");
+ mes("You must decide that for yourself your highness...");
+ npctalk(_("You must decide that for yourself your highness..."), instance_npcname("Lurid Royal Guard#gp2"));
+ next;
+ mes("[Princess Tiara]");
+ mes("Would it be easier for you if I were married and sent off to another country?");
+ npctalk(_("Would it be easier for you if I were married and sent off to another country?"), instance_npcname("Tiara Princess#gp2"));
+ next;
+ cutin("", 255);
+ mes("[Lurid Royal Guard]");
+ mes("I will alway stand by you and protect you forever.");
+ npctalk(_("I will alway stand by you and protect you forever."), instance_npcname("Lurid Royal Guard#gp2"));
+ next;
+ mes("[Princess Tiara]");
+ mes("Monsters in the castle? Protect me!");
+ npctalk(_("Monsters in the castle? Protect me!"), instance_npcname("Tiara Princess#gp2"));
+ next;
+ mes("[Lurid Royal Guard]");
+ mes("Step back, Let's go!");
+ npctalk(_("Step back, Let's go!"), instance_npcname("Lurid Royal Guard#gp2"));
+ close2();
+ donpcevent instance_npcname("#gp2control")+"::OnStart";
+ end;
+}
+
+1@spa,1,1,1 script #gp2control HIDDEN_NPC,{
+ end;
+OnStart:
+ hideonnpc instance_npcname("Lurid Royal Guard#gp2");
+ hideonnpc instance_npcname("Tiara Princess#gp2");
+ sleep 1000;
+OnSummon:
+ sleep 2000;
+ .@map$ = instance_mapname("1@spa");
+ areamonster(.@map$, 143, 96, 94, 143, _("Broken Mind"), BROKEN_MIND, 3, instance_npcname("#gp2control")+"::OnMyMobDead");
+ areamonster(.@map$, 143, 96, 94, 143, _("Floating Word"), FLOATING_WORD, 4, instance_npcname("#gp2control")+"::OnMyMobDead");
+ areamonster(.@map$, 143, 96, 94, 143, _("Like Love"), LIKE_LOVE, 3, instance_npcname("#gp2control")+"::OnMyMobDead");
+ end;
+OnMyMobDead:
+ if (mobcount(instance_mapname("1@spa"), instance_npcname("#gp2control")+"::OnMyMobDead"))
+ end;
+ mapannounce(instance_mapname("1@spa"), _("The passage on the 3rd floor of the palace is open."), bc_map, C_YELLOW);
+ enablenpc instance_npcname("#gp2warp");
+ disablenpc instance_npcname("#gp2control");
+ end;
+OnInstanceInit:
+ disablenpc instance_npcname("#gp2warp");
+ end;
+}
+
+1@spa,32,54,1 script King#gp3 4_M_RUSKING,{
+ mes("[King]");
+ mes("It was you who brought the monsters here, you want to get rid of me and have the princess for yourself?");
+ npctalk(_("It was you who brought the monsters here, you want to get rid of me and have the princess for yourself?"), instance_npcname("King#gp3"));
+ next;
+ mes("[Lurid Royal Guard]");
+ mes("It's a trap, you should trust me, your majesty!");
+ npctalk(_("It's a trap, you should trust me, your majesty!"), instance_npcname("Lurid Royal Guard#gp3"));
+ next;
+ mes("[King]");
+ mes("Shut up! You're betrayed me ! I trusted you... you must pay for your disgrace.");
+ npctalk(_("Shut up! You're betrayed me ! I trusted you... you must pay for your disgrace."), instance_npcname("King#gp3"));
+ next;
+ mes("[King]");
+ mes("You will suffer for the rest of your life.");
+ npctalk(_("You will suffer for the rest of your life."), instance_npcname("King#gp3"));
+ close2();
+ donpcevent instance_npcname("#gp3control")+"::OnStart";
+ end;
+}
+
+1@spa,54,28,0 script #gp3warp WARPNPC,1,1,{
+ if (!'gp5)
+ warp("1@spa", 218, 186);
+ else {
+ if (questprogress(40024))
+ completequest 40024;
+ mes("It is time to leave Palace of the ghost.\r"
+ "Everything is completed.\r"
+ "Everything will be vanished...");
+ close2();
+ if (first_time_gpmission)
+ getitem Gray_Piece, 1;
+ if (!first_time_gpmission) {
+ getitem Gray_Piece, 2;
+ getexp(900000, 500000);
+ ++first_time_gpmission;
+ }
+ warp("dali02", 49, 127);
+ end;
+ }
+ end;
+}
+
+1@spa,35,56,1 script Ominous Voice#gp3 4_TRACE,{
+ end;
+OnStart:
+ initnpctimer;
+ end;
+OnTimer3000:
+ npctalk(_("Oh, faithful royal guard, you are trapped."));
+ end;
+OnTimer6000:
+ npctalk(_("The conspiracy in the palace has your princess in grave danger..."));
+ end;
+OnTimer9000:
+ npctalk(_("Who are you? Show yourself!"), instance_npcname("Lurid Royal Guard#gp3"));
+ end;
+OnTimer12000:
+ npctalk(_("Ah... so you do hear me?"));
+ end;
+OnTimer15000:
+ npctalk(_("...?"), instance_npcname("Lurid Royal Guard#gp3"));
+ end;
+OnTimer18000:
+ npctalk(_("I...I..."), instance_npcname("Lurid Royal Guard#gp3"));
+ end;
+OnTimer21000:
+ npctalk(_("Kukuku... What do you want boy?"));
+ end;
+OnTimer24000:
+ stopnpctimer;
+ hideonnpc instance_npcname("Ominous Voice#gp3");
+ hideonnpc instance_npcname("Lurid Royal Guard#gp3");
+ donpcevent instance_npcname("#gp3control")+"::OnSummon";
+ end;
+}
+
+1@spa,1,1,1 script #gp3control HIDDEN_NPC,{
+ end;
+OnStart:
+ hideonnpc instance_npcname("King#gp3");
+ hideonnpc instance_npcname("Soldier#gp3_1");
+ hideonnpc instance_npcname("Soldier#gp3_2");
+ hideonnpc instance_npcname("Soldier#gp3_3");
+ hideonnpc instance_npcname("Captain of the Guard#gp3");
+ donpcevent instance_npcname("Ominous Voice#gp3")+"::OnStart";
+ end;
+OnSummon:
+ initnpctimer;
+ .@map$ = instance_mapname("1@spa");
+ 'talkid[0] = areamonster(.@map$, 61, 63, 24, 24, _("Cursed Memory"), CURSED_MEMORY, 2 + 'gp3, instance_npcname("#gp3control")+"::OnMyMobDead");
+ 'talkid[1] = areamonster(.@map$, 61, 63, 24, 24, _("Colorless Vow"), COLORLESS_VOW, 3 + 'gp3, instance_npcname("#gp3control")+"::OnMyMobDead");
+ 'talkid[2] = areamonster(.@map$, 61, 63, 24, 24, _("Old Friendship"), OLD_FRIENDSHIP, 2 + 'gp3, instance_npcname("#gp3control")+"::OnMyMobDead");
+ end;
+OnTimer2000:
+ stopnpctimer;
+ unittalk('talkid[0], _("Faithful Guards"));
+ unittalk('talkid[1], _("Run!"));
+ unittalk('talkid[2], _("Being framed..."));
+ end;
+OnMyMobDead:
+ if (mobcount(instance_mapname("1@spa"), instance_npcname("#gp3control")+"::OnMyMobDead"))
+ end;
+ if (!'gp3) {
+ mapannounce instance_mapname("1@spa"), "The passage on the 4rd floor of the palace is open.", bc_map, C_YELLOW;
+ enablenpc instance_npcname("#gp3warp");
+ donpcevent instance_npcname("#gp4control")+"::OnSummon";
+ disablenpc instance_npcname("#gp1warp");
+ }
+ ++'gp3;
+ if ('gp3 < 5)
+ donpcevent instance_npcname("#gp3control")+"::OnSummon";
+ else {
+ stopnpctimer;
+ disablenpc instance_npcname("#gp3control");
+ }
+ end;
+OnInstanceInit:
+ disablenpc instance_npcname("#gp3warp");
+ 'gp3 = 0;
+ end;
+}
+
+1@spa,199,214,1 script Lurid Royal Guard#gp4 4_M_SAKRAYROYAL,{
+ mes("[Lurid Royal Guard]");
+ mes("Where is Princess Tiara?");
+ npctalk(_("Where is Princess Tiara?"), instance_npcname("Lurid Royal Guard#gp4"));
+ next;
+ mes("[Visiting Prince]");
+ mes("You are too late... but you brought what I was looking for. Thanks for your help.");
+ npctalk(_("You are too late... but you brought what I was looking for. Thanks for your help."), instance_npcname("Visiting Prince#gp4"));
+ next;
+ mes("[Visiting Prince]");
+ mes("Cursed Thanatos Magic Trace! Are you ready to have a new master?");
+ npctalk(_("Cursed Thanatos Magic Trace! Are you ready to have a new master?"), instance_npcname("Visiting Prince#gp4"));
+ next;
+ cutin("tartanos", 3);
+ mes("[Thanatos Magic Trace]");
+ mes("How dare you!");
+ npctalk(_("How dare you!"), instance_npcname("Thanatos Magic Trace#gp4"));
+ next;
+ mes("[Visiting Prince]");
+ mes("Aah, aah!!!");
+ npctalk(_("Aah, aah!!!"), instance_npcname("Visiting Prince#gp4"));
+ close2();
+ cutin("", 255);
+ donpcevent instance_npcname("#gp4control")+"::OnBoss";
+ end;
+}
+
+1@spa,1,1,1 script #gp4control HIDDEN_NPC,{
+ end;
+OnStart:
+ end;
+OnSummon:
+ .@map$ = instance_mapname("1@spa");
+ areamonster(.@map$, 182, 217, 214, 188, _("Cursed Sentinel"), CURSED_SENTINEL, rand(2,3), instance_npcname("#gp4control")+"::OnMyMobDead");
+ areamonster(.@map$, 182, 217, 214, 188, _("Sweet Slaughter"), SWEET_SLAUGHTER, rand(2,3), instance_npcname("#gp4control")+"::OnMyMobDead");
+ end;
+OnMyMobDead:
+ if (mobcount(instance_mapname("1@spa"), instance_npcname("#gp4control")+"::OnMyMobDead"))
+ end;
+ ++'gp4;
+ if ('gp4 > 3)
+ donpcevent instance_npcname("#gp4control")+"::OnStory";
+ else
+ donpcevent instance_npcname("#gp4control")+"::OnSummon";
+ end;
+OnStory:
+ for(.@i = 1; .@i <= 4; ++.@i)
+ enablenpc instance_npcname("Soldier's Corpse#gp4_"+.@i);
+ enablenpc instance_npcname("Captain's Corpse#gp4");
+ enablenpc instance_npcname("King's Corpse#gp4");
+ enablenpc instance_npcname("Lurid Royal Guard#gp4");
+ enablenpc instance_npcname("Thanatos Magic Trace#gp4");
+ enablenpc instance_npcname("Visiting Prince#gp4");
+ end;
+OnBoss:
+ for(.@i = 1; .@i <= 4; ++.@i)
+ hideonnpc instance_npcname("Soldier's Corpse#gp4_"+.@i);
+ hideonnpc instance_npcname("Captain's Corpse#gp4");
+ hideonnpc instance_npcname("King's Corpse#gp4");
+ hideonnpc instance_npcname("Lurid Royal Guard#gp4");
+ hideonnpc instance_npcname("Thanatos Magic Trace#gp4");
+ hideonnpc instance_npcname("Visiting Prince#gp4");
+ sleep 1000;
+ monster(instance_mapname("1@spa"), 197, 218, _("Torturous Redeemer"), TORTUROUS_REDEEMER, 1, instance_npcname("#gp4control")+"::OnBossDead");
+ end;
+OnBossDead:
+ monster(instance_mapname("1@spa"), 197, 180, _("Sweet Slaughter"), SWEET_SLAUGHTER, 1, instance_npcname("#gp4control")+"::OnMobDead");
+ end;
+OnMobDead:
+ mapannounce instance_mapname("1@spa"), "The passage on the 5th floor of the palace is open.", bc_map, C_YELLOW;
+ enablenpc instance_npcname("#gp4warp");
+ donpcevent instance_npcname("#gp5control")+"::OnStart";
+ disablenpc instance_npcname("#gp4control");
+ end;
+OnInstanceInit:
+ disablenpc instance_npcname("#gp4warp");
+ for(.@i = 1; .@i <= 4; ++.@i)
+ disablenpc instance_npcname("Soldier's Corpse#gp4_"+.@i);
+ disablenpc instance_npcname("Captain's Corpse#gp4");
+ disablenpc instance_npcname("King's Corpse#gp4");
+ disablenpc instance_npcname("Lurid Royal Guard#gp4");
+ disablenpc instance_npcname("Thanatos Magic Trace#gp4");
+ disablenpc instance_npcname("Visiting Prince#gp4");
+ 'gp4 = 0;
+ end;
+}
+
+1@spa,57,42,0 script Lurid Royal Guard#gp5 4_M_SAKRAYROYAL,{
+ mes("[Princess Tiara]");
+ mes("You kept your promise.");
+ npctalk(_("You kept your promise."), instance_npcname("Tiara Princess#gp5"));
+ next;
+ mes("[Lurid Royal Guard]");
+ mes("princess!");
+ npctalk(_("princess"), instance_npcname("Lurid Royal Guard#gp5"));
+ next;
+ cutin("npc-tiara", 3);
+ mes("[Princess Tiara]");
+ mes("Thank you..now I can rest at beside you...");
+ npctalk(_("Thank you..now I can rest at beside you..."), instance_npcname("Tiara Princess#gp5"));
+ next;
+ mes("[Lurid Royal Guard]");
+ mes("No..NO!!!!!!");
+ npctalk(_("No..NO!!!!!!"), instance_npcname("Lurid Royal Guard#gp5"));
+ next;
+ mes("[The Voice of Princess Tiara]");
+ mes("I want to be with you forever in peace...forever...");
+ npctalk(_("I want to be with you forever in peace...forever..."), instance_npcname("Tiara Princess#gp5"));
+ next;
+ cutin("b-tiara", 3);
+ mes("[Lurid Royal Guard]");
+ mes("no.....Ahh ahh ahh!!!~!");
+ npctalk(_("no.....Ahh ahh ahh!!!~!"), instance_npcname("Lurid Royal Guard#gp5"));
+ next;
+ mes("[The Voice of Princess Tiara]");
+ mes("I love you...");
+ npctalk(_("I love you..."), instance_npcname("Tiara Princess#gp5"));
+ close2();
+ cutin("", 255);
+ donpcevent instance_npcname("#gp5control")+"::OnStart2";
+ end;
+}
+
+1@spa,40,44,6 script Sakray#gp5 4_M_SAKRAY,{
+ cutin("sakray", 3);
+ mes("[Lurid Royal Guard]");
+ mes("Are you satisfied..? Thanatos Magic Trace?");
+ npctalk(_("Are you satisfied..? Thanatos Magic Trace?"), instance_npcname("Sakray#gp5"));
+ next;
+ mes("[Thanatos Magic Trace]");
+ mes("I need more blood..Sakray, offer me his blood.");
+ npctalk(_("I need more blood..Sakray, offer me his blood."), instance_npcname("Thanatos Magic Trace#gp5"));
+ next;
+ mes("[Sakray]");
+ mes("Okay, that is good. A traveler.\r"
+ "Did you see?");
+ npctalk(_("Okay, that is good. A traveler. Did you see?"), instance_npcname("Sakray#gp5"));
+ next;
+ mesf("[%s]", strcharinfo(0));
+ mes("Sakray, What do you want sympathy? Or is it a trap?");
+ unittalk(getcharid(3), _("Sakray, What do you want sympathy? Or is it a trap?"));
+ next;
+ mes("[Sakray]");
+ mes("Non...I did not need to make an effort to catch a novice.");
+ npctalk(_("Non...I did not need to make an effort to catch a novice."), instance_npcname("Sakray#gp5"));
+ next;
+ mesf("[%s]", strcharinfo(0));
+ mes("If so... then why...?");
+ unittalk(getcharid(3), _("If so... then why...?"));
+ next;
+ cutin("cry-b", 3);
+ mes("[Sakray]");
+ mes("I wanted to get rid of a piece of humanity inside of me through you.");
+ npctalk(_("I wanted to get rid of a piece of humanity inside of me through you."), instance_npcname("Sakray#gp5"));
+ next;
+ mes("[Sakray]");
+ mes("I am quite satisfied with the result.");
+ next;
+ mes("[Thanatos Magic Trace]");
+ mes("Sakray, offer the blood to me now!");
+ npctalk(_("Sakray, offer the blood to me now!"), instance_npcname("Thanatos Magic Trace#gp5"));
+ next;
+ mes("[Sakray]");
+ mes("If you were me, what would you do?");
+ next;
+ mes("[Sakray]");
+ mes("Can you set yourself free from this curse?");
+ next;
+ mesf("[%s]", strcharinfo(0));
+ mes("...");
+ unittalk(getcharid(3), _("..."));
+ next;
+ mes("[Sakray]");
+ mes("Heh heh... I will keep watching you until the day you grow up enough.");
+ next;
+ mes("[Sakray]");
+ mes("I am willing to hunt you later for Thanatos.");
+ next;
+ cutin("", 255);
+ mes("[Sakray]");
+ mes("Farewell then.");
+ close2();
+ donpcevent instance_npcname("#gp5control")+"::OnEnd";
+ hideonnpc instance_npcname("Sakray#gp5");
+ hideonnpc instance_npcname("Thanatos Magic Trace#gp5");
+ end;
+}
+
+1@spa,1,1,1 script #gp5control HIDDEN_NPC,{
+ end;
+OnStart:
+ stopnpctimer instance_npcname("#gp3control");
+ disablenpc instance_npcname("#gp3control");
+ killmonster instance_mapname("1@spa"), "All";
+ disablenpc instance_npcname("#gp3warp");
+ enablenpc instance_npcname("Lurid Royal Guard#gp5");
+ enablenpc instance_npcname("Tiara Princess#gp5");
+ end;
+OnStart2:
+ hideonnpc instance_npcname("Lurid Royal Guard#gp5");
+ hideonnpc instance_npcname("Tiara Princess#gp5");
+ sleep 2000;
+OnSummon:
+ initnpctimer;
+ .@map$ = instance_mapname("1@spa");
+ 'talkid[0] = areamonster(.@map$, 61, 63, 24, 24, _("Forgotten Name"), FORGOTTEN_NAME, rand(1,2), instance_npcname("#gp5control")+"::OnMyMobDead");
+ 'talkid[1] = areamonster(.@map$, 61, 63, 24, 24, _("Colorless Vow"), COLORLESS_VOW, 2, instance_npcname("#gp5control")+"::OnMyMobDead");
+ 'talkid[2] = areamonster(.@map$, 61, 63, 24, 24, _("Sweet Slaughter"), SWEET_SLAUGHTER, rand(1,2), instance_npcname("#gp5control")+"::OnMyMobDead");
+ end;
+OnTimer2000:
+ stopnpctimer;
+ unittalk('talkid[0], _("What is this..??"));
+ unittalk('talkid[1], _("Wake up! look at us... We are monsters?"));
+ unittalk('talkid[2], _("Sakray killed the princess!"));
+ end;
+OnMyMobDead:
+ if (mobcount(instance_mapname("1@spa"), instance_npcname("#gp5control")+"::OnMyMobDead"))
+ end;
+ ++'gp5;
+ if ('gp5 > 2)
+ donpcevent instance_npcname("#gp5control")+"::OnStory";
+ else
+ donpcevent instance_npcname("#gp5control")+"::OnSummon";
+ end;
+OnBossDead:
+ enablenpc instance_npcname("Sakray#gp5");
+ enablenpc instance_npcname("Thanatos Magic Trace#gp5");
+ end;
+OnStory:
+ stopnpctimer;
+ 'BossID = monster(instance_mapname("1@spa"), 44, 47, _("Torturous Redeemer"), E_TORTUROUS_REDEEMER, 1, instance_npcname("#gp5control")+"::OnBossDead");
+ unittalk('BossID, _("Thanatos Magic Trace! I will destroy you if I can't have you... Oh no! How could this be?"));
+ sleep 3000;
+ unitkill 'BossID;
+ end;
+OnEnd:
+ hideoffnpc instance_npcname("Voice of Princess Tiara");
+ hideoffnpc instance_npcname("Voice of Sakray");
+ hideoffnpc instance_npcname("Thanatos Magic Trace");
+ npctalk(_("What can I do for you?"), instance_npcname("Voice of Princess Tiara"));
+ sleep 3000;
+ npctalk(_("I will always stand by you. Please reset beside me."), instance_npcname("Voice of Sakray"));
+ sleep 3000;
+ npctalk(_("Your soul is mine until you find the blood that satisfies me.."), instance_npcname("Thanatos Magic Trace"));
+ sleep 3000;
+ npctalk(_("Reset in the shadow with me."), instance_npcname("Voice of Sakray"));
+ sleep 3000;
+ npctalk(_("In the dark forever..."), instance_npcname("Voice of Sakray"));
+ sleep 3000;
+ mapannounce(instance_mapname("1@spa"), _("It is time to leave the Ghost Palace."), bc_map, C_YELLOW);
+ enablenpc instance_npcname("King#gpend");
+ enablenpc instance_npcname("#gp3warp");
+ hideonnpc instance_npcname("Voice of Princess Tiara");
+ hideonnpc instance_npcname("Voice of Sakray");
+ hideonnpc instance_npcname("Thanatos Magic Trace");
+ end;
+OnInstanceInit:
+ disablenpc instance_npcname("Lurid Royal Guard#gp5");
+ disablenpc instance_npcname("Tiara Princess#gp5");
+ disablenpc instance_npcname("Thanatos Magic Trace#gp5");
+ disablenpc instance_npcname("Sakray#gp5");
+ disablenpc instance_npcname("King#gpend");
+ hideonnpc instance_npcname("Voice of Princess Tiara");
+ hideonnpc instance_npcname("Voice of Sakray");
+ hideonnpc instance_npcname("Thanatos Magic Trace");
+ 'gp5 = 0;
+ end;
+}
+
+1@spa,48,29,1 script King#gpend 4_M_RUSKING,{
+ mes("[King]");
+ mes("Hey there, are you alive?\r"
+ "I did not expect to meet someone alive");
+ next;
+ mes("[King]");
+ mes("Do you possibly have ^009900Gray Piece^000000?\r"
+ "Can you give it to me?\r"
+ "The old memory of faithful royal guard,\r"
+ "the memory of everyone he loved becomes broken pieces and are contained inside of them.");
+ next;
+ mes("[King]");
+ mes("Will you give ^009900Gray Piece^000000 to me?\r"
+ "The guilt is eating my soul.\r"
+ "My soul is stuck in ghost palace.");
+ next;
+ mes("[King]");
+ mes("I am collecting Sakray's abandoned memories from these shards.");
+ next;
+ mes("[King]");
+ mes("If you give any Gray Shards to me, I can make equipment for you.");
+ next;
+ mes("[King]");
+ mes("The cursed knight...\r"
+ "Please help me save the soul of Sakray.");
+ next;
+ setarray .@items_list, Thanatos_Sword, Thanatos_Great_Sword, Thanatos_Spear, Thanatos_Long_Spear, Thanatos_Staff, Thanatos_Two-Handed_Staff, Thanatos_Bow,
+ Thanatos_Dagger, Thanatos_Katar, Thanatos_Knuckles, Thanatos_Hammer, Thanatos_Axe, Thanatos_Violin, Thanatos_Whip, Gray_Shield,
+ Gray_Armor, Gray_Robe, Gray_Cloak, Boots_of_Gray, Gray_Helmet;
+
+ setarray .@cost, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 100, 100, 100, 100, 100, 100;
+ .@menulist$ = "";
+ for (.@i = 0; .@i < getarraysize(.@items_list); ++.@i)
+ .@menulist$ += getitemname(.@items_list[.@i])+":";
+ while (true) {
+ .@choice = select(.@menulist$, "Cancel") - 1;
+ if (.@choice == getarraysize(.@items_list)) {
+ mes("[King]");
+ mes("Someday, Sakray will get out of his curse for sure.\r"
+ "I believe collecting Gray Shards is the only method to save him.");
+ close();
+ }
+ next;
+ mes("[King]");
+ mesf("to make a ^FF0000%s^000000 \r"
+ "I need %d ^009900Gray Shard^000000", getitemname(.@items_list[.@choice]), .@cost[.@choice]);
+ switch (select("Cancel", "hand over "+.@cost[.@choice]+" Gray Shard.")) {
+ case 1:
+ next;
+ mes("[King]");
+ mes("Someday, Sakray will get out of curse for sure. I believe");
+ next;
+ break;
+ case 2:
+ next;
+ if (countitem(Gray_Piece) < .@cost[.@choice]) {
+ mes("[King]");
+ mes("You don't have enough Gray Shards.");
+ mesf("I need %d Gray Shards to make a ^FF0000%s.^000000", .@cost[.@choice], getitemname(.@items_list[.@choice]));
+ break;
+ }
+ mes("[King]");
+ mesf("I will make a ^FF0000%s^000000 \r"
+ "with %d ^009900Gray Shard^000000", getitemname(.@items_list[.@choice]), .@cost[.@choice]);
+ next;
+ mes("[King]");
+ mes("You see a light through the folded hands of the king and it gradually takes on a shape.");
+ next;
+ mes("[King]");
+ mesf("All right, it is done.\r"
+ "Take this ^FF0000%s.^000000\r"
+ "Use it to confront Sakray and Thanatos.", getitemname(.@items_list[.@choice]));
+ next;
+ mes("[King]");
+ mes("The power requires a sacrifice.\r"
+ "Please be careful...");
+ delitem Gray_Piece, .@cost[.@choice];
+ getitem .@items_list[.@choice], 1;
+ close();
+ }
+ }
+}
+
+// 1st floor npc's
+1@spa,198,201,1 script Lurid Royal Guard#gp1 4_M_SAKRAYROYAL,{
+ end;
+}
+1@spa,197,217,0 warp #gp1warp 1,1,1@spa,114,120
+
+// 2nd floor npc's
+1@spa,135,125,3 script Tiara Princess#gp2 4_F_MAYSEL,{
+ end;
+}
+1@spa,117,137,0 warp #gp2warp 1,1,1@spa,60,43
+
+// 3rd floor npc's
+1@spa,30,58,5 script Lurid Royal Guard#gp3 4_M_SAKRAY_TIED,{
+ end;
+}
+1@spa,28,52,0 script Captain of the Guard#gp3 4_M_KY_KNT,{
+ end;
+}
+1@spa,30,52,0 script Soldier#gp3_1 4_M_KY_SOLD,{
+ end;
+}
+1@spa,34,53,1 script Soldier#gp3_2 4_M_CRU_SOLD,{
+ end;
+}
+1@spa,25,53,0 script Soldier#gp3_3 4_M_CRU_SOLD,{
+ end;
+}
+
+// 4th floor npc's
+1@spa,201,198,1 script Soldier's Corpse#gp4_1 4_M_DIEMAN,{
+ end;
+}
+1@spa,191,207,0 script Soldier's Corpse#gp4_2 4_M_DIEMAN,{
+ end;
+}
+1@spa,206,209,0 script Soldier's Corpse#gp4_3 4_M_DIEMAN,{
+ end;
+}
+1@spa,189,193,0 script Soldier's Corpse#gp4_4 4_M_DIEMAN,{
+ end;
+}
+1@spa,211,194,4 script Captain's Corpse#gp4 4_M_LIEMAN,{
+ end;
+}
+1@spa,194,214,5 script King's Corpse#gp4 4_M_TRISTAN,{
+ end;
+}
+1@spa,197,218,5 script Visiting Prince#gp4 4_M_KNIGHT_SILVER,{
+ end;
+}
+1@spa,197,218,0 script Thanatos Magic Trace#gp4 HIDDEN_WARP_NPC,{
+ end;
+}
+1@spa,178,186,0 warp #gp4warp 1,1,1@spa,30,57
+
+// 5th floor npc's
+1@spa,60,43,3 script Tiara Princess#gp5 4_F_MAYSEL,{
+ end;
+}
+1@spa,40,44,0 script Thanatos Magic Trace#gp5 HIDDEN_WARP_NPC,{
+ end;
+}
+1@spa,40,46,0 script Voice of Princess Tiara CLEAR_NPC,{
+ end;
+}
+1@spa,42,43,0 script Voice of Sakray CLEAR_NPC,{
+ end;
+}
+1@spa,40,41,0 script Thanatos Magic Trace CLEAR_NPC,{
+ end;
+}
+
diff --git a/npc/re/scripts.conf b/npc/re/scripts.conf
index 38caffc81..55b5066de 100644
--- a/npc/re/scripts.conf
+++ b/npc/re/scripts.conf
@@ -87,13 +87,14 @@
"npc/re/instances/BakonawaLake.txt",
"npc/re/instances/BangungotHospital.txt",
"npc/re/instances/BuwayaCave.txt",
+"npc/re/instances/EclageInterior.txt",
+"npc/re/instances/ghost_palace.txt",
"npc/re/instances/HazyForest.txt",
"npc/re/instances/MalangdoCulvert.txt",
"npc/re/instances/OctopusCave.txt",
"npc/re/instances/OldGlastHeim.txt",
"npc/re/instances/saras_memory.txt",
"npc/re/instances/WolfchevLaboratory.txt",
-"npc/re/instances/EclageInterior.txt",
//================= Kafras & Cool Event Corp. =============================
"npc/re/kafras/kafras.txt",