commit
e08a7859ba
|
@ -268,7 +268,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
||||||
let ignore=get.copy(ui.selected.cards),used=player.getCardUsable('sha')-1.5,ph=player.getCards('hs');
|
let ignore=get.copy(ui.selected.cards),used=player.getCardUsable('sha')-1.5,ph=player.getCards('hs');
|
||||||
ignore.add(item);
|
ignore.add(item);
|
||||||
if(typeof item==='object'&&item.cards) ignore.addArray(item.cards);
|
if(typeof item==='object'&&item.cards) ignore.addArray(item.cards);
|
||||||
let na=get.natureList(item),number=get.number(item),natures=['thunder','fire','ice','kami'],nb;
|
let na=get.natureList(item),number,natures=['thunder','fire','ice','kami'],nb;
|
||||||
|
if(typeof item==='object') number=get.number(item);
|
||||||
|
else number=0;
|
||||||
for(let i of ph){
|
for(let i of ph){
|
||||||
if(ignore.includes(i)||get.name(i)!=='sha'||!lib.filter.cardEnabled(i,player)) continue;
|
if(ignore.includes(i)||get.name(i)!=='sha'||!lib.filter.cardEnabled(i,player)) continue;
|
||||||
nb=get.natureList(i);
|
nb=get.natureList(i);
|
||||||
|
|
|
@ -95,34 +95,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(player._dcsantou_temp) return;
|
if(player._dcsantou_temp) return;
|
||||||
if(get.tag(card,'damage')){
|
if(get.tag(card,'damage')){
|
||||||
const hp=target.getHp();
|
const hp=target.getHp();
|
||||||
if(hp>=3){
|
|
||||||
if(target.hasHistory('useSkill',evt=>evt.skill=='dcsantou'&&evt.event.getTrigger().source==player)) return [1,-2];
|
|
||||||
else if(get.attitude(player,target)<0){
|
|
||||||
if(card.name=='sha') return;
|
|
||||||
let sha=false;
|
|
||||||
player._dcsantou_temp=true;
|
player._dcsantou_temp=true;
|
||||||
let num=player.countCards('h',card=>{
|
const losehp=get.effect(target,{name:'losehp'},target,target)/get.attitude(target,target);
|
||||||
if(card.name=='sha'){
|
|
||||||
if(sha) return false;
|
|
||||||
else sha=true;
|
|
||||||
}
|
|
||||||
return get.tag(card,'damage')&&player.canUse(card,target)&&get.effect(target,card,player,player)>0;
|
|
||||||
});
|
|
||||||
delete player._dcsantou_temp;
|
delete player._dcsantou_temp;
|
||||||
if(player.hasSkillTag('damage')){
|
if(hp>=3){
|
||||||
num++;
|
if(target.hasHistory('useSkill',evt=>evt.skill=='dcsantou'&&evt.event.getTrigger().source==player)) return [0,losehp,0,0];
|
||||||
|
else if(get.attitude(player,target)<0){
|
||||||
|
let hs=player.getCards('hs',i=>{
|
||||||
|
return i!==card&&(!card.cards||!card.cards.includes(i));
|
||||||
|
}),num=player.getCardUsable('sha');
|
||||||
|
if(card.name==='sha') num--;
|
||||||
|
hs=hs.filter(i=>{
|
||||||
|
if(!player.canUse(i,target)) return false;
|
||||||
|
if(get.tag(card,'damage')&&get.name(i,player)!=='sha') return true;
|
||||||
|
if(num){
|
||||||
|
num--;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
if(num<2){
|
return false;
|
||||||
var enemies=player.getEnemies();
|
}).length;
|
||||||
if(enemies.length==1&&enemies[0]==target&&player.needsToDiscard()){
|
if(player.hasSkillTag('damage',null,{target:target})) hs++;
|
||||||
return;
|
if(!hs) return 'zeroplayertarget';
|
||||||
}
|
num=1-2/3/hs;
|
||||||
return 0;
|
return [num,0,num,0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if(hp==2&&get.tag(card,'natureDamage')||hp==1&&typeof card=='object'&&get.color(card)=='red') return [0,losehp,0,0];
|
||||||
else if(hp==2&&get.tag(card,'natureDamage')||hp==1&&get.color(card)=='red'&&get.itemtype(card)=='card') return [1,-2];
|
return 'zeroplayertarget';
|
||||||
else return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,6 +159,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else event.finish();
|
else event.finish();
|
||||||
|
},
|
||||||
|
ai:{
|
||||||
|
reverseEquip:true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//隅泣曹操
|
//隅泣曹操
|
||||||
|
|
|
@ -1563,9 +1563,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
prompt2:`${undamaged.length?'选择一张牌弃置并选择一名未对你造成过伤害的角色,你对其造成1点伤害':''}${undamaged.length&&damaged.length?';<br>或':''}${damaged.length?'仅选择一名对你造成过伤害的角色,你令其摸两张牌':''}。`,
|
prompt2:`${undamaged.length?'选择一张牌弃置并选择一名未对你造成过伤害的角色,你对其造成1点伤害':''}${undamaged.length&&damaged.length?';<br>或':''}${damaged.length?'仅选择一名对你造成过伤害的角色,你令其摸两张牌':''}。`,
|
||||||
damaged:damaged,
|
damaged:damaged,
|
||||||
aiTarget:(()=>{
|
aiTarget:(()=>{
|
||||||
|
if(!undamaged.some(i=>{
|
||||||
|
if(get.attitude(player,i)>0) return true;
|
||||||
|
if(i.getHp(true)+i.hujia<2) return true;
|
||||||
|
return false;
|
||||||
|
})&&(player.hp>2||get.damageEffect(player,player,player)>=0)) return player;
|
||||||
var info=game.filterPlayer().map(current=>{
|
var info=game.filterPlayer().map(current=>{
|
||||||
var damage=undamaged.includes(current);
|
let damage=undamaged.includes(current),card={name:damage?'damage':'wuzhong'};
|
||||||
var card={name:damage?'damage':'wuzhong'};
|
|
||||||
return [current,get.effect(current,card,player,player)/(damage?1.5:1)];
|
return [current,get.effect(current,card,player,player)/(damage?1.5:1)];
|
||||||
}).sort((a,b)=>b[1]-a[1])[0];
|
}).sort((a,b)=>b[1]-a[1])[0];
|
||||||
if(info[1]>0) return info[0];
|
if(info[1]>0) return info[0];
|
||||||
|
@ -1626,6 +1630,35 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
content:function(){
|
content:function(){
|
||||||
trigger.num++;
|
trigger.num++;
|
||||||
},
|
},
|
||||||
|
ai:{
|
||||||
|
damageBonus:true,
|
||||||
|
skillTagFilter:(player,tag,arg)=>{
|
||||||
|
if(tag==='damageBonus'&&arg&&arg.target){
|
||||||
|
const history=_status.globalHistory;
|
||||||
|
for(let i=history.length-1;i>=0;i--){
|
||||||
|
let evts=history[i]['useCard'];
|
||||||
|
for(let j=evts.length-1;j>=0;j--){
|
||||||
|
var evt=evts[j];
|
||||||
|
let card=evt.card,targets=evt.targets;
|
||||||
|
if(!get.tag(card,'damage')||!targets.includes(player)) continue;
|
||||||
|
return arg.target===evt.player;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
effect:{
|
||||||
|
player:(card,player,target)=>{
|
||||||
|
if(get.tag(card,'damage')&&target&&lib.skill.jsrghuchou.ai.skillTagFilter(player,'damageBonus',{
|
||||||
|
card:card,
|
||||||
|
target:target
|
||||||
|
})&&!target.hasSkillTag('filterDamage',null,{
|
||||||
|
player:player,
|
||||||
|
card:card
|
||||||
|
})) return [1,0,2,0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
jsrgjiemeng:{
|
jsrgjiemeng:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
|
|
@ -3388,8 +3388,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target);
|
return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target);
|
||||||
}).set('sourcex',trigger.targets).set('ai',function(target){
|
}).set('sourcex',trigger.targets).set('ai',function(target){
|
||||||
var player=_status.event.player;
|
var player=_status.event.player;
|
||||||
|
if(player.countCards('h')%2==0) return true;
|
||||||
var eff=get.effect(target,_status.event.card,player,player);
|
var eff=get.effect(target,_status.event.card,player,player);
|
||||||
if(player.countCards('h')%2==0&&player.hasSkill('olxieju')&&player.isPhaseUsing()&&!player.getStat().skill.olxieju) return 1-eff;
|
if(player.hasSkill('olxieju')&&player.isPhaseUsing()&&!player.getStat().skill.olxieju&&get.attitude(player,target)>0&&!game.hasGlobalHistory('useCard',evt=>{
|
||||||
|
return evt.targets&&evt.targets.includes(target);
|
||||||
|
})) return 6+eff;
|
||||||
return eff;
|
return eff;
|
||||||
}).set('card',trigger.card);
|
}).set('card',trigger.card);
|
||||||
}
|
}
|
||||||
|
@ -3398,9 +3401,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return _status.event.bool;
|
return _status.event.bool;
|
||||||
}).set('bool',function(){
|
}).set('bool',function(){
|
||||||
var att=get.attitude(trigger.player,player);
|
var att=get.attitude(trigger.player,player);
|
||||||
var eff=get.effect(player,trigger.card,trigger.player,trigger.player);
|
if(player.countCards('h')%2==0){
|
||||||
if(player.countCards('h')%2==0&&att>0) return true;
|
if(att>0) return true;
|
||||||
if(eff>0) return true;
|
return false;
|
||||||
|
}
|
||||||
|
if(get.effect(player,trigger.card,trigger.player,trigger.player)>0) return true;
|
||||||
return false;
|
return false;
|
||||||
}());
|
}());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1666,6 +1666,7 @@ export class Library extends Uninstantable {
|
||||||
},
|
},
|
||||||
splash_style: {
|
splash_style: {
|
||||||
name: '启动页',
|
name: '启动页',
|
||||||
|
init: 'style1',
|
||||||
item: {
|
item: {
|
||||||
style1: '样式一',
|
style1: '样式一',
|
||||||
style2: '样式二',
|
style2: '样式二',
|
||||||
|
@ -28643,6 +28644,11 @@ export class Library extends Uninstantable {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
needsToDiscard(filter, add) {
|
needsToDiscard(filter, add) {
|
||||||
|
/**
|
||||||
|
* filter: typeof 'number' -> 额外摸等量牌(逻辑上)
|
||||||
|
* typeof 'function' -> 只考虑符合函数筛选的牌
|
||||||
|
* add: 额外获得这张/些牌(逻辑上)
|
||||||
|
*/
|
||||||
let cards = this.getCards('h', card => !this.canIgnoreHandcard(card)), num = 0;
|
let cards = this.getCards('h', card => !this.canIgnoreHandcard(card)), num = 0;
|
||||||
if (get.itemtype(add) === 'cards') cards.addArray(add);
|
if (get.itemtype(add) === 'cards') cards.addArray(add);
|
||||||
else if (get.itemtype(add) === 'card') cards.push(add);
|
else if (get.itemtype(add) === 'card') cards.push(add);
|
||||||
|
@ -28812,7 +28818,11 @@ export class Library extends Uninstantable {
|
||||||
return this.hasUsableCard('shan');
|
return this.hasUsableCard('shan');
|
||||||
}
|
}
|
||||||
mayHaveSha(viewer, type, ignore, rvt) {
|
mayHaveSha(viewer, type, ignore, rvt) {
|
||||||
//rvt: return value type 'count', 'odds', 'bool'(default)
|
/**
|
||||||
|
* type: skill tag type 'use', 'respond'
|
||||||
|
* ignore: ignore cards, ui.selected.cards added
|
||||||
|
* rvt: return value type 'count', 'odds', 'bool'(default)
|
||||||
|
*/
|
||||||
let count = 0;
|
let count = 0;
|
||||||
if ((this.hp > 2 || !this.isZhu && this.hp > 1) && this.hasSkillTag('respondSha', true, type, true)) {
|
if ((this.hp > 2 || !this.isZhu && this.hp > 1) && this.hasSkillTag('respondSha', true, type, true)) {
|
||||||
if (rvt === 'count') count++;
|
if (rvt === 'count') count++;
|
||||||
|
@ -28850,7 +28860,11 @@ export class Library extends Uninstantable {
|
||||||
return count > _status.event.getRand('mayHaveSha' + hs + this.playerid);
|
return count > _status.event.getRand('mayHaveSha' + hs + this.playerid);
|
||||||
}
|
}
|
||||||
mayHaveShan(viewer, type, ignore, rvt) {
|
mayHaveShan(viewer, type, ignore, rvt) {
|
||||||
//rvt: return value type 'count', 'odds', 'bool'(default)
|
/**
|
||||||
|
* type: skill tag type 'use', 'respond'
|
||||||
|
* ignore: ignore cards, ui.selected.cards added
|
||||||
|
* rvt: return value type 'count', 'odds', 'bool'(default)
|
||||||
|
*/
|
||||||
let count = 0;
|
let count = 0;
|
||||||
if ((this.hp > 2 || !this.isZhu && this.hp > 1) && this.hasSkillTag('respondShan', true, type, true)) {
|
if ((this.hp > 2 || !this.isZhu && this.hp > 1) && this.hasSkillTag('respondShan', true, type, true)) {
|
||||||
if (rvt === 'count') count++;
|
if (rvt === 'count') count++;
|
||||||
|
|
Loading…
Reference in New Issue