Пример #1
0
        public bool ChangeRank(GuildEntity guild, GuildMemberRank operatorRank, GuildMember targetMember, GuildMemberRank toRank)
        {
            Log <GuildAPI> .Logger.InfoFormat("ChangeRank: MemberRank[{0}], MemberSN[{1}], ToRank[{2}]", operatorRank, targetMember.Key.NexonSN, toRank);

            if (toRank == GuildMemberRank.Unknown)
            {
                if (operatorRank.HasSecedePermission(targetMember.Rank, toRank))
                {
                    Log <GuildAPI> .Logger.InfoFormat("UserSecede: ServiceCode[{0}], GuildSN[{1}], MemberNexonSN[{2}]", GuildAPI.ServerCode, guild.GuildSN, targetMember.Key.NexonSN);

                    HeroesGuild.UserSecede(GuildAPI.ServerCode, guild.GuildSN, targetMember.Key.NexonSN, targetMember.Key.CharacterSN, targetMember.Key.CharacterName);
                    using (HeroesDataContext heroesDataContext = new HeroesDataContext())
                    {
                        heroesDataContext.UpdateGuildCharacterInfo(new long?(targetMember.Key.CID), new long?(0L));
                        GuildLog.AddGuildLedger(new LogData((long)guild.GuildSN, targetMember.Key.CID, OperationType.GainGuildPoint, GuildLedgerEventType.UpdateGuildUserPoint, "0", "Secede"));
                    }
                    return(true);
                }
            }
            else if (operatorRank.HasRankChangePermission(targetMember.Rank, toRank))
            {
                Log <GuildAPI> .Logger.InfoFormat("UserTypeModify: ServiceCode[{0}], GuildSN[{1}], MemberNexonSN[{2}]", GuildAPI.ServerCode, guild.GuildSN, targetMember.Key.NexonSN);

                HeroesGuild.UserTypeModify(GuildAPI.ServerCode, guild.GuildSN, targetMember.Key.NexonSN, targetMember.Key.CharacterSN, targetMember.Key.CharacterName, this.ConvertToGroupUserType(toRank.ToGroupUserType()));
                return(true);
            }
            return(false);
        }
Пример #2
0
        public override IEnumerable <object> Run()
        {
            HeroesDataContext context = new HeroesDataContext();

            context.UpdateGuildInfo(new int?(FeatureMatrix.GameCode), new int?(GuildAPI.ServerCode), new int?(base.Entity.GuildSN), null, null, null, null, base.Operation.Text, new int?(FeatureMatrix.GetInteger("InGameGuild_MaxMember")), null);
            base.Entity.GuildInfo.GuildNotice = base.Operation.Text;
            base.Entity.ReportGuildInfoChanged();
            base.Entity.Sync();
            base.Finished = true;
            yield return(new OkMessage());

            yield break;
        }
Пример #3
0
        public bool set_guild_level()
        {
            int argInt  = base.Operation.GetArgInt(0, 1);
            int argInt2 = base.Operation.GetArgInt(1, 0);

            base.Entity.SetGuildLevel(argInt, argInt2);
            using (HeroesDataContext heroesDataContext = new HeroesDataContext())
            {
                heroesDataContext.UpdateGuildInfo(new int?(FeatureMatrix.GameCode), new int?(GuildAPI.ServerCode), new int?(base.Entity.GuildSN), null, null, new int?(base.Entity.GuildInfo.GuildLevel), new long?(base.Entity.GuildInfo.GuildPoint), null, new int?(FeatureMatrix.GetInteger("InGameGuild_MaxMember")), null);
            }
            base.Entity.ReportGuildInfoChanged();
            base.Entity.Sync();
            return(true);
        }
        public override IEnumerable <object> Run()
        {
            this.Finished = true;
            string guildName = this.Operation.GuildName;
            string guildID   = this.Operation.GuildID;
            string guildLog  = string.Format("GuildSN={0}, GuildID={1}, GuildName={2}", (object)this.Operation.GuildSN, (object)guildID, (object)guildName);

            if (guildName != null)
            {
                GroupNameCheckResult namingResult = GuildAPI.GetAPI().CheckGroupName(this.Operation.GuildName);
                if (namingResult != GroupNameCheckResult.Succeed)
                {
                    GuildLog.AddGuildLedger(new LogData((long)this.Operation.GuildSN, this.Operation.MemberKey.CID, OperationType.HeroesCore_GuildIDAndNameModify, GuildLedgerEventType.ChangeIDAndName_InvalidName, guildLog));
                    yield return((object)ChangeGuildIDAndName.ResultCodeEnum.Fail_InvalidGuildName);

                    yield break;
                }
            }
            if (guildID != null)
            {
                GroupIDCheckResult checkResult = GuildAPI.GetAPI().CheckGroupID(guildID);
                if (checkResult != GroupIDCheckResult.Succeed)
                {
                    GuildLog.AddGuildLedger(new LogData((long)this.Operation.GuildSN, this.Operation.MemberKey.CID, OperationType.HeroesCore_GuildIDAndNameModify, GuildLedgerEventType.ChangeIDAndName_InvalidID, guildLog));
                    yield return((object)ChangeGuildIDAndName.ResultCodeEnum.Fail_InvalidGuildID);

                    yield break;
                }
            }
            using (HeroesDataContext heroesDataContext = new HeroesDataContext())
            {
                if (heroesDataContext.GuildInfoUpdate(new int?(this.Operation.GuildSN), guildID, guildName) != 0)
                {
                    GuildLog.AddGuildLedger(new LogData((long)this.Operation.GuildSN, this.Operation.MemberKey.CID, OperationType.HeroesCore_GuildIDAndNameModify, GuildLedgerEventType.ChangeIDAndName_UpdateFailed, guildLog));
                    yield return((object)ChangeGuildIDAndName.ResultCodeEnum.Fail_GuildInfoUpdateFailed);

                    yield break;
                }
                else
                {
                    GuildLog.AddGuildLedger(new LogData((long)this.Operation.GuildSN, this.Operation.MemberKey.CID, OperationType.HeroesCore_GuildIDAndNameModify, GuildLedgerEventType.ChangeIDAndName_Success, guildLog));
                }
            }
            if (this.Entity != null)
            {
                this.Entity.ReportGuildInfoChanged();
                this.Entity.Sync();
            }
            yield return((object)ChangeGuildIDAndName.ResultCodeEnum.Success);
        }
