Compare commits

..

1 Commits

Author SHA1 Message Date
Lemongrass3110
036a5b1950 Refactored safe math to templates
This way it can also be used for smaller numeric types.
2024-02-26 22:16:09 +01:00
166 changed files with 35866 additions and 119135 deletions

View File

@@ -2,11 +2,6 @@
#line 4 "scanner.c"
#ifdef _MSC_VER
#pragma warning( push )
#pragma warning( disable : 4267 )
#endif
#define YY_INT_ALIGNED short int
/* A lexical scanner generated by flex */
@@ -2370,7 +2365,3 @@ void libconfig_yyfree (void * ptr , yyscan_t yyscanner)
#define YYTABLES_NAME "yytables"
#line 192 "scanner.l"
#ifdef _MSC_VER
#pragma warning( pop )
#endif

View File

@@ -236,7 +236,7 @@ option( ENABLE_WEB_SERVER "Build web-server (default=ON)" ON )
#
TEST_BIG_ENDIAN( BIG_ENDIAN )
if( NOT DEFINED BIG_ENDIAN )
message( WARNING "unable to determine endianness, only LITTLE ENDIAN is supported" )
message( WARNING "unable to determine endianess, only LITTLE ENDIAN is supported" )
elseif( BIG_ENDIAN )
message( FATAL_ERROR "bigendian is not supported" )
endif()

View File

@@ -175,19 +175,3 @@ feature.stylist: on
// If this is allowed the "nosave" mapflag is still being respected
// and may prevent players from warping back into the instance.
//feature.instance_allow_reconnect: yes
// Enable the Gold PC timer? (Note 1)
// Default: yes
feature.goldpc_active: yes
// How many seconds does a player have to be online to receive a point?
// Default: 3600 (1h)
feature.goldpc_time: 3600
// How many points can a player have at maximum?
// Default: 300
feature.goldpc_max_points: 300
// Should being VIP double the points a player gets? (Note 1)
// Default: yes
feature.goldpc_vip: yes

View File

@@ -134,9 +134,3 @@ min_shop_buy: 1
// Minimum sell price of items at a normal shop
// Officially items can be sold for 0 Zeny
min_shop_sell: 0
// Should items that reduce damage from element/race count all monster damage as physical? (Note 1)
// Officially "Asprika" (god item) reduces all monsters damage rather than just physical damage
// Shaman Hat on the other hand doesn't reduce monster damage at all (reduces magical damage in PVP)
// This only affects items with bonus3 bSubEle and bonus3 bSubRace.
cardfix_monster_physical: yes

View File

@@ -240,7 +240,6 @@ Body:
bypass_stat_onclone: true
bypass_max_stat: true
macro_register: true
trade_unconditional: true
#all_permission: true
Footer:

4
configure vendored
View File

@@ -4761,8 +4761,8 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
;; #(
*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to determine endianness, only little endian is supported" >&5
$as_echo "$as_me: WARNING: unable to determine endianness, only little endian is supported" >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to determine endianess, only little endian is supported" >&5
$as_echo "$as_me: WARNING: unable to determine endianess, only little endian is supported" >&2;}
;;
esac

View File

@@ -490,7 +490,7 @@ CXXFLAG_CLEARS="-std=c++17"
AC_C_BIGENDIAN(
[AC_MSG_ERROR([[bigendian is not supported... stopping]])],
,
[AC_MSG_WARN([[unable to determine endianness, only little endian is supported]])]
[AC_MSG_WARN([[unable to determine endianess, only little endian is supported]])]
)

View File

@@ -45,8 +45,6 @@ Body:
Value: 4
- Name: JUMPINGCLAN
Value: 5
- Name: REPUTATION_EP18
Value: 3
Footer:
Imports:

View File

@@ -20587,7 +20587,16 @@ Body:
EquipLevelMin: 94
Script: |
bonus bMdef,5;
bonus3 bSubEle,Ele_All,30,BF_WEAPON;
bonus3 bSubEle,Ele_Neutral,30,BF_SHORT;
bonus3 bSubEle,Ele_Water,30,BF_SHORT;
bonus3 bSubEle,Ele_Earth,30,BF_SHORT;
bonus3 bSubEle,Ele_Fire,30,BF_SHORT;
bonus3 bSubEle,Ele_Wind,30,BF_SHORT;
bonus3 bSubEle,Ele_Poison,30,BF_SHORT;
bonus3 bSubEle,Ele_Holy,30,BF_SHORT;
bonus3 bSubEle,Ele_Dark,30,BF_SHORT;
bonus3 bSubEle,Ele_Ghost,30,BF_SHORT;
bonus3 bSubEle,Ele_Undead,30,BF_SHORT;
bonus bFlee,30;
skill "AL_TELEPORT",1;
bonus bUnbreakableGarment;

View File

@@ -4408,6 +4408,7 @@ Body:
TargetType: Ground
DamageFlags:
Splash: true
IgnoreFlee: true
Flags:
IsTrap: true
AlterRangeResearchTrap: true
@@ -6460,7 +6461,6 @@ Body:
TargetType: Attack
DamageFlags:
IgnoreAtkCard: true
IgnoreDefense: true
IgnoreFlee: true
Flags:
IgnoreAutoGuard: true
@@ -9641,7 +9641,7 @@ Body:
Hit: Single
HitCount: 1
Duration1: 300000
Duration2: 10000
Duration2: 15000
Requires:
SpCost: 200
Status: Berserk
@@ -10233,7 +10233,17 @@ Body:
Time: 55000
- Level: 5
Time: 60000
Duration2: 60000
Duration2:
- Level: 1
Time: 20000
- Level: 2
Time: 30000
- Level: 3
Time: 40000
- Level: 4
Time: 50000
- Level: 5
Time: 60000
Requires:
SpCost:
- Level: 1
@@ -13856,6 +13866,8 @@ Body:
Description: Chain Action
MaxLevel: 10
Type: Weapon
DamageFlags:
Critical: true
Range: -9
Hit: Multi_Hit
HitCount: 2
@@ -32455,9 +32467,9 @@ Body:
Hit: Single
HitCount: 1
Duration1: 300000
Duration2: 10000
Duration2: 15000
Requires:
SpCost: 200
SpCost: 100
Status: Berserk
- Id: 8207
Name: MA_DOUBLE
@@ -32636,6 +32648,7 @@ Body:
TargetType: Ground
DamageFlags:
Splash: true
IgnoreFlee: true
Flags:
IsTrap: true
AlterRangeResearchTrap: true
@@ -33055,10 +33068,9 @@ Body:
Type: Weapon
TargetType: Attack
Range: 1
Hit: Single
HitCount: 1
Hit: Multi_Hit
HitCount: 3
Element: Weapon
CastCancel: true
CastTime: 1000
AfterCastActDelay: 2000
Duration2: 5000

View File

@@ -162,7 +162,6 @@ Body:
- Status: Poison
DurationLookup: NPC_POISON
CalcFlags:
Def: true
Def2: true
Regen: true
Opt2:
@@ -253,7 +252,6 @@ Body:
- Status: Dpoison
DurationLookup: NPC_POISON
CalcFlags:
Def: true
Def2: true
Regen: true
Opt2:
@@ -1100,7 +1098,6 @@ Body:
Icon: EFST_GROUNDMAGIC
DurationLookup: SA_VOLCANO
CalcFlags:
Batk: true
Watk: true
Flags:
NoSave: true
@@ -1124,10 +1121,6 @@ Body:
NoClearance: true
- Status: Watk_Element
DurationLookup: MS_MAGNUM
Flags:
NoSave: true
EndOnStart:
Watk_Element: true
- Status: Armor
DurationLookup: NPC_DEFENDER
- Status: Armor_Element_Water
@@ -2719,7 +2712,6 @@ Body:
CalcFlags:
Flee: true
Flags:
BlEffect: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true
@@ -2728,7 +2720,6 @@ Body:
CalcFlags:
Watk: true
Flags:
BlEffect: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true
@@ -2737,7 +2728,6 @@ Body:
CalcFlags:
MaxHp: true
Flags:
BlEffect: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true
@@ -2746,7 +2736,6 @@ Body:
CalcFlags:
MaxSp: true
Flags:
BlEffect: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true
@@ -2755,7 +2744,6 @@ Body:
CalcFlags:
Hit: true
Flags:
BlEffect: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true

View File

@@ -35943,14 +35943,14 @@ Body:
bonus bVariableCastrate,-5;
- Combos:
- Combo:
- Grey_Icewind_Card
- aegis_300457 # 300457
- aegis_300455 # 300455
Script: |
.@r_shoes = getequiprefinerycnt(EQI_SHOES);
bonus2 bAddSize,Size_Large,10+3*(.@r_shoes/2);
- Combos:
- Combo:
- Icewind_Card
- aegis_300458 # 300458
- aegis_300455 # 300455
Script: |
.@r_shoes = getequiprefinerycnt(EQI_SHOES);
@@ -46814,8 +46814,7 @@ Body:
bonus2 bSkillAtk,"EM_ELEMENTAL_BUSTER_WIND",2*.@sum;
bonus2 bSkillAtk,"EM_ELEMENTAL_BUSTER_POISON",2*.@sum;
bonus2 bSkillAtk,"EM_ELEMENTAL_BUSTER_GROUND",2*.@sum;
.@class_ = geteleminfo(ELEMINFO_CLASS);
if (getskilllv("EM_ELEMENTAL_BUSTER") > 0 && .@class_ >= 20816 && .@class_ <= 20820) {
if (getskilllv("EM_ELEMENTAL_BUSTER") > 0) {
bonus4 bAutoSpellOnSkill,"EM_DIAMOND_STORM","EM_ELEMENTAL_BUSTER",getskilllv("EM_ELEMENTAL_BUSTER"),1000;
}
}
@@ -46836,8 +46835,7 @@ Body:
bonus2 bSkillAtk,"EM_ELEMENTAL_BUSTER_WIND",2*.@sum;
bonus2 bSkillAtk,"EM_ELEMENTAL_BUSTER_POISON",2*.@sum;
bonus2 bSkillAtk,"EM_ELEMENTAL_BUSTER_GROUND",2*.@sum;
.@class_ = geteleminfo(ELEMINFO_CLASS);
if (getskilllv("EM_ELEMENTAL_BUSTER") > 0 && .@class_ >= 20816 && .@class_ <= 20820) {
if (getskilllv("EM_ELEMENTAL_BUSTER") > 0 && geteleminfo(0) > 0) {
bonus4 bAutoSpellOnSkill,"EM_TERRA_DRIVE","EM_ELEMENTAL_BUSTER",getskilllv("EM_ELEMENTAL_BUSTER"),1000;
}
}
@@ -48625,92 +48623,3 @@ Body:
- FuriousBoots # 470265
Script: |
bonus bDelayrate,-10;
- Combos:
- Combo:
- FuriousCirclet_DK # 400628
- Slayer_Furious # 600059
Script: |
bonus2 bSkillAtk,"DK_HACKANDSLASHER",15;
- Combos:
- Combo:
- FuriousCirclet_DK # 400628
- Trident_Furious # 630045
Script: |
bonus2 bSkillAtk,"DK_MADNESS_CRUSHER",15;
- Combos:
- Combo:
- FuriousCirclet_ABC # 400629
- Demonius_Furious # 510150
Script: |
bonus2 bSkillAtk,"ABC_DEFT_STAB",15;
- Combos:
- Combo:
- FuriousCirclet_ABC # 400629
- Demonsword_Furious # 510151
Script: |
bonus2 bSkillAtk,"ABC_ABYSS_SQUARE",15;
- Combos:
- Combo:
- FuriousCirclet_SH # 400630
- Foxtail_Furious # 550143
Script: |
bonus2 bSkillAtk,"SH_HOGOGONG_STRIKE",15;
- Combos:
- Combo:
- FuriousCirclet_SH # 400630
- Setaria_Furious # 550144
Script: |
bonus2 bSkillAtk,"SH_HYUN_ROKS_BREEZE",15;
- Combos:
- Combo:
- Demonius_Furious # 510150
- FuriousBoots # 470265
Script: |
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
bonus2 bSkillAtk,"ABC_DEFT_STAB",.@sum;
- Combos:
- Combo:
- Demonsword_Furious # 510151
- FuriousBoots # 470265
Script: |
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
bonus2 bSkillAtk,"ABC_ABYSS_SQUARE",.@sum;
- Combos:
- Combo:
- Foxtail_Furious # 550143
- FuriousBoots # 470265
Script: |
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
bonus2 bSkillAtk,"SH_HOGOGONG_STRIKE",.@sum;
- Combos:
- Combo:
- Setaria_Furious # 550144
- FuriousBoots # 470265
Script: |
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
bonus2 bSkillAtk,"SH_HYUN_ROKS_BREEZE",.@sum;
- Combos:
- Combo:
- Slayer_Furious # 600059
- FuriousBoots # 470265
Script: |
bonus2 bSkillAtk,"DK_HACKANDSLASHER",15;
- Combos:
- Combo:
- Trident_Furious # 630045
- FuriousBoots # 470265
Script: |
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
bonus2 bSkillAtk,"DK_MADNESS_CRUSHER",.@sum;
- Combos:
- Combo:
- IDTest_arrow # 1200000
- IDTest_bow # 700000
Script: |
bonus bDex,1;
- Combos:
- Combo:
- IDTest_ammo # 1230000
- IDTest_gun # 800000
Script: |
bonus bDex,1;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
# This file is a part of rAthena.
# Copyright(C) 2024 rAthena Development Team
# Copyright(C) 2022 rAthena Development Team
# https://rathena.org - https://github.com/rathena
#
# This program is free software: you can redistribute it and/or modify
@@ -159,153 +159,77 @@ Body:
RentalHours: 1
- Group: 9
Items:
- Item: Red_Potion
Amount: 10
- Item: Red_Potion
Amount: 5
- Item: Red_Potion
- Item: Red_Potion
Amount: 3
RentalHours: 1
- Group: 10
Items:
- Item: Guard_
- Item: Guard_
- Item: Guard_
- Group: 11
Items:
- Item: Orange_Potion
Amount: 800
- Item: Minus_Status_Box_
- Item: Boost_Armor_Box
Groups:
- Group: 0
Items:
- Item: Minus_Str
Amount: 6
- Item: Atker_Plate
- Item: Atker_Manteau
- Item: Atker_Greave
- Item: Atker_Ring
- Item: Boost_Up_1
Amount: 3
- Group: 1
Items:
- Item: Minus_Agi
Amount: 6
- Item: Ran_Suits
- Item: Ran_Manteau
- Item: Ran_Boots
- Item: Ran_Brooch
- Item: Boost_Up_1
Amount: 3
- Group: 2
Items:
- Item: Minus_Vit
Amount: 6
- Item: Ele_Robe
- Item: Ele_Muffler
- Item: Ele_Shoes
- Item: Ele_Earing
- Item: Boost_Up_1
Amount: 3
- Group: 3
Items:
- Item: Minus_Int
Amount: 6
- Group: 4
Items:
- Item: Minus_Dex
Amount: 6
- Group: 5
Items:
- Item: Minus_Luk
Amount: 6
- Group: 6
Items:
- Item: Minus_Str
- Item: Minus_Agi
- Item: Minus_Vit
- Item: Minus_Int
- Item: Minus_Dex
- Item: Minus_Luk
- Item: Alchemist_Box_
- Item: Defn_Robe
- Item: Defn_Muffler
- Item: Defn_Shoes
- Item: Defn_Earing
- Item: Boost_Up_1
Amount: 3
- Item: Special_Coin_Pack
Groups:
- Group: 0
Items:
- Item: Fire_Bottle
Amount: 50
- Item: EP17_1_EVT39
Amount: 3
- Item: EP17_1_EVT02
Amount: 18
- Group: 1
Items:
- Item: Acid_Bottle
Amount: 50
- Item: BarMealTicket
Amount: 20
- Group: 2
Items:
- Item: MenEater_Plant_Bottle
Amount: 50
- Item: Ep18_Amethyst_Fragment
Amount: 20
- Group: 3
Items:
- Item: Coating_Bottle
Amount: 50
- Group: 4
Items:
- Item: Mini_Bottle
Amount: 50
- Item: FullPene_Select_Box
Groups:
- Group: 0
Items:
- Item: FullPene_Earring_Box
- Group: 1
Items:
- Item: FullPene_Pendant_Box
- Group: 2
Items:
- Item: FullPene_Armor_Box
- Group: 3
Items:
- Item: FullPene_Shoes_Box
- Item: FullTemp_Select_Box
Groups:
- Group: 0
Items:
- Item: FullTemp_Earring_Box
- Group: 1
Items:
- Item: FullTemp_Pendant_Box
- Group: 2
Items:
- Item: FullTemp_Armor_Box
- Group: 3
Items:
- Item: FullTemp_Shoes_Box
- Item: Durable_Select_Box
Groups:
- Group: 0
Items:
- Item: Durable_Weapon_Box
- Group: 1
Items:
- Item: Durable_Shield_Box
- Item: Clever_Select_Box
Groups:
- Group: 0
Items:
- Item: Clever_Weapon_Box
- Group: 1
Items:
- Item: Clever_Shield_Box
- Item: OS_Helm_Box_
Groups:
- Group: 0
Items:
- Item: Ignis_CapK
- Group: 1
Items:
- Item: Phantom_Cap
- Group: 2
Items:
- Item: Stripe_Hat
- Group: 3
Items:
- Item: Clock_Casket_RD
- Group: 4
Items:
- Item: Large_Sorcerer_Crown
- Group: 5
Items:
- Item: Scorpio_Diadem_K
- Group: 6
Items:
- Item: Sagittarius_DiademK
- Item: Shadow_R_M_Box_
Groups:
- Group: 0
Items:
- Item: Class_Sha_R_M_Melee
- Group: 1
Items:
- Item: Class_Sha_R_M_Magic
- Group: 2
Items:
- Item: Skill_Sha_R_M_Melee
- Group: 3
Items:
- Item: Skill_Sha_R_M_Magic
- Item: Ep19_Snow_Flower
Amount: 20
- Item: Metal_W_Box
Groups:
- Group: 0
@@ -402,581 +326,206 @@ Body:
- Group: 3
Items:
- Item: C_School_Bag_PU
- Item: Special_Coin_Pack
- Item: aegis_101470
Groups:
- Group: 0
Items:
- Item: EP17_1_EVT39
Amount: 3
- Item: EP17_1_EVT02
Amount: 18
- Item: Minus_Str
Amount: 6
- Group: 1
Items:
- Item: BarMealTicket
Amount: 20
- Item: Minus_Agi
Amount: 6
- Group: 2
Items:
- Item: Ep18_Amethyst_Fragment
Amount: 20
- Item: Minus_Vit
Amount: 6
- Group: 3
Items:
- Item: Ep19_Snow_Flower
Amount: 20
- Item: Boost_Armor_Box
Groups:
- Group: 0
Items:
- Item: Atker_Plate
- Item: Atker_Manteau
- Item: Atker_Greave
- Item: Atker_Ring
- Item: Boost_Up_1
Amount: 3
- Group: 1
Items:
- Item: Ran_Suits
- Item: Ran_Manteau
- Item: Ran_Boots
- Item: Ran_Brooch
- Item: Boost_Up_1
Amount: 3
- Group: 2
Items:
- Item: Ele_Robe
- Item: Ele_Muffler
- Item: Ele_Shoes
- Item: Ele_Earing
- Item: Boost_Up_1
Amount: 3
- Group: 3
Items:
- Item: Defn_Robe
- Item: Defn_Muffler
- Item: Defn_Shoes
- Item: Defn_Earing
- Item: Boost_Up_1
Amount: 3
- Item: AllMighty_Select_Box
Groups:
- Group: 0
Items:
- Item: AllMighty_Earring_Box
- Group: 1
Items:
- Item: AllMighty_Pendant_Box
- Item: TrueGem_Select_Box
Groups:
- Group: 0
Items:
- Item: TrueGem_Earring_Box
- Group: 1
Items:
- Item: TrueGem_Pendant_Box
- Group: 2
Items:
- Item: TrueGem_Shoes_Box
- Group: 3
Items:
- Item: TrueGem_Armor_Box
- Item: PerfectSize_Select_Box
Groups:
- Group: 0
Items:
- Item: PerfectSize_Weapon_Box
- Group: 1
Items:
- Item: PerfectSize_Armor_Box
- Item: Mammoth_Select_Box
Groups:
- Group: 0
Items:
- Item: Mammoth_Earring_Box
- Group: 1
Items:
- Item: Mammoth_Pendant_Box
- Group: 2
Items:
- Item: Mammoth_Armor_Box
- Group: 3
Items:
- Item: Mammoth_Shoes_Box
- Item: SpellCaster_Select_Box
Groups:
- Group: 0
Items:
- Item: SpellCaster_Earring_Box
- Group: 1
Items:
- Item: SpellCaster_Pendant_Box
- Group: 2
Items:
- Item: SpellCaster_Armor_Box
- Group: 3
Items:
- Item: SpellCaster_Shoes_Box
- Item: Absorb_Select_Box
Groups:
- Group: 0
Items:
- Item: Absorb_Weapon_Box
- Group: 1
Items:
- Item: Absorb_Shield_Box
- Item: R_Bearers_Select_Box
Groups:
- Group: 0
Items:
- Item: R_Bearers_Earring_Box
- Group: 1
Items:
- Item: R_Bearers_Pendant_Box
- Group: 2
Items:
- Item: R_Bearers_Armor_Box
- Group: 3
Items:
- Item: R_Bearers_Shoes_Box
- Item: Hasty_Select_Box
Groups:
- Group: 0
Items:
- Item: Hasty_Weapon_Box
- Group: 1
Items:
- Item: Hasty_Shield_Box
- Item: MAutoSpell_Select_Box
Groups:
- Group: 0
Items:
- Item: MAutoSpell_Earring_Box
- Group: 1
Items:
- Item: MAutoSpell_Pendant_Box
- Group: 2
Items:
- Item: MAutoSpell_Armor_Box
- Group: 3
Items:
- Item: MAutoSpell_Shoes_Box
- Item: Infinity_Select_Box
Groups:
- Group: 0
Items:
- Item: Infinity_Weapon_Box
- Group: 1
Items:
- Item: Infinity_Shield_Box
- Item: EXP_Select_Box
Groups:
- Group: 0
Items:
- Item: EXP_Weapon_Box
- Group: 1
Items:
- Item: EXP_Shield_Box
- Item: M_Blitz_Select_Box
Groups:
- Group: 0
Items:
- Item: M_Blitz_Weapon_Box
- Group: 1
Items:
- Item: M_Blitz_Shield_Box
- Item: GoodnEvil_Circlet_Box
Groups:
- Group: 0
Items:
- Item: GoodnEvil_Circlet_NW
- Group: 1
Items:
- Item: GoodnEvil_Circlet_NW2
- Group: 2
Items:
- Item: GoodnEvil_Circlet_NW3
- Group: 3
Items:
- Item: GoodnEvil_Circlet_NW4
- Item: Minus_Int
Amount: 6
- Group: 4
Items:
- Item: GoodnEvil_Circlet_NW5
- Item: Hero_Weapon_Up_S_Box
Groups:
- Group: 0
Items:
- Item: Hero_Weapon_Up_Box_1
- Group: 1
Items:
- Item: Hero_Weapon_Up_Box_2
- Group: 2
Items:
- Item: Hero_Weapon_Up_Box_3
- Group: 3
Items:
- Item: Hero_Weapon_Up_Box_4
- Group: 4
Items:
- Item: Hero_Weapon_Up_Box_5
- Item: Minus_Dex
Amount: 6
- Group: 5
Items:
- Item: Hero_Weapon_Up_Box_6
- Item: Hero_Weapon_Hammer_S
- Item: Minus_Luk
Amount: 6
- Group: 6
Items:
- Item: Minus_Str
- Item: Minus_Agi
- Item: Minus_Vit
- Item: Minus_Int
- Item: Minus_Dex
- Item: Minus_Luk
- Item: aegis_101471
Groups:
- Group: 0
Items:
- Item: Hero_Weapon_Hammer_1
- Item: Fire_Bottle
Amount: 50
- Group: 1
Items:
- Item: Hero_Weapon_Hammer_2
- Item: Acid_Bottle
Amount: 50
- Group: 2
Items:
- Item: Hero_Weapon_Hammer_3
- Item: MenEater_Plant_Bottle
Amount: 50
- Group: 3
Items:
- Item: Hero_Weapon_Hammer_4
- Item: Coating_Bottle
Amount: 50
- Group: 4
Items:
- Item: Hero_Weapon_Hammer_5
- Item: Mini_Bottle
Amount: 50
- Item: aegis_101542
Groups:
- Group: 0
Items:
- Item: aegis_101543
- Group: 1
Items:
- Item: aegis_101544
- Group: 2
Items:
- Item: aegis_101545
- Group: 3
Items:
- Item: aegis_101546
- Item: aegis_101547
Groups:
- Group: 0
Items:
- Item: aegis_101548
- Group: 1
Items:
- Item: aegis_101549
- Group: 2
Items:
- Item: aegis_101550
- Group: 3
Items:
- Item: aegis_101551
- Item: aegis_101552
Groups:
- Group: 0
Items:
- Item: aegis_101553
- Group: 1
Items:
- Item: aegis_101554
- Item: aegis_101555
Groups:
- Group: 0
Items:
- Item: aegis_101556
- Group: 1
Items:
- Item: aegis_101557
- Item: aegis_101563
Groups:
- Group: 0
Items:
- Item: Ignis_CapK
- Group: 1
Items:
- Item: Phantom_Cap
- Group: 2
Items:
- Item: Stripe_Hat
- Group: 3
Items:
- Item: Clock_Casket_RD
- Group: 4
Items:
- Item: Large_Sorcerer_Crown
- Group: 5
Items:
- Item: Hero_Weapon_Hammer_6
- Item: aegis_102215
- Item: Scorpio_Diadem_K
- Group: 6
Items:
- Item: Sagittarius_DiademK
- Item: aegis_101565
Groups:
- Group: 0
Items:
- Item: Bio_Weapon_Refine_Cube
- Item: Class_Sha_R_M_Melee
- Group: 1
Items:
- Item: Old_Refine_Cube
- Item: Class_Sha_R_M_Magic
- Group: 2
Items:
- Item: Geffen_Refine_Cube
- Item: aegis_102216
Groups:
- Group: 0
Items:
- Item: Bio_Helm_Refine_Cube
- Group: 1
Items:
- Item: Circlet_Refine_Cube
- Group: 2
Items:
- Item: Auto_Armor_Refine_Cube
- Item: Skill_Sha_R_M_Melee
- Group: 3
Items:
- Item: Racecap_Refine_Cube
- Group: 4
Items:
- Item: OS_Weapon_Refine_Cube
- Group: 5
Items:
- Item: Temporal_Refine_Cube
- Item: Hero_Weapon_S_Box_1
- Item: Skill_Sha_R_M_Magic
- Item: aegis_101654
Groups:
- Group: 0
Items:
- Item: Royal_Bow_K
Refine: 11
- Item: aegis_101655
- Group: 1
Items:
- Item: Shadow_Staff_K
Refine: 11
- Item: aegis_101656
- Item: aegis_101657
Groups:
- Group: 0
Items:
- Item: aegis_101658
- Group: 1
Items:
- Item: aegis_101659
- Group: 2
Items:
- Item: Iron_Nail_K
Refine: 11
- Item: aegis_101660
- Group: 3
Items:
- Item: Blue_Crystal_Staff
Refine: 11
- Group: 4
Items:
- Item: Freezing_Rod
Refine: 11
- Group: 5
Items:
- Item: Ancient_Hero_Boots
Refine: 11
- Item: Hero_Weapon_S_Box_2
- Item: aegis_101661
- Item: aegis_101662
Groups:
- Group: 0
Items:
- Item: Sword_Of_Bluefire
Refine: 11
- Item: aegis_101663
- Group: 1
Items:
- Item: Iron_Staff
Refine: 11
- Item: aegis_101664
- Item: aegis_101727
Groups:
- Group: 0
Items:
- Item: aegis_101717
- Group: 1
Items:
- Item: aegis_101718
- Group: 2
Items:
- Item: Oriental_Sword
Refine: 11
- Item: aegis_101719
- Group: 3
Items:
- Item: Fog_Dew_Sword
Refine: 11
- Group: 4
Items:
- Item: Sharp_Wind_Sword
Refine: 11
- Group: 5
Items:
- Item: Humma_Clear
Refine: 11
- Item: Hero_Weapon_S_Box_3
- Item: aegis_101720
- Item: aegis_101728
Groups:
- Group: 0
Items:
- Item: Narcis_Bow
Refine: 11
- Item: aegis_101721
- Group: 1
Items:
- Item: Magic_Sword
Refine: 11
- Item: aegis_101722
- Group: 2
Items:
- Item: Avenger
Refine: 11
- Item: aegis_101723
- Group: 3
Items:
- Item: Undine_Spear_K
Refine: 11
- Group: 4
Items:
- Item: Demon_Hunting_Bible_K
Refine: 11
- Group: 5
Items:
- Item: Shiver_Katar_K
Refine: 11
- Item: Hero_Weapon_S_Box_4
- Item: aegis_101724
- Item: aegis_101729
Groups:
- Group: 0
Items:
- Item: OneSkyOneSun
Refine: 11
- Item: aegis_101725
- Group: 1
Items:
- Item: SoulWeight
Refine: 11
- Group: 2
Items:
- Item: MeawFoxtail
Refine: 11
- Group: 3
Items:
- Item: Freedom_Stick
Refine: 11
- Group: 4
Items:
- Item: Blessed_Knife
Refine: 11
- Item: Hero_Weapon_S_Box_5
Groups:
- Group: 0
Items:
- Item: Dragonic_Slayer
Refine: 11
- Group: 1
Items:
- Item: Light_Blade
Refine: 11
- Group: 2
Items:
- Item: Slate_Sword
Refine: 11
- Group: 3
Items:
- Item: Trumpet_Shell_K
Refine: 11
- Group: 4
Items:
- Item: Barb_Wire_K
Refine: 11
- Group: 5
Items:
- Item: Meteor_Striker
Refine: 11
- Item: Hero_Weapon_S_Box_6
Groups:
- Group: 0
Items:
- Item: Saint_Hall
Refine: 11
- Group: 1
Items:
- Item: Ray_Knuckle
Refine: 11
- Group: 2
Items:
- Item: Blade_Katar
Refine: 11
- Group: 3
Items:
- Item: Fatalist
Refine: 11
- Group: 4
Items:
- Item: Scalet_Dragon_L_Bow
Refine: 11
- Item: Hero_Weapon_S_Box_7
Groups:
- Group: 0
Items:
- Item: Crimson_Rose
Refine: 11
- Group: 1
Items:
- Item: Master_Soul_Rifle
Refine: 11
- Group: 2
Items:
- Item: Demon_S_Shot
Refine: 11
- Group: 3
Items:
- Item: Golden_L_Launcher
Refine: 11
- Group: 4
Items:
- Item: The_Black_Gatling
Refine: 11
- Item: 2023_Spring_Select
Groups:
- Group: 0
Items:
- Item: C_Lop_Bunny_Cloak
- Group: 1
Items:
- Item: C_Heart_Chiffon_Rabbit
- Group: 2
Items:
- Item: C_Teaparty_Wonderland
- Group: 3
Items:
- Item: C_Chocolat_Rabbit_Hair
- Item: RO_Concert_Scroll2
Groups:
- Group: 0
Items:
- Item: C_Headset_OST
- Group: 1
Items:
- Item: C_Music_Decoration
- Group: 2
Items:
- Item: C_Whistle
- Item: 21th_Costume_Select
Groups:
- Group: 0
Items:
- Item: C_Ocean_Color_Long
- Group: 1
Items:
- Item: C_Aqua_Fin_Decoration
- Group: 2
Items:
- Item: C_Sailor_Cap
- Item: Cinnamon_Costume_Box
Groups:
- Group: 0
Items:
- Item: C_Cinnamon2
- Group: 1
Items:
- Item: C_Cinnamon
- Group: 2
Items:
- Item: C_JP_EV16
- Group: 3
Items:
- Item: C_JP_EV17
- Item: IsgardCrown_Box
Groups:
- Group: 0
Items:
- Item: Glacier_Helm_1
- Group: 1
Items:
- Item: Glacier_Helm_2
- Group: 2
Items:
- Item: Glacier_Helm_3
- Item: AceCard_Box
Groups:
- Group: 0
Items:
- Item: Heart_Ace_Melee
- Group: 1
Items:
- Item: Spade_Ace_Melee
- Group: 2
Items:
- Item: Diamond_Ace_Range
- Group: 3
Items:
- Item: Clover_Ace_Defense
- Item: Loki_Coin_Box
Groups:
- Group: 0
Items:
- Item: Loki_Coin
Amount: 10
- Group: 1
Items:
- Item: Loki_Coin_2
Amount: 10
- Group: 2
Items:
- Item: Loki_Coin_3
Amount: 10
- Group: 3
Items:
- Item: Loki_Coin_4
Amount: 10
- Item: Loki_Advice_Box
Groups:
- Group: 0
Items:
- Item: Loki_Advice
Amount: 10
- Group: 1
Items:
- Item: Loki_Advice_2
Amount: 10
- Group: 2
Items:
- Item: Loki_Advice_3
Amount: 10
- Group: 3
Items:
- Item: Loki_Advice_4
Amount: 10
- Item: 2023_Xmas_Costume
Groups:
- Group: 0
Items:
- Item: C_SnowmanHat
- Group: 1
Items:
- Item: C_WinterNightBells
- Group: 2
Items:
- Item: C_SantaTeddyBear
- Item: 10AllMighty_Select_Box
Groups:
- Group: 0
Items:
- Item: S_AllMighty_Earring
Refine: 10
- Group: 1
Items:
- Item: S_AllMighty_Pendant
Refine: 10
- Item: Sonic_Costume_Pack
Groups:
- Group: 0
Items:
- Item: C_Super_Sonic_Mini
- Group: 1
Items:
- Item: C_Chaos_Emerald
- Item: aegis_101726

View File

