Compare commits
20 Commits
hotfix/iss
...
refactor/s
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
036a5b1950 | ||
|
|
eb308dcad2 | ||
|
|
e196eadcaa | ||
|
|
464c122b40 | ||
|
|
f9073574d3 | ||
|
|
9305da45dc | ||
|
|
a0bbbf1729 | ||
|
|
83067220bc | ||
|
|
893b133444 | ||
|
|
8e2ee12b18 | ||
|
|
c43f7b369e | ||
|
|
e965e2794b | ||
|
|
04904c0947 | ||
|
|
9f90e4e9e1 | ||
|
|
51ca9c4923 | ||
|
|
c8ab735348 | ||
|
|
72b3d1bf0e | ||
|
|
d3fcb66d3a | ||
|
|
f5909c3d78 | ||
|
|
5ad81d67ea |
@@ -1610,5 +1610,8 @@ map: 3@vrpop
|
||||
// Depth biosphere 2nd floor
|
||||
map: bl_depth2
|
||||
|
||||
// Fantasy Series Sonic Collaboration - Dr. Eggman's Secret Base
|
||||
map: 1@vrsn
|
||||
|
||||
//------------------------- Clone Maps ---------------------------
|
||||
//------------------------- Extra Maps ---------------------------
|
||||
|
||||
@@ -24,9 +24,9 @@
|
||||
###########################################################################
|
||||
# - Item Item that triggers Laphine Upgrade.
|
||||
# RandomOptionGroup Name of the random option group that will be applied. (Default: none)
|
||||
# ResultRefine: Refine level after the upgrade. (Default: none)
|
||||
# - Level Refine level.
|
||||
# Rate Rate per level. The total rate is the sum of the rates. (Default: 1)
|
||||
# ResultRefine Absolute refine level after the upgrade. (Default: none)
|
||||
# ResultRefineMinimum Minimum refine level after the upgrade. (Default: none)
|
||||
# ResultRefineMaximum Maximum refine level after the upgrade. (Default: none)
|
||||
# MinimumRefine Minimum refine level of the required items. (Default: 0)
|
||||
# MaximumRefine Maximum refine level of the required items. (Default: MAX_REFINE)
|
||||
# RequiredRandomOptions How many random options have to be in the item? (Default: 0)
|
||||
@@ -37,4 +37,4 @@
|
||||
|
||||
Header:
|
||||
Type: LAPHINE_UPGRADE_DB
|
||||
Version: 2
|
||||
Version: 1
|
||||
|
||||
@@ -24,9 +24,9 @@
|
||||
###########################################################################
|
||||
# - Item Item that triggers Laphine Upgrade.
|
||||
# RandomOptionGroup Name of the random option group that will be applied. (Default: none)
|
||||
# ResultRefine: Refine level after the upgrade. (Default: none)
|
||||
# - Level Refine level.
|
||||
# Rate Rate per level. The total rate is the sum of the rates. (Default: 1)
|
||||
# ResultRefine Absolute refine level after the upgrade. (Default: none)
|
||||
# ResultRefineMinimum Minimum refine level after the upgrade. (Default: none)
|
||||
# ResultRefineMaximum Maximum refine level after the upgrade. (Default: none)
|
||||
# MinimumRefine Minimum refine level of the required items. (Default: 0)
|
||||
# MaximumRefine Maximum refine level of the required items. (Default: MAX_REFINE)
|
||||
# RequiredRandomOptions How many random options have to be in the item? (Default: 0)
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
Header:
|
||||
Type: LAPHINE_UPGRADE_DB
|
||||
Version: 2
|
||||
Version: 1
|
||||
|
||||
Footer:
|
||||
Imports:
|
||||
|
||||
BIN
db/map_cache.dat
BIN
db/map_cache.dat
Binary file not shown.
@@ -1240,6 +1240,7 @@ t_garden
|
||||
2@vrpop
|
||||
3@vrpop
|
||||
bl_depth2
|
||||
1@vrsn
|
||||
|
||||
//======================================================================================
|
||||
// - Other/Extra maps -
|
||||
|
||||
@@ -532,3 +532,23 @@ Body:
|
||||
Points: 4545
|
||||
- Level: 250
|
||||
Points: 4545
|
||||
- Level: 251
|
||||
Points: 4545
|
||||
- Level: 252
|
||||
Points: 4545
|
||||
- Level: 253
|
||||
Points: 4545
|
||||
- Level: 254
|
||||
Points: 4545
|
||||
- Level: 255
|
||||
Points: 4545
|
||||
- Level: 256
|
||||
Points: 4545
|
||||
- Level: 257
|
||||
Points: 4545
|
||||
- Level: 258
|
||||
Points: 4545
|
||||
- Level: 259
|
||||
Points: 4545
|
||||
- Level: 260
|
||||
Points: 4545
|
||||
|
||||
@@ -2049,21 +2049,21 @@ Body:
|
||||
- Id: 200032
|
||||
Group: Goal_Level
|
||||
Name: The start of another adventure!
|
||||
Condition: " BaseLevel == 100 "
|
||||
Condition: " BaseLevel >= 100 "
|
||||
Rewards:
|
||||
Item: Rebeginer_Box_100
|
||||
Score: 10
|
||||
- Id: 200033
|
||||
Group: Goal_Level
|
||||
Name: With a new mind!(1)
|
||||
Condition: " BaseLevel == 170 && (Class >= JOB_RUNE_KNIGHT && Class <= JOB_GUILLOTINE_CROSS_T) "
|
||||
Condition: " BaseLevel >= 170 && (Class >= JOB_RUNE_KNIGHT && Class <= JOB_GUILLOTINE_CROSS_T) "
|
||||
Rewards:
|
||||
Item: Costume_Ticket
|
||||
Score: 50
|
||||
- Id: 200034
|
||||
Group: Goal_Level
|
||||
Name: With a new mind!(2)
|
||||
Condition: " BaseLevel == 170 && (Class >= JOB_ROYAL_GUARD && Class <= JOB_SHADOW_CHASER_T) "
|
||||
Condition: " BaseLevel >= 170 && (Class >= JOB_ROYAL_GUARD && Class <= JOB_SHADOW_CHASER_T) "
|
||||
Rewards:
|
||||
Item: Costume_Ticket
|
||||
Score: 50
|
||||
|
||||
@@ -48064,3 +48064,562 @@ Body:
|
||||
- Improve_Orb_Cri # 29539
|
||||
Script: |
|
||||
bonus2 bAddRace,RC_All,6;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Pow3 # 312984
|
||||
- Star_Cluster_Of_Pow3 # 310676
|
||||
Script: |
|
||||
bonus2 bAddRace,RC_All,10;
|
||||
bonus2 bAddRace,RC_Player_Human,-10;
|
||||
bonus2 bAddRace,RC_Player_Doram,-10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Pow4 # 312985
|
||||
- Star_Cluster_Of_Pow3 # 310676
|
||||
Script: |
|
||||
bonus2 bAddRace,RC_All,15;
|
||||
bonus2 bAddRace,RC_Player_Human,-15;
|
||||
bonus2 bAddRace,RC_Player_Doram,-15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Pow5 # 312986
|
||||
- Star_Cluster_Of_Pow3 # 310676
|
||||
Script: |
|
||||
bonus2 bAddRace,RC_All,20;
|
||||
bonus2 bAddRace,RC_Player_Human,-20;
|
||||
bonus2 bAddRace,RC_Player_Doram,-20;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Con3 # 312989
|
||||
- Star_Cluster_Of_Con3 # 310682
|
||||
Script: |
|
||||
bonus2 bAddRace,RC_All,10;
|
||||
bonus2 bAddRace,RC_Player_Human,-10;
|
||||
bonus2 bAddRace,RC_Player_Doram,-10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Con4 # 312990
|
||||
- Star_Cluster_Of_Con3 # 310682
|
||||
Script: |
|
||||
bonus2 bAddRace,RC_All,15;
|
||||
bonus2 bAddRace,RC_Player_Human,-15;
|
||||
bonus2 bAddRace,RC_Player_Doram,-15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Con5 # 312991
|
||||
- Star_Cluster_Of_Con3 # 310682
|
||||
Script: |
|
||||
bonus2 bAddRace,RC_All,20;
|
||||
bonus2 bAddRace,RC_Player_Human,-20;
|
||||
bonus2 bAddRace,RC_Player_Doram,-20;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Spl3 # 312994
|
||||
- Star_Cluster_Of_Spl3 # 310688
|
||||
Script: |
|
||||
bonus2 bMagicAddRace,RC_All,10;
|
||||
bonus2 bMagicAddRace,RC_Player_Human,-10;
|
||||
bonus2 bMagicAddRace,RC_Player_Doram,-10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Spl4 # 312995
|
||||
- Star_Cluster_Of_Spl3 # 310688
|
||||
Script: |
|
||||
bonus2 bMagicAddRace,RC_All,15;
|
||||
bonus2 bMagicAddRace,RC_Player_Human,-15;
|
||||
bonus2 bMagicAddRace,RC_Player_Doram,-15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Spl5 # 312996
|
||||
- Star_Cluster_Of_Spl3 # 310688
|
||||
Script: |
|
||||
bonus2 bMagicAddRace,RC_All,20;
|
||||
bonus2 bMagicAddRace,RC_Player_Human,-20;
|
||||
bonus2 bMagicAddRace,RC_Player_Doram,-20;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Sta3 # 312999
|
||||
- Star_Cluster_Of_Sta3 # 310679
|
||||
Script: |
|
||||
bonus bMaxHPrate,5;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Sta4 # 313000
|
||||
- Star_Cluster_Of_Sta3 # 310679
|
||||
Script: |
|
||||
bonus bMaxHPrate,7;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Sta5 # 313001
|
||||
- Star_Cluster_Of_Sta3 # 310679
|
||||
Script: |
|
||||
bonus bMaxHPrate,10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Crt3 # 313004
|
||||
- Star_Cluster_Of_Crt3 # 310685
|
||||
Script: |
|
||||
bonus2 bAddRace,RC_All,10;
|
||||
bonus2 bAddRace,RC_Player_Human,-10;
|
||||
bonus2 bAddRace,RC_Player_Doram,-10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Crt4 # 313005
|
||||
- Star_Cluster_Of_Crt3 # 310685
|
||||
Script: |
|
||||
bonus2 bAddRace,RC_All,15;
|
||||
bonus2 bAddRace,RC_Player_Human,-15;
|
||||
bonus2 bAddRace,RC_Player_Doram,-15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Crt5 # 313006
|
||||
- Star_Cluster_Of_Crt3 # 310685
|
||||
Script: |
|
||||
bonus2 bAddRace,RC_All,20;
|
||||
bonus2 bAddRace,RC_Player_Human,-20;
|
||||
bonus2 bAddRace,RC_Player_Doram,-20;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Wis3 # 313009
|
||||
- Star_Cluster_Of_Wis3 # 310691
|
||||
Script: |
|
||||
bonus bMaxSPrate,5;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Wis4 # 313010
|
||||
- Star_Cluster_Of_Wis3 # 310691
|
||||
Script: |
|
||||
bonus bMaxSPrate,7;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Wis5 # 313011
|
||||
- Star_Cluster_Of_Wis3 # 310691
|
||||
Script: |
|
||||
bonus bMaxSPrate,10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Life_of_Spring_Pow # 313012
|
||||
- Star_Armor_Of_Pow # 450169
|
||||
Script: |
|
||||
bonus2 bAddEle,Ele_All,2;
|
||||
if (getenchantgrade(EQI_ARMOR)>=ENCHANTGRADE_A) {
|
||||
bonus2 bAddEle,Ele_All,3*(getequiprefinerycnt(EQI_ARMOR)/2);
|
||||
}
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Life_of_Spring_Sta # 313013
|
||||
- Star_Armor_Of_Sta # 450170
|
||||
Script: |
|
||||
.@r_armor = getequiprefinerycnt(EQI_ARMOR);
|
||||
bonus bMaxHPrate,3;
|
||||
if (getenchantgrade(EQI_ARMOR)>=ENCHANTGRADE_A) {
|
||||
bonus bMaxHPrate,(.@r_armor/2);
|
||||
bonus bRes,20*(.@r_armor/2);
|
||||
}
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Life_of_Spring_Crt # 313014
|
||||
- Star_Suit_Of_Crt # 450172
|
||||
Script: |
|
||||
bonus bCritAtkRate,3;
|
||||
if (getenchantgrade(EQI_ARMOR)>=ENCHANTGRADE_A) {
|
||||
bonus bCritAtkRate,3*(getequiprefinerycnt(EQI_ARMOR)/2);
|
||||
}
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Life_of_Summer_Con # 313015
|
||||
- Star_Suit_Of_Con # 450171
|
||||
Script: |
|
||||
bonus2 bAddEle,Ele_All,2;
|
||||
if (getenchantgrade(EQI_ARMOR)>=ENCHANTGRADE_A) {
|
||||
bonus2 bAddEle,Ele_All,3*(getequiprefinerycnt(EQI_ARMOR)/2);
|
||||
}
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Life_of_Summer_Sta # 313016
|
||||
- Star_Armor_Of_Sta # 450170
|
||||
Script: |
|
||||
.@r_armor = getequiprefinerycnt(EQI_ARMOR);
|
||||
bonus bMaxHPrate,3;
|
||||
if (getenchantgrade(EQI_ARMOR)>=ENCHANTGRADE_A) {
|
||||
bonus bMaxHPrate,(.@r_armor/2);
|
||||
bonus bRes,20*(.@r_armor/2);
|
||||
}
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Life_of_Summer_Crt # 313017
|
||||
- Star_Suit_Of_Crt # 450172
|
||||
Script: |
|
||||
bonus bCritAtkRate,3;
|
||||
if (getenchantgrade(EQI_ARMOR)>=ENCHANTGRADE_A) {
|
||||
bonus bCritAtkRate,3*(getequiprefinerycnt(EQI_ARMOR)/2);
|
||||
}
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Life_of_Autumn_Spl # 313018
|
||||
- Star_Robe_Of_Spl # 450173
|
||||
Script: |
|
||||
bonus2 bMagicAddEle,Ele_All,2;
|
||||
if (getenchantgrade(EQI_ARMOR)>=ENCHANTGRADE_A) {
|
||||
bonus2 bMagicAddEle,Ele_All,3*(getequiprefinerycnt(EQI_ARMOR)/2);
|
||||
}
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Life_of_Autumn_Sta # 313019
|
||||
- Star_Armor_Of_Sta # 450170
|
||||
Script: |
|
||||
.@r_armor = getequiprefinerycnt(EQI_ARMOR);
|
||||
bonus bMaxHPrate,3;
|
||||
if (getenchantgrade(EQI_ARMOR)>=ENCHANTGRADE_A) {
|
||||
bonus bMaxHPrate,(.@r_armor/2);
|
||||
bonus bRes,20*(.@r_armor/2);
|
||||
}
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Life_of_Autumn_Wis # 313020
|
||||
- Star_Robe_Of_Wis # 450174
|
||||
Script: |
|
||||
.@r_armor = getequiprefinerycnt(EQI_ARMOR);
|
||||
bonus bDelayrate,-3;
|
||||
if (getenchantgrade(EQI_ARMOR)>=ENCHANTGRADE_A) {
|
||||
bonus bDelayrate,-2*(.@r_armor/2);
|
||||
bonus bMaxSPrate,(.@r_armor/2);
|
||||
}
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Life_of_Winter_Pow # 313021
|
||||
- Star_Armor_Of_Pow # 450169
|
||||
Script: |
|
||||
bonus bCritAtkRate,3;
|
||||
if (getenchantgrade(EQI_ARMOR)>=ENCHANTGRADE_A) {
|
||||
bonus bCritAtkRate,3*(getequiprefinerycnt(EQI_ARMOR)/2);
|
||||
}
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Life_of_Winter_Con # 313022
|
||||
- Star_Suit_Of_Con # 450171
|
||||
Script: |
|
||||
bonus bCritAtkRate,3;
|
||||
if (getenchantgrade(EQI_ARMOR)>=ENCHANTGRADE_A) {
|
||||
bonus bCritAtkRate,3*(getequiprefinerycnt(EQI_ARMOR)/2);
|
||||
}
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Life_of_Winter_Crt # 313023
|
||||
- Star_Suit_Of_Crt # 450172
|
||||
Script: |
|
||||
bonus2 bAddEle,Ele_All,2;
|
||||
if (getenchantgrade(EQI_ARMOR)>=ENCHANTGRADE_A) {
|
||||
bonus2 bAddEle,Ele_All,3*(getequiprefinerycnt(EQI_ARMOR)/2);
|
||||
}
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Str1 # 313024
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bAddClass,Class_Normal,3;
|
||||
bonus2 bAddClass,Class_Boss,3;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Str2 # 313025
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bAddClass,Class_Normal,6;
|
||||
bonus2 bAddClass,Class_Boss,6;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Str3 # 313026
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bAddClass,Class_Normal,9;
|
||||
bonus2 bAddClass,Class_Boss,9;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Str4 # 313027
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bAddClass,Class_Normal,12;
|
||||
bonus2 bAddClass,Class_Boss,12;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Str5 # 313028
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bAddClass,Class_Normal,15;
|
||||
bonus2 bAddClass,Class_Boss,15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Luk1 # 313029
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bAddClass,Class_Normal,3;
|
||||
bonus2 bAddClass,Class_Boss,3;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Luk2 # 313030
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bAddClass,Class_Normal,6;
|
||||
bonus2 bAddClass,Class_Boss,6;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Luk3 # 313031
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bAddClass,Class_Normal,9;
|
||||
bonus2 bAddClass,Class_Boss,9;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Luk4 # 313032
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bAddClass,Class_Normal,12;
|
||||
bonus2 bAddClass,Class_Boss,12;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Luk5 # 313033
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bAddClass,Class_Normal,15;
|
||||
bonus2 bAddClass,Class_Boss,15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Int1 # 313034
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bMagicAddClass,Class_Normal,3;
|
||||
bonus2 bMagicAddClass,Class_Boss,3;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Int2 # 313035
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bMagicAddClass,Class_Normal,6;
|
||||
bonus2 bMagicAddClass,Class_Boss,6;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Int3 # 313036
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bMagicAddClass,Class_Normal,9;
|
||||
bonus2 bMagicAddClass,Class_Boss,9;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Int4 # 313037
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bMagicAddClass,Class_Normal,12;
|
||||
bonus2 bMagicAddClass,Class_Boss,12;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Int5 # 313038
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus2 bMagicAddClass,Class_Normal,15;
|
||||
bonus2 bMagicAddClass,Class_Boss,15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Res1 # 313039
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus bMaxHPrate,1;
|
||||
bonus bMaxSPrate,1;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Res2 # 313040
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus bMaxHPrate,2;
|
||||
bonus bMaxSPrate,2;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Res3 # 313041
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus bMaxHPrate,3;
|
||||
bonus bMaxSPrate,3;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Res4 # 313042
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus bMaxHPrate,4;
|
||||
bonus bMaxSPrate,4;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Star_Cluster_Of_Res5 # 313043
|
||||
- Token_Of_Life # 312981
|
||||
Script: |
|
||||
bonus bMaxHPrate,5;
|
||||
bonus bMaxSPrate,5;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- aegis_313059 # 313059
|
||||
- Runeknight_Top3 # 310881
|
||||
Script: |
|
||||
bonus2 bAddSize,Size_All,3*(getskilllv("DK_TWOHANDDEF")/2);
|
||||
- Combos:
|
||||
- Combo:
|
||||
- aegis_313059 # 313059
|
||||
- Runeknight_Middle3 # 310882
|
||||
Script: |
|
||||
bonus2 bSkillAtk,"DK_HACKANDSLASHER",10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- aegis_313059 # 313059
|
||||
- Runeknight_Bottom3 # 310883
|
||||
Script: |
|
||||
bonus bCRate,3;
|
||||
bonus2 bSkillAtk,"DK_STORMSLASH",15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- aegis_313060 # 313060
|
||||
- Royalguard_Top3 # 310887
|
||||
Script: |
|
||||
bonus2 bSkillAtk,"IG_CROSS_RAIN",15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- aegis_313060 # 313060
|
||||
- Royalguard_Middle3 # 310888
|
||||
Script: |
|
||||
bonus2 bMagicAddSize,Size_All,10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- aegis_313060 # 313060
|
||||
- Royalguard_Bottom3 # 310889
|
||||
Script: |
|
||||
bonus2 bMagicAddEle,Ele_All,3*(getskilllv("IG_SHIELD_MASTERY")/2);
|
||||
- Combos:
|
||||
- Combo:
|
||||
- aegis_313061 # 313061
|
||||
- aegis_311463 # 311463
|
||||
Script: |
|
||||
bonus2 bSkillAtk,"NW_THE_VIGILANTE_AT_NIGHT",10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- aegis_313061 # 313061
|
||||
- aegis_311464 # 311464
|
||||
Script: |
|
||||
bonus2 bSkillAtk,"NW_SPIRAL_SHOOTING",15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- aegis_313061 # 313061
|
||||
- aegis_311465 # 311465
|
||||
Script: |
|
||||
bonus2 bSkillAtk,"NW_MAGAZINE_FOR_ONE",10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- FuriousCirclet_WH # 400608
|
||||
- StormBow_Furious # 700100
|
||||
Script: |
|
||||
bonus2 bSkillAtk,"WH_GALESTORM",15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- FuriousCirclet_WH # 400608
|
||||
- TornadoBow_Furious # 700101
|
||||
Script: |
|
||||
bonus2 bSkillAtk,"WH_CRESCIVE_BOLT",15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- FuriousCirclet_CD # 400609
|
||||
- SaintBook_Furious # 540086
|
||||
Script: |
|
||||
bonus2 bSkillAtk,"CD_PETITIO",15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- FuriousCirclet_CD # 400609
|
||||
- SaintWand_Furious # 550141
|
||||
Script: |
|
||||
bonus2 bSkillAtk,"CD_FRAMEN",15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- FuriousCirclet_SKE # 400610
|
||||
- SunBook_Furious # 540087
|
||||
Script: |
|
||||
bonus2 bSkillAtk,"SKE_NOON_BLAST",15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- FuriousCirclet_SKE # 400610
|
||||
- MoonBook_Furious # 540088
|
||||
Script: |
|
||||
bonus2 bSkillAtk,"SKE_MIDNIGHT_KICK",15;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Spring # 490483
|
||||
- Circul_Of_Life_Spring # 480349
|
||||
Script: |
|
||||
.@val = 5+3*(getequiprefinerycnt(EQI_GARMENT)/2);
|
||||
bonus2 bAddRace,RC_All,.@val;
|
||||
bonus2 bAddRace,RC_Player_Human,-.@val;
|
||||
bonus2 bAddRace,RC_Player_Doram,-.@val;
|
||||
bonus bDelayrate,-10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Summer # 490484
|
||||
- Circul_Of_Life_Summer # 480350
|
||||
Script: |
|
||||
.@val = 5+3*(getequiprefinerycnt(EQI_GARMENT)/2);
|
||||
bonus2 bAddRace,RC_All,.@val;
|
||||
bonus2 bAddRace,RC_Player_Human,-.@val;
|
||||
bonus2 bAddRace,RC_Player_Doram,-.@val;
|
||||
bonus bDelayrate,-10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Autumn # 490485
|
||||
- Circul_Of_Life_Autumn # 480351
|
||||
Script: |
|
||||
.@val = 5+3*(getequiprefinerycnt(EQI_GARMENT)/2);
|
||||
bonus2 bMagicAddRace,RC_All,.@val;
|
||||
bonus2 bMagicAddRace,RC_Player_Human,-.@val;
|
||||
bonus2 bMagicAddRace,RC_Player_Doram,-.@val;
|
||||
bonus bDelayrate,-10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- Signet_Of_Winter # 490486
|
||||
- Circul_Of_Life_Winter # 480352
|
||||
Script: |
|
||||
.@val = 5+3*(getequiprefinerycnt(EQI_GARMENT)/2);
|
||||
bonus2 bAddRace,RC_All,.@val;
|
||||
bonus2 bAddRace,RC_Player_Human,-.@val;
|
||||
bonus2 bAddRace,RC_Player_Doram,-.@val;
|
||||
bonus bDelayrate,-10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- SaintBook_Furious # 540086
|
||||
- FuriousBoots # 470265
|
||||
Script: |
|
||||
autobonus "{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,\"AB_DUPLELIGHT_MELEE\",(15*.@sum); bonus2 bSkillAtk,\"AB_DUPLELIGHT_MAGIC\",(15*.@sum); }",70,10000,BF_WEAPON;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- SunBook_Furious # 540087
|
||||
- FuriousBoots # 470265
|
||||
Script: |
|
||||
bonus bDelayrate,-10;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- MoonBook_Furious # 540088
|
||||
- FuriousBoots # 470265
|
||||
Script: |
|
||||
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
|
||||
bonus2 bSkillAtk,"SKE_MIDNIGHT_KICK",15;
|
||||
bonus2 bSkillAtk,"SKE_DAWN_BREAK",.@sum*2;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- SaintWand_Furious # 550141
|
||||
- FuriousBoots # 470265
|
||||
Script: |
|
||||
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
|
||||
bonus bDelayrate,-10;
|
||||
bonus2 bSkillAtk,"CD_FRAMEN",.@sum;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- StormBow_Furious # 700100
|
||||
- FuriousBoots # 470265
|
||||
Script: |
|
||||
bonus2 bSkillUseSP,"WH_GALESTORM",20;
|
||||
- Combos:
|
||||
- Combo:
|
||||
- TornadoBow_Furious # 700101
|
||||
- FuriousBoots # 470265
|
||||
Script: |
|
||||
bonus bDelayrate,-10;
|
||||
|
||||
@@ -57882,6 +57882,17 @@ Body:
|
||||
AegisName: Dark_Lord_Egg
|
||||
Name: Dark Lord Egg
|
||||
Type: PetEgg
|
||||
- Id: 9156
|
||||
AegisName: Sonic_Chao_Egg
|
||||
Name: Chao's Egg # !todo check english name
|
||||
Type: PetEgg
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
- Id: 10001
|
||||
AegisName: Skull_Helm
|
||||
Name: Skull Helm
|
||||
@@ -115621,6 +115632,16 @@ Body:
|
||||
Costume_Head_Top: true
|
||||
Costume_Head_Mid: true
|
||||
ArmorLevel: 1
|
||||
- Id: 21400
|
||||
AegisName: aegis_21400
|
||||
Name: Costume Blue Dragon Statue # !todo check english name
|
||||
Type: Armor
|
||||
Locations:
|
||||
Costume_Head_Top: true
|
||||
Costume_Head_Mid: true
|
||||
Costume_Head_Low: true
|
||||
ArmorLevel: 1
|
||||
View: 2494
|
||||
- Id: 22000
|
||||
AegisName: Temporal_Str_Boots
|
||||
Name: Temporal Str Boots
|
||||
@@ -160306,6 +160327,14 @@ Body:
|
||||
if (.@r>=11) {
|
||||
bonus2 bAddSize,Size_All,10;
|
||||
}
|
||||
- Id: 400100
|
||||
AegisName: aegis_400100
|
||||
Name: Costume Leon Wig # !todo check english name
|
||||
Type: Armor
|
||||
Locations:
|
||||
Costume_Head_Low: true
|
||||
ArmorLevel: 1
|
||||
View: 2373
|
||||
- Id: 400101
|
||||
AegisName: GatesofNetherworld
|
||||
Name: Gate of Netherworld
|
||||
@@ -167787,6 +167816,21 @@ Body:
|
||||
bonus2 bSkillAtk,"WS_CARTTERMINATION",15;
|
||||
if (.@r>=7)
|
||||
bonus2 bSkillAtk,"WS_CARTTERMINATION",15;
|
||||
- Id: 400502
|
||||
AegisName: C_Sonic_Ring
|
||||
Name: Costume ring # !todo check english name
|
||||
Type: Armor
|
||||
Locations:
|
||||
Costume_Head_Top: true
|
||||
ArmorLevel: 1
|
||||
View: 2433
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
- Id: 400503
|
||||
AegisName: C_Hosangto_Hat
|
||||
Name: Costume Bunny Ear Hat
|
||||
@@ -169416,6 +169460,181 @@ Body:
|
||||
Costume_Head_Top: true
|
||||
ArmorLevel: 1
|
||||
View: 2488
|
||||
- Id: 400605
|
||||
AegisName: C_VIP_Poring_Cake_Cap
|
||||
Name: Costume Birthday Cake Hat # !todo check english name
|
||||
Type: Armor
|
||||
Locations:
|
||||
Costume_Head_Top: true
|
||||
ArmorLevel: 1
|
||||
View: 417
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoSell: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
- Id: 400608
|
||||
AegisName: FuriousCirclet_WH
|
||||
Name: Crown of Wrath (Windhawk) # !todo check english name
|
||||
Type: Armor
|
||||
Weight: 300
|
||||
Defense: 30
|
||||
Slots: 1
|
||||
Jobs:
|
||||
Hunter: true
|
||||
Classes:
|
||||
Fourth: true
|
||||
Locations:
|
||||
Head_Top: true
|
||||
ArmorLevel: 2
|
||||
EquipLevelMin: 235
|
||||
Refineable: true
|
||||
Gradable: true
|
||||
View: 2415
|
||||
Script: |
|
||||
.@g = getenchantgrade();
|
||||
.@r = getrefine();
|
||||
bonus bBaseAtk,10*(.@r/2);
|
||||
bonus2 bSkillAtk,"WH_CRESCIVE_BOLT",4*(.@r/3);
|
||||
bonus2 bSkillAtk,"WH_GALESTORM",4*(.@r/3);
|
||||
if (.@r>=7) {
|
||||
bonus bVariableCastrate,-15;
|
||||
if (.@r>=9) {
|
||||
bonus bLongAtkRate,10;
|
||||
if (.@r>=11) {
|
||||
bonus bFixedCast,-300;
|
||||
bonus bAtkRate,5;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (.@g>=ENCHANTGRADE_D) {
|
||||
bonus bPAtk,3;
|
||||
bonus bPow,5;
|
||||
bonus bCon,5;
|
||||
if (.@g>=ENCHANTGRADE_C) {
|
||||
bonus bLongAtkRate,10;
|
||||
if (.@g>=ENCHANTGRADE_B) {
|
||||
bonus bFixedCast,-200;
|
||||
bonus bAtkRate,5;
|
||||
if (.@g>=ENCHANTGRADE_A) {
|
||||
bonus bCritAtkRate,15;
|
||||
bonus bCRate,5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 400609
|
||||
AegisName: FuriousCirclet_CD
|
||||
Name: Crown of Wrath (Cardinal) # !todo check english name
|
||||
Type: Armor
|
||||
Weight: 300
|
||||
Defense: 30
|
||||
Slots: 1
|
||||
Jobs:
|
||||
Priest: true
|
||||
Classes:
|
||||
Fourth: true
|
||||
Locations:
|
||||
Head_Top: true
|
||||
ArmorLevel: 2
|
||||
EquipLevelMin: 235
|
||||
Refineable: true
|
||||
Gradable: true
|
||||
View: 2415
|
||||
Script: |
|
||||
.@g = getenchantgrade();
|
||||
.@r = getrefine();
|
||||
bonus bMatk,10*(.@r/2);
|
||||
bonus bBaseAtk,10*(.@r/2);
|
||||
bonus2 bSkillAtk,"CD_PETITIO",4*(.@r/3);
|
||||
bonus2 bSkillAtk,"CD_FRAMEN",4*(.@r/3);
|
||||
if (.@r>=7) {
|
||||
bonus bVariableCastrate,-15;
|
||||
if (.@r>=9) {
|
||||
bonus bShortAtkRate,10;
|
||||
bonus2 bMagicAtkEle,Ele_All,10;
|
||||
if (.@r>=11) {
|
||||
bonus bFixedCast,-300;
|
||||
bonus bMatkRate,5;
|
||||
bonus bAtkRate,5;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (.@g>=ENCHANTGRADE_D) {
|
||||
bonus bPAtk,3;
|
||||
bonus bSMatk,3;
|
||||
bonus bPow,5;
|
||||
bonus bSpl,5;
|
||||
bonus bCon,5;
|
||||
if (.@g>=ENCHANTGRADE_C) {
|
||||
bonus bShortAtkRate,10;
|
||||
bonus2 bMagicAtkEle,Ele_All,10;
|
||||
if (.@g>=ENCHANTGRADE_B) {
|
||||
bonus bFixedCast,-200;
|
||||
bonus bMatkRate,5;
|
||||
bonus bAtkRate,5;
|
||||
if (.@g>=ENCHANTGRADE_A) {
|
||||
bonus2 bMagicAtkEle,Ele_All,15;
|
||||
bonus bCritAtkRate,15;
|
||||
bonus bPAtk,5;
|
||||
bonus bSMatk,5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 400610
|
||||
AegisName: FuriousCirclet_SKE
|
||||
Name: Crown of Wrath (Sky Emperor) # !todo check english name
|
||||
Type: Armor
|
||||
Weight: 300
|
||||
Defense: 30
|
||||
Slots: 1
|
||||
Jobs:
|
||||
StarGladiator: true
|
||||
Classes:
|
||||
Fourth: true
|
||||
Locations:
|
||||
Head_Top: true
|
||||
ArmorLevel: 2
|
||||
EquipLevelMin: 235
|
||||
Refineable: true
|
||||
Gradable: true
|
||||
View: 2415
|
||||
Script: |
|
||||
.@g = getenchantgrade();
|
||||
.@r = getrefine();
|
||||
bonus bBaseAtk,10*(.@r/2);
|
||||
bonus2 bSkillAtk,"SKE_NOON_BLAST",4*(.@r/3);
|
||||
bonus2 bSkillAtk,"SKE_MIDNIGHT_KICK",4*(.@r/3);
|
||||
if (.@r>=7) {
|
||||
bonus bVariableCastrate,-15;
|
||||
if (.@r>=9) {
|
||||
bonus bShortAtkRate,10;
|
||||
if (.@r>=11) {
|
||||
bonus bFixedCast,-300;
|
||||
bonus bAtkRate,5;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (.@g>=ENCHANTGRADE_D) {
|
||||
bonus bPAtk,3;
|
||||
bonus bPow,5;
|
||||
bonus bCon,5;
|
||||
if (.@g>=ENCHANTGRADE_C) {
|
||||
bonus bShortAtkRate,10;
|
||||
if (.@g>=ENCHANTGRADE_B) {
|
||||
bonus bFixedCast,-200;
|
||||
bonus bAtkRate,5;
|
||||
if (.@g>=ENCHANTGRADE_A) {
|
||||
bonus bShortAtkRate,15;
|
||||
bonus bPAtk,5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 410000
|
||||
AegisName: Resonate_Taego_J
|
||||
Name: Ancient Resonance
|
||||
@@ -172199,6 +172418,66 @@ Body:
|
||||
Costume_Head_Mid: true
|
||||
ArmorLevel: 1
|
||||
View: 2421
|
||||
- Id: 410262
|
||||
AegisName: C_Sonic_Mini
|
||||
Name: Costume Sonic Mini Me # !todo check english name
|
||||
Type: Armor
|
||||
Locations:
|
||||
Costume_Head_Mid: true
|
||||
ArmorLevel: 1
|
||||
View: 2429
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
- Id: 410263
|
||||
AegisName: C_Super_Sonic_Mini
|
||||
Name: Costume Super Sonic Mini Me # !todo check english name
|
||||
Type: Armor
|
||||
Locations:
|
||||
Costume_Head_Mid: true
|
||||
ArmorLevel: 1
|
||||
View: 2430
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
- Id: 410264
|
||||
AegisName: C_Tails_Mini
|
||||
Name: Costume Tales Mini Me # !todo check english name
|
||||
Type: Armor
|
||||
Locations:
|
||||
Costume_Head_Mid: true
|
||||
ArmorLevel: 1
|
||||
View: 2431
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
- Id: 410265
|
||||
AegisName: C_S_Attack_Ring
|
||||
Name: Costume Power Ring Drop # !todo check english name
|
||||
Type: Armor
|
||||
Locations:
|
||||
Costume_Head_Low: true
|
||||
ArmorLevel: 1
|
||||
View: 2432
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
- Id: 410266
|
||||
AegisName: C_H_N_Hat
|
||||
Name: Costume Miss Rabbit and Little Dog
|
||||
@@ -174747,6 +175026,21 @@ Body:
|
||||
ArmorLevel: 1
|
||||
EquipLevelMin: 150
|
||||
View: 2448
|
||||
- Id: 420303
|
||||
AegisName: C_Chaos_Emerald
|
||||
Name: Costume Chaos Emerald # !todo check english name
|
||||
Type: Armor
|
||||
Locations:
|
||||
Costume_Head_Low: true
|
||||
ArmorLevel: 1
|
||||
View: 2485
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
- Id: 420304
|
||||
AegisName: aegis_420304
|
||||
Name: Costume Routier’s Night Sky # !todo check english name
|
||||
@@ -175224,6 +175518,23 @@ Body:
|
||||
Costume_Head_Low: true
|
||||
ArmorLevel: 1
|
||||
View: 2147
|
||||
- Id: 440012
|
||||
AegisName: C_Dr_Eggman_Mask
|
||||
Name: Costume Dr. Eggman Mask # !todo check english name
|
||||
Type: Armor
|
||||
Locations:
|
||||
Costume_Head_Top: true
|
||||
Costume_Head_Mid: true
|
||||
Costume_Head_Low: true
|
||||
ArmorLevel: 1
|
||||
View: 2434
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
- Id: 450000
|
||||
AegisName: IDTest_armor
|
||||
Name: IDTest armor
|
||||
@@ -189367,6 +189678,58 @@ Body:
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 470265
|
||||
AegisName: FuriousBoots
|
||||
Name: Boots of Wrath # !todo check english name
|
||||
Type: Armor
|
||||
Weight: 1500
|
||||
Defense: 30
|
||||
Slots: 1
|
||||
Locations:
|
||||
Shoes: true
|
||||
ArmorLevel: 2
|
||||
EquipLevelMin: 220
|
||||
Refineable: true
|
||||
Gradable: true
|
||||
Script: |
|
||||
.@g = getenchantgrade();
|
||||
.@r = getrefine();
|
||||
if (BaseLevel>=230) {
|
||||
bonus2 bAddClass,Class_Normal,5;
|
||||
bonus2 bMagicAddClass,Class_Normal,5;
|
||||
bonus2 bAddClass,Class_Boss,5;
|
||||
bonus2 bMagicAddClass,Class_Boss,5;
|
||||
}
|
||||
if (.@r>=7) {
|
||||
bonus bMatkRate,5;
|
||||
bonus bAtkRate,5;
|
||||
if (.@r>=9) {
|
||||
bonus bVariableCastrate,-10;
|
||||
if (.@r>=10) {
|
||||
bonus bFixedCast,-700;
|
||||
if (.@r>=11) {
|
||||
bonus2 bMagicAtkEle,Ele_All,10;
|
||||
bonus bShortAtkRate,10;
|
||||
bonus bLongAtkRate,10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (.@g>=ENCHANTGRADE_D) {
|
||||
bonus bMatkRate,5;
|
||||
bonus bAtkRate,5;
|
||||
if (.@g>=ENCHANTGRADE_C) {
|
||||
bonus bFixedCast,-300;
|
||||
if (.@g>=ENCHANTGRADE_B) {
|
||||
bonus bPAtk,5;
|
||||
bonus bSMatk,5;
|
||||
if (.@g>=ENCHANTGRADE_A) {
|
||||
bonus bPAtk,2;
|
||||
bonus bSMatk,2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 480000
|
||||
AegisName: Atker_Manteau
|
||||
Name: Attacker Booster Manteau
|
||||
@@ -195128,6 +195491,14 @@ Body:
|
||||
Costume_Garment: true
|
||||
ArmorLevel: 1
|
||||
View: 202
|
||||
- Id: 480408
|
||||
AegisName: aegis_480408
|
||||
Name: Costume Dragon Wings # !todo check english name
|
||||
Type: Armor
|
||||
Locations:
|
||||
Costume_Garment: true
|
||||
ArmorLevel: 1
|
||||
View: 204
|
||||
- Id: 490004
|
||||
AegisName: Atker_Ring
|
||||
Name: Attacker Booster Ring
|
||||
@@ -201377,6 +201748,90 @@ Body:
|
||||
bonus bDelayrate,-3;
|
||||
bonus bAtkRate,6;
|
||||
bonus bMatkRate,6;
|
||||
- Id: 490483
|
||||
AegisName: Signet_Of_Spring
|
||||
Name: "Seal of Circulation: Spring" # !todo check english name
|
||||
Type: Armor
|
||||
Weight: 500
|
||||
Defense: 10
|
||||
Slots: 1
|
||||
Locations:
|
||||
Left_Accessory: true
|
||||
ArmorLevel: 2
|
||||
EquipLevelMin: 250
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
Script: |
|
||||
bonus bShortAtkRate,10;
|
||||
bonus bVariableCastrate,-10;
|
||||
- Id: 490484
|
||||
AegisName: Signet_Of_Summer
|
||||
Name: "Seal of Circulation: Summer" # !todo check english name
|
||||
Type: Armor
|
||||
Weight: 500
|
||||
Defense: 10
|
||||
Slots: 1
|
||||
Locations:
|
||||
Left_Accessory: true
|
||||
ArmorLevel: 2
|
||||
EquipLevelMin: 250
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
Script: |
|
||||
bonus bLongAtkRate,10;
|
||||
bonus bVariableCastrate,-10;
|
||||
- Id: 490485
|
||||
AegisName: Signet_Of_Autumn
|
||||
Name: "Seal of Circulation: Autumn" # !todo check english name
|
||||
Type: Armor
|
||||
Weight: 500
|
||||
Defense: 10
|
||||
Slots: 1
|
||||
Locations:
|
||||
Left_Accessory: true
|
||||
ArmorLevel: 2
|
||||
EquipLevelMin: 250
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
Script: |
|
||||
bonus2 bMagicAtkEle,Ele_All,10;
|
||||
bonus bVariableCastrate,-10;
|
||||
- Id: 490486
|
||||
AegisName: Signet_Of_Winter
|
||||
Name: "Seal of Circulation: Winter" # !todo check english name
|
||||
Type: Armor
|
||||
Weight: 500
|
||||
Defense: 10
|
||||
Slots: 1
|
||||
Locations:
|
||||
Left_Accessory: true
|
||||
ArmorLevel: 2
|
||||
EquipLevelMin: 250
|
||||
Trade:
|
||||
NoDrop: true
|
||||
NoTrade: true
|
||||
NoCart: true
|
||||
NoGuildStorage: true
|
||||
NoMail: true
|
||||
NoAuction: true
|
||||
Script: |
|
||||
bonus bCritAtkRate,10;
|
||||
bonus bVariableCastrate,-10;
|
||||
- Id: 500000
|
||||
AegisName: IDTest_weapon
|
||||
Name: IDTest weapon
|
||||
@@ -210820,6 +211275,181 @@ Body:
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 540086
|
||||
AegisName: SaintBook_Furious
|
||||
Name: Bible of Wrath # !todo check english name
|
||||
Type: Weapon
|
||||
SubType: Book
|
||||
Weight: 1200
|
||||
Attack: 175
|
||||
MagicAttack: 145
|
||||
Range: 1
|
||||
Slots: 2
|
||||
Jobs:
|
||||
Priest: true
|
||||
Classes:
|
||||
Fourth: true
|
||||
Locations:
|
||||
Right_Hand: true
|
||||
WeaponLevel: 5
|
||||
EquipLevelMin: 205
|
||||
Refineable: true
|
||||
Gradable: true
|
||||
Script: |
|
||||
.@g = getenchantgrade();
|
||||
.@r = getrefine();
|
||||
bonus2 bSkillAtk,"CD_PETITIO",5;
|
||||
if (BaseLevel>=210) {
|
||||
bonus bAtkRate,4;
|
||||
bonus bBaseAtk,40;
|
||||
}
|
||||
if (BaseLevel>=220) {
|
||||
bonus2 bSkillAtk,"CD_PETITIO",5;
|
||||
}
|
||||
if (BaseLevel>=230) {
|
||||
bonus2 bAddSize,Size_All,10;
|
||||
bonus2 bMagicAddSize,Size_All,10;
|
||||
}
|
||||
if (.@r>=7) {
|
||||
bonus bCritAtkRate,10;
|
||||
if (.@r>=9) {
|
||||
bonus2 bSkillAtk,"CD_PETITIO",10;
|
||||
if (.@r>=10) {
|
||||
if (.@r>=11) {
|
||||
bonus2 bSkillAtk,"CD_PETITIO",10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (.@g>=ENCHANTGRADE_D) {
|
||||
bonus bCritAtkRate,10;
|
||||
if (.@g>=ENCHANTGRADE_C) {
|
||||
bonus2 bSkillAtk,"CD_PETITIO",5;
|
||||
if (.@g>=ENCHANTGRADE_B) {
|
||||
bonus2 bSkillAtk,"CD_PETITIO",10;
|
||||
if (.@g>=ENCHANTGRADE_A) {
|
||||
bonus bPAtk,3*(.@r/2);
|
||||
bonus bAtkRate,3*(.@r/2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 540087
|
||||
AegisName: SunBook_Furious
|
||||
Name: Sunshine Book of Wrath # !todo check english name
|
||||
Type: Weapon
|
||||
SubType: Book
|
||||
Weight: 1400
|
||||
Attack: 175
|
||||
Range: 1
|
||||
Slots: 2
|
||||
Jobs:
|
||||
StarGladiator: true
|
||||
Classes:
|
||||
Fourth: true
|
||||
Locations:
|
||||
Right_Hand: true
|
||||
WeaponLevel: 5
|
||||
EquipLevelMin: 205
|
||||
Refineable: true
|
||||
Gradable: true
|
||||
Script: |
|
||||
.@g = getenchantgrade();
|
||||
.@r = getrefine();
|
||||
bonus2 bSkillAtk,"SKE_NOON_BLAST",5;
|
||||
if (BaseLevel>=210) {
|
||||
bonus bAtkRate,4;
|
||||
bonus bBaseAtk,40;
|
||||
}
|
||||
if (BaseLevel>=220) {
|
||||
bonus2 bSkillAtk,"SKE_NOON_BLAST",5;
|
||||
}
|
||||
if (BaseLevel>=230) {
|
||||
bonus2 bAddSize,Size_All,10;
|
||||
}
|
||||
if (.@r>=7) {
|
||||
bonus bCritAtkRate,10;
|
||||
if (.@r>=9) {
|
||||
bonus2 bSkillAtk,"SKE_NOON_BLAST",10;
|
||||
if (.@r>=10) {
|
||||
bonus bCritical,10;
|
||||
if (.@r>=11) {
|
||||
bonus2 bSkillAtk,"SKE_NOON_BLAST",10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (.@g>=ENCHANTGRADE_D) {
|
||||
bonus bCritAtkRate,10;
|
||||
if (.@g>=ENCHANTGRADE_C) {
|
||||
bonus2 bSkillAtk,"SKE_NOON_BLAST",5;
|
||||
if (.@g>=ENCHANTGRADE_B) {
|
||||
bonus2 bSkillAtk,"SKE_NOON_BLAST",10;
|
||||
if (.@g>=ENCHANTGRADE_A) {
|
||||
bonus bPAtk,3*(.@r/2);
|
||||
bonus bAtkRate,3*(.@r/2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 540088
|
||||
AegisName: MoonBook_Furious
|
||||
Name: Furious Moon Word # !todo check english name
|
||||
Type: Weapon
|
||||
SubType: Book
|
||||
Weight: 1200
|
||||
Attack: 175
|
||||
Range: 1
|
||||
Slots: 2
|
||||
Jobs:
|
||||
StarGladiator: true
|
||||
Classes:
|
||||
Fourth: true
|
||||
Locations:
|
||||
Right_Hand: true
|
||||
WeaponLevel: 5
|
||||
EquipLevelMin: 205
|
||||
Refineable: true
|
||||
Gradable: true
|
||||
Script: |
|
||||
.@g = getenchantgrade();
|
||||
.@r = getrefine();
|
||||
bonus2 bSkillAtk,"SKE_MIDNIGHT_KICK",5;
|
||||
if (BaseLevel>=210) {
|
||||
bonus bAtkRate,4;
|
||||
bonus bBaseAtk,40;
|
||||
}
|
||||
if (BaseLevel>=220) {
|
||||
bonus2 bSkillAtk,"SKE_MIDNIGHT_KICK",5;
|
||||
}
|
||||
if (BaseLevel>=230) {
|
||||
bonus2 bAddSize,Size_All,10;
|
||||
}
|
||||
if (.@r>=7) {
|
||||
bonus bShortAtkRate,10;
|
||||
if (.@r>=9) {
|
||||
bonus2 bSkillAtk,"SKE_MIDNIGHT_KICK",10;
|
||||
if (.@r>=10) {
|
||||
bonus bVariableCastrate,-10;
|
||||
if (.@r>=11) {
|
||||
bonus2 bSkillAtk,"SKE_MIDNIGHT_KICK",10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (.@g>=ENCHANTGRADE_D) {
|
||||
bonus bShortAtkRate,10;
|
||||
if (.@g>=ENCHANTGRADE_C) {
|
||||
bonus2 bSkillAtk,"SKE_MIDNIGHT_KICK",5;
|
||||
if (.@g>=ENCHANTGRADE_B) {
|
||||
bonus2 bSkillAtk,"SKE_MIDNIGHT_KICK",10;
|
||||
if (.@g>=ENCHANTGRADE_A) {
|
||||
bonus bPAtk,3*(.@r/2);
|
||||
bonus bAtkRate,3*(.@r/2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 550001
|
||||
AegisName: Boost_Soul_Rod
|
||||
Name: Booster Rod
|
||||
@@ -215210,6 +215840,66 @@ Body:
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 550141
|
||||
AegisName: SaintWand_Furious
|
||||
Name: Furious Saint Wand # !todo check english name
|
||||
Type: Weapon
|
||||
SubType: Staff
|
||||
Weight: 1400
|
||||
Attack: 100
|
||||
MagicAttack: 180
|
||||
Range: 1
|
||||
Slots: 2
|
||||
Jobs:
|
||||
Priest: true
|
||||
Classes:
|
||||
Fourth: true
|
||||
Locations:
|
||||
Right_Hand: true
|
||||
WeaponLevel: 5
|
||||
EquipLevelMin: 205
|
||||
Refineable: true
|
||||
Gradable: true
|
||||
Script: |
|
||||
.@g = getenchantgrade();
|
||||
.@r = getrefine();
|
||||
bonus bUnbreakableWeapon;
|
||||
bonus2 bSkillAtk,"CD_FRAMEN",5;
|
||||
if (BaseLevel>=210) {
|
||||
bonus bMatkRate,4;
|
||||
bonus bMatk,40;
|
||||
}
|
||||
if (BaseLevel>=220) {
|
||||
bonus2 bSkillAtk,"CD_FRAMEN",5;
|
||||
}
|
||||
if (BaseLevel>=230) {
|
||||
bonus2 bMagicAddSize,Size_All,10;
|
||||
}
|
||||
if (.@r>=7) {
|
||||
bonus2 bMagicAtkEle,Ele_Holy,10;
|
||||
if (.@r>=9) {
|
||||
bonus2 bSkillAtk,"CD_FRAMEN",10;
|
||||
if (.@r>=10) {
|
||||
bonus bVariableCastrate,-10;
|
||||
if (.@r>=11) {
|
||||
bonus2 bSkillAtk,"CD_FRAMEN",10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (.@g>=ENCHANTGRADE_D) {
|
||||
bonus2 bMagicAtkEle,Ele_Holy,10;
|
||||
if (.@g>=ENCHANTGRADE_C) {
|
||||
bonus2 bSkillAtk,"CD_FRAMEN",5;
|
||||
if (.@g>=ENCHANTGRADE_B) {
|
||||
bonus2 bSkillAtk,"CD_FRAMEN",10;
|
||||
if (.@g>=ENCHANTGRADE_A) {
|
||||
bonus bSMatk,3*(.@r/2);
|
||||
bonus bMatkRate,3*(.@r/2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 560000
|
||||
AegisName: Boost_Knuckle
|
||||
Name: Booster Knuckles
|
||||
@@ -230740,6 +231430,122 @@ Body:
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 700100
|
||||
AegisName: StormBow_Furious
|
||||
Name: Furious Storm Bow # !todo check english name
|
||||
Type: Weapon
|
||||
SubType: Bow
|
||||
Weight: 1800
|
||||
Attack: 210
|
||||
Range: 5
|
||||
Slots: 2
|
||||
Jobs:
|
||||
Hunter: true
|
||||
Classes:
|
||||
Fourth: true
|
||||
Locations:
|
||||
Both_Hand: true
|
||||
WeaponLevel: 5
|
||||
EquipLevelMin: 205
|
||||
Refineable: true
|
||||
Gradable: true
|
||||
Script: |
|
||||
.@g = getenchantgrade();
|
||||
.@r = getrefine();
|
||||
bonus2 bSkillAtk,"WH_GALESTORM",5;
|
||||
if (BaseLevel>=210) {
|
||||
bonus bAtkRate,7;
|
||||
bonus bBaseAtk,70;
|
||||
}
|
||||
if (BaseLevel>=220) {
|
||||
bonus2 bSkillAtk,"WH_GALESTORM",5;
|
||||
}
|
||||
if (BaseLevel>=230) {
|
||||
bonus2 bAddSize,Size_All,10;
|
||||
}
|
||||
if (.@r>=7) {
|
||||
bonus bCritAtkRate,10;
|
||||
if (.@r>=9) {
|
||||
bonus2 bSkillAtk,"WH_GALESTORM",10;
|
||||
if (.@r>=10) {
|
||||
bonus bCritical,10;
|
||||
if (.@r>=11) {
|
||||
bonus2 bSkillAtk,"WH_GALESTORM",10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (.@g>=ENCHANTGRADE_D) {
|
||||
bonus bCritAtkRate,15;
|
||||
if (.@g>=ENCHANTGRADE_C) {
|
||||
bonus2 bSkillAtk,"WH_GALESTORM",5;
|
||||
if (.@g>=ENCHANTGRADE_B) {
|
||||
bonus2 bSkillAtk,"WH_GALESTORM",10;
|
||||
if (.@g>=ENCHANTGRADE_A) {
|
||||
bonus bPAtk,4*(.@r/2);
|
||||
bonus bAtkRate,4*(.@r/2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 700101
|
||||
AegisName: TornadoBow_Furious
|
||||
Name: Wrath Gale Bow # !todo check english name
|
||||
Type: Weapon
|
||||
SubType: Bow
|
||||
Weight: 1800
|
||||
Attack: 210
|
||||
Range: 5
|
||||
Slots: 2
|
||||
Jobs:
|
||||
Hunter: true
|
||||
Classes:
|
||||
Fourth: true
|
||||
Locations:
|
||||
Both_Hand: true
|
||||
WeaponLevel: 5
|
||||
EquipLevelMin: 205
|
||||
Refineable: true
|
||||
Gradable: true
|
||||
Script: |
|
||||
.@g = getenchantgrade();
|
||||
.@r = getrefine();
|
||||
bonus2 bSkillAtk,"WH_CRESCIVE_BOLT",5;
|
||||
if (BaseLevel>=210) {
|
||||
bonus bAtkRate,7;
|
||||
bonus bBaseAtk,70;
|
||||
}
|
||||
if (BaseLevel>=220) {
|
||||
bonus2 bSkillAtk,"WH_CRESCIVE_BOLT",5;
|
||||
}
|
||||
if (BaseLevel>=230) {
|
||||
bonus2 bAddSize,Size_All,10;
|
||||
}
|
||||
if (.@r>=7) {
|
||||
bonus bCritAtkRate,10;
|
||||
if (.@r>=9) {
|
||||
bonus2 bSkillAtk,"WH_CRESCIVE_BOLT",10;
|
||||
if (.@r>=10) {
|
||||
bonus bVariableCastrate,-10;
|
||||
if (.@r>=11) {
|
||||
bonus2 bSkillAtk,"WH_CRESCIVE_BOLT",10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (.@g>=ENCHANTGRADE_D) {
|
||||
bonus bCritAtkRate,15;
|
||||
if (.@g>=ENCHANTGRADE_C) {
|
||||
bonus2 bSkillAtk,"WH_CRESCIVE_BOLT",5;
|
||||
if (.@g>=ENCHANTGRADE_B) {
|
||||
bonus2 bSkillAtk,"WH_CRESCIVE_BOLT",10;
|
||||
if (.@g>=ENCHANTGRADE_A) {
|
||||
bonus bPAtk,4*(.@r/2);
|
||||
bonus bAtkRate,4*(.@r/2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
- Id: 800000
|
||||
AegisName: IDTest_gun
|
||||
Name: IDTest gun
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1962
db/re/job_exp.yml
1962
db/re/job_exp.yml
File diff suppressed because it is too large
Load Diff
@@ -8884,6 +8884,15 @@ Body:
|
||||
- Level: 50
|
||||
Vit: 1
|
||||
Pow: 1
|
||||
- Level: 51
|
||||
Crt: 1
|
||||
- Level: 52
|
||||
Pow: 1
|
||||
- Level: 54
|
||||
Pow: 1
|
||||
Crt: 1
|
||||
- Level: 55
|
||||
Sta: 1
|
||||
- Jobs:
|
||||
Meister: true
|
||||
Meister2: true
|
||||
@@ -9017,6 +9026,15 @@ Body:
|
||||
- Level: 50
|
||||
Pow: 1
|
||||
Wis: 1
|
||||
- Level: 51
|
||||
Pow: 1
|
||||
- Level: 52
|
||||
Con: 1
|
||||
- Level: 53
|
||||
Sta: 1
|
||||
Wis: 1
|
||||
- Level: 55
|
||||
Pow: 1
|
||||
- Jobs:
|
||||
Shadow_Cross: true
|
||||
MaxWeight: 32000
|
||||
@@ -9149,6 +9167,15 @@ Body:
|
||||
- Level: 50
|
||||
Pow: 1
|
||||
Crt: 1
|
||||
- Level: 51
|
||||
Pow: 1
|
||||
- Level: 53
|
||||
Con: 1
|
||||
- Level: 54
|
||||
Sta: 1
|
||||
Crt: 1
|
||||
- Level: 55
|
||||
Crt: 1
|
||||
- Jobs:
|
||||
Arch_Mage: true
|
||||
MaxWeight: 30000
|
||||
@@ -9281,6 +9308,15 @@ Body:
|
||||
- Level: 50
|
||||
Sta: 1
|
||||
Wis: 1
|
||||
- Level: 52
|
||||
Spl: 1
|
||||
- Level: 53
|
||||
Con: 1
|
||||
- Level: 54
|
||||
Sta: 1
|
||||
Wis: 1
|
||||
- Level: 55
|
||||
Spl: 1
|
||||
- Jobs:
|
||||
Cardinal: true
|
||||
MaxWeight: 30000
|
||||
@@ -9413,6 +9449,16 @@ Body:
|
||||
- Level: 50
|
||||
Spl: 1
|
||||
Crt: 1
|
||||
- Level: 51
|
||||
Spl: 1
|
||||
- Level: 52
|
||||
Pow: 1
|
||||
- Level: 53
|
||||
Sta: 1
|
||||
- Level: 54
|
||||
Wis: 1
|
||||
- Level: 55
|
||||
Crt: 1
|
||||
- Jobs:
|
||||
Windhawk: true
|
||||
Windhawk2: true
|
||||
@@ -9546,6 +9592,15 @@ Body:
|
||||
- Level: 50
|
||||
Dex: 1
|
||||
Con: 1
|
||||
- Level: 51
|
||||
Con: 1
|
||||
- Level: 52
|
||||
Pow: 1
|
||||
Con: 1
|
||||
- Level: 53
|
||||
Sta: 1
|
||||
- Level: 55
|
||||
Pow: 1
|
||||
- Jobs:
|
||||
Imperial_Guard: true
|
||||
Imperial_Guard2: true
|
||||
@@ -9680,6 +9735,15 @@ Body:
|
||||
- Level: 50
|
||||
Pow: 1
|
||||
Sta: 1
|
||||
- Level: 51
|
||||
Pow: 1
|
||||
- Level: 52
|
||||
Sta: 1
|
||||
- Level: 53
|
||||
Sta: 1
|
||||
- Level: 55
|
||||
Wis: 1
|
||||
Con: 1
|
||||
- Jobs:
|
||||
Biolo: true
|
||||
MaxWeight: 32000
|
||||
@@ -9812,6 +9876,15 @@ Body:
|
||||
- Level: 50
|
||||
Str: 1
|
||||
Crt: 1
|
||||
- Level: 51
|
||||
Crt: 1
|
||||
- Level: 52
|
||||
Sta: 1
|
||||
- Level: 53
|
||||
Pow: 1
|
||||
Crt: 1
|
||||
- Level: 55
|
||||
Con: 1
|
||||
- Jobs:
|
||||
Abyss_Chaser: true
|
||||
MaxWeight: 28000
|
||||
@@ -9944,6 +10017,15 @@ Body:
|
||||
- Level: 50
|
||||
Pow: 1
|
||||
Spl: 1
|
||||
- Level: 51
|
||||
Pow: 1
|
||||
- Level: 52
|
||||
Crt: 1
|
||||
- Level: 54
|
||||
Sta: 1
|
||||
- Level: 55
|
||||
Sta: 1
|
||||
Con: 1
|
||||
- Jobs:
|
||||
Elemental_Master: true
|
||||
MaxWeight: 30000
|
||||
@@ -10076,6 +10158,16 @@ Body:
|
||||
- Level: 50
|
||||
Wis: 1
|
||||
Spl: 1
|
||||
- Level: 51
|
||||
Spl: 1
|
||||
- Level: 52
|
||||
Sta: 1
|
||||
- Level: 53
|
||||
Sta: 1
|
||||
- Level: 54
|
||||
Wis: 1
|
||||
- Level: 55
|
||||
Spl: 1
|
||||
- Jobs:
|
||||
Inquisitor: true
|
||||
MaxWeight: 30000
|
||||
@@ -10208,6 +10300,15 @@ Body:
|
||||
- Level: 50
|
||||
Pow: 1
|
||||
Wis: 1
|
||||
- Level: 51
|
||||
Pow: 1
|
||||
- Level: 52
|
||||
Sta: 1
|
||||
- Level: 53
|
||||
Sta: 1
|
||||
- Level: 55
|
||||
Pow: 1
|
||||
Wis: 1
|
||||
- Jobs:
|
||||
Troubadour: true
|
||||
MaxWeight: 32000
|
||||
@@ -10340,6 +10441,15 @@ Body:
|
||||
Con: 1
|
||||
- Level: 50
|
||||
Dex: 1
|
||||
- Level: 51
|
||||
Con: 1
|
||||
- Level: 52
|
||||
Spl: 1
|
||||
- Level: 53
|
||||
Sta: 1
|
||||
- Level: 55
|
||||
Pow: 1
|
||||
Con: 1
|
||||
- Jobs:
|
||||
Trouvere: true
|
||||
MaxWeight: 32000
|
||||
@@ -10473,6 +10583,15 @@ Body:
|
||||
Con: 1
|
||||
- Level: 50
|
||||
Agi: 1
|
||||
- Level: 51
|
||||
Con: 1
|
||||
- Level: 52
|
||||
Sta: 1
|
||||
- Level: 53
|
||||
Spl: 1
|
||||
- Level: 55
|
||||
Pow: 1
|
||||
Con: 1
|
||||
- Jobs:
|
||||
Sky_Emperor: true
|
||||
MaxWeight: 42000
|
||||
@@ -10607,6 +10726,14 @@ Body:
|
||||
- Level: 50
|
||||
Pow: 1
|
||||
Crt: 1
|
||||
- Level: 51
|
||||
Sta: 1
|
||||
Con: 1
|
||||
- Level: 53
|
||||
Sta: 1
|
||||
- Level: 55
|
||||
Pow: 1
|
||||
Con: 1
|
||||
- Jobs:
|
||||
Soul_Ascetic: true
|
||||
MaxWeight: 42000
|
||||
@@ -10730,6 +10857,16 @@ Body:
|
||||
- Level: 50
|
||||
Wis: 1
|
||||
Spl: 1
|
||||
- Level: 51
|
||||
Spl: 1
|
||||
- Level: 52
|
||||
Con: 1
|
||||
- Level: 53
|
||||
Wis: 1
|
||||
- Level: 54
|
||||
Sta: 1
|
||||
- Level: 55
|
||||
Spl: 1
|
||||
- Jobs:
|
||||
Shinkiro: true
|
||||
MaxWeight: 45000
|
||||
@@ -10863,6 +11000,16 @@ Body:
|
||||
- Level: 50
|
||||
Pow: 1
|
||||
Crt: 1
|
||||
- Level: 51
|
||||
Crt: 1
|
||||
- Level: 52
|
||||
Con: 1
|
||||
- Level: 53
|
||||
Wis: 1
|
||||
- Level: 54
|
||||
Sta: 1
|
||||
- Level: 55
|
||||
Sta: 1
|
||||
- Jobs:
|
||||
Shiranui: true
|
||||
MaxWeight: 45000
|
||||
@@ -10985,6 +11132,15 @@ Body:
|
||||
- Level: 50
|
||||
Wis: 1
|
||||
Spl: 1
|
||||
- Level: 51
|
||||
Pow: 1
|
||||
- Level: 52
|
||||
Spl: 1
|
||||
- Level: 54
|
||||
Spl: 1
|
||||
- Level: 55
|
||||
Spl: 1
|
||||
Con: 1
|
||||
- Jobs:
|
||||
Night_Watch: true
|
||||
MaxWeight: 48000
|
||||
@@ -11112,6 +11268,15 @@ Body:
|
||||
Con: 1
|
||||
- Level: 50
|
||||
Pow: 1
|
||||
- Level: 51
|
||||
Con: 1
|
||||
- Level: 53
|
||||
Pow: 1
|
||||
Con: 1
|
||||
- Level: 54
|
||||
Wis: 1
|
||||
- Level: 55
|
||||
Pow: 1
|
||||
- Jobs:
|
||||
Hyper_Novice: true
|
||||
MaxWeight: 40000
|
||||
@@ -11248,6 +11413,15 @@ Body:
|
||||
- Level: 50
|
||||
Agi: 1
|
||||
Dex: 1
|
||||
- Level: 51
|
||||
Con: 1
|
||||
- Level: 52
|
||||
Pow: 1
|
||||
Con: 1
|
||||
- Level: 53
|
||||
Sta: 1
|
||||
- Level: 55
|
||||
Spl: 1
|
||||
- Jobs:
|
||||
Spirit_Handler: true
|
||||
MaxWeight: 42000
|
||||
@@ -11379,3 +11553,13 @@ Body:
|
||||
Crt: 1
|
||||
- Level: 50
|
||||
Pow: 1
|
||||
- Level: 51
|
||||
Con: 1
|
||||
- Level: 52
|
||||
Pow: 1
|
||||
- Level: 53
|
||||
Spl: 1
|
||||
- Level: 54
|
||||
Wis: 1
|
||||
- Level: 55
|
||||
Sta: 1
|
||||
|
||||
@@ -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
|
||||
@@ -24,9 +24,9 @@
|
||||
###########################################################################
|
||||
# - Item Item that triggers Laphine Upgrade.
|
||||
# RandomOptionGroup Name of the random option group that will be applied. (Default: none)
|
||||
# ResultRefine: Refine level after the upgrade. (Default: none)
|
||||
# - Level Refine level.
|
||||
# Rate Rate per level. The total rate is the sum of the rates. (Default: 1)
|
||||
# ResultRefine Absolute refine level after the upgrade. (Default: none)
|
||||
# ResultRefineMinimum Minimum refine level after the upgrade. (Default: none)
|
||||
# ResultRefineMaximum Maximum refine level after the upgrade. (Default: none)
|
||||
# MinimumRefine Minimum refine level of the required items. (Default: 0)
|
||||
# MaximumRefine Maximum refine level of the required items. (Default: MAX_REFINE)
|
||||
# RequiredRandomOptions How many random options have to be in the item? (Default: 0)
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
Header:
|
||||
Type: LAPHINE_UPGRADE_DB
|
||||
Version: 2
|
||||
Version: 1
|
||||
|
||||
Body:
|
||||
- Item: Ein_Ddbox
|
||||
@@ -62,8 +62,7 @@ Body:
|
||||
- Item: Ein_1HGUN
|
||||
- Item: Ein_1H_Foxtail
|
||||
- Item: Metal_Rifine_Ticket
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
ResultRefine: 7
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
- Item: Metal_Katar
|
||||
@@ -118,11 +117,8 @@ Body:
|
||||
- Item: Temporal_M_Dex
|
||||
- Item: Temporal_M_Luk
|
||||
- Item: Frozen_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
- Level: 8
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
ResultRefineMinimum: 7
|
||||
ResultRefineMaximum: 10
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 9
|
||||
CardsAllowed: true
|
||||
@@ -133,8 +129,7 @@ Body:
|
||||
- Item: Clack_Of_Servival_IL
|
||||
- Item: Herald_Of_GOD_IL
|
||||
- Item: True_Hunting_9Refine
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
ResultRefine: 9
|
||||
MaximumRefine: 8
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -157,27 +152,8 @@ Body:
|
||||
# - Item: True_Hunting_Ring2
|
||||
# Source: https://ro.gnjoy.com/news/probability/View.asp?seq=3954806
|
||||
- Item: Shadow_Refine_Hammer
|
||||
ResultRefine:
|
||||
- Level: 1
|
||||
Rate: 440
|
||||
- Level: 2
|
||||
Rate: 879
|
||||
- Level: 3
|
||||
Rate: 1703
|
||||
- Level: 4
|
||||
Rate: 3516
|
||||
- Level: 5
|
||||
Rate: 1758
|
||||
- Level: 6
|
||||
Rate: 879
|
||||
- Level: 7
|
||||
Rate: 440
|
||||
- Level: 8
|
||||
Rate: 220
|
||||
- Level: 9
|
||||
Rate: 110
|
||||
- Level: 10
|
||||
Rate: 55
|
||||
ResultRefineMinimum: 1
|
||||
ResultRefineMaximum: 10
|
||||
MaximumRefine: 9
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -1719,8 +1695,7 @@ Body:
|
||||
- Item: Lava_Leather_Suits
|
||||
- Item: Lava_Leather_Robe
|
||||
- Item: Shadow_9_Refine_Hammer
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
ResultRefine: 9
|
||||
MaximumRefine: 8
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -2708,8 +2683,7 @@ Body:
|
||||
- Item: Comp_Light_Blade
|
||||
- Item: Comp_Scalet_DragonL_Bow
|
||||
- Item: Boost_Up_1
|
||||
ResultRefine:
|
||||
- Level: 10
|
||||
ResultRefine: 10
|
||||
MaximumRefine: 9
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -2726,8 +2700,7 @@ Body:
|
||||
- Item: Defn_Muffler
|
||||
- Item: Defn_Shoes
|
||||
- Item: Boost_Up_2
|
||||
ResultRefine:
|
||||
- Level: 10
|
||||
ResultRefine: 10
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
- Item: Boost_TH_Sword
|
||||
@@ -2749,8 +2722,7 @@ Body:
|
||||
- Item: Boost_Soul_Rod
|
||||
- Item: Boost_Foxtail
|
||||
- Item: Metal_7_Ticket
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
ResultRefine: 7
|
||||
MaximumRefine: 6
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -2767,8 +2739,7 @@ Body:
|
||||
- Item: Metal_Revolver
|
||||
- Item: Metal_Huuma_Shuriken
|
||||
- Item: Noblesse_Rifine_Ticket
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
ResultRefine: 9
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
- Item: Noblesse_Breath_Armor
|
||||
@@ -2812,8 +2783,7 @@ Body:
|
||||
- Item: Noblesse_Attack_Manteau
|
||||
- Item: Noblesse_Magic_Manteau
|
||||
- Item: Imperial_Rifine_Ticket
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
ResultRefine: 9
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
- Item: Imperial_Breath_Armor
|
||||
@@ -2857,8 +2827,7 @@ Body:
|
||||
- Item: Imperial_Attack_Manteau
|
||||
- Item: Imperial_Magic_Manteau
|
||||
- Item: Grace_Rifine_Ticket
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
ResultRefine: 9
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
- Item: Grace_Breath_Armor
|
||||
@@ -3862,8 +3831,7 @@ Body:
|
||||
# - Item: S_Evilcurse_Pendant
|
||||
# - Item: S_Evilcurse_Shoes
|
||||
- Item: Illu_Enhance_Cube
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
ResultRefine: 7
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 6
|
||||
CardsAllowed: true
|
||||
@@ -3875,8 +3843,7 @@ Body:
|
||||
- Item: Illusion_Leg_A
|
||||
- Item: Illusion_Leg_B
|
||||
- Item: Auto_Enhance_Cube
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
ResultRefine: 7
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 6
|
||||
CardsAllowed: true
|
||||
@@ -3888,8 +3855,7 @@ Body:
|
||||
- Item: Auto_Leg_A
|
||||
- Item: Auto_Leg_B
|
||||
- Item: Temporal_Refine_Cube
|
||||
ResultRefine:
|
||||
- Level: 11
|
||||
ResultRefine: 11
|
||||
MaximumRefine: 10
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -3930,8 +3896,7 @@ Body:
|
||||
- Item: Modify_Dex_Boots_
|
||||
- Item: Modify_Luk_Boots_
|
||||
- Item: Geffen_Refine_Cube
|
||||
ResultRefine:
|
||||
- Level: 12
|
||||
ResultRefine: 12
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -3940,8 +3905,7 @@ Body:
|
||||
- Item: Geffen_Magic_Muffler
|
||||
- Item: Anti_Magic_Manteau
|
||||
- Item: Old_Refine_Cube
|
||||
ResultRefine:
|
||||
- Level: 12
|
||||
ResultRefine: 12
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -3960,8 +3924,7 @@ Body:
|
||||
- Item: Old_Protect_Of_Crown
|
||||
- Item: Old_Camo_RabbitHood
|
||||
- Item: Refine_Hero_Weapon
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
ResultRefine: 9
|
||||
MaximumRefine: 8
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -4002,15 +3965,13 @@ Body:
|
||||
- Item: Blue_Crystal_Staff
|
||||
- Item: Freezing_Rod
|
||||
- Item: Refine_Hero_Boots
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
ResultRefine: 9
|
||||
MaximumRefine: 8
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
- Item: Ancient_Hero_Boots
|
||||
- Item: OS_Weapon_Refine_Cube
|
||||
ResultRefine:
|
||||
- Level: 11
|
||||
ResultRefine: 11
|
||||
MaximumRefine: 10
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -4031,8 +3992,7 @@ Body:
|
||||
- Item: Kuroiro_OS
|
||||
- Item: Boost_Lance_OS
|
||||
- Item: Racecap_Refine_Cube
|
||||
ResultRefine:
|
||||
- Level: 11
|
||||
ResultRefine: 11
|
||||
MaximumRefine: 10
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -4056,8 +4016,7 @@ Body:
|
||||
- Item: Racing_C_Star
|
||||
- Item: Racing_C_Soul
|
||||
- Item: Booster_W_Up_1
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
ResultRefine: 9
|
||||
MaximumRefine: 8
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -4087,8 +4046,7 @@ Body:
|
||||
- Item: MV_B_Violin
|
||||
- Item: MV_B_Whip
|
||||
- Item: Booster_W_Up_2
|
||||
ResultRefine:
|
||||
- Level: 11
|
||||
ResultRefine: 11
|
||||
MaximumRefine: 10
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -4118,8 +4076,7 @@ Body:
|
||||
- Item: MV_B_Violin
|
||||
- Item: MV_B_Whip
|
||||
- Item: Booster_W_Up_3
|
||||
ResultRefine:
|
||||
- Level: 13
|
||||
ResultRefine: 13
|
||||
MaximumRefine: 12
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -4162,8 +4119,7 @@ Body:
|
||||
- Item: SP_B_Saber
|
||||
- Item: SI_B_Saber
|
||||
- Item: E_ILL_Up
|
||||
ResultRefine:
|
||||
- Level: 10
|
||||
ResultRefine: 10
|
||||
MaximumRefine: 9
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -4174,8 +4130,7 @@ Body:
|
||||
- Item: E_Illusion_Leg_A
|
||||
- Item: E_Illusion_Leg_B
|
||||
- Item: Auto_Armor_Refine_Cube
|
||||
ResultRefine:
|
||||
- Level: 11
|
||||
ResultRefine: 11
|
||||
MaximumRefine: 10
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -4186,8 +4141,7 @@ Body:
|
||||
- Item: Auto_Leg_A
|
||||
- Item: Auto_Leg_B
|
||||
- Item: Bio_Weapon_Refine_Cube
|
||||
ResultRefine:
|
||||
- Level: 12
|
||||
ResultRefine: 12
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -4253,11 +4207,8 @@ Body:
|
||||
# - Item: MD_Geffen_Shield
|
||||
# - Item: MD_Geffen_Shield2
|
||||
- Item: Moonlight_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
- Level: 8
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
ResultRefineMinimum: 7
|
||||
ResultRefineMaximum: 10
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 9
|
||||
CardsAllowed: true
|
||||
@@ -4272,11 +4223,8 @@ Body:
|
||||
- Item: Puente_Robe_IL
|
||||
- Item: Apple_Of_Archer_IL
|
||||
- Item: S_Moonlight_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
- Level: 11
|
||||
- Level: 12
|
||||
ResultRefineMinimum: 9
|
||||
ResultRefineMaximum: 12
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
@@ -4367,11 +4315,8 @@ Body:
|
||||
- Item: Up_OneSkyOneSun
|
||||
- Item: Up_SoulWeight
|
||||
- Item: Vampire_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
- Level: 8
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
ResultRefineMinimum: 7
|
||||
ResultRefineMaximum: 10
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 9
|
||||
CardsAllowed: true
|
||||
@@ -4383,11 +4328,8 @@ Body:
|
||||
- Item: Ghoul_Leg_IL
|
||||
- Item: Cape_Of_Ancient_Lord_IL
|
||||
- Item: S_Vampire_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
- Level: 11
|
||||
- Level: 12
|
||||
ResultRefineMinimum: 9
|
||||
ResultRefineMaximum: 12
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
@@ -4399,11 +4341,8 @@ Body:
|
||||
- Item: Ghoul_Leg_IL
|
||||
- Item: Cape_Of_Ancient_Lord_IL
|
||||
- Item: S_Frozen_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
- Level: 11
|
||||
- Level: 12
|
||||
ResultRefineMinimum: 9
|
||||
ResultRefineMaximum: 12
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
@@ -4414,11 +4353,8 @@ Body:
|
||||
- Item: Clack_Of_Servival_IL
|
||||
- Item: Herald_Of_GOD_IL
|
||||
- Item: Turtle_Is_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
- Level: 8
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
ResultRefineMinimum: 7
|
||||
ResultRefineMaximum: 10
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 9
|
||||
CardsAllowed: true
|
||||
@@ -4430,11 +4366,8 @@ Body:
|
||||
- Item: Pole_Axe_IL
|
||||
- Item: Fancy_Flower_IL
|
||||
- Item: S_Turtle_Is_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
- Level: 11
|
||||
- Level: 12
|
||||
ResultRefineMinimum: 9
|
||||
ResultRefineMaximum: 12
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
@@ -4446,11 +4379,8 @@ Body:
|
||||
- Item: Pole_Axe_IL
|
||||
- Item: Fancy_Flower_IL
|
||||
- Item: Teddy_Bear_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
- Level: 8
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
ResultRefineMinimum: 7
|
||||
ResultRefineMaximum: 10
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 9
|
||||
CardsAllowed: true
|
||||
@@ -4461,11 +4391,8 @@ Body:
|
||||
- Item: Headband_Of_Power_IL
|
||||
- Item: Boots_IL
|
||||
- Item: S_Teddy_Bear_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
- Level: 11
|
||||
- Level: 12
|
||||
ResultRefineMinimum: 9
|
||||
ResultRefineMaximum: 12
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
@@ -4476,11 +4403,8 @@ Body:
|
||||
- Item: Headband_Of_Power_IL
|
||||
- Item: Boots_IL
|
||||
- Item: Luanda_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
- Level: 8
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
ResultRefineMinimum: 7
|
||||
ResultRefineMaximum: 10
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 9
|
||||
CardsAllowed: true
|
||||
@@ -4492,11 +4416,8 @@ Body:
|
||||
- Item: Goibne_Shoulder_IL
|
||||
- Item: Goibne_Boots_IL
|
||||
- Item: S_Luanda_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
- Level: 11
|
||||
- Level: 12
|
||||
ResultRefineMinimum: 9
|
||||
ResultRefineMaximum: 12
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
@@ -4508,11 +4429,8 @@ Body:
|
||||
- Item: Goibne_Shoulder_IL
|
||||
- Item: Goibne_Boots_IL
|
||||
- Item: Labyrinth_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
- Level: 8
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
ResultRefineMinimum: 7
|
||||
ResultRefineMaximum: 10
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 9
|
||||
CardsAllowed: true
|
||||
@@ -4524,11 +4442,8 @@ Body:
|
||||
- Item: Morpheus_Hood_IL
|
||||
- Item: Morpheus_Shawl_IL
|
||||
- Item: S_Teddy_Labyrinth_IL
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
- Level: 11
|
||||
- Level: 12
|
||||
ResultRefineMinimum: 9
|
||||
ResultRefineMaximum: 12
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
@@ -4540,11 +4455,8 @@ Body:
|
||||
- Item: Morpheus_Hood_IL
|
||||
- Item: Morpheus_Shawl_IL
|
||||
- Item: Underwater_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
- Level: 8
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
ResultRefineMinimum: 7
|
||||
ResultRefineMaximum: 10
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 9
|
||||
CardsAllowed: true
|
||||
@@ -4561,11 +4473,8 @@ Body:
|
||||
- Item: Morrigane_Helm_IL
|
||||
- Item: Morrigane_Manyeau_IL
|
||||
- Item: S_Underwater_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
- Level: 11
|
||||
- Level: 12
|
||||
ResultRefineMinimum: 9
|
||||
ResultRefineMaximum: 12
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
@@ -4582,8 +4491,7 @@ Body:
|
||||
- Item: Morrigane_Helm_IL
|
||||
- Item: Morrigane_Manyeau_IL
|
||||
- Item: Circlet_Refine_Cube
|
||||
ResultRefine:
|
||||
- Level: 11
|
||||
ResultRefine: 11
|
||||
MaximumRefine: 10
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -4798,8 +4706,7 @@ Body:
|
||||
# - Item: Blue_Mental_Pendant
|
||||
# - Item: Red_Force_Pendant
|
||||
- Item: GrayWolf_7_Ticket
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
ResultRefine: 7
|
||||
MaximumRefine: 6
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -4810,8 +4717,7 @@ Body:
|
||||
- Item: Gray_W_Boots
|
||||
- Item: Gray_W_Shoes
|
||||
- Item: GrayWolf_9_Ticket
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
ResultRefine: 9
|
||||
MaximumRefine: 8
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -4986,8 +4892,7 @@ Body:
|
||||
# - Item: Vivatus_F_C_Humma
|
||||
# - Item: Vivatus_F_Humma
|
||||
- Item: Bio_Helm_Refine_Cube
|
||||
ResultRefine:
|
||||
- Level: 11
|
||||
ResultRefine: 11
|
||||
MaximumRefine: 10
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -5004,11 +4909,8 @@ Body:
|
||||
- Item: BioWeapon_Helm_SC
|
||||
- Item: BioWeapon_Helm_GC
|
||||
- Item: Twins_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 7
|
||||
- Level: 8
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
ResultRefineMinimum: 7
|
||||
ResultRefineMaximum: 10
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 9
|
||||
CardsAllowed: true
|
||||
@@ -5025,11 +4927,8 @@ Body:
|
||||
- Item: Dea_Staff_IL
|
||||
- Item: Sprint_Mail_IL
|
||||
- Item: S_Twins_Box_IL
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
- Level: 10
|
||||
- Level: 11
|
||||
- Level: 12
|
||||
ResultRefineMinimum: 9
|
||||
ResultRefineMaximum: 12
|
||||
MinimumRefine: 4
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
@@ -5246,8 +5145,7 @@ Body:
|
||||
# - Item: S_Creative_Weapon
|
||||
# - Item: S_Creative_Shield
|
||||
- Item: Snow_F_Refine
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
ResultRefine: 9
|
||||
MaximumRefine: 8
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -5258,8 +5156,7 @@ Body:
|
||||
- Item: Snowflower_Boots
|
||||
- Item: Snowflower_Shoes
|
||||
- Item: Glacier_W_Refine
|
||||
ResultRefine:
|
||||
- Level: 9
|
||||
ResultRefine: 9
|
||||
MaximumRefine: 8
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -5314,8 +5211,7 @@ Body:
|
||||
# - Item: S_M_Mammoth_Earring
|
||||
# - Item: S_M_Mammoth_Pendant
|
||||
- Item: SubjectCape_Refine_Cube
|
||||
ResultRefine:
|
||||
- Level: 12
|
||||
ResultRefine: 12
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
@@ -5323,8 +5219,7 @@ Body:
|
||||
- Item: Subject_CapeMagic_TH
|
||||
- Item: Subject_CapeMelee_TH
|
||||
- Item: GMT_Robe_Stone
|
||||
ResultRefine:
|
||||
- Level: 12
|
||||
ResultRefine: 12
|
||||
MaximumRefine: 11
|
||||
CardsAllowed: true
|
||||
TargetItems:
|
||||
|
||||
@@ -10125,6 +10125,7 @@ Body:
|
||||
FixedCastTime: 700
|
||||
CastTimeFlags:
|
||||
IgnoreDex: true
|
||||
IgnoreItemBonus: true
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
@@ -35442,7 +35443,7 @@ Body:
|
||||
Element: Water
|
||||
CastCancel: true
|
||||
CastTime: 3000
|
||||
AfterCastActDelay: 250
|
||||
AfterCastActDelay: 750
|
||||
Duration1: 4000
|
||||
Cooldown: 5000
|
||||
FixedCastTime: 1500
|
||||
@@ -35489,7 +35490,7 @@ Body:
|
||||
Element: Dark
|
||||
CastCancel: true
|
||||
CastTime: 4000
|
||||
AfterCastActDelay: 500
|
||||
AfterCastActDelay: 750
|
||||
Duration1: 4000
|
||||
Cooldown: 4000
|
||||
FixedCastTime: 1500
|
||||
@@ -35546,7 +35547,7 @@ Body:
|
||||
Area: 4
|
||||
CastCancel: true
|
||||
CastTime: 4000
|
||||
AfterCastActDelay: 500
|
||||
AfterCastActDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 1200
|
||||
@@ -35597,7 +35598,7 @@ Body:
|
||||
Description: Violent Quake Attack
|
||||
MaxLevel: 5
|
||||
Type: Magic
|
||||
TargetType: Attack
|
||||
TargetType: Ground
|
||||
Range: 9
|
||||
Hit: Single
|
||||
HitCount: 1
|
||||
@@ -35674,7 +35675,7 @@ Body:
|
||||
Element: Earth
|
||||
CastCancel: true
|
||||
CastTime: 3000
|
||||
AfterCastActDelay: 250
|
||||
AfterCastActDelay: 750
|
||||
Duration1: 4000
|
||||
Cooldown: 5000
|
||||
FixedCastTime: 1500
|
||||
@@ -35731,7 +35732,7 @@ Body:
|
||||
Area: 4
|
||||
CastCancel: true
|
||||
CastTime: 4000
|
||||
AfterCastActDelay: 500
|
||||
AfterCastActDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 1200
|
||||
@@ -35782,7 +35783,7 @@ Body:
|
||||
Description: All Bloom Attack
|
||||
MaxLevel: 5
|
||||
Type: Magic
|
||||
TargetType: Attack
|
||||
TargetType: Ground
|
||||
Range: 9
|
||||
Hit: Single
|
||||
HitCount: 1
|
||||
@@ -35802,7 +35803,7 @@ Body:
|
||||
Description: All Bloom Attack 2
|
||||
MaxLevel: 5
|
||||
Type: Magic
|
||||
TargetType: Attack
|
||||
TargetType: Ground
|
||||
Range: 9
|
||||
Hit: Single
|
||||
HitCount: 1
|
||||
@@ -35873,7 +35874,7 @@ Body:
|
||||
Description: Crystal Impact Attack
|
||||
MaxLevel: 5
|
||||
Type: Magic
|
||||
TargetType: Attack
|
||||
TargetType: Ground
|
||||
DamageFlags:
|
||||
Splash: true
|
||||
Hit: Single
|
||||
@@ -35893,7 +35894,7 @@ Body:
|
||||
Element: Wind
|
||||
CastCancel: true
|
||||
CastTime: 3000
|
||||
AfterCastActDelay: 250
|
||||
AfterCastActDelay: 750
|
||||
Duration1: 3000
|
||||
Cooldown: 5000
|
||||
FixedCastTime: 1500
|
||||
@@ -35944,7 +35945,7 @@ Body:
|
||||
Element: Fire
|
||||
CastCancel: true
|
||||
CastTime: 3000
|
||||
AfterCastActDelay: 250
|
||||
AfterCastActDelay: 750
|
||||
Duration1: 5000
|
||||
Cooldown: 5000
|
||||
FixedCastTime: 1500
|
||||
@@ -36012,7 +36013,7 @@ Body:
|
||||
Area: 5
|
||||
CastCancel: true
|
||||
CastTime: 8000
|
||||
AfterCastActDelay: 500
|
||||
AfterCastActDelay: 1000
|
||||
Duration1: 6000
|
||||
Cooldown: 6000
|
||||
FixedCastTime: 2000
|
||||
@@ -36052,7 +36053,7 @@ Body:
|
||||
Description: Astral Strike Attack
|
||||
MaxLevel: 10
|
||||
Type: Magic
|
||||
TargetType: Attack
|
||||
TargetType: Ground
|
||||
Range: 9
|
||||
Hit: Single
|
||||
HitCount: 1
|
||||
@@ -36071,11 +36072,11 @@ Body:
|
||||
CastCancel: true
|
||||
AfterCastActDelay: 300
|
||||
Duration1: 300000
|
||||
Cooldown: 300000
|
||||
Cooldown: 60000
|
||||
FixedCastTime: 4000
|
||||
Requires:
|
||||
SpCost: 60
|
||||
ApCost: 150
|
||||
ApCost: 125
|
||||
Status: Climax
|
||||
- Id: 5233
|
||||
Name: AG_ROCK_DOWN
|
||||
@@ -36241,8 +36242,8 @@ Body:
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
Splash: true
|
||||
Hit: Single
|
||||
HitCount: 1
|
||||
Hit: Multi_Hit
|
||||
HitCount: -3
|
||||
Element: Water
|
||||
SplashArea:
|
||||
- Level: 1
|
||||
@@ -37534,15 +37535,16 @@ Body:
|
||||
Range: 9
|
||||
Hit: Multi_Hit
|
||||
HitCount: -10
|
||||
Element: Holy
|
||||
Element: Neutral
|
||||
CastCancel: true
|
||||
CastTime: 3000
|
||||
AfterCastActDelay: 500
|
||||
Duration1: 12000
|
||||
Cooldown: 5000
|
||||
FixedCastTime: 2000
|
||||
Requires:
|
||||
SpCost: 150
|
||||
ApCost: 30
|
||||
ApCost: 20
|
||||
Unit:
|
||||
Id: Pneumaticus_Procella
|
||||
Range:
|
||||
@@ -38051,7 +38053,7 @@ Body:
|
||||
IgnoreDefense: true
|
||||
Range: 2
|
||||
Hit: Multi_Hit
|
||||
HitCount: 2
|
||||
HitCount: 3
|
||||
Element: Weapon
|
||||
GiveAp: 2
|
||||
CastCancel: true
|
||||
@@ -39158,11 +39160,11 @@ Body:
|
||||
CastCancel: true
|
||||
AfterCastActDelay: 500
|
||||
Duration1: 180000
|
||||
Cooldown: 180000
|
||||
Cooldown: 60000
|
||||
FixedCastTime: 1000
|
||||
Requires:
|
||||
SpCost: 300
|
||||
ApCost: 200
|
||||
ApCost: 125
|
||||
Status: CalamityGale
|
||||
- Id: 5329
|
||||
Name: WH_HAWKBOOMERANG
|
||||
@@ -39223,7 +39225,7 @@ Body:
|
||||
CastCancel: true
|
||||
CastTime: 3500
|
||||
AfterCastActDelay: 500
|
||||
Cooldown: 1200
|
||||
Cooldown: 700
|
||||
FixedCastTime: 500
|
||||
Requires:
|
||||
SpCost:
|
||||
@@ -41385,6 +41387,786 @@ Body:
|
||||
SplashArea: 6
|
||||
Requires:
|
||||
SpCost: 1
|
||||
- Id: 5449
|
||||
Name: HN_SELFSTUDY_TATICS
|
||||
Description: Self Study Tactics
|
||||
MaxLevel: 10
|
||||
- Id: 5450
|
||||
Name: HN_SELFSTUDY_SOCERY
|
||||
Description: Self Study Sorcery
|
||||
MaxLevel: 10
|
||||
- Id: 5451
|
||||
Name: HN_DOUBLEBOWLINGBASH
|
||||
Description: Double Bowling Bash
|
||||
MaxLevel: 10
|
||||
Type: Weapon
|
||||
TargetType: Attack
|
||||
Range: 2
|
||||
Hit: Multi_Hit
|
||||
HitCount: 3
|
||||
Element: Weapon
|
||||
DamageFlags:
|
||||
Splash: true
|
||||
SplashArea: 4
|
||||
Knockback: 1
|
||||
CastCancel: true
|
||||
CastTime: 300
|
||||
AfterCastActDelay: 1000
|
||||
GiveAp: 3
|
||||
Cooldown: 1000
|
||||
FixedCastTime: 200
|
||||
Duration2: 1000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 38
|
||||
- Level: 2
|
||||
Amount: 41
|
||||
- Level: 3
|
||||
Amount: 44
|
||||
- Level: 4
|
||||
Amount: 47
|
||||
- Level: 5
|
||||
Amount: 50
|
||||
- Level: 6
|
||||
Amount: 53
|
||||
- Level: 7
|
||||
Amount: 56
|
||||
- Level: 8
|
||||
Amount: 59
|
||||
- Level: 9
|
||||
Amount: 62
|
||||
- Level: 10
|
||||
Amount: 65
|
||||
Status: Hnnoweapon
|
||||
- Id: 5452
|
||||
Name: HN_MEGA_SONIC_BLOW
|
||||
Description: Mega Sonic Blow
|
||||
MaxLevel: 10
|
||||
Type: Weapon
|
||||
TargetType: Attack
|
||||
DamageFlags:
|
||||
Critical: true
|
||||
Range: 2
|
||||
Hit: Multi_Hit
|
||||
HitCount: -8
|
||||
GiveAp: 2
|
||||
Element: Weapon
|
||||
AfterCastActDelay: 500
|
||||
Cooldown: 350
|
||||
Duration2: 5000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 42
|
||||
- Level: 2
|
||||
Amount: 44
|
||||
- Level: 3
|
||||
Amount: 46
|
||||
- Level: 4
|
||||
Amount: 48
|
||||
- Level: 5
|
||||
Amount: 50
|
||||
- Level: 6
|
||||
Amount: 52
|
||||
- Level: 7
|
||||
Amount: 54
|
||||
- Level: 8
|
||||
Amount: 56
|
||||
- Level: 9
|
||||
Amount: 58
|
||||
- Level: 10
|
||||
Amount: 60
|
||||
- Id: 5453
|
||||
Name: HN_SHIELD_CHAIN_RUSH
|
||||
Description: Shield Chain Rush
|
||||
MaxLevel: 10
|
||||
Type: Weapon
|
||||
TargetType: Attack
|
||||
Range: 7
|
||||
Hit: Multi_Hit
|
||||
HitCount: -5
|
||||
DamageFlags:
|
||||
Splash: true
|
||||
SplashArea: 4
|
||||
GiveAp: 2
|
||||
Element: Weapon
|
||||
CastCancel: true
|
||||
CastTime: 1200
|
||||
AfterCastActDelay: 500
|
||||
Cooldown: 350
|
||||
FixedCastTime: 300
|
||||
Duration1: 5000
|
||||
Duration2: 1200
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 35
|
||||
- Level: 2
|
||||
Amount: 38
|
||||
- Level: 3
|
||||
Amount: 41
|
||||
- Level: 4
|
||||
Amount: 44
|
||||
- Level: 5
|
||||
Amount: 47
|
||||
- Level: 6
|
||||
Amount: 50
|
||||
- Level: 7
|
||||
Amount: 53
|
||||
- Level: 8
|
||||
Amount: 56
|
||||
- Level: 9
|
||||
Amount: 59
|
||||
- Level: 10
|
||||
Amount: 62
|
||||
State: Shield
|
||||
Status: Shieldchainrush
|
||||
- Id: 5454
|
||||
Name: HN_SPIRAL_PIERCE_MAX
|
||||
Description: Spiral Pierce Max
|
||||
MaxLevel: 10
|
||||
Type: Weapon
|
||||
TargetType: Attack
|
||||
Range: 7
|
||||
Hit: Multi_Hit
|
||||
HitCount: -5
|
||||
Element: Weapon
|
||||
GiveAp: 2
|
||||
CastCancel: true
|
||||
CastTime: 1000
|
||||
AfterCastActDelay: 500
|
||||
Cooldown: 350
|
||||
FixedCastTime: 300
|
||||
Duration2: 2000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 37
|
||||
- Level: 2
|
||||
Amount: 39
|
||||
- Level: 3
|
||||
Amount: 41
|
||||
- Level: 4
|
||||
Amount: 43
|
||||
- Level: 5
|
||||
Amount: 45
|
||||
- Level: 6
|
||||
Amount: 47
|
||||
- Level: 7
|
||||
Amount: 49
|
||||
- Level: 8
|
||||
Amount: 51
|
||||
- Level: 9
|
||||
Amount: 53
|
||||
- Level: 10
|
||||
Amount: 55
|
||||
- Id: 5455
|
||||
Name: HN_METEOR_STORM_BUSTER
|
||||
Description: Meteor Storm Buster
|
||||
MaxLevel: 10
|
||||
Type: Magic
|
||||
TargetType: Ground
|
||||
Range: -9
|
||||
Hit: Multi_Hit
|
||||
HitCount: 1
|
||||
Element: Fire
|
||||
GiveAp: 3
|
||||
DamageFlags:
|
||||
Splash: true
|
||||
SplashArea: 2
|
||||
CastCancel: true
|
||||
CastTime: 4000
|
||||
Cooldown:
|
||||
- Level: 1
|
||||
Time: 2100
|
||||
- Level: 2
|
||||
Time: 2200
|
||||
- Level: 3
|
||||
Time: 2300
|
||||
- Level: 4
|
||||
Time: 2400
|
||||
- Level: 5
|
||||
Time: 2500
|
||||
- Level: 6
|
||||
Time: 2600
|
||||
- Level: 7
|
||||
Time: 2700
|
||||
- Level: 8
|
||||
Time: 2800
|
||||
- Level: 9
|
||||
Time: 2900
|
||||
- Level: 10
|
||||
Time: 3000
|
||||
FixedCastTime: 1500
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 1000
|
||||
- Level: 2
|
||||
Time: 1000
|
||||
- Level: 3
|
||||
Time: 1500
|
||||
- Level: 4
|
||||
Time: 1500
|
||||
- Level: 5
|
||||
Time: 2000
|
||||
- Level: 6
|
||||
Time: 2000
|
||||
- Level: 7
|
||||
Time: 2000
|
||||
- Level: 8
|
||||
Time: 2500
|
||||
- Level: 9
|
||||
Time: 2500
|
||||
- Level: 10
|
||||
Time: 2500
|
||||
Duration2: 500
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 74
|
||||
- Level: 2
|
||||
Amount: 78
|
||||
- Level: 3
|
||||
Amount: 82
|
||||
- Level: 4
|
||||
Amount: 86
|
||||
- Level: 5
|
||||
Amount: 90
|
||||
- Level: 6
|
||||
Amount: 94
|
||||
- Level: 7
|
||||
Amount: 98
|
||||
- Level: 8
|
||||
Amount: 102
|
||||
- Level: 9
|
||||
Amount: 106
|
||||
- Level: 10
|
||||
Amount: 110
|
||||
Unit:
|
||||
Id: Dummyskill
|
||||
Range:
|
||||
- Level: 1
|
||||
Size: 3
|
||||
- Level: 2
|
||||
Size: 3
|
||||
- Level: 3
|
||||
Size: 3
|
||||
- Level: 4
|
||||
Size: 3
|
||||
- Level: 5
|
||||
Size: 3
|
||||
- Level: 6
|
||||
Size: 3
|
||||
- Level: 7
|
||||
Size: 3
|
||||
- Level: 8
|
||||
Size: 4
|
||||
- Level: 9
|
||||
Size: 4
|
||||
- Level: 10
|
||||
Size: 4
|
||||
Interval: 1500
|
||||
Target: Enemy
|
||||
Flag:
|
||||
PathCheck: true
|
||||
- Id: 5456
|
||||
Name: HN_JUPITEL_THUNDER_STORM
|
||||
Description: Jupitel Thunderstorm
|
||||
MaxLevel: 10
|
||||
Type: Magic
|
||||
TargetType: Attack
|
||||
Range: 11
|
||||
Hit: Multi_Hit
|
||||
HitCount: -10
|
||||
Element: Wind
|
||||
GiveAp: 2
|
||||
DamageFlags:
|
||||
Splash: true
|
||||
SplashArea:
|
||||
- Level: 1
|
||||
Area: 2
|
||||
- Level: 2
|
||||
Area: 2
|
||||
- Level: 3
|
||||
Area: 2
|
||||
- Level: 4
|
||||
Area: 2
|
||||
- Level: 5
|
||||
Area: 3
|
||||
- Level: 6
|
||||
Area: 3
|
||||
- Level: 7
|
||||
Area: 3
|
||||
- Level: 8
|
||||
Area: 3
|
||||
- Level: 9
|
||||
Area: 4
|
||||
- Level: 10
|
||||
Area: 4
|
||||
CastCancel: true
|
||||
CastTime:
|
||||
- Level: 1
|
||||
Time: 1100
|
||||
- Level: 2
|
||||
Time: 1200
|
||||
- Level: 3
|
||||
Time: 1300
|
||||
- Level: 4
|
||||
Time: 1400
|
||||
- Level: 5
|
||||
Time: 1500
|
||||
- Level: 6
|
||||
Time: 1600
|
||||
- Level: 7
|
||||
Time: 1700
|
||||
- Level: 8
|
||||
Time: 1800
|
||||
- Level: 9
|
||||
Time: 1900
|
||||
- Level: 10
|
||||
Time: 2000
|
||||
AfterCastActDelay: 500
|
||||
Cooldown: 1800
|
||||
FixedCastTime: 1000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 75
|
||||
- Level: 2
|
||||
Amount: 80
|
||||
- Level: 3
|
||||
Amount: 85
|
||||
- Level: 4
|
||||
Amount: 90
|
||||
- Level: 5
|
||||
Amount: 95
|
||||
- Level: 6
|
||||
Amount: 100
|
||||
- Level: 7
|
||||
Amount: 105
|
||||
- Level: 8
|
||||
Amount: 110
|
||||
- Level: 9
|
||||
Amount: 115
|
||||
- Level: 10
|
||||
Amount: 120
|
||||
- Id: 5457
|
||||
Name: HN_JACK_FROST_NOVA
|
||||
Description: Jack Frost Nova
|
||||
MaxLevel: 10
|
||||
Type: Magic
|
||||
TargetType: Ground
|
||||
Range: -9
|
||||
Hit: Multi_Hit
|
||||
HitCount: -2
|
||||
Element: Water
|
||||
GiveAp: 3
|
||||
DamageFlags:
|
||||
Splash: true
|
||||
SplashArea:
|
||||
- Level: 1
|
||||
Area: 3
|
||||
- Level: 2
|
||||
Area: 3
|
||||
- Level: 3
|
||||
Area: 3
|
||||
- Level: 4
|
||||
Area: 3
|
||||
- Level: 5
|
||||
Area: 3
|
||||
- Level: 6
|
||||
Area: 4
|
||||
- Level: 7
|
||||
Area: 4
|
||||
- Level: 8
|
||||
Area: 4
|
||||
- Level: 9
|
||||
Area: 4
|
||||
- Level: 10
|
||||
Area: 4
|
||||
CastCancel: true
|
||||
CastTime:
|
||||
- Level: 1
|
||||
Time: 1600
|
||||
- Level: 2
|
||||
Time: 1700
|
||||
- Level: 3
|
||||
Time: 1800
|
||||
- Level: 4
|
||||
Time: 1900
|
||||
- Level: 5
|
||||
Time: 2000
|
||||
- Level: 6
|
||||
Time: 2100
|
||||
- Level: 7
|
||||
Time: 2200
|
||||
- Level: 8
|
||||
Time: 2300
|
||||
- Level: 9
|
||||
Time: 2400
|
||||
- Level: 10
|
||||
Time: 2500
|
||||
AfterCastActDelay: 300
|
||||
Cooldown: 3000
|
||||
FixedCastTime: 1500
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 900
|
||||
- Level: 2
|
||||
Time: 1200
|
||||
- Level: 3
|
||||
Time: 1500
|
||||
- Level: 4
|
||||
Time: 1800
|
||||
- Level: 5
|
||||
Time: 2100
|
||||
- Level: 6
|
||||
Time: 2400
|
||||
- Level: 7
|
||||
Time: 2700
|
||||
- Level: 8
|
||||
Time: 3000
|
||||
- Level: 9
|
||||
Time: 3300
|
||||
- Level: 10
|
||||
Time: 3600
|
||||
Duration2: 5000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 68
|
||||
- Level: 2
|
||||
Amount: 71
|
||||
- Level: 3
|
||||
Amount: 74
|
||||
- Level: 4
|
||||
Amount: 77
|
||||
- Level: 5
|
||||
Amount: 80
|
||||
- Level: 6
|
||||
Amount: 83
|
||||
- Level: 7
|
||||
Amount: 86
|
||||
- Level: 8
|
||||
Amount: 89
|
||||
- Level: 9
|
||||
Amount: 92
|
||||
- Level: 10
|
||||
Amount: 95
|
||||
Unit:
|
||||
Id: JACK_FROST_NOVA
|
||||
Range:
|
||||
- Level: 1
|
||||
Size: 3
|
||||
- Level: 2
|
||||
Size: 3
|
||||
- Level: 3
|
||||
Size: 3
|
||||
- Level: 4
|
||||
Size: 3
|
||||
- Level: 5
|
||||
Size: 3
|
||||
- Level: 6
|
||||
Size: 4
|
||||
- Level: 7
|
||||
Size: 4
|
||||
- Level: 8
|
||||
Size: 4
|
||||
- Level: 9
|
||||
Size: 4
|
||||
- Level: 10
|
||||
Size: 4
|
||||
Interval: 300
|
||||
Target: Enemy
|
||||
Flag:
|
||||
PathCheck: true
|
||||
Status: Mistyfrost
|
||||
- Id: 5458
|
||||
Name: HN_HELLS_DRIVE
|
||||
Description: Hell's Drive
|
||||
MaxLevel: 10
|
||||
Type: Magic
|
||||
TargetType: Self
|
||||
Range: 1
|
||||
Hit: Multi_Hit
|
||||
HitCount: -3
|
||||
Element: Earth
|
||||
GiveAp: 2
|
||||
DamageFlags:
|
||||
Splash: true
|
||||
SplashArea:
|
||||
- Level: 1
|
||||
Area: 1
|
||||
- Level: 2
|
||||
Area: 1
|
||||
- Level: 3
|
||||
Area: 1
|
||||
- Level: 4
|
||||
Area: 2
|
||||
- Level: 5
|
||||
Area: 2
|
||||
- Level: 6
|
||||
Area: 2
|
||||
- Level: 7
|
||||
Area: 3
|
||||
- Level: 8
|
||||
Area: 3
|
||||
- Level: 9
|
||||
Area: 3
|
||||
- Level: 10
|
||||
Area: 4
|
||||
CastCancel: true
|
||||
CastTime: 1200
|
||||
AfterCastActDelay: 1000
|
||||
Cooldown:
|
||||
- Level: 1
|
||||
Time: 2500
|
||||
- Level: 2
|
||||
Time: 2300
|
||||
- Level: 3
|
||||
Time: 2100
|
||||
- Level: 4
|
||||
Time: 1900
|
||||
- Level: 5
|
||||
Time: 1700
|
||||
- Level: 6
|
||||
Time: 1500
|
||||
- Level: 7
|
||||
Time: 1300
|
||||
- Level: 8
|
||||
Time: 1100
|
||||
- Level: 9
|
||||
Time: 900
|
||||
- Level: 10
|
||||
Time: 700
|
||||
FixedCastTime: 1000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 88
|
||||
- Level: 2
|
||||
Amount: 91
|
||||
- Level: 3
|
||||
Amount: 94
|
||||
- Level: 4
|
||||
Amount: 97
|
||||
- Level: 5
|
||||
Amount: 100
|
||||
- Level: 6
|
||||
Amount: 103
|
||||
- Level: 7
|
||||
Amount: 106
|
||||
- Level: 8
|
||||
Amount: 109
|
||||
- Level: 9
|
||||
Amount: 112
|
||||
- Level: 10
|
||||
Amount: 115
|
||||
- Id: 5459
|
||||
Name: HN_GROUND_GRAVITATION
|
||||
Description: Ground Gravitation
|
||||
MaxLevel: 10
|
||||
Type: Magic
|
||||
TargetType: Self
|
||||
Range: -9
|
||||
Hit: Multi_Hit
|
||||
HitCount: 1
|
||||
Element: Neutral
|
||||
GiveAp: 5
|
||||
DamageFlags:
|
||||
Splash: true
|
||||
SplashArea:
|
||||
- Level: 1
|
||||
Area: 2
|
||||
- Level: 2
|
||||
Area: 2
|
||||
- Level: 3
|
||||
Area: 2
|
||||
- Level: 4
|
||||
Area: 2
|
||||
- Level: 5
|
||||
Area: 3
|
||||
- Level: 6
|
||||
Area: 3
|
||||
- Level: 7
|
||||
Area: 3
|
||||
- Level: 8
|
||||
Area: 3
|
||||
- Level: 9
|
||||
Area: 4
|
||||
- Level: 10
|
||||
Area: 4
|
||||
CastCancel: true
|
||||
CastTime:
|
||||
- Level: 1
|
||||
Time: 3000
|
||||
- Level: 2
|
||||
Time: 3000
|
||||
- Level: 3
|
||||
Time: 3000
|
||||
- Level: 4
|
||||
Time: 3200
|
||||
- Level: 5
|
||||
Time: 3500
|
||||
- Level: 6
|
||||
Time: 3800
|
||||
- Level: 7
|
||||
Time: 4100
|
||||
- Level: 8
|
||||
Time: 4400
|
||||
- Level: 9
|
||||
Time: 4700
|
||||
- Level: 10
|
||||
Time: 5000
|
||||
AfterCastActDelay:
|
||||
- Level: 1
|
||||
Time: 2000
|
||||
- Level: 2
|
||||
Time: 2000
|
||||
- Level: 3
|
||||
Time: 2000
|
||||
- Level: 4
|
||||
Time: 1800
|
||||
- Level: 5
|
||||
Time: 1800
|
||||
- Level: 6
|
||||
Time: 1800
|
||||
- Level: 7
|
||||
Time: 1600
|
||||
- Level: 8
|
||||
Time: 1400
|
||||
- Level: 9
|
||||
Time: 1200
|
||||
- Level: 10
|
||||
Time: 1000
|
||||
Cooldown: 5000
|
||||
FixedCastTime: 1500
|
||||
Duration1: 5000
|
||||
Duration2: 5000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 93
|
||||
- Level: 2
|
||||
Amount: 96
|
||||
- Level: 3
|
||||
Amount: 99
|
||||
- Level: 4
|
||||
Amount: 102
|
||||
- Level: 5
|
||||
Amount: 105
|
||||
- Level: 6
|
||||
Amount: 108
|
||||
- Level: 7
|
||||
Amount: 111
|
||||
- Level: 8
|
||||
Amount: 114
|
||||
- Level: 9
|
||||
Amount: 117
|
||||
- Level: 10
|
||||
Amount: 120
|
||||
Unit:
|
||||
Id: GROUND_GRAVITATION
|
||||
Range:
|
||||
- Level: 1
|
||||
Size: 2
|
||||
- Level: 2
|
||||
Size: 2
|
||||
- Level: 3
|
||||
Size: 2
|
||||
- Level: 4
|
||||
Size: 2
|
||||
- Level: 5
|
||||
Size: 3
|
||||
- Level: 6
|
||||
Size: 3
|
||||
- Level: 7
|
||||
Size: 3
|
||||
- Level: 8
|
||||
Size: 3
|
||||
- Level: 9
|
||||
Size: 4
|
||||
- Level: 10
|
||||
Size: 4
|
||||
Interval: 500
|
||||
Target: Enemy
|
||||
Flag:
|
||||
PathCheck: true
|
||||
Status: Groundgravity
|
||||
- Id: 5460
|
||||
Name: HN_NAPALM_VULCAN_STRIKE
|
||||
Description: Napalm Vulcan Strike
|
||||
MaxLevel: 10
|
||||
Type: Magic
|
||||
TargetType: Attack
|
||||
Range: 11
|
||||
Hit: Multi_Hit
|
||||
HitCount: -7
|
||||
Element: Ghost
|
||||
GiveAp: 2
|
||||
DamageFlags:
|
||||
Splash: true
|
||||
SplashArea: 3
|
||||
CastCancel: true
|
||||
CastTime: 500
|
||||
Cooldown: 300
|
||||
AfterCastActDelay: 500
|
||||
FixedCastTime: 1000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 48
|
||||
- Level: 2
|
||||
Amount: 51
|
||||
- Level: 3
|
||||
Amount: 54
|
||||
- Level: 4
|
||||
Amount: 57
|
||||
- Level: 5
|
||||
Amount: 60
|
||||
- Level: 6
|
||||
Amount: 63
|
||||
- Level: 7
|
||||
Amount: 66
|
||||
- Level: 8
|
||||
Amount: 69
|
||||
- Level: 9
|
||||
Amount: 72
|
||||
- Level: 10
|
||||
Amount: 75
|
||||
- Id: 5461
|
||||
Name: HN_BREAKINGLIMIT
|
||||
Description: Breaking Limit
|
||||
MaxLevel: 1
|
||||
Type: Magic
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Duration1: 300000
|
||||
Cooldown: 60000
|
||||
CastCancel: true
|
||||
FixedCastTime: 1000
|
||||
Requires:
|
||||
SpCost: 150
|
||||
ApCost: 150
|
||||
Status: Breakinglimit
|
||||
- Id: 5462
|
||||
Name: HN_RULEBREAK
|
||||
Description: Rule Break
|
||||
MaxLevel: 1
|
||||
Type: Magic
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Duration1: 300000
|
||||
Cooldown: 60000
|
||||
CastCancel: true
|
||||
FixedCastTime: 1000
|
||||
Requires:
|
||||
SpCost: 150
|
||||
ApCost: 150
|
||||
Status: Rulebreak
|
||||
- Id: 6001
|
||||
Name: DK_DRAGONIC_BREATH
|
||||
Description: Dragonic Breath
|
||||
|
||||
@@ -7864,3 +7864,89 @@ Body:
|
||||
Royal_Guard: true
|
||||
Royal_Guard_T: true
|
||||
Imperial_Guard: true
|
||||
- Job: Hyper_Novice
|
||||
Inherit:
|
||||
Novice: true
|
||||
Supernovice: true
|
||||
Super_Novice_E: true
|
||||
Tree:
|
||||
- Name: HN_SELFSTUDY_TATICS
|
||||
MaxLevel: 10
|
||||
- Name: HN_SELFSTUDY_SOCERY
|
||||
MaxLevel: 10
|
||||
- Name: HN_DOUBLEBOWLINGBASH
|
||||
MaxLevel: 10
|
||||
Requires:
|
||||
- Name: HN_SELFSTUDY_TATICS
|
||||
Level: 5
|
||||
- Name: HN_SHIELD_CHAIN_RUSH
|
||||
MaxLevel: 10
|
||||
Requires:
|
||||
- Name: HN_SELFSTUDY_TATICS
|
||||
Level: 5
|
||||
- Name: HN_METEOR_STORM_BUSTER
|
||||
MaxLevel: 10
|
||||
Requires:
|
||||
- Name: HN_SELFSTUDY_SOCERY
|
||||
Level: 5
|
||||
- Name: HN_JUPITEL_THUNDER_STORM
|
||||
MaxLevel: 10
|
||||
Requires:
|
||||
- Name: HN_SELFSTUDY_SOCERY
|
||||
Level: 5
|
||||
- Name: HN_JACK_FROST_NOVA
|
||||
MaxLevel: 10
|
||||
Requires:
|
||||
- Name: HN_SELFSTUDY_SOCERY
|
||||
Level: 5
|
||||
- Name: HN_HELLS_DRIVE
|
||||
MaxLevel: 10
|
||||
Requires:
|
||||
- Name: HN_SELFSTUDY_SOCERY
|
||||
Level: 5
|
||||
- Name: HN_MEGA_SONIC_BLOW
|
||||
MaxLevel: 10
|
||||
Requires:
|
||||
- Name: HN_DOUBLEBOWLINGBASH
|
||||
Level: 7
|
||||
- Name: HN_SPIRAL_PIERCE_MAX
|
||||
MaxLevel: 10
|
||||
Requires:
|
||||
- Name: HN_SHIELD_CHAIN_RUSH
|
||||
Level: 7
|
||||
- Name: HN_GROUND_GRAVITATION
|
||||
MaxLevel: 10
|
||||
Requires:
|
||||
- Name: HN_SELFSTUDY_SOCERY
|
||||
Level: 5
|
||||
- Name: HN_NAPALM_VULCAN_STRIKE
|
||||
MaxLevel: 10
|
||||
Requires:
|
||||
- Name: HN_SELFSTUDY_SOCERY
|
||||
Level: 5
|
||||
- Name: HN_BREAKINGLIMIT
|
||||
MaxLevel: 1
|
||||
Requires:
|
||||
- Name: HN_DOUBLEBOWLINGBASH
|
||||
Level: 7
|
||||
- Name: HN_MEGA_SONIC_BLOW
|
||||
Level: 7
|
||||
- Name: HN_SHIELD_CHAIN_RUSH
|
||||
Level: 7
|
||||
- Name: HN_SPIRAL_PIERCE_MAX
|
||||
Level: 7
|
||||
- Name: HN_RULEBREAK
|
||||
MaxLevel: 1
|
||||
Requires:
|
||||
- Name: HN_METEOR_STORM_BUSTER
|
||||
Level: 5
|
||||
- Name: HN_JUPITEL_THUNDER_STORM
|
||||
Level: 5
|
||||
- Name: HN_JACK_FROST_NOVA
|
||||
Level: 5
|
||||
- Name: HN_HELLS_DRIVE
|
||||
Level: 5
|
||||
- Name: HN_GROUND_GRAVITATION
|
||||
Level: 5
|
||||
- Name: HN_NAPALM_VULCAN_STRIKE
|
||||
Level: 5
|
||||
|
||||
@@ -582,3 +582,33 @@ Body:
|
||||
- Level: 250
|
||||
Points: 4099
|
||||
TraitPoints: 190
|
||||
- Level: 251
|
||||
Points: 4099
|
||||
TraitPoints: 193
|
||||
- Level: 252
|
||||
Points: 4099
|
||||
TraitPoints: 196
|
||||
- Level: 253
|
||||
Points: 4099
|
||||
TraitPoints: 199
|
||||
- Level: 254
|
||||
Points: 4099
|
||||
TraitPoints: 202
|
||||
- Level: 255
|
||||
Points: 4099
|
||||
TraitPoints: 209
|
||||
- Level: 256
|
||||
Points: 4099
|
||||
TraitPoints: 212
|
||||
- Level: 257
|
||||
Points: 4099
|
||||
TraitPoints: 215
|
||||
- Level: 258
|
||||
Points: 4099
|
||||
TraitPoints: 218
|
||||
- Level: 259
|
||||
Points: 4099
|
||||
TraitPoints: 221
|
||||
- Level: 260
|
||||
Points: 4099
|
||||
TraitPoints: 228
|
||||
|
||||
@@ -7890,6 +7890,8 @@ Body:
|
||||
BlEffect: true
|
||||
DisplayPc: true
|
||||
SendVal1: true
|
||||
NoDispell: true
|
||||
NoClearance: true
|
||||
- Status: Shadow_Weapon
|
||||
Icon: EFST_SHADOW_WEAPON
|
||||
DurationLookup: SHC_ENCHANTING_SHADOW
|
||||
@@ -8753,3 +8755,31 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
- Status: Hnnoweapon
|
||||
Icon: EFST_NOEQUIPWEAPON
|
||||
DurationLookup: HN_DOUBLEBOWLINGBASH
|
||||
- Status: Shieldchainrush
|
||||
Icon: EFST_SHIELDCHAINRUSH
|
||||
DurationLookup: HN_SHIELD_CHAIN_RUSH
|
||||
CalcFlags:
|
||||
Speed: true
|
||||
Flags:
|
||||
BossResist: true
|
||||
- Status: Mistyfrost
|
||||
Icon: EFST_MISTYFROST
|
||||
DurationLookup: HN_JACK_FROST_NOVA
|
||||
Flags:
|
||||
BossResist: true
|
||||
- Status: Groundgravity
|
||||
Icon: EFST_GROUNDGRAVITY
|
||||
DurationLookup: HN_GROUND_GRAVITATION
|
||||
CalcFlags:
|
||||
Speed: true
|
||||
Flags:
|
||||
BossResist: true
|
||||
- Status: Breakinglimit
|
||||
Icon: EFST_BREAKINGLIMIT
|
||||
DurationLookup: HN_BREAKINGLIMIT
|
||||
- Status: Rulebreak
|
||||
Icon: EFST_RULEBREAK
|
||||
DurationLookup: HN_RULEBREAK
|
||||
|
||||
@@ -11412,3 +11412,37 @@ Example:
|
||||
autoloot(10000); // 100.00%
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*setdialogalign(<align>);
|
||||
|
||||
Set vertical or horizontal align in NPC dialog.
|
||||
Valid aligns:
|
||||
- horizontal align:
|
||||
DIALOG_ALIGN_LEFT
|
||||
DIALOG_ALIGN_CENTER
|
||||
DIALOG_ALIGN_RIGHT
|
||||
|
||||
- vertical align:
|
||||
DIALOG_ALIGN_TOP
|
||||
DIALOG_ALIGN_MIDDLE
|
||||
DIALOG_ALIGN_BOTTOM
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*setdialogsize(<width>, <height>)
|
||||
|
||||
Set size for NPC dialog in pixels.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*setdialogpos(<x>, <y>)
|
||||
|
||||
Set position for NPC dialog in pixels.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*setdialogpospercent(<x>, <y>)
|
||||
|
||||
Set position for NPC dialog in screen size percent.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
@@ -412,6 +412,20 @@ Body:
|
||||
- Index: 3
|
||||
Item: IllusionStone
|
||||
Amount: 120
|
||||
- Name: resonance_stone_barter
|
||||
Items:
|
||||
- Index: 0
|
||||
Item: ILL_Piece_A
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: IllusionStone
|
||||
Amount: 10
|
||||
- Index: 1
|
||||
Item: ILL_Piece_B
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: IllusionStone
|
||||
Amount: 10
|
||||
- Name: barter_ill_moonlight
|
||||
Items:
|
||||
- Index: 0
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
//= 1.5 Added Illusion of Luanda enchanter [Capuche]
|
||||
//= 1.6 Added Illusion of Underwater exchange [Capuche]
|
||||
//= 1.7 Added Illusion of Twins enchanter [Capuche]
|
||||
//= 1.8 Added Illusion Merchant [Haydrich]
|
||||
//============================================================
|
||||
|
||||
//============================================================
|
||||
@@ -846,3 +847,40 @@ OnInit:
|
||||
setunitdata .@npc_id, UNPC_HAIRCOLOR, 6;
|
||||
end;
|
||||
}
|
||||
|
||||
//============================================================
|
||||
//= Illusion Merchant
|
||||
//============================================================
|
||||
- marketshop market_resonance_stone -1,100003:2000000:99999,100004:2000000:99999
|
||||
prontera,88,113,5 script Illusion Merchant#0829 HIDDEN_NPC,{
|
||||
mes "[Illusion Merchant]";
|
||||
mes "I'm selling two random optional weapon grant scrolls that I made myself. You can choose the payment method you like.";
|
||||
next;
|
||||
switch( select( "Purchase with Zeny.", "Purchase with Illusion Stones" )) {
|
||||
case 1:
|
||||
mes "[Illusion Merchant]";
|
||||
mes "I hope you like it.";
|
||||
close2;
|
||||
callshop "market_resonance_stone";
|
||||
end;
|
||||
case 2:
|
||||
mes "[Illusion Merchant]";
|
||||
mes "I hope you like it.";
|
||||
close2;
|
||||
callshop "resonance_stone_barter";
|
||||
end;
|
||||
}
|
||||
OnInit:
|
||||
.@npc_id = getnpcid(0);
|
||||
setunitdata .@npc_id,UNPC_CLASS, JOB_MAGE_HIGH;
|
||||
setunitdata .@npc_id,UNPC_SEX,SEX_FEMALE;
|
||||
setunitdata .@npc_id,UNPC_HEADTOP,142;
|
||||
setunitdata .@npc_id,UNPC_HEADMIDDLE,92;
|
||||
setunitdata .@npc_id,UNPC_HAIRSTYLE,2;
|
||||
setunitdata .@npc_id,UNPC_HAIRCOLOR,2;
|
||||
|
||||
// Restock
|
||||
npcshopupdate "market_resonance_stone",100003,2000000,99999;
|
||||
npcshopupdate "market_resonance_stone",100004,2000000,99999;
|
||||
end;
|
||||
}
|
||||
|
||||
@@ -9,35 +9,66 @@
|
||||
// monsters killed. [Capuche]
|
||||
//============================================================
|
||||
|
||||
lhz_dun_n,0,0 monster Eremes Guille 3208,20,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Magaleta Sorin 3209,10,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Catherine Cheiron 3210,15,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Shecil Damon 3211,20,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Harword Alt-Eisen 3212,10,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Seyren Windsor 3213,10,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Eremes Guille 3208,20,5000,0,"lhz_dun_n::OnRegularDead3208"
|
||||
lhz_dun_n,0,0 monster Magaleta Sorin 3209,10,5000,0,"lhz_dun_n::OnRegularDead3209"
|
||||
lhz_dun_n,0,0 monster Catherine Cheiron 3210,15,5000,0,"lhz_dun_n::OnRegularDead3210"
|
||||
lhz_dun_n,0,0 monster Shecil Damon 3211,20,5000,0,"lhz_dun_n::OnRegularDead3211"
|
||||
lhz_dun_n,0,0 monster Harword Alt-Eisen 3212,10,5000,0,"lhz_dun_n::OnRegularDead3212"
|
||||
lhz_dun_n,0,0 monster Seyren Windsor 3213,10,5000,0,"lhz_dun_n::OnRegularDead3213"
|
||||
|
||||
lhz_dun_n,0,0 monster Randel Lawrence 3226,10,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Flamel Emule 3227,10,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Celia Alde 3228,15,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Chen Liu 3229,15,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Gertie Wie 3230,15,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Alphoccio Basil 3231,10,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Trentini 3232,10,5000,0,"lhz_dun_n::OnRegularDead"
|
||||
lhz_dun_n,0,0 monster Randel Lawrence 3226,10,5000,0,"lhz_dun_n::OnRegularDead3226"
|
||||
lhz_dun_n,0,0 monster Flamel Emule 3227,10,5000,0,"lhz_dun_n::OnRegularDead3227"
|
||||
lhz_dun_n,0,0 monster Celia Alde 3228,15,5000,0,"lhz_dun_n::OnRegularDead3228"
|
||||
lhz_dun_n,0,0 monster Chen Liu 3229,15,5000,0,"lhz_dun_n::OnRegularDead3229"
|
||||
lhz_dun_n,0,0 monster Gertie Wie 3230,15,5000,0,"lhz_dun_n::OnRegularDead3230"
|
||||
lhz_dun_n,0,0 monster Alphoccio Basil 3231,10,5000,0,"lhz_dun_n::OnRegularDead3231"
|
||||
lhz_dun_n,0,0 monster Trentini 3232,10,5000,0,"lhz_dun_n::OnRegularDead3232"
|
||||
|
||||
lhz_dun_n,0,0,0 script lhz_dun_n -1,{
|
||||
end;
|
||||
OnRegularDead:
|
||||
.@mob_id = killedrid;
|
||||
OnRegularDead3208: callsub( S_Regular, 3208 );
|
||||
OnRegularDead3209: callsub( S_Regular, 3209 );
|
||||
OnRegularDead3210: callsub( S_Regular, 3210 );
|
||||
OnRegularDead3211: callsub( S_Regular, 3211 );
|
||||
OnRegularDead3212: callsub( S_Regular, 3212 );
|
||||
OnRegularDead3213: callsub( S_Regular, 3213 );
|
||||
|
||||
OnRegularDead3226: callsub( S_Regular, 3226 );
|
||||
OnRegularDead3227: callsub( S_Regular, 3227 );
|
||||
OnRegularDead3228: callsub( S_Regular, 3228 );
|
||||
OnRegularDead3229: callsub( S_Regular, 3229 );
|
||||
OnRegularDead3230: callsub( S_Regular, 3230 );
|
||||
OnRegularDead3231: callsub( S_Regular, 3231 );
|
||||
OnRegularDead3232: callsub( S_Regular, 3232 );
|
||||
|
||||
S_Regular:
|
||||
.@mob_id = getarg(0);
|
||||
if (.lhz_dun_n[.@mob_id] < 110 && .lhz_dun_n_boss == 0) {
|
||||
.lhz_dun_n[.@mob_id]++;
|
||||
if (.lhz_dun_n[.@mob_id] == 110) {
|
||||
.@mini_boss = .@mob_id + 6 + (.@mob_id > 3213); // mini boss version ID: regular ID +6 for non-transcendent, +7 for others
|
||||
monster "lhz_dun_n",0,0,"--en--",.@mini_boss,1, "lhz_dun_n::OnMiniDead";
|
||||
.@mini_boss = .@mob_id + 6 + (.@mob_id > 3219); // mini boss version ID: regular ID +6 for non-transcendent, +7 for others
|
||||
monster "lhz_dun_n",0,0,"--en--",.@mini_boss,1, "lhz_dun_n::OnMiniDead" + .@mini_boss;
|
||||
}
|
||||
}
|
||||
end;
|
||||
OnMiniDead:
|
||||
.@mob_id = killedrid;
|
||||
|
||||
OnMiniDead3214: callsub( S_Mini, 3214 );
|
||||
OnMiniDead3215: callsub( S_Mini, 3215 );
|
||||
OnMiniDead3216: callsub( S_Mini, 3216 );
|
||||
OnMiniDead3217: callsub( S_Mini, 3217 );
|
||||
OnMiniDead3218: callsub( S_Mini, 3218 );
|
||||
OnMiniDead3219: callsub( S_Mini, 3219 );
|
||||
|
||||
OnMiniDead3233: callsub( S_Mini, 3233 );
|
||||
OnMiniDead3234: callsub( S_Mini, 3234 );
|
||||
OnMiniDead3235: callsub( S_Mini, 3235 );
|
||||
OnMiniDead3236: callsub( S_Mini, 3236 );
|
||||
OnMiniDead3237: callsub( S_Mini, 3237 );
|
||||
OnMiniDead3238: callsub( S_Mini, 3238 );
|
||||
OnMiniDead3239: callsub( S_Mini, 3239 );
|
||||
|
||||
S_Mini:
|
||||
.@mob_id = getarg(0);
|
||||
if (.lhz_dun_n[.@mob_id] < 4 && .lhz_dun_n_boss == 0) {
|
||||
.lhz_dun_n[.@mob_id]++;
|
||||
.@regular = .@mob_id - 6 - (.@mob_id > 3219);
|
||||
@@ -53,11 +84,7 @@ OnMiniDead:
|
||||
monster "lhz_dun_n",140,230,"--en--", F_Rand(3220,3221,3222,3223,3224,3225,3240,3241,3242,3243,3244,3245,3246),1, "lhz_dun_n::OnMyMVPDead";
|
||||
mapannounce "lhz_dun_n", "Voice of Reaper: It's been a while.", bc_map; // unknown message
|
||||
.lhz_dun_n_boss = 1;
|
||||
for ( .@i = 0; .@i < 13; ++.@i ) {
|
||||
.@regular = .@mini_boss_list[.@i] - 6 - (.@mini_boss_list[.@i] > 3219);
|
||||
.lhz_dun_n[.@regular] = 0;
|
||||
.lhz_dun_n[.@mini_boss_list[.@i]] = 0;
|
||||
}
|
||||
deletearray .lhz_dun_n;
|
||||
}
|
||||
}
|
||||
end;
|
||||
|
||||
@@ -69,52 +69,6 @@ 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, min(0, num - str.length()), padding);
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -350,7 +350,7 @@ int logclif_parse_reqauth_sso( int fd, login_session_data& sd, char* ip ){
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( RFIFOREST( fd ) < p->packetLength ){
|
||||
if( static_cast<decltype(p->packetLength)>(RFIFOREST(fd)) < p->packetLength){
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -580,6 +580,12 @@ int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 d
|
||||
ratio += 50;
|
||||
#else
|
||||
damage += (int64)(damage * 50 / 100);
|
||||
#endif
|
||||
if (tsc->getSCE(SC_MISTYFROST))
|
||||
#ifdef RENEWAL
|
||||
ratio += 15;
|
||||
#else
|
||||
damage += (int64)(damage * 15 / 100);
|
||||
#endif
|
||||
break;
|
||||
case ELE_EARTH:
|
||||
@@ -1377,7 +1383,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
|
||||
unit_set_walkdelay(target, gettick(), delay, 1);
|
||||
#ifdef RENEWAL
|
||||
if (sc->getSCE(SC_SHRINK))
|
||||
sc_start(src, target, SC_STUN, 50, skill_lv, skill_get_time2(skill_id, skill_lv));
|
||||
sc_start(target, src, SC_STUN, 50, skill_lv, skill_get_time2(skill_id, skill_lv));
|
||||
#else
|
||||
if (sc->getSCE(SC_SHRINK) && rnd() % 100 < 5 * sce->val1)
|
||||
skill_blown(target, src, skill_get_blewcount(CR_SHRINK, 1), -1, BLOWN_NONE);
|
||||
@@ -1569,6 +1575,11 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
damage *= 4;
|
||||
#endif
|
||||
|
||||
if (tsc->getSCE(SC_GROUNDGRAVITY) && flag&(BF_MAGIC|BF_WEAPON))
|
||||
damage += damage * 15 / 100;
|
||||
if (tsc->getSCE(SC_SHIELDCHAINRUSH))
|
||||
damage += damage / 10;
|
||||
|
||||
if (tsc->getSCE(SC_AETERNA) && skill_id != PF_SOULBURN) {
|
||||
if (src->type != BL_MER || !skill_id)
|
||||
damage *= 2; // Lex Aeterna only doubles damage of regular attacks from mercenaries
|
||||
@@ -1831,6 +1842,36 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
status_change* sc = status_get_sc(src);
|
||||
|
||||
if (sc && sc->count) {
|
||||
if (sc->getSCE(SC_BREAKINGLIMIT)) {
|
||||
switch (skill_id) {
|
||||
case HN_SHIELD_CHAIN_RUSH:
|
||||
case HN_DOUBLEBOWLINGBASH:
|
||||
damage += damage * 70 / 100;
|
||||
break;
|
||||
case HN_MEGA_SONIC_BLOW:
|
||||
case HN_SPIRAL_PIERCE_MAX:
|
||||
damage *= 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (sc->getSCE(SC_RULEBREAK)) {
|
||||
switch (skill_id) {
|
||||
case HN_METEOR_STORM_BUSTER:
|
||||
case HN_GROUND_GRAVITATION:
|
||||
damage += damage / 2;
|
||||
break;
|
||||
case HN_JUPITEL_THUNDER_STORM:
|
||||
case HN_JACK_FROST_NOVA:
|
||||
case HN_HELLS_DRIVE:
|
||||
damage += damage * 70 / 100;
|
||||
break;
|
||||
case HN_NAPALM_VULCAN_STRIKE:
|
||||
damage += damage * 40 / 100;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( sc->getSCE(SC_INVINCIBLE) && !sc->getSCE(SC_INVINCIBLEOFF) )
|
||||
damage += damage * 75 / 100;
|
||||
|
||||
@@ -5538,7 +5579,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case SHC_SAVAGE_IMPACT:
|
||||
skillratio += -100 + 90 * skill_lv + 5 * sstatus->pow;
|
||||
skillratio += -100 + 105 * skill_lv + 5 * sstatus->pow;
|
||||
|
||||
if( sc != nullptr && sc->getSCE( SC_SHADOW_EXCEED ) ){
|
||||
skillratio += 20 * skill_lv + 3 * sstatus->pow; // !TODO: check POW ratio
|
||||
@@ -5547,19 +5588,19 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case SHC_ETERNAL_SLASH:
|
||||
skillratio += -100 + 265 * skill_lv + 2 * sstatus->pow;
|
||||
skillratio += -100 + 300 * skill_lv + 2 * sstatus->pow;
|
||||
|
||||
if( sc != nullptr && sc->getSCE( SC_SHADOW_EXCEED ) ){
|
||||
skillratio += 100 * skill_lv + sstatus->pow;
|
||||
skillratio += 120 * skill_lv + sstatus->pow;
|
||||
}
|
||||
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case SHC_SHADOW_STAB:
|
||||
skillratio += -100 + 350 * skill_lv + 5 * sstatus->pow;
|
||||
skillratio += -100 + 550 * skill_lv + 5 * sstatus->pow;
|
||||
|
||||
if( sc && sc->getSCE( SC_CLOAKINGEXCEED ) ){
|
||||
skillratio += 50 * skill_lv + 2 * sstatus->pow;
|
||||
skillratio += 100 * skill_lv + 2 * sstatus->pow;
|
||||
}
|
||||
|
||||
RE_LVL_DMOD(100);
|
||||
@@ -5649,17 +5690,19 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case WH_GALESTORM:
|
||||
skillratio += -100 + 1000 * skill_lv + 10 * sstatus->con;
|
||||
skillratio += -100 + 1350 * skill_lv;
|
||||
skillratio += 10 * sstatus->con;
|
||||
RE_LVL_DMOD(100);
|
||||
if (sc && sc->getSCE(SC_CALAMITYGALE) && (tstatus->race == RC_BRUTE || tstatus->race == RC_FISH))
|
||||
skillratio += skillratio * 50 / 100;
|
||||
break;
|
||||
case WH_CRESCIVE_BOLT:
|
||||
skillratio += -100 + 400 + 900 * skill_lv + 5 * sstatus->con;
|
||||
skillratio += -100 + 500 + 1300 * skill_lv;
|
||||
skillratio += 5 * sstatus->con;
|
||||
RE_LVL_DMOD(100);
|
||||
if (sc) {
|
||||
if (sc->getSCE(SC_CRESCIVEBOLT))
|
||||
skillratio += skillratio * (10 * sc->getSCE(SC_CRESCIVEBOLT)->val1) / 100;
|
||||
skillratio += skillratio * (20 * sc->getSCE(SC_CRESCIVEBOLT)->val1) / 100;
|
||||
|
||||
if (sc->getSCE(SC_CALAMITYGALE)) {
|
||||
skillratio += skillratio * 20 / 100;
|
||||
@@ -5775,6 +5818,43 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
||||
case ABR_INFINITY_BUSTER:// Need official formula.
|
||||
skillratio += -100 + 50000;
|
||||
break;
|
||||
case HN_SPIRAL_PIERCE_MAX:
|
||||
skillratio += -100 + 700 + 800 * skill_lv;
|
||||
skillratio += pc_checkskill(sd, HN_SELFSTUDY_TATICS) * 3 * skill_lv;
|
||||
skillratio += 5 * sstatus->pow;
|
||||
switch (status_get_size(target)){
|
||||
case SZ_SMALL:
|
||||
skillratio = skillratio * 150 / 100;
|
||||
break;
|
||||
case SZ_MEDIUM:
|
||||
skillratio = skillratio * 130 / 100;
|
||||
break;
|
||||
case SZ_BIG:
|
||||
skillratio = skillratio * 120 / 100;
|
||||
break;
|
||||
}
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case HN_SHIELD_CHAIN_RUSH:
|
||||
skillratio += -100 + 700 + 500 * skill_lv;
|
||||
skillratio += pc_checkskill(sd, HN_SELFSTUDY_TATICS) * 3 * skill_lv;
|
||||
skillratio += 5 * sstatus->pow;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case HN_MEGA_SONIC_BLOW:
|
||||
skillratio += -100 + 900 + 750 * skill_lv;
|
||||
skillratio += pc_checkskill(sd, HN_SELFSTUDY_TATICS) * 5 * skill_lv;
|
||||
skillratio += 5 * sstatus->pow;
|
||||
if (status_get_hp(target) < status_get_max_hp(target) / 2)
|
||||
skillratio *= 2;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case HN_DOUBLEBOWLINGBASH:
|
||||
skillratio += -100 + 200 + 300 * skill_lv;
|
||||
skillratio += pc_checkskill(sd, HN_SELFSTUDY_TATICS) * 3 * skill_lv;
|
||||
skillratio += 5 * sstatus->pow;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
}
|
||||
return skillratio;
|
||||
}
|
||||
@@ -6715,10 +6795,6 @@ static struct Damage initialize_weapon_data(struct block_list *src, struct block
|
||||
if (sc && sc->getSCE(SC_E_SLASH_COUNT))
|
||||
wd.div_ = sc->getSCE(SC_E_SLASH_COUNT)->val1;
|
||||
break;
|
||||
case SHC_SHADOW_STAB:
|
||||
if (wd.miscflag == 2)
|
||||
wd.div_ = 3;
|
||||
break;
|
||||
case SHC_IMPACT_CRATER:
|
||||
if (sc && sc->getSCE(SC_ROLLINGCUTTER))
|
||||
wd.div_ = sc->getSCE(SC_ROLLINGCUTTER)->val1;
|
||||
@@ -6742,6 +6818,10 @@ static struct Damage initialize_weapon_data(struct block_list *src, struct block
|
||||
if (sc && sc->getSCE(SC_RESEARCHREPORT))
|
||||
wd.div_ = 4;
|
||||
break;
|
||||
case HN_DOUBLEBOWLINGBASH:
|
||||
if (wd.miscflag > 1)
|
||||
wd.div_ += min(4, wd.miscflag);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
bool is_long = false;
|
||||
@@ -7922,7 +8002,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
||||
}
|
||||
break;
|
||||
case AG_SOUL_VC_STRIKE:
|
||||
skillratio += -100 + 250 * skill_lv + 3 * sstatus->spl;
|
||||
skillratio += -100 + 300 * skill_lv + 3 * sstatus->spl;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case AG_STRANTUM_TREMOR:
|
||||
@@ -7981,7 +8061,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case AG_ROCK_DOWN:
|
||||
skillratio += -100 + 1200 * skill_lv + 5 * sstatus->spl;
|
||||
skillratio += -100 + 1550 * skill_lv + 5 * sstatus->spl;
|
||||
|
||||
if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){
|
||||
skillratio += 300 * skill_lv;
|
||||
@@ -7990,7 +8070,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case AG_STORM_CANNON:
|
||||
skillratio += -100 + 1200 * skill_lv + 5 * sstatus->spl;
|
||||
skillratio += -100 + 1550 * skill_lv + 5 * sstatus->spl;
|
||||
|
||||
if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){
|
||||
skillratio += 300 * skill_lv;
|
||||
@@ -7999,15 +8079,15 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case AG_CRIMSON_ARROW:
|
||||
skillratio += -100 + 350 * skill_lv + 5 * sstatus->spl;
|
||||
skillratio += -100 + 400 * skill_lv + 5 * sstatus->spl;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case AG_CRIMSON_ARROW_ATK:
|
||||
skillratio += -100 + 700 * skill_lv + 5 * sstatus->spl;
|
||||
skillratio += -100 + 750 * skill_lv + 5 * sstatus->spl;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case AG_FROZEN_SLASH:
|
||||
skillratio += -100 + 400 + 900 * skill_lv + 5 * sstatus->spl;
|
||||
skillratio += -100 + 450 + 950 * skill_lv + 5 * sstatus->spl;
|
||||
|
||||
if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){
|
||||
skillratio += 150 + 350 * skill_lv;
|
||||
@@ -8052,9 +8132,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case CD_FRAMEN:
|
||||
skillratio += -100 + (950 + 5 * pc_checkskill(sd,CD_FIDUS_ANIMUS)) * skill_lv + 5 * sstatus->spl;
|
||||
skillratio += -100 + 1300 * skill_lv;
|
||||
skillratio += 5 * pc_checkskill(sd,CD_FIDUS_ANIMUS) * skill_lv;
|
||||
skillratio += 5 * sstatus->spl;
|
||||
if (tstatus->race == RC_UNDEAD || tstatus->race == RC_DEMON)
|
||||
skillratio += 100 * skill_lv;
|
||||
skillratio += 50 * skill_lv;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case AG_DESTRUCTIVE_HURRICANE_CLIMAX:// Is this affected by BaseLV and SPL too??? [Rytech]
|
||||
@@ -8177,6 +8259,57 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
||||
case NPC_RAINOFMETEOR:
|
||||
skillratio += 350; // unknown ratio
|
||||
break;
|
||||
case HN_NAPALM_VULCAN_STRIKE:
|
||||
skillratio += -100 + 350 + 650 * skill_lv;
|
||||
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 4 * skill_lv;
|
||||
skillratio += 5 * sstatus->spl;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case HN_JUPITEL_THUNDER_STORM:
|
||||
skillratio += -100 + 1800 * skill_lv;
|
||||
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 3 * skill_lv;
|
||||
skillratio += 5 * sstatus->spl;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case HN_HELLS_DRIVE:
|
||||
skillratio += -100 + 1500 + 700 * skill_lv;
|
||||
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 4 * skill_lv;
|
||||
skillratio += 5 * sstatus->spl;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case HN_GROUND_GRAVITATION:
|
||||
if (mflag & SKILL_ALTDMG_FLAG) {
|
||||
skillratio += -100 + 3000 + 1500 * skill_lv;
|
||||
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 4 * skill_lv;
|
||||
ad.div_ = -2;
|
||||
} else {
|
||||
skillratio += -100 + 800 + 700 * skill_lv;
|
||||
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 2 * skill_lv;
|
||||
}
|
||||
skillratio += 5 * sstatus->spl;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case HN_JACK_FROST_NOVA:
|
||||
if (mflag & SKILL_ALTDMG_FLAG) {
|
||||
skillratio += -100 + 200 * skill_lv;
|
||||
} else {
|
||||
skillratio += -100 + 400 + 500 * skill_lv;
|
||||
}
|
||||
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 3 * skill_lv;
|
||||
skillratio += 5 * sstatus->spl;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case HN_METEOR_STORM_BUSTER:
|
||||
if (mflag & SKILL_ALTDMG_FLAG) {
|
||||
skillratio += -100 + 300 + 160 * skill_lv * 2;
|
||||
ad.div_ = -3;
|
||||
} else {
|
||||
skillratio += -100 + 450 + 160 * skill_lv;
|
||||
}
|
||||
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 5 * skill_lv;
|
||||
skillratio += 5 * sstatus->spl;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
}
|
||||
|
||||
if (sc) {// Insignia's increases the damage of offensive magic by a fixed percentage depending on the element.
|
||||
|
||||
@@ -23568,31 +23568,20 @@ void clif_parse_laphine_upgrade( int fd, map_session_data* sd ){
|
||||
}
|
||||
|
||||
// Change the refine rate if needed
|
||||
if (!upgrade->resultRefine.empty()) {
|
||||
int total_rate = 0;
|
||||
|
||||
// Get the total rate (sum of the rate)
|
||||
for (const auto& it : upgrade->resultRefine) {
|
||||
if (it.second == 0) // Level removed on import
|
||||
continue;
|
||||
total_rate += it.second;
|
||||
}
|
||||
|
||||
if (total_rate > 0) {
|
||||
int chance = rnd_value(1, total_rate);
|
||||
int sum_rate = 0;
|
||||
|
||||
for (const auto& it : upgrade->resultRefine) {
|
||||
if (it.second == 0)
|
||||
continue;
|
||||
sum_rate += it.second;
|
||||
|
||||
if (chance <= sum_rate) {
|
||||
item->refine = cap_value(it.first, 0, MAX_REFINE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( upgrade->resultRefine > 0 ){
|
||||
// Absolute refine level change
|
||||
item->refine = max( item->refine, upgrade->resultRefine );
|
||||
}else if( upgrade->resultRefineMaximum > 0 ){
|
||||
// If a minimum is specified it can also downgrade
|
||||
if( upgrade->resultRefineMinimum ){
|
||||
item->refine = static_cast<uint8>( rnd_value<uint16>( upgrade->resultRefineMinimum, upgrade->resultRefineMaximum ) );
|
||||
}else{
|
||||
// Otherwise it can only be upgraded until the maximum, but not downgraded
|
||||
item->refine = static_cast<uint8>( rnd_value<uint16>( item->refine, upgrade->resultRefineMaximum ) );
|
||||
}
|
||||
}else if( upgrade->resultRefineMinimum > 0 ){
|
||||
// No maximum has been specified, so it can be anything between minimum and MAX_REFINE
|
||||
item->refine = static_cast<uint8>( rnd_value<uint16>( upgrade->resultRefineMinimum, MAX_REFINE ) );
|
||||
}
|
||||
|
||||
// Log retrieving the item again -> with the new options
|
||||
@@ -25198,6 +25187,57 @@ void clif_parse_reset_skill( int fd, map_session_data* sd ){
|
||||
#endif
|
||||
}
|
||||
|
||||
void clif_set_dialog_align(map_session_data& sd, int npcid, e_say_dialog_align align)
|
||||
{
|
||||
#if PACKETVER_MAIN_NUM >= 20210203 || PACKETVER_RE_NUM >= 20211103 || PACKETVER_ZERO_NUM >= 20221024
|
||||
PACKET_ZC_DIALOG_TEXT_ALIGN p = {};
|
||||
|
||||
p.PacketType = HEADER_ZC_DIALOG_TEXT_ALIGN;
|
||||
p.align = align;
|
||||
|
||||
clif_send( &p, sizeof( p ), &sd.bl, SELF );
|
||||
#endif // PACKETVER_MAIN_NUM >= 20210203 || PACKETVER_RE_NUM >= 20211103 || PACKETVER_ZERO_NUM >= 20221024
|
||||
}
|
||||
|
||||
void clif_set_npc_window_size(map_session_data& sd, int width, int height)
|
||||
{
|
||||
#if PACKETVER_MAIN_NUM >= 20220504
|
||||
PACKET_ZC_DIALOG_WINDOW_SIZE p = {};
|
||||
|
||||
p.PacketType = HEADER_ZC_DIALOG_WINDOW_SIZE;
|
||||
p.width = width;
|
||||
p.height = height;
|
||||
|
||||
clif_send( &p, sizeof( p ), &sd.bl, SELF );
|
||||
#endif // PACKETVER_MAIN_NUM >= 20220504
|
||||
}
|
||||
|
||||
void clif_set_npc_window_pos(map_session_data& sd, int x, int y)
|
||||
{
|
||||
#if PACKETVER_MAIN_NUM >= 20220504
|
||||
PACKET_ZC_DIALOG_WINDOW_POS p = {};
|
||||
|
||||
p.PacketType = HEADER_ZC_DIALOG_WINDOW_POS;
|
||||
p.x = x;
|
||||
p.y = y;
|
||||
|
||||
clif_send( &p, sizeof( p ), &sd.bl, SELF );
|
||||
#endif // PACKETVER_MAIN_NUM >= 20220504
|
||||
}
|
||||
|
||||
void clif_set_npc_window_pos_percent(map_session_data& sd, int x, int y)
|
||||
{
|
||||
#if PACKETVER_MAIN_NUM >= 20220504
|
||||
PACKET_ZC_DIALOG_WINDOW_POS2 p = {};
|
||||
|
||||
p.PacketType = HEADER_ZC_DIALOG_WINDOW_POS2;
|
||||
p.x = x;
|
||||
p.y = y;
|
||||
|
||||
clif_send( &p, sizeof( p ), &sd.bl, SELF );
|
||||
#endif // PACKETVER_MAIN_NUM >= 20220504
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* Main client packet processing function
|
||||
*------------------------------------------*/
|
||||
|
||||
@@ -1254,4 +1254,9 @@ void clif_macro_reporter_status(map_session_data &sd, e_macro_report_status styp
|
||||
|
||||
void clif_dynamicnpc_result( map_session_data& sd, e_dynamicnpc_result result );
|
||||
|
||||
void clif_set_dialog_align(map_session_data& sd, int npcid, e_say_dialog_align align);
|
||||
void clif_set_npc_window_size(map_session_data& sd, int width, int height);
|
||||
void clif_set_npc_window_pos(map_session_data& sd, int x, int y);
|
||||
void clif_set_npc_window_pos_percent(map_session_data& sd, int x, int y);
|
||||
|
||||
#endif /* CLIF_HPP */
|
||||
|
||||
@@ -1793,30 +1793,60 @@ uint64 LaphineUpgradeDatabase::parseBodyNode( const ryml::NodeRef& node ){
|
||||
}
|
||||
}
|
||||
|
||||
if (this->nodeExists(node, "ResultRefine")) {
|
||||
const auto& refineNode = node["ResultRefine"];
|
||||
if( this->nodeExists( node, "ResultRefine" ) ){
|
||||
uint16 refine;
|
||||
|
||||
for (const auto& refineit : refineNode) {
|
||||
uint16 level;
|
||||
if( !this->asUInt16( node, "ResultRefine", refine ) ){
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!this->asUInt16Rate(refineit, "Level", level, MAX_REFINE))
|
||||
return 0;
|
||||
if( refine > MAX_REFINE ){
|
||||
this->invalidWarning( node["ResultRefine"], "Result refine %hu is too high, capping to MAX_REFINE...\n", refine );
|
||||
refine = MAX_REFINE;
|
||||
}
|
||||
|
||||
bool refine_exists = util::umap_find(entry->resultRefine, level) != nullptr;
|
||||
entry->resultRefine = refine;
|
||||
}else{
|
||||
if( !exists ){
|
||||
entry->resultRefine = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (this->nodeExists(refineit, "Rate")) {
|
||||
uint16 rate;
|
||||
if( this->nodeExists( node, "ResultRefineMinimum" ) ){
|
||||
uint16 refine;
|
||||
|
||||
if (!this->asUInt16Rate(refineit, "Rate", rate)) {
|
||||
return 0;
|
||||
}
|
||||
entry->resultRefine[level] = rate;
|
||||
}
|
||||
else {
|
||||
if (!refine_exists) {
|
||||
entry->resultRefine[level] = 1;
|
||||
}
|
||||
}
|
||||
if( !this->asUInt16( node, "ResultRefineMinimum", refine ) ){
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( refine > MAX_REFINE ){
|
||||
this->invalidWarning( node["ResultRefineMinimum"], "Result refine minimum %hu is too high, capping to MAX_REFINE...\n", refine );
|
||||
refine = MAX_REFINE;
|
||||
}
|
||||
|
||||
entry->resultRefineMinimum = refine;
|
||||
}else{
|
||||
if( !exists ){
|
||||
entry->resultRefineMinimum = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if( this->nodeExists( node, "ResultRefineMaximum" ) ){
|
||||
uint16 refine;
|
||||
|
||||
if( !this->asUInt16( node, "ResultRefineMaximum", refine ) ){
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( refine > MAX_REFINE ){
|
||||
this->invalidWarning( node["ResultRefineMaximum"], "Result refine maximum %hu is too high, capping to MAX_REFINE...\n", refine );
|
||||
refine = MAX_REFINE;
|
||||
}
|
||||
|
||||
entry->resultRefineMaximum = refine;
|
||||
}else{
|
||||
if( !exists ){
|
||||
entry->resultRefineMaximum = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4260,7 +4290,7 @@ uint64 RandomOptionDatabase::parseBodyNode(const ryml::NodeRef& node) {
|
||||
return 0;
|
||||
|
||||
if (randopt->script) {
|
||||
aFree(randopt->script);
|
||||
script_free_code( randopt->script );
|
||||
randopt->script = nullptr;
|
||||
}
|
||||
|
||||
|
||||
@@ -2417,12 +2417,14 @@ struct s_laphine_upgrade{
|
||||
uint16 requiredRandomOptions;
|
||||
bool cardsAllowed;
|
||||
std::shared_ptr<s_random_opt_group> randomOptionGroup;
|
||||
std::unordered_map<uint16, uint16> resultRefine;
|
||||
uint16 resultRefine;
|
||||
uint16 resultRefineMinimum;
|
||||
uint16 resultRefineMaximum;
|
||||
};
|
||||
|
||||
class LaphineUpgradeDatabase : public TypesafeYamlDatabase<t_itemid, s_laphine_upgrade>{
|
||||
public:
|
||||
LaphineUpgradeDatabase() : TypesafeYamlDatabase( "LAPHINE_UPGRADE_DB", 2 ){
|
||||
LaphineUpgradeDatabase() : TypesafeYamlDatabase( "LAPHINE_UPGRADE_DB", 1 ){
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -349,7 +349,7 @@ int map_addblock(struct block_list* bl)
|
||||
|
||||
struct map_data *mapdata = map_getmapdata(m);
|
||||
|
||||
if (mapdata->cell == nullptr) // Player warped to a freed map. Stop them!
|
||||
if (mapdata == nullptr || mapdata->cell == nullptr) // Player warped to a freed map. Stop them!
|
||||
return 1;
|
||||
|
||||
if( x < 0 || x >= mapdata->xs || y < 0 || y >= mapdata->ys )
|
||||
@@ -402,6 +402,8 @@ int map_delblock(struct block_list* bl)
|
||||
|
||||
struct map_data *mapdata = map_getmapdata(bl->m);
|
||||
|
||||
nullpo_ret(mapdata);
|
||||
|
||||
pos = bl->x/BLOCK_SIZE+(bl->y/BLOCK_SIZE)*mapdata->bxs;
|
||||
|
||||
if (bl->next)
|
||||
@@ -409,8 +411,10 @@ int map_delblock(struct block_list* bl)
|
||||
if (bl->prev == &bl_head) {
|
||||
//Since the head of the list, update the block_list map of []
|
||||
if (bl->type == BL_MOB) {
|
||||
nullpo_ret(mapdata->block_mob);
|
||||
mapdata->block_mob[pos] = bl->next;
|
||||
} else {
|
||||
nullpo_ret(mapdata->block);
|
||||
mapdata->block[pos] = bl->next;
|
||||
}
|
||||
} else {
|
||||
@@ -434,6 +438,8 @@ int map_delblock(struct block_list* bl)
|
||||
*/
|
||||
int map_moveblock(struct block_list *bl, int x1, int y1, t_tick tick)
|
||||
{
|
||||
nullpo_ret(bl);
|
||||
|
||||
int x0 = bl->x, y0 = bl->y;
|
||||
status_change *sc = NULL;
|
||||
int moveblock = ( x0/BLOCK_SIZE != x1/BLOCK_SIZE || y0/BLOCK_SIZE != y1/BLOCK_SIZE);
|
||||
|
||||
@@ -66,7 +66,7 @@ void map_msg_reload(void);
|
||||
#define NATURAL_HEAL_INTERVAL 500
|
||||
#define MIN_FLOORITEM 2
|
||||
#define MAX_FLOORITEM START_ACCOUNT_NUM
|
||||
#define MAX_LEVEL 250
|
||||
#define MAX_LEVEL 260
|
||||
#define MAX_DROP_PER_MAP 48
|
||||
#define MAX_IGNORE_LIST 20 // official is 14
|
||||
#define MAX_VENDING 12
|
||||
@@ -861,6 +861,18 @@ struct map_data_other_server {
|
||||
uint16 port;
|
||||
};
|
||||
|
||||
/**
|
||||
* align for packet ZC_SAY_DIALOG_ALIGN
|
||||
**/
|
||||
enum e_say_dialog_align : uint8 {
|
||||
DIALOG_ALIGN_LEFT = 0,
|
||||
DIALOG_ALIGN_RIGHT = 1,
|
||||
DIALOG_ALIGN_CENTER = 2,
|
||||
DIALOG_ALIGN_TOP = 3,
|
||||
DIALOG_ALIGN_MIDDLE = 4,
|
||||
DIALOG_ALIGN_BOTTOM = 5
|
||||
};
|
||||
|
||||
struct inter_conf {
|
||||
uint32 start_status_points;
|
||||
bool emblem_woe_change;
|
||||
|
||||
@@ -5159,10 +5159,7 @@ static const char* npc_parse_function(char* w1, char* w2, char* w3, char* w4, co
|
||||
struct script_code *oldscript = (struct script_code*)db_data2ptr(&old_data);
|
||||
|
||||
ShowInfo("npc_parse_function: Overwriting user function [%s] (%s:%d)\n", w3, filepath, strline(buffer,start-buffer));
|
||||
script_stop_scriptinstances(oldscript);
|
||||
script_free_vars(oldscript->local.vars);
|
||||
aFree(oldscript->script_buf);
|
||||
aFree(oldscript);
|
||||
script_free_code( oldscript );
|
||||
}
|
||||
|
||||
return end;
|
||||
|
||||
@@ -2472,8 +2472,7 @@ void script_warning(const char* src, const char* file, int start_line, const cha
|
||||
/*==========================================
|
||||
* Analysis of the script
|
||||
*------------------------------------------*/
|
||||
struct script_code* parse_script(const char *src,const char *file,int line,int options)
|
||||
{
|
||||
struct script_code* parse_script_( const char *src, const char *file, int line, int options, const char* src_file, int src_line, const char* src_func ){
|
||||
const char *p,*tmpp;
|
||||
int i;
|
||||
struct script_code* code = NULL;
|
||||
@@ -2653,7 +2652,7 @@ struct script_code* parse_script(const char *src,const char *file,int line,int o
|
||||
}
|
||||
#endif
|
||||
|
||||
CREATE(code,struct script_code,1);
|
||||
CREATE2( code, struct script_code, 1, src_file, src_line, src_func );
|
||||
code->script_buf = script_buf;
|
||||
code->script_size = script_size;
|
||||
code->local.vars = NULL;
|
||||
@@ -27124,6 +27123,106 @@ BUILDIN_FUNC(opentips){
|
||||
#endif
|
||||
}
|
||||
|
||||
BUILDIN_FUNC(setdialogalign){
|
||||
map_session_data *sd;
|
||||
|
||||
if ( !script_rid2sd(sd) ) {
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
int32 align = script_getnum( st, 2 );
|
||||
|
||||
if( align < DIALOG_ALIGN_LEFT || align > DIALOG_ALIGN_BOTTOM ){
|
||||
ShowError( "buildin_setdialogalign: Unknown align value %d\n", align );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
clif_set_dialog_align( *sd, st->oid, static_cast<e_say_dialog_align>( align ) );
|
||||
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
BUILDIN_FUNC(setdialogsize){
|
||||
map_session_data *sd;
|
||||
|
||||
if ( !script_rid2sd(sd) ) {
|
||||
script_pushint(st, 0);
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
int32 x = script_getnum( st, 2 );
|
||||
|
||||
if( x < 0 || x > INT16_MAX ){
|
||||
ShowError( "buildin_setdialogsize: x size %d is out of range [0,%d]\n", x, INT16_MAX );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
int32 y = script_getnum( st, 3 );
|
||||
|
||||
if( y < 0 || y > INT16_MAX ){
|
||||
ShowError( "buildin_setdialogsize: y size %d is out of range [0,%d]\n", y, INT16_MAX );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
clif_set_npc_window_size( *sd, x, y );
|
||||
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
BUILDIN_FUNC(setdialogpos){
|
||||
map_session_data *sd;
|
||||
|
||||
if ( !script_rid2sd(sd) ) {
|
||||
script_pushint(st, 0);
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
int32 x = script_getnum( st, 2 );
|
||||
|
||||
if( x < 0 || x > INT16_MAX ){
|
||||
ShowError( "buildin_setdialogpos: x position %d is out of range [0,%d]\n", x, INT16_MAX );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
int32 y = script_getnum( st, 3 );
|
||||
|
||||
if( y < 0 || y > INT16_MAX ){
|
||||
ShowError( "buildin_setdialogpos: y position %d is out of range [0,%d]\n", y, INT16_MAX );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
clif_set_npc_window_pos( *sd, x, y );
|
||||
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
BUILDIN_FUNC(setdialogpospercent){
|
||||
map_session_data *sd;
|
||||
|
||||
if ( !script_rid2sd(sd) ) {
|
||||
script_pushint(st, 0);
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
int32 x = script_getnum( st, 2 );
|
||||
|
||||
if( x < 0 || x > 100 ){
|
||||
ShowError( "buildin_setdialogpospercent: x rate %d is out of range [0,100]\n", x );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
int32 y = script_getnum( st, 3 );
|
||||
|
||||
if( y < 0 || y > 100 ){
|
||||
ShowError( "buildin_setdialogpospercent: y rate %d is out of range [0,100]\n", y );
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
clif_set_npc_window_pos_percent( *sd, x, y );
|
||||
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
#include <custom/script.inc>
|
||||
|
||||
// declarations that were supposed to be exported from npc_chat.cpp
|
||||
@@ -27884,6 +27983,11 @@ struct script_function buildin_func[] = {
|
||||
BUILDIN_DEF(autoloot,"??"),
|
||||
BUILDIN_DEF(opentips, "i?"),
|
||||
|
||||
BUILDIN_DEF(setdialogalign, "i"),
|
||||
BUILDIN_DEF(setdialogsize, "ii"),
|
||||
BUILDIN_DEF(setdialogpos, "ii"),
|
||||
BUILDIN_DEF(setdialogpospercent, "ii"),
|
||||
|
||||
#include <custom/script_def.inc>
|
||||
|
||||
{NULL,NULL,NULL},
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <common/database.hpp>
|
||||
#include <common/cbasetypes.hpp>
|
||||
#include <common/db.hpp>
|
||||
#include <common/malloc.hpp>
|
||||
#include <common/mmo.hpp>
|
||||
#include <common/timer.hpp>
|
||||
|
||||
@@ -2120,8 +2121,13 @@ enum e_hat_effects : int16{
|
||||
HAT_EF_AUTUMN_FULL_MOON,
|
||||
HAT_EF_NIFLHEIM_NIGHT_SKY,
|
||||
HAT_EF_C_ROS2023_CAPE_1,
|
||||
HAT_EF_BLACK_THUNDER_,
|
||||
HAT_EF_C_ROS2023_CAPE_2,
|
||||
HAT_EF_C_15TH_NOV_HELMET,
|
||||
HAT_EF_COSMIC_CONNECTION,
|
||||
HAT_EF_C_BABY_GLOOM,
|
||||
HAT_EF_WINTERNIGHTBELLS,
|
||||
HAT_EF_NIGHTSKYOFRUTIE,
|
||||
HAT_EF_MAX
|
||||
};
|
||||
|
||||
@@ -2205,7 +2211,8 @@ void script_error(const char* src, const char* file, int start_line, const char*
|
||||
void script_warning(const char* src, const char* file, int start_line, const char* error_msg, const char* error_pos);
|
||||
|
||||
bool is_number(const char *p);
|
||||
struct script_code* parse_script(const char* src,const char* file,int line,int options);
|
||||
struct script_code* parse_script_( const char *src, const char *file, int line, int options, const char* src_file, int src_line, const char* src_func );
|
||||
#define parse_script( src, file, line, options ) parse_script_( ( src ), ( file ), ( line ), ( options ), ALC_MARK )
|
||||
void run_script(struct script_code *rootscript,int pos,int rid,int oid);
|
||||
|
||||
bool set_reg_num(struct script_state* st, map_session_data* sd, int64 num, const char* name, const int64 value, struct reg_db *ref);
|
||||
|
||||
@@ -1894,6 +1894,12 @@
|
||||
export_constant(SC_RUSH_QUAKE1);
|
||||
export_constant(SC_RUSH_QUAKE2);
|
||||
export_constant(SC_G_LIFEPOTION);
|
||||
export_constant(SC_HNNOWEAPON);
|
||||
export_constant(SC_SHIELDCHAINRUSH);
|
||||
export_constant(SC_MISTYFROST);
|
||||
export_constant(SC_GROUNDGRAVITY);
|
||||
export_constant(SC_BREAKINGLIMIT);
|
||||
export_constant(SC_RULEBREAK);
|
||||
|
||||
#ifdef RENEWAL
|
||||
export_constant(SC_EXTREMITYFIST2);
|
||||
@@ -9616,8 +9622,13 @@
|
||||
export_constant(HAT_EF_AUTUMN_FULL_MOON);
|
||||
export_constant(HAT_EF_NIFLHEIM_NIGHT_SKY);
|
||||
export_constant(HAT_EF_C_ROS2023_CAPE_1);
|
||||
export_constant(HAT_EF_BLACK_THUNDER_);
|
||||
export_constant(HAT_EF_C_ROS2023_CAPE_2);
|
||||
export_constant(HAT_EF_C_15TH_NOV_HELMET);
|
||||
export_constant(HAT_EF_COSMIC_CONNECTION);
|
||||
export_constant(HAT_EF_C_BABY_GLOOM);
|
||||
export_constant(HAT_EF_WINTERNIGHTBELLS);
|
||||
export_constant(HAT_EF_NIGHTSKYOFRUTIE);
|
||||
|
||||
/* pet catch */
|
||||
export_constant(PET_CATCH_UNIVERSAL);
|
||||
@@ -10065,12 +10076,21 @@
|
||||
export_constant(UNT_LIGHTNING_LAND);
|
||||
export_constant(UNT_VENOM_SWAMP);
|
||||
export_constant(UNT_CONFLAGRATION);
|
||||
|
||||
export_constant(UNT_DEEPBLINDTRAP);
|
||||
export_constant(UNT_SOLIDTRAP);
|
||||
export_constant(UNT_SWIFTTRAP);
|
||||
export_constant(UNT_FLAMETRAP);
|
||||
|
||||
export_constant(UNT_TWINKLING_GALAXY);
|
||||
export_constant(UNT_STAR_CANNON);
|
||||
export_constant(UNT_GRENADES_DROPPING);
|
||||
export_constant(UNT_FUUMASHOUAKU);
|
||||
export_constant(UNT_MISSION_BOMBARD);
|
||||
export_constant(UNT_TOTEM_OF_TUTELARY);
|
||||
export_constant(UNT_HYUN_ROKS_BREEZE);
|
||||
export_constant(UNT_SHINKIROU);
|
||||
export_constant(UNT_JACK_FROST_NOVA);
|
||||
export_constant(UNT_GROUND_GRAVITATION);
|
||||
export_constant(UNT_KUNAIWAIKYOKU);
|
||||
export_constant(UNT_GD_LEADERSHIP);
|
||||
export_constant(UNT_GD_GLORYWOUNDS);
|
||||
export_constant(UNT_GD_SOULCOLD);
|
||||
|
||||
@@ -1434,6 +1434,7 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl, uint
|
||||
break;
|
||||
|
||||
case AS_SONICBLOW:
|
||||
case HN_MEGA_SONIC_BLOW:
|
||||
sc_start(src,bl,SC_STUN,(2*skill_lv+10),skill_lv,skill_get_time2(skill_id,skill_lv));
|
||||
break;
|
||||
|
||||
@@ -1480,6 +1481,7 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl, uint
|
||||
break;
|
||||
|
||||
case WZ_METEOR:
|
||||
case HN_METEOR_STORM_BUSTER:
|
||||
sc_start(src,bl,SC_STUN,3*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
|
||||
break;
|
||||
|
||||
@@ -1696,6 +1698,7 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl, uint
|
||||
|
||||
case LK_SPIRALPIERCE:
|
||||
case ML_SPIRALPIERCE:
|
||||
case HN_SPIRAL_PIERCE_MAX:
|
||||
if( dstsd || ( dstmd && !status_bl_has_mode(bl,MD_STATUSIMMUNE) ) ) //Does not work on status immune
|
||||
sc_start(src,bl,SC_STOP,100,0,skill_get_time2(skill_id,skill_lv));
|
||||
break;
|
||||
@@ -1729,6 +1732,7 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl, uint
|
||||
break;
|
||||
|
||||
case HW_NAPALMVULCAN:
|
||||
case HN_NAPALM_VULCAN_STRIKE:
|
||||
sc_start(src,bl,SC_CURSE,5*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
|
||||
break;
|
||||
|
||||
@@ -2203,6 +2207,11 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl, uint
|
||||
case MT_RUSH_QUAKE:
|
||||
sc_start( src, bl, SC_RUSH_QUAKE1, 100, skill_lv, skill_get_time( skill_id, skill_lv ) );
|
||||
break;
|
||||
case HN_SHIELD_CHAIN_RUSH:
|
||||
case HN_JACK_FROST_NOVA:
|
||||
case HN_GROUND_GRAVITATION:
|
||||
sc_start(src, bl, skill_get_sc(skill_id), 100, 0, skill_get_time2(skill_id, skill_lv));
|
||||
break;
|
||||
} //end switch skill_id
|
||||
|
||||
if (md && battle_config.summons_trigger_autospells && md->master_id && md->special_state.ai && md->special_state.ai != AI_ABR && md->special_state.ai != AI_BIONIC)
|
||||
@@ -4769,6 +4778,22 @@ static TIMER_FUNC(skill_timerskill){
|
||||
case NC_MAGMA_ERUPTION:
|
||||
skill_unitsetting(src,skl->skill_id,skl->skill_lv,skl->x,skl->y,0);
|
||||
break;
|
||||
case HN_METEOR_STORM_BUSTER: {
|
||||
int16 area = 4;
|
||||
int16 tmpx = rnd_value( skl->x - area, skl->x + area );
|
||||
int16 tmpy = rnd_value( skl->y - area, skl->y + area );
|
||||
|
||||
if( map_getcell(src->m, tmpx, tmpy, CELL_CHKLANDPROTECTOR) ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int splash = skill_get_splash(skl->skill_id, skl->skill_lv);
|
||||
|
||||
clif_skill_poseffect(src, skl->skill_id, skl->skill_lv, tmpx, tmpy, tick);
|
||||
map_foreachinarea(skill_area_sub, src->m, tmpx - splash, tmpy - splash, tmpx + splash, tmpy + splash, BL_CHAR, src, skl->skill_id, skl->skill_lv, tick, skl->flag | BCT_ENEMY | SD_SPLASH | SKILL_ALTDMG_FLAG | 1, skill_castend_damage_id);
|
||||
skill_unitsetting(src, skl->skill_id, skl->skill_lv, tmpx, tmpy, skill_get_unit_interval(skl->skill_id));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while (0);
|
||||
@@ -5220,6 +5245,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
case WH_HAWKBOOMERANG:
|
||||
case TR_ROSEBLOSSOM:
|
||||
case TR_RHYTHMSHOOTING:
|
||||
case HN_MEGA_SONIC_BLOW:
|
||||
case HN_SPIRAL_PIERCE_MAX:
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag);
|
||||
if (skill_id == DK_DRAGONIC_AURA)
|
||||
@@ -5236,9 +5263,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
break;
|
||||
|
||||
case SHC_SHADOW_STAB:
|
||||
if (sc && sc->getSCE(SC_CLOAKINGEXCEED))
|
||||
flag |= 2;// Flag to deal 3 hits.
|
||||
|
||||
status_change_end(src, SC_CLOAKING);
|
||||
status_change_end(src, SC_CLOAKINGEXCEED);
|
||||
|
||||
@@ -5669,6 +5693,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
case IG_SHIELD_SHOOTING:
|
||||
case TR_METALIC_FURY:
|
||||
case IG_GRAND_JUDGEMENT:
|
||||
case HN_JUPITEL_THUNDER_STORM:
|
||||
if( flag&1 ) {//Recursive invocation
|
||||
int sflag = skill_area_temp[0] & 0xFFF;
|
||||
int heal = 0;
|
||||
@@ -5739,6 +5764,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
case DK_DRAGONIC_BREATH:
|
||||
case DK_HACKANDSLASHER:
|
||||
case MT_SPARK_BLASTER:
|
||||
case HN_JUPITEL_THUNDER_STORM:
|
||||
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
||||
break;
|
||||
#ifdef RENEWAL
|
||||
@@ -5846,6 +5872,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
case WH_GALESTORM:// Give AP if 3 or more targets are hit.
|
||||
if (sd && map_foreachinallrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, BCT_ENEMY, skill_area_sub_count) >= 3)
|
||||
status_heal(src, 0, 0, 10, 0);
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
break;
|
||||
case BO_ACIDIFIED_ZONE_WATER:
|
||||
case BO_ACIDIFIED_ZONE_GROUND:
|
||||
@@ -6087,6 +6114,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
case AG_ASTRAL_STRIKE_ATK:
|
||||
case AG_DESTRUCTIVE_HURRICANE_CLIMAX:
|
||||
case CD_ARBITRIUM:
|
||||
case HN_METEOR_STORM_BUSTER:
|
||||
skill_attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag);
|
||||
break;
|
||||
|
||||
@@ -7011,6 +7039,44 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
sc_start(src, bl, SC_VENOMIMPRESS, 100, skill_lv, skill_get_time(skill_id,skill_lv));
|
||||
break;
|
||||
|
||||
case HN_DOUBLEBOWLINGBASH:
|
||||
if (flag & 1) {
|
||||
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, skill_area_temp[0] & 0xFFF);
|
||||
} else {
|
||||
int splash = skill_get_splash(skill_id, skill_lv);
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
skill_area_temp[0] = map_foreachinallrange(skill_area_sub, bl, splash, BL_CHAR, src, skill_id, skill_lv, tick, BCT_ENEMY, skill_area_sub_count);
|
||||
map_foreachinrange(skill_area_sub, bl, splash, BL_CHAR, src, skill_id, skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | 1, skill_castend_damage_id);
|
||||
sc_start(src, src, SC_HNNOWEAPON, 100, skill_lv, skill_get_time2(skill_id, skill_lv));
|
||||
}
|
||||
break;
|
||||
|
||||
case HN_SHIELD_CHAIN_RUSH:
|
||||
if (flag & 1) {
|
||||
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
|
||||
} else {
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | 1, skill_castend_damage_id);
|
||||
sc_start(src, src, SC_HNNOWEAPON, 100, skill_lv, skill_get_time2(skill_id, skill_lv));
|
||||
}
|
||||
break;
|
||||
|
||||
case HN_JACK_FROST_NOVA:
|
||||
case HN_HELLS_DRIVE:
|
||||
case HN_GROUND_GRAVITATION:
|
||||
if (flag & 1)
|
||||
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
|
||||
break;
|
||||
|
||||
case HN_NAPALM_VULCAN_STRIKE:
|
||||
if (flag & 1) {
|
||||
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
|
||||
} else {
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | 1, skill_castend_damage_id);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
ShowWarning("skill_castend_damage_id: Unknown skill used:%d\n",skill_id);
|
||||
clif_skill_damage(src, bl, tick, status_get_amotion(src), tstatus->dmotion,
|
||||
@@ -7900,6 +7966,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
case NPC_DAMAGE_HEAL:
|
||||
case NPC_RELIEVE_ON:
|
||||
case NPC_RELIEVE_OFF:
|
||||
case HN_BREAKINGLIMIT:
|
||||
case HN_RULEBREAK:
|
||||
clif_skill_nodamage(src,bl,skill_id,skill_lv,
|
||||
sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
|
||||
break;
|
||||
@@ -12792,6 +12860,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
}
|
||||
break;
|
||||
|
||||
case HN_HELLS_DRIVE:
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, flag | BCT_ENEMY | 1, skill_castend_damage_id);
|
||||
break;
|
||||
|
||||
default: {
|
||||
std::shared_ptr<s_skill_db> skill = skill_db.find(skill_id);
|
||||
ShowWarning("skill_castend_nodamage_id: missing code case for skill %s(%d)\n", skill ? skill->name : "UNKNOWN", skill_id);
|
||||
@@ -13529,6 +13602,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
||||
case SC_ESCAPE:
|
||||
case SU_CN_METEOR:
|
||||
case NPC_RAINOFMETEOR:
|
||||
case HN_METEOR_STORM_BUSTER:
|
||||
break; //Effect is displayed on respective switch case.
|
||||
default:
|
||||
if(skill_get_inf(skill_id)&INF_SELF_SKILL)
|
||||
@@ -14436,6 +14510,41 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
||||
}
|
||||
break;
|
||||
|
||||
case HN_JACK_FROST_NOVA:
|
||||
case HN_GROUND_GRAVITATION: {
|
||||
if( map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) ) {
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int splash = skill_get_splash(skill_id, skill_lv);
|
||||
|
||||
map_foreachinarea(skill_area_sub, src->m, x - splash, y - splash, x + splash, y + splash, BL_CHAR, src, skill_id, skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | SKILL_ALTDMG_FLAG | 1, skill_castend_damage_id);
|
||||
skill_unitsetting(src, skill_id, skill_lv, x, y, flag);
|
||||
|
||||
for (i = 1; i <= (skill_get_time(skill_id, skill_lv) / skill_get_unit_interval(skill_id)); i++) {
|
||||
skill_addtimerskill(src, tick + (t_tick)i*skill_get_unit_interval(skill_id), 0, x, y, skill_id, skill_lv, 0, flag);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case HN_METEOR_STORM_BUSTER: {
|
||||
if( map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) ) {
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int splash = skill_get_splash(skill_id, skill_lv);
|
||||
|
||||
map_foreachinarea(skill_area_sub, src->m, x - splash, y - splash, x + splash, y + splash, BL_CHAR, src, skill_id, skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | SKILL_ALTDMG_FLAG | 1, skill_castend_damage_id);
|
||||
skill_unitsetting(src, skill_id, skill_lv, x, y, skill_get_unit_interval(skill_id));
|
||||
|
||||
for (i = 1; i <= (skill_get_time(skill_id, skill_lv) / skill_get_time2(skill_id, skill_lv)); i++) {
|
||||
skill_addtimerskill(src, tick + (t_tick)i*skill_get_time2(skill_id, skill_lv), 0, x, y, skill_id, skill_lv, 0, flag);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
ShowWarning("skill_castend_pos2: Unknown skill used:%d\n",skill_id);
|
||||
return 1;
|
||||
@@ -14775,6 +14884,7 @@ std::shared_ptr<s_skill_unit_group> skill_unitsetting(struct block_list *src, ui
|
||||
case SU_CN_METEOR:
|
||||
case SU_CN_METEOR2:
|
||||
case NPC_RAINOFMETEOR:
|
||||
case HN_METEOR_STORM_BUSTER:
|
||||
limit = flag;
|
||||
flag = 0; // Flag should not influence anything else for these skills
|
||||
break;
|
||||
@@ -21108,7 +21218,8 @@ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap)
|
||||
|
||||
default:
|
||||
if (group->val2 == 1 && (group->skill_id == WZ_METEOR || group->skill_id == SU_CN_METEOR || group->skill_id == SU_CN_METEOR2 ||
|
||||
group->skill_id == AG_VIOLENT_QUAKE_ATK || group->skill_id == AG_ALL_BLOOM_ATK || group->skill_id == AG_ALL_BLOOM_ATK2 || group->skill_id == NPC_RAINOFMETEOR)) {
|
||||
group->skill_id == AG_VIOLENT_QUAKE_ATK || group->skill_id == AG_ALL_BLOOM_ATK || group->skill_id == AG_ALL_BLOOM_ATK2 || group->skill_id == NPC_RAINOFMETEOR ||
|
||||
group->skill_id == HN_METEOR_STORM_BUSTER)) {
|
||||
// Deal damage before expiration
|
||||
break;
|
||||
}
|
||||
@@ -21164,7 +21275,8 @@ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap)
|
||||
break;
|
||||
default:
|
||||
if (group->skill_id == WZ_METEOR || group->skill_id == SU_CN_METEOR || group->skill_id == SU_CN_METEOR2 ||
|
||||
group->skill_id == AG_VIOLENT_QUAKE_ATK || group->skill_id == AG_ALL_BLOOM_ATK || group->skill_id == AG_ALL_BLOOM_ATK2 || group->skill_id == NPC_RAINOFMETEOR) {
|
||||
group->skill_id == AG_VIOLENT_QUAKE_ATK || group->skill_id == AG_ALL_BLOOM_ATK || group->skill_id == AG_ALL_BLOOM_ATK2 || group->skill_id == NPC_RAINOFMETEOR ||
|
||||
group->skill_id == HN_METEOR_STORM_BUSTER) {
|
||||
if (group->val2 == 0 && (DIFF_TICK(tick, group->tick) >= group->limit - group->interval || DIFF_TICK(tick, group->tick) >= unit->limit - group->interval)) {
|
||||
// Unit will expire the next interval, start dropping Meteor
|
||||
block_list *src = map_id2bl(group->src_id);
|
||||
@@ -21206,6 +21318,7 @@ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap)
|
||||
}
|
||||
else if (group->skill_id == WZ_METEOR || group->skill_id == SU_CN_METEOR || group->skill_id == SU_CN_METEOR2 ||
|
||||
group->skill_id == AG_VIOLENT_QUAKE_ATK || group->skill_id == AG_ALL_BLOOM_ATK || group->skill_id == AG_ALL_BLOOM_ATK2 || group->skill_id == NPC_RAINOFMETEOR ||
|
||||
group->skill_id == HN_METEOR_STORM_BUSTER ||
|
||||
((group->skill_id == CR_GRANDCROSS || group->skill_id == NPC_GRANDDARKNESS) && unit->val1 <= 0)) {
|
||||
skill_delunit(unit);
|
||||
return 0;
|
||||
|
||||
@@ -39,6 +39,9 @@ class status_change;
|
||||
/// Used with tracking the hitcount of Earthquake for skills that can avoid the first attack
|
||||
#define NPC_EARTHQUAKE_FLAG 0x800
|
||||
|
||||
/// To control alternative skill scalings
|
||||
#define SKILL_ALTDMG_FLAG 0x10
|
||||
|
||||
/// Constants to identify a skill's nk value (damage properties)
|
||||
/// The NK value applies only to non INF_GROUND_SKILL skills
|
||||
/// when determining skill castend function to invoke.
|
||||
|
||||
@@ -4379,6 +4379,10 @@ int status_calc_pc_sub(map_session_data* sd, uint8 opt)
|
||||
base_status->patk += skill * 3;
|
||||
base_status->smatk += skill * 3;
|
||||
}
|
||||
if ((skill = pc_checkskill(sd, HN_SELFSTUDY_TATICS)) > 0)
|
||||
base_status->patk += skill;
|
||||
if ((skill = pc_checkskill(sd, HN_SELFSTUDY_SOCERY)) > 0)
|
||||
base_status->smatk += skill;
|
||||
|
||||
// 2-Handed Staff Mastery
|
||||
if( sd->status.weapon == W_2HSTAFF && ( skill = pc_checkskill( sd, AG_TWOHANDSTAFF ) ) > 0 ){
|
||||
@@ -8012,6 +8016,10 @@ static unsigned short status_calc_speed(struct block_list *bl, status_change *sc
|
||||
val = max(val, sc->getSCE(SC_SP_SHA)->val2);
|
||||
if (sc->getSCE(SC_CREATINGSTAR))
|
||||
val = max(val, 90);
|
||||
if (sc->getSCE(SC_SHIELDCHAINRUSH))
|
||||
val = max(val, 20);
|
||||
if (sc->getSCE(SC_GROUNDGRAVITY))
|
||||
val = max(val, 20);
|
||||
|
||||
if( sd && sd->bonus.speed_rate + sd->bonus.speed_add_rate > 0 ) // Permanent item-based speedup
|
||||
val = max( val, sd->bonus.speed_rate + sd->bonus.speed_add_rate );
|
||||
|
||||
@@ -1284,6 +1284,15 @@ enum sc_type : int16 {
|
||||
SC_RUSH_QUAKE2,
|
||||
|
||||
SC_G_LIFEPOTION,
|
||||
|
||||
// Hyper Novice
|
||||
SC_HNNOWEAPON,
|
||||
SC_SHIELDCHAINRUSH,
|
||||
SC_MISTYFROST,
|
||||
SC_GROUNDGRAVITY,
|
||||
SC_BREAKINGLIMIT,
|
||||
SC_RULEBREAK,
|
||||
|
||||
#ifdef RENEWAL
|
||||
SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
|
||||
#endif
|
||||
|
||||
@@ -12,7 +12,6 @@ static bool upgrade_status_db(std::string file, const uint32 source_version);
|
||||
static bool upgrade_map_drops_db(std::string file, const uint32 source_version);
|
||||
static bool upgrade_enchantgrade_db( std::string file, const uint32 source_version );
|
||||
static bool upgrade_item_group_db( std::string file, const uint32 source_version );
|
||||
static bool upgrade_laphine_upgrade( std::string file, const uint32 source_version );
|
||||
|
||||
template<typename Func>
|
||||
bool process(const std::string &type, uint32 version, const std::vector<std::string> &paths, const std::string &name, Func lambda) {
|
||||
@@ -151,11 +150,6 @@ bool YamlUpgradeTool::initialize( int argc, char* argv[] ){
|
||||
} ) ){
|
||||
return false;
|
||||
}
|
||||
if( !process( "LAPHINE_UPGRADE_DB", 2, root_paths, "laphine_upgrade", []( const std::string& path, const std::string& name_ext, uint32 source_version ) -> bool {
|
||||
return upgrade_laphine_upgrade( path + name_ext, source_version );
|
||||
} ) ){
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -522,63 +516,6 @@ static bool upgrade_item_group_db( std::string file, const uint32 source_version
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool upgrade_laphine_upgrade(std::string file, const uint32 source_version) {
|
||||
size_t entries = 0;
|
||||
|
||||
for (auto input : inNode["Body"]) {
|
||||
if (source_version < 2) {
|
||||
if (input["ResultRefine"].IsDefined()) {
|
||||
// Convert ResultRefine to a ResultRefine array
|
||||
uint16 refine_level = input["ResultRefine"].as<uint16>();
|
||||
|
||||
// Remove the existing Refine entry
|
||||
input.remove("ResultRefine");
|
||||
|
||||
// Add the ResultRefine array
|
||||
auto RatesNode = input["ResultRefine"];
|
||||
auto RateNode = RatesNode[0];
|
||||
|
||||
RateNode["Level"] = refine_level;
|
||||
}
|
||||
|
||||
// Convert the values between ResultRefineMinimum and ResultRefineMaximum to a ResultRefine array
|
||||
if (input["ResultRefineMinimum"].IsDefined() || input["ResultRefineMaximum"].IsDefined()) {
|
||||
uint16 refine_level_min = 0, refine_level_max = MAX_REFINE;
|
||||
|
||||
// Save data and remove the existing ResultRefineMinimum/ResultRefineMaximum entry
|
||||
if (input["ResultRefineMinimum"].IsDefined()) {
|
||||
refine_level_min = input["ResultRefineMinimum"].as<uint16>();
|
||||
input.remove("ResultRefineMinimum");
|
||||
}
|
||||
if (input["ResultRefineMaximum"].IsDefined()) {
|
||||
refine_level_max = input["ResultRefineMaximum"].as<uint16>();
|
||||
input.remove("ResultRefineMaximum");
|
||||
}
|
||||
|
||||
// Remove existing ResultRefine entry (shouldn't happen)
|
||||
if (input["ResultRefine"].IsDefined())
|
||||
input.remove("ResultRefine");
|
||||
|
||||
// Add the ResultRefine array
|
||||
auto RatesNode = input["ResultRefine"];
|
||||
|
||||
for (int i = refine_level_min, j = 0; i <= refine_level_max; i++, j++) {
|
||||
auto RateNode = RatesNode[j];
|
||||
|
||||
RateNode["Level"] = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body << input;
|
||||
entries++;
|
||||
}
|
||||
|
||||
ShowStatus("Done converting/upgrading '" CL_WHITE "%zu" CL_RESET "' entries in '" CL_WHITE "%s" CL_RESET "'.\n", entries, file.c_str());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
int main( int argc, char *argv[] ){
|
||||
return main_core<YamlUpgradeTool>( argc, argv );
|
||||
|
||||
Reference in New Issue
Block a user