changeCharacter增加参数检测,整合_status.characterlist的操作

This commit is contained in:
Spmario233 2024-02-15 02:31:22 +08:00
parent 79b7be9272
commit a91c1f4219
3 changed files with 43 additions and 16 deletions

View File

@ -4625,7 +4625,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content(){
'step 0'
player.awakenSkill('yukito_yaxiang');
player.reinit('key_yukito','key_crow');
player.reinitCharacter('key_yukito', 'key_crow', false);
'step 1'
if(target.hp<3) target.recover(3-target.hp);
'step 2'
@ -7815,9 +7815,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.recover(num);
player.draw(num);
if(_status.characterlist&&_status.characterlist.includes('key_midori')){
player.reinit('key_mio','key_midori',false);
_status.characterlist.remove('key_midori');
_status.characterlist.add('key_mio');
player.reinitCharacter('key_mio','key_midori', false);
}
},
},
@ -7890,9 +7888,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.recover(num);
player.draw(num);
if(_status.characterlist&&_status.characterlist.includes('key_mio')){
player.reinit('key_midori','key_mio',false);
_status.characterlist.remove('key_mio');
_status.characterlist.add('key_midori');
player.reinitCharacter('key_midori', 'key_mio', false);
}
},
},
@ -10754,7 +10750,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content(){
'step 0'
player.awakenSkill('umi_qihuan');
player.reinit('key_umi','key_umi2');
player.reinitCharacter('key_umi', 'key_umi2', false);
player.recover(game.countGroup()||1);
if(!game.dead.length) event.finish();
'step 1'

View File

@ -14,24 +14,34 @@ export const Content = {
//变更武将牌
async changeCharacter(event,trigger,player) {
const rawPairs = [player.name1];
if (player.name2) rawPairs.push(player.name2);
if (player.name2 && lib.character[player.name2]) rawPairs.push(player.name2);
event.rawPairs = rawPairs;
const newPairs = event.newPairs;
for(let name of newPairs){
if(!lib.character[name]){
console.warn(`警告Player[${player.name}]试图将武将牌变更为不存在的武将“${name}`);
return;
}
}
const removeSkills = [], addSkills = [];
//变更前后数量相同的情况
if (rawPairs.length == newPairs.length){
for (let i = 0; i<Math.min(2, rawPairs.length); i++){
let rawName = rawPairs[i], newName = newPairs[i];
if (rawName != newName && lib.character[rawName] && lib.character[newName]) {
game.log(player, '将', `#b${get.translation(rawName)}`, '变更为了', `#b${get.translation(newName)}`)
if(event.log !== false) game.log(player, '将', `#b${get.translation(rawName)}`, '变更为了', `#b${get.translation(newName)}`)
game.broadcastAll((player, rawName, newName)=>{
player.reinit(rawName, newName, null, true);
},player, rawName, newName);
removeSkills.addArray(lib.character[rawName][3]);
addSkills.addArray(lib.character[newName][3])
addSkills.addArray(lib.character[newName][3]);
}
}
}
if(_status.characterlist){
_status.characterlist.removeArray(newPairs);
_status.characterlist.addArray(rawPairs);
}
//变更一下获得前后的技能
player.changeSkills(addSkills, removeSkills);
},
@ -54,8 +64,18 @@ export const Content = {
event.$handle(player, event.addSkill, event.removeSkill, event);
}
else {
if(event.addSkill.length) player.addSkillLog(event.addSkill);
if(event.removeSkill.length) player.removeSkillLog(event.removeSkill);
if(event.addSkill.length){
player.addSkill(event.addSkill);
game.log(player, '获得了技能', ...event.addSkill.map(i => {
return '#g【' + get.translation(i) + '】';
}));
}
if(event.removeSkill.length){
player.removeSkill(event.removeSkill);
game.log(player, '失去了技能', ...event.removeSkill.map(i => {
return '#g【' + get.translation(i) + '】';
}));
}
}
//手动触发时机
await event.trigger('changeSkillsEnd');

View File

@ -1560,7 +1560,7 @@ export class Player extends HTMLDivElement {
* @param { String } to
* @returns { GameEventPromise }
*/
reinitCharacter(from, to){
reinitCharacter(from, to, log = true){
const rawPairs = [this.name1];
if (this.name2) rawPairs.push(this.name2);
for (let i=0; i<rawPairs.length; i++){
@ -1569,16 +1569,27 @@ export class Player extends HTMLDivElement {
break;
}
}
return this.changeCharacter(rawPairs);
return this.changeCharacter(rawPairs, log);
}
/**
* @param { String[] } newPairs
* @returns { GameEventPromise }
*/
changeCharacter(newPairs){
changeCharacter(newPairs, log = true){
if (!Array.isArray(newPairs)){
console.warn(`警告Player[${this.name}].changeCharacter填写了一个错误的参数:`,newPairs);
return;
}
for(let name of newPairs){
if(!lib.character[name]){
console.warn(`警告Player[${this.name}]试图将武将牌变更为不存在的武将:`,name);
return;
}
}
const next = game.createEvent('changeCharacter');
next.player = this;
next.newPairs = newPairs;
next.log = log;
next.setContent('changeCharacter');
return next;
}