Exemplo n.º 1
0
 /// <summary>
 /// 判断公会战报的结果
 /// </summary>
 /// <param name="guildIDA"></param>
 /// <param name="guildIDB"></param>
 /// <returns></returns>
 public static int FightGroupWinGuildID(ServerFightGroup fightGroup)
 {
     if (string.IsNullOrEmpty(fightGroup.WinGuildID))
     {
         return 0;
     }
     else
     {
         if (fightGroup.GuildIDA == fightGroup.WinGuildID)
         {
             return 1;
         }
         else
         {
             return 2;
         }
     }
 }
Exemplo n.º 2
0
 /// <summary>
 /// 只有三个公会或两个公会是配对
 /// </summary>
 /// <param name="No"></param>
 /// <param name="guildIDA"></param>
 /// <param name="guildIDB"></param>
 /// <param name="cityID"></param>
 public static void AppendServerFightGroup(int No, string guildIDA, string guildIDB, int cityID)
 {
     var cacheSet = new ShareCacheStruct<ServerFightGroup>();
     ServerFightGroup group = new ServerFightGroup(Guid.NewGuid().ToString());
     group.CityID = cityID;
     group.Stage = FightStage.semi_final;
     group.NO = No;
     group.Round = 1;
     group.FastID = info.FastID;
     group.GuildIDA = guildIDA;
     group.Awin = 0;
     group.GuildIDB = guildIDB;
     group.Bwin = 0;
     group.WinGuildID = string.Empty;
     group.IsRemove = false;
     UserGuild guildA = new ShareCacheStruct<UserGuild>().FindKey(group.GuildIDA);
     UserGuild guildB = new ShareCacheStruct<UserGuild>().FindKey(group.GuildIDB);
     string guildAName = guildA == null ? string.Empty : guildA.GuildName;
     string guildBName = guildB == null ? string.Empty : guildB.GuildName;
     TraceLog.ReleaseWriteFatal("Round={0},NameA={1},NameB={2},No={3},cityID={4}", 1, guildAName, guildBName, No, cityID);
     cacheSet.Add(group, GameEnvironment.CacheGlobalPeriod);
 }
