/// <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++; } }
public static bool IsFightLenth(ServerFight[] fightArray) { if (fightArray.Length == 1) { fightArray[0].RankID = 1; fightArray[0].Stage = FightStage.final; GetServerFightGroup(fightArray[0].CityID, fightArray[0].GuildID, string.Empty); return true; } return false; }
public override bool TakeAction() { if (string.IsNullOrEmpty(ContextUser.MercenariesID)) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6203_GuildMemberNotEnough; return false; } GuildMember member = new ShareCacheStruct<GuildMember>().FindKey(ContextUser.MercenariesID, ContextUser.UserID); if (member == null || member.PostType == PostType.Member) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6404_OrdinaryMemberNotCompetence; return false; } UserGuild guild = new ShareCacheStruct<UserGuild>().FindKey(ContextUser.MercenariesID); if (guild == null) { ErrorCode = LanguageManager.GetLang().ErrorCode; return false; } FightCombat fightCombat = new FightCombat(); var cacheSet = new ShareCacheStruct<ServerFight>(); ServerFight fight = cacheSet.FindKey(fightCombat.FastID, ContextUser.MercenariesID); if (fight != null) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6404_HaveSignedUp; return false; } DateTime nextDate; FightStage stage = GuildFightCombat.GetStage(out nextDate); if (GuildFightCombat.IsFightDate()) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6404_CityABattleTime; return false; } if (stage != FightStage.Apply) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6404_CityABattleTime; return false; } //if (DateTime.Now > fightCombat.GuildEndTime && DateTime.Now < fightCombat.GuildStartTime) //{ // ErrorCode = LanguageManager.GetLang().ErrorCode; // ErrorInfo = LanguageManager.GetLang().St6404_OutRegistrationTime; // return false; //} GuildFightInfo fightInfo = new ConfigCacheSet<GuildFightInfo>().FindKey(cityID); if (fightInfo == null) { ErrorCode = LanguageManager.GetLang().ErrorCode; return false; } if (guild.GuildLv < fightInfo.GuildLv) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6404_GuildLvNotEnough; return false; } if (guild.CurrDonateNum < fightInfo.SkillNum) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6404_CurrDonateNumNotEnough; return false; } guild.CurrDonateNum = MathUtils.Subtraction(guild.CurrDonateNum, fightInfo.SkillNum); fight = new ServerFight(fightCombat.FastID, ContextUser.MercenariesID); fight.GuildBanner = string.Empty; fight.CityID = cityID; fight.RankID = 0; fight.ApplyDate = DateTime.Now; fight.IsRemove = false; fight.IsBanner = false; cacheSet.Add(fight, GameEnvironment.CacheGlobalPeriod); ErrorCode = 0; ErrorInfo = LanguageManager.GetLang().St6401_SuccessfulRegistration; return true; }