Procházet zdrojové kódy

Initial release of Illusion of Luanda (#7559)

* Implemented the main quest, daily quests and exchange npcs related to Illusion of Luanda.
Fixed #6462 

Co-authored-by: Aleos <aleos89@users.noreply.github.com>
Atemo před 2 roky
rodič
revize
0413d0e85c

+ 461 - 22
db/re/mob_db.yml

@@ -94026,28 +94026,467 @@ Body:
     DamageMotion: 384
     Modes:
       NoRandomWalk: true
-#  - Id: 20270
-#    AegisName: ILL_TRI_JOINT
-#  - Id: 20271
-#    AegisName: ILL_STALACTIC_GOLEM
-#  - Id: 20272
-#    AegisName: ILL_MEGALITH
-#  - Id: 20273
-#    AegisName: ILL_TAO_GUNKA
-#  - Id: 20274
-#    AegisName: ILL_STONE_SHOOTER
-#  - Id: 20275
-#    AegisName: ILL_WOOTAN_SHOOTER
-#  - Id: 20276
-#    AegisName: ILL_WOOTAN_FIGHTER
-#  - Id: 20277
-#    AegisName: ILL_WOOTAN_DEFENDER
-#  - Id: 20278
-#    AegisName: G_ILL_MEGALITH
-#  - Id: 20279
-#    AegisName: G_ILL_WOOTAN_SHOOTER
-#  - Id: 20280
-#    AegisName: G_ILL_WOOTAN_FIGHTER
+  - Id: 20270
+    AegisName: ILL_TRI_JOINT
+    Name: Ancient Tri Joint
+    Level: 164
+    Hp: 694500
+    BaseExp: 75839
+    JobExp: 56880
+    Attack: 2105
+    Attack2: 498
+    Defense: 144
+    MagicDefense: 5
+    Str: 77
+    Agi: 88
+    Vit: 70
+    Int: 55
+    Dex: 145
+    Luk: 20
+    AttackRange: 1
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Insect
+    Element: Earth
+    ElementLevel: 1
+    WalkSpeed: 200
+    AttackDelay: 860
+    AttackMotion: 660
+    DamageMotion: 624
+    Ai: 07
+    Drops:
+      - Item: Cyfar
+        Rate: 1500
+      - Item: Solid_Shell
+        Rate: 550
+      - Item: Aloebera
+        Rate: 100
+      - Item: Yellow_Live
+        Rate: 80
+      - Item: Sparkling_Dust
+        Rate: 70
+      - Item: Token_Of_Bigstone
+        Rate: 250
+      - Item: Weak_Worm
+        Rate: 1000
+      - Item: Ancient_Trijoint_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20271
+    AegisName: ILL_STALACTIC_GOLEM
+    Name: Ancient Stalactic Golem
+    Level: 167
+    Hp: 725400
+    BaseExp: 79214
+    JobExp: 59410
+    Attack: 2923
+    Attack2: 521
+    Defense: 412
+    MagicDefense: 5
+    Str: 105
+    Agi: 98
+    Vit: 122
+    Int: 45
+    Dex: 158
+    Luk: 55
+    AttackRange: 1
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Large
+    Race: Formless
+    Element: Neutral
+    ElementLevel: 4
+    WalkSpeed: 150
+    AttackDelay: 632
+    AttackMotion: 518
+    DamageMotion: 288
+    Ai: 04
+    Drops:
+      - Item: Hard_Mud
+        Rate: 1000
+      - Item: Brigan
+        Rate: 2425
+      - Item: Star_Crumb
+        Rate: 125
+      - Item: Great_Nature
+        Rate: 15
+      - Item: Elunium_Stone
+        Rate: 125
+      - Item: Tablet
+        Rate: 10
+      - Item: Token_Of_Bigstone
+        Rate: 250
+      - Item: Ancient_Sta_Golem_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20272
+    AegisName: ILL_MEGALITH
+    Name: Ancient Megalith
+    Level: 166
+    Hp: 708500
+    BaseExp: 77368
+    JobExp: 58026
+    Attack: 2877
+    Attack2: 511
+    Defense: 188
+    MagicDefense: 18
+    Str: 104
+    Agi: 111
+    Vit: 89
+    Int: 55
+    Dex: 214
+    Luk: 42
+    AttackRange: 9
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Large
+    Race: Formless
+    Element: Neutral
+    ElementLevel: 4
+    WalkSpeed: 200
+    AttackDelay: 1332
+    AttackMotion: 1332
+    DamageMotion: 672
+    Ai: 10
+    Drops:
+      - Item: Zargon
+        Rate: 1500
+      - Item: Stone
+        Rate: 700
+      - Item: Elunium_Stone
+        Rate: 104
+      - Item: Elunium
+        Rate: 31
+      - Item: Token_Of_Bigstone
+        Rate: 250
+      - Item: Pot_Stone
+        Rate: 1000
+      - Item: Ancient_Megalith_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20273
+    AegisName: ILL_TAO_GUNKA
+    Name: Ancient Tao Gunka
+    Level: 169
+    Hp: 19280000
+    BaseExp: 4001752
+    JobExp: 3001314
+    Attack: 5070
+    Attack2: 3028
+    Defense: 905
+    MagicDefense: 143
+    Str: 180
+    Agi: 216
+    Vit: 100
+    Int: 111
+    Dex: 212
+    Luk: 42
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Large
+    Race: Demon
+    Element: Neutral
+    ElementLevel: 3
+    WalkSpeed: 150
+    AttackDelay: 1020
+    AttackMotion: 288
+    DamageMotion: 144
+    Ai: 21
+    Class: Boss
+    Modes:
+      Mvp: true
+    Drops:
+      - Item: Gemstone
+        Rate: 2425
+      - Item: Fragment_Of_Rock
+        Rate: 2425
+      - Item: Golden_Jewel
+        Rate: 500
+      - Item: Runstone_Rare
+        Rate: 100
+      - Item: Goibne's_Armor
+        Rate: 100
+      - Item: Goibne's_Shoulder_Arms
+        Rate: 100
+      - Item: Token_Of_Bigstone
+        Rate: 1250
+      - Item: Ancient_Tao_Gunka_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20274
+    AegisName: ILL_STONE_SHOOTER
+    Name: Ancient Stone Shooter
+    Level: 166
+    Hp: 692500
+    BaseExp: 75621
+    JobExp: 56716
+    Attack: 2711
+    Attack2: 510
+    Defense: 184
+    MagicDefense: 15
+    Str: 98
+    Agi: 86
+    Vit: 68
+    Int: 44
+    Dex: 215
+    Luk: 54
+    AttackRange: 10
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Medium
+    Race: Plant
+    Element: Fire
+    ElementLevel: 3
+    WalkSpeed: 175
+    AttackDelay: 2413
+    AttackMotion: 1248
+    DamageMotion: 768
+    Ai: 04
+    Drops:
+      - Item: Solid_Twig
+        Rate: 2500
+      - Item: Log
+        Rate: 2500
+      - Item: Browny_Root
+        Rate: 500
+      - Item: Wooden_Block
+        Rate: 1000
+      - Item: Oridecon_Stone
+        Rate: 50
+      - Item: Hair_Leaf
+        Rate: 1000
+      - Item: Token_Of_Wootan
+        Rate: 250
+      - Item: Ancient_S_Shooter_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20275
+    AegisName: ILL_WOOTAN_SHOOTER
+    Name: Ancient Wootan Shooter
+    Level: 164
+    Hp: 702100
+    BaseExp: 76669
+    JobExp: 57502
+    Attack: 2460
+    Attack2: 517
+    Defense: 142
+    MagicDefense: 21
+    Str: 90
+    Agi: 97
+    Vit: 74
+    Int: 53
+    Dex: 220
+    Luk: 45
+    AttackRange: 10
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Medium
+    Race: Demihuman
+    Element: Earth
+    ElementLevel: 2
+    WalkSpeed: 200
+    AttackDelay: 857
+    AttackMotion: 1056
+    DamageMotion: 576
+    Ai: 05
+    Drops:
+      - Item: Air_Rifle
+        Rate: 2250
+      - Item: Flexible_String
+        Rate: 1750
+      - Item: Shooting_Stone
+        Rate: 1000
+      - Item: Hunter_Bow
+        Rate: 10
+      - Item: Cacao
+        Rate: 750
+      - Item: Elder_Branch
+        Rate: 50
+      - Item: Token_Of_Wootan
+        Rate: 250
+      - Item: Ancient_W_Shooter_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20276
+    AegisName: ILL_WOOTAN_FIGHTER
+    Name: Ancient Wootan Fighter
+    Level: 167
+    Hp: 725500
+    BaseExp: 79225
+    JobExp: 59418
+    Attack: 3062
+    Attack2: 538
+    Defense: 205
+    MagicDefense: 8
+    Str: 110
+    Agi: 115
+    Vit: 90
+    Int: 42
+    Dex: 158
+    Luk: 42
+    AttackRange: 1
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Medium
+    Race: Demihuman
+    Element: Fire
+    ElementLevel: 2
+    WalkSpeed: 200
+    AttackDelay: 912
+    AttackMotion: 1344
+    DamageMotion: 480
+    Ai: 04
+    Drops:
+      - Item: Wootan_F_Fur
+        Rate: 1000
+      - Item: Shoulder_Protection
+        Rate: 2000
+      - Item: Elder_Branch
+        Rate: 50
+      - Item: Great_Leaf
+        Rate: 500
+      - Item: Banana
+        Rate: 500
+      - Item: IllusoryStone
+        Rate: 10
+      - Item: Token_Of_Wootan
+        Rate: 250
+      - Item: Ancient_W_Fighter_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20277
+    AegisName: ILL_WOOTAN_DEFENDER
+    Name: Ancient Wootan Defender
+    Level: 169
+    Hp: 20154000
+    BaseExp: 4001552
+    JobExp: 3001164
+    Attack: 2535
+    Attack2: 3101
+    Defense: 874
+    MagicDefense: 143
+    Str: 90
+    Agi: 198
+    Vit: 102
+    Int: 105
+    Dex: 215
+    Luk: 165
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Large
+    Race: Demihuman
+    Element: Fire
+    ElementLevel: 4
+    WalkSpeed: 150
+    AttackDelay: 1020
+    AttackMotion: 288
+    DamageMotion: 144
+    Ai: 21
+    Class: Boss
+    Modes:
+      Mvp: true
+    Drops:
+      - Item: Wootan_D_S_Piece
+        Rate: 2250
+      - Item: Shoulder_Protection
+        Rate: 2250
+      - Item: Elder_Branch
+        Rate: 50
+      - Item: Great_Leaf
+        Rate: 500
+      - Item: Goibne's_Combat_Boots
+        Rate: 100
+      - Item: Goibne's_Helmet
+        Rate: 100
+      - Item: Token_Of_Wootan
+        Rate: 1250
+      - Item: Ancient_W_Deffend_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20278
+    AegisName: G_ILL_MEGALITH
+    Name: Ancient Megalith
+    Level: 166
+    Hp: 708500
+    Attack: 2877
+    Attack2: 511
+    Defense: 188
+    MagicDefense: 18
+    Str: 104
+    Agi: 111
+    Vit: 89
+    Int: 55
+    Dex: 214
+    Luk: 42
+    AttackRange: 9
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Large
+    Race: Formless
+    Element: Neutral
+    ElementLevel: 4
+    WalkSpeed: 200
+    AttackDelay: 1332
+    AttackMotion: 1332
+    DamageMotion: 672
+    Ai: 24
+  - Id: 20279
+    AegisName: G_ILL_WOOTAN_SHOOTER
+    Name: Ancient Wootan Shooter
+    Level: 164
+    Hp: 702100
+    Attack: 2460
+    Attack2: 517
+    Defense: 142
+    MagicDefense: 21
+    Str: 90
+    Agi: 97
+    Vit: 74
+    Int: 53
+    Dex: 220
+    Luk: 45
+    AttackRange: 10
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Medium
+    Race: Demihuman
+    Element: Earth
+    ElementLevel: 2
+    WalkSpeed: 200
+    AttackDelay: 857
+    AttackMotion: 1056
+    DamageMotion: 576
+    Ai: 24
+  - Id: 20280
+    AegisName: G_ILL_WOOTAN_FIGHTER
+    Name: Ancient Wootan Fighter
+    Level: 167
+    Hp: 725500
+    Attack: 3062
+    Attack2: 538
+    Defense: 250
+    MagicDefense: 8
+    Str: 110
+    Agi: 115
+    Vit: 90
+    Int: 42
+    Dex: 158
+    Luk: 42
+    AttackRange: 1
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Medium
+    Race: Demihuman
+    Element: Fire
+    ElementLevel: 2
+    WalkSpeed: 200
+    AttackDelay: 912
+    AttackMotion: 1344
+    DamageMotion: 480
+    Ai: 24
 #  - Id: 20281
 #    AegisName: E_DANDY_STAR
 #  - Id: 20282

+ 116 - 0
db/re/mob_skill_db.txt

@@ -13008,6 +13008,122 @@
 3816,MD_MARIN@AL_HEAL,idle,28,1,10000,500,5000,yes,friend,myhpltmaxrate,90,,,,,,2,
 3816,MD_MARIN@AL_HEAL,attack,28,1,10000,500,5000,yes,friend,myhpltmaxrate,90,,,,,,,69
 
+// Illusion of Luanda
+20270,ILL_TRI_JOINT@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
+20270,ILL_TRI_JOINT@AL_HEAL,idle,28,9,5000,0,1500,yes,friend,mystatuson,hiding,,,,,,18,
+20270,ILL_TRI_JOINT@AL_TELEPORT,chase,26,1,5000,0,5000,yes,self,mobnearbygt,4,,,,,,,
+20270,ILL_TRI_JOINT@NPC_GROUNDATTACK,attack,185,3,500,0,5000,yes,target,always,0,,,,,,,
+20270,ILL_TRI_JOINT@CR_SHIELDCHARGE,attack,250,3,1000,0,5000,yes,target,always,0,,,,,,,
+20270,ILL_TRI_JOINT@TF_HIDING,attack,51,1,10000,0,10000,yes,self,myhpltmaxrate,30,,,,,,19,
+20270,ILL_TRI_JOINT@NPC_CRITICALSLASH,attack,170,1,1500,0,5000,yes,target,always,0,,,,,,6,
+20270,ILL_TRI_JOINT@NPC_CURSEATTACK,attack,181,5,500,0,5000,yes,target,always,0,,,,,,,
+20271,ILL_STALACTIC_GOLEM@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
+20271,ILL_STALACTIC_GOLEM@SM_ENDURE,chase,8,1,5000,0,10000,yes,self,longrangeattacked,0,,,,,,6,
+20271,ILL_STALACTIC_GOLEM@BS_MAXIMIZE,chase,114,5,2000,0,30000,no,self,always,0,,,,,,,
+20271,ILL_STALACTIC_GOLEM@CR_AUTOGUARD,chase,249,5,2000,0,300000,yes,self,longrangeattacked,0,,,,,,,
+20271,ILL_STALACTIC_GOLEM@NPC_STUNATTACK,attack,179,4,500,1500,5000,no,target,always,0,,,,,,6,
+20271,ILL_STALACTIC_GOLEM@CR_AUTOGUARD,attack,249,5,500,0,300000,yes,self,always,0,,,,,,,
+20271,ILL_STALACTIC_GOLEM@BS_HAMMERFALL,attack,110,5,500,1500,5000,no,target,always,0,,,,,,,
+20271,ILL_STALACTIC_GOLEM@NPC_GROUNDATTACK,attack,185,3,2000,0,5000,yes,target,always,0,,,,,,6,
+20272,ILL_MEGALITH@NPC_CHEAL,idle,729,5,3000,500,3000,no,self,friendhpltmaxrate,99,,,,,,,
+20272,ILL_MEGALITH@NPC_CHEAL,idle,729,5,3000,500,3000,no,self,myhpltmaxrate,99,,,,,,,
+20272,ILL_MEGALITH@AM_POTIONPITCHER,idle,231,4,3000,500,5000,no,friend,friendhpltmaxrate,80,,,,,,,
+20272,ILL_MEGALITH@AM_POTIONPITCHER,idle,231,4,3000,500,5000,no,friend,myhpltmaxrate,80,,,,,,5,
+20272,ILL_MEGALITH@NPC_STUNATTACK,attack,179,2,500,500,5000,no,target,always,0,,,,,,6,
+20272,ILL_MEGALITH@NPC_PIERCINGATT,attack,158,2,500,0,5000,yes,target,always,0,,,,,,6,
+20272,ILL_MEGALITH@AC_DOUBLE,attack,46,5,500,0,5000,yes,target,always,0,,,,,,,
+20272,ILL_MEGALITH@NPC_CHEAL,attack,729,5,3000,500,3000,no,self,friendhpltmaxrate,50,,,,,,,
+20272,ILL_MEGALITH@NPC_CHEAL,attack,729,5,3000,500,3000,no,self,myhpltmaxrate,50,,,,,,,
+20272,ILL_MEGALITH@AM_POTIONPITCHER,attack,231,4,3000,500,5000,no,friend,friendhpltmaxrate,80,,,,,,,
+20272,ILL_MEGALITH@AM_POTIONPITCHER,attack,231,4,3000,500,5000,no,friend,myhpltmaxrate,80,,,,,,5,
+20273,ILL_TAO_GUNKA@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
+20273,ILL_TAO_GUNKA@NPC_CALLSLAVE,idle,352,1,10000,0,30000,yes,self,always,0,,,,,,,
+20273,ILL_TAO_GUNKA@NPC_SUMMONSLAVE,idle,196,1,10000,700,10000,no,self,slavele,2,20278,,,,,,
+20273,ILL_TAO_GUNKA@AL_HEAL,idle,28,11,10000,0,3000,yes,friend,myhpltmaxrate,50,,,,,,,
+20273,ILL_TAO_GUNKA@AL_HEAL,idle,28,5,10000,0,10000,yes,friend,myhpltmaxrate,99,,,,,,,
+20273,ILL_TAO_GUNKA@AL_TELEPORT,chase,26,1,10000,0,0,yes,self,skillused,18,,,,,,,
+20273,ILL_TAO_GUNKA@NPC_MENTALBREAKER,chase,159,5,2000,0,5000,yes,target,always,0,,,,,,7,
+20273,ILL_TAO_GUNKA@NPC_COMBOATTACK,chase,171,10,2000,0,5000,yes,target,always,0,,,,,,7,
+20273,ILL_TAO_GUNKA@NPC_STUNATTACK,chase,179,5,2000,0,5000,yes,target,always,0,,,,,,7,
+20273,ILL_TAO_GUNKA@NPC_GUIDEDATTACK,chase,172,10,2000,0,5000,yes,target,always,0,,,,,,7,
+// 20273,ILL_TAO_GUNKA@NPC_EARTHQUAKE_K,chase,750,5,10000,500,20000,no,target,myhpltmaxrate,40,,,,,,,
+20273,ILL_TAO_GUNKA@NPC_CRITICALSLASH,attack,170,1,2000,0,5000,yes,target,always,0,,,,,,7,
+20273,ILL_TAO_GUNKA@NPC_CRITICALWOUND,attack,673,2,10,0,5000,yes,target,always,0,,,,,,,
+20273,ILL_TAO_GUNKA@WL_EARTHSTRAIN,attack,2216,5,2000,2000,30000,no,target,always,0,,,,,,,
+20273,ILL_TAO_GUNKA@NPC_SLOWCAST,attack,672,5,1000,1000,15000,no,self,always,0,,,,,,,
+20273,ILL_TAO_GUNKA@NPC_AGIUP,attack,350,5,10000,0,120000,yes,self,myhpltmaxrate,30,,,,,,9,
+20273,ILL_TAO_GUNKA@NPC_CALLSLAVE,attack,352,1,10000,0,30000,yes,self,always,0,,,,,,,
+20273,ILL_TAO_GUNKA@NPC_ARMORBRAKE,attack,344,10,2000,0,5000,no,target,always,0,,,,,,,
+20273,ILL_TAO_GUNKA@NPC_SUMMONSLAVE,attack,196,1,10000,700,10000,no,self,slavele,2,20278,,,,,,
+20273,ILL_TAO_GUNKA@NPC_MENTALBREAKER,attack,159,5,2000,0,5000,yes,target,always,0,,,,,,7,
+20273,ILL_TAO_GUNKA@NPC_COMBOATTACK,attack,171,10,2000,0,5000,yes,target,always,0,,,,,,7,
+20273,ILL_TAO_GUNKA@NPC_STUNATTACK,attack,179,5,2000,0,5000,yes,target,always,0,,,,,,7,
+20273,ILL_TAO_GUNKA@NPC_GUIDEDATTACK,attack,172,10,2000,0,5000,yes,target,always,0,,,,,,7,
+// 20273,ILL_TAO_GUNKA@NPC_EARTHQUAKE_K,attack,750,5,10000,500,20000,no,target,myhpltmaxrate,40,,,,,,,
+20274,ILL_STONE_SHOOTER@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
+20274,ILL_STONE_SHOOTER@NPC_CHEAL,chase,729,5,3000,500,3000,no,self,friendhpltmaxrate,99,,,,,,,
+20274,ILL_STONE_SHOOTER@NPC_CHEAL,chase,729,5,3000,500,3000,no,self,myhpltmaxrate,99,,,,,,,
+20274,ILL_STONE_SHOOTER@AM_POTIONPITCHER,chase,231,4,3000,500,5000,no,friend,friendhpltmaxrate,80,,,,,,,
+20274,ILL_STONE_SHOOTER@AM_POTIONPITCHER,chase,231,4,3000,500,5000,no,friend,myhpltmaxrate,80,,,,,,5,
+20274,ILL_STONE_SHOOTER@NPC_FIREATTACK,attack,186,2,500,500,5000,no,target,always,0,,,,,,6,
+20274,ILL_STONE_SHOOTER@NPC_PIERCINGATT,attack,158,2,500,0,5000,yes,target,always,0,,,,,,6,
+20274,ILL_STONE_SHOOTER@SN_SHARPSHOOTING,attack,382,2,500,500,5000,no,target,always,0,,,,,,,
+20274,ILL_STONE_SHOOTER@NPC_CHEAL,attack,729,5,3000,500,3000,no,self,friendhpltmaxrate,50,,,,,,,
+20274,ILL_STONE_SHOOTER@NPC_CHEAL,attack,729,5,3000,500,3000,no,self,myhpltmaxrate,50,,,,,,,
+20274,ILL_STONE_SHOOTER@AM_POTIONPITCHER,attack,231,4,3000,500,5000,no,friend,friendhpltmaxrate,80,,,,,,,
+20274,ILL_STONE_SHOOTER@AM_POTIONPITCHER,attack,231,4,3000,500,5000,no,friend,myhpltmaxrate,80,,,,,,5,
+20275,ILL_WOOTAN_SHOOTER@NPC_GUIDEDATTACK,attack,172,2,300,0,20000,yes,target,always,0,,,,,,2,
+20275,ILL_WOOTAN_SHOOTER@NPC_STUNATTACK,attack,179,2,500,1500,5000,no,target,always,0,,,,,,2,
+20275,ILL_WOOTAN_SHOOTER@AC_DOUBLE,attack,46,5,2000,0,5000,yes,target,always,0,,,,,,6,
+20275,ILL_WOOTAN_SHOOTER@NPC_BLOODDRAIN,attack,199,1,1500,0,5000,yes,target,always,0,,,,,,,
+20276,ILL_WOOTAN_FIGHTER@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
+20276,ILL_WOOTAN_FIGHTER@KN_SPEARSTAB,chase,58,5,2500,0,5000,yes,target,groundattacked,0,,,,,,9,
+20276,ILL_WOOTAN_FIGHTER@KN_SPEARSTAB,chase,58,5,5000,0,5000,yes,target,longrangeattacked,0,,,,,,,
+20276,ILL_WOOTAN_FIGHTER@SM_MAGNUM,attack,7,4,500,500,5000,no,self,always,0,,,,,,,
+20276,ILL_WOOTAN_FIGHTER@KN_TWOHANDQUICKEN,attack,60,5,2000,0,120000,yes,self,myhpltmaxrate,30,,,,,,6,
+20276,ILL_WOOTAN_FIGHTER@KN_BRANDISHSPEAR,attack,57,5,2000,0,10000,yes,target,always,0,,,,,,6,
+20276,ILL_WOOTAN_FIGHTER@NPC_FIREATTACK,attack,186,4,1000,0,5000,yes,target,always,0,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@WZ_METEOR,idle,83,9,10000,0,5000,yes,target,longrangeattacked,0,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@AL_PNEUMA,idle,25,1,10000,0,1000,yes,target,longrangeattacked,0,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@AL_HEAL,idle,28,11,10000,0,3000,yes,friend,myhpltmaxrate,50,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@AL_HEAL,idle,28,5,10000,0,3000,yes,friend,myhpltmaxrate,99,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@NPC_SUMMONSLAVE,idle,196,1,10000,1000,30000,no,self,slavele,1,20279,20280,,,,,
+20277,ILL_WOOTAN_DEFENDER@NPC_CALLSLAVE,idle,352,1,10000,0,30000,yes,self,always,0,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@NPC_FIREBREATH,chase,654,10,2000,500,5000,no,target,myhpltmaxrate,80,,,,,,,
+// 20277,ILL_WOOTAN_DEFENDER@NPC_EARTHQUAKE_K,chase,750,5,10000,500,20000,no,target,myhpltmaxrate,40,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@NPC_CALLSLAVE,attack,352,1,10000,0,30000,yes,self,always,0,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@NPC_SUMMONSLAVE,attack,196,1,10000,700,10000,no,self,slavele,2,20279,20280,,,,,
+20277,ILL_WOOTAN_DEFENDER@ST_FULLSTRIP,attack,476,5,2000,0,5000,yes,target,always,0,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@NPC_CRITICALWOUND,attack,673,3,2000,0,30000,yes,target,always,0,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@NPC_FIREBREATH,attack,654,10,2000,500,5000,no,target,myhpltmaxrate,80,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@WZ_METEOR,attack,83,11,2000,500,5000,no,target,myhpltmaxrate,90,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@KN_TWOHANDQUICKEN,attack,60,9,10000,0,100000,yes,self,myhpltmaxrate,30,,,,,,,
+// 20277,ILL_WOOTAN_DEFENDER@NPC_EARTHQUAKE_K,attack,750,5,10000,500,20000,no,target,myhpltmaxrate,40,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@NPC_PULSESTRIKE,attack,661,5,10000,0,15000,yes,self,myhpltmaxrate,60,,,,,,,
+20277,ILL_WOOTAN_DEFENDER@NPC_DRAGONFEAR,attack,659,5,10000,0,10000,yes,self,always,0,,,,,,,
+20278,G_ILL_MEGALITH@NPC_CHEAL,idle,729,5,3000,500,3000,no,self,friendhpltmaxrate,99,,,,,,,
+20278,G_ILL_MEGALITH@NPC_CHEAL,idle,729,5,3000,500,3000,no,self,myhpltmaxrate,99,,,,,,,
+20278,G_ILL_MEGALITH@AM_POTIONPITCHER,idle,231,4,3000,500,5000,no,friend,friendhpltmaxrate,80,,,,,,,
+20278,G_ILL_MEGALITH@AM_POTIONPITCHER,idle,231,4,3000,500,5000,no,friend,myhpltmaxrate,80,,,,,,5,
+20278,G_ILL_MEGALITH@NPC_STUNATTACK,attack,179,2,500,500,5000,no,target,always,0,,,,,,6,
+20278,G_ILL_MEGALITH@NPC_PIERCINGATT,attack,158,2,500,0,5000,yes,target,always,0,,,,,,6,
+20278,G_ILL_MEGALITH@AC_DOUBLE,attack,46,5,500,0,5000,yes,target,always,0,,,,,,,
+20278,G_ILL_MEGALITH@NPC_CHEAL,attack,729,5,3000,500,3000,no,self,friendhpltmaxrate,50,,,,,,,
+20278,G_ILL_MEGALITH@NPC_CHEAL,attack,729,5,3000,500,3000,no,self,myhpltmaxrate,50,,,,,,,
+20278,G_ILL_MEGALITH@AM_POTIONPITCHER,attack,231,4,3000,500,5000,no,friend,friendhpltmaxrate,80,,,,,,,
+20278,G_ILL_MEGALITH@AM_POTIONPITCHER,attack,231,4,3000,500,5000,no,friend,myhpltmaxrate,80,,,,,,5,
+20279,G_ILL_WOOTAN_SHOOTER@NPC_GUIDEDATTACK,attack,172,2,300,0,20000,yes,target,always,0,,,,,,2,
+20279,G_ILL_WOOTAN_SHOOTER@NPC_STUNATTACK,attack,179,2,500,1500,5000,no,target,always,0,,,,,,2,
+20279,G_ILL_WOOTAN_SHOOTER@AC_DOUBLE,attack,46,5,2000,0,5000,yes,target,always,0,,,,,,6,
+20279,G_ILL_WOOTAN_SHOOTER@NPC_BLOODDRAIN,attack,199,1,1500,0,5000,yes,target,always,0,,,,,,,
+20280,G_ILL_WOOTAN_FIGHTER@KN_SPEARSTAB,chase,58,5,2500,0,5000,yes,target,groundattacked,0,,,,,,9,
+20280,G_ILL_WOOTAN_FIGHTER@KN_SPEARSTAB,chase,58,5,5000,0,5000,yes,target,longrangeattacked,0,,,,,,,
+20280,G_ILL_WOOTAN_FIGHTER@SM_MAGNUM,attack,7,4,500,500,5000,no,self,always,0,,,,,,,
+20280,G_ILL_WOOTAN_FIGHTER@KN_TWOHANDQUICKEN,attack,60,5,2000,0,120000,yes,self,myhpltmaxrate,30,,,,,,6,
+20280,G_ILL_WOOTAN_FIGHTER@KN_BRANDISHSPEAR,attack,57,5,2000,0,10000,yes,target,always,0,,,,,,6,
+20280,G_ILL_WOOTAN_FIGHTER@NPC_FIREATTACK,attack,186,4,1000,0,5000,yes,target,always,0,,,,,,,
+
 // Episode 17.1 - Illusion (custom) #!todo
 20340,EL-A17T@NPC_AGIUP,chase,350,5,2000,0,60000,no,self,always,0,,,,,,6,
 20340,EL-A17T@NPC_POWERUP,attack,349,5,2000,0,60000,no,self,always,0,,,,,,6,

+ 24 - 0
db/re/quest_db.yml

@@ -2803,15 +2803,39 @@ Body:
   - Id: 5846
     Title: Welcome Corridor
     TimeLimit: 4h
+  - Id: 5847
+    Title: A story to tell Luanda
+  - Id: 5848
+    Title: Evidence of Fighting the Megaliths
   - Id: 5849
     Title: "[Waiting] Evidence to Fight Megaliths"
     TimeLimit: 4h
+  - Id: 5850
+    Title: Evidence of Fighting the Utans
   - Id: 5851
     Title: "[Waiting] Evidence of Fighting the Utans"
     TimeLimit: 4h
+  - Id: 5852
+    Title: Operation of Geosokki
+    Targets:
+      - Mob: ILL_TRI_JOINT
+        Count: 5
+      - Mob: ILL_STALACTIC_GOLEM
+        Count: 5
+      - Mob: ILL_MEGALITH
+        Count: 5
   - Id: 5853
     Title: "[Waiting] Operation to Fight Megalithic"
     TimeLimit: 4h
+  - Id: 5854
+    Title: Operation of Utans
+    Targets:
+      - Mob: ILL_STONE_SHOOTER
+        Count: 5
+      - Mob: ILL_WOOTAN_SHOOTER
+        Count: 5
+      - Mob: ILL_WOOTAN_FIGHTER
+        Count: 5
   - Id: 5855
     Title: "[Wait] Utan Fighting Operation"
     TimeLimit: 4h

+ 147 - 0
npc/re/merchants/enchan_illusion_16_2.txt

@@ -3,12 +3,15 @@
 //===== Description: =========================================
 //= [Walkthrough Conversion]
 //= Illusion series related merchants and enchanters
+// Note:
+// - Some dialog are missing in Illusion of Luanda exchange NPC.
 //===== Changelog: ===========================================
 //= 1.0 Initial release of Illusion of Moonlight [crazyarashi]
 //= 1.1 Cleanup and improvements [Everade]
 //= 1.2 Added Illusion of Vampire enchanter [Capuche]
 //= 1.3 Added Illusion of Frozen enchanter [Capuche]
 //= 1.4 Added Illusion of Turtle enchanter [Capuche]
+//= 1.5 Added Illusion of Luanda enchanter [Capuche]
 //============================================================
 
 //============================================================
@@ -1498,3 +1501,147 @@ alberta,226,28,3	script	Equipment Researcher	4_TOWER_15,{
 	getitem .@reward,1;
 	close;
 }
+
+
+//============================================================
+//= Illusion of Luanda
+//============================================================
+
+// Exchange npc
+com_d02_i,234,266,6	script	Village Soap#Lu	4_M_ORIENT01,{
+	if (checkweight(1201,3) == 0) {
+		mes "- You cannot proceed because you have too many items. -";
+		close;
+	}
+	disable_items;
+	setarray .@equipment_id[0],
+		18174,
+		28626,
+		19366,
+		15348,
+		22192,
+		20923;
+	setarray .@equipment_name$[0],
+		getitemname(.@equipment_id[0]),
+		getitemname(.@equipment_id[1]),
+		getitemname(.@equipment_id[2]),
+		getitemname(.@equipment_id[3]),
+		getitemname(.@equipment_id[4]),
+		getitemname(.@equipment_id[5]);
+
+	mes "[Village Soap]";
+	mes "I've also rolled up my sleeves for the adventurers who work hard for the village. Can I make your equipment stronger? Is there anything on the list you want?";
+	next;
+	.@s = select( "[Material Check] View catalog.", "[Production Request] " + .@equipment_name$[0], "[Production Request] " + .@equipment_name$[1], "[Production Request] " + .@equipment_name$[2],
+		"[Production Request] " + .@equipment_name$[3], "[Production Request] " + .@equipment_name$[4], "[Production Request] " + .@equipment_name$[5] ) - 2;
+	if (.@s == -1) {
+		mes "[Village Soap]";
+		mes "Are you curious about the ingredients? Take a look.";
+		while(1) {
+			next;
+			.@s = select( "Stop watching", "[Material Check] " + .@equipment_name$[0], "[Material Check] " + .@equipment_name$[1], "[Material Check] " + .@equipment_name$[2],
+				"[Material Check] " + .@equipment_name$[3], "[Material Check] " + .@equipment_name$[4], "[Material Check] " + .@equipment_name$[5] ) - 2;
+			if (.@s == -1) {
+				mes "[Village Soap]";
+				mes "If you equip the required equipment and bring the ingredients, I'll make it for you in no time.";
+				close;
+			}
+			.@size = callsub( S_Data, .@equipment_id[.@s], .@equip_id_refined, .@req_id, .@req_amount, .@part );
+
+			mes "" + mesitemlink(.@equipment_id[.@s]) + "";
+			mes "**********************************";
+			if (.@equipment_id[.@s] == 18174)
+				mes "1 " + mesitemlink(.@equip_id_refined) + "";
+			else
+				mes "1 " + mesitemlink(.@equip_id_refined) + "";
+			for ( .@i = 0; .@i < .@size; ++.@i )
+				mes "" + .@req_amount[.@i] + " " + mesitemlink(.@req_id[.@i]) + "";
+		}
+		end;
+	}
+	.@size = callsub( S_Data, .@equipment_id[.@s], .@equip_id_refined, .@req_id, .@req_amount, .@part );
+
+	if (getequiprefinerycnt(.@part) < 9) {
+		mes "[Village Soap]";
+		mes "I don't care what this equipment is, but it needs to be refined to at least +9.";
+		close;
+	}
+	if (getequipid(.@part) != .@equip_id_refined) {
+		mes "[Village Soap]";
+		mes "Eheh- This dude misunderstood me. Do you have to equip the equipment that becomes the material?";
+		close;
+	}
+	// todo text (currently custom)
+
+	for ( .@i = 0; .@i < .@size; ++.@i ) {
+		if (countitem(.@req_id[.@i]) < .@req_amount[.@i]) {
+			mes "[Village Soap]";
+			mes "You don't have enough items.";
+			close;
+		}
+	}
+	delequip .@part;
+	for ( .@i = 0; .@i < .@size; ++.@i )
+		delitem .@req_id[.@i], .@req_amount[.@i];
+	getitem .@equipment_id[.@s],1;
+	end;
+
+S_Data:
+	switch( getarg(0) ) {
+	case 18174:
+		set getarg(1), 1726;	// .@equip_id_refined,
+		setarray .@req[0],
+			25636,50,
+			25640,50,
+			25637,50,
+			25271,80;
+		set getarg(4), EQI_HAND_R;
+		break;
+	case 28626:
+		set getarg(1), 1552;
+		setarray .@req[0],
+			25642,100,
+			25271,50;
+		set getarg(4), EQI_HAND_R;
+		break;
+	case 19366:
+		set getarg(1), 5128;
+		setarray .@req[0],
+			25634,30,
+			25633,150,
+			25271,120;
+		set getarg(4), EQI_HEAD_TOP;
+		break;
+	case 15348:
+		set getarg(1), 2354;
+		setarray .@req[0],
+			25641,100,
+			25638,150,
+			25271,80;
+		set getarg(4), EQI_ARMOR;
+		break;
+	case 22192:
+		set getarg(1), 2419;
+		setarray .@req[0],
+			25635,100,
+			25633,150,
+			25271,80;
+		set getarg(4), EQI_SHOES;
+		break;
+	case 20923:
+		set getarg(1), 2520;
+		setarray .@req[0],
+			25639,30,
+			25638,150,
+			25271,120;
+		set getarg(4), EQI_GARMENT;
+		break;
+	}
+	.@size = getarraysize(.@req);
+
+	for ( .@i = 0; .@i < .@size; .@i += 2 ) {
+		set getelementofarray(getarg(2), .@i/2), .@req[.@i];
+		set getelementofarray(getarg(3), .@i/2), .@req[.@i+1];
+	}
+	return (.@size/2);
+}