@@ -15318,663 +15318,3 @@ Body:
MinValue: 1
MaxValue: 7
Chance: 400
- Id: 168
Group: PONTIFEX_COURAGE
Slots:
- Slot: 1
Options:
- Option: VAR_MAXHPAMOUNT
MinValue: 200
MaxValue: 1000
Chance: 10000
- Option: VAR_MAXSPAMOUNT
MinValue: 50
MaxValue: 250
Chance: 10000
- Option: VAR_ATKPERCENT
MinValue: 1
MaxValue: 5
Chance: 10000
- Option: VAR_ATTPOWER
MinValue: 10
MaxValue: 50
Chance: 10000
- Option: VAR_ITEMDEFPOWER
MinValue: 10
MaxValue: 50
Chance: 10000
- Option: VAR_AVOIDSUCCESSVALUE
MinValue: 5
MaxValue: 25
Chance: 10000
- Option: VAR_HITSUCCESSVALUE
MinValue: 5
MaxValue: 25
Chance: 10000
- Option: RACE_DAMAGE_HUMAN
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_DAMAGE_ANIMAL
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_DAMAGE_DEVIL
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_DAMAGE_DRAGON
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_DAMAGE_PLANT
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_DAMAGE_NOTHING
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_DAMAGE_ANGEL
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_DAMAGE_UNDEAD
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_DAMAGE_INSECT
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_DAMAGE_FISHS
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RANGE_ATTACK_DAMAGE_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: MELEE_ATTACK_DAMAGE_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DAMAGE_CRI_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DEC_SPELL_DELAY_TIME
MinValue: 1
MaxValue: 3
Chance: 10000
- Slot: 2
Options:
- Option: DAMAGE_PROPERTY_FIRE_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DAMAGE_PROPERTY_SAINT_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DAMAGE_PROPERTY_DARKNESS_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DAMAGE_PROPERTY_POISON_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DAMAGE_PROPERTY_NOTHING_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DAMAGE_PROPERTY_TELEKINESIS_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DAMAGE_PROPERTY_UNDEAD_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: RANGE_ATTACK_DAMAGE_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: MELEE_ATTACK_DAMAGE_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DAMAGE_CRI_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DAMAGE_SIZE_SMALL_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DAMAGE_SIZE_MIDIUM_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DAMAGE_SIZE_LARGE_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DEC_SPELL_DELAY_TIME
MinValue: 1
MaxValue: 3
Chance: 10000
- Id: 169
Group: PONTIFEX_WISDOM
Slots:
- Slot: 1
Options:
- Option: VAR_MAXHPAMOUNT
MinValue: 200
MaxValue: 1000
Chance: 10000
- Option: VAR_MAXSPAMOUNT
MinValue: 50
MaxValue: 250
Chance: 10000
- Option: VAR_MAGICATKPERCENT
MinValue: 1
MaxValue: 5
Chance: 10000
- Option: VAR_ATTMPOWER
MinValue: 10
MaxValue: 50
Chance: 10000
- Option: VAR_ITEMDEFPOWER
MinValue: 10
MaxValue: 50
Chance: 10000
- Option: VAR_AVOIDSUCCESSVALUE
MinValue: 5
MaxValue: 25
Chance: 10000
- Option: DEC_SPELL_CAST_TIME
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: RACE_MDAMAGE_HUMAN
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_MDAMAGE_ANIMAL
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_MDAMAGE_DEVIL
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_MDAMAGE_DRAGON
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_MDAMAGE_PLANT
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_MDAMAGE_NOTHING
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_MDAMAGE_ANGEL
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_MDAMAGE_UNDEAD
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_MDAMAGE_INSECT
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_MDAMAGE_FISHS
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_WATER
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_WIND
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_GROUND
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_FIRE
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_SAINT
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_DARKNESS
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_POISON
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_NOTHING
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_TELEKINESIS
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DEC_SPELL_DELAY_TIME
MinValue: 1
MaxValue: 3
Chance: 10000
- Slot: 2
Options:
- Option: MDAMAGE_PROPERTY_UNDEAD_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_WATER
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_WIND
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_GROUND
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_FIRE
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_SAINT
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_DARKNESS
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_POISON
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_NOTHING
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: ADDSKILLMDAMAGE_TELEKINESIS
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: MDAMAGE_SIZE_SMALL_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: MDAMAGE_SIZE_MIDIUM_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: MDAMAGE_SIZE_LARGE_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DEC_SPELL_DELAY_TIME
MinValue: 1
MaxValue: 3
Chance: 10000
- Id: 170
Group: PONTIFEX_TENACITY
Slots:
- Slot: 1
Options:
- Option: VAR_MAXHPAMOUNT
MinValue: 250
MaxValue: 1250
Chance: 10000
- Option: VAR_MAXSPAMOUNT
MinValue: 75
MaxValue: 375
Chance: 10000
- Option: VAR_ATKPERCENT
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: VAR_ATTPOWER
MinValue: 12
MaxValue: 60
Chance: 10000
- Option: VAR_ITEMDEFPOWER
MinValue: 12
MaxValue: 60
Chance: 10000
- Option: VAR_AVOIDSUCCESSVALUE
MinValue: 6
MaxValue: 30
Chance: 10000
- Option: VAR_HITSUCCESSVALUE
MinValue: 6
MaxValue: 30
Chance: 10000
- Option: RACE_DAMAGE_HUMAN
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_DAMAGE_ANIMAL
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_DAMAGE_DEVIL
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_DAMAGE_DRAGON
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_DAMAGE_PLANT
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_DAMAGE_NOTHING
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_DAMAGE_ANGEL
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_DAMAGE_UNDEAD
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_DAMAGE_INSECT
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_DAMAGE_FISHS
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RANGE_ATTACK_DAMAGE_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: MELEE_ATTACK_DAMAGE_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DAMAGE_CRI_TARGET
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: DEC_SPELL_DELAY_TIME
MinValue: 1
MaxValue: 5
Chance: 10000
- Slot: 2
Options:
- Option: DAMAGE_PROPERTY_WATER_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_PROPERTY_WIND_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_PROPERTY_GROUND_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_PROPERTY_FIRE_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_PROPERTY_SAINT_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_PROPERTY_DARKNESS_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_PROPERTY_POISON_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_PROPERTY_NOTHING_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_PROPERTY_TELEKINESIS_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_PROPERTY_UNDEAD_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RANGE_ATTACK_DAMAGE_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: MELEE_ATTACK_DAMAGE_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_CRI_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_SIZE_SMALL_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_SIZE_MIDIUM_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DAMAGE_SIZE_LARGE_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DEC_SPELL_DELAY_TIME
MinValue: 1
MaxValue: 5
Chance: 10000
- Id: 171
Group: PONTIFEX_BELIEF
Slots:
- Slot: 1
Options:
- Option: VAR_MAXHPAMOUNT
MinValue: 250
MaxValue: 1250
Chance: 10000
- Option: VAR_MAXSPAMOUNT
MinValue: 75
MaxValue: 375
Chance: 10000
- Option: VAR_MAGICATKPERCENT
MinValue: 2
MaxValue: 10
Chance: 10000
- Option: VAR_ATTMPOWER
MinValue: 12
MaxValue: 60
Chance: 10000
- Option: VAR_ITEMDEFPOWER
MinValue: 12
MaxValue: 60
Chance: 10000
- Option: VAR_AVOIDSUCCESSVALUE
MinValue: 6
MaxValue: 30
Chance: 10000
- Option: DEC_SPELL_CAST_TIME
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: RACE_MDAMAGE_HUMAN
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_MDAMAGE_ANIMAL
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_MDAMAGE_DEVIL
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_MDAMAGE_DRAGON
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_MDAMAGE_PLANT
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_MDAMAGE_NOTHING
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_MDAMAGE_ANGEL
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_MDAMAGE_UNDEAD
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_MDAMAGE_INSECT
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: RACE_MDAMAGE_FISHS
MinValue: 4
MaxValue: 20
Chance: 10000
- Option: ADDSKILLMDAMAGE_WATER
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_WIND
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_GROUND
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_FIRE
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_SAINT
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_DARKNESS
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_POISON
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_NOTHING
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_TELEKINESIS
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DEC_SPELL_DELAY_TIME
MinValue: 1
MaxValue: 5
Chance: 10000
- Slot: 2
Options:
- Option: MDAMAGE_PROPERTY_POISON_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: MDAMAGE_PROPERTY_NOTHING_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: MDAMAGE_PROPERTY_TELEKINESIS_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: MDAMAGE_PROPERTY_UNDEAD_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_WATER
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_WIND
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_GROUND
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_FIRE
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_SAINT
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_DARKNESS
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_POISON
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_NOTHING
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: ADDSKILLMDAMAGE_TELEKINESIS
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: MDAMAGE_SIZE_SMALL_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: MDAMAGE_SIZE_MIDIUM_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: MDAMAGE_SIZE_LARGE_TARGET
MinValue: 3
MaxValue: 15
Chance: 10000
- Option: DEC_SPELL_DELAY_TIME
MinValue: 1
MaxValue: 5
Chance: 10000

File diff suppressed because it is too large Load Diff

View File

@@ -4727,174 +4727,170 @@ Body:
- Item: Gray_W_Muffler
- Item: Gray_W_Boots
- Item: Gray_W_Shoes
- Item: Pontifex_Courage
RandomOptionGroup: PONTIFEX_COURAGE
TargetItems:
- Item: Adulter_F_T_Sword
- Item: Adulter_F_Cakram
- Item: Adulter_F_Katar
- Item: Adulter_F_Lance
- Item: Adulter_F_T_Staff
- Item: Adulter_F_Rod
- Item: Adulter_F_Humma
- Item: Adulter_F_C_Humma
- Item: Adulter_F_C_Bow
- Item: Adulter_F_Ballista
- Item: Adulter_F_A_Bow
- Item: Adulter_F_Revolver
- Item: Adulter_F_Rifle
- Item: Adulter_F_Shotgun
- Item: Adulter_F_Gatling
- Item: Adulter_F_Launcher
- Item: Adulter_F_G_Sword
- Item: Adulter_F_Lapier
- Item: Adulter_F_Dagger
- Item: Adulter_F_Axe
- Item: Adulter_F_G_Spear
- Item: Adulter_F_M_Book
- Item: Adulter_F_P_Book
- Item: Adulter_F_Bible
- Item: Adulter_F_Moon_B
- Item: Adulter_F_Star_B
- Item: Adulter_F_Wand
- Item: Adulter_F_S_Stick
- Item: Adulter_F_D_Wand
- Item: Adulter_F_F_Wand
- Item: Adulter_F_F_model
- Item: Adulter_F_Knuckle
- Item: Adulter_F_Claw
- Item: Adulter_F_Violin
- Item: Adulter_F_Harp
- Item: Adulter_F_C_Rope
- Item: Adulter_F_Ribbon
- Item: Adulter_F_Mace
- Item: Adulter_F_Hall
- Item: Pontifex_Wisdom
RandomOptionGroup: PONTIFEX_WISDOM
TargetItems:
- Item: Adulter_F_T_Sword
- Item: Adulter_F_Cakram
- Item: Adulter_F_Katar
- Item: Adulter_F_Lance
- Item: Adulter_F_T_Staff
- Item: Adulter_F_Rod
- Item: Adulter_F_Humma
- Item: Adulter_F_C_Humma
- Item: Adulter_F_C_Bow
- Item: Adulter_F_Ballista
- Item: Adulter_F_A_Bow
- Item: Adulter_F_Revolver
- Item: Adulter_F_Rifle
- Item: Adulter_F_Shotgun
- Item: Adulter_F_Gatling
- Item: Adulter_F_Launcher
- Item: Adulter_F_G_Sword
- Item: Adulter_F_Lapier
- Item: Adulter_F_Dagger
- Item: Adulter_F_Axe
- Item: Adulter_F_G_Spear
- Item: Adulter_F_M_Book
- Item: Adulter_F_P_Book
- Item: Adulter_F_Bible
- Item: Adulter_F_Moon_B
- Item: Adulter_F_Star_B
- Item: Adulter_F_Wand
- Item: Adulter_F_S_Stick
- Item: Adulter_F_D_Wand
- Item: Adulter_F_F_Wand
- Item: Adulter_F_F_model
- Item: Adulter_F_Knuckle
- Item: Adulter_F_Claw
- Item: Adulter_F_Violin
- Item: Adulter_F_Harp
- Item: Adulter_F_C_Rope
- Item: Adulter_F_Ribbon
- Item: Adulter_F_Mace
- Item: Adulter_F_Hall
- Item: Pontifex_Tenacity
RandomOptionGroup: PONTIFEX_TENACITY
TargetItems:
- Item: Vivatus_F_T_Sword
- Item: Vivatus_F_Cakram
- Item: Vivatus_F_Katar
- Item: Vivatus_F_Lance
- Item: Vivatus_F_T_Staff
- Item: Vivatus_F_Rod
- Item: Vivatus_F_C_Bow
- Item: Vivatus_F_Ballista
- Item: Vivatus_F_A_Bow
- Item: Vivatus_F_G_Sword
- Item: Vivatus_F_Lapier
- Item: Vivatus_F_Dagger
- Item: Vivatus_F_Axe
- Item: Vivatus_F_G_Spear
- Item: Vivatus_F_M_Book
- Item: Vivatus_F_P_Book
- Item: Vivatus_F_Bible
- Item: Vivatus_F_Wand
- Item: Vivatus_F_Knuckle
- Item: Vivatus_F_Claw
- Item: Vivatus_F_Violin
- Item: Vivatus_F_Harp
- Item: Vivatus_F_C_Rope
- Item: Vivatus_F_Ribbon
- Item: Vivatus_F_Mace
- Item: Vivatus_F_Hall
- Item: Vivatus_F_D_Wand
- Item: Vivatus_F_S_Stick
- Item: Vivatus_F_F_Wand
- Item: Vivatus_F_F_model
- Item: Vivatus_F_Star_B
- Item: Vivatus_F_Moon_B
- Item: Vivatus_F_Gatling
- Item: Vivatus_F_Launcher
- Item: Vivatus_F_Rifle
- Item: Vivatus_F_Shotgun
- Item: Vivatus_F_Revolver
- Item: Vivatus_F_C_Humma
- Item: Vivatus_F_Humma
- Item: Pontifex_Belief
RandomOptionGroup: PONTIFEX_BELIEF
TargetItems:
- Item: Vivatus_F_T_Sword
- Item: Vivatus_F_Cakram
- Item: Vivatus_F_Katar
- Item: Vivatus_F_Lance
- Item: Vivatus_F_T_Staff
- Item: Vivatus_F_Rod
- Item: Vivatus_F_C_Bow
- Item: Vivatus_F_Ballista
- Item: Vivatus_F_A_Bow
- Item: Vivatus_F_G_Sword
- Item: Vivatus_F_Lapier
- Item: Vivatus_F_Dagger
- Item: Vivatus_F_Axe
- Item: Vivatus_F_G_Spear
- Item: Vivatus_F_M_Book
- Item: Vivatus_F_P_Book
- Item: Vivatus_F_Bible
- Item: Vivatus_F_Wand
- Item: Vivatus_F_Knuckle
- Item: Vivatus_F_Claw
- Item: Vivatus_F_Violin
- Item: Vivatus_F_Harp
- Item: Vivatus_F_C_Rope
- Item: Vivatus_F_Ribbon
- Item: Vivatus_F_Mace
- Item: Vivatus_F_Hall
- Item: Vivatus_F_D_Wand
- Item: Vivatus_F_S_Stick
- Item: Vivatus_F_F_Wand
- Item: Vivatus_F_F_model
- Item: Vivatus_F_Star_B
- Item: Vivatus_F_Moon_B
- Item: Vivatus_F_Gatling
- Item: Vivatus_F_Launcher
- Item: Vivatus_F_Rifle
- Item: Vivatus_F_Shotgun
- Item: Vivatus_F_Revolver
- Item: Vivatus_F_C_Humma
- Item: Vivatus_F_Humma
# - Item: Pontifex_Courage
# TargetItems:
# - Item: Adulter_F_T_Sword
# - Item: Adulter_F_Cakram
# - Item: Adulter_F_Katar
# - Item: Adulter_F_Lance
# - Item: Adulter_F_T_Staff
# - Item: Adulter_F_Rod
# - Item: Adulter_F_Humma
# - Item: Adulter_F_C_Humma
# - Item: Adulter_F_C_Bow
# - Item: Adulter_F_Ballista
# - Item: Adulter_F_A_Bow
# - Item: Adulter_F_Revolver
# - Item: Adulter_F_Rifle
# - Item: Adulter_F_Shotgun
# - Item: Adulter_F_Gatling
# - Item: Adulter_F_Launcher
# - Item: Adulter_F_G_Sword
# - Item: Adulter_F_Lapier
# - Item: Adulter_F_Dagger
# - Item: Adulter_F_Axe
# - Item: Adulter_F_G_Spear
# - Item: Adulter_F_M_Book
# - Item: Adulter_F_P_Book
# - Item: Adulter_F_Bible
# - Item: Adulter_F_Moon_B
# - Item: Adulter_F_Star_B
# - Item: Adulter_F_Wand
# - Item: Adulter_F_S_Stick
# - Item: Adulter_F_D_Wand
# - Item: Adulter_F_F_Wand
# - Item: Adulter_F_F_model
# - Item: Adulter_F_Knuckle
# - Item: Adulter_F_Claw
# - Item: Adulter_F_Violin
# - Item: Adulter_F_Harp
# - Item: Adulter_F_C_Rope
# - Item: Adulter_F_Ribbon
# - Item: Adulter_F_Mace
# - Item: Adulter_F_Hall
# - Item: Pontifex_Wisdom
# TargetItems:
# - Item: Adulter_F_T_Sword
# - Item: Adulter_F_Cakram
# - Item: Adulter_F_Katar
# - Item: Adulter_F_Lance
# - Item: Adulter_F_T_Staff
# - Item: Adulter_F_Rod
# - Item: Adulter_F_Humma
# - Item: Adulter_F_C_Humma
# - Item: Adulter_F_C_Bow
# - Item: Adulter_F_Ballista
# - Item: Adulter_F_A_Bow
# - Item: Adulter_F_Revolver
# - Item: Adulter_F_Rifle
# - Item: Adulter_F_Shotgun
# - Item: Adulter_F_Gatling
# - Item: Adulter_F_Launcher
# - Item: Adulter_F_G_Sword
# - Item: Adulter_F_Lapier
# - Item: Adulter_F_Dagger
# - Item: Adulter_F_Axe
# - Item: Adulter_F_G_Spear
# - Item: Adulter_F_M_Book
# - Item: Adulter_F_P_Book
# - Item: Adulter_F_Bible
# - Item: Adulter_F_Moon_B
# - Item: Adulter_F_Star_B
# - Item: Adulter_F_Wand
# - Item: Adulter_F_S_Stick
# - Item: Adulter_F_D_Wand
# - Item: Adulter_F_F_Wand
# - Item: Adulter_F_F_model
# - Item: Adulter_F_Knuckle
# - Item: Adulter_F_Claw
# - Item: Adulter_F_Violin
# - Item: Adulter_F_Harp
# - Item: Adulter_F_C_Rope
# - Item: Adulter_F_Ribbon
# - Item: Adulter_F_Mace
# - Item: Adulter_F_Hall
# - Item: Pontifex_Tenacity
# TargetItems:
# - Item: Vivatus_F_T_Sword
# - Item: Vivatus_F_Cakram
# - Item: Vivatus_F_Katar
# - Item: Vivatus_F_Lance
# - Item: Vivatus_F_T_Staff
# - Item: Vivatus_F_Rod
# - Item: Vivatus_F_C_Bow
# - Item: Vivatus_F_Ballista
# - Item: Vivatus_F_A_Bow
# - Item: Vivatus_F_G_Sword
# - Item: Vivatus_F_Lapier
# - Item: Vivatus_F_Dagger
# - Item: Vivatus_F_Axe
# - Item: Vivatus_F_G_Spear
# - Item: Vivatus_F_M_Book
# - Item: Vivatus_F_P_Book
# - Item: Vivatus_F_Bible
# - Item: Vivatus_F_Wand
# - Item: Vivatus_F_Knuckle
# - Item: Vivatus_F_Claw
# - Item: Vivatus_F_Violin
# - Item: Vivatus_F_Harp
# - Item: Vivatus_F_C_Rope
# - Item: Vivatus_F_Ribbon
# - Item: Vivatus_F_Mace
# - Item: Vivatus_F_Hall
# - Item: Vivatus_F_D_Wand
# - Item: Vivatus_F_S_Stick
# - Item: Vivatus_F_F_Wand
# - Item: Vivatus_F_F_model
# - Item: Vivatus_F_Star_B
# - Item: Vivatus_F_Moon_B
# - Item: Vivatus_F_Gatling
# - Item: Vivatus_F_Launcher
# - Item: Vivatus_F_Rifle
# - Item: Vivatus_F_Shotgun
# - Item: Vivatus_F_Revolver
# - Item: Vivatus_F_C_Humma
# - Item: Vivatus_F_Humma
# - Item: Pontifex_Belief
# TargetItems:
# - Item: Vivatus_F_T_Sword
# - Item: Vivatus_F_Cakram
# - Item: Vivatus_F_Katar
# - Item: Vivatus_F_Lance
# - Item: Vivatus_F_T_Staff
# - Item: Vivatus_F_Rod
# - Item: Vivatus_F_C_Bow
# - Item: Vivatus_F_Ballista
# - Item: Vivatus_F_A_Bow
# - Item: Vivatus_F_G_Sword
# - Item: Vivatus_F_Lapier
# - Item: Vivatus_F_Dagger
# - Item: Vivatus_F_Axe
# - Item: Vivatus_F_G_Spear
# - Item: Vivatus_F_M_Book
# - Item: Vivatus_F_P_Book
# - Item: Vivatus_F_Bible
# - Item: Vivatus_F_Wand
# - Item: Vivatus_F_Knuckle
# - Item: Vivatus_F_Claw
# - Item: Vivatus_F_Violin
# - Item: Vivatus_F_Harp
# - Item: Vivatus_F_C_Rope
# - Item: Vivatus_F_Ribbon
# - Item: Vivatus_F_Mace
# - Item: Vivatus_F_Hall
# - Item: Vivatus_F_D_Wand
# - Item: Vivatus_F_S_Stick
# - Item: Vivatus_F_F_Wand
# - Item: Vivatus_F_F_model
# - Item: Vivatus_F_Star_B
# - Item: Vivatus_F_Moon_B
# - Item: Vivatus_F_Gatling
# - Item: Vivatus_F_Launcher
# - Item: Vivatus_F_Rifle
# - Item: Vivatus_F_Shotgun
# - Item: Vivatus_F_Revolver
# - Item: Vivatus_F_C_Humma
# - Item: Vivatus_F_Humma
- Item: Bio_Helm_Refine_Cube
ResultRefine: 11
MaximumRefine: 10

File diff suppressed because it is too large Load Diff

View File