Пример #5
0
        public override IEnumerable <object> Run()
        {
            bool leaveResult = false;
            HeroesGuildMemberInfo leaveFuncResult = null;

            if (FeatureMatrix.IsEnable("GuildProcessorNotUseAsync"))
            {
                leaveResult = true;
                GuildAPI.GetAPI().LeaveGuild(base.Entity, base.Operation.Key);
                leaveFuncResult = GuildAPI.GetAPI().GetMemberInfo(base.Entity, base.Operation.Key);
            }
            else
            {
                AsyncFuncSync <HeroesGuildMemberInfo> sync = new AsyncFuncSync <HeroesGuildMemberInfo>(delegate
                {
                    GuildAPI.GetAPI().LeaveGuild(base.Entity, base.Operation.Key);
                    return(GuildAPI.GetAPI().GetMemberInfo(base.Entity, base.Operation.Key));
                });
                yield return(sync);

                leaveResult     = sync.Result;
                leaveFuncResult = sync.FuncResult;
            }
            base.Finished = true;
            if (leaveResult)
            {
                if (leaveFuncResult != null)
                {
                    base.Entity.UpdateGroupMemberInfo(base.Operation.Key, leaveFuncResult);
                    base.Entity.Sync();
                    yield return(new FailMessage("[LeaveGuildProcessor] leaveFuncResult"));
                }
                else
                {
                    using (HeroesDataContext heroesDataContext = new HeroesDataContext())
                    {
                        heroesDataContext.UpdateGuildCharacterInfo(new long?(base.Operation.Key.CID), new long?(0L));
                        GuildLog.AddGuildLedger(new LogData((long)base.Entity.GuildSN, base.Operation.Key.CID, OperationType.GainGuildPoint, GuildLedgerEventType.UpdateGuildUserPoint, "0", "LeaveGuild"));
                    }
                    base.Entity.UpdateGroupMemberInfo(base.Operation.Key, leaveFuncResult);
                    base.Entity.Sync();
                    yield return(new OkMessage());
                }
            }
            else
            {
                yield return(new FailMessage("[LeaveGuildProcessor] leaveResult"));
            }
            yield break;
        }
Пример #6
0
        public bool GiveGP()
        {
            int  argInt  = base.Operation.GetArgInt(0, 0);
            int  argInt2 = base.Operation.GetArgInt(1, 255);
            bool flag    = base.Operation.GetArgInt(2, 0) != 0;

            if (!GPGainTypeUtil.IsValidGPGainTypeValue(argInt2, true))
            {
                Log <_CheatCommandProcessor> .Logger.ErrorFormat("Invalid gainType value is retrieved from DB: GPGainType: {0}, GuildSN: {1}", argInt2, base.Entity.GuildSN);

                return(false);
            }
            if (!flag)
            {
                int num = base.Entity.GiveGP(argInt, (GPGainType)argInt2, 0L);
                if (num != 0)
                {
                    using (HeroesDataContext heroesDataContext = new HeroesDataContext())
                    {
                        heroesDataContext.UpdateGuildInfo(new int?(FeatureMatrix.GameCode), new int?(GuildAPI.ServerCode), new int?(base.Entity.GuildSN), null, null, new int?(base.Entity.GuildInfo.GuildLevel), new long?(base.Entity.GuildInfo.GuildPoint), null, new int?(FeatureMatrix.GetInteger("InGameGuild_MaxMember")), null);
                    }
                    base.Entity.ReportGuildInfoChanged();
                    base.Entity.Sync();
                }
                return(true);
            }
            long num2 = 0L;

            foreach (KeyValuePair <string, OnlineGuildMember> keyValuePair in base.Entity.OnlineMembers)
            {
                if (keyValuePair.Value.FID == base.Connection.RemoteID)
                {
                    num2 = keyValuePair.Value.CID;
                    break;
                }
            }
            if (num2 == 0L)
            {
                Log <_CheatCommandProcessor> .Logger.WarnFormat("Could not find _CheatCommand requester by FID. FID: {0}", base.Connection.RemoteID);

                return(false);
            }
            GiveGuildGP giveGuildGP = new GiveGuildGP();

            giveGuildGP.GainType = (GPGainType)argInt2;
            giveGuildGP.GiveDict.Add(num2, argInt);
            this.service.RequestOperation(base.Entity.Entity, new Location(base.Entity.GuildID, "GuildService.GuildService"), giveGuildGP);
            return(true);
        }