+ 112 - 0
npc/re/mobs/dungeons/beach_dun.txt

@@ -11,6 +11,7 @@
 //= 1.2 Small 11.1 spawn update [Playtester]
 //= 1.3 More accurate spawns [Playtester]
 //= 1.4 Corrected MVP spawn variance. [L0ne_W0lf]
+//= 1.5 Added Illusion of Luanda. [Capuche]
 //============================================================
 
 //==================================================
@@ -38,3 +39,114 @@ beach_dun3,0,0	monster	Thara Frog	1034,50,5000
 beach_dun3,0,0	monster	Megalodon	1064,30,5000
 beach_dun3,0,0	monster	Hydra	1068,30,5000
 beach_dun3,0,0	monster	Nereid	1255,1,5000
+
+//==================================================
+// Illusion of Luanda
+//==================================================
+// Todo: the count should start after the end of the cooldown?
+-	script	illusion_luanda	-1,{
+	end;
+OnMob20270: callsub( S_Mob, 20270, 5 );	// ILL_TRI_JOINT
+OnMob20271: callsub( S_Mob, 20271, 5 );	// ILL_STALACTIC_GOLEM
+OnMob20272: callsub( S_Mob, 20272, 5 );	// ILL_MEGALITH
+OnMob20274: callsub( S_Mob, 20274, 4 );	// ILL_STONE_SHOOTER
+OnMob20275: callsub( S_Mob, 20275, 4 );	// ILL_WOOTAN_SHOOTER
+OnMob20276: callsub( S_Mob, 20276, 4 );	// ILL_WOOTAN_FIGHTER
+S_Mob:
+	.@group = getarg(1);
+	if (.@group != .group)
+		end;
+	if (playerattached()) {
+		if (.count < 1500)
+			.count++;
+		if (.count == 1500 && !.boss_spawn && !.cooldown) {
+			getunitdata( killedgid, .@data );
+			callsub( S_Boss, (20273 + .swap), .@group, .@data[UMOB_X], .@data[UMOB_Y] );
+		}
+	}
+	.@mob_id = getarg(0);
+	sleep 5000;
+	if (.@group == .group) {
+		monster "com_d02_i",0,0,"--ja--",.@mob_id,1,"illusion_luanda::OnMob" + .@mob_id;
+		// setunittitle for the title, setunitdata
+		setunitdata $@mobid[0], UMOB_GROUP_ID, getarg(1);
+	}
+	end;
+
+S_Boss:
+	killmonster "com_d02_i", "illusion_luanda::OnBossDeath";
+	.boss_spawn = true;
+	monster "com_d02_i",getarg(2),getarg(3),"--ja--",getarg(0),1,"illusion_luanda::OnBossDeath";
+	setunitdata $@mobid[0], UMOB_GROUP_ID, getarg(1);
+	if (.swap == 0)	// ILL_TAO_GUNKA
+		mapannounce "com_d02_i", "Ancient Tao Gunka: Is it time to show off your megalithic power?", bc_map, 0x70DBDB;
+	else	// ILL_WOOTAN_DEFENDER
+		mapannounce "com_d02_i", "Ancient Wootan Defender: I guess I'll have to step in after all these useless guys.", bc_map, 0x70DBDB;
+	end;
+
+OnBossDeath:
+	killmonster "com_d02_i", "illusion_luanda::OnBossDeath";
+	.boss_spawn = false;
+	.cooldown = true;
+
+	if (.swap == 0) {	// ILL_TAO_GUNKA
+		mapannounce "com_d02_i", "Ancient Tao Gunka: Megaliths, it's time to crouch and hold your breath.", bc_map, 0x70DBDB;
+		sleep 2000;
+		mapannounce "com_d02_i", "Ancient Tao Gunka: We'll grow stronger as we unhook and step out into the world.", bc_map, 0x70DBDB;
+		sleep 2000;
+		mapannounce "com_d02_i", "Ancient Tao Gunka: Crouch. When you crouch, you megalith.", bc_map, 0x70DBDB;
+	}
+	else {	// ILL_WOOTAN_DEFENDER
+		mapannounce "com_d02_i", "Ancient Wootan Defender: Ugh.. Quite a dangerous wound..", bc_map, 0x70DBDB;
+		sleep 2000;
+		mapannounce "com_d02_i", "Ancient Wootan Defender: You pushed me, a warrior of the Wootan tribe, this far. It's pretty good. It's a pity, but I'm going to step down now.", bc_map, 0x70DBDB;
+		sleep 2000;
+		mapannounce "com_d02_i", "Ancient Wootan Defender: Listen to all Wootans! Leave now and commit to the next one.", bc_map, 0x70DBDB;
+	}
+	sleep 1000;
+	.group = (.group == 4 ? 5 : 4);
+
+	// all the mobs are killed and immediately replaced with new mobs
+	for ( .@i = 0; .@i < 3; ++.@i ) {
+		.@mob_id = 20270 + .@i + .swap;
+		killmonster "com_d02_i", "illusion_luanda::OnMob" + .@mob_id;
+	}
+
+	.swap = .swap ^ 4;	// swap 0 -> 4, 4 -> 0 (used for mob ID)
+
+	callsub( S_SpawnInit,
+		(20270 + .swap),
+		(20271 + .swap),
+		(20272 + .swap)
+	);
+	initnpctimer;
+	end;
+
+OnTimer7200000:
+	.cooldown = false;
+	stopnpctimer;
+	end;
+
+S_SpawnInit:
+	.count = 0;
+	monster "com_d02_i",0,0,"--ja--",getarg(0),50,"illusion_luanda::OnMob" + getarg(0);
+	copyarray .@gid[0], $@mobid[0], 50;
+	monster "com_d02_i",0,0,"--ja--",getarg(1),50,"illusion_luanda::OnMob" + getarg(1);
+	copyarray .@gid[50], $@mobid[0], 50;
+	monster "com_d02_i",0,0,"--ja--",getarg(2),50,"illusion_luanda::OnMob" + getarg(2);
+	copyarray .@gid[100], $@mobid[0], 50;
+
+	for ( .@i = 0; .@i < 150; ++.@i )
+		setunitdata .@gid[.@i], UMOB_GROUP_ID, .group;
+	return;
+
+OnInit:
+	.group = 5;	// UMOB_GROUP_ID
+
+	callsub( S_SpawnInit,
+		20270,	// ILL_TRI_JOINT
+		20271,	// ILL_STALACTIC_GOLEM
+		20272	// ILL_MEGALITH
+	);
+	end;
+}

