You can skip to solutions. Not all figured issues are solved
Any part other than solutions means to provide info for other scripters who are interested in solving the issue.
Figured issue: 123 should be solved now
1. Monster attack wording becomes richer. In the old version, if monster h"its you", then they hits you. Otherwise, the damage comes from the player.
Now there is, h'its you', y"ou partially" block/parry, g"lances you", y"ou take". So, some of the monster damage are counted as your damage in previous changes (You attack yourself).
2. There are two type of damage wording for non-dot damage.
for x type dmg: old version: melee attack, strike, magic | new version: magic
for x points of type dmg. old version: spike, counter | new version: melee attack, strike, spike, counter
My modified type regexp captured all of them... which was not right. But I don't want to change the naming format. I'm lazy
3. If y"ou cast" in that turn, any non-monster damage is considered as magic damage.
So, once you cast non-offensive, any non h"its you" damage from 1 and 2 would be magic damage
TODO
4.
Any miss-record becomes inaccurate because of the wording. Need to run the arena and record the wording
Counter# is accurate, but block# and parry# will be less than the real number. I already notice if the wording is not "you block" or "you parry", then it will not be recorded.
5. dot damage might be inaccurate. Physical dot damage is accurate. I did not test magical dot damage
6. Resist record seems to be missing. I never see r50, r75, r90 in ISK
7. Maybe MB should record # of partially parry and block from damage dealt and damage taken now. And they also have p50, p25, b50, b25. Also, partially parry and block at the same time (I have no idea how to name this one).
SOLUTION:
change
CODE
if ( cfg.trackDamage ) {
var dmg;
if ( (dmg = turn.match(regexp.damage)) ) {
var cast = action.indexOf('You cast') > -1, data, shield;
for ( var i = 0; i < dmg.length; i++ ) {
if ( (data = dmg[i].match(regexp.type)) ) {
data[2] = data[2].toLowerCase();
if ( (dmg[i].indexOf('its you') > -1) || (dmg[i].indexOf('glances you') > -1) ) {
var crit = dmg[i].indexOf(' crits ') > -1;
if ( dmg[i].indexOf(' casts ') > -1 ) {
combatlog.mtaken.hit++;
if ( crit ) combatlog.mtaken.crit++;
combatlog.mtaken[data[2]] = (combatlog.mtaken[data[2]] ? combatlog.mtaken[data[2]] : 0) + parseInt(data[1]);
if ( (shield = dmg[i].match(regexp.shield)) ) {
combatlog.mtaken.shit++;
if ( crit ) combatlog.mtaken.scrit++;
combatlog.mtaken['s'+data[2]] = (combatlog.mtaken['s'+data[2]] ? combatlog.mtaken['s'+data[2]] : 0) + parseInt(shield[1]); }}
else {
combatlog.ptaken.hit++;
if ( crit ) combatlog.ptaken.crit++;
combatlog.ptaken[data[2]] = (combatlog.ptaken[data[2]] ? combatlog.ptaken[data[2]] : 0) + parseInt(data[1]);
if ( (shield = dmg[i].match(regexp.shield)) ) {
combatlog.ptaken.shit++;
if ( crit ) combatlog.ptaken.scrit++;
combatlog.ptaken['s'+data[2]] = (combatlog.ptaken['s'+data[2]] ? combatlog.ptaken['s'+data[2]] : 0) + parseInt(shield[1]); }}}
else {
if ( cast ) {
if ( dmg[i].indexOf(' explodes ') < 0 ) {
combatlog.mdealt.hit++;
if ( dmg[i].indexOf(' blasts ') > -1 ) combatlog.mdealt.crit++; }
combatlog.mdealt[data[2]] = (combatlog.mdealt[data[2]] ? combatlog.mdealt[data[2]] : 0) + parseInt(data[1]); }
else {
if ( !regexp.strike.test(dmg[i]) ) {
combatlog.pdealt.hit++;
if ( regexp.crit.test(dmg[i]) ) combatlog.pdealt.crit++; }
combatlog.pdealt[data[2]] = (combatlog.pdealt[data[2]] ? combatlog.pdealt[data[2]] : 0) + parseInt(data[1]); }}}
else if ( (data = dmg[i].match(regexp.dot)) ) {
if ( regexp.pdot.test(dmg[i]) ) combatlog.pdealt.dot = (combatlog.pdealt.dot ? combatlog.pdealt.dot : 0) + parseInt(data[1]);
else combatlog.mdealt.dot = (combatlog.mdealt.dot ? combatlog.mdealt.dot : 0) + parseInt(data[1]); }
else if ( (data = dmg[i].match(regexp.points)) ) {
data[2] = data[2].toLowerCase();
if ( dmg[i].indexOf('You counter') > -1 ) {
combatlog.pdealt.hit++;
combatlog.pdealt[data[2]] = (combatlog.pdealt[data[2]] ? combatlog.pdealt[data[2]] : 0) + parseInt(data[1]); }
else {
combatlog.mdealt[data[2]] = (combatlog.mdealt[data[2]] ? combatlog.mdealt[data[2]] : 0) + parseInt(data[1]); }}}}
to
CODE
if ( cfg.trackDamage ) {
var dmg;
if ( (dmg = turn.match(regexp.damage)) ) {
var cast = action.indexOf('You cast') > -1, data, shield;
for ( var i = 0; i < dmg.length; i++ ) {
if ( (data = dmg[i].match(regexp.type))) {
let spike = dmg[i].indexOf("spike shield") > -1;
let cnter = dmg[i].indexOf("You counter") > -1;
data[2] = data[2].toLowerCase();
if ( (dmg[i].indexOf('its you') > -1) || (dmg[i].indexOf("ou partially") > -1) || (dmg[i].indexOf("lances you") > -1) || (dmg[i].indexOf("ou take") > -1) ) {
var crit = dmg[i].indexOf(' crits ') > -1;
if ( dmg[i].indexOf(' casts ') > -1 ) {
combatlog.mtaken.hit++;
if ( crit ) combatlog.mtaken.crit++;
combatlog.mtaken[data[2]] = (combatlog.mtaken[data[2]] ? combatlog.mtaken[data[2]] : 0) + parseInt(data[1]);
if ( (shield = dmg[i].match(regexp.shield)) ) {
combatlog.mtaken.shit++;
if ( crit ) combatlog.mtaken.scrit++;
combatlog.mtaken['s'+data[2]] = (combatlog.mtaken['s'+data[2]] ? combatlog.mtaken['s'+data[2]] : 0) + parseInt(shield[1]); }}
else {
combatlog.ptaken.hit++;
if ( crit ) combatlog.ptaken.crit++;
combatlog.ptaken[data[2]] = (combatlog.ptaken[data[2]] ? combatlog.ptaken[data[2]] : 0) + parseInt(data[1]);
if ( (shield = dmg[i].match(regexp.shield)) ) {
combatlog.ptaken.shit++;
if ( crit ) combatlog.ptaken.scrit++;
combatlog.ptaken['s'+data[2]] = (combatlog.ptaken['s'+data[2]] ? combatlog.ptaken['s'+data[2]] : 0) + parseInt(shield[1]); }}}
else if (spike) {
combatlog.mdealt[data[2]] = (combatlog.mdealt[data[2]] ? combatlog.mdealt[data[2]] : 0) + parseInt(data[1]);
}
else if (cnter) {
combatlog.pdealt.hit++;
combatlog.pdealt[data[2]] = (combatlog.pdealt[data[2]] ? combatlog.pdealt[data[2]] : 0) + parseInt(data[1]);
}
else {
if ( cast ) {
if ( dmg[i].indexOf(' explodes ') < 0 ) {
combatlog.mdealt.hit++;
if ( dmg[i].indexOf(' blasts ') > -1 ) combatlog.mdealt.crit++; }
combatlog.mdealt[data[2]] = (combatlog.mdealt[data[2]] ? combatlog.mdealt[data[2]] : 0) + parseInt(data[1]); }
else {
if ( !regexp.strike.test(dmg[i]) ) {
combatlog.pdealt.hit++;
if ( regexp.crit.test(dmg[i]) ) combatlog.pdealt.crit++; }
combatlog.pdealt[data[2]] = (combatlog.pdealt[data[2]] ? combatlog.pdealt[data[2]] : 0) + parseInt(data[1]); }}}
else if ( (data = dmg[i].match(regexp.dot)) ) {
if ( regexp.pdot.test(dmg[i]) ) combatlog.pdealt.dot = (combatlog.pdealt.dot ? combatlog.pdealt.dot : 0) + parseInt(data[1]);
else combatlog.mdealt.dot = (combatlog.mdealt.dot ? combatlog.mdealt.dot : 0) + parseInt(data[1]); }
else if ( (data = dmg[i].match(regexp.points)) ) {
data[2] = data[2].toLowerCase();
if ( dmg[i].indexOf('You counter') > -1 ) {
combatlog.pdealt.hit++;
combatlog.pdealt[data[2]] = (combatlog.pdealt[data[2]] ? combatlog.pdealt[data[2]] : 0) + parseInt(data[1]); }
else {
combatlog.mdealt[data[2]] = (combatlog.mdealt[data[2]] ? combatlog.mdealt[data[2]] : 0) + parseInt(data[1]); }}}}
The branch " (data = dmg[i].match(regexp.points)) " should be unreachable but I'd like to keep because I don't want to test it.
This post has been edited by l13763824039: Nov 7 2025, 05:57