Пример #7
0
        public static InGameGuildInfo ToGuildInfo(this HeroesGuildInfo groupInfo)
        {
            InGameGuildInfo result = null;

            try
            {
                HeroesDataContext heroesDataContext = new HeroesDataContext();
                int maxMemberLimit = heroesDataContext.GetMaxMemberLimit(groupInfo.GuildSN);
                if (FeatureMatrix.IsEnable("NewbieGuildRecommend"))
                {
                    GetInGameGuildInfo guildInfo   = heroesDataContext.GetGuildInfo(groupInfo.GuildSN);
                    int      guildLevel            = 1;
                    long     guildPoint            = 0L;
                    DateTime guildLastDailyGPReset = heroesDataContext.GetGuildLastDailyGPReset(groupInfo.GuildSN);
                    Dictionary <byte, int> dailyGainGP;
                    if (FeatureMatrix.IsEnable("GuildLevel"))
                    {
                        guildLevel = guildInfo.Level;
                        guildPoint = guildInfo.Exp;
                        DateTime prevDailyGPResetTime = GuildContents.GetPrevDailyGPResetTime();
                        if (guildLastDailyGPReset >= prevDailyGPResetTime)
                        {
                            dailyGainGP = heroesDataContext.GetGuildDailyGainGP(groupInfo.GuildSN);
                        }
                        else
                        {
                            dailyGainGP = new Dictionary <byte, int>();
                            heroesDataContext.ResetInGameGuildDailyGainGP(groupInfo.GuildSN);
                        }
                    }
                    else
                    {
                        dailyGainGP = new Dictionary <byte, int>();
                    }
                    result = new InGameGuildInfo(groupInfo.GuildSN, groupInfo.GuildName, guildLevel, groupInfo.RealUserCount, groupInfo.NameInGroup_Master, maxMemberLimit, guildInfo.NewbieRecommend, guildPoint, guildInfo.Notice, dailyGainGP);
                }
                else
                {
                    result = new InGameGuildInfo(groupInfo.GuildSN, groupInfo.GuildName, 1, groupInfo.RealUserCount, groupInfo.NameInGroup_Master, maxMemberLimit);
                }
            }
            catch (Exception ex)
            {
                Log <GuildAPI> .Logger.ErrorFormat("Exception occured in GuildAPI_Extension::ToGuildInfo( GroupInfo ) : {0}", ex.ToString());

                return(null);
            }
            return(result);
        }
