From 354b07d50e8e0023533e68f776a23655cdaf2fdf Mon Sep 17 00:00:00 2001 From: magenoxx <magenoxx@gmail> Date: Thu, 28 Jun 2012 19:32:32 +0400 Subject: [PATCH] Draft bot - only draft picks, will be auto eliminated and doesn't participate in tournament --- .../Mage.Player.AI.DraftBot/pom.xml | 56 +++++++++++++++ .../mage/player/ai/ComputerDraftPlayer.java | 68 ++++++++++++++++++ Mage.Server.Plugins/pom.xml | 1 + Mage.Server/config/config.xml | 1 + .../plugins/mage-player-ai-draft-bot.jar | Bin 0 -> 2945 bytes Mage.Server/plugins/mage-player-ai-ma.jar | Bin 62799 -> 62799 bytes Mage.Server/plugins/mage-player-ai.jar | Bin 55905 -> 55945 bytes Mage.Server/plugins/mage-player-aimcts.jar | Bin 28467 -> 28463 bytes Mage.Server/plugins/mage-player-aiminimax.jar | Bin 39937 -> 39932 bytes Mage.Server/plugins/mage-player-human.jar | Bin 13534 -> 13535 bytes .../tournament/TournamentController.java | 7 +- .../mage/game/tournament/TournamentImpl.java | 30 ++++---- .../game/tournament/TournamentPairing.java | 13 +++- .../TournamentSingleElimination.java | 11 +++ Mage/src/mage/players/Player.java | 1 + Mage/src/mage/players/PlayerImpl.java | 5 ++ 16 files changed, 176 insertions(+), 17 deletions(-) create mode 100644 Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml create mode 100644 Mage.Server.Plugins/Mage.Player.AI.DraftBot/src/mage/player/ai/ComputerDraftPlayer.java create mode 100644 Mage.Server/plugins/mage-player-ai-draft-bot.jar diff --git a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml new file mode 100644 index 0000000000..78d2eb0267 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml @@ -0,0 +1,56 @@ + +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.mage</groupId> + <artifactId>mage-server-plugins</artifactId> + <version>0.8.6</version> + </parent> + + <artifactId>mage-player-ai-draft-bot</artifactId> + <packaging>jar</packaging> + <name>Mage Player AI.DraftBot</name> + + <dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>mage</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>mage-player-ai</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> + + <build> + <sourceDirectory>src</sourceDirectory> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>2.0.2</version> + <configuration> + <source>1.6</source> + <target>1.6</target> + </configuration> + </plugin> + <plugin> + <artifactId>maven-resources-plugin</artifactId> + <configuration> + <encoding>UTF-8</encoding> + </configuration> + </plugin> + + </plugins> + + <finalName>mage-player-ai-draft-bot</finalName> + </build> + + <properties/> + +</project> diff --git a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/src/mage/player/ai/ComputerDraftPlayer.java b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/src/mage/player/ai/ComputerDraftPlayer.java new file mode 100644 index 0000000000..31e514b238 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/src/mage/player/ai/ComputerDraftPlayer.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.player.ai; + +import mage.Constants.RangeOfInfluence; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author nantuko + */ +public class ComputerDraftPlayer extends ComputerPlayer<ComputerDraftPlayer> implements Player { + + public ComputerDraftPlayer(String name, RangeOfInfluence range) { + super(name, range); + } + + public ComputerDraftPlayer(String name, RangeOfInfluence range, int skill) { + super(name, range); + } + + public ComputerDraftPlayer(final ComputerDraftPlayer player) { + super(player); + } + + @Override + public ComputerDraftPlayer copy() { + return new ComputerDraftPlayer(this); + } + + @Override + public boolean autoLoseGame() { + return true; + } + + @Override + public boolean priority(Game game) { + game.concede(playerId); + return true; + } +} diff --git a/Mage.Server.Plugins/pom.xml b/Mage.Server.Plugins/pom.xml index 55cb409cfc..21e48d2e94 100644 --- a/Mage.Server.Plugins/pom.xml +++ b/Mage.Server.Plugins/pom.xml @@ -23,6 +23,7 @@ <module>Mage.Player.AIMinimax</module> <module>Mage.Player.AI.MA</module> <module>Mage.Player.AIMCTS</module> + <module>Mage.Player.AI.DraftBot</module> <module>Mage.Player.Human</module> <module>Mage.Tournament.BoosterDraft</module> <module>Mage.Tournament.Sealed</module> diff --git a/Mage.Server/config/config.xml b/Mage.Server/config/config.xml index cc832e984a..1fa3719965 100644 --- a/Mage.Server/config/config.xml +++ b/Mage.Server/config/config.xml @@ -7,6 +7,7 @@ <playerType name="Computer - minimax" jar="mage-player-aiminimax.jar" className="mage.player.ai.ComputerPlayer3"/> <playerType name="Computer - mad" jar="mage-player-ai-ma.jar" className="mage.player.ai.ComputerPlayer6"/> <playerType name="Computer - monte carlo" jar="mage-player-aimcts.jar" className="mage.player.ai.ComputerPlayerMCTS"/> + <playerType name="Computer - draftbot" jar="mage-player-ai-draft-bot.jar" className="mage.player.ai.ComputerDraftPlayer"/> </playerTypes> <gameTypes> <gameType name="Two Player Duel" jar="mage-game-twoplayerduel.jar" className="mage.game.TwoPlayerMatch" typeName="mage.game.TwoPlayerDuelType"/> diff --git a/Mage.Server/plugins/mage-player-ai-draft-bot.jar b/Mage.Server/plugins/mage-player-ai-draft-bot.jar new file mode 100644 index 0000000000000000000000000000000000000000..add4c0bafd0a39bb026e1ca51544fe124053316c GIT binary patch literal 2945 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 ZAhKwHH!H9%VPN0}LOo^%23rmg4*+mj9BBXm literal 0 HcmV?d00001 diff --git a/Mage.Server/plugins/mage-player-ai-ma.jar b/Mage.Server/plugins/mage-player-ai-ma.jar index cac60a4d375564638b293c62964fcc4928ed980e..7880ac081c4cd07da1ea47efda88e6adbd83d35a 100644 GIT binary patch delta 3919 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 delta 3994 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 diff --git a/Mage.Server/plugins/mage-player-ai.jar b/Mage.Server/plugins/mage-player-ai.jar index 6954c948f06019ae409008d0ae1fd3e39ffc8716..45a6a3046937a7eca5c71760af174ff804b0055e 100644 GIT binary patch delta 5585 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 CrM(dV delta 5499 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 Oea7RWp>-nuc>e<`mSEWc diff --git a/Mage.Server/plugins/mage-player-aimcts.jar b/Mage.Server/plugins/mage-player-aimcts.jar index c586e569bfd152d84d91a1b11c71c08c8e0097a0..1d820de797d984976deab64db6912e1c3ca941a1 100644 GIT binary patch delta 1032 zcmdmdk8%AyM&1B#W)?065Lh$o&O}}n=G8#TWEL}scToXMeNhKdljRt-K=fvB#wKwv z<ATIdRxo3RTrd-u@lK&o0?bIVTm%tew~6Khi==v8kOna(Tcm-FnVgzt4Cc>HbLU+g zdBs6`#?Pf{ObiV3C%;c~s^@=VKVw6<x1X37=eook9<H-t8Rp-@Od<=X-kdaHioV<b z-zlDDDc3!jli!@RvbwhOdBJ<x{vgGlvl3+AuAa1V_Q}oHk{A<Px3w^;2-K-HoMyUL zAA88s!@;QV%+a`u)Arted*I#Pr)MXnaMkO)mpjuh+NBvRW$2^!I8bC}yx6JwN98ig zzLvWk^sSC=aM&}~Ue%xT#_F0$z3yARM3#!4_xw56BUQ!dw-=Xn#Ay)^p=HM9n>-YM zy4`s;b0UMNmIs%#ih|<Gmt2Xt7iI}-D{Xf<w&;$?u|lrq-w)QW4fj7_y2I<?Hr-?Q z4s8?T|KjS>$>+v$amS%5k0Uz{?w_!7!HN279@qHI-0RN=xNcfnsl97^zN>uR;-|-t zw~O4G9cHQCv|)~cPbU}emLG}^)+?v(nX$fI>9zHzBL^2)CHfxZ@p=AtOVlhojz@QH ztzQsf5%HE)?%v;T#*8+fiaHgqYv=#A-1lzcbjAGti+?3I{|%OBd~)mbVSDo}Z+f~P zNq3%9*Q)R3nBMN=Ip>g_#D~9MzH*lp@V|8l>)#cxlXrScv5m}~*B@T_wp6NS+{|k< zmMklpGxMv7_0@aRIxV9wCMmx?CZoWTI5Tr+mXX!bD;{Dl*316O3A8>BIh!TP_0{Lf z`b(3Jgs#-<dA&%$$NS@+d*%1#?2lj9%sF45Xz=D~ay#n_(=MZsx|QG4%RBB&vb$$? z_x_j4&6`!lk3^_*MO|32W2ez_dsxEd03}=peVHwHiY8}dy4O2$H5&*p9H>^PkN7Yr zVOzkO2WtbgDmKaAcxA?W#pRmIhwr)1Ew1(|bEnRGSb4y~+I{V+<GUT=l@gfWU0Rg= zk>zj&>l)dtt($WckFML+Yn%O4b?R5Ua?d@nCpL$vSnkO<wf|3hq<zT-39hu6pO#$} z5AbGW5@CjCp~*T~CZIetIXTN7oW7T48Gz{<S>|9`DBB85`)3D%=_T1dVES{m7npX) z@c`4^IiX<saSlY>AU7DyZ_9<~Kb-3f=5ywSqvfC6ybyVKm;f_&DG*zMayS$$Y4o4` MAkUXgG7BUC0Jr(tHUIzs delta 1051 zcmZ2~k8$%oM&1B#W)?065a12JGLct>nFmOj%wh)dE-HYjFX|v_vK*rph~DhY*dz{S zT#z`*3TDiZ3uXc{-YFDHfEh`aiy$KGHqm@wkyNh>(jdlUi!`t?lT*`-!Ti~2?z|i` z4m&uf1<lc6VqjQ1`F)yGeVoGogDrcbiZ%s!ec(w>4#?Q%bbI6WMJKyfpPAOOq{i^q zeRc0m%Der<B$D~rUf)rkTh0Id-bW45N$WYUUEHTNv&z2mT9l5$nhVnm8dwgUXDNt0 zuzS6?1v{sQTHnqa+P5~9@0Pu>ck`aeNj?w1KYhD*XT-u8MoR?`rx?k(PTaYvK0s{$ zQ;Ez|H(9GLYPPXHdizJS((6Fn)5&YDt=O;Or9E%*C+Uf&I#RyP6)D@$pglpwC;eT@ zM5j-^J5CxaGi!xR5Ha&`a0<FCdg#^yQ}r;Hyv`oioti#ZHF+K#T)XzV{{hn-UJuPY zj=LmI=x+aIw8({Bxj7>y(N-n-)j|7-Cl}VAxaM)q-^^V;eTCA^OM67`-rT;3-~8gI z$A@dVa#L)o9(P&_wmfY~^a_b^?v`iTk{olg`)AdOt#zLBEM9~jU#~f%@#UWU2=B}6 zjxjsG>3fLrrByrf=GXtc$RJm_bBV%rz4~>}f9!IPYs>mAe^cK2&HQVE4(s;LTK9Y7 z!qoH>k^1`{K6ZhbAv<hRydH^sJJ|4EeZ%~X&D9ylH&@;H+f;aa+1#gz&*OH7=c}C2 zc064sJjZZj@{=<<D{rp+x6S9w%`P$NO!MaqiUy~9PKQ3esJYB-lfo^-zyBLFY?fzD zJ3V1#`kK0@(^T}lOBcq9&rGQ5dj9oTb<Gc%_~jdH|GPFOx)_&R>vXKqaDF<ys=G}6 z<l0xsTO=Ek*PHK-E^_Q)ba7mrx#dp9%**+(<jVm{z7A58mE;P5Nx2k=tr#ZX&9kW& zJ+YCi*+78df^EV7f(LU1nx`u55cT5r<D0v_innpr2}#!f`(FNtD}8>#X=ZxOe2WVQ z1w+1S)w~m&d-PV>^linwe2>@eC|kfcO?SzS=wee{4gJh``QrIUX1CfjE1i7k9IW?~ ze{bE(l#3!?jGppd;Sca;WD;S9=cvgVStg(?H90=Z9-Q14W*LC#D_Q1XnlIZ5OnYYs zf$0U=K4AKNwilST$?*Ww?Kz=f`hE^XTqide%;(FNo;){K9?agK>kOt@^TN@xRAyd? YJZ1oaay<krX$+lwC(oBnHVecD0014qwEzGB diff --git a/Mage.Server/plugins/mage-player-aiminimax.jar b/Mage.Server/plugins/mage-player-aiminimax.jar index ab1d34404ca0409390ddda8e353b2c3f6f67e923..eac2decfb2e9a2e22206591b8f6385b970b8464f 100644 GIT binary patch delta 1175 zcmZqN!SrW46K{YwGYc032&|rUXCki(^C}=^GK(3+yQl!BzNmw!$#RTZAbPVm<0B?8 z!+@opi5Dp1pxdzWlm;^c!?nrltyDHYV6$ch%gb@K7=Rf|ty~}?Z){WL!6G5Cdsx5> z;Uq5}Fe4!^0%Gd!f?W_sMRB(%Sc<JPnH9{)>6;Cfn#?s3?3Bso6OBO<lXE9}3N4Pj z;t<jLNKb`{fnhm21A{5U<ae_S>I?F7^(u06j)uf`-!>4a;eTR3<HB_hKdC<D9c@mU zGBLNBx4GZv3%&Pa%B@Kgrs$vg`~B3WHz(}Wd8b@5&o;UChG)06oN7=fZ-B7usixQE zlhc!*2tA(kra@VWvzARIq)*;%{RgI_8uPB4dFr@%+TQ!`FaBHm`0V3~w*Bkh?Y|*k z?`@PCBYjBI=h$M6P5X7W9)8cN+QwPe8duWyu;FFiM-ls@FBWX}w2}+e3Y;=UsrixM zlx;#Qt5pxmu1WP;)G&LCoux{6lJ@&eSG*QXdNSbw8>feh<TkY{5nCSln68jru~KK- z&eAy#9@zcJettE%q&rV&Pj+|V_8n`FGS>=5PFP$os<<X)&eSIc3dw&j%s+B%!gA?F ztJG&N-v4|_OG#>cx7?lVi@$egT(x<w7yXk*<pYmJ>H=qR-8!BNekH9Z#Ah$O^J|+; zp}|_eBx4iz&93&Frls`>WgUK}ts%xAR^8fezW+~xLjRta<P~`{?0;MCeK&EsV*dZd zzk;X#4VGsN*<L@ry*?-M;!H{1ZC!`hm#ygtI3A)s>w%rbhrb-(xYs?DyVbd7R{8$e zSD}~rJ{J_MKfL;ypy<*R*WFxtDK}0Q=9ORh6H{%iCR%g$)7ql!;s$}1)a6f?oqQp4 zSzv1O%9;PF9Yo@Tw%$(FxWXN{-^<%EcIiH&b*r5==&EkYdRqJYms4TY><8ceh_fAz zvn!2gSSP7|ba__&yvVESPR0zrtIcOeb8=p@&3NOW9nwF|_AeVOJ8*!qgF{<!{Ewo^ zHd8$74{{wc;9<B>t@vNyMrG<-$7LI4D{xuA<aZIzKCn%B+u^@^h3~yIRrgyHQgP^a zm$L4h118(Uk9zyQs4n^4TrMrM-u=tm&k17J`k$DTY};;a;8;BO{N)LzH#`~-P7tfS zv^eKye_7q-Q@19$cnZDbe#Rc)&B!Fe49}R8nWvh7a^_^KsrKL$Uo#b)wI;8hY7XZ6 z&61wXG7X%$CaX>J1dA0-3k1{0ptRI<e=t91Iz;>clrJ>H4J;l#BM3}ym=O%7*=9o2 zM?mRSGyTBgzh?%3X}?)kV7hyjGnl?OE0Px_7fv>x9i{*eM_>_C4#YN~vIYv4G%8O4 Q<<iM_XUnm@p8^sE07I}LegFUf delta 1139 zcmeyfovCpL6K{YwGYc032ylmAnaHcc%mt)OW-)_!7Zt$N7j+OdS&mT)L~r(He8dE1 z7_ihc@d8C0bQ@Nl(qLv_xHfscmCEJ^Y}U+Rc{#2Y12AK$l?z1VjcuwtSR^EN4-1$f zoaDs=W+dcAKuq0TunWSdDDD;oOR;q(vw|5peY3$*les2>oif>cqA^Hfa_&S=!L%7W z9rg(>F41CQVA#gaz+gJrZi;DrMQ+Z~klS6i4FqcQ6#geT#VcE8MofDk#kF+9hD`CQ zh56lD{(HP~Jv~nKZu%d0bCT@M*Gn3MekE+^>w9)aCN0gzYl)Eb0yV2Ctk?6^{g0hc zJ*Ik-(cMMp7mLRV8T*>3hpb(JHic)NI&Pk}_x}5f|9sERKK_xXKK^d~HhyoTRQDL^ zLz+Iv7He$spSJ7Rdsfvp&brpPlD<IZ%Xc3c*7aO;OrN~v(u#c=US1O&Kk`o5rj#kG zeo$8Df!Csj*;nRfse~tKzu$D_)Z~McB<t5&9Xwe3A?x|q<dW_@p*`G}Hg2~#an!k1 zGIGM=sfue-=1hHJppc@y$iDNelE1l2sN?L#`=2jqDM?-I%3r$W#ogE~S%<Dpe|%B< z{8<O4^9{jlRys?L_A}lpTrco5$v7o;zn;I0$(rO_JZCTFTr6L^bmn4~@WQ|1D&6dx z_bzI?UcdiOjY7XoeDH+VGwrVzcfFhVeBrHs?%$T1{a#+mG9i2Yve$Jvkr!u5>u&2h zRK09XSHSTQ?O6}(BtHC=_-0&I!2h-)?ChTVMtM)SFx$Sl<NbZrRu@;z$cyWmxz);g z=G^u*wZDGfbTZezw4Y&DUl%tB%t$@{blJxjGM5FWHW&K*PqtU+(qDP&uTjb?*46Pl zmL5o5xqi!QE#Vyh&NWe0@%w9L+*8|O``@)O(YV}NXGf&5UswNCG26`>{9Dqv{NCQn zDNt33;CDzi7Y#e#JHz%L8!YK_fRet$!}Z_z3n!aR@vPs-b;v+~;eu_!e}NZwCa~xP zy-@3LTF!TFx$WUb&r>s}eS6>gxccl=Ax^PbUq4?^&YR+3+JEZztS#Gb-TZgu>%EtS zyF#q_vy^`p`8AuSUvA`@bp5Fre`Hgq1c!*%L-T!JXY03|X6K(IW?A&8!+M2$fHxzP z2s1nnI!yjQ#Tb+eC!0>S2dD1xso-ohdDT>NFyC{Q^yL3j!5L|?;xtc44wx1QrVm1C z(dqtRe)@EX_--hlcZM5SJZwe~m|i_27)&$Hgs2aO(o1LhfyKYg3;@%fv#h{$+bm}= oeP&i9FG`M^Y&1KJ6A_LRXNxjvPMK^!#cuMm*#c}|rhrNq04?h9y8r+H diff --git a/Mage.Server/plugins/mage-player-human.jar b/Mage.Server/plugins/mage-player-human.jar index ae701fbf9caef4d8d0e8a443cb4e823b9f66ee46..fa972867142f670efb84dc7a3d3e4568eb61d8a1 100644 GIT binary patch delta 332 zcmcbYc|Vgkz?+$civa}I&bl*^SA}^EkTRLY4B}l>08?MoLDXb9MqLoS*^lv>CYYhF zJ&g%0b3j)MOuyAN21_XG)iZGdl{(C@b&xHXyxPFIUi8dHu4V%Ph6}b6>MaV)W-J!b z-XZG6y8IXO^0>tT!j{4Z_pe`<UvabBmfKZsq5XoTbN7ZtnyY3^V%Irnr?o}&-h#h2 zjNIK(Z*^|V)WpuXbZ2Xk(4}8;uNBVeJc-brWKo~lp&mD3y}eb$Cr#awcl80@j7%cT zaF0#SF*E`BZ1Q45d$3cV8XACU2_thb9b{w+rY9Nsf$7IafneI)*a}RS7(0XMUB+9G Od{%Cf$QEY^3OoS77mDZr delta 332 zcmcbgc`uVUz?+$civa}OC*PjPtHSICq)cWpgLoGez|<FY5H(qjQ5QsS_G7%J31+Bk zPh$eh9MIJQ({FW+!4k@P^-P>Vr4G4=JPPwCuQqV54=(dR>#ggh<LMjdu`1+)ua5WG z$4`U!*o*dheHQ6CBg&(@rsvEWo?elf=2(#)9-iKcou`7jyNo}7&f)!{^W{v%&P&~& zyt!?Hb3S)p`dTD>Ik<ACP`8)SWueL54NVG+cbn!MIdw(pZqKDVE(=~V1b8zti7><c z<uEzV&=};i$x96F!A^Z<XaJ@qjm*Jxu#qj8o^0d?rk@xEf@uq5D==MZ><p%N8*f4K NS%pa=TdW}{@BsaThhYE! diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java index 17b92646d2..b38cffdb7f 100644 --- a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java +++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java @@ -28,9 +28,6 @@ package mage.server.tournament; -import java.util.Map.Entry; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; import mage.MageException; import mage.cards.decks.Deck; import mage.game.GameException; @@ -52,6 +49,10 @@ import mage.view.ChatMessage.MessageColor; import mage.view.TournamentView; import org.apache.log4j.Logger; +import java.util.Map.Entry; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + /** * * @author BetaSteward_at_googlemail.com diff --git a/Mage/src/mage/game/tournament/TournamentImpl.java b/Mage/src/mage/game/tournament/TournamentImpl.java index ad25b506a2..c92b799a26 100644 --- a/Mage/src/mage/game/tournament/TournamentImpl.java +++ b/Mage/src/mage/game/tournament/TournamentImpl.java @@ -28,27 +28,18 @@ package mage.game.tournament; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.UUID; -import java.util.concurrent.CopyOnWriteArrayList; import mage.cards.Card; import mage.cards.ExpansionSet; import mage.cards.decks.Deck; -import mage.game.events.Listener; -import mage.game.events.PlayerQueryEvent; -import mage.game.events.PlayerQueryEventSource; -import mage.game.events.TableEvent; +import mage.game.events.*; import mage.game.events.TableEvent.EventType; -import mage.game.events.TableEventSource; import mage.game.match.Match; import mage.players.Player; import org.apache.log4j.Logger; +import java.util.*; +import java.util.concurrent.CopyOnWriteArrayList; + /** * * @author BetaSteward_at_googlemail.com @@ -177,6 +168,7 @@ public abstract class TournamentImpl implements Tournament { protected void updateResults() { for (TournamentPlayer player: players.values()) { player.setResults(""); + player.setPoints(0); } for (Round round: rounds) { for (TournamentPairing pair: round.getPairs()) { @@ -193,6 +185,18 @@ public abstract class TournamentImpl implements Tournament { sb2.append("-").append(match.getPlayer(player1Id).getWins()).append(") "); players.get(player1Id).setResults(sb1.toString()); players.get(player2Id).setResults(sb2.toString()); + if (match.getPlayer(player1Id).getWins() > match.getPlayer(player2Id).getWins()) { + int points = players.get(player1Id).getPoints(); + players.get(player1Id).setPoints(points + 3); + } else if (match.getPlayer(player1Id).getWins() < match.getPlayer(player2Id).getWins()) { + int points = players.get(player2Id).getPoints(); + players.get(player2Id).setPoints(points + 3); + } else { + int points = players.get(player1Id).getPoints(); + players.get(player1Id).setPoints(points + 1); + points = players.get(player2Id).getPoints(); + players.get(player2Id).setPoints(points + 1); + } } } diff --git a/Mage/src/mage/game/tournament/TournamentPairing.java b/Mage/src/mage/game/tournament/TournamentPairing.java index b1c76da2d0..c2976dccb9 100644 --- a/Mage/src/mage/game/tournament/TournamentPairing.java +++ b/Mage/src/mage/game/tournament/TournamentPairing.java @@ -28,9 +28,10 @@ package mage.game.tournament; -import java.util.UUID; import mage.game.match.Match; +import java.util.UUID; + /** * * @author BetaSteward_at_googlemail.com @@ -75,4 +76,14 @@ public class TournamentPairing { player2.setEliminated(); } } + + public void eliminateComputer() { + if (!player1.getPlayer().isHuman()) { + player1.setEliminated(); + return; + } + if (!player2.getPlayer().isHuman()) { + player2.setEliminated(); + } + } } diff --git a/Mage/src/mage/game/tournament/TournamentSingleElimination.java b/Mage/src/mage/game/tournament/TournamentSingleElimination.java index a2b35c3b7e..ed3437c8ef 100644 --- a/Mage/src/mage/game/tournament/TournamentSingleElimination.java +++ b/Mage/src/mage/game/tournament/TournamentSingleElimination.java @@ -28,6 +28,9 @@ package mage.game.tournament; +import java.util.Map; +import java.util.UUID; + /** * * @author BetaSteward_at_googlemail.com @@ -40,6 +43,14 @@ public abstract class TournamentSingleElimination extends TournamentImpl { @Override protected void runTournament() { + + for (Map.Entry<UUID, TournamentPlayer> entry: players.entrySet()) { + if (entry.getValue().getPlayer().autoLoseGame()) { + entry.getValue().setEliminated(); + entry.getValue().setResults("Auto Eliminated"); + } + } + while (this.getActivePlayers().size() > 1) { Round round = createRoundRandom(); playRound(round); diff --git a/Mage/src/mage/players/Player.java b/Mage/src/mage/players/Player.java index 4151d2f0f0..60a79475de 100644 --- a/Mage/src/mage/players/Player.java +++ b/Mage/src/mage/players/Player.java @@ -110,6 +110,7 @@ public interface Player extends MageItem, Copyable<Player> { public UserData getUserData(); public void setUserData(UserData userData); public boolean canLose(Game game); + public boolean autoLoseGame(); /** * Returns a set of players which turns under you control. diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 5a39ee7a61..89a6995402 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -1440,4 +1440,9 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser public void setCanPaySacrificeCost(boolean canPaySacrificeCost) { this.canPaySacrificeCost = canPaySacrificeCost; } + + @Override + public boolean autoLoseGame() { + return false; + } }