# This patch file was generated by NetBeans IDE # Following Index: paths are relative to: /home/lighta/Documents/Myscript/RO/Servs/rathena # This patch can be applied using context Tools: Patch action on respective folder. # It uses platform neutral UTF-8 encoding and \n newlines. # Above lines and this line are ignored by the patching process. Index: db/re/skill_cast_db.txt --- db/re/skill_cast_db.txt Base (BASE) +++ db/re/skill_cast_db.txt Locally Modified (Based On LOCAL) @@ -1511,7 +1511,7 @@ //-- WM_SOUND_OF_DESTRUCTION 2429,0:500:1000:1500:2000,1000,0,0,0,20000,500 //-- WM_SATURDAY_NIGHT_FEVER -2430,1000:2000:3000:4000:5000,1000,0,10000:15000:20000:25000:30000,3000,180000,1000 \ No newline at end of file +2430,1000:2000:3000:4000:5000,1000,0,10000:15000:20000:25000:30000,10000:8000:6000:4000:2000,180000,1000 //-- WM_LERADS_DEW 2431,1000,1000,0,20000:30000:40000:50000:60000,0,180000,500 //-- WM_MELODYOFSINK Index: src/map/battle.c --- src/map/battle.c Base (BASE) +++ src/map/battle.c Locally Modified (Based On LOCAL) @@ -364,9 +364,10 @@ status_change_end(target, SC_THORNSTRAP, INVALID_TIMER); if( tsc->data[SC_FIRE_CLOAK_OPTION]) damage -= damage * tsc->data[SC_FIRE_CLOAK_OPTION]->val2 / 100; - if( tsc->data[SC_CRYSTALIZE] && target->type != BL_MOB){ + if( tsc->data[SC_CRYSTALIZE] && target->type != BL_MOB) status_change_end(target, SC_CRYSTALIZE, INVALID_TIMER); - } + if (tsc->data[SC_EARTH_INSIGNIA]) + damage += damage * 50 / 100; break; case ELE_HOLY: if( tsc->data[SC_ORATIO]) @@ -379,7 +380,17 @@ case ELE_WIND: if( tsc->data[SC_CRYSTALIZE] && target->type != BL_MOB) damage = damage * 150 / 100; + if (tsc->data[SC_WATER_INSIGNIA]) + damage += damage * 50 / 100; break; + case ELE_WATER: + if (tsc->data[SC_FIRE_INSIGNIA]) + damage += damage * 50 / 100; + break; + case ELE_EARTH: + if (tsc->data[SC_WIND_INSIGNIA] && atk_elem == ELE_EARTH) + damage += damage * 50 / 100; + break; } } //end tsc check if( src && src->type == BL_PC ){ Index: src/map/pc.c --- src/map/pc.c Base (BASE) +++ src/map/pc.c Locally Modified (Based On LOCAL) @@ -2020,7 +2020,7 @@ } /*========================================== - * ? ���i�ɂ��\�͓��̃{?�i�X�ݒ� + * Add a bonus(type) to player sd *------------------------------------------*/ int pc_bonus(struct map_session_data *sd,int type,int val) { @@ -8944,7 +8944,7 @@ nullpo_retv(sd); status_change_end(&sd->bl, SC_TENSIONRELAX, INVALID_TIMER); - + clif_status_load(&sd->bl,SI_SIT,0); //Reset sitting tick. sd->ssregen.tick.hp = sd->ssregen.tick.sp = 0; sd->state.dead_sit = sd->vd.dead_sit = 0; Index: src/map/skill.c --- src/map/skill.c Base (BASE) +++ src/map/skill.c Locally Modified (Based On LOCAL) @@ -591,6 +591,7 @@ break; case WM_LULLABY_DEEPSLEEP: case WM_SIRCLEOFNATURE: + case WM_SATURDAY_NIGHT_FEVER: if( !map_flag_vs(m) ) { clif_skill_teleportmessage(sd,2); // This skill uses this msg instead of skill fails. return 1; @@ -8335,7 +8336,8 @@ if( src->id != bl->id && battle_check_target(src,bl,BCT_ENEMY) > 0 ) status_fix_damage(src,bl,9999,clif_damage(src,bl,tick,0,0,9999,0,0,0)); } else if( sd ) { - if( !sd->status.party_id ) { + short chance = sstatus->int_/6 + sd->status.job_level/5 + skilllv*4; + if( !sd->status.party_id || (rnd()%100 > chance)) { clif_skill_fail(sd,skillid,USESKILL_FAIL_NEED_HELPER,0); break; } @@ -11567,6 +11569,23 @@ case UNT_EARTH_INSIGNIA: case UNT_ZEPHYR: sc_start(bl,type, 100, sg->skill_lv, sg->interval); + if (!battle_check_undead(tstatus->race, tstatus->def_ele)) { + int hp = tstatus->max_hp / 100; //+1% each 5s + if ((sg->val3) % 5) { //each 5s + if (tstatus->def_ele == skill_get_ele(sg->skill_id,sg->skill_lv)){ + status_heal(bl, hp, 0, 2); + } else if((sg->unit_id == UNT_FIRE_INSIGNIA && tstatus->def_ele == ELE_EARTH) + ||(sg->unit_id == UNT_WATER_INSIGNIA && tstatus->def_ele == ELE_FIRE) + ||(sg->unit_id == UNT_WIND_INSIGNIA && tstatus->def_ele == ELE_WATER) + ||(sg->unit_id == UNT_EARTH_INSIGNIA && tstatus->def_ele == ELE_WIND) + ){ + status_heal(bl, -hp, 0, 0); + } + } + } + sg->val3++; //timer + if (sg->val3 > 5) + sg->val3 = 0; break; case UNT_VACUUM_EXTREME: @@ -13475,6 +13494,8 @@ VARCAST_REDUCTION(sc->data[SC_POEMBRAGI]->val2); if (sc->data[SC_IZAYOI]) VARCAST_REDUCTION(50); + if (sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 3 && (skill_get_ele(skill_id, skill_lv) == ELE_WATER)) + VARCAST_REDUCTION(30);; //Reduces 30% Variable Cast Time of Water spells. // Fixed cast reduction bonuses if( sc->data[SC__LAZINESS] ) fixcast_r = max(fixcast_r, sc->data[SC__LAZINESS]->val2); @@ -13580,7 +13601,10 @@ if (sc && sc->count) { if (sc->data[SC_POEMBRAGI]) time -= time * sc->data[SC_POEMBRAGI]->val3 / 100; + if (sc->data[SC_WIND_INSIGNIA] && sc->data[SC_WIND_INSIGNIA]->val1 == 3 && (skill_get_ele(skill_id, skill_lv) == ELE_WIND)) + time /= 2; // After Delay of Wind element spells reduced by 50%. } + } if( !(delaynodex&4) && sd && sd->delayrate != 100 ) Index: src/map/status.c --- src/map/status.c Base (BASE) +++ src/map/status.c Locally Modified (Based On LOCAL) @@ -670,10 +670,10 @@ set_sc( SO_WARMER , SC_WARMER , SI_WARMER , SCB_NONE ); set_sc( SO_VACUUM_EXTREME , SC_VACUUM_EXTREME , SI_VACUUM_EXTREME , SCB_NONE ); set_sc( SO_ARRULLO , SC_DEEPSLEEP , SI_DEEPSLEEP , SCB_NONE ); - set_sc( SO_FIRE_INSIGNIA , SC_FIRE_INSIGNIA , SI_FIRE_INSIGNIA , SCB_MATK ); - set_sc( SO_WATER_INSIGNIA , SC_WATER_INSIGNIA , SI_WATER_INSIGNIA , SCB_NONE ); - set_sc( SO_WIND_INSIGNIA , SC_WIND_INSIGNIA , SI_WIND_INSIGNIA , SCB_NONE ); - set_sc( SO_EARTH_INSIGNIA , SC_EARTH_INSIGNIA , SI_EARTH_INSIGNIA , SCB_MDEF|SCB_DEF|SCB_MAXHP|SCB_MAXSP|SCB_WATK ); + set_sc( SO_FIRE_INSIGNIA , SC_FIRE_INSIGNIA , SI_FIRE_INSIGNIA , SCB_MATK | SCB_BATK | SCB_WATK | SCB_ATK_ELE | SCB_REGEN ); + set_sc( SO_WATER_INSIGNIA , SC_WATER_INSIGNIA , SI_WATER_INSIGNIA , SCB_WATK | SCB_ATK_ELE | SCB_REGEN ); + set_sc( SO_WIND_INSIGNIA , SC_WIND_INSIGNIA , SI_WIND_INSIGNIA , SCB_WATK | SCB_ATK_ELE | SCB_REGEN ); + set_sc( SO_EARTH_INSIGNIA , SC_EARTH_INSIGNIA , SI_EARTH_INSIGNIA , SCB_MDEF|SCB_DEF|SCB_MAXHP|SCB_MAXSP|SCB_WATK | SCB_ATK_ELE | SCB_REGEN ); /** * Genetic **/ @@ -3433,6 +3433,11 @@ regen->hp = cap_value(regen->hp*sc->data[SC_GT_REVITALIZE]->val3/100, 1, SHRT_MAX); regen->state.walk= 1; } + if ((sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 1) //if insignia lvl 1 + || (sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 1) + || (sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 1) + || (sc->data[SC_WIND_INSIGNIA] && sc->data[SC_WIND_INSIGNIA]->val1 == 1)) + regen->rate.hp *= 2; } void status_calc_state( struct block_list *bl, struct status_change *sc, enum scs_flag flag, bool start ) { @@ -5283,9 +5288,7 @@ if(sc->data[SC_BERSERK]) aspd_rate -= 300; - else - - if(sc->data[SC_MADNESSCANCEL]) + else if(sc->data[SC_MADNESSCANCEL]) aspd_rate -= 200; } @@ -6378,7 +6381,6 @@ case SC_INCREASEAGI: if(sd && pc_issit(sd)){ pc_setstand(sd); - clif_status_load(&sd->bl,SI_SIT,0); } case SC_CONCENTRATE: @@ -6572,6 +6574,9 @@ if(sc->data[i]) return 0; } break; + case SC_INTRAVISION: + if(sd && sd->special_state.intravision) return 0; //we already have the status by maya P + break; } //Check for BOSS resistances @@ -10118,7 +10123,7 @@ case SC_SATURDAYNIGHTFEVER: - // 1% HP/SP drain every 3 seconds [Jobbie] + // 1% HP/SP drain every val4 seconds [Jobbie] if( --(sce->val3) >= 0 ) { int hp = status->hp / 100;