Пример #8
0
        public override IEnumerable <object> Run()
        {
            bool queryResult = false;
            HeroesUserGuildInfo queryFuncResult = null;

            if (FeatureMatrix.IsEnable("GuildProcessorNotUseAsync"))
            {
                queryResult = true;
                List <HeroesUserGuildInfo> guildInfo = GuildAPI.GetAPI().GetGuildInfo(base.Operation.GuildMemberKey);
                if (guildInfo.Count > 0)
                {
                    queryFuncResult = guildInfo.First <HeroesUserGuildInfo>();
                }
            }
            else
            {
                AsyncFuncSync <HeroesUserGuildInfo> sync = new AsyncFuncSync <HeroesUserGuildInfo>(delegate
                {
                    List <HeroesUserGuildInfo> guildInfo3 = GuildAPI.GetAPI().GetGuildInfo(base.Operation.GuildMemberKey);
                    if (guildInfo3.Count == 0)
                    {
                        return(null);
                    }
                    return(guildInfo3.First <HeroesUserGuildInfo>());
                });
                yield return(sync);

                queryResult     = sync.Result;
                queryFuncResult = sync.FuncResult;
            }
            base.Finished = true;
            if (queryResult)
            {
                if (queryFuncResult == null)
                {
                    Log <QueryGuildIDProcessor> .Logger.WarnFormat("[{0}] No Guild", base.Operation.GuildMemberKey.CharacterName);

                    yield return(0L);

                    yield return("");

                    yield return(0);

                    yield return(0);

                    int maxMember = FeatureMatrix.IsEnable("InGameGuild") ? FeatureMatrix.GetInteger("InGameGuild_MaxMember") : 0;
                    yield return(maxMember);
                }
                else
                {
                    Log <QueryGuildIDProcessor> .Logger.WarnFormat("[{0}] GuildSN[{1}] GuildName[{2}] Rank[{3}] ", new object[]
                    {
                        base.Operation.GuildMemberKey.CharacterName,
                        queryFuncResult.CharacterSN,
                        queryFuncResult.CharacterName,
                        queryFuncResult.GroupUserType
                    });

                    int maxMemberLimit = 0;
                    int level          = 0;
                    using (HeroesDataContext heroesDataContext = new HeroesDataContext())
                    {
                        GetInGameGuildInfo guildInfo2 = heroesDataContext.GetGuildInfo(queryFuncResult.GuildSN);
                        maxMemberLimit = guildInfo2.MaxMemberLimit;
                        level          = guildInfo2.Level;
                    }
                    yield return((long)queryFuncResult.GuildSN);

                    yield return(queryFuncResult.GuildName);

                    yield return(level);

                    yield return((int)queryFuncResult.GroupUserType.ToGuildMemberRank());

                    yield return(maxMemberLimit);
                }
            }
            else
            {
                yield return(new FailMessage("[QueryGuildIDProcessor] queryResult"));
            }
            yield break;
        }
Пример #9
0
        public bool ChangeRank(GuildEntity guild, GuildMemberRank operatorRank, GuildMember targetMember, GuildMemberRank toRank)
        {
            int num = -1;
            HeroesGuildDBDataContext heroesGuildDBDataContext = new HeroesGuildDBDataContext();

            if (toRank == GuildMemberRank.Unknown)
            {
                if (operatorRank.HasSecedePermission(targetMember.Rank, toRank))
                {
                    try
                    {
                        num = heroesGuildDBDataContext.GuildUserSecede(new int?(GuildAPI.ServerCode), new int?(guild.GuildSN), new int?(targetMember.Key.NexonSN), new long?((long)targetMember.Key.CharacterSN), targetMember.Key.CharacterName);
                    }
                    catch
                    {
                        Log <GuildAPI> .Logger.ErrorFormat("GuildUserSecede fail in ChangeRank : ServiceCode[{0}], GuildSN[{1}], MemberNexonSN[{2}]", GuildAPI.ServerCode, guild.GuildSN, targetMember.Key.NexonSN);
                    }
                    if (num == 0)
                    {
                        GuildLog.AddGuildLedger(new LogData((long)guild.GuildSN, targetMember.Key.CID, OperationType.GainGuildPoint, GuildLedgerEventType.UpdateGuildUserPoint, "0", "Secede"));
                        int num2 = -1;
                        try
                        {
                            using (HeroesDataContext heroesDataContext = new HeroesDataContext())
                            {
                                num2 = heroesDataContext.UpdateGuildCharacterInfo(new long?(targetMember.Key.CID), new long?(0L));
                            }
                        }
                        catch
                        {
                            Log <GuildAPI> .Logger.ErrorFormat("UpdateGuildCharacterInfo fail in ChangeRank : ServiceCode[{0}], GuildSN[{1}], MemberNexonSN[{2}], toRank[{3}]", new object[]
                            {
                                GuildAPI.ServerCode,
                                guild.GuildSN,
                                targetMember.Key.NexonSN,
                                toRank
                            });
                        }
                        if (num2 == 0)
                        {
                            GuildLog.AddGuildLedger(new LogData((long)guild.GuildSN, targetMember.Key.CID, OperationType.HeroesCore_LeaveGuild, GuildLedgerEventType.Success, string.Format("GuildSn: {0}, GuildToString: {1}", guild.GuildSN, guild.ToString(), targetMember.Key.ToString())));
                        }
                    }
                    else
                    {
                        GuildLog.AddGuildLedger(new LogData((long)guild.GuildSN, targetMember.Key.CID, OperationType.HeroesCore_LeaveGuild, GuildLedgerEventType.DatabaseFail, string.Format("GuildSn: {0}, GuildToString: {1}", guild.GuildSN, guild.ToString(), targetMember.Key.ToString())));
                    }
                }
            }
            else if (operatorRank.HasRankChangePermission(targetMember.Rank, toRank))
            {
                Log <GuildAPI> .Logger.InfoFormat("UserTypeModify: ServiceCode[{0}], GuildSN[{1}], MemberNexonSN[{2}]", GuildAPI.ServerCode, guild.GuildSN, targetMember.Key.NexonSN);

                try
                {
                    num = heroesGuildDBDataContext.GuildUserTypeModify(new int?(GuildAPI.ServerCode), new int?(guild.GuildSN), new int?(targetMember.Key.NexonSN), new int?(targetMember.Key.CharacterSN), targetMember.Key.CharacterName, new int?((int)toRank.ToGroupUserType()));
                }
                catch (Exception ex)
                {
                    Log <HeroesGuildAPI> .Logger.Error("Error in ChangeRank(GuildEntity guild, GuildMemberRank operatorRank, GuildMember targetMember, GuildMemberRank toRank)", ex);
                }
                if (num == 0)
                {
                    GuildLog.AddGuildLedger(new LogData((long)guild.GuildSN, targetMember.Key.CID, OperationType.HeroesCore_ChangeRank, GuildLedgerEventType.Success, string.Format("GuildSn: {0}, GuildToString: {1}", guild.GuildSN, guild.ToString(), targetMember.Key.ToString())));
                }
                else
                {
                    GuildLog.AddGuildLedger(new LogData((long)guild.GuildSN, targetMember.Key.CID, OperationType.HeroesCore_ChangeRank, GuildLedgerEventType.DatabaseFail, string.Format("GuildSn: {0}, GuildToString: {1}", guild.GuildSN, guild.ToString(), targetMember.Key.ToString())));
                }
            }
            return(num == 0);
        }