@@ -14489,234 +14489,3 @@
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_ALL_STAT_DOWN,attack,751,5,5000,1500,45000,no,target,always,0,,,,,,18,
// Episode 18
20846,MD_HIDDEN_GROUND01@NPC_GRADUAL_GRAVITY,idle,752,3,1000,0,5000,no,target,always,0,,,,,,,
20846,MD_HIDDEN_GROUND01@NPC_GRADUAL_GRAVITY,attack,752,3,1000,0,5000,no,target,always,0,,,,,,,
21295,EP18_ASH_TOAD@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
21295,EP18_ASH_TOAD@NPC_GUIDEDATTACK,chase,172,3,2000,0,5000,yes,target,always,0,,,,,,,
21295,EP18_ASH_TOAD@NPC_POISONATTACK,attack,188,5,1000,0,5000,yes,target,always,0,,,,,,,
21295,EP18_ASH_TOAD@NPC_BLINDATTACK,chase,177,5,1000,500,5000,no,target,always,0,,,,,,,
21295,EP18_ASH_TOAD@NPC_BLINDATTACK,attack,177,3,1000,500,5000,no,target,always,0,,,,,,,
21296,EP18_RAKEHAND@NPC_GUIDEDATTACK,attack,172,3,2000,0,5000,yes,target,always,0,,,,,,,
21296,EP18_RAKEHAND@NPC_GROUNDATTACK,attack,185,3,500,500,5000,no,target,always,0,,,,,,12,
21296,EP18_RAKEHAND@NPC_STUNATTACK,attack,179,3,1000,500,5000,no,target,always,0,,,,,,11,
21296,EP18_RAKEHAND@RG_CLOSECONFINE,attack,1005,1,1000,0,30000,yes,target,always,0,,,,,,,
21297,EP18_SPARK@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
21297,EP18_SPARK@MG_FIREBOLT,chase,19,3,2000,300,5000,no,target,always,0,,,,,,,
21297,EP18_SPARK@MG_FIREBALL,chase,17,3,5000,0,30000,yes,target,always,0,,,,,,,
21297,EP18_SPARK@NPC_GUIDEDATTACK,attack,172,3,2000,0,30000,yes,target,always,0,,,,,,,
21297,EP18_SPARK@MG_FIREBOLT,attack,19,3,1000,0,10000,yes,target,always,0,,,,,,,
21297,EP18_SPARK@AL_TELEPORT,chase,26,1,3000,0,300000,yes,self,mobnearbygt,23,,,,,,12,
21297,EP18_SPARK@NPC_SELFDESTRUCTION,attack,173,1,10000,1000,0,no,self,myhpltmaxrate,30,,,,,,,
21297,EP18_SPARK@NPC_SELFDESTRUCTION,chase,173,1,2000,1000,0,no,self,myhpltmaxrate,30,,,,,,,
21298,EP18_HOT_MOLAR@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
21298,EP18_HOT_MOLAR@NPC_COMBOATTACK,chase,171,3,5000,0,30000,yes,target,always,0,,,,,,,
21298,EP18_HOT_MOLAR@SM_BASH,attack,5,4,2000,0,5000,yes,target,always,0,,,,,,,
21298,EP18_HOT_MOLAR@NPC_GUIDEDATTACK,chase,172,3,2000,0,300000,yes,target,always,0,,,,,,,
21298,EP18_HOT_MOLAR@NPC_BLEEDING2,attack,764,3,2000,0,5000,yes,target,always,0,,,,,,,
21298,EP18_HOT_MOLAR@AL_TELEPORT,chase,26,1,3000,0,300000,yes,self,mobnearbygt,23,,,,,,12,
21298,EP18_HOT_MOLAR@SM_MAGNUM,attack,7,5,5000,0,5000,yes,self,attackpcge,2,,,,,,,
21299,EP18_VOLCARING@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
21299,EP18_VOLCARING@MG_FIREBOLT,chase,19,5,1000,500,30000,yes,target,always,0,,,,,,,
21299,EP18_VOLCARING@NPC_FIREATTACK,attack,186,3,2000,0,5000,yes,target,always,0,,,,,,,
21300,EP18_LAVA_TOAD@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
21300,EP18_LAVA_TOAD@MG_FIREBOLT,chase,19,3,2000,0,30000,yes,target,always,0,,,,,,,
21300,EP18_LAVA_TOAD@NPC_CRITICALSLASH,attack,170,1,3000,0,10000,yes,target,always,0,,,,,,,
21300,EP18_LAVA_TOAD@SM_MAGNUM,attack,7,5,5000,0,5000,yes,self,attackpcge,2,,,,,,,
21300,EP18_LAVA_TOAD@RG_STRIPSHIELD,attack,216,3,3000,0,30000,yes,target,always,0,,,,,,,
21301,EP18_BURNING_FANG@NPC_COMBOATTACK,idle,171,4,5000,0,5000,yes,target,always,0,,,,,,7,
21301,EP18_BURNING_FANG@NPC_GUIDEDATTACK,chase,172,5,5000,0,1000,yes,target,always,0,,,,,,,
21301,EP18_BURNING_FANG@NPC_MOVE_COORDINATE,chase,755,1,5000,0,30000,no,target,always,0,,,,,,39,
21301,EP18_BURNING_FANG@NPC_CRITICALWOUND,attack,673,4,500,500,5000,no,target,always,0,,,,,,,
21301,EP18_BURNING_FANG@NPC_MENTALBREAKER,attack,159,4,500,1500,5000,yes,target,always,0,,,,,,42,
21301,EP18_BURNING_FANG@NPC_CRITICALSLASH,attack,170,1,10000,0,30000,yes,target,always,0,,,,,,,
21301,EP18_BURNING_FANG@NPC_MOVE_COORDINATE,attack,755,1,5000,0,60000,no,target,longrangeattacked,0,,,,,,39,
21301,EP18_BURNING_FANG@NPC_CURSEATTACK,attack,181,5,4000,0,30000,yes,target,always,0,,,,,,,
21301,EP18_BURNING_FANG@NPC_STUNATTACK,attack,179,5,2000,0,30000,yes,target,always,0,,,,,,,
21301,EP18_BURNING_FANG@HW_GANBANTEIN,attack,483,1,7000,0,60000,no,target,always,0,,,,,,,
21301,EP18_BURNING_FANG@NPC_POWERUP,attack,349,3,3000,0,60000,yes,self,always,0,,,,,,,
21301,EP18_BURNING_FANG@RG_STRIPHELM,attack,218,5,1000,0,30000,yes,target,always,0,,,,,,,
21301,EP18_BURNING_FANG@NPC_SUMMONSLAVE,idle,196,1,10000,1000,30000,no,self,slavele,3,,,,,,,
21301,EP18_BURNING_FANG@NPC_CALLSLAVE,idle,352,1,10000,0,30000,no,self,always,0,,,,,,,
21301,EP18_BURNING_FANG@NPC_CALLSLAVE,attack,352,1,10000,0,30000,no,self,always,0,,,,,,,
21301,EP18_BURNING_FANG@NPC_SUMMONSLAVE,attack,196,1,10000,700,10000,no,self,slavele,3,,,,,,,
21302,EP18_ASHHOPPER@NPC_EMOTION,chase,197,1,500,0,30000,yes,self,always,0,0x0091,,,,,19,
21302,EP18_ASHHOPPER@NPC_EMOTION,idle,197,1,2000,0,30000,yes,self,always,0,0x3885,,,,,44,
21302,EP18_ASHHOPPER@NPC_GUIDEDATTACK,chase,172,3,3000,500,30000,yes,target,always,0,,,,,,,
21302,EP18_ASHHOPPER@NPC_POISONATTACK,attack,188,5,1000,0,5000,yes,target,always,0,,,,,,,
21302,EP18_ASHHOPPER@NPC_POISON_BUSTER,attack,742,1,2000,1500,30000,no,self,always,0,,,,,,,
21302,EP18_ASHHOPPER@NPC_CLOUD_KILL,attack,739,3,2000,500,15000,no,target,always,0,,,,,,,
21302,EP18_ASHHOPPER@MO_BODYRELOCATION,chase,264,1,2000,500,5000,yes,target,always,0,,,,,,28,
21303,EP18_ASHRING@NPC_POISON,attack,176,3,500,800,5000,no,target,always,0,,,,,,,
21303,EP18_ASHRING@NPC_POISONATTACK,attack,188,3,2000,0,5000,yes,target,always,0,,,,,,,
21303,EP18_ASHRING@NPC_AGIUP,chase,350,1,1000,0,30000,yes,self,always,0,,,,,,,
21303,EP18_ASHRING@WZ_QUAGMIRE,chase,92,2,500,0,30000,yes,target,always,0,,,,,,6,
21304,EP18_GREY_WOLF@NPC_POISONATTACK,chase,188,3,2000,0,5000,yes,target,always,0,,,,,,,
21304,EP18_GREY_WOLF@NPC_COMBOATTACK,attack,171,3,2000,200,5000,yes,target,always,0,,,,,,,
21304,EP18_GREY_WOLF@NPC_COMBOATTACK,chase,171,3,2000,200,5000,yes,target,always,0,,,,,,,
21304,EP18_GREY_WOLF@NPC_STUNATTACK,attack,179,3,2000,0,5000,yes,target,always,0,,,,,,,
21304,EP18_GREY_WOLF@NPC_STUNATTACK,attack,179,3,2000,0,5000,yes,target,always,0,,,,,,,
21305,EP18_TUMBLE_RING@AL_TELEPORT,idle,26,3,7000,0,5000,yes,self,rudeattacked,0,,,,,,,
21305,EP18_TUMBLE_RING@NPC_CRITICALWOUND,attack,673,1,1000,300,5000,no,target,always,0,,,,,,,
21305,EP18_TUMBLE_RING@NPC_POISONATTACK,attack,188,2,2000,500,15000,no,target,always,0,,,,,,9,
21305,EP18_TUMBLE_RING@NPC_CLOUD_KILL,attack,739,5,2000,0,15000,yes,target,always,0,,,,,,,
21305,EP18_TUMBLE_RING@NPC_AGIUP,chase,350,10,2000,0,100000,yes,self,longrangeattacked,0,,,,,,,
21306,EP18_FIREWIND_KITE@AL_TELEPORT,idle,26,3,7000,0,5000,yes,self,rudeattacked,0,,,,,,,
21306,EP18_FIREWIND_KITE@MG_FIREBOLT,idle,19,5,5000,300,5000,no,target,always,0,,,,,,,
21306,EP18_FIREWIND_KITE@NPC_WINDATTACK,chase,187,5,2000,300,5000,yes,target,always,0,,,,,,,
21306,EP18_FIREWIND_KITE@NPC_FIREATTACK,chase,186,5,3000,300,5000,yes,target,always,0,,,,,,9,
21306,EP18_FIREWIND_KITE@NPC_CRITICALSLASH,attack,170,4,2000,500,15000,no,target,always,0,,,,,,9,
21307,EP18_PHANTOM_WOLF@NPC_GUIDEDATTACK,chase,172,2,5000,0,60000,yes,target,always,0,,,,,,,
21307,EP18_PHANTOM_WOLF@NPC_CRITICALSLASH,attack,170,1,500,300,30000,yes,target,always,0,,,,,,9,
21307,EP18_PHANTOM_WOLF@AS_CLOAKING,idle,135,1,1000,300,30000,yes,self,always,0,,,,,,9,
21307,EP18_PHANTOM_WOLF@AS_GRIMTOOTH,chase,137,5,5000,0,5000,yes,target,always,0,,,,,,,
21307,EP18_PHANTOM_WOLF@ASC_METEORASSAULT,attack,406,8,3000,0,10000,yes,self,always,0,,,,,,,
21307,EP18_PHANTOM_WOLF@ASC_BREAKER,chase,379,10,2000,0,5000,yes,target,always,0,,,,,,,
21308,EP18_MD_HEARTHUNTER_A@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
21308,EP18_MD_HEARTHUNTER_A@TF_SPRINKLESAND,attack,149,1,2000,300,30000,yes,target,always,0,,,,,,,
21308,EP18_MD_HEARTHUNTER_A@NPC_CRITICALSLASH,chase,170,1,3000,0,10000,yes,target,always,0,,,,,,,
21308,EP18_MD_HEARTHUNTER_A@SM_MAGNUM,attack,7,5,5000,0,5000,yes,self,attackpcge,2,,,,,,,
21308,EP18_MD_HEARTHUNTER_A@RG_STRIPSHIELD,attack,216,3,3000,0,60000,yes,target,always,0,,,,,,,
21309,EP18_MD_THOR_GUARD@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
21309,EP18_MD_THOR_GUARD@AL_TELEPORT,chase,26,1,3000,0,300000,yes,self,mobnearbygt,23,,,,,,12,
21309,EP18_MD_THOR_GUARD@SM_PROVOKE,chase,6,10,2000,100,10000,yes,target,always,0,,,,,,3,
21309,EP18_MD_THOR_GUARD@NPC_CURSEATTACK,attack,181,5,1000,300,5000,no,target,always,0,,,,,,,
21309,EP18_MD_THOR_GUARD@CR_AUTOGUARD,attack,249,3,3000,0,300000,no,self,always,0,,,,,,,
21310,EP18_MD_GUARD_A@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
21310,EP18_MD_GUARD_A@AL_TELEPORT,chase,26,1,3000,0,300000,yes,self,mobnearbygt,23,,,,,,12,
21310,EP18_MD_GUARD_A@SM_PROVOKE,chase,6,10,2000,100,10000,yes,target,always,0,,,,,,3,
21310,EP18_MD_GUARD_A@NPC_CURSEATTACK,attack,181,5,1000,300,5000,no,target,always,0,,,,,,,
21310,EP18_MD_GUARD_A@CR_AUTOGUARD,attack,249,3,3000,0,300000,no,self,always,0,,,,,,,
21310,EP18_MD_GUARD_A@NPC_STUNATTACK,attack,179,1,500,500,5000,no,target,always,0,,,,,,9,
21311,EP18_MD_GUARD_B@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
21311,EP18_MD_GUARD_B@AL_TELEPORT,chase,26,1,3000,0,300000,yes,self,mobnearbygt,23,,,,,,12,
21311,EP18_MD_GUARD_B@SM_PROVOKE,chase,6,10,2000,100,10000,yes,target,always,0,,,,,,3,
21311,EP18_MD_GUARD_B@NPC_CURSEATTACK,attack,181,5,1000,300,5000,no,target,always,0,,,,,,,
21311,EP18_MD_GUARD_B@CR_AUTOGUARD,attack,249,3,3000,0,300000,no,self,always,0,,,,,,,
21311,EP18_MD_GUARD_B@NPC_STUNATTACK,attack,179,1,500,500,5000,no,target,always,0,,,,,,9,
21312,EP18_MD_HEARTHUNTER_R@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
21312,EP18_MD_HEARTHUNTER_R@TF_SPRINKLESAND,attack,149,1,2000,300,30000,yes,target,always,0,,,,,,,
21312,EP18_MD_HEARTHUNTER_R@NPC_CRITICALSLASH,chase,170,1,3000,0,10000,yes,target,always,0,,,,,,,
21312,EP18_MD_HEARTHUNTER_R@SM_MAGNUM,attack,7,5,5000,0,5000,yes,self,attackpcge,2,,,,,,,
21312,EP18_MD_HEARTHUNTER_R@RG_STRIPSHIELD,attack,216,3,3000,0,60000,yes,target,always,0,,,,,,,
21313,EP18_MD_HEARTHUNTER_F@AL_TELEPORT,chase,26,1,3000,0,300000,yes,self,mobnearbygt,23,,,,,,12,
21313,EP18_MD_HEARTHUNTER_F@NPC_EMOTION,chase,197,1,500,0,30000,yes,self,always,0,0x0091,,,,,19,
21313,EP18_MD_HEARTHUNTER_F@NPC_BLINDATTACK,chase,177,3,1000,0,5000,yes,target,always,0,,,,,,39,
21313,EP18_MD_HEARTHUNTER_F@HT_BLASTMINE,idle,122,3,2000,500,180000,no,target,always,0,,,,,,,
21313,EP18_MD_HEARTHUNTER_F@NPC_COMBOATTACK,attack,171,2,3000,500,15000,yes,target,always,0,,,,,,,
21313,EP18_MD_HEARTHUNTER_F@NPC_EMOTION,idle,197,1,2000,0,30000,yes,self,always,0,0x2085,,,,,44,
21313,EP18_MD_HEARTHUNTER_F@TF_SPRINKLESAND,attack,149,1,3000,0,30000,yes,target,always,0,,,,,,,
21314,EP18_MD_SCHULANG@NPC_TELEKINESISATTACK,attack,191,2,3000,0,5000,yes,target,always,0,,,,,,,
21314,EP18_MD_SCHULANG@NPC_POWERUP,attack,349,3,5000,0,30000,yes,self,always,0,,,,,,,
21314,EP18_MD_SCHULANG@NPC_DARKSTRIKE,chase,340,3,3000,200,15000,yes,target,always,0,,,,,,,
21314,EP18_MD_SCHULANG@NPC_BLOODDRAIN,attack,199,1,2000,0,10000,yes,target,always,0,,,,,,,
21314,EP18_MD_SCHULANG@NPC_DARKSTRIKE,attack,340,3,3000,200,15000,yes,target,always,0,,,,,,,
21314,EP18_MD_SCHULANG@NPC_WIDESTONE2,attack,759,3,3000,500,30000,no,target,always,0,,,,,,,
21314,EP18_MD_SCHULANG@MG_THUNDERSTORM,attack,21,5,7000,500,30000,no,target,always,0,,,,,,,
21314,EP18_MD_SCHULANG@MG_LIGHTNINGBOLT,chase,20,6,3000,300,5000,no,target,always,0,,,,,,,
21314,EP18_MD_SCHULANG@NPC_WIDECONFUSE2,attack,762,3,3000,500,30000,no,target,always,0,,,,,,,
21314,EP18_MD_SCHULANG@NPC_CHANGEWIND,attack,165,1,3000,300,120000,yes,self,myhpltmaxrate,50,,,,,,47,
21314,EP18_MD_SCHULANG@NPC_CHANGEHOLY,attack,167,1,5000,300,120000,yes,self,myhpltmaxrate,50,,,,,,47,
21314,EP18_MD_SCHULANG@NPC_CHANGETELEKINESIS,attack,169,1,1000,300,120000,yes,self,myhpltmaxrate,50,,,,,,47,
21314,EP18_MD_SCHULANG@WZ_VERMILION,chase,85,3,5000,500,60000,no,target,myhpltmaxrate,70,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_DARKNESSATTACK,attack,190,4,3000,0,5000,yes,target,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_BLOODDRAIN,attack,199,1,2000,0,10000,yes,target,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_DARKSTRIKE,attack,340,3,3000,200,15000,yes,target,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_EARTHQUAKE,attack,653,4,2000,500,30000,yes,self,always,0,,,,,,6,
21315,EP18_MD_DEMI_FREYJA@NPC_POWERUP,attack,349,3,5000,0,30000,yes,self,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_DARKSTRIKE,chase,340,4,3000,200,15000,yes,target,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_BLOODDRAIN,attack,199,1,2000,0,10000,yes,target,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_DARKSTRIKE,attack,340,6,3000,200,15000,yes,target,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_WIDESTONE2,attack,759,5,3000,500,30000,no,target,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_WIDECONFUSE2,attack,762,5,3000,500,30000,no,target,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_WIDECURSE2,attack,761,3,3000,500,60000,no,target,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_HELLJUDGEMENT2,attack,768,5,1000,500,120000,yes,target,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_CHANGEDARKNESS,attack,168,1,1000,0,120000,yes,self,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_CHANGEHOLY,attack,167,1,3000,0,120000,yes,self,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_CANE_OF_EVIL_EYE,chase,780,3,8000,300,30000,no,target,always,0,,,,,,,
21315,EP18_MD_DEMI_FREYJA@NPC_CANE_OF_EVIL_EYE,attack,780,5,7000,300,30000,yes,target,always,0,,,,,,,
21316,EP18_MD_SCHULANG_R@NPC_TELEKINESISATTACK,attack,191,2,3000,0,5000,yes,target,always,0,,,,,,,
21316,EP18_MD_SCHULANG_R@NPC_POWERUP,attack,349,3,5000,0,30000,yes,self,always,0,,,,,,,
21316,EP18_MD_SCHULANG_R@NPC_DARKSTRIKE,chase,340,3,3000,200,15000,yes,target,always,0,,,,,,,
21316,EP18_MD_SCHULANG_R@NPC_BLOODDRAIN,attack,199,1,2000,0,10000,yes,target,always,0,,,,,,,
21316,EP18_MD_SCHULANG_R@NPC_DARKSTRIKE,attack,340,3,3000,200,15000,yes,target,always,0,,,,,,,
21316,EP18_MD_SCHULANG_R@NPC_WIDESTONE2,attack,759,3,3000,500,30000,no,target,always,0,,,,,,,
21316,EP18_MD_SCHULANG_R@MG_THUNDERSTORM,attack,21,5,7000,500,30000,no,target,always,0,,,,,,,
21316,EP18_MD_SCHULANG_R@MG_LIGHTNINGBOLT,chase,20,6,3000,300,5000,no,target,always,0,,,,,,,
21316,EP18_MD_SCHULANG_R@NPC_WIDECONFUSE2,attack,762,3,3000,500,30000,no,target,always,0,,,,,,,
21316,EP18_MD_SCHULANG_R@NPC_CHANGEWIND,attack,165,1,3000,300,120000,yes,self,myhpltmaxrate,50,,,,,,47,
21316,EP18_MD_SCHULANG_R@NPC_CHANGEHOLY,attack,167,1,5000,300,120000,yes,self,myhpltmaxrate,50,,,,,,47,
21316,EP18_MD_SCHULANG_R@NPC_CHANGETELEKINESIS,attack,169,1,1000,300,120000,yes,self,myhpltmaxrate,50,,,,,,47,
21316,EP18_MD_SCHULANG_R@WZ_VERMILION,chase,85,3,5000,500,60000,no,target,myhpltmaxrate,70,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_DARKNESSATTACK,attack,190,4,3000,0,5000,yes,target,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_BLOODDRAIN,attack,199,1,2000,0,10000,yes,target,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_DARKSTRIKE,attack,340,3,3000,200,15000,yes,target,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_EARTHQUAKE,attack,653,4,2000,500,30000,yes,self,always,0,,,,,,6,
21317,EP18_MD_DEMI_FREYJA_R@NPC_POWERUP,attack,349,3,5000,0,30000,yes,self,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_DARKSTRIKE,chase,340,4,3000,200,15000,yes,target,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_BLOODDRAIN,attack,199,1,2000,0,10000,yes,target,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_DARKSTRIKE,attack,340,6,3000,200,15000,yes,target,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_WIDESTONE2,attack,759,5,3000,500,30000,no,target,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_WIDECONFUSE2,attack,762,5,3000,500,30000,no,target,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_WIDECURSE2,attack,761,3,3000,500,60000,no,target,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_HELLJUDGEMENT2,attack,768,5,1000,500,120000,yes,target,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_CHANGEDARKNESS,attack,168,1,1000,0,120000,yes,self,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_CHANGEHOLY,attack,167,1,3000,0,120000,yes,self,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_CANE_OF_EVIL_EYE,chase,780,3,8000,300,30000,no,target,always,0,,,,,,,
21317,EP18_MD_DEMI_FREYJA_R@NPC_CANE_OF_EVIL_EYE,attack,780,5,7000,300,30000,yes,target,always,0,,,,,,,
21318,EP18_MD_SANARE_R@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
21318,EP18_MD_SANARE_R@AL_TELEPORT,chase,26,1,3000,0,300000,yes,self,mobnearbygt,23,,,,,,12,
21318,EP18_MD_SANARE_R@NPC_EMOTION,chase,197,1,500,0,30000,yes,self,always,0,0x0091,,,,,19,
21318,EP18_MD_SANARE_R@AL_HEAL,idle,28,9,7000,500,5000,yes,friend,myhpltmaxrate,50,,,,,,3,
21318,EP18_MD_SANARE_R@NPC_EMOTION,idle,197,1,2000,0,30000,yes,self,always,0,0x3885,,,,,14,
21318,EP18_MD_SANARE_R@AL_HEAL,attack,28,9,7000,500,15000,yes,friend,always,0,,,,,,3,
21318,EP18_MD_SANARE_R@NPC_DARKCROSS,attack,338,5,3000,500,15000,yes,target,always,0,,,,,,,
21318,EP18_MD_SANARE_R@AL_HOLYLIGHT,chase,156,1,3000,300,15000,yes,target,always,0,,,,,,,
21318,EP18_MD_SANARE_R@NPC_HOLYATTACK,chase,189,3,4000,500,15000,yes,target,always,0,,,,,,,
21318,EP18_MD_SANARE_R@AL_HEAL,idle,28,9,10000,700,3000,yes,friend,friendhpltmaxrate,50,,,,,,,
21323,EP18_GREY_GOAT@BS_ADRENALINE,attack,111,10,500,1500,300000,no,self,always,0,,,,,,6,
21323,EP18_GREY_GOAT@BS_ADRENALINE,chase,111,10,500,1500,300000,no,self,always,0,,,,,,6,
21323,EP18_GREY_GOAT@NPC_EMOTION,chase,197,1,200,0,5000,yes,self,always,0,0x1089,,,,,19,
21323,EP18_GREY_GOAT@NPC_SPLASHATTACK,attack,174,1,2000,0,5000,yes,target,attackpcge,2,,,,,,,
21323,EP18_GREY_GOAT@NPC_STUNATTACK,attack,179,3,500,1500,5000,no,target,always,0,,,,,,6,
21323,EP18_GREY_GOAT@NPC_CRITICALWOUND,attack,673,1,500,0,5000,yes,target,always,0,,,,,,,
21323,EP18_GREY_GOAT@AL_TELEPORT,chase,26,1,3000,0,300000,yes,self,mobnearbygt,23,,,,,,,
21323,EP18_GREY_GOAT@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,12,
21324,EP18_GREY_WOLF_BABY@NPC_PROVOCATION,chase,194,1,200,0,5000,yes,target,always,0,,,,,,19,
21324,EP18_GREY_WOLF_BABY@NPC_STUNATTACK,attack,179,3,2000,500,5000,no,target,always,0,,,,,,19,
21324,EP18_GREY_WOLF_BABY@NPC_CRITICALWOUND,attack,673,5,2000,300,10000,no,target,always,0,,,,,,,
21324,EP18_GREY_WOLF_BABY@NPC_GUIDEDATTACK,attack,172,4,1500,300,10000,yes,target,always,0,,,,,,,
21324,EP18_GREY_WOLF_BABY@AL_TELEPORT,chase,26,1,3000,0,300000,yes,self,mobnearbygt,23,,,,,,,
21324,EP18_GREY_WOLF_BABY@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,12,
21360,EP18_MD_SCHULANG_L@NPC_TELEKINESISATTACK,attack,191,2,3000,0,5000,yes,target,always,0,,,,,,,
21360,EP18_MD_SCHULANG_L@NPC_POWERUP,attack,349,3,5000,0,30000,yes,self,always,0,,,,,,,
21360,EP18_MD_SCHULANG_L@NPC_DARKSTRIKE,chase,340,3,3000,200,15000,yes,target,always,0,,,,,,,
// 21360,EP18_MD_SCHULANG_L@NPC_DEADLYCURSE2,attack,779,5,5000,1000,30000,no,self,always,0,,,,,,55,
21360,EP18_MD_SCHULANG_L@NPC_BLOODDRAIN,attack,199,1,2000,0,10000,yes,target,always,0,,,,,,,
21360,EP18_MD_SCHULANG_L@NPC_DARKSTRIKE,attack,340,3,3000,200,15000,yes,target,always,0,,,,,,,
21360,EP18_MD_SCHULANG_L@NPC_WIDESTONE2,attack,759,3,3000,500,30000,no,target,always,0,,,,,,,
21360,EP18_MD_SCHULANG_L@MG_THUNDERSTORM,attack,21,5,7000,500,30000,no,target,always,0,,,,,,,
21360,EP18_MD_SCHULANG_L@MG_LIGHTNINGBOLT,chase,20,6,3000,300,5000,no,target,always,0,,,,,,,
21360,EP18_MD_SCHULANG_L@NPC_WIDECONFUSE2,attack,762,3,3000,500,30000,no,target,always,0,,,,,,,
21360,EP18_MD_SCHULANG_L@NPC_CHANGEWIND,attack,165,1,3000,300,120000,yes,self,myhpltmaxrate,50,,,,,,47,
21360,EP18_MD_SCHULANG_L@NPC_CHANGEHOLY,attack,167,1,5000,300,120000,yes,self,myhpltmaxrate,50,,,,,,47,
21360,EP18_MD_SCHULANG_L@NPC_CHANGETELEKINESIS,attack,169,1,1000,300,120000,yes,self,myhpltmaxrate,50,,,,,,47,
21360,EP18_MD_SCHULANG_L@WZ_VERMILION,chase,85,3,5000,500,60000,no,target,myhpltmaxrate,70,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_DARKNESSATTACK,attack,190,4,3000,0,5000,yes,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_BLOODDRAIN,attack,199,1,2000,0,10000,yes,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_DARKSTRIKE,attack,340,3,3000,200,15000,yes,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_EARTHQUAKE,attack,653,4,2000,500,30000,yes,self,always,0,,,,,,6,
21361,EP18_MD_DEMI_FREYJA_L@NPC_POWERUP,attack,349,3,5000,0,30000,yes,self,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_DARKSTRIKE,chase,340,4,3000,200,15000,yes,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_BLOODDRAIN,attack,199,1,2000,0,10000,yes,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_DARKSTRIKE,attack,340,6,3000,200,15000,yes,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_WIDESTONE2,attack,759,5,3000,500,30000,no,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_WIDECONFUSE2,attack,762,5,3000,500,30000,no,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_WIDECURSE2,attack,761,3,3000,500,60000,no,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_HELLJUDGEMENT2,attack,768,5,1000,500,120000,yes,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_CHANGEDARKNESS,attack,168,1,1000,0,120000,yes,self,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_CHANGEHOLY,attack,167,1,3000,0,120000,yes,self,always,0,,,,,,,
// 21361,EP18_MD_DEMI_FREYJA_L@NPC_DEADLYCURSE2,attack,779,5,5000,1000,30000,no,self,always,0,,,,,,55,
21361,EP18_MD_DEMI_FREYJA_L@NPC_CANE_OF_EVIL_EYE,chase,780,3,8000,300,30000,no,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_CANE_OF_EVIL_EYE,attack,780,5,7000,300,30000,yes,target,always,0,,,,,,,

File diff suppressed because it is too large Load Diff

View File

@@ -1571,32 +1571,8 @@ Body:
- Id: 3492
Title: (Skilled) Dragon Monster Hunting - Standby
TimeLimit: 4h
- Id: 3493
Title: Conversation with Jarad
- Id: 3494
Title: Conversation with Rohi
- Id: 3495
Title: Conversation with Jeojin
- Id: 3496
Title: Conversation with Squain
- Id: 3497
Title: Conversation with Senado
- Id: 3498
Title: Conversation with Japer
- Id: 3499
Title: Conversation with Shirouan
- Id: 3500
Title: Conversation with Ishira
- Id: 3501
Title: Conversation with Gina
- Id: 3502
Title: Conversation with Hari
- Id: 3503
Title: Examine the Sky
- Id: 3504
Title: Look at the Sky - Standby
- Id: 3505
Title: Report to Junok
TimeLimit: 4h
- Id: 3507
Title: Illusion Investigation Team - Sheshin
@@ -3233,27 +3209,6 @@ Body:
- Id: 5931
Title: "[Standby] Subjugation-Yanggeochon"
TimeLimit: 4h
- Id: 5932
Title: The Abused Child
- Id: 5933
Title: Business Plan Presentation
- Id: 5934
Title: Gathering Training (1)
- Id: 5935
Title: Gathering Training (2)
- Id: 5936
Title: Gathering Training (3)
- Id: 5937
Title: "[Standby] Flower Room's work"
TimeLimit: 4h
- Id: 5938
Title: Gathering Half Flower
- Id: 5939
Title: Gathering Half Flower
- Id: 5940
Title: Gathering Half Flower
- Id: 5941
Title: Gathering Half Flower
- Id: 6000
Title: Job Change to Taekwon
- Id: 6001
@@ -6315,56 +6270,6 @@ Body:
MAGMARING: true
DROSERA: true
MUSCIPULAR: true
- Id: 8681
Title: To Rachel (1)
- Id: 8682
Title: To Rachel (2)
- Id: 8683
Title: Please stop fighting
- Id: 8684
Title: It's over
- Id: 8685
Title: A suspicious movement detected in the temple
- Id: 8686
Title: The Intruder of the Temple
- Id: 8687
Title: Did you break it?
- Id: 8688
Title: Thanks for today's daily food
- Id: 8689
Title: Today's Daily food - Standby
TimeLimit: 4h
- Id: 8690
Title: Thanks for today's daily food
- Id: 8691
Title: Sacred Relics for Essence (1)
- Id: 8692
Title: Sacred Relics for Essence (2)
- Id: 8693
Title: Sacred Relics for Essence (3)
- Id: 8694
Title: Clean Water Procurement - Standby
TimeLimit: 4h
- Id: 8695
Title: Procurement of clean water (1)
- Id: 8696
Title: Procurement of clean water (2)
- Id: 8697
Title: Procurement of clean water (3)
- Id: 8698
Title: Late migration
- Id: 8699
Title: First Step Out of the City
- Id: 8700
Title: I couldn't even come halfway
- Id: 8701
Title: Scenery I've Seen for the First Time
- Id: 8702
Title: Smell of Volcanic Ash
- Id: 8703
Title: The easy way to go
- Id: 8718
Title: My friend's regards
- Id: 8719
Title: A new area somewhere in the anthill
- Id: 8720
@@ -8135,106 +8040,6 @@ Body:
- Id: 11667
Title: Squirrels are rats, too? Standby
TimeLimit: 4h
- Id: 11696
Title: Niren's Request
- Id: 11697
Title: Niren's Request
- Id: 11698
Title: Niren's Request
- Id: 11699
Title: Niren's Request
- Id: 11700
Title: Niren's Request
- Id: 11701
Title: Niren's Request
- Id: 11702
Title: Niren's Request
- Id: 11703
Title: Niren's Request
- Id: 11704
Title: Niren's Request
- Id: 11705
Title: Children of Grey
- Id: 11706
Title: Children of Grey
- Id: 11707
Title: Children of Grey
- Id: 11708
Title: Children of Grey
- Id: 11709
Title: Children of Grey
- Id: 11710
Title: Children of Grey
- Id: 11711
Title: Children of Grey
- Id: 11712
Title: Children of Grey
- Id: 11713
Title: Children of Grey
- Id: 11714
Title: Children of Grey
- Id: 11715
Title: Children of Grey
- Id: 11716
Title: Children of Grey
- Id: 11717
Title: Children of Grey
- Id: 11718
Title: Children of Grey
- Id: 11719
Title: Children of Grey
- Id: 11720
Title: Children of Grey
- Id: 11721
Title: Children of Grey
- Id: 11722
Title: Children of Grey
- Id: 11723
Title: Children of Grey
- Id: 11724
Title: Children of Grey
- Id: 11725
Title: Investigation of Oz Labyrinth
- Id: 11726
Title: Investigation of Oz Labyrinth
- Id: 11727
Title: Investigation of Oz Labyrinth
- Id: 11728
Title: Investigation of Oz Labyrinth
- Id: 11729
Title: Investigation of Oz Labyrinth
- Id: 11730
Title: Investigation of Oz Labyrinth
Targets:
- Id: 1
Location: oz_dun01
Count: 10
- Id: 11731
Title: Investigation of Oz Labyrinth
- Id: 11732
Title: Investigation of Oz Labyrinth
- Id: 11733
Title: Investigation of Oz Labyrinth
- Id: 11734
Title: Investigation of Oz Labyrinth
- Id: 11735
Title: Investigation of Oz Labyrinth
- Id: 11736
Title: Maze of Oz 1st Floor (170lv)
Targets:
- Mob: EP18_ASH_TOAD
Count: 20
- Id: 11737
Title: Maze of Oz Level 1 - Standby
TimeLimit: 4h
- Id: 11738
Title: Maze of Oz Level 2 (200lv)
Targets:
- Mob: EP18_HOT_MOLAR
Count: 20
- Id: 11739
Title: Maze of Oz Level 2 (200lv)
TimeLimit: 4h
- Id: 12000
Title: An old friend
- Id: 12001
@@ -9274,31 +9079,6 @@ Body:
- Id: 12506
Title: Let's try again to seal the crack
TimeLimit: 4h
- Id: 12520
Title: Villa of Deception
- Id: 12521
Title: Villa of Deception Hard
- Id: 12522
Title: Cooldown: Villa of Deception
TimeLimit: 4h
- Id: 12531
Title: Future General Candidate
- Id: 12532
Title: Trouble at the Top
- Id: 12533
Title: The Hidden Helper
- Id: 12534
Title: The Missing Camille
- Id: 12535
Title: The Governor's Decision
- Id: 12536
Title: The Scattered Luggage (North)
- Id: 12537
Title: Scattered Luggage (West)
- Id: 12538
Title: The Scattered Luggage (East)
- Id: 12539
Title: Scattered Luggage (South)
- Id: 13000
Title: RWC2011Card Gathering
- Id: 13001
@@ -11446,90 +11226,6 @@ Body:
Title: Farm Worker
- Id: 16547
Title: Juno Monster Society
- Id: 16548
Title: I can't sleep
Targets:
- Mob: EP18_FIREWIND_KITE
Count: 30
- Id: 16549
Title: I can't sleep
Targets:
- Mob: EP18_FIREWIND_KITE
Count: 30
- Id: 16550
Title: I Can't Sleep - Wait
TimeLimit: 4h
- Id: 16551
Title: The Story of Dinar
- Id: 16552
Title: Amira's Story
- Id: 16553
Title: Shanina's Grandma's Story
- Id: 16554
Title: Please collect the stories
- Id: 16555
Title: The Story of Dinar
- Id: 16556
Title: Amira's Story
- Id: 16557
Title: Shanina's Grandma's Story
- Id: 16558
Title: Please collect the stories
- Id: 16559
Title: Please collect the stories - Standby
TimeLimit: 4h
- Id: 16560
Title: This is not the place
- Id: 16561
Title: This is not the place
- Id: 16562
Title: This is not the place
- Id: 16563
Title: This is not the place
- Id: 16564
Title: This is not the place
- Id: 16565
Title: This is not the place
- Id: 16566
Title: This is not the place
- Id: 16567
Title: The Contest of the Grey Wolf Forest
- Id: 16568
Title: Everyone's Opinion
- Id: 16569
Title: Everyone's Opinion
- Id: 16570
Title: Everyone's Opinion
- Id: 16571
Title: Everyone's Opinion
- Id: 16572
Title: The Contest of the Grey Wolf Forest
- Id: 16573
Title: Source of Weapon
- Id: 16574
Title: Source of Weapon
- Id: 16575
Title: Source of Weapon
- Id: 16576
Title: Source of Weapon
- Id: 16577
Title: Source of Weapon
- Id: 16578
Title: Source of Weapon
- Id: 16579
Title: Source of Weapon
- Id: 16580
Title: Source of Weapon
- Id: 16581
Title: Children Know It
- Id: 16582
Title: Children Know It
- Id: 16583
Title: Children Know It
- Id: 16584
Title: The Price of Labor
- Id: 16585
Title: The Price of Labor
- Id: 17000
Title: Meet with Father Bamph
- Id: 17001
@@ -11791,61 +11487,12 @@ Body:
- Id: 17425
Title: (Standby) Thanatos Tower, 12th floor
TimeLimit: 4h
- Id: 17504
Title: Where's My Home
- Id: 17505
Title: Where's My Home
- Id: 17506
Title: Where's My Home
- Id: 17507
Title: Where's My Home
- Id: 17508
Title: Lack of Supplies
Drops:
- Mob: EP18_GREY_WOLF
Item: Ep18_Very_Ddan_Crystal
Rate: 5000
- Id: 17509
Title: (Standby) Lack of supplies
TimeLimit: 4h
- Id: 17510
Title: There are no bad beasts in the world
- Id: 17511
Title: There are no bad beasts in the world
- Id: 17512
Title: There are no bad beasts in the world
- Id: 17513
Title: The Unexpected Shepherd
- Id: 17514
Title: The Unexpected Shepherd
Targets:
- Mob: EP18_ASHRING
Count: 20
- Id: 17515
Title: The Unexpected Shepherd
- Id: 17516
Title: (Standby) Unexpected shepherd
TimeLimit: 4h
- Id: 17517
Title: The Rebels
- Id: 17518
Title: The Rebels
- Id: 17519
Title: The Rebels
- Id: 17520
Title: Wolf in the Sheep
- Id: 17521
Title: When you need a conversation
- Id: 17522
Title: Cleaning the Traitors
- Id: 17523
Title: Purification of the Sanctuary
- Id: 17524
Title: Cleaning the Traitors
- Id: 17525
Title: When you need a conversation
- Id: 17526
Title: Purification of the Sanctuary
- Id: 17527
Title: (Standby) Cleaning strategy
TimeLimit: 4h
@@ -11974,23 +11621,6 @@ Body:
- Id: 18080
Title: Goseong dungeon 1st floor attack
TimeLimit: 4h
- Id: 18082
Title: Eligibility to Participate in the Competition
- Id: 18083
Title: Investigation of Daishinkan's Villa
- Id: 18084
Title: Fact Investigation
- Id: 18085
Title: The Direction of Prayer
- Id: 18086
Title: Make the Grey Wolf Forest Safer
Targets:
- Id: 1
Location: gw_fild01
Count: 30
- Id: 18087
Title: Safer in the Gray Wolf Forest - Standby
TimeLimit: 4h
- Id: 18100
Title: Legends from Moscovia
- Id: 18101

View File

