noname 1.0.0.1

This commit is contained in:
libccy 2015-04-29 11:25:17 +08:00
parent efb9244cd5
commit c8a91712e0
840 changed files with 52544 additions and 341 deletions

339
LICENSE
View File

@ -1,339 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
{description}
Copyright (C) {year} {fullname}
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View File

@ -1,2 +0,0 @@
noname
======

78
card/compensate.js Normal file
View File

@ -0,0 +1,78 @@
card.compensate={
list:[
["diamond",3,'guohe'],
['club',8,'guohe'],
['spade',13,'guohe'],
["heart",4,"huogong","fire"],
["diamond",5,"huogong","fire"],
["diamond",10,"huogong","fire"],
["diamond",13,"huogong","fire"],
["heart",1,"juedou"],
["diamond",1,"juedou"],
["club",1,"juedou"],
["heart",12,"wuzhong"],
["diamond",3,"wuzhong"],
["club",10,"wuxie"],
["spade",10,"wuxie"],
["spade",11,"wuxie"],
// ['heart',5,'jiu'],
// ['spade',9,'jiu'],
// ['spade',2,'jiu'],
['heart',8,'tao'],
['heart',10,'tao'],
["heart",10,"sha","fire"],
["diamond",4,"sha","fire"],
["heart",5,"sha","fire"],
["spade",4,"sha","thunder"],
["spade",5,"sha","thunder"],
["club",5,"sha","thunder"],
["spade",9,"sha","thunder"],
["club",8,"sha"],
["club",10,"sha"],
["club",2,"sha"],
["club",10,"sha"],
["spade",10,"sha"],
["spade",10,"sha"],
["spade",11,"sha"],
["spade",6,"sha"],
["club",2,"sha"],
["club",8,"sha"],
["spade",9,"sha"],
["spade",4,"sha"],
["spade",7,"sha"],
["spade",1,"sha"],
["club",4,"sha"],
["club",7,"sha"],
["club",2,"sha"],
["heart",11,"shan"],
["heart",12,"shan"],
["diamond",6,"shan"],
["heart",11,"shan"],
["heart",8,"shan"],
["diamond",5,"shan"],
["diamond",2,"shan"],
["heart",11,"shan"],
["heart",12,"shan"],
["heart",12,"shan"],
["heart",4,"shan"],
["heart",4,"shan"],
["diamond",6,"shan"],
["diamond",7,"shan"],
["heart",11,"shan"],
["heart",12,"shan"],
["diamond",6,"shan"],
["diamond",7,"shan"],
["club",5,"tiesuo"],
["spade",8,"tiesuo"],
],
}

105
card/ex.js Normal file
View File

@ -0,0 +1,105 @@
card.ex={
card:{
hanbing:{
fullskin:true,
type:"equip",
subtype:"equip1",
distance:{attackFrom:-1},
skills:['hanbing_skill'],
ai:{
basic:{
equipValue:2
}
},
},
renwang:{
fullskin:true,
type:"equip",
subtype:"equip2",
skills:['renwang_skill'],
ai:{
basic:{
equipValue:8
},
},
},
},
skill:{
hanbing_skill:{
trigger:{player:'shaHit'},
direct:true,
filter:function(event,player){
return event.target.get('he').length>0;
},
content:function(){
"step 0"
player.choosePlayerCard('是否发动【寒冰剑】?','he',trigger.target,[1,2],function(button){
var eff=ai.get.damageEffect(trigger.target,player,player);
if(ai.get.attitude(player,trigger.target)>0){
if(eff>=0) return false;
return 10-ai.get.buttonValue(button);
}
if(eff<=0) return ai.get.buttonValue(button);
if(trigger.target.hp==1) return false;
if(player.skills.contains('jiu')||player.skills.contains('tianxianjiu')) return false;
if(ui.dialog.buttons.length<2) return -1;
var num=0;
for(var i=0;i<ui.dialog.buttons.length;i++){
if(ai.get.buttonValue(ui.dialog.buttons[i])>1.5) num++;
}
if(num>=2) return ai.get.buttonValue(button)-1.5;
});
"step 1"
if(result.bool){
trigger.untrigger();
var cards=[];
for(var i=0;i<result.buttons.length;i++) cards.push(result.buttons[i].link);
player.logSkill('hanbing');
trigger.unhurt=true;
trigger.target.discard(cards);
}
}
},
renwang_skill:{
trigger:{target:'shaBefore'},
forced:true,
priority:6,
filter:function(event,player){
if(event.player.num('s','unequip')) return false;
return (event.card.name=='sha'&&get.color(event.card)=='black')
},
content:function(){
trigger.untrigger();
trigger.finish();
},
ai:{
effect:{
target:function(card,player){
var equip1=player.get('e','1');
if(equip1&&equip1.name=='qinggang') return 1;
if(player.num('s','unequip')) return;
if(card.name=='sha'&&get.color(card)=='black') return 0;
}
}
}
}
},
translate:{
hanbing:'寒冰剑',
renwang:'仁王盾',
hanbing_bg:'冰',
renwang_bg:'盾',
hanbing_skill:'寒冰剑',
renwang_skill:'仁王盾',
hanbing_info:'每当你使用杀命中目标后,你可以防止伤害,改为弃置目标两张牌',
hanbing_skill_info:'每当你使用杀命中目标后,你可以防止伤害,改为弃置目标两张牌',
renwang_info:'黑色的杀对你无效',
renwang_skill_info:'黑色的杀对你无效',
},
list:[
["spade",2,'hanbing'],
["club",2,'renwang'],
["heart",12,'shandian','thunder'],
["diamond",12,'wuxie'],
],
}

488
card/extra.js Normal file
View File

@ -0,0 +1,488 @@
card.extra={
card:{
jiu:{
fullskin:true,
type:"basic",
enable:true,
savable:function(card,player,dying){
return dying==player;
},
usable:1,
selectTarget:-1,
filterTarget:function(card,player,target){
return target==player;
},
content:function(){
if(target==_status.dying) target.recover();
else{
target.addTempSkill('jiu','phaseAfter');
if(card.clone&&card.clone.parentNode==ui.arena){
card.clone.moveTo(player).delete();
}
}
},
ai:{
basic:{
useful:[5,1],
value:[5,1],
},
order:function(){
return lib.card.sha.ai.order+0.2;
},
result:{
target:function(player,target){
if(target&&target==_status.dying) return 2;
var shas=target.get('h','sha');
var ok=false;
if(shas.length){
for(var i=0;i<shas.length;i++){
if(lib.filter.filterCard(shas[i],target)){
ok=true;break;
}
}
}
if(ok){
var card=target.get('h','sha',0);
for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(target,game.players[i])<0&&
target.canUse(card,game.players[i],true,true)){
if(ai.get.effect(game.players[i],card,target)>0) return 1;
}
}
}
return 0;
},
},
tag:{
save:1
}
}
},
huogong:{
fullskin:true,
type:'trick',
enable:true,
filterTarget:function(card,player,target){
if(player!=game.me&&player.num('h')<3) return false;
return target.num('h')>0;
},
content:function(){
"step 0"
if(target.get('h').length==0){
event.finish();
return;
}
target.chooseCard(true);
"step 1"
event.dialog=ui.create.dialog(get.translation(target.name)+'展示的手牌',result.cards);
event.card2=result.cards[0];
game.log(get.translation(target.name)+'展示了'+get.translation(event.card2));
player.chooseToDiscard(function(card){
return get.suit(card)==get.suit(_status.event.parent.card2);
},function(card){
if(ai.get.damageEffect(target,player,player,'fire')>0){
return 6-ai.get.value(card,_status.event.player);
}
return -1;
}).prompt=false;
game.delay(2);
"step 2"
if(result.bool){
target.damage('fire');
}
else{
target.addTempSkill('huogong2','phaseBegin');
}
event.dialog.close();
},
ai:{
basic:{
order:4,
value:[3,1],
useful:1,
},
result:{
player:function(player){
var nh=player.num('h');
if(nh==2&&player.hp==1) return 0;
if(nh<=player.hp&&
_status.event.name=='chooseToUse'&&_status.event.filterCard({name:'huogong'})) return -10;
},
target:function(player,target){
if(target.skills.contains('huogong2')) return 0;
return -1.5;
}
},
tag:{
damage:1,
fireDamage:1,
natureDamage:1,
}
}
},
tiesuo:{
fullskin:true,
type:'trick',
enable:true,
filterTarget:true,
selectTarget:[1,2],
content:function(){
target.link();
},
chongzhu:true,
ai:{
basic:{
useful:4,
value:4,
order:7
},
result:{
target:function(player,target){
if(target.classList.contains('linked')) return 1;
if(ai.get.attitude(player,target)>=0) return -1;
for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(player,game.players[i])<0&&
game.players[i]!=target&&!game.players[i].isLinked()){
return -1;
}
}
return 0;
}
},
tag:{
multitarget:1,
multineg:1,
}
}
},
bingliang:{
fullskin:true,
type:'delay',
range:{global:1},
filterTarget:function(card,player,target){
return (lib.filter.judge(card,player,target)&&player!=target);
},
judge:function(card){
if(get.suit(card)=='club') return 0;
return -3;
},
effect:function(){
if(result.bool==false){
player.skip('phaseDraw');
}
},
ai:{
basic:{
order:1,
useful:1,
value:4,
},
result:{
target:function(player,target){
return -1-target.get('h').length;
}
},
tag:{
skip:'phaseDraw'
}
}
},
hualiu:{
fullskin:true,
type:'equip',
subtype:'equip3',
distance:{globalTo:1},
},
zhuque:{
fullskin:true,
type:'equip',
subtype:'equip1',
distance:{attackFrom:-3},
ai:{
basic:{
equipValue:2
}
},
skills:['zhuque_skill']
},
guding:{
fullskin:true,
type:'equip',
subtype:'equip1',
distance:{attackFrom:-1},
ai:{
basic:{
equipValue:2
}
},
skills:['guding_skill']
},
tengjia:{
fullskin:true,
type:'equip',
subtype:'equip2',
ai:{
basic:{
equipValue:function(card,player){
var num=3;
for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(game.players[i],player)<0) num--;
}
if(player.hp==1) num+=4;
if(player.hp==2) num+=1;
if(player.hp==3) num--;
if(player.hp>3) num-=4;
return num;
}
},
},
skills:['tengjia1','tengjia2']
},
baiyin:{
fullskin:true,
type:'equip',
subtype:'equip2',
onLose:function(){
player.recover();
},
filterLose:function(card,player){
return player.hp<player.maxHp;
},
skills:['baiyin_skill'],
tag:{
recover:1,
},
ai:{
order:9.5,
basic:{
equipValue:function(card,player){
if(player.hp==player.maxHp) return 5;
if(player.num('h','baiyin')) return 6;
return 0;
}
}
}
},
},
skill:{
huogong2:{},
jiu:{
trigger:{source:'damageBegin'},
filter:function(event){
return (event.card&&(event.card.name=='sha')&&event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2');
},
forced:true,
content:function(){
trigger.num++;
},
group:'jiu2'
},
jiu2:{
trigger:{player:'useCardAfter'},
filter:function(event){
return (event.card&&(event.card.name=='sha'));
},
forced:true,
popup:false,
content:function(){
player.removeSkill('jiu');
},
},
guding_skill:{
trigger:{source:'damageBegin'},
filter:function(event){
if(event.card&&event.card.name=='sha'){
if(event.player.get('h').length==0) return true;
}
return false;
},
forced:true,
content:function(){
trigger.num++;
},
ai:{
effect:{
target:function(card,player,target,current){
if(card.name=='sha'&&target.get('h').length==0) return [1,-2];
}
}
}
},
tengjia1:{
trigger:{target:'useCardToBefore'},
forced:true,
priority:6,
filter:function(event,player){
if(event.player.num('s','unequip')) return false;
if(event.card.name=='nanman') return true;
if(event.card.name=='wanjian') return true;
if(event.card.name=='sha'&&!event.card.nature) return true;
},
content:function(){
trigger.untrigger();
trigger.finish();
},
ai:{
effect:{
target:function(card,player,target,current){
if(player.num('s','unequip')) return;
if(card.name=='nanman'||card.name=='wanjian') return 0;
if(card.name=='sha'){
var equip1=player.get('e','1');
if(equip1&&equip1.name=='zhuque') return 2;
if(equip1&&equip1.name=='qinggang') return 1;
if(!card.nature) return 0;
}
}
}
}
},
tengjia2:{
trigger:{player:'damageBegin'},
filter:function(event){
if(event.nature=='fire') return true;
},
forced:true,
content:function(){
trigger.num++;
},
ai:{
effect:{
target:function(card,player,target,current){
if(card.name=='sha'){
if(card.nature=='fire'||player.skills.contains('zhuque_skill')) return 2;
}
if(get.tag(card,'fireDamage')&&current<0) return 2;
}
}
}
},
baiyin_skill:{
trigger:{player:'damageBegin'},
forced:true,
filter:function(event,player){
if(event.num<=1) return false;
if(event.parent.player.num('s','unequip')) return false;
return true;
},
priority:-10,
content:function(){
trigger.num=1;
}
},
zhuque_skill:{
trigger:{player:'useCardToBefore'},
priority:7,
filter:function(event,player){
if(event.card.name=='sha'&&!event.card.nature) return true;
},
check:function(event,player){
var att=ai.get.attitude(player,event.target);
if(event.target.hasSkillTag('nofire')){
return att>0;
}
return att<=0;
},
content:function(){
trigger.card.nature='fire';
player.addSkill('zhuque_skill2');
player.storage.zhuque_skill=trigger.card;
}
},
zhuque_skill2:{
trigger:{player:'useCardAfter'},
forced:true,
popup:false,
content:function(){
delete player.storage.zhuque_skill.nature;
}
},
huogon2:{},
},
translate:{
jiu:'酒',
huogong:'火攻',
tiesuo:'铁锁连环',
huogong_bg:'攻',
tiesuo_bg:'锁',
_chongzhu:'重铸',
_lianhuan:'连环',
_lianhuan2:'连环',
bingliang:'兵粮寸断',
hualiu:'骅骝',
zhuque:'朱雀羽扇',
bingliang_bg:'粮',
bingliang_info:'目标角色判定阶段进行判定:若判定结果不为梅花,则跳过该角色的摸牌阶段。',
hualiu_bg:'+马',
zhuque_bg:'扇',
zhuque_skill:'朱雀羽扇',
zhuque_info:'你可以将一张普通【杀】当具火焰伤害的【杀】使用。',
guding:'古锭刀',
guding_info:'锁定技,当你使用【杀】对目标角色造成伤害时,若其没有手牌,此伤害+1。',
guding_skill:'古锭刀',
tengjia:'藤甲',
tengjia_info:'锁定技,【南蛮入侵】、【万箭齐发】和普通【杀】对你无效。你每次受到火焰伤害时,该伤害+1。',
tengjia1:'藤甲',
tengjia2:'藤甲',
baiyin:'白银狮子',
baiyin_info:'锁定技你每次受到伤害时最多承受1点伤害防止多余的伤害当你失去装备区里的【白银狮子】时你回复1点体力。',
baiyin_skill:'白银狮子',
_baiyin:'白银狮子',
},
list:[
["heart",4,"sha","fire"],
["heart",7,"sha","fire"],
["heart",10,"sha","fire"],
["diamond",4,"sha","fire"],
["diamond",5,"sha","fire"],
["spade",4,"sha","thunder"],
["spade",5,"sha","thunder"],
["spade",6,"sha","thunder"],
["spade",7,"sha","thunder"],
["spade",8,"sha","thunder"],
["club",5,"sha","thunder"],
["club",6,"sha","thunder"],
["club",7,"sha","thunder"],
["club",8,"sha","thunder"],
["heart",8,"shan"],
["heart",9,"shan"],
["heart",11,"shan"],
["heart",12,"shan"],
["diamond",6,"shan"],
["diamond",7,"shan"],
["diamond",8,"shan"],
["diamond",10,"shan"],
["diamond",11,"shan"],
["heart",5,"tao"],
["heart",6,"tao"],
["diamond",2,"tao"],
["diamond",3,"tao"],
["diamond",9,"jiu"],
["spade",3,"jiu"],
["spade",9,"jiu"],
["club",3,"jiu"],
["club",9,"jiu"],
["diamond",13,"hualiu"],
["club",1,"baiyin"],
["spade",2,"tengjia",'fire'],
["club",2,"tengjia",'fire'],
["spade",2,"guding"],
["diamond",2,"zhuque",'fire'],
["heart",2,"huogong","fire"],
["heart",3,"huogong","fire"],
["diamond",12,"huogong","fire"],
["spade",11,"tiesuo"],
["spade",12,"tiesuo"],
["club",10,"tiesuo"],
["club",11,"tiesuo"],
["club",12,"tiesuo"],
["club",13,"tiesuo"],
["heart",13,"wuxie"],
["heart",13,"wuxie"],
["spade",13,"wuxie"],
["spade",10,"bingliang"],
["club",4,"bingliang"],
],
}

246
card/guozhan.js Normal file
View File

@ -0,0 +1,246 @@
card.guozhan={
card:{
yuanjiao:{
fullskin:true,
type:'trick',
enable:true,
filterTarget:function(card,player,target){
if(lib.config.mode!='guozhan') return player!=target;
if(target.identity=='unknown'||player.identity=='unknown') return false;
if(player==target) return false;
if(player.identity=='ye') return true;
return player.identity!=target.identity;
},
content:function(){
game.asyncDraw([target,player],[1,lib.config.mode=='guozhan'?3:1]);
},
ai:{
basic:{
useful:4,
value:8,
order:9
},
result:{
target:1,
player:3,
},
},
// mode:['guozhan'],
},
zhibi:{
fullskin:true,
type:'trick',
enable:true,
chongzhu:true,
filterTarget:function(card,player,target){
if(player==target) return false;
return (target.get('h').length||
target.classList.contains('unseen')||
target.classList.contains('unseen2'))
},
content:function(){
"step 0"
if(!player.storage.zhibi){
player.storage.zhibi=[];
}
player.storage.zhibi.push(target);
if(!event.isMine()){
event.finish();
return;
}
var controls=[];
if(target.get('h').length) controls.push('手牌');
if(target.classList.contains('unseen')) controls.push('主将');
if(target.classList.contains('unseen2')) controls.push('副将');
if(controls.length>1){
player.chooseControl(controls);
}
if(controls.length==0) event.finish();
"step 1"
game.pause();
ui.create.confirm('o');
var content;
if(result.control){
if(result.control=='手牌') content=target.get('h');
else if(result.control=='主将') content=[[target.name1],'character'];
else content=[[target.name2],'character'];
}
else if(target.get('h').length){
content=target.get('h');
}
else if(target.classList.contains('unseen')){
content=[[target.name1],'character'];
}
else{
content=[[target.name2],'character'];
}
event.dialog=ui.create.dialog(content);
"step 2"
event.dialog.close();
},
mode:['guozhan'],
ai:{
order:9.5,
result:{
player:function(player,target){
if(player.num('h')<=player.hp) return 0;
if(player.storage.zhibi&&player.storage.zhibi.contains(target)) return 0;
return target.isUnseen()?1:0;
}
}
}
},
yiyi:{
fullskin:true,
type:'trick',
enable:true,
filterTarget:function(card,player,target){
if(player.identity=='unknown'||player.identity=='ye'||lib.config.mode!='guozhan') return player==target;
return player.identity==target.identity;
},
selectTarget:-1,
content:function(){
target.draw(lib.config.mode=='guozhan'?2:3);
target.chooseToDiscard(2,'he',true).ai=ai.get.disvalue;
},
ai:{
basic:{
useful:4,
value:4,
order:7
},
result:{
target:function(player,target){
if(lib.config.mode!='guozhan') return 1;
if(target.num('h')<=1){
return 0;
}
return 1;
},
},
},
// mode:['guozhan'],
},
wuliu:{
fullskin:true,
type:'equip',
subtype:'equip1',
distance:{attackFrom:-1},
ai:{
basic:{
equipValue:function(card,player){
if(player.identity=='unknown'||player.identity=='ye') return 2.5;
var num=2;
for(var i=0;i<game.players.length;i++){
if(game.players[i].identity==player.identity) num+=0.5;
}
return num;
}
}
},
skills:['wuliu_skill'],
mode:['guozhan'],
},
sanjian:{
fullskin:true,
type:'equip',
subtype:'equip1',
distance:{attackFrom:-2},
ai:{
basic:{
equipValue:4
}
},
skills:['sanjian_skill']
},
jingfanma:{
fullskin:true,
type:'equip',
subtype:'equip4',
distance:{globalFrom:-1},
},
},
skill:{
wuliu_skill:{
global:'wuliu_skill2'
},
wuliu_skill2:{
mod:{
attackFrom:function(from,to,distance){
for(var i=0;i<game.players.length;i++){
if(game.players[i]==from) continue;
if(game.players[i].identity=='unknown'||game.players[i].identity=='ye') continue;
if(game.players[i].identity!=from.identity) continue;
if(game.players[i].skills.contains('wuliu')) distance--;
}
if(from.skills.contains('wuliu')) distance--;
return distance;
}
}
},
sanjian_skill:{
trigger:{source:'damageAfter'},
direct:true,
filter:function(event,player){
if(player.num('h')==0) return false;
if(!event.card) return false;
if(event.card.name!='sha') return false;
var num=0;
for(var i=0;i<game.players.length;i++){
if(get.distance(event.player,game.players[i])<=1) num++;
}
return num>1;
},
content:function(){
"step 0"
var damaged=trigger.player;
player.chooseCardTarget({
filterTarget:function(card,player,target){
return get.distance(damaged,target)<=1&&target!=damaged;
},
ai1:function(card){
return 9-ai.get.value(card);
},
ai2:function(target){
return ai.get.damageEffect(target,player,player);
},
prompt:'是否发动三尖两刃刀?'
});
"step 1"
if(result.bool){
player.logSkill('sanjian');
player.discard(result.cards);
result.targets[0].damage();
}
}
},
},
translate:{
yuanjiao:'远交近攻',
yuanjiao_info:'对一名不同势力的角色使用对方摸一张牌然后你摸3张牌非国战模式中改为摸1张',
yuanjiao_bg:'交',
zhibi:'知己知彼',
zhibi_info:'出牌阶段对一名其他角色使用,观看其手牌或装备牌',
yiyi:'以逸待劳',
yiyi_info:'对与自己势力相同的所有角色使用摸两张牌然后弃置两张牌非国战模式改为对自己使用摸3张弃两张',
yiyi_bg:'逸',
wuliu:'吴六剑',
wuliu_info:'与装备者势力相同的角色攻击范围+1',
sanjian:'三尖两刃刀',
sanjian_info:'当你使用杀造成伤害后可以弃置1张手牌对一名距离受伤害角色1以内的其他角色造成1点伤害',
wuliu_skill:'吴六剑',
sanjian_skill:'三尖两刃刀',
jingfanma_bg:'-马',
jingfanma:'惊帆',
},
list:[
['heart',9,'yuanjiao'],
['club',3,'zhibi'],
['club',4,'zhibi'],
['diamond',4,'yiyi'],
['heart',11,'yiyi'],
['diamond',6,'wuliu'],
['diamond',12,'sanjian'],
['heart',3,'jingfanma'],
],
}

351
card/qimou.js Normal file
View File

