noname 1.0.0.1
339
LICENSE
|
@ -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.
|
|
@ -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"],
|
||||
],
|
||||
}
|
|
@ -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'],
|
||||
],
|
||||
}
|
|
@ -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')&¤t<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"],
|
||||
],
|
||||
}
|
|
@ -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'],
|
||||
],
|
||||
}
|
|
@ -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'],
|
||||
],
|
||||
}
|
|
@ -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'],
|
||||
],
|
||||
}
|
|
@ -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'],
|
||||
],
|
||||
}
|
|
@ -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'],
|
||||
],
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
card.wanxiang={
|
||||
card:{
|
||||
|
||||
},
|
||||
skill:{
|
||||
|
||||
},
|
||||
translate:{
|
||||
|
||||
},
|
||||
list:[
|
||||
|
||||
],
|
||||
}
|
|
@ -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'],
|
||||
],
|
||||
}
|
|
@ -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'],
|
||||
],
|
||||
}
|
|
@ -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:'回合结束阶段,你可以将手牌数补至X,X为现存的势力数',
|
||||
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:'锁定技,在身份局中,在你回合内死亡的角色均视为反贼,国战中,在你回合内死亡的角色若与你势力相同则随机改为另一个势力',
|
||||
},
|
||||
}
|
|
@ -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:{
|
||||
|
||||
}
|
||||
}
|
|
@ -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']],
|
||||
},
|
||||
};
|
|
@ -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为你回合内使用的卡牌数',
|
||||
|
||||
},
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
御剑+诸方神石
|
||||
诸葛诞 观星 安恤 利奴
|
||||
|
||||
赛特
|
||||
徐暮云
|
||||
皇甫朝云
|
||||
云天河
|
||||
拓跋玉儿
|
||||
慕容诗
|
||||
慕容紫英
|
||||
水镜
|
||||
|
||||
柳梦璃
|
||||
壶中仙
|
||||
古月圣
|
||||
轩辕剑仙
|
||||
于小雪
|
||||
方兰生
|
||||
|
||||
独孤宁珂
|
||||
王思月
|
||||
陈靖仇
|
||||
车芸
|
||||
阿阮
|
|
@ -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点体力,然后该角色摸两张牌。'
|
||||
},
|
||||
}
|
|
@ -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:'你不能成为♠或♣锦囊的目标。',
|
||||
},
|
||||
}
|
|
@ -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']],
|
||||
},
|
||||
}
|
|
@ -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,伤害+1;2,额外指定两个目标',
|
||||
xiaoyong:'骁勇',
|
||||
xiaoyong_info:'你可以将黑色手牌当作【杀】来使用',
|
||||
qinzheng:'亲征',
|
||||
qinzheng_info:'出牌阶段,你对其他角色造成伤害时,可以令场上任意角色摸一张牌。',
|
||||
juma:'拒马',
|
||||
juma_info:'你与其他角色的距离始终视为1。',
|
||||
},
|
||||
};
|
|
@ -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')&¤t<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:'出牌阶段限一次,你可以弃置三张不同类别的牌,对一名其他角色造成一点伤害,然后回复一点体力',
|
||||
},
|
||||
}
|
|
@ -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='';
|
||||
}
|
||||
}
|
||||
}())
|
|
@ -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'],
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 462 KiB |
After Width: | Height: | Size: 324 KiB |
After Width: | Height: | Size: 188 KiB |
After Width: | Height: | Size: 368 KiB |
After Width: | Height: | Size: 1.1 MiB |
After Width: | Height: | Size: 219 KiB |
After Width: | Height: | Size: 563 KiB |
After Width: | Height: | Size: 189 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 7.8 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 8.1 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 9.4 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 35 KiB |