@@ -9940,7 +9940,7 @@ Body:
Hit: Single
HitCount: 1
Duration1: 300000
Duration2: 10000
Duration2: 15000
Requires:
SpCost: 200
Status: Berserk
@@ -10486,11 +10486,11 @@ Body:
- Level: 1
Time: 40000
- Level: 2
Time: 60000
Time: 45000
- Level: 3
Time: 80000
Time: 50000
- Level: 4
Time: 100000
Time: 55000
- Level: 5
Time: 120000
Duration2:
@@ -18417,68 +18417,6 @@ Body:
HitCount: 1
Duration1: 60000
Status: Relieve_off
- Id: 780
Name: NPC_CANE_OF_EVIL_EYE
Description: Cane of evil eye
MaxLevel: 10
Type: Misc
TargetType: Ground
DamageFlags:
IgnoreFlee: true
Flags:
IsNpc: true
Hit: Single
Range: 11 # unknown
HitCount:
- Level: 1
Count: 1
- Level: 2
Count: 2
- Level: 3
Count: 3
- Level: 4
Count: 4
- Level: 5
Count: 5
- Level: 6
Count: 6
- Level: 7
Count: 7
- Level: 8
Count: 8
- Level: 9
Count: 9
- Level: 10
Count: 10
CastTime: 500
Duration1:
- Level: 1
Time: 1000
- Level: 2
Time: 2000
- Level: 3
Time: 3000
- Level: 4
Time: 4000
- Level: 5
Time: 5000
- Level: 6
Time: 6000
- Level: 7
Time: 7000
- Level: 8
Time: 8000
- Level: 9
Time: 9000
- Level: 10
Time: 10000
Unit:
Id: Cane_of_evil_eye
Interval: 3000
Target: Enemy
Flag:
NoReiteration: true
NoOverlap: true
- Id: 783
Name: NPC_KILLING_AURA
Description: Killing Aura
@@ -34993,7 +34931,17 @@ Body:
Time: 2000
- Level: 5
Time: 1000
Cooldown: 60000
Cooldown:
- Level: 1
Time: 30000
- Level: 2
Time: 60000
- Level: 3
Time: 90000
- Level: 4
Time: 120000
- Level: 5
Time: 150000
Requires:
SpCost:
- Level: 1
@@ -35018,7 +34966,7 @@ Body:
Critical: true
Range: 1
Hit: Multi_Hit
HitCount: 3
HitCount: 2
Element: Weapon
Requires:
SpCost: 1
@@ -36770,8 +36718,7 @@ Body:
SplashArea: 3
CastCancel: true
Duration1: 600000
AfterCastActDelay: 500
Cooldown: 700
Cooldown: 1000
Requires:
SpCost:
- Level: 1
@@ -36798,7 +36745,6 @@ Body:
Element: Weapon
SplashArea: 3
CastCancel: true
AfterCastActDelay: 700
Cooldown: 1000
Requires:
SpCost:
@@ -36909,16 +36855,16 @@ Body:
Toggleable: true
Hit: Single
HitCount: 1
GiveAp: 15
SplashArea: 10
CastCancel: true
CastTime: 2000
AfterCastActDelay: 300
Duration1: 40000
Cooldown: 25000
AfterCastActDelay: 500
Duration1: 60000
Cooldown: 15000
FixedCastTime: 1000
Requires:
SpCost: 60
ApCost: 35
Status:
Guard_Stance: true
Status: Guardian_S
@@ -37080,7 +37026,7 @@ Body:
Range: 9
Hit: Multi_Hit
HitCount: -10
Element: Neutral
Element: Holy
CastCancel: true
CastTime: 2000
Cooldown: 5000
@@ -37120,7 +37066,7 @@ Body:
Hit: Multi_Hit
HitCount: -7
Element: Weapon
GiveAp: 5
GiveAp: 3
SplashArea:
- Level: 1
Area: 2
@@ -37167,7 +37113,7 @@ Body:
HitCount: 3
Element: Weapon
SplashArea: 3
GiveAp: 5
GiveAp: 3
CastCancel: true
CastTime: 1000
AfterCastActDelay: 500
@@ -37207,7 +37153,7 @@ Body:
Hit: Single
HitCount: 1
Element: Holy
GiveAp: 6
GiveAp: 4
CastCancel: true
CastTime: 1000
AfterCastActDelay: 150
@@ -38246,7 +38192,7 @@ Body:
Area: 3
GiveAp: 3
CastCancel: true
AfterCastActDelay: 700
AfterCastActDelay: 250
Duration1:
- Level: 1
Time: 10000
@@ -38919,7 +38865,7 @@ Body:
Time: 1500
- Level: 5
Time: 1000
Cooldown: 30000
Cooldown: 60000
Requires:
SpCost:
- Level: 1
@@ -38950,27 +38896,26 @@ Body:
FixedCastTime: 1000
Requires:
SpCost: 100
ApCost: 120
ApCost: 150
Status: Abyss_Slayer
- Id: 5319
Name: ABC_ABYSS_STRIKE
Description: Omega Abyss Strike
Description: Abyss Strike
MaxLevel: 10
Type: Magic
TargetType: Ground
Range: 9
Hit: Single
HitCount: 1
Element: Fire
CastCancel: true
CastTime: 2000
AfterCastActDelay: 500
Duration1: 100
Cooldown: 700
Cooldown: 3000
FixedCastTime: 1000
Requires:
SpCost: 125
ApCost: 10
ApCost: 15
Unit:
Id: Dummyskill
Range: 4
@@ -39085,7 +39030,7 @@ Body:
Hit: Multi_Hit
HitCount: 2
Element: Weapon
GiveAp: 3
GiveAp: 1
CastCancel: true
AfterCastActDelay: 500
Cooldown: 350
@@ -40972,7 +40917,7 @@ Body:
GiveAp: 5
CastCancel: true
CastTime: 4000
AfterCastActDelay: 700
AfterCastActDelay: 500
Duration1: 3000
Duration2: 10000
Cooldown: 2000
@@ -41011,7 +40956,7 @@ Body:
GiveAp: 5
CastCancel: true
CastTime: 4000
AfterCastActDelay: 700
AfterCastActDelay: 500
Duration1: 3000
Duration2: 20000
Cooldown: 2000
@@ -41050,7 +40995,7 @@ Body:
GiveAp: 5
CastCancel: true
CastTime: 4000
AfterCastActDelay: 700
AfterCastActDelay: 500
Duration1: 3000
Duration2: 20000
Cooldown: 2000
@@ -41131,7 +41076,7 @@ Body:
CastTime: 3000
AfterCastActDelay: 500
Duration1: 1500000
Cooldown: 60000
Cooldown: 900000
FixedCastTime: 2000
Requires:
SpCost: 100
@@ -41152,7 +41097,7 @@ Body:
CastTime: 3000
AfterCastActDelay: 500
Duration1: 1500000
Cooldown: 60000
Cooldown: 900000
FixedCastTime: 2000
Requires:
SpCost: 100
@@ -41173,7 +41118,7 @@ Body:
CastTime: 3000
AfterCastActDelay: 500
Duration1: 1500000
Cooldown: 60000
Cooldown: 900000
FixedCastTime: 2000
Requires:
SpCost: 100
@@ -41194,7 +41139,7 @@ Body:
CastTime: 3000
AfterCastActDelay: 500
Duration1: 1500000
Cooldown: 60000
Cooldown: 900000
FixedCastTime: 2000
Requires:
SpCost: 100
@@ -41215,7 +41160,7 @@ Body:
CastTime: 3000
AfterCastActDelay: 500
Duration1: 1500000
Cooldown: 60000
Cooldown: 900000
FixedCastTime: 2000
Requires:
SpCost: 100
@@ -41234,11 +41179,11 @@ Body:
CastCancel: true
CastTime: 8000
AfterCastActDelay: 500
Cooldown: 2000
Cooldown: 5000
FixedCastTime: 1500
Requires:
SpCost: 140
ApCost: 15
ApCost: 30
- Id: 5381
Name: EM_ELEMENTAL_VEIL
Description: Elemental Veil
@@ -41303,7 +41248,7 @@ Body:
Splash: true
Range: 1
Hit: Multi_Hit
HitCount: 5
HitCount: 2
SplashArea: 4
Requires:
SpCost: 1
@@ -41442,473 +41387,6 @@ Body:
SplashArea: 6
Requires:
SpCost: 1
- Id: 5401
Name: NW_P_F_I
Description: P.F.I
MaxLevel: 10
- Id: 5402
Name: NW_GRENADE_MASTERY
Description: Grenade Mastery
MaxLevel: 10
- Id: 5403
Name: NW_INTENSIVE_AIM
Description: Intensive Aim
MaxLevel: 1
Type: Weapon
TargetType: Self
DamageFlags:
NoDamage: true
Hit: Single
HitCount: 1
Duration1: -1
Requires:
SpCost:
- Level: 1
Amount: 10
Status: Intensive_Aim
- Id: 5404
Name: NW_GRENADE_FRAGMENT
Description: Grenade Fragment
MaxLevel: 7
Type: Weapon
TargetType: Self
DamageFlags:
NoDamage: true
Hit: Single
HitCount: 1
Duration1: 300000
Cooldown: 2000
Requires:
SpCost: 50
- Id: 5405
Name: NW_THE_VIGILANTE_AT_NIGHT
Description: The Vigilante at Night
MaxLevel: 5
Type: Weapon
TargetType: Self
DamageFlags:
Splash: true
Hit: Multi_Hit
HitCount: 4
Element: Weapon
SplashArea:
- Level: 1
Area: 2
- Level: 2
Area: 2
- Level: 3
Area: 2
- Level: 4
Area: 3
- Level: 5
Area: 3
GiveAp: 2
AfterCastActDelay: 1000
Cooldown: 500
CastCancel: true
FixedCastTime: 1500
Requires:
SpCost:
- Level: 1
Amount: 72
- Level: 2
Amount: 76
- Level: 3
Amount: 80
- Level: 4
Amount: 84
- Level: 5
Amount: 88
Weapon:
Gatling: true
Shotgun: true
Ammo:
Bullet: true
AmmoAmount: 10
- Id: 5406
Name: NW_ONLY_ONE_BULLET
Description: Only One Bullet
MaxLevel: 5
Type: Weapon
TargetType: Attack
DamageFlags:
Critical: true
Range: -9
Hit: Single
HitCount: 1
Element: Weapon
GiveAp: 2
AfterCastActDelay: 500
Cooldown: 350
CastCancel: true
FixedCastTime: 1000
Requires:
SpCost:
- Level: 1
Amount: 39
- Level: 2
Amount: 43
- Level: 3
Amount: 47
- Level: 4
Amount: 51
- Level: 5
Amount: 55
Weapon:
Revolver: true
Rifle: true
Ammo:
Bullet: true
AmmoAmount: 1
- Id: 5407
Name: NW_SPIRAL_SHOOTING
Description: Spiral Shooting
MaxLevel: 5
Type: Weapon
TargetType: Attack
DamageFlags:
Critical: true
Splash: true
Range: -9
Hit: Multi_Hit
HitCount: 1
Element: Weapon
SplashArea:
- Level: 1
Area: 2
- Level: 2
Area: 2
- Level: 3
Area: 2
- Level: 4
Area: 3
- Level: 5
Area: 3
GiveAp: 2
AfterCastActDelay: 1000
Cooldown: 500
CastCancel: true
FixedCastTime: 1000
Requires:
SpCost:
- Level: 1
Amount: 48
- Level: 2
Amount: 53
- Level: 3
Amount: 58
- Level: 4
Amount: 63
- Level: 5
Amount: 68
Weapon:
Grenade: true
Rifle: true
Ammo:
Bullet: true
AmmoAmount: 6
- Id: 5408
Name: NW_MAGAZINE_FOR_ONE
Description: Magazine for One
MaxLevel: 5
Type: Weapon
TargetType: Attack
DamageFlags:
Critical: true
Range: -9
Hit: Multi_Hit
HitCount: 6
Element: Weapon
GiveAp: 2
AfterCastActDelay: 1000
Cooldown: 500
CastCancel: true
FixedCastTime: 1000
Requires:
SpCost:
- Level: 1
Amount: 42
- Level: 2
Amount: 46
- Level: 3
Amount: 50
- Level: 4
Amount: 54
- Level: 5
Amount: 58
Weapon:
Revolver: true
Gatling: true
Ammo:
Bullet: true
AmmoAmount: 6
- Id: 5409
Name: NW_WILD_FIRE
Description: Wild Fire
MaxLevel: 5
Type: Weapon
TargetType: Ground
Range: -9
Hit: Single
HitCount: -3
Element: Weapon
DamageFlags:
Splash: true
SplashArea:
- Level: 1
Area: 2
- Level: 2
Area: 2
- Level: 3
Area: 2
- Level: 4
Area: 3
- Level: 5
Area: 3
GiveAp: 2
AfterCastActDelay: 1000
Cooldown: 500
CastCancel: true
FixedCastTime: 1000
Requires:
SpCost:
- Level: 1
Amount: 51
- Level: 2
Amount: 55
- Level: 3
Amount: 59
- Level: 4
Amount: 63
- Level: 5
Amount: 67
Weapon:
Shotgun: true
Grenade: true
Ammo:
Bullet: true
AmmoAmount: 5
- Id: 5410
Name: NW_BASIC_GRENADE
Description: Basic Grenade
MaxLevel: 5
Type: Weapon
TargetType: Ground
Range: -9
Hit: Single
HitCount: -2
Element: Weapon
DamageFlags:
Splash: true
SplashArea:
- Level: 1
Area: 1
- Level: 2
Area: 1
- Level: 3
Area: 1
- Level: 4
Area: 2
- Level: 5
Area: 2
GiveAp: 2
Cooldown: 300
CastCancel: true
FixedCastTime: 1000
Requires:
SpCost:
- Level: 1
Amount: 36
- Level: 2
Amount: 42
- Level: 3
Amount: 48
- Level: 4
Amount: 54
- Level: 5
Amount: 60
ItemCost:
- Item: Nw_Grenade
Amount: 1
- Id: 5411
Name: NW_HASTY_FIRE_IN_THE_HOLE
Description: Hasty Fire in the Hole
MaxLevel: 5
Type: Weapon
TargetType: Ground
Range: -9
Hit: Multi_Hit
HitCount: -2
Element: Weapon
DamageFlags:
Splash: true
SplashArea: 2
GiveAp: 3
Cooldown: 1000
CastCancel: true
FixedCastTime: 1000
AfterCastActDelay: 1500
Requires:
SpCost:
- Level: 1
Amount: 50
- Level: 2
Amount: 53
- Level: 3
Amount: 56
- Level: 4
Amount: 59
- Level: 5
Amount: 62
ItemCost:
- Item: Nw_Grenade
Amount: 3
- Id: 5412
Name: NW_GRENADES_DROPPING
Description: Grenades Dropping
MaxLevel: 5
Type: Weapon
TargetType: Ground
Range: -9
Hit: Multi_Hit
HitCount: 3
Element: Weapon
DamageFlags:
Splash: true
SplashArea:
- Level: 1
Area: 5
- Level: 2
Area: 5
- Level: 3
Area: 5
- Level: 4
Area: 4
- Level: 5
Area: 4
GiveAp: 5
Cooldown: 4500
CastCancel: true
FixedCastTime: 1000
Requires:
SpCost:
- Level: 1
Amount: 60
- Level: 2
Amount: 66
- Level: 3
Amount: 72
- Level: 4
Amount: 78
- Level: 5
Amount: 84
ItemCost:
- Item: Nw_Grenade
Amount: 15
Duration1: 4000
Duration2: 100
Unit:
Id: Grenades_Dropping
Layout: 0
Range:
- Level: 1
Size: 1
- Level: 2
Size: 1
- Level: 3
Size: 1
- Level: 4
Size: 2
- Level: 5
Size: 2
Interval: 250
Target: Enemy
Flag:
NoOverlap: true
PathCheck: true
- Id: 5413
Name: NW_AUTO_FIRING_LAUNCHER
Description: Auto Firing Launcher
MaxLevel: 5
Type: Weapon
TargetType: Self
DamageFlags:
NoDamage: true
Duration1:
- Level: 1
Time: 120000
- Level: 2
Time: 150000
- Level: 3
Time: 180000
- Level: 4
Time: 210000
- Level: 5
Time: 240000
Cooldown: 30000
CastCancel: true
FixedCastTime: 3000
Requires:
SpCost:
- Level: 1
Amount: 90
- Level: 2
Amount: 100
- Level: 3
Amount: 110
- Level: 4
Amount: 120
- Level: 5
Amount: 130
Status: Auto_Firing_Launcher
- Id: 5414
Name: NW_HIDDEN_CARD
Description: Hidden Card
MaxLevel: 10
Type: Weapon
TargetType: Self
DamageFlags:
NoDamage: true
Duration1: 300000
Cooldown: 60000
CastCancel: true
FixedCastTime: 2000
Requires:
SpCost: 150
ApCost: 150
Status: Hidden_Card
- Id: 5415
Name: NW_MISSION_BOMBARD
Description: Mission Bombard
MaxLevel: 10
Type: Weapon
TargetType: Ground
Range: -9
Hit: Multi_Hit
HitCount: -3
Element: Weapon
DamageFlags:
Splash: true
SplashArea: 4
Cooldown: 10000
CastCancel: true
FixedCastTime: 1000
Requires:
SpCost: 100
ApCost: 35
ItemCost:
- Item: Nw_Grenade
Amount: 15
Duration1: 10000
Unit:
Id: Mission_Bombard
Layout: 0
Range: 2
Interval: 250
Target: Enemy
Flag:
NoOverlap: true
PathCheck: true
- Id: 5449
Name: HN_SELFSTUDY_TATICS
Description: Self Study Tactics
@@ -42689,16 +42167,6 @@ Body:
SpCost: 150
ApCost: 150
Status: Rulebreak
- Id: 5496
Name: NW_THE_VIGILANTE_AT_NIGHT_GUN_GATLING
Description: The Vigilante At Night Gun Gatling
MaxLevel: 5
CastCancel: true
- Id: 5497
Name: NW_THE_VIGILANTE_AT_NIGHT_GUN_SHOTGUN
Description: The Vigilante At Night Gun Shotgun
MaxLevel: 5
CastCancel: true
- Id: 6001
Name: DK_DRAGONIC_BREATH
Description: Dragonic Breath
@@ -42911,7 +42379,7 @@ Body:
- Level: 10
Area: 3
CastCancel: true
AfterCastActDelay: 700
AfterCastActDelay: 250
Cooldown: 500
Requires:
SpCost:
@@ -45919,7 +45387,7 @@ Body:
Hit: Single
HitCount: 1
Duration1: 300000
Duration2: 10000
Duration2: 15000
Requires:
SpCost: 200
Status: Berserk
@@ -46552,10 +46020,9 @@ Body:
Type: Weapon
TargetType: Attack
Range: 1
Hit: Single
HitCount: 1
Hit: Multi_Hit
HitCount: 3
Element: Weapon
CastCancel: true
CastTime: 1000
AfterCastActDelay: 2000
Duration2: 4500

View File

@@ -7864,95 +7864,6 @@ Body:
Royal_Guard: true
Royal_Guard_T: true
Imperial_Guard: true
- Job: Night_Watch
Inherit:
Novice: true
Gunslinger: true
Rebellion: true
Tree:
- Name: NW_P_F_I
MaxLevel: 10
- Name: NW_GRENADE_MASTERY
MaxLevel: 10
- Name: NW_INTENSIVE_AIM
MaxLevel: 1
Requires:
- Name: NW_P_F_I
Level: 1
- Name: NW_HIDDEN_CARD
MaxLevel: 10
Requires:
- Name: NW_P_F_I
Level: 5
- Name: NW_INTENSIVE_AIM
Level: 1
- Name: NW_BASIC_GRENADE
MaxLevel: 5
Requires:
- Name: NW_GRENADE_MASTERY
Level: 3
- Name: NW_GRENADE_FRAGMENT
MaxLevel: 7
Requires:
- Name: NW_GRENADE_MASTERY
Level: 1
- Name: NW_THE_VIGILANTE_AT_NIGHT
MaxLevel: 5
Requires:
- Name: NW_P_F_I
Level: 3
- Name: NW_INTENSIVE_AIM
Level: 1
- Name: NW_ONLY_ONE_BULLET
MaxLevel: 5
Requires:
- Name: NW_P_F_I
Level: 3
- Name: NW_INTENSIVE_AIM
Level: 1
- Name: NW_SPIRAL_SHOOTING
MaxLevel: 5
Requires:
- Name: NW_P_F_I
Level: 3
- Name: NW_INTENSIVE_AIM
Level: 1
- Name: NW_MAGAZINE_FOR_ONE
MaxLevel: 5
Requires:
- Name: NW_P_F_I
Level: 3
- Name: NW_INTENSIVE_AIM
Level: 1
- Name: NW_WILD_FIRE
MaxLevel: 5
Requires:
- Name: NW_P_F_I
Level: 3
- Name: NW_INTENSIVE_AIM
Level: 1
- Name: NW_HASTY_FIRE_IN_THE_HOLE
MaxLevel: 5
Requires:
- Name: NW_BASIC_GRENADE
Level: 3
- Name: NW_GRENADES_DROPPING
MaxLevel: 5
Requires:
- Name: NW_HASTY_FIRE_IN_THE_HOLE
Level: 3
- Name: NW_AUTO_FIRING_LAUNCHER
MaxLevel: 5
Requires:
- Name: NW_GRENADES_DROPPING
Level: 3
- Name: NW_MISSION_BOMBARD
MaxLevel: 10
Requires:
- Name: NW_GRENADE_MASTERY
Level: 5
- Name: NW_GRENADES_DROPPING
Level: 3
- Job: Hyper_Novice
Inherit:
Novice: true

View File

@@ -165,7 +165,6 @@ Body:
- Status: Poison
DurationLookup: NPC_POISON
CalcFlags:
Def: true
Def2: true
Regen: true
Opt2:
@@ -262,7 +261,6 @@ Body:
- Status: Dpoison
DurationLookup: NPC_POISON
CalcFlags:
Def: true
Def2: true
Regen: true
Opt2:
@@ -1117,7 +1115,6 @@ Body:
Icon: EFST_GROUNDMAGIC
DurationLookup: SA_VOLCANO
CalcFlags:
Batk: true
Watk: true
Matk: true
Flags:
@@ -1142,10 +1139,6 @@ Body:
NoClearance: true
- Status: Watk_Element
DurationLookup: MS_MAGNUM
Flags:
NoSave: true
EndOnStart:
Watk_Element: true
- Status: Armor
DurationLookup: NPC_DEFENDER
- Status: Armor_Element_Water
@@ -2829,7 +2822,6 @@ Body:
CalcFlags:
Flee: true
Flags:
BlEffect: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true
@@ -2838,7 +2830,6 @@ Body:
CalcFlags:
Watk: true
Flags:
BlEffect: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true
@@ -2847,7 +2838,6 @@ Body:
CalcFlags:
MaxHp: true
Flags:
BlEffect: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true
@@ -2856,7 +2846,6 @@ Body:
CalcFlags:
MaxSp: true
Flags:
BlEffect: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true
@@ -2865,7 +2854,6 @@ Body:
CalcFlags:
Hit: true
Flags:
BlEffect: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true
@@ -7949,9 +7937,6 @@ Body:
Flags:
BlEffect: true
DisplayPc: true
NoBanishingBuster: true
NoDispell: true
NoClearance: true
- Status: Ultimate_S
Icon: EFST_ULTIMATE_S
DurationLookup: IG_ULTIMATE_SACRIFICE
@@ -8764,10 +8749,6 @@ Body:
DurationLookup: MT_RUSH_QUAKE
CalcFlags:
All: true
Flags:
NoDispell: true
NoBanishingBuster: true
NoClearance: true
- Status: G_LIFEPOTION
Icon: EFST_G_LIFEPOTION
Flags:
@@ -8802,96 +8783,3 @@ Body:
- Status: Rulebreak
Icon: EFST_RULEBREAK
DurationLookup: HN_RULEBREAK
- Status: Intensive_Aim
Icon: EFST_INTENSIVE_AIM
States:
NoMove: true
CalcFlags:
Batk: true
Hit: true
Cri: true
Flags:
BlEffect: true
DisplayPc: true
SendVal1: true
NoSave: true
NoBanishingBuster: true
NoDispell: true
NoClearance: true
- Status: Intensive_Aim_Count
Icon: EFST_INTENSIVE_AIM_COUNT
Flags:
DisplayPc: true
SendVal1: true
NoSave: true
NoBanishingBuster: true
NoDispell: true
NoClearance: true
- Status: Grenade_Fragment_1
Icon: EFST_GRENADE_FRAGMENT_1
DurationLookup: NW_GRENADE_FRAGMENT
EndOnStart:
Grenade_Fragment_2: true
Grenade_Fragment_3: true
Grenade_Fragment_4: true
Grenade_Fragment_5: true
Grenade_Fragment_6: true
- Status: Grenade_Fragment_2
Icon: EFST_GRENADE_FRAGMENT_2
DurationLookup: NW_GRENADE_FRAGMENT
EndOnStart:
Grenade_Fragment_1: true
Grenade_Fragment_3: true
Grenade_Fragment_4: true
Grenade_Fragment_5: true
Grenade_Fragment_6: true
- Status: Grenade_Fragment_3
Icon: EFST_GRENADE_FRAGMENT_3
DurationLookup: NW_GRENADE_FRAGMENT
EndOnStart:
Grenade_Fragment_1: true
Grenade_Fragment_2: true
Grenade_Fragment_4: true
Grenade_Fragment_5: true
Grenade_Fragment_6: true
- Status: Grenade_Fragment_4
Icon: EFST_GRENADE_FRAGMENT_4
DurationLookup: NW_GRENADE_FRAGMENT
EndOnStart:
Grenade_Fragment_1: true
Grenade_Fragment_2: true
Grenade_Fragment_3: true
Grenade_Fragment_5: true
Grenade_Fragment_6: true
- Status: Grenade_Fragment_5
Icon: EFST_GRENADE_FRAGMENT_5
DurationLookup: NW_GRENADE_FRAGMENT
EndOnStart:
Grenade_Fragment_1: true
Grenade_Fragment_2: true
Grenade_Fragment_3: true
Grenade_Fragment_4: true
Grenade_Fragment_6: true
- Status: Grenade_Fragment_6
Icon: EFST_GRENADE_FRAGMENT_6
DurationLookup: NW_GRENADE_FRAGMENT
EndOnStart:
Grenade_Fragment_1: true
Grenade_Fragment_2: true
Grenade_Fragment_3: true
Grenade_Fragment_4: true
Grenade_Fragment_5: true
- Status: Auto_Firing_Launcher
Icon: EFST_AUTO_FIRING_LAUNCHEREFST
DurationLookup: NW_AUTO_FIRING_LAUNCHER
Flags:
SendVal1: true
- Status: Hidden_Card
Icon: EFST_HIDDEN_CARD
DurationLookup: NW_HIDDEN_CARD
CalcFlags:
All: true
Flags:
NoBanishingBuster: true
NoDispell: true
NoClearance: true

View File

@@ -125,12 +125,6 @@ item delay, etc).
---------------------------------------
*trade_unconditional
Allows player to ignore the trade conditions of items (drop, trade, sell, cart, storage/gstorage, mail and auction).
---------------------------------------
======================
| 3. Command-related |
======================

View File

@@ -20,30 +20,11 @@ Title: Quest title.
TimeLimit: Amount of time before the quest expires.
Specifying with "+" will mark how long until the quest expires.
Use a number followed by "d" for day(s), "h" for hour(s), "mn" for minute(s), and "s" for second(s).
Format: "d" (optional), [0-23]"h" (optional), [0-59]"mn" (optional), [0-59]"s" (optional).
Specifying with "+" will mark how long until the quest expires.
Specifying without "+" will mark the exact time the quest expires. Format: "d" (optional), [0-23]"h" (required), [0-59]"mn" (optional), [0-59]"s" (optional).
Example:
- Id: 2069
Title: Tierra Gorge Battle
# The quest expires 5 minutes after being taken.
TimeLimit: +5mn
Specifying without "+" will mark the exact time the quest expires.
Use a number followed by "d" for day(s) to shift the exact timer to the given day(s) or use the days of the week to set the expiration day,
and "h" for hour(s), "mn" for minute(s), and "s" for second(s).
Format: [days of the week] or "d" (optionals), [0-23]"h" (optional), [0-59]"mn" (optional), [0-59]"s" (optional).
Examples:
- Id: 9419
Title: Attack Sky Fortress Invading Prontera
# The quest expires 3 days after being taken at 4am.
TimeLimit: 3d 4h
- Id: 5965
Title: "[Standby] Devil's Special"
# The quest expires Monday at 4am.
TimeLimit: Monday 4h
Please note the number before "d" only shifts the exact timer to the given day(s).
---------------------------------------

View File

@@ -8966,9 +8966,8 @@ Get info of elemental of attached player or player by char_id.
Other info can be obtained by 'getunitdata' command.
Valid types are:
ELEMINFO_ID Elemental ID (ID unique to elementals unit type)
ELEMINFO_GAMEID Elemental Game ID
ELEMINFO_CLASS Elemental Class (ID defined in elemental_db.yml)
0: Elemental ID
1: Elemental Game ID
---------------------------------------
\\

View File

@@ -1,279 +0,0 @@
//===== rAthena Script =======================================
//= Gold PC Bonus NPC
//===== Description: =========================================
//= NPC that can be spawned via the Gold PC Timer Button.
//===== Changelog: ===========================================
//= 1.0 Initial release [Lemongrass]
//= 1.1 Replay version [eppc0330]
//= 1.2 Translation of the replay version [Lemongrass]
//= 1.3 Cleanup of NPC logic [Lemongrass]
//= 1.4 Added replay version of buff NPC [eppc0330]
//============================================================
prontera,0,0,0 script Goldpoint Manager::GOLDPCCAFE 4_F_02,{
// ID:AMOUNT:PRICE
setarray .items$[1],
"25464:1:2", // World_Tour_Ticket 1
"23919:1:10", // K_Secret_Key 1
"23919:11:100",// K_Secret_Key 11
"23919:33:300";// K_Secret_Key 33
mes "[Goldpoint Manager]";
mes "You currently have ^0000ff"+Goldpc_Points+"^000000 points.";
mes "What reward do you want?";
next;
.@menu$ = "View current points";
for(.@i = 1; .@i < getarraysize(.items$); .@i++) {
explode(.@array$, .items$[.@i], ":");
.@cost = atoi(.@array$[2]);
.@menu$ += ":" + .@cost + " points gift";
if( Goldpc_Points < .@cost ){
.@menu$ += " ^ff0000(not enough points)^000000";
}
}
.@s = select(.@menu$)-1;
if(.@s == 0) {
mes "[Goldpoint Manager]";
mes "You currently have ^0000ff"+Goldpc_Points+"^000000 points.";
close;
}
explode(.@array$, .items$[.@s], ":");
.@itemid = atoi(.@array$[0]);
.@amount = atoi(.@array$[1]);
.@cost = atoi(.@array$[2]);
if(Goldpc_Points < .@cost) {
mes "[Goldpoint Manager]";
mes "You have ^0000ff"+Goldpc_Points+"^000000 points remaining.";
mes "You cannot get the prize with this amount of points.";
close;
}
mes "[Goldpoint Manager]";
mes "You chose the "+.@cost+" points gift. We will reward you immediately.";
Goldpc_Points -= .@cost;
getitem .@itemid,.@amount;
mes "You have ^0000ff"+Goldpc_Points+"^000000 points remaining.";
close;
}
prontera,146,93,5 script 프버방시피 4_M_MANAGER,{
mes "[프버방시피]";
mes "여~ 계속 보게 되는군 친구.";
mes "별로 소개도 필요없을 정도로";
mes "많이 본 것 같지만 아무튼...";
mes "..입아프게 말하는 것도 귀찮고,";
mes "이미 익히들 잘 알고 있을거라고";
mes "생각하니 간단하게 이야기할게.";
next;
mes "[프버방시피]";
mes "자네가 있는 장소에 따라서,";
mes "나는 자네에게 여러가지";
mes "서비스를 해 줄 예정이야.";
next;
mes "[프버방시피]";
mes "아무튼 자네가 지금 서비스를";
mes "받을 수 있는가 체크를 해";
mes "보도록 하겠어. 잠깐만";
mes "기다려봐.";
next;
if(vip_status(VIP_STATUS_ACTIVE)==1||getgroupid()==99)
goto VIP; //Custom. In KRo there's two PC cafe grade : gold and silver.
else
goto Normal;
Normal:
mes "[프버방시피]";
mes "애석하게도 자네는 서비스를";
mes "받을 수 있는 곳에 존재하고";
mes "있지않군... 정 서비스를 받고";
mes "싶다면 다른 장소에서 컨택트";
mes "하도록 해.";
next;
mes "[프버방시피]";
mes "거 왜, 많은 사람들이 모여서";
mes "각자 다른 세계와 조우하는 그";
mes "장소 있잖아? 거기로 가서";
mes "이쪽 세계로 들어오란 말야.";
next;
mes "[프버방시피]";
mes "그 때 다시 이야기";
mes "하도록 하지. 좋은 하루되게.";
close;
Vip:
// ID:갯수:가격:이름:조사
setarray .items$[1],
"14529:10:2000:을", //탐욕스크롤
"12274:1:10000:을", //대환단
"12275:1:10000:을", //태청단
"12262:10:10000:를"; //마패
mes "[프버방시피]";
mes "오케이. 자네는 서비스를 받을";
mes "수 있는 장소...거기서 등급을";
mes "나눠보자면 골드 등급인가.";
mes "탐욕 스크롤, 대환단, 태청단,";
mes "마패를 받을 수 있는데...";
next;
mes "[프버방시피]";
mes "각자 탐욕 스크롤이 2000제니.";
mes "대환단이 10000제니";
mes "태청단이 10000제니";
mes "마패가 10000제니!";
mes "자아, 자네는 이중에 뭘 받고";
mes "싶어?";
next;
for(.@i = 1; .@i < getarraysize(.items$); .@i++) {
explode(.@array$, .items$[.@i], ":");
.@menu$ += ":"+getitemname(atoi(.@array$[0]));
}
.@s = select(.@menu$+":받지 않는다.")-1;
if(.@s == getarraysize(.items$)) {
mes "[프버방시피]";
mes "확고한 인간이로군. 오케이.";
mes "뭐 강요할 생각은 없다네.";
mes "그럼 좋은 하루되게나.";
close;
}
explode(.@array$, .items$[.@s], ":");
.@itemid = atoi(.@array$[0]);
.@amount = atoi(.@array$[1]);
.@cost = atoi(.@array$[2]);
.@name$ = getitemname(atoi(.@array$[0]));
.@part$ = (.@array$[3]);
if(zeny < .@cost) {
mes "[프버방시피]";
mes "애석하게도 자넨 "+.@cost+"제니라는";
mes "돈도 없구만... 서비스받기는";
mes "글렀어. 아무리 서비스라지만";
mes "그렇게 정해졌으니 공짜로 해";
mes "줄 수는 없다네.";
close;
}
if(countitem(.@itemid) > 0) {
mes "[프버방시피]";
mes "애석하게도 음... 자네는";
mes "이미 "+.@name$+""+.@part$+" 하나";
mes "가지고 있구만. 내가 이야기";
mes "안했었나? 아..이거 원 요즘";
mes "건망증이 늘어서 말이지.";
mes "핫핫핫.";
next;
mes "[프버방시피]";
mes "좌우지간, 물건이 많지는 않은";
mes "관계로 물건을 소지하고 있는";
mes "사람에게는 지급 할 수가 없어.";
next;
mes "[프버방시피]";
mes "다음 기회를 이용해 달라구.";
mes "다음에 또 보자구~!";
close;
}
mes "[프버방시피]";
mes "오케이. 잘 생각했어. 정말";
mes "탁월한 선택이야. 핫핫핫.";
mes "잘 쓰도록 하라구~";
set Zeny, Zeny - .@cost;
getitem .@itemid,.@amount;
next;
mes "[프버방시피]";
mes "그리고... 약속의 서비스다-!";
next;
mes "[프버방시피]";
mes "여기서 골드 등급의 손님을";
mes "위한 깜짝 선택! 서비스 4가지";
mes "중에 하나를 선택가능!";
next;
mes "[프버방시피]";
mes "첫 번째, ^FF0000STR+8, AGI+6, DEX+4,";
mes "^FF0000ATK+32, FLEE+5!";
mes "^000000두 번째, ^FF0000INT+8, DEX+6,";
mes "^FF0000VIT+4, MATK+40!^000000";
next;
mes "[프버방시피]";
mes "세 번째, ^FF0000DEX+8, AGI+6, LUK+4,";
mes "^FF0000ATK+24, MATK+24!";
mes "^000000네 번째, ^FF0000올+6 ATK+24, MATK+24!!^000000";
next;
mes "[프버방시피]";
mes "넷 중 뭘 받을래!";
next;
.@s2 = (select("첫 번째:두 번째:세 번째:네 번째"));
mes "[프버방시피]";
mes "이야아아아아아아압!";
if(.@s2 == 1) {
sc_start SC_STRFOOD,5400000,8;
sc_start SC_AGIFOOD,5400000,6;
sc_start SC_DEXFOOD,5400000,4;
sc_start SC_ATKPOTION,5400000,32;
sc_start SC_FLEEFOOD,5400000,5;
} else if(.@s2 == 2) {
sc_start SC_INTFOOD,5400000,8;
sc_start SC_DEXFOOD,5400000,6;
sc_start SC_VITFOOD,5400000,4;
sc_start SC_MATKPOTION,5400000,40;
} else if(.@s2 == 3) {
sc_start SC_DEXFOOD,5400000,8;
sc_start SC_AGIFOOD,5400000,6;
sc_start SC_LUKFOOD,5400000,4;
sc_start SC_ATKPOTION,5400000,24;
sc_start SC_MATKPOTION,5400000,24;
} else {
sc_start SC_STRFOOD,5400000,6;
sc_start SC_AGIFOOD,5400000,6;
sc_start SC_VITFOOD,5400000,6;
sc_start SC_INTFOOD,5400000,6;
sc_start SC_DEXFOOD,5400000,6;
sc_start SC_LUKFOOD,5400000,6;
sc_start SC_ATKPOTION,5400000,24;
sc_start SC_MATKPOTION,5400000,24;
}
next;
mes "[프버방시피]";
mes "힘을 불어넣어주었어. 어때?";
mes "손해봤다는 생각은 죽어도";
mes "안들지? 핫핫핫. 글쎄 남는";
mes "남는 장사도 이렇게 남는";
mes "장사가 있을 수가 없대두.";
next;
mes "[프버방시피]";
mes "자 그럼 다음에 또~";
close;
}
alberta,104,60,5 duplicate(프버방시피) 프버방시피#alb 4_M_MANAGER
aldebaran,146,116,5 duplicate(프버방시피) 프버방시피#ald 4_M_MANAGER
amatsu,102,152,5 duplicate(프버방시피) 프버방시피#ama 4_M_MANAGER
ayothaya,212,173,5 duplicate(프버방시피) 프버방시피#ayo 4_M_MANAGER
brasilis,200,224,5 duplicate(프버방시피) 프버방시피#bra 4_M_MANAGER
comodo,199,149,5 duplicate(프버방시피) 프버방시피#com 4_M_MANAGER
dewata,202,188,5 duplicate(프버방시피) 프버방시피#dew 4_M_MANAGER
dicastes01,193,191,5 duplicate(프버방시피) 프버방시피#dic 4_M_MANAGER
einbroch,235,207,5 duplicate(프버방시피) 프버방시피#ein 4_M_MANAGER
geffen,126,64,5 duplicate(프버방시피) 프버방시피#gef 4_M_MANAGER
gonryun,156,122,5 duplicate(프버방시피) 프버방시피#gon 4_M_MANAGER
hugel,80,152,5 duplicate(프버방시피) 프버방시피#hug 4_M_MANAGER
izlude,125,148,5 duplicate(프버방시피) 프버방시피#izl 4_M_MANAGER
lighthalzen,167,97,5 duplicate(프버방시피) 프버방시피#lig 4_M_MANAGER
louyang,210,107,5 duplicate(프버방시피) 프버방시피#lou 4_M_MANAGER
malangdo,178,139,5 duplicate(프버방시피) 프버방시피#mld 4_M_MANAGER
malaya,234,218,5 duplicate(프버방시피) 프버방시피#mly 4_M_MANAGER
manuk,296,147,5 duplicate(프버방시피) 프버방시피#man 4_M_MANAGER
mid_camp,201,237,5 duplicate(프버방시피) 프버방시피#mid 4_M_MANAGER
mora,113,112,5 duplicate(프버방시피) 프버방시피#mra 4_M_MANAGER
morocc,164,255,5 duplicate(프버방시피) 프버방시피#mro 4_M_MANAGER
moscovia,220,191,5 duplicate(프버방시피) 프버방시피#mos 4_M_MANAGER
niflheim,206,179,5 duplicate(프버방시피) 프버방시피#nif 4_M_MANAGER
payon,184,102,5 duplicate(프버방시피) 프버방시피#pay 4_M_MANAGER
rachel,111,143,5 duplicate(프버방시피) 프버방시피#rah 4_M_MANAGER
splendide,201,153,5 duplicate(프버방시피) 프버방시피#spl 4_M_MANAGER
umbala,93,160,5 duplicate(프버방시피) 프버방시피#umb 4_M_MANAGER
veins,210,109,5 duplicate(프버방시피) 프버방시피#vei 4_M_MANAGER
yuno,149,187,5 duplicate(프버방시피) 프버방시피#yun 4_M_MANAGER