Пример #10
0
        public override IEnumerable <object> Run()
        {
            if (!this.Entity.IsInitialized)
            {
                Log <JoinGuildProcessor> .Logger.WarnFormat("JoinGuildProcessor Set TriggerSync");

                TriggerSync triggerSync = new TriggerSync(20000);
                this.Entity.InitializCompleted += new Action(triggerSync.Trigger);
                this.Entity.QueryGuildInfo();
                yield return(triggerSync);
            }
            bool checkResult     = false;
            bool checkFuncResult = false;

            if (FeatureMatrix.IsEnable("GuildProcessorNotUseAsync"))
            {
                checkResult     = true;
                checkFuncResult = FeatureMatrix.IsEnable("koKR") ? GuildAPI.GetAPI().CheckGuild((long)this.Operation.Key.CharacterSN, this.Operation.Key.NexonSN, this.Operation.Key.CharacterName) : GuildAPI.GetAPI().GetGuildInfo(this.Operation.Key).Count == 0;
                if (!checkResult)
                {
                    Log <JoinGuildProcessor> .Logger.ErrorFormat("Failed to join the guild. Cannot see my guild.{0}", (object)this.Operation.Key.ToString());

                    this.Finished = true;
                    yield return("GuildCheckFail");
                }
                if (!checkFuncResult)
                {
                    Log <JoinGuildProcessor> .Logger.InfoFormat("Failed to join the guild. Already belong to another guild.. {0}", (object)this.Operation.Key.ToString());

                    this.Finished = true;
                    yield return("HasGuild");

                    if (this.Entity.GetRegularMemberCount() >= this.Entity.GetMaxMemberCount())
                    {
                        Log <JoinGuildProcessor> .Logger.InfoFormat("Failed to join the guild. Guild members are full.{0} >= {1}", (object)this.Entity.GetRegularMemberCount(), (object)this.Entity.GetMaxMemberCount());

                        this.Finished = true;
                        yield return("GuildFull");
                    }
                    bool joinResult = false;
                    HeroesGuildMemberInfo joinFuncResult = (HeroesGuildMemberInfo)null;
                    if (FeatureMatrix.IsEnable("GuildProcessorNotUseAsync"))
                    {
                        joinResult = true;
                        try
                        {
                            GuildAPI.GetAPI().Join(this.Entity, this.Operation.Key);
                            joinFuncResult = GuildAPI.GetAPI().GetMemberInfo(this.Entity, this.Operation.Key);
                        }
                        catch (Exception ex)
                        {
                            Log <JoinGuildProcessor> .Logger.Warn((object)ex);
                        }
                        this.Finished = true;
                        if (joinResult && joinFuncResult != null && joinFuncResult.emGroupUserType.ToGuildMemberRank() == GuildMemberRank.Wait)
                        {
                            using (HeroesDataContext heroesDataContext = new HeroesDataContext())
                            {
                                heroesDataContext.UpdateGuildCharacterInfo(new long?(this.Operation.Key.CID), new long?(0L));
                                GuildLog.AddGuildLedger(new LogData((long)this.Entity.GuildSN, this.Operation.Key.CID, OperationType.GainGuildPoint, GuildLedgerEventType.UpdateGuildUserPoint, "0", "JoinGuild"));
                            }
                            this.Entity.UpdateGroupMemberInfo(this.Operation.Key, joinFuncResult);
                            this.Entity.Sync();
                            yield return(base.Entity.GuildID);
                        }
                        yield return(new FailMessage("[JoinGuildProcessor] ToGuildMemberRank")
                        {
                            Reason = FailMessage.ReasonCode.LogicalFail
                        });
                    }
                    AsyncFuncSync <HeroesGuildMemberInfo> sync = new AsyncFuncSync <HeroesGuildMemberInfo>((Func <HeroesGuildMemberInfo>)(() =>
                    {
                        try
                        {
                            GuildAPI.GetAPI().Join(this.Entity, this.Operation.Key);
                            return(GuildAPI.GetAPI().GetMemberInfo(this.Entity, this.Operation.Key));
                        }
                        catch (Exception ex)
                        {
                            Log <JoinGuildProcessor> .Logger.Warn((object)ex);
                            return((HeroesGuildMemberInfo)null);
                        }
                    }));
                    yield return(sync);
                }
                AsyncFuncSync <bool> checkSync = new AsyncFuncSync <bool>((Func <bool>)(() =>
                {
                    if (!FeatureMatrix.IsEnable("koKR"))
                    {
                        return(GuildAPI.GetAPI().GetGuildInfo(this.Operation.Key).Count == 0);
                    }
                    return(GuildAPI.GetAPI().CheckGuild((long)this.Operation.Key.CharacterSN, this.Operation.Key.NexonSN, this.Operation.Key.CharacterName));
                }));
                yield return(checkSync);
            }
        }
