Job Improvement Project - Super Novice (#4429)

* Fixes #4427.
* kRO Changelog: http://ro.gnjoy.com/news/notice/View.asp?BBSMode=10001&seq=7081
Thanks to @Rytech2!
This commit is contained in:
Aleos 2020-05-07 14:48:44 -04:00 committed by GitHub
parent 956f14bbfd
commit 931155ee33
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 163 additions and 29 deletions

View File

@ -280,9 +280,9 @@
// Baby Mechanic (Mado)
4112,6,1,0,0,1,0,6,2,5,4,0,0,4,6,0,0,2,0,3,3,4,5,0,0,3,6,0,0,3,0,1,1,3,6,0,0,4,4,0,0,0,3,3,1,1,0,0,5,2,0,6,1,5,0,4,3,2,0,5,1
// Super Novice (Expanded)
4190,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0
4190,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,4,5,0
// Super Baby (Expanded)
4191,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0
4191,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,0,3,0,4,5,0,6,0,1,2,4,5,0
// Kagerou
4211,5,0,4,0,2,3,0,1,6,0,5,1,2,0,4,6,3,0,1,5,2,0,6,3,4,0,5,0,2,0,1,4,0,5,4,0,3,5,1,0,2,4,1,0,5,6,2,1,0,5
// Oboro

View File

@ -262,7 +262,7 @@
// Baby Mechanic (Mado)
4112, 30000,90 ,500 ,400 ,40 ,60 ,65 ,200 ,200 ,200 ,45 ,48 ,48 ,50 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,6
// Super Novice (Expanded)
4190, 20000,0 ,500 ,100 ,40 ,55 ,57 ,200 ,200 ,200 ,50 ,200 ,50 ,55 ,65 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,65 ,10
4190, 20000,0 ,5000 ,500 ,40 ,55 ,57 ,200 ,200 ,200 ,50 ,200 ,50 ,55 ,65 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,65 ,10
// Super Baby (Expanded)
4191, 20000,0 ,500 ,100 ,40 ,55 ,57 ,200 ,200 ,200 ,50 ,200 ,50 ,55 ,65 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,65 ,10
// Kagerou

View File

@ -33561,6 +33561,31 @@ Body:
FixedCastTime: 2000
Requires:
SpCost: 70
- Id: 5075
Name: NV_BREAKTHROUGH
Description: Break Through
MaxLevel: 5
- Id: 5076
Name: NV_HELPANGEL
Description: Help Angel
MaxLevel: 1
TargetType: Self
DamageFlags:
NoDamage: true
Splash: true
Hit: Single
HitCount: 1
SplashArea: 7
CastCancel: true
AfterCastActDelay: 500
Duration1: 20000
Cooldown: 300000
Requires:
SpCost: 1
- Id: 5077
Name: NV_TRANSCENDENCE
Description: Transcendence
MaxLevel: 5
- Id: 8001
Name: HLIF_HEAL
Description: Healing Touch

View File

@ -5455,34 +5455,54 @@
4190,53,1,52,3,0,0,0,0,0,0,0,0 //TF_DETOXIFY#Detoxify#
4190,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
4190,66,5,0,0,0,0,0,0,0,0,0,0 //PR_IMPOSITIO#Impositio Manus#
4190,68,5,31,1,66,3,0,0,0,0,0,0 //PR_ASPERSIO#Aspersio#
4190,70,10,28,1,0,0,0,0,0,0,0,0 //PR_SANCTUARY#Sanctuary#
4190,72,1,0,0,0,0,0,0,0,0,0,0 //PR_STRECOVERY#Status Recovery#
4190,74,5,0,0,0,0,0,0,0,0,0,0 //PR_MAGNIFICAT#Magnificat#
4190,75,5,70,7,0,0,0,0,0,0,0,0 //PR_GLORIA#Gloria#
4190,80,10,18,1,0,0,0,0,0,0,0,0 //WZ_FIREPILLAR#Fire Pillar#
4190,81,10,20,1,10,1,0,0,0,0,0,0 //WZ_SIGHTRASHER#Sightrasher#
4190,83,10,81,2,21,1,0,0,0,0,0,0 //WZ_METEOR#Meteor Storm#
4190,84,10,11,1,20,1,0,0,0,0,0,0 //WZ_JUPITEL#Jupiter Thunder#
4190,85,10,21,1,84,5,0,0,0,0,0,0 //WZ_VERMILION#Lord of Vermilion#
4190,86,5,14,1,20,1,0,0,0,0,0,0 //WZ_WATERBALL#Water Ball#
4190,87,10,16,1,15,1,0,0,0,0,0,0 //WZ_ICEWALL#Ice Wall#
4190,88,10,87,1,0,0,0,0,0,0,0,0 //WZ_FROSTNOVA#Frost Nova#
4190,89,10,15,1,84,3,0,0,0,0,0,0 //WZ_STORMGUST#Storm Gust#
4190,90,5,16,1,0,0,0,0,0,0,0,0 //WZ_EARTHSPIKE#Earth Spike#
4190,91,5,90,3,0,0,0,0,0,0,0,0 //WZ_HEAVENDRIVE#Heaven's Drive#
4190,92,5,91,1,0,0,0,0,0,0,0,0 //WZ_QUAGMIRE#Quagmire#
4190,93,1,0,0,0,0,0,0,0,0,0,0 //WZ_ESTIMATION#Sense#
4190,105,1,0,0,0,0,0,0,0,0,0,0 //BS_HILTBINDING#Hilt Binding#
4190,107,10,105,1,0,0,0,0,0,0,0,0 //BS_WEAPONRESEARCH#Weaponry Research#
4190,108,1,107,1,0,0,0,0,0,0,0,0 //BS_REPAIRWEAPON#Weapon Repair#
4190,115,5,0,0,0,0,0,0,0,0,0,0 //HT_SKIDTRAP#Skid Trap#
4190,119,5,120,1,0,0,0,0,0,0,0,0 //HT_SANDMAN#Sandman#
4190,120,5,115,1,0,0,0,0,0,0,0,0 //HT_FLASHER#Flasher#
4190,121,5,120,1,0,0,0,0,0,0,0,0 //HT_FREEZINGTRAP#Freezing Trap#
4190,116,5,0,0,0,0,0,0,0,0,0,0 //HT_LANDMINE#Land Mine#
4190,126,10,0,0,0,0,0,0,0,0,0,0 //HT_BEASTBANE#Beast Bane#
4190,138,10,52,1,0,0,0,0,0,0,0,0 //AS_ENCHANTPOISON#Enchant Poison#
4190,139,10,138,3,0,0,0,0,0,0,0,0 //AS_POISONREACT#Poison React#
4190,140,10,138,5,0,0,0,0,0,0,0,0 //AS_VENOMDUST#Venom Dust#
4190,141,10,139,5,140,5,0,0,0,0,0,0 //AS_SPLASHER#Venom Splasher#
4190,210,10,50,1,0,0,0,0,0,0,0,0 //RG_SNATCHER#Gank#
4190,211,10,210,4,0,0,0,0,0,0,0,0 //RG_STEALCOIN#Mug#
4190,212,10,211,4,0,0,0,0,0,0,0,0 //RG_BACKSTAP#Back Stab#
4190,213,5,51,1,0,0,0,0,0,0,0,0 //RG_TUNNELDRIVE#Stalk#
4190,214,5,212,2,213,2,0,0,0,0,0,0 //RG_RAID#Sightless Raid#
4190,226,10,0,0,0,0,0,0,0,0,0,0 //AM_AXEMASTERY#Axe Mastery#
4190,248,10,0,0,0,0,0,0,0,0,0,0 //CR_TRUST#Faith#
4190,249,10,0,0,0,0,0,0,0,0,0,0 //CR_AUTOGUARD#Guard#
4190,250,5,249,5,0,0,0,0,0,0,0,0 //CR_SHIELDCHARGE#Smite#
4190,251,5,250,3,0,0,0,0,0,0,0,0 //CR_SHIELDBOOMERANG#Shield Boomerang#
4190,253,10,248,7,0,0,0,0,0,0,0,0 //CR_HOLYCROSS#Holy Cross#
4190,259,10,23,10,22,10,0,0,0,0,0,0 //MO_IRONHAND#Iron Fists#
4190,261,5,259,2,0,0,0,0,0,0,0,0 //MO_CALLSPIRITS#Summon Spirit Sphere#
4190,262,1,261,5,0,0,0,0,0,0,0,0 //MO_ABSORBSPIRITS#Absorb Spirit Sphere#
4190,270,5,262,1,0,0,0,0,0,0,0,0 //MO_EXPLOSIONSPIRITS#Fury#
4190,365,1,9,1,0,0,0,0,0,0,0,0 //HW_MAGICCRASHER#Stave Crasher#
4190,401,1,261,5,262,1,270,5,0,0,0,0 //CH_SOULCOLLECT#Hyper Spirit Sphere#
4190,5075,5,0,0,0,0,0,0,0,0,0,0 //NV_BREAKTHROUGH#Break Through#
4190,5076,1,0,0,0,0,0,0,0,0,0,0 //NV_HELPANGEL#Help Angel#
4190,5077,5,0,0,0,0,0,0,0,0,0,0 //NV_TRANSCENDENCE#Transcendence#
4190,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
4190,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate#
//Super Baby (Expanded)
@ -5540,34 +5560,54 @@
4191,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
4191,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
4191,66,5,0,0,0,0,0,0,0,0,0,0 //PR_IMPOSITIO#Impositio Manus#
4191,68,5,31,1,66,3,0,0,0,0,0,0 //PR_ASPERSIO#Aspersio#
4191,70,10,28,1,0,0,0,0,0,0,0,0 //PR_SANCTUARY#Sanctuary#
4191,72,1,0,0,0,0,0,0,0,0,0,0 //PR_STRECOVERY#Status Recovery#
4191,74,5,0,0,0,0,0,0,0,0,0,0 //PR_MAGNIFICAT#Magnificat#
4191,75,5,70,7,0,0,0,0,0,0,0,0 //PR_GLORIA#Gloria#
4191,80,10,18,1,0,0,0,0,0,0,0,0 //WZ_FIREPILLAR#Fire Pillar#
4191,81,10,20,1,10,1,0,0,0,0,0,0 //WZ_SIGHTRASHER#Sightrasher#
4191,83,10,81,2,21,1,0,0,0,0,0,0 //WZ_METEOR#Meteor Storm#
4191,84,10,11,1,20,1,0,0,0,0,0,0 //WZ_JUPITEL#Jupiter Thunder#
4191,85,10,21,1,84,5,0,0,0,0,0,0 //WZ_VERMILION#Lord of Vermilion#
4191,86,5,14,1,20,1,0,0,0,0,0,0 //WZ_WATERBALL#Water Ball#
4191,87,10,16,1,15,1,0,0,0,0,0,0 //WZ_ICEWALL#Ice Wall#
4191,88,10,87,1,0,0,0,0,0,0,0,0 //WZ_FROSTNOVA#Frost Nova#
4191,89,10,15,1,84,3,0,0,0,0,0,0 //WZ_STORMGUST#Storm Gust#
4191,90,5,16,1,0,0,0,0,0,0,0,0 //WZ_EARTHSPIKE#Earth Spike#
4191,91,5,90,3,0,0,0,0,0,0,0,0 //WZ_HEAVENDRIVE#Heaven's Drive#
4191,92,5,91,1,0,0,0,0,0,0,0,0 //WZ_QUAGMIRE#Quagmire#
4191,93,1,0,0,0,0,0,0,0,0,0,0 //WZ_ESTIMATION#Sense#
4191,105,1,0,0,0,0,0,0,0,0,0,0 //BS_HILTBINDING#Hilt Binding#
4191,107,10,105,1,0,0,0,0,0,0,0,0 //BS_WEAPONRESEARCH#Weaponry Research#
4191,108,1,107,1,0,0,0,0,0,0,0,0 //BS_REPAIRWEAPON#Weapon Repair#
4191,115,5,0,0,0,0,0,0,0,0,0,0 //HT_SKIDTRAP#Skid Trap#
4191,119,5,120,1,0,0,0,0,0,0,0,0 //HT_SANDMAN#Sandman#
4191,120,5,115,1,0,0,0,0,0,0,0,0 //HT_FLASHER#Flasher#
4191,121,5,120,1,0,0,0,0,0,0,0,0 //HT_FREEZINGTRAP#Freezing Trap#
4191,116,5,0,0,0,0,0,0,0,0,0,0 //HT_LANDMINE#Land Mine#
4191,126,10,0,0,0,0,0,0,0,0,0,0 //HT_BEASTBANE#Beast Bane#
4191,138,10,52,1,0,0,0,0,0,0,0,0 //AS_ENCHANTPOISON#Enchant Poison#
4191,139,10,138,3,0,0,0,0,0,0,0,0 //AS_POISONREACT#Poison React#
4191,140,10,138,5,0,0,0,0,0,0,0,0 //AS_VENOMDUST#Venom Dust#
4191,141,10,139,5,140,5,0,0,0,0,0,0 //AS_SPLASHER#Venom Splasher#
4191,210,10,50,1,0,0,0,0,0,0,0,0 //RG_SNATCHER#Gank#
4191,211,10,210,4,0,0,0,0,0,0,0,0 //RG_STEALCOIN#Mug#
4191,212,10,211,4,0,0,0,0,0,0,0,0 //RG_BACKSTAP#Back Stab#
4191,213,5,51,1,0,0,0,0,0,0,0,0 //RG_TUNNELDRIVE#Stalk#
4191,214,5,212,2,213,2,0,0,0,0,0,0 //RG_RAID#Sightless Raid#
4191,226,10,0,0,0,0,0,0,0,0,0,0 //AM_AXEMASTERY#Axe Mastery#
4191,248,10,0,0,0,0,0,0,0,0,0,0 //CR_TRUST#Faith#
4191,249,10,0,0,0,0,0,0,0,0,0,0 //CR_AUTOGUARD#Guard#
4191,250,5,249,5,0,0,0,0,0,0,0,0 //CR_SHIELDCHARGE#Smite#
4191,251,5,250,3,0,0,0,0,0,0,0,0 //CR_SHIELDBOOMERANG#Shield Boomerang#
4191,253,10,248,7,0,0,0,0,0,0,0,0 //CR_HOLYCROSS#Holy Cross#
4191,259,10,23,10,22,10,0,0,0,0,0,0 //MO_IRONHAND#Iron Fists#
4191,261,5,259,2,0,0,0,0,0,0,0,0 //MO_CALLSPIRITS#Summon Spirit Sphere#
4191,262,1,261,5,0,0,0,0,0,0,0,0 //MO_ABSORBSPIRITS#Absorb Spirit Sphere#
4191,270,5,262,1,0,0,0,0,0,0,0,0 //MO_EXPLOSIONSPIRITS#Fury#
4191,365,1,9,1,0,0,0,0,0,0,0,0 //HW_MAGICCRASHER#Stave Crasher#
4191,401,1,261,5,262,1,270,5,0,0,0,0 //CH_SOULCOLLECT#Hyper Spirit Sphere#
4191,5075,5,0,0,0,0,0,0,0,0,0,0 //NV_BREAKTHROUGH#Break Through#
4191,5076,1,0,0,0,0,0,0,0,0,0,0 //NV_HELPANGEL#Help Angel#
4191,5077,5,0,0,0,0,0,0,0,0,0,0 //NV_TRANSCENDENCE#Transcendence#
4191,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
4191,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate#
4191,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#

View File

@ -0,0 +1,11 @@
-- HT_SANDMAN
UPDATE `char` c, `skill` s SET `c`.skill_point = `c`.skill_point + `s`.lv WHERE (`c`.class = 4190 OR `c`.class = 4191) AND `s`.id = 119 AND `c`.char_id = `s`.char_id;
DELETE FROM `skill` USING `skill`, `char` WHERE (`char`.class = 4190 OR `char`.class = 4191) AND `skill`.id = 119 AND `char`.char_id = `skill`.char_id;
-- HT_FLASHER
UPDATE `char` c, `skill` s SET `c`.skill_point = `c`.skill_point + `s`.lv WHERE (`c`.class = 4190 OR `c`.class = 4191) AND `s`.id = 120 AND `c`.char_id = `s`.char_id;
DELETE FROM `skill` USING `skill`, `char` WHERE (`char`.class = 4190 OR `char`.class = 4191) AND `skill`.id = 120 AND `char`.char_id = `skill`.char_id;
-- HT_FREEZINGTRAP
UPDATE `char` c, `skill` s SET `c`.skill_point = `c`.skill_point + `s`.lv WHERE (`c`.class = 4190 OR `c`.class = 4191) AND `s`.id = 121 AND `c`.char_id = `s`.char_id;
DELETE FROM `skill` USING `skill`, `char` WHERE (`char`.class = 4190 OR `char`.class = 4191) AND `skill`.id = 121 AND `char`.char_id = `skill`.char_id;

View File

@ -3112,6 +3112,13 @@ static void battle_calc_attack_masteries(struct Damage* wd, struct block_list *s
#endif
}
if (skill_id == NV_BREAKTHROUGH) {
ATK_ADD(wd->damage, wd->damage2, 15 * skill_lv + (skill_lv > 4 ? 25 : 0));
#ifdef RENEWAL
ATK_ADD(wd->masteryAtk, wd->masteryAtk2, 15 * skill_lv + (skill_lv > 4 ? 25 : 0));
#endif
}
switch(skill_id) {
case RA_WUGDASH:
case RA_WUGSTRIKE:

View File

@ -57,8 +57,8 @@ enum sc_type : int16;
#define ACHIEVEMENTLEVEL "AchievementLevel"
//Update this max as necessary. 55 is the value needed for Super Baby currently
//Raised to 85 since Expanded Super Baby needs it.
#define MAX_SKILL_TREE 85
//Raised to 105 since Expanded Super Baby needs it.
#define MAX_SKILL_TREE 105
//Total number of classes (for data storage)
#define CLASS_COUNT (JOB_MAX - JOB_NOVICE_HIGH + JOB_MAX_BASIC)

View File

@ -1578,6 +1578,7 @@
export_constant(SC_HELLS_PLANT);
export_constant(SC_INCREASE_MAXHP);
export_constant(SC_INCREASE_MAXSP);
export_constant(SC_HELPANGEL);
#ifdef RENEWAL
export_constant(SC_EXTREMITYFIST2);
#endif

View File

@ -595,27 +595,43 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
if( (!heal || (target && target->type == BL_MER)) && skill_id != NPC_EVILLAND )
hp >>= 1;
if (sd && ((skill = pc_checkskill(sd, SU_POWEROFSEA)) > 0)) {
if (sd) {
if (pc_checkskill(sd, SU_POWEROFSEA) > 0) {
#ifdef RENEWAL
hp_bonus += 10;
hp_bonus += 10;
#else
hp += hp * 10 / 100;
hp += hp * 10 / 100;
#endif
if (pc_checkskill(sd, SU_TUNABELLY) == 5 && pc_checkskill(sd, SU_TUNAPARTY) == 5 && pc_checkskill(sd, SU_BUNCHOFSHRIMP) == 5 && pc_checkskill(sd, SU_FRESHSHRIMP) == 5)
if (pc_checkskill(sd, SU_TUNABELLY) == 5 && pc_checkskill(sd, SU_TUNAPARTY) == 5 && pc_checkskill(sd, SU_BUNCHOFSHRIMP) == 5 && pc_checkskill(sd, SU_FRESHSHRIMP) == 5)
#ifdef RENEWAL
hp_bonus += 20;
hp_bonus += 20;
#else
hp += hp * 20 / 100;
hp += hp * 20 / 100;
#endif
}
}
if (sd && (skill = pc_skillheal_bonus(sd, skill_id)))
if ((skill = pc_checkskill(sd, NV_BREAKTHROUGH)) > 0)
#ifdef RENEWAL
hp_bonus += 2;
#else
hp += hp * skill * 2 / 100;
#endif
if ((skill = pc_checkskill(sd, NV_TRANSCENDENCE)) > 0)
#ifdef RENEWAL
hp_bonus += 3;
#else
hp += hp * skill * 3 / 100;
#endif
if (skill = pc_skillheal_bonus(sd, skill_id))
#ifdef RENEWAL
hp_bonus += skill;
#else
hp += hp * skill / 100;
#endif
}
if (tsd && (skill = pc_skillheal2_bonus(tsd, skill_id)))
#ifdef RENEWAL
@ -7690,6 +7706,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case CASH_INCAGI:
case CASH_ASSUMPTIO:
case WM_FRIGG_SONG:
case NV_HELPANGEL:
if( sd == NULL || sd->status.party_id == 0 || (flag & 1) )
clif_skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
else if( sd )

View File

@ -1957,6 +1957,10 @@ enum e_skill {
AB_VITUPERATUM = 5072,
AB_CONVENIO,
ALL_LIGHTNING_STORM,
NV_BREAKTHROUGH,
NV_HELPANGEL,
NV_TRANSCENDENCE,
HLIF_HEAL = 8001,
HLIF_AVOID,

View File

@ -1099,6 +1099,10 @@ void initChangeTables(void)
set_sc( SP_SOULREAPER , SC_SOULREAPER , EFST_SOULREAPER , SCB_NONE );
set_sc( SP_SOULCOLLECT , SC_SOULCOLLECT , EFST_SOULCOLLECT , SCB_NONE );
#ifdef RENEWAL
set_sc( NV_HELPANGEL , SC_HELPANGEL , EFST_HELPANGEL , SCB_NONE );
#endif
/* Storing the target job rather than simply SC_SPIRIT simplifies code later on */
SkillStatusChangeTable[skill_get_index(SL_ALCHEMIST)] = (sc_type)MAPID_ALCHEMIST,
SkillStatusChangeTable[skill_get_index(SL_MONK)] = (sc_type)MAPID_MONK,
@ -3299,11 +3303,11 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
//Only for BL_PC
if (bl->type == BL_PC) {
struct map_session_data *sd = map_id2sd(bl->id);
uint8 i;
uint16 skill_lv;
bonus += sd->bonus.hp;
if ((i = pc_checkskill(sd,CR_TRUST)) > 0)
bonus += i * 200;
if ((skill_lv = pc_checkskill(sd,CR_TRUST)) > 0)
bonus += skill_lv * 200;
if (pc_checkskill(sd,SU_SPRITEMABLE) > 0)
bonus += 1000;
if (pc_checkskill(sd, SU_POWEROFSEA) > 0) {
@ -3312,6 +3316,10 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
pc_checkskill(sd, SU_GROOMING) + pc_checkskill(sd, SU_PURRING) + pc_checkskill(sd, SU_SHRIMPARTY)) > 19)
bonus += 2000;
}
if ((skill_lv = pc_checkskill(sd, NV_BREAKTHROUGH)) > 0)
bonus += 350 * skill_lv + (skill_lv > 4 ? 250 : 0);
if ((skill_lv = pc_checkskill(sd, NV_TRANSCENDENCE)) > 0)
bonus += 350 * skill_lv + (skill_lv > 4 ? 250 : 0);
#ifndef HP_SP_TABLES
if ((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.base_level >= 99)
bonus += 2000; // Supernovice lvl99 hp bonus.
@ -3467,15 +3475,15 @@ static int status_get_spbonus(struct block_list *bl, enum e_status_bonus type) {
//Only for BL_PC
if (bl->type == BL_PC) {
struct map_session_data *sd = map_id2sd(bl->id);
uint8 i;
uint16 skill_lv;
bonus += sd->bonus.sp;
if ((i = pc_checkskill(sd,SL_KAINA)) > 0)
bonus += 30 * i;
if ((i = pc_checkskill(sd,RA_RESEARCHTRAP)) > 0)
bonus += 200 + 20 * i;
if ((i = pc_checkskill(sd,WM_LESSON)) > 0)
bonus += 30 * i;
if ((skill_lv = pc_checkskill(sd,SL_KAINA)) > 0)
bonus += 30 * skill_lv;
if ((skill_lv = pc_checkskill(sd,RA_RESEARCHTRAP)) > 0)
bonus += 200 + 20 * skill_lv;
if ((skill_lv = pc_checkskill(sd,WM_LESSON)) > 0)
bonus += 30 * skill_lv;
if (pc_checkskill(sd,SU_SPRITEMABLE) > 0)
bonus += 100;
if (pc_checkskill(sd, SU_POWEROFSEA) > 0) {
@ -3484,6 +3492,10 @@ static int status_get_spbonus(struct block_list *bl, enum e_status_bonus type) {
pc_checkskill(sd, SU_GROOMING) + pc_checkskill(sd, SU_PURRING) + pc_checkskill(sd, SU_SHRIMPARTY)) > 19)
bonus += 200;
}
if ((skill_lv = pc_checkskill(sd, NV_BREAKTHROUGH)) > 0)
bonus += 30 * skill_lv + (skill_lv > 4 ? 50 : 0);
if ((skill_lv = pc_checkskill(sd, NV_TRANSCENDENCE)) > 0)
bonus += 30 * skill_lv + (skill_lv > 4 ? 50 : 0);
}
//Bonus by SC
@ -5572,6 +5584,8 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)
// Any +MATK you get from skills and cards, including cards in weapon, is added here.
if (sd) {
uint16 skill_lv;
if (sd->bonus.ematk > 0)
status->matk_min += sd->bonus.ematk;
if (pc_checkskill(sd, SU_POWEROFLAND) > 0) {
@ -5579,6 +5593,8 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)
pc_checkskill(sd, SU_CHATTERING) + pc_checkskill(sd, SU_MEOWMEOW) + pc_checkskill(sd, SU_NYANGGRASS)) > 19)
status->matk_min += status->matk_min * 20 / 100;
}
if ((skill_lv = pc_checkskill(sd, NV_TRANSCENDENCE)) > 0)
status->matk_min += 15 * skill_lv + (skill_lv > 4 ? 25 : 0);
}
status->matk_min = status_calc_ematk(bl, sc, status->matk_min);
@ -11958,6 +11974,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
val1 = 15; // Heal Power rate bonus
val2 = 30; // SP Recovery rate bonus
break;
case SC_HELPANGEL:
tick_time = 1000;
val4 = tick / tick_time;
break;
case SC_SUNSTANCE:
val2 = 2 + val1; // ATK Increase
@ -14657,6 +14677,13 @@ TIMER_FUNC(status_change_timer){
return 0;
}
break;
case SC_HELPANGEL:
if (--(sce->val4) >= 0) {
status_heal(bl, 1000, 350, 2);
sc_timer_next(1000 + tick);
return 0;
}
break;
}
// If status has an interval and there is at least 100ms remaining time, wait for next interval

View File

@ -924,6 +924,8 @@ enum sc_type : int16 {
SC_INCREASE_MAXHP, // EFST_ATKER_ASPD
SC_INCREASE_MAXSP, // EFST_ATKER_MOVESPEED
SC_HELPANGEL,
#ifdef RENEWAL
SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
#endif