炉石武将

This commit is contained in:
libccy 2015-06-10 17:10:24 +08:00
parent 0384e3c8d7
commit 94656f4856
43 changed files with 387 additions and 75 deletions

View File

@ -123,7 +123,7 @@ card.extra={
return 0;
},
target:function(player,target){
if(target.skills.contains('huogong2')) return 0;
if(target.skills.contains('huogong2')||target.num('h')==0) return 0;
return -1.5;
}
},
@ -159,6 +159,7 @@ card.extra={
if(target.classList.contains('linked')) return 1;
if(ai.get.attitude(player,target)>=0) return -1;
if(player.isMin()) return -1;
if(ui.selected.targets.length) return -1;
for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(player,game.players[i])<=-1&&
game.players[i]!=target&&!game.players[i].isLinked()){

View File

@ -34,6 +34,9 @@ card.shenbing={
trigger:{player:'damageBegin'},
priority:10,
forced:true,
filter:function(event){
return event.num>0;
},
content:function(){
trigger.num--;
player.addSkill('huxinjing2');

View File

@ -676,8 +676,13 @@ card.standard={
if(ai.get.damageEffect(target,player,target)>0&&ai.get.attitude(player,target)>0&&ai.get.attitude(target,player)>0){
return 0;
}
if(target.num('h','sha')>player.num('h','sha')){
if(Math.random()<0.5) return -2;
var hs1=target.num('h','sha');
var hs2=player.num('h','sha');
if(hs1.length>hs2.length+1){
return -2;
}
if(hs1.length>hs2.length&&hs1[0].number>hs2[0].number){
return -2;
}
return -0.5;
}

View File

@ -475,9 +475,11 @@ character.diy={
}
var be=target.num('e',{color:'black'});
if(target.num('h','shan')&&be){
if(!target.skills.contains('guidao')) return 0;
return [0,hastarget?target.num('he')/2:0];
}
if(target.num('h','shan')&&target.num('h')>2){
if(!target.skills.contains('guidao')) return 0;
return [0,hastarget?target.num('h')/4:0];
}
if(target.num('h')>3||(be&&target.num('h')>=2)){
@ -489,6 +491,7 @@ character.diy={
if(target.num('h')==1&&!be){
return [1.2,0];
}
if(!target.skills.contains('guidao')) return [1,0.05];
return [1,Math.min(0.5,(target.num('h')+be)/4)];
}
}

333
character/hearth.js Normal file
View File

@ -0,0 +1,333 @@
character.hearth={
character:{
// hs_jaina:['female','wei',3,[],['fullskin']],
// hs_rexxar:['male','qun',4,[],['fullskin']],
// hs_uther:['male','qun',4,[],['fullskin']],
// hs_garrosh:['male','qun',4,[],['fullskin']],
hs_malfurion:['male','wu',4,['jihuo'],['fullskin']],
hs_guldan:['male','wei',3,['fenliu','hongxi'],['fullskin']],
// hs_anduin:['male','qun',4,[],['fullskin']],
hs_thrall:['male','qun',4,['tuteng','tzhenji'],['fullskin']],
// hs_waleera:['female','qun',4,[],['fullskin']],
},
skill:{
jihuo:{
trigger:{player:'phaseEnd'},
filter:function(event,player){
return !player.storage.jihuo&&player.num('h')>0;
},
direct:true,
content:function(){
"step 0"
player.chooseToDiscard('是否发动【激活】?').ai=ai.get.unuseful2;
"step 1"
if(result.bool){
player.logSkill('jihuo');
player.storage.jihuo=true;
}
else{
event.finish();
}
"step 2"
player.phase();
"step 3"
player.storage.jihuo=false;
},
ai:{
threaten:1.2
}
},
tzhenji:{
trigger:{player:'respond'},
filter:function(event,player){
return event.card.name=='shan';
},
direct:true,
content:function(){
"step 0";
player.chooseTarget('是否发动【震击】?').ai=function(target){
return ai.get.damageEffect(target,player,player,'thunder')-1;
};
"step 1"
if(result.bool){
player.logSkill('tzhenji',result.targets,'thunder');
event.target=result.targets[0];
event.target.judge(function(card){
if(get.color(card)=='black') return -2;
return 0;
});
}
else{
event.finish();
}
"step 2"
if(result.bool==false){
event.target.damage('thunder');
var cs=event.target.get('he');
if(cs.length){
event.target.discard(cs.randomGet());
}
}
},
ai:{
effect:{
target:function(card,player,target,current){
if(get.tag(card,'respondShan')){
var hastarget=false;
for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(target,game.players[i])<0){
hastarget=true;break;
}
}
var ns=target.num('h','shan');
var nh=target.num('h');
if(ns>1){
return [0,hastarget?1:0];
}
if(ns&&nh>=2){
return [0,0];
}
if(nh>3){
return [0,0];
}
if(nh==0){
return [1.5,0];
}
return [1,0.05];
}
}
}
}
},
tuteng_s:{
trigger:{player:'phaseUseBegin'},
forced:true,
filter:function(event,player){
var rand=['tuteng1','tuteng2','tuteng3','tuteng4'];
for(var i=0;i<player.skills.length;i++){
rand.remove(player.skills[i]);
if(rand.length==0) return false;
}
return true;
},
content:function(){
var rand=['tuteng1','tuteng2','tuteng3','tuteng4'];
for(var i=0;i<player.skills.length;i++){
rand.remove(player.skills[i]);
}
if(rand.length){
player.addSkill(rand.randomGet());
}
},
ai:{
effect:function(card,player){
if(get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,1];
return 1.2;
}
},
threaten:1.3
},
group:'tuteng_lose'
},
tuteng:{
enable:'phaseUse',
usable:1,
filterCard:true,
check:function(card){
return 8-ai.get.value(card);
},
filter:function(event,player){
var rand=['tuteng1','tuteng2','tuteng3','tuteng4'];
for(var i=0;i<player.skills.length;i++){
rand.remove(player.skills[i]);
if(rand.length==0) return false;
}
return true;
},
position:'he',
content:function(){
var rand=['tuteng1','tuteng2','tuteng3','tuteng4'];
for(var i=0;i<player.skills.length;i++){
rand.remove(player.skills[i]);
}
if(rand.length){
player.addSkill(rand.randomGet());
}
},
ai:{
order:9,
result:{
player:1
},
effect:function(card,player){
if(get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,1];
return 1.2;
}
},
threaten:1.3
},
group:'tuteng_lose'
},
tuteng_lose:{
trigger:{player:'damageEnd'},
forced:true,
popup:false,
filter:function(event,player){
var tuteng=['tuteng1','tuteng2','tuteng3','tuteng4'];
for(var i=0;i<player.skills.length;i++){
if(tuteng.contains(player.skills[i])) return true;
}
return false;
},
content:function(){
var tuteng=['tuteng1','tuteng2','tuteng3','tuteng4'];
var rand=[];
for(var i=0;i<player.skills.length;i++){
if(tuteng.contains(player.skills[i])){
rand.push(player.skills[i]);
}
}
if(rand.length){
player.removeSkill(rand.randomGet());
}
}
},
tuteng1:{
mark:'image',
intro:{
content:'回合结束阶段,你回复一点体力'
},
trigger:{player:'phaseEnd'},
forced:true,
filter:function(event,player){
return player.hp<player.maxHp;
},
content:function(){
player.recover();
}
},
tuteng2:{
mark:'image',
intro:{
content:'每当你造成一次伤害,你摸一张牌'
},
trigger:{source:'damageAfter'},
forced:true,
content:function(){
player.draw();
}
},
tuteng3:{
mark:'image',
intro:{
content:'你受到的伤害-1'
},
trigger:{player:'damageBegin'},
forced:true,
filter:function(event,player){
return event.num>0;
},
content:function(){
trigger.num--;
},
},
tuteng4:{
mark:'image',
intro:{
content:'你的锦囊牌造成的伤害+1'
},
trigger:{source:'damageBegin'},
forced:true,
filter:function(event,player){
return event.card&&get.type(event.card)=='trick';
},
content:function(){
trigger.num++;
}
},
fenliu:{
enable:'phaseUse',
prompt:'流失1点体力并摸两张牌',
usable:1,
content:function(){
"step 0"
player.loseHp(1);
"step 1"
player.draw(3);
},
ai:{
order:1,
result:{
player:function(player){
if(player.num('h')>=player.hp-1) return -1;
if(player.hp<3) return -1;
return 1;
}
},
effect:{
target:function(card){
if(get.tag(card,'damage')||get.tag(card,'loseHp')){
return 1.5;
}
}
},
threaten:1.2
}
},
hongxi:{
trigger:{global:'dieAfter'},
filter:function(event,player){
return player.hp<player.maxHp;
},
forced:true,
content:function(){
player.recover(player.maxHp-player.hp);
},
ai:{
threaten:1.2
}
},
},
card:{
tuteng1:{
image:'card/tuteng1',
},
tuteng2:{
image:'card/tuteng2',
},
tuteng3:{
image:'card/tuteng3',
},
tuteng4:{
image:'card/tuteng4',
}
},
translate:{
hs_jaina:'吉安娜',
hs_rexxar:'雷克萨',
hs_uther:'乌瑟尔',
hs_garrosh:'加尔鲁什',
hs_malfurion:'玛法里奥',
hs_guldan:'古尔丹',
hs_anduin:'安度因',
hs_thrall:'萨尔',
hs_waleera:'瓦莉拉',
tuteng:'图腾',
tuteng_info:'出牌阶段限一次,你可以弃置一张牌并随机获得一个图腾;每当你受到一次伤害,你随机失去一个图腾',
tuteng1:'治疗图腾',
tuteng2:'灼热图腾',
tuteng3:'石爪图腾',
tuteng4:'空气之怒图腾',
tzhenji:'震击',
tzhenji_info:'每当你使用或打出一张闪,可以指定一名角色进行判定,若结果为黑色,其受到一点雷电伤害并随机弃置一张牌',
fenliu:'分流',
fenliu_info:'出牌阶段限一次你可以失去一点体力并获得3张牌',
hongxi:'虹吸',
hongxi_info:'锁定技,每当有一名角色死亡,你将体力回复至体力上限',
jihuo:'激活',
jihuo_info:'回合结束阶段,你可以弃置一张手牌并进行一个额外的回合',
},
}