@ -0,0 +1,351 @@
card.qimou={
card:{
chenhuodajie:{
fullskin:true,
type:'trick',
content:function(){
if(target.num('he')){
player.gainPlayerCard('he',target,true);
}
},
ai:{
order:1,
useful:6,
value:6,
result:{
target:-1
},
tag:{
loseCard:1
}
}
},
shushangkaihua:{
fullskin:true,
type:'trick',
enable:true,
selectTarget:-1,
multitarget:true,
multiline:true,
filterTarget:function(card,player,target){
var num=target.num('h');
for(var i=0;i<game.players.length;i++){
if(game.players[i].num('h')<num) return false;
}
return true;
},
content:function(){
// target.draw();
game.asyncDraw(targets);
},
ai:{
order:1,
value:5,
result:{
target:1
}
}
},
huoshaolianying:{
fullskin:true,
type:'trick',
filterTarget:function(card,player,target){
if(player==target) return false;
var link=false;
for(var i=0;i<game.players.length;i++){
if(game.players[i].isLinked()&&game.players[i]!=player){
link=true;break;
}
}
if(link){
if(!target.isLinked()) return false;
var distance=get.distance(player,target,'absolute');
for(var i=0;i<game.players.length;i++){
if(target!=game.players[i]&&
game.players[i]!=player&&
game.players[i].isLinked()&&
get.distance(player,game.players[i],'absolute')<distance){
return false;
}
}
return true;
}
else{
return target==player.next;
}
},
enable:true,
selectTarget:-1,
content:function(){
target.damage('fire');
},
ai:{
order:5,
value:6,
tag:{
damage:1,
natureDamage:1,
fireDamage:1,
},
result:{
target:function(player,target){
if(target.hasSkillTag('nofire')||target.hasSkillTag('nodamage')) return 0;
if(target.skills.contains('xuying')&&target.num('h')==0) return 0;
if(!target.isLinked()){
return ai.get.damageEffect(target,player,target,'fire');
}
var num=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i].isLinked()){
var eff=ai.get.damageEffect(game.players[i],player,target,'fire');
if(eff>0){
num++;
}
else if(eff<0){
num--;
}
}
}
return num;
}
}
}
},
yihuajiemu:{
fullskin:true,
type:'trick',
enable:true,
filterTarget:function(card,player,target){
if(ui.selected.targets.length){
return target.get('e',{subtype:'equip5'}).length==0;
}
else{
return target.get('e',{subtype:'equip5'}).length>0;
}
},
selectTarget:2,
multitarget:true,
content:function(){
if(targets[0].get('e','5')){
targets[0].$give(targets[0].get('e','5'),targets[1]);
targets[1].equip(targets[0].get('e','5'));
game.delay();
}
},
ai:{
order:1,
result:{
target:function(player,target){
if(target.get('e',{subtype:'equip5'}).length){
if(ai.get.attitude(target,player)>0){
return -0.5;
}
return -1;
}
return 1;
}
},
tag:{
loseCard:1
}
}
},
fudichouxin:{
fullskin:true,
type:'trick',
enable:true,
filterTarget:function(card,player,target){
return player!=target&&target.get('h').length;
},
content:function(){
"step 0"
player.chooseToCompare(target).clear=false;
"step 1"
if(result.bool){
player.gain([result.player,result.target]);
result.player.clone.moveTo(player).delete();
result.target.clone.moveTo(player).delete();
}
else if(!result.cancelled){
result.player.clone.delete();
result.target.clone.delete();
}
},
ai:{
order:4,
result:{
target:function(player,target){
if(player.get('h').length<=1) return 0;
return -1;
},
player:function(player){
if(player.get('h').length<=1) return 0;
return 0.5;
}
},
tag:{
loseCard:1
}
}
},
shuiyanqijun:{
fullskin:true,
type:'trick',
enable:true,
filterTarget:function(card,player,target){
return target.num('e');
},
selectTarget:-1,
content:function(){
if(target.num('e')) target.chooseToDiscard('e',true);
},
ai:{
order:9,
result:{
target:-1
},
tag:{
multitarget:1,
multineg:1
}
}
},
toulianghuanzhu:{
fullskin:true,
type:'trick',
enable:true,
filterTarget:function(card,player,target){
return target.num('h')>0;
},
selectTarget:2,
multitarget:true,
targetprompt:['被拿牌','得牌'],
content:function(){
"step 0"
targets[0].addTempSkill('toulianghuanzhu2','phaseAfter');
var hs=targets[0].get('h');
event.num=Math.min(2,hs.length);
if(event.num){
targets[1].gain(hs.randomGets(event.num));
targets[0].$give(event.num,targets[1]);
game.delay();
}
else{
event.finish();
}
"step 1"
if(targets[1].num('h')){
targets[1].chooseCard(true,event.num,'选择'+get.cnNumber(event.num)+'张手牌还给'+get.translation(targets[0])).ai=ai.get.disvalue;
}
else{
event.finish();
}
"step 2"
targets[0].gain(result.cards);
targets[1].$give(event.num,targets[0]);
},
ai:{
order:9,
tag:{
discard:1,
multitarget:1,
multineg:1
},
result:{
target:function(player,target){
if(ui.selected.targets.length){
if(target==player&&target.num('h')<=1) return 0;
return 0.5;
}
if(target.skills.contains('toulianghuanzhu2')) return 0;
return -0.5;
}
},
useful:3,
value:7
}
},
},
skill:{
toulianghuanzhu2:{},
_chenhuodajie:{
trigger:{global:'damageEnd'},
direct:true,
filter:function(event,player){
if(event.player==player) return false;
if(!event.player.num('he')) return false;
if(player.num('h','chenhuodajie')) return true;
var mn=player.get('e','5');
if(mn&&mn.name=='muniu'&&mn.cards&&mn.cards.length){
for(var i=0;i<mn.cards.length;i++){
if(mn.cards[i].name=='chenhuodajie') return true;
}
}
return false;
},
content:function(){
player.chooseToUse('是否对'+get.translation(trigger.player)+'使用趁火打劫?',function(card,player){
if(card.name!='chenhuodajie') return false;
var mod=game.checkMod(card,player,'unchanged','cardEnabled',player.get('s'));
if(mod!='unchanged') return mod;
return true;
},trigger.player,-1).ai;
}
},
},
translate:{
geanguanhuo:'隔岸观火',
geanguanhuo_info:'指定任意两名角色进行拚点拚点输的一方掉1点血若点数一样则使用该锦囊的角色掉1点血。拚点的牌不用丢弃。',
toulianghuanzhu:'偷梁换柱',
toulianghuanzhu_info:'令一名角色获得另一名角色的两张手牌,然后还回两张手牌',
toulianghuanzhu_bg:'柱',
yihuajiemu:'移花接木',
yihuajiemu_info:'将一名角色的宝物牌转移至另一名角色',
fudichouxin:'釜底抽薪',
fudichouxin_info:'与一名角色进行拼点,若成功则获得双方拼点牌',
shuiyanqijun:'水淹七军',
shuiyanqijun_info:'令所有有装备的角色各弃置一张装备牌',
shushangkaihua:'树上开花',
shushangkaihua_info:'令手牌数最少的所有角色各摸一张牌',
huoshaolianying:'火烧连营',
huoshaolianying_bg:'烧',
huoshaolianying_info:'对逆时针方向离你最近的一名横置角色使用(若无横置角色则对你的下家使用),对其造成一点火焰伤害',
chenhuodajie:'趁火打劫',
chenhuodajie_info:'任意一名其他角色受到伤害时对其使用,获得其一张牌',
},
list:[
['heart',3,'yihuajiemu'],
["diamond",3,'guohe'],
['diamond',4,'fudichouxin'],
['diamond',1,'yihuajiemu'],
['club',6,'fudichouxin'],
['spade',1,'fudichouxin'],
['club',7,'shuiyanqijun'],
['diamond',7,'yihuajiemu'],
['club',8,'shuiyanqijun'],
['club',8,'guohe'],
['spade',9,'shuiyanqijun'],
['heart',9,'toulianghuanzhu'],
['club',10,'toulianghuanzhu'],
['spade',11,'toulianghuanzhu'],
['spade',13,'guohe'],
['heart',7,'huoshaolianying','fire'],
['diamond',12,'huoshaolianying','fire'],
['heart',6,'shushangkaihua'],
['club',1,'shushangkaihua'],
['diamond',6,'chenhuodajie'],
['diamond',9,'chenhuodajie'],
['club',3,'chenhuodajie'],
],
}

249
card/refresh.js Normal file
View File

@ -0,0 +1,249 @@
card.refresh={
card:{
muniu:{
fullskin:true,
type:'equip',
subtype:'equip5',
skills:['muniu_skill','muniu_skill2','muniu_skill7'],
ai:{
basic:{
equipValue:function(card){
if(card.card) return 8+card.card.length;
return 8;
}
}
}
}
},
skill:{
muniu_skill:{
enable:'phaseUse',
usable:1,
filterCard:true,
check:function(card){
return 10-ai.get.useful(card);
},
discard:false,
lose:true,
prepare:function(cards,player){
player.$give(1,player,false);
},
content:function(){
"step 0"
for(var i=0;i<cards.length;i++){
ui.special.appendChild(cards[i]);
}
var muniu=player.get('e','5');
if(muniu.cards==undefined) muniu.cards=[];
muniu.cards.push(cards[0]);
var players=[];
for(var i=0;i<game.players.length;i++){
if(!game.players[i].get('e','5')&&game.players[i]!=player&&
!game.players[i].isTurnedOver()&&
ai.get.attitude(player,game.players[i])>=3&&ai.get.attitude(game.players[i],player)>=3){
players.push(game.players[i]);
}
}
players.sort(lib.sort.seat);
var choice=players[0];
player.chooseTarget('是否移动木牛流马?',function(card,player,target){
return player!=target&&!target.get('e','5');
}).ai=function(target){
return target==choice?1:-1;
};
"step 1"
if(result.bool){
var card=player.get('e','5');
result.targets[0].equip(card);
player.addTempSkill('muniu_skill6','equipAfter');
player.$give(card,result.targets[0]);
game.delay();
}
},
ai:{
save:true,
respondSha:true,
respondShan:true,
order:1,
result:{
player:1
}
}
},
muniu_skill2:{
group:['muniu_skill3','muniu_skill4']
},
muniu_skill3:{
trigger:{player:'chooseToRespondBegin'},
filter:function(event,player){
if(event.responded) return false;
var muniu=player.get('e','5');
if(!muniu.cards) return false;
for(var i=0;i<muniu.cards.length;i++){
if(muniu.cards[i].parentNode.id!='special'){
muniu.cards.splice(i,1);i--;
}
}
for(var i=0;i<muniu.cards.length;i++){
if(event.filterCard(muniu.cards[i])) return true;
}
return false;
},
direct:true,
content:function(){
"step 0"
var dialog=ui.create.dialog('木牛流马',player.get('e','5').cards);
player.chooseButton(dialog).filterButton=function(button){
return trigger.filterCard(button.link);
};
"step 1"
if(result.bool){
trigger.untrigger();
trigger.responded=true;
trigger.result={bool:true,card:result.buttons[0].link};
player.get('e','5').cards.remove(result.buttons[0].link);
}
},
ai:{
order:4,
useful:-1,
value:-1
}
},
muniu_skill4:{
enable:'chooseToUse',
direct:true,
filter:function(event,player){
var muniu=player.get('e','5');
if(!muniu.cards) return false;
for(var i=0;i<muniu.cards.length;i++){
if(muniu.cards[i].parentNode.id!='special'){
muniu.cards.splice(i,1);i--;
}
}
for(var i=0;i<muniu.cards.length;i++){
if(event.filterCard(muniu.cards[i],player)) return true;
}
return false;
},
delay:0,
content:function(){
"step 0"
var dialog=ui.create.dialog('木牛流马',player.get('e','5').cards);
var trigger=event.parent.parent;
player.chooseButton(dialog,function(button){
if(get.type(button.link)=='delay') return -1;
if(get.type(button.link)=='equip'){
var current=player.get('e',{subtype:get.subtype(button.link)})[0];
if(current&&ai.get.equipValue(current)>=ai.get.equipValue(button.link)) return -1;
return 1;
}
if(get.tag(button.link,'multitarget')) return -1;
return 1;
}).filterButton=function(button){
return trigger.filterCard(button.link,player,trigger);
};
player.addTempSkill('muniu_skill8',['useCardAfter','phaseAfter']);
"step 1"
if(result.bool){
lib.skill.muniu_skill5.viewAs=result.buttons[0].link;
event.parent.parent.backup('muniu_skill5');
event.parent.parent.step=0;
if(event.isMine()){
event.parent.parent.openskilldialog='选择'+get.translation(result.buttons[0].link)+'的目标';
}
}
else{
event.parent.parent.step=0;
}
},
ai:{
order:4,
result:{
player:function(player){
if(player.tempSkills['muniu_skill8']) return 0;
if(_status.dying) return ai.get.attitude(player,_status.dying);
return 1;
}
},
useful:-1,
value:-1
}
},
muniu_skill5:{
filterCard:function(){return false},
selectCard:-1
},
muniu_skill6:{},
muniu_skill8:{},
muniu_skill7:{
filter:function(){return false},
hiddenCard:function(player,name){
var muniu=player.get('e','5');
if(!muniu.cards) return false;
for(var i=0;i<muniu.cards.length;i++){
if(muniu.cards[i].parentNode.id!='special'){
muniu.cards.splice(i,1);i--;
}
}
for(var i=0;i<muniu.cards.length;i++){
if(muniu.cards[i].name==name) return true;
}
return false;
},
},
_muliu:{
trigger:{player:'loseEnd'},
forced:true,
popup:false,
filter:function(event,player){
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].name=='muniu'&&event.cards[i].original=='e'&&
player.skills.contains('muniu_skill6')==false) return true;
}
return false;
},
content:function(){
for(var i=0;i<trigger.cards.length;i++){
if(trigger.cards[i].name=='muniu'&&trigger.cards[i].original=='e'&&
player.skills.contains('muniu_skill6')==false){
var card=trigger.cards[i];
var card2;
if(card.cards&&card.cards.length){
player.$throw(card.cards,1000);
player.popup('muniu');
var str='木牛流马掉落了'+get.translation(card.cards[0]);
for(var j=1;j<card.cards.length;j++){
str+='、'+get.translation(card.cards[j]);
}
game.log(str);
while(card.cards.length){
card2=card.cards.shift();
if(card2.parentNode.id=='special'){
ui.discardPile.appendChild(card2);
}
}
}
break;
}
}
}
},
},
translate:{
muniu:'木牛流马',
muniu_bg:'牛',
muniu_skill:'木牛',
muniu_skill2:'流马',
muniu_skill3:'流马',
muniu_skill4:'流马',
muniu_skill5:'流马',
muniu_skill6:'流马',
muniu_info:'出牌阶段限一次,你可以将一张手牌扣置于你装备区里的【木牛流马】下,若如此做,你可以将此装备移动到一名其他角色的装备区里;你可以将此装备牌下的牌如手牌般使用或打出。',
muniu_skill_info:'出牌阶段限一次,你可以将一张手牌扣置于你装备区里的【木牛流马】下,若如此做,你可以将此装备移动到一名其他角色的装备区里;你可以将此装备牌下的牌如手牌般使用或打出。',
},
list:[
["diamond",5,'muniu'],
],
}

92
card/shenbing.js Normal file
View File

@ -0,0 +1,92 @@
card.shenbing={
card:{
suolianjia:{
fullskin:true,
type:"equip",
subtype:"equip2",
skills:['suolianjia'],
onEquip:function(){
if(player.isLinked()==false) player.link();
},
onLose:function(){
if(player.isLinked()) player.link();
},
ai:{
basic:{
equipValue:5
},
},
},
huxinjing:{
fullskin:true,
type:"equip",
subtype:"equip2",
skills:['huxinjing'],
ai:{
basic:{
equipValue:6
},
},
}
},
skill:{
huxinjing:{
trigger:{player:'damageBegin'},
priority:10,
forced:true,
content:function(){
trigger.num--;
player.addSkill('huxinjing2');
// player.discard(player.get('e','2'));
}
},
huxinjing2:{
trigger:{player:'damageEnd'},
priority:10,
forced:true,
popup:false,
content:function(){
var cards=player.get('e','huxinjing');
if(cards.length){
player.discard(cards);
}
}
},
suolianjia:{
trigger:{player:'damageBefore'},
filter:function(event){
if(event.source&&event.source.num('s','unequip')) return;
if(event.nature) return true;
},
forced:true,
content:function(){
trigger.untrigger();
trigger.finish();
},
ai:{
nofire:true,
nothunder:true,
effect:{
target:function(card,player,target,current){
if(get.tag(card,'natureDamage')) return 0;
if(card.name=='tiesuo'){
return [0,0];
}
}
}
}
},
},
translate:{
suolianjia:'锁链甲',
suolianjia_info:'锁定技,你防止即将受到的属性伤害,当装备时进入连环状态,当卸下时解除连环状态',
suolianjia_bg:'链',
huxinjing_bg:'镜',
huxinjing:'护心镜',
huxinjing_info:'抵消一点伤害',
},
list:[
['club',13,'suolianjia'],
['spade',9,'huxinjing'],
],
}

676
card/shenqi.js Normal file
View File

@ -0,0 +1,676 @@
card.shenqi={
card:{
donghuangzhong:{
type:'equip',
subtype:'equip5',
skills:['donghuangzhong'],
enable:function(card,player){return player==game.me;},
onEquip:function(){
//if(player==game.me) player.loseHp();
},
onLose:function(){
//if(player==game.me) player.loseHp();
}
},
xuanyuanjian:{
type:'equip',
subtype:'equip1',
skills:['xuanyuanjian','xuanyuanjian2'],
enable:function(card,player){
return player.skills.contains('xuanyuan')||player.hp>2;
},
distance:{attackFrom:-Infinity},
onEquip:function(){
//player.loseHp();
if(!player.skills.contains('xuanyuan')&&player.hp<=2){
player.discard(card);
}
},
onLose:function(){
if(!player.skills.contains('xuanyuan')) player.loseHp();
},
ai:{
equipValue:20
}
},
pangufu:{
fullskin:true,
type:'equip',
subtype:'equip1',
skills:['pangufu'],
distance:{attackFrom:-3},
ai:{
equipValue:8
}
},
lianyaohu:{
fullskin:true,
type:'equip',
subtype:'equip5',
onLose:function(){
delete player.storage.lianhua;
},
ai:{
equipValue:8
},
skills:['lianhua','shouna']
},
haotianta:{
type:'equip',
subtype:'equip5',
skills:['haotianta'],
enable:function(card,player){return player==game.me;},
onEquip:function(){
//player.loseHp();
},
onLose:function(){
//player.loseHp();
},
ai:{
equipValue:0
}
},
fuxiqin:{
fullskin:true,
type:'equip',
subtype:'equip5',
skills:['kongxin'],
ai:{
equipValue:8
}
},
shennongding:{
fullskin:true,
type:'equip',
subtype:'equip5',
skills:['shennongding'],
ai:{
equipValue:6
}
},
kongdongyin:{
fullskin:true,
type:'equip',
subtype:'equip5',
skills:['kongdongyin'],
ai:{
basic:{
equipValue:function(card,player){
if(player.hp==2) return 7;
if(player.hp==1) return 9;
return 5;
}
}
}
},
// kunlunjing:{
// type:'equip',
// subtype:'equip5',
// skills:['kunlunjing'],
// onEquip:function(){
// //if(player==game.me) player.loseHp();
// },
// onLose:function(){
// //if(player==game.me) player.loseHp();
// },
// ai:{
// equipValue:5
// }
// },
nvwashi:{
fullskin:true,
type:'equip',
subtype:'equip5',
skills:['nvwashi'],
ai:{
equipValue:7
}
}
},
skill:{
lianhua:{
enable:'phaseUse',
filter:function(event,player){
var hu=player.get('e','5');
if(hu&&hu.storage.shouna&&hu.storage.shouna.length>1){
return true;
}
return false;
},
usable:1,
content:function(){
"step 0"
event.hu=player.get('e','5');
player.chooseCardButton('弃置两张壶中的牌,然后从牌堆中获得一张类别不同的牌',2,event.hu.storage.shouna).ai=function(){
return 1;
}
"step 1"
if(result.bool){
var type=[];
player.$throw(result.links);
game.log(get.translation(player)+'弃置了'+get.translation(result.links));
for(var i=0;i<result.links.length;i++){
event.hu.storage.shouna.remove(result.links[i]);
ui.discardPile.appendChild(result.links[i]);
type.add(get.type(result.links[i],'trick'));
}
for(var i=0;i<ui.cardPile.childNodes.length;i++){
if(!type.contains(get.type(ui.cardPile.childNodes[i],'trick'))){
player.gain(ui.cardPile.childNodes[i],'gain');
break;
}
}
}
else{
player.getStat('skill').lianhua--;
}
},
ai:{
order:11,
result:{
player:1
}
}
},
shouna:{
trigger:{global:'discardAfter'},
filter:function(event,player){
if(_status.currentPhase==event.player) return false;
if(event.player==player) return false;
for(var i=0;i<event.cards.length;i++){
if(get.position(event.cards[i])=='d'){
return true;
}
}
return false;
},
direct:true,
content:function(){
"step 0"
game.delay();
"step 1"
event.cards=trigger.cards.slice(0);
for(var i=0;i<event.cards.length;i++){
if(get.position(event.cards[i])!='d'){
event.cards.splice(i,1);i--;
}
}
var hu=player.get('e','5');
if(event.cards.length==0||!hu){
event.finish();
return;
}
event.hu=hu;
if(!hu.storage.shouna){
hu.storage.shouna=[];
}
player.chooseCardButton(event.cards,'选择一张牌收入炼妖壶').ai=function(){return 1};
"step 2"
if(result.bool){
player.logSkill('shouna');
player.$gain2(result.buttons[0].link);
event.hu.storage.shouna.push(result.buttons[0].link);
ui.special.appendChild(result.buttons[0].link);
game.log(get.translation(player)+'将'+get.translation(result.buttons[0].link)+'收入炼妖壶');
game.delay();
}
},
},
donghuangzhong:{
mode:['identity','guozhan'],
enable:'phaseUse',
usable:1,
filter:function(event,player){
return event.player==game.me&&
(game.dead.length||game.players.length+game.dead.length<8);
},
content:function(){
"step 0"
var list=[];
for(var i=0;i<game.dead.length;i++){
list.push(game.dead[i].name);
}
if(game.dead.length){
player.chooseButton(ui.create.dialog([list,'character']),function(button){
for(var i=0;i<game.dead.length&&game.dead[i].name!=button.link;i++);
return -ai.get.attitude(_status.event.player,game.dead[i]);
},true);
if(game.players.length+game.dead.length<8){
event.control=ui.create.control('新角色',ui.click.cancel)
}
}
"step 1"
if(result.bool){
for(var i=0;i<game.dead.length&&game.dead[i].name!=result.buttons[0].link;i++);
game.removePlayer(game.dead[i]);
player.recover();
}
else{
var group=player.group;
if(group=='unknown') group=lib.group.randomGet();
var list=[];
for(var i in lib.character){
if(lib.character[i][1]==group) list.push(i);
}
var player2=game.addPlayer();
if(get.config('double_character')){
var list2=list.randomGets(2);
player2.init(list2[0],list2[1]);
}
else{
player2.init(list.randomGet())
}
player2.identity=player.identity;
if(player2.identity=='zhu') player2.identity='zhong';
player2.setIdentity();
player2.identityShown=true;
if(group!='unknown') player.loseHp(player2.maxHp);
}
if(event.control) event.control.close();
}
},
xuanyuanjian:{
mod:{
selectTarget:function(card,player,range){
if(card.name=='sha'&&range[1]!=-1) range[1]++;
},
},
trigger:{player:'changeHp'},
forced:true,
popup:false,
filter:function(event,player){
return !player.skills.contains('xuanyuan')&&player.hp<=2
},
content:function(){
player.discard(player.get('e','1'));
},
ai:{
threaten:1.5
}
},
xuanyuanjian2:{
trigger:{source:'damageBefore'},
forced:true,
filter:function(event){
return Math.random()<0.5;
},
content:function(){
trigger.num++;
if(!trigger.nature) trigger.nature='thunder';
player.get('e','1').animate('thunder');
}
},
pangufu:{
trigger:{source:'damageEnd'},
forced:true,
priority:55,
filter:function(event){
return event.player.num('he')>0;
},
content:function(){
trigger.player.chooseToDiscard(true,'he');
}
},
shouhua:{
mode:['identity','infinity'],
enable:'phaseUse',
filter:function(event,player){
return player==game.me;
},
usable:1,
filterTarget:function(card,player,target){
return target!=game.zhu&&target!=game.me&&target.hp<target.maxHp;
},
filterCard:true,
check:function(card){
return ai.get.value(card);
},
discard:false,
prepare:function(cards,player){
player.$throw(cards);
},
content:function(){
"step 0"
target.$turn2();
target.style.left='calc(50% - 120px)';
target.style.top='calc(50% - 60px)';
game.delay(0,2500);
"step 1"
target.removeAttribute('style');
if(Math.random()<(ai.get.value(cards[0])+1)*(target.maxHp-target.hp)/(60*target.maxHp)){
event.position=target.dataset.position;
target.dataset.position=player.dataset.position;
target.delete();
event.success=true;
}
game.delay();
"step 2"
if(event.success){
player.popup('收化成功');
game.log(get.translation(player)+'将'+get.translation(target)+'收化');
target.dataset.position=event.position;
var card=player.get('e','5');
if(!card.storage.shouhua) card.storage.shouhua=[];
card.storage.shouhua.push(target);
game.removePlayer(target);
game.checkResult();
}
else{
player.popup('收化失败');
target.gain(cards);
target.$gain2(cards);
}
game.delay();
},
ai:{
result:{
player:function(){
return Math.random()-0.4;
}
}
}
},
haotianta:{
trigger:{global:'judgeBefore'},
content:function(){
"step 0"
event.cards=get.cards(9);
player.chooseCardButton(event.cards,'选择一张牌作为判定结果',true).ai=function(button){
if(ai.get.attitude(player,trigger.player)>0){
return trigger.judge(button.link);
}
if(ai.get.attitude(player,trigger.player)<0){
return -trigger.judge(button.link);
}
};
"step 1"
var card=result.links[0];
event.cards.remove(card);
for(var i=0;i<event.cards.length;i++) ui.discardPile.appendChild(event.cards[i]);
var node=card.copy('thrown','center',ui.arena).animate('start');
if(card){
trigger.untrigger();
trigger.finish();
trigger.result={
card:card,
judge:trigger.judge(card),
node:node,
};
if(trigger.result.judge>0){
trigger.result.bool=true;
trigger.player.popup('洗具');
}
if(trigger.result.judge<0){
trigger.result.bool=false;
trigger.player.popup('杯具');
}
game.log(get.translation(trigger.player)+'的判定结果为'+get.translation(card)+
'('+get.translation(get.suit(card))+get.number(card)+')');
trigger.direct=true;
trigger.position.appendChild(card);
game.delay(2);
}
else{
event.finish();
}
"step 2"
var card=trigger.result.card;
if(trigger.position!=ui.discardPile){
trigger.position.appendChild(card);
trigger.result.node.delete();
}
else{
player.gain(card);
player.$gain2(card);
}
game.delay();
},
ai:{
tag:{
rejudge:10
}
}
},
shennongding:{
enable:'phaseUse',
usable:1,
filterCard:true,
selectCard:2,
check:function(card){
if(get.tag(card,'recover')>=1) return 0;
return 7-ai.get.value(card);
},
filter:function(event,player){
return player.hp<player.maxHp;
},
content:function(){
player.recover();
},
ai:{
result:{
player:function(player){
return ai.get.recoverEffect(player);
}
},
order:4
}
},
kongdongyin:{
trigger:{player:'dieBefore'},
forced:true,
filter:function(event,player){
return player.maxHp>0;
},
content:function(){
trigger.untrigger();
trigger.finish();
player.hp=1;
player.draw();
player.discard(player.get('e',{subtype:'equip5'}));
game.delay();
}
},
nvwashi:{
trigger:{global:'dying'},
priority:6,
filter:function(event,player){
return event.player.hp<=0;
},
check:function(event,player){
return ai.get.attitude(player,event.player)>0;
},
content:function(){
"step 0"
trigger.player.judge(function(card){
return get.suit(card)=='heart'?1:0;
});
"step 1"
if(result.bool){
trigger.player.recover();
}
},
ai:{
threaten:1.2,
expose:0.2
}
},
kongxin:{
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return target!=player&&target.num('h');
},
filter:function(event,player){
return player.num('h')?true:false;
},
content:function(){
"step 0"
player.chooseToCompare(target);
"step 1"
if(result.bool){
event.bool=true;
player.chooseTarget('选择一个目标视为'+get.translation(target)+'对其使用一张杀',function(card,player,target2){
return player!=target2&&target.canUse('sha',target2);
}).ai=function(target){
return ai.get.effect(target,{name:'sha'},target,player);
}
}
else{
target.discardPlayerCard(player);
}
"step 2"
if(event.bool&&result.bool){
target.useCard({name:'sha'},result.targets);
}
},
ai:{
order:7,
result:{
target:function(player,target){
if(ai.get.attitude(player,target)>=0) return 0;
for(var i=0;i<game.players.length;i++){
if(player!=game.players[i]&&
target.canUse('sha',game.players[i])&&
ai.get.effect(game.players[i],{name:'sha'},target,player)>0){
return -1;
}
}
return 0;
}
}
}
},
kongxin2:{
trigger:{player:'dying'},
priority:10,
forced:true,
popup:false,
filter:function(event,player){
return player==game.me;
},
content:function(){
player.removeSkill('kongxin2');
game.swapPlayer(player);
player.storage.kongxin.lockOut=false;
player.storage.kongxin.out();
if(player==game.me) game.swapPlayer(player.storage.kongxin);
if(lib.config.mode=='identity') player.storage.kongxin.setIdentity();
delete player.storage.kongxin;
},
},
lianyao_hujia:{
mode:['identity','guozhan'],
enable:'phaseUse',
usable:1,
filter:function(event,player){
if(player!=game.me) return false;
var card=player.get('e','5');
if(card.storage.shouhua&&card.storage.shouhua.length) return true;
return false;
},
content:function(){
"step 0"
var list=[];
var card=player.get('e','5');
for(var i=0;i<card.storage.shouhua.length;i++){
list.push(card.storage.shouhua[i].name);
}
var dialog=ui.create.dialog([list,'character']);
for(var i=0;i<dialog.buttons.length;i++){
dialog.buttons[i].link=card.storage.shouhua[i];
dialog.buttons[i].querySelector('.intro').remove();
}
player.chooseButton(dialog,true);
"step 1"
if(result.bool){
game.restorePlayer(result.links[0]);
game.delay();
}
else{
event.finish();
}
"step 2"
game.swapPlayer(result.links[0]);
result.links[0].hp=1;
result.links[0].update();
result.links[0].storage.lianyao_hujia=player;
game.swapPlayer(result.links[0]);
result.links[0].addSkill('lianyao_hujia2');
result.links[0].phase();
result.links[0].setIdentity();
result.links[0].identityShown=true;
player.out(true);
}
},
lianyao_hujia2:{
trigger:{player:['phaseAfter','changeHp']},
forced:true,
popup:false,
content:function(){
player.hp=1;
player.update();
var me=player.storage.lianyao_hujia;
delete player.storage.lianyao_hujia;
me.lockOut=false;
me.out();
player.removeSkill('lianyao_hujia2');
if(player==game.me){
game.swapPlayer(me);
game.removePlayer(player);
game.delay();
}
}
}
},
translate:{
donghuangzhong:'东皇钟',
xuanyuanjian:'轩辕剑',
xuanyuanjian2:'轩辕剑',
pangufu:'盘古斧',
lianyaohu:'炼妖壶',
haotianta:'昊天塔',
fuxiqin:'伏羲琴',
shennongding:'神农鼎',
kongdongyin:'崆峒印',
//kunlunjing:'昆仑镜',
//kunlunjing1:'昆仑镜',
nvwashi:'女娲石',
donghuangzhong_bg:'钟',
lianyaohu_bg:'壶',
haotianta_bg:'塔',
fuxiqin_bg:'琴',
shennongding_bg:'鼎',
kongdongyin_bg:'印',
kunlunjing_bg:'镜',
nvwashi_bg:'石',
kongxin:'控心',
lianhua:'炼化',
lianhua_info:'出牌阶段限一次,你可以弃置两张炼妖壶中的牌,从牌堆中获得一张与弃置的牌类别均不相同的牌',
shouna:'收纳',
shouna_info:'当一名其他角色于回合外弃置的卡牌进入弃牌堆后,你可以选择其中的一张放入炼妖壶',
// donghuangzhong_info:'出牌阶段你可以将一名已死亡角色永久移出游戏然后回复一点体力或创建一名与你身份相同的新角色然后流失X点体力X为新角色的体力上限',
// xuanyuanjian_info:'锁定技你使用的杀无视距离可以额外指定一个目标每当你造成一次伤害有50的机率使伤害加一并变为雷属性。任何时候若你体力值不超过2则立即失去轩辕剑',
pangufu_info:'锁定技,每当你造成一次伤害,受伤角色须弃置一张牌',
// haotianta_info:'任意一名角色进行判定前你可以亮出牌堆顶的9张牌并选择一张作为判定结果此结果不可被更改也不能触发技能',
shennongding_info:'出牌阶段,你可以弃置两张手牌,然后回复一点体力。每阶段限一次',
kongdongyin_info:'令你抵挡一次死亡将体力回复至1并摸一张牌发动后进入弃牌堆',
//kunlunjing_info:'回合开始前,你可以令场上所有牌还原到你上一回合结束后的位置,然后流失一点体力',
nvwashi_info:'意一名角色濒死时,你可以令其进行一次判定,若结果为红桃,其回复一点体力',
kongxin_info:'出牌阶段限一次,你可以与一名其他角色进行拼点,若你赢,你可以指定另一名角色视为对方对该角色使用一张杀,否则对方可弃置你一张处于',
lianyaohu_info:'当一名其他角色于回合外弃置的卡牌进入弃牌堆后,你可以选择其中的一张放入炼妖壶;出牌阶段限一次,你可以弃置两张炼妖壶中的牌,从牌堆中获得一张与弃置的牌类别均不相同的牌',
fuxiqin_info:'出牌阶段你可以选择一名角色并流失X点体力然后获得其控制权直到其首次进入濒死状态X为该角色当前的体力值',
},
list:[
// ['diamond',13,'donghuangzhong'],
['diamond',13,'fuxiqin'],
// ['spade',13,'kunlunjing'],
// ['spade',13,'xuanyuanjian'],
['spade',13,'pangufu'],
['club',13,'lianyaohu'],
// ['diamond',13,'haotianta'],
['club',13,'shennongding'],
['heart',13,'nvwashi'],
['heart',13,'kongdongyin'],
],
}

