/// <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; } } }
/// <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); }
/// <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++; } }
/// <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); } } }
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); }
/// <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); }
/// <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); }
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; } } } } }