Skip to content

Commit

Permalink
Updated Flash Combo effect
Browse files Browse the repository at this point in the history
* Includes fixes for Dragon Combo, Fallen Empire, Tiger Cannon, and Sky Net Blow.
* Removed the SR_FLASHCOMBO_ATK_STEP usage.
* Fixes #627, fixes #725, fixes #741, and fixes #765.
Thanks to @exneval and @rytech!
  • Loading branch information
aleos89 committed Jan 29, 2016
1 parent 3011639 commit fc68007
Show file tree
Hide file tree
Showing 10 changed files with 172 additions and 160 deletions.
10 changes: 3 additions & 7 deletions db/pre-re/skill_db.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1099,11 +1099,11 @@

//****
// SR Sura
2326,-2,8,1,-1,0,0,10,-2,no,0,0,0,weapon,0,0x0, SR_DRAGONCOMBO,Dragon Combo
2326,1,8,1,-1,0,0,10,-2,no,0,0,0,weapon,0,0x0, SR_DRAGONCOMBO,Dragon Combo
2327,0,8,4,-1,0x2,2,5,-3,no,0,0,0,weapon,3,0x0, SR_SKYNETBLOW,Sky Net Blow
2328,0,6,4,-1,0x2,1:2:3:4:5,5,1,no,0,0,0,weapon,0,0x0, SR_EARTHSHAKER,Earth Shaker
2329,-2,8,4,-1,0,0,5,-2,no,0,0x200,0,weapon,0,0x0, SR_FALLENEMPIRE,Fallen Empire
2330,-2,6,1,-1,0x42,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_TIGERCANNON,Tiger Cannon
2329,1,8,4,-1,0,0,5,-2,no,0,0x200,0,weapon,0,0x0, SR_FALLENEMPIRE,Fallen Empire
2330,1,6,1,-1,0x3,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_TIGERCANNON,Tiger Cannon
2331,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, SR_HELLGATE,Hell Gate
2332,0,6,4,-1,0x2,3,5,1,no,0,0x40000,0,weapon,0,0x0, SR_RAMPAGEBLASTER,Rampage Blaster
2333,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_CRESCENTELBOW,Crescent Elbow
Expand Down Expand Up @@ -1324,10 +1324,6 @@
5012,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, WL_TELEKINESIS_INTENSE,Intense Telekinesis
5013,0,6,4,0,0x3,0,5,1,no,0,0,0,none,0,0x0, LG_KINGS_GRACE,King's Grace
5014,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, ALL_FULL_THROTTLE,Full Throttle
5015,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO_ATK_STEP1,Flash Combo Attack Step 1
5016,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO_ATK_STEP2,Flash Combo Attack Step 2
5017,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO_ATK_STEP3,Flash Combo Attack Step 3
5018,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO_ATK_STEP4,Flash Combo Attack Step 4

//****
// Homunculus S
Expand Down
4 changes: 0 additions & 4 deletions db/pre-re/skill_require_db.txt
Original file line number Diff line number Diff line change
Expand Up @@ -956,10 +956,6 @@
5012,0,0,100:150:200:250:300,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,0,0 //WL_TELEKINESIS_INTENSE
5013,0,0,200:180:160:140: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,0,0 //LG_KINGS_GRACE
5014,0,0,1,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,0,0 //ALL_FULL_THROTTLE
5015,0,0,1,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,0,0 //SR_FLASHCOMBO_ATK_STEP1 //All 4 steps are using temp req SP values for now.
5016,0,0,1,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,0,0 //SR_FLASHCOMBO_ATK_STEP2
5017,0,0,1,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,0,0 //SR_FLASHCOMBO_ATK_STEP3
5018,0,0,1,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,0,0 //SR_FLASHCOMBO_ATK_STEP4

// Copied Bard / Dancer Skills
//3036,0,0,1,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,0,0 //BA_POEMBRAGI2
Expand Down
12 changes: 4 additions & 8 deletions db/re/skill_db.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1099,11 +1099,11 @@