1513
card/standard.js Normal file

File diff suppressed because it is too large Load Diff

1191
card/swd.js Normal file

File diff suppressed because it is too large Load Diff

14
card/wanxiang.js Normal file
View File

@ -0,0 +1,14 @@
card.wanxiang={
card:{
},
skill:{
},
translate:{
},
list:[
],
}

414
card/yibao.js Normal file
View File

@ -0,0 +1,414 @@
card.yibao={
card:{
hufu:{
fullskin:true,
type:'basic',
ai:{
value:[7.5,5,2],
useful:[7.5,5,2],
}
},
huoshan:{
fullskin:true,
type:'delay',
enable:function(card,player){
return (lib.filter.judge(card,player,player));
},
filterTarget:function(card,player,target){
return (lib.filter.judge(card,player,target)&&player==target);
},
selectTarget:[-1,-1],
judge:function(card){
if(get.suit(card)=='heart'&&get.number(card)>1&&get.number(card)<10) return -6;
return 0;
},
effect:function(){
if(result.judge){
player.damage(2,'fire','nosource');
var players=get.players();
for(var i=0;i<game.players.length;i++){
if(get.distance(player,game.players[i])<=1&&player!=game.players[i]){
game.players[i].damage(1,'fire','nosource');
}
}
}
else{
if(!card.expired){
if(card.name!='huoshan'){
player.next.addJudge('huoshan',card);
}
else{
player.next.addJudge(card);
}
}
else{
card.expired=false;
}
}
},
cancel:function(){
player.next.addJudge(card);
},
ai:{
basic:{
useful:0,
value:0,
},
order:1,
result:{
target:function(player,target){
var rejudge,num=0;
for(var i=0;i<game.players.length;i++){
for(var j=0;j<game.players[i].skills.length;j++){
rejudge=get.tag(game.players[i].skills[j],'rejudge',game.players[i]);
if(rejudge!=undefined){
if(ai.get.attitude(target,game.players[i])>0&&
ai.get.attitude(game.players[i],target)>0) num+=rejudge;
else num-=rejudge;
}
}
}
if(num>0) return num;
if(num==0){
if(lib.config.mode=='identity'){
if(target.identity=='nei') return 1;
var situ=ai.get.situation();
if(target.identity=='fan'){
if(situ>1) return 1;
}
else{
if(situ<-1) return 1;
}
}
else if(lib.config.mode=='guozhan'){
if(target.identity=='ye') return 1;
for(var i=0;i<game.players.length;i++){
if(game.players[i].identity=='unknown') return -1;
}
if(get.population(target.identity)==1){
if(target.maxHp>2&&target.hp<2) return 1;
if(game.players.length<3) return -1;
if(target.hp<=2&&target.num('he')<=3) return 1;
}
}
}
return -1;
}
},
tag:{
// damage:1,
// natureDamage:1,
// fireDamage:1,
}
}
},
hongshui:{
type:'delay',
enable:function(card,player){
return (lib.filter.judge(card,player,player));
},
filterTarget:function(card,player,target){
return (lib.filter.judge(card,player,target)&&player==target);
},
selectTarget:[-1,-1],
judge:function(card){
if(get.suit(card)=='club'&&get.number(card)>1&&get.number(card)<10) return -3;
return 0;
},
fullskin:true,
effect:function(){
if(result.judge){
if(player.num('he')==0) player.loseHp();
else player.chooseToDiscard('he',true,3);
var players=get.players();
for(var i=0;i<game.players.length;i++){
var dist=get.distance(player,game.players[i]);
if(dist<=2&&player!=game.players[i]){
if(game.players[i].num('he')==0) game.players[i].loseHp();
else game.players[i].chooseToDiscard('he',true,3-Math.max(1,dist));
}
}
}
else{
if(!card.expired){
if(card.name!='hongshui'){
player.next.addJudge('hongshui',card);
}
else{
player.next.addJudge(card);
}
}
else{
card.expired=false;
}
}
},
cancel:function(){
player.next.addJudge(card);
},
ai:{
basic:{
useful:0,
value:0,
},
order:1,
result:{
target:function(player,target){
var rejudge,num=0;
for(var i=0;i<game.players.length;i++){
for(var j=0;j<game.players[i].skills.length;j++){
rejudge=get.tag(game.players[i].skills[j],'rejudge',game.players[i]);
if(rejudge!=undefined){
if(ai.get.attitude(target,game.players[i])>0&&
ai.get.attitude(game.players[i],target)>0) num+=rejudge;
else num-=rejudge;
}
}
}
if(num>0) return num;
if(num==0){
if(lib.config.mode=='identity'){
if(target.identity=='nei') return 1;
var situ=ai.get.situation();
if(target.identity=='fan'){
if(situ>0) return 1;
}
else{
if(situ<0) return 1;
}
}
else if(lib.config.mode=='guozhan'){
if(game.players.length<=2) return -1;
if(target.identity=='ye') return 1;
for(var i=0;i<game.players.length;i++){
if(game.players[i].identity=='unknown') return -1;
}
if(get.population(target.identity)==1){
return 1;
}
}
}
return -1;
}
},
}
},
liuxinghuoyu:{
fullskin:true,
type:'trick',
enable:true,
filterTarget:function(card,player,target){
return target.num('he')>0;
},
content:function(){
"step 0"
target.chooseToDiscard('he',[1,2]).ai=function(card){
if(target.hasSkillTag('nofire')) return 0;
if(target.hasSkillTag('maixie')&&target.hp>1&&ui.selected.cards.length){
return 0;
}
if(get.type(card)!='basic'){
return 10-ai.get.value(card);
}
return 8-ai.get.value(card);
};
"step 1"
if(!result.bool||result.cards.length<2){
if(result.bool) target.damage(2-result.cards.length,'fire');
else target.damage(2,'fire');
}
},
ai:{
basic:{
order:4,
value:7,
useful:2,
},
result:{
target:function(player,target){
if(target.hasSkillTag('nofire')) return 0;
return -2;
}
},
tag:{
damage:2,
fireDamage:2,
natureDamage:2,
discard:2,
loseCard:2,
position:'he',
}
}
},
dujian:{
fullskin:true,
type:'basic',
enable:true,
filterTarget:function(card,player,target){
return target.num('h')>0;
},
content:function(){
"step 0"
if(target.num('h')==0||player.num('h')==0){
event.finish();
return;
}
player.chooseCard(true);
"step 1"
event.card1=result.cards[0];
target.chooseCard(true);
"step 2"
event.card2=result.cards[0];
player.$compare(event.card1,target,event.card2);
game.delay(4);
"step 3"
if(get.color(event.card2)==get.color(event.card1)){
player.discard(event.card1).animate=false;
target.$gain2(event.card2);
var clone=event.card1.clone;
if(clone){
clone.style.transition='all 0.5s';
clone.style.webkitTransform='scale(1.2)';
clone.delete();
}
target.loseHp();
}
else{
player.$gain2(event.card1);
target.$gain2(event.card2);
target.addTempSkill('dujian2','phaseBegin');
}
},
ai:{
basic:{
order:2,
value:3,
useful:1,
},
result:{
player:function(player,target){
if(player.num('h')<=Math.max(2,player.hp)&&
_status.event.name=='chooseToUse'&&_status.event.filterCard({name:'dujian'})) return -10;
},
target:-1.5
},
tag:{
loseHp:1
}
}
},
qiankundai:{
fullskin:true,
type:'equip',
subtype:'equip5',
onLose:function(){
player.draw();
},
skills:['qiankundai'],
ai:{
order:9.5,
basic:{
equipValue:function(card,player){
if(player.num('h','qiankundai')) return 6;
return 1;
}
}
}
},
},
skill:{
dujian2:{},
qiankundai:{
mod:{
maxHandcard:function(player,num){
return num+1;
}
},
},
_hufu_sha:{
enable:['chooseToRespond','chooseToUse'],
filter:function(event,player){
return player.num('h','hufu')>0;
},
filterCard:{name:'hufu'},
viewAs:{name:'sha'},
prompt:'将一张虎符当杀使用或打出',
check:function(card){return 1},
ai:{
order:1,
useful:7.5,
value:7.5
}
},
_hufu_shan:{
enable:['chooseToRespond','chooseToUse'],
filter:function(event,player){
return player.num('h','hufu')>0;
},
filterCard:{name:'hufu'},
viewAs:{name:'shan'},
prompt:'将一张虎符当闪使用或打出',
check:function(){return 1},
ai:{
order:1,
useful:7.5,
value:7.5
}
},
_hufu_jiu:{
enable:['chooseToRespond','chooseToUse'],
filter:function(event,player){
return player.num('h','hufu')>0;
},
filterCard:{name:'hufu'},
viewAs:{name:'jiu'},
prompt:'将一张虎符当酒使用',
check:function(){return 1},
},
},
translate:{
huoshan:'火山',
huoshan_info:'出牌阶段对自己使用。若判定结果为红桃2~9则目标角色受到2点火焰伤害距离目标1以内的其他角色受到1点火焰伤害。若判定不为红桃2~9将之移动到下家的判定区里。',
hongshui:'洪水',
hongshui_info:'出牌阶段对自己使用。若判定结果为梅花2~9该角色须弃置3张牌距离该角色为X的角色须弃置3-X张牌若没有牌则失去一点体力X至少为1',
liuxinghuoyu:'流星火羽',
liuxinghuoyu_info:'出牌阶段对一名有手牌或装备牌的角色使用令其弃置0~2张牌并受到2-X点火焰伤害X为弃置的卡牌数',
dujian:'毒箭',
dujian_info:'出牌阶段,对一名有手牌或装备牌的角色使用,令其展示一张手牌,若与你选择的手牌颜色相同,你对其造成一点毒属性伤害',
qiankundai:'乾坤袋',
qiankundai_info:'你的手牌上限+1。当你失去该装备时你摸取一张牌。',
hufu:'虎符',
hufu_bg:'符',
_hufu_sha:'符杀',
_hufu_shan:'符闪',
_hufu_jiu:'符酒',
hufu_info:'你可以将一张虎符当作杀、闪或酒使用或打出',
},
list:[
['heart',1,'hufu'],
['spade',1,'hufu'],
['club',1,'qiankundai'],
['heart',6,'huoshan','fire'],
['club',7,'hongshui'],
['diamond',3,'liuxinghuoyu','fire'],
['heart',6,'liuxinghuoyu','fire'],
['heart',9,'liuxinghuoyu','fire'],
//['heart',11,'liuxinghuoyu','fire'],
//['heart',12,'liuxinghuoyu','fire'],
['spade',3,'dujian'],
//['club',6,'dujian','poison'],
//['club',9,'dujian','poison'],
['club',11,'dujian'],
['club',12,'dujian'],
//['club',3,'sha','poison'],
//['club',4,'sha','poison'],
//['club',5,'sha','poison'],
//['spade',6,'sha','poison'],
//['spade',7,'sha','poison'],
//['club',3,'sha','poison'],
//['club',4,'sha','poison'],
//['club',5,'sha','poison'],
//['spade',6,'sha','poison'],
//['spade',7,'sha','poison'],
],
}

423
card/zhenfa.js Normal file
View File

@ -0,0 +1,423 @@
card.zhenfa={
card:{
pozhenjue:{
type:'zhenfa',
chongzhu:true,
enable:true,
filterTarget:true,
selectTarget:-1,
multitarget:true,
content:function(){
var n=game.players.length;
while(n--){
game.swapSeat(game.players.randomGet(),game.players.randomGet());
}
},
mode:['guozhan'],
ai:{
order:8,
result:{
player:1,
},
}
},
changshezhen:{
type:'zhenfa',
chongzhu:true,
enable:function(card,player){
if(player.identity=='unknown') return false;
return player.next.identity==player.identity||player.previous.identity==player.identity;
},
filterTarget:function(card,player,target){
if(player==target) return player.inline();
return player.inline(target);
},
selectTarget:-1,
multitarget:true,
multiline:true,
content:function(){
game.asyncDraw(targets);
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:1,
},
tag:{
draw:1
}
}
},
tianfuzhen:{
type:'zhenfa',
chongzhu:true,
enable:true,
filterTarget:function(card,player,target){
if(target.get('he').length==0) return false;
if(target.identity=='unknown'||target.identity=='ye') return false;
var wei=get.population('wei'),shu=get.population('shu'),wu=get.population('wu'),qun=get.population('qun');
if(wei<=1&&shu<=1&&wu<=1&&qun<=1) return false;
var max=Math.max(wei,shu,wu,qun);
return get.population(target.identity)==max;
},
selectTarget:-1,
content:function(){
target.chooseToDiscard('he',true);
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:-1,
},
tag:{
discard:1
}
}
},
dizaizhen:{
type:'zhenfa',
chongzhu:true,
enable:true,
multitarget:true,
multiline:true,
filterTarget:function(card,player,target){
if(target.identity=='unknown') return false;
var wei=get.population('wei'),shu=get.population('shu'),wu=get.population('wu'),qun=get.population('qun');
if(wei<=1&&shu<=1&&wu<=1&&qun<=1) return false;
if(target.identity=='ye') return true;
var max=Math.max(wei,shu,wu,qun);
return get.population(target.identity)!=max;
},
selectTarget:-1,
content:function(){
game.asyncDraw(targets);
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:1,
},
tag:{
draw:1
}
}
},
fengyangzhen:{
type:'zhenfa',
chongzhu:true,
enable:true,
filterTarget:function(card,player,target){
return target.sieged();
},
selectTarget:-1,
content:function(){
target.addTempSkill('feiying',{player:'damageAfter'});
target.popup('feiying');
game.log(get.translation(target)+'获得了技能飞影');
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:2,
},
}
},
yunchuizhen:{
type:'zhenfa',
chongzhu:true,
enable:true,
filterTarget:function(card,player,target){
return target.sieging();
},
selectTarget:-1,
content:function(){
target.addTempSkill('wushuang',{source:'damageAfter'});
target.popup('wushuang');
game.log(get.translation(target)+'获得了技能无双');
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:2,
},
}
},
qixingzhen:{
type:'zhenfa',
chongzhu:true,
enable:function(card,player){
if(player.identity=='unknown'||player.identity=='ye') return false;
return (get.population(player.identity)>1)
},
filterTarget:function(card,player,target){
return target.identity==player.identity;
},
multitarget:true,
selectTarget:-1,
content:function(){
lib.temp=targets[0];
targets.sort(lib.sort.seat);
var rest=game.players.slice(0);
rest.remove(targets);
rest.sort(function(a,b){
if(a.identity=='unknown') return 1;
else return -1;
})
lib.temp={};
if(targets.length>rest.length+1) targets.length=rest.length+1;
for(var i=1;i<targets.length;i++){
game.swapSeat(targets[i],targets[i-1].next.next,false);
game.swapSeat(rest[i-1],targets[i-1].next,false);
}
if(rest[targets.length-1]){
game.swapSeat(rest[targets.length-1],targets[targets.length-1].next,false);
}
game.log(get.translation(player.identity)+'势力角色摆成了七星阵')
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:1,
},
}
},
shepanzhen:{
type:'zhenfa',
chongzhu:true,
enable:function(card,player){
if(player.identity=='unknown'||player.identity=='ye') return false;
return (get.population(player.identity)>1)
},
filterTarget:function(card,player,target){
return target.identity==player.identity;
},
multitarget:true,
selectTarget:-1,
content:function(){
lib.temp=targets[0];
targets.sort(lib.sort.seat);
lib.temp={};
for(var i=1;i<targets.length;i++){
game.swapSeat(targets[i],targets[i-1].next,false);
}
game.log(get.translation(player.identity)+'势力角色摆成了蛇蟠阵')
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:1,
},
}
},
longfeizhen:{
type:'zhenfa',
chongzhu:true,
enable:function(card,player){
return player.next.siege(player);
},
filterTarget:function(card,player,target){
if(target.get('he').length==0) return false;
return target==player.next||target==player.previous;
},
selectTarget:-1,
content:function(){
"step 0"
player.choosePlayerCard(target,'he',true);
"step 1"
target.discard(result.buttons[0].link);
},
mode:['guozhan'],
ai:{
order:10,
result:{
target:-1,
},
}
},
huyizhen:{
type:'zhenfa',
chongzhu:true,
enable:function(card,player){
return player.siege(player.next)||player.siege(player.previous);
},
filterTarget:function(card,player,target){
return player.siege(target);
},
selectTarget:-1,
content:function(){
"step 0"
player.chooseCard('将一张非基本牌当作杀对'+get.translation(target)+'使用','he',function(card){
return get.type(card)!='basic';
}).ai=function(card){
if(ai.get.effect(target,{name:'sha'},player,player)>0){
return 6-ai.get.value(card);
}
return 0;
};
"step 1"
if(result.bool){
player.useCard({name:'sha'},result.cards,target,false);
}
"step 2"
if(target==player.next) event.player2=player.next.next;
else event.player2=player.previous.previous;
event.player2.chooseCard('将一张非基本牌当作杀对'+get.translation(target)+'使用','he',function(card){
return get.type(card)!='basic';
}).ai=function(card){
if(ai.get.effect(target,{name:'sha'},event.player2,event.player2)>0){
return 6-ai.get.value(card);
}
return 0;
};
"step 3"
if(result.bool){
event.player2.useCard({name:'sha'},result.cards,target,false);
}
},
mode:['guozhan'],
ai:{
order:7,
result:{
target:-2,
},
}
},
niaoxiangzhen:{
type:'zhenfa',
chongzhu:true,
enable:true,
filterTarget:function(card,player,target){
if(player.identity==target.identity) return false;
if(target.identity=='unknown'||target.identity=='ye') return false;
return target.identity==target.next.identity||target.identity==target.previous.identity
},
selectTarget:-1,
content:function(){
"step 0"
var next=target.chooseToRespond({name:'shan'});
next.ai=function(card){
if(ai.get.damageEffect(target,player,target)>=0) return 0;
return 1;
};
next.autochoose=lib.filter.autoRespondShan;
"step 1"
if(result.bool==false){
target.damage();
}
},
ai:{
basic:{
order:9,
useful:1
},
result:{
target:-1.5,
},
tag:{
respond:1,
respondShan:1,
damage:1,
}
},
mode:['guozhan'],
},
},
skill:{
},
translate:{
zhenfa:'阵法',
changshezhen:'长蛇阵',
pozhenjue:'破阵决',
tianfuzhen:'天覆阵',
dizaizhen:'地载阵',
fengyangzhen:'风扬阵',
yunchuizhen:'云垂阵',
qixingzhen:'七星阵',
shepanzhen:'蛇蟠阵',
shepanzhen_bg:'列',
yunchuizhen_bg:'垂',
longfeizhen:'龙飞阵',
huyizhen:'虎翼阵',
niaoxiangzhen:'鸟翔阵',
niaoxiangzhen_info:'令所有非你阵营的队列的角色今次打出一张闪,或者受到一点伤害',
huyizhen_info:'将一张非基本牌当作杀对你围攻的角色使用',
longfeizhen_info:'弃置围攻你的角色各一张牌',
qixingzhen_info:'令我方所有角色进入围攻状态',
shepanzhen_info:'令我方所有角色进入队列状态',
yunchuizhen_info:'令所有围攻角色获得技能【无双】,直到其首次造成伤害',
fengyangzhen_info:'令所有被围攻角色获得技能【飞影】,直到其首次受到伤害',
dizaizhen_info:'令势力数不是最多的所有角色摸一张牌',
changshezhen_info:'与你同一队列的所有角色摸一张牌',
pozhenjue_info:'将所有角色的顺序随机重排',
tianfuzhen_info:'令势力数最多的所有角色弃置一张牌'
},
list:[
["diamond",1,'changshezhen'],
["club",1,'changshezhen'],
// ["spade",1,'changshezhen'],
// ["heart",1,'changshezhen'],
["diamond",2,'tianfuzhen'],
// ["club",2,'tianfuzhen'],
["spade",2,'tianfuzhen'],
["heart",2,'tianfuzhen'],
["diamond",3,'dizaizhen'],
// ["club",3,'dizaizhen'],
["spade",3,'dizaizhen'],
["heart",3,'dizaizhen'],
["diamond",4,'fengyangzhen'],
["club",4,'fengyangzhen'],
// ["spade",4,'fengyangzhen'],
// ["heart",4,'fengyangzhen'],
// ["diamond",5,'zhonghuangzhen'],
// ["club",5,'zhonghuangzhen'],
// ["spade",5,'zhonghuangzhen'],
// ["heart",5,'zhonghuangzhen'],
["diamond",6,'huyizhen'],
["club",6,'huyizhen'],
// ["spade",6,'huyizhen'],
// ["heart",6,'huyizhen'],
["diamond",7,'qixingzhen'],
// ["club",7,'qixingzhen'],
// ["spade",7,'qixingzhen'],
["heart",7,'qixingzhen'],
["diamond",8,'shepanzhen'],
// ["club",8,'shepanzhen'],
// ["spade",8,'shepanzhen'],
["heart",8,'shepanzhen'],
// ["diamond",9,'longfeizhen'],
// ["club",9,'longfeizhen'],
["spade",9,'longfeizhen'],
["heart",9,'longfeizhen'],
["diamond",11,'niaoxiangzhen'],
// ["club",11,'niaoxiangzhen'],
["spade",11,'niaoxiangzhen'],
["heart",11,'niaoxiangzhen'],
["diamond",12,'yunchuizhen'],
// ["club",12,'yunchuizhen'],
// ["spade",12,'yunchuizhen'],
["heart",12,'yunchuizhen'],
["diamond",13,'pozhenjue'],
// ["club",13,'pozhenjue'],
// ["spade",13,'pozhenjue'],
//["heart",13,'pozhenjue'],
],
}

791
character/diy.js Normal file
View File