View File

@@ -191,7 +191,7 @@ dewata,114,243,6 script Lazy Young Man#dew 536,1,1,{
mes "[Lazy Young Man]";
mes "Really? For me?? I'll give you this in return... Thanks... Hehe~";
delitem 11534,1; //Coco_Juice
getgroupitem(IG_GiftBox);
getrandgroupitem(IG_GiftBox),1;
close;
case 2:
mes "[Lazy Young Man]";

View File

@@ -1,615 +0,0 @@
//===== rAthena script =======================================
//= Instance: The Maze of Oz.
//===== Description: =========================================
//- [Walkthrough conversion]
//- Part of the episode 18.1 main quest.
//===== Changelogs: ==========================================
//= 1.0 First version. [Capuche]
//============================================================
// Main Quest: Step 28.
ra_fild10,179,176,5 script Merchant#ep18_gorge 4_EP18_MERCHANT,{
.@md_name$ = "The Maze of Oz";
if (ep18_1_main == 29) {
mes "[Miriam in disguise]";
mes "From now on <FONT SIZE = 14><B>^e5555e" + .@md_name$ + "^000000</FONT></B>";
mes "^e5555ePrepare yourself and talk to me again^000000";
cutin "ep18_merchant.png",2;
changequest 11717,11719;
ep18_1_main = 30;
close3;
}
if (ep18_1_main == 30) {
mes "[Miriam in disguise]";
mes "Then I'll start the ^e5555e" + .@md_name$ + "^000000";
next;
if (getcharid(1) == 0 || is_party_leader() == false) {
mes "[Miriam in disguise]";
mes "I think it would be a good idea to form a ^ff0000party before enter ^000000..";
close;
}
switch( select( "Open the door", "Enter", "Stop" ) ) {
case 1:
if (instance_create(.@md_name$) < 0) {
mes "Party: " + getpartyname(getcharid(1)) + "";
mes "Leader: " + strcharinfo(0) + "";
mes "^0000ff" + .@md_name$ + " ^000000- Unknown error";
close;
}
mes "[Miriam in disguise]";
mes "You'd better wait a little before you go in.";
close;
case 2:
switch( instance_enter(.@md_name$) ) {
case IE_OTHER:
mes "[Miriam in disguise]";
mes "^ff0000An unknown error occurred.^000000";
close;
case IE_NOINSTANCE:
mes "[Miriam in disguise]";
mes "^ff0000Your party leader has not yet created the dungeon.^000000";
close;
case IE_NOMEMBER:
mes "[Miriam in disguise]";
mes "^ff0000Only a member of the party can enter the Memorial Dungeon.^000000";
close;
case IE_OK:
mapannounce "ra_fild10", "" + strcharinfo(0) + " of the party, " + getpartyname( getcharid(1) ) + ", is entering " + .@md_name$ + ".",bc_map,"0x00ff99",FW_NORMAL ,12;
end;
}
case 3:
end;
}
}
cutin "ep18_merchant.png",2;
mes "[Vendor]";
mes "Someone must have been around here, but they just disappeared. Where did they go?";
close3;
OnInit:
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11717) == 1" );
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
end;
}
// Step 1
1@oz,284,164,3 script Rope#outoz 4_ROPEPILE,{
mes "I think I can climb up with a rope.";
next;
if (select( "Use a rope to climb", "Do not use" ) == 2)
end;
warp "ra_fild10",180,174;
end;
}
1@oz,282,175,3 script Miriam#ozmd1 4_EP18_MIRIAM,{
if ('event_oz != 0)
end;
'event_oz = 1;
.@miriam1$ = instance_npcname("Miriam#ozmd1");
.@maggi1$ = instance_npcname("Magi#ozmd1");
.@mark1$ = instance_npcname("Mark#ozmd1");
.@tamarin1$ = instance_npcname("Tamarin#ozmd1");
.@miriam2$ = instance_npcname("Miriam#ozmd2");
setpcblock PCBLOCK_NPC, true;
npctalk "Miriam: This is the entrance to the labyrinth of Oz.", .@miriam1$;
cutin "ep18_miriam_03.png",2;
sleep2 2000;
npctalk "Miriam: Everyone, please move carefully.", .@miriam1$;
sleep2 2000;
npctalk "Magi: Something hot and dusty...", .@maggi1$;
cutin "4job_maggi_02.PNG",2;
enablenpc .@maggi1$;
enablenpc .@mark1$;
enablenpc .@tamarin1$;
sleep2 2000;
npctalk "Mark: Are you okay?", .@mark1$;
cutin "ep18_mark_01.png",2;
sleep2 2000;
npctalk "Miriam: There is lava flowing right below it, always scattering ashes.", .@miriam1$;
cutin "ep18_miriam_03.png",2;
sleep2 2000;
npctalk "Miriam: Beware there may be embers in the lava ash.", .@miriam1$;
sleep2 2000;
npctalk "Miriam: If you inhale incorrectly, you will burn your lungs.", .@miriam1$;
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$;
sleep2 2000;
npctalk "Miriam: Please follow the road to the north first.", .@miriam1$;
sleep2 2000;
cutin "",255;
setpcblock PCBLOCK_NPC, false;
disablenpc .@maggi1$;
disablenpc .@mark1$;
disablenpc .@tamarin1$;
disablenpc .@miriam1$;
enablenpc .@miriam2$;
end;
}
1@oz,279,175,5 duplicate(dummy_npc) Magi#ozmd1 4_4JOB_MAGGI
1@oz,280,175,3 duplicate(dummy_npc) Mark#ozmd1 4_EP18_MARK
1@oz,279,177,3 duplicate(dummy_npc) Tamarin#ozmd1 4_EP18_TAMARIN
// Step 2
1@oz,271,272,3 script Miriam#ozmd2 4_EP18_MIRIAM,{
if ('event_oz != 1)
end;
'event_oz = 2;
.@miriam2$ = instance_npcname("Miriam#ozmd2");
'miriam3$ = instance_npcname("Miriam#ozmd3");
setpcblock PCBLOCK_NPC, true;
npctalk "Miriam: If you cross the bridge in front of you, it's a real maze.", .@miriam2$;
sleep2 2000;
npctalk "Miriam: We must be very careful crossing the bridge, let's talk again after.", .@miriam2$;
sleep2 2000;
setpcblock PCBLOCK_NPC, false;
disablenpc .@miriam2$;
enablenpc 'miriam3$;
end;
OnInstanceInit:
'miriam3_id = 0;
'event_oz = 0;
'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;
}
// Step 3
1@oz,241,272,3 script Miriam#ozmd3 EP18_NPC_MIRIAM,{
if ('event_oz != 2)
end;
'event_oz = 3;
'miriam3$ = instance_npcname("Miriam#ozmd3");
.@maggi3$ = instance_npcname("Magi#ozmd3");
.@mark3$ = instance_npcname("Mark#ozmd3");
.@tamarin3$ = instance_npcname("Tamarin#ozmd3");
setpcblock PCBLOCK_NPC, true;
npctalk "Miriam: This bridge is dangerous, so it's best to split your luggage and cross in turn.", 'miriam3$;
sleep2 2000;
npctalk "Miriam: Then I will cross first, so please follow slowly. It will help not to look under your feet.", 'miriam3$;
sleep2 2000;
npctalk "Tamarin: Wow I can't see the bottom.", .@tamarin3$;
enablenpc .@maggi3$;
enablenpc .@mark3$;
enablenpc .@tamarin3$;
sleep2 2000;
npctalk "Magi: Your legs look very old...", .@maggi3$;
sleep2 2000;
npctalk "Mark: Everyone be careful", .@mark3$;
sleep2 2000;
setpcblock PCBLOCK_NPC, false;
disablenpc .@maggi3$;
disablenpc .@mark3$;
disablenpc .@tamarin3$;
'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
end;
OnEvent1:
unitwalk 'miriam3_id,211,272, 'miriam3$ + "::OnEvent2";
end;
OnEvent2:
unitwalk 'miriam3_id,191,272, 'miriam3$ + "::OnEvent3";
end;
OnEvent3:
unitwalk 'miriam3_id,171,272, 'miriam3$ + "::OnEvent4";
end;
OnEvent4:
unitwalk 'miriam3_id,157,272, 'miriam3$ + "::OnEvent5";
end;
OnEvent5:
disablenpc 'miriam3$;
enablenpc instance_npcname("Miriam#ozmd4");
enablenpc instance_npcname("Ash Toad#ozmd1");
end;
}
1@oz,245,272,3 duplicate(dummy_npc) Magi#ozmd3 4_4JOB_MAGGI
1@oz,244,273,3 duplicate(dummy_npc) Mark#ozmd3 4_EP18_MARK
1@oz,244,270,3 duplicate(dummy_npc) Tamarin#ozmd3 4_EP18_TAMARIN
// Step 4 + 5
1@oz,157,272,3 script Miriam#ozmd4 4_EP18_MIRIAM,{
if ('event_oz != 3)
end;
'event_oz = 4;
.@miriam4$ = instance_npcname("Miriam#ozmd4");
.@tamarin4$ = instance_npcname("Tamarin#ozmd4");
.@ashtoad2$ = instance_npcname("Ash Toad#ozmd2");
.@maggi4$ = instance_npcname("Magi#ozmd4");
.@mark4$ = instance_npcname("Mark#ozmd4");
.@ashtoad3$ = instance_npcname("Ash Toad#ozmd3");
setpcblock PCBLOCK_NPC, true;
mapannounce 'map_name$, "Miriam: Ah!! A monster!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
sleep2 1500;
mapannounce 'map_name$, "Miriam: I'll take this rude bastard.", bc_map, 0x00B7EE,FW_NORMAL,16;
sleep2 1500;
mapannounce 'map_name$, "Tamarin: Appeared in the back!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
sleep2 2000;
enablenpc .@tamarin4$;
sleep2 500;
enablenpc .@ashtoad2$;
mapannounce 'map_name$, "Magi: Crazy!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
sleep2 500;
enablenpc .@maggi4$;
enablenpc .@mark4$;
mapannounce 'map_name$, "Mark: Please support me in the front!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
sleep2 1000;
'mob_count_oz = 0;
monster 'map_name$,145,274,"Ash Toad",21295,1, .@miriam4$ + "::OnMobDead"; // EP18_ASH_TOAD
enablenpc .@ashtoad3$;
monster 'map_name$,143,278,"Ash Toad",21295,1, .@miriam4$ + "::OnMobDead"; // EP18_ASH_TOAD
setpcblock PCBLOCK_NPC, false;
end;
// Note: on official the event seems to start right after killing the 2 mobs. The character can't move.
// There is no OnTouch area, a character outside the npc range can't see the dialog. Intended ?
OnMobDead:
'mob_count_oz++;
if ('mob_count_oz < 2)
end;
if ('event_oz != 4)
end;
'event_oz = 5;
.@tamarin4$ = instance_npcname("Tamarin#ozmd4");
.@ashtoad2$ = instance_npcname("Ash Toad#ozmd2");
.@maggi4$ = instance_npcname("Magi#ozmd4");
.@mark4$ = instance_npcname("Mark#ozmd4");
.@ashtoad3$ = instance_npcname("Ash Toad#ozmd3");
.@maram4$ = instance_npcname("Maram#ozmd4");
.@ashtoad1$ = instance_npcname("Ash Toad#ozmd1");
.@tamarin4$ = instance_npcname("Tamarin#ozmd4");
.@miriam4$ = instance_npcname("Miriam#ozmd4");
setpcblock PCBLOCK_NPC, true;
npctalk "Tamarin: I did it!!!", .@tamarin4$;
disablenpc .@ashtoad2$;
sleep2 2000;
npctalk "Magi: Me too!!", .@maggi4$;
disablenpc .@ashtoad3$;
sleep2 2000;
npctalk "Miriam: Huh It wasn't a great monster, but it would have been dangerous if they were ordinary merchants.", .@miriam4$;
disablenpc .@ashtoad1$;
sleep2 2000;
npctalk "Maram : " + strcharinfo(0) + " Are you okay?", .@maram4$;
enablenpc .@maram4$;
sleep2 2000;
npctalk "Miriam: You're late! Maram!!!", .@miriam4$;
sleep2 2000;
npctalk "Maram: I met a monster on the way, so I'm a little late.", .@maram4$;
sleep2 2000;
npctalk "Miriam: There were no monsters on the road we passed earlier.", .@miriam4$;
sleep2 2000;
npctalk "Maram: Yeah? Where the hell do monsters spring up like this...", .@maram4$;
sleep2 2000;
npctalk "Maram: It's a big deal because it's getting harder and harder to move goods because of these monsters.", .@maram4$;
sleep2 2000;
npctalk "Tamarin: If you go to the ground?", .@tamarin4$;
sleep2 2000;
npctalk "Tamarin: I heard there used to be a bridge to cross a canyon?", .@tamarin4$;
sleep2 2000;
npctalk "Tamarin: Because there are still remains...", .@tamarin4$;
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$;
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$;
sleep2 2000;
npctalk "Maram: It's not difficult to make a bridge again...", .@maram4$;
sleep2 2000;
npctalk "Maram: You can't advertise that you're hiding here by making a bridge because you're in hiding.", .@maram4$;
sleep2 2000;
npctalk "Maram: It's dangerous and inconvenient right now, but I have no choice but to use the maze of Oz.", .@maram4$;
sleep2 2000;
npctalk "Maram: In this state, it may not have been noticed until now.", .@maram4$;
sleep2 2000;
npctalk "Miriam: Without the Maze of Oz...", .@miriam4$;
sleep2 2000;
npctalk "Miriam: It must have been a lot harder than it is now.", .@miriam4$;
sleep2 2000;
npctalk "Maram: That's right", .@maram4$;
sleep2 2000;
npctalk "Maram: Now, shall we walk the lovely maze of Oz again?", .@maram4$;
sleep2 2000;
npctalk "Miriam: What do you mean", .@miriam4$;
sleep2 2000;
npctalk "Miriam : " + strcharinfo(0) + " From now on, go all the way down until you come to a fork.", .@miriam4$;
sleep2 2000;
npctalk "Miriam: It would be nice if the monsters didn't appear...", .@miriam4$;
sleep2 1000;
disablenpc .@maram4$;
setpcblock PCBLOCK_NPC, false;
disablenpc .@maggi4$;
disablenpc .@mark4$;
disablenpc .@tamarin4$;
disablenpc .@miriam4$;
enablenpc instance_npcname("Maram#ozmd5");
end;
}
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,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,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,162,275,3 duplicate(dummy_npc) Maram#ozmd4 4_EP18_MARAM
// Step 6
1@oz,98,172,3 script Maram#ozmd5 EP18_NPC_MARAM,{
if ('event_oz != 5)
end;
'event_oz = 6;
.@miriam$ = instance_npcname("Miriam#ozmd5");
.@maram$ = instance_npcname("Maram#ozmd5");
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;
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... ";
sleep2 2000;
npctalk "Maram: How long will the maze of Oz last...";
sleep2 3000;
mapannounce 'map_name$, "??? : ugh!!!!!!!!!!!!!!!!!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
sleep2 2000;
npctalk "Maram: This voice?!?!?!?!?";
sleep2 2000;
npctalk "Miriam: Imril!!!!", .@miriam$;
sleep2 2000;
setpcblock PCBLOCK_NPC, false;
npctalk "Maram: I think your friend is in trouble! I'll go first, so please follow me carefully!";
disablenpc instance_npcname("Magi#ozmd5");
disablenpc instance_npcname("Mark#ozmd5");
disablenpc instance_npcname("Tamarin#ozmd5");
unitwalk getnpcid(0),68,165, .@maram$ + "::OnMove";
donpcevent .@miriam$ + "::OnMove";
end;
OnMove:
disablenpc instance_npcname("Maram#ozmd5");
enablenpc instance_npcname("Maram#ozmd7");
enablenpc instance_npcname("Imril#ozmd6");
end;
}
1@oz,97,167,3 script Miriam#ozmd5 EP18_NPC_MIRIAM,{
end;
OnMove:
npcwalkto 67,164;
end;
}
1@oz,92,170,3 duplicate(dummy_npc) Magi#ozmd5 4_4JOB_MAGGI
1@oz,91,169,3 duplicate(dummy_npc) Mark#ozmd5 4_EP18_MARK
1@oz,89,170,5 duplicate(dummy_npc) Tamarin#ozmd5 4_EP18_TAMARIN
// Step 7
1@oz,68,165,3 script Maram#ozmd7 4_EP18_MARAM,{
if ('event_oz != 6)
end;
'event_oz = 7;
npctalk "Maram: Are you okay, Imril?";
donpcevent instance_npcname("Imril#ozmd6") + "::OnStart";
disablenpc instance_npcname("Maram#ozmd7");
end;
}
// Step 8
1@oz,61,163,5 script Imril#ozmd6 4_EP18_IMRIL,{
end;
OnStart:
'mob_count_oz = 0;
.@npc_name$ = instance_npcname("Imril#ozmd6");
monster 'map_name$,64,164,"Ash Toad",21295,1, .@npc_name$ + "::OnMobDead"; // EP18_ASH_TOAD
monster 'map_name$,62,161,"rake hand",21296,1, .@npc_name$ + "::OnMobDead"; // EP18_RAKEHAND
end;
OnMobDead:
'mob_count_oz++;
if ('mob_count_oz < 2)
end;
if ('event_oz != 7)
end;
'event_oz = 8;
.@maram8$ = instance_npcname("Maram#ozmd8");
.@imril6$ = instance_npcname("Imril#ozmd6");
.@miriam5$ = instance_npcname("Miriam#ozmd5");
.@maggi6$ = instance_npcname("Magi#ozmd6");
.@mark6$ = instance_npcname("Mark#ozmd6");
.@tamarin6$ = instance_npcname("Tamarin#ozmd6");
setpcblock PCBLOCK_NPC, true;
enablenpc .@maram8$;
npctalk "Imril: Thanks! We almost died!", .@imril6$;
sleep2 2000;
npctalk "Imril: Don't go downstairs because the atmosphere isn't too bad.", .@imril6$;
sleep2 2000;
npctalk "Miriam: You seem to see monsters more often than last time.", .@miriam5$;
sleep2 2000;
npctalk "Imril: But what about those people?", .@imril6$;
enablenpc .@maggi6$;
enablenpc .@mark6$;
enablenpc .@tamarin6$;
sleep2 2000;
npctalk "Maram: They are adventurers who sometimes help with mother's work.", .@maram8$;
sleep2 2000;
npctalk "Maram: Trustworthy people, don't be so wary.", .@maram8$;
sleep2 2000;
npctalk "Imril: Because you trust people too easily.", .@imril6$;
sleep2 2000;
npctalk "Miriam: Yes.", .@miriam5$;
sleep2 2000;
npctalk "Maram: Anyway, let's escape before more monsters come out.", .@maram8$;
sleep2 2000;
npctalk "Maram: Not long left.", .@maram8$;
sleep2 2000;
npctalk "Maram: It's hard to see, but just follow the road up here!", .@maram8$;
sleep2 2000;
npctalk "Tamarin: I think this is the way!", .@tamarin6$;
disablenpc .@maggi6$;
disablenpc .@mark6$;
disablenpc .@tamarin6$;
disablenpc .@maram8$;
enablenpc instance_npcname("#oz_way");
setpcblock PCBLOCK_NPC, false;
end;
}
1@oz,68,165,3 duplicate(dummy_npc) Maram#ozmd8 4_EP18_MARAM
1@oz,61,168,3 duplicate(dummy_npc) Magi#ozmd6 4_4JOB_MAGGI
1@oz,65,167,3 duplicate(dummy_npc) Mark#ozmd6 4_EP18_MARK
1@oz,59,171,3 duplicate(dummy_npc) Tamarin#ozmd6 4_EP18_TAMARIN
// Step 9
1@oz,58,256,5 script #oz_way 1_SHADOW_NPC,3,3,{
end;
OnTouch:
if ('event_oz != 8)
end;
'event_oz = 9;
enablenpc instance_npcname("Maram#ozmd6");
end;
}
// Step 10 (maybe not required ?)
1@oz,44,255,5 script Maram#ozmd6 4_EP18_MARAM,{
if ('event_oz != 9)
end;
'event_oz = 10;
npctalk "Maram: This way!!!";
initnpctimer;
end;
OnTimer2000:
disablenpc instance_npcname("Maram#ozmd6");
enablenpc instance_npcname("Maram#ozmd9");
enablenpc instance_npcname("Rope#outoz2");
end;
}
// Step 11
// (Step 29 on the main quest).
1@oz,21,189,5 script Maram#ozmd9 4_EP18_MARAM,{
if ('event_oz != 10)
end;
'event_oz = 11;
.@maram9$ = instance_npcname("Maram#ozmd9");
.@miriam7$ = instance_npcname("Miriam#ozmd7");
.@imril7$ = instance_npcname("Imril#ozmd7");
setpcblock PCBLOCK_NPC, true;
npctalk "Maram: Climb up the rope in front of this to get out.", .@maram9$;
enablenpc .@miriam7$;
enablenpc .@imril7$;
sleep2 2000;
npctalk "Imril: I'll go get some hidden stuff here, so go up first.", .@imril7$;
sleep2 2000;
npctalk "Miriam: Everyone is very tired. Let's go upstairs.", .@miriam7$;
if (ep18_1_main == 30) {
changequest 11719,11720;
ep18_1_main = 31;
}
disablenpc .@miriam7$;
disablenpc .@imril7$;
setpcblock PCBLOCK_NPC, false;
end;
OnInstanceInit:
disablenpc instance_npcname("Maram#ozmd9");
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
end;
}
1@oz,22,187,5 duplicate(dummy_npc) Miriam#ozmd7 4_EP18_MIRIAM
1@oz,16,185,3 duplicate(dummy_npc) Imril#ozmd7 4_EP18_IMRIL
// Step 12
1@oz,28,190,3 script(DISABLED) Rope#outoz2 4_ROPEPILE,{
if ('event_oz < 11)
end;
mes "I think I can climb up with a rope.";
next;
switch( select( "Use a rope to climb", "Do not use" ) ) {
case 1:
close2;
warp "gw_fild01",275,337;
end;
case 2:
end;
}
end;
OnInstanceInit:
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11720) == 1" );
end;
}
// Spawn monsters
1@oz,22,207,5 script #oz01 1_SHADOW_NPC,4,4,{
end;
OnTouch_:
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,"Rake Hand",21296,1; // EP18_RAKEHAND
disablenpc instance_npcname( strnpcinfo(0) );
end;
}
1@oz,30,237,5 duplicate(#oz01) #oz02 1_SHADOW_NPC,4,4
1@oz,44,264,5 duplicate(#oz01) #oz03 1_SHADOW_NPC,4,4
1@oz,62,247,5 duplicate(#oz01) #oz04 1_SHADOW_NPC,4,4
1@oz,72,222,5 duplicate(#oz01) #oz05 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,139,279,5 duplicate(#oz01) #oz08 1_SHADOW_NPC,4,4

View File

@@ -1,462 +0,0 @@
//===== rAthena Script =======================================
//= Instance: Thor Gunsu Base.
//===== Description: =========================================
//- [Walkthrough conversion]
//- Part of the episode 18.1 main quest.
//===== Changelogs: ==========================================
//= 1.0 First version. [Capuche]
//============================================================
// Main Quest: Step 47.
que_thr,133,53,5 script Maram#Armybase1 4_EP18_MARAM,{
if (ep18_1_main != 45 && ep18_1_main != 46)
end;
if (ep18_1_main == 45) {
cutin "ep18_maram_01.png",2;
mes "[Maram]";
mes "You have arrived, adventurer!";
mes "You did a great job getting here.";
next;
cutin "ep18_maram_03.png",2;
mes "[Maram]";
mes "After all, it looks like this next one is real. The guards are different from before...";
mes "Let's look inside, being careful not to be caught by the guards.";
next;
cutin "ep18_maram_01.png",2;
mes "[Maram]";
mes "Make sure to move out of sight of the guards 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.";
changequest 16577,16578;
ep18_1_main = 46;
next;
}
else if (ep18_1_main == 46) {
mes "[Maram]";
mes "Let's try to get in as far as possible from the guard tower.";
next;
}
.@md_name$ = "Thor Gunsu Base";
cutin "",255;
mes "^FF0000 Any arbitrary processing such as taming monsters in the dungeon is not considered normal. Please note.^000000";
next;
// player has party
if (is_party_leader()) {
// player is leader of the party
.@create$ = "Open " + .@md_name$;
}
switch( select( .@create$, .@md_name$ + " entry" ) ) {
case 1:
cutin "ep18_maram_01.png",2;
mes "[Maram]";
mes "When the application is complete, talk to me again and select ^0000CD Thor military base entry^000000";
if (instance_create(.@md_name$) < 0) {
mes "Party: " + getpartyname(getcharid(1)) + "";
mes "Leader: " + strcharinfo(0) + "";
mes "^0000ff" + .@md_name$ + " ^000000- Unknown error";
close3;
}
close3;
case 2:
// Note: instance not forced solo
switch( instance_enter(.@md_name$) ) {
case IE_OTHER:
mes "[Maram]";
mes "^ff0000An unknown error occurred.^000000";
close;
case IE_NOINSTANCE:
cutin "ep18_maram_01.png",2;
mes "[Maram]";
mes "I don't think the dungeon has been created yet? Please check later.";
close3;
case IE_NOMEMBER:
mes "[Maram]";
mes "^ff0000Only a member of the party can enter the Memorial Dungeon.^000000";
close;
case IE_OK:
mapannounce "que_thr", "" + strcharinfo(0) + " of the party, " + getpartyname( getcharid(1) ) + ", is entering " + .@md_name$ + ".",bc_map,"0x00ff99",FW_NORMAL,12;
// warp 1@tcamp,103,237;
end;
}
}
end;
OnInit:
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(16577) == 1" );
end;
}
1@tcamp,106,237,3 script Maram#base1 4_EP18_MARAM,{
cutin "ep18_maram_01.png",2;
mes "[Maram]";
mes "Be careful and explore the 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.";
next;
mes "[Maram]";
mes "If you get caught by the Watch Tower, soldiers will appear, so be careful not to get caught.";
mes "Well, if you find something, please contact me!";
close3;
OnInstanceInit:
'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$,135,145,144,145,cell_walkable,0;
setcell 'map_tcamp$,223,105,223,110,cell_walkable,0;
setcell 'map_tcamp$,80,94,80,100,cell_walkable,0;
// some monsters spawn randomly
monster 'map_tcamp$,0,0,"Base Soldier",21310,18; // EP18_MD_GUARD_A
monster 'map_tcamp$,0,0,"Base Soldier",21309,18; // EP18_MD_THOR_GUARD
end;
}
// unknown npc effect
// 1@tcamp,244,152,3 duplicate(dummy_npc) #Remote 1 CLEAR_NPC
//-------------------------------------------------------------------
// Traps
//-------------------------------------------------------------------
1@tcamp,120,228,3 script Watch Tower#Watch1 4_SYSTEM_BOX,7,7,{
end;
OnTouch: // note: hidden player trigger the event
npctalk "Detect intruders. Exclude them.";
mapannounce 'map_tcamp$, "Intruder detected, intruder detected. We rule out immediately.", bc_map, 0xFF0000;
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",21310,3; // EP18_MD_GUARD_A
end;
OnTimer2000:
specialeffect EF_WARP;
initnpctimer;
end;
OnInstanceInit:
initnpctimer;
end;
}
1@tcamp,135,228,3 duplicate(Watch Tower#Watch1) Watch Tower#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,167,133,3 duplicate(Watch Tower#Watch1) Watch Tower#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,161,96,3 duplicate(Watch Tower#Watch1) Watch Tower#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,116,102,3 duplicate(Watch Tower#Watch1) Watch Tower#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,240,148,3 duplicate(Watch Tower#Watch1) Watch Tower#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,176,194,3 duplicate(Watch Tower#Watch1) Watch Tower#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,142,153,3 duplicate(Watch Tower#Watch1) Watch Tower#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,192,179,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch16 4_SYSTEM_BOX,7,7
1@tcamp,237,90,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch17 4_SYSTEM_BOX,7,7
//-------------------------------------------------------------------
// Walls
//-------------------------------------------------------------------
1@tcamp,138,216,3 script Lock#1-1 4_ROPEPILE,{
.@maram$ = instance_npcname("Maram#Lock1");
enablenpc .@maram$;
npctalk "Maram: Wait a minute. I know how to open it.", .@maram$;
progressbar_npc "3131FF",10;
npctalk "Maram: Now we can pass!", .@maram$;
disablenpc instance_npcname("Lock#1-1");
disablenpc instance_npcname("Lock#1-2");
disablenpc .@maram$;
setcell 'map_tcamp$,137,216,142,216,cell_walkable,1;
end;
}
1@tcamp,141,216,3 duplicate(Lock#1-1) Lock#1-2 4_ROPEPILE
1@tcamp,140,218,3 duplicate(dummy_npc) Maram#Lock1 4_EP18_MARAM
1@tcamp,136,145,3 script Lock#2-1 4_ROPEPILE,{
.@maram$ = instance_npcname("Maram#Lock2");
enablenpc .@maram$;
progressbar_npc "3131FF",10;
npctalk "It would be better to proceed with caution.", .@maram$;
disablenpc instance_npcname("Lock#2-1");
disablenpc instance_npcname("Lock#2-2");
disablenpc instance_npcname("Lock#2-3");
disablenpc instance_npcname("Lock#2-4");
disablenpc .@maram$;
setcell 'map_tcamp$,135,145,144,145,cell_walkable,1;
end;
}
1@tcamp,138,145,3 duplicate(Lock#2-1) Lock#2-2 4_ROPEPILE
1@tcamp,141,145,3 duplicate(Lock#2-1) Lock#2-3 4_ROPEPILE
1@tcamp,143,145,3 duplicate(Lock#2-1) Lock#2-4 4_ROPEPILE
1@tcamp,142,147,3 duplicate(dummy_npc) Maram#Lock2 4_EP18_MARAM
1@tcamp,223,109,3 script Lock#3-1 4_ROPEPILE,{
.@maram$ = instance_npcname("Maram#Lock3");
enablenpc .@maram$;
npctalk "Maram: This building looks pretty suspicious, right? There must be a surveillance system in it as well.", .@maram$;
progressbar_npc "3131FF",10;
npctalk "Maram: Let's explore carefully, being careful not to get caught this time.", .@maram$;
disablenpc instance_npcname("Lock#3-1");
disablenpc instance_npcname("Lock#3-2");
disablenpc .@maram$;
setcell 'map_tcamp$,223,105,223,110,cell_walkable,1;
end;
}
1@tcamp,223,106,3 duplicate(Lock#3-1) Lock#3-2 4_ROPEPILE
1@tcamp,226,114,3 duplicate(dummy_npc) Maram#Lock3 4_EP18_MARAM
1@tcamp,80,99,3 script Lock#4-1 4_ROPEPILE,{
.@maram$ = instance_npcname("Maram#Lock4");
enablenpc .@maram$;
npctalk "Maram: I think you've gotten pretty deep. You should be able to find what you need safely.", .@maram$;
progressbar_npc "3131FF",10;
npctalk "Maram: Shall we wish you luck?", .@maram$;
disablenpc instance_npcname("Lock#4-1");
disablenpc instance_npcname("Lock#4-2");
disablenpc instance_npcname("Lock#4-3");
disablenpc .@maram$;
setcell 'map_tcamp$,80,94,80,100,cell_walkable,1;
enablenpc instance_npcname("Document Pile#Site1");
enablenpc instance_npcname("Document Pile#Site2");
enablenpc instance_npcname("Document Pile#Site3");
enablenpc instance_npcname("Document Pile#Site4");
enablenpc instance_npcname("Document Pile#Site5");
enablenpc instance_npcname("Miriam#base1");
enablenpc instance_npcname("Maram#base5");
end;
}
1@tcamp,80,97,3 duplicate(Lock#4-1) Lock#4-2 4_ROPEPILE
1@tcamp,80,95,3 duplicate(Lock#4-1) Lock#4-3 4_ROPEPILE
1@tcamp,82,100,3 duplicate(dummy_npc) Maram#Lock4 4_EP18_MARAM
//-------------------------------------------------------------------
// Final
//-------------------------------------------------------------------
1@tcamp,32,100,3 script Document Pile#Site1 4_EP18_PAPERS,{
mes "[Pile of Papers]";
mes "All the papers are jumbled up.";
mes "I took out a few sheets from the middle These are the expiry date of the weapon and the sales statement.";
next;
mes "[Pile of Papers]";
mes "Even the date is very recent. There is a record of handing over a large number of weapons to Mr. Dandelion.";
mes "I think I found what I was looking for. I put the documents in my pocket.";
close2;
getitem 1000409,1; // Ep18_Docu_File
cloakonnpcself( instance_npcname("Document Pile#Site1") );
end;
}
1@tcamp,49,123,3 script Document Pile#Site2 4_EP18_PAPERS,{
mes "[Pile of Papers]";
mes "All the papers are jumbled up.";
mes "At the top of the page the final menu for luncheon dinner?";
next;
mes "[Pile of Papers]";
mes "It seems that the menu is fried fish with sauce.";
mes "You seem to have left unimportant documents. Let's take care of them first.";
close2;
getitem 1000409,1; // Ep18_Docu_File
cloakonnpcself( instance_npcname("Document Pile#Site2") );
end;
}
1@tcamp,29,86,3 script Document Pile#Site3 4_EP18_PAPERS,{
mes "[Pile of Papers]";
mes "All the papers are jumbled up.";
mes "I took one out of the middle The layout of the military base guards?";
next;
mes "[Pile of Papers]";
mes "Looking at the date, it was a long time ago.";
mes "You seem to have left unimportant documents. Let's take care of them first.";
close2;
getitem 1000409,1; // Ep18_Docu_File
cloakonnpcself( instance_npcname("Document Pile#Site3") );
end;
}
1@tcamp,60,122,3 script Document Pile#Site4 4_EP18_PAPERS,{
mes "[Pile of Papers]";
mes "All the papers are jumbled up.";
mes "The top one... 'If you feed the magmaring potatoes and hunt them after a while, will they drop the baked potatoes?'";
next;
mes "[Pile of Papers]";
mes "why is this here. But I'm curious about the result!";
mes "You seem to have left unimportant documents. Let's take care of them first.";
close2;
getitem 1000409,1; // Ep18_Docu_File
cloakonnpcself( instance_npcname("Document Pile#Site4") );
end;
}
1@tcamp,31,84,3 script Document Pile#Site5 4_EP18_PAPERS,{
mes "[Pile of Papers]";
mes "All the papers are jumbled up.";
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.";
next;
mes "[Pile of Papers]";
mes "What kind of picture is it? Besides, you drew it very well.";
mes "You seem to have left unimportant documents. Let's take care of them first.";
close2;
getitem 1000409,1; // Ep18_Docu_File
cloakonnpcself( instance_npcname("Document Pile#Site5") );
end;
}
1@tcamp,34,100,3 script Miriam#base1 4_EP18_MIRIAM,3,3,{
disable_items;
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 sorts of connections to find the position.";
mes "It seems that Adventurer and Maram found it at once.";
next;
mes "[Miriam]";
mes "Read some of the documents here. We have what we were looking for.";
mes "I think it would be better to come and see it firsthand than to explain everything.";
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;
}
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;
OnTouch:
npctalk "Miriam: Oh, adventurer? Maram you too!?";
end;
OnInstanceInit:
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(16578) == 1 && countitem(1000409) > 4" ); // Ep18_Docu_File
disablenpc instance_npcname("Miriam#base1");
end;
}
1@tcamp,32,102,3 script Maram#base5 4_EP18_MARAM,{
if (isbegin_quest(16579) == 0) {
cutin "ep18_maram_01.png",2;
mes "[Maram]";
mes "I didn't know Miriam was here, right, adventurer?";
close3;
}
cutin "ep18_maram_02.png",2;
mes "[Maram]";
mes "We moved separately, but in the end we are in the same position.";
mes "Still, what I got in the process was different, so I guess it has its own meaning.";
next;
cutin "ep18_miriam_02.png",2;
mes "[Miriam]";
mes "Then I must be away for a while.";
mes "I'm going to pass on my findings to my stepfather.";
next;
mes "[Miriam]";
mes "Because there is a possibility that the adoptive father may not know yet if it is a single corruption.";
next;
cutin "ep18_maram_03.png",2;
mes "[Maram]";
mes "Is it really an independent corruption? That's probably what bothers me.";
mes "I have something to give to Rachel, Miriam, let's go together.";
next;
cutin "ep18_maram_01.png",2;
mes "[Maram]";
mes "I'll give you a shortcut, so can you please tell Suad what you found out here?";
mes "We will follow soon, so please go ahead and tell me.";
if (ep18_1_main == 46) {
ep18_1_main = 47;
erasequest 16579;
setquest 16580;
getitem "Ep18_Amethyst_Fragment",50;
}
close2;
warp "wolfvill",162,154;
end;
OnInstanceInit:
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(16579) == 1" );
disablenpc instance_npcname("Maram#base5");
end;
}