Пример #11
0
        public override IEnumerable <object> Run()
        {
            Log <OpenGuildProcessor> .Logger.Warn("Starting OpenGuild...");

            Func <int> func = delegate
            {
                GroupIDCheckResult groupIDCheckResult = GuildAPI.GetAPI().CheckGroupID(base.Operation.GuildNameID);
                if (groupIDCheckResult != GroupIDCheckResult.Succeed)
                {
                    int result;
                    switch (groupIDCheckResult)
                    {
                    case GroupIDCheckResult.IDNotSupplied:
                        result = -8;
                        break;

                    case GroupIDCheckResult.DuplicatedID:
                        result = -9;
                        break;

                    case GroupIDCheckResult.InvalidCharacter:
                        result = -1;
                        break;

                    default:
                        Log <OpenGuildProcessor> .Logger.ErrorFormat("CheckGroupID result is {0}, but it's not processed by OpenGuildProcessor.Run().", groupIDCheckResult.ToString());

                        result = -7;
                        break;
                    }
                    return(result);
                }
                GroupNameCheckResult groupNameCheckResult = GuildAPI.GetAPI().CheckGroupName(base.Operation.GuildName);
                if (groupNameCheckResult != GroupNameCheckResult.Succeed)
                {
                    int result2;
                    switch (groupNameCheckResult)
                    {
                    case GroupNameCheckResult.NotMatchedNamingRule:
                        result2 = -2;
                        break;

                    case GroupNameCheckResult.NotMatchedNamingRuleMaxBytes:
                        result2 = -5;
                        break;

                    case GroupNameCheckResult.RepeatedCharacters:
                        result2 = -6;
                        break;

                    case GroupNameCheckResult.DuplicatedName:
                        result2 = -4;
                        break;

                    default:
                        result2 = -7;
                        break;
                    }
                    return(result2);
                }
                return(GuildAPI.GetAPI().OpenGuild(base.Operation.GuildMemberKey, base.Operation.GuildName, base.Operation.GuildNameID, base.Operation.GuildIntro));
            };
            bool openResult     = false;
            int  openFuncResult = -99;

            if (FeatureMatrix.IsEnable("GuildProcessorNotUseAsync"))
            {
                openResult     = true;
                openFuncResult = func();
            }
            else
            {
                AsyncFuncSync <int> sync = new AsyncFuncSync <int>(func);
                yield return(sync);

                openResult     = sync.Result;
                openFuncResult = sync.FuncResult;
            }
            Log <OpenGuildProcessor> .Logger.Warn("OpenGuild Finished");

            base.Finished = true;
            if (openResult)
            {
                Log <OpenGuildProcessor> .Logger.WarnFormat("OpenGuild Result : {0}", openResult);

                if (openFuncResult > 0)
                {
                    using (HeroesDataContext heroesDataContext = new HeroesDataContext())
                    {
                        heroesDataContext.UpdateGuildCharacterInfo(new long?(base.Operation.GuildMemberKey.CID), new long?(0L));
                        GuildLog.AddGuildLedger(new LogData((long)openFuncResult, base.Operation.GuildMemberKey.CID, OperationType.GainGuildPoint, GuildLedgerEventType.UpdateGuildUserPoint, "0", "OpenGuild"));
                    }
                    yield return((long)openFuncResult);
                }
                else if (openFuncResult == -1)
                {
                    yield return("GuildID");
                }
                else if (openFuncResult == -2)
                {
                    yield return("GuildNamingRule");
                }
                else if (openFuncResult == -3)
                {
                    yield return("GuildInvalidName");
                }
                else if (openFuncResult == -4)
                {
                    yield return("GuildDuplicatedName");
                }
                else if (openFuncResult == -5)
                {
                    yield return("GuildNamingRuleMaxBytes");
                }
                else if (openFuncResult == -6)
                {
                    yield return("GuildRepeatedCharacters");
                }
                else if (openFuncResult == -7)
                {
                    yield return("GuildEtc");
                }
                else if (openFuncResult == -8)
                {
                    yield return("GuildEmptyID");
                }
                else if (openFuncResult == -9)
                {
                    yield return("GuildDuplicatedID");
                }
                else
                {
                    yield return(new FailMessage("[OpenGuildProcessor] openFuncResult"));
                }
            }
            else
            {
                yield return(new FailMessage("[OpenGuildProcessor] openResult"));
            }
            yield break;
        }