@ -0,0 +1,791 @@
character.diy={
character:{
// diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']],
// diy_hanlong:['male','wei',4,['siji','ciqiu'],['fullskin']],
diy_feishi:['male','shu',3,['shuaiyan','moshou'],['fullskin']],
diy_liuyan:['male','shu',4,['juedao','geju'],['fullskin']],
diy_luxun:['male','wu',3,['shaoying','zonghuo'],['fullskin']],
diy_yuji:['male','qun',3,['diyguhuo','diychanyuan'],['fullskin']],
// diy_zhouyu:['male','wu',3,['jieyan','honglian']],
diy_zhouyu:['male','wu',3,['xiongzi','yaliang'],['fullskin']],
diy_caiwenji:['female','qun',3,['beige','guihan'],['fullskin']],
diy_lukang:['male','wu',4,['luweiyan','qianxun'],['fullskin']],
diy_xuhuang:['male','wei',4,['diyduanliang'],['fullskin']],
diy_dianwei:['male','wei',4,['diyqiangxi'],['fullskin']],
diy_huangzhong:['male','shu',4,['liegong','fuli'],['fullskin']],
diy_weiyan:['male','shu',4,['diykuanggu'],['fullskin']],
diy_zhenji:['female','wei',3,['jiaoxia','yiesheng'],['fullskin']],
diy_menghuo:['male','shu',4,['huoshou','zaiqix'],['fullskin']],
re_huangyueying:['female','shu',3,['rejizhi','qicai'],['fullskin']],
old_zhonghui:['male','wei',3,['zzhenggong','zquanji','zbaijiang'],['fullskin']],
},
skill:{
zaiqix:{
trigger:{player:'phaseDrawBefore'},
filter:function(event,player){
return player.hp<player.maxHp;
},
check:function(event,player){
if(1+player.maxHp-player.hp<2){
return false;
}
else if(1+player.maxHp-player.hp==2){
return player.num('h')>=2;
}
return true;
},
content:function(){
"step 0"
trigger.untrigger();
trigger.finish();
event.cards=get.cards(player.maxHp-player.hp+1);
player.showCards(event.cards);
"step 1"
var num=0;
for(var i=0;i<event.cards.length;i++){
if(get.suit(event.cards[i])=='heart'){
num++;
ui.discardPile.appendChild(event.cards[i]);
event.cards.splice(i--,1);
}
}
if(num){
player.recover(num);
}
"step 2"
if(event.cards.length){
player.gain(event.cards);
player.$gain2(event.cards);
game.delay();
}
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 2;
if(target.hp==2) return 1.5;
return 1;
},
}
},
batu:{
trigger:{player:'phaseEnd'},
frequent:true,
filter:function(event,player){
var num=0;
var list=['wei','shu','wu','qun'];
for(var i=0;i<game.players.length&&list.length;i++){
if(list.contains(game.players[i].group)){
list.remove(game.players[i].group);
num++;
}
}
return player.num('h')<num;
},
content:function(){
var num=0;
var list=['wei','shu','wu','qun'];
for(var i=0;i<game.players.length&&list.length;i++){
if(list.contains(game.players[i].group)){
list.remove(game.players[i].group);
num++;
}
}
player.draw(num-player.num('h'));
},
ai:{
threaten:1.3
}
},
diyzaiqi:{
trigger:{player:'phaseDrawBegin'},
forced:true,
filter:function(event,player){
return player.hp<player.maxHp;
},
content:function(){
trigger.num+=player.maxHp-player.hp;
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 2.5;
if(target.hp==2) return 1.8;
return 0.5;
},
maixie:true,
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')){
if(target.hp==target.maxHp) return [0,1];
}
if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0];
}
}
}
},
jiaoxia:{
trigger:{target:'useCardToBegin'},
filter:function(event,player){
return event.card&&get.color(event.card)=='red';
},
frequent:true,
content:function(){
player.draw();
},
ai:{
effect:function(card,player,target){
if(get.color(card)=='red') return [1,1];
},
}
},
diykuanggu:{
trigger:{source:'damageEnd'},
forced:true,
content:function(){
if(get.distance(trigger.player,player,'attack')>1){
player.draw(trigger.num);
}
else{
player.recover(trigger.num);
}
}
},
diyduanliang:{
group:['diyduanliang1','diyduanliang2'],
ai:{
threaten:1.2
}
},
diyduanliang1:{
enable:'phaseUse',
usable:1,
discard:false,
filter:function(event,player){
var cards=player.get('he',{color:'black'});
for(var i=0;i<cards.length;i++){
var type=get.type(cards[i]);
if(type=='basic'||type=='equip') return true;
}
return false;
},
prepare:function(cards,player,targets){
player.$throw(cards);
},
position:'he',
filterCard:function(card){
if(get.color(card)!='black') return false;
var type=get.type(card);
return type=='basic'||type=='equip';
},
filterTarget:function(card,player,target){
return lib.filter.filterTarget({name:'bingliang'},player,target);
},
check:function(card){
return 7-ai.get.value(card);
},
content:function(){
target.addJudge('bingliang',cards);
player.draw();
},
ai:{
result:{
target:function(player,target){
return ai.get.effect(target,{name:'bingliang'},player,target);
}
},
order:9,
}
},
diyduanliang2:{
mod:{
targetInRange:function(card,player,target){
if(card.name=='bingliang'){
if(get.distance(player,target)<=2) return true;
}
}
}
},
guihan:{
unique:true,
enable:'chooseToUse',
mark:true,
init:function(player){
player.storage.guihan=false;
},
filter:function(event,player){
if(event.type!='dying') return false;
if(player!=_status.dying) return false;
if(player.storage.guihan) return false;
return true;
},
filterTarget:function(card,player,target){
return target.sex=='male';
},
content:function(){
"step 0"
player.unmarkSkill('guihan');
player.recover();
player.storage.guihan=true;
"step 1"
player.draw(2);
"step 2"
target.recover();
"step 3"
target.draw(2);
// if(lib.config.mode=='identity'){
// player.node.identity.style.backgroundColor=get.translation('weiColor');
// player.group='wei';
// }
},
ai:{
save:true,
result:{
player:4,
target:function(player,target){
if(target.hp==target.maxHp) return 2;
return 4;
}
},
threaten:function(player,target){
if(!target.storage.guihan) return 0.8;
}
},
intro:{
content:'limited'
}
},
luweiyan:{
enable:'chooseToUse',
filterCard:{type:'equip'},
position:'he',
viewAs:{name:'shuiyanqijun'},
prompt:'将一张装备牌当水淹七军使用',
check:function(card){return 8-ai.get.equipValue(card)},
},
yaliang:{
inherit:'wangxi'
},
xiongzi:{
trigger:{player:'phaseDrawBegin'},
forced:true,
content:function(){
trigger.num+=1+Math.floor(player.num('e')/2);
}
},
honglian:{
trigger:{player:'damageEnd'},
check:function(event,player){
return ai.get.attitude(player,event.player)<0;
},
filter:function(event,player){
return event.source&&event.source!=player&&event.source.num('he',{color:'red'})>0;
},
content:function(){
trigger.source.discard(trigger.source.get('he',{color:'red'}));
},
ai:{
expose:0.1,
result:{
threaten:0.8,
target:function(card,player,target){
if(get.tag(card,'damage')&&ai.get.attitude(target,player)<0){
return [1,0,0,-player.num('he',{color:'red'})];
}
}
}
}
},
diyguhuo:{
trigger:{player:'phaseBegin'},
forced:true,
filter:function(event,player){
return player.num('hej')>0;
},
content:function(){
"step 0"
player.draw(2);
"step 1"
player.chooseToDiscard('hej',2,true);
},
ai:{
effect:{
target:function(card){
if(get.type(card)=='delay') return [0,1];
}
}
}
},
diychanyuan:{
trigger:{player:'dieBegin'},
forced:true,
filter:function(event){
return event.source!=undefined;
},
content:function(){
trigger.source.addSkill('benghuai');
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 0.2;
},
result:{
target:function(card,player,target,current){
if(target.hp<=1&&get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,-5];
return [1,0,0,-10];
}
}
}
}
},
zonghuo:{
trigger:{source:'damageBefore'},
direct:true,
priority:10,
filter:function(event){
return event.nature!='fire';
},
content:function(){
"step 0"
player.chooseToDiscard('是否发动【纵火】?').ai=function(card){
var att=ai.get.attitude(player,trigger.player);
if(trigger.player.hasSkillTag('nofire')){
if(att>0) return 8-ai.get.value(card);
return -1;
}
if(att<0){
return 7-ai.get.value(card);
}
return -1;
}
"step 1"
if(result.bool){
player.logSkill('zonghuo',trigger.player,'fire');
trigger.nature='fire';
}
}
},
shaoying:{
trigger:{source:'damageAfter'},
direct:true,
filter:function(event){
return event.nature=='fire';
},
content:function(){
"step 0"
player.chooseTarget('是否发动【烧营】?',function(card,player,target){
return get.distance(trigger.player,target)<=1&&trigger.player!=target;
}).ai=function(target){
return ai.get.damageEffect(target,player,player,'fire');
}
"step 1"
if(result.bool){
var card=get.cards()[0];
ui.discardPile.appendChild(card);
player.showCards(card);
event.bool=get.color(card)=='red';
event.target=result.targets[0];
player.logSkill('shaoying',event.target,false);
trigger.player.line(event.target,'fire');
}
else{
event.finish();
}
"step 2"
if(event.bool){
event.target.damage('fire');
}
}
},
tiangong:{
group:['tiangong2'],
trigger:{player:'damageBefore'},
filter:function(event){
if(event.nature=='thunder') return true;
},
forced:true,
content:function(){
trigger.untrigger();
trigger.finish();
},
ai:{
effect:{
target:function(card,player,target,current){
if(card.name=='tiesuo') return 0;
if(get.tag(card,'thunderDamage')) return 0;
}
}
}
},
tiangong2:{
trigger:{source:'damageAfter'},
filter:function(event){
if(event.nature=='thunder') return true;
},
forced:true,
content:function(){
player.draw();
},
},
diyleiji:{
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');
};
"step 1"
if(result.bool){
player.logSkill('diyleiji',result.targets,'thunder');
event.target=result.targets[0];
event.target.judge(function(card){
// var suit=get.suit(card);
// if(suit=='spade') return -4;
// if(suit=='club') return -2;
if(get.color(card)=='black') return -2;
return 0;
});
}
else{
event.finish();
}
"step 2"
if(result.bool==false){
event.target.damage('thunder');
player.recover();
}
},
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 be=target.num('e',{color:'black'});
if(target.num('h','shan')&&be){
return [0,hastarget?target.num('he')/2:0];
}
if(target.num('h','shan')&&target.num('h')>2){
return [0,hastarget?target.num('h')/4:0];
}
if(target.num('h')>3||(be&&target.num('h')>=2)){
return [0,0];
}
if(target.num('h')==0){
return [1.5,0];
}
if(target.num('h')==1&&!be){
return [1.2,0];
}
return [1,Math.min(0.5,(target.num('h')+be)/4)];
}
}
}
}
},
xicai:{
inherit:'jianxiong'
},
diyjianxiong:{
mode:['identity'],
trigger:{global:'dieBefore'},
forced:true,
filter:function(event,player){
return event.player!=game.zhu&&_status.currentPhase==player;
},
content:function(){
trigger.player.identity='fan';
trigger.player.setIdentity('fan');
trigger.player.identityShown=true;
}
},
shuaiyan:{
trigger:{global:'recoverAfter'},
filter:function(event,player){
return event.player!=player&&_status.currentPhase!=player;
},
content:function(){
"step 0"
var att=ai.get.attitude(trigger.player,player);
var bool=0;
if(att<0){
if(trigger.player.num('e')==0&&trigger.player.num('h')>2) bool=1;
else if(trigger.player.num('he')==0) bool=1;
}
else if(att==0&&trigger.player.num('he')==0){
bool=1;
}
trigger.player.chooseControl('draw_card','discard_card').ai=function(){
return bool;
};
"step 1"
if(result.control=='draw_card'){
player.draw();
event.finish();
}
else if(trigger.player.num('he')){
player.discardPlayerCard(trigger.player,true,'he');
}
else{
event.finish();
}
}
},
moshou:{
mod:{
targetEnabled:function(card,player,target,now){
if(card.name=='bingliang'||card.name=='lebu') return false;
}
},
},
siji:{
trigger:{player:'phaseDiscardEnd'},
frequent:true,
filter:function(event,player){
if(event.cards){
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].name=='sha') return true;
}
}
return false;
},
content:function(){
var num=0;
for(var i=0;i<trigger.cards.length;i++){
if(trigger.cards[i].name=='sha') num++;
}
player.draw(2*num);
}
},
ciqiu:{
unique:true,
trigger:{source:'damageBegin'},
forced:true,
filter:function(event,player){
return event.card&&event.card.name=='sha'&&event.player.hp==event.player.maxHp;
},
content:function(){
trigger.num++;
player.addTempSkill('ciqiu3','damageAfter');
},
group:['ciqiu2']
},
ciqiu2:{
trigger:{source:'damage'},
filter:function(event,player){
return player.skills.contains('ciqiu3')&&event.player.hp<=0;
},
forced:true,
content:function(){
trigger.player.die(trigger);
player.removeSkill('ciqiu');
}
},
ciqiu3:{},
juedao:{
enable:'phaseUse',
filter:function(event,player){
return player.isLinked()==false;
},
filterCard:true,
check:function(card){
return 6-ai.get.value(card);
},
content:function(){
if(player.isLinked()==false) player.link();
},
ai:{
order:2,
result:{
player:function(player){
if(player.isLinked()) return 0;
return 1;
},
},
effect:{
target:function(card,player,target){
if(card.name=='tiesuo'){
if(target.isLinked()){
return [0,-0.5];
}
else{
return [0,0.5];
}
}
}
}
},
mod:{
globalFrom:function(from,to,distance){
if(from.isLinked()) return distance+1;
},
globalTo:function(from,to,distance){
if(to.isLinked()) return distance+1;
},
}
},
geju:{
trigger:{player:'phaseBegin'},
frequent:true,
filter:function(event,player){
var list=[];
for(var i=0;i<game.players.length;i++){
if(player!=game.players[i]) list.add(game.players[i].group);
}
list.remove('unknown');
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player){
if(lib.filter.targetInRange({name:'sha'},game.players[i],player)){
list.remove(game.players[i].group);
}
}
}
return list.length>0;
},
content:function(){
var list=[];
for(var i=0;i<game.players.length;i++){
if(player!=game.players[i]) list.add(game.players[i].group);
}
list.remove('unknown');
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player){
if(lib.filter.targetInRange({name:'sha'},game.players[i],player)){
list.remove(game.players[i].group);
}
}
}
if(list.length>0) player.draw(list.length);
}
},
diyqiangxi:{
enable:'phaseUse',
usable:1,
filterCard:function(card){
return get.subtype(card)=='equip1';
},
selectCard:[0,1],
filterTarget:function(card,player,target){
if(player==target) return false;
return get.distance(player,target,'attack')<=1;
},
content:function(){
"step 0"
if(cards.length==0){
player.loseHp();
}
"step 1"
target.damage();
"step 2"
if(target.isAlive()&&target.num('he')){
player.discardPlayerCard(target);
}
},
check:function(card){
return 10-ai.get.value(card);
},
position:'he',
ai:{
order:8,
result:{
player:function(player,target){
if(ui.selected.cards.length) return 0;
if(player.hp>=target.hp) return -0.9;
if(player.hp<=2) return -10;
return -2;
},
target:function(player,target){
if(player.hp<=1) return 0;
return ai.get.damageEffect(target,player);
}
}
},
threaten:1.3
},
},
translate:{
diy_caocao:'曹操',
diy_menghuo:'孟获',
diy_huangzhong:'黄忠',
diy_xuhuang:'徐晃',
diy_zhangjiao:'张角',
diy_dianwei:'典韦',
diy_weiyan:'魏延',
xicai:'惜才',
diyjianxiong:'奸雄',
diy_feishi:'费诗',
shuaiyan:'率言',
moshou:'墨守',
diy_hanlong:'韩龙',
diy_luxun:'陆伯言',
diy_yuji:'于吉',
diy_zhouyu:'神周瑜',
diy_zhouyu:'周公瑾',
diy_lukang:'陆抗',
diy_caiwenji:'蔡昭姬',
diy_zhenji:'甄姬',
siji:'伺机',
ciqiu:'刺酋',
ciqiu2:'刺酋',
ciqiu3:'刺酋',
diy_liuyan:'刘焉',
juedao:'绝道',
geju:'割据',
diyleiji:'雷击',
tiangong:'天公',
tiangong2:'天公',
shaoying:'烧营',
zonghuo:'纵火',
diychanyuan:'缠怨',
diyguhuo:'蛊惑',
jieyan:'劫焰',
honglian:'红莲',
xiongzi:'雄姿',
yaliang:'雅量',
yaliang_info:'每当你对其他角色造成1点伤害后或受到其他角色造成的1点伤害后你可与该角色各摸一张牌。',
luweiyan:'围堰',
guihan:'归汉',
diyduanliang:'断粮',
diyduanliang1:'断粮',
diyduanliang2:'断粮',
diyqiangxi:'强袭',
diykuanggu:'狂骨',
jiaoxia:'皎霞',
diyzaiqi:'再起',
batu:'霸图',
zaiqix:'再起',
zaiqix_info:'摸牌阶段若你已受伤你可以放弃摸牌并展示牌堆顶的X+1张牌X为你已损失的体力值其中每有一张♥牌你回复1点体力然后弃掉这些♥牌将其余的牌收入手牌。',
batu_info:'回合结束阶段你可以将手牌数补至XX为现存的势力数',
diyzaiqi_info:'锁定技你摸牌阶段额外摸X张牌X为你已损失的体力值',
jiaoxia_info:'每当你成为红色牌的目标,你可以摸一张牌',
diykuanggu_info:'锁定技,每当你造成一点伤害,你在其攻击范围内,你回复一点体力,否则你摸一张牌',
diyqiangxi_info:'出牌阶段,你可以自减一点体力或弃一张武器牌,然后你对你攻击范围内的一名角色造成一点伤害并弃置其一张牌,每回合限一次。',
diyduanliang_info:'出牌阶段限一次你可以将一张黑色的基本牌或装备牌当兵粮寸断对一名角色使用然后摸一张牌。你的兵粮寸断可以指定距离2以内的角色作为目标',
guihan_info:'限定技,当你进入濒死状态时,可以指定一名男性角色与其各回复一点体力并摸两张牌',
luweiyan_info:'你可以将一张装备牌当水淹七军使用',
xiongzi_info:'锁定技你于摸牌阶段额外摸X+1张牌X为你装备区牌数的一半向下取整',
honglian_info:'每当你受到来自其他角色的伤害,可以弃置伤害来源的所有红色牌',
jieyan_info:'出牌阶段限一次,你可以弃置一张红色手牌令场上所有角色受到一点火焰伤害',
diyguhuo_info:'锁定技,回合开始阶段,你摸两张牌,然后弃置区域内的两张牌',
diychanyuan_info:'锁定技,杀死你的角色获得技能【崩坏】',
zonghuo_info:'你可弃置一张牌将你即将造成的伤害变为火焰伤害',
shaoying_info:'每当你造成一次火焰伤害可指定距离受伤害角色1以内的另一名角色并展示牌堆顶的一张牌若此牌为红色该角色受到一点火焰伤害',
tiangong_info:'锁定技,你防止即将受到的雷电伤害,每当你造成一次雷电伤害,你摸一张牌',
diyleiji_info:'每当你使用或打出一张【闪】,可令任意一名角色进行一次判定,若结果为黑色,其受到一点雷电伤害,然后你摸回复一点体力',
juedao_info:'出牌阶段,你可以弃置一张手牌,横置你的武将牌;锁定技,若你处于连环状态,你与其他角色的距离、其他角色与你的距离各+1。',
geju_info:'准备阶段开始时你可以摸X张牌X为攻击范围内不含有你的势力数。',
siji_info:'弃牌阶段结束后你可以摸2X张牌X为你于此阶段内弃置的【杀】的数量。',
ciqiu_info:'锁定技,每当你使用【杀】对目标角色造成伤害时,若该角色未受伤,你令此伤害+1锁定技每当未受伤的角色因受到你使用【杀】造成的伤害而扣减体力后若该角色的体力值为0你令其死亡然后你失去“刺酋”。 ',
shuaiyan_info:'每当其他角色于你的回合外回复体力后你可以令该角色选择一项1.令你摸一张牌2.令你弃置其一张牌。 ',
moshou_info:'锁定技,你不能成为乐不思蜀和兵粮寸断的目标。',
xicai_info:'你可以立即获得对你造成伤害的牌',
diyjianxiong_info:'锁定技,在身份局中,在你回合内死亡的角色均视为反贼,国战中,在你回合内死亡的角色若与你势力相同则随机改为另一个势力',
},
}

1127
character/extra.js Normal file

File diff suppressed because it is too large Load Diff

499
character/fire.js Normal file
View File

@ -0,0 +1,499 @@
character.fire={
character:{
zhugeliangwolong:['male','shu',3,['huoji','bazhen','kanpo'],['fullskin']],
pangtong:['male','shu',3,['lianhuan','niepan'],['fullskin']],
xunyu:['male','wei',3,['quhu','jieming'],['fullskin']],
dianwei:['male','wei',4,['qiangxi'],['fullskin']],
taishici:['male','wu',4,['tianyi'],['fullskin']],
yanwen:['male','qun',4,['shuangxiong'],['fullskin']],
yuanshao:['male','qun',4,['luanji','xueyi'],['zhu','fullskin']],
pangde:['male','qun',4,['mashu','mengjin'],['fullskin']],
},
skill:{
huoji:{
enable:'chooseToUse',
filterCard:function(card){
return get.color(card)=='red';
},
viewAs:{name:'huogong',nature:'fire'},
prompt:'将一张红色牌当火攻使用',
check:function(card){
var player=_status.currentPhase;
if(player.num('h')>player.hp){
return 6-ai.get.value(card);
}
return 4-ai.get.value(card)
}
},
bazhen:{
inherit:'bagua_skill',
filter:function(event,player){
if(!event.filterCard({name:'shan'})) return false;
if(event.parent.player.num('s','unequip')) return false;
if(player.get('e','2')) return false;
return true;
},
ai:{
effect:{
target:function(card,player,target){
if(player==target&&get.subtype(card)=='equip2'){
if(ai.get.equipValue(card)<=8) return 0;
}
if(target.num('e','2')) return;
if(player.skills.contains('unequip')) return;
if(get.tag(card,'respondShan')) return [0.5,0];
}
}
}
},
kanpo:{
enable:'chooseToUse',
filterCard:function(card){
return get.color(card)=='black';
},
viewAsFilter:function(player){
return player.num('h',{color:'black'})>0;
},
viewAs:{name:'wuxie'},
prompt:'将一张黑色牌当无懈可击使用',
check:function(card){return 8-ai.get.value(card)},
threaten:1.2
},
lianhuan:{
group:['lianhuan1','lianhuan2']
},
lianhuan1:{
enable:'phaseUse',
filter:function(event,player){
return player.num('h',{suit:'club'})>0;
},
filterCard:function(card){
return get.suit(card)=='club';
},
viewAs:{name:'tiesuo'},
prompt:'将一张梅花牌当铁锁连环使用',
check:function(card){return 4-ai.get.value(card)}
},
lianhuan2:{
enable:'phaseUse',
filter:function(event,player){
return player.num('h',{suit:'club'})>0;
},
filterCard:function(card){
return get.suit(card)=='club';
},
check:function(card){
return 5-ai.get.useful(card);
},
content:function(){
player.draw();
},
discard:false,
prepare:function(cards,player){
player.$throw(cards);
},
ai:{
basic:{
order:1
},
result:{
player:1,
},
}
},
niepan:{
unique:true,
enable:'chooseToUse',
mark:true,
init:function(player){
player.storage.niepan=false;
},
filter:function(event,player){
if(event.type!='dying') return false;
if(player!=_status.dying) return false;
if(player.storage.niepan) return false;
},
content:function(){
player.hp=Math.min(3,player.maxHp);
player.discard(player.get('hej'));
player.draw(3);
player.unmarkSkill('niepan');
if(player.classList.contains('linked')) player.link();
if(player.classList.contains('turnedover')) player.turnOver();
player.storage.niepan=true;
},
ai:{
save:true,
result:{
player:10
},
threaten:function(player,target){
if(!target.storage.niepan) return 0.6;
}
},
intro:{
content:'limited'
}
},
quhu:{
enable:'phaseUse',
usable:1,
filter:function(event,player){
if(player.num('h')==0) return false;
for(var i=0;i<game.players.length;i++){
if(game.players[i].hp>player.hp&&game.players[i].num('h')) return true;
}
return false;
},
filterTarget:function(card,player,target){
return target.hp>player.hp&&target.num('h')>0;
},
content:function(){
"step 0"
player.chooseToCompare(target);
"step 1"
if(result.bool){
player.chooseTarget(function(card,player,target1){
return target1!=target&&get.distance(target,target1,'attack')<=1;
},true).ai=function(target1){
return ai.get.damageEffect(target1,target,player);
}
}
else{
player.damage(target);
event.finish();
}
"step 2"
if(result.bool){
result.targets[0].damage(target);
}
},
ai:{
order:0.5,
result:{
target:function(player,target){
var att=ai.get.attitude(player,target);
var oc=(target.num('h')==1);
if(att>0&&oc) return 0;
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=target&&game.players[i]!=player&&
get.distance(target,game.players[i],'attack')<=1){
if(ai.get.damageEffect(game.players[i],target,player)>0){
return att>0?att/2:att-(oc?5:0);
}
}
}
return 0;
},
player:function(player){
var mn=1;
var hs=player.get('h');
for(var i=0;i<hs.length;i++){
mn=Math.max(mn,hs[i].number);
}
if(mn<=11&&player.hp<2) return -20;
var max=player.maxHp-hs.length;
for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(player,game.players[i])>2){
max=Math.max(Math.min(5,game.players[i].hp)-game.players[i].num('h'),max);
}
}
switch(max){
case 0:return mn==13?0:-20;
case 1:return mn>=12?0:-15;
case 2:return 0;
case 3:return 1;
default:return max;
}
}
},
expose:0.2
}
},
jieming:{
trigger:{player:'damageEnd'},
direct:true,
filter:function(event,player){
return event.num>0
},
content:function(){
"step 0"
player.chooseTarget([1,trigger.num],function(card,player,target){
return target.num('h')<Math.min(target.maxHp,5);
}).ai=function(target){
var att=ai.get.attitude(_status.event.player,target);
if(att>2){
return Math.min(5,target.maxHp)-target.num('h');
}
return att/3;
}
"step 1"
if(result.bool){
player.logSkill('jieming',result.targets);
for(var i=0;i<result.targets.length;i++){
result.targets[i].draw(Math.min(5,result.targets[i].maxHp)-result.targets[i].num('h'));
}
}
},
ai:{
maixie:true,
effect:{
target:function(card,player,target,current){
if(get.tag(card,'damage')&&target.hp>1){
if(player.skills.contains('jueqing')) return [1,-2];
var max=0;
for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(target,game.players[i])>0){
max=Math.max(Math.min(5,game.players[i].hp)-game.players[i].num('h'),max);
}
}
switch(max){
case 0:return 2;
case 1:return 1.5;
case 2:return [1,2];
default:return [0,max];
}
}
if((card.name=='tao'||card.name=='caoyao')&&
target.hp>1&&target.num('h')<=target.hp) return [0,0];
}
},
}
},
qiangxi:{
enable:'phaseUse',
usable:1,
filterCard:function(card){
return get.subtype(card)=='equip1';
},
selectCard:[0,1],
filterTarget:function(card,player,target){
if(player==target) return false;
return get.distance(player,target,'attack')<=1;
},
content:function(){
"step 0"
if(cards.length==0){
player.loseHp();
}
"step 1"
target.damage();
},
check:function(card){
return 10-ai.get.value(card);
},
position:'he',
ai:{
order:8,
result:{
player:function(player,target){
if(ui.selected.cards.length) return 0;
if(player.hp>=target.hp) return -0.9;
if(player.hp<=2) return -10;
return -2;
},
target:function(player,target){
return ai.get.damageEffect(target,player);
}
}
},
threaten:1.3
},
tianyi:{
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return player!=target&&target.num('h')>0;
},
filter:function(event,player){
return player.num('h')>0;
},
content:function(){
"step 0"
player.chooseToCompare(target);
"step 1"
if(result.bool){
player.addTempSkill('tianyi2','phaseAfter');
}
else{
player.addTempSkill('tianyi3','phaseAfter');
}
},
ai:{
order:function(name,player){
var cards=player.get('h');
if(player.num('h','sha')==0){
return 1;
}
for(var i=0;i<cards.length;i++){
if(cards[i].name!='sha'&&cards[i].number>11&&ai.get.value(cards[i])<7){
return 9;
}
}
return lib.card.sha.ai.order-1;
},
result:{
player:function(player){
if(player.num('h','sha')>0) return 0.6;
var num=player.num('h');
if(num>player.hp) return 0;
if(num==1) return -2;
if(num==2) return -1;
return -0.7;
},
target:function(player,target){
var num=target.num('h');
if(num==1) return -1;
if(num==2) return -0.7;
return -0.5
},
},
threaten:1.3
}
},
tianyi2:{
mod:{
targetInRange:function(card,player,target,now){
if(card.name=='sha') return true;
},
selectTarget:function(card,player,range){
if(card.name=='sha'&&range[1]!=-1) range[1]++;
},
cardUsable:function(card,player,num){
if(card.name=='sha') return num+1;
}
},
},
tianyi3:{
mod:{
cardEnabled:function(card){if(card.name=='sha') return false}
}
},
shuangxiong:{
trigger:{player:'phaseDrawBefore'},
check:function(event,player){
if(player.num('h')>player.hp) return true;
if(player.num('h')>3) return true;
return false;
},
content:function(){
"step 0"
player.judge();
"step 1"
player.gain(result.card);
player.addTempSkill('shuangxiong2','phaseAfter');
player.storage.shuangxiong=get.color(result.card);
trigger.untrigger();
trigger.finish();
}
},
shuangxiong2:{
enable:'phaseUse',
viewAs:{name:'juedou'},
filterCard:function(card,player){
return get.color(card)!=player.storage.shuangxiong;
},
check:function(card){
return 6-ai.get.value(card);
},
ai:{
basic:{
order:10
}
}
},
luanji:{
enable:'phaseUse',
viewAs:{name:'wanjian'},
filterCard:function(card,player){
if(ui.selected.cards.length){
return get.suit(card)==get.suit(ui.selected.cards[0]);
}
var cards=player.get('h');
for(var i=0;i<cards.length;i++){
if(card!=cards[i]){
if(get.suit(card)==get.suit(cards[i])) return true;
}
}
return false;
},
selectCard:2,
check:function(card){
return 6-ai.get.value(card);
},
ai:{
basic:{
order:10
}
}
},
xueyi:{
mod:{
maxHandcard:function(player,num){
if(player.identity=='zhu'){
for(var i=0;i<game.players.length;i++){
if(player!=game.players[i]&&game.players[i].group=='qun') num+=2;
}
}
return num;
}
}
},
mengjin:{
trigger:{player:'shaMiss'},
popup:false,
priority:-1,
filter:function(event){
return event.target.num('he')>0;
},
check:function(event,player){
return ai.get.attitude(player,event.target)<0;
},
content:function(){
player.discardPlayerCard('he',trigger.target,true);
}
},
},
translate:{
zhugeliangwolong:'卧龙',
pangtong:'庞统',
xunyu:'荀彧',
dianwei:'典韦',
taishici:'太史慈',
yanwen:'颜良文丑',
yuanshao:'袁绍',
pangde:'庞德',
huoji:'火计',
bazhen:'八阵',
kanpo:'看破',
lianhuan:'连环',
lianhuan1:'连环',
lianhuan2:'重铸♣︎',
niepan:'涅槃',
quhu:'驱虎',
jieming:'节命',
qiangxi:'强袭',
tianyi:'天义',
shuangxiong:'双雄',
shuangxiong2:'双雄',
luanji:'乱击',
xueyi:'血裔',
mengjin:'猛进',
huoji_info:'出牌阶段,你可以将你的任意一张♥或♦手牌当【火攻】使用。',
bazhen_info:'当你没装备防具时,始终视为你装备着【八卦阵】。',
kanpo_info:'你可以将你的任意一张♠或♣手牌当【无懈可击】使用。',
lianhuan_info:'出牌阶段,你可以将你任意一张梅花手牌当【铁索连环】使用或重铸。',
niepan_info:'当你处于濒死状态时你可以丢弃你所有的牌和你判定区里的牌并重置你的武将牌然后摸三张牌且体力回复至3点。',
quhu_info:'出牌阶段你可以与一名体力比你多的角色拼电若你赢则该角色对其攻击范围内另一名由你指定的角色造成1点伤害。若你没赢他/她对你造成一点伤害。每回合限用一次。',
jieming_info:'你每受到1点伤害可令任意一名角色将手牌补至其体力上限的张数(不能超过五张)。',
qiangxi_info:'出牌阶段,你可以自减一点体力或弃一张武器牌,然后你对你攻击范围内的一名角色造成一点伤害,每回合限一次。',
tianyi_info:'出牌阶段,你可以和一名角色拼点,若你赢,你获得以下技能直到回合结束:攻击范围无限;可额外使用一张【杀】;使用【杀】时可额外指定一个目标,若你没赢,你不能使用【杀】直到回合结束。每回合限一次。',
shuangxiong_info:'摸牌阶段,你可选择放弃摸牌并进行一次判定:你获得此判定牌,且于此回合的出牌阶段,你可以将任意一张与此判定牌不同颜色的手牌当【决斗】使用。',
luanji_info:'出牌阶段,你可以将任意两张相同花色的手牌当【万箭齐发】使用。',
xueyi_info:'场上每有一名其他群雄角色存活,你的手牌上限便+2。',
mengjin_info:'当你使用的【杀】被【闪】抵消时,你可以弃掉对方的一张牌。',
},
help:{
}
}

