diff options
-rw-r--r-- | db/pre-re/skill_db.txt | 2 | ||||
-rw-r--r-- | db/pre-re/skill_nocast_db.txt | 1 | ||||
-rw-r--r-- | db/pre-re/skill_unit_db.txt | 2 | ||||
-rw-r--r-- | db/re/skill_db.txt | 2 | ||||
-rw-r--r-- | db/re/skill_nocast_db.txt | 1 | ||||
-rw-r--r-- | db/re/skill_unit_db.txt | 2 | ||||
-rw-r--r-- | src/map/battle.c | 1 | ||||
-rw-r--r-- | src/map/skill.c | 29 | ||||
-rw-r--r-- | src/map/status.c | 32 |
9 files changed, 54 insertions, 18 deletions
diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index 9cf63a79a..b9d4fe4bf 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -1036,7 +1036,7 @@ 3007,0,6,4,-1,0x42,4:4:4:4:5,5,0,no,0,0,0,misc,0, KO_HAPPOKUNAI,Happo Kunai 3008,9,8,2,0,0x52,2,10,-10,no,0,0,0,misc,0, KO_MUCHANAGE,Mucha Nage 3009,9:10:11:12:13,8,2,-1,0x2,3,5,2,no,0,0,0,weapon,0, KO_HUUMARANKA,Huuma Shuriken Ranka -//3010,3,6,2,0,0x43,0,5,1,no,0,0x80,0,misc,0, KO_MAKIBISHI,Makibishi +3010,3,6,4,0,0x43,0,5,1,no,0,0x80,0,misc,0, KO_MAKIBISHI,Makibishi 3011,0,6,4,0,0x1,0,5,0,yes,0,0,0,none,0, KO_MEIKYOUSISUI,Meikyo Shisui 3012,0,6,4,0,0x1,0,5,0,no,0,0,1,none,7, KO_ZANZOU,Zanzou 3013,5,6,1,0,0x1,0,5,0,no,0,0,0,none,0, KO_KYOUGAKU,Kyougaku diff --git a/db/pre-re/skill_nocast_db.txt b/db/pre-re/skill_nocast_db.txt index 525fec58c..5e12477a9 100644 --- a/db/pre-re/skill_nocast_db.txt +++ b/db/pre-re/skill_nocast_db.txt @@ -86,6 +86,7 @@ //mixed 488,3 //CG_HERMODE +3013,3 //KO_KYOUGAKU //Clone Forbidden/pointless skills 77,16 //PR_TURNUNDEAD diff --git a/db/pre-re/skill_unit_db.txt b/db/pre-re/skill_unit_db.txt index 557a2c3a1..fc05641a8 100644 --- a/db/pre-re/skill_unit_db.txt +++ b/db/pre-re/skill_unit_db.txt @@ -155,7 +155,7 @@ 3008,0x86, , 0, 2, 100,enemy, 0x018 //KO_MUCHANAGE 3009,0x86, , 0, 3, 500,enemy, 0x018 //KO_HUUMARANKA 3020,0xf8, , 0, 3, 100,all, 0x018 //KO_ZENKAI -//3010,0xfc, , 0, 2,1000,enemy, 0x022 //KO_MAKIBISHI +3010,0xfc, , 0, 1,1000,enemy, 0x020 //KO_MAKIBISHI 8208,0x86, , 0, 2,1000,enemy, 0x080 //MA_SHOWER 8209,0x90, , 0, 1,1000,enemy, 0x006 //MA_SKIDTRAP diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index 7ef101b68..989c0e0ed 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -1037,7 +1037,7 @@ 3007,0,6,4,-1,0x42,4:4:4:4:5,5,0,no,0,0,0,misc,0, KO_HAPPOKUNAI,Happo Kunai 3008,9,8,2,0,0x52,2,10,-10,no,0,0,0,misc,0, KO_MUCHANAGE,Mucha Nage 3009,9:10:11:12:13,8,2,-1,0x2,3,5,2,no,0,0,0,weapon,0, KO_HUUMARANKA,Huuma Shuriken Ranka -//3010,3,6,2,0,0x43,0,5,1,no,0,0x80,0,misc,0, KO_MAKIBISHI,Makibishi +3010,3,6,4,0,0x43,0,5,1,no,0,0x80,0,misc,0, KO_MAKIBISHI,Makibishi 3011,0,6,4,0,0x1,0,5,0,yes,0,0,0,none,0, KO_MEIKYOUSISUI,Meikyo Shisui 3012,0,6,4,0,0x1,0,5,0,no,0,0,1,none,7, KO_ZANZOU,Zanzou 3013,5,6,1,0,0x1,0,5,0,no,0,0,0,none,0, KO_KYOUGAKU,Kyougaku diff --git a/db/re/skill_nocast_db.txt b/db/re/skill_nocast_db.txt index 525fec58c..5e12477a9 100644 --- a/db/re/skill_nocast_db.txt +++ b/db/re/skill_nocast_db.txt @@ -86,6 +86,7 @@ //mixed 488,3 //CG_HERMODE +3013,3 //KO_KYOUGAKU //Clone Forbidden/pointless skills 77,16 //PR_TURNUNDEAD diff --git a/db/re/skill_unit_db.txt b/db/re/skill_unit_db.txt index 3b7d9c26c..16b0fba52 100644 --- a/db/re/skill_unit_db.txt +++ b/db/re/skill_unit_db.txt @@ -158,7 +158,7 @@ 3008,0x86, , 0, 2, 100,enemy, 0x018 //KO_MUCHANAGE 3009,0x86, , 0, 3, 500,enemy, 0x018 //KO_HUUMARANKA 3020,0xf8, , 0, 3, 100,all, 0x018 //KO_ZENKAI -//3010,0xfc, , 0, 2,1000,enemy, 0x022 //KO_MAKIBISHI +3010,0xfc, , 0, 1,1000,enemy, 0x020 //KO_MAKIBISHI 8020,0xf5, , 0, 3,2300:2100:1900:1700:1500,enemy, 0x018 //MH_POISON_MIST 8033,0x7e, , 0, 0, -1,all, 0x003 //MH_STEINWAND diff --git a/src/map/battle.c b/src/map/battle.c index b9c865099..47f18e881 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3320,6 +3320,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo ATK_ADD( ( sc->data[SC_ENCHANTBLADE]->val1*20+100 ) * status_get_lv(src) / 150 + status_get_int(src) ); } } + status_change_end(src,SC_CAMOUFLAGE, INVALID_TIMER); } if( skill_num == LG_RAYOFGENESIS ) { struct Damage md = battle_calc_magic_attack(src, target, skill_num, skill_lv, wflag); diff --git a/src/map/skill.c b/src/map/skill.c index ef1089f26..d3c60591b 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -819,8 +819,6 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int if((sce=sc->data[SC_EDP])) sc_start4(bl,SC_DPOISON,sce->val2, sce->val1,src->id,0,0, skill_get_time2(ASC_EDP,sce->val1)); - // Cancels on normal attack but benefits with the bonuses - status_change_end(src,SC_CAMOUFLAGE, INVALID_TIMER); } } break; @@ -4422,9 +4420,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int case SR_EARTHSHAKER: if( flag&1 ) { //by default cloaking skills are remove by aoe skills so no more checking/removing except hiding and cloaking exceed. + skill_attack(BF_WEAPON, src, src, bl, skillid, skilllv, tick, flag); status_change_end(bl, SC_HIDING, INVALID_TIMER); status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER); - skill_attack(BF_WEAPON, src, src, bl, skillid, skilllv, tick, flag); } else{ map_foreachinrange(skill_area_sub, bl, skill_get_splash(skillid, skilllv), splash_target(src), src, skillid, skilllv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id); clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6); @@ -4543,7 +4541,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int skill_castend_damage_id); flag|=1; //Set flag to 1 so ammo is not double-consumed. [Skotlex] } - status_change_end(src,SC_CAMOUFLAGE, INVALID_TIMER); } break; @@ -8747,7 +8744,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in break; case KO_JYUSATSU: - if( dstsd && tsc && !tsc->data[type] && rand()%100 < tstatus->int_/2 ){ + if( dstsd && tsc && !tsc->data[type] && + rand()%100 < ((45+5*skilllv) + skilllv*5 - status_get_int(bl)/2) ){//[(Base chance of success) + (Skill Level x 5) - (int / 2)]%. clif_skill_nodamage(src,bl,skillid,skilllv, status_change_start(bl,type,10000,skilllv,0,0,0,skill_get_time(skillid,skilllv),1)); status_zap(bl, tstatus->max_hp*skilllv*5/100 , 0); @@ -8760,6 +8758,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case KO_GENWAKU: if ( !map_flag_gvg(src->m) && ( dstsd || dstmd ) && battle_check_target(src,bl,BCT_ENEMY) > 0 ) { int x = src->x, y = src->y; + + if( sd && rnd()%100 > ((45+5*skilllv) - status_get_int(bl)/10) ){//[(Base chance of success) - (Intelligence Objectives / 10)]%. + clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0); + break; + } + if (unit_movepos(src,bl->x,bl->y,0,0)) { clif_skill_nodamage(src,src,skillid,skilllv,1); clif_slide(src,bl->x,bl->y) ; @@ -9539,7 +9543,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk case KO_MUCHANAGE: case KO_BAKURETSU: case KO_ZENKAI: - //case KO_MAKIBISHI: 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); @@ -10000,6 +10003,14 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk flag |= 33; skill_unitsetting(src, skillid, skilllv, x, y, 0); break; + + case KO_MAKIBISHI: + for( i = 0; i < (skilllv+2); i++ ) { + x = src->x - 1 + rnd()%3; + y = src->y - 1 + rnd()%3; + skill_unitsetting(src,skillid,skilllv,x,y,0); + } + break; default: if( skillid >= HM_SKILLBASE && skillid <= HM_SKILLBASE + MAX_HOMUNSKILL ) { if( src->type == BL_HOM && ((TBL_HOM*)src)->master->fd ) @@ -11252,7 +11263,6 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns case UNT_FLASHER: case UNT_FREEZINGTRAP: case UNT_FIREPILLAR_ACTIVE: - case UNT_MAKIBISHI: map_foreachinrange(skill_trap_splash,&src->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &src->bl,tick); if (sg->unit_id != UNT_FIREPILLAR_ACTIVE) clif_changetraplook(&src->bl, sg->unit_id==UNT_LANDMINE?UNT_FIREPILLAR_ACTIVE:UNT_USED_TRAPS); @@ -11677,6 +11687,11 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns sc_start2(bl,type,100,sg->val1,sg->val2,skill_get_time2(sg->skill_id, sg->skill_lv)); break; + case UNT_MAKIBISHI: + skill_attack(BF_MISC, ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0); + sg->limit = DIFF_TICK(tick, sg->tick); + sg->unit_id = UNT_USED_TRAPS; + break; } if (bl->type == BL_MOB && ss != bl) diff --git a/src/map/status.c b/src/map/status.c index e8bc3bc5e..b42e1b3a1 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -714,7 +714,7 @@ void initChangeTables(void) { set_sc( EL_ROCK_CRUSHER_ATK, SC_ROCK_CRUSHER_ATK , SI_ROCK_CRUSHER_ATK , SCB_SPEED ); add_sc( KO_YAMIKUMO , SC_HIDING ); - set_sc( KO_JYUMONJIKIRI , SC_JYUMONJIKIRI , SI_KO_JYUMONJIKIRI , SCB_NONE ); + set_sc_with_vfx( KO_JYUMONJIKIRI , SC_JYUMONJIKIRI , SI_KO_JYUMONJIKIRI , SCB_NONE ); add_sc( KO_MAKIBISHI , SC_STUN ); set_sc( KO_MEIKYOUSISUI , SC_MEIKYOUSISUI , SI_MEIKYOUSISUI , SCB_NONE ); set_sc( KO_KYOUGAKU , SC_KYOUGAKU , SI_KYOUGAKU , SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK ); @@ -1004,6 +1004,7 @@ void initChangeTables(void) { StatusChangeStateTable[SC_CAMOUFLAGE] |= SCS_NOMOVE|SCS_NOMOVECOND; StatusChangeStateTable[SC_MEIKYOUSISUI] |= SCS_NOMOVE; StatusChangeStateTable[SC_KAGEHUMI] |= SCS_NOMOVE; + StatusChangeStateTable[SC_KYOUGAKU] |= SCS_NOMOVE; /* StatusChangeState (SCS_) NOPICKUPITEMS */ StatusChangeStateTable[SC_HIDING] |= SCS_NOPICKITEM; @@ -8317,7 +8318,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val break; case SC_KYOUGAKU: val2 = 2*val1 + rand()%val1; - clif_status_change(bl,SI_ACTIVE_MONSTER_TRANSFORM,1,0,1002,0,0); // Temporarily shows Poring need official [malufett] + clif_status_change(bl,SI_ACTIVE_MONSTER_TRANSFORM,1,0,1002,0,0); break; case SC_KAGEMUSYA: val3 = val1 * 2; @@ -8326,13 +8327,29 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val tick_time = 1000; break; case SC_ZANGETSU: - val2 = status_get_lv(bl) / 2 + 50; + if( (status_get_hp(bl)+status_get_sp(bl)) % 2 == 0) + val2 = status_get_lv(bl) / 2 + 50; + else + val2 -= 50; break; case SC_GENSOU: - if( rand()%100 < 50) // needs more info - status_zap(bl, 500, 500); - else - status_heal(bl, 500, 500, 0); + { + int hp = status_get_hp(bl), lv = 5; + short per = 100 / (status_get_max_hp(bl) / hp); + + if( per <= 15 ) + lv = 1; + else if( per <= 30 ) + lv = 2; + else if( per <= 50 ) + lv = 3; + else if( per <= 75 ) + lv = 4; + if( hp % 2 == 0) + status_heal(bl, hp * (6-lv) * 4 / 100, status_get_sp(bl) * (6-lv) * 3 / 100, 1); + else + status_zap(bl, hp * (lv*4) / 100, status_get_sp(bl) * (lv*3) / 100); + } break; default: if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == 0 && StatusIconChangeTable[type] == 0 ) @@ -8389,6 +8406,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_FEAR: case SC_NETHERWORLD: case SC_MEIKYOUSISUI: + case SC_KYOUGAKU: unit_stop_walking(bl,1); break; case SC_HIDING: |