View File

@ -194,9 +194,6 @@ character.mountain={
return player.num('h')>0;
},
direct:true,
check:function(event,player){
},
content:function(){
"step 0"
var check,i,num=0,num2=0;

View File

@ -856,19 +856,18 @@ character.refresh={
usable:1,
filterCard:true,
check:function(card){
return 9-ai.get.value(card);
return 8-ai.get.value(card);
},
position:'he',
content:function(){
player.loseHp();
},
ai:{
order:9,
order:8,
result:{
player:function(player){
if(player.hp<=2) return 0;
if(player.num('h')+1<player.hp) return 1;
return 0;
if(player.hp<=2) return player.num('h')==0?1:0;
return player.num('h')<player.hp?1:0;
}
},
effect:function(card,player){
@ -876,6 +875,10 @@ character.refresh={
if(player.skills.contains('jueqing')) return [1,1];
return 1.2;
}
if(get.tag(card,'loseHp')){
if(player.hp<=1) return;
return [0,0];
}
}
}
},

View File

@ -1766,7 +1766,9 @@ character.sp={
enable:'chooseToUse',
direct:true,
filter:function(event,player){
return _status.currentPhase!==player&&event.parent.name!='_wuxie1'&&event.parent.name!='_wuxie2';
return _status.currentPhase!==player&&
event.parent.name!='_wuxie1'&&event.parent.name!='_wuxie2'&&
event.parent.name!='_chenhuodajie';
},
delay:0,
content:function(){

View File

@ -878,7 +878,7 @@ character.standard={
},
kurou:{
enable:'phaseUse',
prompt:'流失1点体力并摸两张牌',
prompt:'失去一点体力并摸两张牌',
content:function(){
"step 0"
player.loseHp(1);
@ -1289,10 +1289,7 @@ character.standard={
return -3;
}
else{
var num=ui.selected.targets[0].num('h');
if(num==0) return 0;
if(num==1) return -0.1;
return -2;
return ai.get.effect(ui.selected.targets[0],{name:'juedou'},target,player);
}
}
},

View File

@ -2845,7 +2845,7 @@ character.swd={
}
}
player.chooseControl('失去体力','回复体力','cancel',
ui.create.dialog('是否发动【琴音】')).ai=function(){
ui.create.dialog('是否发动【琴音】','hidden')).ai=function(){
// console.log(lose,recover);
if(lose>recover&&lose>0) return 0;
if(lose<recover&&recover>0) return 1;
@ -3547,44 +3547,6 @@ character.swd={
player.storage.kunlunjing3=table.outerHTML;
}
},
swdshelie:{
trigger:{player:'phaseDrawBefore'},
content:function(){
"step 0"
trigger.untrigger();
trigger.finish();
"step 1"
event.cards=get.cards(5);
if(event.isMine()==false){
event.dialog=ui.create.dialog('涉猎',event.cards);
game.delay(2);
}
"step 2"
if(event.dialog) event.dialog.close();
var dialog=ui.create.dialog('涉猎',event.cards);
player.chooseButton([0,5],dialog,true).filterButton=function(button){
for(var i=0;i<ui.selected.buttons.length;i++){
if(get.suit(button.link)==get.suit(ui.selected.buttons[i].link)) return false;
}
return true;
}
"step 3"
var cards2=[];
for(var i=0;i<result.buttons.length;i++){
cards2.push(result.buttons[i].link);
cards.remove(result.buttons[i].link);
}
player.gain(cards2);
if(cards2.length) player.$gain(cards2);
for(var i=0;i<cards.length;i++){
ui.discardPile.appendChild(cards[i]);
}
game.delay(2);
},
ai:{
threaten:1.2
}
},
oldliaoyuan:{
enable:'phaseUse',
usable:1,
@ -5347,6 +5309,7 @@ character.swd={
frequent:true,
filter:function(event,player){
if(!event.cards) return false;
if(event.cards.length!=1) return false;
for(var i=0;i<event.cards.length;i++){
if(get.suit(event.cards[i])=='club') return true;
}
@ -7919,7 +7882,6 @@ character.swd={
mailun32:'脉轮',
mailun41:'脉轮',
mailun42:'脉轮',
swdshelie:'涉猎',
kunlunjing:'镜界',
kunlunjing1:'镜界',
kunlunjing2:'镜界',
@ -7932,7 +7894,6 @@ character.swd={
susheng_info:'在任意一名角色即将死亡时你可以弃置一张手牌防止其死亡并将其体力回复至1',
zhanlu_info:'出牌阶段,你可以弃置一张黑桃牌令至多3名角色各回复一点体力',
kunlunjing_info:'回合开始前或当你受到一次伤害后,你可以令场上所有牌还原到你上一回合结束后的位置;若在回合开始前发动,你流失一点体力',
swdshelie_info:'摸牌阶段,你可以放弃摸牌,改为从牌堆顶亮出五张牌,你获得不同花色的牌各一张,将其余的牌置入弃牌堆。',
swd_xiuluo_info:'回合开始阶段,你可以弃一张手牌来弃置你判断区里的一张延时类锦囊(必须花色相同)',
xianyin_info:'出牌阶段,你可以令所有判定区内有牌的角色弃置判定区内的牌,然后交给你一张手牌',
qiaoxie_info:'每当你装备一张牌,可摸一张牌,每当你失去一张装备牌(不含替换),你可以弃置其他角色的一张牌',

View File

@ -833,7 +833,7 @@ character.xianjian={
},
content:function(){
if(target.num('he')){
player.discardPlayerCard(target,'he').ai=function(){
player.discardPlayerCard(target,'he',true).ai=function(){
if(ai.get.attitude(player,target)<0){
return ai.get.buttonValue.apply(this,arguments);
}

View File

@ -7,7 +7,7 @@ character.xswd={
swd_kendi:['male','qun',3,['guanxing','jianyan']],
swd_lijing:['male','qun',4,['tianyi','zhuhai']],
swd_lilian:['female','qun',3,['swd_wuxie','qingcheng']],
swd_linming:['male','qun',3,['swdshelie','bifa']],
swd_linming:['male','qun',3,['shelie','bifa']],
swd_philis:['male','qun',4,['yicong','wangxi']],
swd_pepin:['male','qun',4,['rejianxiong','quhu']],
swd_kangnalishi:['male','qun',1,['busi','xuying','yinguo']],

View File

@ -2845,8 +2845,12 @@ character.yijiang={
content:function(){
"step 0"
player.judge(function(card){
if(player.skills.contains('shibei2')){
if(get.color(card)=='black') return -1;
}
else{
if(get.color(card)=='red') return 1;
if(player.skills.contains('shibei2')) return -1;
}
return 0;
})
"step 1"
@ -3164,7 +3168,7 @@ character.yijiang={
zpaiyi:'排异',
zpaiyi_info:'回合结束阶段,将一张“权”移动到任何合理的区域,若不是你的区域,你可以摸一张牌',
shibei:'矢北',
shibei_info:'锁定技,每当你受到一次伤害,需进行一次判定,若结果为红色,你回复一点体力;若结果为黑色且你在本回合内受到过不止一次伤害,你失去一点体力',
shibei_info:'锁定技,每当你受到一次伤害,需进行一次判定,若结果为红色且是你回合内受到的第一次伤害,你回复一点体力;若结果为黑色且你在本回合内受到过不止一次伤害,你失去一点体力',
jianying:'渐营',
jianying_info:'每当你于出牌阶段内使用的牌与此阶段你使用的上一张牌点数或花色相同时,你可以摸一张牌',
xinenyuan:'恩怨',

View File

@ -3,7 +3,7 @@ character.zhuogui={
nianshou:['male','shu',4,['nianrui','qixiang']],
mamian:['male','qun',4,['lianyu','guiji']],
niutou:['male','shu',4,['manjia','xiaoshou'],['fullskin']],
baiwuchang:['male','qun',3,['qiangzheng','zuijiu']],
baiwuchang:['male','qun',3,['qiangzheng','moukui']],
heiwuchang:['male','qun',3,['suoling','xixing']],
},
skill:{

View File

@ -12,7 +12,9 @@ window.config={
layoutfixed:['chess','boss'],
all:{
mode:['identity','guozhan','versus','boss','chess','stone'],
characters:['standard','wind','fire','woods','mountain','extra','sp','yijiang','refresh','guozhan','jiange','zhuogui','diy','yxs','swd','xswd','gujian','xianjian'],
characters:['standard','wind','fire','woods','mountain',
'extra','sp','yijiang','refresh','guozhan',
'jiange','zhuogui','diy','hearth','yxs','swd','xswd','gujian','xianjian'],
cards:['standard','ex','extra','refresh','guozhan','zhenfa','qimou','yibao','shenbing','wanxiang','swd','shenqi','compensate'],
plays:['character','soldier','wuxing'],
layout:['default','newlayout'],
@ -68,6 +70,7 @@ window.config={
extra_character_config:'神将',
swd_character_config:'轩辕剑',
xswd_character_config:'轩辕剑·二',
hearth_character_config:'炉石传说',
yxs_character_config:'英雄杀',
gujian_character_config:'古剑奇谭',
xianjian_character_config:'仙剑',

View File

@ -3696,6 +3696,9 @@ window.play={};
get.itemtype(this.storage[skill])=='card'){
this.markSkill(skill,null,this.storage[skill]);
}
else if(lib.skill[skill].mark=='image'){
this.markSkill(skill,null,ui.create.card(null,'noclick').init([null,null,skill]));
}
else{
this.markSkill(skill);
}

BIN
image/card/tuteng1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
image/card/tuteng2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
image/card/tuteng3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
image/card/tuteng4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
image/card/tuteng5.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
image/card/tuteng6.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
image/card/tuteng7.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

View File

@ -150,8 +150,7 @@ mode.identity={
return game.players.randomGet(game.me,game.zhu);
};
next.ai=function(player,list,list2){
switch(player.identity){
case 'zhu':
if(player.identity=='zhu'){
list2.randomSort();
var choice,choice2;
if(Math.random()-0.8<0&&list2.length){
@ -176,9 +175,8 @@ mode.identity={
player.maxHp++;
player.update();
}
break;
case 'zhong':
}
else if(player.identity=='zhong'&&Math.random()<0.5){
var choice=0;
for(var i=0;i<list.length;i++){
if(lib.character[list[i]][1]==game.zhu.group){
@ -191,9 +189,8 @@ mode.identity={
else{
player.init(list[choice]);
}
break;
default:
}
else{
if(get.config('double_character')){
player.init(list[0],list[1]);
}

BIN
theme/.DS_Store vendored Normal file

Binary file not shown.