Пример #12
0
        public override IEnumerable <object> Run()
        {
            base.Operation.Result = DirectPurchaseGuildItemResultCode.Success;
            GuildLedgerEventType result    = GuildLedgerEventType.Success;
            GuildMember          myInfo    = base.Entity.GetGuildMember(base.Operation.Key.CharacterName);
            OnlineGuildMember    member    = base.Entity.GetOnlineMember(myInfo.Key.CID);
            string maxIncreaseCountParsing = base.Operation.ItemClass.Replace("guild_extension_member_", "");
            int    maxIncreaseCount        = 0;

            if (!base.Entity.IsInitialized || base.Entity.GuildInfo == null)
            {
                base.Operation.Result = DirectPurchaseGuildItemResultCode.GuildNotInitialize;
                result = GuildLedgerEventType.GuildNotInitialize;
            }
            else if (myInfo == null || !myInfo.Rank.IsMaster() || member == null)
            {
                base.Operation.Result = DirectPurchaseGuildItemResultCode.IsNotMaster;
                result = GuildLedgerEventType.IsNotMaster;
            }
            else if (!int.TryParse(maxIncreaseCountParsing, out maxIncreaseCount))
            {
                base.Operation.Result = DirectPurchaseGuildItemResultCode.CannotParseItem;
                result = GuildLedgerEventType.CannotParseItem;
            }
            else if (FeatureMatrix.GetInteger("InGameGuild_MaxMemberLimit") < base.Entity.GuildInfo.MaxMemberCount + maxIncreaseCount)
            {
                base.Operation.Result = DirectPurchaseGuildItemResultCode.OverMaxMemberLimit;
                result = GuildLedgerEventType.OverMaxMemberLimit;
            }
            if (base.Operation.Result != DirectPurchaseGuildItemResultCode.Success)
            {
                GuildLog.AddGuildLedger(new LogData((long)base.Entity.GuildSN, base.Operation.Key.CID, OperationType.DirectPurchaseGuildItem, result));
                base.Finished = true;
                yield return(base.Operation.Result);
            }
            else
            {
                DirectPickUpByProductNo directPickupOp = new DirectPickUpByProductNo(new List <int>
                {
                    base.Operation.ProductNo
                }, base.Operation.IsCredit);
                OperationSync directPickupSync = new OperationSync
                {
                    Connection = member.CashShopConn,
                    Operation  = directPickupOp
                };
                yield return(directPickupSync);

                if (!directPickupSync.Result)
                {
                    if (directPickupOp.FailReasonString.StartsWith("BeginDirectPurchaseItem"))
                    {
                        base.Operation.Result = DirectPurchaseGuildItemResultCode.BeginDirectPurchaseItem;
                        result = GuildLedgerEventType.BeginDirectPurchaseItem;
                    }
                    else if (directPickupOp.FailReasonString.StartsWith("EndDirectPurchaseItem"))
                    {
                        base.Operation.Result = DirectPurchaseGuildItemResultCode.EndDirectPurchaseItem;
                        result = GuildLedgerEventType.EndDirectPurchaseItem;
                    }
                    else
                    {
                        base.Operation.Result = DirectPurchaseGuildItemResultCode.Unknown;
                        result = GuildLedgerEventType.Unknown;
                    }
                    GuildLog.AddGuildLedger(new LogData((long)base.Entity.GuildSN, base.Operation.Key.CID, OperationType.DirectPurchaseGuildItem, result));
                    base.Finished = true;
                    yield return(new FailMessage("[DirectPurchaseGuildItemProcessor] directPickupSync.Result"));
                }
                else
                {
                    bool updateResult = false;
                    try
                    {
                        HeroesDataContext heroesDataContext = new HeroesDataContext();
                        updateResult = heroesDataContext.UpdateMaxMemberLimit(base.Entity.GuildInfo.GuildSN, base.Entity.GuildInfo.MaxMemberCount + maxIncreaseCount);
                        if (!updateResult)
                        {
                            base.Operation.Result = DirectPurchaseGuildItemResultCode.DatabaseFail;
                            result = GuildLedgerEventType.DatabaseFail;
                        }
                    }
                    catch (Exception ex)
                    {
                        Log <DirectPurchaseGuildItemProcessor> .Logger.Error("UpdateGuildInfoProcessor DataBase Exception ", ex);

                        base.Operation.Result = DirectPurchaseGuildItemResultCode.DatabaseException;
                        result = GuildLedgerEventType.DatabaseException;
                    }
                    HeroesGuildInfo guildInfo = GuildAPI.GetAPI().GetGuildInfo(base.Entity.GuildSN);
                    if (guildInfo != null)
                    {
                        base.Entity.GuildInfo = guildInfo.ToGuildInfo();
                        base.Entity.UpdateGroupInfo();
                        base.Entity.Sync();
                    }
                    else
                    {
                        base.Operation.Result = DirectPurchaseGuildItemResultCode.ReloadFail;
                        result = GuildLedgerEventType.ReloadFail;
                    }
                    if (!updateResult || base.Operation.Result != DirectPurchaseGuildItemResultCode.Success)
                    {
                        RollbackDirectPickUp rollbackPickupOp = new RollbackDirectPickUp
                        {
                            OrderNo       = directPickupOp.OrderNo,
                            ProductNoList = directPickupOp.ProductNoList
                        };
                        OperationSync rollbackPickupSync = new OperationSync
                        {
                            Connection = member.CashShopConn,
                            Operation  = rollbackPickupOp
                        };
                        yield return(rollbackPickupSync);

                        Log <DirectPurchaseGuildItemProcessor> .Logger.ErrorFormat("UpdateGuildInfoProcessor DataBase Fail {0}", base.Entity.GuildSN);

                        GuildLog.AddGuildLedger(new LogData((long)base.Entity.GuildSN, base.Operation.Key.CID, OperationType.DirectPurchaseGuildItem, result));
                        base.Finished = true;
                        yield return(base.Operation.Result);
                    }
                    else
                    {
                        base.Operation.Result = DirectPurchaseGuildItemResultCode.Success;
                        result = GuildLedgerEventType.Success;
                        GuildLog.AddGuildLedger(new LogData((long)base.Entity.GuildSN, base.Operation.Key.CID, OperationType.DirectPurchaseGuildItem, result));
                        base.Finished = true;
                        yield return(base.Operation.Result);
                    }
                }
            }
            yield break;
        }
