fix up repo layout
This commit is contained in:
commit
15a24799e4
13 changed files with 5279 additions and 0 deletions
13
.gitattributes
vendored
Normal file
13
.gitattributes
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
* text=auto !eol
|
||||||
|
/AUTHORS -text
|
||||||
|
/COPYING -text
|
||||||
|
/ChangeLog -text
|
||||||
|
/LICENSE -text
|
||||||
|
/Makefile.in -text
|
||||||
|
/NEWS -text
|
||||||
|
/README.WarServ -text
|
||||||
|
/configure -text
|
||||||
|
/configure.in -text
|
||||||
|
/install-sh -text
|
||||||
|
/modconfig.h.in -text
|
||||||
|
/warserv.c -text
|
0
AUTHORS
Normal file
0
AUTHORS
Normal file
273
COPYING
Executable file
273
COPYING
Executable file
|
@ -0,0 +1,273 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
|
||||||
|
Version 2, June 1991
|
||||||
|
Copyright © 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
675 Mass Ave, Cambridge, MA 02139, 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 Library 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
|
6
ChangeLog
Normal file
6
ChangeLog
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
WarServ ChangeLog
|
||||||
|
=============================================================================
|
||||||
|
1.0 - Fish
|
||||||
|
- Initial Release. Code Contributed by DeadNotBurried (idontwantthisshit@hotmail.com)
|
||||||
|
- Make game channel configurable.
|
||||||
|
- Standardize on hostname.
|
341
LICENSE
Normal file
341
LICENSE
Normal file
|
@ -0,0 +1,341 @@
|
||||||
|
# $Id: LICENSE,v 1.1 2003/02/18 13:52:06 fishwaldo Exp $
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library 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.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) 19yy <name of author>
|
||||||
|
|
||||||
|
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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) 19yy 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 Library General
|
||||||
|
Public License instead of this License.
|
52
Makefile.in
Normal file
52
Makefile.in
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
#Neostats Module Makefile!
|
||||||
|
CC = @CC@
|
||||||
|
CFLAGS = @CFLAGS@ -g
|
||||||
|
LDFLAGS = @LIBS@
|
||||||
|
INSTALL = @INSTALL@
|
||||||
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
|
DIRECTORY = @DIRINST@/dl/
|
||||||
|
INCLUDES = -I@DIRINST@/include/ -I.
|
||||||
|
|
||||||
|
SRCS= warserv.c
|
||||||
|
OBJS= ${SRCS:.c=.o}
|
||||||
|
TARGET= warserv.so
|
||||||
|
DOCS=README.WarServ
|
||||||
|
SCRIPTS=
|
||||||
|
DATA=
|
||||||
|
DISTFILES=$(SRCS) $(DOCS) $(SCRIPTS) *.in configure install-sh ChangeLog *.h LICENSE
|
||||||
|
DISTDIR= @PACKAGE@-@VERSION@
|
||||||
|
|
||||||
|
all: module
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
$(CC) -c $(CFLAGS) $(INCLUDES) $<
|
||||||
|
|
||||||
|
module: $(OBJS)
|
||||||
|
$(LD) -shared -o $(TARGET) $(LDFLAGS) $(OBJS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
/bin/rm -rf $(TARGET) *.o Makefile *.log modconfig.h
|
||||||
|
|
||||||
|
install: module
|
||||||
|
$(INSTALL) -m 644 $(TARGET) $(DIRECTORY)
|
||||||
|
$(INSTALL) -m 644 $(DOCS) $(DIRECTORY)../doc/
|
||||||
|
|
||||||
|
dist:
|
||||||
|
@echo -n "Creating Directories"
|
||||||
|
@-rm -rf $(DISTDIR)
|
||||||
|
@mkdir $(DISTDIR)
|
||||||
|
@echo "Done"
|
||||||
|
@echo -n "Copying Core Distribution Files"
|
||||||
|
@for file in $(DISTFILES); do \
|
||||||
|
echo -n "."; \
|
||||||
|
cp -pr $$file $(DISTDIR)/$$file; \
|
||||||
|
done
|
||||||
|
@echo "Done"
|
||||||
|
@tar -czf $(DISTDIR).tar.gz $(DISTDIR)/*
|
||||||
|
@echo "Tar file $(DISTDIR).tar.gz created, Freshmeat Time"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$(OBJS): Makefile
|
||||||
|
|
0
NEWS
Normal file
0
NEWS
Normal file
6
README.WarServ
Executable file
6
README.WarServ
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
WarServ 1.0
|
||||||
|
=====================================================================
|
||||||
|
Sorry. No Doco Yet. Hopefully someone will write some for us.
|
||||||
|
|
||||||
|
This module was contributed by DeadNotBurried
|
||||||
|
(idontwantthisshit@hotmail.com)
|
94
configure.in
Normal file
94
configure.in
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
AC_INIT(warserv.c)
|
||||||
|
AC_CONFIG_HEADER(modconfig.h)
|
||||||
|
PACKAGE=WarServ
|
||||||
|
MODULE_MAJOR=1
|
||||||
|
MODULE_MINOR=1
|
||||||
|
VERSION=$MODULE_MAJOR.$MODULE_MINOR
|
||||||
|
AC_DEFINE_UNQUOTED(MODULE_VERSION, "$VERSION")
|
||||||
|
AC_DEFINE_UNQUOTED(MODULE_MAJOR, "$MODULE_MAJOR")
|
||||||
|
AC_DEFINE_UNQUOTED(MODULE_MINOR, "$MODULE_MINOR")
|
||||||
|
DIRINST=~/NeoStats/
|
||||||
|
AC_PREFIX_DEFAULT(~/NeoStats/)
|
||||||
|
CFLAGS="$CFLAGS -O2"
|
||||||
|
|
||||||
|
dnl Checks for programs.
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(Location of NeoStats...)
|
||||||
|
AC_ARG_WITH(neostats,
|
||||||
|
[ --with-neostats=DIR Location of NeoStats installation],
|
||||||
|
[DIRINST=$withval])
|
||||||
|
AC_MSG_RESULT($DIRINST)
|
||||||
|
|
||||||
|
|
||||||
|
AC_CHECK_FILE($DIRINST/include/dl.h,
|
||||||
|
[INCLUDEDIR="$DIRINST/include/"],
|
||||||
|
[AC_MSG_ERROR(Can't find existing NeoStats Installation please supply with --with-neostats option)])
|
||||||
|
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$INCLUDEDIR"
|
||||||
|
dnl Check we are running the latest supported version of NeoStats
|
||||||
|
AC_MSG_CHECKING(Version of NeoStats...)
|
||||||
|
AC_TRY_RUN(
|
||||||
|
[
|
||||||
|
#include <config.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
int main(void) {
|
||||||
|
if (MAJOR >= 2) {
|
||||||
|
if (MINOR >= 5) {
|
||||||
|
if (REV >= 15) {
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
], ns_version_ok='yes',
|
||||||
|
ns_version_ok='no',
|
||||||
|
ns_version_ok='no')
|
||||||
|
if test "$ns_version_ok" = "yes"; then
|
||||||
|
AC_MSG_RESULT(Compatible Version);
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR(This Module requires NeoStats 2.5.13 or Higher)
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
dnl check if we are running with Debug....
|
||||||
|
AC_MSG_CHECKING(Whether to Enable Debuging...)
|
||||||
|
AC_ARG_ENABLE(debug,
|
||||||
|
[ --enable-debug - Enable Debuging],
|
||||||
|
[ case "$enableval" in
|
||||||
|
yes)
|
||||||
|
CFLAGS="$CFLAGS -Wall -ggdb"
|
||||||
|
AC_DEFINE(DEBUG,1)
|
||||||
|
AC_MSG_RESULT(yes - Watch your Log Files)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
esac],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_SUBST(DIRINST)
|
||||||
|
AC_SUBST(CFLAGS)
|
||||||
|
AC_SUBST(PACKAGE)
|
||||||
|
AC_SUBST(VERSION)
|
||||||
|
AC_OUTPUT(Makefile)
|
||||||
|
echo "(*----------------------------------------------------------*)"
|
||||||
|
echo "(| Important Instructions |)"
|
||||||
|
echo "(*----------------------------------------------------------*)"
|
||||||
|
echo "(| Now that configure is complete, type 'make' to compile |)"
|
||||||
|
echo "(| the module. When the compile has completed, type |)"
|
||||||
|
echo "(| 'make install' to install the module. |)"
|
||||||
|
echo "(| For BSD you might need to use 'gmake' and 'gmake install'|)"
|
||||||
|
echo "(*----------------------------------------------------------*)"
|
||||||
|
echo "(| For Support please visit: |)"
|
||||||
|
echo "(| IRC: /server irc.irc-chat.org |)"
|
||||||
|
echo "(| #neostats channel |)"
|
||||||
|
echo "(| WWW: http://www.neostats.net/boards/ |)"
|
||||||
|
echo "(*----------------------------------------------------------*)"
|
||||||
|
echo "(|This Module was written by: |)"
|
||||||
|
echo "(| DeadNotBurried (idontwantthisshit@hotmail.com) |)"
|
||||||
|
echo "(*----------------------------------------------------------*)"
|
251
install-sh
Executable file
251
install-sh
Executable file
|
@ -0,0 +1,251 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# install - install a program, script, or datafile
|
||||||
|
# This comes from X11R5 (mit/util/scripts/install.sh).
|
||||||
|
#
|
||||||
|
# Copyright 1991 by the Massachusetts Institute of Technology
|
||||||
|
#
|
||||||
|
# Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
# documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
# the above copyright notice appear in all copies and that both that
|
||||||
|
# copyright notice and this permission notice appear in supporting
|
||||||
|
# documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
|
# publicity pertaining to distribution of the software without specific,
|
||||||
|
# written prior permission. M.I.T. makes no representations about the
|
||||||
|
# suitability of this software for any purpose. It is provided "as is"
|
||||||
|
# without express or implied warranty.
|
||||||
|
#
|
||||||
|
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||||
|
# `make' implicit rules from creating a file called install from it
|
||||||
|
# when there is no Makefile.
|
||||||
|
#
|
||||||
|
# This script is compatible with the BSD install script, but was written
|
||||||
|
# from scratch. It can only install one file at a time, a restriction
|
||||||
|
# shared with many OS's install programs.
|
||||||
|
|
||||||
|
|
||||||
|
# set DOITPROG to echo to test this script
|
||||||
|
|
||||||
|
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||||
|
doit="${DOITPROG-}"
|
||||||
|
|
||||||
|
|
||||||
|
# put in absolute paths if you don't have them in your path; or use env. vars.
|
||||||
|
|
||||||
|
mvprog="${MVPROG-mv}"
|
||||||
|
cpprog="${CPPROG-cp}"
|
||||||
|
chmodprog="${CHMODPROG-chmod}"
|
||||||
|
chownprog="${CHOWNPROG-chown}"
|
||||||
|
chgrpprog="${CHGRPPROG-chgrp}"
|
||||||
|
stripprog="${STRIPPROG-strip}"
|
||||||
|
rmprog="${RMPROG-rm}"
|
||||||
|
mkdirprog="${MKDIRPROG-mkdir}"
|
||||||
|
|
||||||
|
transformbasename=""
|
||||||
|
transform_arg=""
|
||||||
|
instcmd="$mvprog"
|
||||||
|
chmodcmd="$chmodprog 0755"
|
||||||
|
chowncmd=""
|
||||||
|
chgrpcmd=""
|
||||||
|
stripcmd=""
|
||||||
|
rmcmd="$rmprog -f"
|
||||||
|
mvcmd="$mvprog"
|
||||||
|
src=""
|
||||||
|
dst=""
|
||||||
|
dir_arg=""
|
||||||
|
|
||||||
|
while [ x"$1" != x ]; do
|
||||||
|
case $1 in
|
||||||
|
-c) instcmd="$cpprog"
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-d) dir_arg=true
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-m) chmodcmd="$chmodprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-o) chowncmd="$chownprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-g) chgrpcmd="$chgrpprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-s) stripcmd="$stripprog"
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
*) if [ x"$src" = x ]
|
||||||
|
then
|
||||||
|
src=$1
|
||||||
|
else
|
||||||
|
# this colon is to work around a 386BSD /bin/sh bug
|
||||||
|
:
|
||||||
|
dst=$1
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ x"$src" = x ]
|
||||||
|
then
|
||||||
|
echo "install: no input file specified"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dir_arg" != x ]; then
|
||||||
|
dst=$src
|
||||||
|
src=""
|
||||||
|
|
||||||
|
if [ -d $dst ]; then
|
||||||
|
instcmd=:
|
||||||
|
chmodcmd=""
|
||||||
|
else
|
||||||
|
instcmd=mkdir
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
|
||||||
|
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
||||||
|
# might cause directories to be created, which would be especially bad
|
||||||
|
# if $src (and thus $dsttmp) contains '*'.
|
||||||
|
|
||||||
|
if [ -f $src -o -d $src ]
|
||||||
|
then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
echo "install: $src does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dst" = x ]
|
||||||
|
then
|
||||||
|
echo "install: no destination specified"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If destination is a directory, append the input filename; if your system
|
||||||
|
# does not like double slashes in filenames, you may need to add some logic
|
||||||
|
|
||||||
|
if [ -d $dst ]
|
||||||
|
then
|
||||||
|
dst="$dst"/`basename $src`
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
## this sed command emulates the dirname command
|
||||||
|
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
||||||
|
|
||||||
|
# Make sure that the destination directory exists.
|
||||||
|
# this part is taken from Noah Friedman's mkinstalldirs script
|
||||||
|
|
||||||
|
# Skip lots of stat calls in the usual case.
|
||||||
|
if [ ! -d "$dstdir" ]; then
|
||||||
|
defaultIFS='
|
||||||
|
'
|
||||||
|
IFS="${IFS-${defaultIFS}}"
|
||||||
|
|
||||||
|
oIFS="${IFS}"
|
||||||
|
# Some sh's can't handle IFS=/ for some reason.
|
||||||
|
IFS='%'
|
||||||
|
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||||
|
IFS="${oIFS}"
|
||||||
|
|
||||||
|
pathcomp=''
|
||||||
|
|
||||||
|
while [ $# -ne 0 ] ; do
|
||||||
|
pathcomp="${pathcomp}${1}"
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [ ! -d "${pathcomp}" ] ;
|
||||||
|
then
|
||||||
|
$mkdirprog "${pathcomp}"
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
pathcomp="${pathcomp}/"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dir_arg" != x ]
|
||||||
|
then
|
||||||
|
$doit $instcmd $dst &&
|
||||||
|
|
||||||
|
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
|
||||||
|
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
|
||||||
|
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
|
||||||
|
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
|
||||||
|
else
|
||||||
|
|
||||||
|
# If we're going to rename the final executable, determine the name now.
|
||||||
|
|
||||||
|
if [ x"$transformarg" = x ]
|
||||||
|
then
|
||||||
|
dstfile=`basename $dst`
|
||||||
|
else
|
||||||
|
dstfile=`basename $dst $transformbasename |
|
||||||
|
sed $transformarg`$transformbasename
|
||||||
|
fi
|
||||||
|
|
||||||
|
# don't allow the sed command to completely eliminate the filename
|
||||||
|
|
||||||
|
if [ x"$dstfile" = x ]
|
||||||
|
then
|
||||||
|
dstfile=`basename $dst`
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make a temp file name in the proper directory.
|
||||||
|
|
||||||
|
dsttmp=$dstdir/#inst.$$#
|
||||||
|
|
||||||
|
# Move or copy the file name to the temp name
|
||||||
|
|
||||||
|
$doit $instcmd $src $dsttmp &&
|
||||||
|
|
||||||
|
trap "rm -f ${dsttmp}" 0 &&
|
||||||
|
|
||||||
|
# and set any options; do chmod last to preserve setuid bits
|
||||||
|
|
||||||
|
# If any of these fail, we abort the whole thing. If we want to
|
||||||
|
# ignore errors from any of these, just make sure not to ignore
|
||||||
|
# errors from the above "$doit $instcmd $src $dsttmp" command.
|
||||||
|
|
||||||
|
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
|
||||||
|
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
|
||||||
|
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
|
||||||
|
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
|
||||||
|
|
||||||
|
# Now rename the file to the real destination.
|
||||||
|
|
||||||
|
$doit $rmcmd -f $dstdir/$dstfile &&
|
||||||
|
$doit $mvcmd $dsttmp $dstdir/$dstfile
|
||||||
|
|
||||||
|
fi &&
|
||||||
|
|
||||||
|
|
||||||
|
exit 0
|
11
modconfig.h.in
Normal file
11
modconfig.h.in
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
/* define this to enable debug code for this module */
|
||||||
|
#undef DEBUG
|
||||||
|
|
||||||
|
/* Version number of package */
|
||||||
|
#undef MODULE_VERSION
|
||||||
|
|
||||||
|
/* Major Version */
|
||||||
|
#undef MODULE_MAJOR
|
||||||
|
|
||||||
|
/* Minor Version */
|
||||||
|
#undef MODULE_MINOR
|
788
warserv.c
Normal file
788
warserv.c
Normal file
|
@ -0,0 +1,788 @@
|
||||||
|
/* WarServ War Card Game Bot - NeoStats Addon Module
|
||||||
|
** Copyright (c) 2004 DeadNotBuried
|
||||||
|
**
|
||||||
|
** Released to NeoStats Software 1 April 2004
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "dl.h" /* Required for module */
|
||||||
|
#include "stats.h" /* Required for bot support */
|
||||||
|
#include "log.h" /* Log systems support */
|
||||||
|
#include "conf.h"
|
||||||
|
|
||||||
|
char s_module_bot_name[MAXNICK];
|
||||||
|
char warroom[CHANLEN];
|
||||||
|
char currentwargamestatus[10];
|
||||||
|
int currentwarplayercount;
|
||||||
|
char wplayernick[10][MAXNICK];
|
||||||
|
int wplayercardstotal[10];
|
||||||
|
int wplayercardsinhand[10][52];
|
||||||
|
int wplayercardplayed[10];
|
||||||
|
int warinprogress;
|
||||||
|
int wplayeratwar[10];
|
||||||
|
int wplayerwarcardsplayed[10][3];
|
||||||
|
int wplayerwarcarddisplayed[10];
|
||||||
|
int wstackcards[52];
|
||||||
|
int wstackcardscurrent;
|
||||||
|
int currentplayer;
|
||||||
|
int wpln;
|
||||||
|
int wplnh;
|
||||||
|
char csuit[10];
|
||||||
|
char csuitcolour[10];
|
||||||
|
char csuitcard[10];
|
||||||
|
|
||||||
|
/** Module Info definition
|
||||||
|
* version information about our module
|
||||||
|
* This structure is required for your module to load and run on NeoStats
|
||||||
|
*/
|
||||||
|
ModuleInfo __module_info = {
|
||||||
|
"WarServ",
|
||||||
|
"War Card Game Module For NeoStats",
|
||||||
|
"1.1",
|
||||||
|
__DATE__,
|
||||||
|
__TIME__
|
||||||
|
};
|
||||||
|
|
||||||
|
/** printf version information
|
||||||
|
* respond to the /VERSION command on IRC with this text
|
||||||
|
* This is recommended for your module to load and run on NeoStats
|
||||||
|
*/
|
||||||
|
int new_m_version(char *origin, char **av, int ac)
|
||||||
|
{
|
||||||
|
snumeric_cmd(351, origin, "Module WarServ Loaded, Version: %s %s %s",
|
||||||
|
__module_info.module_version, __module_info.module_build_date,
|
||||||
|
__module_info.module_build_time);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Module function list
|
||||||
|
* A list of IRCd (server) commands that we will respond to
|
||||||
|
* e.g. VERSION
|
||||||
|
* This table is required for your module to load and run on NeoStats
|
||||||
|
* but you do not have to have any functions in it
|
||||||
|
*/
|
||||||
|
Functions __module_functions[] = {
|
||||||
|
{MSG_VERSION, new_m_version, 1},
|
||||||
|
#ifdef HAVE_TOKEN_SUP
|
||||||
|
{TOK_VERSION, new_m_version, 1},
|
||||||
|
#endif
|
||||||
|
{NULL, NULL, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Channel message processing
|
||||||
|
* What do we do with messages in channels
|
||||||
|
* This is required if you want your module to respond to channel messages
|
||||||
|
*/
|
||||||
|
int __ChanMessage(char *origin, char **argv, int argc)
|
||||||
|
{
|
||||||
|
char *tsptr;
|
||||||
|
User *u;
|
||||||
|
char *buf;
|
||||||
|
char *bufchal;
|
||||||
|
if (argc < 1) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (strcasecmp(argv[0], warroom)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
u = finduser(origin);
|
||||||
|
if (!u) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (argc == 2) {
|
||||||
|
if (!strcasecmp(argv[1], "!rules")) {
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "Welcome To War (The Card Game) Ver 0.7 %s", u->nick);
|
||||||
|
prefmsg(u->nick, s_module_bot_name, " ");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "Written By DeadNotBuried");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, " ");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "rules will be added later");
|
||||||
|
} else if (!strcasecmp(argv[1], "!whelp")) {
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "Currently available public WarServ commands");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "===========================================");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "!whelp -- Displays this help");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "!rules -- displays war rules");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "!about -- displays about information");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "!start -- Starts a new game");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "!stop -- Stops the current game");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "!players -- Show current players");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "!turn -- Show who's turn it is");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "join -- Joins the current game");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "play # # # -- Plays the card(s) number");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "!remove -- Removes you from the current game");
|
||||||
|
return 1;
|
||||||
|
} else if (!strcasecmp(argv[1], "!about")) {
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "Welcome To War (The Card Game) v1.0 by DeadNotBuried");
|
||||||
|
return 1;
|
||||||
|
} else if (!strcasecmp(argv[1], "!stop")) {
|
||||||
|
if (strcasecmp(currentwargamestatus, "stopped")) {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0039Stopping Current Game");
|
||||||
|
warstop();
|
||||||
|
}
|
||||||
|
} else if (!strcasecmp(argv[1], "!start")) {
|
||||||
|
if (!strcasecmp(currentwargamestatus, "stopped")) {
|
||||||
|
startcountdowntimer(u->nick);
|
||||||
|
return 1;
|
||||||
|
} else if (currentwarplayercount < 10) {
|
||||||
|
privmsg(argv[0], s_module_bot_name, "\0034A game has already started \0037%s\0034, Type '\2\003Join\2\0034' To Join in.", u->nick);
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
privmsg(argv[0], s_module_bot_name, "\0034A game has already started \0037%s\0034 and all spots are taken. Please try the next game.", u->nick);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if (!strcasecmp(argv[1], "join") || !strcasecmp(argv[1], "j")) {
|
||||||
|
if (!strcasecmp(currentwargamestatus, "starting")) {
|
||||||
|
joinwar(u->nick);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if (!strcasecmp(argv[1], "!Remove")) {
|
||||||
|
if (!strcasecmp(currentwargamestatus, "starting") || !strcasecmp(currentwargamestatus, "started")) {
|
||||||
|
removewar(u->nick);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if (!strcasecmp(argv[1], "!players")) {
|
||||||
|
if (!strcasecmp(currentwargamestatus, "started")) {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0039Current Players are\0038 :\0037 %s %s %s %s %s %s %s %s %s %s", wplayernick[0], wplayernick[1], wplayernick[2], wplayernick[3], wplayernick[4], wplayernick[5], wplayernick[6], wplayernick[7], wplayernick[8], wplayernick[9]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if (!strcasecmp(argv[1], "!turn")) {
|
||||||
|
if (!strcasecmp(currentwargamestatus, "started")) {
|
||||||
|
if (warinprogress == 1) {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0039The Current Player is \0037%s\0039 holding\00311 %d\0039 cards, and are currently at \0034WAR\0039 which three would you like to play ?", wplayernick[currentplayer], wplayercardstotal[currentplayer]);
|
||||||
|
} else {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0039The Current Player is \0037%s\0039 currently holding\00311 %d\0039 cards, which would you like to play ?", wplayernick[currentplayer], wplayercardstotal[currentplayer]);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (argc > 2) {
|
||||||
|
if ((!strcasecmp(argv[1], "play") || !strcasecmp(argv[1], "p")) && !strcasecmp(u->nick,wplayernick[currentplayer]) && !strcasecmp(currentwargamestatus, "started")) {
|
||||||
|
if (warinprogress == 1) {
|
||||||
|
if (argc == 5) {
|
||||||
|
playwarcards(argv[2], argv[3], argv[4]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (argc == 3) {
|
||||||
|
playcard(argv[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
} else if (!strcasecmp(argv[1], "!Remove")) {
|
||||||
|
if (!strcasecmp(currentwargamestatus, "starting") || !strcasecmp(currentwargamestatus, "started")) {
|
||||||
|
removewarother(u->nick, argv[2]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Bot message processing
|
||||||
|
* What do we do with messages sent to our bot with /mag
|
||||||
|
* This is required if you want your module to respond to /msg
|
||||||
|
*/
|
||||||
|
int __BotMessage(char *origin, char **argv, int argc)
|
||||||
|
{
|
||||||
|
User *u;
|
||||||
|
char *bufchal;
|
||||||
|
u = finduser(origin);
|
||||||
|
if (!u) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (strcasecmp(argv[0], s_module_bot_name)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (argc >= 2) {
|
||||||
|
if (!strcasecmp(argv[1], "help")) {
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "Currently available commands are all public commands");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "To see currently available public commands");
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "type !whelp in the main channel ( %s )", warroom);
|
||||||
|
if (UserLevel(u) >= NS_ULEVEL_OPER) {
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "\2CHAN <channel>\2 - Swap WarGame Channel to <channel>");
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
} else if (!strcasecmp(argv[1], "CHAN")) {
|
||||||
|
privmsg(warroom, s_module_bot_name, "%s has moved the Game room to %s, Please Go there now to continue the game", u->nick, argv[2]);
|
||||||
|
spart_cmd(s_module_bot_name, warroom);
|
||||||
|
strlcpy(warroom, argv[2], CHANLEN);
|
||||||
|
sjoin_cmd(s_module_bot_name, warroom);
|
||||||
|
schmode_cmd(s_module_bot_name, warroom, "+o", s_module_bot_name);
|
||||||
|
SET_SEGV_INMODULE("WarServ");
|
||||||
|
SetConf((void *)warroom, CFGSTR, "WarRoom");
|
||||||
|
return NS_SUCCESS;
|
||||||
|
} else {
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "Invalid Command. /msg %s help for more info", s_module_bot_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
prefmsg(u->nick, s_module_bot_name, "'/msg %s help' to list commands", s_module_bot_name);
|
||||||
|
bufchal = joinbuf(argv, argc, 1);
|
||||||
|
chanalert(s_module_bot_name, "\0038Recieved Private Message from\0037 %s\0038 :\003 %s", u->nick, bufchal);
|
||||||
|
free(bufchal);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Online event processing
|
||||||
|
* What we do when we first come online
|
||||||
|
*/
|
||||||
|
int Online(char **av, int ac)
|
||||||
|
{
|
||||||
|
char *tmp;
|
||||||
|
/* Introduce a bot onto the network */
|
||||||
|
if (init_bot(s_module_bot_name, "WarServ", me.host, "War Game Service", "+oSq",
|
||||||
|
__module_info.module_name) == -1) {
|
||||||
|
/* nick was in use */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
srand((unsigned int)time(NULL));
|
||||||
|
/* channel to play game in */
|
||||||
|
if (GetConf((void *)&tmp, CFGSTR, "WarRoom") <= 0) {
|
||||||
|
strlcpy(warroom, "#Games", CHANLEN);
|
||||||
|
} else {
|
||||||
|
strlcpy(warroom, tmp, CHANLEN);
|
||||||
|
}
|
||||||
|
chanalert(s_module_bot_name, "Game will start in %s", warroom);
|
||||||
|
sjoin_cmd(s_module_bot_name, warroom);
|
||||||
|
schmode_cmd(s_module_bot_name, warroom, "+o", s_module_bot_name);
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Nick Change Check
|
||||||
|
*/
|
||||||
|
int PlayerNickChange(char **av, int ac) {
|
||||||
|
if (currentwarplayercount < 1) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
for (wpln = 0; wpln < currentwarplayercount; wpln++) {
|
||||||
|
if (!strcasecmp(wplayernick[wpln], av[0])) {
|
||||||
|
strncpy(wplayernick[wpln], av[1], MAXNICK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Module event list
|
||||||
|
* What events we will act on
|
||||||
|
* This is required if you want your module to respond to events on IRC
|
||||||
|
* see modules.txt for a list of all events available
|
||||||
|
*/
|
||||||
|
EventFnList __module_events[] = {
|
||||||
|
{EVENT_ONLINE, Online},
|
||||||
|
{EVENT_NICKCHANGE, PlayerNickChange},
|
||||||
|
{NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Init module
|
||||||
|
* This is required if you need to do initialisation of your module when
|
||||||
|
* first loaded
|
||||||
|
*/
|
||||||
|
int __ModInit(int modnum, int apiver)
|
||||||
|
{
|
||||||
|
strncpy(s_module_bot_name, "WarServ", MAXNICK);
|
||||||
|
stopwar();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Exit module
|
||||||
|
* This is required if you need to do cleanup of your module when it ends
|
||||||
|
*/
|
||||||
|
void __ModFini()
|
||||||
|
{
|
||||||
|
del_mod_timer("wartimer");
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Deal Cards
|
||||||
|
*/
|
||||||
|
|
||||||
|
int wardealcards() {
|
||||||
|
int cd;
|
||||||
|
int cnd;
|
||||||
|
int cndn;
|
||||||
|
int ptdt = 0;
|
||||||
|
for (wpln = 0; wpln < 52; wpln++) {
|
||||||
|
wstackcards[wpln]= wpln;
|
||||||
|
}
|
||||||
|
for (cd = 52; cd > 0; cd--) {
|
||||||
|
cnd= rand() % cd;
|
||||||
|
cndn= wstackcards[cnd];
|
||||||
|
for (wpln = cnd; wpln < (cd - 1); wpln++) {
|
||||||
|
wstackcards[wpln]= wstackcards[(wpln + 1)];
|
||||||
|
}
|
||||||
|
wstackcards[(cd - 1)]= 0;
|
||||||
|
wplayercardsinhand[ptdt][wplayercardstotal[ptdt]]= cndn;
|
||||||
|
wplayercardstotal[ptdt]++;
|
||||||
|
ptdt++;
|
||||||
|
if (ptdt == currentwarplayercount) {
|
||||||
|
ptdt= 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Shuffle Players Cards
|
||||||
|
*/
|
||||||
|
|
||||||
|
int playershufflecards() {
|
||||||
|
int tcs;
|
||||||
|
int tcsp;
|
||||||
|
int tcsps;
|
||||||
|
for (wpln = 0; wpln < currentwarplayercount; wpln++) {
|
||||||
|
for (wplnh = 0; wplnh < wplayercardstotal[wpln]; wplnh++) {
|
||||||
|
tcsps= 0;
|
||||||
|
tcsp= rand() % wplayercardstotal[wpln];
|
||||||
|
if (tcsp == wplnh) {
|
||||||
|
tcsps= 1;
|
||||||
|
}
|
||||||
|
if (tcsps == 0) {
|
||||||
|
tcs= wplayercardsinhand[wpln][tcsp];
|
||||||
|
wplayercardsinhand[wpln][tcsp] = wplayercardsinhand[wpln][wplnh];
|
||||||
|
wplayercardsinhand[wpln][wplnh] = tcs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Stop Game
|
||||||
|
* resets everything to default as if no game running
|
||||||
|
*/
|
||||||
|
|
||||||
|
int stopwar() {
|
||||||
|
del_mod_timer("wartimer");
|
||||||
|
for (wpln = 0; wpln < 10; wpln++) {
|
||||||
|
strncpy(wplayernick[wpln], " ", MAXNICK);
|
||||||
|
wplayercardstotal[wpln]= 0;
|
||||||
|
wplayercardplayed[wpln]= 0;
|
||||||
|
wplayeratwar[wpln]= 0;
|
||||||
|
wplayerwarcarddisplayed[wpln]= 0;
|
||||||
|
for (wplnh = 0; wplnh < 52; wplnh++) {
|
||||||
|
wplayercardsinhand[wpln][wplnh]= 0;
|
||||||
|
}
|
||||||
|
for (wplnh = 0; wplnh < 3; wplnh++) {
|
||||||
|
wplayerwarcardsplayed[wpln][wplnh]= 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (wpln = 0; wpln < 52; wpln++) {
|
||||||
|
wstackcards[wpln]= 0;
|
||||||
|
}
|
||||||
|
warinprogress= 0;
|
||||||
|
wstackcardscurrent= 0;
|
||||||
|
currentwarplayercount = 0;
|
||||||
|
strncpy(currentwargamestatus, "Stopped", 10);
|
||||||
|
currentplayer= 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Start Game Countdown
|
||||||
|
* Starts a timer to allow 30 seconds for people to join the game
|
||||||
|
*/
|
||||||
|
|
||||||
|
int startcountdowntimer(char *nic) {
|
||||||
|
strncpy(currentwargamestatus, "starting", 10);
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0037A new game of \0034WAR\0037 has been started by %s. Game will start in 30 seconds, type '\2\003Join\2\0037' to play.", nic);
|
||||||
|
add_mod_timer("startwar", "wartimer", __module_info.module_name, 30);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Start Game
|
||||||
|
* Initializes variables and starts game
|
||||||
|
*/
|
||||||
|
|
||||||
|
void startwar() {
|
||||||
|
del_mod_timer("wartimer");
|
||||||
|
if (!strcasecmp(currentwargamestatus, "starting")) {
|
||||||
|
if (currentwarplayercount < 1) {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0034No Players joined to current Game, Exiting");
|
||||||
|
stopwar();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (currentwarplayercount < 10) {
|
||||||
|
joinwar(s_module_bot_name);
|
||||||
|
}
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0034WAR\00310 is now starting, current players are \0037%s %s %s %s %s %s %s %s %s %s", wplayernick[0], wplayernick[1], wplayernick[2], wplayernick[3], wplayernick[4], wplayernick[5], wplayernick[6], wplayernick[7], wplayernick[8], wplayernick[9]);
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0039Shuffling Deck and Dealing Cards");
|
||||||
|
currentplayer= 0;
|
||||||
|
strncpy(currentwargamestatus, "started", 10);
|
||||||
|
wardealcards();
|
||||||
|
wstackcardscurrent= 0;
|
||||||
|
askplaycard();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Join Game
|
||||||
|
* adds new player to game during countdown
|
||||||
|
*/
|
||||||
|
|
||||||
|
int joinwar(char *nic) {
|
||||||
|
if (currentwarplayercount < 10) {
|
||||||
|
for (wpln = 0; wpln < 10; wpln++) {
|
||||||
|
if (!strcasecmp(wplayernick[wpln], nic)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
strncpy(wplayernick[currentwarplayercount], nic, MAXNICK);
|
||||||
|
currentwarplayercount++;
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0038Welcome to \0034WAR \0037%s", nic);
|
||||||
|
} else {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0034Sorry all places are filled \0037%s\0034, your welcome to try the next game though", nic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remove Nick ( Not Online )
|
||||||
|
* allows removal of a player by anyone if player no longer connected to ircd
|
||||||
|
*/
|
||||||
|
|
||||||
|
int removewarother(char *nic, char *ntr) {
|
||||||
|
User *u;
|
||||||
|
u = finduser(ntr);
|
||||||
|
if (!u) {
|
||||||
|
removewar(ntr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remove PLayer
|
||||||
|
* removes player from game and adds any cards they have to the stack
|
||||||
|
*/
|
||||||
|
|
||||||
|
int removewar(char *nic) {
|
||||||
|
int tfrpacp;
|
||||||
|
int tfrpacpn;
|
||||||
|
int wplnht;
|
||||||
|
int cpfp;
|
||||||
|
tfrpacp= 0;
|
||||||
|
tfrpacpn= 0;
|
||||||
|
if (currentwarplayercount < 1) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
for (wpln = 0; wpln < currentwarplayercount; wpln++) {
|
||||||
|
if (!strcasecmp(wplayernick[wpln], nic)) {
|
||||||
|
if (wpln == currentplayer) {
|
||||||
|
tfrpacp= 1;
|
||||||
|
} else if (wpln < currentplayer) {
|
||||||
|
tfrpacp= 2;
|
||||||
|
tfrpacpn= wpln;
|
||||||
|
}
|
||||||
|
for (wplnht = 0; wplnht < wplayercardstotal[wpln]; wplnht++) {
|
||||||
|
wstackcards[wstackcardscurrent]= wplayercardsinhand[wpln][wplnht];
|
||||||
|
wstackcardscurrent++;
|
||||||
|
}
|
||||||
|
for (wplnh = wpln; wplnh < currentwarplayercount; wplnh++) {
|
||||||
|
cpfp= (wplnh + 1);
|
||||||
|
if (cpfp == currentwarplayercount) {
|
||||||
|
strncpy(wplayernick[wplnh], " ", MAXNICK);
|
||||||
|
for (wplnht = 0; wplnht < wplayercardstotal[wplnh]; wplnht++) {
|
||||||
|
wplayercardsinhand[wplnh][wplnht]= 0;
|
||||||
|
}
|
||||||
|
wplayercardstotal[wplnh]= 0;
|
||||||
|
} else {
|
||||||
|
strncpy(wplayernick[wplnh], wplayernick[cpfp], MAXNICK);
|
||||||
|
for (wplnht = 0; wplnht < 52; wplnht++) {
|
||||||
|
wplayercardsinhand[wplnh][wplnht]= wplayercardsinhand[cpfp][wplnht];
|
||||||
|
}
|
||||||
|
wplayercardstotal[wplnh]= wplayercardstotal[cpfp];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
currentwarplayercount--;
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0037%s \0038Removed from the current game of \0034War", nic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (currentwarplayercount < 2) {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0039Stopping Current Game , \0037%s\0039 wins.", wplayernick[0]);
|
||||||
|
stopwar();
|
||||||
|
} else if (tfrpacp == 1) {
|
||||||
|
if (currentplayer > (currentwarplayercount - 1)) {
|
||||||
|
currentplayer= 0;
|
||||||
|
}
|
||||||
|
if (strcasecmp(currentwargamestatus, "starting")) {
|
||||||
|
askplaycard();
|
||||||
|
}
|
||||||
|
} else if (tfrpacp == 2) {
|
||||||
|
if (currentplayer > tfrpacpn) {
|
||||||
|
currentplayer--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* asks each player for card to play
|
||||||
|
* or check war results if in war
|
||||||
|
* or removes player if no cards left
|
||||||
|
*/
|
||||||
|
|
||||||
|
int askplaycard() {
|
||||||
|
int trn;
|
||||||
|
int wspa[5];
|
||||||
|
char wspas[5][3];
|
||||||
|
int nwp = (currentwarplayercount + 1);
|
||||||
|
if (wplayercardstotal[currentplayer] == 0) {
|
||||||
|
removewar(wplayernick[currentplayer]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (wplayercardstotal[currentplayer] == 52) {
|
||||||
|
currentplayer++;
|
||||||
|
removewar(wplayernick[currentplayer]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (warinprogress == 1) {
|
||||||
|
if (currentplayer < currentwarplayercount) {
|
||||||
|
for (wpln = currentplayer; wpln < currentwarplayercount; wpln++) {
|
||||||
|
if (wplayeratwar[wpln] == 1) {
|
||||||
|
nwp= wpln;
|
||||||
|
wpln= currentwarplayercount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (nwp > currentwarplayercount) {
|
||||||
|
checkwarwinner();
|
||||||
|
} else {
|
||||||
|
if (!strcasecmp(wplayernick[currentplayer], s_module_bot_name)) {
|
||||||
|
trn= wplayercardstotal[currentplayer];
|
||||||
|
wspa[2]= ((rand() % trn) + 1);
|
||||||
|
trn--;
|
||||||
|
wspa[3]= ((rand() % trn) + 1);
|
||||||
|
if (wspa[3] == wspa[2]) {
|
||||||
|
wspa[3]++;
|
||||||
|
}
|
||||||
|
trn--;
|
||||||
|
wspa[4]= ((rand() % trn) + 1);
|
||||||
|
if ((wspa[4] == wspa[2]) || (wspa[4] == wspa[3])) {
|
||||||
|
wspa[4]++;
|
||||||
|
}
|
||||||
|
if ((wspa[4] == wspa[2]) || (wspa[4] == wspa[3])) {
|
||||||
|
wspa[4]++;
|
||||||
|
}
|
||||||
|
for (wpln = 2; wpln < 5; wpln++) {
|
||||||
|
snprintf(wspas[wpln], 3, "%d", wspa[wpln]);
|
||||||
|
}
|
||||||
|
playwarcards(wspas[2], wspas[3], wspas[4]);
|
||||||
|
} else {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0037%s\0039 you hold\00311 %d\0039 cards, and are currently at \0034WAR\0039 which three would you like to play ?", wplayernick[currentplayer], wplayercardstotal[currentplayer]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!strcasecmp(wplayernick[currentplayer], s_module_bot_name)) {
|
||||||
|
snprintf(wspas[0], 3, "%d", ((rand() % wplayercardstotal[currentplayer]) + 1));
|
||||||
|
playcard(wspas[0]);
|
||||||
|
} else {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0037%s\0039 you currently hold\00311 %d\0039 cards, which would you like to play ?", wplayernick[currentplayer], wplayercardstotal[currentplayer]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Player War Play Card
|
||||||
|
*/
|
||||||
|
|
||||||
|
int playwarcards(char *cnps1, char *cnps2, char *cnps3) {
|
||||||
|
int cnp[3];
|
||||||
|
char *tempint;
|
||||||
|
cnp[0] = atoi(cnps1);
|
||||||
|
cnp[1] = atoi(cnps2);
|
||||||
|
cnp[2] = atoi(cnps3);
|
||||||
|
for (wpln = 0; wpln < 3; wpln++) {
|
||||||
|
if ((cnp[wpln] < 1) || (cnp[wpln] > wplayercardstotal[currentplayer])) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (wplayercardsinhand[currentplayer][(cnp[2] - 1)] < 13) {
|
||||||
|
strncpy(csuitcolour, "\0034", 10);
|
||||||
|
strncpy(csuit, "Hearts", 10);
|
||||||
|
} else if (wplayercardsinhand[currentplayer][(cnp[2] - 1)] < 26) {
|
||||||
|
strncpy(csuitcolour, "\0037", 10);
|
||||||
|
strncpy(csuit, "Diamonds", 10);
|
||||||
|
} else if (wplayercardsinhand[currentplayer][(cnp[2] - 1)] < 39) {
|
||||||
|
strncpy(csuitcolour, "\00314", 10);
|
||||||
|
strncpy(csuit, "Clubs", 10);
|
||||||
|
} else {
|
||||||
|
strncpy(csuitcolour, "\00315", 10);
|
||||||
|
strncpy(csuit, "Spades", 10);
|
||||||
|
}
|
||||||
|
switch ((wplayercardsinhand[currentplayer][(cnp[2] - 1)] % 13)) {
|
||||||
|
case 12:
|
||||||
|
strncpy(csuitcard, "Ace", 10);
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
strncpy(csuitcard, "King", 10);
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
strncpy(csuitcard, "Queen", 10);
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
strncpy(csuitcard, "Jack", 10);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
snprintf(csuitcard, 10, "%d", ((wplayercardsinhand[currentplayer][(cnp[2] - 1)] % 13) + 2));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0037%s\0039 played Cards\00311 %d , %d , %d \0039(%s %s of %s \0039)", wplayernick[currentplayer], cnp[0], cnp[1], cnp[2], csuitcolour, csuitcard, csuit);
|
||||||
|
for (wpln = 0; wpln < 3; wpln++) {
|
||||||
|
cnp[wpln]--;
|
||||||
|
wstackcards[wstackcardscurrent]= wplayercardsinhand[currentplayer][cnp[wpln]];
|
||||||
|
wstackcardscurrent++;
|
||||||
|
wplayerwarcardsplayed[currentplayer][wpln]= wplayercardsinhand[currentplayer][cnp[wpln]];
|
||||||
|
wplayercardstotal[currentplayer]--;
|
||||||
|
for (wplnh = cnp[wpln]; wplnh < wplayercardstotal[currentplayer]; wplnh++) {
|
||||||
|
wplayercardsinhand[currentplayer][wplnh]= wplayercardsinhand[currentplayer][(wplnh +1)];
|
||||||
|
}
|
||||||
|
wplayercardsinhand[currentplayer][wplayercardstotal[currentplayer]]= 0;
|
||||||
|
}
|
||||||
|
currentplayer++;
|
||||||
|
if (currentplayer < currentwarplayercount) {
|
||||||
|
askplaycard();
|
||||||
|
} else {
|
||||||
|
checkwarwinner();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Player Plays Card
|
||||||
|
*/
|
||||||
|
|
||||||
|
int playcard(char *cnps) {
|
||||||
|
int cnp;
|
||||||
|
cnp = atoi(cnps);
|
||||||
|
if ((cnp > 0) && (cnp < (wplayercardstotal[currentplayer] + 1))){
|
||||||
|
if (wplayercardsinhand[currentplayer][(cnp - 1)] < 13) {
|
||||||
|
strncpy(csuitcolour, "\0034", 10);
|
||||||
|
strncpy(csuit, "Hearts", 10);
|
||||||
|
} else if (wplayercardsinhand[currentplayer][(cnp - 1)] < 26) {
|
||||||
|
strncpy(csuitcolour, "\0037", 10);
|
||||||
|
strncpy(csuit, "Diamonds", 10);
|
||||||
|
} else if (wplayercardsinhand[currentplayer][(cnp - 1)] < 39) {
|
||||||
|
strncpy(csuitcolour, "\00314", 10);
|
||||||
|
strncpy(csuit, "Clubs", 10);
|
||||||
|
} else {
|
||||||
|
strncpy(csuitcolour, "\00315", 10);
|
||||||
|
strncpy(csuit, "Spades", 10);
|
||||||
|
}
|
||||||
|
switch ((wplayercardsinhand[currentplayer][(cnp - 1)] % 13)) {
|
||||||
|
case 12:
|
||||||
|
strncpy(csuitcard, "Ace", 10);
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
strncpy(csuitcard, "King", 10);
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
strncpy(csuitcard, "Queen", 10);
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
strncpy(csuitcard, "Jack", 10);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
snprintf(csuitcard, 10, "%d", ((wplayercardsinhand[currentplayer][(cnp - 1)] % 13) + 2));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0037%s\0039 played Card\00311 %d \0039(%s %s of %s \0039)", wplayernick[currentplayer], cnp, csuitcolour, csuitcard, csuit);
|
||||||
|
cnp--;
|
||||||
|
wstackcards[wstackcardscurrent]= wplayercardsinhand[currentplayer][cnp];
|
||||||
|
wstackcardscurrent++;
|
||||||
|
wplayercardplayed[currentplayer]= wplayercardsinhand[currentplayer][cnp];
|
||||||
|
wplayercardstotal[currentplayer]--;
|
||||||
|
for (wpln = cnp; wpln < wplayercardstotal[currentplayer]; wpln++) {
|
||||||
|
wplayercardsinhand[currentplayer][wpln]= wplayercardsinhand[currentplayer][(wpln +1)];
|
||||||
|
}
|
||||||
|
wplayercardsinhand[currentplayer][wplayercardstotal[currentplayer]]= 0;
|
||||||
|
currentplayer++;
|
||||||
|
if (currentplayer < currentwarplayercount) {
|
||||||
|
askplaycard();
|
||||||
|
} else {
|
||||||
|
checkhandwinner();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Checks standard hand for a winner (not a war hand)
|
||||||
|
*/
|
||||||
|
|
||||||
|
int checkhandwinner() {
|
||||||
|
int hcnp = 0;
|
||||||
|
int hcnpt = 0;
|
||||||
|
for (wpln = 0; wpln < currentwarplayercount; wpln++) {
|
||||||
|
if (warinprogress == wplayeratwar[wpln]) {
|
||||||
|
if ((wplayercardplayed[wpln] % 13) > hcnp) {
|
||||||
|
hcnp = (wplayercardplayed[wpln] % 13);
|
||||||
|
hcnpt = 1;
|
||||||
|
} else if ((wplayercardplayed[wpln] % 13) == hcnp) {
|
||||||
|
hcnpt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hcnpt == 1) {
|
||||||
|
for (wpln = 0; wpln < currentwarplayercount; wpln++) {
|
||||||
|
if (warinprogress == wplayeratwar[wpln]) {
|
||||||
|
if ((wplayercardplayed[wpln] % 13) == hcnp) {
|
||||||
|
if (warinprogress == 1) {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0037%s\0039 wins the \0034WAR\0039.", wplayernick[wpln]);
|
||||||
|
} else {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0037%s\0039 takes the hand.", wplayernick[wpln]);
|
||||||
|
}
|
||||||
|
for (wplnh = 0; wplnh < wstackcardscurrent; wplnh++) {
|
||||||
|
wplayercardsinhand[wpln][wplayercardstotal[wpln]]= wstackcards[wplnh];
|
||||||
|
wplayercardstotal[wpln]++;
|
||||||
|
}
|
||||||
|
clearstack();
|
||||||
|
wpln= currentwarplayercount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (wpln = 0; wpln < currentwarplayercount; wpln++) {
|
||||||
|
wplayeratwar[wpln]= 0;
|
||||||
|
}
|
||||||
|
warinprogress= 0;
|
||||||
|
} else {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0034WAR DECLARED");
|
||||||
|
for (wpln = 0; wpln < currentwarplayercount; wpln++) {
|
||||||
|
if ((wplayercardplayed[wpln] % 13) == hcnp) {
|
||||||
|
if (wplayercardstotal[wpln] < 3) {
|
||||||
|
privmsg(warroom, s_module_bot_name, "\0037%s\0038 Surrenders\0039 (Insufficient Cards)", wplayernick[wpln]);
|
||||||
|
hcnpt--;
|
||||||
|
removewar(wplayernick[wpln]);
|
||||||
|
if (currentwarplayercount < 2) {
|
||||||
|
wpln= currentwarplayercount;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
wplayeratwar[wpln]= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
warinprogress= 1;
|
||||||
|
}
|
||||||
|
currentplayer= 0;
|
||||||
|
playershufflecards();
|
||||||
|
askplaycard();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* copy war hand to normal for checking
|
||||||
|
*/
|
||||||
|
|
||||||
|
int checkwarwinner() {
|
||||||
|
for (wpln = 0; wpln < currentwarplayercount; wpln++) {
|
||||||
|
if (wplayeratwar[wpln] == 1) {
|
||||||
|
wplayercardplayed[wpln]= wplayerwarcardsplayed[wpln][2];
|
||||||
|
for (wplnh = 0; wplnh < 3; wplnh++) {
|
||||||
|
wplayerwarcardsplayed[wpln][wplnh]= 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
checkhandwinner();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* clears the stack
|
||||||
|
*/
|
||||||
|
|
||||||
|
int clearstack() {
|
||||||
|
for (wpln = 0; wpln < 52; wpln++) {
|
||||||
|
wstackcards[wpln]= 0;
|
||||||
|
}
|
||||||
|
wstackcardscurrent= 0;
|
||||||
|
}
|
Reference in a new issue