This commit is contained in:
libccy 2015-05-10 13:34:37 +08:00
parent d0db5c046b
commit 7ce14447ed
8 changed files with 291 additions and 117 deletions

View File

@ -546,7 +546,7 @@ card.swd={
skills:['sadengjinhuan'],
ai:{
basic:{
equipValue:6
equipValue:5.5
}
},
},

View File

@ -4,7 +4,7 @@ character.extra={
shen_zhaoyun:['male','shu',2,['juejing','longhun'],['fullskin'],['fullskin']],
shen_zhugeliang:['male','shu',3,['qixing','kuangfeng','dawu'],['fullskin']],
shen_lvmeng:['male','wu',3,['shelie','gongxin'],['fullskin']],
shen_zhouyu:['male','wu',4,['yeyan','swdqinyin'],['fullskin']],
shen_zhouyu:['male','wu',4,['yeyan','qinyin'],['fullskin']],
shen_simayi:['male','wei',4,['renjie','sbaiyin','lianpo'],['fullskin']],
shen_caocao:['male','wei',3,['guixin','feiying'],['fullskin']],
shen_lvbu:['male','qun',5,['baonu','wuqian','shenfen'],['fullskin']],
@ -755,75 +755,12 @@ character.extra={
}
},
qinyin:{
trigger:{player:'phaseEnd'},
filter:function(event,player){
return player.getStat('damage')>=2;
},
inherit:'swdqinyin',
trigger:{player:'phaseDiscardEnd'},
direct:true,
content:function(){
"step 0"
var recover=0,lose=0;
for(var i=0;i<game.players.length;i++){
if(!game.players[i].isOut()){
if(game.players[i].hp<game.players[i].maxHp){
if(ai.get.attitude(player,game.players[i])>0){
if(game.players[i].hp<2){
lose--;
recover+=0.5;
}
lose--;
recover++;
}
else if(ai.get.attitude(player,game.players[i])<0){
if(game.players[i].hp<2){
lose++;
recover-=0.5;
}
lose++;
recover--;
}
}
else{
if(ai.get.attitude(player,game.players[i])>0){
lose--;
}
else if(ai.get.attitude(player,game.players[i])<0){
lose++;
}
}
}
}
player.chooseControl('失去体力','回复体力','cancel').ai=function(){
if(lose>recover&&lose>0) return 0;
if(lose<recover&&recover>0) return 1;
return 2;
}
"step 1"
if(result.bool==false||result.control=='cancel'){
event.finish();
}
else{
player.logSkill('qinyin');
event.bool=(result.control=='回复体力');
event.num=0;
event.players=game.players.slice(0);
}
"step 2"
if(event.num<event.players.length){
var target=event.players[event.num];
if(event.bool){
target.recover();
}
else{
target.loseHp();
}
event.num++;
event.redo();
}
filter:function(event,player){
return event.cards&&event.cards.length>1
},
ai:{
expose:0.1,
}
},
longhun:{
group:['longhun1','longhun2','longhun3','longhun4'],
@ -1120,7 +1057,7 @@ character.extra={
shelie_info:'摸牌阶段,你可以放弃摸牌,改为从牌堆顶亮出五张牌,你获得不同花色的牌各一张,将其余的牌置入弃牌堆。',
gongxin_info:'出牌阶段,你可以观看一名其他角色的手牌,并可以展示其中一张红桃牌,然后将其弃置或置于牌堆顶,每阶段限一次。',
guixin_info:'每当你受到1次伤害后若至少一名其他角色的区域里有牌你可以选择所有其他角色获得这些角色区域里的一张牌然后将你的武将牌翻面。',
qinyin_info:'回合结束阶段若你于回合造成了超过2点伤害你可以选择一项1.令所有角色各回复1点体力2.令所有角色各失去1点体力。每阶段限一次。',
qinyin_info:'每当你于弃牌阶段内因你的弃置而失去第X张手牌时X至少为2你可以选择一项1.令所有角色各回复1点体力2.令所有角色各失去1点体力。每阶段限一次。',
yeyan_info:'限定技出牌阶段你可以对一至三名角色造成至多共3点火焰伤害你可以任意分配每名目标角色受到的伤害点数若你将对一名角色分配2点或更多的火焰伤害你须先弃置四张不同花色的手牌再失去3点体力。',
qixing:'七星',
qixing_bg:'星',

View File

@ -2844,7 +2844,8 @@ character.swd={
}
}
}
player.chooseControl('失去体力','回复体力','cancel').ai=function(){
player.chooseControl('失去体力','回复体力','cancel',
ui.create.dialog('是否发动【琴音】')).ai=function(){
// console.log(lose,recover);
if(lose>recover&&lose>0) return 0;
if(lose<recover&&recover>0) return 1;
@ -2855,7 +2856,7 @@ character.swd={
event.finish();
}
else{
player.logSkill('swdqinyin');
player.logSkill(_status.event.name);
event.bool=(result.control=='回复体力');
event.num=0;
event.players=game.players.slice(0);
@ -5160,6 +5161,7 @@ character.swd={
return false;
}
},
group:'tianshu_remove',
createDialog:function(player,target,onlylist){
var names=[];
var list=[];
@ -5205,6 +5207,9 @@ character.swd={
},
content:function(){
"step 0"
if(player.storage.tianshu){
player.unmark(player.storage.tianshu+'_charactermark');
}
event.skillai=function(list){
return list.randomGet();
};
@ -5220,9 +5225,6 @@ character.swd={
event._result=event.skillai(lib.skill.tianshu.createDialog(player,target,true));
}
"step 1"
if(player.storage.tianshu){
player.unmark(player.storage.tianshu+'_charactermark');
}
if(event.dialog){
event.dialog.close();
}
@ -5250,6 +5252,18 @@ character.swd={
}
}
},
tianshu_remove:{
trigger:{player:'phaseUseBegin'},
forced:true,
popup:false,
content:function(){
if(player.storage.tianshu){
player.unmark(player.storage.tianshu+'_charactermark');
delete player.storage.tianshu;
delete player.additionalSkills.tianshu;
}
}
},
tianshu_ai:{},
tianshu2:{
trigger:{player:'phaseBegin'},
@ -7963,7 +7977,7 @@ character.swd={
tanlin_info:'出牌阶段限一次,你可以与一名其他角色进行拼点,若你赢,你获得双方拼点牌、对该角色使用卡牌无视距离且可以额外使用一张杀直到回合结束,若你没赢,你受到该角色的一点伤害。',
pozhen_info:'每当你受到一次伤害若你的手牌数大于伤害来源你可以弃置X张手牌对其造成一点伤害若你的手牌数小于伤害来源你可以弃置其X张手牌。X为你与伤害来源的手牌数之差。',
yunchou_info:'出牌阶段限一次,你可以弃置任意张手牌,并弃置一张其他角色的手牌,你弃置的手牌中每有一张与此牌的颜色相同,你摸一张牌,否则对方摸一张牌',
tianshu_info:'出牌阶段,你可以弃置一张锦囊牌,并获得场上一名存活角色的一项技能(再使用则会替换前一次获得的技能)',
tianshu_info:'出牌阶段,你可以弃置一张锦囊牌,并获得场上一名存活角色的一项技能直到你的下一回合开始(多次使用会替换前一次获得的技能)',
luomei_info:'每当你使用或打出一张梅花花色的牌,你可以摸一张牌',
xingdian_info:'出牌阶段限一次,你可以弃置一张手牌,然后指定至多两名角色令其各弃置一张牌',
yulin_info:'每当你即将受到伤害,你可以弃置一张装备牌抵消此伤害',

View File

@ -892,9 +892,9 @@ character.xianjian={
filter:function(event,player){
return _status.currentPhase!=player;
},
priority:101,
content:function(){
var cards=[];
// var max=player.hp<=2?3:2;
var max=Math.min(ui.cardPile.childNodes.length,lib.skill.longxi.max);
for(var i=0;i<max;i++){
var card=ui.cardPile.childNodes[i];

View File

@ -120,6 +120,7 @@ character.yijiang={
filterTarget:function(card,player,target){
return player!=target;
},
unique:true,
selectTarget:-1,
mark:true,
line:'fire',

View File

@ -5728,8 +5728,8 @@ window.play={};
ui.skills.close()
}
_status.multitarget=false;
if(_status.event.name=='chooseToUse'){
var skillinfo=get.info(_status.event.skill);
if(_status.event.name=='chooseToUse'){
if(skillinfo&&skillinfo.multitarget&&!skillinfo.multiline){
_status.multitarget=true;
}
@ -5745,7 +5745,11 @@ window.play={};
}
if(event.isMine()){
if(ok&&auto&&lib.config.auto_confirm&&(!_status.mousedragging||!_status.mouseleft)&&!_status.mousedown){
if(ui.confirm) ui.confirm.close();
if(ui.confirm){
if(!skillinfo||!skillinfo.preservecancel){
ui.confirm.close();
}
}
if(event.skillDialog==true) event.skillDialog=false;
ui.click.ok();
_status.mousedragging=null;
@ -6632,6 +6636,7 @@ window.play={};
if(lib.card[name[2]].type=='basic') return 0;
if(lib.card[name[2]].type=='stone') return 0.5;
if(lib.card[name[2]].type=='stonecharacter') return 1;
if(lib.card[name[2]].type=='chess') return 1.5;
if(lib.card[name[2]].type=='trick') return 2;
if(lib.card[name[2]].type=='delay') return 3;
if(lib.card[name[2]].type=='equip') return 4;
@ -6778,7 +6783,8 @@ window.play={};
var i,controls;
if(get.objtype(arguments[0])=='array') controls=arguments[0];
else controls=arguments;
var control=ui.create.div('.control',ui.control);
var control=ui.create.div('.control');
ui.control.insertBefore(control,ui.confirm);
for(i in lib.element.control){
control[i]=lib.element.control[i];
}
@ -10249,8 +10255,9 @@ window.play={};
if(sort=='type_sort'){
func=function(card){
if(get.type(card)=='basic') return 2;
if(get.type(card)=='stone') return 1.5;
if(get.type(card)=='stone') return -0.5;
if(get.type(card)=='stonecharacter') return 1;
if(get.type(card)=='chess') return 1.5;
if(get.type(card)=='trick') return -1;
if(get.type(card)=='delay') return -2;
if(get.type(card)=='equip') return -3;

View File

@ -22,6 +22,7 @@
}
#chess{
margin-top:36px;
margin-bottom:36px;
position:relative;
}
#arena .card.thrown{

View File

@ -48,11 +48,12 @@ mode.chess={
}
}
},
chooseToMove:function(num){
chooseToMove:function(num,prompt){
var next=game.createEvent('chooseToMove');
next.num=num||1;
next.player=this;
next.content=lib.element.playerproto.chooseToMove;
next.prompt=prompt;
return next;
},
move:function(x,y){
@ -457,15 +458,24 @@ mode.chess={
}
};
if(event.isMine()){
event.control=ui.create.control('取消',function(){
if(event.prompt){
event.dialog=ui.create.dialog(event.prompt);
}
var resume=function(){
if(ui.movegrids){
while(ui.movegrids.length){
ui.movegrids.shift().delete();
}
}
event.result='cancelled';
event.result={bool:false};
game.resume();
});
};
if(event.phasing){
event.custom.replace.confirm=resume;
}
else{
event.control=ui.create.control('取消',resume);
}
game.pause();
ui.movegrids=[];
player.createRangeShadow(num,true);
@ -484,11 +494,22 @@ mode.chess={
"step 1"
if(event.moved){
game.delay();
event.result={
bool:true,
move:player.dataset.position
}
}
if(!event.result){
event.result={
bool:false
}
}
if(event.control){
event.control.close();
}
ui.create.confirm();
if(event.dialog){
event.dialog.close();
}
}
}
},
@ -582,6 +603,7 @@ mode.chess={
}
}
if(get.config('chess_character')){
delete lib.character.swd_linyue;
for(var i in lib.chess_character){
lib.character[i]=lib.chess_character[i];
}
@ -678,16 +700,10 @@ mode.chess={
'{left:'+(14+i*148)+'px;top:'+(14+j*148)+'px}',0);
ui.chesssheet.sheet.insertRule('#arena.chess #chess>.card'+pos+
'{left:'+(22+i*148)+'px;top:'+(22+j*148)+'px}',0);
if(j==ui.chessheight-1){
ui.chesssheet.sheet.insertRule('#arena.chess #chess>.popup'+pos+
'{left:'+(19+i*148)+'px;top:'+(-19+j*148)+'px}',0);
}
else{
ui.chesssheet.sheet.insertRule('#arena.chess #chess>.popup'+pos+
'{left:'+(19+i*148)+'px;top:'+(142+j*148)+'px}',0);
}
}
}
var grids=[];
var gridnum=ui.chessheight*ui.chesswidth;
@ -754,12 +770,9 @@ mode.chess={
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=game.me){
var dist=get.distance(game.me,game.players[i],'pure');
if(dist>7){
game.players[i].popup('距离:'+dist,'thunder');
}
else{
game.players[i].popup('距离:'+dist);
}
var dist2=get.distance(game.me,game.players[i]);
var nature=dist>7?'thunder':'';
game.players[i].popup('距离:'+dist2+'/'+dist,nature);
}
}
},true);
@ -786,6 +799,14 @@ mode.chess={
}
},
setChessInfo:function(p){
if(!p){
if(ui.phasequeue&&ui.phasequeue.length){
p=ui.phasequeue[0].link;
}
else{
p=game.me;
}
}
ui.chessinfo.innerHTML='';
ui.phasequeue=[];
for(var i=0;i<game.players.length;i++){
@ -934,6 +955,177 @@ mode.chess={
}
},
skill:{
guanchuan:{
trigger:{player:'shaBefore'},
getTargets:function(player,target){
var targets=[];
var pxy=player.getXY();
var txy=target.getXY();
var dx=txy[0]-pxy[0];
var dy=txy[1]-pxy[1];
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&game.players[i]!=target){
var axy=game.players[i].getXY();
var dx2=axy[0]-pxy[0];
var dy2=axy[1]-pxy[1];
if(dx*dx2<0) continue;
if(dy*dy2<0) continue;
if(dx==0){
if(dx2==0){
targets.push(game.players[i]);
}
}
else if(dx2!=0){
if(dy2/dx2==dy/dx){
targets.push(game.players[i]);
}
}
}
}
return targets;
},
filter:function(event,player){
if(event.targets.length!=1) return false;
return lib.skill.guanchuan.getTargets(player,event.targets[0]).length>0;
},
check:function(event,player){
var targets=lib.skill.guanchuan.getTargets(player,event.targets[0]);
var eff=0;
for(var i=0;i<targets.length;i++){
eff+=ai.get.effect(targets[i],event.card,player,player);
}
return eff>0;
},
content:function(){
var targets=lib.skill.guanchuan.getTargets(player,trigger.targets[0]);
for(var i=0;i<targets.length;i++){
trigger.targets.push(targets[i]);
}
player.logSkill('guanchuan',targets);
}
},
sanjiansheji:{
enable:'phaseUse',
filter:function(event,player){
return player.num('h','sha')>1&&lib.filter.filterCard({name:'sha'},player);
},
filterCard:{name:'sha'},
selectCard:2,
check:function(card){
var num=0;
var player=_status.event.player;
for(var i=0;i<game.players.length;i++){
if(lib.filter.targetEnabled({name:'sha'},player,game.players[i])&&
ai.get.effect(game.players[i],{name:'sha'},player)>0){
num++;
if(num>1) return 8-ai.get.value(card);
}
}
return 0;
},
selectTarget:[1,Infinity],
discard:false,
prepare:function(cards,player,targets){
player.$throw(cards);
player.line(targets);
},
filterTarget:function(card,player,target){
return lib.filter.targetEnabled({name:'sha'},player,target)&&
get.distance(player,target,'pure')<=5;
},
content:function(){
targets.sort(lib.sort.seat);
player.useCard({name:'sha'},cards,targets,'luanjian').animate=false;
},
multitarget:true,
ai:{
order:function(){
return lib.card.sha.ai.order+0.1;
},
result:{
target:function(player,target){
var added=false;
if(!player.skills.contains('unequip')){
added=true;
player.skills.push('unequip');
}
var eff=ai.get.effect(target,{name:'sha'},player,target);
if(added){
player.skills.remove('unequip');
}
return eff;
}
},
effect:{
player:function(card,player){
if(_status.currentPhase!=player) return;
if(card.name=='sha'&&player.num('h','sha')<2&&player.num('h')<=player.hp){
var num=0;
var player=_status.event.player;
for(var i=0;i<game.players.length;i++){
if(lib.filter.targetEnabled({name:'sha'},player,game.players[i])&&
ai.get.attitude(player,game.players[i])<0){
num++;
if(num>1) return [0,0,0,0];
}
}
}
}
},
}
},
zhiming:{
trigger:{source:'damageBegin'},
filter:function(event,player){
return get.distance(event.player,player,'attack')>1;
},
forced:true,
content:function(){
trigger.num++;
}
},
lianshe:{
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha'){
return num+get.cardCount(true,player)-get.cardCount('sha',player);
}
},
attackFrom:function(from,to,distance){
return distance-1;
}
},
},
pianyi:{
trigger:{player:'phaseEnd'},
direct:true,
filter:function(event,player){
return !player.getStat('damage');
},
content:function(){
"step 0"
player.chooseToMove(1,'是否发动【翩仪】?');
"step 1"
if(result.bool){
player.logSkill('pianyi');
}
}
},
lingdong:{
trigger:{player:'phaseEnd'},
direct:true,
filter:function(event,player){
return get.cardCount('sha',player)>0;
},
content:function(){
"step 0"
player.chooseToMove(get.cardCount('sha',player),'是否发动【灵动】?');
"step 1"
if(result.bool){
player.logSkill('pianyi');
}
}
},
_noactpunish:{
trigger:{player:'useCard'},
filter:function(event,player){
@ -969,11 +1161,14 @@ mode.chess={
usable:1,
direct:true,
delay:false,
preservecancel:true,
content:function(){
"step 0"
player.chooseToMove(player.skills.contains('noactpunish')?2:1);
var move=player.skills.contains('noactpunish')?2:1;
move=game.checkMod(player,move,'chessMove',player.get('s'));
player.chooseToMove(move).phasing=true;
"step 1"
if(result=='cancelled'){
if(!result.bool){
player.getStat().skill._chessmove--;
}
},
@ -1021,7 +1216,7 @@ mode.chess={
popup:false,
filter:function(event,player){
if(event.autochoose&&event.autochoose()) return false;
return !_status.auto&&player.isUnderControl();
return player.isUnderControl();
},
content:function(){
game.modeSwapPlayer(player);
@ -1046,6 +1241,7 @@ mode.chess={
_chessmove:'移动',
chessscroll_speed_config:'边缘滚动速度',
chess_character_config:'战棋武将',
only_chess_character_config:'只用战棋武将',
chess_caocao:'曹操',
chess_xunyu:'荀彧',
@ -1085,6 +1281,19 @@ mode.chess={
chess_jinchidiao:'金翅雕',
chess_beimingjukun:'北溟巨鲲',
chess_wuzhaojinlong:'五爪金龙',
pianyi:'翩仪',
pianyi_info:'回合结束阶段,若你没有于本回合内造成伤害,你获得一次移动机会',
lingdong:'灵动',
lingdong_info:'回合结束阶段你可以移动X个格X为你回合内出杀的次数',
lianshe:'连射',
lianshe_info:'你的攻击范围+1回合内你回合内每当你使用一张不是杀的牌你可以额外使用一张杀',
zhiming:'致命',
zhiming_info:'锁定技,当你使用杀造成伤害时,若你不在目标的攻击范围内,此伤害+1',
sanjiansheji:'散箭',
sanjiansheji_info:'你可以将两张杀当杀使用此杀可以指定距离你5格以内任意名目标',
guanchuan:'贯穿',
guanchuan_info:'当你使用杀指定惟一的目标后,可将攻击射线内的其他角色也加入目标',
},
ui:{
create:{
@ -1113,6 +1322,10 @@ mode.chess={
ui.movegrids.shift().delete();
}
}
_status.event.result={
bool:true,
move:this.link.dataset.position
};
game.resume();
}
}
@ -1131,7 +1344,7 @@ mode.chess={
// chess_xiahoudun:['male','wei',3,['']],
// chess_dianwei:['male','wei',3,['']],
// chess_xuzhu:['male','wei',3,['']],
// chess_zhangliao:['male','wei',3,['']],
chess_zhangliao:['male','wei',4,['gongji','zhiming']],
// chess_jiaxu:['male','wei',3,['']],
//
// chess_liubei:['male','shu',3,['']],
@ -1139,27 +1352,28 @@ mode.chess={
// chess_zhangfei:['male','shu',3,['']],
// chess_zhaoyun:['male','shu',3,['']],
// chess_machao:['male','shu',3,['']],
// chess_huangzhong:['male','shu',3,['']],
chess_huangzhong:['male','shu',4,['sanjiansheji','liegong']],
// chess_maliang:['male','shu',3,['']],
// chess_zhugeliang:['male','shu',3,['']],
//
// chess_sunquan:['male','wu',3,['']],
// chess_zhouyu:['male','wu',3,['']],
// chess_zhouyu:['male','wu',3,['qinyin']],
// chess_lvmeng:['male','wu',3,['']],
// chess_huanggai:['male','wu',3,['']],
// chess_lusu:['male','wu',3,['']],
// chess_luxun:['male','wu',3,['']],
// chess_ganning:['male','wu',3,['']],
// chess_taishici:['male','wu',3,['']],
chess_taishici:['male','wu',4,['guanchuan','pojun']],
//
// chess_lvbu:['male','qun',3,['']],
// chess_sunshangxiang:['male','qun',3,['']],
// chess_diaochan:['male','qun',3,['']],
// chess_huatuo:['male','qun',3,['']],
chess_sunshangxiang:['female','wu',3,['lingdong','lianshe']],
chess_diaochan:['female','qun',3,['xingzhui','pianyi']],
chess_huatuo:['male','qun',3,['zhenjiu','mazui']],
// chess_zhangjiao:['male','qun',3,['']],
// chess_menghuo:['male','qun',3,['']],
//
// chess_dongzhuo:['male','qun',3,['']],
// chess_xingtian:['male','qun',3,['']],
// chess_jinchidiao:['male','qun',3,['']],
// chess_beimingjukun:['male','qun',3,['']],
// chess_wuzhaojinlong:['male','qun',3,['']],
@ -1173,18 +1387,18 @@ mode.chess={
},
config:['battle_number','ban_weak','free_choose','change_choice',
function(lib,get,ui){
var current=get.config('chessscroll_speed');
if(typeof current!=='number'){
game.saveConfig('chessscroll_speed',20,true);
current=20;
}
return ui.create.switcher('chessscroll_speed',[0,10,20,30],current,ui.click.sidebar.local);
},function(lib,get,ui){
var current=get.config('chess_character');
if(typeof current!=='boolean'){
game.saveConfig('chess_character',true);
current=true;
}
return ui.create.switcher('chess_character',current,ui.click.sidebar.local2);
},function(lib,get,ui){
var current=get.config('chessscroll_speed');
if(typeof current!=='number'){
game.saveConfig('chessscroll_speed',20,true);
current=20;
}
return ui.create.switcher('chessscroll_speed',[0,10,20,30],current,ui.click.sidebar.local);
}],
}