# 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) @@ -1758,7 +1758,7 @@ //-- MH_ANGRIFFS_MODUS 8035,200:400:600:800:1000,0,0,30000:45000:60000:75000:90000,0,0,-1 //-- MH_TINDER_BREAKER -//8036,0,0,0,0,0,0,0 +//8036,0,0,0,5000,0,0,0 //-- MH_CBC //8037,0,0,0,0,0,0,0 //-- MH_EQC Index: db/re/skill_require_db.txt --- db/re/skill_require_db.txt Base (BASE) +++ db/re/skill_require_db.txt Locally Modified (Based On LOCAL) @@ -26,6 +26,8 @@ // poisonweapon = Requires to be under Poisoning Weapon. // rollingcutter = Requires at least one Rotation Counter from Rolling Cutter. // elementalspirit = Requires to have an Elemental Spirit summoned. +// mh_fighting = eleanor fighthing mode +// mh_grappling = eleanor grappling mode 5,0,0,8:8:8:8:8:15:15:15:15:15,0,0,0,0:1:2:3:4:5:6:7:8:9:10:12:13:14:15:16:17:18:19:20:21: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 //SM_BASH#ƒoƒbƒVƒ…# 6,0,0,4:5:6:7:8:9:10:11:12:13,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 //SM_PROVOKE#ƒvƒƒ{ƒbƒN# @@ -855,7 +857,7 @@ 8025,0,0,90:100:110:120:130,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 //MH_XENO_SLASHER#Xeno Slasher# 8026,0,0,45:54:63:72:81,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 //MH_SILENT_BREEZE#Silent Breeze# 8027,0,0,35,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 //MH_STYLE_CHANGE#Style Change# -8028,0,0,20:25:30:35: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 //MH_SONIC_CRAW#Sonic Claw# +8028,0,0,20:25:30:35:40,0,0,0,99,0,0,mh_fighting,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_SONIC_CRAW#Sonic Claw# 8029,0,0,10:15:20:25:30,0,0,0,99,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_SILVERVEIN_RUSH#Silver Bain Rush# 8030,0,0,8:16:24:32:40,0,0,0,99,0,0,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_MIDNIGHT_FRENZY#Midnight Frenzy# 8031,0,0,40:45:50:55:60,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 //MH_STAHL_HORN#Steel Horn# @@ -863,8 +865,8 @@ 8033,0,0,80:90:100:110:120,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 //MH_STEINWAND#Stone Wall# 8034,0,0,60:68:76:84:100,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 //MH_HEILIGE_STANGE#Holy Pole# 8035,0,0,60:65:70:75:80,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 //MH_ANGRIFFS_MODUS#Attack Mode# -8036,0,0,20:25:30:35:40,0,0,0,99,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_TINDER_BREAKER#Tinder Breaker# -8037,0,0,10:20:30:40:50,0,0,0,99,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_CBC#Continual Break Combo# +8036,0,0,20:25:30:35:40,0,0,0,99,0,0,mh_grappling,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_TINDER_BREAKER#Tinder Breaker# +8037,0,0,10:20:30:40:50,0,0,0,99,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_CBC#Continual Break Combo# 8038,0,0,24:28:32:36:40,0,0,0,99,0,0,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_EQC#Eternal Quick Combo# 8039,0,0,34:38:42:46:50,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 //MH_MAGMA_FLOW#Magma Flow# 8040,0,0,54:58:62:66:70,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 //MH_GRANITIC_ARMOR#Granitic Armor# Index: src/common/mmo.h --- src/common/mmo.h Base (BASE) +++ src/common/mmo.h Locally Modified (Based On LOCAL) @@ -290,6 +290,8 @@ int int_ ; int dex ; int luk ; + + char spiritball; //for homun S [lighta] }; struct s_mercenary { Index: src/map/battle.c --- src/map/battle.c Base (BASE) +++ src/map/battle.c Locally Modified (Based On LOCAL) @@ -1119,7 +1119,7 @@ if( sd && (sce = sc->data[SC_FORCEOFVANGUARD]) && flag&BF_WEAPON && rnd()%100 < sce->val2 ) pc_addspiritball(sd,skill_get_time(LG_FORCEOFVANGUARD,sce->val1),sce->val3); - if (sc->data[SC_STYLE_CHANGE] && rnd() % 100 < 50) { + if (sc->data[SC_STYLE_CHANGE] && rnd()%2) { TBL_HOM *hd = BL_CAST(BL_HOM,bl); if (hd) hom_addspiritball(hd, 10); //add a sphere } @@ -1182,7 +1182,7 @@ sc_start(bl,sc->data[SC_POISONINGWEAPON]->val2,100,sc->data[SC_POISONINGWEAPON]->val1,skill_get_time2(GC_POISONINGWEAPON, 1)); if( sc->data[SC__DEADLYINFECT] && damage > 0 && rnd()%100 < 65 + 5 * sc->data[SC__DEADLYINFECT]->val1 ) status_change_spread(src, bl); - if (sc->data[SC_STYLE_CHANGE] && rnd() % 100 < 50) { + if (sc->data[SC_STYLE_CHANGE] && rnd()%2) { TBL_HOM *hd = BL_CAST(BL_HOM,bl); if (hd) hom_addspiritball(hd, 10); } @@ -2923,6 +2923,7 @@ case MH_LAVA_SLIDE: skillratio = 70 * skill_lv; break; + case MH_TINDER_BREAKER: case MH_MAGMA_FLOW: skillratio += -100 + 100 * skill_lv; break; @@ -3044,9 +3045,8 @@ } if(sc->data[SC_STYLE_CHANGE]){ TBL_HOM *hd = BL_CAST(BL_HOM,src); - if (hd) ATK_ADD(hd->spiritball * 3); + if (hd) ATK_ADD(hd->homunculus.spiritball * 3); } - } switch (skill_num) { Index: src/map/clif.c --- src/map/clif.c Base (BASE) +++ src/map/clif.c Locally Modified (Based On LOCAL) @@ -6917,7 +6917,7 @@ WBUFW(buf, 6) = 0; //init to 0 switch(bl->type){ case BL_PC: WBUFW(buf, 6) = sd->spiritball; break; - case BL_HOM: WBUFW(buf, 6) = hd->spiritball; break; + case BL_HOM: WBUFW(buf, 6) = hd->homunculus.spiritball; break; } clif_send(buf, packet_len(0x1d0), bl, AREA); } Index: src/map/homunculus.c --- src/map/homunculus.c Base (BASE) +++ src/map/homunculus.c Locally Modified (Based On LOCAL) @@ -86,14 +86,14 @@ if (max > MAX_SKILL_LEVEL) max = MAX_SKILL_LEVEL; - if (hd->spiritball < 0) - hd->spiritball = 0; + if (hd->homunculus.spiritball < 0) + hd->homunculus.spiritball = 0; - if (hd->spiritball && hd->spiritball >= max) { - hd->spiritball = max; + if (hd->homunculus.spiritball && hd->homunculus.spiritball >= max) { + hd->homunculus.spiritball = max; } else - hd->spiritball++; + hd->homunculus.spiritball++; clif_spiritball(&hd->bl); @@ -103,18 +103,18 @@ int hom_delspiritball(TBL_HOM *hd, int count, int type) { nullpo_ret(hd); - if (hd->spiritball <= 0) { - hd->spiritball = 0; + if (hd->homunculus.spiritball <= 0) { + hd->homunculus.spiritball = 0; return 0; } if (count <= 0) return 0; if (count > MAX_SKILL_LEVEL) count = MAX_SKILL_LEVEL; - if (count > hd->spiritball) - count = hd->spiritball; + if (count > hd->homunculus.spiritball) + count = hd->homunculus.spiritball; - hd->spiritball -= count; + hd->homunculus.spiritball -= count; if (!type) clif_spiritball(&hd->bl); Index: src/map/homunculus.h --- src/map/homunculus.h Base (BASE) +++ src/map/homunculus.h Locally Modified (Based On LOCAL) @@ -25,6 +25,8 @@ extern struct s_homunculus_db homunculus_db[MAX_HOMUNCULUS_CLASS]; enum { HOMUNCULUS_CLASS, HOMUNCULUS_FOOD }; +enum { MH_MD_FIGHTING=1, MH_MD_GRAPPLING }; + enum { SP_ACK = 0x0, SP_INTIMATE = 0x1, @@ -45,8 +47,6 @@ int hungry_timer; //[orn] unsigned int exp_next; char blockskill[MAX_SKILL]; // [orn] - - int spiritball; //for homun S [lighta] }; #define MAX_HOM_SKILL_REQUIRE 5 Index: src/map/skill.c --- src/map/skill.c Base (BASE) +++ src/map/skill.c Locally Modified (Based On LOCAL) @@ -4589,10 +4589,23 @@ 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); } break; + case MH_STAHL_HORN: case MH_NEEDLE_OF_PARALYZE: skill_attack(BF_WEAPON, src, src, bl, skillid, skilllv, tick, flag); break; + case MH_TINDER_BREAKER: + if (unit_movepos(src, bl->x, bl->y, 1, 1)) { +#if PACKETVER >= 20111005 + clif_snap(src, bl->x, bl->y); +#else + clif_skill_poseffect(src,skillid,skilllv,bl->x,bl->y,tick); +#endif + } + clif_skill_nodamage(src,bl,skillid,skilllv, + sc_start4(bl,SC_CLOSECONFINE2,100,skilllv,src->id,0,0,skill_get_time(skillid,skilllv))); + skill_attack(BF_WEAPON, src, src, bl, skillid, skilllv, tick, flag); + break; case 0:/* no skill - basic/normal attack */ if(sd) { @@ -13122,7 +13135,17 @@ return 0; } break; + case ST_MH_FIGHTING: + if (!(sc && sc->data[SC_STYLE_CHANGE] && sc->data[SC_STYLE_CHANGE]->val2 == MH_MD_FIGHTING)){ + clif_skill_fail(sd,skill,USESKILL_FAIL_LEVEL,0); + return 0; } + case ST_MH_GRAPPLING: + if (!(sc && sc->data[SC_STYLE_CHANGE] && sc->data[SC_STYLE_CHANGE]->val2 == MH_MD_GRAPPLING)){ + clif_skill_fail(sd,skill,USESKILL_FAIL_LEVEL,0); + return 0; + } + } if(require.mhp > 0 && get_percentage(status->hp, status->max_hp) > require.mhp) { //mhp is the max-hp-requirement, that is, @@ -17532,6 +17555,8 @@ else if( strcmpi(split[10],"elementalspirit")==0 ) skill_db[i].state = ST_ELEMENTALSPIRIT; else if (strcmpi(split[10], "poisonweapon") == 0) skill_db[i].state = ST_POISONINGWEAPON; else if (strcmpi(split[10], "rollingcutter") == 0) skill_db[i].state = ST_ROLLINGCUTTER; + else if (strcmpi(split[10], "mh_fighting") == 0) skill_db[i].state = ST_MH_FIGHTING; + else if (strcmpi(split[10], "mh_grappling") == 0) skill_db[i].state = ST_MH_GRAPPLING; /** * Unknown or no state Index: src/map/skill.h --- src/map/skill.h Base (BASE) +++ src/map/skill.h Locally Modified (Based On LOCAL) @@ -402,6 +402,8 @@ ST_ELEMENTALSPIRIT, ST_POISONINGWEAPON, ST_ROLLINGCUTTER, + ST_MH_FIGHTING, + ST_MH_GRAPPLING, }; enum e_skill { Index: src/map/status.c --- src/map/status.c Base (BASE) +++ src/map/status.c Locally Modified (Based On LOCAL) @@ -509,6 +509,8 @@ set_sc(MH_PAIN_KILLER, SC_PAIN_KILLER, SI_PAIN_KILLER, SCB_ASPD); add_sc(MH_STYLE_CHANGE, SC_STYLE_CHANGE); + set_sc( MH_TINDER_BREAKER , SC_CLOSECONFINE2 , SI_CLOSECONFINE2 , SCB_NONE ); + set_sc( MH_TINDER_BREAKER , SC_CLOSECONFINE , SI_CLOSECONFINE , SCB_FLEE ); add_sc( MER_CRASH , SC_STUN ); @@ -8505,6 +8507,11 @@ if(sc->data[SC_PARALYSIS]) sc_start(bl, SC_ENDURE, 100, val1, tick); //start endure for same duration break; + case SC_STYLE_CHANGE: //[Lighta] need real info + tick = -1; + if(val2 == MH_MD_FIGHTING) val2 = MH_MD_GRAPPLING; + else val2 = MH_MD_FIGHTING; + break; default: if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == 0 && StatusIconChangeTable[type] == 0 ) { //Status change with no calc, no icon, and no skill associated...? Index: src/map/unit.c --- src/map/unit.c Base (BASE) +++ src/map/unit.c Locally Modified (Based On LOCAL)