Exemplo n.º 3
0
        /// <summary>
        /// 随机分组
        /// </summary>
        public static void Grouping(int FastID, int Lenght, int round, int cityID, ServerFight[] fightList)
        {
            if (IsFightLenth(fightList))
            {
                return;
            }
            List<int> intList = new List<int>();
            for (int i = 0; i < fightList.Length; i++)
            {
                intList.Add(i);
            }
            int guildLenght = fightList.Length;
            int No = 1;
            int subNum = 0;
            while (guildLenght > 0)
            {
                if (fightList.Length == 2 && No == 2)
                {
                    No++;
                    continue;
                }
                var cacheSet = new ShareCacheStruct<ServerFightGroup>();
                ServerFightGroup group = new ServerFightGroup(Guid.NewGuid().ToString());
                group.NO = No;
                group.Stage = FightStage.quarter_final;
                group.Round = round;
                group.FastID = FastID;
                group.IsRemove = false;
                int indexA = GetIndex(intList);
                int indexB = -1;
                if ((guildLenght > 4 && No == 1) || (guildLenght > 3 && No == 2) || (guildLenght > 2 && No == 3) || (guildLenght > 1 && No == 4))
                {
                    indexB = GetIndex(intList);
                    subNum = 2;
                }
                else
                {
                    subNum = 1;
                }

                if (indexA < 0 && indexB < 0)
                {
                    break;
                }
                string guildIdA = string.Empty;
                if (indexA >= 0)
                {
                    ServerFight fightA = fightList[indexA];
                    guildIdA = fightA.GuildID;
                }
                group.GuildIDA = guildIdA;

                string guildIdB = string.Empty;
                if (indexB >= 0)
                {
                    ServerFight fightB = fightList[indexB];
                    guildIdB = fightB.GuildID;
                }
                group.GuildIDB = guildIdB;
                group.CityID = cityID;
                UserGuild guildA = new ShareCacheStruct<UserGuild>().FindKey(group.GuildIDA);
                UserGuild guildB = new ShareCacheStruct<UserGuild>().FindKey(group.GuildIDB);
                string guildAName = guildA == null ? string.Empty : guildA.GuildName;
                string guildBName = guildB == null ? string.Empty : guildB.GuildName;
                TraceLog.ReleaseWriteFatal("Round={0},IndexA={1},IndexB={2},NameA={3},NameB={4},No={5},cityID={6}",
                    round, indexA, indexB, guildAName, guildBName, No, cityID);
                cacheSet.Add(group, GameEnvironment.CacheGlobalPeriod);
                guildLenght = guildLenght - subNum;
                No++;
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 决赛对阵
        /// </summary>
        public static void Grouping(int FastID, FightStage Stage, int cityID)
        {
            int gstage = (int)Stage - 1;
            FightStage Rstage = (FightStage)gstage;
            if (Stage == FightStage.semi_Wait)
            {
                Rstage = FightStage.quarter_final;
            }
            else if (Stage == FightStage.final_Wait)
            {
                Rstage = FightStage.semi_final;
            }
            var againstList = new ShareCacheStruct<ServerFightGroup>().FindAll(s => s.FastID == FastID && s.Stage == Rstage && s.CityID == cityID);
            againstList.QuickSort((x, y) =>
            {
                return x.NO.CompareTo(y.NO);
            });
            if (againstList.Count < 4 && Stage == FightStage.semi_Wait)
            {
                if (againstList.Count == 2)
                {
                    AppendServerFightGroup(1, againstList[0].WinGuildID, string.Empty, againstList[0].CityID);
                    AppendServerFightGroup(2, againstList[1].WinGuildID, string.Empty, againstList[1].CityID);
                }
                else if (againstList.Count == 3)
                {
                    AppendServerFightGroup(1, againstList[0].WinGuildID, againstList[1].WinGuildID, againstList[0].CityID);
                    AppendServerFightGroup(2, againstList[2].WinGuildID, string.Empty, againstList[2].CityID);
                }
            }
            else
            {
                for (int i = 0; i < againstList.Count / 2; i++)
                {
                    ServerFightGroup againstA = againstList[i * 2];
                    ServerFightGroup againstB = againstList[(i * 2) + 1];
                    ServerFightGroup against = new ServerFightGroup(Guid.NewGuid().ToString());
                    against.NO = i + 1;
                    against.Stage = Rstage;
                    if (Stage == FightStage.semi_Wait)
                    {
                        against.Stage = FightStage.semi_final;
                    }
                    else if (Stage == FightStage.final_Wait)
                    {
                        against.Stage = FightStage.final;
                    }
                    against.Round = 1;
                    against.FastID = FastID;
                    against.CityID = cityID;
                    if (againstA.Result == 1)
                    {
                        against.GuildIDA = againstA.GuildIDA;
                    }
                    else
                    {
                        against.GuildIDA = againstA.GuildIDB;
                    }

                    if (againstB.Result == 1)
                    {
                        against.GuildIDB = againstB.GuildIDA;
                    }
                    else
                    {
                        against.GuildIDB = againstB.GuildIDB;
                    }
                    against.IsRemove = false;
                    new ShareCacheStruct<ServerFightGroup>().Add(against, GameEnvironment.CacheGlobalPeriod);
                }
            }
        }
Exemplo n.º 5
0
 public static void GetServerFightGroup(int cityID, string guildIDA, string guildIDB)
 {
     var cacheSet = new ShareCacheStruct<ServerFightGroup>();
     ServerFightGroup group = new ServerFightGroup(Guid.NewGuid().ToString());
     group.NO = 1;
     group.Stage = FightStage.final;
     group.Round = 1;
     group.FastID = info.FastID;
     group.IsRemove = false;
     group.GuildIDA = guildIDA;
     group.GuildIDB = guildIDB;
     group.CityID = cityID;
     group.WinGuildID = guildIDA;
     cacheSet.Add(group, GameEnvironment.CacheGlobalPeriod);
 }
Exemplo n.º 6
0
 /// <summary>
 /// 配对战斗
 /// </summary>
 private static void TriggerPairCombat(List<FightUser> mogemaUserList, List<FightUser> hashideUserList, ServerFightGroup fightGroup)
 {
     int combatCount = 0;
     if (mogemaUserList.Count > hashideUserList.Count)
     {
         combatCount = hashideUserList.Count;
     }
     else
     {
         combatCount = mogemaUserList.Count;
     }
     for (int i = 0; i < combatCount; i++)
     {
         FightCombatProcess process = new FightCombatProcess();
         process.stage = fightGroup.Stage;
         process.FastID = info.FastID;
         FightUser cuser1 = mogemaUserList[i];
         int toIndex = i + 1;
         FightUser cuser2 = toIndex < hashideUserList.Count ? hashideUserList[toIndex] : hashideUserList[0];
         if (cuser1 == null || cuser2 == null) continue;
         if (cuser1.UserId.Equals(cuser2.UserId)) continue;
         //cuser1.IsRemove = true;
         //cuser2.IsRemove = true;
         //配对状态
         TraceLog.ReleaseWriteFatal("触发战斗A公会:{0}名称:{1},B公会:{2}名称:{3}", cuser1.GuildID, cuser1.UserName, cuser2.GuildID, cuser2.UserName);
         AsyncDoCombat(cuser1, cuser2, process);
     }
     ServerFightGroupWinGuildID(fightGroup, info.FastID);
 }
Exemplo n.º 7
0
        /// <summary>
        /// 一方公会没人参战时判断
        /// </summary>
        /// <param name="mogemaUserList"></param>
        /// <param name="hashideUserList"></param>
        public static void TriggeerMemberNumNotEnouth(List<FightUser> mogemaUserList, List<FightUser> hashideUserList, ServerFightGroup fightGroup)
        {
            if ((mogemaUserList.Count > 0 && hashideUserList.Count > 0) || !string.IsNullOrEmpty(fightGroup.WinGuildID))
            {
                return;
            }
            if (mogemaUserList.Count > 0 && hashideUserList.Count == 0)
            {
                for (int i = 0; i < mogemaUserList.Count; i++)
                {
                    FightUser cuser1 = mogemaUserList[i];
                    if (cuser1.IsNotEnough) return;
                    cuser1.IsNotEnough = true;
                    cuser1.WinCount = MathUtils.Addition(cuser1.WinCount, 1);
                    GameUser user1 = UserCacheGlobal.CheckLoadUser(cuser1.UserId);
                    if (user1 == null)
                    {
                        return;
                    }
                    var fightInfo = new ConfigCacheSet<GuildFightInfo>().FindKey(cuser1.CityID);
                    if (fightInfo != null)
                    {
                        int obtainNum = (user1.UserLv * fightInfo.Victory).ToInt();
                        user1.ObtainNum = MathUtils.Addition(user1.ObtainNum, obtainNum);
                    }
                    fightGroup.Awin = MathUtils.Addition(fightGroup.Awin, 1);
                    //一方公会没人参战状态
                    _log.SaveDebugLog(string.Format("公会城市争斗战[{0}]配对[{1}]战斗", cuser1.UserName, string.Empty));
                }
            }

            if (mogemaUserList.Count == 0 && hashideUserList.Count > 0)
            {
                for (int i = 0; i < hashideUserList.Count; i++)
                {
                    FightUser cuser = hashideUserList[i];
                    if (cuser.IsNotEnough) return;
                    cuser.IsNotEnough = true;
                    cuser.WinCount = MathUtils.Addition(cuser.WinCount, 1);
                    GameUser user = UserCacheGlobal.CheckLoadUser(cuser.UserId);
                    if (user == null)
                    {
                        return;
                    }
                    var fightInfo = new ConfigCacheSet<GuildFightInfo>().FindKey(cuser.CityID);
                    if (fightInfo != null)
                    {
                        int obtainNum = (user.UserLv * fightInfo.Victory).ToInt();
                        user.ObtainNum = MathUtils.Addition(user.ObtainNum, obtainNum);
                    }
                    fightGroup.Bwin = MathUtils.Addition(fightGroup.Bwin, 1);
                    //一方公会没人参战状态
                    _log.SaveDebugLog(string.Format("公会城市争斗战[{0}]配对[{1}]战斗", string.Empty, cuser.UserName));
                }
            }
            ServerFightGroupWinGuildID(fightGroup, info.FastID);
        }
Exemplo n.º 8
0
        public static void ServerFightGroupWinGuildID(ServerFightGroup fightGroup, int fastID)
        {
            var mogemaUserList = _fightUserList.FindAll(m => !m.IsRemove && m.GuildID == fightGroup.GuildIDA);
            var hashideUserList = _fightUserList.FindAll(m => !m.IsRemove && m.GuildID == fightGroup.GuildIDB);
            if (mogemaUserList.Count > 0 && hashideUserList.Count > 0)
            {
                return;
            }
            if (fightGroup.Awin > fightGroup.Bwin)
            {
                fightGroup.WinGuildID = fightGroup.GuildIDA;
                ServerFightLostCount(fightGroup.WinGuildID);
                FightRankID(fightGroup.Stage, fightGroup.GuildIDB);
            }
            else if (fightGroup.Bwin > fightGroup.Awin)
            {
                fightGroup.WinGuildID = fightGroup.GuildIDB;
                ServerFightLostCount(fightGroup.WinGuildID);
                FightRankID(fightGroup.Stage, fightGroup.GuildIDA);
            }
            else
            {
                fightGroup.WinGuildID = ServerFightGuildID(fightGroup.GuildIDA, fightGroup.GuildIDB);
                ServerFightLostCount(fightGroup.WinGuildID);
                FightRankID(fightGroup.Stage, fightGroup.WinGuildID);
            }

            if (fightGroup.Stage == FightStage.final && !string.IsNullOrEmpty(fightGroup.WinGuildID))
            {
                ServerFight serverFight = new ShareCacheStruct<ServerFight>().FindKey(fastID, fightGroup.WinGuildID);
                if (serverFight != null)
                {
                    serverFight.RankID = 1;
                    foreach (var fightUser in _fightUserList)
                    {
                        fightUser.IsRemove = true;
                        GameUser user = UserCacheGlobal.CheckLoadUser(fightUser.UserId);
                        if (user != null)
                        {
                            user.UserStatus = UserStatus.Normal;
                        }
                    }
                }
            }
        }