From 4362a0c677113465c450da34148e10676c32298f Mon Sep 17 00:00:00 2001 From: toms Date: Sun, 30 Jul 2006 19:32:53 +0000 Subject: Merged mpeg's fix on ninja skills and SA_VOLCANO,SA_DELUGE,SA_VIOLENTGALE git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@7983 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 1 + db/item_db.txt | 2 +- db/skill_cast_db.txt | 8 ++++---- db/skill_db.txt | 2 +- db/skill_require_db.txt | 14 +++++++------- db/skill_unit_db.txt | 4 ++-- src/map/battle.c | 18 ++++++++++++------ src/map/skill.c | 22 +++++++++++++++++++--- src/map/status.c | 10 +++++++--- 9 files changed, 54 insertions(+), 27 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 6ec978bbd..c03068d52 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,7 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2006/07/30 + * Merged mpeg's fix on ninja skills and SA_VOLCANO,SA_DELUGE,SA_VIOLENTGALE [Toms] * Added bNoMiscDamage setting so you can specify misc-damage blocking from skills. Modified battle_calc_damage so that even Pressure and similar skills will be affected by this setting. [Skotlex] diff --git a/db/item_db.txt b/db/item_db.txt index a8d1d027d..4850d6057 100644 --- a/db/item_db.txt +++ b/db/item_db.txt @@ -142,7 +142,7 @@ 644,Gift_Box,Gift Box,2,2,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_GiftBox),1; },{},{} // ASPD Potions 645,Concentration_Potion,Concentration Potion,2,800,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_ASPDPOTION0,1800000,0; },{},{} -656,Awakening_Potion,Awakening Potion,2,1500,,150,,,,,0x00E7DEEF,7,2,,,40,,,{ sc_end SC_Sleep; sc_start SC_ASPDPOTION1,1800000,0; },{},{} +656,Awakening_Potion,Awakening Potion,2,1500,,150,,,,,0x03E7DEEF,7,2,,,40,,,{ sc_end SC_Sleep; sc_start SC_ASPDPOTION1,1800000,0; },{},{} 657,Berserk_Potion,Berserk Potion,2,3000,,200,,,,,0x00E646A6,7,2,,,85,,,{ sc_start SC_ASPDPOTION2,1800000,0; },{},{} 658,Tribal_Solidarity,Tribal Solidarity,2,1000,,500,,,,,0xFFFFFFFF,7,2,,,,,,{ guildgetexp rand(600000,1200000); },{},{} // New Pet Tames diff --git a/db/skill_cast_db.txt b/db/skill_cast_db.txt index 2f1bdbb66..a94c947a5 100644 --- a/db/skill_cast_db.txt +++ b/db/skill_cast_db.txt @@ -447,11 +447,11 @@ 283,3000,0,0,1200000:1200000:1200000:1200000:1800000,0 //-- SA_VOLCANO -285,5000,0,0,60000:120000:180000:240000:300000,0 +285,5000,0,0,60000:120000:180000:240000:300000,60000:120000:180000:240000:300000 //-- SA_DELUGE -286,5000,0,0,60000:120000:180000:240000:300000,0 +286,5000,0,0,60000:120000:180000:240000:300000,60000:120000:180000:240000:300000 //-- SA_VIOLENTGALE -287,5000,0,0,60000:120000:180000:240000:300000,0 +287,5000,0,0,60000:120000:180000:240000:300000,60000:120000:180000:240000:300000 //-- SA_LANDPROTECTOR 288,5000,0,0,120000:165000:210000:245000:300000,0 //-- SA_DISPELL @@ -881,7 +881,7 @@ //===== Ninja ============================== -//-- NJ_HUUMA // Unknown delay. temp value (taken from jA) +//-- NJ_HUUMA // Unknown casting time. temp value (taken from jA) 525,1000,0,0,0,0 //-- NJ_ZENYNAGE 526,0,5000,0,0,0 diff --git a/db/skill_db.txt b/db/skill_db.txt index 1c1e49c31..420d97337 100644 --- a/db/skill_db.txt +++ b/db/skill_db.txt @@ -557,7 +557,7 @@ 533,0,0,0,0,0,0,10,0,no,0,0,0,none,0 //NJ_NINPOU#NJ_NINPOU# 534,9,8,1,3,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0 //NJ_KOUENKA#NJ_KOUENKA# 535,0,8,4,3,0,0,10,1,yes,0,0,0,magic,0 //NJ_KAENSIN#NJ_KAENSIN# -536,9,8,1,3,2,1,5,3,yes,0,0,0,magic,0 //NJ_BAKUENRYU#NJ_BAKUENRYU# +536,9,8,1,3,2,1,5,-3,yes,0,0,0,magic,0 //NJ_BAKUENRYU#NJ_BAKUENRYU# 537,9,8,1,1,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0,0,magic,0 //NJ_HYOUSENSOU#NJ_HYOUSENSOU# 538,9,6,2,0,1,0,10,1,yes,0,0,0,magic,0 //NJ_SUITON#NJ_SUITON# 539,0,6,4,1,1,0,5,1,yes,0,0,0,magic,0 //NJ_HYOUSYOURAKU#NJ_HYOUSYOURAKU# diff --git a/db/skill_require_db.txt b/db/skill_require_db.txt index e0303c94b..2227f77b7 100644 --- a/db/skill_require_db.txt +++ b/db/skill_require_db.txt @@ -416,13 +416,13 @@ 523,0,0,2,0,0,0,99,6,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_SYURIKEN 524,0,0,30:25:20:15:10,0,0,0,99,7,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_KUNAI 525,0,0,20:25:30:35:40,0,0,0,22,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_HUUMA -526,0,0,50,0,0,1000:2000:3000:4000:5000:6000:7000:8000:9000:10000,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_ZENYNAGE -527,0,0,40,0,0,0,0,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_TATAMIGAESHI -528,0,0,10:12:14:16:18:20:22:24:26:28,0,0,0,0,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_KASUMIKIRI -529,0,0,40,0,0,0,0,0,0,hiding,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_SHADOWJUMP -530,0,0,14:16:18:20:22,0,0,0,0,0,0,hiding,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_KIRIKAGE -531,0,0,12:15:18:21:24,0,0,0,0,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_UTSUSEMI -532,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,0,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_BUNSINJYUTSU +526,0,0,50,0,0,500:1000:1500:2000:2500:3000:3500:4000:4500:5000,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_ZENYNAGE +527,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_TATAMIGAESHI +528,0,0,10:12:14:16:18:20:22:24:26:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_KASUMIKIRI +529,0,0,40,0,0,0,99,0,0,hiding,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_SHADOWJUMP +530,0,0,14:16:18:20:22,0,0,0,99,0,0,hiding,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_KIRIKAGE +531,0,0,12:15:18:21:24,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_UTSUSEMI +532,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_BUNSINJYUTSU 533,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_NINPOU 534,0,0,18:20:22:24:26:28:30:32:34:36,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_KOUENKA 535,0,0,25,0,0,0,99,0,0,none,0,7521,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_KAENSIN diff --git a/db/skill_unit_db.txt b/db/skill_unit_db.txt index c5a83b5d0..7e1627d3f 100644 --- a/db/skill_unit_db.txt +++ b/db/skill_unit_db.txt @@ -90,7 +90,7 @@ 527,0xba, , -1, 0,2000,enemy, 0x000 //NJ_TATAMIGAESHI 535,0xbd, , 2, 0, 100,enemy, 0x008 //NJ_KAENSIN 541,0x86,,0,2:2:3:3:4,1000,enemy,0x000 //NJ_RAIGEKISAI -538,0xbb,,1:1:1:2:2:2:3:3:3:4,0,-1,all,0x010 //NJ_SUITON +538,0xbb,,1:1:1:2:2:2:3:3:3:4,0,-1,all,0x002 //NJ_SUITON 516,0xbc, , 0, 3, 100,enemy, 0x000 //GS_DESPERADO 521,0xc2, , 0, 1,1000,enemy, 0x006 //GS_GROUNDDRIFT -539,0x86, , 0, 3,1000,enemy, 0x008 //NJ_HYOUSYOURAKU +539,0x86, , 0, 3,1000,enemy, 0x000 //NJ_HYOUSYOURAKU diff --git a/src/map/battle.c b/src/map/battle.c index f2613b98b..a0ef681a1 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2323,7 +2323,7 @@ struct Damage battle_calc_magic_attack( skillratio -= 10; break; case NJ_BAKUENRYU: - skillratio += 50*(skill_lv-1); + skillratio += 150 + 150*skill_lv; // It has to be MATK +(150+150*SkillLV)% so 1000% at lvl 5, not 900%. Damage is not increased by hits. break; case NJ_HYOUSENSOU: skillratio -= 30; @@ -2331,13 +2331,13 @@ struct Damage battle_calc_magic_attack( skillratio += sc->data[SC_SUITON].val4; break; case NJ_HYOUSYOURAKU: - skillratio += 50*skill_lv; + skillratio += 100+50*skill_lv; // correct formula (MATK + 350% = 450% at level 5) (kRO and unofficial descriptions) break; case NJ_RAIGEKISAI: - skillratio += 60 + 40*skill_lv; + skillratio += 160 + 40*skill_lv; // idem break; case NJ_KAMAITACHI: - skillratio += 100*skill_lv; + skillratio += 100 + 100*skill_lv; // idem break; } @@ -2603,9 +2603,10 @@ struct Damage battle_calc_misc_attack( if (tsd) md.damage>>=1; break; case NJ_ZENYNAGE: - md.damage = skill_get_zeny(skill_num ,skill_lv)/2; + md.damage = skill_get_zeny(skill_num ,skill_lv); if (!md.damage) md.damage = 2; md.damage = md.damage + rand()%md.damage; + if(is_boss(target)) md.damage=md.damage*60/100; break; @@ -2695,7 +2696,12 @@ struct Damage battle_calc_misc_attack( if (map_flag_gvg(target->m)) md.damage=battle_calc_gvg_damage(src,target,md.damage,md.div_,skill_num,skill_lv,md.flag); - if ( sd && md.damage && skill_num == NJ_ZENYNAGE ) pc_payzeny(sd, md.damage); // conso zenys at the end of the calculation I think + if ( sd && md.damage && skill_num == NJ_ZENYNAGE ) + { + if ( md.damage > sd->status.zeny ) + md.damage=sd->status.zeny; + pc_payzeny(sd, md.damage); + } return md; } diff --git a/src/map/skill.c b/src/map/skill.c index 9c396eb1d..a1f02e31a 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2748,7 +2748,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int //line of sight between caster and target. map_foreachinpath (skill_attack_area,src->m,src->x,src->y,bl->x,bl->y, skill_get_splash(skillid, skilllv),BL_CHAR, - BF_WEAPON,src,src,skillid,skilllv,tick,flag,BCT_ENEMY); + BF_MAGIC,src,src,skillid,skilllv,tick,flag,BCT_ENEMY); break; case MO_INVESTIGATE: @@ -2836,7 +2836,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int case MC_CARTREVOLUTION: case NPC_SPLASHATTACK: case AC_SHOWER: //Targetted skill implementation. - case NJ_BAKUENRYU: if(flag&1){ if(bl->id!=skill_area_temp[1]){ skill_attack(skill_get_type(skillid),src,src,bl,skillid,skilllv,tick, @@ -3183,6 +3182,21 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int skill_castend_damage_id); } break; + case NJ_BAKUENRYU: + if (flag & 1) { + skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, skill_area_temp[0]); + } else { + clif_skill_nodamage(src,bl,skillid,skilllv,1); + skill_area_temp[0] = 0; + map_foreachinrange(skill_area_sub, bl, + skill_get_splash(skillid, skilllv), BL_CHAR, + src, skillid, skilllv, tick, BCT_ENEMY, skill_area_sub_count); + map_foreachinrange(skill_area_sub, bl, + skill_get_splash(skillid, skilllv), BL_CHAR, + src, skillid, skilllv, tick, BCT_ENEMY|1, + skill_castend_damage_id); + } + break; case NJ_KASUMIKIRI: skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); sc_start(src,SC_HIDING,100,skilllv,skill_get_time(skillid,skilllv)); @@ -6055,10 +6069,12 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s case DC_FORTUNEKISS: case DC_SERVICEFORYOU: case GS_DESPERADO: - case NJ_SUITON: case NJ_KAENSIN: + case NJ_BAKUENRYU: + case NJ_SUITON: case NJ_HYOUSYOURAKU: case NJ_RAIGEKISAI: + case NJ_KAMAITACHI: flag|=1;//Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete). case GS_GROUNDDRIFT: //Ammo should be deleted right away. skill_unitsetting(src,skillid,skilllv,x,y,0); diff --git a/src/map/status.c b/src/map/status.c index b5298b92e..f572b6fe8 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2967,7 +2967,7 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang agi -= 2 + sc->data[SC_DECREASEAGI].val1; if(sc->data[SC_QUAGMIRE].timer!=-1) agi -= sc->data[SC_QUAGMIRE].val2; - if(sc->data[SC_SUITON].timer!=-1) + if(sc->data[SC_SUITON].timer!=-1 && sc->data[SC_SUITON].val3) // does not affect players when not in PVP nor WoE. Does not affect Ninjas. agi -= sc->data[SC_SUITON].val2; if(sc->data[SC_MARIONETTE].timer!=-1) agi -= (sc->data[SC_MARIONETTE].val3>>8)&0xFF; @@ -4765,8 +4765,12 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val val2 = 0; //Agi penalty val3 = 0; //Walk speed penalty val4 = 2*val1; //NJ_HYOUSENSOU damage bonus. - if (status_get_class(bl) != JOB_NINJA && !map_flag_vs(bl->m)) { + + if (status_get_class(bl) == JOB_NINJA || ( bl->type == BL_PC && !map_flag_vs(bl->m)) ) + break; + else { val3 = 50; + switch ((val1+1)/3) { case 3: val2 = 8; @@ -4784,7 +4788,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val val2 = 3*((val1+1)/3); break; } - }; + } break; case SC_ONEHAND: case SC_TWOHANDQUICKEN: -- cgit v1.2.3-70-g09d2