feat: 发布咸鱼喵喵全能助手,加入全收集地图与图文说明
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
const test=require('node:test'),assert=require('node:assert/strict'),vm=require('node:vm');
|
||||
const {installCombat}=require('../lib/combat');
|
||||
test('combat scales player attacks and incoming damage, supports bullets and respects healing and scripted immunity',()=>{
|
||||
function Character(team){this.battle={team,hp:100,unlimitHp:false};}
|
||||
Character.prototype.battleObject=function(){return this.battle;};
|
||||
Character.prototype.overrideBeAttackDamage=function(d){return d;};
|
||||
Character.prototype.onAttackHit=function(info,target){const d=target.overrideBeAttackDamage(info.damage);if(!target.battle.unlimitHp)target.battle.hp-=d;return d;};
|
||||
Character.prototype.requestDamage=function(d){this.battle.hp-=d;};
|
||||
const p=new Character(0),lily=new Character(0),enemy=new Character(1),other=new Character(1),timers=[];
|
||||
const c=vm.createContext({window:{},Game_CharacterBase:Character,$gamePlayer:p,$gameLily:lily,$gameActors:{},setInterval:fn=>timers.push(fn)});
|
||||
const api=vm.runInContext(`(${installCombat.toString()})()`,c);
|
||||
// The real Player and Event classes override the base method independently.
|
||||
enemy.overrideBeAttackDamage=function(d){return d;};p.overrideBeAttackDamage=function(d){return d;};
|
||||
api.change({outgoing:3,incoming:0.5});assert.equal(p.onAttackHit({damage:10},enemy),30);
|
||||
assert.equal(enemy.onAttackHit({damage:10},p),5);p.requestDamage(10);assert.equal(p.battle.hp,90);
|
||||
assert.equal(other.onAttackHit({damage:10,bulletOwner:p},enemy),30);
|
||||
assert.equal(enemy.onAttackHit({damage:-10},p),-10);
|
||||
api.change({oneHit:true});p.onAttackHit({damage:1},enemy);assert.ok(enemy.battle.hp<=0);
|
||||
enemy.battle.hp=100;enemy.battle.unlimitHp=true;p.onAttackHit({damage:1},enemy);assert.equal(enemy.battle.hp,100);
|
||||
assert.throws(()=>api.change({outgoing:Infinity}));assert.throws(()=>api.change({incoming:-1}));
|
||||
c.$gameActors={};api.read();assert.equal(api.read().outgoing,1);assert.equal(api.read().oneHit,false);
|
||||
});
|
||||
Reference in New Issue
Block a user