예제 #1
0
파일: Map.cs 프로젝트: stopdraft/sc2dsstats
        public static Dsplayers GetOpp(int pos, Dsreplays rep)
        {
            Dsplayers plopp = new Dsplayers();

            if (rep.Playercount == 6)
            {
                if (pos == 1)
                {
                    plopp = rep.Dsplayers.FirstOrDefault(x => x.Realpos == 4);
                }
                if (pos == 2)
                {
                    plopp = rep.Dsplayers.FirstOrDefault(x => x.Realpos == 5);
                }
                if (pos == 3)
                {
                    plopp = rep.Dsplayers.FirstOrDefault(x => x.Realpos == 6);
                }
                if (pos == 4)
                {
                    plopp = rep.Dsplayers.FirstOrDefault(x => x.Realpos == 1);
                }
                if (pos == 5)
                {
                    plopp = rep.Dsplayers.FirstOrDefault(x => x.Realpos == 2);
                }
                if (pos == 6)
                {
                    plopp = rep.Dsplayers.FirstOrDefault(x => x.Realpos == 3);
                }
                //opp = plopp.RACE;
            }
            else if (rep.Playercount == 4)
            {
                if (pos == 1)
                {
                    plopp = rep.Dsplayers.FirstOrDefault(x => x.Realpos == 4);
                }
                if (pos == 2)
                {
                    plopp = rep.Dsplayers.FirstOrDefault(x => x.Realpos == 5);
                }
                if (pos == 4)
                {
                    plopp = rep.Dsplayers.FirstOrDefault(x => x.Realpos == 1);
                }
                if (pos == 5)
                {
                    plopp = rep.Dsplayers.FirstOrDefault(x => x.Realpos == 2);
                }
            }
            else if (rep.Playercount == 2)
            {
                if (pos == 1)
                {
                    plopp = rep.Dsplayers.FirstOrDefault(x => x.Realpos == 4);
                }
                if (pos == 4)
                {
                    plopp = rep.Dsplayers.FirstOrDefault(x => x.Realpos == 1);
                }
            }

            return(plopp);
        }
예제 #2
0
파일: Map.cs 프로젝트: stopdraft/sc2dsstats
        public static DSReplay Rep(Dsreplays rep)
        {
            DSReplay dbrep = new DSReplay();

            dbrep.REPLAY      = rep.Replay;
            dbrep.REPLAYPATH  = String.Empty;
            dbrep.GAMETIME    = rep.Gametime;
            dbrep.WINNER      = (sbyte)rep.Winner;
            dbrep.DURATION    = (int)rep.Duration;
            dbrep.MINKILLSUM  = rep.Minkillsum;
            dbrep.MAXKILLSUM  = rep.Maxkillsum;
            dbrep.MINARMY     = rep.Minarmy;
            dbrep.MININCOME   = (int)rep.Minincome;
            dbrep.PLAYERCOUNT = (byte)rep.Playercount;
            dbrep.REPORTED    = (byte)rep.Reported;
            dbrep.ISBRAWL     = rep.Isbrawl;
            dbrep.GAMEMODE    = rep.Gamemode;
            dbrep.VERSION     = rep.Version;
            dbrep.MAXLEAVER   = 0;

            List <DSPlayer> pls = new List <DSPlayer>();

            foreach (Dsplayers pl in rep.Dsplayers)
            {
                DSPlayer dbpl = new DSPlayer();
                dbpl.POS     = (byte)pl.Pos;
                dbpl.REALPOS = (byte)pl.Realpos;
                dbpl.NAME    = pl.Name;
                dbpl.RACE    = pl.Race;
                if (pl.Team == rep.Winner)
                {
                    dbpl.WIN = true;
                }
                dbpl.TEAM      = (byte)pl.Team;
                dbpl.KILLSUM   = pl.Killsum;
                dbpl.INCOME    = (int)pl.Income;
                dbpl.PDURATION = (int)pl.Pduration;
                dbpl.ARMY      = pl.Army;
                dbpl.GAS       = (byte)pl.Gas;
                Dsplayers opp = GetOpp(pl.Realpos, rep);
                if (opp != null)
                {
                    dbpl.OPPRACE = opp.Race;
                }
                int diff = dbrep.DURATION - (int)pl.Pduration;
                if (diff > dbrep.MAXLEAVER)
                {
                    dbrep.MAXLEAVER = diff;
                }

                dbpl.DSReplay = dbrep;
                pls.Add(dbpl);

                List <DbBreakpoint> bps = new List <DbBreakpoint>();
                foreach (var bp in DSdata.s_breakpoints)
                {
                    DbBreakpoint dbbp = new DbBreakpoint();
                    dbbp.Breakpoint    = bp;
                    dbbp.dsUnitsString = "";
                    foreach (var runit in pl.Dsunits.Where(x => x.Bp == bp))
                    {
                        if (runit.Name == "Gas")
                        {
                            dbbp.Gas = runit.Count;
                        }
                        else if (runit.Name == "Upgrades")
                        {
                            dbbp.Upgrades = runit.Count;
                        }
                        else if (runit.Name == "Mid")
                        {
                            dbbp.Mid = runit.Count;
                        }
                        else
                        {
                            UnitModelBase unit = DSdata.Units.FirstOrDefault(f => f.Race == pl.Race && f.Name == Fix.UnitName(runit.Name));
                            if (unit != null)
                            {
                                dbbp.dsUnitsString += unit.ID + "," + runit.Count + "|";
                            }
                            else
                            {
                                dbbp.dsUnitsString += runit.Name + "," + runit.Count + "|";
                            }
                        }
                    }
                    if (!String.IsNullOrEmpty(dbbp.dsUnitsString))
                    {
                        dbbp.dsUnitsString = dbbp.dsUnitsString.Remove(dbbp.dsUnitsString.Length - 1);
                    }
                    bps.Add(dbbp);
                }
                dbpl.Breakpoints = bps;
            }
            dbrep.DSPlayer = pls as ICollection <DSPlayer>;
            dbrep.HASH     = dbrep.GenHash();
            dbrep.Upload   = DateTime.UtcNow;


            return(dbrep);
        }