//****
// SR Sura
2326,-2,8,1,-1,0,0,10,-2,no,0,0,0,weapon,0,0x0, SR_DRAGONCOMBO,Dragon Combo
2326,1,8,1,-1,0,0,10,-2,no,0,0,0,weapon,0,0x0, SR_DRAGONCOMBO,Dragon Combo
2327,0,8,4,-1,0x2,2,5,-3,no,0,0,0,weapon,3,0x0, SR_SKYNETBLOW,Sky Net Blow
2328,0,6,4,-1,0x2,1:2:3:4:5,5,1,no,0,0,0,weapon,0,0x0, SR_EARTHSHAKER,Earth Shaker
2329,-2,8,4,-1,0,0,5,-2,no,0,0x200,0,weapon,0,0x0, SR_FALLENEMPIRE,Fallen Empire
2330,-2,6,1,-1,0x42,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_TIGERCANNON,Tiger Cannon
2329,1,8,4,-1,0,0,5,-2,no,0,0x200,0,weapon,0,0x0, SR_FALLENEMPIRE,Fallen Empire
2330,1,6,1,-1,0x3,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_TIGERCANNON,Tiger Cannon
2331,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, SR_HELLGATE,Hell Gate
2332,0,6,4,-1,0x2,3,5,1,no,0,0x40000,0,weapon,0,0x0, SR_RAMPAGEBLASTER,Rampage Blaster
2333,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_CRESCENTELBOW,Crescent Elbow
Expand All @@ -1119,7 +1119,7 @@
2343,1:2:3:3:4:4:5:5:6:7,8,1,-1,0,0,10,-7,yes,0,0,0,weapon,0,0x0, SR_GATEOFHELL,Gate of Hell
2344,2,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, SR_GENTLETOUCH_QUIET,Gentle Touch - Quiet
2345,2,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_GENTLETOUCH_CURE,Gentle Touch - Cure
2346,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, SR_GENTLETOUCH_ENERGYGAIN,Gentle Touch - Energy Gain
2346,2,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, SR_GENTLETOUCH_ENERGYGAIN,Gentle Touch - Energy Gain
2347,2,6,16,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, SR_GENTLETOUCH_CHANGE,Gentle Touch - Change
2348,2,6,16,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, SR_GENTLETOUCH_REVITALIZE,Gentle Touch - Revitalize
//More from Sura but not following ID order
Expand Down Expand Up @@ -1327,10 +1327,6 @@
5012,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, WL_TELEKINESIS_INTENSE,Intense Telekinesis
5013,0,6,4,0,0x3,0,5,1,no,0,0,0,none,0,0x0, LG_KINGS_GRACE,King's Grace
5014,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, ALL_FULL_THROTTLE,Full Throttle
5015,-2,8,1,-1,0,0,10,-2,no,0,0,0,weapon,0,0x0, SR_FLASHCOMBO_ATK_STEP1,Flash Combo Attack Step 1
5016,-2,8,4,-1,0,0,5,-2,no,0,0x200,0,weapon,0,0x0, SR_FLASHCOMBO_ATK_STEP2,Flash Combo Attack Step 2
5017,-2,6,1,-1,0x42,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_FLASHCOMBO_ATK_STEP3,Flash Combo Attack Step 3
5018,0,8,4,-1,0x2,2,5,-3,no,0,0,0,weapon,3,0x0, SR_FLASHCOMBO_ATK_STEP4,Flash Combo Attack Step 4