1048
character/gujian.js Normal file

File diff suppressed because it is too large Load Diff

16
character/guozhan.js Normal file
View File

@ -0,0 +1,16 @@
character.guozhan={
character:{
ganfuren:['female','shu',3,['shushen','shenzhi'],['fullskin']],
mifuren:['female','shu',3,['guixiu','cunsi'],['fullskin']],
mateng:['male','qun',4,['xiongyi','mashu'],['fullskin']],
tianfeng:['male','qun',3,['sijian','suishi'],['fullskin']],
yuejin:['male','wei',4,['xiaoguo'],['fullskin']],
chendong:['male','wu',4,['duanxie','fenming'],['fullskin']],
sp_dongzhuo:['male','qun',5,['hengzheng'],['fullskin']],
jiangfei:['male','shu',3,['shengxi','shoucheng'],['fullskin']],
jiangqing:['male','wu',4,['shangyi'],['fullskin']],
hetaihou:['female','qun',3,['zhendu','qiluan'],['fullskin']],
kongrong:['male','qun',3,['lirang','mingshi'],['fullskin']],
dingfeng:['male','wu',4,['fenxun'],['fullskin']],
},
};

605
character/jiange.js Normal file
View File

@ -0,0 +1,605 @@
character.jiange={
character:{
jg_pangtong:['male','shu',3,['qiwu','tianyu'],['fullskin']],
jg_huangyueying:['female','shu',3,['zhinang','jingmiao'],['fullskin']],
jg_zhugeliang:['male','shu',3,['biantian','bazhen'],['fullskin']],
jg_liubei:['male','shu',4,['jizhen','lingfeng'],['fullskin']],
jg_xiahouyuan:['male','wei',4,['shensu','juechen'],['fullskin']],
jg_caozhen:['male','wei',4,['chiying','jingfan'],['fullskin']],
jg_zhanghe:['male','wei',4,['huodi','jueji'],['fullskin']],
jg_simayi:['male','wei',6,['xuanlei','sfanshi','konghun'],['fullskin']],
},
skill:{
sfanshi:{
init:function(player){
player.maxHp=Math.floor(game.players.length/2)+2;
player.hp=player.maxHp;
player.update();
},
trigger:{global:'dieAfter'},
forced:true,
content:function(){
player.maxHp=Math.floor(game.players.length/2)+2;
player.hp=Math.min(player.hp,player.maxHp);
player.update();
},
group:'sfanshi2',
ai:{
mingzhi:false
}
},
sfanshi2:{
trigger:{player:'phaseEnd'},
forced:true,
check:function(){
return false;
},
content:function(){
player.loseHp();
}
},
konghun:{
trigger:{player:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return player.hp<=Math.floor(game.players.length/3);
},
content:function(){
"step 0"
player.chooseTarget('是否发动【控魂】?',function(card,player,target){
return player!=target;
},[1,Math.floor(game.players.length/2)]).ai=function(target){
return ai.get.damageEffect(target,player,player,'thunder')+1;
}
"step 1"
if(result.bool){
event.targets=result.targets.slice(0);
player.logSkill('konghun',event.targets,'thunder');
event.targets.sort(lib.sort.seat);
event.num=0;
}
else{
event.finish();
}
"step 2"
if(event.num<event.targets.length){
event.targets[event.num].damage('thunder');
event.num++;
event.redo();
}
"step 3"
player.recover(event.targets.length);
}
},
xuanlei:{
trigger:{player:'phaseBegin'},
forced:true,
filter:function(event,player){
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&game.players[i].num('j')) return true;
}
return false;
},
content:function(){
"step 0"
event.targets=[];
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&game.players[i].num('j')){
event.targets.push(game.players[i]);
}
}
event.targets.sort(lib.sort.seat);
"step 1"
if(event.targets.length){
event.targets.shift().damage('thunder');
}
}
},
jueji:{
trigger:{global:'phaseDrawBegin'},
direct:true,
filter:function(event,player){
return event.num>0&&event.player!=player&&event.player.hp<event.player.maxHp&&player.num('he');
},
content:function(){
"step 0"
player.chooseToDiscard('he','是否弃置一张牌令'+get.translation(trigger.player)+'的摸牌数-1').ai=function(card){
if(ai.get.attitude(player,trigger.player)<0){
return 6-ai.get.value(card);
}
return 0;
}
"step 1"
if(result.bool){
player.logSkill('jueji',trigger.player);
trigger.num--;
}
},
ai:{
expose:0.2,
threaten:1.8
}
},
huodi:{
trigger:{player:'phaseEnd'},
direct:true,
filter:function(event,player){
return !player.skills.contains('huodi3');
},
content:function(){
"step 0"
player.chooseTarget('是否发动【惑敌】?',function(card,player,target){
return target.num('he')&&player!=target;
}).ai=function(target){
return -ai.get.attitude(player,target);
}
"step 1"
if(result.bool){
player.logSkill('huodi',result.targets);
player.discardPlayerCard(result.targets[0],true,'he');
}
},
ai:{
expose:0.2,
threaten:1.2
},
group:'huodi2'
},
huodi2:{
trigger:{player:'useCard'},
filter:function(event,player){
return _status.currentPhase==player&&event.targets&&(event.targets.length>1||event.targets[0]!=player);
},
silent:true,
forced:true,
popup:false,
content:function(){
player.addTempSkill('huodi3','phaseAfter');
}
},
huodi3:{},
jingfan:{
trigger:{player:'phaseUseEnd'},
unique:true,
direct:true,
content:function(){
"step 0"
var num=get.cardCount(true,player)-player.num('h');
event.num=num;
if(num>0){
player.draw(num);
}
"step 1"
if(event.num>0){
player.chooseTarget('选择至多'+get.cnNumber(event.num)+'名角色令其与其他角色的距离1',[1,event.num],function(card,player,target){
return player!=target;
}).ai=function(target){
return ai.get.attitude(player,target);
}
}
else{
event.finish();
}
"step 2"
if(result.bool&&result.targets){
player.logSkill('jingfan',result.targets);
for(var i=0;i<result.targets.length;i++){
result.targets[i].addSkill('jingfan2');
result.targets[i].popup('jingfan');
}
}
},
mod:{
globalFrom:function(from,to,distance){
if(_status.currentPhase==from){
return distance-get.cardCount(true,from);
}
}
},
ai:{
expose:0.1
}
},
jingfan2:{
mod:{
globalFrom:function(from,to,distance){
return distance-1;
}
},
trigger:{player:'phaseEnd'},
forced:true,
content:function(){
player.removeSkill('jingfan2');
}
},
chiying:{
trigger:{global:'damageBegin'},
check:function(event,player){
return ai.get.attitude(player,event.player)>0;
},
filter:function(event,player){
if(event.num<=1) return false;
return true;
},
priority:-11,
content:function(){
trigger.num=1;
if(trigger.source){
trigger.source.addTempSkill('chiying2','damageAfter');
}
}
},
chiying2:{
trigger:{source:'damageEnd'},
forced:true,
popup:false,
content:function(){
player.draw();
}
},
juechen:{
trigger:{player:'useCard'},
filter:function(event,player){
return event.card.name=='sha';
},
direct:true,
content:function(){
"step 0"
game.delay(0.5);
player.chooseTarget('是否发动【绝尘】?',function(card,player,target){
return player!=target&&!trigger.targets.contains(target)&&target.num('he')>0;
}).ai=function(target){
return -ai.get.attitude(player,target);
}
"step 1"
if(result.bool){
player.logSkill('juechen',result.targets);
player.discardPlayerCard(true,result.targets[0],'he');
}
}
},
lingfeng:{
trigger:{player:'phaseDrawBefore'},
check:function(event,player){
for(i=0;i<game.players.length;i++){
if(player!=game.players[i]){
if(ai.get.attitude(player,game.players[i])<0) return true;
}
}
return false;
},
content:function(){
"step 0"
trigger.untrigger();
trigger.finish();
event.cards=get.cards(2);
player.showCards(event.cards);
"step 1"
if(get.color(event.cards[0])!=get.color(event.cards[1])){
player.chooseTarget('是否弃置一名角色一张牌?',function(card,player,target){
return player!=target&&target.num('he')>0;
}).ai=function(target){
return -ai.get.attitude(player,target);
}
}
"step 2"
if(result.bool&&result.targets&&result.targets.length){
player.discardPlayerCard(result.targets[0],'he',true);
}
"step 3"
player.gain(event.cards);
player.$draw(event.cards);
game.delay();
},
ai:{
threaten:1.1
}
},
biantian4:{
trigger:{player:'dieBegin'},
forced:true,
popup:false,
content:function(){
for(var i=0;i<game.players.length;i++){
if(game.players[i].skills.contains('biantian3')){
game.players[i].removeSkill('biantian3');
game.players[i].popup('biantian3');
}
}
}
},
biantian:{
trigger:{player:'phaseBegin'},
forced:true,
unique:true,
group:'biantian4',
content:function(){
"step 0"
player.removeSkill('biantian2');
for(var i=0;i<game.players.length;i++){
if(game.players[i].skills.contains('biantian3')){
game.players[i].removeSkill('biantian3');
game.players[i].popup('biantian3');
}
}
player.judge(function(card){
if(get.color(card)=='red') return 1;
if(get.suit(card)=='spade') return 3;
return -1;
});
"step 1"
if(result.color=='red'){
player.chooseTarget('选择至多三名角色获得狂风标记',[1,3],function(card,player,target){
return player!=target;
}).ai=function(target){
if(target.hasSkillTag('nofire')) return 0;
return -ai.get.attitude(player,target);
};
}
else{
event.finish();
if(result.suit=='spade'){
player.addSkill('biantian2');
}
}
"step 2"
if(result.bool&&result.targets){
for(var i=0;i<result.targets.length;i++){
result.targets[i].addSkill('biantian3');
result.targets[i].popup('kuangfeng');
}
player.logSkill('kuangfeng',result.targets,'fire');
}
}
},
biantian2:{
trigger:{player:'damageBefore'},
filter:function(event){
if(event.nature!='thunder') return true;
return false;
},
forced:true,
content:function(){
trigger.untrigger();
trigger.finish();
},
ai:{
nofire:true,
nodamage:true,
effect:{
target:function(card,player,target,current){
if(get.tag(card,'damage')&&!get.tag(card,'thunderDamage')) return [0,0];
}
}
}
},
biantian3:{
trigger:{player:'damageBegin'},
filter:function(event){
if(event.nature=='fire') return true;
return false;
},
forced:true,
content:function(){
trigger.num++;
},
ai:{
effect:{
target:function(card,player,target,current){
if(get.tag(card,'fireDamage')) return 1.5;
}
}
}
},
jingmiao:{
trigger:{global:'useCardAfter'},
direct:true,
filter:function(event,player){
return event.player!=player&&event.card.name=='wuxie'&&event.player.num('he')>0;
},
content:function(){
"step 0"
player.choosePlayerCard(trigger.player,'是否发动【精妙】弃置'+
get.translation(trigger.player)+'一张牌?','he');
"step 1"
if(result.bool){
player.logSkill('jingmiao',trigger.player);
trigger.player.discard(result.links);
}
},
ai:{
expose:0.2
}
},
zhinang:{
trigger:{player:'phaseBegin'},
frequent:true,
content:function(){
"step 0"
event.cards=get.cards(3);
event.cards2=[];
for(var i=0;i<event.cards.length;i++){
var type=get.type(event.cards[i]);
if(type=='trick'||type=='equip'){
event.cards2.push(event.cards[i]);
}
}
if(event.cards2.length==0){
player.showCards(event.cards);
event.target=player;
}
else{
var dialog=ui.create.dialog('将三张牌中的锦囊牌或装备牌交给一名角色');
dialog.add(event.cards);
for(var i=0;i<dialog.buttons.length;i++){
if(event.cards2.contains(dialog.buttons[i].link)){
dialog.buttons[i].style.opacity=1;
}
else{
dialog.buttons[i].style.opacity=0.5;
}
}
var next=player.chooseTarget(true,dialog);
next.ai=function(target){
if(player.num('j','lebu')){
if(target==player) return 0;
}
var att=ai.get.attitude(player,target);
if(player.num('h')>player.hp){
if(target==player) return Math.max(1,att-2);
}
if(target==player) return att+5;
return att;
}
if(!event.isMine()){
dialog.style.display='none';
}
}
"step 1"
if(result&&result.targets&&result.targets.length){
event.target=result.targets[0];
}
if(event.cards2.length){
event.target.gain(event.cards2,'gain');
}
},
ai:{
threaten:1.3
}
},
qiwu:{
trigger:{player:'useCard'},
forced:true,
filter:function(event,player){
return get.suit(event.card)=='club'&&player.hp<player.maxHp;
},
content:function(){
player.recover();
}
},
tianyu:{
trigger:{player:'phaseEnd'},
direct:true,
filter:function(event,player){
for(var i=0;i<game.players.length;i++){
if(!game.players[i].isLinked()&&player!=game.players[i]){
return true;
}
}
},
content:function(){
"step 0"
var num=0;
for(var i=0;i<game.players.length;i++){
if(!game.players[i].isLinked()&&player!=game.players[i]){
num++;
}
}
player.chooseTarget('是否发动【天狱】?',[1,num],function(card,player,target){
return !target.isLinked()&&player!=target;
}).ai=function(target){
return -ai.get.attitude(player,target);
}
"step 1"
if(result.bool){
player.logSkill('tianyu',result.targets);
event.targets=result.targets;
event.num=0;
}
else{
event.finish();
}
"step 2"
if(event.num<event.targets.length){
event.targets[event.num].link();
event.num++;
event.redo();
}
},
ai:{
expose:0.3
}
},
jizhen:{
trigger:{player:'phaseEnd'},
direct:true,
filter:function(event,player){
for(var i=0;i<game.players.length;i++){
if(game.players[i].hp<game.players[i].maxHp&&player!=game.players[i]){
return true;
}
}
},
content:function(){
"step 0"
var num=0;
for(var i=0;i<game.players.length;i++){
if(!game.players[i].isLinked()&&player!=game.players[i]){
num++;
}
}
player.chooseTarget('是否发动【激阵】?',[1,2],function(card,player,target){
return target.hp<target.maxHp&&player!=target;
}).ai=function(target){
return ai.get.attitude(player,target);
}
"step 1"
if(result.bool){
player.logSkill('jizhen',result.targets);
game.asyncDraw(result.targets);
}
},
ai:{
expose:0.3,
threaten:1.3
}
},
},
translate:{
jg_pangtong:'浴火士元',
jg_huangyueying:'工神月英',
jg_zhugeliang:'天侯孔明',
jg_liubei:'烈帝玄德',
jg_xiahouyuan:'绝尘妙才',
jg_caozhen:'佳人子丹',
jg_zhanghe:'巧魁儁乂',
jg_simayi:'断狱仲达',
qiwu:'栖梧',
tianyu:'天狱',
zhinang:'智囊',
jingmiao:'精妙',
biantian:'变天',
biantian2:'大雾',
biantian3:'狂风',
jizhen:'激阵',
xuanlei:'玄雷',
xuanlei_info:'锁定技准备阶段你令所有判定区内有牌的其他角色受到1点雷电伤害',
sfanshi:'反噬',
sfanshi2:'反噬',
sfanshi_info:'锁定技,你的体力上限为场上存活角色数的一半+2向下取整结束阶段你失去1点体力',
konghun:'控魂',
konghun_info:'出牌阶段开始时若你的体力值不大于1场上存活角色数不小于6时改为2你可以对至多X名角色各造成1点雷电伤害然后你恢复等量体力X为场上存活角色数的一半向下取整',
jizhen_info:'结束阶段,你可以令所至多两名已受伤角色摸一张牌',
// biantian2_info:'已获得大雾标记',
// biantian3_info:'已获得狂风标记',
lingfeng:'灵锋',
jueji:'绝汲',
huodi:'惑敌',
huodi_info:'回合结束阶段,若你本回合内没有使用过指定其他角色为目标的卡牌,你可以弃置一名其他角色的一张牌',
jueji_info:'其他角色的摸牌阶段开始时,若其已受伤,你可以弃置一张牌令其摸牌数-1',
lingfeng_info:'摸牌阶段,你可以弃置摸牌,改为亮出牌堆顶的两张牌并获得之,若两张牌颜色不同,你可以弃置一名角色的一张牌',
biantian_info:'锁定技,准备阶段,你进行一次判定,若为红色,你可以选择至多三名角色进入“狂风”状态直到你的下一回合开始,若为黑桃,直到下个回合开始前,你处于“大雾”状态',
jingmiao_info:'每当有一名其他角色使用无懈可击,你可以弃置其一张牌',
zhinang_info:'准备阶段,你可以亮出牌堆顶的三张牌,你可以将其中锦囊或装备牌交给一名角色,然后将其余牌置入弃牌堆',
qiwu_info:'锁定技。每当你使用一张梅花牌,你回复一点体力',
tianyu_info:'回合结束阶段,你可以将任意名未横置的其他角色横置',
juechen:'绝尘',
juechen_info:'每当你使用一张杀,可以弃置一名其他角色的一张牌(不能是杀的目标)',
chiying:'持盈',
chiying_info:'每当一名角色受到多于1伤害时你可以令其防止其余伤害然后令伤害来源摸一张牌',
jingfan:'惊帆',
jingfan2:'惊帆',
jingfan_info:'回合内每当你使用一张卡牌你与其他角色的距离1出牌阶段结束时你可以将手牌数补至X并指定至多X名角色令其与其他角色的距离1直到其下一回合结束X为你回合内使用的卡牌数',
},
}

1054
character/mountain.js Normal file

File diff suppressed because it is too large Load Diff

1242
character/refresh.js Normal file

File diff suppressed because it is too large Load Diff

2755
character/sp.js Normal file

File diff suppressed because it is too large Load Diff

1426
character/standard.js Normal file

File diff suppressed because it is too large Load Diff

7942
character/swd.js Normal file

File diff suppressed because it is too large Load Diff

24
character/test.md Normal file
View File

@ -0,0 +1,24 @@
御剑+诸方神石
诸葛诞 观星 安恤 利奴
赛特
徐暮云
皇甫朝云
云天河
拓跋玉儿
慕容诗
慕容紫英
水镜
柳梦璃
壶中仙
古月圣
轩辕剑仙
于小雪
方兰生
独孤宁珂
王思月
陈靖仇
车芸
阿阮

474
character/wind.js Normal file
View File

