Merge branch 'master' into script/episode19
This commit is contained in:
commit
f73a858d6c
@ -17,10 +17,18 @@
|
|||||||
// 0x10: They display luk/3+1 instead of their actual critical in the
|
// 0x10: They display luk/3+1 instead of their actual critical in the
|
||||||
// stat window (by default they don't crit)
|
// stat window (by default they don't crit)
|
||||||
// 0x20: Their Min-Matk is always the same as their max
|
// 0x20: Their Min-Matk is always the same as their max
|
||||||
// 0x40: Skill re-use delay is reset when they are vaporized.
|
|
||||||
// 0x80: Skill re-use delay is reset when they are warped (by skill or item) with player.
|
|
||||||
hom_setting: 0x3D
|
hom_setting: 0x3D
|
||||||
|
|
||||||
|
// Should the cooldown or aftercast delay of homunculi skills be reset when
|
||||||
|
// the homunculus is vaporized?
|
||||||
|
// Default on official servers: yes for Pre-renewal, no for Renewal
|
||||||
|
//hom_delay_reset_vaporize: no
|
||||||
|
|
||||||
|
// Should the cooldown or aftercast delay of homunculi skills be reset when
|
||||||
|
// warping or changing maps?
|
||||||
|
// Default on official servers: yes for Pre-renewal, no for Renewal
|
||||||
|
//hom_delay_reset_warp: no
|
||||||
|
|
||||||
// The rate a homunculus will get friendly by feeding it. (Note 2)
|
// The rate a homunculus will get friendly by feeding it. (Note 2)
|
||||||
homunculus_friendly_rate: 100
|
homunculus_friendly_rate: 100
|
||||||
|
|
||||||
|
|||||||
@ -2613,7 +2613,7 @@ Body:
|
|||||||
Flags:
|
Flags:
|
||||||
BuyingStore: true
|
BuyingStore: true
|
||||||
Script: |
|
Script: |
|
||||||
sc_start SC_SlowDown,5000,0;
|
sc_start SC_SLOWDOWN,5000,100;
|
||||||
- Id: 12018
|
- Id: 12018
|
||||||
AegisName: Fire_Cracker
|
AegisName: Fire_Cracker
|
||||||
Name: Firecracker
|
Name: Firecracker
|
||||||
|
|||||||
@ -3660,17 +3660,27 @@ Body:
|
|||||||
Reproduce: true
|
Reproduce: true
|
||||||
CastCancel: true
|
CastCancel: true
|
||||||
CastTime:
|
CastTime:
|
||||||
|
- Level: 1
|
||||||
|
Time: 700
|
||||||
|
- Level: 2
|
||||||
|
Time: 1400
|
||||||
|
- Level: 3
|
||||||
|
Time: 2100
|
||||||
|
- Level: 4
|
||||||
|
Time: 2800
|
||||||
|
- Level: 5
|
||||||
|
Time: 3500
|
||||||
|
AfterCastActDelay:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 1000
|
Time: 1000
|
||||||
- Level: 2
|
- Level: 2
|
||||||
Time: 2000
|
Time: 1200
|
||||||
- Level: 3
|
- Level: 3
|
||||||
Time: 3000
|
Time: 1400
|
||||||
- Level: 4
|
- Level: 4
|
||||||
Time: 4000
|
Time: 1600
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Time: 5000
|
Time: 1800
|
||||||
AfterCastActDelay: 700
|
|
||||||
Requires:
|
Requires:
|
||||||
SpCost:
|
SpCost:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
@ -3722,7 +3732,7 @@ Body:
|
|||||||
Time: 4000
|
Time: 4000
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Time: 5000
|
Time: 5000
|
||||||
AfterCastActDelay: 700
|
AfterCastActDelay: 1000
|
||||||
Duration1: 100
|
Duration1: 100
|
||||||
Requires:
|
Requires:
|
||||||
SpCost:
|
SpCost:
|
||||||
@ -30726,10 +30736,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Range: 9
|
|
||||||
Hit: Single
|
|
||||||
HitCount: 1
|
|
||||||
AfterCastActDelay: 2000
|
AfterCastActDelay: 2000
|
||||||
|
AfterCastWalkDelay: 1000
|
||||||
Requires:
|
Requires:
|
||||||
SpCost:
|
SpCost:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
@ -30752,11 +30760,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Splash: true
|
|
||||||
Hit: Single
|
|
||||||
HitCount: 1
|
|
||||||
SplashArea: -1
|
|
||||||
AfterCastActDelay: 35000
|
AfterCastActDelay: 35000
|
||||||
|
AfterCastWalkDelay: 1000
|
||||||
Duration1:
|
Duration1:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 40000
|
Time: 40000
|
||||||
@ -30785,7 +30790,6 @@ Body:
|
|||||||
Name: HLIF_BRAIN
|
Name: HLIF_BRAIN
|
||||||
Description: Brain Surgery
|
Description: Brain Surgery
|
||||||
MaxLevel: 5
|
MaxLevel: 5
|
||||||
SplashArea: 1
|
|
||||||
- Id: 8004
|
- Id: 8004
|
||||||
Name: HLIF_CHANGE
|
Name: HLIF_CHANGE
|
||||||
Description: Change
|
Description: Change
|
||||||
@ -30793,7 +30797,14 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
AfterCastActDelay:
|
||||||
|
- Level: 1
|
||||||
|
Time: 600000
|
||||||
|
- Level: 2
|
||||||
|
Time: 900000
|
||||||
|
- Level: 3
|
||||||
|
Time: 1200000
|
||||||
|
AfterCastWalkDelay: 1000
|
||||||
Duration1:
|
Duration1:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 60000
|
Time: 60000
|
||||||
@ -30801,13 +30812,6 @@ Body:
|
|||||||
Time: 180000
|
Time: 180000
|
||||||
- Level: 3
|
- Level: 3
|
||||||
Time: 300000
|
Time: 300000
|
||||||
Duration2:
|
|
||||||
- Level: 1
|
|
||||||
Time: 600000
|
|
||||||
- Level: 2
|
|
||||||
Time: 900000
|
|
||||||
- Level: 3
|
|
||||||
Time: 1200000
|
|
||||||
Requires:
|
Requires:
|
||||||
SpCost: 100
|
SpCost: 100
|
||||||
Status: Change
|
Status: Change
|
||||||
@ -30819,7 +30823,8 @@ Body:
|
|||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
Duration2: 1000
|
AfterCastActDelay: 1000
|
||||||
|
AfterCastWalkDelay: 1000
|
||||||
Requires:
|
Requires:
|
||||||
SpCost: 10
|
SpCost: 10
|
||||||
- Id: 8006
|
- Id: 8006
|
||||||
@ -30831,6 +30836,7 @@ Body:
|
|||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
AfterCastActDelay: 30000
|
AfterCastActDelay: 30000
|
||||||
|
AfterCastWalkDelay: 1000
|
||||||
Duration1:
|
Duration1:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 40000
|
Time: 40000
|
||||||
@ -30869,6 +30875,14 @@ Body:
|
|||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
|
AfterCastActDelay:
|
||||||
|
- Level: 1
|
||||||
|
Time: 300000
|
||||||
|
- Level: 2
|
||||||
|
Time: 600000
|
||||||
|
- Level: 3
|
||||||
|
Time: 900000
|
||||||
|
AfterCastWalkDelay: 1000
|
||||||
Duration1:
|
Duration1:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 60000
|
Time: 60000
|
||||||
@ -30876,13 +30890,6 @@ Body:
|
|||||||
Time: 180000
|
Time: 180000
|
||||||
- Level: 3
|
- Level: 3
|
||||||
Time: 300000
|
Time: 300000
|
||||||
Duration2:
|
|
||||||
- Level: 1
|
|
||||||
Time: 300000
|
|
||||||
- Level: 2
|
|
||||||
Time: 600000
|
|
||||||
- Level: 3
|
|
||||||
Time: 900000
|
|
||||||
Requires:
|
Requires:
|
||||||
SpCost: 120
|
SpCost: 120
|
||||||
Status: Bloodlust
|
Status: Bloodlust
|
||||||
@ -30905,7 +30912,6 @@ Body:
|
|||||||
Count: -2
|
Count: -2
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Count: -3
|
Count: -3
|
||||||
AfterCastWalkDelay: 2000
|
|
||||||
Requires:
|
Requires:
|
||||||
SpCost:
|
SpCost:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
@ -30926,6 +30932,18 @@ Body:
|
|||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
|
AfterCastActDelay:
|
||||||
|
- Level: 1
|
||||||
|
Time: 60000
|
||||||
|
- Level: 2
|
||||||
|
Time: 70000
|
||||||
|
- Level: 3
|
||||||
|
Time: 80000
|
||||||
|
- Level: 4
|
||||||
|
Time: 90000
|
||||||
|
- Level: 5
|
||||||
|
Time: 120000
|
||||||
|
AfterCastWalkDelay: 1000
|
||||||
Duration1:
|
Duration1:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 60000
|
Time: 60000
|
||||||
@ -30937,17 +30955,6 @@ Body:
|
|||||||
Time: 45000
|
Time: 45000
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Time: 40000
|
Time: 40000
|
||||||
Duration2:
|
|
||||||
- Level: 1
|
|
||||||
Time: 60000
|
|
||||||
- Level: 2
|
|
||||||
Time: 70000
|
|
||||||
- Level: 3
|
|
||||||
Time: 80000
|
|
||||||
- Level: 4
|
|
||||||
Time: 90000
|
|
||||||
- Level: 5
|
|
||||||
Time: 120000
|
|
||||||
Requires:
|
Requires:
|
||||||
SpCost:
|
SpCost:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
@ -30971,6 +30978,18 @@ Body:
|
|||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
CastCancel: true
|
CastCancel: true
|
||||||
|
AfterCastActDelay:
|
||||||
|
- Level: 1
|
||||||
|
Time: 60000
|
||||||
|
- Level: 2
|
||||||
|
Time: 70000
|
||||||
|
- Level: 3
|
||||||
|
Time: 80000
|
||||||
|
- Level: 4
|
||||||
|
Time: 90000
|
||||||
|
- Level: 5
|
||||||
|
Time: 120000
|
||||||
|
AfterCastWalkDelay: 1000
|
||||||
Duration1:
|
Duration1:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 60000
|
Time: 60000
|
||||||
@ -30982,17 +31001,6 @@ Body:
|
|||||||
Time: 45000
|
Time: 45000
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Time: 40000
|
Time: 40000
|
||||||
Duration2:
|
|
||||||
- Level: 1
|
|
||||||
Time: 60000
|
|
||||||
- Level: 2
|
|
||||||
Time: 70000
|
|
||||||
- Level: 3
|
|
||||||
Time: 80000
|
|
||||||
- Level: 4
|
|
||||||
Time: 90000
|
|
||||||
- Level: 5
|
|
||||||
Time: 120000
|
|
||||||
Requires:
|
Requires:
|
||||||
SpCost:
|
SpCost:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
@ -31015,7 +31023,6 @@ Body:
|
|||||||
Range: 15
|
Range: 15
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
AfterCastActDelay: 1000
|
|
||||||
Requires:
|
Requires:
|
||||||
SpCost: 1
|
SpCost: 1
|
||||||
- Id: 8013
|
- Id: 8013
|
||||||
@ -31037,17 +31044,6 @@ Body:
|
|||||||
Count: 4
|
Count: 4
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Count: 5
|
Count: 5
|
||||||
AfterCastActDelay:
|
|
||||||
- Level: 1
|
|
||||||
Time: 2000
|
|
||||||
- Level: 2
|
|
||||||
Time: 2200
|
|
||||||
- Level: 3
|
|
||||||
Time: 2400
|
|
||||||
- Level: 4
|
|
||||||
Time: 2600
|
|
||||||
- Level: 5
|
|
||||||
Time: 2800
|
|
||||||
Requires:
|
Requires:
|
||||||
SpCost:
|
SpCost:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
@ -31068,8 +31064,7 @@ Body:
|
|||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
AfterCastActDelay: 3000
|
AfterCastWalkDelay: 1500
|
||||||
AfterCastWalkDelay: 3000
|
|
||||||
Requires:
|
Requires:
|
||||||
SpCost: 40
|
SpCost: 40
|
||||||
- Id: 8015
|
- Id: 8015
|
||||||
@ -31093,7 +31088,6 @@ Body:
|
|||||||
HitCount: 1
|
HitCount: 1
|
||||||
Element: Weapon
|
Element: Weapon
|
||||||
SplashArea: 4
|
SplashArea: 4
|
||||||
AfterCastWalkDelay: 1000
|
|
||||||
Requires:
|
Requires:
|
||||||
SpCost: 1
|
SpCost: 1
|
||||||
- Id: 8018
|
- Id: 8018
|
||||||
|
|||||||
@ -2478,13 +2478,17 @@ Body:
|
|||||||
DurationLookup: HLIF_AVOID
|
DurationLookup: HLIF_AVOID
|
||||||
CalcFlags:
|
CalcFlags:
|
||||||
Speed: true
|
Speed: true
|
||||||
|
Flags:
|
||||||
|
NoSave: true
|
||||||
|
RemoveFromHomOnWarp: true
|
||||||
- Status: Change
|
- Status: Change
|
||||||
DurationLookup: HLIF_CHANGE
|
DurationLookup: HLIF_CHANGE
|
||||||
CalcFlags:
|
CalcFlags:
|
||||||
Vit: true
|
Vit: true
|
||||||
Int: true
|
Int: true
|
||||||
Flags:
|
Flags:
|
||||||
RemoveOnChangeMap: true
|
NoSave: true
|
||||||
|
RemoveFromHomOnWarp: true
|
||||||
Fail:
|
Fail:
|
||||||
Change: true
|
Change: true
|
||||||
- Status: Bloodlust
|
- Status: Bloodlust
|
||||||
|
|||||||
@ -501,19 +501,19 @@ Body:
|
|||||||
7@thts: true
|
7@thts: true
|
||||||
8@thts: true
|
8@thts: true
|
||||||
- Id: 67
|
- Id: 67
|
||||||
Name: The Maze of Oz
|
Name: Oz Labyrinth
|
||||||
Enter:
|
Enter:
|
||||||
Map: 1@oz
|
Map: 1@oz
|
||||||
X: 284
|
X: 284
|
||||||
Y: 167
|
Y: 167
|
||||||
- Id: 68
|
- Id: 68
|
||||||
Name: Thor Gunsu Base
|
Name: Thor Military Base
|
||||||
Enter:
|
Enter:
|
||||||
Map: 1@tcamp
|
Map: 1@tcamp
|
||||||
X: 103
|
X: 103
|
||||||
Y: 237
|
Y: 237
|
||||||
- Id: 69
|
- Id: 69
|
||||||
Name: A Gathering Place of Wolves
|
Name: Wolves Gathering Place
|
||||||
Enter:
|
Enter:
|
||||||
Map: 1@nyr
|
Map: 1@nyr
|
||||||
X: 194
|
X: 194
|
||||||
@ -529,7 +529,7 @@ Body:
|
|||||||
AdditionalMaps:
|
AdditionalMaps:
|
||||||
2@nyr: true
|
2@nyr: true
|
||||||
- Id: 71
|
- Id: 71
|
||||||
Name: Villa of High Priest
|
Name: High Priest's Villa
|
||||||
Enter:
|
Enter:
|
||||||
Map: 1@adv
|
Map: 1@adv
|
||||||
X: 123
|
X: 123
|
||||||
|
|||||||
@ -187652,7 +187652,7 @@ Body:
|
|||||||
bonus2 bSkillAtk,"GC_CROSSIMPACT",20*(.@r/3);
|
bonus2 bSkillAtk,"GC_CROSSIMPACT",20*(.@r/3);
|
||||||
bonus2 bSkillAtk,"GC_ROLLINGCUTTER",20*(.@r/3);
|
bonus2 bSkillAtk,"GC_ROLLINGCUTTER",20*(.@r/3);
|
||||||
bonus2 bSkillAtk,"SC_TRIANGLESHOT",20*(.@r/3);
|
bonus2 bSkillAtk,"SC_TRIANGLESHOT",20*(.@r/3);
|
||||||
bonus2 bSkillAtk,"SC_STARTMARK",20*(.@r/3);
|
bonus2 bSkillAtk,"SC_FATALMENACE",20*(.@r/3);
|
||||||
if (.@r>=9) {
|
if (.@r>=9) {
|
||||||
bonus bLongAtkRate,10;
|
bonus bLongAtkRate,10;
|
||||||
bonus bShortAtkRate,10;
|
bonus bShortAtkRate,10;
|
||||||
|
|||||||
@ -86200,31 +86200,31 @@ Body:
|
|||||||
Flags:
|
Flags:
|
||||||
BuyingStore: true
|
BuyingStore: true
|
||||||
- Id: 1001072
|
- Id: 1001072
|
||||||
AegisName: aegis_1001072
|
AegisName: Evil_Black_Bid
|
||||||
Name: Evil Orb
|
Name: Evil Orb
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1480
|
Buy: 1480
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001073
|
- Id: 1001073
|
||||||
AegisName: aegis_1001073
|
AegisName: Ectoplasmic_Stone
|
||||||
Name: Ectoplasmic Stone
|
Name: Ectoplasmic Stone
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1460
|
Buy: 1460
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001074
|
- Id: 1001074
|
||||||
AegisName: aegis_1001074
|
AegisName: Heavy_Chain
|
||||||
Name: Heavy Chain
|
Name: Heavy Chain
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1480
|
Buy: 1480
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001075
|
- Id: 1001075
|
||||||
AegisName: aegis_1001075
|
AegisName: Evil_Minded_Ruby
|
||||||
Name: Evil Minded Ruby
|
Name: Evil Minded Ruby
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1500
|
Buy: 1500
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001076
|
- Id: 1001076
|
||||||
AegisName: aegis_1001076
|
AegisName: Small_Sewing_Box
|
||||||
Name: Small Sewing Kit
|
Name: Small Sewing Kit
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1640
|
Buy: 1640
|
||||||
@ -86236,37 +86236,37 @@ Body:
|
|||||||
Buy: 1600
|
Buy: 1600
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001078
|
- Id: 1001078
|
||||||
AegisName: aegis_1001078
|
AegisName: Blue_Moon_Stone
|
||||||
Name: Fragments of the Blue Moon
|
Name: Fragments of the Blue Moon
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1720
|
Buy: 1720
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001079
|
- Id: 1001079
|
||||||
AegisName: aegis_1001079
|
AegisName: Weird_Tentacle
|
||||||
Name: Monstrous Tentacles
|
Name: Monstrous Tentacles
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1520
|
Buy: 1520
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001080
|
- Id: 1001080
|
||||||
AegisName: aegis_1001080
|
AegisName: Congealed_Poison
|
||||||
Name: Congealed Poison
|
Name: Congealed Poison
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1600
|
Buy: 1600
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001081
|
- Id: 1001081
|
||||||
AegisName: aegis_1001081
|
AegisName: Slicky_Fluid
|
||||||
Name: Slimy Fluid
|
Name: Slimy Fluid
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1560
|
Buy: 1560
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001082
|
- Id: 1001082
|
||||||
AegisName: aegis_1001082
|
AegisName: Reptile_Stone
|
||||||
Name: Monster's Stone
|
Name: Monster's Stone
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1720
|
Buy: 1720
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001083
|
- Id: 1001083
|
||||||
AegisName: aegis_1001083
|
AegisName: Turn_Yellow_Leaf
|
||||||
Name: Maple Leaves
|
Name: Maple Leaves
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1640
|
Buy: 1640
|
||||||
@ -86278,13 +86278,13 @@ Body:
|
|||||||
Buy: 1480
|
Buy: 1480
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001085
|
- Id: 1001085
|
||||||
AegisName: aegis_1001085
|
AegisName: Cool_Liquid
|
||||||
Name: Cool Liquid
|
Name: Cool Liquid
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1460
|
Buy: 1460
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001086
|
- Id: 1001086
|
||||||
AegisName: aegis_1001086
|
AegisName: Green_Crystal_Fragment
|
||||||
Name: Blue Crystal Shard
|
Name: Blue Crystal Shard
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1480
|
Buy: 1480
|
||||||
@ -86296,7 +86296,7 @@ Body:
|
|||||||
Buy: 1600
|
Buy: 1600
|
||||||
Weight: 10
|
Weight: 10
|
||||||
- Id: 1001088
|
- Id: 1001088
|
||||||
AegisName: aegis_1001088
|
AegisName: Fresh_Pear
|
||||||
Name: Fresh Pear
|
Name: Fresh Pear
|
||||||
Type: Etc
|
Type: Etc
|
||||||
Buy: 1640
|
Buy: 1640
|
||||||
|
|||||||
1858
db/re/map_drops.yml
1858
db/re/map_drops.yml
File diff suppressed because it is too large
Load Diff
15801
db/re/mob_db.yml
15801
db/re/mob_db.yml
File diff suppressed because it is too large
Load Diff
@ -13606,7 +13606,7 @@
|
|||||||
20811,ILL_KRAKEN@NPC_HELLJUDGEMENT2,chase,768,2,3000,500,5000,no,target,always,0,,,,,,,
|
20811,ILL_KRAKEN@NPC_HELLJUDGEMENT2,chase,768,2,3000,500,5000,no,target,always,0,,,,,,,
|
||||||
20811,ILL_KRAKEN@NPC_HELLJUDGEMENT2,attack,768,2,3000,500,5000,no,target,always,0,,,,,,,
|
20811,ILL_KRAKEN@NPC_HELLJUDGEMENT2,attack,768,2,3000,500,5000,no,target,always,0,,,,,,,
|
||||||
20811,ILL_KRAKEN@NPC_CLOUD_KILL,attack,739,5,2000,500,16000,no,target,always,0,,,,,,,
|
20811,ILL_KRAKEN@NPC_CLOUD_KILL,attack,739,5,2000,500,16000,no,target,always,0,,,,,,,
|
||||||
20811,ILL_KRAKEN@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,target,myhpltmaxrate,10,,,,,,,
|
20811,ILL_KRAKEN@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,self,myhpltmaxrate,10,,,,,,,
|
||||||
20811,ILL_KRAKEN@NPC_PHANTOMTHRUST,chase,741,5,1000,0,5000,no,self,always,0,,,,,,,
|
20811,ILL_KRAKEN@NPC_PHANTOMTHRUST,chase,741,5,1000,0,5000,no,self,always,0,,,,,,,
|
||||||
20811,ILL_KRAKEN@NPC_CALLSLAVE,idle,352,1,5000,0,30000,yes,self,always,0,,,,,,,
|
20811,ILL_KRAKEN@NPC_CALLSLAVE,idle,352,1,5000,0,30000,yes,self,always,0,,,,,,,
|
||||||
20843,ILL_ABYSMAL_WITCH@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
|
20843,ILL_ABYSMAL_WITCH@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
|
||||||
@ -13638,7 +13638,7 @@
|
|||||||
20843,ILL_ABYSMAL_WITCH@NPC_HELLJUDGEMENT2,chase,768,2,2000,500,5000,no,target,always,0,,,,,,,
|
20843,ILL_ABYSMAL_WITCH@NPC_HELLJUDGEMENT2,chase,768,2,2000,500,5000,no,target,always,0,,,,,,,
|
||||||
20843,ILL_ABYSMAL_WITCH@NPC_HELLJUDGEMENT2,attack,768,2,2000,500,5000,no,target,always,0,,,,,,,
|
20843,ILL_ABYSMAL_WITCH@NPC_HELLJUDGEMENT2,attack,768,2,2000,500,5000,no,target,always,0,,,,,,,
|
||||||
20843,ILL_ABYSMAL_WITCH@NPC_CLOUD_KILL,attack,739,5,2000,500,16000,no,target,always,0,,,,,,,
|
20843,ILL_ABYSMAL_WITCH@NPC_CLOUD_KILL,attack,739,5,2000,500,16000,no,target,always,0,,,,,,,
|
||||||
20843,ILL_ABYSMAL_WITCH@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,target,myhpltmaxrate,10,,,,,,,
|
20843,ILL_ABYSMAL_WITCH@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,self,myhpltmaxrate,10,,,,,,,
|
||||||
20843,ILL_ABYSMAL_WITCH@NPC_CALLSLAVE,idle,352,1,5000,0,30000,yes,self,always,0,,,,,,,
|
20843,ILL_ABYSMAL_WITCH@NPC_CALLSLAVE,idle,352,1,5000,0,30000,yes,self,always,0,,,,,,,
|
||||||
|
|
||||||
// Episode 17.2 - Sage's Legacy
|
// Episode 17.2 - Sage's Legacy
|
||||||
@ -14239,7 +14239,7 @@
|
|||||||
20934,R001_BESTIA@NPC_EARTHQUAKE,attack,653,5,10000,500,20000,no,self,myhpltmaxrate,40,,,,,,,
|
20934,R001_BESTIA@NPC_EARTHQUAKE,attack,653,5,10000,500,20000,no,self,myhpltmaxrate,40,,,,,,,
|
||||||
20934,R001_BESTIA@NPC_PULSESTRIKE,attack,661,5,10000,0,15000,no,self,myhpltmaxrate,60,,,,,,,
|
20934,R001_BESTIA@NPC_PULSESTRIKE,attack,661,5,10000,0,15000,no,self,myhpltmaxrate,60,,,,,,,
|
||||||
20934,R001_BESTIA@NPC_DRAGONFEAR,attack,659,5,10000,0,10000,no,self,always,0,,,,,,,
|
20934,R001_BESTIA@NPC_DRAGONFEAR,attack,659,5,10000,0,10000,no,self,always,0,,,,,,,
|
||||||
// 20934,R001_BESTIA@NPC_DAMAGE_HEAL,attack,753,1,3000,1500,40000,no,target,myhpltmaxrate,20,,,,,,,
|
// 20934,R001_BESTIA@NPC_DAMAGE_HEAL,attack,753,1,3000,1500,40000,no,self,myhpltmaxrate,20,,,,,,,
|
||||||
|
|
||||||
// nif_dun
|
// nif_dun
|
||||||
20935,GAN_CEANN@NPC_CRITICALSLASH,attack,170,1,1000,500,5000,no,target,always,0,,,,,,,
|
20935,GAN_CEANN@NPC_CRITICALSLASH,attack,170,1,1000,500,5000,no,target,always,0,,,,,,,
|
||||||
@ -14339,7 +14339,7 @@
|
|||||||
20943,DEATH_WITCH@NPC_HELLJUDGEMENT,chase,662,2,2000,500,5000,no,self,always,0,,,,,,,
|
20943,DEATH_WITCH@NPC_HELLJUDGEMENT,chase,662,2,2000,500,5000,no,self,always,0,,,,,,,
|
||||||
20943,DEATH_WITCH@NPC_HELLJUDGEMENT,attack,662,2,2000,500,5000,no,self,always,0,,,,,,,
|
20943,DEATH_WITCH@NPC_HELLJUDGEMENT,attack,662,2,2000,500,5000,no,self,always,0,,,,,,,
|
||||||
20943,DEATH_WITCH@NPC_CLOUD_KILL,attack,739,5,2000,500,16000,no,target,always,0,,,,,,,
|
20943,DEATH_WITCH@NPC_CLOUD_KILL,attack,739,5,2000,500,16000,no,target,always,0,,,,,,,
|
||||||
// 20943,DEATH_WITCH@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,target,myhpltmaxrate,10,,,,,,,
|
// 20943,DEATH_WITCH@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,self,myhpltmaxrate,10,,,,,,,
|
||||||
20943,DEATH_WITCH@NPC_CALLSLAVE,idle,352,1,5000,0,30000,yes,self,always,0,,,,,,,
|
20943,DEATH_WITCH@NPC_CALLSLAVE,idle,352,1,5000,0,30000,yes,self,always,0,,,,,,,
|
||||||
20943,DEATH_WITCH@NPC_CALLSLAVE,attack,352,1,5000,0,30000,yes,self,always,0,,,,,,,
|
20943,DEATH_WITCH@NPC_CALLSLAVE,attack,352,1,5000,0,30000,yes,self,always,0,,,,,,,
|
||||||
|
|
||||||
@ -14570,7 +14570,7 @@
|
|||||||
21395,ILL_MAYA@NPC_CRITICALWOUND,attack,673,1,500,0,5000,yes,target,always,0,,,,,,,
|
21395,ILL_MAYA@NPC_CRITICALWOUND,attack,673,1,500,0,5000,yes,target,always,0,,,,,,,
|
||||||
21395,ILL_MAYA@NPC_IMMUNE_PROPERTY,chase,754,4,1500,1500,60000,no,self,casttargeted,0,,,,,,,
|
21395,ILL_MAYA@NPC_IMMUNE_PROPERTY,chase,754,4,1500,1500,60000,no,self,casttargeted,0,,,,,,,
|
||||||
21395,ILL_MAYA@NPC_IMMUNE_PROPERTY,attack,754,1,1500,1500,60000,no,self,longrangeattacked,0,,,,,,,
|
21395,ILL_MAYA@NPC_IMMUNE_PROPERTY,attack,754,1,1500,1500,60000,no,self,longrangeattacked,0,,,,,,,
|
||||||
21395,ILL_MAYA@NPC_DAMAGE_HEAL,attack,753,1,500,1500,120000,no,target,myhpltmaxrate,50,,,,,,32,
|
21395,ILL_MAYA@NPC_DAMAGE_HEAL,attack,753,1,500,1500,120000,no,self,myhpltmaxrate,50,,,,,,32,
|
||||||
21395,ILL_MAYA@NPC_ALL_STAT_DOWN,attack,751,5,5000,1500,45000,no,target,always,0,,,,,,18,
|
21395,ILL_MAYA@NPC_ALL_STAT_DOWN,attack,751,5,5000,1500,45000,no,target,always,0,,,,,,18,
|
||||||
|
|
||||||
// Episode 18
|
// Episode 18
|
||||||
|
|||||||
@ -1578,26 +1578,26 @@ Body:
|
|||||||
- Id: 3495
|
- Id: 3495
|
||||||
Title: Conversation with Jeojin
|
Title: Conversation with Jeojin
|
||||||
- Id: 3496
|
- Id: 3496
|
||||||
Title: Conversation with Squain
|
Title: Conversation with Skuain
|
||||||
- Id: 3497
|
- Id: 3497
|
||||||
Title: Conversation with Senado
|
Title: Conversation with Senado
|
||||||
- Id: 3498
|
- Id: 3498
|
||||||
Title: Conversation with Japer
|
Title: Conversation with Japer
|
||||||
- Id: 3499
|
- Id: 3499
|
||||||
Title: Conversation with Shirouan
|
Title: Conversation with Shiroan
|
||||||
- Id: 3500
|
- Id: 3500
|
||||||
Title: Conversation with Ishira
|
Title: Conversation with Isira
|
||||||
- Id: 3501
|
- Id: 3501
|
||||||
Title: Conversation with Gina
|
Title: Conversation with Dina
|
||||||
- Id: 3502
|
- Id: 3502
|
||||||
Title: Conversation with Hari
|
Title: Conversation with Hari
|
||||||
- Id: 3503
|
- Id: 3503
|
||||||
Title: Examine the Sky
|
Title: "[Daily] Opinion Gathering"
|
||||||
- Id: 3504
|
- Id: 3504
|
||||||
Title: Look at the Sky - Standby
|
Title: "[Cooldown] Opinion Gathering"
|
||||||
- Id: 3505
|
|
||||||
Title: Report to Junok
|
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
|
- Id: 3505
|
||||||
|
Title: Completed Opinion Gathering
|
||||||
- Id: 3507
|
- Id: 3507
|
||||||
Title: Illusion Investigation Team - Sheshin
|
Title: Illusion Investigation Team - Sheshin
|
||||||
- Id: 3508
|
- Id: 3508
|
||||||
@ -3234,26 +3234,28 @@ Body:
|
|||||||
Title: "[Standby] Subjugation-Yanggeochon"
|
Title: "[Standby] Subjugation-Yanggeochon"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 5932
|
- Id: 5932
|
||||||
Title: The Abused Child
|
Title: Abused Child
|
||||||
- Id: 5933
|
- Id: 5933
|
||||||
Title: Business Plan Presentation
|
Title: Business Plan
|
||||||
- Id: 5934
|
- Id: 5934
|
||||||
Title: Gathering Training (1)
|
Title: Foraging Practice (1)
|
||||||
- Id: 5935
|
- Id: 5935
|
||||||
Title: Gathering Training (2)
|
Title: Foraging Practice (2)
|
||||||
- Id: 5936
|
- Id: 5936
|
||||||
Title: Gathering Training (3)
|
Title: Foraging Practice (3)
|
||||||
- Id: 5937
|
- Id: 5937
|
||||||
Title: "[Standby] Flower Room's work"
|
Title: "[Cooldown] Half Flower Gathering"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 5938
|
- Id: 5938
|
||||||
Title: Gathering Half Flower
|
Title: "[Daily] Half Flower Gathering"
|
||||||
- Id: 5939
|
- Id: 5939
|
||||||
Title: Gathering Half Flower
|
Title: "[Daily] Half Flower Gathering"
|
||||||
- Id: 5940
|
- Id: 5940
|
||||||
Title: Gathering Half Flower
|
Title: "[Daily] Half Flower Gathering"
|
||||||
- Id: 5941
|
- Id: 5941
|
||||||
Title: Gathering Half Flower
|
Title: "[Daily] Half Flower Gathering"
|
||||||
|
- Id: 5942
|
||||||
|
Title: Flower Room Opening Ceremony
|
||||||
- Id: 5972
|
- Id: 5972
|
||||||
Title: Eagle Patrol
|
Title: Eagle Patrol
|
||||||
- Id: 5973
|
- Id: 5973
|
||||||
@ -6368,55 +6370,55 @@ Body:
|
|||||||
DROSERA: true
|
DROSERA: true
|
||||||
MUSCIPULAR: true
|
MUSCIPULAR: true
|
||||||
- Id: 8681
|
- Id: 8681
|
||||||
Title: To Rachel (1)
|
Title: Towards Rachel (1)
|
||||||
- Id: 8682
|
- Id: 8682
|
||||||
Title: To Rachel (2)
|
Title: Towards Rachel (2)
|
||||||
- Id: 8683
|
- Id: 8683
|
||||||
Title: Please stop fighting
|
Title: Heated Argument
|
||||||
- Id: 8684
|
- Id: 8684
|
||||||
Title: It's over
|
Title: State of Conflict
|
||||||
- Id: 8685
|
- Id: 8685
|
||||||
Title: A suspicious movement detected in the temple
|
Title: Suspicious Movement
|
||||||
- Id: 8686
|
- Id: 8686
|
||||||
Title: The Intruder of the Temple
|
Title: Intruder of the Temple
|
||||||
- Id: 8687
|
- Id: 8687
|
||||||
Title: Did you break it?
|
Title: Staged Plot
|
||||||
- Id: 8688
|
- Id: 8688
|
||||||
Title: Thanks for today's daily food
|
Title: Today's Daily Bread
|
||||||
- Id: 8689
|
- Id: 8689
|
||||||
Title: Today's Daily food - Standby
|
Title: "[Cooldown] Today's Daily Bread"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 8690
|
- Id: 8690
|
||||||
Title: Thanks for today's daily food
|
Title: "[Daily] Today's Daily Bread"
|
||||||
- Id: 8691
|
- Id: 8691
|
||||||
Title: Sacred Relics for Essence (1)
|
Title: Water Purification (1)
|
||||||
- Id: 8692
|
- Id: 8692
|
||||||
Title: Sacred Relics for Essence (2)
|
Title: Water Purification (2)
|
||||||
- Id: 8693
|
- Id: 8693
|
||||||
Title: Sacred Relics for Essence (3)
|
Title: Water Purification (3)
|
||||||
- Id: 8694
|
- Id: 8694
|
||||||
Title: Clean Water Procurement - Standby
|
Title: "[Cooldown] Water Purification"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 8695
|
- Id: 8695
|
||||||
Title: Procurement of clean water (1)
|
Title: "[Daily] Water Purification (1)"
|
||||||
- Id: 8696
|
- Id: 8696
|
||||||
Title: Procurement of clean water (2)
|
Title: "[Daily] Water Purification (2)"
|
||||||
- Id: 8697
|
- Id: 8697
|
||||||
Title: Procurement of clean water (3)
|
Title: "[Daily] Water Purification (3)"
|
||||||
- Id: 8698
|
- Id: 8698
|
||||||
Title: Late migration
|
Title: Horim's Bizarre Adventure (1)
|
||||||
- Id: 8699
|
- Id: 8699
|
||||||
Title: First Step Out of the City
|
Title: Horim's Bizarre Adventure (2)
|
||||||
- Id: 8700
|
- Id: 8700
|
||||||
Title: I couldn't even come halfway
|
Title: Horim's Bizarre Adventure (3)
|
||||||
- Id: 8701
|
- Id: 8701
|
||||||
Title: Scenery I've Seen for the First Time
|
Title: Horim's Bizarre Adventure (4)
|
||||||
- Id: 8702
|
- Id: 8702
|
||||||
Title: Smell of Volcanic Ash
|
Title: Horim's Bizarre Adventure (5)
|
||||||
- Id: 8703
|
- Id: 8703
|
||||||
Title: The easy way to go
|
Title: Horim's Bizarre Adventure (6)
|
||||||
- Id: 8718
|
- Id: 8718
|
||||||
Title: My friend's regards
|
Title: Greetings from a Friend
|
||||||
- Id: 8719
|
- Id: 8719
|
||||||
Title: A new area somewhere in the anthill
|
Title: A new area somewhere in the anthill
|
||||||
- Id: 8720
|
- Id: 8720
|
||||||
@ -8306,104 +8308,104 @@ Body:
|
|||||||
Title: Squirrels are rats, too? Standby
|
Title: Squirrels are rats, too? Standby
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 11696
|
- Id: 11696
|
||||||
Title: Niren's Request
|
Title: Niren's Request (1)
|
||||||
- Id: 11697
|
- Id: 11697
|
||||||
Title: Niren's Request
|
Title: Niren's Request (2)
|
||||||
- Id: 11698
|
- Id: 11698
|
||||||
Title: Niren's Request
|
Title: Niren's Request (3)
|
||||||
- Id: 11699
|
- Id: 11699
|
||||||
Title: Niren's Request
|
Title: Niren's Request (4)
|
||||||
- Id: 11700
|
- Id: 11700
|
||||||
Title: Niren's Request
|
Title: Niren's Request (5)
|
||||||
- Id: 11701
|
- Id: 11701
|
||||||
Title: Niren's Request
|
Title: Niren's Request (6)
|
||||||
- Id: 11702
|
- Id: 11702
|
||||||
Title: Niren's Request
|
Title: Niren's Request (7)
|
||||||
- Id: 11703
|
- Id: 11703
|
||||||
Title: Niren's Request
|
Title: Niren's Request (8)
|
||||||
- Id: 11704
|
- Id: 11704
|
||||||
Title: Niren's Request
|
Title: Gray Children (1)
|
||||||
- Id: 11705
|
- Id: 11705
|
||||||
Title: Children of Grey
|
Title: Gray Children (2)
|
||||||
- Id: 11706
|
- Id: 11706
|
||||||
Title: Children of Grey
|
Title: Gray Children (3)
|
||||||
- Id: 11707
|
- Id: 11707
|
||||||
Title: Children of Grey
|
Title: Gray Children (4)
|
||||||
- Id: 11708
|
- Id: 11708
|
||||||
Title: Children of Grey
|
Title: Gray Children (5)
|
||||||
- Id: 11709
|
- Id: 11709
|
||||||
Title: Children of Grey
|
Title: Gray Children (6)
|
||||||
- Id: 11710
|
- Id: 11710
|
||||||
Title: Children of Grey
|
Title: Gray Children (7)
|
||||||
- Id: 11711
|
- Id: 11711
|
||||||
Title: Children of Grey
|
Title: Gray Children (8)
|
||||||
- Id: 11712
|
- Id: 11712
|
||||||
Title: Children of Grey
|
Title: Gray Children (9)
|
||||||
- Id: 11713
|
- Id: 11713
|
||||||
Title: Children of Grey
|
Title: Gray Children (10)
|
||||||
- Id: 11714
|
- Id: 11714
|
||||||
Title: Children of Grey
|
Title: Gray Children (11)
|
||||||
- Id: 11715
|
- Id: 11715
|
||||||
Title: Children of Grey
|
Title: Gray Children (12)
|
||||||
- Id: 11716
|
- Id: 11716
|
||||||
Title: Children of Grey
|
Title: Gray Children (13)
|
||||||
- Id: 11717
|
- Id: 11717
|
||||||
Title: Children of Grey
|
Title: Gray Children (14)
|
||||||
- Id: 11718
|
- Id: 11718
|
||||||
Title: Children of Grey
|
Title: Gray Children (15)
|
||||||
- Id: 11719
|
- Id: 11719
|
||||||
Title: Children of Grey
|
Title: Gray Children (16)
|
||||||
- Id: 11720
|
- Id: 11720
|
||||||
Title: Children of Grey
|
Title: Gray Children (17)
|
||||||
- Id: 11721
|
- Id: 11721
|
||||||
Title: Children of Grey
|
Title: Gray Children (18)
|
||||||
- Id: 11722
|
- Id: 11722
|
||||||
Title: Children of Grey
|
Title: Gray Children (19)
|
||||||
- Id: 11723
|
- Id: 11723
|
||||||
Title: Children of Grey
|
Title: Gray Children (20)
|
||||||
- Id: 11724
|
- Id: 11724
|
||||||
Title: Children of Grey
|
Title: Gray Children (21)
|
||||||
- Id: 11725
|
- Id: 11725
|
||||||
Title: Investigation of Oz Labyrinth
|
Title: The Labyrinth and the Merchant (1)
|
||||||
- Id: 11726
|
- Id: 11726
|
||||||
Title: Investigation of Oz Labyrinth
|
Title: The Labyrinth and the Merchant (2)
|
||||||
- Id: 11727
|
- Id: 11727
|
||||||
Title: Investigation of Oz Labyrinth
|
Title: The Labyrinth and the Merchant (3)
|
||||||
- Id: 11728
|
- Id: 11728
|
||||||
Title: Investigation of Oz Labyrinth
|
Title: The Labyrinth and the Merchant (4)
|
||||||
- Id: 11729
|
- Id: 11729
|
||||||
Title: Investigation of Oz Labyrinth
|
Title: The Labyrinth and the Merchant (5)
|
||||||
- Id: 11730
|
- Id: 11730
|
||||||
Title: Investigation of Oz Labyrinth
|
Title: The Labyrinth and the Merchant (6)
|
||||||
Targets:
|
Targets:
|
||||||
- Id: 1
|
- Id: 1
|
||||||
Location: oz_dun01
|
Location: oz_dun01
|
||||||
Count: 10
|
Count: 10
|
||||||
- Id: 11731
|
- Id: 11731
|
||||||
Title: Investigation of Oz Labyrinth
|
Title: The Labyrinth and the Merchant (7)
|
||||||
- Id: 11732
|
- Id: 11732
|
||||||
Title: Investigation of Oz Labyrinth
|
Title: The Labyrinth and the Merchant (8)
|
||||||
- Id: 11733
|
- Id: 11733
|
||||||
Title: Investigation of Oz Labyrinth
|
Title: The Labyrinth and the Merchant (9)
|
||||||
- Id: 11734
|
- Id: 11734
|
||||||
Title: Investigation of Oz Labyrinth
|
Title: The Labyrinth and the Merchant (10)
|
||||||
- Id: 11735
|
- Id: 11735
|
||||||
Title: Investigation of Oz Labyrinth
|
Title: The Labyrinth and the Merchant (11)
|
||||||
- Id: 11736
|
- Id: 11736
|
||||||
Title: Maze of Oz 1st Floor (170lv)
|
Title: Oz Labyrinth 1F (170lv)
|
||||||
Targets:
|
Targets:
|
||||||
- Mob: EP18_ASH_TOAD
|
- Mob: EP18_ASH_TOAD
|
||||||
Count: 20
|
Count: 20
|
||||||
- Id: 11737
|
- Id: 11737
|
||||||
Title: Maze of Oz Level 1 - Standby
|
Title: "[Cooldown] Oz Labyrinth 1F"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 11738
|
- Id: 11738
|
||||||
Title: Maze of Oz Level 2 (200lv)
|
Title: Oz Labyrinth 2F (200lv)
|
||||||
Targets:
|
Targets:
|
||||||
- Mob: EP18_HOT_MOLAR
|
- Mob: EP18_HOT_MOLAR
|
||||||
Count: 20
|
Count: 20
|
||||||
- Id: 11739
|
- Id: 11739
|
||||||
Title: Maze of Oz Level 2 (200lv)
|
Title: "[Cooldown] Oz Labyrinth 2F"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 11794
|
- Id: 11794
|
||||||
Title: The Lady of Purification
|
Title: The Lady of Purification
|
||||||
@ -9795,30 +9797,30 @@ Body:
|
|||||||
Title: Let's try again to seal the crack
|
Title: Let's try again to seal the crack
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 12520
|
- Id: 12520
|
||||||
Title: Villa of Deception
|
Title: "[Normal] Villa of Deception"
|
||||||
- Id: 12521
|
- Id: 12521
|
||||||
Title: Villa of Deception Hard
|
Title: "[Hard] Villa of Deception"
|
||||||
- Id: 12522
|
- Id: 12522
|
||||||
Title: Cooldown: Villa of Deception
|
Title: "[Cooldown] Villa of Deception"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 12531
|
- Id: 12531
|
||||||
Title: Future General Candidate
|
Title: Transporting Goods
|
||||||
- Id: 12532
|
- Id: 12532
|
||||||
Title: Trouble at the Top
|
Title: Broken Wagon
|
||||||
- Id: 12533
|
- Id: 12533
|
||||||
Title: The Hidden Helper
|
Title: Hidden Helper
|
||||||
- Id: 12534
|
- Id: 12534
|
||||||
Title: The Missing Camille
|
Title: Missing Camille
|
||||||
- Id: 12535
|
- Id: 12535
|
||||||
Title: The Governor's Decision
|
Title: Chief Decision
|
||||||
- Id: 12536
|
- Id: 12536
|
||||||
Title: The Scattered Luggage (North)
|
Title: Scattered Goods (North)
|
||||||
- Id: 12537
|
- Id: 12537
|
||||||
Title: Scattered Luggage (West)
|
Title: Scattered Goods (West)
|
||||||
- Id: 12538
|
- Id: 12538
|
||||||
Title: The Scattered Luggage (East)
|
Title: Scattered Goods (East)
|
||||||
- Id: 12539
|
- Id: 12539
|
||||||
Title: Scattered Luggage (South)
|
Title: Scattered Goods (South)
|
||||||
- Id: 12560
|
- Id: 12560
|
||||||
Title: Standby: Neutralizing Aircraft
|
Title: Standby: Neutralizing Aircraft
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
@ -11980,84 +11982,84 @@ Body:
|
|||||||
- Mob: EP18_FIREWIND_KITE
|
- Mob: EP18_FIREWIND_KITE
|
||||||
Count: 30
|
Count: 30
|
||||||
- Id: 16549
|
- Id: 16549
|
||||||
Title: I can't sleep
|
Title: "[Daily] I can't sleep"
|
||||||
Targets:
|
Targets:
|
||||||
- Mob: EP18_FIREWIND_KITE
|
- Mob: EP18_FIREWIND_KITE
|
||||||
Count: 30
|
Count: 30
|
||||||
- Id: 16550
|
- Id: 16550
|
||||||
Title: I Can't Sleep - Wait
|
Title: "[Cooldown] I can't sleep"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 16551
|
- Id: 16551
|
||||||
Title: The Story of Dinar
|
Title: Collecting Folklore (1)
|
||||||
- Id: 16552
|
- Id: 16552
|
||||||
Title: Amira's Story
|
Title: Collecting Folklore (2)
|
||||||
- Id: 16553
|
- Id: 16553
|
||||||
Title: Shanina's Grandma's Story
|
Title: Collecting Folklore (3)
|
||||||
- Id: 16554
|
- Id: 16554
|
||||||
Title: Please collect the stories
|
Title: Collecting Folklore (4)
|
||||||
- Id: 16555
|
- Id: 16555
|
||||||
Title: The Story of Dinar
|
Title: "[Daily] Dinar's Story"
|
||||||
- Id: 16556
|
- Id: 16556
|
||||||
Title: Amira's Story
|
Title: "[Daily] Amira's Story"
|
||||||
- Id: 16557
|
- Id: 16557
|
||||||
Title: Shanina's Grandma's Story
|
Title: "[Daily] Shanina's Story"
|
||||||
- Id: 16558
|
- Id: 16558
|
||||||
Title: Please collect the stories
|
Title: "[Daily] Collecting Folklore"
|
||||||
- Id: 16559
|
- Id: 16559
|
||||||
Title: Please collect the stories - Standby
|
Title: "[Cooldown] Collecting Folklore"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 16560
|
- Id: 16560
|
||||||
Title: This is not the place
|
Title: Ahab's Gossip (1)
|
||||||
- Id: 16561
|
- Id: 16561
|
||||||
Title: This is not the place
|
Title: Ahab's Gossip (2)
|
||||||
- Id: 16562
|
- Id: 16562
|
||||||
Title: This is not the place
|
Title: Ahab's Gossip (3)
|
||||||
- Id: 16563
|
- Id: 16563
|
||||||
Title: This is not the place
|
Title: Ahab's Gossip (4)
|
||||||
- Id: 16564
|
- Id: 16564
|
||||||
Title: This is not the place
|
Title: Ahab's Gossip (5)
|
||||||
- Id: 16565
|
- Id: 16565
|
||||||
Title: This is not the place
|
Title: Ahab's Gossip (6)
|
||||||
- Id: 16566
|
- Id: 16566
|
||||||
Title: This is not the place
|
Title: Ahab's Gossip (7)
|
||||||
- Id: 16567
|
- Id: 16567
|
||||||
Title: The Contest of the Grey Wolf Forest
|
Title: Gray Wolf Forest Tournament (1)
|
||||||
- Id: 16568
|
- Id: 16568
|
||||||
Title: Everyone's Opinion
|
Title: People's Opinion (1)
|
||||||
- Id: 16569
|
- Id: 16569
|
||||||
Title: Everyone's Opinion
|
Title: People's Opinion (2)
|
||||||
- Id: 16570
|
- Id: 16570
|
||||||
Title: Everyone's Opinion
|
Title: People's Opinion (3)
|
||||||
- Id: 16571
|
- Id: 16571
|
||||||
Title: Everyone's Opinion
|
Title: People's Opinion (4)
|
||||||
- Id: 16572
|
- Id: 16572
|
||||||
Title: The Contest of the Grey Wolf Forest
|
Title: Gray Wolf Forest Tournament (2)
|
||||||
- Id: 16573
|
- Id: 16573
|
||||||
Title: Source of Weapon
|
Title: Source of Weapons (1)
|
||||||
- Id: 16574
|
- Id: 16574
|
||||||
Title: Source of Weapon
|
Title: Source of Weapons (2)
|
||||||
- Id: 16575
|
- Id: 16575
|
||||||
Title: Source of Weapon
|
Title: Source of Weapons (3)
|
||||||
- Id: 16576
|
- Id: 16576
|
||||||
Title: Source of Weapon
|
Title: Source of Weapons (4)
|
||||||
- Id: 16577
|
- Id: 16577
|
||||||
Title: Source of Weapon
|
Title: Source of Weapons (5)
|
||||||
- Id: 16578
|
- Id: 16578
|
||||||
Title: Source of Weapon
|
Title: Source of Weapons (6)
|
||||||
- Id: 16579
|
- Id: 16579
|
||||||
Title: Source of Weapon
|
Title: Source of Weapons (7)
|
||||||
- Id: 16580
|
- Id: 16580
|
||||||
Title: Source of Weapon
|
Title: Source of Weapons (8)
|
||||||
- Id: 16581
|
- Id: 16581
|
||||||
Title: Children Know It
|
Title: Even children know (1)
|
||||||
- Id: 16582
|
- Id: 16582
|
||||||
Title: Children Know It
|
Title: Even children know (2)
|
||||||
- Id: 16583
|
- Id: 16583
|
||||||
Title: Children Know It
|
Title: Even children know (3)
|
||||||
- Id: 16584
|
- Id: 16584
|
||||||
Title: The Price of Labor
|
Title: The Price of Labor (1)
|
||||||
- Id: 16585
|
- Id: 16585
|
||||||
Title: The Price of Labor
|
Title: The Price of Labor (2)
|
||||||
- Id: 16636
|
- Id: 16636
|
||||||
Title: Looking for clues - Juncea's Lab
|
Title: Looking for clues - Juncea's Lab
|
||||||
- Id: 16637
|
- Id: 16637
|
||||||
@ -12383,62 +12385,62 @@ Body:
|
|||||||
Title: (Standby) Thanatos Tower, 12th floor
|
Title: (Standby) Thanatos Tower, 12th floor
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 17504
|
- Id: 17504
|
||||||
Title: Where's My Home
|
Title: Where is My Home (1)
|
||||||
- Id: 17505
|
- Id: 17505
|
||||||
Title: Where's My Home
|
Title: Where is My Home (2)
|
||||||
- Id: 17506
|
- Id: 17506
|
||||||
Title: Where's My Home
|
Title: Where is My Home (3)
|
||||||
- Id: 17507
|
- Id: 17507
|
||||||
Title: Where's My Home
|
Title: Where is My Home (4)
|
||||||
- Id: 17508
|
- Id: 17508
|
||||||
Title: Lack of Supplies
|
Title: "[Daily] Shortage of Supplies"
|
||||||
Drops:
|
Drops:
|
||||||
- Mob: EP18_GREY_WOLF
|
- Mob: EP18_GREY_WOLF
|
||||||
Item: Ep18_Very_Ddan_Crystal
|
Item: Ep18_Very_Ddan_Crystal
|
||||||
Rate: 5000
|
Rate: 5000
|
||||||
- Id: 17509
|
- Id: 17509
|
||||||
Title: (Standby) Lack of supplies
|
Title: "[Cooldown] Shortage of Supplies"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 17510
|
- Id: 17510
|
||||||
Title: There are no bad beasts in the world
|
Title: There are no evil beasts in this world (1)
|
||||||
- Id: 17511
|
- Id: 17511
|
||||||
Title: There are no bad beasts in the world
|
Title: There are no evil beasts in this world (2)
|
||||||
- Id: 17512
|
- Id: 17512
|
||||||
Title: There are no bad beasts in the world
|
Title: There are no evil beasts in this world (3)
|
||||||
- Id: 17513
|
- Id: 17513
|
||||||
Title: The Unexpected Shepherd
|
Title: An Unexpected Shepherd (1)
|
||||||
- Id: 17514
|
- Id: 17514
|
||||||
Title: The Unexpected Shepherd
|
Title: An Unexpected Shepherd (2)
|
||||||
Targets:
|
Targets:
|
||||||
- Mob: EP18_ASHRING
|
- Mob: EP18_ASHRING
|
||||||
Count: 20
|
Count: 20
|
||||||
- Id: 17515
|
- Id: 17515
|
||||||
Title: The Unexpected Shepherd
|
Title: An Unexpected Shepherd (3)
|
||||||
- Id: 17516
|
- Id: 17516
|
||||||
Title: (Standby) Unexpected shepherd
|
Title: "[Cooldown] An Unexpected Shepherd"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 17517
|
- Id: 17517
|
||||||
Title: The Rebels
|
Title: Rebellion (1)
|
||||||
- Id: 17518
|
- Id: 17518
|
||||||
Title: The Rebels
|
Title: Rebellion (2)
|
||||||
- Id: 17519
|
- Id: 17519
|
||||||
Title: The Rebels
|
Title: Rebellion (3)
|
||||||
- Id: 17520
|
- Id: 17520
|
||||||
Title: Wolf in the Sheep
|
Title: Wolf Among Sheep (1)
|
||||||
- Id: 17521
|
- Id: 17521
|
||||||
Title: When you need a conversation
|
Title: Wolf Among Sheep (2)
|
||||||
- Id: 17522
|
- Id: 17522
|
||||||
Title: Cleaning the Traitors
|
Title: Wolf Among Sheep (3)
|
||||||
- Id: 17523
|
- Id: 17523
|
||||||
Title: Purification of the Sanctuary
|
Title: Sanctuary Purification
|
||||||
- Id: 17524
|
- Id: 17524
|
||||||
Title: Cleaning the Traitors
|
Title: "[Completed] Renegade Cleaning"
|
||||||
- Id: 17525
|
- Id: 17525
|
||||||
Title: When you need a conversation
|
Title: Aftermath
|
||||||
- Id: 17526
|
- Id: 17526
|
||||||
Title: Purification of the Sanctuary
|
Title: "[Completed] Sanctuary Purification"
|
||||||
- Id: 17527
|
- Id: 17527
|
||||||
Title: (Standby) Cleaning strategy
|
Title: "[Cooldown] Sanctuary Purification"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 17566
|
- Id: 17566
|
||||||
Title: (Standby) Code name! Is it a star button?
|
Title: (Standby) Code name! Is it a star button?
|
||||||
@ -12656,21 +12658,21 @@ Body:
|
|||||||
Title: Goseong dungeon 1st floor attack
|
Title: Goseong dungeon 1st floor attack
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 18082
|
- Id: 18082
|
||||||
Title: Eligibility to Participate in the Competition
|
Title: Eligibility to attend the competition
|
||||||
- Id: 18083
|
- Id: 18083
|
||||||
Title: Investigation of Daishinkan's Villa
|
Title: High Priest's Villa
|
||||||
- Id: 18084
|
- Id: 18084
|
||||||
Title: Fact Investigation
|
Title: Fact Finding
|
||||||
- Id: 18085
|
- Id: 18085
|
||||||
Title: The Direction of Prayer
|
Title: Direction of Prayer
|
||||||
- Id: 18086
|
- Id: 18086
|
||||||
Title: Make the Grey Wolf Forest Safer
|
Title: "[Daily] Gray Wolf Forest Hunting"
|
||||||
Targets:
|
Targets:
|
||||||
- Id: 1
|
- Id: 1
|
||||||
Location: gw_fild01
|
Location: gw_fild01
|
||||||
Count: 30
|
Count: 30
|
||||||
- Id: 18087
|
- Id: 18087
|
||||||
Title: Safer in the Gray Wolf Forest - Standby
|
Title: "[Cooldown] Gray Wolf Forest Hunting"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
- Id: 18100
|
- Id: 18100
|
||||||
Title: Legends from Moscovia
|
Title: Legends from Moscovia
|
||||||
|
|||||||
@ -43027,10 +43027,10 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Range: 9
|
Flags:
|
||||||
Hit: Single
|
IgnoreGtb: true
|
||||||
HitCount: 1
|
AfterCastWalkDelay: 1000
|
||||||
AfterCastActDelay: 2000
|
Cooldown: 20000
|
||||||
Requires:
|
Requires:
|
||||||
SpCost:
|
SpCost:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
@ -43053,11 +43053,7 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Splash: true
|
AfterCastWalkDelay: 1000
|
||||||
Hit: Single
|
|
||||||
HitCount: 1
|
|
||||||
SplashArea: -1
|
|
||||||
AfterCastActDelay: 35000
|
|
||||||
Duration1:
|
Duration1:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 40000
|
Time: 40000
|
||||||
@ -43069,6 +43065,7 @@ Body:
|
|||||||
Time: 25000
|
Time: 25000
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Time: 20000
|
Time: 20000
|
||||||
|
Cooldown: 35000
|
||||||
Requires:
|
Requires:
|
||||||
SpCost:
|
SpCost:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
@ -43086,7 +43083,6 @@ Body:
|
|||||||
Name: HLIF_BRAIN
|
Name: HLIF_BRAIN
|
||||||
Description: Brain Surgery
|
Description: Brain Surgery
|
||||||
MaxLevel: 5
|
MaxLevel: 5
|
||||||
SplashArea: 1
|
|
||||||
- Id: 8004
|
- Id: 8004
|
||||||
Name: HLIF_CHANGE
|
Name: HLIF_CHANGE
|
||||||
Description: Change
|
Description: Change
|
||||||
@ -43094,7 +43090,7 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
AfterCastWalkDelay: 1000
|
||||||
Duration1:
|
Duration1:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 60000
|
Time: 60000
|
||||||
@ -43102,7 +43098,7 @@ Body:
|
|||||||
Time: 180000
|
Time: 180000
|
||||||
- Level: 3
|
- Level: 3
|
||||||
Time: 300000
|
Time: 300000
|
||||||
Duration2:
|
Cooldown:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 600000
|
Time: 600000
|
||||||
- Level: 2
|
- Level: 2
|
||||||
@ -43120,7 +43116,8 @@ Body:
|
|||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
Duration2: 1000
|
AfterCastWalkDelay: 1000
|
||||||
|
Cooldown: 1000
|
||||||
Requires:
|
Requires:
|
||||||
SpCost: 10
|
SpCost: 10
|
||||||
- Id: 8006
|
- Id: 8006
|
||||||
@ -43131,7 +43128,7 @@ Body:
|
|||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
AfterCastActDelay: 30000
|
AfterCastWalkDelay: 1000
|
||||||
Duration1:
|
Duration1:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 40000
|
Time: 40000
|
||||||
@ -43143,6 +43140,7 @@ Body:
|
|||||||
Time: 25000
|
Time: 25000
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Time: 20000
|
Time: 20000
|
||||||
|
Cooldown: 30000
|
||||||
Requires:
|
Requires:
|
||||||
SpCost:
|
SpCost:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
@ -43170,6 +43168,7 @@ Body:
|
|||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
|
AfterCastWalkDelay: 1000
|
||||||
Duration1:
|
Duration1:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 60000
|
Time: 60000
|
||||||
@ -43177,7 +43176,7 @@ Body:
|
|||||||
Time: 180000
|
Time: 180000
|
||||||
- Level: 3
|
- Level: 3
|
||||||
Time: 300000
|
Time: 300000
|
||||||
Duration2:
|
Cooldown:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 300000
|
Time: 300000
|
||||||
- Level: 2
|
- Level: 2
|
||||||
@ -43206,7 +43205,7 @@ Body:
|
|||||||
Count: -2
|
Count: -2
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Count: -3
|
Count: -3
|
||||||
AfterCastWalkDelay: 2000
|
Cooldown: 2000
|
||||||
Requires:
|
Requires:
|
||||||
SpCost:
|
SpCost:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
@ -43227,6 +43226,7 @@ Body:
|
|||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
|
AfterCastWalkDelay: 1000
|
||||||
Duration1:
|
Duration1:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 60000
|
Time: 60000
|
||||||
@ -43238,7 +43238,7 @@ Body:
|
|||||||
Time: 45000
|
Time: 45000
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Time: 40000
|
Time: 40000
|
||||||
Duration2:
|
Cooldown:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 60000
|
Time: 60000
|
||||||
- Level: 2
|
- Level: 2
|
||||||
@ -43272,6 +43272,7 @@ Body:
|
|||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
CastCancel: true
|
CastCancel: true
|
||||||
|
AfterCastWalkDelay: 1000
|
||||||
Duration1:
|
Duration1:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 60000
|
Time: 60000
|
||||||
@ -43283,7 +43284,7 @@ Body:
|
|||||||
Time: 45000
|
Time: 45000
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Time: 40000
|
Time: 40000
|
||||||
Duration2:
|
Cooldown:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 60000
|
Time: 60000
|
||||||
- Level: 2
|
- Level: 2
|
||||||
@ -43316,7 +43317,7 @@ Body:
|
|||||||
Range: 15
|
Range: 15
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
AfterCastActDelay: 1000
|
Cooldown: 1000
|
||||||
Requires:
|
Requires:
|
||||||
SpCost: 1
|
SpCost: 1
|
||||||
- Id: 8013
|
- Id: 8013
|
||||||
@ -43338,7 +43339,7 @@ Body:
|
|||||||
Count: 4
|
Count: 4
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Count: 5
|
Count: 5
|
||||||
AfterCastActDelay:
|
Cooldown:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 2000
|
Time: 2000
|
||||||
- Level: 2
|
- Level: 2
|
||||||
@ -43369,8 +43370,8 @@ Body:
|
|||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
AfterCastActDelay: 3000
|
AfterCastWalkDelay: 1500
|
||||||
AfterCastWalkDelay: 3000
|
Cooldown: 3000
|
||||||
Requires:
|
Requires:
|
||||||
SpCost: 40
|
SpCost: 40
|
||||||
- Id: 8015
|
- Id: 8015
|
||||||
@ -43394,7 +43395,8 @@ Body:
|
|||||||
HitCount: 1
|
HitCount: 1
|
||||||
Element: Weapon
|
Element: Weapon
|
||||||
SplashArea: 4
|
SplashArea: 4
|
||||||
AfterCastWalkDelay: 1000
|
AfterCastActDelay: 5000
|
||||||
|
CoolDown: 1000
|
||||||
Requires:
|
Requires:
|
||||||
SpCost: 1
|
SpCost: 1
|
||||||
- Id: 8018
|
- Id: 8018
|
||||||
|
|||||||
@ -2600,13 +2600,17 @@ Body:
|
|||||||
DurationLookup: HLIF_AVOID
|
DurationLookup: HLIF_AVOID
|
||||||
CalcFlags:
|
CalcFlags:
|
||||||
Speed: true
|
Speed: true
|
||||||
|
Flags:
|
||||||
|
NoSave: true
|
||||||
|
RemoveFromHomOnMapWarp: true
|
||||||
- Status: Change
|
- Status: Change
|
||||||
DurationLookup: HLIF_CHANGE
|
DurationLookup: HLIF_CHANGE
|
||||||
CalcFlags:
|
CalcFlags:
|
||||||
Vit: true
|
Vit: true
|
||||||
Int: true
|
Int: true
|
||||||
Flags:
|
Flags:
|
||||||
RemoveOnChangeMap: true
|
NoSave: true
|
||||||
|
RemoveFromHomOnMapWarp: true
|
||||||
Fail:
|
Fail:
|
||||||
Change: true
|
Change: true
|
||||||
- Status: Bloodlust
|
- Status: Bloodlust
|
||||||
|
|||||||
@ -490,3 +490,9 @@ Hides monster's HP bar on a map.
|
|||||||
Ignores config value of 'monster_hp_bars_info'.
|
Ignores config value of 'monster_hp_bars_info'.
|
||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
|
*specialpopup <popup ID>
|
||||||
|
|
||||||
|
Displays a special popup when a player enters the map. See script command "specialpopup" for details on different popup types.
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|||||||
@ -6124,11 +6124,12 @@ will always return 0.
|
|||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
*skilleffect <skill id>,<number>;
|
*skilleffect <skill id>,<number>{,<game ID>};
|
||||||
*skilleffect "<skill name>",<number>;
|
*skilleffect "<skill name>",<number>{,<game ID>};
|
||||||
|
|
||||||
This command displays visual and aural effects of given skill on currently
|
This command displays visual and aural effects of given skill on currently
|
||||||
attached character. The number parameter is for skill whose visual effect
|
attached character or, when defined, on any unit with the given ID.
|
||||||
|
The number parameter is for skill whose visual effect
|
||||||
involves displaying of a number (healing or damaging). Note, that this command
|
involves displaying of a number (healing or damaging). Note, that this command
|
||||||
will not actually use the skill, it is intended for scripts, which simulate
|
will not actually use the skill, it is intended for scripts, which simulate
|
||||||
skill usage by the NPC, such as buffs, by setting appropriate status and
|
skill usage by the NPC, such as buffs, by setting appropriate status and
|
||||||
@ -8508,6 +8509,15 @@ Opens the tip box UI for the attached player or the given character ID.
|
|||||||
|
|
||||||
This command requires packet version 2017-11-22 or newer.
|
This command requires packet version 2017-11-22 or newer.
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
*specialpopup(<popup ID>);
|
||||||
|
|
||||||
|
Open popup and/or show text by ID from list defined in the client spopup.lub file.
|
||||||
|
Popup and text is only visible if the player warped from one map to another map.
|
||||||
|
|
||||||
|
This command requires packet version 2022-10-05 or newer.
|
||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
\\
|
\\
|
||||||
6,1.- Unit-related commands
|
6,1.- Unit-related commands
|
||||||
@ -10681,6 +10691,7 @@ current invoking character.
|
|||||||
*addhomintimacy <amount>{,<char_id>};
|
*addhomintimacy <amount>{,<char_id>};
|
||||||
|
|
||||||
Increase or decrease a homunculus' intimacy value by the given <amount>. 100000 is full loyalty.
|
Increase or decrease a homunculus' intimacy value by the given <amount>. 100000 is full loyalty.
|
||||||
|
Fails silently when no players are attached or if the player has no homunculus.
|
||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
|
|||||||
@ -254,6 +254,9 @@ Flags: Various status flags for specific status change events.
|
|||||||
SuperNoviceAngel - Status that is given from Super Novice Angel.
|
SuperNoviceAngel - Status that is given from Super Novice Angel.
|
||||||
TaekwonAngel - Status that is given from Taekwon Angel.
|
TaekwonAngel - Status that is given from Taekwon Angel.
|
||||||
|
|
||||||
|
RemoveFromHomOnWarp - Removes the status from the Homunculus when teleporting or warping to another map.
|
||||||
|
RemoveFromHomOnMapWarp - Removes the status from the Homunculus when warping to another map.
|
||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
MinDuration: Minimum duration, in milliseconds, after reduction calculation for status resistance.
|
MinDuration: Minimum duration, in milliseconds, after reduction calculation for status resistance.
|
||||||
|
|||||||
@ -1001,13 +1001,16 @@ SC_FLING ()
|
|||||||
desc:
|
desc:
|
||||||
val1:
|
val1:
|
||||||
|
|
||||||
SC_AVOID ()
|
SC_AVOID (EFST_HLIF_AVOID)
|
||||||
desc:
|
desc: Increase walkspeed for Players and Homunculus
|
||||||
val1:
|
val1: Skill Level
|
||||||
|
val2: Walkspeed increase (10 * val1 for Players, 40 * val1 for Homunculus)
|
||||||
|
|
||||||
SC_CHANGE ()
|
SC_CHANGE (EFST_HLIF_CHANGE)
|
||||||
desc:
|
desc: Increase some Homunculus' statuses (VIT, INT); Uses MATK for damage calculation; Sets Homunculus' HP and SP to 10 on expiration; On Pre-Renewal, sets Homunculus' HP and SP to 100% on cast
|
||||||
val1:
|
val1: Skill Level
|
||||||
|
val2: VIT increase (20 * val1)
|
||||||
|
val3: INT increase (30 * val1)
|
||||||
|
|
||||||
SC_BLOODLUST ()
|
SC_BLOODLUST ()
|
||||||
desc:
|
desc:
|
||||||
|
|||||||
@ -136,7 +136,7 @@ prt_in,243,168,4 script Jovovich 91,{
|
|||||||
mes "* Fees and Information *";
|
mes "* Fees and Information *";
|
||||||
mes "- 1 Dyestuffs item of the color of hair you want.";
|
mes "- 1 Dyestuffs item of the color of hair you want.";
|
||||||
mes "- 1000 zeny fee.";
|
mes "- 1000 zeny fee.";
|
||||||
break;
|
close;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
mes "[Hairdresser Jovovich]";
|
mes "[Hairdresser Jovovich]";
|
||||||
|
|||||||
@ -2,34 +2,35 @@
|
|||||||
//= Instance: The Maze of Oz.
|
//= Instance: The Maze of Oz.
|
||||||
//===== Description: =========================================
|
//===== Description: =========================================
|
||||||
//- [Walkthrough conversion]
|
//- [Walkthrough conversion]
|
||||||
//- Part of the episode 18.1 main quest.
|
//- Part of the Episode 18 main quest.
|
||||||
//===== Changelogs: ==========================================
|
//===== Changelogs: ==========================================
|
||||||
//= 1.0 First version. [Capuche]
|
//= 1.0 First version. [Capuche]
|
||||||
//============================================================
|
//============================================================
|
||||||
|
|
||||||
// Main Quest: Step 28.
|
// Main Quest: Step 28.
|
||||||
ra_fild10,179,176,5 script Merchant#ep18_gorge 4_EP18_MERCHANT,{
|
ra_fild10,179,176,5 script Merchant#ep18_gorge 4_EP18_MERCHANT,{
|
||||||
.@md_name$ = "The Maze of Oz";
|
.@md_name$ = "Oz Labyrinth";
|
||||||
|
|
||||||
if (ep18_1_main == 29) {
|
if (ep18_main == 29) {
|
||||||
mes "[Miriam in disguise]";
|
mes "[Disguised Miriam]";
|
||||||
mes "From now on <FONT SIZE = 14><B>^e5555e" + .@md_name$ + "^000000</FONT></B>";
|
mes "We are now entering the <FONT SIZE = 14><B>^e5555eMaze of Oz^000000</FONT></B>.";
|
||||||
mes "^e5555ePrepare yourself and talk to me again^000000";
|
mes "^e5555ePlease finish your preparations^000000 and come back to me.";
|
||||||
cutin "ep18_merchant.png",2;
|
cutin "ep18_merchant.png",2;
|
||||||
changequest 11717,11719;
|
erasequest 11717;
|
||||||
ep18_1_main = 30;
|
setquest 11719;
|
||||||
|
ep18_main = 30;
|
||||||
close3;
|
close3;
|
||||||
}
|
}
|
||||||
if (ep18_1_main == 30) {
|
if (ep18_main == 30) {
|
||||||
mes "[Miriam in disguise]";
|
mes "[Disguised Miriam]";
|
||||||
mes "Then I'll start the ^e5555e" + .@md_name$ + "^000000";
|
mes "Then let's head to ^e5555e" + .@md_name$ + "^000000";
|
||||||
next;
|
next;
|
||||||
if (getcharid(1) == 0 || is_party_leader() == false) {
|
if (getcharid(1) == 0 || is_party_leader() == false) {
|
||||||
mes "[Miriam in disguise]";
|
mes "[Disguised Miriam]";
|
||||||
mes "I think it would be a good idea to form a ^ff0000party before enter ^000000..";
|
mes "I think it would be a good idea to form a ^ff0000party before enter^000000..";
|
||||||
close;
|
close;
|
||||||
}
|
}
|
||||||
switch( select( "Open the door", "Enter", "Stop" ) ) {
|
switch( select( "Open the door.", "Enter.", "Quit." ) ) {
|
||||||
case 1:
|
case 1:
|
||||||
if (instance_create(.@md_name$) < 0) {
|
if (instance_create(.@md_name$) < 0) {
|
||||||
mes "Party: " + getpartyname(getcharid(1)) + "";
|
mes "Party: " + getpartyname(getcharid(1)) + "";
|
||||||
@ -37,21 +38,21 @@ ra_fild10,179,176,5 script Merchant#ep18_gorge 4_EP18_MERCHANT,{
|
|||||||
mes "^0000ff" + .@md_name$ + " ^000000- Unknown error";
|
mes "^0000ff" + .@md_name$ + " ^000000- Unknown error";
|
||||||
close;
|
close;
|
||||||
}
|
}
|
||||||
mes "[Miriam in disguise]";
|
mes "[Disguised Miriam]";
|
||||||
mes "You'd better wait a little before you go in.";
|
mes "It's better to wait a bit before entering.";
|
||||||
close;
|
close;
|
||||||
case 2:
|
case 2:
|
||||||
switch( instance_enter(.@md_name$) ) {
|
switch( instance_enter(.@md_name$) ) {
|
||||||
case IE_OTHER:
|
case IE_OTHER:
|
||||||
mes "[Miriam in disguise]";
|
mes "[Disguised Miriam]";
|
||||||
mes "^ff0000An unknown error occurred.^000000";
|
mes "^ff0000An unknown error occurred.^000000";
|
||||||
close;
|
close;
|
||||||
case IE_NOINSTANCE:
|
case IE_NOINSTANCE:
|
||||||
mes "[Miriam in disguise]";
|
mes "[Disguised Miriam]";
|
||||||
mes "^ff0000Your party leader has not yet created the dungeon.^000000";
|
mes "Let's wait a bit and try again.";
|
||||||
close;
|
close;
|
||||||
case IE_NOMEMBER:
|
case IE_NOMEMBER:
|
||||||
mes "[Miriam in disguise]";
|
mes "[Disguised Miriam]";
|
||||||
mes "^ff0000Only a member of the party can enter the Memorial Dungeon.^000000";
|
mes "^ff0000Only a member of the party can enter the Memorial Dungeon.^000000";
|
||||||
close;
|
close;
|
||||||
case IE_OK:
|
case IE_OK:
|
||||||
@ -62,24 +63,25 @@ ra_fild10,179,176,5 script Merchant#ep18_gorge 4_EP18_MERCHANT,{
|
|||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mes "[Merchant]";
|
||||||
|
mes "It seems like someone was nearby but disappeared quickly.";
|
||||||
|
mes "Where did they go?";
|
||||||
cutin "ep18_merchant.png",2;
|
cutin "ep18_merchant.png",2;
|
||||||
mes "[Vendor]";
|
close3;
|
||||||
mes "Someone must have been around here, but they just disappeared. Where did they go?";
|
|
||||||
close3;
|
|
||||||
|
|
||||||
OnInit:
|
OnInit:
|
||||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11717) == 1" );
|
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(11717) == 1" );
|
||||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
|
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 1
|
// Step 1
|
||||||
1@oz,284,164,3 script Rope#outoz 4_ROPEPILE,{
|
1@oz,284,164,3 script Rope#outoz 4_ROPEPILE,{
|
||||||
mes "I think I can climb up with a rope.";
|
mes "I think we can use the rope to climb up.";
|
||||||
next;
|
next;
|
||||||
if (select( "Use a rope to climb", "Do not use" ) == 2)
|
if (select( "Use the rope to climb up.", "Do not use." ) == 2)
|
||||||
end;
|
end;
|
||||||
warp "ra_fild10",180,174;
|
warp "ra_fild10",173,176;
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,64 +90,64 @@ OnInit:
|
|||||||
end;
|
end;
|
||||||
'event_oz = 1;
|
'event_oz = 1;
|
||||||
.@miriam1$ = instance_npcname("Miriam#ozmd1");
|
.@miriam1$ = instance_npcname("Miriam#ozmd1");
|
||||||
.@maggi1$ = instance_npcname("Magi#ozmd1");
|
.@maggi1$ = instance_npcname("Maggi#ozmd1");
|
||||||
.@mark1$ = instance_npcname("Mark#ozmd1");
|
.@mark1$ = instance_npcname("Mark#ozmd1");
|
||||||
.@tamarin1$ = instance_npcname("Tamarin#ozmd1");
|
.@tamarin1$ = instance_npcname("Tamarin#ozmd1");
|
||||||
.@miriam2$ = instance_npcname("Miriam#ozmd2");
|
.@miriam2$ = instance_npcname("Miriam#ozmd2");
|
||||||
|
|
||||||
setpcblock PCBLOCK_NPC, true;
|
setpcblock PCBLOCK_NPC, true;
|
||||||
npctalk "Miriam: This is the entrance to the labyrinth of Oz.", .@miriam1$;
|
npctalk "Miriam: This is the entrance to the Labyrinth of Oz.", .@miriam1$;
|
||||||
cutin "ep18_miriam_03.png",2;
|
cutin "ep18_miriam_03.png",2;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: Everyone, please move carefully.", .@miriam1$;
|
npctalk "Miriam: Everyone, please move carefully.", .@miriam1$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Magi: Something hot and dusty...", .@maggi1$;
|
npctalk "Magi: Something hot and dusty...", .@maggi1$;
|
||||||
cutin "4job_maggi_02.PNG",2;
|
cutin "4job_maggi_02.PNG",2;
|
||||||
enablenpc .@maggi1$;
|
cloakoffnpcself( .@maggi1$ );
|
||||||
enablenpc .@mark1$;
|
cloakoffnpcself( .@mark1$ );
|
||||||
enablenpc .@tamarin1$;
|
cloakoffnpcself( .@tamarin1$ );
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Mark: Are you okay?", .@mark1$;
|
npctalk "Mark: Are you okay?", .@mark1$;
|
||||||
cutin "ep18_mark_01.png",2;
|
cutin "ep18_mark_01.png",2;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: There is lava flowing right below it, always scattering ashes.", .@miriam1$;
|
npctalk "Miriam: Lava is flowing right below, so ash is always flying.", .@miriam1$;
|
||||||
cutin "ep18_miriam_03.png",2;
|
cutin "ep18_miriam_03.png",2;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: Beware there may be embers in the lava ash.", .@miriam1$;
|
npctalk "Miriam: There may be embers left in the lava ash, so please be careful.", .@miriam1$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: If you inhale incorrectly, you will burn your lungs.", .@miriam1$;
|
npctalk "Miriam: If you inhale it incorrectly, it will burn your lungs.", .@miriam1$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: There don't seem to be any monsters around here, so it's better to move slowly and check the situation again.", .@miriam1$;
|
npctalk "Miriam: There don't seem to be any monsters around here, so it would be better to move slowly and check the situation again.", .@miriam1$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: Please follow the road to the north first.", .@miriam1$;
|
npctalk "Miriam: First, please follow the road to the north.", .@miriam1$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
cutin "",255;
|
cutin "",255;
|
||||||
setpcblock PCBLOCK_NPC, false;
|
setpcblock PCBLOCK_NPC, false;
|
||||||
|
|
||||||
disablenpc .@maggi1$;
|
cloakonnpcself( .@maggi1$ );
|
||||||
disablenpc .@mark1$;
|
cloakonnpcself( .@mark1$ );
|
||||||
disablenpc .@tamarin1$;
|
cloakonnpcself( .@tamarin1$ );
|
||||||
disablenpc .@miriam1$;
|
disablenpc .@miriam1$;
|
||||||
enablenpc .@miriam2$;
|
enablenpc .@miriam2$;
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@oz,279,175,5 duplicate(dummy_npc) Magi#ozmd1 4_4JOB_MAGGI
|
1@oz,279,175,5 duplicate(dummy_cloaked_npc) Maggi#ozmd1 4_4JOB_MAGGI
|
||||||
1@oz,280,175,3 duplicate(dummy_npc) Mark#ozmd1 4_EP18_MARK
|
1@oz,280,175,3 duplicate(dummy_cloaked_npc) Mark#ozmd1 4_EP18_MARK
|
||||||
1@oz,279,177,3 duplicate(dummy_npc) Tamarin#ozmd1 4_EP18_TAMARIN
|
1@oz,279,177,3 duplicate(dummy_cloaked_npc) Tamarin#ozmd1 4_EP18_TAMARIN
|
||||||
|
|
||||||
|
|
||||||
// Step 2
|
// Step 2
|
||||||
1@oz,271,272,3 script Miriam#ozmd2 4_EP18_MIRIAM,{
|
1@oz,271,272,3 script(DISABLED) Miriam#ozmd2 4_EP18_MIRIAM,{
|
||||||
if ('event_oz != 1)
|
if ('event_oz != 1)
|
||||||
end;
|
end;
|
||||||
'event_oz = 2;
|
'event_oz = 2;
|
||||||
.@miriam2$ = instance_npcname("Miriam#ozmd2");
|
.@miriam2$ = instance_npcname("Miriam#ozmd2");
|
||||||
'miriam3$ = instance_npcname("Miriam#ozmd3");
|
'miriam3$ = instance_npcname("Miriam#ozmd3");
|
||||||
setpcblock PCBLOCK_NPC, true;
|
setpcblock PCBLOCK_NPC, true;
|
||||||
npctalk "Miriam: If you cross the bridge in front of you, it's a real maze.", .@miriam2$;
|
npctalk "Miriam: If you cross the bridge in front of you, it's the real Maze of Oz.", .@miriam2$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: We must be very careful crossing the bridge, let's talk again after.", .@miriam2$;
|
npctalk "Miriam: You have to be very careful when crossing the bridge, so let's talk again at the bridge.", .@miriam2$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
setpcblock PCBLOCK_NPC, false;
|
setpcblock PCBLOCK_NPC, false;
|
||||||
disablenpc .@miriam2$;
|
disablenpc .@miriam2$;
|
||||||
@ -153,69 +155,43 @@ OnInit:
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
OnInstanceInit:
|
OnInstanceInit:
|
||||||
'miriam3_id = 0;
|
|
||||||
'event_oz = 0;
|
'event_oz = 0;
|
||||||
|
|
||||||
'map_name$ = instance_mapname("1@oz");
|
'map_name$ = instance_mapname("1@oz");
|
||||||
disablenpc instance_npcname("Miriam#ozmd2");
|
|
||||||
disablenpc instance_npcname("Miriam#ozmd3");
|
|
||||||
disablenpc instance_npcname("Miriam#ozmd4");
|
|
||||||
disablenpc instance_npcname("Maram#ozmd5");
|
|
||||||
disablenpc instance_npcname("Miriam#ozmd5");
|
|
||||||
disablenpc instance_npcname("Maram#ozmd7");
|
|
||||||
disablenpc instance_npcname("#oz_way");
|
|
||||||
disablenpc instance_npcname("Maram#ozmd6");
|
|
||||||
disablenpc instance_npcname("Magi#ozmd1");
|
|
||||||
disablenpc instance_npcname("Mark#ozmd1");
|
|
||||||
disablenpc instance_npcname("Tamarin#ozmd1");
|
|
||||||
disablenpc instance_npcname("Magi#ozmd3");
|
|
||||||
disablenpc instance_npcname("Mark#ozmd3");
|
|
||||||
disablenpc instance_npcname("Tamarin#ozmd3");
|
|
||||||
disablenpc instance_npcname("Maram#ozmd4");
|
|
||||||
disablenpc instance_npcname("Magi#ozmd5");
|
|
||||||
disablenpc instance_npcname("Mark#ozmd5");
|
|
||||||
disablenpc instance_npcname("Tamarin#ozmd5");
|
|
||||||
disablenpc instance_npcname("Maram#ozmd8");
|
|
||||||
disablenpc instance_npcname("Magi#ozmd6");
|
|
||||||
disablenpc instance_npcname("Mark#ozmd6");
|
|
||||||
disablenpc instance_npcname("Tamarin#ozmd6");
|
|
||||||
disablenpc instance_npcname("Miriam#ozmd7");
|
|
||||||
disablenpc instance_npcname("Imril#ozmd7");
|
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Step 3
|
// Step 3
|
||||||
1@oz,241,272,3 script Miriam#ozmd3 EP18_NPC_MIRIAM,{
|
1@oz,241,272,3 script(DISABLED) Miriam#ozmd3 EP18_NPC_MIRIAM,{
|
||||||
if ('event_oz != 2)
|
if ('event_oz != 2)
|
||||||
end;
|
end;
|
||||||
'event_oz = 3;
|
'event_oz = 3;
|
||||||
'miriam3$ = instance_npcname("Miriam#ozmd3");
|
.@maggi3$ = instance_npcname("Maggi#ozmd3");
|
||||||
.@maggi3$ = instance_npcname("Magi#ozmd3");
|
|
||||||
.@mark3$ = instance_npcname("Mark#ozmd3");
|
.@mark3$ = instance_npcname("Mark#ozmd3");
|
||||||
.@tamarin3$ = instance_npcname("Tamarin#ozmd3");
|
.@tamarin3$ = instance_npcname("Tamarin#ozmd3");
|
||||||
|
|
||||||
setpcblock PCBLOCK_NPC, true;
|
setpcblock PCBLOCK_NPC, true;
|
||||||
npctalk "Miriam: This bridge is dangerous, so it's best to split your luggage and cross in turn.", 'miriam3$;
|
npctalk "Miriam: This bridge is dangerous, so it would be better to share the luggage and cross it one at a time.", 'miriam3$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: Then I will cross first, so please follow slowly. It will help not to look under your feet.", 'miriam3$;
|
npctalk "Miriam: Then, I will cross first, so please follow me slowly. It will be helpful not to look under your feet.", 'miriam3$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Tamarin: Wow I can't see the bottom.", .@tamarin3$;
|
npctalk "Tamarin: Wow... I can't see the bottom.", .@tamarin3$;
|
||||||
enablenpc .@maggi3$;
|
cloakoffnpcself( .@maggi3$ );
|
||||||
enablenpc .@mark3$;
|
cloakoffnpcself( .@mark3$ );
|
||||||
enablenpc .@tamarin3$;
|
cloakoffnpcself( .@tamarin3$ );
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Magi: Your legs look very old...", .@maggi3$;
|
npctalk "Magi: My legs look really worn out...", .@maggi3$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Mark: Everyone be careful", .@mark3$;
|
npctalk "Mark: Everyone be careful.", .@mark3$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
setpcblock PCBLOCK_NPC, false;
|
setpcblock PCBLOCK_NPC, false;
|
||||||
disablenpc .@maggi3$;
|
cloakonnpcself( .@maggi3$ );
|
||||||
disablenpc .@mark3$;
|
cloakonnpcself( .@mark3$ );
|
||||||
disablenpc .@tamarin3$;
|
cloakonnpcself( .@tamarin3$ );
|
||||||
'miriam3_id = getnpcid(0);
|
'miriam3_id = getnpcid(0);
|
||||||
|
|
||||||
unitwalk 'miriam3_id,231,272, 'miriam3$ + "::OnEvent1"; // several events are required to palliate to our too short value of MAX_WALKPATH (32) used to calculate the pathing
|
unitwalk 'miriam3_id,231,272, 'miriam3$ + "::OnEvent1";
|
||||||
end;
|
end;
|
||||||
OnEvent1:
|
OnEvent1:
|
||||||
unitwalk 'miriam3_id,211,272, 'miriam3$ + "::OnEvent2";
|
unitwalk 'miriam3_id,211,272, 'miriam3$ + "::OnEvent2";
|
||||||
@ -236,13 +212,13 @@ OnEvent5:
|
|||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@oz,245,272,3 duplicate(dummy_npc) Magi#ozmd3 4_4JOB_MAGGI
|
1@oz,245,272,3 duplicate(dummy_cloaked_npc) Maggi#ozmd3 4_4JOB_MAGGI
|
||||||
1@oz,244,273,3 duplicate(dummy_npc) Mark#ozmd3 4_EP18_MARK
|
1@oz,244,273,3 duplicate(dummy_cloaked_npc) Mark#ozmd3 4_EP18_MARK
|
||||||
1@oz,244,270,3 duplicate(dummy_npc) Tamarin#ozmd3 4_EP18_TAMARIN
|
1@oz,244,270,3 duplicate(dummy_cloaked_npc) Tamarin#ozmd3 4_EP18_TAMARIN
|
||||||
|
|
||||||
|
|
||||||
// Step 4 + 5
|
// Step 4 + 5
|
||||||
1@oz,157,272,3 script Miriam#ozmd4 4_EP18_MIRIAM,{
|
1@oz,157,272,3 script(DISABLED) Miriam#ozmd4 4_EP18_MIRIAM,{
|
||||||
if ('event_oz != 3)
|
if ('event_oz != 3)
|
||||||
end;
|
end;
|
||||||
'event_oz = 4;
|
'event_oz = 4;
|
||||||
@ -250,25 +226,25 @@ OnEvent5:
|
|||||||
.@miriam4$ = instance_npcname("Miriam#ozmd4");
|
.@miriam4$ = instance_npcname("Miriam#ozmd4");
|
||||||
.@tamarin4$ = instance_npcname("Tamarin#ozmd4");
|
.@tamarin4$ = instance_npcname("Tamarin#ozmd4");
|
||||||
.@ashtoad2$ = instance_npcname("Ash Toad#ozmd2");
|
.@ashtoad2$ = instance_npcname("Ash Toad#ozmd2");
|
||||||
.@maggi4$ = instance_npcname("Magi#ozmd4");
|
.@maggi4$ = instance_npcname("Maggi#ozmd4");
|
||||||
.@mark4$ = instance_npcname("Mark#ozmd4");
|
.@mark4$ = instance_npcname("Mark#ozmd4");
|
||||||
.@ashtoad3$ = instance_npcname("Ash Toad#ozmd3");
|
.@ashtoad3$ = instance_npcname("Ash Toad#ozmd3");
|
||||||
|
|
||||||
setpcblock PCBLOCK_NPC, true;
|
setpcblock PCBLOCK_NPC, true;
|
||||||
mapannounce 'map_name$, "Miriam: Ah!! A monster!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
|
mapannounce 'map_name$, "Miriam: Ah!! A monster!!!", bc_map, 0xB7EE,FW_NORMAL,16;
|
||||||
sleep2 1500;
|
sleep2 1500;
|
||||||
mapannounce 'map_name$, "Miriam: I'll take this rude bastard.", bc_map, 0x00B7EE,FW_NORMAL,16;
|
mapannounce 'map_name$, "Miriam: I will take care of this rude guy.", bc_map, 0xB7EE,FW_NORMAL,16;
|
||||||
sleep2 1500;
|
sleep2 1500;
|
||||||
mapannounce 'map_name$, "Tamarin: Appeared in the back!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
|
mapannounce 'map_name$, "Tamarin: It also appeared in the back!!!", bc_map, 0xB7EE,FW_NORMAL,16;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
enablenpc .@tamarin4$;
|
enablenpc .@tamarin4$;
|
||||||
sleep2 500;
|
sleep2 500;
|
||||||
enablenpc .@ashtoad2$;
|
enablenpc .@ashtoad2$;
|
||||||
mapannounce 'map_name$, "Magi: Crazy!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
|
mapannounce 'map_name$, "Magi: Aaaah!!!", bc_map, 0xB7EE,FW_NORMAL,16;
|
||||||
sleep2 500;
|
sleep2 500;
|
||||||
enablenpc .@maggi4$;
|
enablenpc .@maggi4$;
|
||||||
enablenpc .@mark4$;
|
enablenpc .@mark4$;
|
||||||
mapannounce 'map_name$, "Mark: Please support me in the front!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
|
mapannounce 'map_name$, "Mark: Please support the front!!!", bc_map, 0xB7EE,FW_NORMAL,16;
|
||||||
sleep2 1000;
|
sleep2 1000;
|
||||||
'mob_count_oz = 0;
|
'mob_count_oz = 0;
|
||||||
monster 'map_name$,145,274,"Ash Toad",21295,1, .@miriam4$ + "::OnMobDead"; // EP18_ASH_TOAD
|
monster 'map_name$,145,274,"Ash Toad",21295,1, .@miriam4$ + "::OnMobDead"; // EP18_ASH_TOAD
|
||||||
@ -289,7 +265,7 @@ OnMobDead:
|
|||||||
|
|
||||||
.@tamarin4$ = instance_npcname("Tamarin#ozmd4");
|
.@tamarin4$ = instance_npcname("Tamarin#ozmd4");
|
||||||
.@ashtoad2$ = instance_npcname("Ash Toad#ozmd2");
|
.@ashtoad2$ = instance_npcname("Ash Toad#ozmd2");
|
||||||
.@maggi4$ = instance_npcname("Magi#ozmd4");
|
.@maggi4$ = instance_npcname("Maggi#ozmd4");
|
||||||
.@mark4$ = instance_npcname("Mark#ozmd4");
|
.@mark4$ = instance_npcname("Mark#ozmd4");
|
||||||
.@ashtoad3$ = instance_npcname("Ash Toad#ozmd3");
|
.@ashtoad3$ = instance_npcname("Ash Toad#ozmd3");
|
||||||
.@maram4$ = instance_npcname("Maram#ozmd4");
|
.@maram4$ = instance_npcname("Maram#ozmd4");
|
||||||
@ -301,60 +277,59 @@ OnMobDead:
|
|||||||
npctalk "Tamarin: I did it!!!", .@tamarin4$;
|
npctalk "Tamarin: I did it!!!", .@tamarin4$;
|
||||||
disablenpc .@ashtoad2$;
|
disablenpc .@ashtoad2$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Magi: Me too!!", .@maggi4$;
|
npctalk "Magi: This way too!!", .@maggi4$;
|
||||||
disablenpc .@ashtoad3$;
|
disablenpc .@ashtoad3$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: Huh It wasn't a great monster, but it would have been dangerous if they were ordinary merchants.", .@miriam4$;
|
npctalk "Miriam: Huh... It wasn't a great monster, but it would have been dangerous for ordinary merchants.", .@miriam4$;
|
||||||
disablenpc .@ashtoad1$;
|
disablenpc .@ashtoad1$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram : " + strcharinfo(0) + " Are you okay?", .@maram4$;
|
cloakoffnpcself( .@maram4$ );
|
||||||
enablenpc .@maram4$;
|
npctalk "Maram : " + strcharinfo(0) + ", are you okay?", .@maram4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: You're late! Maram!!!", .@miriam4$;
|
npctalk "Miriam: You're late! Maram!!!", .@miriam4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: I met a monster on the way, so I'm a little late.", .@maram4$;
|
npctalk "Maram: I was a little late because I met a monster on the way.", .@maram4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: There were no monsters on the road we passed earlier.", .@miriam4$;
|
npctalk "Miriam: There were no monsters on the road we passed earlier.", .@miriam4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: Yeah? Where the hell do monsters spring up like this...", .@maram4$;
|
npctalk "Maram: Really? Where on earth do monsters like this come from?", .@maram4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: It's a big deal because it's getting harder and harder to move goods because of these monsters.", .@maram4$;
|
npctalk "Maram: It's a big problem because it's getting harder to move supplies because of these monsters.", .@maram4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Tamarin: If you go to the ground?", .@tamarin4$;
|
npctalk "Tamarin: What if you travel by land?", .@tamarin4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Tamarin: I heard there used to be a bridge to cross a canyon?", .@tamarin4$;
|
npctalk "Tamarin: I heard there used to be a bridge across the canyon?", .@tamarin4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Tamarin: Because there are still remains...", .@tamarin4$;
|
npctalk "Tamarin: There are still remains left...", .@tamarin4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: It is said that the bridge above was destroyed when they saw the natives crossing to escape the hardliners' attacks.", .@maram4$;
|
npctalk "Maram: It is said that the bridge above was destroyed after seeing natives crossing it while fleeing an attack by hardliners.", .@maram4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: The land across the bridge has become uninhabitable due to volcanic ash, so it must have been the intention to dry it to death.", .@maram4$;
|
npctalk "Maram: The area across the bridge has become uninhabitable due to volcanic ash, so they must have been trying to kill him.", .@maram4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: It's not difficult to make a bridge again...", .@maram4$;
|
npctalk "Maram: It's not difficult to build a bridge again...", .@maram4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: You can't advertise that you're hiding here by making a bridge because you're in hiding.", .@maram4$;
|
npctalk "Maram: Since we are in a hiding position, we can't build a bridge or something and advertise that we are hiding here.", .@maram4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: It's dangerous and inconvenient right now, but I have no choice but to use the maze of Oz.", .@maram4$;
|
npctalk "Maram: Although it is dangerous and inconvenient now, we have no choice but to use the Maze of Oz.", .@maram4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: In this state, it may not have been noticed until now.", .@maram4$;
|
npctalk "Maram: Because it's in this condition, it may be that it hasn't been discovered until now.", .@maram4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: Without the Maze of Oz...", .@miriam4$;
|
npctalk "Miriam: If the Maze of Oz didn't exist...", .@miriam4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: It must have been a lot harder than it is now.", .@miriam4$;
|
npctalk "Miriam: It must have been much harder than it is now.", .@miriam4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: That's right", .@maram4$;
|
npctalk "Maram: That's right.", .@maram4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: Now, shall we walk the lovely maze of Oz again?", .@maram4$;
|
npctalk "Maram: Now then, shall we walk down the lovely maze of Oz again?", .@maram4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: What do you mean", .@miriam4$;
|
npctalk "Miriam: What do you mean...", .@miriam4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam : " + strcharinfo(0) + " From now on, go all the way down until you come to a fork.", .@miriam4$;
|
npctalk "Miriam : " + strcharinfo(0) + " , from now on, just keep going down until you reach a fork in the road.", .@miriam4$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: It would be nice if the monsters didn't appear...", .@miriam4$;
|
npctalk "Miriam: It would be nice if monsters didn't appear, but...", .@miriam4$;
|
||||||
sleep2 1000;
|
sleep2 1000;
|
||||||
disablenpc .@maram4$;
|
cloakonnpcself( .@maram4$ );
|
||||||
setpcblock PCBLOCK_NPC, false;
|
setpcblock PCBLOCK_NPC, false;
|
||||||
|
|
||||||
disablenpc .@maggi4$;
|
disablenpc .@maggi4$;
|
||||||
disablenpc .@mark4$;
|
disablenpc .@mark4$;
|
||||||
disablenpc .@tamarin4$;
|
disablenpc .@tamarin4$;
|
||||||
@ -366,43 +341,43 @@ OnMobDead:
|
|||||||
1@oz,156,272,5 duplicate(dummy_disabled_npc) Ash Toad#ozmd1 EP18_ASH_TOAD
|
1@oz,156,272,5 duplicate(dummy_disabled_npc) Ash Toad#ozmd1 EP18_ASH_TOAD
|
||||||
1@oz,164,272,3 duplicate(dummy_disabled_npc) Ash Toad#ozmd2 EP18_ASH_TOAD
|
1@oz,164,272,3 duplicate(dummy_disabled_npc) Ash Toad#ozmd2 EP18_ASH_TOAD
|
||||||
1@oz,153,275,5 duplicate(dummy_disabled_npc) Ash Toad#ozmd3 EP18_ASH_TOAD
|
1@oz,153,275,5 duplicate(dummy_disabled_npc) Ash Toad#ozmd3 EP18_ASH_TOAD
|
||||||
1@oz,155,275,3 duplicate(dummy_disabled_npc) Magi#ozmd4 4_4JOB_MAGGI
|
1@oz,155,275,3 duplicate(dummy_disabled_npc) Maggi#ozmd4 4_4JOB_MAGGI
|
||||||
1@oz,156,274,3 duplicate(dummy_disabled_npc) Mark#ozmd4 4_EP18_MARK
|
1@oz,156,274,3 duplicate(dummy_disabled_npc) Mark#ozmd4 4_EP18_MARK
|
||||||
1@oz,161,272,5 duplicate(dummy_disabled_npc) Tamarin#ozmd4 4_EP18_TAMARIN
|
1@oz,161,272,5 duplicate(dummy_disabled_npc) Tamarin#ozmd4 4_EP18_TAMARIN
|
||||||
|
|
||||||
1@oz,162,275,3 duplicate(dummy_npc) Maram#ozmd4 4_EP18_MARAM
|
1@oz,162,275,3 duplicate(dummy_cloaked_npc) Maram#ozmd4 4_EP18_MARAM
|
||||||
|
|
||||||
|
|
||||||
// Step 6
|
// Step 6
|
||||||
1@oz,98,172,3 script Maram#ozmd5 EP18_NPC_MARAM,{
|
1@oz,98,172,3 script(DISABLED) Maram#ozmd5 EP18_NPC_MARAM,{
|
||||||
if ('event_oz != 5)
|
if ('event_oz != 5)
|
||||||
end;
|
end;
|
||||||
'event_oz = 6;
|
'event_oz = 6;
|
||||||
.@miriam$ = instance_npcname("Miriam#ozmd5");
|
.@miriam$ = instance_npcname("Miriam#ozmd5");
|
||||||
.@maram$ = instance_npcname("Maram#ozmd5");
|
.@maram$ = instance_npcname("Maram#ozmd5");
|
||||||
|
|
||||||
|
npctalk "Maram: It wasn't like this before, but as the ground below begins to melt, perhaps due to the effects of Mount Tor, more monsters are appearing.", .@maram$;
|
||||||
|
cloakoffnpcself( "Maggi#ozmd5" );
|
||||||
|
cloakoffnpcself( "Mark#ozmd5" );
|
||||||
|
cloakoffnpcself( "Tamarin#ozmd5" );
|
||||||
enablenpc .@miriam$;
|
enablenpc .@miriam$;
|
||||||
enablenpc instance_npcname("Magi#ozmd5");
|
|
||||||
enablenpc instance_npcname("Mark#ozmd5");
|
|
||||||
enablenpc instance_npcname("Tamarin#ozmd5");
|
|
||||||
npctalk "Maram: It wasn't like this before, but maybe it's the effect of Tor Volcano, as the ground below starts to melt, so more monsters are appearing.";
|
|
||||||
setpcblock PCBLOCK_NPC, true;
|
setpcblock PCBLOCK_NPC, true;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: Especially in areas with a lot of molten ground, when trying to avoid monsters, the lava Because there are many people who are seriously injured or never come back... ";
|
npctalk "Maram: Especially in areas where the ground has melted a lot, there are many people who try to avoid monsters and end up seriously injured or unable to return due to the lava...", .@maram$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: How long will the maze of Oz last...";
|
npctalk "Maram: How long will the maze of Oz endure...", .@maram$;
|
||||||
sleep2 3000;
|
sleep2 3000;
|
||||||
mapannounce 'map_name$, "??? : ugh!!!!!!!!!!!!!!!!!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
|
mapannounce 'map_name$, "??? : Ugh!!!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: This voice?!?!?!?!?";
|
npctalk "Maram: What is this voice?!?!?!?!?", .@maram$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: Imril!!!!", .@miriam$;
|
npctalk "Miriam: Imril!!!!", .@miriam$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
setpcblock PCBLOCK_NPC, false;
|
setpcblock PCBLOCK_NPC, false;
|
||||||
npctalk "Maram: I think your friend is in trouble! I'll go first, so please follow me carefully!";
|
npctalk "Maram: I think my friend is in trouble! I'll go first, so be careful and follow me!", .@maram$;
|
||||||
disablenpc instance_npcname("Magi#ozmd5");
|
cloakonnpcself( "Maggi#ozmd5" );
|
||||||
disablenpc instance_npcname("Mark#ozmd5");
|
cloakonnpcself( "Mark#ozmd5" );
|
||||||
disablenpc instance_npcname("Tamarin#ozmd5");
|
cloakonnpcself( "Tamarin#ozmd5" );
|
||||||
unitwalk getnpcid(0),68,165, .@maram$ + "::OnMove";
|
unitwalk getnpcid(0),68,165, .@maram$ + "::OnMove";
|
||||||
donpcevent .@miriam$ + "::OnMove";
|
donpcevent .@miriam$ + "::OnMove";
|
||||||
end;
|
end;
|
||||||
@ -413,33 +388,33 @@ OnMove:
|
|||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@oz,97,167,3 script Miriam#ozmd5 EP18_NPC_MIRIAM,{
|
1@oz,97,167,3 script(DISABLED) Miriam#ozmd5 EP18_NPC_MIRIAM,{
|
||||||
end;
|
end;
|
||||||
OnMove:
|
OnMove:
|
||||||
npcwalkto 67,164;
|
npcwalkto 67,164;
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@oz,92,170,3 duplicate(dummy_npc) Magi#ozmd5 4_4JOB_MAGGI
|
1@oz,92,170,3 duplicate(dummy_cloaked_npc) Maggi#ozmd5 4_4JOB_MAGGI
|
||||||
1@oz,91,169,3 duplicate(dummy_npc) Mark#ozmd5 4_EP18_MARK
|
1@oz,91,169,3 duplicate(dummy_cloaked_npc) Mark#ozmd5 4_EP18_MARK
|
||||||
1@oz,89,170,5 duplicate(dummy_npc) Tamarin#ozmd5 4_EP18_TAMARIN
|
1@oz,89,170,5 duplicate(dummy_cloaked_npc) Tamarin#ozmd5 4_EP18_TAMARIN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Step 7
|
// Step 7
|
||||||
1@oz,68,165,3 script Maram#ozmd7 4_EP18_MARAM,{
|
1@oz,68,165,3 script(DISABLED) Maram#ozmd7 4_EP18_MARAM,{
|
||||||
if ('event_oz != 6)
|
if ('event_oz != 6)
|
||||||
end;
|
end;
|
||||||
'event_oz = 7;
|
'event_oz = 7;
|
||||||
npctalk "Maram: Are you okay, Imril?";
|
npctalk "Maram: Imril are you okay?";
|
||||||
donpcevent instance_npcname("Imril#ozmd6") + "::OnStart";
|
donpcevent instance_npcname("Imril#ozmd6") + "::OnStart";
|
||||||
disablenpc instance_npcname("Maram#ozmd7");
|
disablenpc();
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Step 8
|
// Step 8
|
||||||
1@oz,61,163,5 script Imril#ozmd6 4_EP18_IMRIL,{
|
1@oz,61,163,5 script(DISABLED) Imril#ozmd6 4_EP18_IMRIL,{
|
||||||
end;
|
end;
|
||||||
|
|
||||||
OnStart:
|
OnStart:
|
||||||
@ -460,56 +435,57 @@ OnMobDead:
|
|||||||
.@maram8$ = instance_npcname("Maram#ozmd8");
|
.@maram8$ = instance_npcname("Maram#ozmd8");
|
||||||
.@imril6$ = instance_npcname("Imril#ozmd6");
|
.@imril6$ = instance_npcname("Imril#ozmd6");
|
||||||
.@miriam5$ = instance_npcname("Miriam#ozmd5");
|
.@miriam5$ = instance_npcname("Miriam#ozmd5");
|
||||||
.@maggi6$ = instance_npcname("Magi#ozmd6");
|
.@maggi6$ = instance_npcname("Maggi#ozmd6");
|
||||||
.@mark6$ = instance_npcname("Mark#ozmd6");
|
.@mark6$ = instance_npcname("Mark#ozmd6");
|
||||||
.@tamarin6$ = instance_npcname("Tamarin#ozmd6");
|
.@tamarin6$ = instance_npcname("Tamarin#ozmd6");
|
||||||
|
|
||||||
setpcblock PCBLOCK_NPC, true;
|
setpcblock PCBLOCK_NPC, true;
|
||||||
enablenpc .@maram8$;
|
|
||||||
npctalk "Imril: Thanks! We almost died!", .@imril6$;
|
cloakoffnpcself( .@maram8$ );
|
||||||
|
npctalk "Imril: Thank you! I almost died!", .@imril6$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Imril: Don't go downstairs because the atmosphere isn't too bad.", .@imril6$;
|
npctalk "Imril: The atmosphere is unusual, so don't go downstairs.", .@imril6$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: You seem to see monsters more often than last time.", .@miriam5$;
|
npctalk "Miriam: It seems like I see monsters more often than last time.", .@miriam5$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Imril: But what about those people?", .@imril6$;
|
npctalk "Imril: And what about those people?", .@imril6$;
|
||||||
enablenpc .@maggi6$;
|
cloakoffnpcself( .@maggi6$ );
|
||||||
enablenpc .@mark6$;
|
cloakoffnpcself( .@mark6$ );
|
||||||
enablenpc .@tamarin6$;
|
cloakoffnpcself( .@tamarin6$ );
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: They are adventurers who sometimes help with mother's work.", .@maram8$;
|
npctalk "Maram: They are adventurers who sometimes help my mother with her work.", .@maram8$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: Trustworthy people, don't be so wary.", .@maram8$;
|
npctalk "Maram: These are trustworthy people, so don't be so wary.", .@maram8$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Imril: Because you trust people too easily.", .@imril6$;
|
npctalk "Imril: I heard you trust people too easily.", .@imril6$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: Yes.", .@miriam5$;
|
npctalk "Miriam: Yes.", .@miriam5$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: Anyway, let's escape before more monsters come out.", .@maram8$;
|
npctalk "Maram: Anyway, let's escape quickly before more monsters appear.", .@maram8$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: Not long left.", .@maram8$;
|
npctalk "Maram: Not much left.", .@maram8$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Maram: It's hard to see, but just follow the road up here!", .@maram8$;
|
npctalk "Maram: It's hard to see, but you can follow the road up here and keep moving!", .@maram8$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Tamarin: I think this is the way!", .@tamarin6$;
|
npctalk "Tamarin: I think this is the way!", .@tamarin6$;
|
||||||
disablenpc .@maggi6$;
|
cloakonnpcself( .@maggi6$ );
|
||||||
disablenpc .@mark6$;
|
cloakonnpcself( .@mark6$ );
|
||||||
disablenpc .@tamarin6$;
|
cloakonnpcself( .@tamarin6$ );
|
||||||
disablenpc .@maram8$;
|
cloakonnpcself( .@maram8$ );
|
||||||
enablenpc instance_npcname("#oz_way");
|
enablenpc instance_npcname("#oz_way");
|
||||||
setpcblock PCBLOCK_NPC, false;
|
setpcblock PCBLOCK_NPC, false;
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@oz,68,165,3 duplicate(dummy_npc) Maram#ozmd8 4_EP18_MARAM
|
1@oz,68,165,3 duplicate(dummy_cloaked_npc) Maram#ozmd8 4_EP18_MARAM
|
||||||
1@oz,61,168,3 duplicate(dummy_npc) Magi#ozmd6 4_4JOB_MAGGI
|
1@oz,61,168,3 duplicate(dummy_cloaked_npc) Maggi#ozmd6 4_4JOB_MAGGI
|
||||||
1@oz,65,167,3 duplicate(dummy_npc) Mark#ozmd6 4_EP18_MARK
|
1@oz,65,167,3 duplicate(dummy_cloaked_npc) Mark#ozmd6 4_EP18_MARK
|
||||||
1@oz,59,171,3 duplicate(dummy_npc) Tamarin#ozmd6 4_EP18_TAMARIN
|
1@oz,59,171,3 duplicate(dummy_cloaked_npc) Tamarin#ozmd6 4_EP18_TAMARIN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Step 9
|
// Step 9
|
||||||
1@oz,58,256,5 script #oz_way 1_SHADOW_NPC,3,3,{
|
1@oz,58,256,5 script(DISABLED) #oz_way 1_SHADOW_NPC,3,3,{
|
||||||
end;
|
end;
|
||||||
OnTouch:
|
OnTouch:
|
||||||
if ('event_oz != 8)
|
if ('event_oz != 8)
|
||||||
@ -520,11 +496,11 @@ OnTouch:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Step 10 (maybe not required ?)
|
// Step 10 (maybe not required ?)
|
||||||
1@oz,44,255,5 script Maram#ozmd6 4_EP18_MARAM,{
|
1@oz,44,255,5 script(DISABLED) Maram#ozmd6 4_EP18_MARAM,{
|
||||||
if ('event_oz != 9)
|
if ('event_oz != 9)
|
||||||
end;
|
end;
|
||||||
'event_oz = 10;
|
'event_oz = 10;
|
||||||
npctalk "Maram: This way!!!";
|
npctalk "Maram: Go down this road.";
|
||||||
initnpctimer;
|
initnpctimer;
|
||||||
end;
|
end;
|
||||||
OnTimer2000:
|
OnTimer2000:
|
||||||
@ -536,7 +512,7 @@ OnTimer2000:
|
|||||||
|
|
||||||
// Step 11
|
// Step 11
|
||||||
// (Step 29 on the main quest).
|
// (Step 29 on the main quest).
|
||||||
1@oz,21,189,5 script Maram#ozmd9 4_EP18_MARAM,{
|
1@oz,21,189,5 script(DISABLED) Maram#ozmd9 4_EP18_MARAM,{
|
||||||
if ('event_oz != 10)
|
if ('event_oz != 10)
|
||||||
end;
|
end;
|
||||||
'event_oz = 11;
|
'event_oz = 11;
|
||||||
@ -546,50 +522,47 @@ OnTimer2000:
|
|||||||
.@imril7$ = instance_npcname("Imril#ozmd7");
|
.@imril7$ = instance_npcname("Imril#ozmd7");
|
||||||
|
|
||||||
setpcblock PCBLOCK_NPC, true;
|
setpcblock PCBLOCK_NPC, true;
|
||||||
npctalk "Maram: Climb up the rope in front of this to get out.", .@maram9$;
|
npctalk "Maram: If you climb up the rope in front of here, you can go outside.", .@maram9$;
|
||||||
enablenpc .@miriam7$;
|
cloakoffnpcself( .@miriam7$ );
|
||||||
enablenpc .@imril7$;
|
cloakoffnpcself( .@imril7$ );
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Imril: I'll go get some hidden stuff here, so go up first.", .@imril7$;
|
npctalk "Imril: I'll take some hidden items here, so go up first.", .@imril7$;
|
||||||
sleep2 2000;
|
sleep2 2000;
|
||||||
npctalk "Miriam: Everyone is very tired. Let's go upstairs.", .@miriam7$;
|
npctalk "Miriam: Everyone is very tired. Let's go up quickly.", .@miriam7$;
|
||||||
if (ep18_1_main == 30) {
|
if (ep18_main == 30) {
|
||||||
changequest 11719,11720;
|
erasequest 11719;
|
||||||
ep18_1_main = 31;
|
setquest 11720;
|
||||||
|
ep18_main = 31;
|
||||||
}
|
}
|
||||||
disablenpc .@miriam7$;
|
cloakonnpcself( .@miriam7$ );
|
||||||
disablenpc .@imril7$;
|
cloakonnpcself( .@imril7$ );
|
||||||
setpcblock PCBLOCK_NPC, false;
|
setpcblock PCBLOCK_NPC, false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
OnInstanceInit:
|
OnInstanceInit:
|
||||||
disablenpc instance_npcname("Maram#ozmd9");
|
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
|
||||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
|
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@oz,22,187,5 duplicate(dummy_npc) Miriam#ozmd7 4_EP18_MIRIAM
|
1@oz,22,187,5 duplicate(dummy_cloaked_npc) Miriam#ozmd7 4_EP18_MIRIAM
|
||||||
1@oz,16,185,3 duplicate(dummy_npc) Imril#ozmd7 4_EP18_IMRIL
|
1@oz,16,185,3 duplicate(dummy_cloaked_npc) Imril#ozmd7 4_EP18_IMRIL
|
||||||
|
|
||||||
|
|
||||||
// Step 12
|
// Step 12
|
||||||
1@oz,28,190,3 script(DISABLED) Rope#outoz2 4_ROPEPILE,{
|
1@oz,28,190,3 script(DISABLED) Rope#outoz2 4_ROPEPILE,{
|
||||||
if ('event_oz < 11)
|
if ('event_oz != 11) {
|
||||||
end;
|
mes "It can't be used yet. Let's talk to Maram first.";
|
||||||
mes "I think I can climb up with a rope.";
|
close;
|
||||||
next;
|
|
||||||
switch( select( "Use a rope to climb", "Do not use" ) ) {
|
|
||||||
case 1:
|
|
||||||
close2;
|
|
||||||
warp "gw_fild01",275,337;
|
|
||||||
end;
|
|
||||||
case 2:
|
|
||||||
end;
|
|
||||||
}
|
}
|
||||||
|
mes "I think I can climb up using the rope.";
|
||||||
|
next;
|
||||||
|
if (select( "Use the rope to climb up.", "Do not use." ) == 2)
|
||||||
|
end;
|
||||||
|
warp "gw_fild01",275,337;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
OnInstanceInit:
|
OnInstanceInit:
|
||||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11720) == 1" );
|
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(11720) == 1" );
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -601,7 +574,7 @@ OnTouch_:
|
|||||||
getmapxy .@map$,.@x,.@y, BL_NPC;
|
getmapxy .@map$,.@x,.@y, BL_NPC;
|
||||||
monster 'map_name$,.@x-1,.@y,"Ash Toad",21295,1; // EP18_ASH_TOAD
|
monster 'map_name$,.@x-1,.@y,"Ash Toad",21295,1; // EP18_ASH_TOAD
|
||||||
monster 'map_name$,.@x+1,.@y,"Rake Hand",21296,1; // EP18_RAKEHAND
|
monster 'map_name$,.@x+1,.@y,"Rake Hand",21296,1; // EP18_RAKEHAND
|
||||||
disablenpc instance_npcname( strnpcinfo(0) );
|
cloakonnpcself();
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -612,4 +585,3 @@ OnTouch_:
|
|||||||
1@oz,79,203,5 duplicate(#oz01) #oz06 1_SHADOW_NPC,4,4
|
1@oz,79,203,5 duplicate(#oz01) #oz06 1_SHADOW_NPC,4,4
|
||||||
1@oz,124,261,5 duplicate(#oz01) #oz07 1_SHADOW_NPC,4,4
|
1@oz,124,261,5 duplicate(#oz01) #oz07 1_SHADOW_NPC,4,4
|
||||||
1@oz,139,279,5 duplicate(#oz01) #oz08 1_SHADOW_NPC,4,4
|
1@oz,139,279,5 duplicate(#oz01) #oz08 1_SHADOW_NPC,4,4
|
||||||
|
|
||||||
|
|||||||
@ -2,54 +2,56 @@
|
|||||||
//= Instance: Thor Gunsu Base.
|
//= Instance: Thor Gunsu Base.
|
||||||
//===== Description: =========================================
|
//===== Description: =========================================
|
||||||
//- [Walkthrough conversion]
|
//- [Walkthrough conversion]
|
||||||
//- Part of the episode 18.1 main quest.
|
//- Part of the Episode 18 main quest.
|
||||||
//===== Changelogs: ==========================================
|
//===== Changelogs: ==========================================
|
||||||
//= 1.0 First version. [Capuche]
|
//= 1.0 First version. [Capuche]
|
||||||
//============================================================
|
//============================================================
|
||||||
|
|
||||||
// Main Quest: Step 47.
|
// Main Quest: Step 47.
|
||||||
que_thr,133,53,5 script Maram#Armybase1 4_EP18_MARAM,{
|
que_thr,133,53,5 script Maram#Armybase1 4_EP18_MARAM,{
|
||||||
if (ep18_1_main != 45 && ep18_1_main != 46)
|
if (ep18_main < 45 || ep18_main > 46)
|
||||||
end;
|
end;
|
||||||
if (ep18_1_main == 45) {
|
if (ep18_main == 45) {
|
||||||
cutin "ep18_maram_01.png",2;
|
cutin "ep18_maram_01.png",2;
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "You have arrived, adventurer!";
|
mes "You've arrived, adventurer!";
|
||||||
mes "You did a great job getting here.";
|
mes "Thank you for coming all the way here.";
|
||||||
next;
|
next;
|
||||||
cutin "ep18_maram_03.png",2;
|
cutin "ep18_maram_03.png",2;
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "After all, it looks like this next one is real. The guards are different from before...";
|
mes "It seems like this is the real deal after all. The security here is different from what it has been so far....";
|
||||||
mes "Let's look inside, being careful not to be caught by the guards.";
|
mes "Let's be careful not to be caught by the guards and explore the inside.";
|
||||||
next;
|
next;
|
||||||
cutin "ep18_maram_01.png",2;
|
cutin "ep18_maram_01.png",2;
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "Make sure to move out of sight of the guards as much as possible.";
|
mes "Try to move away from the security guard's line of sight as much as possible.";
|
||||||
mes "If you make a mistake, you will be attacked, so if you don't break through, we'll meet again here.";
|
mes "If you get caught, you might be attacked, so if you can't break through, we'll meet again here.";
|
||||||
changequest 16577,16578;
|
erasequest 16577;
|
||||||
ep18_1_main = 46;
|
setquest 16578;
|
||||||
|
ep18_main = 46;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
else if (ep18_1_main == 46) {
|
else if (ep18_main == 46) {
|
||||||
|
cutin "ep18_maram_01.png",2;
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "Let's try to get in as far as possible from the guard tower.";
|
mes "Let's try to go in while avoiding the guard tower as much as possible.";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
.@md_name$ = "Thor Gunsu Base";
|
.@md_name$ = "Thor Military Base";
|
||||||
cutin "",255;
|
cutin "",255;
|
||||||
mes "^FF0000 Any arbitrary processing such as taming monsters in the dungeon is not considered normal. Please note.^000000";
|
mes "^FF0000Caution : If you perform arbitrary processing within the dungeon, such as monster taming, it will not be considered normal progress.^000000";
|
||||||
next;
|
next;
|
||||||
// player has party
|
// player has party
|
||||||
if (is_party_leader()) {
|
if (is_party_leader())
|
||||||
// player is leader of the party
|
// player is leader of the party
|
||||||
.@create$ = "Open " + .@md_name$;
|
.@create$ = "Apply for entry to " + .@md_name$ + "";
|
||||||
}
|
|
||||||
switch( select( .@create$, .@md_name$ + " entry" ) ) {
|
switch( select( .@create$, "Enter " + .@md_name$ + "" ) ) {
|
||||||
case 1:
|
case 1:
|
||||||
cutin "ep18_maram_01.png",2;
|
cutin "ep18_maram_01.png",2;
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "When the application is complete, talk to me again and select ^0000CD Thor military base entry^000000";
|
mes "When the application is complete, talk to me again and select ^0000CD" + .@md_name$ + " entry^000000";
|
||||||
if (instance_create(.@md_name$) < 0) {
|
if (instance_create(.@md_name$) < 0) {
|
||||||
mes "Party: " + getpartyname(getcharid(1)) + "";
|
mes "Party: " + getpartyname(getcharid(1)) + "";
|
||||||
mes "Leader: " + strcharinfo(0) + "";
|
mes "Leader: " + strcharinfo(0) + "";
|
||||||
@ -67,14 +69,14 @@ que_thr,133,53,5 script Maram#Armybase1 4_EP18_MARAM,{
|
|||||||
case IE_NOINSTANCE:
|
case IE_NOINSTANCE:
|
||||||
cutin "ep18_maram_01.png",2;
|
cutin "ep18_maram_01.png",2;
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "I don't think the dungeon has been created yet? Please check later.";
|
mes "It seems like you haven't created the dungeon yet. Please check again in a moment.";
|
||||||
close3;
|
close3;
|
||||||
case IE_NOMEMBER:
|
case IE_NOMEMBER:
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "^ff0000Only a member of the party can enter the Memorial Dungeon.^000000";
|
mes "^ff0000Only a member of the party can enter the Memorial Dungeon.^000000";
|
||||||
close;
|
close;
|
||||||
case IE_OK:
|
case IE_OK:
|
||||||
mapannounce "que_thr", "" + strcharinfo(0) + " of the party, " + getpartyname( getcharid(1) ) + ", is entering " + .@md_name$ + ".",bc_map,"0x00ff99",FW_NORMAL,12;
|
mapannounce "que_thr", "" + strcharinfo(0) + " of the party, " + getpartyname( getcharid(1) ) + ", is entering " + .@md_name$ + ".", bc_map, 0xFF99;
|
||||||
// warp 1@tcamp,103,237;
|
// warp 1@tcamp,103,237;
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
@ -82,34 +84,24 @@ que_thr,133,53,5 script Maram#Armybase1 4_EP18_MARAM,{
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
OnInit:
|
OnInit:
|
||||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(16577) == 1" );
|
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(16577) == 1" );
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@tcamp,106,237,3 script Maram#base1 4_EP18_MARAM,{
|
1@tcamp,106,237,3 script Maram#Base1 4_EP18_MARAM,{
|
||||||
cutin "ep18_maram_01.png",2;
|
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "Be careful and explore the inside.";
|
mes "Be careful and explore inside.";
|
||||||
mes "I heard from Mr. Dandelion earlier, there aren't many people, but there are Watch Towers here and there that monitor a fairly wide area.";
|
mes "From what I heard from Dandelion earlier, there aren't many people, but there are watchtowers here and there that monitor a fairly wide area.";
|
||||||
next;
|
next;
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "If you get caught by the Watch Tower, soldiers will appear, so be careful not to get caught.";
|
mes "If you get caught by the watchtower, soldiers will appear, so be careful not to get caught.";
|
||||||
mes "Well, if you find something, please contact me!";
|
mes "Well, if you find anything, please contact me!";
|
||||||
close3;
|
close;
|
||||||
|
|
||||||
OnInstanceInit:
|
OnInstanceInit:
|
||||||
|
'step = 0;
|
||||||
'map_tcamp$ = instance_mapname("1@tcamp");
|
'map_tcamp$ = instance_mapname("1@tcamp");
|
||||||
|
|
||||||
disablenpc instance_npcname("Document Pile#Site1");
|
|
||||||
disablenpc instance_npcname("Document Pile#Site2");
|
|
||||||
disablenpc instance_npcname("Document Pile#Site3");
|
|
||||||
disablenpc instance_npcname("Document Pile#Site4");
|
|
||||||
disablenpc instance_npcname("Document Pile#Site5");
|
|
||||||
disablenpc instance_npcname("Maram#Lock1");
|
|
||||||
disablenpc instance_npcname("Maram#Lock2");
|
|
||||||
disablenpc instance_npcname("Maram#Lock3");
|
|
||||||
disablenpc instance_npcname("Maram#Lock4");
|
|
||||||
|
|
||||||
setcell 'map_tcamp$,137,216,142,216,cell_walkable,0;
|
setcell 'map_tcamp$,137,216,142,216,cell_walkable,0;
|
||||||
setcell 'map_tcamp$,135,145,144,145,cell_walkable,0;
|
setcell 'map_tcamp$,135,145,144,145,cell_walkable,0;
|
||||||
setcell 'map_tcamp$,223,105,223,110,cell_walkable,0;
|
setcell 'map_tcamp$,223,105,223,110,cell_walkable,0;
|
||||||
@ -128,11 +120,11 @@ OnInstanceInit:
|
|||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
// Traps
|
// Traps
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
1@tcamp,120,228,3 script Watch Tower#Watch1 4_SYSTEM_BOX,7,7,{
|
1@tcamp,120,228,3 script Watchtower#Watch1 4_SYSTEM_BOX,7,7,{
|
||||||
end;
|
end;
|
||||||
OnTouch: // note: hidden player trigger the event
|
OnTouch: // note: hidden player trigger the event
|
||||||
npctalk "Detect intruders. Exclude them.";
|
npctalk "Intruder detected !!";
|
||||||
mapannounce 'map_tcamp$, "Intruder detected, intruder detected. We rule out immediately.", bc_map, 0xFF0000;
|
mapannounce 'map_tcamp$, "Intruder found, intruder found. Ruled out immediately.", bc_map, 0xFF0000;
|
||||||
getmapxy .@map$,.@x,.@y, BL_NPC;
|
getmapxy .@map$,.@x,.@y, BL_NPC;
|
||||||
|
|
||||||
areamonster 'map_tcamp$,.@x-2,.@y-2,.@x+2,.@y+2,"Base Soldier",21309,3; // EP18_MD_THOR_GUARD
|
areamonster 'map_tcamp$,.@x-2,.@y-2,.@x+2,.@y+2,"Base Soldier",21309,3; // EP18_MD_THOR_GUARD
|
||||||
@ -147,316 +139,338 @@ OnInstanceInit:
|
|||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@tcamp,135,228,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch2 4_SYSTEM_BOX,7,7
|
1@tcamp,135,228,3 duplicate(Watchtower#Watch1) Watchtower#Watch2 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,152,133,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch3 4_SYSTEM_BOX,7,7
|
1@tcamp,152,133,3 duplicate(Watchtower#Watch1) Watchtower#Watch3 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,167,133,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch4 4_SYSTEM_BOX,7,7
|
1@tcamp,167,133,3 duplicate(Watchtower#Watch1) Watchtower#Watch4 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,182,133,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch5 4_SYSTEM_BOX,7,7
|
1@tcamp,182,133,3 duplicate(Watchtower#Watch1) Watchtower#Watch5 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,161,96,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch6 4_SYSTEM_BOX,7,7
|
1@tcamp,161,96,3 duplicate(Watchtower#Watch1) Watchtower#Watch6 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,146,96,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch7 4_SYSTEM_BOX,7,7
|
1@tcamp,146,96,3 duplicate(Watchtower#Watch1) Watchtower#Watch7 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,116,102,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch8 4_SYSTEM_BOX,7,7
|
1@tcamp,116,102,3 duplicate(Watchtower#Watch1) Watchtower#Watch8 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,88,92,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch9 4_SYSTEM_BOX,7,7
|
1@tcamp,88,92,3 duplicate(Watchtower#Watch1) Watchtower#Watch9 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,240,148,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch10 4_SYSTEM_BOX,7,7
|
1@tcamp,240,148,3 duplicate(Watchtower#Watch1) Watchtower#Watch10 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,156,71,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch11 4_SYSTEM_BOX,7,7
|
1@tcamp,156,71,3 duplicate(Watchtower#Watch1) Watchtower#Watch11 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,176,194,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch12 4_SYSTEM_BOX,7,7
|
1@tcamp,176,194,3 duplicate(Watchtower#Watch1) Watchtower#Watch12 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,192,194,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch13 4_SYSTEM_BOX,7,7
|
1@tcamp,192,194,3 duplicate(Watchtower#Watch1) Watchtower#Watch13 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,142,153,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch14 4_SYSTEM_BOX,7,7
|
1@tcamp,142,153,3 duplicate(Watchtower#Watch1) Watchtower#Watch14 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,142,168,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch15 4_SYSTEM_BOX,7,7
|
1@tcamp,142,168,3 duplicate(Watchtower#Watch1) Watchtower#Watch15 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,192,179,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch16 4_SYSTEM_BOX,7,7
|
1@tcamp,192,179,3 duplicate(Watchtower#Watch1) Watchtower#Watch16 4_SYSTEM_BOX,7,7
|
||||||
1@tcamp,237,90,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch17 4_SYSTEM_BOX,7,7
|
1@tcamp,237,90,3 duplicate(Watchtower#Watch1) Watchtower#Watch17 4_SYSTEM_BOX,7,7
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
// Walls
|
// Walls
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
1@tcamp,138,216,3 script Lock#1-1 4_ROPEPILE,{
|
1@tcamp,138,216,3 script Lock Device#1-1 4_ROPEPILE,{
|
||||||
.@maram$ = instance_npcname("Maram#Lock1");
|
.@maram$ = instance_npcname("Maram#Lock Device1");
|
||||||
enablenpc .@maram$;
|
enablenpc .@maram$;
|
||||||
npctalk "Maram: Wait a minute. I know how to open it.", .@maram$;
|
npctalk "Maram: Please wait a moment. I know how to open it.", .@maram$;
|
||||||
progressbar_npc "3131FF",10;
|
progressbar_npc "3131FF",10;
|
||||||
npctalk "Maram: Now we can pass!", .@maram$;
|
npctalk "Maram: Well, we can pass now!", .@maram$;
|
||||||
disablenpc instance_npcname("Lock#1-1");
|
disablenpc instance_npcname("Lock Device#1-1");
|
||||||
disablenpc instance_npcname("Lock#1-2");
|
disablenpc instance_npcname("Lock Device#1-2");
|
||||||
disablenpc .@maram$;
|
disablenpc .@maram$;
|
||||||
setcell 'map_tcamp$,137,216,142,216,cell_walkable,1;
|
setcell 'map_tcamp$,137,216,142,216,cell_walkable,1;
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
1@tcamp,141,216,3 duplicate(Lock#1-1) Lock#1-2 4_ROPEPILE
|
1@tcamp,141,216,3 duplicate(Lock Device#1-1) Lock Device#1-2 4_ROPEPILE
|
||||||
1@tcamp,140,218,3 duplicate(dummy_npc) Maram#Lock1 4_EP18_MARAM
|
1@tcamp,140,218,3 duplicate(dummy_disabled_npc) Maram#Lock Device1 4_EP18_MARAM
|
||||||
|
|
||||||
1@tcamp,136,145,3 script Lock#2-1 4_ROPEPILE,{
|
1@tcamp,136,145,3 script Lock Device#2-1 4_ROPEPILE,{
|
||||||
.@maram$ = instance_npcname("Maram#Lock2");
|
.@maram$ = instance_npcname("Maram#Lock Device2");
|
||||||
enablenpc .@maram$;
|
enablenpc .@maram$;
|
||||||
progressbar_npc "3131FF",10;
|
progressbar_npc "3131FF",10;
|
||||||
npctalk "It would be better to proceed with caution.", .@maram$;
|
npctalk "It would be better to proceed with caution.", .@maram$;
|
||||||
disablenpc instance_npcname("Lock#2-1");
|
disablenpc instance_npcname("Lock Device#2-1");
|
||||||
disablenpc instance_npcname("Lock#2-2");
|
disablenpc instance_npcname("Lock Device#2-2");
|
||||||
disablenpc instance_npcname("Lock#2-3");
|
disablenpc instance_npcname("Lock Device#2-3");
|
||||||
disablenpc instance_npcname("Lock#2-4");
|
disablenpc instance_npcname("Lock Device#2-4");
|
||||||
disablenpc .@maram$;
|
disablenpc .@maram$;
|
||||||
setcell 'map_tcamp$,135,145,144,145,cell_walkable,1;
|
setcell 'map_tcamp$,135,145,144,145,cell_walkable,1;
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
1@tcamp,138,145,3 duplicate(Lock#2-1) Lock#2-2 4_ROPEPILE
|
1@tcamp,138,145,3 duplicate(Lock Device#2-1) Lock Device#2-2 4_ROPEPILE
|
||||||
1@tcamp,141,145,3 duplicate(Lock#2-1) Lock#2-3 4_ROPEPILE
|
1@tcamp,141,145,3 duplicate(Lock Device#2-1) Lock Device#2-3 4_ROPEPILE
|
||||||
1@tcamp,143,145,3 duplicate(Lock#2-1) Lock#2-4 4_ROPEPILE
|
1@tcamp,143,145,3 duplicate(Lock Device#2-1) Lock Device#2-4 4_ROPEPILE
|
||||||
1@tcamp,142,147,3 duplicate(dummy_npc) Maram#Lock2 4_EP18_MARAM
|
1@tcamp,142,147,3 duplicate(dummy_disabled_npc) Maram#Lock Device2 4_EP18_MARAM
|
||||||
|
|
||||||
1@tcamp,223,109,3 script Lock#3-1 4_ROPEPILE,{
|
1@tcamp,223,109,3 script Lock Device#3-1 4_ROPEPILE,{
|
||||||
.@maram$ = instance_npcname("Maram#Lock3");
|
.@maram$ = instance_npcname("Maram#Lock Device3");
|
||||||
enablenpc .@maram$;
|
enablenpc .@maram$;
|
||||||
npctalk "Maram: This building looks pretty suspicious, right? There must be a surveillance system in it as well.", .@maram$;
|
npctalk "Maram: This building looks quite suspicious, right? There must be a surveillance system in here too.", .@maram$;
|
||||||
progressbar_npc "3131FF",10;
|
progressbar_npc "3131FF",10;
|
||||||
npctalk "Maram: Let's explore carefully, being careful not to get caught this time.", .@maram$;
|
npctalk "Maram: Let's explore carefully this time, being careful not to get caught.", .@maram$;
|
||||||
disablenpc instance_npcname("Lock#3-1");
|
disablenpc instance_npcname("Lock Device#3-1");
|
||||||
disablenpc instance_npcname("Lock#3-2");
|
disablenpc instance_npcname("Lock Device#3-2");
|
||||||
disablenpc .@maram$;
|
disablenpc .@maram$;
|
||||||
setcell 'map_tcamp$,223,105,223,110,cell_walkable,1;
|
setcell 'map_tcamp$,223,105,223,110,cell_walkable,1;
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
1@tcamp,223,106,3 duplicate(Lock#3-1) Lock#3-2 4_ROPEPILE
|
1@tcamp,223,106,3 duplicate(Lock Device#3-1) Lock Device#3-2 4_ROPEPILE
|
||||||
1@tcamp,226,114,3 duplicate(dummy_npc) Maram#Lock3 4_EP18_MARAM
|
1@tcamp,226,114,3 duplicate(dummy_disabled_npc) Maram#Lock Device3 4_EP18_MARAM
|
||||||
|
|
||||||
1@tcamp,80,99,3 script Lock#4-1 4_ROPEPILE,{
|
1@tcamp,80,99,3 script Lock Device#4-1 4_ROPEPILE,{
|
||||||
.@maram$ = instance_npcname("Maram#Lock4");
|
.@maram$ = instance_npcname("Maram#Lock Device4");
|
||||||
enablenpc .@maram$;
|
enablenpc .@maram$;
|
||||||
npctalk "Maram: I think you've gotten pretty deep. You should be able to find what you need safely.", .@maram$;
|
npctalk "Maram: Looks like we're in pretty deep. We should be able to safely find what we need.", .@maram$;
|
||||||
progressbar_npc "3131FF",10;
|
progressbar_npc "3131FF",10;
|
||||||
npctalk "Maram: Shall we wish you luck?", .@maram$;
|
npctalk "Maram: Shall we wish you good luck?", .@maram$;
|
||||||
disablenpc instance_npcname("Lock#4-1");
|
disablenpc instance_npcname("Lock Device#4-1");
|
||||||
disablenpc instance_npcname("Lock#4-2");
|
disablenpc instance_npcname("Lock Device#4-2");
|
||||||
disablenpc instance_npcname("Lock#4-3");
|
disablenpc instance_npcname("Lock Device#4-3");
|
||||||
disablenpc .@maram$;
|
disablenpc .@maram$;
|
||||||
setcell 'map_tcamp$,80,94,80,100,cell_walkable,1;
|
setcell 'map_tcamp$,80,94,80,100,cell_walkable,1;
|
||||||
|
|
||||||
enablenpc instance_npcname("Document Pile#Site1");
|
enablenpc instance_npcname("Pile of documents#Base1");
|
||||||
enablenpc instance_npcname("Document Pile#Site2");
|
enablenpc instance_npcname("Pile of documents#Base2");
|
||||||
enablenpc instance_npcname("Document Pile#Site3");
|
enablenpc instance_npcname("Pile of documents#Base3");
|
||||||
enablenpc instance_npcname("Document Pile#Site4");
|
enablenpc instance_npcname("Pile of documents#Base4");
|
||||||
enablenpc instance_npcname("Document Pile#Site5");
|
enablenpc instance_npcname("Pile of documents#Base5");
|
||||||
enablenpc instance_npcname("Miriam#base1");
|
enablenpc instance_npcname("Miriam#Base1");
|
||||||
enablenpc instance_npcname("Maram#base5");
|
enablenpc instance_npcname("Maram#Base5");
|
||||||
|
if ('step == 0)
|
||||||
|
'step = 1;
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
1@tcamp,80,97,3 duplicate(Lock#4-1) Lock#4-2 4_ROPEPILE
|
1@tcamp,80,97,3 duplicate(Lock Device#4-1) Lock Device#4-2 4_ROPEPILE
|
||||||
1@tcamp,80,95,3 duplicate(Lock#4-1) Lock#4-3 4_ROPEPILE
|
1@tcamp,80,95,3 duplicate(Lock Device#4-1) Lock Device#4-3 4_ROPEPILE
|
||||||
1@tcamp,82,100,3 duplicate(dummy_npc) Maram#Lock4 4_EP18_MARAM
|
1@tcamp,82,100,3 duplicate(dummy_disabled_npc) Maram#Lock Device4 4_EP18_MARAM
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
// Final
|
// Final
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
1@tcamp,32,100,3 script Document Pile#Site1 4_EP18_PAPERS,{
|
1@tcamp,32,100,3 script(DISABLED) Pile of documents#Base1 4_EP18_PAPERS,{
|
||||||
mes "[Pile of Papers]";
|
if ('step != 1)
|
||||||
mes "All the papers are jumbled up.";
|
end;
|
||||||
mes "I took out a few sheets from the middle These are the expiry date of the weapon and the sales statement.";
|
mes "[Pile of documents]";
|
||||||
|
mes "All kinds of documents are all mixed up.";
|
||||||
|
mes "I took out a few pages from the middle and found that they were weapons expiration dates and sales records.";
|
||||||
next;
|
next;
|
||||||
mes "[Pile of Papers]";
|
mes "[Pile of documents]";
|
||||||
mes "Even the date is very recent. There is a record of handing over a large number of weapons to Mr. Dandelion.";
|
mes "Even the date is very recent. There is also a record of handing over a large amount of weapons to Mr. Dandelion.";
|
||||||
mes "I think I found what I was looking for. I put the documents in my pocket.";
|
mes "It looks like I found what I was looking for. I put the documents in my arms.";
|
||||||
close2;
|
close2;
|
||||||
getitem 1000409,1; // Ep18_Docu_File
|
getitem 1000409,1; // Ep18_Docu_File
|
||||||
cloakonnpcself( instance_npcname("Document Pile#Site1") );
|
cloakonnpcself();
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@tcamp,49,123,3 script Document Pile#Site2 4_EP18_PAPERS,{
|
1@tcamp,49,123,3 script(DISABLED) Pile of documents#Base2 4_EP18_PAPERS,{
|
||||||
mes "[Pile of Papers]";
|
if ('step != 1)
|
||||||
mes "All the papers are jumbled up.";
|
end;
|
||||||
mes "At the top of the page the final menu for luncheon dinner?";
|
mes "[Pile of documents]";
|
||||||
|
mes "All kinds of documents are all mixed up.";
|
||||||
|
mes "On the top page... is it a battle to decide the menu for lunch?";
|
||||||
next;
|
next;
|
||||||
mes "[Pile of Papers]";
|
mes "[Pile of documents]";
|
||||||
mes "It seems that the menu is fried fish with sauce.";
|
mes "It looks like the menu has been set on fried fish covered in sauce....";
|
||||||
mes "You seem to have left unimportant documents. Let's take care of them first.";
|
mes "It looks like he left behind only unimportant documents. Let's take care of them for now.";
|
||||||
close2;
|
close2;
|
||||||
getitem 1000409,1; // Ep18_Docu_File
|
getitem 1000409,1; // Ep18_Docu_File
|
||||||
cloakonnpcself( instance_npcname("Document Pile#Site2") );
|
cloakonnpcself();
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@tcamp,29,86,3 script Document Pile#Site3 4_EP18_PAPERS,{
|
1@tcamp,29,86,3 script(DISABLED) Pile of documents#Base3 4_EP18_PAPERS,{
|
||||||
mes "[Pile of Papers]";
|
if ('step != 1)
|
||||||
mes "All the papers are jumbled up.";
|
end;
|
||||||
mes "I took one out of the middle The layout of the military base guards?";
|
mes "[Pile of documents]";
|
||||||
|
mes "All kinds of documents are all mixed up.";
|
||||||
|
mes "I took one out from the middle and saw... a map of the security guards at the military base?";
|
||||||
next;
|
next;
|
||||||
mes "[Pile of Papers]";
|
mes "[Pile of documents]";
|
||||||
mes "Looking at the date, it was a long time ago.";
|
mes "Looking at the date, it's a long time ago document.";
|
||||||
mes "You seem to have left unimportant documents. Let's take care of them first.";
|
mes "It looks like he left behind only unimportant documents. Let's take care of them for now.";
|
||||||
close2;
|
close2;
|
||||||
getitem 1000409,1; // Ep18_Docu_File
|
getitem 1000409,1; // Ep18_Docu_File
|
||||||
cloakonnpcself( instance_npcname("Document Pile#Site3") );
|
cloakonnpcself();
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@tcamp,60,122,3 script Document Pile#Site4 4_EP18_PAPERS,{
|
1@tcamp,60,122,3 script(DISABLED) Pile of documents#Base4 4_EP18_PAPERS,{
|
||||||
mes "[Pile of Papers]";
|
if ('step != 1)
|
||||||
mes "All the papers are jumbled up.";
|
end;
|
||||||
mes "The top one... 'If you feed the magmaring potatoes and hunt them after a while, will they drop the baked potatoes?'";
|
mes "[Pile of documents]";
|
||||||
|
mes "All kinds of documents are all mixed up.";
|
||||||
|
mes "The top chapter is... ¡®If you feed a magmaring a potato and then hunt it after a while, should it drop a baked potato?'";
|
||||||
next;
|
next;
|
||||||
mes "[Pile of Papers]";
|
mes "[Pile of documents]";
|
||||||
mes "why is this here. But I'm curious about the result!";
|
mes "...Why is this here? But I'm curious about the results!";
|
||||||
mes "You seem to have left unimportant documents. Let's take care of them first.";
|
mes "It looks like he left behind only unimportant documents. Let's take care of them for now.";
|
||||||
close2;
|
close2;
|
||||||
getitem 1000409,1; // Ep18_Docu_File
|
getitem 1000409,1; // Ep18_Docu_File
|
||||||
cloakonnpcself( instance_npcname("Document Pile#Site4") );
|
cloakonnpcself();
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@tcamp,31,84,3 script Document Pile#Site5 4_EP18_PAPERS,{
|
1@tcamp,31,84,3 script(DISABLED) Pile of documents#Base5 4_EP18_PAPERS,{
|
||||||
mes "[Pile of Papers]";
|
if ('step != 1)
|
||||||
mes "All the papers are jumbled up.";
|
end;
|
||||||
mes "Picking one out of the middle I found an illustration of the Pope drawn by icing the Pope's cookie icing with a pen.";
|
mes "[Pile of documents]";
|
||||||
|
mes "All kinds of documents are all mixed up.";
|
||||||
|
mes "When I pulled one out from the middle... I found an illustration of the Pope drawn with Pope cookie icing using a pen.";
|
||||||
next;
|
next;
|
||||||
mes "[Pile of Papers]";
|
mes "[Pile of documents]";
|
||||||
mes "What kind of picture is it? Besides, you drew it very well.";
|
mes "What kind of picture is this? And it's really well drawn....";
|
||||||
mes "You seem to have left unimportant documents. Let's take care of them first.";
|
mes "It looks like he left behind only unimportant documents. Let's take care of them for now.";
|
||||||
close2;
|
close2;
|
||||||
getitem 1000409,1; // Ep18_Docu_File
|
getitem 1000409,1; // Ep18_Docu_File
|
||||||
cloakonnpcself( instance_npcname("Document Pile#Site5") );
|
cloakonnpcself();
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
1@tcamp,34,100,3 script Miriam#base1 4_EP18_MIRIAM,3,3,{
|
1@tcamp,34,100,3 script(DISABLED) Miriam#Base1 4_EP18_MIRIAM,3,3,{
|
||||||
disable_items;
|
if ('step == 1) {
|
||||||
if (countitem(1000409) < 5) { // Ep18_Docu_File
|
if (countitem(1000409) < 5) { // Ep18_Docu_File
|
||||||
|
cutin "ep18_miriam_02.png",2;
|
||||||
|
mes "[Miriam]";
|
||||||
|
mes "As expected, you are talented, adventurer. I used all my connections to find out the location.";
|
||||||
|
mes "It looks like you found the adventurer and Maram right away.";
|
||||||
|
next;
|
||||||
|
mes "[Miriam]";
|
||||||
|
mes "Please read these documents. They contain what we are looking for.";
|
||||||
|
mes "Rather than having me explain everything to you, I think it would be better for you to see it for yourself.";
|
||||||
|
close3;
|
||||||
|
}
|
||||||
|
if (getequipid(EQI_HEAD_TOP) != 400127) { // Ep18_Mini_Elly
|
||||||
|
mes "[Mini Elly]";
|
||||||
|
mes "Get it out of the bag. Put it on your head.";
|
||||||
|
close;
|
||||||
|
}
|
||||||
|
mes "[Miriam]";
|
||||||
|
mes ".......";
|
||||||
|
next;
|
||||||
|
cutin "ep18_maram_01.png",2;
|
||||||
|
mes "[Maram]";
|
||||||
|
mes "No, Miriam! How are you here?";
|
||||||
|
mes "They said they would conduct a separate investigation!";
|
||||||
|
next;
|
||||||
|
cutin "ep18_miriam_01.png",2;
|
||||||
|
mes "[Miriam]";
|
||||||
|
mes "How did you and the adventurer dig this far?";
|
||||||
|
mes "As expected, your skills are good. I used all my connections to find out the location, but you found it right away.";
|
||||||
|
next;
|
||||||
|
cutin "ep18_maram_02.png",2;
|
||||||
|
mes "[Maram]";
|
||||||
|
mes "Let's do something about it, right, adventurer?";
|
||||||
|
mes "Anyway, what information did you get?";
|
||||||
|
next;
|
||||||
cutin "ep18_miriam_02.png",2;
|
cutin "ep18_miriam_02.png",2;
|
||||||
mes "[Miriam]";
|
mes "[Miriam]";
|
||||||
mes "As expected, you are talented, adventurer. I used all sorts of connections to find the position.";
|
mes "Look at this document here.";
|
||||||
mes "It seems that Adventurer and Maram found it at once.";
|
next;
|
||||||
|
cutin "",255;
|
||||||
|
mes "[Mini Elly]";
|
||||||
|
mes "This document is a weapon sales record. Please show it to me.";
|
||||||
|
mes "All of the weapons and firearms that these people disposed of have less than a year left before their expiration date.";
|
||||||
|
next;
|
||||||
|
cutin "ep18_miriam_03.png",2;
|
||||||
|
mes "[Miriam]";
|
||||||
|
mes "You sell weapons like this so recklessly.";
|
||||||
|
mes "If a weapon is not properly maintained, it may not function properly.";
|
||||||
|
next;
|
||||||
|
cutin "ep18_maram_03.png",2;
|
||||||
|
mes "[Maram]";
|
||||||
|
mes "The quality of all weapons coming out of the back hole is the same.";
|
||||||
|
mes "...But I guess it's at this point in time.";
|
||||||
|
next;
|
||||||
|
mes "[Maram]";
|
||||||
|
mes "One year is not a long expiration date, but it is not too tight.";
|
||||||
|
mes "Why did it pour out at this moment when we were preparing for the protest?";
|
||||||
|
next;
|
||||||
|
mes "[Maram]";
|
||||||
|
mes "There wouldn't have been a need to dispose of it right away.";
|
||||||
|
next;
|
||||||
|
cutin "ep18_miriam_02.png",2;
|
||||||
|
mes "[Miriam]";
|
||||||
|
mes "This is one of the military bases managed by my adoptive father.";
|
||||||
|
mes "I was wondering if it would really pop out at a time like this.";
|
||||||
|
next;
|
||||||
|
cutin "",255;
|
||||||
|
select( "If it's your adoptive father, is it Priest Amal?", "That adoptive father who is a hardliner and pro-war?" );
|
||||||
|
cutin "ep18_miriam_02.png",2;
|
||||||
|
mes "[Miriam]";
|
||||||
|
mes "That's right, adventurer. When I looked at the ledger, it doesn't seem like my adoptive father was involved.";
|
||||||
|
mes "I think it's an isolated corruption at the lowest level, the weapons leak incident.";
|
||||||
next;
|
next;
|
||||||
mes "[Miriam]";
|
mes "[Miriam]";
|
||||||
mes "Read some of the documents here. We have what we were looking for.";
|
mes "I'll have to dig a little deeper, but that's my guess for now.";
|
||||||
mes "I think it would be better to come and see it firsthand than to explain everything.";
|
mes "Oh, please give me the documents. I'll take them as evidence.";
|
||||||
close3;
|
delitem 1000409,5; // Ep18_Docu_File
|
||||||
|
if ('step == 1)
|
||||||
|
'step = 2;
|
||||||
|
if (isbegin_quest(16578) == 1) {
|
||||||
|
erasequest 16578;
|
||||||
|
setquest 16579;
|
||||||
|
}
|
||||||
|
close2;
|
||||||
|
cutin "",255;
|
||||||
|
npctalk "Maram: Ha, this is really fun.", instance_npcname("Maram#Base5");
|
||||||
|
end;
|
||||||
}
|
}
|
||||||
if (getequipid(EQI_HEAD_TOP) != 400127) { // Ep18_Mini_Elly
|
if ('step == 2) {
|
||||||
mes "[Mini Elly]";
|
cutin "ep18_miriam_02.png",2;
|
||||||
mes "Get it out of the bag. Put it on your head.";
|
mes "[Miriam]";
|
||||||
|
mes "...Just a moment, I'm reading the document.";
|
||||||
close;
|
close;
|
||||||
}
|
}
|
||||||
cutin "ep18_miriam_02.png",2;
|
|
||||||
mes "[Miriam]";
|
|
||||||
mes ".";
|
|
||||||
next;
|
|
||||||
cutin "ep18_maram_01.png",2;
|
|
||||||
mes "[Maram]";
|
|
||||||
mes "No, Miriam! How are you here?";
|
|
||||||
mes "They said they would investigate separately!";
|
|
||||||
next;
|
|
||||||
cutin "ep18_miriam_01.png",2;
|
|
||||||
mes "[Miriam]";
|
|
||||||
mes "How did you and the adventurer dig this far?";
|
|
||||||
mes "You have good skills, too. It was a location that I found using all kinds of connections, but you found it at once.";
|
|
||||||
next;
|
|
||||||
cutin "ep18_maram_02.png",2;
|
|
||||||
mes "[Maram]";
|
|
||||||
mes "Let's do some, right, adventurer?";
|
|
||||||
mes "Anyway, what information did you get?";
|
|
||||||
next;
|
|
||||||
cutin "ep18_miriam_02.png",2;
|
|
||||||
mes "[Miriam]";
|
|
||||||
mes "Look at this document here.";
|
|
||||||
next;
|
|
||||||
cutin "",255;
|
|
||||||
mes "[Mini Elly]";
|
|
||||||
mes "This is a sales statement for arms. Show it to me as well.";
|
|
||||||
mes "The weapons and firearms these men have disposed of are all less than a year old.";
|
|
||||||
next;
|
|
||||||
cutin "ep18_miriam_03.png",2;
|
|
||||||
mes "[Miriam]";
|
|
||||||
mes "How dare you sell such weapons.";
|
|
||||||
mes "A weapon that is not properly maintained may not function properly.";
|
|
||||||
next;
|
|
||||||
cutin "ep18_maram_03.png",2;
|
|
||||||
mes "[Maram]";
|
|
||||||
mes "The weapons that come out of the back hole are all the same.";
|
|
||||||
mes "but, at least it's at this point.";
|
|
||||||
next;
|
|
||||||
mes "[Maram]";
|
|
||||||
mes "A year is not a long term, but it is not tight.";
|
|
||||||
mes "Why did we pour out at this moment in preparation for the protest?";
|
|
||||||
next;
|
|
||||||
mes "[Maram]";
|
|
||||||
mes "You wouldn't have to dispose of it right away.";
|
|
||||||
next;
|
|
||||||
npctalk "Maram: haha, this is so funny", instance_npcname("Maram#base5");
|
|
||||||
sleep2 300;
|
|
||||||
cutin "ep18_miriam_02.png",2;
|
|
||||||
mes "[Miriam]";
|
|
||||||
mes "This is one of the military bases managed by my stepfather.";
|
|
||||||
mes "Just by chance, it really came out at a time like this.";
|
|
||||||
next;
|
|
||||||
cutin "",255;
|
|
||||||
select( "If your stepfather is a priest, Youth Amal?", "The hard-line and pro-war stepfather?" );
|
|
||||||
cutin "ep18_miriam_02.png",2;
|
|
||||||
mes "[Miriam]";
|
|
||||||
mes "That's right, adventurer. Looking at the ledger, it doesn't seem like the stepfather was involved.";
|
|
||||||
mes "I think it was a single corruption at the end, the weapon leak case.";
|
|
||||||
next;
|
|
||||||
mes "[Miriam]";
|
|
||||||
mes "I'll have to dig a little deeper, but that's my guess for now.";
|
|
||||||
mes "Oh, give me the documents. I'll take it as evidence.";
|
|
||||||
delitem 1000409,5; // Ep18_Docu_File
|
|
||||||
if (isbegin_quest(16578) == 1) {
|
|
||||||
erasequest 16578;
|
|
||||||
setquest 16579;
|
|
||||||
}
|
|
||||||
close2;
|
|
||||||
cutin "",255;
|
|
||||||
npctalk "Maram: haha, this is so funny", instance_npcname("Maram#base5");
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
OnTouch:
|
OnTouch:
|
||||||
npctalk "Miriam: Oh, adventurer? Maram you too!?";
|
if (countitem(1000409) < 5)
|
||||||
|
npctalk "Miriam: Oh, adventurer? Maram, you too!?";
|
||||||
end;
|
end;
|
||||||
|
|
||||||
OnInstanceInit:
|
OnInstanceInit:
|
||||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(16578) == 1 && countitem(1000409) > 4" ); // Ep18_Docu_File
|
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(16578) == 1 && countitem(1000409) > 4" ); // Ep18_Docu_File
|
||||||
disablenpc instance_npcname("Miriam#base1");
|
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
1@tcamp,32,102,3 script Maram#base5 4_EP18_MARAM,{
|
1@tcamp,32,102,3 script(DISABLED) Maram#Base5 4_EP18_MARAM,{
|
||||||
if (isbegin_quest(16579) == 0) {
|
if ('step == 1) {
|
||||||
cutin "ep18_maram_01.png",2;
|
cutin "ep18_maram_01.png",2;
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "I didn't know Miriam was here, right, adventurer?";
|
mes "I didn't know Miriam would be here. Right, adventurer?";
|
||||||
close3;
|
close3;
|
||||||
}
|
}
|
||||||
cutin "ep18_maram_02.png",2;
|
if ('step == 2) {
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "We moved separately, but in the end we are in the same position.";
|
mes "They moved separately, but ended up in the same place.";
|
||||||
mes "Still, what I got in the process was different, so I guess it has its own meaning.";
|
mes "Still, what I gained from the process was different, so I guess it has some meaning.";
|
||||||
next;
|
next;
|
||||||
cutin "ep18_miriam_02.png",2;
|
cutin "ep18_miriam_02.png",2;
|
||||||
mes "[Miriam]";
|
mes "[Miriam]";
|
||||||
mes "Then I must be away for a while.";
|
mes "Then I guess I'll have to leave for a while.";
|
||||||
mes "I'm going to pass on my findings to my stepfather.";
|
mes "I'll have to relay what I found out to my adoptive father.";
|
||||||
next;
|
next;
|
||||||
mes "[Miriam]";
|
mes "[Miriam]";
|
||||||
mes "Because there is a possibility that the adoptive father may not know yet if it is a single corruption.";
|
mes "If it's an isolated corruption, there's a chance that even my adoptive father doesn't know about it yet.";
|
||||||
next;
|
next;
|
||||||
cutin "ep18_maram_03.png",2;
|
cutin "ep18_maram_03.png",2;
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "Is it really an independent corruption? That's probably what bothers me.";
|
mes "Is this really an isolated case of corruption? That is something that bothers me.";
|
||||||
mes "I have something to give to Rachel, Miriam, let's go together.";
|
mes "I also have something to deliver to Rachel, so Miriam, let's go together.";
|
||||||
next;
|
next;
|
||||||
cutin "ep18_maram_01.png",2;
|
cutin "ep18_maram_01.png",2;
|
||||||
mes "[Maram]";
|
mes "[Maram]";
|
||||||
mes "I'll give you a shortcut, so can you please tell Suad what you found out here?";
|
mes "I will tell you a shortcut to get out, so would you, adventurer, tell Suad what you found out here?";
|
||||||
mes "We will follow soon, so please go ahead and tell me.";
|
mes "We will follow shortly, so please go and tell us first.";
|
||||||
if (ep18_1_main == 46) {
|
if (ep18_main == 46) {
|
||||||
ep18_1_main = 47;
|
ep18_main = 47;
|
||||||
erasequest 16579;
|
erasequest 16579;
|
||||||
setquest 16580;
|
setquest 16580;
|
||||||
getitem "Ep18_Amethyst_Fragment",50;
|
getitem 1000405,50; // Ep18_Amethyst_Fragment
|
||||||
|
}
|
||||||
|
close2;
|
||||||
|
warp "wolfvill",162,154;
|
||||||
|
end;
|
||||||
}
|
}
|
||||||
close2;
|
// debug
|
||||||
warp "wolfvill",162,154;
|
warp "wolfvill",162,154;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
OnInstanceInit:
|
OnInstanceInit:
|
||||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(16579) == 1" );
|
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(16579) == 1" );
|
||||||
disablenpc instance_npcname("Maram#base5");
|
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
//= Instance Villa of Deception.
|
//= Instance Villa of Deception.
|
||||||
//===== Description: =========================================
|
//===== Description: =========================================
|
||||||
//- [Walkthrough conversion]
|
//- [Walkthrough conversion]
|
||||||
//- Require to complete the episode 18.1 main quest.
|
//- Require to complete the Episode 18 main quest.
|
||||||
//- The function to drop an item with random option is defined in re/other/glocal_npc2.txt
|
//- The function to drop an item with random option is defined in re/other/glocal_npc2.txt
|
||||||
// Notes:
|
// Notes:
|
||||||
// Some of the setting can be modified in 'Optional settings'.
|
// Some of the setting can be modified in 'Optional settings'.
|
||||||
@ -16,14 +16,14 @@
|
|||||||
wolfvill,79,260,0 script #con_wp11 HIDDEN_WARP_NPC,4,4,{
|
wolfvill,79,260,0 script #con_wp11 HIDDEN_WARP_NPC,4,4,{
|
||||||
end;
|
end;
|
||||||
OnTouch:
|
OnTouch:
|
||||||
if (ep18_1_main < 57)
|
if (ep18_main < 57)
|
||||||
end;
|
end;
|
||||||
cloakoffnpcself( "Aira#con" );
|
cloakoffnpcself( "Aira#con" );
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
wolfvill,79,260,4 script(CLOAKED) Aira#con 4_M_BRZ_JACI,{
|
wolfvill,79,260,4 script(CLOAKED) Aira#con 4_M_BRZ_JACI,{
|
||||||
if (ep18_1_main < 57)
|
if (ep18_main < 57)
|
||||||
end;
|
end;
|
||||||
switch( checkquest(12522,PLAYTIME) ) {
|
switch( checkquest(12522,PLAYTIME) ) {
|
||||||
case -1:
|
case -1:
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
50
npc/re/mapflag/specialpopup.txt
Normal file
50
npc/re/mapflag/specialpopup.txt
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
//===== rAthena Script =======================================
|
||||||
|
//= Mapflag: special popup map setting.
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Displays a special popup when a player enters the map.
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= 1.0 Initial script. [eppc0330]
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
herosria mapflag specialpopup 1
|
||||||
|
hero_in1 mapflag specialpopup 1
|
||||||
|
hero_in2 mapflag specialpopup 1
|
||||||
|
hero_in3 mapflag specialpopup 1
|
||||||
|
hero_in4 mapflag specialpopup 1
|
||||||
|
hero_out1 mapflag specialpopup 1
|
||||||
|
hero_out2 mapflag specialpopup 1
|
||||||
|
hero_out3 mapflag specialpopup 1
|
||||||
|
hero_out4 mapflag specialpopup 1
|
||||||
|
hero_ent1 mapflag specialpopup 1
|
||||||
|
hero_ent2 mapflag specialpopup 1
|
||||||
|
hero_ent3 mapflag specialpopup 1
|
||||||
|
|
||||||
|
hero_tra mapflag specialpopup 2
|
||||||
|
hero_dun1 mapflag specialpopup 2
|
||||||
|
|
||||||
|
bl_ice mapflag specialpopup 3
|
||||||
|
bl_lava mapflag specialpopup 3
|
||||||
|
bl_grass mapflag specialpopup 3
|
||||||
|
bl_death mapflag specialpopup 3
|
||||||
|
bl_soul mapflag specialpopup 3
|
||||||
|
bl_venom mapflag specialpopup 3
|
||||||
|
bl_temple mapflag specialpopup 3
|
||||||
|
|
||||||
|
thana_step mapflag specialpopup 4
|
||||||
|
tha_t07 mapflag specialpopup 4
|
||||||
|
tha_t08 mapflag specialpopup 4
|
||||||
|
tha_t09 mapflag specialpopup 4
|
||||||
|
tha_t10 mapflag specialpopup 4
|
||||||
|
tha_t11 mapflag specialpopup 4
|
||||||
|
tha_t12 mapflag specialpopup 4
|
||||||
|
|
||||||
|
ama_dun01 mapflag specialpopup 5
|
||||||
|
|
||||||
|
lhz_dun_n mapflag specialpopup 6
|
||||||
|
|
||||||
|
bl_depth1 mapflag specialpopup 7
|
||||||
|
|
||||||
|
for_dun01 mapflag specialpopup 8
|
||||||
|
for_dun02 mapflag specialpopup 8
|
||||||
|
|
||||||
|
bl_depth2 mapflag specialpopup 9
|
||||||
@ -60,5 +60,5 @@ Footer:
|
|||||||
- Path: npc/re/merchants/barters/enchan_illusion_dungeons.yml
|
- Path: npc/re/merchants/barters/enchan_illusion_dungeons.yml
|
||||||
- Path: npc/re/merchants/barters/quests_exp_175.yml
|
- Path: npc/re/merchants/barters/quests_exp_175.yml
|
||||||
- Path: npc/re/merchants/barters/mysterious_cookie_shop.yml
|
- Path: npc/re/merchants/barters/mysterious_cookie_shop.yml
|
||||||
- Path: npc/re/merchants/barters/quests_18_1.yml
|
- Path: npc/re/merchants/barters/quests_18.yml
|
||||||
- Path: npc/re/merchants/barters/quests_19.yml
|
- Path: npc/re/merchants/barters/quests_19.yml
|
||||||
|
|||||||
@ -4007,8 +4007,8 @@ OnInit:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ba_in01,26,266,3 script Smart Ellie#ep18ely01 4_EP17_TABLET,{
|
// ba_in01,26,266,3 script Smart Elly#ep18ely01 4_EP17_TABLET,{
|
||||||
ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
ba_in01,26,266,3 script Smart Elly#ep172_ely01 4_EP17_TABLET,{
|
||||||
if (checkweight(1000103,15) == 0) {
|
if (checkweight(1000103,15) == 0) {
|
||||||
mes "You cannot proceed with the quest because you have too many items in your possession.";
|
mes "You cannot proceed with the quest because you have too many items in your possession.";
|
||||||
mes "Please clean up your inventory and try again.";
|
mes "Please clean up your inventory and try again.";
|
||||||
@ -4016,39 +4016,39 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
|||||||
}
|
}
|
||||||
if (ep17_2_main < 32) {
|
if (ep17_2_main < 32) {
|
||||||
cutin "ep172_beta.bmp", 2;
|
cutin "ep172_beta.bmp", 2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Hello, guest.";
|
mes "Hello, guest.";
|
||||||
mes "I'm responsible for the airship hangar's information.";
|
mes "I'm responsible for the airship hangar's information.";
|
||||||
mes "Please call me Ellie.";
|
mes "Please call me Elly.";
|
||||||
close3;
|
close3;
|
||||||
}
|
}
|
||||||
if (ep17_2_main == 32) {
|
if (ep17_2_main == 32) {
|
||||||
cutin "ep172_beta",2;
|
cutin "ep172_beta",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Hello, guest.";
|
mes "Hello, guest.";
|
||||||
mes "I'm responsible for the airship hangar's information.";
|
mes "I'm responsible for the airship hangar's information.";
|
||||||
mes "Please call me Ellie.";
|
mes "Please call me Elly.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "After the master had destroyed this place, I have been doing something else for a while, but...";
|
mes "After the master had destroyed this place, I have been doing something else for a while, but...";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Now I'm back at Alpha's request.";
|
mes "Now I'm back at Alpha's request.";
|
||||||
mes "Please leave the hangar's matters to me, Ellie.";
|
mes "Please leave the hangar's matters to me, Elly.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "The leader of the 'intruders' had freely access the area for the master's collection 3...";
|
mes "The leader of the 'intruders' had freely access the area for the master's collection 3...";
|
||||||
mes "I returned here to manage it.";
|
mes "I returned here to manage it.";
|
||||||
npctalk "Sounds troublesome.", "", bc_self;
|
npctalk "Sounds troublesome.", "", bc_self;
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "We are currently tracking the expected path after receiving the incident report.";
|
mes "We are currently tracking the expected path after receiving the incident report.";
|
||||||
mes "However, tracking it is not easy because the main system of No. 3 is completely disconnected.";
|
mes "However, tracking it is not easy because the main system of No. 3 is completely disconnected.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "The 'invaders' which the 'guests' calls the 'Illusions' has a 99.9% chance that they made modifications on the system.";
|
mes "The 'invaders' which the 'guests' calls the 'Illusions' has a 99.9% chance that they made modifications on the system.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Dear 'guests', are you here?";
|
mes "Dear 'guests', are you here?";
|
||||||
cloakoffnpcself( "Est#ep172_est02" );
|
cloakoffnpcself( "Est#ep172_est02" );
|
||||||
cloakoffnpcself( "Rookie#ep172_rk03" );
|
cloakoffnpcself( "Rookie#ep172_rk03" );
|
||||||
@ -4063,15 +4063,15 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
|||||||
mes "I told Alpha that the analysisable data in the current state is over.";
|
mes "I told Alpha that the analysisable data in the current state is over.";
|
||||||
next;
|
next;
|
||||||
cutin "ep172_beta",2;
|
cutin "ep172_beta",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Yes. I have sent the data.";
|
mes "Yes. I have sent the data.";
|
||||||
mes "Currently, there is no reception from the master's collection 3, but we have caught some unusual signals.";
|
mes "Currently, there is no reception from the master's collection 3, but we have caught some unusual signals.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "This facility has not been used for a long time, but it has been secretly used by the 'intruders' and...";
|
mes "This facility has not been used for a long time, but it has been secretly used by the 'intruders' and...";
|
||||||
npctalk "Unusual signal?", "Rookie#ep172_rk03", bc_self;
|
npctalk "Unusual signal?", "Rookie#ep172_rk03", bc_self;
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "There are traces of magical communication with certain places outside the mansion.";
|
mes "There are traces of magical communication with certain places outside the mansion.";
|
||||||
mes "It's an intermittent signal.";
|
mes "It's an intermittent signal.";
|
||||||
next;
|
next;
|
||||||
@ -4081,16 +4081,16 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
|||||||
mes "Where? the enterprise?";
|
mes "Where? the enterprise?";
|
||||||
next;
|
next;
|
||||||
cutin "ep172_beta",2;
|
cutin "ep172_beta",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "According to the analysis, it's a one-way reception.";
|
mes "According to the analysis, it's a one-way reception.";
|
||||||
mes "It appears to be collecting reports from the outside...";
|
mes "It appears to be collecting reports from the outside...";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "It will take some time to completely analyze the code because it was used by the 'intruders' for one-way reception.";
|
mes "It will take some time to completely analyze the code because it was used by the 'intruders' for one-way reception.";
|
||||||
next;
|
next;
|
||||||
cutin "16loo_01",0;
|
cutin "16loo_01",0;
|
||||||
mes "[Rookie]";
|
mes "[Rookie]";
|
||||||
mes "Then, Ellie, I'll ask for one thing.";
|
mes "Then, Elly, I'll ask for one thing.";
|
||||||
mes "Continue receiving the signals as if the 'intruders' leader is still here.";
|
mes "Continue receiving the signals as if the 'intruders' leader is still here.";
|
||||||
next;
|
next;
|
||||||
cutin "ep162_est01",1;
|
cutin "ep162_est01",1;
|
||||||
@ -4099,7 +4099,7 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
|||||||
mes "With that, we'll be able to trace back the other collaborators out there.";
|
mes "With that, we'll be able to trace back the other collaborators out there.";
|
||||||
next;
|
next;
|
||||||
cutin "ep172_beta",2;
|
cutin "ep172_beta",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "I will do as you say.";
|
mes "I will do as you say.";
|
||||||
mes "We will maintain information patters of the 'intruders' and collect information received from their accomplices from outside the mansion.";
|
mes "We will maintain information patters of the 'intruders' and collect information received from their accomplices from outside the mansion.";
|
||||||
next;
|
next;
|
||||||
@ -4135,10 +4135,10 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
|||||||
cutin "16loo_03",0;
|
cutin "16loo_03",0;
|
||||||
mes "[Rookie]";
|
mes "[Rookie]";
|
||||||
mes "Then I'll let everyone and help Alpha.";
|
mes "Then I'll let everyone and help Alpha.";
|
||||||
mes "Take good care of Ellie!";
|
mes "Take good care of Elly!";
|
||||||
next;
|
next;
|
||||||
cutin "ep172_beta",2;
|
cutin "ep172_beta",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Do not worry about this place.";
|
mes "Do not worry about this place.";
|
||||||
mes "Me and Almond will take care of it.";
|
mes "Me and Almond will take care of it.";
|
||||||
mes "You can be rest assured.";
|
mes "You can be rest assured.";
|
||||||
@ -4148,189 +4148,190 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
|||||||
cloakonnpcself( "Rookie#ep172_rk03" );
|
cloakonnpcself( "Rookie#ep172_rk03" );
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
if (ep18_1_main == 0 && BaseLevel >= 170) {
|
if (ep18_main == 0 && BaseLevel >= 170) {
|
||||||
cutin "ep172_beta.bmp",2;
|
cutin "ep172_beta.bmp",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "The periodic signal has not yet been received.";
|
mes "No regular signals have been received yet.";
|
||||||
mes "The whereabouts of your master's collection#3 are also being tracked.";
|
mes "We're also tracking the whereabouts of your collection #3.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Don't worry.";
|
mes "No worries.";
|
||||||
mes "Time is on our side";
|
mes "Time is on our side.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "I and Alpha will analyze the information properly, so if you clean up the abandoned remnants... Ah!";
|
mes "We'll properly analyze the information, so it would be great if the guest could clean up the remnants left behind... Oh!";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Please don't go anywhere for a moment.";
|
mes "Just a moment, please stay here.";
|
||||||
mes "It will be over soon";
|
mes "It'll be over soon.";
|
||||||
mes "Time was on our side, wasn't it?";
|
mes "Time is on our side, right?";
|
||||||
next;
|
next;
|
||||||
// note: progressbar_npc must be after "next" otherwise the client may crash
|
mes "[Elly]";
|
||||||
progressbar_npc "FFFF00",4;
|
|
||||||
mes "[Ellie]";
|
|
||||||
mes "Wait a minute...";
|
mes "Wait a minute...";
|
||||||
mes "...";
|
mes "...";
|
||||||
mes "...";
|
mes "...";
|
||||||
|
// note: progressbar_npc must be after "next" otherwise the client may crash
|
||||||
|
// progressbar_npc "FFFF00",4;
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
progressbar_npc "FFFF00",4;
|
||||||
mes "As soon as the password is decrypted, it will be fast.";
|
mes "[Elly]";
|
||||||
mes "The thing that took the longest is an instant.";
|
mes "Once we decrypt the code, it'll be quick.";
|
||||||
|
mes "The longest part is over, so it feels like it went by in a flash.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "There is something in ^0000FFRachel^000000";
|
mes "There is something in ^0000FFRachel^000000.";
|
||||||
mes "Of course I've only heard of Rachel, but I've never been there.";
|
mes "Of course, I've only heard of Rachel, and I've never been there.";
|
||||||
mes "The 'collaborators' there don't seem to know that their heads have moved yet.";
|
mes "The 'collaborators' at that location seem unaware of their leaders' movements as of yet.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Although we don't know where your master's Collection#3 is yet, we'll have to keep an eye out for information coming in here...";
|
mes "Although we still don't know the whereabouts of Master's Collection No. 3, we need to continue to gather information coming in from here...";
|
||||||
mes "what if?";
|
mes "What should we do?";
|
||||||
next;
|
next;
|
||||||
select( "What?" );
|
select( "What?" );
|
||||||
mes "[" + strcharinfo(0) + "]";
|
mes "[" + strcharinfo(0) + "]";
|
||||||
mes "What are you doing?";
|
mes "What should I do?";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "The collaborator's position has been roughly secured. Reportedly 'waiting for your next instruction',";
|
mes "The location of the collaborator has been roughly secured. According to the report, they are awaiting further instructions, so...";
|
||||||
mes "Then, before the next instruction is issued, we should catch up on that side as soon as possible...";
|
mes "In that case, we should thoroughly investigate that area before the next instructions are given...";
|
||||||
cloakoffnpcself( "Rookie#ep181_rk01" );
|
cloakoffnpcself( "Rookie#ep181_rk01" );
|
||||||
cloakoffnpcself( "EST#ep181_est01" );
|
cloakoffnpcself( "Est#ep181_est01" );
|
||||||
npctalk "Rookie: Did you call?", "Rookie#ep181_rk01", bc_self;
|
npctalk "Rookie: Did you call me?", "Rookie#ep181_rk01", bc_self;
|
||||||
npctalk "EST: It ended sooner than I thought.", "EST#ep181_est01", bc_self;
|
npctalk "Est: That was quicker than I thought.", "Est#ep181_est01", bc_self;
|
||||||
next;
|
next;
|
||||||
cutin "ep162_est01.bmp",1;
|
cutin "ep162_est01.bmp",1;
|
||||||
mes "[EST]";
|
mes "[Est]";
|
||||||
mes "Okay then Rachel...";
|
mes "Okay, so Rachel...";
|
||||||
next;
|
next;
|
||||||
cutin "16loo_01.bmp",0;
|
cutin "16loo_01.bmp",0;
|
||||||
mes "[Rookie]";
|
mes "[Rookie]";
|
||||||
mes "Rachel... who's going?";
|
mes "Rachel... Who's going?";
|
||||||
next;
|
next;
|
||||||
cutin "ep172_beta.bmp",2;
|
cutin "ep172_beta.bmp",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Is this a conflict of opinion?";
|
mes "Are we having a difference of opinion?";
|
||||||
next;
|
next;
|
||||||
cutin "16loo_03.bmp",0;
|
cutin "16loo_03.bmp",0;
|
||||||
mes "[Rookie]";
|
mes "[Rookie]";
|
||||||
mes "It's not like that...";
|
mes "Not really...";
|
||||||
mes "I think it will be a bit difficult if we all go.";
|
mes "I think it would be a little awkward if we all went.";
|
||||||
next;
|
next;
|
||||||
cutin "ep162_est01.bmp",1;
|
cutin "ep162_est01.bmp",1;
|
||||||
mes "[EST]";
|
mes "[Est]";
|
||||||
mes "Ah... I see.";
|
mes "Ah, I see.";
|
||||||
mes "Yes. If 'Rebellion' moves, it could become a diplomatic matter.";
|
mes "Yes. If the Rebellion moves, it could become a diplomatic issue.";
|
||||||
next;
|
next;
|
||||||
cutin "16loo_03.bmp",0;
|
cutin "16loo_03.bmp",0;
|
||||||
mes "[Rookie]";
|
mes "[Rookie]";
|
||||||
mes "Yes. Especially if it's Rachel.";
|
mes "Yes, even more so if it's Rachel.";
|
||||||
mes "The problem between the mansion and the business has not yet been fully resolved...";
|
mes "...and the problems between the mansion and the company haven't all been solved yet.";
|
||||||
next;
|
next;
|
||||||
cutin "ep172_beta.bmp",2;
|
cutin "ep172_beta.bmp",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Okay.";
|
mes "I see.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Then...";
|
mes "If so, then...";
|
||||||
next;
|
next;
|
||||||
select( "Why are you looking at me?" );
|
select( "Why are they looking at me?" );
|
||||||
cutin "",255;
|
cutin "",255;
|
||||||
mes "[" + strcharinfo(0) + "]";
|
mes "[" + strcharinfo(0) + "]";
|
||||||
mes "what are you doing?";
|
mes "What do I do?";
|
||||||
next;
|
next;
|
||||||
cutin "ep172_beta.bmp",2;
|
cutin "ep172_beta.bmp",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Let's go, Rachel.";
|
mes "Let's go, Rachel.";
|
||||||
npctalk "Rookie: name.", "Rookie#ep181_rk01", bc_self;
|
npctalk "Rookie: So it's a place name, huh?", "Rookie#ep181_rk01", bc_self;
|
||||||
npctalk "Est: Name.", "EST#ep181_est01", bc_self;
|
npctalk "Est: A place name.", "Est#ep181_est01", bc_self;
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Are other guests affiliated?";
|
mes "But the other guests have affiliations, don't they?";
|
||||||
mes "It is difficult when disputes arise because of jurisdiction.";
|
mes "It will be difficult if there is a conflict due to jurisdiction.";
|
||||||
mes "You never know how long it will take, so it's not suitable for a companion.";
|
mes "You don't know how long it will take, so it's not a good idea to accompany them.";
|
||||||
next;
|
next;
|
||||||
cutin "ep162_est01.bmp",1;
|
cutin "ep162_est01.bmp",1;
|
||||||
mes "[EST]";
|
mes "[Est]";
|
||||||
mes "It sounds like you want to go there yourself.";
|
mes "That sounds like you're saying you're definitely going to go in person.";
|
||||||
next;
|
next;
|
||||||
cutin "ep172_beta.bmp",2;
|
cutin "ep172_beta.bmp",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Yes.";
|
mes "Yes, it is.";
|
||||||
mes "Please wait a minute.";
|
mes "Please wait a moment.";
|
||||||
next;
|
next;
|
||||||
progressbar_npc "00CCFF",7;
|
progressbar_npc "CCFF",7;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "...";
|
mes "...";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "You have permission.";
|
mes "You're authorized.";
|
||||||
npctalk "Meeting ended.", "", bc_self;
|
npctalk "The meeting has ended.", "Smart Elly#ep18ely01", bc_self;
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "The purpose is support, not hindrance.";
|
mes "The purpose is not to hinder but to support.";
|
||||||
mes "I will follow you without burden.";
|
mes "We'll follow along, no pressure.";
|
||||||
mes "I'll give you this.";
|
mes "I will give this to you.";
|
||||||
next;
|
next;
|
||||||
cutin "",255;
|
cutin "",255;
|
||||||
mes "What Ellie gave her was a doll with a slightly droopy feel that resembled Ellie.";
|
mes "What Elly gave was a doll that looked exactly like Elly and felt a little stretched out.";
|
||||||
mes "It may not necessarily be Ellie.";
|
mes "It may not be Elly, but...";
|
||||||
next;
|
next;
|
||||||
cutin "ep172_beta.bmp",2;
|
cutin "ep172_beta.bmp",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "We have equipment that can transmit and receive data over long distances.";
|
mes "We also have equipment capable of long-distance data transmission and reception.";
|
||||||
mes "Because we are such beings.";
|
mes "Because that's who we are.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "But things are a little different now, so I'll give you a simple beta.";
|
mes "But things are a little different now, so I'll give you a beta version.";
|
||||||
npctalk "Be sure to take it with you", "", bc_self;
|
npctalk "Don't forget to take it with you.", "Smart Elly#ep18ely01", bc_self;
|
||||||
next;
|
next;
|
||||||
cutin "16loo_02.bmp",0;
|
cutin "16loo_02.bmp",0;
|
||||||
mes "[Rookie]";
|
mes "[Rookie]";
|
||||||
mes "Uh... Mini Ellie?";
|
mes "Uh... Mini Elly?";
|
||||||
next;
|
next;
|
||||||
cutin "ep172_beta.bmp",2;
|
cutin "ep172_beta.bmp",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Okay. I'll take that name.";
|
mes "Great, I'm adopting that name.";
|
||||||
mes "Using the resources of the main body, it is possible to collect visual and auditory information and communicate like a clone.";
|
mes "I can collect information like vision and hearing and communicate like an avatar using my own resources.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "There is no individual core, so the information obtained is not shared between betas unless I update it,";
|
mes "There are no individual cores, so the information I get is not shared between betas unless I update it,";
|
||||||
mes "If communication is lost, it's just a doll.";
|
mes "If communication is lost, it's just a puppet.";
|
||||||
next;
|
next;
|
||||||
cutin "16loo_01.bmp",0;
|
cutin "16loo_01.bmp",0;
|
||||||
mes "[Rookie]";
|
mes "[Rookie]";
|
||||||
mes "Then call us if you need assistance.";
|
mes "Then call us if you need our support.";
|
||||||
mes "Like Ellie, we will provide generous support except for the manpower.";
|
mes "I will support you without reservation, just like Elly, except for manpower.";
|
||||||
next;
|
next;
|
||||||
cutin "ep172_beta.bmp",2;
|
cutin "ep172_beta.bmp",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "It will be so";
|
mes "Yes, I will do that.";
|
||||||
mes "Please take care of yourself.";
|
mes "Please take care of yourself.";
|
||||||
npctalk "I'm going with you, but it's strange to greet you like this.", "", bc_self;
|
npctalk "It's strange to be greeting each other like this when we're going together.", "Smart Elly#ep18ely01", bc_self;
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "The almost exact coordinates from which the signal was sent...";
|
mes "The nearly exact coordinates of the signal's origin are...";
|
||||||
mes "About <NAVI>[here]<INFO>rachel,182,176,0,101,0</INFO></NAVI>";
|
mes "around <NAVI>[here]<INFO>rachel,182,176,0,101,0</INFO></NAVI> or so.";
|
||||||
ep18_1_main = 1;
|
ep18_main = 1;
|
||||||
setquest 8681;
|
setquest 8681;
|
||||||
getitem 400127,1; // Ep18_Mini_Elly
|
getitem 400127,1; // Ep18_Mini_Elly
|
||||||
close3;
|
close3;
|
||||||
}
|
}
|
||||||
if (ep18_1_main == 1) {
|
if (ep18_main == 1) {
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Please be safe.";
|
mes "Safe travels to Rachel.";
|
||||||
close;
|
close;
|
||||||
|
|
||||||
}
|
}
|
||||||
cutin "ep172_beta",2;
|
cutin "ep172_beta",2;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "No intermittent signal has been received yet.";
|
mes "No intermittent signal has been received yet.";
|
||||||
mes "The whereabouts of the master's collection 3 are also being tracked at the same time.";
|
mes "The whereabouts of the master's collection 3 are also being tracked at the same time.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Don't worry.";
|
mes "Don't worry.";
|
||||||
mes "Time is on our side.";
|
mes "Time is on our side.";
|
||||||
next;
|
next;
|
||||||
mes "[Ellie]";
|
mes "[Elly]";
|
||||||
mes "Me and Alpha will analyze the information properly, so I'd like you to clean up the intruders remnant.";
|
mes "Me and Alpha will analyze the information properly, so I'd like you to clean up the intruders remnant.";
|
||||||
close3;
|
close3;
|
||||||
|
|
||||||
@ -4339,7 +4340,7 @@ OnInit:
|
|||||||
// questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(18018) == 1" );
|
// questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(18018) == 1" );
|
||||||
|
|
||||||
// check for episode 17.2 completion
|
// check for episode 17.2 completion
|
||||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(8681) == 0 && isbegin_quest(18018) == 2 && BaseLevel >= 170" );
|
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(8681) == 0 && isbegin_quest(18018) == 2 && BaseLevel >= 170" );
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9389,8 +9390,8 @@ ba_in01,32,250,3 script Sweety#ep172_swty 4_EP17_SWEETY,{
|
|||||||
mes "[Almond]";
|
mes "[Almond]";
|
||||||
mes "Not possible.";
|
mes "Not possible.";
|
||||||
mes "You won't be able to receieve it even if it came.";
|
mes "You won't be able to receieve it even if it came.";
|
||||||
mes "Ellie took your receiving chip while we're repairing you.";
|
mes "Elly took your receiving chip while we're repairing you.";
|
||||||
mes "Doesn't that mean Ellie will take the orders for you?";
|
mes "Doesn't that mean Elly will take the orders for you?";
|
||||||
npctalk "No! I'll receive my next orders soon!", "", bc_self;
|
npctalk "No! I'll receive my next orders soon!", "", bc_self;
|
||||||
next;
|
next;
|
||||||
mes "[Almond]";
|
mes "[Almond]";
|
||||||
|
|||||||
13096
npc/re/quests/quests_18.txt
Normal file
13096
npc/re/quests/quests_18.txt
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1225,9 +1225,9 @@ OnInit:
|
|||||||
rockrdg1,160,306,3 duplicate(dummy_cloaked_npc) Johnny James#revt04 4_M_JOHNNYJAMES
|
rockrdg1,160,306,3 duplicate(dummy_cloaked_npc) Johnny James#revt04 4_M_JOHNNYJAMES
|
||||||
rockrdg1,168,306,3 duplicate(dummy_cloaked_npc) Albert Ford#revt08 4_M_ALBERTFORD
|
rockrdg1,168,306,3 duplicate(dummy_cloaked_npc) Albert Ford#revt08 4_M_ALBERTFORD
|
||||||
rockrdg1,156,302,7 duplicate(dummy_cloaked_npc) Ivoka Skudi#revt02 4_M_EVOKASCUDI
|
rockrdg1,156,302,7 duplicate(dummy_cloaked_npc) Ivoka Skudi#revt02 4_M_EVOKASCUDI
|
||||||
rockrdg1,156,306,5 duplicate(dummy_cloaked_npc) Cactus Gunslinger#revt01 4_M_EVOKASCUDI
|
rockrdg1,156,306,5 duplicate(dummy_cloaked_npc) Cactus Gunslinger#revt05 4_M_EVOKASCUDI
|
||||||
rockrdg1,161,302,1 duplicate(dummy_cloaked_npc) Cactus Gunslinger#revt02 4_M_EVOKASCUDI
|
rockrdg1,161,302,1 duplicate(dummy_cloaked_npc) Cactus Gunslinger#revt06 4_M_EVOKASCUDI
|
||||||
rockrdg1,164,306,3 duplicate(dummy_cloaked_npc) Cactus Gunslinger#revt03 4_M_EVOKASCUDI
|
rockrdg1,164,306,3 duplicate(dummy_cloaked_npc) Cactus Gunslinger#revt07 4_M_EVOKASCUDI
|
||||||
|
|
||||||
rockrdg1,156,312,3 script Unmoving Freight Train# 4_ENERGY_RED,{
|
rockrdg1,156,312,3 script Unmoving Freight Train# 4_ENERGY_RED,{
|
||||||
if (rock_main_quest == 5) {
|
if (rock_main_quest == 5) {
|
||||||
|
|||||||
@ -247,7 +247,7 @@ npc: npc/re/quests/quests_16_2.txt
|
|||||||
npc: npc/re/quests/quests_illusion_dungeons.txt
|
npc: npc/re/quests/quests_illusion_dungeons.txt
|
||||||
npc: npc/re/quests/quests_17_1.txt
|
npc: npc/re/quests/quests_17_1.txt
|
||||||
npc: npc/re/quests/quests_17_2.txt
|
npc: npc/re/quests/quests_17_2.txt
|
||||||
npc: npc/re/quests/quests_18_1.txt
|
npc: npc/re/quests/quests_18.txt
|
||||||
npc: npc/re/quests/quests_19.txt
|
npc: npc/re/quests/quests_19.txt
|
||||||
npc: npc/re/quests/quests_aldebaran.txt
|
npc: npc/re/quests/quests_aldebaran.txt
|
||||||
npc: npc/re/quests/quests_dewata.txt
|
npc: npc/re/quests/quests_dewata.txt
|
||||||
|
|||||||
@ -22,3 +22,4 @@ npc: npc/re/mapflag/town.txt
|
|||||||
npc: npc/re/mapflag/reset.txt
|
npc: npc/re/mapflag/reset.txt
|
||||||
npc: npc/re/mapflag/skill_duration.txt
|
npc: npc/re/mapflag/skill_duration.txt
|
||||||
npc: npc/re/mapflag/nodynamicnpc.txt
|
npc: npc/re/mapflag/nodynamicnpc.txt
|
||||||
|
npc: npc/re/mapflag/specialpopup.txt
|
||||||
|
|||||||
1
sql-files/upgrades/upgrade_20240803.sql
Normal file
1
sql-files/upgrades/upgrade_20240803.sql
Normal file
@ -0,0 +1 @@
|
|||||||
|
UPDATE `char_reg_num` SET `key` = 'ep18_main' WHERE `key` = 'ep18_1_main';
|
||||||
@ -1675,7 +1675,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
|||||||
damage += damage * bonus / 100;
|
damage += damage * bonus / 100;
|
||||||
}
|
}
|
||||||
if (tsc->getSCE(SC_HOLY_OIL) && (flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON))
|
if (tsc->getSCE(SC_HOLY_OIL) && (flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON))
|
||||||
damage += damage * 50 / 100;// Need official adjustment. [Rytech]
|
damage += damage * (3 * tsc->getSCE(SC_HOLY_OIL)->val1) / 100;
|
||||||
|
|
||||||
if( tsc->getSCE( SC_RUSH_QUAKE1 ) && ( flag&BF_WEAPON ) == BF_WEAPON ){
|
if( tsc->getSCE( SC_RUSH_QUAKE1 ) && ( flag&BF_WEAPON ) == BF_WEAPON ){
|
||||||
damage += damage * 50 / 100;
|
damage += damage * 50 / 100;
|
||||||
@ -11529,6 +11529,13 @@ static const struct _battle_data {
|
|||||||
#endif
|
#endif
|
||||||
{ "synchronize_damage", &battle_config.synchronize_damage, 0, 0, 1, },
|
{ "synchronize_damage", &battle_config.synchronize_damage, 0, 0, 1, },
|
||||||
{ "item_stacking", &battle_config.item_stacking, 1, 0, 1, },
|
{ "item_stacking", &battle_config.item_stacking, 1, 0, 1, },
|
||||||
|
#ifdef RENEWAL
|
||||||
|
{ "hom_delay_reset_vaporize", &battle_config.hom_delay_reset_vaporize, 0, 0, 1, },
|
||||||
|
{ "hom_delay_reset_warp", &battle_config.hom_delay_reset_warp, 0, 0, 1, },
|
||||||
|
#else
|
||||||
|
{ "hom_delay_reset_vaporize", &battle_config.hom_delay_reset_vaporize, 1, 0, 1, },
|
||||||
|
{ "hom_delay_reset_warp", &battle_config.hom_delay_reset_warp, 1, 0, 1, },
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <custom/battle_config_init.inc>
|
#include <custom/battle_config_init.inc>
|
||||||
};
|
};
|
||||||
|
|||||||
@ -762,6 +762,8 @@ struct Battle_Config
|
|||||||
int instance_allow_reconnect;
|
int instance_allow_reconnect;
|
||||||
int synchronize_damage;
|
int synchronize_damage;
|
||||||
int item_stacking;
|
int item_stacking;
|
||||||
|
int hom_delay_reset_vaporize;
|
||||||
|
int hom_delay_reset_warp;
|
||||||
|
|
||||||
#include <custom/battle_config_struct.inc>
|
#include <custom/battle_config_struct.inc>
|
||||||
};
|
};
|
||||||
|
|||||||
@ -3670,16 +3670,16 @@ void clif_updatestatus( map_session_data& sd, enum _sp type ){
|
|||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
case SP_BASEEXP:
|
case SP_BASEEXP:
|
||||||
clif_par_change(sd, type, client_exp(sd.status.base_exp));
|
clif_longpar_change(sd, type, client_exp(sd.status.base_exp));
|
||||||
break;
|
break;
|
||||||
case SP_JOBEXP:
|
case SP_JOBEXP:
|
||||||
clif_par_change(sd, type, client_exp(sd.status.job_exp));
|
clif_longpar_change(sd, type, client_exp(sd.status.job_exp));
|
||||||
break;
|
break;
|
||||||
case SP_NEXTBASEEXP:
|
case SP_NEXTBASEEXP:
|
||||||
clif_par_change(sd, type, client_exp(pc_nextbaseexp(&sd)));
|
clif_longpar_change(sd, type, client_exp(pc_nextbaseexp(&sd)));
|
||||||
break;
|
break;
|
||||||
case SP_NEXTJOBEXP:
|
case SP_NEXTJOBEXP:
|
||||||
clif_par_change(sd, type, client_exp(pc_nextjobexp(&sd)));
|
clif_longpar_change(sd, type, client_exp(pc_nextjobexp(&sd)));
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -10804,8 +10804,7 @@ void clif_parse_LoadEndAck(int fd,map_session_data *sd)
|
|||||||
clif_hominfo(sd,sd->hd,1);
|
clif_hominfo(sd,sd->hd,1);
|
||||||
clif_hominfo(sd,sd->hd,0); //for some reason, at least older clients want this sent twice
|
clif_hominfo(sd,sd->hd,0); //for some reason, at least older clients want this sent twice
|
||||||
clif_homskillinfoblock( *sd->hd );
|
clif_homskillinfoblock( *sd->hd );
|
||||||
if( battle_config.hom_setting&HOMSET_COPY_SPEED )
|
status_calc_bl(&sd->hd->bl, { SCB_SPEED });
|
||||||
status_calc_bl(&sd->hd->bl, { SCB_SPEED }); //Homunc mimic their master's speed on each map change
|
|
||||||
if( !(battle_config.hom_setting&HOMSET_NO_INSTANT_LAND_SKILL) )
|
if( !(battle_config.hom_setting&HOMSET_NO_INSTANT_LAND_SKILL) )
|
||||||
skill_unit_move(&sd->hd->bl,gettick(),1); // apply land skills immediately
|
skill_unit_move(&sd->hd->bl,gettick(),1); // apply land skills immediately
|
||||||
}
|
}
|
||||||
@ -10824,9 +10823,9 @@ void clif_parse_LoadEndAck(int fd,map_session_data *sd)
|
|||||||
return;
|
return;
|
||||||
clif_spawn(&sd->ed->bl);
|
clif_spawn(&sd->ed->bl);
|
||||||
clif_elemental_info(sd);
|
clif_elemental_info(sd);
|
||||||
clif_elemental_updatestatus(sd,SP_HP);
|
clif_elemental_updatestatus(*sd, SP_HP);
|
||||||
clif_hpmeter_single( *sd, sd->ed->bl.id, sd->ed->battle_status.hp, sd->ed->battle_status.max_hp );
|
clif_hpmeter_single( *sd, sd->ed->bl.id, sd->ed->battle_status.hp, sd->ed->battle_status.max_hp );
|
||||||
clif_elemental_updatestatus(sd,SP_SP);
|
clif_elemental_updatestatus(*sd, SP_SP);
|
||||||
status_calc_bl(&sd->ed->bl, { SCB_SPEED }); //Elemental mimic their master's speed on each map change
|
status_calc_bl(&sd->ed->bl, { SCB_SPEED }); //Elemental mimic their master's speed on each map change
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18788,34 +18787,36 @@ void clif_parse_ItemListWindowSelected(int fd, map_session_data* sd) {
|
|||||||
/*==========================================
|
/*==========================================
|
||||||
* Elemental System
|
* Elemental System
|
||||||
*==========================================*/
|
*==========================================*/
|
||||||
void clif_elemental_updatestatus(map_session_data *sd, int type) {
|
|
||||||
s_elemental_data *ed;
|
|
||||||
struct status_data *status;
|
|
||||||
int fd;
|
|
||||||
|
|
||||||
if( !clif_session_isValid(sd) || (ed = sd->ed) == nullptr )
|
/// Notifies client of a change in an elemental's status parameter.
|
||||||
|
/// 0x81e <type>.W <value>.L (ZC_EL_PAR_CHANGE)
|
||||||
|
void clif_elemental_updatestatus(map_session_data& sd, _sp type) {
|
||||||
|
#if PACKETVER >= 20100309
|
||||||
|
if (sd.ed == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fd = sd->fd;
|
PACKET_ZC_EL_PAR_CHANGE p = {};
|
||||||
status = &ed->battle_status;
|
|
||||||
WFIFOHEAD(fd,8);
|
p.packetType = HEADER_ZC_EL_PAR_CHANGE;
|
||||||
WFIFOW(fd,0) = 0x81e;
|
p.type = static_cast<decltype(p.type)>(type);
|
||||||
WFIFOW(fd,2) = type;
|
status_data* status = &sd.ed->battle_status;
|
||||||
switch( type ) {
|
switch( type ) {
|
||||||
case SP_HP:
|
case SP_HP:
|
||||||
WFIFOL(fd,4) = status->hp;
|
p.value = static_cast<decltype(p.value)>(status->hp);
|
||||||
break;
|
break;
|
||||||
case SP_MAXHP:
|
case SP_MAXHP:
|
||||||
WFIFOL(fd,4) = status->max_hp;
|
p.value = static_cast<decltype(p.value)>(status->max_hp);
|
||||||
break;
|
break;
|
||||||
case SP_SP:
|
case SP_SP:
|
||||||
WFIFOL(fd,4) = status->sp;
|
p.value = static_cast<decltype(p.value)>(status->sp);
|
||||||
break;
|
break;
|
||||||
case SP_MAXSP:
|
case SP_MAXSP:
|
||||||
WFIFOL(fd,4) = status->max_sp;
|
p.value = static_cast<decltype(p.value)>(status->max_sp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
WFIFOSET(fd,8);
|
|
||||||
|
clif_send( &p, sizeof( p ), &sd.bl, SELF );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void clif_elemental_info(map_session_data *sd) {
|
void clif_elemental_info(map_session_data *sd) {
|
||||||
@ -19714,6 +19715,12 @@ static void clif_loadConfirm( map_session_data *sd ){
|
|||||||
/// 0447
|
/// 0447
|
||||||
void clif_parse_blocking_playcancel( int fd, map_session_data *sd ){
|
void clif_parse_blocking_playcancel( int fd, map_session_data *sd ){
|
||||||
clif_loadConfirm( sd );
|
clif_loadConfirm( sd );
|
||||||
|
|
||||||
|
int32 mf = map_getmapflag(sd->bl.m, MF_SPECIALPOPUP);
|
||||||
|
|
||||||
|
if (mf > 0) {
|
||||||
|
clif_specialpopup(*sd, mf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// req world info (CZ_CLIENT_VERSION)
|
/// req world info (CZ_CLIENT_VERSION)
|
||||||
@ -25120,6 +25127,20 @@ void clif_set_npc_window_pos_percent(map_session_data& sd, int x, int y)
|
|||||||
#endif // PACKETVER_MAIN_NUM >= 20220504
|
#endif // PACKETVER_MAIN_NUM >= 20220504
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Displays a special popup.
|
||||||
|
/// Works only if player moved from one map to another.
|
||||||
|
/// 0bbe <popup id>.L (ZC_SPECIALPOPUP)
|
||||||
|
void clif_specialpopup(map_session_data& sd, int32 id ){
|
||||||
|
#if PACKETVER >= 20221005
|
||||||
|
PACKET_ZC_SPECIALPOPUP p = {};
|
||||||
|
|
||||||
|
p.PacketType = HEADER_ZC_SPECIALPOPUP;
|
||||||
|
p.ppId = id;
|
||||||
|
|
||||||
|
clif_send( &p, sizeof( p ), &sd.bl, SELF);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
* Main client packet processing function
|
* Main client packet processing function
|
||||||
*------------------------------------------*/
|
*------------------------------------------*/
|
||||||
|
|||||||
@ -1299,7 +1299,7 @@ void clif_autoshadowspell_list( map_session_data& sd );
|
|||||||
|
|
||||||
int clif_skill_itemlistwindow( map_session_data *sd, uint16 skill_id, uint16 skill_lv );
|
int clif_skill_itemlistwindow( map_session_data *sd, uint16 skill_id, uint16 skill_lv );
|
||||||
void clif_elemental_info(map_session_data *sd);
|
void clif_elemental_info(map_session_data *sd);
|
||||||
void clif_elemental_updatestatus(map_session_data *sd, int type);
|
void clif_elemental_updatestatus(map_session_data& sd, _sp type);
|
||||||
|
|
||||||
void clif_spiritcharm( map_session_data& sd );
|
void clif_spiritcharm( map_session_data& sd );
|
||||||
|
|
||||||
@ -1456,4 +1456,6 @@ void clif_set_npc_window_pos_percent(map_session_data& sd, int x, int y);
|
|||||||
|
|
||||||
void clif_noask_sub( map_session_data& sd, map_session_data& tsd, int type );
|
void clif_noask_sub( map_session_data& sd, map_session_data& tsd, int type );
|
||||||
|
|
||||||
|
void clif_specialpopup(map_session_data& sd, int32 id);
|
||||||
|
|
||||||
#endif /* CLIF_HPP */
|
#endif /* CLIF_HPP */
|
||||||
|
|||||||
@ -1544,7 +1544,6 @@
|
|||||||
//packet(0x081B,4);
|
//packet(0x081B,4);
|
||||||
//packet(0x081C,6);
|
//packet(0x081C,6);
|
||||||
packet(0x081d,22);
|
packet(0x081d,22);
|
||||||
packet(0x081e,8);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 2010-03-23aRagexeRE
|
// 2010-03-23aRagexeRE
|
||||||
|
|||||||
@ -282,9 +282,9 @@ int elemental_data_received(s_elemental *ele, bool flag) {
|
|||||||
return 0;
|
return 0;
|
||||||
clif_spawn(&ed->bl);
|
clif_spawn(&ed->bl);
|
||||||
clif_elemental_info(sd);
|
clif_elemental_info(sd);
|
||||||
clif_elemental_updatestatus(sd,SP_HP);
|
clif_elemental_updatestatus(*sd, SP_HP);
|
||||||
clif_hpmeter_single( *sd, ed->bl.id, ed->battle_status.hp, ed->battle_status.max_hp );
|
clif_hpmeter_single( *sd, ed->bl.id, ed->battle_status.hp, ed->battle_status.max_hp );
|
||||||
clif_elemental_updatestatus(sd,SP_SP);
|
clif_elemental_updatestatus(*sd, SP_SP);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -441,9 +441,9 @@ void elemental_heal(s_elemental_data *ed, int hp, int sp) {
|
|||||||
if (ed->master == nullptr)
|
if (ed->master == nullptr)
|
||||||
return;
|
return;
|
||||||
if( hp )
|
if( hp )
|
||||||
clif_elemental_updatestatus(ed->master, SP_HP);
|
clif_elemental_updatestatus(*ed->master, SP_HP);
|
||||||
if( sp )
|
if( sp )
|
||||||
clif_elemental_updatestatus(ed->master, SP_SP);
|
clif_elemental_updatestatus(*ed->master, SP_SP);
|
||||||
}
|
}
|
||||||
|
|
||||||
int elemental_dead(s_elemental_data *ed) {
|
int elemental_dead(s_elemental_data *ed) {
|
||||||
@ -595,8 +595,8 @@ static int elemental_ai_sub_timer(s_elemental_data *ed, map_session_data *sd, t_
|
|||||||
if( master_dist > AREA_SIZE ) { // Master out of vision range.
|
if( master_dist > AREA_SIZE ) { // Master out of vision range.
|
||||||
elemental_unlocktarget(ed);
|
elemental_unlocktarget(ed);
|
||||||
unit_warp(&ed->bl,sd->bl.m,sd->bl.x,sd->bl.y,CLR_TELEPORT);
|
unit_warp(&ed->bl,sd->bl.m,sd->bl.x,sd->bl.y,CLR_TELEPORT);
|
||||||
clif_elemental_updatestatus(sd,SP_HP);
|
clif_elemental_updatestatus(*sd, SP_HP);
|
||||||
clif_elemental_updatestatus(sd,SP_SP);
|
clif_elemental_updatestatus(*sd, SP_SP);
|
||||||
return 0;
|
return 0;
|
||||||
} else if( master_dist > MAX_ELEDISTANCE ) { // Master too far, chase.
|
} else if( master_dist > MAX_ELEDISTANCE ) { // Master too far, chase.
|
||||||
short x = sd->bl.x, y = sd->bl.y;
|
short x = sd->bl.x, y = sd->bl.y;
|
||||||
|
|||||||
@ -289,10 +289,11 @@ int hom_vaporize(map_session_data *sd, int flag)
|
|||||||
//Delete timers when vaporized.
|
//Delete timers when vaporized.
|
||||||
hom_hungry_timer_delete(hd);
|
hom_hungry_timer_delete(hd);
|
||||||
hd->homunculus.vaporize = flag ? flag : HOM_ST_REST;
|
hd->homunculus.vaporize = flag ? flag : HOM_ST_REST;
|
||||||
if (battle_config.hom_setting&HOMSET_RESET_REUSESKILL_VAPORIZED) {
|
if (battle_config.hom_delay_reset_vaporize) {
|
||||||
hd->blockskill.clear();
|
hd->blockskill.clear();
|
||||||
hd->blockskill.shrink_to_fit();
|
hd->blockskill.shrink_to_fit();
|
||||||
}
|
}
|
||||||
|
status_change_clear(&hd->bl, 1);
|
||||||
clif_hominfo(sd, sd->hd, 0);
|
clif_hominfo(sd, sd->hd, 0);
|
||||||
hom_save(hd);
|
hom_save(hd);
|
||||||
|
|
||||||
@ -1138,8 +1139,7 @@ bool hom_call(map_session_data *sd)
|
|||||||
clif_hominfo(sd,hd,1);
|
clif_hominfo(sd,hd,1);
|
||||||
clif_hominfo(sd,hd,0); // send this x2. dunno why, but kRO does that [blackhole89]
|
clif_hominfo(sd,hd,0); // send this x2. dunno why, but kRO does that [blackhole89]
|
||||||
clif_homskillinfoblock( *hd );
|
clif_homskillinfoblock( *hd );
|
||||||
if (battle_config.hom_setting&HOMSET_COPY_SPEED)
|
status_calc_bl(&hd->bl, { SCB_SPEED });
|
||||||
status_calc_bl(&hd->bl, { SCB_SPEED });
|
|
||||||
hom_save(hd);
|
hom_save(hd);
|
||||||
} else
|
} else
|
||||||
//Warp him to master.
|
//Warp him to master.
|
||||||
|
|||||||
@ -168,8 +168,6 @@ enum homun_setting : uint8 {
|
|||||||
HOMSET_COPY_SPEED = 0x08, /// Copy their master's speed on spawn/map-change
|
HOMSET_COPY_SPEED = 0x08, /// Copy their master's speed on spawn/map-change
|
||||||
HOMSET_DISPLAY_LUK = 0x10, /// They display luk/3+1 instead of their actual critical in the stat window, by default they don't crit
|
HOMSET_DISPLAY_LUK = 0x10, /// They display luk/3+1 instead of their actual critical in the stat window, by default they don't crit
|
||||||
HOMSET_SAME_MATK = 0x20, /// Their Min-Matk is always the same as their max
|
HOMSET_SAME_MATK = 0x20, /// Their Min-Matk is always the same as their max
|
||||||
HOMSET_RESET_REUSESKILL_VAPORIZED = 0x40, /// Skill re-use delay is reset when they are vaporized.
|
|
||||||
HOMSET_RESET_REUSESKILL_TELEPORTED = 0x80, /// Skill re-use delay is reset when they are warped (by skill or item) with player.
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum e_homun_grade : uint8 {
|
enum e_homun_grade : uint8 {
|
||||||
|
|||||||
@ -4785,6 +4785,14 @@ bool map_setmapflag_sub(int16 m, enum e_mapflag mapflag, bool status, union u_ma
|
|||||||
mapdata->setMapFlag(MF_NOBASEEXP, false);
|
mapdata->setMapFlag(MF_NOBASEEXP, false);
|
||||||
ShowWarning("map_setmapflag: Unable to set No Base EXP and BEXP flags for the same map! Removing No Base EXP flag from %s.\n", mapdata->name);
|
ShowWarning("map_setmapflag: Unable to set No Base EXP and BEXP flags for the same map! Removing No Base EXP flag from %s.\n", mapdata->name);
|
||||||
}
|
}
|
||||||
|
mapdata->setMapFlag(mapflag, args->flag_val);
|
||||||
|
} else
|
||||||
|
mapdata->setMapFlag(mapflag, false);
|
||||||
|
break;
|
||||||
|
case MF_SPECIALPOPUP:
|
||||||
|
if (status) {
|
||||||
|
nullpo_retr(false, args);
|
||||||
|
|
||||||
mapdata->setMapFlag(mapflag, args->flag_val);
|
mapdata->setMapFlag(mapflag, args->flag_val);
|
||||||
} else
|
} else
|
||||||
mapdata->setMapFlag(mapflag, false);
|
mapdata->setMapFlag(mapflag, false);
|
||||||
|
|||||||
@ -676,6 +676,7 @@ enum e_mapflag : int16 {
|
|||||||
MF_NOBUYINGSTORE,
|
MF_NOBUYINGSTORE,
|
||||||
MF_NODYNAMICNPC,
|
MF_NODYNAMICNPC,
|
||||||
MF_NOBANK,
|
MF_NOBANK,
|
||||||
|
MF_SPECIALPOPUP,
|
||||||
MF_NOLOOTNORMALMOB,
|
MF_NOLOOTNORMALMOB,
|
||||||
MF_NO_NPC_SELFDESTRUCTION_ON_ALL,
|
MF_NO_NPC_SELFDESTRUCTION_ON_ALL,
|
||||||
MF_MAX
|
MF_MAX
|
||||||
|
|||||||
@ -5507,6 +5507,16 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
|
|||||||
map_setmapflag_sub(m, mapflag, state, &args);
|
map_setmapflag_sub(m, mapflag, state, &args);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MF_SPECIALPOPUP: {
|
||||||
|
union u_mapflag_args args = {};
|
||||||
|
|
||||||
|
if (sscanf(w4, "%11d", &args.flag_val) < 1)
|
||||||
|
args.flag_val = 0;
|
||||||
|
|
||||||
|
map_setmapflag_sub(m, mapflag, state, &args);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case MF_SKILL_DAMAGE: {
|
case MF_SKILL_DAMAGE: {
|
||||||
char skill_name[SKILL_NAME_LENGTH];
|
char skill_name[SKILL_NAME_LENGTH];
|
||||||
|
|||||||
@ -1154,6 +1154,13 @@ struct PACKET_CZ_PARTY_JOIN_REQ_ACK{
|
|||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
DEFINE_PACKET_HEADER(CZ_PARTY_JOIN_REQ_ACK, 0x2c7);
|
DEFINE_PACKET_HEADER(CZ_PARTY_JOIN_REQ_ACK, 0x2c7);
|
||||||
|
|
||||||
|
struct PACKET_ZC_EL_PAR_CHANGE {
|
||||||
|
int16 packetType;
|
||||||
|
uint16 type;
|
||||||
|
uint32 value;
|
||||||
|
} __attribute__((packed));
|
||||||
|
DEFINE_PACKET_HEADER(ZC_EL_PAR_CHANGE, 0x81e);
|
||||||
|
|
||||||
// NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
|
// NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
|
||||||
#if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
|
#if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
|
||||||
#pragma pack( pop )
|
#pragma pack( pop )
|
||||||
|
|||||||
@ -7008,6 +7008,16 @@ enum e_setpos pc_setpos(map_session_data* sd, unsigned short mapindex, int x, in
|
|||||||
|
|
||||||
if( hom_is_active(sd->hd) )
|
if( hom_is_active(sd->hd) )
|
||||||
{
|
{
|
||||||
|
if (sd->state.changemap)
|
||||||
|
status_db.removeByStatusFlag(&sd->hd->bl, { SCF_REMOVEFROMHOMONMAPWARP });
|
||||||
|
else
|
||||||
|
status_db.removeByStatusFlag(&sd->hd->bl, { SCF_REMOVEFROMHOMONWARP });
|
||||||
|
|
||||||
|
if (battle_config.hom_delay_reset_warp) {
|
||||||
|
sd->hd->blockskill.clear();
|
||||||
|
sd->hd->blockskill.shrink_to_fit();
|
||||||
|
}
|
||||||
|
|
||||||
sd->hd->bl.m = m;
|
sd->hd->bl.m = m;
|
||||||
sd->hd->bl.x = sd->hd->ud.to_x = x;
|
sd->hd->bl.x = sd->hd->ud.to_x = x;
|
||||||
sd->hd->bl.y = sd->hd->ud.to_y = y;
|
sd->hd->bl.y = sd->hd->ud.to_y = y;
|
||||||
|
|||||||
@ -15337,18 +15337,16 @@ BUILDIN_FUNC(petskillsupport)
|
|||||||
return SCRIPT_CMD_SUCCESS;
|
return SCRIPT_CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void script_skill_effect(block_list *bl, uint16 skill_id, uint16 skill_lv, int16 x, int16 y) {
|
static inline void script_skill_effect( block_list& bl, uint16 skill_id, uint16 skill_lv, int16 x, int16 y ) {
|
||||||
nullpo_retv(bl);
|
|
||||||
|
|
||||||
switch (skill_get_casttype(skill_id)) {
|
switch (skill_get_casttype(skill_id)) {
|
||||||
case CAST_GROUND:
|
case CAST_GROUND:
|
||||||
clif_skill_poseffect(bl, skill_id, skill_lv, x, y, gettick());
|
clif_skill_poseffect(&bl, skill_id, skill_lv, x, y, gettick());
|
||||||
break;
|
break;
|
||||||
case CAST_NODAMAGE:
|
case CAST_NODAMAGE:
|
||||||
clif_skill_nodamage(bl, bl, skill_id, skill_lv, 1);
|
clif_skill_nodamage(&bl, &bl, skill_id, skill_lv, 1);
|
||||||
break;
|
break;
|
||||||
case CAST_DAMAGE:
|
case CAST_DAMAGE:
|
||||||
clif_skill_damage(bl, bl, gettick(), status_get_amotion(bl), status_get_dmotion(bl), 0, 1, skill_id, skill_lv, skill_get_hit(skill_id));
|
clif_skill_damage(&bl, &bl, gettick(), status_get_amotion(&bl), status_get_dmotion(&bl), 0, 1, skill_id, skill_lv, skill_get_hit(skill_id));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -15356,32 +15354,46 @@ static inline void script_skill_effect(block_list *bl, uint16 skill_id, uint16 s
|
|||||||
/*==========================================
|
/*==========================================
|
||||||
* Scripted skill effects [Celest]
|
* Scripted skill effects [Celest]
|
||||||
*------------------------------------------*/
|
*------------------------------------------*/
|
||||||
/// skilleffect <skill id>,<level>
|
/// skilleffect <skill id>,<level>{,<game id>}
|
||||||
/// skilleffect "<skill name>",<level>
|
/// skilleffect "<skill name>",<level>{,<game id>}
|
||||||
BUILDIN_FUNC(skilleffect)
|
BUILDIN_FUNC(skilleffect)
|
||||||
{
|
{
|
||||||
TBL_PC *sd;
|
block_list* bl;
|
||||||
uint16 skill_id, skill_lv;
|
map_session_data* sd;
|
||||||
|
|
||||||
if( !script_rid2sd(sd) )
|
if (script_hasdata(st, 4)) {
|
||||||
return SCRIPT_CMD_FAILURE;
|
if (!script_rid2bl(4, bl))
|
||||||
|
return SCRIPT_CMD_SUCCESS;
|
||||||
skill_id = ( script_isstring(st, 2) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) );
|
}
|
||||||
skill_lv = script_getnum(st,3);
|
else {
|
||||||
|
// target is the character attached (default)
|
||||||
|
if (!script_rid2sd(sd))
|
||||||
|
return SCRIPT_CMD_SUCCESS;
|
||||||
|
|
||||||
|
bl = &sd->bl;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16 skill_id = ( script_isstring(st, 2) ? skill_name2id(script_getstr(st, 2)) : script_getnum(st, 2) );
|
||||||
|
|
||||||
if (skill_db.find(skill_id) == nullptr) {
|
if (skill_db.find(skill_id) == nullptr) {
|
||||||
ShowError("buildin_skilleffect: Invalid skill defined (%s)!\n", script_getstr(st, 2));
|
ShowError("buildin_skilleffect: Invalid skill defined (%s)!\n", script_getstr(st, 2));
|
||||||
return SCRIPT_CMD_FAILURE;
|
return SCRIPT_CMD_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ensure we're standing because the following packet causes the client to virtually set the char to stand,
|
uint16 skill_lv = script_getnum(st, 3);
|
||||||
* which leaves the server thinking it still is sitting. */
|
|
||||||
if( pc_issit(sd) && pc_setstand(sd, false) ) {
|
if (bl->type == BL_PC) {
|
||||||
skill_sit(sd, 0);
|
/* Ensure we're standing because the following packet causes the client to virtually set the char to stand,
|
||||||
clif_standing(&sd->bl);
|
* which leaves the server thinking it still is sitting. */
|
||||||
|
sd = reinterpret_cast<map_session_data*>( bl );
|
||||||
|
|
||||||
|
if (pc_issit(sd) && pc_setstand(sd, false)) {
|
||||||
|
skill_sit(sd, 0);
|
||||||
|
clif_standing(&sd->bl);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
script_skill_effect(&sd->bl, skill_id, skill_lv, sd->bl.x, sd->bl.y);
|
script_skill_effect( *bl, skill_id, skill_lv, bl->x, bl->y );
|
||||||
|
|
||||||
return SCRIPT_CMD_SUCCESS;
|
return SCRIPT_CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -15413,7 +15425,7 @@ BUILDIN_FUNC(npcskilleffect)
|
|||||||
return SCRIPT_CMD_FAILURE;
|
return SCRIPT_CMD_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
script_skill_effect(bl, skill_id, skill_lv, bl->x, bl->y);
|
script_skill_effect( *bl, skill_id, skill_lv, bl->x, bl->y );
|
||||||
|
|
||||||
return SCRIPT_CMD_SUCCESS;
|
return SCRIPT_CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -15849,7 +15861,7 @@ BUILDIN_FUNC(addhomintimacy)
|
|||||||
homun_data *hd;
|
homun_data *hd;
|
||||||
|
|
||||||
if (!script_charid2sd(3, sd) || !(hd = sd->hd))
|
if (!script_charid2sd(3, sd) || !(hd = sd->hd))
|
||||||
return SCRIPT_CMD_FAILURE;
|
return SCRIPT_CMD_SUCCESS;
|
||||||
|
|
||||||
int32 value = script_getnum(st, 2);
|
int32 value = script_getnum(st, 2);
|
||||||
|
|
||||||
@ -27234,6 +27246,22 @@ BUILDIN_FUNC(opentips){
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a special popup.
|
||||||
|
* specialpopup(<popup id>);
|
||||||
|
*/
|
||||||
|
BUILDIN_FUNC(specialpopup) {
|
||||||
|
map_session_data* sd;
|
||||||
|
|
||||||
|
if( !script_rid2sd(sd) )
|
||||||
|
return SCRIPT_CMD_FAILURE;
|
||||||
|
|
||||||
|
int32 id = script_getnum(st,2);
|
||||||
|
clif_specialpopup(*sd, id);
|
||||||
|
|
||||||
|
return SCRIPT_CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
BUILDIN_FUNC(setdialogalign){
|
BUILDIN_FUNC(setdialogalign){
|
||||||
map_session_data *sd;
|
map_session_data *sd;
|
||||||
|
|
||||||
@ -27732,7 +27760,7 @@ struct script_function buildin_func[] = {
|
|||||||
BUILDIN_DEF(petskillattack,"viii"), // [Skotlex]
|
BUILDIN_DEF(petskillattack,"viii"), // [Skotlex]
|
||||||
BUILDIN_DEF(petskillattack2,"viiii"), // [Valaris]
|
BUILDIN_DEF(petskillattack2,"viiii"), // [Valaris]
|
||||||
BUILDIN_DEF(petskillsupport,"viiii"), // [Skotlex]
|
BUILDIN_DEF(petskillsupport,"viiii"), // [Skotlex]
|
||||||
BUILDIN_DEF(skilleffect,"vi"), // skill effect [Celest]
|
BUILDIN_DEF(skilleffect,"vi?"), // skill effect [Celest]
|
||||||
BUILDIN_DEF(npcskilleffect,"viii"), // npc skill effect [Valaris]
|
BUILDIN_DEF(npcskilleffect,"viii"), // npc skill effect [Valaris]
|
||||||
BUILDIN_DEF(specialeffect,"i??"), // npc skill effect [Valaris]
|
BUILDIN_DEF(specialeffect,"i??"), // npc skill effect [Valaris]
|
||||||
BUILDIN_DEF(specialeffect2,"i??"), // skill effect on players[Valaris]
|
BUILDIN_DEF(specialeffect2,"i??"), // skill effect on players[Valaris]
|
||||||
@ -28164,6 +28192,7 @@ struct script_function buildin_func[] = {
|
|||||||
BUILDIN_DEF(has_autoloot,"?"),
|
BUILDIN_DEF(has_autoloot,"?"),
|
||||||
BUILDIN_DEF(autoloot,"??"),
|
BUILDIN_DEF(autoloot,"??"),
|
||||||
BUILDIN_DEF(opentips, "i?"),
|
BUILDIN_DEF(opentips, "i?"),
|
||||||
|
BUILDIN_DEF(specialpopup,"i"),
|
||||||
|
|
||||||
BUILDIN_DEF(setdialogalign, "i"),
|
BUILDIN_DEF(setdialogalign, "i"),
|
||||||
BUILDIN_DEF(setdialogsize, "ii"),
|
BUILDIN_DEF(setdialogsize, "ii"),
|
||||||
|
|||||||
@ -538,6 +538,7 @@
|
|||||||
export_constant(MF_NOBUYINGSTORE);
|
export_constant(MF_NOBUYINGSTORE);
|
||||||
export_constant(MF_NODYNAMICNPC);
|
export_constant(MF_NODYNAMICNPC);
|
||||||
export_constant(MF_NOBANK);
|
export_constant(MF_NOBANK);
|
||||||
|
export_constant(MF_SPECIALPOPUP);
|
||||||
export_constant(MF_NOLOOTNORMALMOB);
|
export_constant(MF_NOLOOTNORMALMOB);
|
||||||
export_constant(MF_NO_NPC_SELFDESTRUCTION_ON_ALL);
|
export_constant(MF_NO_NPC_SELFDESTRUCTION_ON_ALL);
|
||||||
|
|
||||||
@ -11300,6 +11301,8 @@
|
|||||||
export_constant(SCF_REMOVEONUNEQUIPARMOR);
|
export_constant(SCF_REMOVEONUNEQUIPARMOR);
|
||||||
export_constant(SCF_REMOVEONHERMODE);
|
export_constant(SCF_REMOVEONHERMODE);
|
||||||
export_constant(SCF_REQUIRENOWEAPON);
|
export_constant(SCF_REQUIRENOWEAPON);
|
||||||
|
export_constant(SCF_REMOVEFROMHOMONWARP);
|
||||||
|
export_constant(SCF_REMOVEFROMHOMONMAPWARP);
|
||||||
|
|
||||||
/* enchantgrades */
|
/* enchantgrades */
|
||||||
export_constant(ENCHANTGRADE_NONE);
|
export_constant(ENCHANTGRADE_NONE);
|
||||||
|
|||||||
@ -1014,8 +1014,10 @@ bool skill_isNotOk_hom(struct homun_data *hd, uint16 skill_id, uint16 skill_lv)
|
|||||||
if (sc && !sc->count)
|
if (sc && !sc->count)
|
||||||
sc = nullptr;
|
sc = nullptr;
|
||||||
|
|
||||||
if (util::vector_exists(hd->blockskill, skill_id))
|
if (util::vector_exists(hd->blockskill, skill_id)) {
|
||||||
|
clif_skill_fail(*sd, skill_id, USESKILL_FAIL_SKILLINTERVAL);
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
switch(skill_id) {
|
switch(skill_id) {
|
||||||
case HFLI_SBR44:
|
case HFLI_SBR44:
|
||||||
@ -1120,9 +1122,16 @@ bool skill_isNotOk_hom(struct homun_data *hd, uint16 skill_id, uint16 skill_lv)
|
|||||||
* @return true: Skill cannot be used, false: otherwise
|
* @return true: Skill cannot be used, false: otherwise
|
||||||
*/
|
*/
|
||||||
bool skill_isNotOk_mercenary( uint16 skill_id, s_mercenary_data& md ){
|
bool skill_isNotOk_mercenary( uint16 skill_id, s_mercenary_data& md ){
|
||||||
if (util::vector_exists(md.blockskill, skill_id))
|
map_session_data* sd = md.master;
|
||||||
|
|
||||||
|
if (sd == nullptr)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (util::vector_exists(md.blockskill, skill_id)) {
|
||||||
|
clif_skill_fail(*sd, skill_id, USESKILL_FAIL_SKILLINTERVAL);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if( md.master != nullptr ){
|
if( md.master != nullptr ){
|
||||||
return skill_isNotOk( skill_id, *md.master );
|
return skill_isNotOk( skill_id, *md.master );
|
||||||
}else{
|
}else{
|
||||||
@ -3580,7 +3589,7 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
|
|||||||
dmg = battle_calc_attack(attack_type,src,bl,skill_id,skill_lv,flag&0xFFF);
|
dmg = battle_calc_attack(attack_type,src,bl,skill_id,skill_lv,flag&0xFFF);
|
||||||
|
|
||||||
//If the damage source is a unit, the damage is not delayed
|
//If the damage source is a unit, the damage is not delayed
|
||||||
if (src != dsrc && skill_id != GS_GROUNDDRIFT)
|
if (src != dsrc)
|
||||||
dmg.amotion = 0;
|
dmg.amotion = 0;
|
||||||
|
|
||||||
//! CHECKME: This check maybe breaks the battle_calc_attack, and maybe need better calculation.
|
//! CHECKME: This check maybe breaks the battle_calc_attack, and maybe need better calculation.
|
||||||
@ -7313,12 +7322,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
|
|
||||||
//Check for undead skills that convert a no-damage skill into a damage one. [Skotlex]
|
//Check for undead skills that convert a no-damage skill into a damage one. [Skotlex]
|
||||||
switch (skill_id) {
|
switch (skill_id) {
|
||||||
case HLIF_HEAL: //[orn]
|
|
||||||
if (bl->type != BL_HOM) {
|
|
||||||
if (sd) clif_skill_fail( *sd, skill_id );
|
|
||||||
break ;
|
|
||||||
}
|
|
||||||
[[fallthrough]];
|
|
||||||
case AL_HEAL:
|
case AL_HEAL:
|
||||||
case ALL_RESURRECTION:
|
case ALL_RESURRECTION:
|
||||||
case PR_ASPERSIO:
|
case PR_ASPERSIO:
|
||||||
@ -7342,8 +7345,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
ret = skill_castend_pos2(src,src->x,src->y,skill_id,skill_lv,tick,flag); //cast on homon
|
ret = skill_castend_pos2(src,src->x,src->y,skill_id,skill_lv,tick,flag); //cast on homon
|
||||||
if(s_src && !skill_check_unit_range(s_src, s_src->x, s_src->y, skill_id, skill_lv))
|
if(s_src && !skill_check_unit_range(s_src, s_src->x, s_src->y, skill_id, skill_lv))
|
||||||
ret |= skill_castend_pos2(s_src,s_src->x,s_src->y,skill_id,skill_lv,tick,flag); //cast on master
|
ret |= skill_castend_pos2(s_src,s_src->x,s_src->y,skill_id,skill_lv,tick,flag); //cast on master
|
||||||
if (hd)
|
|
||||||
skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -9330,10 +9331,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sd->hd && battle_config.hom_setting&HOMSET_RESET_REUSESKILL_TELEPORTED) {
|
|
||||||
sd->hd->blockskill.clear();
|
|
||||||
sd->hd->blockskill.shrink_to_fit();
|
|
||||||
}
|
|
||||||
|
|
||||||
if( sd->state.autocast || ( (sd->skillitem == AL_TELEPORT || battle_config.skip_teleport_lv1_menu) && skill_lv == 1 ) || skill_lv == 3 )
|
if( sd->state.autocast || ( (sd->skillitem == AL_TELEPORT || battle_config.skip_teleport_lv1_menu) && skill_lv == 1 ) || skill_lv == 3 )
|
||||||
{
|
{
|
||||||
@ -10675,11 +10672,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case HAMI_CASTLE: //[orn]
|
case HAMI_CASTLE: //[orn]
|
||||||
if (src != bl && rnd()%100 < 20 * skill_lv) {
|
if (src != bl && rnd_chance(20 * skill_lv, 100)) {
|
||||||
int x = src->x, y = src->y;
|
int x = src->x, y = src->y;
|
||||||
|
|
||||||
if (hd)
|
|
||||||
skill_blockhomun_start(hd,skill_id,skill_get_time2(skill_id,skill_lv));
|
|
||||||
// Move source
|
// Move source
|
||||||
if (unit_movepos(src,bl->x,bl->y,0,0)) {
|
if (unit_movepos(src,bl->x,bl->y,0,0)) {
|
||||||
clif_skill_nodamage(src,src,skill_id,skill_lv,1); // Homunc
|
clif_skill_nodamage(src,src,skill_id,skill_lv,1); // Homunc
|
||||||
@ -10717,17 +10712,19 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
status_heal(bl, i, 0, 0);
|
status_heal(bl, i, 0, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
//Homun single-target support skills [orn]
|
// Homun single-target support skills [orn]
|
||||||
|
case HLIF_CHANGE:
|
||||||
|
#ifndef RENEWAL
|
||||||
|
status_percent_heal(bl, 100, 100);
|
||||||
|
[[fallthrough]];
|
||||||
|
#endif
|
||||||
case HAMI_BLOODLUST:
|
case HAMI_BLOODLUST:
|
||||||
case HFLI_FLEET:
|
case HFLI_FLEET:
|
||||||
case HFLI_SPEED:
|
case HFLI_SPEED:
|
||||||
case HLIF_CHANGE:
|
|
||||||
case MH_ANGRIFFS_MODUS:
|
case MH_ANGRIFFS_MODUS:
|
||||||
case MH_GOLDENE_FERSE:
|
case MH_GOLDENE_FERSE:
|
||||||
clif_skill_nodamage(src,bl,skill_id,skill_lv,
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,
|
||||||
sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
|
sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
|
||||||
if (hd)
|
|
||||||
skill_blockhomun_start(hd, skill_id, skill_get_time2(skill_id,skill_lv));
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NPC_DRAGONFEAR:
|
case NPC_DRAGONFEAR:
|
||||||
@ -11708,15 +11705,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
if( !status_isdead(bl) )
|
if( !status_isdead(bl) )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
status_zap(bl, 0, tstatus->sp * 10 * skill_lv / 100);
|
tstatus->hp = max(tstatus->sp, 1);
|
||||||
|
tstatus->sp -= tstatus->sp * ( 60 - 10 * skill_lv ) / 100;
|
||||||
int heal = tstatus->sp;
|
|
||||||
|
|
||||||
if( heal <= 0 )
|
|
||||||
heal = 1;
|
|
||||||
tstatus->hp = heal;
|
|
||||||
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
||||||
pc_revive((TBL_PC*)bl,heal,0);
|
pc_revive(reinterpret_cast<map_session_data*>(bl),true,true);
|
||||||
clif_resurrection( *bl );
|
clif_resurrection( *bl );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -12356,15 +12348,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
for (i = 0; i < ARRAYLENGTH(scs); i++)
|
for (i = 0; i < ARRAYLENGTH(scs); i++)
|
||||||
if (tsc->getSCE(scs[i])) status_change_end(bl, scs[i]);
|
if (tsc->getSCE(scs[i])) status_change_end(bl, scs[i]);
|
||||||
}
|
}
|
||||||
if (hd)
|
|
||||||
skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MH_OVERED_BOOST:
|
case MH_OVERED_BOOST:
|
||||||
if (hd && battle_get_master(src)) {
|
if (hd && battle_get_master(src)) {
|
||||||
sc_start(src, battle_get_master(src), type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
sc_start(src, battle_get_master(src), type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
||||||
sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
||||||
skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MH_GRANITIC_ARMOR:
|
case MH_GRANITIC_ARMOR:
|
||||||
@ -12373,7 +12362,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
struct block_list *s_bl = battle_get_master(src);
|
struct block_list *s_bl = battle_get_master(src);
|
||||||
if(s_bl) sc_start2(src, s_bl, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv)); //start on master
|
if(s_bl) sc_start2(src, s_bl, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv)); //start on master
|
||||||
sc_start2(src, bl, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv));
|
sc_start2(src, bl, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv));
|
||||||
skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MH_LIGHT_OF_REGENE: //self
|
case MH_LIGHT_OF_REGENE: //self
|
||||||
@ -12381,7 +12369,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
struct block_list *s_bl = battle_get_master(src);
|
struct block_list *s_bl = battle_get_master(src);
|
||||||
if(s_bl) sc_start(src, s_bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
if(s_bl) sc_start(src, s_bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
||||||
sc_start2(src, src, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv));
|
sc_start2(src, src, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv));
|
||||||
skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MH_STYLE_CHANGE:
|
case MH_STYLE_CHANGE:
|
||||||
@ -12407,21 +12394,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
clif_skill_nodamage(src,master_bl,skill_id,skill_lv,1);
|
clif_skill_nodamage(src,master_bl,skill_id,skill_lv,1);
|
||||||
sc_start(src, master_bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
sc_start(src, master_bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hd)
|
|
||||||
skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
||||||
} break;
|
} break;
|
||||||
case MH_PAIN_KILLER:
|
case MH_PAIN_KILLER:
|
||||||
bl = battle_get_master(src);
|
bl = battle_get_master(src);
|
||||||
if (bl != nullptr)
|
if (bl != nullptr)
|
||||||
sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
||||||
if (hd)
|
|
||||||
skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
||||||
break;
|
break;
|
||||||
case MH_MAGMA_FLOW:
|
case MH_MAGMA_FLOW:
|
||||||
sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
||||||
if (hd)
|
|
||||||
skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
||||||
break;
|
break;
|
||||||
case MH_SUMMON_LEGION: {
|
case MH_SUMMON_LEGION: {
|
||||||
int summons[5] = {MOBID_S_HORNET, MOBID_S_GIANT_HORNET, MOBID_S_GIANT_HORNET, MOBID_S_LUCIOLA_VESPA, MOBID_S_LUCIOLA_VESPA};
|
int summons[5] = {MOBID_S_HORNET, MOBID_S_GIANT_HORNET, MOBID_S_GIANT_HORNET, MOBID_S_LUCIOLA_VESPA, MOBID_S_LUCIOLA_VESPA};
|
||||||
@ -12448,8 +12428,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
sc_start4(&sum_md->bl,&sum_md->bl, SC_MODECHANGE, 100, 1, 0, MD_CANATTACK|MD_AGGRESSIVE, 0, 60000);
|
sc_start4(&sum_md->bl,&sum_md->bl, SC_MODECHANGE, 100, 1, 0, MD_CANATTACK|MD_AGGRESSIVE, 0, 60000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hd)
|
|
||||||
skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -13402,10 +13380,25 @@ TIMER_FUNC(skill_castend_id){
|
|||||||
|
|
||||||
if (!sd || sd->skillitem != ud->skill_id || skill_get_delay(ud->skill_id, ud->skill_lv))
|
if (!sd || sd->skillitem != ud->skill_id || skill_get_delay(ud->skill_id, ud->skill_lv))
|
||||||
ud->canact_tick = i64max(tick + skill_delayfix(src, ud->skill_id, ud->skill_lv), ud->canact_tick - SECURITY_CASTTIME);
|
ud->canact_tick = i64max(tick + skill_delayfix(src, ud->skill_id, ud->skill_lv), ud->canact_tick - SECURITY_CASTTIME);
|
||||||
if (sd) { //Cooldown application
|
|
||||||
int cooldown = pc_get_skillcooldown(sd,ud->skill_id, ud->skill_lv); // Increases/Decreases cooldown of a skill by item/card bonuses.
|
// Cooldown application
|
||||||
if(cooldown) skill_blockpc_start(sd, ud->skill_id, cooldown);
|
switch (src->type) {
|
||||||
|
case BL_PC:{
|
||||||
|
// Increases/Decreases cooldown of a skill by item/card bonuses.
|
||||||
|
int cooldown = pc_get_skillcooldown(sd, ud->skill_id, ud->skill_lv);
|
||||||
|
if (cooldown > 0)
|
||||||
|
skill_blockpc_start(sd, ud->skill_id, cooldown);
|
||||||
|
} break;
|
||||||
|
case BL_HOM:{
|
||||||
|
homun_data& hd = reinterpret_cast<homun_data&>(*src);
|
||||||
|
#ifdef RENEWAL
|
||||||
|
skill_blockhomun_start(&hd, ud->skill_id, skill_get_cooldown(ud->skill_id, ud->skill_lv));
|
||||||
|
#else
|
||||||
|
skill_blockhomun_start(&hd, ud->skill_id, skill_get_delay(ud->skill_id, ud->skill_lv));
|
||||||
|
#endif
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( battle_config.display_status_timers && sd )
|
if( battle_config.display_status_timers && sd )
|
||||||
clif_status_change(src, EFST_POSTDELAY, 1, skill_delayfix(src, ud->skill_id, ud->skill_lv), 0, 0, 0);
|
clif_status_change(src, EFST_POSTDELAY, 1, skill_delayfix(src, ud->skill_id, ud->skill_lv), 0, 0, 0);
|
||||||
if( sd )
|
if( sd )
|
||||||
@ -23073,6 +23066,9 @@ int skill_blockhomun_start(struct homun_data *hd, uint16 skill_id, int tick) //[
|
|||||||
|
|
||||||
hd->blockskill.push_back(skill_id);
|
hd->blockskill.push_back(skill_id);
|
||||||
|
|
||||||
|
if (battle_config.display_status_timers)
|
||||||
|
clif_skill_cooldown(*hd->master, skill_id, tick);
|
||||||
|
|
||||||
return add_timer(gettick() + tick, skill_blockhomun_end, hd->bl.id, skill_id);
|
return add_timer(gettick() + tick, skill_blockhomun_end, hd->bl.id, skill_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23105,6 +23101,9 @@ int skill_blockmerc_start(s_mercenary_data *md, uint16 skill_id, int tick)
|
|||||||
|
|
||||||
md->blockskill.push_back(skill_id);
|
md->blockskill.push_back(skill_id);
|
||||||
|
|
||||||
|
if (battle_config.display_status_timers)
|
||||||
|
clif_skill_cooldown(*md->master, skill_id, tick);
|
||||||
|
|
||||||
return add_timer(gettick() + tick, skill_blockmerc_end, md->bl.id, skill_id);
|
return add_timer(gettick() + tick, skill_blockmerc_end, md->bl.id, skill_id);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -5593,12 +5593,12 @@ void status_calc_state( struct block_list *bl, status_change *sc, std::bitset<SC
|
|||||||
* @param bl: Object whose status has changed [PC|MOB|HOM|MER|ELEM]
|
* @param bl: Object whose status has changed [PC|MOB|HOM|MER|ELEM]
|
||||||
* @param flag: Which status has changed on bl
|
* @param flag: Which status has changed on bl
|
||||||
*/
|
*/
|
||||||
void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
void status_calc_bl_main(struct block_list& bl, std::bitset<SCB_MAX> flag)
|
||||||
{
|
{
|
||||||
const struct status_data *b_status = status_get_base_status(bl); // Base Status
|
const struct status_data *b_status = status_get_base_status(&bl); // Base Status
|
||||||
struct status_data *status = status_get_status_data(bl); // Battle Status
|
struct status_data *status = status_get_status_data(&bl); // Battle Status
|
||||||
status_change *sc = status_get_sc(bl);
|
status_change *sc = status_get_sc(&bl);
|
||||||
TBL_PC *sd = BL_CAST(BL_PC,bl);
|
TBL_PC *sd = BL_CAST(BL_PC,&bl);
|
||||||
int temp;
|
int temp;
|
||||||
|
|
||||||
if (!b_status || !status)
|
if (!b_status || !status)
|
||||||
@ -5609,7 +5609,7 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
* we need to update the speed on the client when the last status change ends.
|
* we need to update the speed on the client when the last status change ends.
|
||||||
**/
|
**/
|
||||||
if(flag[SCB_SPEED]) {
|
if(flag[SCB_SPEED]) {
|
||||||
struct unit_data *ud = unit_bl2ud(bl);
|
struct unit_data *ud = unit_bl2ud(&bl);
|
||||||
/** [Skotlex]
|
/** [Skotlex]
|
||||||
* Re-walk to adjust speed (we do not check if walktimer != INVALID_TIMER
|
* Re-walk to adjust speed (we do not check if walktimer != INVALID_TIMER
|
||||||
* because if you step on something while walking, the moment this
|
* because if you step on something while walking, the moment this
|
||||||
@ -5620,60 +5620,60 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_STR]) {
|
if(flag[SCB_STR]) {
|
||||||
status->str = status_calc_str(bl, sc, b_status->str);
|
status->str = status_calc_str(&bl, sc, b_status->str);
|
||||||
flag.set(SCB_BATK);
|
flag.set(SCB_BATK);
|
||||||
if( bl->type&BL_HOM )
|
if( bl.type == BL_HOM )
|
||||||
flag.set(SCB_WATK);
|
flag.set(SCB_WATK);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_AGI]) {
|
if(flag[SCB_AGI]) {
|
||||||
status->agi = status_calc_agi(bl, sc, b_status->agi);
|
status->agi = status_calc_agi(&bl, sc, b_status->agi);
|
||||||
flag.set(SCB_FLEE);
|
flag.set(SCB_FLEE);
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
flag.set(SCB_DEF2);
|
flag.set(SCB_DEF2);
|
||||||
#endif
|
#endif
|
||||||
if( bl->type&(BL_PC|BL_HOM) ) {
|
if( bl.type&(BL_PC|BL_HOM) ) {
|
||||||
flag.set(SCB_ASPD);
|
flag.set(SCB_ASPD);
|
||||||
flag.set(SCB_DSPD);
|
flag.set(SCB_DSPD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_VIT]) {
|
if(flag[SCB_VIT]) {
|
||||||
status->vit = status_calc_vit(bl, sc, b_status->vit);
|
status->vit = status_calc_vit(&bl, sc, b_status->vit);
|
||||||
flag.set(SCB_DEF2);
|
flag.set(SCB_DEF2);
|
||||||
flag.set(SCB_MDEF2);
|
flag.set(SCB_MDEF2);
|
||||||
if( bl->type&(BL_PC|BL_HOM|BL_MER|BL_ELEM) )
|
if( bl.type&(BL_PC|BL_HOM|BL_MER|BL_ELEM) )
|
||||||
flag.set(SCB_MAXHP);
|
flag.set(SCB_MAXHP);
|
||||||
if( bl->type&BL_HOM )
|
if( bl.type == BL_HOM )
|
||||||
flag.set(SCB_DEF);
|
flag.set(SCB_DEF);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_INT]) {
|
if(flag[SCB_INT]) {
|
||||||
status->int_ = status_calc_int(bl, sc, b_status->int_);
|
status->int_ = status_calc_int(&bl, sc, b_status->int_);
|
||||||
flag.set(SCB_MATK);
|
flag.set(SCB_MATK);
|
||||||
flag.set(SCB_MDEF2);
|
flag.set(SCB_MDEF2);
|
||||||
if( bl->type&(BL_PC|BL_HOM|BL_MER|BL_ELEM) )
|
if( bl.type&(BL_PC|BL_HOM|BL_MER|BL_ELEM) )
|
||||||
flag.set(SCB_MAXSP);
|
flag.set(SCB_MAXSP);
|
||||||
if( bl->type&BL_HOM )
|
if( bl.type == BL_HOM )
|
||||||
flag.set(SCB_MDEF);
|
flag.set(SCB_MDEF);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_DEX]) {
|
if(flag[SCB_DEX]) {
|
||||||
status->dex = status_calc_dex(bl, sc, b_status->dex);
|
status->dex = status_calc_dex(&bl, sc, b_status->dex);
|
||||||
flag.set(SCB_BATK);
|
flag.set(SCB_BATK);
|
||||||
flag.set(SCB_HIT);
|
flag.set(SCB_HIT);
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
flag.set(SCB_MATK);
|
flag.set(SCB_MATK);
|
||||||
flag.set(SCB_MDEF2);
|
flag.set(SCB_MDEF2);
|
||||||
#endif
|
#endif
|
||||||
if( bl->type&(BL_PC|BL_HOM) )
|
if( bl.type&(BL_PC|BL_HOM) )
|
||||||
flag.set(SCB_ASPD);
|
flag.set(SCB_ASPD);
|
||||||
if( bl->type&BL_HOM )
|
if( bl.type == BL_HOM )
|
||||||
flag.set(SCB_WATK);
|
flag.set(SCB_WATK);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_LUK]) {
|
if(flag[SCB_LUK]) {
|
||||||
status->luk = status_calc_luk(bl, sc, b_status->luk);
|
status->luk = status_calc_luk(&bl, sc, b_status->luk);
|
||||||
flag.set(SCB_BATK);
|
flag.set(SCB_BATK);
|
||||||
flag.set(SCB_CRI);
|
flag.set(SCB_CRI);
|
||||||
flag.set(SCB_FLEE2);
|
flag.set(SCB_FLEE2);
|
||||||
@ -5686,29 +5686,29 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
|
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
if (flag[SCB_POW]) {
|
if (flag[SCB_POW]) {
|
||||||
status->pow = status_calc_pow(bl, sc, b_status->pow);
|
status->pow = status_calc_pow(&bl, sc, b_status->pow);
|
||||||
flag.set(SCB_BATK);
|
flag.set(SCB_BATK);
|
||||||
flag.set(SCB_PATK);
|
flag.set(SCB_PATK);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag[SCB_STA]) {
|
if (flag[SCB_STA]) {
|
||||||
status->sta = status_calc_sta(bl, sc, b_status->sta);
|
status->sta = status_calc_sta(&bl, sc, b_status->sta);
|
||||||
flag.set(SCB_RES);
|
flag.set(SCB_RES);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag[SCB_WIS]) {
|
if (flag[SCB_WIS]) {
|
||||||
status->wis = status_calc_wis(bl, sc, b_status->wis);
|
status->wis = status_calc_wis(&bl, sc, b_status->wis);
|
||||||
flag.set(SCB_MRES);
|
flag.set(SCB_MRES);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag[SCB_SPL]) {
|
if (flag[SCB_SPL]) {
|
||||||
status->spl = status_calc_spl(bl, sc, b_status->spl);
|
status->spl = status_calc_spl(&bl, sc, b_status->spl);
|
||||||
flag.set(SCB_MATK);
|
flag.set(SCB_MATK);
|
||||||
flag.set(SCB_SMATK);
|
flag.set(SCB_SMATK);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag[SCB_CON]) {
|
if (flag[SCB_CON]) {
|
||||||
status->con = status_calc_con(bl, sc, b_status->con);
|
status->con = status_calc_con(&bl, sc, b_status->con);
|
||||||
flag.set(SCB_HIT);
|
flag.set(SCB_HIT);
|
||||||
flag.set(SCB_FLEE);
|
flag.set(SCB_FLEE);
|
||||||
flag.set(SCB_PATK);
|
flag.set(SCB_PATK);
|
||||||
@ -5716,47 +5716,47 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (flag[SCB_CRT]) {
|
if (flag[SCB_CRT]) {
|
||||||
status->crt = status_calc_crt(bl, sc, b_status->crt);
|
status->crt = status_calc_crt(&bl, sc, b_status->crt);
|
||||||
flag.set(SCB_HPLUS);
|
flag.set(SCB_HPLUS);
|
||||||
flag.set(SCB_CRATE);
|
flag.set(SCB_CRATE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(flag[SCB_BATK] && b_status->batk) {
|
if(flag[SCB_BATK] && b_status->batk) {
|
||||||
int lv = status_get_lv(bl);
|
int lv = status_get_lv(&bl);
|
||||||
status->batk = status_base_atk(bl, status, lv);
|
status->batk = status_base_atk(&bl, status, lv);
|
||||||
temp = b_status->batk - status_base_atk(bl, b_status, lv);
|
temp = b_status->batk - status_base_atk(&bl, b_status, lv);
|
||||||
if (temp) {
|
if (temp) {
|
||||||
temp += status->batk;
|
temp += status->batk;
|
||||||
status->batk = cap_value(temp, 0, USHRT_MAX);
|
status->batk = cap_value(temp, 0, USHRT_MAX);
|
||||||
}
|
}
|
||||||
status->batk = status_calc_batk(bl, sc, status->batk);
|
status->batk = status_calc_batk(&bl, sc, status->batk);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_WATK]) {
|
if(flag[SCB_WATK]) {
|
||||||
#ifndef RENEWAL
|
#ifndef RENEWAL
|
||||||
status->rhw.atk = status_calc_watk(bl, sc, b_status->rhw.atk);
|
status->rhw.atk = status_calc_watk(&bl, sc, b_status->rhw.atk);
|
||||||
if (!sd) // Should not affect weapon refine bonus
|
if (!sd) // Should not affect weapon refine bonus
|
||||||
status->rhw.atk2 = status_calc_watk(bl, sc, b_status->rhw.atk2);
|
status->rhw.atk2 = status_calc_watk(&bl, sc, b_status->rhw.atk2);
|
||||||
|
|
||||||
if (sd && sd->bonus.weapon_atk_rate)
|
if (sd && sd->bonus.weapon_atk_rate)
|
||||||
status->rhw.atk += status->rhw.atk * sd->bonus.weapon_atk_rate / 100;
|
status->rhw.atk += status->rhw.atk * sd->bonus.weapon_atk_rate / 100;
|
||||||
if(b_status->lhw.atk) {
|
if(b_status->lhw.atk) {
|
||||||
if (sd) {
|
if (sd) {
|
||||||
sd->state.lr_flag = 1;
|
sd->state.lr_flag = 1;
|
||||||
status->lhw.atk = status_calc_watk(bl, sc, b_status->lhw.atk);
|
status->lhw.atk = status_calc_watk(&bl, sc, b_status->lhw.atk);
|
||||||
sd->state.lr_flag = 0;
|
sd->state.lr_flag = 0;
|
||||||
} else {
|
} else {
|
||||||
status->lhw.atk = status_calc_watk(bl, sc, b_status->lhw.atk);
|
status->lhw.atk = status_calc_watk(&bl, sc, b_status->lhw.atk);
|
||||||
status->lhw.atk2= status_calc_watk(bl, sc, b_status->lhw.atk2);
|
status->lhw.atk2= status_calc_watk(&bl, sc, b_status->lhw.atk2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if(!b_status->watk) { // We only have left-hand weapon
|
if(!b_status->watk) { // We only have left-hand weapon
|
||||||
status->watk = 0;
|
status->watk = 0;
|
||||||
status->watk2 = status_calc_watk(bl, sc, b_status->watk2);
|
status->watk2 = status_calc_watk(&bl, sc, b_status->watk2);
|
||||||
}
|
}
|
||||||
else status->watk = status_calc_watk(bl, sc, b_status->watk);
|
else status->watk = status_calc_watk(&bl, sc, b_status->watk);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5766,9 +5766,9 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
&& status->luk == b_status->luk && status->con == b_status->con
|
&& status->luk == b_status->luk && status->con == b_status->con
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
status->hit = status_calc_hit(bl, sc, b_status->hit);
|
status->hit = status_calc_hit(&bl, sc, b_status->hit);
|
||||||
else
|
else
|
||||||
status->hit = status_calc_hit(bl, sc, b_status->hit + (status->dex - b_status->dex)
|
status->hit = status_calc_hit(&bl, sc, b_status->hit + (status->dex - b_status->dex)
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
+ (status->luk/3 - b_status->luk/3) + 2 * (status->con - b_status->con)
|
+ (status->luk/3 - b_status->luk/3) + 2 * (status->con - b_status->con)
|
||||||
#endif
|
#endif
|
||||||
@ -5781,9 +5781,9 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
&& status->luk == b_status->luk && status->con == b_status->con
|
&& status->luk == b_status->luk && status->con == b_status->con
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
status->flee = status_calc_flee(bl, sc, b_status->flee);
|
status->flee = status_calc_flee(&bl, sc, b_status->flee);
|
||||||
else
|
else
|
||||||
status->flee = status_calc_flee(bl, sc, b_status->flee +(status->agi - b_status->agi)
|
status->flee = status_calc_flee(&bl, sc, b_status->flee +(status->agi - b_status->agi)
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
+ (status->luk/5 - b_status->luk/5) + 2 * (status->con - b_status->con)
|
+ (status->luk/5 - b_status->luk/5) + 2 * (status->con - b_status->con)
|
||||||
#endif
|
#endif
|
||||||
@ -5791,9 +5791,9 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_DEF]) {
|
if(flag[SCB_DEF]) {
|
||||||
status->def = status_calc_def(bl, sc, b_status->def);
|
status->def = status_calc_def(&bl, sc, b_status->def);
|
||||||
|
|
||||||
if( bl->type&BL_HOM )
|
if( bl.type == BL_HOM )
|
||||||
status->def += (status->vit/5 - b_status->vit/5);
|
status->def += (status->vit/5 - b_status->vit/5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5803,9 +5803,9 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
&& status->agi == b_status->agi
|
&& status->agi == b_status->agi
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
status->def2 = status_calc_def2(bl, sc, b_status->def2);
|
status->def2 = status_calc_def2(&bl, sc, b_status->def2);
|
||||||
else
|
else
|
||||||
status->def2 = status_calc_def2(bl, sc, b_status->def2
|
status->def2 = status_calc_def2(&bl, sc, b_status->def2
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
+ (int)( ((float)status->vit/2 - (float)b_status->vit/2) + ((float)status->agi/5 - (float)b_status->agi/5) )
|
+ (int)( ((float)status->vit/2 - (float)b_status->vit/2) + ((float)status->agi/5 - (float)b_status->agi/5) )
|
||||||
#else
|
#else
|
||||||
@ -5815,9 +5815,9 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_MDEF]) {
|
if(flag[SCB_MDEF]) {
|
||||||
status->mdef = status_calc_mdef(bl, sc, b_status->mdef);
|
status->mdef = status_calc_mdef(&bl, sc, b_status->mdef);
|
||||||
|
|
||||||
if( bl->type&BL_HOM )
|
if( bl.type == BL_HOM )
|
||||||
status->mdef += (status->int_/5 - b_status->int_/5);
|
status->mdef += (status->int_/5 - b_status->int_/5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5827,9 +5827,9 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
&& status->dex == b_status->dex
|
&& status->dex == b_status->dex
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
status->mdef2 = status_calc_mdef2(bl, sc, b_status->mdef2);
|
status->mdef2 = status_calc_mdef2(&bl, sc, b_status->mdef2);
|
||||||
else
|
else
|
||||||
status->mdef2 = status_calc_mdef2(bl, sc, b_status->mdef2 +(status->int_ - b_status->int_)
|
status->mdef2 = status_calc_mdef2(&bl, sc, b_status->mdef2 +(status->int_ - b_status->int_)
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
+ (int)( ((float)status->dex/5 - (float)b_status->dex/5) + ((float)status->vit/5 - (float)b_status->vit/5) )
|
+ (int)( ((float)status->dex/5 - (float)b_status->dex/5) + ((float)status->vit/5 - (float)b_status->vit/5) )
|
||||||
#else
|
#else
|
||||||
@ -5839,29 +5839,67 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_SPEED]) {
|
if(flag[SCB_SPEED]) {
|
||||||
status->speed = status_calc_speed(bl, sc, b_status->speed);
|
status->speed = status_calc_speed(&bl, sc, b_status->speed);
|
||||||
|
|
||||||
if( bl->type&BL_PC && !(sd && sd->state.permanent_speed) && status->speed < battle_config.max_walk_speed )
|
switch (bl.type) {
|
||||||
status->speed = battle_config.max_walk_speed;
|
case BL_PC:
|
||||||
|
if (!sd->state.permanent_speed && status->speed < battle_config.max_walk_speed)
|
||||||
|
status->speed = battle_config.max_walk_speed;
|
||||||
|
#ifdef RENEWAL
|
||||||
|
// Recalculate homunculus speed if the player receives a speed buff/debuff
|
||||||
|
if (hom_is_active(sd->hd)) {
|
||||||
|
if (battle_config.hom_setting & HOMSET_COPY_SPEED)
|
||||||
|
sd->hd->battle_status.speed = status_get_speed(&sd->bl);
|
||||||
|
|
||||||
if( bl->type&BL_PET && ((TBL_PET*)bl)->master)
|
// Homunculus speed buff/debuffs applies over the current speed
|
||||||
status->speed = status_get_speed(&((TBL_PET*)bl)->master->bl);
|
sd->hd->battle_status.speed = status_calc_speed(&sd->hd->bl, &sd->hd->sc, sd->hd->battle_status.speed);
|
||||||
if( bl->type&BL_HOM && battle_config.hom_setting&HOMSET_COPY_SPEED && ((TBL_HOM*)bl)->master)
|
}
|
||||||
status->speed = status_get_speed(&((TBL_HOM*)bl)->master->bl);
|
#endif
|
||||||
if( bl->type&BL_MER && ((TBL_MER*)bl)->master)
|
break;
|
||||||
status->speed = status_get_speed(&((TBL_MER*)bl)->master->bl);
|
|
||||||
if( bl->type&BL_ELEM && ((TBL_ELEM*)bl)->master)
|
case BL_PET:{
|
||||||
status->speed = status_get_speed(&((TBL_ELEM*)bl)->master->bl);
|
pet_data* pd = reinterpret_cast<pet_data*>(&bl);
|
||||||
|
|
||||||
|
if (pd->master != nullptr)
|
||||||
|
status->speed = status_get_speed(&pd->master->bl);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case BL_HOM:{
|
||||||
|
homun_data* hd = reinterpret_cast<homun_data*>(&bl);
|
||||||
|
|
||||||
|
if (hd->master != nullptr) {
|
||||||
|
if (battle_config.hom_setting & HOMSET_COPY_SPEED)
|
||||||
|
status->speed = status_get_speed(&hd->master->bl);
|
||||||
|
|
||||||
|
// Homunculus speed buff/debuffs applies over the current speed
|
||||||
|
status->speed = status_calc_speed(&bl, &hd->sc, status->speed);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case BL_MER:{
|
||||||
|
s_mercenary_data* mc = reinterpret_cast<s_mercenary_data*>(&bl);
|
||||||
|
|
||||||
|
if (mc->master != nullptr)
|
||||||
|
status->speed = status_get_speed(&mc->master->bl);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case BL_ELEM:{
|
||||||
|
s_elemental_data* ed = reinterpret_cast<s_elemental_data*>(&bl);
|
||||||
|
|
||||||
|
if (ed->master != nullptr)
|
||||||
|
status->speed = status_get_speed(&ed->master->bl);
|
||||||
|
} break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_CRI] && b_status->cri) {
|
if(flag[SCB_CRI] && b_status->cri) {
|
||||||
if (status->luk == b_status->luk)
|
if (status->luk == b_status->luk)
|
||||||
status->cri = status_calc_critical(bl, sc, b_status->cri);
|
status->cri = status_calc_critical(&bl, sc, b_status->cri);
|
||||||
else
|
else
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
status->cri = status_calc_critical(bl, sc, b_status->cri + 3*(status->luk - b_status->luk));
|
status->cri = status_calc_critical(&bl, sc, b_status->cri + 3*(status->luk - b_status->luk));
|
||||||
#else
|
#else
|
||||||
status->cri = status_calc_critical(bl, sc, b_status->cri + (status->luk - b_status->luk)*10/3);
|
status->cri = status_calc_critical(&bl, sc, b_status->cri + (status->luk - b_status->luk)*10/3);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// After status_calc_critical so the bonus is applied despite if you have or not a sc bugreport:5240
|
/// After status_calc_critical so the bonus is applied despite if you have or not a sc bugreport:5240
|
||||||
@ -5873,25 +5911,25 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
|
|
||||||
if(flag[SCB_FLEE2] && b_status->flee2) {
|
if(flag[SCB_FLEE2] && b_status->flee2) {
|
||||||
if (status->luk == b_status->luk)
|
if (status->luk == b_status->luk)
|
||||||
status->flee2 = status_calc_flee2(bl, sc, b_status->flee2);
|
status->flee2 = status_calc_flee2(&bl, sc, b_status->flee2);
|
||||||
else
|
else
|
||||||
status->flee2 = status_calc_flee2(bl, sc, b_status->flee2 +(status->luk - b_status->luk));
|
status->flee2 = status_calc_flee2(&bl, sc, b_status->flee2 +(status->luk - b_status->luk));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_ATK_ELE]) {
|
if(flag[SCB_ATK_ELE]) {
|
||||||
status->rhw.ele = status_calc_attack_element(bl, sc, b_status->rhw.ele);
|
status->rhw.ele = status_calc_attack_element(&bl, sc, b_status->rhw.ele);
|
||||||
if (sd) sd->state.lr_flag = 1;
|
if (sd) sd->state.lr_flag = 1;
|
||||||
status->lhw.ele = status_calc_attack_element(bl, sc, b_status->lhw.ele);
|
status->lhw.ele = status_calc_attack_element(&bl, sc, b_status->lhw.ele);
|
||||||
if (sd) sd->state.lr_flag = 0;
|
if (sd) sd->state.lr_flag = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_DEF_ELE]) {
|
if(flag[SCB_DEF_ELE]) {
|
||||||
status->def_ele = status_calc_element(bl, sc, b_status->def_ele);
|
status->def_ele = status_calc_element(&bl, sc, b_status->def_ele);
|
||||||
status->ele_lv = status_calc_element_lv(bl, sc, b_status->ele_lv);
|
status->ele_lv = status_calc_element_lv(&bl, sc, b_status->ele_lv);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_MODE]) {
|
if(flag[SCB_MODE]) {
|
||||||
status->mode = status_calc_mode(bl, sc, b_status->mode);
|
status->mode = status_calc_mode(&bl, sc, b_status->mode);
|
||||||
|
|
||||||
if (status_has_mode(status, MD_STATUSIMMUNE|MD_SKILLIMMUNE))
|
if (status_has_mode(status, MD_STATUSIMMUNE|MD_SKILLIMMUNE))
|
||||||
status->class_ = CLASS_BATTLEFIELD;
|
status->class_ = CLASS_BATTLEFIELD;
|
||||||
@ -5904,9 +5942,9 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
|
|
||||||
// Since mode changed, reset their state.
|
// Since mode changed, reset their state.
|
||||||
if (!status_has_mode(status,MD_CANATTACK))
|
if (!status_has_mode(status,MD_CANATTACK))
|
||||||
unit_stop_attack(bl);
|
unit_stop_attack(&bl);
|
||||||
if (!status_has_mode(status,MD_CANMOVE))
|
if (!status_has_mode(status,MD_CANMOVE))
|
||||||
unit_stop_walking(bl,1);
|
unit_stop_walking(&bl,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -5920,7 +5958,7 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_MAXHP]) {
|
if(flag[SCB_MAXHP]) {
|
||||||
if( bl->type&BL_PC ) {
|
if( bl.type == BL_PC ) {
|
||||||
status->max_hp = status_calc_maxhpsp_pc(sd,status->vit,true);
|
status->max_hp = status_calc_maxhpsp_pc(sd,status->vit,true);
|
||||||
|
|
||||||
if(battle_config.hp_rate != 100)
|
if(battle_config.hp_rate != 100)
|
||||||
@ -5934,7 +5972,7 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
status->max_hp = umin(status->max_hp,(unsigned int)battle_config.max_hp);
|
status->max_hp = umin(status->max_hp,(unsigned int)battle_config.max_hp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
status->max_hp = status_calc_maxhp(bl, b_status->max_hp);
|
status->max_hp = status_calc_maxhp(&bl, b_status->max_hp);
|
||||||
|
|
||||||
if( status->hp > status->max_hp ) { // !FIXME: Should perhaps a status_zap should be issued?
|
if( status->hp > status->max_hp ) { // !FIXME: Should perhaps a status_zap should be issued?
|
||||||
status->hp = status->max_hp;
|
status->hp = status->max_hp;
|
||||||
@ -5943,7 +5981,7 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_MAXSP]) {
|
if(flag[SCB_MAXSP]) {
|
||||||
if( bl->type&BL_PC ) {
|
if( bl.type == BL_PC ) {
|
||||||
status->max_sp = status_calc_maxhpsp_pc(sd,status->int_,false);
|
status->max_sp = status_calc_maxhpsp_pc(sd,status->int_,false);
|
||||||
|
|
||||||
if(battle_config.sp_rate != 100)
|
if(battle_config.sp_rate != 100)
|
||||||
@ -5952,7 +5990,7 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
status->max_sp = umin(status->max_sp,(unsigned int)battle_config.max_sp);
|
status->max_sp = umin(status->max_sp,(unsigned int)battle_config.max_sp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
status->max_sp = status_calc_maxsp(bl, b_status->max_sp);
|
status->max_sp = status_calc_maxsp(&bl, b_status->max_sp);
|
||||||
|
|
||||||
if( status->sp > status->max_sp ) {
|
if( status->sp > status->max_sp ) {
|
||||||
status->sp = status->max_sp;
|
status->sp = status->max_sp;
|
||||||
@ -5969,11 +6007,11 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
* RE MATK Formula (from irowiki:http:// irowiki.org/wiki/MATK)
|
* RE MATK Formula (from irowiki:http:// irowiki.org/wiki/MATK)
|
||||||
* MATK = (sMATK + wMATK + eMATK) * Multiplicative Modifiers
|
* MATK = (sMATK + wMATK + eMATK) * Multiplicative Modifiers
|
||||||
**/
|
**/
|
||||||
int lv = status_get_lv(bl);
|
int lv = status_get_lv(&bl);
|
||||||
status->matk_min = status_base_matk_min(bl, status, lv);
|
status->matk_min = status_base_matk_min(&bl, status, lv);
|
||||||
status->matk_max = status_base_matk_max(bl, status, lv);
|
status->matk_max = status_base_matk_max(&bl, status, lv);
|
||||||
|
|
||||||
switch( bl->type ) {
|
switch( bl.type ) {
|
||||||
case BL_PC: {
|
case BL_PC: {
|
||||||
int wMatk = 0;
|
int wMatk = 0;
|
||||||
int variance = 0;
|
int variance = 0;
|
||||||
@ -5990,7 +6028,7 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
status->matk_min += 15 * skill_lv + (skill_lv > 4 ? 25 : 0);
|
status->matk_min += 15 * skill_lv + (skill_lv > 4 ? 25 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
status->matk_min = status_calc_ematk(bl, sc, status->matk_min);
|
status->matk_min = status_calc_ematk(&bl, sc, status->matk_min);
|
||||||
status->matk_max = status->matk_min;
|
status->matk_max = status->matk_min;
|
||||||
|
|
||||||
// This is the only portion in MATK that varies depending on the weapon level and refinement rate.
|
// This is the only portion in MATK that varies depending on the weapon level and refinement rate.
|
||||||
@ -6025,12 +6063,12 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (bl->type&BL_PC && sd->matk_rate != 100) {
|
if (bl.type == BL_PC && sd->matk_rate != 100) {
|
||||||
status->matk_max = status->matk_max * sd->matk_rate/100;
|
status->matk_max = status->matk_max * sd->matk_rate/100;
|
||||||
status->matk_min = status->matk_min * sd->matk_rate/100;
|
status->matk_min = status->matk_min * sd->matk_rate/100;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((bl->type&BL_HOM && battle_config.hom_setting&HOMSET_SAME_MATK) /// Hom Min Matk is always the same as Max Matk
|
if ((bl.type == BL_HOM && battle_config.hom_setting&HOMSET_SAME_MATK) /// Hom Min Matk is always the same as Max Matk
|
||||||
|| (sc && sc->getSCE(SC_RECOGNIZEDSPELL)))
|
|| (sc && sc->getSCE(SC_RECOGNIZEDSPELL)))
|
||||||
status->matk_min = status->matk_max;
|
status->matk_min = status->matk_max;
|
||||||
|
|
||||||
@ -6041,35 +6079,35 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
status->matk_max = status_calc_matk(bl, sc, status->matk_max);
|
status->matk_max = status_calc_matk(&bl, sc, status->matk_max);
|
||||||
status->matk_min = status_calc_matk(bl, sc, status->matk_min);
|
status->matk_min = status_calc_matk(&bl, sc, status->matk_min);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag[SCB_ASPD]) {
|
if(flag[SCB_ASPD]) {
|
||||||
int amotion;
|
int amotion;
|
||||||
|
|
||||||
if ( bl->type&BL_HOM ) {
|
if ( bl.type == BL_HOM ) {
|
||||||
#ifdef RENEWAL_ASPD
|
#ifdef RENEWAL_ASPD
|
||||||
amotion = ((TBL_HOM*)bl)->homunculusDB->baseASPD;
|
amotion = (reinterpret_cast<homun_data*>(&bl))->homunculusDB->baseASPD;
|
||||||
amotion = amotion - amotion * status_get_homdex(bl) / 1000 - status_get_homagi(bl) * amotion / 250;
|
amotion = amotion - amotion * status_get_homdex(&bl) / 1000 - status_get_homagi(&bl) * amotion / 250;
|
||||||
amotion = (amotion * status_calc_aspd(bl, sc, true) + status_calc_aspd(bl, sc, false)) / - 100 + amotion;
|
amotion = (amotion * status_calc_aspd(&bl, sc, true) + status_calc_aspd(&bl, sc, false)) / - 100 + amotion;
|
||||||
#else
|
#else
|
||||||
amotion = (1000 - 4 * status->agi - status->dex) * ((TBL_HOM*)bl)->homunculusDB->baseASPD / 1000;
|
amotion = (1000 - 4 * status->agi - status->dex) * (reinterpret_cast<homun_data*>(&bl))->homunculusDB->baseASPD / 1000;
|
||||||
|
|
||||||
amotion = status_calc_aspd_rate(bl, sc, amotion);
|
amotion = status_calc_aspd_rate(&bl, sc, amotion);
|
||||||
amotion = amotion * status->aspd_rate / 1000;
|
amotion = amotion * status->aspd_rate / 1000;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
amotion = status_calc_fix_aspd(bl, sc, amotion);
|
amotion = status_calc_fix_aspd(&bl, sc, amotion);
|
||||||
status->amotion = cap_value(amotion, battle_config.max_aspd, 2000);
|
status->amotion = cap_value(amotion, battle_config.max_aspd, 2000);
|
||||||
|
|
||||||
status->adelay = status->amotion;
|
status->adelay = status->amotion;
|
||||||
} else if ( bl->type&BL_PC ) {
|
} else if ( bl.type == BL_PC ) {
|
||||||
uint16 skill_lv;
|
uint16 skill_lv;
|
||||||
|
|
||||||
amotion = status_base_amotion_pc(sd,status);
|
amotion = status_base_amotion_pc(sd,status);
|
||||||
#ifndef RENEWAL_ASPD
|
#ifndef RENEWAL_ASPD
|
||||||
status->aspd_rate = status_calc_aspd_rate(bl, sc, b_status->aspd_rate);
|
status->aspd_rate = status_calc_aspd_rate(&bl, sc, b_status->aspd_rate);
|
||||||
#endif
|
#endif
|
||||||
// Absolute ASPD % modifiers
|
// Absolute ASPD % modifiers
|
||||||
amotion = amotion * status->aspd_rate / 1000;
|
amotion = amotion * status->aspd_rate / 1000;
|
||||||
@ -6082,21 +6120,21 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
|
|
||||||
#ifdef RENEWAL_ASPD
|
#ifdef RENEWAL_ASPD
|
||||||
// RE ASPD % modifier
|
// RE ASPD % modifier
|
||||||
amotion += (max(0xc3 - amotion, 2) * (status->aspd_rate2 + status_calc_aspd(bl, sc, false))) / 100;
|
amotion += (max(0xc3 - amotion, 2) * (status->aspd_rate2 + status_calc_aspd(&bl, sc, false))) / 100;
|
||||||
amotion = 10 * (200 - amotion);
|
amotion = 10 * (200 - amotion);
|
||||||
|
|
||||||
amotion += sd->bonus.aspd_add;
|
amotion += sd->bonus.aspd_add;
|
||||||
#endif
|
#endif
|
||||||
amotion = status_calc_fix_aspd(bl, sc, amotion);
|
amotion = status_calc_fix_aspd(&bl, sc, amotion);
|
||||||
status->amotion = cap_value(amotion,pc_maxaspd(sd),2000);
|
status->amotion = cap_value(amotion,pc_maxaspd(sd),2000);
|
||||||
|
|
||||||
status->adelay = 2 * status->amotion;
|
status->adelay = 2 * status->amotion;
|
||||||
} else { // Mercenary and mobs
|
} else { // Mercenary and mobs
|
||||||
amotion = b_status->amotion;
|
amotion = b_status->amotion;
|
||||||
status->aspd_rate = status_calc_aspd_rate(bl, sc, b_status->aspd_rate);
|
status->aspd_rate = status_calc_aspd_rate(&bl, sc, b_status->aspd_rate);
|
||||||
amotion = amotion*status->aspd_rate/1000;
|
amotion = amotion*status->aspd_rate/1000;
|
||||||
|
|
||||||
amotion = status_calc_fix_aspd(bl, sc, amotion);
|
amotion = status_calc_fix_aspd(&bl, sc, amotion);
|
||||||
status->amotion = cap_value(amotion, battle_config.monster_max_aspd, 2000);
|
status->amotion = cap_value(amotion, battle_config.monster_max_aspd, 2000);
|
||||||
|
|
||||||
temp = b_status->adelay*status->aspd_rate/1000;
|
temp = b_status->adelay*status->aspd_rate/1000;
|
||||||
@ -6106,71 +6144,71 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
|
|
||||||
if(flag[SCB_DSPD]) {
|
if(flag[SCB_DSPD]) {
|
||||||
int dmotion;
|
int dmotion;
|
||||||
if( bl->type&BL_PC ) {
|
if( bl.type == BL_PC ) {
|
||||||
if (b_status->agi == status->agi)
|
if (b_status->agi == status->agi)
|
||||||
status->dmotion = status_calc_dmotion(bl, sc, b_status->dmotion);
|
status->dmotion = status_calc_dmotion(&bl, sc, b_status->dmotion);
|
||||||
else {
|
else {
|
||||||
dmotion = 800-status->agi*4;
|
dmotion = 800-status->agi*4;
|
||||||
status->dmotion = cap_value(dmotion, 400, 800);
|
status->dmotion = cap_value(dmotion, 400, 800);
|
||||||
if(battle_config.pc_damage_delay_rate != 100)
|
if(battle_config.pc_damage_delay_rate != 100)
|
||||||
status->dmotion = status->dmotion*battle_config.pc_damage_delay_rate/100;
|
status->dmotion = status->dmotion*battle_config.pc_damage_delay_rate/100;
|
||||||
// It's safe to ignore b_status->dmotion since no bonus affects it.
|
// It's safe to ignore b_status->dmotion since no bonus affects it.
|
||||||
status->dmotion = status_calc_dmotion(bl, sc, status->dmotion);
|
status->dmotion = status_calc_dmotion(&bl, sc, status->dmotion);
|
||||||
}
|
}
|
||||||
} else if( bl->type&BL_HOM ) {
|
} else if( bl.type == BL_HOM ) {
|
||||||
dmotion = 800-status->agi*4;
|
dmotion = 800-status->agi*4;
|
||||||
status->dmotion = cap_value(dmotion, 400, 800);
|
status->dmotion = cap_value(dmotion, 400, 800);
|
||||||
status->dmotion = status_calc_dmotion(bl, sc, b_status->dmotion);
|
status->dmotion = status_calc_dmotion(&bl, sc, b_status->dmotion);
|
||||||
} else { // Mercenary and mobs
|
} else { // Mercenary and mobs
|
||||||
status->dmotion = status_calc_dmotion(bl, sc, b_status->dmotion);
|
status->dmotion = status_calc_dmotion(&bl, sc, b_status->dmotion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
if (flag[SCB_PATK]) {
|
if (flag[SCB_PATK]) {
|
||||||
if (status->pow == b_status->pow && status->con == b_status->con)
|
if (status->pow == b_status->pow && status->con == b_status->con)
|
||||||
status->patk = status_calc_patk(bl, sc, b_status->patk);
|
status->patk = status_calc_patk(&bl, sc, b_status->patk);
|
||||||
else
|
else
|
||||||
status->patk = status_calc_patk(bl, sc, b_status->patk + (status->pow - b_status->pow) / 3 + (status->con - b_status->con) / 5);
|
status->patk = status_calc_patk(&bl, sc, b_status->patk + (status->pow - b_status->pow) / 3 + (status->con - b_status->con) / 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag[SCB_SMATK]) {
|
if (flag[SCB_SMATK]) {
|
||||||
if (status->spl == b_status->spl && status->con == b_status->con)
|
if (status->spl == b_status->spl && status->con == b_status->con)
|
||||||
status->smatk = status_calc_smatk(bl, sc, b_status->smatk);
|
status->smatk = status_calc_smatk(&bl, sc, b_status->smatk);
|
||||||
else
|
else
|
||||||
status->smatk = status_calc_smatk(bl, sc, b_status->smatk) + (status->spl - b_status->spl) / 3 + (status->con - b_status->con) / 5;
|
status->smatk = status_calc_smatk(&bl, sc, b_status->smatk) + (status->spl - b_status->spl) / 3 + (status->con - b_status->con) / 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag[SCB_RES]) {
|
if (flag[SCB_RES]) {
|
||||||
if (status->sta == b_status->sta)
|
if (status->sta == b_status->sta)
|
||||||
status->res = status_calc_res(bl, sc, b_status->res);
|
status->res = status_calc_res(&bl, sc, b_status->res);
|
||||||
else
|
else
|
||||||
status->res = status_calc_res(bl, sc, b_status->res + (status->sta - b_status->sta) + (status->sta - b_status->sta) / 3 * 5);
|
status->res = status_calc_res(&bl, sc, b_status->res + (status->sta - b_status->sta) + (status->sta - b_status->sta) / 3 * 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag[SCB_MRES]) {
|
if (flag[SCB_MRES]) {
|
||||||
if (status->wis == b_status->wis)
|
if (status->wis == b_status->wis)
|
||||||
status->mres = status_calc_mres(bl, sc, b_status->mres);
|
status->mres = status_calc_mres(&bl, sc, b_status->mres);
|
||||||
else
|
else
|
||||||
status->mres = status_calc_mres(bl, sc, b_status->mres + (status->wis - b_status->wis) + (status->wis - b_status->wis) / 3 * 5);
|
status->mres = status_calc_mres(&bl, sc, b_status->mres + (status->wis - b_status->wis) + (status->wis - b_status->wis) / 3 * 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag[SCB_HPLUS]) {
|
if (flag[SCB_HPLUS]) {
|
||||||
if (status->crt == b_status->crt)
|
if (status->crt == b_status->crt)
|
||||||
status->hplus = status_calc_hplus(bl, sc, b_status->hplus);
|
status->hplus = status_calc_hplus(&bl, sc, b_status->hplus);
|
||||||
else
|
else
|
||||||
status->hplus = status_calc_hplus(bl, sc, b_status->hplus + (status->crt - b_status->crt));
|
status->hplus = status_calc_hplus(&bl, sc, b_status->hplus + (status->crt - b_status->crt));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag[SCB_CRATE]) {
|
if (flag[SCB_CRATE]) {
|
||||||
if (status->crt == b_status->crt)
|
if (status->crt == b_status->crt)
|
||||||
status->crate = status_calc_crate(bl, sc, b_status->crate);
|
status->crate = status_calc_crate(&bl, sc, b_status->crate);
|
||||||
else
|
else
|
||||||
status->crate = status_calc_crate(bl, sc, b_status->crate + (status->crt - b_status->crt) / 3);
|
status->crate = status_calc_crate(&bl, sc, b_status->crate + (status->crt - b_status->crt) / 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag[SCB_MAXAP]) {
|
if (flag[SCB_MAXAP]) {
|
||||||
if (bl->type&BL_PC) {
|
if (bl.type == BL_PC) {
|
||||||
status->max_ap = status_calc_maxap_pc(sd);
|
status->max_ap = status_calc_maxap_pc(sd);
|
||||||
|
|
||||||
if (battle_config.ap_rate != 100)
|
if (battle_config.ap_rate != 100)
|
||||||
@ -6178,7 +6216,7 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
|
|
||||||
status->max_ap = umin(status->max_ap, (unsigned int)battle_config.max_ap);
|
status->max_ap = umin(status->max_ap, (unsigned int)battle_config.max_ap);
|
||||||
} else
|
} else
|
||||||
status->max_ap = status_calc_maxap(bl, b_status->max_ap);
|
status->max_ap = status_calc_maxap(&bl, b_status->max_ap);
|
||||||
|
|
||||||
if (status->ap > status->max_ap) {
|
if (status->ap > status->max_ap) {
|
||||||
status->ap = status->max_ap;
|
status->ap = status->max_ap;
|
||||||
@ -6187,11 +6225,11 @@ void status_calc_bl_main(struct block_list *bl, std::bitset<SCB_MAX> flag)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if((flag[SCB_VIT] || flag[SCB_MAXHP] || flag[SCB_INT] || flag[SCB_MAXSP]) && bl->type &BL_REGEN)
|
if((flag[SCB_VIT] || flag[SCB_MAXHP] || flag[SCB_INT] || flag[SCB_MAXSP]) && bl.type & BL_REGEN)
|
||||||
status_calc_regen(bl, status, status_get_regen_data(bl));
|
status_calc_regen(&bl, status, status_get_regen_data(&bl));
|
||||||
|
|
||||||
if(flag[SCB_REGEN] && bl->type&BL_REGEN)
|
if(flag[SCB_REGEN] && bl.type & BL_REGEN)
|
||||||
status_calc_regen_rate(bl, status_get_regen_data(bl), sc);
|
status_calc_regen_rate(&bl, status_get_regen_data(&bl), sc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -6242,7 +6280,7 @@ void status_calc_bl_(struct block_list* bl, std::bitset<SCB_MAX> flag, uint8 opt
|
|||||||
if (opt&SCO_FIRST && bl->type == BL_MOB)
|
if (opt&SCO_FIRST && bl->type == BL_MOB)
|
||||||
return; // Assume there will be no statuses active
|
return; // Assume there will be no statuses active
|
||||||
|
|
||||||
status_calc_bl_main(bl, flag);
|
status_calc_bl_main(*bl, flag);
|
||||||
|
|
||||||
if (opt&SCO_FIRST && bl->type == BL_HOM)
|
if (opt&SCO_FIRST && bl->type == BL_HOM)
|
||||||
return; // Client update handled by caller
|
return; // Client update handled by caller
|
||||||
@ -6410,13 +6448,13 @@ void status_calc_bl_(struct block_list* bl, std::bitset<SCB_MAX> flag, uint8 opt
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if( b_status.max_hp != status->max_hp )
|
if( b_status.max_hp != status->max_hp )
|
||||||
clif_elemental_updatestatus(ed->master, SP_MAXHP);
|
clif_elemental_updatestatus(*ed->master, SP_MAXHP);
|
||||||
if( b_status.max_sp != status->max_sp )
|
if( b_status.max_sp != status->max_sp )
|
||||||
clif_elemental_updatestatus(ed->master, SP_MAXSP);
|
clif_elemental_updatestatus(*ed->master, SP_MAXSP);
|
||||||
if( b_status.hp != status->hp )
|
if( b_status.hp != status->hp )
|
||||||
clif_elemental_updatestatus(ed->master, SP_HP);
|
clif_elemental_updatestatus(*ed->master, SP_HP);
|
||||||
if( b_status.sp != status->sp )
|
if( b_status.sp != status->sp )
|
||||||
clif_mercenary_updatestatus(ed->master, SP_SP);
|
clif_elemental_updatestatus(*ed->master, SP_SP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8069,7 +8107,7 @@ static unsigned short status_calc_speed(struct block_list *bl, status_change *sc
|
|||||||
if( sc->getSCE(SC_RUN) )
|
if( sc->getSCE(SC_RUN) )
|
||||||
val = max( val, 55 );
|
val = max( val, 55 );
|
||||||
if( sc->getSCE(SC_AVOID) )
|
if( sc->getSCE(SC_AVOID) )
|
||||||
val = max( val, 10 * sc->getSCE(SC_AVOID)->val1 );
|
val = max( val, sc->getSCE(SC_AVOID)->val2 );
|
||||||
if (sc->getSCE(SC_INVINCIBLE))
|
if (sc->getSCE(SC_INVINCIBLE))
|
||||||
val = max(val, sc->getSCE(SC_INVINCIBLE)->val3);
|
val = max(val, sc->getSCE(SC_INVINCIBLE)->val3);
|
||||||
if( sc->getSCE(SC_CLOAKINGEXCEED) )
|
if( sc->getSCE(SC_CLOAKINGEXCEED) )
|
||||||
@ -11447,7 +11485,11 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|||||||
// val4 signals autoprovoke.
|
// val4 signals autoprovoke.
|
||||||
break;
|
break;
|
||||||
case SC_AVOID:
|
case SC_AVOID:
|
||||||
// val2 = 10*val1; // Speed change rate.
|
// Speed change rate.
|
||||||
|
if (bl->type == BL_HOM)
|
||||||
|
val2 = 40 * val1;
|
||||||
|
else
|
||||||
|
val2 = 10 * val1;
|
||||||
break;
|
break;
|
||||||
case SC_DEFENCE:
|
case SC_DEFENCE:
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
|
|||||||
@ -3058,6 +3058,8 @@ enum e_status_change_flag : uint16 {
|
|||||||
SCF_REMOVEONUNEQUIPARMOR,
|
SCF_REMOVEONUNEQUIPARMOR,
|
||||||
SCF_REMOVEONHERMODE,
|
SCF_REMOVEONHERMODE,
|
||||||
SCF_REQUIRENOWEAPON,
|
SCF_REQUIRENOWEAPON,
|
||||||
|
SCF_REMOVEFROMHOMONWARP,
|
||||||
|
SCF_REMOVEFROMHOMONMAPWARP,
|
||||||
SCF_MAX
|
SCF_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user