//****
// Homunculus S
Expand Down
4 changes: 0 additions & 4 deletions db/re/skill_require_db.txt
Original file line number Diff line number Diff line change
Expand Up @@ -971,10 +971,6 @@
5012,0,0,100:150:200:250:300,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,0,0 //WL_TELEKINESIS_INTENSE
5013,0,0,200:180:160:140: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,0,0 //LG_KINGS_GRACE
5014,0,0,1,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,0,0 //ALL_FULL_THROTTLE
5015,0,0,0,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,0,0 //SR_FLASHCOMBO_ATK_STEP1 //All 4 steps are using temp req SP values for now.
5016,0,0,0,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,0,0 //SR_FLASHCOMBO_ATK_STEP2
5017,0,0,0,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,0,0 //SR_FLASHCOMBO_ATK_STEP3
5018,0,0,0,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,0,0 //SR_FLASHCOMBO_ATK_STEP4

8001,0,0,13:16:19:22:25,0,0,0,99,0,0,none,0,0,545,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //HLIF_HEAL
8002,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,0,0 //HLIF_AVOID
Expand Down
87 changes: 43 additions & 44 deletions src/map/battle.c
Original file line number Diff line number Diff line change
Expand Up @@ -2765,6 +2765,7 @@ static struct Damage battle_calc_element_damage(struct Damage wd, struct block_l
switch( skill_id ) {
case MC_CARTREVOLUTION:
case SR_GATEOFHELL:
case SR_TIGERCANNON:
case KO_BAKURETSU:
//Forced to neutral element
wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
Expand Down Expand Up @@ -3941,38 +3942,30 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
break;

case SR_DRAGONCOMBO:
case SR_FLASHCOMBO_ATK_STEP1:
skillratio += 40 * skill_lv;
RE_LVL_DMOD(100);
break;
case SR_FALLENEMPIRE:
case SR_FLASHCOMBO_ATK_STEP2:
// ATK [(Skill Level x 150 + 100) x Caster Base Level / 150] %
skillratio += 150 * skill_lv;
RE_LVL_DMOD(150);
break;
case SR_TIGERCANNON:
case SR_FLASHCOMBO_ATK_STEP3:
{
int hp = sstatus->max_hp * (10 + 2 * skill_lv) / 100, // skill_get_hp_rate(SR_TIGERCANNON, skill_lv)
sp = sstatus->max_sp * (5 + 1 * skill_lv) / 100; // skill_get_sp_rate(SR_TIGERCANNON, skill_lv)
if( sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE )
// Base_Damage = [((Caster consumed HP + SP) / 2) x Caster Base Level / 100] %
skillratio += ((hp+sp) / 2);
else
// Base_Damage = [((Caster consumed HP + SP) / 4) x Caster Base Level / 100] %
skillratio += ((hp+sp) / 4);
case SR_TIGERCANNON: {
int hp = sstatus->max_hp * (10 + 2 * skill_lv) / 100,
sp = sstatus->max_sp * (5 + skill_lv) / 100;

if (wd.miscflag&4) // Base_Damage = [((Caster consumed HP + SP) / 2) x Caster Base Level / 100] %
skillratio += -100 + (hp + sp) / 2;
else // Base_Damage = [((Caster consumed HP + SP) / 4) x Caster Base Level / 100] %
skillratio += -100 + (hp + sp) / 4;
RE_LVL_DMOD(100);
}
break;
case SR_SKYNETBLOW:
case SR_FLASHCOMBO_ATK_STEP4:
if( sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_DRAGONCOMBO )
//ATK [{(Skill Level x 100) + (Caster AGI) + 150} x Caster Base Level / 100] %
skillratio += (100 * skill_lv + sstatus->agi + 150);
else
//ATK [{(Skill Level x 80) + (Caster AGI)} x Caster Base Level / 100] %
skillratio += (80 * skill_lv + sstatus->agi);
if (wd.miscflag&4) // ATK [{(Skill Level x 100) + (Caster's AGI) + 150} x Caster's Base Level / 100] %
skillratio += 100 * skill_lv + sstatus->agi + 50;
else // ATK [{(Skill Level x 80) + (Caster's AGI)} x Caster's Base Level / 100] %
skillratio += -100 + 80 * skill_lv + sstatus->agi;
RE_LVL_DMOD(100);
break;

Expand Down Expand Up @@ -4283,22 +4276,13 @@ static int64 battle_calc_skill_constant_addition(struct Damage wd, struct block_
atk = damagevalue;
}
break;
case SR_TIGERCANNON:
case SR_FLASHCOMBO_ATK_STEP3:
// (Tiger Cannon skill level x 240) + (Target Base Level x 40)
if( skill_id == SR_FLASHCOMBO_ATK_STEP3 || (sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE) )
atk = ( skill_lv * 500 + status_get_lv(target) * 40 );
else
atk = ( skill_lv * 240 + status_get_lv(target) * 40 );
break;
case SR_FALLENEMPIRE:
case SR_FLASHCOMBO_ATK_STEP2:
// [(Target Size value + Skill Level - 1) x Caster STR] + [(Target current weight x Caster DEX / 120)]
atk = ( ((tstatus->size+1)*2 + skill_lv - 1) * sstatus->str);
if( tsd && tsd->weight )
atk += ( (tsd->weight/10) * sstatus->dex / 120 );
atk = ((tstatus->size + 1) * 2 + skill_lv - 1) * sstatus->str;
if (tsd && tsd->weight)
atk += tsd->weight / 10 * sstatus->dex / 120;
else
atk += ( status_get_lv(target) * 50 ); //mobs
atk += status_get_lv(target) * 50; //mobs
break;
}
return atk;
Expand Down Expand Up @@ -4446,14 +4430,12 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s
break;
}
}