Пример #13
0
		public override IEnumerable<object> Run()
		{
			base.Finished = true;
			if (!FeatureMatrix.IsEnable("GuildLevel"))
			{
				yield return new FailMessage("[GiveGuildGPProcessor] GuildLevel")
				{
					Reason = FailMessage.ReasonCode.NotSupportedOperation
				};
			}
			else
			{
				using (HeroesDataContext context = new HeroesDataContext())
				{
					bool gpAdded = false;
					foreach (KeyValuePair<long, int> keyValuePair in base.Operation.GiveDict)
					{
						long key = keyValuePair.Key;
						int value = keyValuePair.Value;
						OnlineGuildMember onlineGuildMember = null;
						foreach (KeyValuePair<string, OnlineGuildMember> keyValuePair2 in base.Entity.OnlineMembers)
						{
							if (keyValuePair2.Value.CID == key)
							{
								onlineGuildMember = keyValuePair2.Value;
								break;
							}
						}
						if (onlineGuildMember != null && onlineGuildMember.GuildMember.Rank.IsRegularMember())
						{
							int num = base.Entity.GiveGP(value, base.Operation.GainType, key);
							gpAdded |= (num != 0);
							try
							{
								onlineGuildMember.GuildMember.AddPoint(num);
								long point = onlineGuildMember.GuildMember.GetPoint();
								base.Entity.ReportGuildMemberChanged(onlineGuildMember.GuildMember.Key);
								context.UpdateGuildCharacterInfo(new long?(key), new long?(point));
								GuildLog.AddGuildLedger(new LogData((long)base.Entity.GuildSN, key, OperationType.GainGuildPoint, GuildLedgerEventType.UpdateGuildUserPoint, point.ToString()));
							}
							catch (Exception ex)
							{
								Log<GiveGuildGP>.Logger.ErrorFormat("Error while GiveGuildGPProcessor, Step UpdateGuildCharacterInfo : {0}", ex.ToString());
							}
						}
					}
					if (!gpAdded)
					{
						yield return new FailMessage("[GiveGuildGPProcessor] gpAdded");
						yield break;
					}
					try
					{
						context.UpdateGuildInfo(new int?(FeatureMatrix.GameCode), new int?(GuildAPI.ServerCode), new int?(base.Entity.GuildSN), null, null, new int?(base.Entity.GuildInfo.GuildLevel), new long?(base.Entity.GuildInfo.GuildPoint), null, new int?(FeatureMatrix.GetInteger("InGameGuild_MaxMember")), null);
					}
					catch (Exception ex2)
					{
						Log<GiveGuildGP>.Logger.ErrorFormat("Error while GiveGuildGPProcessor, Step UpdateGuildInfo : {0}", ex2.ToString());
					}
				}
				base.Entity.ReportGuildInfoChanged();
				base.Entity.Sync();
				yield return new OkMessage();
			}
			yield break;
		}