mota-js/libs/enemys.min.js
2018-05-27 23:17:10 +08:00

1 line
7.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function enemys(){this.init()}enemys.prototype.init=function(){this.enemys=enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80};enemys.prototype.getEnemys=function(a){if(!core.isset(a)){return this.enemys}return this.enemys[a]};enemys.prototype.hasSpecial=function(a,b){if(a instanceof Array){return a.indexOf(b)>=0}if(typeof a=="number"){return a!=0&&(a%100==b||this.hasSpecial(parseInt(a/100),b))}return false};enemys.prototype.getSpecialText=function(b){var a=core.material.enemys[b];if(!core.isset(a)){return[]}var c=a.special;var d=[];if(this.hasSpecial(c,1)){d.push("先攻")}if(this.hasSpecial(c,2)){d.push("魔攻")}if(this.hasSpecial(c,3)){d.push("坚固")}if(this.hasSpecial(c,4)){d.push("2连击")}if(this.hasSpecial(c,5)){d.push("3连击")}if(this.hasSpecial(c,6)){d.push((a.n||4)+"连击")}if(this.hasSpecial(c,7)){d.push("破甲")}if(this.hasSpecial(c,8)){d.push("反击")}if(this.hasSpecial(c,9)){d.push("净化")}if(this.hasSpecial(c,10)){d.push("模仿")}if(this.hasSpecial(c,11)){d.push("吸血")}if(this.hasSpecial(c,12)){d.push("中毒")}if(this.hasSpecial(c,13)){d.push("衰弱")}if(this.hasSpecial(c,14)){d.push("诅咒")}if(this.hasSpecial(c,15)){d.push("领域")}if(this.hasSpecial(c,16)){d.push("夹击")}if(this.hasSpecial(c,17)){d.push("仇恨")}if(this.hasSpecial(c,18)){d.push("阻击")}if(this.hasSpecial(c,19)){d.push("自爆")}if(this.hasSpecial(c,20)){d.push("无敌")}if(this.hasSpecial(c,21)){d.push("退化")}if(this.hasSpecial(c,22)){d.push("固伤")}if(this.hasSpecial(c,23)){d.push("重生")}return d};enemys.prototype.getSpecialHint=function(a,e){if(!core.isset(e)){var c=[];for(var d=1;d<100;d++){if(this.hasSpecial(a.special,d)){var b=this.getSpecialHint(a,d);if(b!=""){c.push(b)}}}return c}switch(e){case 1:return"先攻:怪物首先攻击";case 2:return"魔攻:怪物无视勇士的防御";case 3:return"坚固勇士每回合最多只能对怪物造成1点伤害";case 4:return"2连击怪物每回合攻击2次";case 5:return"3连击怪物每回合攻击3次";case 6:return(a.n||4)+"连击: 怪物每回合攻击"+(a.n||4)+"次";case 7:return"破甲:战斗前,怪物附加角色防御的"+Math.floor(100*core.values.breakArmor||0)+"%作为伤害";case 8:return"反击:战斗时,怪物每回合附加角色攻击的"+Math.floor(100*core.values.counterAttack||0)+"%作为伤害,无视角色防御";case 9:return"净化:战斗前,怪物附加勇士魔防的"+core.values.purify+"倍作为伤害";case 10:return"模仿:怪物的攻防和勇士攻防相等";case 11:return"吸血:战斗前,怪物首先吸取角色的"+Math.floor(100*a.value||0)+"%生命作为伤害"+(a.add?",并把伤害数值加到自身生命上":"");case 12:return"中毒:战斗后,勇士陷入中毒状态,每一步损失生命"+core.values.poisonDamage+"点";case 13:return"衰弱:战斗后,勇士陷入衰弱状态,攻防暂时下降"+core.values.weakValue+"点";case 14:return"诅咒:战斗后,勇士陷入诅咒状态,战斗无法获得金币和经验";case 15:return"领域:经过怪物周围"+(a.range||1)+"格时自动减生命"+(a.value||0)+"点";case 16:return"夹击:经过两只相同的怪物中间,勇士生命值变成一半";case 17:return"仇恨:战斗前,怪物附加之前积累的仇恨值作为伤害"+(core.flags.hatredDecrease?";战斗后,释放一半的仇恨值":"")+"。(每杀死一个怪物获得"+(core.values.hatred||0)+"点仇恨值)";case 18:return"阻击:经过怪物的十字领域时自动减生命"+(a.value||0)+"点,同时怪物后退一格";case 19:return"自爆战斗后勇士的生命值变成1";case 20:return"无敌:勇士无法打败怪物,除非拥有十字架";case 21:return"退化:战斗后勇士永久下降"+(a.atkValue||0)+"点攻击和"+(a.defValue||0)+"点防御";case 22:return"固伤:战斗前,怪物对勇士造成"+(a.damage||0)+"点固定伤害,无视勇士魔防。";case 23:return"重生:怪物被击败后,角色转换楼层则怪物将再次出现";default:break}return""};enemys.prototype.canBattle=function(b){var a=this.getDamage(b);return a!=null&&a<core.status.hero.hp};enemys.prototype.getDamage=function(c){var b=core.material.enemys[c];var a=this.calDamage(b,core.status.hero.hp,core.status.hero.atk,core.status.hero.def,core.status.hero.mdef);if(a==null){return null}return a+this.getExtraDamage(b)};enemys.prototype.getExtraDamage=function(b){var a=0;if(this.hasSpecial(b.special,17)){a+=core.getFlag("hatred",0)}if(this.hasSpecial(b.special,22)){a+=b.damage||0}return a};enemys.prototype.nextCriticals=function(h,k){var o=true;k=k||1;var g=core.material.enemys[h];if(this.hasSpecial(g.special,3)||this.hasSpecial(g.special,10)){return[]}var c=this.getDamageInfo(g,core.status.hero.hp,core.status.hero.atk,core.status.hero.def,core.status.hero.mdef);if(c==null){if(core.status.hero.atk<=g.def){return[[g.def+1-core.status.hero.atk,"?"]]}return[]}var d=[],l=null;var f=c.mon_hp,b=core.status.hero.atk,e=g.def,n=c.turn;if(o){for(var m=n-1;m>=1;m--){var i=Math.ceil(f/m)+e;if(i<=b){break}if(i!=l){var j=this.getDamageInfo(g,core.status.hero.hp,i,core.status.hero.def,core.status.hero.mdef);if(j==null){break}d.push([i-b,c.damage-j.damage]);l=i}if(d.length>=k){break}}}else{l=c.damage;for(var a=b+1;a<=f+e;a++){var j=this.getDamageInfo(g,core.status.hero.hp,a,core.status.hero.def,core.status.hero.mdef);if(j==null){break}if(l>j.damage){l=j.damage;d.push([a-b,c.damage-j.damage]);if(d.length>=k){break}}}}if(d.length==0){d.push([0,0])}return d};enemys.prototype.getDefDamage=function(c,a){a=a||1;var b=core.material.enemys[c];var e=this.calDamage(b,core.status.hero.hp,core.status.hero.atk,core.status.hero.def,core.status.hero.mdef);var d=this.calDamage(b,core.status.hero.hp,core.status.hero.atk,core.status.hero.def+a,core.status.hero.mdef);if(e==null||d==null){return"???"}return e-d};enemys.prototype.getDamageInfo=function(l,e,c,d,f){if(typeof l=="string"){l=core.material.enemys[l]}var j=l.hp,h=l.atk,i=l.def,k=l.special;e=Math.max(0,e);c=Math.max(0,c);d=Math.max(0,d);f=Math.max(0,f);if(this.hasSpecial(k,20)&&!core.hasItem("cross")){return null}var g=0;if(this.hasSpecial(k,11)){var o=e*l.value;o=Math.floor(o)||0;if(l.add){j+=o}g+=o}if(this.hasSpecial(k,10)){h=c;i=d}if(this.hasSpecial(k,2)){d=0}if(this.hasSpecial(k,3)&&i<c-1){i=c-1}if(c<=i){return null}var m=h-d;if(m<0){m=0}if(this.hasSpecial(k,4)){m*=2}if(this.hasSpecial(k,5)){m*=3}if(this.hasSpecial(k,6)){m*=(l.n||4)}var b=0;if(this.hasSpecial(k,8)){b+=Math.floor(core.values.counterAttack*c)}if(this.hasSpecial(k,1)){g+=m}if(this.hasSpecial(k,7)){g+=Math.floor(core.values.breakArmor*d)}if(this.hasSpecial(k,9)){g+=Math.floor(core.values.purify*f)}var n=Math.ceil(j/(c-i));var a=g+(n-1)*m+n*b;a-=f;if(!core.flags.enableNegativeDamage){a=Math.max(0,a)}return{hero_atk:c,hero_def:d,hero_mdef:f,mon_hp:j,mon_atk:h,mon_def:i,per_damage:m,initDamage:g,turn:n,damage:a}};enemys.prototype.calDamage=function(f,c,a,b,d){if(typeof f=="string"){f=core.material.enemys[monsterId]}var e=this.getDamageInfo(f,c,a,b,d);if(e==null){return null}return e.damage};enemys.prototype.getCurrentEnemys=function(e){e=e||core.status.floorId;var d=[];var m={};var f=core.status.maps[e].blocks;for(var a=0;a<f.length;a++){if(core.isset(f[a].event)&&!(core.isset(f[a].enable)&&!f[a].enable)&&f[a].event.cls.indexOf("enemy")==0){var k=f[a].event.id;if(core.isset(m[k])){continue}var j=core.material.enemys[k];var i=j.hp,g=j.atk,h=j.def;if(this.hasSpecial(j.special,10)){g=core.status.hero.atk;h=core.status.hero.def}if(this.hasSpecial(j.special,3)&&h<core.status.hero.atk-1){h=core.status.hero.atk-1}var l=core.enemys.getSpecialText(k);if(l.length>=3){l="多属性..."}else{l=l.join(" ")}var c=this.nextCriticals(k);if(c.length>0){c=c[0]}d.push({id:k,name:j.name,hp:i,atk:g,def:h,money:j.money,experience:j.experience,point:j.point||0,special:l,damage:this.getDamage(k),critical:c[0],criticalDamage:c[1],defDamage:this.getDefDamage(k)});m[k]=true}}d.sort(function(n,o){if(n.damage==o.damage){return n.money-o.money}if(n.damage==null){return 1}if(o.damage==null){return -1}return n.damage-o.damage});return d};