if (sc->data[SC_FLASHCOMBO]) {
ATK_ADD(wd.damage, wd.damage2, sc->data[SC_FLASHCOMBO]->val2);
#ifdef RENEWAL
ATK_ADD(wd.equipAtk, wd.equipAtk2, sc->data[SC_FLASHCOMBO]->val2);
#endif
}

if((wd.flag&(BF_LONG|BF_MAGIC)) == BF_LONG) { // Monster Transformation bonus
if (sc->data[SC_MTF_RANGEATK]) {
ATK_ADDRATE(wd.damage, wd.damage2, sc->data[SC_MTF_RANGEATK]->val1);
Expand Down Expand Up @@ -5307,16 +5289,23 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
ATK_ADD(wd.damage, wd.damage2, 10 * skill - i);
}
break;
case SR_TIGERCANNON:
if (wd.miscflag&4) {
ATK_ADD(wd.damage, wd.damage2, skill_lv * 500 + status_get_lv(target) * 40);
} else {
ATK_ADD(wd.damage, wd.damage2, skill_lv * 240 + status_get_lv(target) * 40);
}
break;
case SR_GATEOFHELL: {
struct status_data *sstatus = status_get_status_data(src);
struct status_data *sstatus = status_get_status_data(src);

ATK_ADD(wd.damage, wd.damage2, sstatus->max_hp - status_get_hp(src));
if(sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE) {
ATK_ADD(wd.damage, wd.damage2, (sstatus->max_sp * (1 + skill_lv * 2 / 10)) + 40 * status_get_lv(src));
} else
ATK_ADD(wd.damage, wd.damage2, (sstatus->sp * (1 + skill_lv * 2 / 10)) + 10 * status_get_lv(src));
}
break;
ATK_ADD(wd.damage, wd.damage2, sstatus->max_hp - status_get_hp(src));
if (sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE) {
ATK_ADD(wd.damage, wd.damage2, sstatus->max_sp * (1 + skill_lv * 2 / 10) + 40 * status_get_lv(src));
} else
ATK_ADD(wd.damage, wd.damage2, sstatus->sp * (1 + skill_lv * 2 / 10) + 10 * status_get_lv(src));
}
break;
}