@ -0,0 +1,474 @@
character.wind={
character:{
xiahouyuan:['male','wei',4,['shensu'],['fullskin']],
caoren:['male','wei',4,['jushou'],['fullskin']],
huangzhong:['male','shu',4,['liegong'],['fullskin']],
weiyan:['male','shu',4,['kuanggu'],['fullskin']],
xiaoqiao:['female','wu',3,['tianxiang','hongyan'],['fullskin']],
zhoutai:['male','wu',4,['buqu','fenji'],['fullskin']],
zhangjiao:['male','qun',3,['leiji','guidao','huangtian'],['zhu','fullskin']],
diy_zhangjiao:['male','qun',3,['diyleiji','guidao','huangtian'],['zhu','fullskin']],
// spzhangjiao:['male','qun',3,['spleiji','guidao','huangtian'],['zhu']],
// yuji:['male','qun',3,['guhuo']],
},
skill:{
shensu:{
group:['shensu1','shensu2']
},
shensu1:{
trigger:{player:'phaseBegin'},
direct:true,
content:function(){
"step 0"
player.addSkill('shensu3');
var check= player.num('h')>2;
player.chooseTarget('是否发动神速?',function(card,player,target){
if(player==target) return false;
return player.canUse({name:'sha'},target);
}).ai=function(target){
if(!check) return 0;
return ai.get.effect(target,{name:'sha'},_status.event.player);
}
"step 1"
if(result.bool){
player.logSkill('shensu1',result.targets);
player.useCard({name:'sha'},result.targets[0],false);
player.skip('phaseJudge');
player.skip('phaseDraw');
}
player.removeSkill('shensu3');
}
},
shensu2:{
trigger:{player:'phaseUseBefore'},
direct:true,
filter:function(event,player){
return player.num('he',{type:'equip'})>0;
},
content:function(){
"step 0"
player.addSkill('shensu3');
var check=player.num('h')<=player.hp;
player.chooseCardTarget({
prompt:'是否发动【神速】?',
filterCard:function(card){
return get.type(card)=='equip'
},
position:'he',
filterTarget:function(card,player,target){
if(player==target) return false;
return player.canUse({name:'sha'},target);
},
ai1:function(card){
if(!check) return 0;
return 6-ai.get.value(card);
},
ai2:function(target){
if(!check) return 0;
return ai.get.effect(target,{name:'sha'},_status.event.player);
}
});
"step 1"
if(result.bool){
player.logSkill('shensu2',result.targets);
player.discard(result.cards[0]);
player.useCard({name:'sha'},result.targets[0]);
trigger.untrigger();
trigger.finish();
}
player.removeSkill('shensu3');
}
},
shensu3:{
mod:{
targetInRange:function(card,player,target,now){
return true;
}
},
},
jushou:{
trigger:{player:'phaseEnd'},
content:function(){
player.turnOver();
player.draw(3);
}
},
liegong:{
trigger:{player:'shaBegin'},
filter:function(event,player){
var length=event.target.num('h');
return (length>=player.hp||length<=get.attackRange(player));
},
content:function(){
trigger.directHit=true;
}
},
kuanggu:{
trigger:{source:'damageEnd'},
forced:true,
filter:function(event,player){
return get.distance(player,event.player)<=1;
},
content:function(){
player.recover(trigger.num);
}
},
tianxiang:{
trigger:{player:'damageBefore'},
direct:true,
filter:function(event,player){
return player.num('h',{suit:'heart'})>0&&event.num>0;
},
content:function(){
"step 0"
player.chooseCardTarget({
filterCard:function(card){
return get.suit(card)=='heart';
},
filterTarget:function(card,player,target){
return player!=target;
},
ai1:function(card){
return 10-ai.get.value(card);
},
ai2:function(target){
if(trigger.num>1){
if(target.maxHp>5&&target.hp>1) return 0;
return -att;
}
var eff=ai.get.damageEffect(target,trigger.source,target,trigger.nature);
var att=ai.get.attitude(player,target);
if(att==0) return 0.1;
if(eff>=0&&trigger.num==1){
return att;
}
if(target.hp==target.maxHp) return -att;
if(target.hp==1){
if(target.maxHp<=4&&!target.hasSkillTag('maixie')){
if(target.maxHp<=3){
return -att;
}
return -att/2;
}
return 0;
}
if(target.hp==target.maxHp-1){
if(target.hp>2||target.hasSkillTag('maixie')) return att/5;
if(att>0) return 0.02;
return 0.05;
}
return att/2;
},
prompt:'天香:弃置一张红桃牌转移伤害'
});
"step 1"
if(result.bool){
player.logSkill('tianxiang',result.targets);
trigger.untrigger();
trigger.player=result.targets[0];
trigger.player.addSkill('tianxiang2');
player.discard(result.cards[0]);
}
else{
event.finish();
}
"step 2"
trigger.trigger('damageBefore');
},
ai:{
effect:{
target:function(card,player,target){
if(player.skills.contains('jueqing')) return;
if(get.tag(card,'damage')&&target.num('h')>1) return 0.7;
}
},
threaten:function(player,target){
if(target.num('h')==0) return 2;
}
}
},
tianxiang2:{
trigger:{player:['damageAfter','damageCancelled']},
forced:true,
popup:false,
content:function(){
if(player.hp<player.maxHp) player.draw(player.maxHp-player.hp);
player.removeSkill('tianxiang2');
player.popup('tianxiang');
}
},
hongyan:{
mod:{
suit:function(card,suit){
if(suit=='spade') return 'heart';
}
}
},
buqu:{
trigger:{player:'dieBefore'},
forced:true,
filter:function(event,player){return player.maxHp>0},
content:function(){
"step 0"
event.card=get.cards()[0];
if(player.storage.buqu==undefined) player.storage.buqu=[];
player.storage.buqu.push(event.card);
event.dialog=ui.create.dialog('不屈',player.storage.buqu);
var str=get.translation(player)+'的不屈牌为'+player.storage.buqu[0].number;
for(var i=1;i<player.storage.buqu.length;i++){
str+='、'+player.storage.buqu[i].number;
}
game.log(str);
game.delay(2);
player.markSkill('buqu');
"step 1"
event.dialog.close();
for(var i=0;i<player.storage.buqu.length-1;i++){
if(get.number(event.card)==get.number(player.storage.buqu[i])) return;
}
trigger.untrigger();
trigger.finish();
player.hp=0;
},
mod:{
maxHandcard:function(player){
if(player.storage.buqu&&player.storage.buqu.length) return player.storage.buqu.length;
}
},
intro:{
content:'cards',
onunmark:function(storage,player){
if(storage&&storage.length){
player.$throw(storage);
for(var i=0;i<storage.length;i++){
ui.discardPile.appendChild(storage[i]);
}
delete player.storage.buqu;
}
}
}
},
fenji:{
trigger:{global:'discardAfter'},
filter:function(event){
if(_status.currentPhase!=event.player){
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].original=='h') return true;
}
}
return false;
},
check:function(event,player){
return ai.get.attitude(player,event.player)>2;
},
content:function(){
"step 0"
player.loseHp();
"step 1"
trigger.player.draw(2);
},
},
leiji:{
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);
};
"step 1"
if(result.bool){
player.logSkill('leiji',result.targets,'thunder');
event.target=result.targets[0];
event.target.judge(function(card){
if(get.suit(card)=='spade') return -4;
return 0;
});
}
else{
event.finish();
}
"step 2"
if(result.bool==false){
event.target.damage(2,'thunder');
}
},
ai:{
mingzhi:false,
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;
}
}
if(target.num('h','shan')&&target.num('e',{suit:'spade'})){
return [0,hastarget?target.num('he')/2:0];
}
if(target.num('h','shan')){
return [1,hastarget?target.num('he')/2:0];
}
return [1,target.num('h')/4];
}
}
}
}
},
guidao:{
trigger:{global:'judge'},
filter:function(event,player){
return player.num('he',{color:'black'})>0;
},
direct:true,
content:function(){
"step 0"
player.chooseCard('请选择替换判定的牌','he',function(card){
return get.color(card)=='black';
}).ai=function(card){
var trigger=_status.event.parent._trigger;
var player=_status.event.player;
var result=trigger.judge(card)-trigger.judge(trigger.player.judging);
var attitude=ai.get.attitude(player,trigger.player);
if(attitude==0||result==0) return 0;
if(attitude>0){
return result;
}
else{
return -result;
}
};
"step 1"
if(result.bool){
player.respond(result.cards);
}
else{
event.finish();
}
"step 2"
if(result.bool){
player.logSkill('guidao');
player.$gain2(trigger.player.judging);
player.gain(trigger.player.judging);
trigger.player.judging=result.cards[0];
trigger.position.appendChild(result.cards[0]);
game.log(get.translation(trigger.player)+'的判定牌改为'+get.translation(result.cards[0]));
}
"step 3"
game.delay(2);
},
ai:{
tag:{
rejudge:1
}
}
},
guhuo:{
trigger:{player:'phaseBegin'},
forced:true,
content:function(){
player.draw();
player.chooseToDiscard('hej',true).ai=ai.get.disvalue;
},
ai:{
effect:{
target:function(card){
if(get.type(card)=='delay') return [0,1];
}
}
}
},
huangtian:{
unique:true,
global:'huangtian2'
},
huangtian2:{
enable:'phaseUse',
discard:false,
line:true,
prepare:function(cards,player,targets){
player.$give(cards,targets[0]);
},
filter:function(event,player){
if(!game.zhu) return false;
return (player!=game.zhu&&game.zhu.skills.contains('huangtian')&&player.group=='qun')
},
filterCard:function(card){
return (card.name=='shan'||card.name=='shandian')
},
filterTarget:function(card,player,target){
return target==game.zhu;
},
usable:1,
content:function(){
target.gain(cards);
},
ai:{
expose:0.3,
order:10,
result:{
target:5
}
}
}
},
translate:{
xiahouyuan:'夏侯渊',
caoren:'曹仁',
huangzhong:'黄忠',
weiyan:'魏延',
xiaoqiao:'小乔',
zhoutai:'周泰',
zhangjiao:'张角',
spzhangjiao:'张角',
yuji:'于吉',
shensu:'神速',
shensu1:'神速',
shensu2:'神速',
jushou:'据守',
liegong:'烈弓',
kuanggu:'狂骨',
tianxiang:'天香',
hongyan:'红颜',
buqu:'不屈',
leiji:'雷击',
spleiji:'新雷击',
guidao:'鬼道',
huangtian:'黄天',
huangtian2:'黄天',
guhuo:'蛊惑',
fenji:'奋激',
shensu_info:
'你可以跳过摸牌阶段,或跳过出牌阶段并弃置一张装备牌,'+
'若如此则视为对任意一名使用一张【杀】',
jushou_info:
'回合结束阶段你可以将武将牌翻页并摸3张牌',
liegong_info:
'当你使用【杀】时,若目标的手牌数大于等于你的体力值,或小于等于你的攻击范围,你可令此【杀】不能闪避',
kuanggu_info:
'锁定技每当你造成一点伤害若受伤害角色与你的距离不大于1你回复一点体力',
tianxiang_info:
'当你即将受到伤害时你可以弃置一张红桃牌将伤害转移给任意一名其他角色然后该角色摸x张牌x为其已损失体力值',
hongyan_info:
'锁定技,你的黑桃牌均视为红桃',
buqu_info:
'锁定技每当你扣减1点体力后若你当前的体力值为0你可以将牌堆顶的一张牌置于你的武将牌上'+
'称为“创”,若所有“创”的点数均不同,你不会死亡。你的手牌上限为“创”的个数',
leiji_info:
'每当你使用或打出一张【闪】,可令任意一名角色进行一次判定,若结果为黑桃,其受到两点雷电伤害',
spleiji_info:
'每当你使用或打出一张【闪】,可令任意一名角色进行一次判定,若结果为黑色,其受到一点雷电伤害,然后你回复一点体力',
guidao_info:
'任意一名角色的判定生效前,你可以打出一张黑色牌替换之',
huangtian_info:
'主公技,群雄角色可在他们各自的回合里给你一张【闪】或【闪电】。',
guhuo_info:
'锁定技,回合开始阶段,你摸一张牌并弃置区域内的一张牌',
fenji_info:
'每当一名角色的手牌于回合外被弃置时你可以失去1点体力然后该角色摸两张牌。'
},
}

719
character/woods.js Normal file
View File

@ -0,0 +1,719 @@
character.woods={
character:{
menghuo:['male','shu',4,['huoshou','zaiqi'],['fullskin']],
zhurong:['female','shu',4,['juxiang','lieren'],['fullskin']],
caopi:['male','wei',3,['xingshang','fangzhu','songwei'],['zhu','fullskin']],
xuhuang:['male','wei',4,['duanliang'],['fullskin']],
lusu:['male','wu',3,['haoshi','dimeng'],['fullskin']],
sunjian:['male','wu',4,['yinghun'],['fullskin']],
dongzhuo:['male','qun',8,['jiuchi','roulin','benghuai','baonue'],['zhu','fullskin']],
jiaxu:['male','qun',3,['luanwu','wansha','weimu'],['fullskin']],
},
skill:{
huoshou:{
locked:true,
group:['huoshou1','huoshou2'],
ai:{
effect:{
target:function(card,player,target){
if(card.name=='nanman') return 0;
}
}
}
},
huoshou1:{
trigger:{target:'useCardToBefore'},
forced:true,
filter:function(event,player){
return (event.card.name=='nanman');
},
content:function(){
trigger.untrigger();
trigger.finish();
},
},
huoshou2:{
trigger:{global:'damageBefore'},
forced:true,
filter:function(event,player){
return (event.card&&event.card.name=='nanman');
},
content:function(){
trigger.source=player;
}
},
zaiqi:{
trigger:{player:'phaseDrawBefore'},
filter:function(event,player){
return player.hp<player.maxHp;
},
check:function(event,player){
if(player.maxHp-player.hp<2){
return false;
}
else if(player.maxHp-player.hp==2){
return player.num('h')>=2;
}
return true;
},
content:function(){
"step 0"
trigger.untrigger();
trigger.finish();
event.cards=get.cards(player.maxHp-player.hp);
player.showCards(event.cards);
"step 1"
var num=0;
for(var i=0;i<event.cards.length;i++){
if(get.suit(event.cards[i])=='heart'){
num++;
ui.discardPile.appendChild(event.cards[i]);
event.cards.splice(i--,1);
}
}
if(num){
player.recover(num);
}
"step 2"
if(event.cards.length){
player.gain(event.cards);
player.$gain2(event.cards);
game.delay();
}
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 2;
if(target.hp==2) return 1.5;
return 1;
},
}
},
juxiang:{
unique:true,
locked:true,
group:['juxiang1','juxiang2'],
ai:{
effect:{
target:function(card){
if(card.name=='nanman') return [0,1];
}
}
}
},
juxiang1:{
trigger:{target:'useCardToBefore'},
forced:true,
filter:function(event,player){
return (event.card.name=='nanman');
},
content:function(){
trigger.untrigger();
trigger.finish();
}
},
juxiang2:{
trigger:{global:'useCardAfter'},
forced:true,
filter:function(event,player){
return (event.card.name=='nanman'&&event.player!=player&&get.position(event.card)=='d'&&get.itemtype(event.card)=='card');
},
content:function(){
player.gain(trigger.card);
player.$gain2(trigger.card);
}
},
lieren:{
trigger:{source:'damageEnd'},
filter:function(event,player){
return (event.card&&event.card.name=='sha'&&
event.player.classList.contains('dead')==false&&
event.player.num('h')&&player.num('h'));
},
priority:5,
content:function(){
"step 0"
player.chooseToCompare(trigger.player);
"step 1"
if(result.bool&&trigger.player.num('he')){
player.gainPlayerCard(trigger.player,true,'he');
}
}
},
xingshang:{
unique:true,
gainable:true,
trigger:{global:'dieEnd'},
priority:5,
filter:function(event){
return event.cards.length>0
},
content:function(){
"step 0"
player.gain(trigger.cards);
player.$draw(trigger.cards);
//trigger.player.$give(trigger.cards,player);
game.delay();
// var card=trigger.cards;
// var str=get.translation(player)+'获得了'+get.translation(card[0]);
// for(var i=1;i<card.length;i++){
// str+='、'+get.translation(card[i]);
// }
// game.log(str);
"step 1"
trigger.cards.length=0;
}
},
fangzhu:{
trigger:{player:'damageEnd'},
direct:true,
content:function(){
"step 0"
player.chooseTarget('是否发动【放逐】?',function(card,player,target){
return player!=target
}).ai=function(target){
var player=_status.event.player;
if(ai.get.attitude(_status.event.player,target)==0) return 0;
if(ai.get.attitude(_status.event.player,target)>0){
if(target.classList.contains('turnedover')) return 1000-target.num('h');
if(player.maxHp-player.hp<3) return -1;
return 100-target.num('h');
}
else{
if(target.classList.contains('turnedover')) return -1;
if(player.maxHp-player.hp>=3) return -1;
return 1+target.num('h');
}
}
"step 1"
if(result.bool){
player.logSkill('fangzhu',result.targets);
result.targets[0].draw(player.maxHp-player.hp);
result.targets[0].turnOver();
}
},
ai:{
maixie:true,
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,-2];
var hastarget=false;
var hasfriend=false;
var turnfriend=false;
for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(target,game.players[i])<0&&!game.players[i].isTurnedOver()){
hastarget=true;
}
if(ai.get.attitude(target,game.players[i])>0&&game.players[i].isTurnedOver()){
hastarget=true;
turnfriend=true;
}
if(game.players[i]!=target&&ai.get.attitude(game.players[i],target)>=0){
hasfriend=true;
}
}
if(ai.get.attitude(player,target)>0&&!hastarget) return;
if(!hasfriend) return;
if(turnfriend||target.hp==target.maxHp) return [0.5,1];
if(target.hp>1) return [1,1];
}
}
}
}
},
songwei:{
unique:true,
global:'songwei2',
},
songwei2:{
trigger:{player:'judgeEnd'},
filter:function(event,player){
if(!game.zhu) return false;
return (player!=game.zhu&&game.zhu.skills.contains('songwei')&&player.group=='wei'&&get.color(event.result.card)=='black');
},
check:function(event,player){
return ai.get.attitude(player,game.zhu)>0;
},
content:function(){
game.zhu.draw();
}
},
duanliang:{
group:['duanliang1','duanliang2'],
ai:{
threaten:1.2
}
},
duanliang1:{
enable:'chooseToUse',
filterCard:function(card){
if(get.type(card)=='trick') return false;
if(get.type(card)=='delay') return false;
return get.color(card)=='black';
},
position:'he',
viewAs:{name:'bingliang'},
prompt:'将一黑色的基本牌或装备牌当兵粮寸断使用',
check:function(card){return 6-ai.get.value(card)},
ai:{
order:9
}
},
duanliang2:{
mod:{
targetInRange:function(card,player,target){
if(card.name=='bingliang'){
if(get.distance(player,target)<=2) return true;
}
}
}
},
haoshi:{
trigger:{player:'phaseDrawBegin'},
threaten:1.4,
check:function(event,player){
if(player.num('h')<=1) return true;
var min=[];
var temp=player.next.num('h');
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&game.players[i].num('h')<temp){
temp=game.players[i].num('h');
}
}
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&game.players[i].num('h')==temp){
min.push(game.players[i]);
}
}
for(var i=0;i<min.length;i++){
if(ai.get.attitude(player,min[i])>0) return true;
}
return false;
},
content:function(){
trigger.num+=2;
player.addSkill('haoshi2');
},
ai:{
threaten:2
}
},
haoshi2:{
trigger:{player:'phaseDrawEnd'},
forced:true,
popup:false,
content:function(){
"step 0"
player.removeSkill('haoshi2');
if(player.num('h')<=5){
event.finish();
return;
}
var temp=player.next.num('h');
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&game.players[i].num('h')<temp){
temp=game.players[i].num('h');
}
}
player.chooseCardTarget({
selectCard:Math.floor(player.num('h')/2),
filterTarget:function(card,player,target){
return target.num('h')==temp;
},
forced:true,
ai2:function(target){
return ai.get.attitude(player,target);
}
});
"step 1"
result.targets[0].gain(result.cards);
player.$give(result.cards.length,result.targets[0]);
}
},
dimeng:{
enable:'phaseUse',
usable:1,
position:'he',
filterCard:true,
selectCard:[0,Infinity],
selectTarget:2,
filterTarget:function(card,player,target){
if(player==target) return false;
if(ui.selected.targets.length==0) return true;
return (Math.abs(ui.selected.targets[0].num('h')-target.num('h'))==
ui.selected.cards.length);
},
multitarget:true,
content:function(){
var cards0=targets[0].get('h');
var cards1=targets[1].get('h');
targets[0].gain(cards1);
targets[1].gain(cards0);
targets[0].$give(cards0.length,targets[1]);
targets[1].$give(cards1.length,targets[0]);
},
check:function(card){
var list=[],player=_status.event.player;
var num=player.num('he');
var count;
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&ai.get.attitude(player,game.players[i])>3) list.push(game.players[i]);
}
list.sort(function(a,b){
return a.num('h')-b.num('h');
});
if(list.length==0) return -1;
var from=list[0];
list.length=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&ai.get.attitude(player,game.players[i])<1) list.push(game.players[i]);
}
list.sort(function(a,b){
return b.num('h')-a.num('h');
});
if(from.num('h')>=list[0].num('h')) return -1;
for(var i=0;i<list.length&&from.num('h')<list[i].num('h');i++){
if(list[i].num('h')-from.num('h')<=num){
count=list[i].num('h')-from.num('h');break;
}
}
if(count<2&&from.num('h')>=2) return -1;
if(ui.selected.cards.length<count) return 11-ai.get.value(card);
return -1;
},
ai:{
order:6,
threaten:3,
expose:0.9,
result:{
target:function(player,target){
var list=[];
var num=player.num('he');
if(ui.selected.targets.length==0){
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&ai.get.attitude(player,game.players[i])>3) list.push(game.players[i]);
}
list.sort(function(a,b){
return a.num('h')-b.num('h');
});
if(target==list[0]) return ai.get.attitude(player,target);
return -ai.get.attitude(player,target);
}
else{
var from=ui.selected.targets[0];
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&ai.get.attitude(player,game.players[i])<1) list.push(game.players[i]);
}
list.sort(function(a,b){
return b.num('h')-a.num('h');
});
if(from.num('h')>=list[0].num('h')) return -ai.get.attitude(player,target);
for(var i=0;i<list.length&&from.num('h')<list[i].num('h');i++){
if(list[i].num('h')-from.num('h')<=num){
var count=list[i].num('h')-from.num('h');
if(count<2&&from.num('h')>=2) return -ai.get.attitude(player,target);
if(target==list[i]) return ai.get.attitude(player,target);
return -ai.get.attitude(player,target);
}
}
}
}
}
}
},
yinghun:{
trigger:{player:'phaseBegin'},
filter:function(event,player){
return player.hp<player.maxHp;
},
direct:true,
content:function(){
"step 0"
player.chooseTarget(function(card,player,target){
return player!=target;
}).ai=function(target){
if(player.maxHp-player.hp==1&&target.num('he')==0){
return 0;
}
if(ai.get.attitude(_status.event.player,target)>0){
return 10+ai.get.attitude(_status.event.player,target);
}
if(player.maxHp-player.hp==1){
return -1;
}
return 1;
}
"step 1"
if(result.bool){
player.logSkill('yinghun',result.targets);
event.target=result.targets[0];
player.chooseControl('yinghun_true','yinghun_false',function(event,player){
if(ai.get.attitude(player,event.target)>0) return 'yinghun_true';
return 'yinghun_false';
})
}
else{
event.finish();
}
"step 2"
if(result.control=='yinghun_true'){
event.target.draw(player.maxHp-player.hp);
event.target.chooseToDiscard(true,'he');
}
else{
event.target.draw();
event.target.chooseToDiscard(player.maxHp-player.hp,true,'he');
}
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 2;
if(target.hp==2) return 1.5;
return 0.5;
},
maixie:true,
effect:{
target:function(card,player,target){
if(target.maxHp<=3) return;
if(get.tag(card,'damage')){
if(target.hp==target.maxHp) return [0,1];
}
if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0];
}
}
}
},
jiuchi:{
enable:'chooseToUse',
filterCard:function(card){
return get.suit(card)=='spade';
},
viewAs:{name:'jiu'},
prompt:'将一张黑桃手牌当酒使用',
check:function(card){
if(_status.event.type=='dying') return 1;
return 4-ai.get.value(card);
}
},
roulin:{
trigger:{player:'shaBegin',target:'shaBegin'},
forced:true,
filter:function(event,player){
if(player==event.player){
return event.target.sex=='female';
}
return event.player.sex=='female';
},
check:function(event,player){
return player==event.player;
},
content:function(){
"step 0"
var next=trigger.target.chooseToRespond({name:'shan'});
next.autochoose=lib.filter.autoRespondShan;
next.ai=function(card){
if(trigger.target.num('h','shan')>1){
return ai.get.unuseful2(card);
}
return -1;
};
"step 1"
if(result.bool==false){
trigger.untrigger();
trigger.directHit=true;
}
}
},
benghuai:{
trigger:{player:'phaseEnd'},
forced:true,
check:function(){
return false;
},
filter:function(event,player){
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&game.players[i].hp<player.hp) return true;
}
return false;
},
content:function(){
"step 0"
player.chooseControl('baonue_hp','baonue_maxHp',function(event,player){
if(player.hp<player.maxHp-1||player.hp<=2) return 'baonue_maxHp';
return 'baonue_hp';
});
"step 1"
if(result.control=='baonue_hp'){
player.loseHp();
}
else{
player.loseMaxHp();
}
},
ai:{
threaten:0.5
}
},
baonue:{
unique:true,
global:'baonue2'
},
baonue2:{
trigger:{source:'damageEnd'},
filter:function(event,player){
if(!game.zhu) return false;
return (player!=game.zhu&&game.zhu.skills.contains('baonue')&&player.group=='qun')&&game.zhu.hp<game.zhu.maxHp;
},
check:function(event,player){
return ai.get.attitude(player,game.zhu)>0;
},
content:function(){
"step 0"
player.judge(function(card){
if(get.suit(card)=='spade') return 4;
return 0;
})
"step 1"
if(result.bool){
game.zhu.recover();
}
}
},
luanwu:{
unique:true,
enable:'phaseUse',
filter:function(event,player){
return !player.storage.luanwu;
},
content:function(){
"step 0"
player.storage.luanwu=true;
event.current=player.next;
"step 1"
event.current.chooseToUse({name:'sha'},function(card,player,target){
if(player==target) return false;
if(get.distance(player,target)<=1) return true;
for(var i=0;i<game.players.length;i++){
if(game.players[i]==player) continue;
if(get.distance(player,game.players[i])<get.distance(player,target)) return false;
}
return true;
})
"step 2"
if(result.bool==false) event.current.loseHp();
if(event.current.next!=player){
event.current=event.current.next;
game.delay();
event.goto(1);
}
},
ai:{
order:1,
result:{
player:function(player){
var num=0;
for(var i=0;i<game.players.length;i++){
var att=ai.get.attitude(player,game.players[i]);
if(att>0) att=1;
if(att<0) att=-1;
if(game.players[i]!=player&&game.players[i].hp<=3){
if(game.players[i].num('h')==0) num+=att/game.players[i].hp;
else if(game.players[i].num('h')==1) num+=att/2/game.players[i].hp;
else if(game.players[i].num('h')==2) num+=att/4/game.players[i].hp;
}
if(game.players[i].hp==1) num+=att*1.5;
}
// console.log(num);
if(player.hp==1){
return -num;
}
if(player.hp==2){
return -game.players.length/4-num;
}
return -game.players.length/3-num;
}
}
}
},
wansha:{
locked:true,
global:'wansha2'
},
wansha2:{
mod:{
cardSavable:function(card,player){
if(_status.currentPhase.skills.contains('wansha')&&_status.currentPhase!=player){
if(card.name=='tao'&&_status.dying!=player) return false;
}
}
}
},
weimu:{
mod:{
targetEnabled:function(card){
if((get.type(card)=='trick'||get.type(card)=='delay')&&
get.color(card)=='black') return false;
}
}
},
},
translate:{
zhurong:'祝融',
menghuo:'孟获',
caopi:'曹丕',
xuhuang:'徐晃',
lusu:'鲁肃',
sunjian:'孙坚',
dongzhuo:'董卓',
jiaxu:'贾诩',
huoshou:'祸首',
huoshou1:'祸首',
huoshou2:'祸首',
zaiqi:'再起',
juxiang:'巨象',
juxiang1:'巨象',
juxiang2:'巨象',
lieren:'烈刃',
xingshang:'行殇',
fangzhu:'放逐',
songwei:'颂威',
songwei2:'颂威',
duanliang:'断粮',
duanliang1:'断粮',
haoshi:'好施',
dimeng:'缔盟',
yinghun:'英魂',
yinghun_true:'摸X弃1',
yinghun_false:'摸1弃X',
jiuchi:'酒池',
roulin:'肉林',
benghuai:'崩坏',
baonue:'暴虐',
baonue2:'暴虐',
baonue_hp:'体力',
baonue_maxHp:'体力上限',
luanwu:'乱舞',
wansha:'完杀',
weimu:'帷幕',
huoshou_info:'【南蛮入侵】对你无效;你是任何【南蛮入侵】造成伤害的来源。',
zaiqi_info:'摸牌阶段若你已受伤你可以放弃摸牌并展示牌堆顶的X张牌X为你已损失的体力值其中每有一张♥牌你回复1点体力然后弃掉这些♥牌将其余的牌收入手牌。',
juxiang_info:'南蛮入侵】对你无效;若其他角色使用的【南蛮入侵】在结算完时进入弃牌堆,你立即获得它。',
lieren_info:'你每使用【杀】造成一次伤害,可与受到该伤害的角色拼点;若你赢,你获得对方的一张牌。',
xingshang_info:'你可以立即获得死亡角色的所有牌。',
fangzhu_info:'你每受到一次伤害可令除你以外的任一角色补X张牌X为你已损失的体力值然后该角色将其武将牌翻面。',
songwei_info:'其他魏势力的角色的判定牌结果为♠或♣且失效后,可以让你摸一张牌。',
duanliang_info:'出牌阶段你可以将你的任意一张♠或♣的基本牌或装备牌当【兵粮寸断】使用你可以对与你距离2以内的角色使用【兵粮寸断】。',
haoshi_info:'摸牌阶段,你可以额外摸两张牌,若此时你的手牌数多于五张,你必须将一半(向下取整)的手牌交给场上除你外手牌数最少的一名角色。',
dimeng_info:'出牌阶段,你可以选择其他两名角色,你弃掉等同于这两名角色手牌数量的牌,然后交换他们的手牌,每回合限一次。',
yinghun_info:'回合开始阶段,若你已受伤,可选择一名其他角色执行下列两项中的一项: 1.摸X张牌然后弃一张牌。 2.摸一张牌然后弃X张牌。 X为你已损失的体力值每回合限一次。',
jiuchi_info:'你可将你的任意一张♠手牌当【酒】使用。',
roulin_info:'你对女性角色、女性角色对你使用【杀】时,都需连续使用两张【闪】才能抵消。',
benghuai_info:'回合结束阶段,若你的体力不是全场最少的(或之一)你须减1点体力或体力上限。',
baonue:'其他群雄角色每造成一次伤害可进行一次判定若为♠你回复1点体力。',
luanwu_info:'出牌阶段可令除你外的所有角色依次对与其距离最近的另一名角色使用一张【杀】无法如此做者失去1点体力。',
wansha_info:'在你的回合,除你以外,只有处于濒死状态的角色才能使用【桃】。',
weimu_info:'你不能成为♠或♣锦囊的目标。',
},
}

