From ef80a565cbb259ee0d519cedfdb88acc56ab9fb2 Mon Sep 17 00:00:00 2001 From: RaidMax Date: Wed, 11 Mar 2015 20:25:14 -0500 Subject: [PATCH] some of these are meant for previous commit assigned groups colors! !find now reports the user's group ban appeal listed by _website group help commands so not to clog up the chat updated stats calculation speed up rcon output 0.8 -> 0.56 fixed logfile not flushing --- .gitattributes | 63 ++++++++++++ Admin/Command.cs | 8 +- Admin/Heartbeat.cs | 2 +- Admin/Player.cs | 9 +- Admin/RCON.cs | 4 +- Admin/Server.cs | 58 ++++++----- GAME/Game_TEST/Game_TEST.sln | 22 +++++ GAME/Game_TEST/Game_TEST/Game1.cs | 91 ++++++++++++++++++ GAME/Game_TEST/Game_TEST/Game_TEST.csproj | 63 ++++++++++++ GAME/Game_TEST/Game_TEST/Icon.ico | Bin 0 -> 32038 bytes GAME/Game_TEST/Game_TEST/Program.cs | 26 +++++ .../Game_TEST/Properties/AssemblyInfo.cs | 36 +++++++ 12 files changed, 344 insertions(+), 38 deletions(-) create mode 100644 .gitattributes create mode 100644 GAME/Game_TEST/Game_TEST.sln create mode 100644 GAME/Game_TEST/Game_TEST/Game1.cs create mode 100644 GAME/Game_TEST/Game_TEST/Game_TEST.csproj create mode 100644 GAME/Game_TEST/Game_TEST/Icon.ico create mode 100644 GAME/Game_TEST/Game_TEST/Program.cs create mode 100644 GAME/Game_TEST/Game_TEST/Properties/AssemblyInfo.cs diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..1ff0c4230 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/Admin/Command.cs b/Admin/Command.cs index 8f183357e..661a36594 100644 --- a/Admin/Command.cs +++ b/Admin/Command.cs @@ -323,7 +323,7 @@ namespace IW4MAdmin E.Target.setLevel(newPerm); E.Target.Tell("Congratulations! You have been promoted to ^3" + newPerm); E.Origin.Tell(E.Target.getName() + " was successfully promoted!"); - //NEEED TO mOVE + //NEEED TO MOVE E.Owner.DB.updatePlayer(E.Target); } @@ -471,7 +471,11 @@ namespace IW4MAdmin if (E.Target == null) E.Origin.Tell(String.Format("^5{0} ^7KILLS | ^5{1} ^7DEATHS | ^5{2} ^7KDR | ^5{3} ^7SKILL", E.Origin.stats.Kills, E.Origin.stats.Deaths, E.Origin.stats.KDR, E.Origin.stats.Skill)); else + { + if (E.Target.stats == null) + E.Target.stats = E.Owner.stats.getStats(E.Target.getDBID()); E.Origin.Tell(String.Format("[^3{4}^7] ^5{0} ^7KILLS | ^5{1} ^7DEATHS | ^5{2} ^7KDR | ^5{3} ^7SKILL", E.Target.stats.Kills, E.Target.stats.Deaths, E.Target.stats.KDR, E.Target.stats.Skill, E.Target.getName())); + } } } @@ -487,7 +491,7 @@ namespace IW4MAdmin foreach (Stats S in Top) { Player P = E.Owner.DB.findPlayers(S.Kills); // BAD - if (P != null) + if (P != null && P.getLevel() != Player.Permission.Banned) { P.stats = S; TopP.Add(P); diff --git a/Admin/Heartbeat.cs b/Admin/Heartbeat.cs index 4f94ca0bc..b89fc8703 100644 --- a/Admin/Heartbeat.cs +++ b/Admin/Heartbeat.cs @@ -14,7 +14,7 @@ namespace IW4MAdmin public void Send() { - String URI = String.Format("http://raidmax.org/IW4M/Admin/heartbeat.php?address={0}&name={1}&map={2}&players={3}", Instance.getPort().ToString(), Instance.getName(), Instance.getMap(), Instance.getClientNum().ToString()); + String URI = String.Format("http://raidmax.org/IW4M/Admin/heartbeat.php?address={0}&name={1}&map={2}&players={3}", Instance.getPort().ToString(), Instance.getName(), Instance.getMap(), Instance.getClientNum().ToString() + '/' + Instance.getMaxClients().ToString()); Handle.Request(URI); } diff --git a/Admin/Player.cs b/Admin/Player.cs index c01c74ac9..4f310ef43 100644 --- a/Admin/Player.cs +++ b/Admin/Player.cs @@ -14,10 +14,15 @@ namespace IW4MAdmin Skill = Math.Round(skill,2); } - public void Update() + public void updateKDR() { KDR = Math.Round((double)((double)Kills / (double)Deaths), 2); - Skill = Math.Round((double)Kills * (((double)Kills / (double)Deaths) / 10), 2); + } + + public void updateSkill(double enemySkill) + { + Skill = (Math.Round((double)Kills * (((double)Kills / (double)Deaths) / 10), 2)); + Skill = Math.Round(Math.Log(Skill) * (enemySkill / 2) + (Math.Log(Deaths + 1) * 0.3) * 12, 2); } public int Kills; diff --git a/Admin/RCON.cs b/Admin/RCON.cs index 24a71d0e7..a0ae6edc1 100644 --- a/Admin/RCON.cs +++ b/Admin/RCON.cs @@ -125,10 +125,10 @@ namespace IW4MAdmin { sendRCON(toSend.Peek()); toSend.Dequeue(); - Utilities.Wait(0.85); + Utilities.Wait(0.567); } else - Utilities.Wait(0.1); + Utilities.Wait(0.01); } } diff --git a/Admin/Server.cs b/Admin/Server.cs index e635b9edc..070066f80 100644 --- a/Admin/Server.cs +++ b/Admin/Server.cs @@ -84,6 +84,11 @@ namespace IW4MAdmin return clientnum; } + public int getMaxClients() + { + return maxClients; + } + //Returns list of all active bans (loaded at runtime) public List getBans() { @@ -112,7 +117,7 @@ namespace IW4MAdmin if (P.stats == null) { stats.addPlayer(P); - P.stats = new Stats(0, 0, 0, 0); + P.stats = new Stats(0, 0, 0, 1); } if(players[P.getClientNum()] == null) @@ -292,6 +297,7 @@ namespace IW4MAdmin Thread eventQueue = new Thread(new ThreadStart(manageEventQueue)); eventQueue.Start(); + int timeFailed = 0; long l_size = -1; String[] lines = new String[8]; String[] oldLines = new String[8]; @@ -381,40 +387,24 @@ namespace IW4MAdmin { try { - //get sv_hostname - String[] p = RCON.responseSendRCON("sv_hostname"); + String[] infoResponse = RCON.responseSendRCON("getstatus"); - if (p == null) + if (infoResponse == null || infoResponse.Length < 2) { - Log.Write("Could not obtain server name!", Log.Level.All); + Log.Write("Could not get server status!", Log.Level.All); return false; } - p = p[1].Split('"'); - hostname = Utilities.stripColors(p[3].Substring(0, p[3].Length - 2).Trim()); - p = null; - //END - - Thread.Sleep(FLOOD_TIMEOUT); - - //get mapname - p = RCON.responseSendRCON("mapname"); - - if (p == null) - { - Log.Write("Could not obtain map name!", Log.Level.All); - return false; - } - - p = p[1].Split('"'); - mapname = Utilities.stripColors(p[3].Substring(0, p[3].Length - 2).Trim()); - p = null; - //END - - Thread.Sleep(FLOOD_TIMEOUT); + infoResponse = infoResponse[1].Split('\\'); + mapname = infoResponse[20]; + mapname = maps.Find(m => m.Name.Equals(mapname)).Alias; + hostname = Utilities.stripColors(infoResponse[32]); + IW_Ver = infoResponse[2]; + maxClients = Convert.ToInt32(infoResponse[6]); + Gametype = infoResponse[8]; //get _Website - p = RCON.responseSendRCON("_Website"); + String[] p = RCON.responseSendRCON("_Website"); if (p == null) { @@ -570,9 +560,12 @@ namespace IW4MAdmin if (E.Origin != null && E.Target != null && E.Origin.stats != null) { E.Origin.stats.Kills++; - E.Origin.stats.Update(); + E.Origin.stats.updateKDR(); + E.Origin.stats.updateSkill(E.Target.stats.Skill); + E.Target.stats.Deaths++; - E.Target.stats.Update(); + E.Target.stats.updateKDR(); + E.Target.stats.updateSkill(E.Origin.stats.Skill); } } @@ -728,7 +721,7 @@ namespace IW4MAdmin maps.Add(map); } } - } + } else Log.Write("Maps configuration appears to be empty - skipping...", Log.Level.All); } @@ -829,6 +822,7 @@ namespace IW4MAdmin public Database stats; public Heartbeat HB; public String Website; + public String Gametype; //Info private String IP; @@ -844,6 +838,8 @@ namespace IW4MAdmin private TimeSpan lastMessage; private int nextMessage; private int errors = 0; + private String IW_Ver; + private int maxClients; //Log stuff diff --git a/GAME/Game_TEST/Game_TEST.sln b/GAME/Game_TEST/Game_TEST.sln new file mode 100644 index 000000000..f2a42128f --- /dev/null +++ b/GAME/Game_TEST/Game_TEST.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Game_TEST", "Game_TEST\Game_TEST.csproj", "{119DA221-3EA7-432C-AAFC-782D94EA1ECF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {119DA221-3EA7-432C-AAFC-782D94EA1ECF}.Debug|x86.ActiveCfg = Debug|x86 + {119DA221-3EA7-432C-AAFC-782D94EA1ECF}.Debug|x86.Build.0 = Debug|x86 + {119DA221-3EA7-432C-AAFC-782D94EA1ECF}.Release|x86.ActiveCfg = Release|x86 + {119DA221-3EA7-432C-AAFC-782D94EA1ECF}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/GAME/Game_TEST/Game_TEST/Game1.cs b/GAME/Game_TEST/Game_TEST/Game1.cs new file mode 100644 index 000000000..6d6fc5aca --- /dev/null +++ b/GAME/Game_TEST/Game_TEST/Game1.cs @@ -0,0 +1,91 @@ +#region Using Statements +using System; +using System.Collections.Generic; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework.Storage; +using Microsoft.Xna.Framework.GamerServices; +#endregion + +namespace Game_TEST +{ + /// + /// This is the main type for your game + /// + public class Game1 : Game + { + GraphicsDeviceManager graphics; + SpriteBatch spriteBatch; + + public Game1() + : base() + { + graphics = new GraphicsDeviceManager(this); + Content.RootDirectory = "Content"; + } + + /// + /// Allows the game to perform any initialization it needs to before starting to run. + /// This is where it can query for any required services and load any non-graphic + /// related content. Calling base.Initialize will enumerate through any components + /// and initialize them as well. + /// + protected override void Initialize() + { + // TODO: Add your initialization logic here + + base.Initialize(); + } + + /// + /// LoadContent will be called once per game and is the place to load + /// all of your content. + /// + protected override void LoadContent() + { + // Create a new SpriteBatch, which can be used to draw textures. + spriteBatch = new SpriteBatch(GraphicsDevice); + + // TODO: use this.Content to load your game content here + } + + /// + /// UnloadContent will be called once per game and is the place to unload + /// all content. + /// + protected override void UnloadContent() + { + // TODO: Unload any non ContentManager content here + } + + /// + /// Allows the game to run logic such as updating the world, + /// checking for collisions, gathering input, and playing audio. + /// + /// Provides a snapshot of timing values. + protected override void Update(GameTime gameTime) + { + if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) + Exit(); + + // TODO: Add your update logic here + + base.Update(gameTime); + } + + /// + /// This is called when the game should draw itself. + /// + /// Provides a snapshot of timing values. + protected override void Draw(GameTime gameTime) + { + GraphicsDevice.Clear(Color.CornflowerBlue); + + // TODO: Add your drawing code here + + base.Draw(gameTime); + } + } +} diff --git a/GAME/Game_TEST/Game_TEST/Game_TEST.csproj b/GAME/Game_TEST/Game_TEST/Game_TEST.csproj new file mode 100644 index 000000000..7ce64010f --- /dev/null +++ b/GAME/Game_TEST/Game_TEST/Game_TEST.csproj @@ -0,0 +1,63 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {119DA221-3EA7-432C-AAFC-782D94EA1ECF} + WinExe + Properties + Game_TEST + Game_TEST + 512 + + + x86 + true + full + false + bin\Windows\Debug\ + DEBUG;TRACE;WINDOWS + prompt + 4 + + + x86 + pdbonly + true + bin\Windows\Release\ + TRACE;WINDOWS + prompt + 4 + + + Icon.ico + + + + + + + + + $(MSBuildExtensionsPath)\..\MonoGame\v3.0\Assemblies\Windows\MonoGame.Framework.dll + + + + + + + + + + + + + \ No newline at end of file diff --git a/GAME/Game_TEST/Game_TEST/Icon.ico b/GAME/Game_TEST/Game_TEST/Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..13be62a66e7cdf22ce7df765b577a5b914392e28 GIT binary patch literal 32038 zcmeI433!#&wfFa#ax#*M5CVh{LVysFNd!b@C^Cu2Bm#yR5riTlPKXpKDn+HrrPNxa zsEAAgG7|zs#sFa+MC4MWTx$`LQcB}teZTeQyx}Ay0j=M?x6f^!=bt^CJ*>6%wD#J2 zzs5L>+eAef{;HTq-NyV(eO2TmxVm-y;Z$RK#TnDGWq!D3Yh$k8V@yqgT0|A# zu>O;Vd`16UE?1b-=}ZD~BH~aO6Xr1{BGL{Qb&Vf+-907w@FO=b}^wnmKzfpYl7-O zZlaz#X5v;7zgtY)8ZpkKuKxU;sDBpuyBJ4gl1cr|HAnhJG4=LJP^}NdQRVrortVHL z^>c3^<#%GDJHD;?$*cTN18q#~J>$c>?U9V%E|d0SUX;P_t(W?bK}(mzH_&pqm=3$d z-0}P_fBoIaJDd9Fn!2MFHkx@t>STQ*^%mwzk4^t6jb1(?X3%jzj)@s?DBs_BQjWj= zCgjbgj8~kEpI*~<^Le>H>#RJy_NX*|X|KeMqwbNP-HiGp7WnH=C;ywEze(#izs#UL zQv0cWa>s~Gk}`6ulo^sMj)Bxa@E9)j4?HTS`+DTq_#J=!U8s8!Xk;ATcoR{5u&Mdj zLQ{YGRY#jorQCx%r1iK=x%Z9Z(*E5qq|>q;i?+rVmnEz>w+ z8knl{^Gxl1;shOkdrU$${8hr2oRQ8uFH6{+JE(uuNDBTU3;KEe{b?n2lMUxRvC__o2D( zzfDn)_8p*Y`a14Z+zq&U!Catew%}UrXVXkv4S)PAxSjYt6}J^g0Zo9)sVVRRjZd=k z+AeY07R^Ax__Tj3$u&mgpMlOZRX|H%&oeJta~BZ-e4OxtVthn7@UU_R>f zGM_eOUZ!u~aTYqd2mWsRse2;z>R8pjq=>bDQtq&}Ssbgm7-?*&#rf$vBYQun;6#oU&@_hwXni}I4rn6d+}nbZ|xY88_vFkjN| z#dvDcc3~+u_%mAF`_z2}oWg$+bk+W49AzFislO7_WWTs;zb}q-*0{Ujqe-r~?wBKG z@0u&_^jX&Lnx<4#c}`5Vm&K&M>O+U@e;2iKp!z z>G0@e=``q3sao$I35lyN_YMBJOn85#w8?l@Ty3bkJ?m$&U`@J%dK-O^|NA{lX}759 zf#b*FaD-6jc%bvV&f_lQt(IUace~=~aa7WWZ;{ET^W?Ej$K{or(=z;{EO}Mq-L{^Sa(&0jqdUHoYV&r<@Ue{^$t3wiS-=!T1eJ zDyW}2J=CXb(lq3tI?oQmlZ>a#P)GaUO1073r1!zUOH}rC>Adc9X}H%XH8TG!&+a)V z9k*YQQH#;122uC06U6}iqEI~Ho~xM)%D!&PUtQ|dwN>jK4!*)a!URQ+bv?M)H}Jh& zX|U(Il*zg(qc?vh4OaiBwBPWBJo@`BGHCvOxqn8sxE@0fx-CFs=XZR@6*|(Ey}$o8 zq~6oON8Onq&ICn`adw<56W1M-zDK^7)_eXg&#uUpkxO^WOIZgbX83M#k2pcylv$h} zR#M#EKlhoS*d~GXyWQ?c>P`Ww^Cc1vfyVx()oT(mXus5XDqF^Vd{~-1xn4Ryy+j&} zSS3LN4~xr^t;+Z|FqAYy=qDALo-x4{3-oWLgF00&xf+1p#vRwtr1s7;J-3Ua|1k-A znELu15f5(q@XgYC>|$v-ZmHB7xk)1W?h)t1$HYZC(+@oo*Xf7)O<%^x{j__dm&7D> z%`@&Y(*pTN-jk?%9nkh43R3guA8&8t44rS{?m1)9M&+62@1bw!h@%^{blxeBc3G0x zYpXPQbd~(<@sFhW$fZ&ike++Klen#U68!O>q|E$7Qen+sq}t}oGXCh_B&q4<{5-W5 zvVKPumA?nRb=_|d8i7LVzui{GQFf-O{E?XItTO=!s;Eby>$c-5`(dxhP5V_euCCUrY45Z>7SZXJlCJC8^(Ky*RD(=m9}3&!Z0&>}i?v zsM6BEj#01f7cLUcujnK8yjETj<;O%2f+1cn_>x`+y{v9|XHt^eg<<*$*4AQ0> z6Bkk(Pg*|pM}yhat82hmTwRk?C!Yb9;Gcq<;7_Y_rLLE%CyoRofTcg+CbD#Q!W}~z zEkn!d0939+fv)e9i7&Q)Yx(~9AdPhA!D*nnx%&5lXz&iWL>UW#x*FdU_ZqIQBd-Hp z$5od*0klskonM2;!F=Kd7nN&ZnBTQMR3AtO&A>e3e7OB_58*EI)2Z=x{dvSUBCK*b z0knSA<)#DW`yyBcGQrG}+QKhmmHAoHg#eZ17ThhkeSoeN%J%}|)Xl|J{(WE_I7Rp( z?tGwg+9bj{uWS8U)*&!4kl&(y(rFthKkamU;`Rj@#Cd_X!9<`kQhBOulYsV-{$K`Z z0S1zGDsCKQcyR{=QtQ{cpfege&jFn)ZRFwq z3M7?8Pd@EY*qtJBj7dX>2;G9;S`SOgQ(Am}dF5G;V;i6o%wU~9MtKX-FG^e&wLIvL z06T!rhdCe%x)m$&7t)#S`u()GpdRePBhXW@F+1*uhiLSJ@M85mJ8w}pzpR94=Bn-^`-CCV7;H4&^FjTL~-!8g)He1-;90)gDLNiv03|RWC({GYRMT zy|&hC=M8jK#?XENSJ(9spsyc2iMy%)L0dd^?lRs-eI}B9MgR(KpZ+Vvs>=p9!7eGi5mYh@^~y^0Zva_wi_7(?TxGIHB*Vcl7!7HiTz(8 zXdH+h4G-Z5thRDgVqS_E3*UQ9P`xWAdV()MKfD*pTeK_V&vrY<&zf<8xHY_4VYn(`BUrsh5|Y3$n+HT|yb*KkehjeH2XMZ!bG zSrgtS&m{hb&s5LOPj96O$ZLlSmEr$AWewxuZecE+QUd)6(5iam3EY9W-4yt{Kz~91 zH;zi(Ofd6gUHWK!=;w^j*?@h&`s?{&o%?ZS)d1V3?x*7)g~z4*jx6=JdbbJt{4jZz zn2472v7zk8%H|qJ+)Z;SbZY-U1$6Ge=7;trT@$P|$?Ct3&<&<4vcDJmLem2hRDTis z*I}HQtrbTj5R366@8;7To}N}U$cK4Z9ydgE%2uC?6~B+EwqK#8qbTVI!288 zvBQ|Qv|D5Y)`Upbh{E*iSkO4evF;5cp*d3h_876~ca7aDm_La2V`JGIGhx9&cB={lhbv>~Y-U^*L z%eaR=-wS>N(`vXH_6bk9o6cFFQ}Dgx3|g@$Nwg28S5k{13RbM z97_XsOw)0hKMnL2OeQDI78ee+&U(*cD!*0Uoa1E7ti2h(r)59 z8F2i2sl4O5gl7F+dac+m-45nS+?;Glc^lrgd?xJ=Vo#sDO~xO-BsB&@|4{77gW;hx zSa${Bv7|Jqy;uk0hTDC@?)T7H59r#9?xgy#Wp8?0<3M{8T{q1{R=eyRoGTF-J7qlf z_NK^QZT~TAFUaUEpG&j-K8fG%lZKyuBQI?~AtO&-x9%mpwBwXi8?s)4M_`K|4i7&H z@I8$7sMrkpqq{4OHV^8D?iA=$yNLGvX86_KasX&QYGk7CY-r-@T=tAOD$OUXmeHT( zNj3USIP_Ot{<%D}?F*^5@^h*7=@sd=`x|*~*;bjh?UYR3a#DV^^{B)R+9W}0x3|s` z;Gw{^{ra2jSGTC2@KEN{=+vvm6N$clgMQ@$8g2bk<$VEYKgt8!oKAPFiLTwqQLgS~ zcgAk{<%az-;>2}H#Oa)}$hOUez~DP@Q4 z5XWQmiILDy=AfB|_ltru4ohtB zEU7VMwdIfMyGuGgvqFabdYRN8wMruU?-Va*I?h2S#Lax-)U!P6J`g-v_k(WblAgTQ zU8XLJIa^6!?G2g1`Rz^iDrBv4KMS<~3tv_Ku;_P=! zyukE5Dh?3bhqa;mHmN^+h4gst4>EAtAEfR0#gaCN`KQNjaj^!u`@%c(x~A8Bc3v-W zPAjbCfnMl)?H8d_y}~&$dPIX?pbIt3Gmg+_?0#X(A9}6vi>r3Q1whv_h1yuHeneNQ z4G-@aN61MNQt6sWdeCPYzv(j_X_E)xr#rN87VPeRSUf#wqx)5F$&{)+*Gtn8%g{02 z1M{WD=*3dKZ>B_a%8{UMN5sWBw70`FBebRaNchZ0FxAM{%pS-wozl7cMsW=MqQ%=%I#z5Rndl=}}{;%tm z_J13?|J8LMDX^`I`t$iHQ;)sHX_NdadOGV&BXnKMRewGlxG}Z2$Pql+17Cz5_ma_4s#Ev*{WMx(69(8F#ZkifV`aWBO>F zfplmXI-5YR>T6p9P@?_E&TpKt?B~PhnzDm^rZ)RM?*A1BFY)y|tdi%BT$FmduSw|E z>*Cl9HvL0fZ)}qAb(bZ4^FJhd!)3V#-DJw)Zzc6^=C-=XLd&eRh4b~Q>|ctvqbLvb zBh^EbK??o|;tKkiO>a@xIMd>cque1=@jWpq%o!yhGMH*mE~`uwWYcyF(Gm!G%j z*E3OP*7xFCa7sMWmP-=t((8y%#x2|@p_Q`4QH?UIA(sm52^_I|jU(x%{iD)^?Bl^K zXjePRDg5(5a#4DVhK(bQJ6sjHEBhgJu!pRGO`#aLD&|N+Eyn7G&!pR-e@KOSd&Ikd zJ1(1j;@x;vJi}j>=m&;M=R-c3xci*cp}pXg)ivzhSHDY8R*u8Q0s`a(_jgqnPWkuQ>+c&O!HD&Yd*)aPJg% z$W953+9Ht&tEEDvrc5N~+4IK7$V=Ps}7Df&BhMHBlqWlv)$7TfQYHf%g8 z(5d?WY5GeOP!InBkgxyWf_~)*mRYC6=3pbs#jcx4_`=*Le( z+tcC-8Yw}c1H=>jkk8@59%&l#Tg)}iv`=D(<}5aLDE=hmUT7UHDnsa0{cR1d>ikNx zLj9^kTX%Abwn5QwJ`Y~nE|Kw&h#QWpVRy7Km0Ms#ew=%rGr@fL#HO!Mf6y#!y%UW| z8i;+f4QKc%j8WP%hP*D9)>B+vMR|aJZ3CVAE&B26{pEU^jyP+NhO2AyR4|U;8qrRL zu&*36CYLdwFYK!msW%Kz}ioK8s&m0vL1n&c-@0v}&|MzUtEB(rk(v%Id0b~&}rrGo{8mEIE|1^*VH>FCSG1ImqR^yAm` z+XCs=Fo*zM`Q4H~errF1t6`Oy>NN`#q#2>*7e{Z=IMV96a29C2norxKJJ7zN<3#1F zZL4j)99QMJ3?$)i0WRS$B!9xkKr(m+X#SHR6=)x|9Jq94Z&x;~lcY zxT-U%oRmLJtL-x$zxI7idz1a7INCLiKb6B?pmeA%Vd-=Dwfy#=DX_*lu9xV+xLV&K zFdJx_sN8DfwgK7~<`GtT?!vFXYZ>Fg4&qkfTI)Toj_C=wn(heDa=PH&R^L(j{qk1c zRi-Kn-A}dvj{}w8MKI3h-=AK`hu&>r{x;0x7OXkk?`K`G`k{^`i+2t4r+vPVeqg7g zym-`T`wGx+Z6V$?%f+zlFxz zp+oyWh|spww!NJ^|4vi-T@~cWpT3FuxBEXK2fe4&61)iPds>D!twsO--H%J}$N!h) zL*KC1!<*b6BL^){^V#l?DdUIa38eprERMtuvo zhrr!8*F5S=q`ufUvGd$=+-ceH*9e@2SKY6aY7Ysd%l7Bf7u^lHUofr?+#Jl-~H{Zef}%_eX$LsgESk&m8#RzuI%qZ4;WV?p9$xzs|@t$J02Sm z_=7ozG3Bnp{|v@xp*@u?N88QkIf_1>$X=~NEAq^tU!9_V@gA-x_bPwmGZEaYwCX8R zm-T)K`8#SNgQ)rWWtBW{`S~9R?^l41eE~Z6solUvvEx6#>`>Y>inrU?L!+>Xm*uRW zEHvE&;`N=iDGOpACoglw4Z8Bn@~^>;#3W=joc7M7pJP9+1J9h3MStSUFP}4no5~NU zGmi6-ka5%#$@nN=Bd{J@#>l?J9i;npeytYeY4XIo;|d6JbgSejXR~2;CU}+cUMeMbI#XZ=APgh|Cvd^*-0_y zF$L!;N=Mm+*w~Yq3oDP{oz*SZEqK>HpzVDGEC*_HvT@TJoP65jn$h-WOqt<6Q-wZW zg?g(X`(nXw$^2Fs83gNms5bO)+NLu15Go>zkhz44 z?4os&Hi@|~a%_5X0T_mV7VaWuK|VTlYITm$gt*-rI?%jOv^#h3UPpbaaqN=G>r+ zTkt;;zOTZ+&U>eDw}4FiiYzeA?lTtePWr5gdB=p+5mT4B*8jFvT~~u$;%vw_YwqU0 zFfcZ(G|+!nj(Ff> zy)^F9Q&Q^REoEZMh&RL|y~aig~r z6^$e8oJk+g9j)Wm_XWJ24@rYTi)7x}%QEZS_wvf&ujJAHcwb&vv|i@_@v=(Yz+;{(GYxqUY;*#6tMg`A^Rvbk4K(ajvs837ms}-jTdvr?VgU3`0!{My>hn<;f{COvXfGC z(Ghw4^E?^&7Iz#T;JXmqH8gr}@rU4N3%J8ayIXnSwNPGvxWiJP2~+-4isj!w_PfBN zwf~3r)8KuOO`PtDR1Qnv-(x~kL%6Rv+mven@B75f-OrF-yJh(AH^Wz+q;vl`_S5U) z&AcMR7H^Z`NB=I>mY$T*c6}su<|=u7^*$N&*>$P0_?T3f_>PP|l_wc9*NM0HA#vUI zJyK+(cTM?@hz0+5>2AJ<>QC44Lv(>kmrUr*{a@RZKM$A)^j!2J&^@EB2Nl6G;&nfC z62x=oH`2I5mYL+P++pSZ;*b-Pnz2G&*ngh8`PZc)cdzyScp2``J)Lz#dK~ph^7em7 z?2121owa|IC)VtdQJ-IzX1U)>qpUy6n4JHz_z&idflI%+QULDA>fQe0FvOp32>e;U zmypj&_Zjz9f6tm2f055Pp{p03|NQ)W;cce!3BS2O_vh?utbOrVjR)r$BPsA7Z`|Qo zrv7N3`_bbPoRK5_W@X91)aiu)-C_MjUpu7<$#Wa5j+X%LR@RYRT_-BsS zww?ly+Rrb6c7#o2az%oE?r2do#}U;0>r zX?N?}K-L=q+UzHBk>$wG(J$FI8|O(=CMCWo|Mt2Ee;t4|{^3{kK;=6ZSo0viEo3k5 zGEub?;XlXK>_wk@*fH+Cu8?V`uX4}zx>SOHeftr;_RsR<+FW^wG0}SdR=&Y>Mrur+ zE6<(aTQ@JfE479!l6sHvU80do`0ma}5;1s_I7ZPJ0rbQ)Y9QxyFbU67twd3E^8%p?CqKts?S=sb{Q^KPYyt`p7tztYs`W4%4{4mu!Z zAKoObo?0rSmh6@3toQGn&yyEd`AK%Diy$CODAV=pn!l*fKE0G*9B z$UE#a@jh}yLVIS)T|<}3n0GeFU5smuOYFB^hRys~M$TEy`;oQc?Xz2g9^oC#(328O zK9{ahx{g_{`hNoGJ2%#4^9cGu`6l%JxaGzh&sjm?wJ%T(v~?G77F-0n1_VOm7FzA^ z;0+~iXpcP--0zST7tC)V5AK$RLs!V)*FKg( zugsUu6F!iX!KhUhQd(J4+pepK4fe3ULF6s?peTZ?f)$qxFUPg`24Kgb&;-oThP8zimwN@+c6sr3290vR!5o(z0x zp0s*=kyPuu*7|00NS9m*Wsm3T$@lU=P-oto@SaD%Q|IP4r@q_mevo%T+r-fs{<|^X z_oN^6qAk=VkLgBT(RW}2@V;q0`W=tL<3Pjko&s`!>bZ?TY#?-g2<$J$&0XT)6xPCo zro8tV!}lloc0$-`_Jvo_5%Nssp0vSRKGO>ORwu?GZ==oq$l<a4&SrD4rn}Y8h3?4{M-Ejz6Zmv z+W)eF&K0`e1>z>%LG#*u!g8JE6HG{r_QqXq3UAuh(J#*OekjkxHpdp-A3MyGyf=9n zJJ))2a_DLgotDequf58EKGK2rYP{FKx5K+KE$fiHcKYw~i_gB3G1;HXunk9L!pUng zfj#zfXRgch=+~ncXUSVf{v^{@?~*#bmWf+!M}@v?O1RZl?CEKom+ASiev|!1`>S91 zgy(Vauj{?aU>v-3_>u=Iz-}iD4-xO`myQ;R? ze?h0dAj8>DzVYSvGU?;J5_vaoAqtgGJq=g#je@F-|0?|h`>^d-y7}t{bnj>De(DC| zw$A_U{*W)%m~`ypIVS8LpQ*EgZ$QFlV{E*Q8KcF($v1Jmsr#hI6AR?|oO9B42XC!* z@_u^bB?8LptCG0oZ<4y?l%(>##wN&PDE5|_M=nU+<{wLVV|cdf zX@b8x-`8-*aW0$O)NUi2cbi`LR{eJtJge@11!zCey}#`id;S+#PN3i7-w{6FxD)bB z+9v_u$6zk9zo}8gb@L64(B$?BHLm_czhl5b6)cZ=gf=J;J-Y%x@$# z+b0g*g6VrO!@D-;>WdPT`FHVd`n!Z6nyB@Ldr(=v{hU6TJ{HQwd)9 zg?N;29S0k)iRXip;;7z0%5)vd_ZGgF5!jJm+;C8m>!5QdYF%27)`vfaHP{4w&E244 z$G%NBG^@R1GSE3sbs*bS{{iGs`&RM`D2p|vY6^4TWfS&1@1vn3j`PeC0j+U>^L%$g zj>J~_P@ei|w>)vmC+%|oA@R@sPNLu3B;_~%&9bj0XI_*F8RMnp%472M7kM&q?E${? zJzs(S0lZ#P zew%OG)pUS$R_{bKqgkgce1=u+a$K)e0iGnY|_aq(l_^8X|wJN zX}$NFwBrq~u8EHw`>VWo^nwh1W4)x*T_E0ae0MqOMmg5^wnBah@3EYHmLI6iYtt9# z`gw;%SK#_Tf&QKd&uze7l?hPYIQoalAhI`S?-z}SGeYZL4t8qmjt=b;LVGLpO=Czl z;0!gGbpkj-Hj6i6mqb?oV*GT#>sE5wyLz>FnN?fuDcv`>zAt^XPept`nB-hyNLW{5kf* z$v=$$2+oN0`(|<6Uzx%hypnrKAA;GuW8}Qs#a$TZXzp&YPjSv>pY{>IAqVboIo#VN zi1(V_uq_f(afOsiS}4_Pejw$me8~7f?~UTjC~}*)LP+c3%*)Lgkc;~#&SA896%fXl zkA9POPqBF|&JEyyI=pH-pQY`s`!f6%LflM0|7YP}Z6U?>qms%dIpdD+YnXDh1$z)v znRW>Qj?457otKE~&K&(F_y};n$ANzA;LO-;61SIctVCpqCoGe9plf|Wp(}izun&FS z@L9aAoJbnI@5lMJse#{nje9jm81L|%(2jb%w?nVa?fmrzm*H2(x}N=y1hatJ!gNl^ zBweAsLvcJ8jnn$+O7th)dsZ0BSnQ81pe-&PH;Lb-K=(HK3HO0wxT{nK9-`nS38eW^ z1$jjAa4CZCOhmDlkGV*iv+#M0{Mpt$1nV8A&hZJc)M4>`JG?8snhySwKrXy0|JIzR zd}|o!zF?$XUOrDZ_XGR);$?6nJ?X5mb;GTMe5yBu_HOi*$H64V?JMXkGxDMSu*tON zIC#xqF7ISaY7_FLAt(A*L;=4xZGp4|`is(LhcyjY7b>foVdaJ6mbq6|!Bi|eH52P#54;^a%)bsyw_Zv>8wYlL;&XxtTe*0G{}oS-WioC0=wdu(anQfT~KKmFtJ>+e@7YlOzp z-r63zAJcTpf%UE!cOB4r&w_f?rR}bBwWiZH*#VXjr~GT&DZqHSbwAL01EG1~Nz0!M zv}~nOViPQYL-i#%`-pi=%&#&?8h-ZDX=-Hy_z**1$bOk!MDE}&JodZr1KBI9! z%Y4R`|LyQ?r}5XQC}GDB%oo1_W!=1E5GSFW2c|1 zbrClnXgZD00?L=>x6^%%U-N5QsI2pV@>kCfi&x6X1xX}?7L+7?Qy(xL63?PiyyaW?-G{AsLo__g2L z`Ly4i1j>iz*EIUu4v?gMh2N&&*M6pTWPv&OwQV%rGWaN1CyV2=q&VfDvYJqaP0wZg z4Tvvz%R*Sw)P@dS!wcf^>rbtK(xdab;%lH|S?6Z$v$M5s{9`l>^mnCQdAovNu>mv! zDqn4TrR6l}s&x2ij3caLUCXuPjH|RR0O^{hBpyqP_m>?_8QDPPE|j|p)X;qVd5G%< z&I9d(+WrOK1N7(D^`jnW0g{MQoh{xEt1sc#_Oata@P|-N4brFLx9*?e5@mhUNZ)5z z`HIpGJqhG#s&(PNo@^1Il9B8}w-XOFq{R*wa z_S@mWxIn+1&Zf%_2j;VXD=lAOnjh--*QqklHQJVe%E5*;p7~wpy=FhO{C|b?Dg$`a zKG_ae*Y#uItRF{+*D+g*}sAeltzDF(D9rMRQFOO5??Uy{j2cuW9jtEpkO>} Z_{Wy@?|g;#8~>g1pxyrc_kUOd{|_kcJuCnK literal 0 HcmV?d00001 diff --git a/GAME/Game_TEST/Game_TEST/Program.cs b/GAME/Game_TEST/Game_TEST/Program.cs new file mode 100644 index 000000000..b1572f623 --- /dev/null +++ b/GAME/Game_TEST/Game_TEST/Program.cs @@ -0,0 +1,26 @@ +#region Using Statements +using System; +using System.Collections.Generic; +using System.Linq; +#endregion + +namespace Game_TEST +{ +#if WINDOWS || LINUX + /// + /// The main class. + /// + public static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + using (var game = new Game1()) + game.Run(); + } + } +#endif +} diff --git a/GAME/Game_TEST/Game_TEST/Properties/AssemblyInfo.cs b/GAME/Game_TEST/Game_TEST/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..c1a40cb9c --- /dev/null +++ b/GAME/Game_TEST/Game_TEST/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Game_TEST")] +[assembly: AssemblyProduct("Game_TEST")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5c4ee4ad-a4b0-483e-a8e8-4cd17cfa4c2d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")]