if(sd) {
Expand Down Expand Up @@ -5453,6 +5442,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
#endif
case SO_VARETYR_SPEAR:
return wd; //These skills will do a GVG fix later
case SR_TIGERCANNON:
if (wd.miscflag&8)
break; //Splash Tiger Cannon GVG fix will be calculated later [exneval]
default:
wd = battle_calc_attack_gvg_bg(wd, src, target, skill_id, skill_lv);
break;
Expand All @@ -5462,7 +5454,14 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl

battle_absorb_damage(target, &wd);

battle_do_reflect(BF_WEAPON,&wd, src, target, skill_id, skill_lv); //WIP [lighta]
switch(skill_id) { // Skill reflect gets calculated after all attack modifier
case SR_TIGERCANNON:
if (wd.miscflag&8)
break; //Splash Tiger Cannon will be reflected later [exneval]
default:
battle_do_reflect(BF_WEAPON, &wd, src, target, skill_id, skill_lv); //WIP [lighta]
break;
}

return wd;
}
Expand Down
2 changes: 2 additions & 0 deletions src/map/battle.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,12 @@ struct block_list;

struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct block_list *target,uint16 skill_id,uint16 skill_lv,int flag);
struct Damage battle_calc_attack_plant(struct Damage wd, struct block_list *src,struct block_list *target, uint16 skill_id, uint16 skill_lv);
struct Damage battle_calc_attack_gvg_bg(struct Damage wd, struct block_list *src, struct block_list *target, uint16 skill_id, uint16 skill_lv);

int64 battle_calc_return_damage(struct block_list *bl, struct block_list *src, int64 *, int flag, uint16 skill_id, bool status_reflect);

void battle_drain(struct map_session_data *sd, struct block_list *tbl, int64 rdamage, int64 ldamage, int race, int class_, bool infdef);
void battle_do_reflect(int attack_type, struct Damage *wd, struct block_list *src, struct block_list *target, uint16 skill_id, uint16 skill_lv);

int battle_attr_ratio(int atk_elem,int def_type, int def_lv);
int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 damage,int atk_elem,int def_type, int def_lv);
Expand Down
1 change: 1 addition & 0 deletions src/map/map.h
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,7 @@ struct block_list {
int id;
int16 m,x,y;
enum bl_type type;
int64 damage;
};


Expand Down

5 comments on commit fc68007

@cydh
Copy link
Contributor

@cydh cydh commented on fc68007 Jan 29, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

really they (kRO) removed that _STEP skill?
when user mentioned no animation, is is confirmed? are u sure they don't use 'external' client files?

@aleos89
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From what I've seen they don't use the _STEP stuff anymore because the ID clash with Doram skills. That's why I removed it.

@icxbb-xx
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SR_FLASHCOMBO_ATK_STEP4 use same skill id Basic skill for Doram

@Playtester
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mentioned it on Discord already, but I really would like to see a better solution than adding an int64 to block_list. At the very least only do it for renewal.

We just want the damage to be the same for all targets, right? Can't be just use skill_area_temp for this? Also, why do we have to move the damage code into skill.c? All damage code should be in battle.c.

@cydh
Copy link
Contributor

@cydh cydh commented on fc68007 Feb 2, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Instead of as clean up, this is TOTALLY revert my changes. I know when I pushed this, u have ur own diff, u were going to merge 'someone' else work that (maybe) u think it's perfect, otherwise that I think it's ridiculous. (some are mentioned by Playtester, damage on block_list, damage calculation on skill.c)
  2. Why bother about 'conflicted' skill id for skill that are not present/implemented yet? If it's confirmed, u can just simply remove it. Beside, has someone really 'confirm' the official really send same Skill IDs for Flash Combo steps by using 'normal' skill IDs? Try using OpenKore maybe, u'll get the Skill ID what server sent.
  3. Client animation error? Again, check the client files, even in 'recent' kRO, the IDs is in the lua.
  4. Back to 1st point, if it just clean up, fixing the formula bug, this is beyond clean up. :P

Please sign in to comment.