1405
character/xianjian.js Normal file

File diff suppressed because it is too large Load Diff

52
character/xswd.js Normal file
View File

@ -0,0 +1,52 @@
character.xswd={
character:{
swd_wushi:['male','wei',3,['zhoufu','yingbin','xuying']],
swd_lanmoshen:['female','wei',4,['bingjian','lieren'],['fullskin']],
swd_huanglei:['male','qun',3,['jilve','gongshen'],['fullskin']],
swd_libai:['female','qun',3,['miaobi','zhexian']],
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_philis:['male','qun',4,['yicong','wangxi']],
swd_pepin:['male','qun',4,['rejianxiong','quhu']],
swd_kangnalishi:['male','qun',1,['busi','xuying','yinguo']],
swd_xuanyuanjiantong:['male','qun',3,['chengjian','huanling'],['fullskin']],
// swd_huiyan:['male','qun',3,['wendao','xiaozhan','xunzhi']],
swd_chenfu:['male','qun',4,['xuanzhou','bingfeng']],
swd_chengyaojin:['male','qun',4,['jiuchi','jufu']],
swd_shanxiaoxiao:['female','wu',3,['shehun','xiaomoyu'],['fullskin']],
swd_yuchiyanhong:['female','shu',3,['huanxing','meihuo'],['fullskin']],
swd_hanteng:['male','qun',4,['kuangfu']],
swd_heran:['male','qun',3,['yujian','guiyin','shejie']],
swd_xingtian:['male','qun',8,[]],
swd_qinshubao:['male','qun',3,['huajing','pingxu']],
swd_tuobayueer:['female','shu',3,['shushen','biyue']],
swd_yangshuo:['male','qun',4,['longdan','luomu']],
swd_zhanglie:['male','qun',4,['huajin','poxiao']],
swd_hanluo:['male','qun',5,['hzhenwei'],['fullskin']],
swd_fu:['male','qun',5,['yudun'],['fullskin']],
swd_linyue:['male','wei',3,['zhenjiu','mazui'],['fullskin']],
swd_zidashu:['male','wu',3,['shoulie','hudun'],['fullskin']],
swd_maixing:['male','wu',3,['toudan','shending'],['fullskin']],
swd_fuyan:['male','qun',4,['lianda'],['fullskin']],
swd_haidapang:['female','wu',3,['bingjian','rumeng'],['fullskin']],
swd_shaowei:['female','shu',3,['jianji','huangyu'],['fullskin']],
swd_youzhao:['male','shu',4,['longdan','yuchen'],['fullskin']],
swd_qingming:['male','shu',3,['mingfu','tianlun']],
swd_shangzhang:['male','shu',4,['lianwu'],['fullskin']],
swd_situqiang:['female','shu',3,['qingnang','chulao'],['fullskin']],
swd_chunyuheng:['male','wei',2,['jueqing','shengshou','xuying'],['fullskin']],
swd_hanlong:['male','wei',4,['ciqiu','siji'],['fullskin']],
swd_yuli:['female','wu',3,['lingxin','tianxiang'],['fullskin']],
swd_zhanggao:['male','wei',4,['yicong','poxing'],['fullskin']],
swd_hupo:['male','wu',3,['dunxing','guiying'],['fullskin']],
swd_jiangziya:['male','wu',3,['xuanzhou','tianlun'],['fullskin']],
},
}

3318
character/yijiang.js Normal file

File diff suppressed because it is too large Load Diff

987
character/yxs.js Normal file
View File

@ -0,0 +1,987 @@
'use strict';
character.yxs={
character:{
yxs_wuzetian:['female','wu',4,['nvquan','qiandu','weiyi'],['fullskin']],
yxs_caocao:['male','wei',4,['zhulu','xieling'],['fullskin']],
yxs_mozi:['male','qun',3,['jieyong','feigong','jianai'],['fullskin']],
yxs_bole:['male','wu',3,['bolehuiyan','xiangma'],['fullskin']],
yxs_aijiyanhou:['female','qun',3,['seyou','sheshi'],['fullskin']],
yxs_diaochan:['female','qun',3,['fengyi','wange'],['fullskin']],
yxs_yangyuhuan:['female','wu',3,['fengyan','nichang'],['fullskin']],
},
skill:{
nichang:{
trigger:{player:'phaseDrawBefore'},
check:function(event,player){
var suits=['spade','heart','diamond','club'];
var cards=player.get('h');
for(var i=0;i<cards.length;i++){
suits.remove(get.suit(cards[i]));
}
return suits.length>=2;
},
content:function(){
trigger.untrigger();
trigger.finish();
player.addSkill('nichang2');
}
},
nichang2:{
trigger:{player:'phaseEnd'},
forced:true,
content:function(){
"step 0"
if(player.num('h')){
player.showHandcards();
}
player.removeSkill('nichang2');
"step 1"
var suits=['spade','heart','diamond','club'];
var cards=player.get('h');
for(var i=0;i<cards.length;i++){
suits.remove(get.suit(cards[i]));
}
player.draw(suits.length);
}
},
fengyan:{
trigger:{global:'judgeAfter'},
frequent:true,
filter:function(event,player){
if(event.player==player) return false;
if(event.player.sex!='male') return false;
if(event.result.card.parentNode.id!='discardPile') return false;
return (get.color(event.result.card)=='red');
},
content:function(){
player.gain(trigger.result.card);
player.$gain2(trigger.result.card);
}
},
fengyi:{
enable:'phaseUse',
usable:1,
filterCard:true,
filterTarget:function(card,player,target){
return player!=target;
},
check:function(card){
return 8-ai.get.value(card);
},
content:function(){
target.draw(2);
},
ai:{
result:{
target:2
},
order:1,
threaten:1.5
}
},
wange:{
trigger:{player:'phaseDrawBegin'},
check:function(event,player){
for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(player,game.players[i])<0) return true;
}
},
content:function(){
trigger.num--;
player.addSkill('wange2');
},
ai:{
threaten:1.8
}
},
wange2:{
trigger:{player:'phaseEnd'},
direct:true,
content:function(){
"step 0"
var num=Math.max(1,player.maxHp-player.hp);
player.chooseTarget('婉歌:获得至多'+get.cnNumber(num)+'名角色的一张手牌',[1,num],function(card,player,target){
return target.num('h')&&target!=player;
}).ai=function(target){
return -ai.get.attitude(player,target);
};
player.removeSkill('wange2');
"step 1"
if(result.bool){
event.targets=result.targets;
player.logSkill('wange',result.targets);
}
else{
event.finish();
}
"step 2"
if(event.targets.length){
var target=event.targets.shift();
player.gain(target.get('h').randomGet(),'give');
target.$give(1,player);
event.redo();
}
}
},
kuixin:{
trigger:{player:'judgeEnd'},
forced:true,
content:function(){
player.gain(trigger.result.card);
player.$gain2(trigger.result.card);
}
},
seyou:{
unique:true,
mark:true,
init:function(player){
player.storage.seyou=false;
},
enable:'phaseUse',
filter:function(event,player){
return !player.storage.seyou
},
intro:{
content:'limited'
},
filterTarget:true,
content:function(){
"step 0"
player.unmarkSkill('seyou');
player.storage.seyou=true;
event.targets=game.players.slice(0);
event.targets.remove(player);
event.targets.remove(target);
for(var i=0;i<event.targets.length;i++){
if(event.targets[i].sex!='male'){
event.targets.splice(i--,1);
}
}
"step 1"
if(event.targets.length){
event.current=event.targets.shift();
if(event.current.num('he')&&target.isAlive()){
event.current.chooseToUse({name:'sha'},target,-1);
}
}
else{
event.finish();
}
"step 2"
if(result.bool==false){
player.gainPlayerCard(event.current,true,'he');
}
event.goto(1);
},
ai:{
order:5,
result:{
target:function(player,target){
if(player.hp>1){
if(game.phaseNumber<game.players.length) return 0;
for(var i=0;i<game.players.length;i++){
if(game.players[i].ai.shown==0) return 0;
if(game.players[i].sex=='unknown') return 0;
}
}
var effect=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i].sex=='male'&&game.players[i]!=target&&game.players[i]!=player&&game.players[i].num('he'))
effect+=ai.get.effect(target,{name:'sha'},game.players[i],target);
}
return effect;
}
}
}
},
sheshi:{
trigger:{player:'damageEnd'},
direct:true,
content:function(){
"step 0"
if(event.isMine()){
event.dialog=ui.create.dialog('是否发动【蛇噬】?');
}
if(ui.cardPile.childNodes.length<4){
var discardcards=get.cards(4);
for(var i=0;i<discardcards.length;i++){
ui.discardPile.appendChild(discardcards[i]);
}
}
player.chooseControl('heart2','diamond2','club2','spade2','cancel').ai=function(event){
if(Math.random()<0.5) return 'club2';
if(Math.random()<0.5) return 'spade2';
if(Math.random<2/3) return 'diamond2';
return 'heart2';
};
"step 1"
if(event.dialog){
event.dialog.close();
}
if(result.control!='cancel'){
player.logSkill('sheshi');
game.log(get.translation(player)+'指定的花色为'+get.translation(result.control));
var suit=result.control.slice(0,result.control.length-1);
var cards=[];
for(var i=0;i<ui.cardPile.childNodes.length;i++){
var card=ui.cardPile.childNodes[i];
cards.push(card);
if(get.suit(card)==suit||i>=3){
break;
}
}
event.cards=cards;
event.suit=suit;
player.showCards(cards);
}
else{
event.finish();
}
"step 2"
if(event.cards&&event.cards.length){
if(get.suit(event.cards[event.cards.length-1])==event.suit){
ui.discardPile.appendChild(event.cards.pop());
}
if(event.cards.length){
player.gain(event.cards,'draw2');
}
}
},
ai:{
maixie:true,
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,-2];
var hasfriend=false;
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=target&&ai.get.attitude(game.players[i],target)>=0){
hasfriend=true;break;
}
}
if(!hasfriend) return;
if(target.hp>=4) return [1,2];
if(target.hp==3) return [1,1.5];
if(target.hp==2) return [1,0.5];
}
}
}
}
},
bolehuiyan:{
trigger:{global:'shaBegin'},
direct:true,
priority:11,
filter:function(event,player){
if(player.skills.contains('bolehuiyan4')) return false;
if(lib.config.mode=='versus'&&lib.storage.single_control&&event.target.side==player.side) return false;
return event.player!=player&&event.target!=player&&event.target.num('h')>0;
},
group:['bolehuiyan2','bolehuiyan3'],
content:function(){
"step 0"
if(event.isMine()){
event.dialog=ui.create.dialog('慧眼:预言'+get.translation(trigger.player)+'对'+get.translation(trigger.target)+'的杀能否命中');
}
player.chooseControl('能命中','不能命中','cancel').ai=function(event){
if(trigger.player.skills.contains('wushuang')) return 0;
if(trigger.player.skills.contains('liegong')) return 0;
if(trigger.player.skills.contains('tieji')) return 0;
if(trigger.player.skills.contains('retieji')) return 0;
if(trigger.player.skills.contains('roulin')&&trigger.target.sex=='female') return 0;
if(trigger.player.skills.contains('nvquan')&&trigger.target.sex=='male') return 0;
if(trigger.target.skills.contains('yijue2')) return 0;
if(trigger.target.skills.contains('shejie2')) return 0;
var equip=trigger.target.get('e','2');
if(equip&&equip.name=='bagua') return 1;
return trigger.target.num('h')<2?0:1;
};
"step 1"
if(event.dialog){
event.dialog.close();
}
if(result.control!='cancel'){
player.addTempSkill('bolehuiyan4','phaseAfter');
game.log(get.translation(player)+'预言'+result.control);
player.storage.bolehuiyan=result.control;
player.popup(result.control);
game.delay();
}
}
},
bolehuiyan2:{
trigger:{global:'shaEnd'},
forced:true,
popup:false,
filter:function(event,player){
return player.storage.bolehuiyan?true:false;
},
content:function(){
if(player.storage.bolehuiyan=='不能命中'){
player.popup('预言成功');
player.draw();
}
delete player.storage.bolehuiyan;
}
},
bolehuiyan3:{
trigger:{global:'shaDamage'},
forced:true,
popup:false,
filter:function(event,player){
return player.storage.bolehuiyan?true:false;
},
content:function(){
if(player.storage.bolehuiyan=='能命中'){
player.popup('预言成功');
player.draw();
}
delete player.storage.bolehuiyan;
}
},
bolehuiyan4:{},
oldbolehuiyan:{
trigger:{global:'judgeBegin'},
direct:true,
priority:11,
filter:function(event,player){
return event.player!=player;
},
content:function(){
"step 0"
if(event.isMine()){
event.dialog=ui.create.dialog('慧眼:预言'+get.translation(trigger.player)+'的'+trigger.judgestr+'判定');
}
player.chooseControl('heart2','diamond2','club2','spade2','cancel').ai=function(event){
switch(Math.floor(Math.random()*4)){
case 0:return 'heart2';
case 1:return 'diamond2';
case 2:return 'club2';
case 3:return 'spade2';
}
};
"step 1"
if(event.dialog){
event.dialog.close();
}
if(result.control!='cancel'){
game.log(get.translation(player)+'预言判定结果为'+get.translation(result.control));
player.storage.bolehuiyan=result.control.slice(0,result.control.length-1);
player.popup(result.control);
game.delay();
}
},
group:'bolehuiyan2'
},
oldbolehuiyan2:{
trigger:{global:'judgeEnd'},
forced:true,
popup:false,
content:function(){
if(player.storage.bolehuiyan==trigger.result.suit){
game.log(get.translation(player)+'预言成功');
player.popup('洗具');
player.draw(2);
}
else if(get.color({suit:player.storage.bolehuiyan})==trigger.result.color){
player.popup('洗具');
player.draw();
}
delete player.storage.bolehuiyan;
}
},
xiangma:{
// group:['mashu','feiying']
inherit:'yicong'
},
weiyi:{
trigger:{player:'damageEnd'},
filter:function(event,player){
return (event.source&&event.source.num('he'));
},
check:function(event,player){
return ai.get.attitude(player,event.source)<0;
},
content:function(){
trigger.source.chooseToDiscard(2,'he',true);
},
ai:{
result:{
target:function(card,player,target){
if(player.num('he')>1&&get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,-1];
if(ai.get.attitude(target,player)<0) return [1,0,0,-1.5];
}
}
}
}
},
qiandu:{
enable:'phaseUse',
usable:1,
forbid:['versus'],
filterTarget:function(card,player,target){
return player!=target&&player.next!=target;
},
filterCard:{color:'black'},
check:function(card){
return 4-ai.get.value(card);
},
content:function(){
game.swapSeat(player,target);
},
ai:{
order:5,
result:{
player:function(player,target){
var att=ai.get.attitude(player,target);
if(target==player.previous&&att>0) return att;
if(target==player.next&&att<0) return -att;
var att2=ai.get.attitude(player,player.next);
if(target==player.next.next&&att<0&&att2<0) return -att-att2;
return 0;
}
}
}
},
nvquan:{
group:['nvquan1','nvquan2','nvquan3'],
},
nvquan1:{
trigger:{player:'shaBegin'},
forced:true,
filter:function(event){
return event.target.sex=='male';
},
content:function(){
"step 0"
var next=trigger.target.chooseToRespond({name:'shan'});
next.autochoose=lib.filter.autoRespondShan;
next.ai=function(card){
if(trigger.target.num('h','shan')>1){
return ai.get.unuseful2(card);
}
return -1;
};
"step 1"
if(result.bool==false){
trigger.untrigger();
trigger.directHit=true;
}
}
},
nvquan2:{
trigger:{player:'juedou',target:'juedou'},
forced:true,
filter:function(event,player){
return event.turn!=player&&event.turn.sex=='male';
},
content:function(){
"step 0"
var next=trigger.turn.chooseToRespond({name:'sha'});
next.autochoose=lib.filter.autoRespondSha;
next.ai=function(card){
if(ai.get.attitude(trigger.turn,player)<0&&trigger.turn.num('h','sha')>1){
return ai.get.unuseful2(card);
}
return -1;
};
"step 1"
if(result.bool==false){
trigger.directHit=true;
}
},
ai:{
result:{
target:function(card,player,target){
if(card.name=='juedou'&&target.num('h')>0) return [1,0,0,-1];
}
}
}
},
nvquan3:{
// trigger:{target:'useCardToBegin'},
// filter:function(event){
// return event.player.sex=='male'&&(event.card.name=='sha'||event.card.name=='juedou');
// },
// check:function(event,player){
// return ai.get.attitude(player,event.player)<=0;
// },
// direct:true,
// content:function(){
// "step 0"
// var bool=(ai.get.attitude(player,trigger.player)<=0);
// player.choosePlayerCard(trigger.player,'是否发动【女权】?','he').ai=function(button){
// if(bool){
// return ai.get.buttonValue(button);
// }
// else{
// return 0;
// }
// }
// "step 1"
// if(result.bool){
// trigger.player.discard(result.links);
// }
// }
mod:{
targetEnabled:function(card,player,target){
if(card.name=='juedou'&&player.sex=='male'){
return false;
}
}
}
},
feigong:{
trigger:{global:'useCard'},
priority:15,
filter:function(event,player){
return event.card.name=='sha'&&event.player!=player&&
player.num('h','sha')>0&&event.targets.contains(player)==false;
},
direct:true,
content:function(){
"step 0"
var effect=0;
for(var i=0;i<trigger.targets.length;i++){
effect+=ai.get.effect(trigger.targets[i],trigger.card,trigger.player,player);
}
var str='是否弃置一张杀令'+get.translation(trigger.player);
if(trigger.targets&&trigger.targets.length){
str+='对'+get.translation(trigger.targets);
}
str+='的'+get.translation(trigger.card)+'失效?';
if(event.isMine()||effect<0){
game.delay(0.5);
}
player.chooseToDiscard('h',{name:'sha'},str).ai=function(card){
if(effect<0){
return 9-ai.get.value(card);
}
return -1;
}
"step 1"
if(result.bool){
trigger.untrigger();
trigger.finish();
player.logSkill('feigong',trigger.targets);
}
},
ai:{
threaten:1.2,
expose:0.1
}
},
feiming:{
trigger:{player:'damageEnd'},
check:function(event,player){
return ai.get.attitude(player,event.source)<=0;
},
filter:function(event,player){
return event.source&&event.source!=player;
},
content:function(){
"step 0"
trigger.source.chooseCard('交出一张红桃牌或流失一点体力',function(card){
return get.suit(card)=='heart';
}).ai=function(card){
return 6-ai.get.value(card);
};
"step 1"
if(result.bool){
player.gain(result.cards[0]);
trigger.source.$give(1,player);
}
else{
trigger.source.loseHp();
}
},
ai:{
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')) return [1,0,0,-1];
}
}
}
},
jianai:{
trigger:{player:'recoverEnd'},
check:function(event,player){
if(event.parent.name=='taoyuan'&&event.parent.player==player){
console.log(1);return false;
}
var num=0;
var ef;
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player){
ef=0;
if(game.players[i].hp<game.players[i].maxHp){
ef++;
}
if(game.players[i].hp==1&&game.players[i].maxHp>2){
ef+=0.5;
}
}
if(ai.get.attitude(player,game.players[i])>0){
num+=ef;
}
else if(ai.get.attitude(player,game.players[i])<0){
num-=ef;
}
}
return num>0;
},
content:function(){
"step 0"
event.targets=game.players.slice(0);
event.targets.remove(player);
"step 1"
if(event.targets.length){
event.targets.shift().recover();
event.redo();
}
},
ai:{
expose:0.1
}
},
jieyong:{
trigger:{player:'useCardAfter'},
direct:true,
filter:function(event,player){
if(get.position(event.card)!='d') return false;
if(player.skills.contains('jieyong2')) return false;
return player.num('he',{color:'black'})>0;
},
content:function(){
"step 0"
player.chooseToDiscard('he','是否弃置一张黑色牌并收回'+get.translation(trigger.card)+'',{color:'black'}).ai=function(card){
return ai.get.value(trigger.card)-ai.get.value(card);
}
"step 1"
if(result.bool){
player.logSkill('jieyong');
player.gain(trigger.card,'gain2');
player.addTempSkill('jieyong2',['phaseAfter','phaseBegin']);
}
},
ai:{
threaten:1.3
}
},
jieyong_old:{
enable:'phaseUse',
usable:1,
group:['jieyong3'],
direct:true,
filter:function(event,player){
return player.num('h',{suit:'heart'})>0;
},
content:function(){
"step 0"
var list=[];
player.getStat('skill').jieyong--;
for(var i in lib.card){
if(lib.card[i].mode&&lib.card[i].mode.contains(lib.config.mode)==false) continue;
if(lib.card[i].type=='trick'||lib.card[i].type=='basic'){
if(lib.filter.filterCard({name:i,suit:'heart'}),player){
var select=get.select(lib.card[i].selectTarget);
if(select[0]==1&&select[1]==1){
list.push(['','',i]);
}
}
}
}
var dialog=ui.create.dialog([list,'vcard']);
player.chooseButton(dialog,function(button){
// if(player.skills.contains('jieyong4')==false){
// for(var i=0;i<game.players.length;i++){
// if(ai.get.attitude(player,game.players[i])<-3&&
// game.players[i].hp==1&&game.players[i].num('h')<=1){
// return (button.link[2]=='juedou')?1:-1
// }
// }
// }
var recover=0,lose=1;
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++;
}
}
}
}
if(player.hp<player.num('h')) return (button.link[2]=='wuzhong')?1:-1;
return (button.link[2]=='wuzhong')?1:-1;
});
"step 1"
if(result.bool){
lib.skill.jieyong2.viewAs={name:result.buttons[0].link[2]};
// player.popup(result.buttons[0].link[2]);
event.parent.parent.backup('jieyong2');
event.parent.parent.step=0;
if(event.isMine()){
event.parent.parent.skillDialog='将一张红桃牌当'+get.translation(result.buttons[0].link[2])+'使用';
}
player.addTempSkill('jieyong6','phaseAfter');
}
else{
if(player.skills.contains('jieyong4')){
player.addTempSkill('jieyong5','phaseAfter')
}
else{
player.addTempSkill('jieyong4','phaseAfter')
}
event.finish();
}
},
ai:{
order:9,
result:{
player:function(player){
if(player.skills.contains('jieyong5')||player.skills.contains('jieyong6')) return 0;
return 1;
}
},
threaten:1.6,
}
},
jieyong2:{
filterCard:{suit:'heart'},
},
jieyong3:{
trigger:{player:'useCardBefore'},
forced:true,
popup:false,
filter:function(event,player){
return event.skill=='jieyong2';
},
content:function(){
player.popup(trigger.card.name);
player.getStat('skill').jieyong++;
}
},
jieyong4:{},
jieyong5:{},
jieyong6:{},
zhulu:{
trigger:{global:'useCardAfter'},
direct:true,
filter:function(event,player){
return _status.currentPhase!=player&&get.type(event.card)=='trick'&&
get.position(event.card)=='d'&&!player.skills.contains('zhulu2')&&
get.itemtype(event.card)=='card'&&player.num('he',{suit:get.suit(event.card)})>0;
},
content:function(){
"step 0"
var val=ai.get.value(trigger.card);
var suit=get.suit(trigger.card);
player.chooseToDiscard('he','逐鹿:是否发动弃置一张'+get.translation(suit)+
'牌并获得'+get.translation(trigger.card)+'',{suit:suit}).ai=function(card){
return val-ai.get.value(card);
};
"step 1"
if(result.bool){
player.gain(trigger.card,'gain2');
player.addTempSkill('zhulu2','phaseAfter');
player.logSkill('zhulu');
}
},
ai:{
threaten:1.2
}
},
zhulu2:{},
xieling:{
enable:'phaseUse',
usable:1,
filterCard:true,
selectCard:2,
check:function(card){
return 7-ai.get.value(card);
},
multitarget:true,
targetprompt:['被移走','移动目标'],
filterTarget:function(card,player,target){
if(ui.selected.targets.length){
var from=ui.selected.targets[0];
var judges=from.get('j');
for(var i=0;i<judges.length;i++){
if(judges[i].viewAs){
if(target.num('j',{name:judges[i].viewAs})==0&&
target.num('j',{viewAs:judges[i].viewAs})==0) return true;
}
else if(target.num('j',{name:judges[i].name})==0) return true;
}
if((from.get('e','1')&&!target.get('e','1'))||
(from.get('e','2')&&!target.get('e','2'))||
(from.get('e','3')&&!target.get('e','3'))||
(from.get('e','4')&&!target.get('e','4'))||
(from.get('e','5')&&!target.get('e','5'))) return true;
return false;
}
else{
return target.num('ej')>0;
}
},
selectTarget:2,
content:function(){
"step 0"
if(targets.length==2){
player.choosePlayerCard('ej',function(button){
if(ai.get.attitude(player,targets[0])>ai.get.attitude(player,targets[1])){
return get.position(button.link)=='j'?10:0;
}
else{
if(get.position(button.link)=='j') return -10;
return ai.get.equipValue(button.link);
}
},targets[0]);
}
else{
event.finish();
}
"step 1"
if(result.bool){
if(get.position(result.buttons[0].link)=='e'){
event.targets[1].equip(result.buttons[0].link);
}
else if(result.buttons[0].link.viewAs){
event.targets[1].addJudge({name:result.buttons[0].link.viewAs},[result.buttons[0].link]);
}
else{
event.targets[1].addJudge(result.buttons[0].link);
}
event.targets[0].$give(result.buttons[0].link,event.targets[1])
game.delay();
}
},
ai:{
order:10,
result:{
target:function(player,target){
if(ui.selected.targets.length==0){
if(target.num('j')&&ai.get.attitude(player,target)>0) return 1;
if(ai.get.attitude(player,target)<0){
for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(player,game.players[i])>0){
if((target.get('e','1')&&!game.players[i].get('e','1'))||
(target.get('e','2')&&!game.players[i].get('e','2'))||
(target.get('e','3')&&!game.players[i].get('e','3'))||
(target.get('e','4')&&!game.players[i].get('e','4'))||
(target.get('e','5')&&!game.players[i].get('e','5')))
return -1;
}
}
}
return 0;
}
else{
return ai.get.attitude(player,ui.selected.targets[0])>0?-1:1;
}
},
},
expose:0.2,
threaten:1.5
}
}
},
translate:{
yxs_guanyu:'关羽',
yxs_wuzetian:'武则天',
yxs_caocao:'曹操',
yxs_mozi:'墨子',
yxs_bole:'伯乐',
yxs_aijiyanhou:'埃及艳后',
yxs_diaochan:'貂蝉',
yxs_yangyuhuan:'杨玉环',
kuixin:'窥心',
kuixin_info:'锁定技,你立即获得你的判定牌',
weiyi:'威仪',
weiyi_info:'每当你受到一次伤害,可以令伤害来源弃置两张牌',
xieling:'挟令',
xieling_info:'出牌阶段,弃掉两张手牌,将任意一名角色装备区或判定区的牌移动到另一名角色对应的区域',
baye:'霸业',
baye_info:'出牌阶段,你可以将一张牌当做本回合内前一张使用的牌来使用。每回合限用一次。',
nvquan:'女权',
nvquan1:'女权',
nvquan2:'女权',
nvquan_info:'你对男性角色使用【杀】或【决斗】时,对方需连续打出两张【杀】当做一张【杀】;你不能成为男性角色的决斗目标',
qiandu:'迁都',
qiandu_info:'出牌阶段,你可以弃一张黑色手牌,和一名存活的玩家与其交换位置。每回合限一次。',
budao:'补刀',
budao_info:'你的回合外,你的攻击范围的一名角色受到【杀】的伤害时,你可以对其使用一张【杀】,只要你的【杀】对目标角色造成了伤害,你就可以继续对其使用【杀】。',
feigong:'非攻',
feigong_info:'其他角色使用杀时,若你不是杀的目标,可以弃置一张杀取消之',
jianai:'兼爱',
jianai_info:'每当你回复一点体力,可以令所有其他角色回复一点体力',
bolehuiyan:'慧眼',
bolehuiyan_info:'当一名有手牌的其他角色成为来源不为你的杀的目标时,你可以预言此杀能否命中,若预言正确,你摸一张牌,每回合限发动一次',
xiangma:'相马',
xiangma_info:'锁定技,计算你与其他角色的距离时始终-1计算其他角色与你的距离时始终+1',
seyou:'色诱',
seyou_info:'限定技出牌阶段你可以指定任意1名角色其他所有男性角色需选择1项执行1对你指定的角色出【杀】2令你获得其一张牌。',
sheshi:'蛇噬',
sheshi_info:'每受到1次伤害可以指定1种花色依次展示牌堆顶的牌直到出现指定花色的牌为止你获得与指定花色不同花色的所有牌最多展示4张牌。',
sanbanfu:'三板斧',
sanbanfu_info:'出牌阶段你使用对目标角色使用【杀】时若目标角色不出闪则目标受到2点伤害你弃掉1张手牌若目标角色出1张闪则目标角色受到1点伤害你自减1点血量若目标角色出2张闪则目标角色不掉血你自减1点血量。每回合限一次。',
fengyi:'凤仪',
fengyi_info:'出牌阶段,你可以弃一张手牌,指定任意目标摸两张牌。(每回合限用一次)',
wange:'婉歌',
wange_info:'摸牌时你可以少摸一张牌则回合结束时你可以抽取一名其他角色的手牌至少1张至多X张X为你当前的掉血量。',
nichang:'霓裳',
nichang2:'霓裳',
nichang_info:'摸牌时,你可以选择不摸牌,回合结束时展示手牌,每少一种花色摸一张牌',
fengyan:'丰艳',
fengyan_info:'你可以获得其他男性角色的红色判定牌',
chujia:'出嫁',
chujia_info:'出牌阶段可以弃掉两张相同颜色的手牌指定任意角色摸X张牌。X为该角色已损失的血量',
zhulu:'逐鹿',
zhulu_info:'回合外,当有非延时锦囊结算完毕后,你可以立即弃掉一张相同花色手牌或装备区的牌,获得这张锦囊牌。',
jieyong:'节用',
jieyong2:'节用',
jieyong_info:'你使用的卡牌进入弃牌堆后,你可以弃置一张黑色牌并重新获得之(每回合限一次)',
shangtong:'尚同',
shangtong_info:'每当你令其他角色恢复1点血量或掉1点血量时你可以摸1张牌摸牌上限为4',
feiming:'非命',
feiming_info:'其他角色对你造成伤害时你可以令该角色须选择1项执行1将1张红桃花色手牌交给你2流失1点血量',
yxsrenwang:'人望',
yxsrenwang_info:'出牌阶段你可以弃掉2张牌并指定一名手牌数大于你的角色你摸牌至与该角色手牌数相等每阶段限一次。',
shiwei:'施威',
shiwei_info:'当其他角色失去最后一张手牌时,你可以将牌堆顶的一张牌背面朝上置于该角色面前,该角色回合,跳过出牌阶段并弃掉这张牌。',
yxswushuang:'无双',
yxswushuang_info:'出牌阶段你使用【杀】时可同时打出两张【杀】则该【杀】具有以下效果之一1伤害+12额外指定两个目标',
xiaoyong:'骁勇',
xiaoyong_info:'你可以将黑色手牌当作【杀】来使用',
qinzheng:'亲征',
qinzheng_info:'出牌阶段,你对其他角色造成伤害时,可以令场上任意角色摸一张牌。',
juma:'拒马',
juma_info:'你与其他角色的距离始终视为1。',
},
};