+ 1410 - 87
npc/re/quests/quests_16_2_illusion.txt

@@ -11,6 +11,7 @@
 //= 1.2 Added Illusion of Vampire [Capuche]
 //= 1.3 Added Illusion of Frozen [Capuche]
 //= 1.4 Added Illusion of Turtle [Capuche]
+//= 1.5 Added Illusion of Luanda [Capuche]
 //============================================================
 
 //============================================================
@@ -2400,7 +2401,7 @@ OnInit:
 }
 
 // Jubilee Is the Priest's Name
-gef_d01_i,93,178,5	script	Marina#ilgf03	4_F_MONK,5,5,{
+gef_d01_i,93,178,5	script(CLOAKED)	Marina#ilgf03	4_F_MONK,5,5,{
 	end;
 OnTouch:
 	if (ill_vampire == 6) {
@@ -2426,9 +2427,6 @@ OnTouch:
 		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,127,153,5	duplicate(Marina#ilgf03)	Marina#ilgf04	4_F_MONK,5,5
 gef_d01_i,213,237,5	duplicate(Marina#ilgf03)	Marina#ilgf05	4_F_MONK,5,5
@@ -2451,7 +2449,7 @@ gef_d01_i,254,162,1	duplicate(dummy_cloaked_npc)	Undead#ilgf08	ILL_ZOMBIE
 gef_d01_i,252,160,1	duplicate(dummy_cloaked_npc)	Undead#ilgf09	ILL_ZOMBIE
 gef_d01_i,253,165,3	duplicate(dummy_cloaked_npc)	Marina#ilgf10	4_F_MONK
 
-gef_d01_i,250,164,5	script	Priest#ilgf01	4_M_MINISTER,5,5,{
+gef_d01_i,250,164,5	script(CLOAKED)	Priest#ilgf01	4_M_MINISTER,5,5,{
 	if (ill_vampire != 6)
 		end;
 	.@char_id = .@char_id;
@@ -2626,10 +2624,6 @@ OnTouch:
 	if (ill_vampire == 6)
 		npctalk "This is bad, really bad!", "", bc_self;
 	end;
-
-OnInit:
-	cloakonnpc();
-	end;
 }
 
 /*
@@ -2640,7 +2634,7 @@ gef_d01_i,113,97,7	duplicate(dummy_npc)	Wizard#ilgf05	2_M_SAGE_B,5,5
 gef_d01_i,116,96,1	duplicate(dummy_npc)	Undead#ilgf07	GHOUL
 */
 
-gef_d01_i,49,113,3	script	Wizard#ilgf06	4_GEFFEN_01,5,5,{
+gef_d01_i,49,113,3	script(CLOAKED)	Wizard#ilgf06	4_GEFFEN_01,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -2664,15 +2658,12 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf06" );
 	cloakonnpcself( "Wizard#ilgf07" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,46,112,5	duplicate(dummy_cloaked_npc)	Wizard#ilgf07	4_M_ARUNA_NFM1
 gef_d01_i,47,110,7	duplicate(dummy_cloaked_npc)	Undead#ilgf06	GHOUL
 
 
-gef_d01_i,137,60,3	script	Wizard#ilgf08	1_M_WIZARD,5,5,{
+gef_d01_i,137,60,3	script(CLOAKED)	Wizard#ilgf08	1_M_WIZARD,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -2688,14 +2679,11 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf08" );
 	cloakonnpcself( "Nameless Catacomb#ilgf01" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,136,58,5	duplicate(dummy_cloaked_npc)	Nameless Catacomb#ilgf01	4_SOIL
 
 
-gef_d01_i,67,85,5	script	Wizard#ilgf09	4_M_JOB_WIZARD,5,5,{
+gef_d01_i,67,85,5	script(CLOAKED)	Wizard#ilgf09	4_M_JOB_WIZARD,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -2721,14 +2709,11 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf09" );
 	cloakonnpcself( "Wizard#ilgf10" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,67,83,1	duplicate(dummy_cloaked_npc)	Wizard#ilgf10	4_GEFFEN_05
 
 
-gef_d01_i,156,234,3	script	Wizard#ilgf11	4_M_SIT_NOVICE,5,5,{
+gef_d01_i,156,234,3	script(CLOAKED)	Wizard#ilgf11	4_M_SIT_NOVICE,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -2744,13 +2729,10 @@ OnTouch:
 	specialeffect EF_GUARD2;
 	cloakonnpcself( "Wizard#ilgf11" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 
 
-gef_d01_i,48,255,5	script	Wizard#ilgf12	1_M_WIZARD,5,5,{
+gef_d01_i,48,255,5	script(CLOAKED)	Wizard#ilgf12	1_M_WIZARD,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -2775,15 +2757,12 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf13" );
 	cloakonnpcself( "Nameless Catacomb#ilgf02" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,50,257,5	duplicate(dummy_cloaked_npc)	Wizard#ilgf13	2_F_MAGICMASTER
 gef_d01_i,50,254,5	duplicate(dummy_cloaked_npc)	Nameless Catacomb#ilgf02	4_SOIL
 
 
-gef_d01_i,112,267,3	script	Wizard#ilgf14	4_M_JOB_WIZARD,5,5,{
+gef_d01_i,112,267,3	script(CLOAKED)	Wizard#ilgf14	4_M_JOB_WIZARD,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -2808,15 +2787,12 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf15" );
 	cloakonnpcself( "Nameless Catacomb#ilgf03" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,110,266,5	duplicate(dummy_cloaked_npc)	Wizard#ilgf15	4_M_ARUNA_NFM1
 gef_d01_i,111,264,5	duplicate(dummy_cloaked_npc)	Nameless Catacomb#ilgf03	4_SOIL
 
 
-gef_d01_i,55,167,3	script	Wizard#ilgf16	4_M_ARUNA_NFM1,5,5,{
+gef_d01_i,55,167,3	script(CLOAKED)	Wizard#ilgf16	4_M_ARUNA_NFM1,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -2832,14 +2808,11 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf16" );
 	cloakonnpcself( "Wizard#ilgf17" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,53,166,7	duplicate(dummy_cloaked_npc)	Wizard#ilgf17	2_F_MAGICMASTER
 
 
-gef_d01_i,236,235,1	script	Wizard#ilgf18	1_M_WIZARD,5,5,{
+gef_d01_i,236,235,1	script(CLOAKED)	Wizard#ilgf18	1_M_WIZARD,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -2855,14 +2828,11 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf18" );
 	cloakonnpcself( "Someone's Dream#ilgf18" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,233,237,5	duplicate(dummy_cloaked_npc)	Someone's Dream#ilgf18	NIGHTMARE
 
 
-gef_d01_i,255,201,5	script	Wizard#ilgf19	4_GEFFEN_05,5,5,{
+gef_d01_i,255,201,5	script(CLOAKED)	Wizard#ilgf19	4_GEFFEN_05,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -2884,15 +2854,12 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf20" );
 	cloakonnpcself( "Undead#ilgf05" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,254,200,5	duplicate(dummy_cloaked_npc)	Wizard#ilgf20	2_F_MAGICMASTER
 gef_d01_i,256,198,1	duplicate(dummy_cloaked_npc)	Undead#ilgf05	GHOUL
 
 
-gef_d01_i,204,146,1	script	Wizard#ilgf21	4_GEFFEN_05,5,5,{
+gef_d01_i,204,146,1	script(CLOAKED)	Wizard#ilgf21	4_GEFFEN_05,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -2921,9 +2888,6 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf21" );
 	cloakonnpcself( "Wizard#ilgf22" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,202,149,5	duplicate(dummy_cloaked_npc)	Wizard#ilgf22	4_M_ARUNA_NFM1
 gef_d01_i,202,152,5	duplicate(dummy_cloaked_npc)	Undead#ilgf02	GHOUL
@@ -2931,7 +2895,7 @@ gef_d01_i,200,151,5	duplicate(dummy_cloaked_npc)	Undead#ilgf03	ZOMBIE
 gef_d01_i,204,151,3	duplicate(dummy_cloaked_npc)	Undead#ilgf04	GHOUL
 
 
-gef_d01_i,257,110,1	script	Wizard#ilgf23	4_F_BOMI,5,5,{
+gef_d01_i,257,110,1	script(CLOAKED)	Wizard#ilgf23	4_F_BOMI,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -2949,14 +2913,11 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf23" );
 	cloakonnpcself( "Fast Undead#ilgf01" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,253,112,5	duplicate(dummy_cloaked_npc)	Fast Undead#ilgf01	GHOUL
 
 
-gef_d01_i,230,76,3	script	Wizard#ilgf24	4_M_BIBI,5,5,{
+gef_d01_i,230,76,3	script(CLOAKED)	Wizard#ilgf24	4_M_BIBI,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -2974,14 +2935,11 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf24" );
 	cloakonnpcself( "Shining Mushroom#ilgf01" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,228,75,3	duplicate(dummy_cloaked_npc)	Shining Mushroom#ilgf01	ILL_BLACK_MUSHROOM
 
 
-gef_d01_i,93,34,1	script	Wizard#ilgf25	4_F_BOMI,5,5,{
+gef_d01_i,93,34,1	script(CLOAKED)	Wizard#ilgf25	4_F_BOMI,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -3007,16 +2965,13 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf26" );
 	cloakonnpcself( "Undead#ilgf01" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 gef_d01_i,94,37,3	duplicate(dummy_cloaked_npc)	Wizard#ilgf26	1_M_WIZARD
 gef_d01_i,91,35,5	duplicate(dummy_cloaked_npc)	Undead#ilgf01	GHOUL
 
 // gef_d01_i,101,124,3	duplicate(dummy_cloaked_npc)	Wizard#ilgf27	4_F_BOMI,5,5	// npc has official range. Effect ?
 gef_d01_i,101,124,3	duplicate(dummy_cloaked_npc)	Wizard#ilgf27	4_F_BOMI
-gef_d01_i,99,122,7	script	Wizard#ilgf28	4_F_BOMI,5,5,{
+gef_d01_i,99,122,7	script(CLOAKED)	Wizard#ilgf28	4_F_BOMI,5,5,{
 	end;
 OnTouch:
 	setpcblock PCBLOCK_NPC, true;
@@ -3039,9 +2994,6 @@ OnTouch:
 	cloakonnpcself( "Wizard#ilgf27" );
 	cloakonnpcself( "Wizard#ilgf28" );
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 // End of the "Wizard illusions"
 
@@ -4602,7 +4554,7 @@ OnInit:
 	end;
 }
 
-gef_d01_i,189,98,3	script	Dracula#ilgf02	4_DRACULA,{
+gef_d01_i,189,98,3	script(CLOAKED)	Dracula#ilgf02	4_DRACULA,{
 	if (ill_vampire < 10) {
 		mes "[Dracula]";
 		mes "What brings you? I suggest you stay away out of this place.";
@@ -4864,9 +4816,6 @@ gef_d01_i,189,98,3	script	Dracula#ilgf02	4_DRACULA,{
 	mes "[Dracula]";
 	mes "The bat blood she drinks sometimes causes her to go out of her mind. She calms down after a while, but if the people from the Church see her in that vulnerable state, they will try to kill her.";
 	close;
-OnInit:
-	cloakonnpc();
-	end;
 }
 
 
@@ -4980,7 +4929,7 @@ OnTouch:
 	end;
 }
 
-ice_d03_i,155,43,3	script	Zeith#frozen01	4_M_FROZEN_GC,{
+ice_d03_i,155,43,3	script(CLOAKED)	Zeith#frozen01	4_M_FROZEN_GC,{
 	if (checkweight(1201,1) == 0 || (MaxWeight - Weight) < 2000) {
 		mes "I'm carrying too many types of items. I should lighten my bag first.";
 		close;
@@ -5324,13 +5273,9 @@ ice_d03_i,155,43,3	script	Zeith#frozen01	4_M_FROZEN_GC,{
 		close;
 	}
 	end;
-
-OnInit:
-	cloakonnpc();
-	end;
 }
 
-ice_d03_i,155,43,3	script	Zeith#frozen02	4_M_GUILLOTINE,{
+ice_d03_i,155,43,3	script(CLOAKED)	Zeith#frozen02	4_M_GUILLOTINE,{
 	if (illusion_frozen == 3) {
 		if (checkquest(15112,HUNTING) == 2) {
 			mes "[^0000ffZeith^000000]";
@@ -5469,13 +5414,9 @@ OnZeithDead:
 		specialeffect EF_ICECRASH;
 	}
 	end;
-
-OnInit:
-	cloakonnpc();
-	end;
 }
 
-ice_d03_i,150,43,5	script	Vrid#frozen01	4_M_FROZEN_KN,{
+ice_d03_i,150,43,5	script(CLOAKED)	Vrid#frozen01	4_M_FROZEN_KN,{
 	if (illusion_frozen == 3) {
 		if (checkquest(15112,HUNTING) == 2) {
 			cloakoffnpcself( "Zeith#frozen02" );
@@ -5490,12 +5431,9 @@ ice_d03_i,150,43,5	script	Vrid#frozen01	4_M_FROZEN_KN,{
 		close;
 	}
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 
-ice_d03_i,150,43,5	script	Vrid#frozen02	4_M_KNIGHT_BLACK,{
+ice_d03_i,150,43,5	script(CLOAKED)	Vrid#frozen02	4_M_KNIGHT_BLACK,{
 	end;
 OnVridDead:
 	if (illusion_frozen == 4) {
@@ -5503,9 +5441,6 @@ OnVridDead:
 		specialeffect EF_ICECRASH;
 	}
 	end;
-OnInit:
-	cloakonnpc();
-	end;
 }
 
 ice_d03_i,137,38,3	script	Heap of Dry Soil#frozen1	4_SOIL,{
@@ -7387,3 +7322,1391 @@ tur_d04_i,135,133,1	script	#illturg24	CLEAR_NPC,{
 	close;
 }
 tur_d04_i,137,126,0	duplicate(#illturgg11)	#illturgg24	HIDDEN_WARP_NPC,3,3
+
+
+
+//============================================================
+//= Illusion of Luanda
+//============================================================
+// Warps
+beach_dun2,248,254,4	script	#IL_Luanda	4_ENERGY_BLUE,{
+	mes "This is a totem that glows softly in blue.";
+	next;
+	if (select( "Touch it", "Leave it" ) == 2)
+		end;
+	if (BaseLevel < 160) {
+		mes "- You cannot enter the area because your level is too low.";
+		close;
+	}
+	warp "com_d02_i",249,243;
+	end;
+}
+
+com_d02_i,254,243,0	warp2	IL_Luanda#Luanda	1,1,beach_dun2,249,243
+
+
+// Reward npc
+com_d02_i,241,255,4	script	Defense Manager Luanda#Lu	4_M_THAIONGBAK,{
+	if (BaseLevel < 160)	// shouldn't happen
+		end;
+	if (checkweight(1201,3) == 0) {
+		mes "- You cannot proceed because you have too many items. -";
+		close;
+	}
+	if (ill_luanda == 0) {
+		emotion ET_QUESTION;
+		mes "[Luanda]";
+		mes "Who are you?";
+		next;
+		mes "[Luanda]";
+		mes "Ah! Ah! Ah!";
+		mes "I've heard that they hire adventurers because they don't have enough hands to defend the village. I guess that's you?";
+		next;
+		mes "[Luanda]";
+		mes "By the way, haven't I seen you somewhere? Your face looks strangely familiar.";
+		next;
+		mes "[Luanda]";
+		mes "Oops, I'm not in a position to compare similar faces... We're twins. Ha ha ha";
+		next;
+		mes "[Luanda]";
+		mes "Should I say hello? Nice to meet you. I'm Luanda, the defense manager of this cave.";
+		next;
+		mes "[Luanda]";
+		mes "For simple quests, we have prepared a request board, so you can find them and report them to me.";
+		next;
+		mes "[Luanda]";
+		mes "The quest itself doesn't have to be difficult, as you just have to go around the cave and deal with the monsters or bring the byproducts of the monsters.";
+		next;
+		mes "[Luanda]";
+		mes "Since you've been hired by the village, I'd like you to work hard and lighten the burden a bit. It's really hard these days. Please.";
+		next;
+		ill_luanda = 1;
+		emotion ET_KIK;
+		mes "[Luanda]";
+		mes "Then have a good time. Adventurer.";
+		close;
+	}
+	if (ill_luanda == 2) {	// first time (walk near any shadow npc)
+		mes "[Luanda]";
+		mes "What's up, adventurer?";
+		next;
+		mes "Told Luanda about the strange shimmering you had witnessed.";
+		next;
+		emotion ET_SCRATCH;
+		mes "[Luanda]";
+		mes "A strange shimmer? As you said, it's a really strange phenomenon.";
+		next;
+		mes "[Luanda]";
+		mes "I've lived in the village for a long time, but it seems like a phenomenon I've never heard of. I'm guessing, but I think it's just started happening recently.";
+		next;
+		mes "[Luanda]";
+		mes "I don't live alone in the village, and if someone had seen it, it would have been rumored, but hearing it for the first time would make my guess clear.";
+		next;
+		mes "[Luanda]";
+		mes "It could be dangerous, so if you find it, why don't you avoid it? There's no need to take a risk.";
+		next;
+		ill_luanda = 3;
+		getexp 1120000,650000;
+		erasequest 5847;
+		mes "Reported to Luanda and gained experience.";
+		close;
+	}
+	if (ill_luanda == 5) {	// MONDAY vortex 153/33
+		mes "[Luanda]";
+		mes "What's up, adventurer?";
+		next;
+		mes "Told Luanda about three young men you met and talked to.";
+		next;
+		emotion ET_SURPRISE;
+		mes "[Luanda]";
+		mes "Uh.. huh?! You saw me and young men who look like like my brothers.";
+		next;
+		mes "[Luanda]";
+		mes "It seems like it happened a long time ago. Unlike Mao, I don't have a very good memory.";
+		next;
+		mes "[Luanda]";
+		mes "I vaguely remember it. I did warn a stranger I met before I went hunting with my brothers.";
+		next;
+		mes "[Luanda]";
+		mes "It's not uncommon to see strangers in town, so my memory is hazy, but I remember it.";
+		next;
+		mes "[Luanda]";
+		mes "It's interesting. If what you're saying is true, doesn't that mean you've been talking to me in the past?";
+		next;
+		mes "[Luanda]";
+		mes "Ah! Come to think of it, do you remember the first time we met? Didn't I say I was used to being an adventurer?";
+		next;
+		mes "[Luanda]";
+		mes "As expected, I don't think it was a bad feeling. I really can't believe it. An adventurer who met me in the past...";
+		next;
+		mes "[Luanda]";
+		mes "That sounds like something similar could happen in the future, right?";
+		next;
+		emotion ET_SORRY;
+		mes "[Luanda]";
+		mes "I apologize. Deep down, I felt that it was annoying for adventurers to talk to me. Now, I'll ask you first.";
+		next;
+		mes "[Luanda]";
+		mes "If you ever go through something similar, please let me know. I'm begging you.";
+		next;
+		ill_luanda = 6;
+		getexp 1120000,650000;
+		erasequest 5847;
+		mes "Reported to Luanda and gained experience.";
+		close;
+	}
+	if (ill_luanda == 7) {// TUESDAY vortex 118/100
+		mes "[Luanda]";
+		mes "What's up, adventurer?";
+		next;
+		mes "Told him about Karoo and Asudem.";
+		next;
+		emotion ET_SMILE;
+		mes "[Luanda]";
+		mes "Puhahaha I think you came to see the place where Hyung-nim and sister-in-law are dating.";
+		next;
+		emotion ET_SMILE;
+		mes "[Luanda]";
+		mes "Oh my gosh.. that place is where my brother and sister-in-law often went on dates.";
+		next;
+		mes "[Luanda]";
+		mes "My brother might think it's a secret place only he knows, but it's a place everyone in the village knows.";
+		next;
+		mes "[Luanda]";
+		mes "It's quite a popular spot among village lovers. It's quiet and a good place for a date.";
+		next;
+		mes "[Luanda]";
+		mes "Recently, I haven't had much to laugh about because of various things, but thanks to you, I laughed out loud. I look forward to the next story.";
+		next;
+		ill_luanda = 8;
+		getexp 1120000,650000;
+		erasequest 5847;
+		mes "Reported to Luanda and gained experience.";
+		close;
+	}
+	if (ill_luanda == 9) {// WEDNESDAY vortex 193/267
+		mes "[Luanda]";
+		mes "What's up, adventurer?";
+		next;
+		mes "Told Luanda about who was painting murals in the cave.";
+		next;
+		mes "[Luanda]";
+		mes "Have you ever met me when I was painting the mural? I don't remember, but...";
+		next;
+		mes "[Luanda]";
+		mes "I think I can tell you why I painted the mural.";
+		next;
+		mes "[Luanda]";
+		mes "It's not much of a secret, but each of my brothers has a mysterious ability.";
+		next;
+		mes "[Luanda]";
+		mes "In the case of Karoo-hyung, he has the ability to see accurately even from a distance..";
+		next;
+		mes "[Luanda]";
+		mes "Maknae Maru has an excellent memory that never forgets what she has seen and the ability to read her opponent's mind..";
+		next;
+		mes "[Luanda]";
+		mes "I'm not always correct, but I can see into the future. Ah! I have more abilities than that.";
+		next;
+		mes "[Luanda]";
+		mes "I can see people's good and evil energy. In the case of adventurers...";
+		next;
+		mes "[Luanda]";
+		mes "I can feel the good energy that can't be touched. That's why I feel more bitter.";
+		next;
+		mes "[Luanda]";
+		mes "Coming back to the original story, the reason I'm painting the mural is because one day I dreamed of a village burning down.";
+		next;
+		mes "[Luanda]";
+		mes "Many monsters have come to town and people are crying out in pain because of it...";
+		next;
+		mes "[Luanda]";
+		mes "After the hellish dream, I saw myself recording the day's events on a mural in a cave.";
+		next;
+		mes "[Luanda]";
+		mes "Haha, don't worry too much. The dream hasn't happened yet.";
+		next;
+		mes "[Luanda]";
+		mes "Do you know? If I paint the mural in advance, will the future I saw in my dream change?";
+		next;
+		mes "[Luanda]";
+		mes "An adventurer I haven't seen in my dreams is helping us, so I'm sure we can change it.";
+		next;
+		ill_luanda = 10;
+		getexp 1120000,650000;
+		erasequest 5847;
+		mes "Reported to Luanda and gained experience.";
+		close;
+	}
+	if (ill_luanda == 11) {// THURSDAY vortex 228/91
+		mes "[Luanda]";
+		mes "What's up, adventurer?";
+		next;
+		mes "Told Luanda about Mao, who was training alone.";
+		next;
+		mes "[Luanda]";
+		mes "Mao guy... you've been thinking about a lot of things.";
+		next;
+		mes "[Luanda]";
+		mes "Brother Karu lives separately from his sister-in-law, and we still live together, but I don't think he cared too much about his sister.";
+		next;
+		mes "[Luanda]";
+		mes "It's said that I lost my mind after having a painful dream, but somehow my anxiety...";
+		next;
+		mes "[Luanda]";
+		mes "Looks like he's been infested with Mao. Maybe because of his abilities, he's often swayed by other people's emotions...";
+		next;
+		mes "[Luanda]";
+		mes "He... training to become stronger... even if he doesn't become stronger... he's still enough...";
+		next;
+		emotion ET_THANKS;
+		mes "[Luanda]";
+		mes "Thank you. Thanks to you, I found out about Mao's troubles.";
+		next;
+		ill_luanda = 12;
+		getexp 1120000,650000;
+		erasequest 5847;
+		mes "Reported to Luanda and gained experience.";
+		close;
+	}
+	if (ill_luanda == 13) {// FRIDAY vortex 208/130
+		mes "[Luanda]";
+		mes "What's up, adventurer?";
+		next;
+		mes "Told Luanda about someone who was taking something from the cave.";
+		next;
+		mes "[Luanda]";
+		mes "You saw that too. I think we've talked about it before. In my dream, I saw monsters coming into town.";
+		next;
+		mes "[Luanda]";
+		mes "And in preparation for that time, the village warriors evacuated the elderly and weak to this place, and they stored supplies here and there in the cave.";
+		next;
+		mes "[Luanda]";
+		mes "These are literally emergency items. It would be perfect if they were not used, but...";
+		next;
+		mes "[Luanda]";
+		mes "You don't know how the world works. If you find something, just ignore it.";
+		next;
+		ill_luanda = 14;
+		getexp 1120000,650000;
+		erasequest 5847;
+		mes "Reported to Luanda and gained experience.";
+		close;
+	}
+	if (ill_luanda == 15) {// (re)MONDAY vortex 153/33
+		mes "[Luanda]";
+		mes "What's up, adventurer?";
+		next;
+		mes "Told Luanda about the story of meeting the villagers and the village chief.";
+		next;
+		mes "[Luanda]";
+		mes "You really came to see what happened a while ago. It wasn't as much damage as you saw in your dream, but it was a lot of damage.";
+		next;
+		mes "[Luanda]";
+		mes "When I think of that day, my heart hurts. All of a sudden, when my brothers were away...";
+		next;
+		mes "[Luanda]";
+		mes "Still, the village chief, the best elder in the village, seems to have suffered less damage because he was calm. Thanks for the story.";
+		next;
+		ill_luanda = 16;
+		getexp 1120000,650000;
+		erasequest 5847;
+		mes "Reported to Luanda and gained experience.";
+		close;
+	}
+	if (ill_luanda == 17) {// SATURDAY vortex 42/215
+		mes "[Luanda]";
+		mes "What's up, adventurer?";
+		next;
+		mes "Told Luanda about the story of meeting the brothers who ran somewhere in a hurry.";
+		next;
+		mes "[Luanda]";
+		mes "You must have seen the day my brothers and I came back from hunting. There was a big disaster in the village and it was the next day.";
+		next;
+		mes "[Luanda]";
+		mes "Kuh.. If me and my brothers hadn't emptied the village... the people wouldn't have been taken by the monsters...";
+		next;
+		mes "[Luanda]";
+		mes "If so... my sister-in-law also...";
+		next;
+		select( "It's not your fault." );
+		mes "[Luanda]";
+		mes "I know. It's not because of me and my brothers.. but.. that day.. we.. .. .. it's just a pity";
+		next;
+		select( "You'd better calm down first." );
+		mes "[Luanda]";
+		mes "You've shown me, adventurer, something I wouldn't have seen. I'm just here to tell you what I remember...";
+		next;
+		ill_luanda = 18;
+		getexp 1120000,650000;
+		erasequest 5847;
+		mes "Reported to Luanda and gained experience.";
+		close;
+	}
+	if (ill_luanda == 19) {// (re)THURSDAY vortex 228/91
+		mes "[Luanda]";
+		mes "What's up, adventurer?";
+		next;
+		mes "Told Luanda about the story of seeing Karu and Asudem.";
+		next;
+		mes "[Luanda]";
+		mes "... ... ...";
+		next;
+		mes "[Luanda]";
+		mes "Ka.. Karu hyungnim.. hyungnim";
+		mes "That's the reason why you shut yourself up in the west cave.";
+		next;
+		mes "[Luanda]";
+		mes "I feel resentful of myself for not being able to help with the village defense.";
+		next;
+		mes "[Luanda]";
+		mes "Your heart... I can't even imagine your sister-in-law's... whoo... your sorrow...";
+		next;
+		mes "[Luanda]";
+		mes "When the situation here is sorted out, I will look for my older brother. He must be alone in pain and sorrow.";
+		next;
+		mes "[Luanda]";
+		mes "My heart hurts like this too, but if you know the youngest who struggles because of his abilities... I'll have to prepare. Thank you, adventurer.";
+		next;
+		ill_luanda = 20;
+		getexp 1120000,650000;
+		erasequest 5847;
+		mes "Reported to Luanda and gained experience.";
+		close;
+	}
+	if (ill_luanda == 21) {	// SUNDAY vortex 263/72
+		mes "[Luanda]";
+		mes "What's up, adventurer?";
+		next;
+		mes "Told Luanda about stories of unknown people.";
+		next;
+		mes "[Luanda]";
+		mes "It sounds like a conversation between a Wootan or Megalith monster targeting the village.";
+		next;
+		mes "[Luanda]";
+		mes "Follow a strong leader? Recently, I felt that the movements of these guys are disturbingly orderly...";
+		next;
+		mes "[Luanda]";
+		mes "It seems that a monster has appeared to lead them.";
+		next;
+		mes "[Luanda]";
+		mes "It's embarrassing. Even now, all we can do is block it.";
+		next;
+		mes "[Luanda]";
+		mes "This is not the time to be sad. We need to build more defenses and take other measures.";
+		next;
+		mes "[Luanda]";
+		mes "A strong leader is also a problem... but a power that has been handed down as a legend? This is a story I've never heard of before.";
+		next;
+		mes "[Luanda]";
+		mes "I'm guessing this is the reason why the monsters are attacking the village, but I'll have to tell the chief and investigate.";
+		next;
+		emotion ET_THANKS;
+		mes "[Luanda]";
+		mes "The story you just told me was really helpful. Thank you, adventurer.";
+		next;
+		ill_luanda = 22;
+		getexp 1120000,650000;
+		erasequest 5847;
+		mes "Reported to Luanda and gained experience.";
+		close;
+	}
+	if (isbegin_quest(5848) == 1 && countitem(25638) > 2) {
+		delitem 25638,3;	// Token_Of_Bigstone
+		erasequest 5848;
+		setquest 5849;
+		.@amount = 1;
+	}
+	if (isbegin_quest(5850) == 1 && countitem(25633) > 2) {
+		delitem 25633,3;	// Token_Of_Wootan
+		erasequest 5850;
+		setquest 5851;
+		.@amount += 1;
+	}
+	if (checkquest(5852,HUNTING) == 2) {
+		erasequest 5852;
+		setquest 5853;
+		.@amount += 1;
+	}
+	if (checkquest(5854,HUNTING) == 2) {
+		erasequest 5854;
+		setquest 5855;
+		.@amount += 1;
+	}
+	if (.@amount > 0) {
+		getitem 25271, .@amount;	// IllusionStone
+		getexp (4300000 * .@amount), (2800000 * .@amount);
+		emotion ET_THANKS;
+		mes "[Luanda]";
+		if (.@amount > 1)
+			mes "It's a situation where even one request is regrettable, but " + .@amount + "... really.";
+		else
+			mes "Each and every request is precious. Thank you again and again.";
+		mes "You worked hard.";
+		close;
+	}
+	mes "[Luanda]";
+	mes "What's up, adventurer?";
+	next;
+	switch( select( "Is there no request here?", "What is this cave?", "Why are monsters invading?" ) ) {
+	case 1:
+		mes "[Luanda]";
+		mes "For quests that are recruiting in town, there is a separate request board.";
+		next;
+		mes "[Luanda]";
+		mes "Ah! Watch your mind. The location is in the middle of the battlefield, so I installed it in the corner for safety reasons.";
+		next;
+		mes "[Luanda]";
+		mes "There are cases where you cannot complete a request on the bulletin board right away, but there is no specific time limit, so don't be in a hurry.";
+		close;
+	case 2:
+		mes "[Luanda]";
+		mes "Adventurer, you are really curious about everything.";
+		next;
+		mes "[Luanda]";
+		mes "The Luanda Caves are strategically the only way out north of town.";
+		next;
+		mes "[Luanda]";
+		mes "That's why we're defending against monster attacks here.";
+		next;
+		select( "Luanda Cave? Luanda?" );
+		mes "[Luanda]";
+		mes "Ah! Did you notice? Yes, my name is Luanda too. The village elders say...";
+		next;
+		mes "[Luanda]";
+		mes "The triplets are said to have been named Karu, Luanda, and Mao after the village caves.";
+		next;
+		mes "[Luanda]";
+		mes "My neighborhood friends teased me a bit when I was young, but I don't have any complaints about the name.";
+		next;
+		mes "[Luanda]";
+		mes "I heard they were named after the guardians of the village. I'm rather proud of them.";
+		close;
+	case 3:
+		mes "[Luanda]";
+		mes "It's very puzzling to us too. If we knew why, we'd have put everything away.";
+		next;
+		mes "[Luanda]";
+		mes "This isn't a town with plenty of food, and I don't think there's any particular reason for monsters to target it.";
+		next;
+		mes "[Luanda]";
+		mes "But what can we do? We're just living here, and the monsters keep coming, so we have to live while blocking them.";
+		close;
+	}
+	end;
+
+OnInit:
+	questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(5847) == 1" );
+	end;
+}
+
+
+// Shadow npcs and main quest related
+com_d02_i,1,1,1	script	com_d02_i_init_shadow_npc	-1,{
+	end;
+OnInit:
+OnHour00:	// updated every 3h at a fixed time
+OnHour03:
+OnHour06:
+OnHour09:
+OnHour12:
+OnHour15:
+OnHour18:
+OnHour21:
+	setarray .@num[1],1,2,3,4,5,6,7;
+	.@today = gettime(DT_DAYOFWEEK);
+	.@today = (.@today == 0 ? 7 : .@today);	// SUNDAY - 0
+	deletearray .@num[.@today],1;
+	deletearray .@num[ rand(1,6) ],1;	// note: should the previous enabled vortex be taken into account?
+
+	for ( .@i = 1; .@i < 6; ++.@i )
+		disablenpc "Shimmer#Lu0" + .@num[.@i];
+	end;
+}
+
+// MONDAY
+com_d02_i,153,33,1	script	Shimmer#Lu01	1_SHADOW_NPC,7,7,{
+	specialeffect EF_M07;
+	end;
+OnTouch:
+	if (ill_luanda == 1) {	// first time (any 1_SHADOW_NPC trigger it)
+		mes "It's a bizarre shimmer that you're likely to be sucked into.";
+		next;
+		ill_luanda = 2;
+		setquest 5847;
+		mes "It seems like a phenomenon that can't be ignored. I'll have to talk to Luanda, the head of defense.";
+		close;
+	}
+	if (ill_luanda == 3) {
+		cloakoffnpcself( "First Young#LuE01" );
+		cloakoffnpcself( "Second Young#LuE01" );
+		cloakoffnpcself( "Third Young#LuE01" );
+		end;
+	}
+	if (ill_luanda == 4) {
+		cloakoffnpcself( "Second Young#LuE01" );
+		end;
+	}
+	if (ill_luanda == 14) {
+		cloakoffnpcself( "Chief#LuE06" );
+		cloakoffnpcself( "Villager#LuE061" );
+		cloakoffnpcself( "Villager#LuE062" );
+		cloakoffnpcself( "Villager#LuE063" );
+		end;
+	}
+	end;
+}
+
+com_d02_i,152,40,6	script(CLOAKED)	Second Young#LuE01	4_M_THAIONGBAK,{
+	if (ill_luanda == 3) {
+		npctalk "Brother? Are you ready? Are you leaving soon? Time is running out.", "", bc_self;
+		mes "[Second Young]";
+		mes "Brother? Are you ready? Are you leaving soon? Time is running out.";
+		next;
+		npctalk "Yes. As the second said, we'd better start quickly. I don't feel very good.", "First Young#LuE01", bc_self;
+		mes "[First Young]";
+		mes "Yes. As the second said, it's better to start quickly. I don't feel very good..";
+		next;
+		npctalk "Hahaha, it's only one day. What's the big deal? Huh?!", "Third Young#LuE01", bc_self;
+		mes "[Third Young]";
+		mes "Hahaha, it's only one day. What's the big deal? Huh?!";
+		next;
+		npctalk "Brothers, there's someone over there. A stranger?", "Third Young#LuE01", bc_self;
+		mes "[Third Young]";
+		mes "Brothers, there is someone over there. A stranger?";
+		next;
+		npctalk "Looks like a stranger? If I remember correctly, I haven't seen that face in the neighborhood.", "Third Young#LuE01", bc_self;
+		mes "[Third Young]";
+		mes "Looks like a stranger? If I remember correctly, I haven't seen that face in the neighborhood.";
+		next;
+		npctalk "If it's the youngest's memory, that's it. It's odd to be a stranger at this age.", "First Young#LuE01", bc_self;
+		mes "[First Young]";
+		mes "If it's the youngest's memory, that's it. It's odd to be a stranger at this age.";
+		next;
+		npctalk "Brother, I don't think you're dangerous. This isn't the time. Brother, let's go first.", "", bc_self;
+		mes "[Second Young]";
+		mes "Brother, I don't think you're dangerous. This isn't the time. Brother, let's go first.";
+		next;
+		npctalk "I'll catch up soon.", "", bc_self;
+		mes "[Second Young]";
+		mes "I'll catch up soon.";
+		next;
+		npctalk "Looking at the expression on the second's face, I see that the stranger has something to say? Youngest, let's go first.", "First Young#LuE01", bc_self;
+		mes "[First Young]";
+		mes "Looking at the second expression, you can see that the stranger has something to say? Youngest, let's go first.";
+		next;
+		npctalk "Take care. Don't be late...", "First Young#LuE01", bc_self;
+		mes "[First Young]";
+		mes "Take care. Don't be late...";
+		next;
+		cloakonnpcself( "First Young#LuE01" );
+		sleep2 500;
+		cloakonnpcself( "Third Young#LuE01" );
+		npctalk "Yes bro.", "", bc_self;
+		mes "[Second Young]";
+		mes "Yes, bro.";
+		next;
+		npctalk "Hey stranger, look at me for a second.", "", bc_self;
+		mes "[Second Young]";
+		mes "Hey stranger, look at me for a second.";
+		ill_luanda = 4;
+		close;
+	}
+	if (ill_luanda == 4) {
+		npctalk "You? Can't you feel anything but good vibes? What the hell are you doing?", "", bc_self;
+		mes "[Second Young]";
+		mes "You? Can't you feel anything but good vibes? What the hell are you doing?";
+		next;
+		select( "What are you talking about?" );
+		npctalk "I can see it. Hmm... you can't see it though.", "", bc_self;
+		mes "[Second Young]";
+		mes "I can see it. Hmm.. you can't see it though.";
+		next;
+		npctalk "I'm telling you that I feel good vibes from you. Leave this place right now.", "", bc_self;
+		mes "[Second Young]";
+		mes "I'm telling you because I feel good vibes from you. Leave this place right now.";
+		next;
+		npctalk "A lot of monsters will come to this town soon. Don't die in vain and leave this place.", "", bc_self;
+		mes "[Second Young]";
+		mes "A lot of monsters will come to this town soon. Don't die in vain and leave this place.";
+		next;
+		cloakonnpcself();
+		ill_luanda = 5;
+		setquest 5847;
+		mes "The young man finished what he was saying and disappeared. He must have followed his brothers who went before him. What the hell is he doing?";
+		next;
+		mes "Should I ask Mr. Luanda about what happened?";
+		close;
+	}
+	end;
+}
+
+com_d02_i,154,41,4	duplicate(dummy_cloaked_npc)	First Young#LuE01	4_M_THAIONGBAK
+com_d02_i,156,39,4	duplicate(dummy_cloaked_npc)	Third Young#LuE01	4_M_THAIONGBAK
+
+
+// TUESDAY
+com_d02_i,118,100,1	script	Shimmer#Lu02	1_SHADOW_NPC,7,7,{
+	specialeffect EF_M07;
+	end;
+OnTouch:
+	if (ill_luanda == 1) {	// first time (any 1_SHADOW_NPC trigger it)
+		mes "It's a bizarre shimmer that you're likely to be sucked into.";
+		next;
+		ill_luanda = 2;
+		setquest 5847;
+		mes "It seems like a phenomenon that can't be ignored. I'll have to talk to Luanda, the head of defense.";
+		close;
+	}
+	if (ill_luanda == 6) {
+		cloakoffnpcself( "Karu#LuE02" );
+		cloakoffnpcself( "Asudem#LuE02" );
+		end;
+	}
+	if (ill_luanda == 18) {
+		cloakoffnpcself( "Karu#LuE08" );
+		cloakoffnpcself( "Asudem#LuE08" );
+		end;
+	}
+	end;
+}
+
+com_d02_i,121,95,4	script(CLOAKED)	Karu#LuE02	4_M_THAIONGBAK,{
+	if (ill_luanda == 6) {
+		npctalk "Karu.. How was the hunt today?", "Asudem#LuE02", bc_self;
+		mes "[Asudem]";
+		mes "Karu.. how was the hunt today?";
+		next;
+		npctalk "Hahaha Asudem... No honey. Don't you trust my skills? I caught plenty this time as usual.", "", bc_self;
+		mes "[Karu]";
+		mes "Hahaha Asudem... No honey. Don't you trust my skills? I caught plenty this time as usual.";
+		next;
+		npctalk "Phi~ braggart, Master Mao has already told me everything.", "Asudem#LuE02", bc_self;
+		mes "[Asudem]";
+		mes "Phi~ braggart, Master Mao has already told me everything.";
+		next;
+		npctalk "I heard that only Master Luanda and Master Mao were running around this time? You lay on top of a tree and just shouted...", "Asudem#LuE02", bc_self;
+		mes "[Asudem]";
+		mes "I heard that only Master Luanda and Master Mao were running around this time? You lay on top of a tree and just shouted...";
+		next;
+		npctalk "Wow... these guys are real...", "", bc_self;
+		mes "[Karu]";
+		mes "Wow...these guys are real...";
+		next;
+		npctalk "Honey? Who's there?", "Asudem#LuE02", bc_self;
+		mes "[Asudem]";
+		mes "Honey? Who's there?";
+		next;
+		npctalk "Who's coming all the way to this eerie place? Huh?! Really... It was a good date.", "", bc_self;
+		mes "[Karu]";
+		mes "Who's coming all the way to this eerie place? Huh?! Really... It was a good date.";
+		next;
+		npctalk "Honey, let's go, I think today's date is over. Hey, let's do some errands~ We'll get out of here...", "", bc_self;
+		mes "[Karu]";
+		mes "Honey, let's go, I think today's date is over. Hey, let's go do some errands~ We'll get out of here...";
+		next;
+		cloakonnpcself();
+		cloakonnpcself( "Asudem#LuE02" );
+		ill_luanda = 7;
+		setquest 5847;
+		mes "It looks like I interrupted the couple's date. I need to tell Luanda what happened.";
+		close;
+	}
+	end;
+}
+
+com_d02_i,120,95,6	duplicate(dummy_cloaked_npc)	Asudem#LuE02	4_F_01
+
+
+// WEDNESDAY
+com_d02_i,193,267,1	script	Shimmer#Lu03	1_SHADOW_NPC,7,7,{
+	specialeffect EF_M07;
+	end;
+OnTouch:
+	if (ill_luanda == 1) {	// first time (any 1_SHADOW_NPC trigger it)
+		mes "It's a bizarre shimmer that you're likely to be sucked into.";
+		next;
+		ill_luanda = 2;
+		setquest 5847;
+		mes "It seems like a phenomenon that can't be ignored. I'll have to talk to Luanda, the head of defense.";
+		close;
+	}
+	if (ill_luanda == 8) {
+		cloakoffnpcself( "Young#LuE03" );
+		end;
+	}
+	end;
+}
+
+com_d02_i,191,271,8	script(CLOAKED)	Young#LuE03	4_M_THAIONGBAK,{
+	if (ill_luanda == 8) {
+		npctalk "Uhm... It's a bit of a mess... but this is a great mural for my skills.", "", bc_self;
+		mes "[Young Man]";
+		mes "Uhm... It's a bit of a mess... but this is a great mural for my skills.";
+		next;
+		npctalk "I draw what I see in my dreams, but... will the things I see really happen?", "", bc_self;
+		mes "[Young Man]";
+		mes "I draw what I see in my dreams, but... will the things I see really happen?";
+		next;
+		npctalk "It would be nice if it was just a dream...", "", bc_self;
+		mes "[Young Man]";
+		mes "It would be nice if it was just a dream...";
+		next;
+		npctalk "First, let's do what I can. Huh? You?", "", bc_self;
+		mes "[Young Man]";
+		mes "First, let's do what I can. Huh? You?";
+		next;
+		select( "Do you remember me?" );
+		npctalk "Ah! You? The stranger I saw last time!! Are you still here? I'm sure I'll...", "", bc_self;
+		mes "[Young Man]";
+		mes "Ah! You? The stranger I saw last time!! Are you still here? I'm sure I'll...";
+		next;
+		cloakonnpcself();
+		ill_luanda = 9;
+		setquest 5847;
+		mes "The young man has disappeared. Didn't you say that this young man was Mr. Luanda? I should tell Luanda what I've been through.";
+		close;
+	}
+	end;
+}
+
+
+// THURSDAY
+com_d02_i,228,91,1	script	Shimmer#Lu04	1_SHADOW_NPC,7,7,{
+	specialeffect EF_M07;
+	end;
+OnTouch:
+	if (ill_luanda == 1) {	// first time (any 1_SHADOW_NPC trigger it)
+		mes "It's a bizarre shimmer that you're likely to be sucked into.";
+		next;
+		ill_luanda = 2;
+		setquest 5847;
+		mes "It seems like a phenomenon that can't be ignored. I'll have to talk to Luanda, the head of defense.";
+		close;
+	}
+	if (ill_luanda == 10) {
+		cloakoffnpcself( "Young#LuE04" );
+		end;
+	}
+	end;
+}
+
+com_d02_i,228,95,4	script(CLOAKED)	Young#LuE04	4_M_THAIONGBAK,{
+	if (ill_luanda == 10) {
+		npctalk "Oh, why am I so weak? Unlike my older brothers, my abilities are not particularly useful in battle.", "", bc_self;
+		mes "[Young Man]";
+		mes "Oh, why am I so weak? Unlike my older brothers, my abilities are not particularly useful in battle.";
+		next;
+		npctalk "Huh?! You're the stranger Luanda took an interest in on his way out hunting?", "", bc_self;
+		mes "[Young Man]";
+		mes "Huh?! You're the stranger Luanda took an interest in on the way out hunting?";
+		next;
+		npctalk "Should I say aloud since I met you? My name is Mao. I'm the younger brother of Luanda, whom you met the other day.", "", bc_self;
+		mes "[Young Man]";
+		mes "Should I say aloud since I met you? My name is Mao. I'm the younger brother of Luanda, whom you met the other day.";
+		next;
+		select( "I..." );
+		npctalk "Hahaha Nice to meet you. I don't know if you noticed, but my siblings are triplets.", "", bc_self;
+		mes "[Young Man]";
+		mes "Hahaha Nice to meet you. I don't know if you noticed, but my siblings are triplets.";
+		next;
+		npctalk "My brothers were abandoned in the village as babies. The villagers picked them up and raised them.", "", bc_self;
+		mes "[Young Man]";
+		mes "My brothers were abandoned in the village as babies. The villagers picked them up and raised them.";
+		next;
+		npctalk "They also named them Karu, Luanda, and Mao after the caves around town.", "", bc_self;
+		mes "[Young Man]";
+		mes "They also named them Karu, Luanda, and Mao after the caves around town.";
+		next;
+		npctalk "They said it was the name of the guardian spirits that guarded the old village.", "", bc_self;
+		mes "[Young Man]";
+		mes "They said it was the name of the guardian spirits that guarded the old village.";
+		next;
+		npctalk "Huh? Why am I telling you this?", "", bc_self;
+		mes "[Young Man]";
+		mes "Huh? Why am I telling you this?";
+		next;
+		npctalk "I think I lost my mind because the practice didn't go well.", "", bc_self;
+		mes "[Young Man]";
+		mes "I think I lost my mind because the practice didn't go well.";
+		next;
+		npctalk "I'm still training... in vain?! You can't believe someone else's...", "", bc_self;
+		mes "[Young Man]";
+		mes "I'm still practicing.. in vain?! You can't believe someone else's...";
+		next;
+		cloakonnpcself();
+		ill_luanda = 11;
+		setquest 5847;
+		mes "Karu has disappeared. I need to tell Luanda about what happened.";
+		close;
+	}
+	end;
+}
+
+// FRIDAY
+com_d02_i,208,130,1	script	Shimmer#Lu05	1_SHADOW_NPC,7,7,{
+	specialeffect EF_M07;
+	end;
+OnTouch:
+	if (ill_luanda == 1) {	// first time (any 1_SHADOW_NPC trigger it)
+		mes "It's a bizarre shimmer that you're likely to be sucked into.";
+		next;
+		ill_luanda = 2;
+		setquest 5847;
+		mes "It seems like a phenomenon that can't be ignored. I'll have to talk to Luanda, the head of defense.";
+		close;
+	}
+	if (ill_luanda == 12) {
+		cloakoffnpcself( "Young#LuE05" );
+		end;
+	}
+	end;
+}
+
+com_d02_i,210,134,6	script(CLOAKED)	Young#LuE05	4_M_THAIONGBAK,{
+	if (ill_luanda == 12) {
+		npctalk "I think drinking water is good enough...", "", bc_self;
+		mes "[Young Man]";
+		mes "I think drinking water is good enough...";
+		next;
+		npctalk "It would be most perfect not to have to use these things...", "", bc_self;
+		mes "[Young Man]";
+		mes "It would be most perfect not to have to use these things..";
+		next;
+		npctalk "Huh?! It's you again? Don't you think we see each other quite often? The other day someone was talking...", "", bc_self;
+		mes "[Young Man]";
+		mes "Huh?! It's you again? Don't you think we see each other quite often? The other day someone was talking...";
+		next;
+		npctalk "Just disappeared... the words...", "", bc_self;
+		mes "[Young Man]";
+		mes "Just disappeared... the words...";
+		next;
+		cloakonnpcself();
+		ill_luanda = 13;
+		setquest 5847;
+		mes "The young man has disappeared again. I need to tell Mr. Luanda.";
+		close;
+	}
+	end;
+}
+
+
+// (re)MONDAY
+com_d02_i,157,28,4	script(CLOAKED)	Chief#LuE06	4_M_JPNOJI2,{
+	if (ill_luanda == 14) {
+		npctalk "Aagh!! It's an attack. Monsters are coming from all sides.", "Villager#LuE061", bc_self;
+		mes "[Chief]";
+		mes "Aagh!! It's an attack. Monsters are coming from all sides.";
+		next;
+		npctalk "Cheap... where are the twins? They should be there...", "Villager#LuE062", bc_self;
+		mes "[Chief]";
+		mes "Cheap... where are the twins? They should be there...";
+		next;
+		npctalk "Did the twins find out and leave? Be patient.. They'll be back soon..", "", bc_self;
+		mes "[Chief]";
+		mes "Did the twins find out and leave? Be patient.. They'll be back soon..";
+		next;
+		npctalk "Chief, what about the villagers captured by the monsters? They already...", "Villager#LuE063", bc_self;
+		mes "[Chief]";
+		mes "Chief, what about the villagers captured by the monsters? They already...";
+		next;
+		npctalk "Don't talk negatively. Everyone's alive. Cancer isn't alive...", "", bc_self;
+		mes "[Chief]";
+		mes "Don't talk negatively. Everyone's alive. Cancer is not alive...";
+		next;
+		npctalk "Ha.. But Chief..", "Villager#LuE063", bc_self;
+		mes "[Chief]";
+		mes "Ha.. but Chief..";
+		next;
+		npctalk "Huh.. What should I do... As Luanda advised, we have to escape to this place...", "", bc_self;
+		mes "[Chief]";
+		mes "Huh.. What should I do.. As Luanda advised, we have to escape to this place...";
+		next;
+		npctalk "Huh? You haven't seen it? Did you get caught up in your travels? Tsk tsk, you're out of luck..", "", bc_self;
+		mes "[Chief]";
+		mes "Huh? You haven't seen it? Did you get caught up in your travels? Tsk tsk, you're out of luck..";
+		next;
+		npctalk "We're in no position to take care of anyone right now, so take care of yourself..", "", bc_self;
+		mes "[Chief]";
+		mes "We're in no position to take care of anyone right now, so take care of yourself..";
+		next;
+		cloakonnpcself();
+		cloakonnpcself( "Villager#LuE061" );
+		cloakonnpcself( "Villager#LuE062" );
+		cloakonnpcself( "Villager#LuE063" );
+		ill_luanda = 15;
+		setquest 5847;
+		mes "The Chief who is worried about me has disappeared. I have to tell Mr. Luanda what I've been through.";
+		close;
+	}
+	end;
+}
+
+com_d02_i,155,29,6	duplicate(dummy_cloaked_npc)	Villager#LuE061	4_M_ALCHE_A
+com_d02_i,153,28,6	duplicate(dummy_cloaked_npc)	Villager#LuE062	4_M_03
+com_d02_i,154,26,6	duplicate(dummy_cloaked_npc)	Villager#LuE063	4_M_02
+
+
+// SATURDAY
+com_d02_i,42,215,1	script	Shimmer#Lu06	1_SHADOW_NPC,7,7,{
+	specialeffect EF_M07;
+	end;
+OnTouch:
+	if (ill_luanda == 1) {	// first time (any 1_SHADOW_NPC trigger it)
+		mes "It's a bizarre shimmer that you're likely to be sucked into.";
+		next;
+		ill_luanda = 2;
+		setquest 5847;
+		mes "It seems like a phenomenon that can't be ignored. I'll have to talk to Luanda, the head of defense.";
+		close;
+	}
+	if (ill_luanda == 16) {
+		cloakoffnpcself( "First Young#LuE07" );
+		cloakoffnpcself( "Second Young#LuE07" );
+		cloakoffnpcself( "Third Young#LuE07" );
+		end;
+	}
+	end;
+}
+
+com_d02_i,43,219,4	script(CLOAKED)	Third Young#LuE07	4_M_THAIONGBAK,{
+	if (ill_luanda == 16) {
+		npctalk "Brothers, it looks like the hunt went well this time.", "", bc_self;
+		mes "[Third Young]";
+		mes "Brothers, it looks like the hunt went well this time.";
+		next;
+		npctalk "Something was a bit sinister, but I think this time it will be quite profitable, youngest.", "First Young#LuE07", bc_self;
+		mes "[First Young]";
+		mes "Something was a bit sinister, but I think it will be quite profitable this time, youngest.";
+		next;
+		npctalk "Huh? Brother, over there.. I've seen him before.", "", bc_self;
+		mes "[Third Young]";
+		mes "Huh? Brother, over there.. I've seen him before.";
+		next;
+		npctalk "Yeah, I guess so? That's a face I can remember too.", "First Young#LuE07", bc_self;
+		mes "[First Young]";
+		mes "Yeah, I guess so? That's a face I remember too.";
+		next;
+		npctalk "I heard that the stern-faced second warned you, but what a fearless outsider you are.", "The First Young#LuE07", bc_self;
+		mes "[First Young]";
+		mes "I heard that the stern-faced second warned you, but what a fearless outsider you are.";
+		next;
+		npctalk "Brother.. I'm all the same..", "", bc_self;
+		mes "[Third Young]";
+		mes "Brother.. I'm all the same..";
+		next;
+		npctalk "Brother! It's a big deal. Ma.. The smell of blood comes from the village.", "Second Young#LuE07", bc_self;
+		mes "[Second Young]";
+		mes "Brother! It's a big deal. Ma.. The smell of blood is coming from the village.";
+		next;
+		npctalk "What? Smell of blood? Smell of blood from the village side? No way? It's not time to pay attention to strangers. Let's go quickly.", "First Young#LuE07", bc_self;
+		mes "[First Young]";
+		mes "What? Smell of blood? Smell of blood from the village side? No way? It's not time to pay attention to strangers. Let's go quickly.";
+		next;
+		cloakonnpcself( "First Young#LuE07" );
+		cloakonnpcself( "Second Young#LuE07" );
+		cloakonnpcself();
+		ill_luanda = 17;
+		setquest 5847;
+		mes "The brothers disappeared quickly. I have to tell Luanda what happened.";
+		close;
+	}
+	end;
+}
+
+com_d02_i,39,219,6	duplicate(dummy_cloaked_npc)	First Young#LuE07	4_M_THAIONGBAK
+com_d02_i,41,220,4	duplicate(dummy_cloaked_npc)	Second Young#LuE07	4_M_THAIONGBAK
+
+
+// (re)TUESDAY
+com_d02_i,116,94,6	script(CLOAKED)	Karu#LuE08	4_M_THAIONGBAK,{
+	if (ill_luanda == 18) {
+		npctalk "Ahh! Asudem, why? Why? My... how did I find you...", "", bc_self;
+		mes "[Karu]";
+		mes "Aww! Asudem, why? Why? My... how did I find you...";
+		next;
+		npctalk "Ka.. Karu..", "Asudem#LuE08", bc_self;
+		mes "[Asudem]";
+		mes "Ka.. Karu..";
+		next;
+		npctalk "Hey, hey, hey, Asudem... honey...", "", bc_self;
+		mes "[Karu]";
+		mes "Hey, hey, hey, Asudem.. honey..";
+		next;
+		npctalk "Karu, don't be too sad.. You found me like this..", "Asudem#LuE08", bc_self;
+		mes "[Asudem]";
+		mes "Karu, don't be too sad.. You found me like this..";
+		next;
+		npctalk "I... I'm... glad...", "Asudem#LuE08", bc_self;
+		mes "[Asudem]";
+		mes "I... I'm... glad...";
+		next;
+		npctalk "This.. it's not about dying.. their curse.. on you..", "", bc_self;
+		mes "[Karu]";
+		mes "This.. it's not about dying.. their curse.. on you..";
+		next;
+		npctalk "All.. you no longer..", "", bc_self;
+		mes "[Karu]";
+		mes "All.. you no longer..";
+		next;
+		npctalk "Ah.. Karu.. My husband.. Sa..", "Asudem#LuE08", bc_self;
+		mes "[Asudem]";
+		mes "Ah.. Karu.. My husband.. Sa..";
+		next;
+		specialeffect EF_MAGICROD, AREA, "Asudem#LuE08";
+		sleep2 1000;
+		specialeffect EF_MAGICROD, AREA, "Asudem#LuE08";
+		sleep2 1000;
+		specialeffect EF_MENTALBREAK, AREA, "Asudem#LuE08";
+		sleep2 1000;
+		specialeffect EF_POISONSMOKE2, AREA, "Asudem#LuE08";
+		cloakonnpcself( "Asudem#LuE08" );
+		cloakoffnpcself( "Medusa#LuE08" );
+		sleep2 1000;
+		specialeffect EF_TELEPORTATION, AREA, "Medusa#LuE08";
+		cloakonnpcself( "Medusa#LuE08" );
+		npctalk "Asudem!!!!!!!!!!!!!!!", "", bc_self;
+		mes "[karoo]";
+		mes "Asudem!!!!!!!!!!!!!!!";
+		next;
+		cloakonnpcself();
+		ill_luanda = 19;
+		setquest 5847;
+		mes "I witnessed a sad event. I must tell Luanda about my experience.";
+		close;
+	}
+	end;
+}
+
+com_d02_i,117,94,4	duplicate(dummy_cloaked_npc)	Asudem#LuE08	4_F_01
+com_d02_i,117,94,4	duplicate(dummy_cloaked_npc)	Medusa#LuE08	MEDUSA
+
+
+// SUNDAY
+com_d02_i,263,72,1	script	Shimmer#Lu07	1_SHADOW_NPC,7,7,{
+	specialeffect EF_M07;
+	end;
+OnTouch:
+	if (ill_luanda == 1) {	// first time (any 1_SHADOW_NPC trigger it)
+		mes "It's a bizarre shimmer that you're likely to be sucked into.";
+		next;
+		ill_luanda = 2;
+		setquest 5847;
+		mes "It seems like a phenomenon that can't be ignored. I'll have to talk to Luanda, the head of defense.";
+		close;
+	}
+	if (ill_luanda == 20) {
+		cloakoffnpcself( "Silhouette#LuE091" );
+		cloakoffnpcself( "Silhouette#LuE092" );
+		end;
+	}
+	end;
+}
+
+com_d02_i,268,75,4	script(CLOAKED)	Silhouette#LuE091	4_GHOST_STAND,{
+	if (ill_luanda == 20) {
+		npctalk "We must drive out all the humans and take over the land.", "", bc_self;
+		mes "[???]";
+		mes "We must drive out all the humans and take over the land.";
+		next;
+		npctalk "Hehehe Other times, I'd say it's crazy, but if we follow a strong leader...", "Silhouette#LuE092", bc_self;
+		mes "[???]";
+		mes "Hehehe Other times, I'd say it's crazy, but if we follow a strong leader...";
+		next;
+		npctalk "That's not crazy kkkk.", "", bc_self;
+		mes "[???]";
+		mes "That's not crazy kkkk.";
+		next;
+		npctalk "Once we claim the land, the legendary power will be ours too.", "Silhouette#LuE092", bc_self;
+		mes "[???]";
+		mes "Once we claim the land, the legendary power will be ours too.";
+		next;
+		npctalk "Sniff... I can smell the humans. It's not time to run into them yet. Let's go.", "", bc_self;
+		mes "[???]";
+		mes "Sniff.. I can smell the humans. It's not time to run into them yet. Let's go.";
+		next;
+		npctalk "Hehehehe I hope that day will come soon...", "Silhouette#LuE092", bc_self;
+		mes "[???]";
+		mes "Hehehe I hope that day will come soon..";
+		next;
+		cloakonnpcself();
+		cloakonnpcself( "Silhouette#LuE092" );
+		ill_luanda = 21;
+		setquest 5847;
+		mes "What about the beings I just talked to? I need to tell Luanda about my experience.";
+		close;
+	}
+	end;
+}
+
+com_d02_i,266,76,6	duplicate(dummy_cloaked_npc)	Silhouette#LuE092	4_GHOST_STAND
+
+
+// Daily quests
+com_d02_i,238,266,4	script	Request Board#Lu	4_BOARD3,{
+	if (checkweight(1201,3) == 0) {
+		mes "- You cannot proceed because you have too many items. -";
+		close;
+	}
+	if (ill_luanda == 0) {
+		mes "It's a bulletin board with things requested by the village written on it, but it doesn't seem to be the case now.";
+		close;
+	}
+
+	.@quest_menu$[0] = callsub( S_MenuGather, 5848,5849, "Evidence of eradication of Megaliths" );
+	.@quest_menu$[1] = callsub( S_MenuGather, 5850,5851, "Evidence of eradication of Wootan" );
+	.@quest_menu$[2] = callsub( S_MenuHunt, 5852,5853, "Operation to eradicate Megaliths" );
+	.@quest_menu$[3] = callsub( S_MenuHunt, 5854,5855, "Operation to eradicate Wootan" );
+
+	.@playtime_5849 = checkquest(5849,PLAYTIME);
+	.@playtime_5851 = checkquest(5851,PLAYTIME);
+	.@playtime_5853 = checkquest(5853,PLAYTIME);
+	.@playtime_5855 = checkquest(5855,PLAYTIME);
+
+	// menu to take all quests at once
+	if (.@playtime_5849 > 0 || .@playtime_5851 > 0 || .@playtime_5853 > 0 || .@playtime_5855 > 0) {	// at least one of the quests is in cooldown
+		.@quest_menu$[4] = "^777777[Waiting] Receive all quests^000000";
+		.@all_quests = 0;
+	}
+	else if (isbegin_quest(5848) > 0 || isbegin_quest(5850) > 0 || isbegin_quest(5852) > 0 || isbegin_quest(5854) > 0) {	// at least one of the quests is in progress
+		.@quest_menu$[4] = "^777777[Progress] Receive all quests^000000";
+		.@all_quests = 1;
+	}
+	else {	// can take all quests
+		.@quest_menu$[4] = "[Daily] Accept all quests";
+		.@all_quests = 2;
+	}
+
+	switch( select( .@quest_menu$[0], .@quest_menu$[1], .@quest_menu$[2], .@quest_menu$[3], .@quest_menu$[4] ) ) {
+	case 1:
+		switch( .@playtime_5849 ) {
+		case -1:
+			break;
+		case 0:
+		case 1:
+			mes "This quest can be done again tomorrow.";
+			close;
+		case 2:
+			break;
+		}
+		switch( isbegin_quest(5848) ) {
+		case 0:
+			mes "The village is having a lot of trouble with the Megaliths. I will reward you if you bring me 3 " + getitemname(25638) + " as proof of defeating the Megaliths.";
+			mes "  ";
+			mes "Chief";
+			next;
+			if (select( "Accept request", "Do not accept" ) == 2)
+				end;
+			setquest 5848;
+			open_quest_ui(5848);
+			mes "Your request has been received. Please report to ^FF0000Defense Manager Luanda^000000.";
+			close;
+		case 1:
+		case 2:
+			// note: the amount of item is not checked
+			mes "^FF0000Evidence of eradication of Megaliths^000000";
+			mes "Your request is in progress.";
+			mes "You can cancel. However, if you cancel, the progress made so far will be lost. Are you sure you want to cancel?";
+			next;
+			if (select( "Do not cancel", "Cancel" ) == 1)
+				end;
+			erasequest 5848;
+			mes "The request has been cancelled.";
+			close;
+		}
+		end;
+	case 2:
+		switch( .@playtime_5851 ) {
+		case -1:
+			break;
+		case 0:
+		case 1:
+			mes "This quest can be done again tomorrow.";
+			close;
+		case 2:
+			break;
+		}
+		switch( isbegin_quest(5850) ) {
+		case 0:
+			mes "Wootan tribes are causing a lot of trouble in the village. I will reward you if you bring 3 " + getitemname(25633) + " as proof that you have defeated them.";
+			mes "  ";
+			mes "Chief";
+			next;
+			if (select( "Accept request", "Do not accept" ) == 2)
+				end;
+			setquest 5850;
+			open_quest_ui(5850);
+			mes "Your request has been received. Please report to ^FF0000Defense Manager Luanda^000000.";
+			close;
+		case 1:
+		case 2:
+			// note: the amount of item is not checked
+			mes "^FF0000Evidence of extermination of Wootan^000000";
+			mes "Your request is in progress.";
+			mes "You can cancel. However, if you cancel, the progress made so far will be lost. Are you sure you want to cancel?";
+			next;
+			if (select( "Do not cancel", "Cancel" ) == 1)
+				end;
+			erasequest 5850;
+			mes "The request has been cancelled.";
+			close;
+		}
+		end;
+	case 3:
+		switch( .@playtime_5853 ) {
+		case -1:
+			break;
+		case 0:
+		case 1:
+			mes "This quest can be done again tomorrow.";
+			close;
+		case 2:
+			break;
+		}
+		switch( checkquest(5852,HUNTING) ) {
+		case -1:
+			mes "We've planned to subdue the megaliths. Anyone who can catch 5 " + getmonsterinfo("ILL_TRI_JOINT",MOB_NAME) + ", " + getmonsterinfo("ILL_STALACTIC_GOLEM",MOB_NAME) + ", and " + getmonsterinfo("ILL_MEGALITH",MOB_NAME) + ", please apply.";
+			mes "  ";
+			mes "Chief";
+			next;
+			if (select( "Accept request", "Do not accept" ) == 2)
+				end;
+			setquest 5852;
+			open_quest_ui(5852);
+			mes "Your request has been received. Please report to ^FF0000Defense Manager Luanda^000000.";
+			close;
+		case 0:
+		case 1:
+			mes "^FF0000 Megalith extermination^000000";
+			mes "Your request is in progress.";
+			mes "You can cancel. However, if you cancel, the progress made so far will be lost. Are you sure you want to cancel?";
+			next;
+			if (select( "Do not cancel", "Cancel" ) == 1)
+				end;
+			erasequest 5852;
+			mes "The request has been cancelled.";
+			close;
+		case 2:
+			mes "You can receive the reward for this quest from Defense Manager Luanda.";
+			close;
+		}
+		end;
+	case 4:
+		switch( .@playtime_5855 ) {
+		case -1:
+			break;
+		case 0:
+		case 1:
+			mes "This quest can be done again tomorrow.";
+			close;
+		case 2:
+			break;
+		}
+		switch( checkquest(5854,HUNTING) ) {
+		case -1:
+			mes "We have planned to subdue the Wutan tribe. Anyone who can catch 5 " + getmonsterinfo("ILL_STONE_SHOOTER",MOB_NAME) + ", " + getmonsterinfo("ILL_WOOTAN_SHOOTER",MOB_NAME) + ", and " + getmonsterinfo("ILL_WOOTAN_FIGHTER",MOB_NAME) + ", please apply.";
+			mes "  ";
+			mes "Chief";
+			next;
+			if (select( "Accept request", "Do not accept" ) == 2)
+				end;
+			setquest 5854;
+			open_quest_ui(5854);
+			mes "Your request has been received. Please report to ^FF0000Defense Manager Luanda^000000.";
+			close;
+		case 0:
+		case 1:
+			mes "^FF0000Evidence of eradication of megaliths^000000";
+			mes "Your request is in progress.";
+			mes "You can cancel. However, if you cancel, the progress made so far will be lost. Are you sure you want to cancel?";
+			next;
+			if (select( "Do not cancel", "Cancel" ) == 1)
+				end;
+			erasequest 5854;
+			mes "The request has been cancelled.";
+			close;
+		case 2:
+			mes "You can receive the reward for this quest from Defense Manager Luanda.";
+			close;
+		}
+		end;
+	case 5:
+		switch( .@all_quests ) {
+		case 0:	// at least one of the quests is in cooldown
+			mes "There is a quest whose cooldown has not passed.";
+			close;
+		case 1:	// at least one of the quests is in progress
+			mes "Some quests are in progress.";
+			close;
+		case 2:	// can take all quests
+			mes "Are you sure you want to receive all quests on the Quest Board?";
+			next;
+			if (select( "Accept", "Do not accept" ) == 2)
+				end;
+			setquest 5848;
+			setquest 5850;
+			setquest 5852;
+			setquest 5854;
+			mes "All quests on the quest board have been received.";
+			close;
+		}
+		end;
+	}
+	end;
+
+S_MenuGather:
+	.@string$ = getarg(2);
+
+	switch( checkquest(getarg(1),PLAYTIME) ) {
+	case -1:
+		switch( isbegin_quest(getarg(0)) ) {
+		case 0:
+			.@menu$ = "[Daily] " + .@string$;
+			break;
+		case 1:
+		case 2:
+			// note: the amount of item is not checked
+			.@menu$ = "^777777[Progress] " + .@string$ + "^000000";
+			break;
+		}
+		break;
+	case 0:
+	case 1:
+		.@menu$ = "^777777[Waiting]" + .@string$ + "^000000";
+		break;
+	case 2:
+		erasequest getarg(1);
+		.@menu$ = "[Daily]" + .@string$;
+		break;
+	}
+	return .@menu$;
+
+S_MenuHunt:
+	.@string$ = getarg(2);
+
+	switch( checkquest(getarg(1),PLAYTIME) ) {
+	case -1:
+		switch( checkquest(getarg(0),HUNTING) ) {
+		case -1:
+			.@menu$ = "[Daily] " + .@string$;
+			break;
+		case 0:
+		case 1:
+			.@menu$ = "^777777[Progress] " + .@string$ + "^000000";
+			break;
+		case 2:
+			.@menu$ = "^777777[Reward] " + .@string$ + "^000000";
+			break;
+		}
+		break;
+	case 0:
+	case 1:
+		.@menu$ = "^777777[Waiting] " + .@string$ + "^000000";
+		break;
+	case 2:
+		erasequest getarg(1);
+		.@menu$ = "[Daily] " + .@string$;
+		break;
+	}
+	return .@menu$;
+}

+ 1 - 0
src/map/script.cpp

@@ -20734,6 +20734,7 @@ BUILDIN_FUNC(erasequest)
 		script_reportsrc(st);
 		script_reportfunc(st);
 	}
+	pc_show_questinfo(sd); 
 
 	return SCRIPT_CMD_SUCCESS;
 }