View File

@@ -1,959 +0,0 @@
//===== rAthena Script =======================================
//= Instance Villa of Deception.
//===== Description: =========================================
//- [Walkthrough conversion]
//- Require to complete the episode 18.1 main quest.
//- The function to drop an item with random option is defined in re/other/glocal_npc2.txt
// Notes:
// Some of the setting can be modified in 'Optional settings'.
// The monster inside the hard mode are using relieve level 10 (-99% damages).
// Change it if you think the player damage are too low, this level is a workaround but the damages
// on the mobs are lower in hard mode than in normal on official. The level is 9 on official.
//===== Changelogs: ==========================================
//= 1.0 First version. [Capuche]
//============================================================
wolfvill,79,260,0 script #con_wp11 HIDDEN_WARP_NPC,4,4,{
end;
OnTouch:
if (ep18_1_main < 57)
end;
cloakoffnpcself( "Aira#con" );
end;
}
wolfvill,79,260,4 script(CLOAKED) Aira#con 4_M_BRZ_JACI,{
if (ep18_1_main < 57)
end;
switch( checkquest(12522,PLAYTIME) ) {
case -1:
break;
case 0:
case 1:
mes "[Aira]";
mes "Please wait the end of the quest delay.";
close;
case 2:
erasequest 12522;
mes "^0000ff All the aftereffects of access are gone.^000000";
close;
}
mes "[Aira]";
mes "" + strcharinfo(0) + "Thanks to Mr. I arrived safely in the village.";
mes "But it seems that something has been revived in the villa. I think I need to get help one more time.";
next;
.@md_name_normal$ = "Villa of Deception";
.@md_name_hard$ = "Villa of Deception Advanced";
if (is_party_leader() == true) {
.@create_normal$ = "^000044Create " + .@md_name_normal$ + "^000000";
if (countitem(1000471) > 0)
.@create_hard$ = "^000044Create " + .@md_name_hard$ + "^000000";
}
switch( select( "Entry", .@create_normal$, .@create_hard$ ) ) {
case 1:
if (select( .@md_name_normal$, .@md_name_hard$ ) == 1) {
if (BaseLevel < 170) {
mes "[Aira]";
mes "You must be at least BaseLevel 170 to enter.";
close;
}
.@enter_to$ = .@md_name_normal$;
}
else {
if (BaseLevel < 200) {
mes "[Aira]";
mes "You must be at least BaseLevel 200 to enter.";
close;
}
.@enter_to$ = .@md_name_hard$;
}
switch( instance_enter(.@enter_to$) ) {
case IE_OTHER:
mes "^ff0000An unknown error occurred.^000000";
close;
case IE_NOINSTANCE:
mes "^0000ff The dungeon has not been created or you are trying to enter a dungeon different from the party leader.^000000";
close;
case IE_NOMEMBER:
mes "^ff0000Only a member of the party can enter the Memorial Dungeon.^000000";
close;
case IE_OK:
mapannounce "wolfvill", "" + strcharinfo(0) + " of the party, " + getpartyname( getcharid(1) ) + ", is entering " + .@enter_to$ + ".",bc_map,"0x00ff99",FW_NORMAL,12;
if (.@enter_to$ == .@md_name_normal$)
setquest 12520;
else
setquest 12521;
setquest 12522;
// warp "1@advs",111,19;
end;
}
end;
case 2:
if (BaseLevel < 170) {
mes "[Aira]";
mes "You must be at least BaseLevel 170 to create the instance.";
close;
}
if (instance_create(.@md_name_normal$) < 0) {
mes "Party: " + getpartyname(getcharid(1)) + "";
mes "Leader: " + strcharinfo(0) + "";
mes "^0000ff" + .@md_name_normal$ + " ^000000- Unknown error";
close;
}
end;
case 3:
if (BaseLevel < 200) {
mes "[Aira]";
mes "You must be at least BaseLevel 200 to create the instance.";
close;
}
if (countitem(1000471) < 1) {
mes "[Aira]";
mes "Where is the " + getitemname(1000471) + "?";
close;
}
if (instance_create(.@md_name_hard$) < 0) {
mes "Party: " + getpartyname(getcharid(1)) + "";
mes "Leader: " + strcharinfo(0) + "";
mes "^0000ff" + .@md_name_hard$ + " ^000000- Unknown error";
close;
}
delitem 1000471,1;
end;
}
end;
}
1@advs,1,1,0 script advs_init -1,{
end;
OnInstanceInit:
//--------------------------------------------
// variables initialization
//--------------------------------------------
'advs_step = 0;
'map_advs$ = instance_mapname("1@advs");
// variables step 1
'sw_timer = 0;
deletearray 'sw[0], 2;
// variables step 3
deletearray 'x_reaper[0], 'size_reaper;
deletearray 'y_reaper[0], 'size_reaper;
'size_reaper = 0;
//--------------------------------------------
// Optional settings
//--------------------------------------------
// Number minimum of reaper spawn on step 3
'min_reaper = 3;
// Setting according to the mode
if (instance_live_info(ILI_NAME) == "Villa of Deception Advanced") {
'advs_difficult = 1;
'sanare_id = 21377; // EP18_MD_SANARE_L
'hunter_id = 21378; // EP18_MD_HEARTHUNTER_L
'monster_relieve = 10; // need check but the damages are very low compared to normal mode
// Total of monster to kill in step 1, 2, 3
'total_monster_step_1 = 80;
'total_monster_step_2 = 70;
'total_monster_step_3 = 80;
// Number of monster spawn at the start of step 1, 2, 3
'init_monster_step_1 = 40;
'init_monster_step_2 = 30;
'init_monster_step_3 = 40;
'schulang_id = 21360; // EP18_MD_SCHULANG_L
'freyja_id = 21361; // EP18_MD_DEMI_FREYJA_L
// Don't touch this unless you know what you're doing
.@interval = 5; // distance between each reaper
.@max_reaper = 48; // number max of reaper spawn
}
else {
'advs_difficult = 0;
'sanare_id = 21318; // EP18_MD_SANARE_R
'hunter_id = 21319; // EP18_MD_HEARTHUNTER_R2
'monster_relieve = 9;
// Total of monster to kill in step 1, 2, 3
'total_monster_step_1 = 35;
'total_monster_step_2 = 35;
'total_monster_step_3 = 35;
// Number of monster spawn at the start of step 1, 2, 3
'init_monster_step_1 = 35;
'init_monster_step_2 = 25;
'init_monster_step_3 = 24;
'schulang_id = 21316; // EP18_MD_SCHULANG_R
'freyja_id = 21317; // EP18_MD_DEMI_FREYJA_R
// Don't touch this unless you know what you're doing
.@interval = 10;
.@max_reaper = 16;
}
for ( .@i = 109; .@i <= 139; .@i += .@interval ) {
for ( .@j = 219; .@j <= 249; .@j += .@interval ) {
if (.@i == 124 && .@j == 234)
continue;
'x_reaper[ 'size_reaper ] = .@i;
'y_reaper[ 'size_reaper ] = .@j;
'size_reaper++;
}
}
'total_reaper = min(.@max_reaper, 'size_reaper);
// number total of food necessary to reduce the number of reaper to 'min_reaper
'max_food = ('total_reaper * 2) - ('min_reaper * 2);
// debug
'total_monster_step_1 = max('init_monster_step_1, 'total_monster_step_1);
'total_monster_step_2 = max('init_monster_step_2, 'total_monster_step_2);
'total_monster_step_3 = max('init_monster_step_3, 'total_monster_step_3);
//--------------------------------------------
// npcs management
//--------------------------------------------
disablenpc instance_npcname("#boss2");
disablenpc instance_npcname("#box_admin");
// warps
disablenpc instance_npcname("#wp1");
disablenpc instance_npcname("#wp2");
disablenpc instance_npcname("#wp3");
disablenpc instance_npcname("#wp4");
disablenpc instance_npcname("#food1");
disablenpc instance_npcname("#food2");
disablenpc instance_npcname("#food3");
disablenpc instance_npcname("#food4");
// circles step final
disablenpc instance_npcname("#b_tr1");
disablenpc instance_npcname("#b_tr2");
disablenpc instance_npcname("#b_tr3");
disablenpc instance_npcname("#b_tr4");
// stop circles from moving
disablenpc instance_npcname("#b_sw1");
disablenpc instance_npcname("#b_sw2");
disablenpc instance_npcname("#b_sw3");
disablenpc instance_npcname("#b_sw4");
disablenpc instance_npcname("#boss1");
disablenpc instance_npcname("#boss2_sw");
donpcevent instance_npcname("#advs_step_1") + "::OnStart";
end;
}
// Entrance
// (npc probably used to enable the npcs according to the instance mode - normal or hard)
// 1@advs,111,19,0 duplicate(dummy_npc) #hidden_wp1 HIDDEN_WARP_NPC,2,2
// 1@advs,134,19,0 duplicate(dummy_npc) #hidden_wp2 HIDDEN_WARP_NPC,2,2
//---------------------------------------------------------------
// Warps
//---------------------------------------------------------------
1@advs,124,101,0 warp #wp1 2,2,1@advs,124,115
1@advs,124,205,0 script #wp2 WARPNPC,2,2,{
end;
OnTouch:
.@r = rand(3);
if (.@r == 0)
warp 'map_advs$,101,235;
else if (.@r == 1)
warp 'map_advs$,155,233;
else
warp 'map_advs$,124,211;
end;
}
1@advs,124,266,0 warp #wp3 2,2,1@advs,124,277
1@advs,124,307,0 warp #wp4 2,2,1@advs,124,319
// 1@advs,124,307,0 duplicate(dummy_npc) #wp4 WARPNPC,10,10
//---------------------------------------------------------------
// Step 1
//---------------------------------------------------------------
1@advs,1,1,0 script #advs_step_1 -1,{
end;
OnStart:
'mob_to_respawn = 'total_monster_step_1 - 'init_monster_step_1;
// The coordinates may be inaccurates (maybe not random on official)
for ( .@i = 0; .@i < 'init_monster_step_1; ++.@i )
callsub( S_Spawn );
end;
OnMobDead:
if ('mob_to_respawn > 0)
'mob_to_respawn--;
initnpctimer;
sleep 2000;
if ('advs_step == 0 && 'mob_to_respawn > 0) {
if ('mob_to_respawn > 0)
callsub( S_Spawn );
if ('mob_to_respawn > 1)
callsub( S_Spawn );
}
end;
OnTimer2000:
stopnpctimer;
.@alive = mobcount('map_advs$, instance_npcname("#advs_step_1") + "::OnMobDead");
mapannounce 'map_advs$, "Number of monsters left: " + .@alive, bc_map, 0xAAAAFF;
end;
S_Spawn:
.@label$ = instance_npcname("#advs_step_1") + "::OnMobDead";
if (rand(2))
.@mob_id = 'hunter_id;
else
.@mob_id = 'sanare_id;
.@r = rand(3);
if (.@r == 0)
areamonster 'map_advs$,63,89,72,182,"--en--",.@mob_id,1, .@label$;
else if (.@r == 1)
areamonster 'map_advs$,63,89,184,101,"--en--",.@mob_id,1, .@label$;
else
areamonster 'map_advs$,184,89,174,182,"--en--",.@mob_id,1, .@label$;
unitskilluseid $@mobid[0], 771, 'monster_relieve; // NPC_RELIEVE_ON
return;
}
1@advs,67,182,5 script #sw_1 4_NFWISP,1,1,{
if ('advs_step != 0)
end;
mes "[Unidentified grudge]";
mes "Are you here to set me free?";
next;
if (select( "Stop", "Do it" ) == 1)
end;
if ('advs_step != 0)
end;
disablenpc instance_npcname("#sw_1");
'sw[0] = 1;
donpcevent instance_npcname("#sw_timer") + "::OnStart";
end;
OnTouch_:
end;
}
1@advs,180,182,5 script #sw_2 4_NFWISP,1,1,{
if ('advs_step != 0)
end;
mes "[Unidentified grudge]";
mes "Are you here to set me free?";
next;
if (select( "Stop", "Do it" ) == 1)
end;
if ('advs_step != 0)
end;
disablenpc instance_npcname("#sw_2");
'sw[1] = 1;
donpcevent instance_npcname("#sw_timer") + "::OnStart";
end;
OnTouch_:
end;
}
1@advs,1,1,5 script #sw_timer -1,{
end;
OnStart:
if ('sw_timer == 1)
end;
'sw_timer = 1;
initnpctimer;
end;
OnTimer3000:
stopnpctimer;
if ('sw[0] != 1 || 'sw[1] != 1) {
'sw_timer = 0;
if ('sw[0] == 1)
enablenpc instance_npcname("#sw_1");
if ('sw[1] == 1)
enablenpc instance_npcname("#sw_2");
'sw[0] = 0;
'sw[1] = 0;
npctalk "Ah... my half soul beyond this hallway is still unfulfilled...", instance_npcname("#sw_1");
npctalk "Ah... my half soul beyond this hallway is still unfulfilled...", instance_npcname("#sw_2");
mapannounce 'map_advs$, "You must free both souls on the left and right of the hallway at the same time.", bc_map, 0xAAAAFF;
end;
}
if ('advs_step != 0)
end;
mapannounce 'map_advs$, "Two souls are simultaneously liberated, opening the door to the center.", bc_map, 0xAAAAFF;
donpcevent instance_npcname("#advs_step_2") + "::OnStart";
end;
}
1@advs,75,89,5 script #trap_1 4_M_DEATH,1,1,{
end;
OnTouch:
specialeffect2 EF_FIREHIT;
specialeffect2 EF_ACIDDEMON;
getmapxy( .@map$, .@x, .@y, BL_PC );
getmapxy( .@map$, .@x_npc, .@y_npc, BL_NPC );
if (.@x == .@x_npc) {
if (.@y < 89)
pushpc DIR_SOUTH, 1;
else if (.@y > 99)
pushpc DIR_NORTH, 1;
else
pushpc DIR_EAST, 1; // default
}
else if (.@x < .@x_npc)
pushpc DIR_WEST, 1;
else
pushpc DIR_EAST, 1;
heal -((MaxHp*50)/100),0; // note: heal command is used to (potentially) kill the target
end;
OnMove1:
getmapxy( .@map$, .@x, .@y, BL_NPC );
unitwalk( getnpcid(0),.@x,99, instance_npcname( strnpcinfo(0) ) + "::OnMove2" );
end;
OnMove2:
getmapxy( .@map$, .@x, .@y, BL_NPC );
unitwalk( getnpcid(0),.@x,89, instance_npcname( strnpcinfo(0) ) + "::OnMove1" );
end;
OnInstanceInit:
npcspeed 150;
sleep rand(100,3000);
donpcevent instance_npcname( strnpcinfo(0) ) + "::OnMove1";
end;
}
// traps left
1@advs,80,89,1 duplicate(#trap_1) #trap_2 4_M_DEATH,1,1
1@advs,85,89,1 duplicate(#trap_1) #trap_3 4_M_DEATH,1,1
1@advs,90,89,1 duplicate(#trap_1) #trap_4 4_M_DEATH,1,1
1@advs,95,89,1 duplicate(#trap_1) #trap_5 4_M_DEATH,1,1
1@advs,100,89,1 duplicate(#trap_1) #trap_6 4_M_DEATH,1,1
1@advs,105,89,1 duplicate(#trap_1) #trap_7 4_M_DEATH,1,1
1@advs,110,89,1 duplicate(#trap_1) #trap_8 4_M_DEATH,1,1
1@advs,115,89,1 duplicate(#trap_1) #trap_9 4_M_DEATH,1,1
// traps right
1@advs,130,89,1 duplicate(#trap_1) #trap_10 4_M_DEATH,1,1
1@advs,135,89,1 duplicate(#trap_1) #trap_11 4_M_DEATH,1,1
1@advs,140,89,1 duplicate(#trap_1) #trap_12 4_M_DEATH,1,1
1@advs,145,89,1 duplicate(#trap_1) #trap_13 4_M_DEATH,1,1
1@advs,150,89,1 duplicate(#trap_1) #trap_14 4_M_DEATH,1,1
1@advs,155,89,1 duplicate(#trap_1) #trap_15 4_M_DEATH,1,1
1@advs,160,89,1 duplicate(#trap_1) #trap_16 4_M_DEATH,1,1
1@advs,165,89,1 duplicate(#trap_1) #trap_17 4_M_DEATH,1,1
1@advs,170,89,1 duplicate(#trap_1) #trap_18 4_M_DEATH,1,1
//---------------------------------------------------------------
// Step 2
//---------------------------------------------------------------
1@advs,1,1,0 script #advs_step_2 -1,{
end;
OnStart:
if ('advs_step != 0)
end;
'advs_step = 1;
disablenpc instance_npcname("#advs_step_1");
enablenpc instance_npcname("#wp1");
enablenpc instance_npcname("#food1");
enablenpc instance_npcname("#food2");
enablenpc instance_npcname("#food3");
enablenpc instance_npcname("#food4");
killmonster 'map_advs$, instance_npcname("#advs_step_1") + "::OnMobDead";
'mob_to_respawn = 'total_monster_step_2 - 'init_monster_step_2;
for ( .@i = 0; .@i < 'init_monster_step_2; ++.@i )
callsub( S_Spawn );
end;
OnMobDead:
if ('mob_to_respawn > 0)
'mob_to_respawn--;
initnpctimer;
sleep 2000;
if ('advs_step == 1 && 'mob_to_respawn > 0) {
if ('mob_to_respawn > 0)
callsub( S_Spawn );
if ('mob_to_respawn > 1)
callsub( S_Spawn );
}
end;
OnTimer2000:
stopnpctimer;
.@alive = mobcount('map_advs$, instance_npcname("#advs_step_2") + "::OnMobDead");
mapannounce 'map_advs$, "Number of monsters left: " + .@alive, bc_map, 0xAAAAFF;
if ('advs_step == 1 && 'mob_to_respawn == 0 && .@alive == 0)
donpcevent instance_npcname("#advs_step_3_A") + "::OnStart";
end;
S_Spawn:
.@label$ = instance_npcname("#advs_step_2") + "::OnMobDead";
if (rand(2))
.@mob_id = 'hunter_id;
else
.@mob_id = 'sanare_id;
.@r = rand(3);
if (.@r == 0)
areamonster 'map_advs$,76,145,171,139,"--en--",.@mob_id,1, .@label$;
else if (.@r == 1)
areamonster 'map_advs$,113,205,135,125,"--en--",.@mob_id,1, .@label$;
else
areamonster 'map_advs$,113,205,135,125,"--en--",.@mob_id,1, .@label$;
unitskilluseid $@mobid[0], 771, 'monster_relieve; // NPC_RELIEVE_ON
return;
}
1@advs,101,159,5 script #food1 4_EP16_FOOD,1,1,{
if ('max_food <= 0) {
mapannounce 'map_advs$, "??? : You really don't know how to cook well, you deserve a casual tour of my garden.", bc_map, 0xAAAAFF;
end;
}
progressbar "",4;
'max_food--;
.@r = rand(5);
if (.@r == 0)
sc_start SC_CONFUSION,30000,0,100, SCSTART_NOAVOID|SCSTART_NOTICKDEF|SCSTART_NORATEDEF;
else if (.@r == 1)
sc_start SC_CURSE,30000,0,100, SCSTART_NOAVOID|SCSTART_NOTICKDEF|SCSTART_NORATEDEF;
else if (.@r == 2)
sc_start SC_BLIND,30000,0,100, SCSTART_NOAVOID|SCSTART_NOTICKDEF|SCSTART_NORATEDEF;
else if (.@r == 3)
sc_start SC_POISON,30000,0,100, SCSTART_NOAVOID|SCSTART_NOTICKDEF|SCSTART_NORATEDEF;
else
sc_start SC_SILENCE,30000,0,100, SCSTART_NOAVOID|SCSTART_NOTICKDEF|SCSTART_NORATEDEF;
if ('total_reaper > 'min_reaper && ('max_food % 2) == 0)
'total_reaper--;
end;
}
1@advs,101,125,5 duplicate(#food1) #food2 4_EP16_FOOD,1,1
1@advs,147,162,5 duplicate(#food1) #food3 4_EP16_FOOD,1,1
1@advs,147,122,5 duplicate(#food1) #food4 4_EP16_FOOD,1,1
//---------------------------------------------------------------
// Step 3
//---------------------------------------------------------------
1@advs,1,1,5 script #advs_step_3_A -1,{
end;
OnStart:
if ('advs_step != 1)
end;
'advs_step = 2;
enablenpc instance_npcname("#wp2");
disablenpc instance_npcname("#advs_step_2");
donpcevent instance_npcname("#advs_step_3_A") + "::OnEvent";
donpcevent instance_npcname("#advs_step_3_B") + "::OnEvent";
end;
OnEvent:
.@label$ = instance_npcname("#advs_step_3_A") + "::OnMobDead";
copyarray .@x[0], 'x_reaper[0], 'size_reaper;
copyarray .@y[0], 'y_reaper[0], 'size_reaper;
.@size = 'size_reaper;
for ( .@i = 0; .@i < 'total_reaper; ++.@i ) {
.@r = rand(.@size);
monster 'map_advs$,.@x[.@r],.@y[.@r],"--en--",20846,1, .@label$; // MD_HIDDEN_GROUND01
deletearray .@x[.@r],1;
deletearray .@y[.@r],1;
.@size--;
}
initnpctimer;
end;
OnTimer10000:
killmonster 'map_advs$, instance_npcname("#advs_step_3_A") + "::OnMobDead";
donpcevent instance_npcname("#advs_step_3_A") + "::OnEvent"; // this event never stop
end;
OnMobDead:
end;
}
1@advs,1,1,0 script #advs_step_3_B -1,{
end;
OnEvent:
'mob_to_respawn = 'total_monster_step_3 - 'init_monster_step_3;
for ( .@i = 0; .@i < 'init_monster_step_3; ++.@i )
callsub( S_Spawn );
end;
OnMobDead:
if ('mob_to_respawn > 0)
'mob_to_respawn--;
initnpctimer;
sleep 2000;
if ('advs_step == 2 && 'mob_to_respawn > 0) {
if ('mob_to_respawn > 0)
callsub( S_Spawn );
if ('mob_to_respawn > 1)
callsub( S_Spawn );
}
end;
OnTimer2000:
stopnpctimer;
.@alive = mobcount('map_advs$, instance_npcname("#advs_step_3_B") + "::OnMobDead");
mapannounce 'map_advs$, "Number of monsters left: " + .@alive, bc_map, 0xAAAAFF;
if ('advs_step == 2 && 'mob_to_respawn == 0 && .@alive == 0)
donpcevent instance_npcname("#boss1_advs") + "::OnStart";
end;
S_Spawn:
.@label$ = instance_npcname("#advs_step_3_B") + "::OnMobDead";
if (rand(2))
.@mob_id = 'hunter_id;
else
.@mob_id = 'sanare_id;
.@r = rand(4);
if (.@r == 0)
areamonster 'map_advs$,109,238,119,248,"--en--",.@mob_id,1, .@label$;
else if (.@r == 1)
areamonster 'map_advs$,109,219,119,229,"--en--",.@mob_id,1, .@label$;
else if (.@r == 2)
areamonster 'map_advs$,128,238,138,248,"--en--",.@mob_id,1, .@label$;
else
areamonster 'map_advs$,128,219,138,229,"--en--",.@mob_id,1, .@label$;
unitskilluseid $@mobid[0], 771, 'monster_relieve; // NPC_RELIEVE_ON
return;
}
//---------------------------------------------------------------
// Step 4
//---------------------------------------------------------------
1@advs,1,1,4 script #boss1_advs -1,{
end;
OnStart:
if ('advs_step != 2)
end;
'advs_step = 3;
enablenpc instance_npcname("#wp3");
disablenpc instance_npcname("#advs_step_3_B");
enablenpc instance_npcname("#boss1");
end;
OnMobDead:
if ('advs_step != 4)
end;
'advs_step = 5;
enablenpc instance_npcname("#wp4");
enablenpc instance_npcname("#boss2_sw");
donpcevent instance_npcname("#boss1_advs_skill_1") + "::OnStop";
end;
}
// 1@advs,124,295,4 script #boss1 EP18_MD_SCHULANG_R,1,1,{
1@advs,124,295,4 script #boss1 EP18_MD_SCHULANG_R,{
if ('advs_step != 3)
end;
if (is_party_leader() == false)
end;
'advs_step = 4;
npctalk "That's all human.";
unitwalk getnpcid(0), 124,290, instance_npcname("#boss1") + "::OnMove";
end;
OnMove:
disablenpc instance_npcname("#boss1");
monster 'map_advs$,124,290,"--en--",'schulang_id,1, instance_npcname("#boss1_advs") + "::OnMobDead";
'schulang_gid = $@mobid[0];
unitskilluseid $@mobid[0], 771, 1; // NPC_RELIEVE_ON
unittalk 'schulang_gid, "I'm in a bit of trouble if I approach this more than that!!!";
monster 'map_advs$,123,285,"--en--",21319,1; // EP18_MD_HEARTHUNTER_R2
unitskilluseid $@mobid[0], 771, 'monster_relieve; // NPC_RELIEVE_ON
donpcevent instance_npcname("#boss1_advs_skill_1") + "::OnStart";
end;
// OnTouch: // effect ?
// end;
}
1@advs,1,1,0 script #boss1_advs_skill_1 -1,{
end;
OnStart:
initnpctimer;
getunitdata 'schulang_gid, .@data;
'x_sch_event = .@data[UMOB_X];
'y_sch_event = .@data[UMOB_Y];
'ignore_column = rand(5); // one column is randomly free
end;
OnTimer1000:
callsub( S_Skill,-8 );
end;
OnTimer1500:
callsub( S_Skill,-4 );
end;
OnTimer2000:
callsub( S_Skill,0 );
end;
OnTimer2500:
callsub( S_Skill,4 );
end;
OnTimer3000:
callsub( S_Skill,8 );
stopnpctimer;
donpcevent instance_npcname("#boss1_advs_skill_1") + "::OnStart";
end;
S_Skill:
.@dxy = getarg(0);
if ('ignore_column != 0)
unitskillusepos 'schulang_gid,"MG_THUNDERSTORM",4, ('x_sch_event - 8), ('y_sch_event + .@dxy), -50;
if ('ignore_column != 1)
unitskillusepos 'schulang_gid,"MG_THUNDERSTORM",4, ('x_sch_event - 4), ('y_sch_event + .@dxy), -50;
if ('ignore_column != 2)
unitskillusepos 'schulang_gid,"MG_THUNDERSTORM",4, 'x_sch_event, ('y_sch_event + .@dxy), -50;
if ('ignore_column != 3)
unitskillusepos 'schulang_gid,"MG_THUNDERSTORM",4, ('x_sch_event + 4), ('y_sch_event + .@dxy), -50;
if ('ignore_column != 4)
unitskillusepos 'schulang_gid,"MG_THUNDERSTORM",4, ('x_sch_event + 8), ('y_sch_event + .@dxy), -50;
return;
OnStop:
stopnpctimer;
end;
}
//---------------------------------------------------------------
// Step 5 (final)
//---------------------------------------------------------------
// 1@advs,124,358,4 script #boss2_sw CLEAR_NPC,1,1,{
1@advs,124,358,4 script #boss2_sw CLEAR_NPC,{
if ('advs_step != 5)
end;
if (is_party_leader() == false)
end;
'advs_step = 6;
cloakonnpc instance_npcname("#boss2_sw"); // cloakonnpc to display effect
specialeffect EF_CLOUD4;
specialeffect EF_DQ9_CHARGE3;
sleep 4000;
specialeffect EF_SCREEN_QUAKE;
setnpcdisplay( instance_npcname("#boss2"), 'freyja_id );
enablenpc instance_npcname("#boss2");
specialeffect EF_BEGINSPELL_YB;
sleep 2000;
npctalk "I... and... together... let's play...", instance_npcname("#boss2");
unitwalk getnpcid(0, instance_npcname("#boss2")), 124,346, instance_npcname("#boss2_sw") + "::OnMove";
end;
OnMove:
setnpcdisplay( instance_npcname("#boss2"), CLEAR_NPC );
disablenpc instance_npcname("#boss2");
monster 'map_advs$,124,346,"--en--",'freyja_id,1, instance_npcname("#boss2_sw") + "::OnMobDead";
'freyja_gid = $@mobid[0];
donpcevent instance_npcname("#advs_boss_relieve") + "::OnStart";
sleep 3000;
mapannounce 'map_advs$, "Tip: Twisted God Freyja is weaken as it get closer to the chandelier.", bc_map, 0xFFCC;
if ('advs_difficult == 1)
sleep 8000;
else
sleep 30000;
// circles
if ('advs_difficult == 1) {
donpcevent instance_npcname("#b_tr1") + "::OnEnable";
donpcevent instance_npcname("#b_tr2") + "::OnEnable";
}
donpcevent instance_npcname("#b_tr3") + "::OnEnable";
donpcevent instance_npcname("#b_tr4") + "::OnEnable";
// stop the circles from moving
enablenpc instance_npcname("#b_sw1");
enablenpc instance_npcname("#b_sw2");
enablenpc instance_npcname("#b_sw3");
enablenpc instance_npcname("#b_sw4");
end;
OnMobDead:
'freyja_gid = 0;
donpcevent instance_npcname("#advs_boss_relieve") + "::OnStop";
disablenpc instance_npcname("#boss2_sw");
enablenpc instance_npcname("#box_admin");
if ('advs_difficult == 1) {
donpcevent instance_npcname("#b_tr1") + "::OnStop";
donpcevent instance_npcname("#b_tr2") + "::OnStop";
}
donpcevent instance_npcname("#b_tr3") + "::OnStop";
donpcevent instance_npcname("#b_tr4") + "::OnStop";
end;
// OnTouch: // effect ?
// end;
}
1@advs,124,356,4 duplicate(dummy_npc) #boss2 CLEAR_NPC,1,1
1@advs,1,1,4 script #advs_boss_relieve -1,{
end;
OnStart:
if (unitexists('freyja_gid) == false)
end;
getunitdata 'freyja_gid, .@data;
.@d = distance(124,356,.@data[UMOB_X],.@data[UMOB_Y]);
.@lv = (.@d / 2) + 1; // level 6 on spawn
.@lv = min(10,.@lv);
.@lv = max(1,.@lv);
unitskilluseid 'freyja_gid, 772, 1; // NPC_RELIEVE_OFF
unitskilluseid 'freyja_gid, 771, .@lv; // NPC_RELIEVE_ON
initnpctimer;
end;
OnTimer2000:
donpcevent instance_npcname("#advs_boss_relieve") + "::OnStart";
end;
OnStop:
stopnpctimer;
end;
}
// circles
1@advs,124,337,5 script #b_tr1 MD_HIDDEN_GROUND02,2,2,{
end;
OnTouch: // note: warp dead player
if ('freyja_gid == 0)
end;
specialeffect2 EF_FIREHIT;
specialeffect2 EF_ACIDDEMON;
percentheal -10,0; // deal some damage
if (rand(2))
warp 'map_advs$,67,182;
else
warp 'map_advs$,180,182;
end;
OnEnable:
enablenpc instance_npcname( strnpcinfo(0) );
OnStart:
'circle_move = 1;
OnMove:
if ('freyja_gid == 0)
end;
if ('circle_move == 0)
end;
getmapxy( .@map$, .@x, .@y, BL_NPC );
do {
.@dx = rand(-2,2);
.@dy = rand(-2,2);
.@new_x = .@x + .@dx;
.@new_y = .@y + .@dy;
}
while ((.@dx == 0 && .@dy == 0) || .@new_x < 108 || .@new_x > 139 || .@new_y < 325 || .@new_y > 351);
unitwalk( getnpcid(0),.@new_x,.@new_y, instance_npcname( strnpcinfo(0) ) + "::OnMove" );
end;
OnStop:
'circle_move = 0; // double check just because
unitstopwalk getnpcid(0);
end;
}
1@advs,124,337,5 duplicate(#b_tr1) #b_tr2 MD_HIDDEN_GROUND02,2,2
1@advs,124,337,5 duplicate(#b_tr1) #b_tr3 MD_HIDDEN_GROUND02,2,2
1@advs,124,337,5 duplicate(#b_tr1) #b_tr4 MD_HIDDEN_GROUND02,2,2
// stop the circles from moving
1@advs,108,358,4 script #b_sw1 4_ENERGY_YELLOW,2,2,{
mes "Ddispel the circle ^ff0000requires your health and mana.^000000 During the process, you ^ff0000becomes immobile and defenseless.^000000 Are you sure you want to start dispelling?";
next;
if (select( "Cancel", "Proceed" ) == 1)
end;
if ('freyja_gid == 0)
end;
// this part need to be checked when more information are available
.@success = callsub( S_Venom );
mes "^0000ffThe magic stone that absorbed your stamina and magic resonates. The magic circle that has been wandering disappears.^000000";
specialeffect EF_BASH3D6;
if (.@success == true && 'circle_move == 1) {
disablenpc();
if ('advs_difficult == 1) {
donpcevent instance_npcname("#b_tr1") + "::OnStop";
donpcevent instance_npcname("#b_tr2") + "::OnStop";
}
donpcevent instance_npcname("#b_tr3") + "::OnStop";
donpcevent instance_npcname("#b_tr4") + "::OnStop";
initnpctimer;
}
close;
S_Venom:
.@percent_hp = max(1, (MaxHp/100)); // deal random damage to the player
.@percent_sp = max(1, (MaxSp/100));
.@r = rand(2,20);
for ( .@i = 0; .@i < .@r; ++.@i ) {
specialeffect2 EF_INVENOM;
heal -.@percent_hp, -.@percent_sp;
if (Hp < 1)
return 0;
sleep2 500;
}
return (Hp > 0);
OnTimer10000: // seems to be around 10s to re-enable the circle, 20s the npc
if ('freyja_gid == 0)
end;
if ('advs_difficult == 1) {
donpcevent instance_npcname("#b_tr1") + "::OnStart";
donpcevent instance_npcname("#b_tr2") + "::OnStart";
}
donpcevent instance_npcname("#b_tr3") + "::OnStart";
donpcevent instance_npcname("#b_tr4") + "::OnStart";
end;
OnTimer20000:
stopnpctimer;
enablenpc();
end;
OnTouch: // effect ?
end;
}
1@advs,101,351,4 duplicate(#b_sw1) #b_sw2 4_ENERGY_YELLOW,2,2
1@advs,139,358,4 duplicate(#b_sw1) #b_sw3 4_ENERGY_YELLOW,2,2
1@advs,145,351,4 duplicate(#b_sw1) #b_sw4 4_ENERGY_YELLOW,2,2
// exit
1@advs,123,358,4 script #box_admin 4_ENERGY_YELLOW,2,2,{
.@is_hard = (instance_live_info(ILI_NAME) == "Villa of Deception Advanced");
if (isbegin_quest(12520) == 1 && !.@is_hard || isbegin_quest(12521) == 1 && .@is_hard) {
if (checkweight(1000405,10, 1000471,1) == 0) {
mes "- Wait a minute !! -";
mes "- Currently you're carrying -";
mes "- too many items with you. -";
mes "- Please try again -";
mes "- after you loose some weight. -";
close;
}
mes "^0000ffFound something in a bright glowing halo.^000000";
if (get_reputation_points(3) >= 5000)
.@bonus = 2;
getitem 1000405,8+.@bonus; // Ep18_Amethyst_Fragment
if (.@is_hard)
erasequest 12521;
else
erasequest 12520;
if (rand(100) < 10)
getitem 1000471,1;
close;
}
mes "^0000ffI think you can get out now.^000000";
next;
if (select( "Cancel", "Exit" ) == 1)
end;
warp "wolfvill",77,258;
end;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -60,4 +60,3 @@ Footer:
- Path: npc/re/merchants/barters/enchan_illusion_dungeons.yml
- Path: npc/re/merchants/barters/quests_exp_175.yml
- Path: npc/re/merchants/barters/mysterious_cookie_shop.yml
- Path: npc/re/merchants/barters/quests_18_1.yml

View File

@@ -1,132 +0,0 @@
# This file is a part of rAthena.
# Copyright(C) 2022 rAthena Development Team
# https://rathena.org - https://github.com/rathena
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###########################################################################
# Barter Database
###########################################################################
#
# Barter Settings
#
###########################################################################
# - Name NPC name.
# Map Map name. (Default: not on a map)
# X Map x coordinate. (Default: 0)
# Y Map y coordinate. (Default: 0)
# Direction Direction the NPC is looking. (Default: North)
# Sprite Sprite name of the NPC. (Default: FakeNpc)
# Items: List of sold items.
# - Index Index of the item inside the shop. (0-...)
# Maximum index depends on client.
# Item Aegis name of the item.
# Stock Amount of item in stock. 0 means unlimited. (Default: 0)
# Zeny Cost of them item in Zeny. (Default: 0)
# RequiredItems: List of required items (Optional)
# - Index Index of the required item. (0-4)
# Item Aegis name of required item.
# Amount Amount of required item. (Default: 1)
# Refine Refine level of required item. (Default: 0)
###########################################################################
Header:
Type: BARTER_DB
Version: 1
Body:
- Name: barter_ep18_1
Items:
- Index: 0
Item: Gray_W_Suits
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 350
- Index: 1
Item: Gray_W_Robe
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 350
- Index: 2
Item: Gray_W_Manteau
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 350
- Index: 3
Item: Gray_W_Muffler
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 350
- Index: 4
Item: Gray_W_Boots
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 350
- Index: 5
Item: Gray_W_Shoes
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 350
- Index: 6
Item: Gray_W_Pendant
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 350
- Index: 7
Item: Gray_W_Robe
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 350
- Index: 8
Item: Gray_W_Ring
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 350
- Index: 9
Item: Gray_W_Earing
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 350
- Name: barter_ep18_2
Items:
- Index: 0
Item: GrayWolf_7_Ticket
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 1050
- Name: barter_ep18_3
Items:
- Index: 0
Item: GrayWolf_7_Ticket
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 1050
- Index: 1
Item: GrayWolf_9_Ticket
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 2250

View File

@@ -1,17 +0,0 @@
//===== rAthena Script =======================================
//= oz_dun Monsters Spawn Script
//===== Current Version: =====================================
//= 1.0
//===== Additional Comments: =================================
//= 1.0 First version. [Capuche]
//============================================================
oz_dun01 monster Rake Hand 21296,70
oz_dun01 monster Ash Toad 21295,65
oz_dun01 monster Spark 21297,10
oz_dun02 monster Spark 21297,25
oz_dun02 monster Volcaring 21299,35
oz_dun02 monster Lava Toad 21300,25
oz_dun02 monster Hot Molar 21298,60
oz_dun02 boss_monster Burning Fang 21301,1,21600000,600000,0

View File

@@ -1,17 +0,0 @@
//===== rAthena Script =======================================
//= gw_fild Monsters Spawn Script
//===== Current Version: =====================================
//= 1.0
//===== Additional Comments: =================================
//= 1.0 First version. [Capuche]
//============================================================
gw_fild01 monster Ashhopper 21302,50
gw_fild01 monster Ashring 21303,70
gw_fild01 monster Grey Wolf 21304,35
gw_fild02 monster Ashring 21303,15
gw_fild02 monster Bushring 21305,60
gw_fild02 monster Phantom Wolf 21307,25
gw_fild02 monster Grey Wolf 21304,35
gw_fild02 monster Firewind Kite 21306,35

View File

@@ -82,23 +82,12 @@ ra_fild08,0,0 monster Anopheles 1627,15,5000
//==================================================
//==================================================
// ra_fild10
// ra_fild10 - Disabled on Renewal
//==================================================
ra_fild10 monster Drosera 1781,5
ra_fild10 monster Magmaring 1836,5
ra_fild10 monster Grey Baby Wolf 21324,50
ra_fild10 monster Grey Goat 21323,60
ra_fild10 monster Rake Hand 21296,5
//==================================================
// ra_fild11
// ra_fild11 - Disabled on Renewal
//==================================================
ra_fild11 monster Red Plant 1078,5
ra_fild11 monster Yellow Plant 1081,15
ra_fild11 monster Drosera 1781,10
ra_fild11 monster Grey Baby Wolf 21324,50
ra_fild11 monster Grey Goat 21323,70
ra_fild11 monster Rake Hand 21296,5
//==================================================
// ra_fild12 - The Plain of Ida

View File

@@ -4007,21 +4007,12 @@ OnInit:
}
// ba_in01,26,266,3 script Smart Ellie#ep18ely01 4_EP17_TABLET,{
ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
if (checkweight(1000103,15) == 0) {
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.";
close;
}
if (ep17_2_main < 32) {
cutin "ep172_beta.bmp", 2;
mes "[Ellie]";
mes "Hello, guest.";
mes "I'm responsible for the airship hangar's information.";
mes "Please call me Ellie.";
close3;
}
if (ep17_2_main == 32) {
cutin "ep172_beta",2;
mes "[Ellie]";
@@ -4148,179 +4139,6 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
cloakonnpcself( "Rookie#ep172_rk03" );
end;
}
if (ep18_1_main == 0 && BaseLevel >= 170) {
cutin "ep172_beta.bmp",2;
mes "[Ellie]";
mes "The periodic signal has not yet been received.";
mes "The whereabouts of your master's collection#3 are also being tracked.";
next;
mes "[Ellie]";
mes "Don't worry.";
mes "Time is on our side";
next;
mes "[Ellie]";
mes "I and Alpha will analyze the information properly, so if you clean up the abandoned remnants... Ah!";
next;
mes "[Ellie]";
mes "Please don't go anywhere for a moment.";
mes "It will be over soon";
mes "Time was on our side, wasn't it?";
next;
// note: progressbar_npc must be after "next" otherwise the client may crash
progressbar_npc "FFFF00",4;
mes "[Ellie]";
mes "Wait a minute...";
mes "...";
mes "...";
next;
mes "[Ellie]";
mes "As soon as the password is decrypted, it will be fast.";
mes "The thing that took the longest is an instant.";
next;
mes "[Ellie]";
mes "There is something in ^0000FFRachel^000000";
mes "Of course I've only heard of Rachel, but I've never been there.";
mes "The 'collaborators' there don't seem to know that their heads have moved yet.";
next;
mes "[Ellie]";
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 "what if?";
next;
select( "What?" );
mes "[" + strcharinfo(0) + "]";
mes "What are you doing?";
next;
mes "[Ellie]";
mes "The collaborator's position has been roughly secured. Reportedly 'waiting for your next instruction',";
mes "Then, before the next instruction is issued, we should catch up on that side as soon as possible...";
cloakoffnpcself( "Rookie#ep181_rk01" );
cloakoffnpcself( "EST#ep181_est01" );
npctalk "Rookie: Did you call?", "Rookie#ep181_rk01", bc_self;
npctalk "EST: It ended sooner than I thought.", "EST#ep181_est01", bc_self;
next;
cutin "ep162_est01.bmp",1;
mes "[EST]";
mes "Okay then Rachel...";
next;
cutin "16loo_01.bmp",0;
mes "[Rookie]";
mes "Rachel... who's going?";
next;
cutin "ep172_beta.bmp",2;
mes "[Ellie]";
mes "Is this a conflict of opinion?";
next;
cutin "16loo_03.bmp",0;
mes "[Rookie]";
mes "It's not like that...";
mes "I think it will be a bit difficult if we all go.";
next;
cutin "ep162_est01.bmp",1;
mes "[EST]";
mes "Ah... I see.";
mes "Yes. If 'Rebellion' moves, it could become a diplomatic matter.";
next;
cutin "16loo_03.bmp",0;
mes "[Rookie]";
mes "Yes. Especially if it's Rachel.";
mes "The problem between the mansion and the business has not yet been fully resolved...";
next;
cutin "ep172_beta.bmp",2;
mes "[Ellie]";
mes "Okay.";
next;
mes "[Ellie]";
mes "Then...";
next;
select( "Why are you looking at me?" );
cutin "",255;
mes "[" + strcharinfo(0) + "]";
mes "what are you doing?";
next;
cutin "ep172_beta.bmp",2;
mes "[Ellie]";
mes "Let's go, Rachel.";
npctalk "Rookie: name.", "Rookie#ep181_rk01", bc_self;
npctalk "Est: Name.", "EST#ep181_est01", bc_self;
next;
mes "[Ellie]";
mes "Are other guests affiliated?";
mes "It is difficult when disputes arise because of jurisdiction.";
mes "You never know how long it will take, so it's not suitable for a companion.";
next;
cutin "ep162_est01.bmp",1;
mes "[EST]";
mes "It sounds like you want to go there yourself.";
next;
cutin "ep172_beta.bmp",2;
mes "[Ellie]";
mes "Yes.";
mes "Please wait a minute.";
next;
progressbar_npc "00CCFF",7;
mes "[Ellie]";
mes "...";
next;
mes "[Ellie]";
mes "You have permission.";
npctalk "Meeting ended.", "", bc_self;
next;
mes "[Ellie]";
mes "The purpose is support, not hindrance.";
mes "I will follow you without burden.";
mes "I'll give you this.";
next;
cutin "",255;
mes "What Ellie gave her was a doll with a slightly droopy feel that resembled Ellie.";
mes "It may not necessarily be Ellie.";
next;
cutin "ep172_beta.bmp",2;
mes "[Ellie]";
mes "We have equipment that can transmit and receive data over long distances.";
mes "Because we are such beings.";
next;
mes "[Ellie]";
mes "But things are a little different now, so I'll give you a simple beta.";
npctalk "Be sure to take it with you", "", bc_self;
next;
cutin "16loo_02.bmp",0;
mes "[Rookie]";
mes "Uh... Mini Ellie?";
next;
cutin "ep172_beta.bmp",2;
mes "[Ellie]";
mes "Okay. I'll take that name.";
mes "Using the resources of the main body, it is possible to collect visual and auditory information and communicate like a clone.";
next;
mes "[Ellie]";
mes "There is no individual core, so the information obtained is not shared between betas unless I update it,";
mes "If communication is lost, it's just a doll.";
next;
cutin "16loo_01.bmp",0;
mes "[Rookie]";
mes "Then call us if you need assistance.";
mes "Like Ellie, we will provide generous support except for the manpower.";
next;
cutin "ep172_beta.bmp",2;
mes "[Ellie]";
mes "It will be so";
mes "Please take care of yourself.";
npctalk "I'm going with you, but it's strange to greet you like this.", "", bc_self;
next;
mes "[Ellie]";
mes "The almost exact coordinates from which the signal was sent...";
mes "About <NAVI>[here]<INFO>rachel,182,176,0,101,0</INFO></NAVI>";
ep18_1_main = 1;
setquest 8681;
getitem 400127,1; // Ep18_Mini_Elly
close3;
}
if (ep18_1_main == 1) {
mes "[Ellie]";
mes "Please be safe.";
close;
}
cutin "ep172_beta",2;
mes "[Ellie]";
mes "No intermittent signal has been received yet.";
@@ -4334,13 +4152,10 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
mes "Me and Alpha will analyze the information properly, so I'd like you to clean up the intruders remnant.";
close3;
OnInit:
// OnInit:
// note: commented (no questinfo at this point)
// questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(18018) == 1" );
// check for episode 17.2 completion
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(8681) == 0 && isbegin_quest(18018) == 2 && BaseLevel >= 170" );
end;
// end;
}
ba_in01,22,262,5 duplicate(dummy_cloaked_npc) Est#ep172_est02 4_F_ESTLOVELOY

File diff suppressed because it is too large Load Diff

View File

@@ -85,7 +85,6 @@ npc: npc/re/instances/IsleOfBios.txt
npc: npc/re/instances/LastRoom.txt
npc: npc/re/instances/LostFarm.txt
npc: npc/re/instances/MalangdoCulvert.txt
npc: npc/re/instances/MazeofOz.txt
npc: npc/re/instances/MorseCave.txt
npc: npc/re/instances/NightmarishJitterbug.txt
npc: npc/re/instances/OctopusCave.txt
@@ -100,16 +99,12 @@ npc: npc/re/instances/SaraMemory.txt
npc: npc/re/instances/SealedOs.txt
npc: npc/re/instances/SkyFortress.txt
npc: npc/re/instances/TempleOfDemonGod.txt
npc: npc/re/instances/ThorGunsuBase.txt
npc: npc/re/instances/TwilightGarden.txt
npc: npc/re/instances/VillaofDeception.txt
npc: npc/re/instances/VillaofHighPriest.txt
npc: npc/re/instances/WaterGarden.txt
//npc: npc/re/instances/WaveMode.txt
npc: npc/re/instances/WeekendDungeon.txt
npc: npc/re/instances/WernerLaboratoryCentralRoom.txt
npc: npc/re/instances/WolfchevLaboratory.txt
npc: npc/re/instances/Wolves.txt
//npc: npc/custom/official/GeffenMagicTournament.txt
// ---------------- Kafras & Cool Event Corp. -------------------
@@ -243,7 +238,6 @@ npc: npc/re/quests/quests_16_2.txt
npc: npc/re/quests/quests_illusion_dungeons.txt
npc: npc/re/quests/quests_17_1.txt
npc: npc/re/quests/quests_17_2.txt
npc: npc/re/quests/quests_18_1.txt
npc: npc/re/quests/quests_aldebaran.txt
npc: npc/re/quests/quests_brasilis.txt
npc: npc/re/quests/quests_dewata.txt

View File

@@ -55,7 +55,6 @@ npc: npc/re/mobs/dungeons/nif_dun.txt
npc: npc/re/mobs/dungeons/nyd_dun.txt
npc: npc/re/mobs/dungeons/odin.txt
npc: npc/re/mobs/dungeons/orcsdun.txt
npc: npc/re/mobs/dungeons/oz_dun.txt
npc: npc/re/mobs/dungeons/pay_dun.txt
npc: npc/re/mobs/dungeons/prt_maze.txt
npc: npc/re/mobs/dungeons/prt_prison.txt
@@ -87,7 +86,6 @@ npc: npc/re/mobs/fields/eclage.txt
npc: npc/re/mobs/fields/einbroch.txt
npc: npc/re/mobs/fields/geffen.txt
npc: npc/re/mobs/fields/gonryun.txt
npc: npc/re/mobs/fields/gw_fild.txt
npc: npc/re/mobs/fields/hugel.txt
npc: npc/re/mobs/fields/lighthalzen.txt
npc: npc/re/mobs/fields/louyang.txt

View File

@@ -30,11 +30,9 @@ npc: npc/re/warps/dungeons/iz_dun.txt
npc: npc/re/warps/dungeons/mag_dun.txt
npc: npc/re/warps/dungeons/moc_pryd.txt
npc: npc/re/warps/dungeons/nif_dun.txt
npc: npc/re/warps/dungeons/oz_dun.txt
npc: npc/re/warps/dungeons/rockmi1.txt
npc: npc/re/warps/dungeons/sp_rudus.txt
npc: npc/re/warps/dungeons/slabw01.txt
npc: npc/re/warps/dungeons/thor_v.txt
// --------------------------- Fields ---------------------------
npc: npc/re/warps/fields/bif_fild.txt
@@ -42,7 +40,6 @@ npc: npc/re/warps/fields/bra_fild.txt
npc: npc/re/warps/fields/com_fild.txt
npc: npc/re/warps/fields/dic_fild.txt
npc: npc/re/warps/fields/geffen_fild.txt
npc: npc/re/warps/fields/gw_fild.txt
npc: npc/re/warps/fields/hugel_fild.txt
npc: npc/re/warps/fields/morroc_fild.txt
npc: npc/re/warps/fields/payon_fild.txt

View File

@@ -106,7 +106,7 @@ ra_temsky,99,135,0 warp rachel71 1,1,ra_temsky,99,113
ra_temsky,137,139,0 warp rachel72 1,1,ra_temsky,109,143
ra_temsky,62,139,0 warp rachel73 1,1,ra_temsky,91,143
rachel,25,125,0 warp rachel74 1,1,ra_fild11,353,226
//rachel,25,125,0 warp rachel74 1,1,ra_fild11,353,226
rachel,275,125,0 warp rachel75 1,1,ra_fild12,40,226
rachel,130,21,0 warp rachel76 1,1,ve_fild02,195,377

View File

@@ -1,10 +0,0 @@
//===== rAthena Script =======================================
//= Warps
//===== Description: =========================================
//= Warp Points for oz_dun
//===== Additional Comments: =================================
//= 1.0 First version. [Capuche]
//============================================================
oz_dun01,112,30,0 warp to_oz_dun02 1,1,oz_dun02,142,279
oz_dun02,142,284,0 warp to_oz_dun01 1,1,oz_dun01,112,34

View File

@@ -1,9 +0,0 @@
//===== rAthena Script =======================================
//= Warps
//===== Description: =========================================
//= Warp Points for thor_v01
//===== Additional Comments: =================================
//= 1.0 First version. [Capuche]
//============================================================
que_thr,186,58,0 warp #Secret passage - Logistics base 2,2,thor_v01,169,169

View File

@@ -1,11 +0,0 @@
//===== rAthena Script =======================================
//= Warps
//===== Description: =========================================
//= Warp Points for gw_fild
//===== Additional Comments: =================================
//= 1.0 First version. [Capuche]
//============================================================
gw_fild01,135,9,0 warp gw_fild01_to_gw_fild02 1,1,gw_fild02,122,385
gw_fild02,122,391,0 warp gw_fild02_to_gw_fild01 1,1,gw_fild01,135,14
wolfvill,276,25,0 warp wolfvill_to_gw_fild01 1,1,gw_fild01,25,101

View File

@@ -37,9 +37,9 @@ ra_fild08,165,29,0 warp ra018 1,1,ra_fild12,149,369
ra_fild12,149,374,0 warp ra019 1,1,ra_fild08,165,36
//ra_fild12,303,27,0 warp ra020 1,1,ra_fild13,295,341
//ra_fild13,295,346,0 warp ra021 1,1,ra_fild12,303,33
ra_fild11,360,226,0 warp ra022 1,1,rachel,30,125
ra_fild11,21,290,0 warp ra023 1,1,ra_fild10,379,283
ra_fild10,384,287,0 warp ra024 1,1,ra_fild11,28,290
//ra_fild11,360,226,0 warp ra022 1,1,rachel,30,125
//ra_fild11,21,290,0 warp ra023 1,1,ra_fild10,379,283
//ra_fild10,384,287,0 warp ra024 1,1,ra_fild11,28,290
//ra_fild11,202,335,0 warp ra025a 1,1,ra_fild07,215,32
//ra_fild07,215,27,0 warp ra025b 1,1,ra_fild11,201,329
//ra_fild07,168,353,0 warp ra026 1,1,ra_fild02,171,45

View File

@@ -178,7 +178,6 @@ npc: npc/other/comodo_gambling.txt
npc: npc/other/divorce.txt
npc: npc/other/fortune.txt
npc: npc/other/gm_npcs.txt
npc: npc/other/goldpc.txt
npc: npc/other/guildpvp.txt
npc: npc/other/gympass.txt
npc: npc/other/hugel_bingo.txt

View File

@@ -4,14 +4,15 @@
#pragma warning(disable:4800)
#include "char.hpp"
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <memory>
#include <unordered_map>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <common/cbasetypes.hpp>
#include <common/cli.hpp>
#include <common/core.hpp>
@@ -2830,10 +2831,9 @@ void char_config_split_startpoint( char* w1_value, char* w2_value, struct s_poin
lineitem = strtok(w2_value, ":");
while (lineitem != NULL && (*count) < MAX_STARTPOINT) {
bool error;
size_t n = sv_split( lineitem, strlen( lineitem ), 0, ',', fields, fields_length, SV_NOESCAPE_NOTERMINATE, error );
int n = sv_split(lineitem, strlen(lineitem), 0, ',', fields, fields_length, SV_NOESCAPE_NOTERMINATE);
if( error || ( n + 1 ) < fields_length ){
if (n + 1 < fields_length) {
ShowDebug("%s: not enough arguments for %s! Skipping...\n", w1_value, lineitem);
lineitem = strtok(NULL, ":"); //next lineitem
continue;
@@ -2867,10 +2867,9 @@ void char_config_split_startitem(char *w1_value, char *w2_value, struct startite
lineitem = strtok(w2_value, ":");
while (lineitem != NULL && i < MAX_STARTITEM) {
bool error;
size_t n = sv_split( lineitem, strlen( lineitem ), 0, ',', fields, fields_length, SV_NOESCAPE_NOTERMINATE, error );
int n = sv_split(lineitem, strlen(lineitem), 0, ',', fields, fields_length, SV_NOESCAPE_NOTERMINATE);
if( error || ( n + 1 ) < fields_length ){
if (n + 1 < fields_length) {
ShowDebug("%s: not enough arguments for %s! Skipping...\n", w1_value, lineitem);
lineitem = strtok(NULL, ":"); //next lineitem
continue;

View File

@@ -3,12 +3,13 @@
#include "char_clif.hpp"
#include <cstdlib>
#include <cstring>
#include <memory>
#include <unordered_map>
#include <vector>
#include <stdlib.h>
#include <string.h>
#include <common/malloc.hpp>
#include <common/mapindex.hpp>
#include <common/mmo.hpp>

View File

@@ -3,8 +3,8 @@
#include "char_cnslif.hpp"
#include <cstdlib>
#include <cstring>
#include <stdlib.h>
#include <string.h>
#include <common/cli.hpp>
#include <common/ers.hpp>

View File

@@ -3,10 +3,11 @@
#include "char_logif.hpp"
#include <cstdlib>
#include <cstring>
#include <memory>
#include <stdlib.h>
#include <string.h>
#include <common/showmsg.hpp>
#include <common/socket.hpp>
#include <common/sql.hpp>

View File

@@ -3,10 +3,11 @@
#include "char_mapif.hpp"
#include <cstdlib>
#include <cstring> //memcpy
#include <memory>
#include <stdlib.h>
#include <string.h> //memcpy
#include <common/malloc.hpp>
#include <common/showmsg.hpp>
#include <common/socket.hpp>

View File

@@ -3,9 +3,9 @@
#include "int_achievement.hpp"
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <common/db.hpp>
#include <common/malloc.hpp>

View File

@@ -3,12 +3,13 @@
#include "int_auction.hpp"
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <memory>
#include <unordered_map>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <common/malloc.hpp>
#include <common/mmo.hpp>
#include <common/showmsg.hpp>

View File

@@ -3,12 +3,13 @@
#include "int_clan.hpp"
#include <cstdlib>
#include <cstring> //memset
#include <memory>
#include <unordered_map>
#include <vector>
#include <stdlib.h>
#include <string.h> //memset
#include <common/cbasetypes.hpp>
#include <common/malloc.hpp>
#include <common/mmo.hpp>

View File

@@ -3,8 +3,8 @@
#include "int_elemental.hpp"
#include <cstdlib>
#include <cstring>
#include <stdlib.h>
#include <string.h>
#include <common/mmo.hpp>
#include <common/showmsg.hpp>

View File

@@ -3,11 +3,13 @@
#include "int_guild.hpp"
#include <cstdlib>
#include <cstring>
#include <memory>
#include <unordered_map>
#include <stdlib.h>
#define __STDC_WANT_LIB_EXT1__ 1
#include <string.h>
#include <common/cbasetypes.hpp>
#include <common/malloc.hpp>
#include <common/mmo.hpp>

View File

@@ -3,8 +3,8 @@
#include "int_homun.hpp"
#include <cstdlib>
#include <cstring>
#include <stdlib.h>
#include <string.h>
#include <common/mmo.hpp>
#include <common/showmsg.hpp>

View File

@@ -3,10 +3,11 @@
#include "int_mail.hpp"
#include <cstdlib>
#include <cstring>
#include <memory>
#include <stdlib.h>
#include <string.h>
#include <common/mmo.hpp>
#include <common/showmsg.hpp>
#include <common/socket.hpp>

View File

@@ -3,8 +3,8 @@
#include "int_mercenary.hpp"
#include <cstdlib>
#include <cstring>
#include <stdlib.h>
#include <string.h>
#include <common/mmo.hpp>
#include <common/showmsg.hpp>

View File

@@ -3,11 +3,12 @@
#include "int_party.hpp"
#include <cstdlib>
#include <cstring>
#include <memory>
#include <unordered_map>
#include <stdlib.h>
#include <string.h>
#include <common/cbasetypes.hpp>
#include <common/malloc.hpp>
#include <common/mmo.hpp>

View File

@@ -3,8 +3,8 @@
#include "int_pet.hpp"
#include <cstdlib>
#include <cstring>
#include <stdlib.h>
#include <string.h>
#include <common/malloc.hpp>
#include <common/mmo.hpp>

View File

@@ -3,8 +3,8 @@
#include "int_quest.hpp"
#include <cstdlib>
#include <cstring>
#include <stdlib.h>
#include <string.h>
#include <common/malloc.hpp>
#include <common/mmo.hpp>

View File

@@ -4,8 +4,8 @@
#pragma warning(disable:4800) //forcing value to bool
#include "int_storage.hpp"
#include <cstdlib>
#include <cstring>
#include <stdlib.h>
#include <string.h>
#include <common/malloc.hpp>
#include <common/mmo.hpp>

View File

@@ -3,13 +3,13 @@
#include "inter.hpp"
#include <cstdlib>
#include <cstring>
#include <cstring>
#include <memory>
#include <unordered_map>
#include <vector>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <sys/stat.h> // for stat/lstat/fstat - [Dekamaster/Ultimate GM Tool]
#include <common/cbasetypes.hpp>

View File

@@ -87,7 +87,7 @@
#endif
#include <cinttypes>
#include <climits>
#include <limits.h>
// temporary fix for bugreport:4961 (unintended conversion from signed to unsigned)
// (-20 >= UCHAR_MAX) returns true
@@ -178,7 +178,8 @@ typedef unsigned long int ppuint32;
//////////////////////////////////////////////////////////////////////////
// integer with exact processor width (and best speed)
//////////////////////////////
#include <cstddef> // size_t
#include <stddef.h> // size_t
//#include <stdbool.h> //boolean
//////////////////////////////////////////////////////////////////////////
@@ -300,7 +301,7 @@ typedef char bool;
#define Assert(EX)
#else
// extern "C" {
#include <cassert>
#include <assert.h>
// }
#if !defined(DEFCPP) && defined(WIN32) && !defined(MINGW)
#include <crtdbg.h>
@@ -312,7 +313,7 @@ typedef char bool;
//////////////////////////////////////////////////////////////////////////
// Has to be unsigned to avoid problems in some systems
// Problems arise when these functions expect an argument in the range [0,256[ and are fed a signed char.
#include <cctype>
#include <ctype.h>
#define ISALNUM(c) (isalnum((unsigned char)(c)))
#define ISALPHA(c) (isalpha((unsigned char)(c)))
#define ISCNTRL(c) (iscntrl((unsigned char)(c)))
@@ -334,7 +335,7 @@ typedef char bool;
//////////////////////////////////////////////////////////////////////////
// Make sure va_copy exists
#include <cstdarg> // va_list, va_copy(?)
#include <stdarg.h> // va_list, va_copy(?)
#if !defined(va_copy)
#if defined(__va_copy)
#define va_copy __va_copy

View File

@@ -3,9 +3,9 @@
#include "cli.hpp"
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef WIN32
#include <conio.h>

View File

@@ -3,9 +3,6 @@
#include "core.hpp"
#include <cstdlib>
#include <csignal>
#include <config/core.hpp>
#ifndef MINICORE
@@ -15,7 +12,8 @@
#include "timer.hpp"
#include "sql.hpp"
#endif
#include <stdlib.h>
#include <signal.h>
#ifndef _WIN32
#include <unistd.h>
#else
@@ -342,8 +340,9 @@ int Core::start( int argc, char **argv ){
char *p1;
if((p1 = strrchr(argv[0], '/')) != NULL || (p1 = strrchr(argv[0], '\\')) != NULL ){
char *pwd = NULL; //path working directory
int n=0;
SERVER_NAME = ++p1;
size_t n = p1-argv[0]; //calc dir name len
n = p1-argv[0]; //calc dir name len
pwd = safestrncpy((char*)malloc(n + 1), argv[0], n);
if(chdir(pwd) != 0)
ShowError("Couldn't change working directory to %s for %s, runtime will probably fail",pwd,SERVER_NAME);

View File

@@ -15,7 +15,7 @@
/* so that developers with --enable-debug can raise signals from any section of the code they'd like */
#ifdef DEBUG
#include <csignal>
#include <signal.h>
#endif
#if defined(BUILDBOT)

View File

@@ -70,8 +70,8 @@
#include "db.hpp"
#include <cstdio>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include "ers.hpp"
#include "malloc.hpp"

View File

@@ -42,9 +42,10 @@
#ifndef DB_HPP
#define DB_HPP
#include <cstdarg>
#include <utility>
#include <stdarg.h>
#include "cbasetypes.hpp"
/*****************************************************************************\

View File

@@ -42,8 +42,8 @@
#include "ers.hpp"
#include <cstdlib>
#include <cstring>
#include <stdlib.h>
#include <string.h>
#include "cbasetypes.hpp"
#include "malloc.hpp" // CREATE, RECREATE, aMalloc, aFree

View File

@@ -3,8 +3,7 @@
#include "grfio.hpp"
#include <cstdlib>
#include <stdlib.h>
#include <zlib.h>
#include "cbasetypes.hpp"

View File

@@ -3,9 +3,9 @@
#include "malloc.hpp"
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "core.hpp"
#include "showmsg.hpp"
@@ -20,6 +20,7 @@
#if defined(MEMWATCH)
# include <string.h>
# include "memwatch.h"
# define MALLOC(n,file,line,func) mwMalloc((n),(file),(line))
# define CALLOC(m,n,file,line,func) mwCalloc((m),(n),(file),(line))
@@ -32,6 +33,8 @@
#elif defined(DMALLOC)
# include <string.h>
# include <stdlib.h>
# include "dmalloc.hpp"
# define MALLOC(n,file,line,func) dmalloc_malloc((file),(line),(n),DMALLOC_FUNC_MALLOC,0,0)
# define CALLOC(m,n,file,line,func) dmalloc_malloc((file),(line),(m)*(n),DMALLOC_FUNC_CALLOC,0,0)

View File

@@ -3,7 +3,7 @@
#include "mapindex.hpp"
#include <cstdlib>
#include <stdlib.h>
#include "core.hpp"
#include "mmo.hpp"

View File

@@ -11,8 +11,8 @@
#include "md5calc.hpp"
#include <cstdio>
#include <cstring>
#include <stdio.h>
#include <string.h>
#include "random.hpp"

View File

@@ -4,7 +4,7 @@
#ifndef MMO_HPP
#define MMO_HPP
#include <ctime>
#include <time.h>
#include <config/core.hpp>
@@ -607,8 +607,7 @@ struct mmo_charstatus {
#ifdef HOTKEY_SAVING
struct hotkey hotkeys[MAX_HOTKEYS_DB];
#endif
bool show_equip, disable_call;
bool disable_partyinvite;
bool show_equip,allow_party, disable_call;
short rename;
time_t delete_date;

View File

@@ -3,9 +3,9 @@
#include "msg_conf.hpp"
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "malloc.hpp"
#include "showmsg.hpp"

View File

@@ -3,9 +3,9 @@
#include "nullpo.hpp"
#include <cstdio>
#include <cstdarg>
#include <cstring>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include "showmsg.hpp"

View File

@@ -4,30 +4,20 @@
#ifndef PACKETS_HPP
#define PACKETS_HPP
#include <functional>
#include <unordered_map>
#include <common/cbasetypes.hpp>
#include <common/mmo.hpp>
#include <common/showmsg.hpp>
#include <common/socket.hpp>
#include <common/utilities.hpp>
#pragma warning( push )
#pragma warning( disable : 4200 )
#define DEFINE_PACKET_HEADER( name, id ) const int16 HEADER_##name = id
#define DEFINE_PACKET_ID( name, id ) DEFINE_PACKET_HEADER( name, id )
// NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
#if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
#pragma pack( push, 1 )
#endif
struct PACKET{
int16 packetType;
int16 packetLength;
} __attribute__((packed));
struct PACKET_CA_LOGIN{
int16 packetType;
uint32 version;
@@ -219,88 +209,4 @@ DEFINE_PACKET_HEADER( TC_RESULT, 0xae3 );
#pragma warning( pop )
template <typename sessiontype> class PacketDatabase{
private:
struct s_packet_info{
bool fixed;
int16 size;
std::function<bool ( int fd, sessiontype& sd )> func;
};
std::unordered_map<int16, s_packet_info> infos;
public:
void add( int16 packetType, bool fixed, int16 size, std::function<bool ( int fd, sessiontype& sd )> func ){
if( fixed ){
if( size < 2 ){
ShowError( "Definition for packet 0x%04x is invalid. Minimum size for a fixed length packet is 2 bytes.\n", packetType );
return;
}
}else{
if( size < 4 ){
ShowError( "Definition for packet 0x%04x is invalid. Minimum size for a dynamic length packet is 2 bytes.\n", packetType );
return;
}
}
s_packet_info& info = infos[packetType];
info.fixed = fixed;
info.size = size;
info.func = func;
}
bool handle( int fd, sessiontype& sd ){
int16 remaining = static_cast<int16>( RFIFOREST( fd ) );
if( remaining < 2 ){
ShowError( "Did not receive enough bytes to process a packet\n" );
set_eof( fd );
return false;
}
PACKET* p = (PACKET*)RFIFOP( fd, 0 );
s_packet_info* info = rathena::util::umap_find( this->infos, p->packetType );
if( info == nullptr ){
ShowError( "Received unknown packet 0x%04x\n", p->packetType );
set_eof( fd );
return false;
}
if( info->fixed ){
if( remaining < info->size ){
ShowError( "Invalid size %hd for packet 0x%04x with fixed size of %hd\n", remaining, p->packetType, info->size );
set_eof( fd );
return false;
}
bool ret = info->func( fd, sd );
RFIFOSKIP( fd, info->size );
return ret;
}else{
if( remaining < info->size ){
ShowError( "Invalid size %hd for packet 0x%04x with dynamic minimum size of %hd\n", remaining, p->packetType, info->size );
set_eof( fd );
return false;
}
if( remaining < p->packetLength ){
ShowError( "Invalid size %hd for packet 0x%04x with dynamic size of %hd\n", remaining, p->packetType, p->packetLength );
set_eof( fd );
return false;
}
bool ret = info->func( fd, sd );
RFIFOSKIP( fd, p->packetLength );
return ret;
}
}
};
#endif /* PACKETS_HPP */

View File

@@ -3,8 +3,8 @@
#include "showmsg.hpp"
#include <cstdlib> // atexit
#include <ctime>
#include <stdlib.h> // atexit
#include <time.h>
#ifdef WIN32
#include "winapi.hpp"
@@ -61,7 +61,7 @@ char console_log_filepath[32] = "./log/unknown.log";
char s_[SBUF_SIZE]; \
StringBuf *d_; \
char *v_; \
size_t l_; \
int l_; \
} buf ={"",NULL,NULL,0}; \
//define NEWBUF
@@ -210,7 +210,7 @@ int VFPRINTF(HANDLE handle, const char *fmt, va_list argptr)
if( !is_console(handle) && stdout_with_ansisequence )
{
WriteFile( handle, BUFVAL( tempbuf ), (DWORD)BUFLEN( tempbuf ), &written, 0 );
WriteFile(handle, BUFVAL(tempbuf), BUFLEN(tempbuf), &written, 0);
return 0;
}

View File

@@ -3,12 +3,12 @@
#include "socket.hpp"
#include <cstdlib>
#include <stdlib.h>
#ifdef WIN32
#include "winapi.hpp"
#else
#include <cerrno>
#include <errno.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <netdb.h>
@@ -1696,7 +1696,10 @@ void send_shortlist_add_fd(int fd)
// Do pending network sends and eof handling from the shortlist.
void send_shortlist_do_sends()
{
for( int i = static_cast<int>( send_shortlist_count - 1 ); i >= 0; --i ){
int i;
for( i = send_shortlist_count-1; i >= 0; --i )
{
int fd = send_shortlist_array[i];
int idx = fd/32;
int bit = fd%32;

View File

@@ -4,8 +4,6 @@
#ifndef SOCKET_HPP
#define SOCKET_HPP
#include <ctime>
#include <config/core.hpp>
#ifdef WIN32
@@ -16,6 +14,7 @@
#include <sys/socket.h>
#include <netinet/in.h>
#endif
#include <time.h>
#include "cbasetypes.hpp"
#include "malloc.hpp"

View File

@@ -7,9 +7,8 @@
#include "winapi.hpp"
#endif
#include <cstdlib>// strtoul
#include <mysql.h>
#include <stdlib.h>// strtoul
#include "cbasetypes.hpp"
#include "malloc.hpp"

View File

@@ -4,7 +4,7 @@
#ifndef SQL_HPP
#define SQL_HPP
#include <cstdarg>// va_list
#include <stdarg.h>// va_list
#include "cbasetypes.hpp"

View File

@@ -3,8 +3,7 @@
#include "strlib.hpp"
#include <algorithm>
#include <cstdlib>
#include <stdlib.h>
#include "cbasetypes.hpp"
#include "malloc.hpp"
@@ -349,7 +348,8 @@ bool bin2hex(char* output, unsigned char* input, size_t count)
///
/// @param sv Parse state
/// @return 1 if a field was parsed, 0 if already done, -1 on error.
int sv_parse_next( s_svstate& sv ){
int sv_parse_next(struct s_svstate* sv)
{
enum {
START_OF_FIELD,
PARSING_FIELD,
@@ -358,11 +358,19 @@ int sv_parse_next( s_svstate& sv ){
TERMINATE,
END
} state;
const char* str;
int len;
enum e_svopt opt;
char delim;
int i;
const char* str = sv.str;
size_t len = sv.len;
int opt = sv.opt;
char delim = sv.delim;
if( sv == NULL )
return -1;// error
str = sv->str;
len = sv->len;
opt = sv->opt;
delim = sv->delim;
// check opt
if( delim == '\n' && (opt&(SV_TERMINATE_CRLF|SV_TERMINATE_LF)) )
@@ -376,9 +384,9 @@ int sv_parse_next( s_svstate& sv ){
return -1;// error
}
if( sv.done || str == NULL )
if( sv->done || str == NULL )
{
sv.done = true;
sv->done = true;
return 0;// nothing to parse
}
@@ -389,10 +397,10 @@ int sv_parse_next( s_svstate& sv ){
((opt&SV_TERMINATE_CR) && str[i] == '\r') || \
((opt&SV_TERMINATE_CRLF) && i+1 < len && str[i] == '\r' && str[i+1] == '\n') )
#define IS_C_ESCAPE() ( (opt&SV_ESCAPE_C) && str[i] == '\\' )
#define SET_FIELD_START() sv.start = i
#define SET_FIELD_END() sv.end = i
#define SET_FIELD_START() sv->start = i
#define SET_FIELD_END() sv->end = i
size_t i = sv.off;
i = sv->off;
state = START_OF_FIELD;
while( state != END )
{
@@ -472,14 +480,14 @@ int sv_parse_next( s_svstate& sv ){
else
++i;// CR or LF
#endif
sv.done = true;
sv->done = true;
state = END;
break;
}
}
if( IS_END() )
sv.done = true;
sv.off = i;
sv->done = true;
sv->off = i;
#undef IS_END
#undef IS_DELIM
@@ -512,20 +520,15 @@ int sv_parse_next( s_svstate& sv ){
/// @param npos Size of the pos array
/// @param opt Options that determine the parsing behaviour
/// @return Number of fields found in the string or -1 if an error occured
size_t sv_parse( const char* str, size_t len, size_t startoff, char delim, size_t* out_pos, size_t npos, int opt, bool& error ){
int sv_parse(const char* str, int len, int startoff, char delim, int* out_pos, int npos, enum e_svopt opt)
{
struct s_svstate sv;
int count;
// initialize
error = false;
if( out_pos == nullptr ){
npos = 0;
}
for( size_t i = 0; i < npos; ++i ){
out_pos[i] = -1;
}
s_svstate sv = {};
if( out_pos == NULL ) npos = 0;
for( count = 0; count < npos; ++count )
out_pos[count] = -1;
sv.str = str;
sv.len = len;
sv.off = startoff;
@@ -533,34 +536,18 @@ size_t sv_parse( const char* str, size_t len, size_t startoff, char delim, size_
sv.delim = delim;
sv.done = false;
if( npos > 0 ){
out_pos[0] = startoff;
}
// parse
size_t count = 0;
while( !sv.done ){
count = 0;
if( npos > 0 ) out_pos[0] = startoff;
while( !sv.done )
{
++count;
if( sv_parse_next( sv ) <= 0 ){
error = true;
return 0;
}
if( npos > count * 2 ){
out_pos[count * 2] = sv.start;
}
if( npos > count * 2 + 1 ){
out_pos[count * 2 + 1] = sv.end;
}
if( sv_parse_next(&sv) <= 0 )
return -1;// error
if( npos > count*2 ) out_pos[count*2] = sv.start;
if( npos > count*2+1 ) out_pos[count*2+1] = sv.end;
}
if( npos > 1 ){
out_pos[1] = sv.off;
}
if( npos > 1 ) out_pos[1] = sv.off;
return count;
}
@@ -583,21 +570,18 @@ size_t sv_parse( const char* str, size_t len, size_t startoff, char delim, size_
/// @param nfields Size of the field array
/// @param opt Options that determine the parsing behaviour
/// @return Number of fields found in the string or -1 if an error occured
size_t sv_split( char* str, size_t len, size_t startoff, char delim, char** out_fields, size_t nfields, int opt, bool& error ){
if( out_fields == nullptr || nfields <= 0 ){
return 0; // nothing to do
}
int sv_split(char* str, int len, int startoff, char delim, char** out_fields, size_t nfields, enum e_svopt opt)
{
int pos[1024];
int done;
char* end;
int ret = sv_parse(str, len, startoff, delim, pos, ARRAYLENGTH(pos), opt);
size_t pos[1024];
size_t ret = sv_parse( str, len, startoff, delim, pos, ARRAYLENGTH( pos ), opt, error );
// An error occurred
if( error ){
return 0;
}
if( ret == -1 || out_fields == NULL || nfields <= 0 )
return ret; // nothing to do
// next line
char* end = str + pos[1];
end = str + pos[1];
if( end[0] == '\0' )
{
*out_fields = end;
@@ -630,7 +614,7 @@ size_t sv_split( char* str, size_t len, size_t startoff, char delim, char** out_
// fields
size_t i = 2;
size_t done = 0;
done = 0;
while( done < ret && nfields > 0 )
{
if( i < ARRAYLENGTH(pos) )
@@ -646,13 +630,7 @@ size_t sv_split( char* str, size_t len, size_t startoff, char delim, char** out_
}
else
{// get more fields
sv_parse( str, len, pos[i - 1] + 1, delim, pos, ARRAYLENGTH( pos ), opt, error );
// An error occurred
if( error ){
return 0;
}
sv_parse(str, len, pos[i-1] + 1, delim, pos, ARRAYLENGTH(pos), opt);
i = 2;
}
}
@@ -884,11 +862,13 @@ const char* skip_escaped_c(const char* p)
* @param silent : should we display error if file not found ?
* @return true on success, false if file could not be opened
*/
bool sv_readdb( const char* directory, const char* filename, char delim, size_t mincols, size_t maxcols, size_t maxrows, bool (*parseproc)( char* fields[], size_t columns, size_t current ), bool silent ){
bool sv_readdb(const char* directory, const char* filename, char delim, int mincols, int maxcols, int maxrows, bool (*parseproc)(char* fields[], int columns, int current), bool silent)
{
FILE* fp;
int lines = 0;
size_t entries = 0;
int entries = 0;
char** fields; // buffer for fields ([0] is reserved)
int columns, nb_cols;
char path[1024], *line;
const short colsize=512;
@@ -903,12 +883,13 @@ bool sv_readdb( const char* directory, const char* filename, char delim, size_t
}
// allocate enough memory for the maximum requested amount of columns plus the reserved one
size_t nb_cols = maxcols + 1;
nb_cols = maxcols+1;
fields = (char**)aMalloc(nb_cols*sizeof(char*));
line = (char*)aMalloc(nb_cols*colsize);
// process rows one by one
while( fgets( line, static_cast<int>( maxcols * colsize ), fp ) ){
while( fgets(line, maxcols*colsize, fp) )
{
char *match;
lines++;
@@ -922,13 +903,7 @@ bool sv_readdb( const char* directory, const char* filename, char delim, size_t
if( line[0] == '\0' || line[0] == '\n' || line[0] == '\r')
continue;
bool error;
size_t columns = sv_split( line, strlen( line ), 0, delim, fields, nb_cols, SV_TERMINATE_LF|SV_TERMINATE_CRLF, error );
if( error ){
ShowError( "sv_readdb: error in line %d of \"%s\".\n", lines, path );
continue;
}
columns = sv_split(line, strlen(line), 0, delim, fields, nb_cols, (e_svopt)(SV_TERMINATE_LF|SV_TERMINATE_CRLF));
if( columns < mincols )
{
@@ -990,49 +965,53 @@ void _StringBuf_Init(const char *file, int line, const char *func,StringBuf* sel
}
/// Appends the result of printf to the StringBuf
size_t _StringBuf_Printf( const char* file, int line, const char* func, StringBuf* self, const char* fmt, ... ){
int _StringBuf_Printf(const char *file, int line, const char *func,StringBuf* self, const char* fmt, ...)
{
int len;
va_list ap;
va_start(ap, fmt);
size_t len = _StringBuf_Vprintf(file,line,func,self, fmt, ap);
len = _StringBuf_Vprintf(file,line,func,self, fmt, ap);
va_end(ap);
return len;
}
/// Appends the result of vprintf to the StringBuf
size_t _StringBuf_Vprintf( const char* file, int line, const char* func, StringBuf* self, const char* fmt, va_list ap ){
int _StringBuf_Vprintf(const char *file, int line, const char *func,StringBuf* self, const char* fmt, va_list ap)
{
for(;;)
{
int n, size, off;
va_list apcopy;
/* Try to print in the allocated space. */
size_t size = self->max_ - (self->ptr_ - self->buf_);
size = self->max_ - (self->ptr_ - self->buf_);
va_copy(apcopy, ap);
int n = vsnprintf( self->ptr_, size, fmt, apcopy );
n = vsnprintf(self->ptr_, size, fmt, apcopy);
va_end(apcopy);
/* If that worked, return the length. */
if( n > -1 && n < size )
{
self->ptr_ += n;
return self->ptr_ - self->buf_;
return (int)(self->ptr_ - self->buf_);
}
/* Else try again with more space. */
self->max_ *= 2; // twice the old size
size_t off = self->ptr_ - self->buf_;
off = (int)(self->ptr_ - self->buf_);
self->buf_ = (char*)aRealloc2(self->buf_, self->max_ + 1, file, line, func);
self->ptr_ = self->buf_ + off;
}
}
/// Appends the contents of another StringBuf to the StringBuf
size_t _StringBuf_Append(const char *file, int line, const char *func,StringBuf* self, const StringBuf* sbuf)
int _StringBuf_Append(const char *file, int line, const char *func,StringBuf* self, const StringBuf* sbuf)
{
size_t available = self->max_ - (self->ptr_ - self->buf_);
size_t needed = sbuf->ptr_ - sbuf->buf_;
int available = self->max_ - (self->ptr_ - self->buf_);
int needed = (int)(sbuf->ptr_ - sbuf->buf_);
if( needed >= available )
{
size_t off = self->ptr_ - self->buf_;
int off = (int)(self->ptr_ - self->buf_);
self->max_ += needed;
self->buf_ = (char*)aRealloc2(self->buf_, self->max_ + 1, file, line, func);
self->ptr_ = self->buf_ + off;
@@ -1040,26 +1019,26 @@ size_t _StringBuf_Append(const char *file, int line, const char *func,StringBuf*
memcpy(self->ptr_, sbuf->buf_, needed);
self->ptr_ += needed;
return self->ptr_ - self->buf_;
return (int)(self->ptr_ - self->buf_);
}
// Appends str to the StringBuf
size_t _StringBuf_AppendStr(const char *file, int line, const char *func,StringBuf* self, const char* str)
int _StringBuf_AppendStr(const char *file, int line, const char *func,StringBuf* self, const char* str)
{
size_t available = self->max_ - ( self->ptr_ - self->buf_ );
size_t needed = strlen( str );
int available = self->max_ - (self->ptr_ - self->buf_);
int needed = (int)strlen(str);
if( needed >= available )
{// not enough space, expand the buffer (minimum expansion = 1024)
size_t off = self->ptr_ - self->buf_;
self->max_ += std::max( needed, static_cast<size_t>( 1024 ) );
int off = (int)(self->ptr_ - self->buf_);
self->max_ += max(needed, 1024);
self->buf_ = (char*)aRealloc2(self->buf_, self->max_ + 1, file, line, func);
self->ptr_ = self->buf_ + off;
}
memcpy(self->ptr_, str, needed);
self->ptr_ += needed;
return self->ptr_ - self->buf_;
return (int)(self->ptr_ - self->buf_);
}
// Returns the length of the data in the Stringbuf

View File

@@ -4,20 +4,21 @@
#ifndef STRLIB_HPP
#define STRLIB_HPP
#include <cstdarg>
#include <stdarg.h>
#include "cbasetypes.hpp"
#include "malloc.hpp"
#if !defined(__USE_GNU)
#define __USE_GNU // required to enable strnlen on some platforms
#define __USED_GNU
#endif
#include <cstring>
#include <string.h>
#if defined(__USED_GNU)
#undef __USE_GNU
#undef __USED_GNU
#endif
#include "cbasetypes.hpp"
#include "malloc.hpp"
int remove_control_chars(char* str);
char* trim(char* str);
char* normalize_name(char* str,const char* delims);
@@ -84,11 +85,11 @@ typedef enum e_svopt
struct s_svstate
{
const char* str; //< string to parse
size_t len; //< string length
size_t off; //< current offset in the string
size_t start; //< where the field starts
size_t end; //< where the field ends
int opt; //< parse options
int len; //< string length
int off; //< current offset in the string
int start; //< where the field starts
int end; //< where the field ends
enum e_svopt opt; //< parse options
char delim; //< field delimiter
bool done; //< if all the text has been parsed
};
@@ -98,14 +99,14 @@ struct s_svstate
///
/// @param sv Parse state
/// @return 1 if a field was parsed, 0 if done, -1 on error.
int sv_parse_next( s_svstate& sv );
int sv_parse_next(struct s_svstate* sv);
/// Parses a delim-separated string.
/// Starts parsing at startoff and fills the pos array with position pairs.
/// out_pos[0] and out_pos[1] are the start and end of line.
/// Other position pairs are the start and end of fields.
/// Returns the number of fields found or -1 if an error occurs.
size_t sv_parse( const char* str, size_t len, size_t startoff, char delim, size_t* out_pos, size_t npos, int opt, bool& error );
int sv_parse(const char* str, int len, int startoff, char delim, int* out_pos, int npos, enum e_svopt opt);
/// Splits a delim-separated string.
/// WARNING: this function modifies the input string
@@ -113,7 +114,7 @@ size_t sv_parse( const char* str, size_t len, size_t startoff, char delim, size_
/// out_fields[0] is the start of the next line.
/// Other entries are the start of fields (nul-teminated).
/// Returns the number of fields found or -1 if an error occurs.
size_t sv_split( char* str, size_t len, size_t startoff, char delim, char** out_fields, size_t nfields, int opt, bool& error );
int sv_split(char* str, int len, int startoff, char delim, char** out_fields, size_t nfields, enum e_svopt opt);
/// Escapes src to out_dest according to the format of the C compiler.
/// Returns the length of the escaped string.
@@ -131,7 +132,7 @@ const char* skip_escaped_c(const char* p);
/// Opens and parses a file containing delim-separated columns, feeding them to the specified callback function row by row.
/// Tracks the progress of the operation (current line number, number of successfully processed rows).
/// Returns 'true' if it was able to process the specified file, or 'false' if it could not be read.
bool sv_readdb( const char* directory, const char* filename, char delim, size_t mincols, size_t maxcols, size_t maxrows, bool (*parseproc)( char* fields[], size_t columns, size_t current ), bool silent );
bool sv_readdb(const char* directory, const char* filename, char delim, int mincols, int maxcols, int maxrows, bool (*parseproc)(char* fields[], int columns, int current), bool silent);
/// StringBuf - dynamic string
@@ -139,7 +140,7 @@ struct StringBuf
{
char *buf_;
char *ptr_;
size_t max_;
unsigned int max_;
};
typedef struct StringBuf StringBuf;
@@ -147,13 +148,13 @@ StringBuf* _StringBuf_Malloc(const char *file, int line, const char *func);
#define StringBuf_Malloc() _StringBuf_Malloc(ALC_MARK)
void _StringBuf_Init(const char *file, int line, const char *func, StringBuf* self);
#define StringBuf_Init(self) _StringBuf_Init(ALC_MARK,self)
size_t _StringBuf_Printf( const char* file, int line, const char* func, StringBuf* self, const char* fmt, ... );
int _StringBuf_Printf(const char *file, int line, const char *func, StringBuf* self, const char* fmt, ...);
#define StringBuf_Printf(self,fmt,...) _StringBuf_Printf(ALC_MARK,self,fmt, ## __VA_ARGS__)
size_t _StringBuf_Vprintf( const char* file, int line, const char* func, StringBuf* self, const char* fmt, va_list args );
int _StringBuf_Vprintf(const char *file, int line, const char *func,StringBuf* self, const char* fmt, va_list args);
#define StringBuf_Vprintf(self,fmt,args) _StringBuf_Vprintf(ALC_MARK,self,fmt,args)
size_t _StringBuf_Append(const char *file, int line, const char *func, StringBuf* self, const StringBuf *sbuf);
int _StringBuf_Append(const char *file, int line, const char *func, StringBuf* self, const StringBuf *sbuf);
#define StringBuf_Append(self,sbuf) _StringBuf_Append(ALC_MARK,self,sbuf)
size_t _StringBuf_AppendStr(const char *file, int line, const char *func, StringBuf* self, const char* str);
int _StringBuf_AppendStr(const char *file, int line, const char *func, StringBuf* self, const char* str);
#define StringBuf_AppendStr(self,str) _StringBuf_AppendStr(ALC_MARK,self,str)
int StringBuf_Length(StringBuf* self);
char* StringBuf_Value(StringBuf* self);

View File

@@ -3,19 +3,22 @@
#include "timer.hpp"
#include <cstdlib>
#include <cstring>
#include <utility>
#include <stdlib.h>
#include <string.h>
#ifdef WIN32
#include "winapi.hpp" // GetTickCount()
#else
#endif
#include "cbasetypes.hpp"
#include "db.hpp"
#include "malloc.hpp"
#include "nullpo.hpp"
#include "showmsg.hpp"
#include "utils.hpp"
#ifdef WIN32
#include "winapi.hpp" // GetTickCount()
#endif
// If the server can't handle processing thousands of monsters
// or many connected clients, please increase TIMER_MIN_INTERVAL.

View File

@@ -4,7 +4,7 @@
#ifndef TIMER_HPP
#define TIMER_HPP
#include <ctime>
#include <time.h>
#include "cbasetypes.hpp"

View File

@@ -69,60 +69,14 @@ int levenshtein(const std::string &s1, const std::string &s2)
return result;
}
bool rathena::util::safe_substraction( int64 a, int64 b, int64& result ){
#if __has_builtin( __builtin_sub_overflow ) || ( defined( __GNUC__ ) && !defined( __clang__ ) && defined( GCC_VERSION ) && GCC_VERSION >= 50100 )
return __builtin_sub_overflow( a, b, &result );
#else
bool overflow = false;
if( b < 0 ){
if( a > ( INT64_MAX + b ) ){
overflow = true;
}
}else{
if( a < ( INT64_MIN + b ) ){
overflow = true;
}
}
result = a - b;
return overflow;
#endif
}
bool rathena::util::safe_multiplication( int64 a, int64 b, int64& result ){
#if __has_builtin( __builtin_mul_overflow ) || ( defined( __GNUC__ ) && !defined( __clang__ ) && defined( GCC_VERSION ) && GCC_VERSION >= 50100 )
return __builtin_mul_overflow( a, b, &result );
#else
result = a * b;
if( a > 0 ){
if( b > 0 ){
return result < 0;
}else if( b < 0 ){
return result > 0;
}
}else if( a < 0 ){
if( b > 0 ){
return result > 0;
}else if( b < 0 ){
return result < 0;
}
}
return false;
#endif
}
void rathena::util::string_left_pad_inplace(std::string& str, char padding, size_t num)
{
str.insert( 0, std::min( static_cast<size_t>( 0 ), num - str.length() ), padding );
str.insert(0, min(0, num - str.length()), padding);
}
std::string rathena::util::string_left_pad(const std::string& original, char padding, size_t num)
{
return std::string( num - std::min( num, original.length() ), padding ) + original;
return std::string(num - min(num, original.length()), padding) + original;
}
constexpr char base62_dictionary[] = {

View File

@@ -233,26 +233,25 @@ namespace rathena {
}
}
template <typename T, typename = std::enable_if<std::is_integral<T>::value, T>::type>
bool safe_addition( T a, T b, T& result ){
#if __has_builtin( __builtin_add_overflow ) || ( defined( __GNUC__ ) && !defined( __clang__ ) && defined( GCC_VERSION ) && GCC_VERSION >= 50100 )
template <typename T> bool safe_addition(T a, T b, T &result) {
return __builtin_add_overflow(a, b, &result);
}
return __builtin_add_overflow( a, b, &result );
#else
template <typename T> bool safe_addition( T a, T b, T& result ){
bool overflow = false;
if( std::numeric_limits<T>::is_signed ){
if( b < 0 ){
if( a < ( (std::numeric_limits<T>::min)() - b ) ){
if( a < ( std::numeric_limits<T>::min() - b ) ){
overflow = true;
}
}else{
if( a > ( (std::numeric_limits<T>::max)() - b ) ){
if( a > ( std::numeric_limits<T>::max() - b ) ){
overflow = true;
}
}
}else{
if( a > ( (std::numeric_limits<T>::max)() - b ) ){
if( a > ( std::numeric_limits<T>::max() - b ) ){
overflow = true;
}
}
@@ -260,11 +259,56 @@ namespace rathena {
result = a + b;
return overflow;
}
#endif
}
bool safe_substraction( int64 a, int64 b, int64& result );
bool safe_multiplication( int64 a, int64 b, int64& result );
template <typename T, typename = std::enable_if<std::is_integral<T>::value, T>::type>
bool safe_substraction( T a, T b, T& result ){
#if __has_builtin( __builtin_sub_overflow ) || ( defined( __GNUC__ ) && !defined( __clang__ ) && defined( GCC_VERSION ) && GCC_VERSION >= 50100 )
return __builtin_sub_overflow( a, b, &result );
#else
bool overflow = false;
if( b < 0 ){
if( a > ( std::numeric_limits<T>::max() + b ) ){
overflow = true;
}
}else{
if( a < ( std::numeric_limits<T>::min() + b ) ){
overflow = true;
}
}
result = a - b;
return overflow;
#endif
}
template <typename T, typename = std::enable_if<std::is_integral<T>::value, T>::type>
bool safe_multiplication( T a, T b, T& result ){
#if __has_builtin( __builtin_mul_overflow ) || ( defined( __GNUC__ ) && !defined( __clang__ ) && defined( GCC_VERSION ) && GCC_VERSION >= 50100 )
return __builtin_mul_overflow( a, b, &result );
#else
result = a * b;
if( a > 0 ){
if( b > 0 ){
return result < 0;
}else if( b < 0 ){
return result > 0;
}
}else if( a < 0 ){
if( b > 0 ){
return result > 0;
}else if( b < 0 ){
return result < 0;
}
}
return false;
#endif
}
/**
* Safely add values without overflowing.

View File

@@ -3,9 +3,9 @@
#include "utils.hpp"
#include <cmath> // floor()
#include <cstdlib>
#include <cstring>
#include <math.h> // floor()
#include <stdlib.h>
#include <string.h>
#ifdef WIN32
#include "winapi.hpp"

View File

@@ -4,7 +4,7 @@
#ifndef UTILS_HPP
#define UTILS_HPP
#include <cstdio> // FILE*
#include <stdio.h> // FILE*
#include "cbasetypes.hpp"

Some files were not shown because too many files have changed in this diff Show More