358
character/zhuogui.js Normal file
View File

@ -0,0 +1,358 @@
character.zhuogui={
character:{
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']],
heiwuchang:['male','qun',3,['suoling','xixing']],
},
skill:{
qixiang:{
group:['qixiang1','qixiang2'],
ai:{
effect:{
target:function(card,player,target,current){
if(card.name=='lebu'&&card.name=='bingliang') return 0.8;
}
}
}
},
qixiang1:{
trigger:{player:'judge'},
forced:true,
filter:function(event,player){
if(event.card){
if(event.card.viewAs){
return event.card.viewAs=='lebu';
}
else{
return event.card.name=='lebu';
}
}
},
content:function(){
player.addTempSkill('qixiang3','phaseJudgeAfter');
}
},
qixiang2:{
trigger:{player:'judge'},
forced:true,
filter:function(event,player){
if(event.card){
if(event.card.viewAs){
return event.card.viewAs=='bingliang';
}
else{
return event.card.name=='bingliang';
}
}
},
content:function(){
player.addTempSkill('qixiang4','phaseJudgeAfter');
}
},
qixiang3:{
mod:{
suit:function(card,suit){
if(suit=='diamond') return 'heart';
}
}
},
qixiang4:{
mod:{
suit:function(card,suit){
if(suit=='spade') return 'club';
}
}
},
nianrui:{
trigger:{player:['phaseBegin','phaseEnd']},
content:function(){
"step 0"
player.judge(function(card){
return get.color(card)=='red'?1:0;
});
"step 1"
if(result.bool){
player.draw();
}
}
},
lianyu:{
enable:'phaseUse',
usable:1,
filterCard:{color:'red'},
check:function(card){return 6-ai.get.value(card)},
filterTarget:true,
selectTarget:-1,
line:'fire',
content:function(){
target.damage('fire');
},
ai:{
result:{
player:function(card,player,target){
var eff=0;
for(var i=0;i<game.players.length;i++){
if(!game.players[i].isOut()){
num+=ai.get.damageEffect(game.players[i],player,player,'fire');
}
}
return eff;
}
},
expose:0.1
}
},
manjia:{
group:['manjia1','manjia2']
},
manjia1:{
trigger:{target:'useCardToBefore'},
forced:true,
priority:6,
filter:function(event,player){
if(player.get('e','2')) return false;
if(event.player.num('s','unequip')) return false;
if(event.card.name=='nanman') return true;
if(event.card.name=='wanjian') return true;
if(event.card.name=='sha'&&!event.card.nature) return true;
},
content:function(){
trigger.untrigger();
trigger.finish();
},
ai:{
effect:{
target:function(card,player,target,current){
if(target.get('e','2')) return;
if(player.num('s','unequip')) return;
if(card.name=='nanman'||card.name=='wanjian') return 0;
if(card.name=='sha'){
var equip1=player.get('e','1');
if(equip1&&equip1.name=='zhuque') return 2;
if(equip1&&equip1.name=='qinggang') return 1;
if(!card.nature) return 0;
}
}
}
}
},
manjia2:{
trigger:{player:'damageBegin'},
filter:function(event,player){
if(player.get('e','2')) return false;
if(event.nature=='fire') return true;
},
forced:true,
check:function(){
return false;
},
content:function(){
trigger.num++;
},
ai:{
effect:{
target:function(card,player,target,current){
if(target.get('e','2')) return;
if(card.name=='sha'){
if(card.nature=='fire'||player.skills.contains('zhuque_skill')) return 2;
}
if(get.tag(card,'fireDamage')&&current<0) return 2;
}
}
}
},
xiaoshou:{
trigger:{player:'phaseEnd'},
filter:function(event,player){
var players=game.players.slice(0);
players.sort(function(a,b){
return b.hp-a.hp;
});
return players[0].hp>players[1].hp&&players[0]!=player;
},
check:function(event,player){
var players=game.players.slice(0);
players.sort(function(a,b){
return b.hp-a.hp;
});
return ai.get.damageEffect(players[0],player,player,'fire')>0;
},
prompt:function(){
var players=game.players.slice(0);
players.sort(function(a,b){
return b.hp-a.hp;
});
return '枭首:是否对'+get.translation(players[0])+'造成一点火焰伤害?';
},
content:function(){
var players=game.players.slice(0);
players.sort(function(a,b){
return b.hp-a.hp;
});
if(players[0].hp>players[1].hp&&players[0]!=player){
players[0].damage('fire');
player.line(players[0],'fire');
}
},
ai:{
expose:0.2
}
},
guiji:{
trigger:{player:'phaseJudgeBegin'},
forced:true,
content:function(){
player.discard(player.get('j').randomGet());
},
filter:function(event ,player){
return player.num('j')>0;
},
ai:{
effect:{
target:function(card,player,target,current){
if(get.type(card)=='delay'&&target.num('j')==0) return 0.1;
}
}
}
},
qiangzheng:{
trigger:{player:'phaseEnd'},
direct:true,
forced:true,
filter:function(event,player){
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&game.players[i].num('h')) return true;
}
return false;
},
content:function(){
"step 0"
player.chooseTarget('获得一名角色的一张手牌',true,function(card,player,target){
return player!=target&&target.num('h')>0;
}).ai=function(target){
return -ai.get.attitude(player,target);
};
"step 1"
if(result.targets&&result.targets.length){
player.logSkill('qiangzheng',result.targets);
player.gain(result.targets[0].get('h').randomGet());
result.targets[0].$give(1,player);
game.delay();
}
}
},
zuijiu:{
trigger:{source:'damageBegin'},
filter:function(event){
return event.card&&event.card.name=='sha'&&get.color(event.card)=='black';
},
forced:true,
content:function(){
trigger.num++;
player.addSkill('zuijiu2');
}
},
zuijiu2:{
trigger:{source:'damageEnd'},
forced:true,
popup:false,
content:function(){
player.removeSkill('zuijiu2');
player.chooseToDiscard(true);
}
},
suoling:{
trigger:{player:'phaseEnd'},
forced:true,
content:function(){
"step 0"
event.targets=game.players.slice(0);
event.targets.remove(player);
event.targets.sort(lib.sort.seat);
if(player.isLinked()) player.link();
"step 1"
if(event.targets.length){
var target=event.targets.shift();
if(!target.isLinked()){
target.link();
}
event.redo();
}
}
},
xixing:{
enable:'phaseUse',
usable:1,
filterCard:function(card){
var type=get.type(card);
for(var i=0;i<ui.selected.cards.length;i++){
if(get.type(ui.selected.cards[i])==type) return false;
}
return true;
},
selectCard:3,
position:'he',
filterTarget:function(card,player,target){
return player!=target;
},
check:function(card){
if(_status.event.player.hp==_status.event.player.maxHp){
return 5-ai.get.value(card);
}
return 10-ai.get.value(card);
},
content:function(){
"step 0"
target.damage();
"step 1"
player.recover();
},
ai:{
order:9.5,
result:{
target:function(player,target){
return ai.get.damageEffect(target,player);
}
},
expose:0.2
}
}
},
translate:{
nianshou:'年兽',
nianrui:'年瑞',
qixiang:'祺祥',
qixiang1:'祺祥',
qixiang2:'祺祥',
nianrui_info:'回合开始和结束阶段,你可以进行一次判定,若结果为红色则摸一张牌',
qixiang_info:'乐不思蜀判定时,你的方块判定牌视为红桃;兵粮寸断判定时,你的黑桃判定牌视为草花',
mamian:'马面',
lianyu:'炼狱',
lianyu_info:'出牌阶段限一次,你可以弃置一张红色手牌令场上所有角色受到一点火焰伤害',
niutou:'牛头',
manjia:'蛮甲',
manjia1:'蛮甲',
manjia2:'蛮甲',
manjia_info:'锁定技,若你的装备区内没有防具牌,则你视为装备了[藤甲]',
xiaoshou:'枭首',
xiaoshou_info:'回合结束阶段,若场上体力值最多的角色只有一个,你可以对其造成一点火焰伤害',
guiji:'诡计',
guiji_info:'锁定技,准备阶段结束时,若你的判定区内有牌,你随机弃置其中一张牌',
baiwuchang:'白无常',
qiangzheng:'强征',
qiangzheng_info:'锁定技,回合结束阶段,你获得一名其他角色的一张手牌',
zuijiu:'醉酒',
zuijiu_info:'锁定技,你的黑杀造成的伤害+1造成伤害后须弃置一张手牌',
heiwuchang:'黑无常',
suoling:'索令',
suoling_info:'锁定技,回合结束阶段,你解除横置状态,除你之外的所有角色进入横置状态',
xixing:'吸星',
xixing_info:'出牌阶段限一次,你可以弃置三张不同类别的牌,对一名其他角色造成一点伤害,然后回复一点体力',
},
}

BIN
font/huangcao.ttf Normal file

Binary file not shown.

BIN
font/xiaozhuan.ttf Normal file

Binary file not shown.

25
game/background.js Normal file
View File

@ -0,0 +1,25 @@
(function(){
var temp;
try{
temp=JSON.parse(localStorage.getItem('noname_0.9_config'));
}
catch(err){}
if(temp&&temp.background&&temp.background!='default'){
document.querySelector('.background').style.backgroundImage="url('image/background/"+temp.background+".jpg')";
if(temp.background_stretch!=false) document.querySelector('.background').style.backgroundSize="cover";
}
if(temp&&temp.background_filter){
switch (temp.background_filter){
case 'blur':document.querySelector('.background').style.webkitFilter='blur(8px)';
document.querySelector('.background').style.webkitTransform='scale(1.05)';break;
case 'gray':document.querySelector('.background').style.webkitFilter='grayscale(1)';break;
case 'sepia':document.querySelector('.background').style.webkitFilter='sepia(0.5)';break;
case 'invert':document.querySelector('.background').style.webkitFilter='invert(1)';break;
case 'saturate':document.querySelector('.background').style.webkitFilter='saturate(5)';break;
case 'contrast':document.querySelector('.background').style.webkitFilter='contrast(1.4)';break;
case 'hue':document.querySelector('.background').style.webkitFilter='hue-rotate(180deg)';break;
case 'brightness':document.querySelector('.background').style.webkitFilter='brightness(5)';break;
default:document.querySelector('.background').style.webkitFilter='';
}
}
}())

331
game/config.js Normal file
View File

@ -0,0 +1,331 @@
window.config={
forbidai:['zuoci','caiwenji'],
forbidsingle:['huanggai','caoren','machao','pangde','yanwen','xiahoudun','xuzhu','luxun',
'xuhuang','yujin','xiaoqiao','daqiao','zhangjiao','menghuo','zhangbao'],
forbidall:['caocao','simayi','guanyu','zhangfei','zhaoyun','ganning','lvmeng','lvbu',
'xiahouyuan','huangzhong','weiyan','dianwei','gongsunzan'],
forbidversus:['swd_kangnalishi'],
forbiddouble:['zhugedan','swd_kangnalishi','swd_nicole','dongzhuo','jg_simayi'],
all:{
mode:['identity','guozhan','versus'],
characters:['standard','wind','fire','woods','mountain','extra','sp','yijiang','refresh','guozhan','jiange','zhuogui','diy','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'],
theme:['woodden','music'],
card_font:['xiaozhuan','huangcao','caoshu','xingshu'],
double_hp:['hejiansan','pingjun','zuidazhi','zuixiaozhi','zonghe'],
image:{
// card:['default','white'],
character:['default'],
background:['default','huangyueying_bg','zhulian_bg',
'september_bg','xueji_bg','yinxiang_bg','chunhui_bg',
'grass_bg','huangtian_bg'],
background_filter:['default','blur','gray','sepia','invert','saturate','contrast','hue','brightness'],
dynamic_background:['none','round_dybg']
}
},
translate:{
identity:'身份',
guozhan:'国战',
versus:'对决',
changjing:'场景',
mowang:'魔王',
infinity:'无限',
qunyingzhuan:'群英',
swd:'剧情',
standard_card_config:'标准',
ex_card_config:'ex',
extra_card_config:'军争',
guozhan_card_config:'国战',
zhenfa_card_config:'阵法',
qimou_card_config:'奇谋',
yibao_card_config:'异宝',
shenbing_card_config:'神兵',
wanxiang_card_config:'万象',
swd_card_config:'轩辕剑',
shenqi_card_config:'上古神器',
compensate_card_config:'补充卡牌',
refresh_card_config:'界限突破',
standard_character_config:'标准包',
wind_character_config:'风包',
fire_character_config:'火包',
woods_character_config:'林包',
mountain_character_config:'山包',
guozhan_character_config:'国战',
sp_character_config:'SP',
yijiang_character_config:'一将成名',
jiange_character_config:'守卫剑阁',
zhuogui_character_config:'捉鬼驱邪',
refresh_character_config:'界限突破',
diy_character_config:'DIY',
extra_character_config:'神将',
swd_character_config:'轩辕剑',
xswd_character_config:'轩辕剑·二',
yxs_character_config:'英雄杀',
gujian_character_config:'古剑奇谭',
xianjian_character_config:'仙剑',
others_character_config:'其他',
character_play_config:'角色卡牌',
soldier_play_config:'士兵模式',
strategy_play_config:'尔虞我诈',
wuxing_play_config:'五行生克',
sanguozhi:'三国志',
online:'OL',
blur:'模糊',
gray:'黑白',
sepia:'褪色',
invert:'反色',
saturate:'饱和',
contrast:'对比',
hue:'偏色',
brightness:'高亮',
white:'白色',
woodden:'木纹',
music:'音乐',
newlayout:'新版',
jeans:'牛仔',
metro:'极简',
glass:'玻璃',
paper:'宣纸',
dock:'蓝白',
block:'线条',
round:'圆形',
huangyueying_bg:'逐墨',
huangtian_bg:'黄天',
zhulian_bg:'璧合',
xueji_bg:'雪霁',
haian_bg:'海岸',
paper_bg:'木纹',
yinxiang_bg:'印象',
september_bg:'九月',
zhanhuo_bg:'战火',
zhulin_bg:'竹林',
lvyin_bg:'绿茵',
chunhui_bg:'春晖',
grape_bg:'葡萄',
grass_bg:'芳草',
leaf_bg:'新叶',
space_bg:'空间',
round_dybg:'圆环',
none:'无',
cheat_config:'控制台命令',
paused_config:'暂停背景',
change_choice_config:'开启换将卡',
free_choose_config:'开启自由选将',
change_card_config:'开启手气卡',
change_identity_config:'自由选择身份',
swap_config:'死亡后换人',
revive_config:'开启复活',
auto_skill_config:'自动发动常用技能',
auto_confirm_config:'自动确认',
enable_drag_config:'启用拖拽',
hover_all_config:'悬停显示信息',
hover_handcard_config:'悬停手牌显示信息',
duration_config:'AI出牌间隔',
hoveration_config:'悬停时间',
theme_config:'主题',
layout_config:'布局',
mode_config:'游戏模式',
player_number_config:'角色个数',
difficulty_config:'AI对人类态度',
ai_strategy_config:'内奸策略',
ai_identity_config:'身份预知',
keep_max_hp_config:'锁定体力上限',
dierestart_config:'死亡后显示重来',
ban_weak_config:'屏蔽弱将',
easy:'友好',
normal:'一般',
hard:'仇视',
double_character_config:'双将模式',
auto_identity_config:'自动显示身份',
double_hp_config:'双将体力上限',
zuidazhi:'最大',
zuixiaozhi:'最小',
pingjun:'平均',
hejiansan:'相加',
zonghe:'总和',
xiangcheng:'相乘',
card_config:'卡牌图片包',
character_config:'角色头像',
card_font_config:'卡牌字体',
background_config:'游戏背景',
background_filter_config:'背景效果',
background_stretch_config:'背景拉伸',
dynamic_background_config:'动态背景',
show_playerids_config:'显示身份按钮',
show_replay_config:'显示重来按钮',
show_pause_config:'显示暂停按钮',
show_wuxie_config:'显示不询问无懈',
only_fullskin_config:'隐藏非全身皮肤',
hide_card_image_config:'隐藏卡牌背景图',
show_auto_config:'显示托管按钮',
show_name_config:'显示角色名称',
ui_zoom_config:'界面缩放',
show_stat_config:'显示战斗统计',
show_scrollbar_config:'显示滚动条',
mousewheel_config:'滚轮控制手牌',
handcard_scroll_config:'手牌自动滚动',
touchscreen_config:'触屏模式',
fold_card_config:'折叠手牌',
threed_card_config:'立体手牌',
blur_ui_config:'模糊效果',
vertical_scroll_config:'纵向滚动手牌',
animation_config:'动画效果',
right_sidebar_config:'侧栏靠右',
title_config:'标题栏显示信息',
intro_config:'信息符号',
right_click_config:'右键功能',
right_info_config:'右键显示信息',
long_info_config:'长按显示信息',
sort_config:'手牌分类',
reverse_sort_config:'相反排序',
strict_sort_config:'严格排序',
save_progress_config:'自动保存',
enhance_zhu_config:'加强主公',
suit_sort:'颜色',
number_sort:'点数',
type_sort:'类型',
pause:'暂停',
config:'选项',
auto:'托管'
},
ui_zoom:'原始',
duration:500,
hoveration:1000,
cheat:false,
// change_choice:false,
// free_choose:true,
// change_card:false,
// change_identity:true,
// swap:true,
auto_skill:true,
auto_confirm:true,
enable_drag:true,
hover_handcard:true,
hover_all:true,
right_info:true,
long_info:true,
theme:'woodden',
layout:'newlayout',
image:{
// card:'default',
character:'default',
background:'default',
background_stretch:true,
dynamic_background:'none'
},
card_font:'xiaozhuan',
show_name:false,
show_replay:false,
show_pause:true,
show_auto:true,
only_fullskin:true,
show_wuxie:true,
show_stat:true,
show_playerids:true,
show_scrollbar:false,
mousewheel:true,
fold_card:true,
threed_card:false,
vertical_scroll:false,
handcard_scroll:0,
animation:true,
paused:false,
title:false,
right_sidebar:false,
hide_history:false,
modeconfig:false,
gameconfig:false,
appearence:false,
intro:'i',
right_click:'pause',
sort:'type_sort',
cards:['standard','ex','extra','refresh','guozhan'],
characters:['standard','wind','fire','woods','mountain','sp','yijiang','refresh','extra','guozhan'],
plays:[],
mode:'identity',
mode_config:{
global:{
player_number:8,
auto_identity:'关闭',
double_character:false,
save_progress:true,
free_choose:true,
swap:true,
change_identity:true,
},
identity:{
identity:[
['zhu','fan'],
['zhu','nei','fan'],
['zhu','zhong','nei','fan'],
['zhu','zhong','nei','fan','fan'],
['zhu','zhong','nei','fan','fan','fan'],
['zhu','zhong','zhong','nei','fan','fan','fan'],
['zhu','zhong','zhong','nei','fan','fan','fan','fan'],
],
choice:{
zhu:3,
zhong:4,
nei:5,
fan:3,
},
show_identity:true,
difficulty:'normal',
},
guozhan:{
double_hp:'pingjun',
difficulty:'normal',
}
},
game_intro:{
identity:'主公:消灭所有的反贼和内奸,平定天下。<br/>忠臣:不惜一切保护主公,胜利条件与主公相同。'+
'<br/>反贼:杀死主公,推翻统治。<br/>内奸:前期在保护主公的情况下除掉其他人,最后杀死主公成为生还者。',
guozhan:'当全场只剩下一种势力存活时,该势力的角色获胜',
versus:'',
infinity:'',
boss:'',
character_card_config:'',
},
current_mode:{},
forbid:[
['huashen'],
['lingwu','jilve'],
['lingwu','yongsi'],
['lingwu','shangshi'],
['jizhi','zhiheng'],
['xiaoji','zhiheng'],
['relianying','zhiheng'],
['lianying','rende'],
['lianying','qingjian'],
['shanbshi','rende'],
['shanbshi','qingjian'],
['rende','relianying'],
['qingjian','relianying'],
['rende','yuling'],
['qingjian','yuling'],
['qingnang','yiji'],
['qingnang','reyiji'],
['qingjian','tuntian'],
['yiji','tuntian'],
['reyiji','tuntian'],
['tuntian','guidao'],
['tuntian','guicai'],
['jiang','chongzhen'],
['fenji','yuling'],
['jiushi','guixin'],
['jiushi','jushou'],
['jiushi','kuiwei'],
]
}

10947
game/game.js Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

BIN
image/card/bagua.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
image/card/baihupifeng.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
image/card/baiyin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
image/card/bingliang.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
image/card/caoyao.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
image/card/chenhuodajie.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
image/card/chitu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
image/card/chiyuxi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
image/card/cixiong.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
image/card/dawan.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
image/card/dilu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
image/card/dujian.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
image/card/dujian2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
image/card/fangtian.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
image/card/fengxueren.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
image/card/fudichouxin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
image/card/fuxiqin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
image/card/fuxiqin2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
image/card/guanshi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
image/card/guding.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

BIN
image/card/guiyoujie.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
image/card/guohe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
image/card/hanbing.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
image/card/hongshui.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
image/card/hualiu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
image/card/hufu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
image/card/huogong.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
image/card/huoshan.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
image/card/huxinjing.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
image/card/jiedao.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
image/card/jingfanma.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
image/card/jingleishan.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
image/card/jiu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
image/card/juedou.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
image/card/jueying.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
image/card/kongdongyin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
image/card/langeguaiyi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
image/card/lebu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
image/card/lianyaohu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
image/card/liuxinghuoyu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
image/card/muniu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
image/card/nanman.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
image/card/nvwashi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
image/card/pangufu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
image/card/qiankundai.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
image/card/qilin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
image/card/qinggang.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
image/card/qinglong.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
image/card/renwang.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
image/card/sanjian.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
image/card/sha.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Some files were not shown because too many files have changed in this diff Show More