Example #1
0
 private static void AppendLog(int teamId, TeamCombatProcess logTeam)
 {
     if (_combatProcessList != null)
     {
         if (!_combatProcessList.ContainsKey(teamId))
         {
             _combatProcessList.Add(teamId, new TeamCombatResult());
         }
         lock (ThisLock)
         {
             TeamCombatResult tempList = _combatProcessList[teamId];
             tempList.ProcessList.Add(logTeam);
         }
         UserCombatLog log = new UserCombatLog
         {
             CombatLogID   = Guid.NewGuid().ToString(),
             CombatType    = CombatType.MultiPlot,
             UserID        = logTeam.UserId,
             PlotID        = logTeam.PlotID,
             NpcID         = logTeam.PlotNpcID,
             HostileUser   = logTeam.TeamID.ToString(),
             IsWin         = logTeam.IsWin,
             CombatProcess = JsonUtils.Serialize(logTeam.ProcessContainer),
             CreateDate    = DateTime.Now
         };
         var sender = DataSyncManager.GetDataSender();
         sender.Send(log);
     }
 }
Example #2
0
        public override void Process(JsonParameter[] paramList)
        {
            JsonParameterList parameters = JsonParameter.Convert(paramList);
            string            op         = parameters["op"];
            string            userID     = parameters["UserID"];
            GameUser          gameUser   = new PersonalCacheStruct <GameUser>().FindKey(userID);

            OAOperationLog oAOperationLog = new OAOperationLog();

            oAOperationLog.ID         = Guid.NewGuid().ToString();
            oAOperationLog.UserID     = userID;
            oAOperationLog.OpUserID   = Convert.ToInt32(parameters["OpUserID"]);
            oAOperationLog.CreateDate = DateTime.Now;
            if (parameters["EndDate"].Length > 0)
            {
                oAOperationLog.EndDate = Convert.ToDateTime(parameters["EndDate"]);
            }

            oAOperationLog.Reason = parameters["Reason"];
            if (gameUser == null)
            {
                return;
            }
            if (op == "disableId")
            {
                gameUser.UserStatus   = UserStatus.FengJin;
                oAOperationLog.OpType = 1;
            }
            else if (op == "enableId")
            {
                gameUser.UserStatus   = UserStatus.Normal;
                oAOperationLog.OpType = 2;
            }
            else if (op == "disableMsg")
            {
                gameUser.MsgState     = false;
                oAOperationLog.OpType = 3;
            }
            else if (op == "enableMsg")
            {
                gameUser.MsgState     = true;
                oAOperationLog.OpType = 4;
            }
            else
            {
                return;
            }
            //gameUser.Update();
            var sender = DataSyncManager.GetDataSender();

            sender.Send(oAOperationLog);
        }
Example #3
0
        /// <summary>
        /// 灵件操作日志
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="sparePartID"></param>
        /// <param name="userSparepartID"></param>
        /// <param name="userItemID"></param>
        /// <param name="position"></param>
        /// <param name="partStatus"></param>
        public static void AppendSparePartLog(string userId, UserSparePart sparePart, short partStatus)
        {
            UserSparePartLog partLog = new UserSparePartLog()
            {
                UserID      = userId,
                SparePartID = sparePart.SparePartId,
                SparePart   = sparePart,
                PartStatus  = partStatus,
                CreateDate  = DateTime.Now
            };
            var sender = DataSyncManager.GetDataSender();

            sender.Send(partLog);
        }
Example #4
0
 private void OnSyncSql(object state)
 {
     try
     {
         if (Monitor.TryEnter(syncSqlObject, 1000))
         {
             try
             {
                 TraceLog.ReleaseWrite("Sql waiting to be written to the Redis");
                 while (true)
                 {
                     var list = CacheChangeManager.Current.PopSql(100);
                     if (list.Count == 0)
                     {
                         break;
                     }
                     foreach (var key in list)
                     {
                         string redisKey = key;
                         try
                         {
                             dynamic     entity      = CacheFactory.GetEntityFromRedis(redisKey, true);
                             SchemaTable schemaTable = entity.GetSchema();
                             if (entity != null && schemaTable != null)
                             {
                                 DbBaseProvider dbProvider = DbConnectionProvider.CreateDbProvider(schemaTable);
                                 if (dbProvider != null)
                                 {
                                     DataSyncManager.GetDataSender().Send(entity, false);
                                 }
                             }
                         }
                         catch (Exception e)
                         {
                             TraceLog.WriteError("Sync to db {0} error:{1}", redisKey, e);
                         }
                     }
                 }
             }
             finally
             {
                 Monitor.Exit(syncSqlObject);
             }
         }
     }
     catch (Exception ex)
     {
         TraceLog.WriteError("Sql sync error:{0}", ex);
     }
 }
Example #5
0
        public override bool TakeAction()
        {
            try
            {
                DESAlgorithmNew des = new DESAlgorithmNew();
                password = des.DecodePwd(password, GameEnvironment.Setting.ClientDesDeKey);
                if (password.Length > 12 || password.Length < 4)
                {
                    this.ErrorCode = LanguageManager.GetLang().ErrorCode;
                    this.ErrorInfo = LanguageManager.GetLang().St1006_PasswordTooLong;
                    return(false);
                }
                Regex re = new Regex(@"^[\u4e00-\u9fa5\w]+$");
                if (!re.IsMatch(password))
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().St1006_PasswordExceptional;
                    return(false);
                }
                password = CryptoHelper.DES_Encrypt(password, GameEnvironment.Setting.ProductDesEnKey);
                if (SnsManager.ChangePass(Uid, password) <= 0)
                {
                    this.ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo      = LanguageManager.GetLang().St1006_ChangePasswordError;
                    return(false);
                }
                else
                {
                    UserOperationLog userOperationLog = new UserOperationLog();
                    userOperationLog.UserID     = ContextUser.UserID;
                    userOperationLog.ActionID   = ActionIDDefine.Cst_Action1006;
                    userOperationLog.FunctionID = "更新密码";
                    userOperationLog.CreateDate = DateTime.Now;
                    userOperationLog.Num        = 0;

                    var sender = DataSyncManager.GetDataSender();
                    sender.Send(userOperationLog);
                }
            }
            catch (Exception ex)
            {
                this.SaveLog(ex.ToString());
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St1006_PasswordError;
                return(false);
            }
            return(true);
        }
Example #6
0
        /// <summary>
        /// 玩家修炼操作日志表log
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="opType"></param>
        /// <param name="sumNum"></param>
        /// <param name="opNum"></param>
        /// <param name="useGold"></param>
        /// <param name="surplusGold"></param>
        /// <param name="totalGold"></param>
        public static void AppenPracticeLog(string userID, DateTime startDate, DateTime endDate, int continuedTime, int gainExperience)
        {
            UserPracticeLog log = new UserPracticeLog()
            {
                ID             = Guid.NewGuid().ToString(),
                UserID         = userID,
                StartDate      = startDate,
                EndDate        = endDate,
                ContinuedTime  = continuedTime,
                GainExperience = gainExperience,
                CreateDate     = DateTime.Now
            };
            var sender = DataSyncManager.GetDataSender();

            sender.Send(log);
        }
Example #7
0
        /// <summary>
        /// -1:掉落,1增加,2使用,3出售,4出售删除 5合成,6购回
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="itemID"></param>
        /// <param name="num"></param>
        /// <param name="itemLv"></param>
        /// <param name="itemStatus"></param>
        public static void AddItemLog(string userID, int itemID, int num, short itemLv, int itemStatus, string useritemID)
        {
            var itemLog = new UserItemLog();

            itemLog.LogID      = Guid.NewGuid().ToString();
            itemLog.ItemID     = itemID;
            itemLog.UserID     = userID;
            itemLog.ItemStatus = (short)itemStatus;
            itemLog.ItemLv     = itemLv;
            itemLog.Num        = num;
            itemLog.CreateDate = DateTime.Now;
            itemLog.UserItemID = useritemID;
            var sender = DataSyncManager.GetDataSender();

            sender.Send(itemLog);
        }
Example #8
0
        /// <summary>
        /// 从Redis内存移除,并保存到数据库
        /// </summary>
        /// <param name="keys"></param>
        public static void RemoveToDatabase(params string[] keys)
        {
            var entityKeys = new List <string>();
            var entityList = new List <EntityHistory>();

            RedisConnectionPool.ProcessReadOnly(client =>
            {
                foreach (var k in keys)
                {
                    try
                    {
                        string key   = k;
                        string setId = key + "_remove";
                        if (key.EndsWith("_remove"))
                        {
                            setId = key;
                            key   = key.Replace("_remove", "");
                        }
                        else
                        {
                            if (client.ContainsKey(key))
                            {
                                client.Rename(key, setId);
                            }
                        }
                        entityKeys.Add(setId);
                        //转存到DB使用protobuf
                        byte[] keyValues = ProtoBufUtils.Serialize(client.HGetAll(setId));
                        var history      = new EntityHistory()
                        {
                            Key = key, Value = keyValues
                        };
                        entityList.Add(history);
                    }
                    catch (Exception ex)
                    {
                        TraceLog.WriteError("Redis cache remove key:{0} to Database error:{1}", k, ex);
                    }
                }
            });

            if (entityList.Count > 0)
            {
                DataSyncManager.GetDataSender().Send <EntityHistory>(entityList.ToArray());
                RedisConnectionPool.ProcessReadOnly(client => client.RemoveAll(entityKeys));
            }
        }
Example #9
0
        /// <summary>
        /// 新增玩家使用晶石购买log
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="opType"></param>
        /// <param name="sumNum"></param>
        /// <param name="opNum"></param>
        /// <param name="useGold"></param>
        /// <param name="surplusGold"></param>
        /// <param name="totalGold"></param>
        public static void AppenUseGoldLog(string userID, short opType, int sumNum, int opNum, int useGold, int surplusGold, int totalGold)
        {
            UserUseGoldLog log = new UserUseGoldLog
            {
                ID          = Guid.NewGuid().ToString(),
                UserID      = userID,
                OpType      = opType,
                SumNum      = sumNum,
                OpNum       = opNum,
                UseGold     = useGold,
                SurplusGold = surplusGold,
                TotalGold   = totalGold,
                CreateDate  = DateTime.Now
            };
            var sender = DataSyncManager.GetDataSender();

            sender.Send(log);
        }
Example #10
0
        /// <summary>
        /// 3.3.18 玩家庄园log
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="opType"></param>
        /// <param name="sumNum"></param>
        /// <param name="opNum"></param>
        /// <param name="useGold"></param>
        /// <param name="surplusGold"></param>
        /// <param name="totalGold"></param>
        public static void AppenLandLog(string userID, short opType, int generalID, int postion, int useGold, short plantQuality, int gainNum, int buyNum)
        {
            UserLandLog log = new UserLandLog
            {
                ID           = Guid.NewGuid().ToString(),
                UserID       = userID,
                OpType       = opType,
                GeneralID    = generalID,
                Postion      = postion,
                PlantQuality = plantQuality,
                GainNum      = gainNum,
                BuyNum       = buyNum,
                CreateDate   = DateTime.Now
            };
            var sender = DataSyncManager.GetDataSender();

            sender.Send(log);
        }
Example #11
0
        /// <summary>
        /// 玩家强化(装备,魔术)log
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="opType"></param>
        /// <param name="sumNum"></param>
        /// <param name="opNum"></param>
        /// <param name="useGold"></param>
        /// <param name="surplusGold"></param>
        /// <param name="totalGold"></param>
        public static void AppenStrongLog(string userID, short opType, string userItemID, int itemID, short useType, short strongLv, int useGold, int generalID)
        {
            UserStrongLog log = new UserStrongLog
            {
                ID         = Guid.NewGuid().ToString(),
                UserID     = userID,
                OpType     = opType,
                UserItemID = userItemID,
                ItemID     = itemID,
                UseType    = useType,
                StrongLv   = strongLv,
                UseGold    = useGold,
                GeneralID  = generalID,
                CreateDate = DateTime.Now
            };
            var sender = DataSyncManager.GetDataSender();

            sender.Send(log);
        }
Example #12
0
        /// <summary>
        /// 玩家扫荡操作日志表log
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="opType"></param>
        /// <param name="sumNum"></param>
        /// <param name="opNum"></param>
        /// <param name="useGold"></param>
        /// <param name="surplusGold"></param>
        /// <param name="totalGold"></param>
        public static void AppenRaidsLog(string userID, short opType, DateTime startDate, DateTime endDate, short energy, int useGold)
        {
            int          continuedTime = (int)(endDate - startDate).TotalSeconds;
            UserRaidsLog log           = new UserRaidsLog()
            {
                ID            = Guid.NewGuid().ToString(),
                UserID        = userID,
                OpType        = opType,
                StartDate     = startDate,
                EndDate       = endDate,
                ContinuedTime = continuedTime,
                UseEnergy     = energy,
                UseGold       = useGold,
                CreateDate    = DateTime.Now
            };
            var sender = DataSyncManager.GetDataSender();

            sender.Send(log);
        }
Example #13
0
        /// <summary>
        /// 玩家附魔符log
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="opType"></param>
        /// <param name="enchantID"></param>
        /// <param name="synthesisInfo"></param>
        /// <param name="enchantLv"></param>
        /// <param name="mature"></param>
        /// <param name="exp"></param>
        /// <param name="userEnchantID"></param>
        public static void AppenEnchantLog(string userID, short opType, UserEnchantInfo enchantInfo, CacheList <SynthesisInfo> synthesisInfo)
        {
            UserEnchantLog log = new UserEnchantLog();

            log.ID               = Guid.NewGuid().ToString();
            log.UserID           = userID;
            log.OpType           = opType;
            log.UserEnchantID    = enchantInfo.UserEnchantID;
            log.EnchantID        = enchantInfo.EnchantID;
            log.EnchantLv        = enchantInfo.EnchantLv;
            log.MaxMature        = enchantInfo.MaxMature;
            log.Experience       = enchantInfo.CurrExprience;
            log.SynthesisEnchant = synthesisInfo;
            log.CreateDate       = DateTime.Now;

            var sender = DataSyncManager.GetDataSender();

            sender.Send(log);
        }
Example #14
0
        protected override bool CreateUserRole(out IUser user)
        {
            user = null;
            GameUser gameUser = new GameDataCacheSet <GameUser>().FindKey(UserId.ToString());

            if (gameUser == null)
            {
                var    roleFunc = new RoleFunc();
                string msg;

                if (roleFunc.VerifyRange(UserName, out msg) ||
                    roleFunc.VerifyKeyword(UserName, out msg) ||
                    roleFunc.IsExistNickName(UserName, out msg))
                {
                    ErrorCode = Language.Instance.ErrorCode;
                    ErrorInfo = msg;
                    return(false);
                }
                gameUser = CreateRole();
                roleFunc.OnCreateAfter(gameUser);
            }
            user = new SessionUser(gameUser);
            UserLoginLog userLoginLog = new UserLoginLog();

            userLoginLog.UserId     = UserId.ToString();
            userLoginLog.SessionID  = Sid;
            userLoginLog.MobileType = (short)MobileType;
            userLoginLog.ScreenX    = ScreenX;
            userLoginLog.ScreenY    = ScreenY;
            userLoginLog.RetailId   = RetailID;
            userLoginLog.AddTime    = DateTime.Now;
            userLoginLog.State      = (short)LoginStatus.Logined;
            userLoginLog.DeviceID   = DeviceID;
            userLoginLog.Ip         = GetRealIP();
            userLoginLog.Pid        = gameUser.Pid;
            userLoginLog.UserLv     = gameUser.UserLv;
            var sender = DataSyncManager.GetDataSender();

            sender.Send(new[] { userLoginLog });

            return(true);
        }
Example #15
0
        /// <summary>
        /// 玩家命运水晶log
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="opType"></param>
        /// <param name="sumNum"></param>
        /// <param name="opNum"></param>
        /// <param name="useGold"></param>
        /// <param name="surplusGold"></param>
        /// <param name="totalGold"></param>
        public static void AppenCtystalLog(string userID, short opType, int crystalID, int coinNum, int useGold, CacheList <SynthesisInfo> synthesisInfo, short crystalLv, int exp)
        {
            UserCrystalLog log = new UserCrystalLog()
            {
                ID               = Guid.NewGuid().ToString(),
                UserID           = userID,
                OpType           = opType,
                CrystalID        = crystalID,
                CoinNum          = coinNum,
                UseGold          = useGold,
                SynthesisCrystal = synthesisInfo,
                CrystalLv        = crystalLv,
                Experience       = exp,
                CreateDate       = DateTime.Now
            };

            var sender = DataSyncManager.GetDataSender();

            sender.Send(log);
        }
Example #16
0
        public static void SaveLog <T>(string property, string userID, object oldValue, object value)
        {
            string v1 = oldValue.ToString();
            string v2 = value.ToString();

            if (!Equals(v1, v2))
            {
                UserDataChangeLog changeLog = new UserDataChangeLog
                {
                    UserID     = userID,
                    EntityName = typeof(T).Name,
                    Name       = property,
                    PreValue   = v1,
                    Value      = v2,
                    ModifyDate = DateTime.Now
                };
                var sender = DataSyncManager.GetDataSender();
                sender.Send(changeLog);
            }
        }
Example #17
0
        /// <summary>
        /// 新增装备合成log
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="opType"></param>
        /// <param name="itemID"></param>
        /// <param name="num"></param>
        /// <param name="synthesisInfo1"></param>
        /// <param name="synthesisInfo2"></param>
        /// <param name="useGold"></param>
        /// <param name="beforeLv"></param>
        /// <param name="afterLv"></param>
        public static void AppenItemSynthesisLog(string userID, short opType, int itemID, int num, CacheList <SynthesisInfo> synthesisInfo1, SynthesisInfo synthesisInfo2, int useGold, short beforeLv, short afterLv)
        {
            UserItemSynthesisLog log = new UserItemSynthesisLog
            {
                ID              = Guid.NewGuid().ToString(),
                UserID          = userID,
                OpType          = opType,
                ItemID          = itemID,
                OpNum           = num,
                DemandMaterial  = synthesisInfo1,
                SurplusMaterial = synthesisInfo2,
                UseGold         = useGold,
                BeforeLv        = beforeLv,
                AfterLv         = afterLv,
                CreateDate      = DateTime.Now
            };
            var sender = DataSyncManager.GetDataSender();

            sender.Send(log);
        }
Example #18
0
        public override bool TakeAction()
        {
            GameUser user = new GameDataCacheSet <GameUser>().FindKey(Uid);

            if (user == null)
            {
                var    roleFunc = new RoleFunc();
                string msg;

                if (roleFunc.VerifyRange(UserName, out msg) ||
                    roleFunc.VerifyKeyword(UserName, out msg) ||
                    roleFunc.IsExistNickName(UserName, out msg))
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = msg;
                    return(false);
                }
                user = CreateRole();
                roleFunc.OnCreateAfter(user);
            }
            Current.User = user;
            UserLoginLog userLoginLog = new UserLoginLog();

            userLoginLog.UserId     = Uid;
            userLoginLog.SessionID  = Sid;
            userLoginLog.MobileType = (short)MobileType;
            userLoginLog.ScreenX    = ScreenX;
            userLoginLog.ScreenY    = ScreenY;
            userLoginLog.RetailId   = RetailID;
            userLoginLog.AddTime    = DateTime.Now;
            userLoginLog.State      = (short)LoginStatus.Logined;
            userLoginLog.DeviceID   = DeviceID;
            userLoginLog.Ip         = GetRealIP();
            userLoginLog.Pid        = user.Pid;
            userLoginLog.UserLv     = user.UserLv;
            var sender = DataSyncManager.GetDataSender();

            sender.Send(userLoginLog);

            return(true);
        }
Example #19
0
        protected override void WriteLog(ChatMessage message)
        {
            var chatData = message as ChatData;

            if (chatData == null)
            {
                return;
            }

            string guildID = string.Empty;

            if (chatData.ChatType == ChatType.Guild)
            {
                GameUser user = new GameDataCacheSet <GameUser>().FindKey(chatData.FromUserID.ToString());
                if (user == null)
                {
                    user = new GameDataCacheSet <GameUser>().FindKey(chatData.ToUserID.ToString());
                }
                if (user != null)
                {
                    guildID = user.MercenariesID;
                }
            }
            var chatLog = new UserChatLog
            {
                ChatID       = Guid.NewGuid().ToString(),
                FromUserID   = chatData.FromUserID.ToString(),
                FromUserName = chatData.FromUserName,
                ToUserID     = chatData.ToUserID.ToString(),
                ToUserName   = chatData.ToUserName,
                ChatType     = chatData.ChatType,
                Content      = chatData.Content,
                SendDate     = chatData.SendDate,
                GuildID      = guildID,
            };

            using (var sender = DataSyncManager.GetDataSender())
            {
                sender.Send(chatLog);
            }
        }
Example #20
0
        public override void Process(JsonParameter[] paramList)
        {
            JsonParameterList parameters = JsonParameter.Convert(paramList);
            string            op         = parameters["op"];
            ChatKeyWord       keyword    = new ChatKeyWord()
            {
                KeyID   = parameters["KeyID"].ToNotNullString(),
                KeyWord = parameters["KeyWord"].ToNotNullString()
            };
            var sender = DataSyncManager.GetDataSender();

            if (op == "add" || op == "save")
            {
                sender.Send(new[] { keyword });
            }
            else if (op == "delete")
            {
                keyword.OnDelete();
                sender.Send(new[] { keyword });
            }
        }
Example #21
0
 /// <summary>
 /// 从Redis内存移除,并保存到数据库
 /// </summary>
 /// <param name="keys"></param>
 public static void RemoveToDatabase(params string[] keys)
 {
     RedisManager.Process(client =>
     {
         foreach (var k in keys)
         {
             try
             {
                 string key   = k;
                 string setId = key + "_remove";
                 if (key.EndsWith("_remove"))
                 {
                     setId = key;
                     key   = key.Replace("_remove", "");
                 }
                 else
                 {
                     if (client.ContainsKey(key))
                     {
                         client.Rename(key, setId);
                     }
                 }
                 var buffer = client.Get <byte[]>(setId);
                 if (buffer != null)
                 {
                     var history = new EntityHistory()
                     {
                         Key = key, Value = buffer
                     };
                     DataSyncManager.GetDataSender().Send(history);
                     client.Remove(setId);
                 }
             }
             catch (Exception ex)
             {
                 TraceLog.WriteError("Redis cache remove key:{0} to Database error:{1}", k, ex);
             }
         }
     });
 }
Example #22
0
 private void AddUserItem(string userID, int itemID, int itemNum)
 {
     if (itemID > 0 && itemNum > 0)
     {
         UserTakePrize userPrizeLog = new UserTakePrize
         {
             ID          = Guid.NewGuid().ToString(),
             UserID      = userID.ToInt(),
             ItemPackage = string.Format("{0}={1}={2}", itemID, 1, itemNum),
             MailContent = string.Format("GM发送物品"),
             IsTasked    = false,
             TaskDate    = MathUtils.SqlMinDate,
             OpUserID    = 10000,
             CreateDate  = DateTime.Now
         };
         var sender = DataSyncManager.GetDataSender();
         sender.Send(userPrizeLog);
     }
     else
     {
         throw new Exception("无此物品");
     }
 }
Example #23
0
        protected override void WriteLog(ChatMessage message)
        {
            var chatData = message as ChatData;

            if (chatData == null)
            {
                return;
            }

            var chatLog = new ChatLog
            {
                FromUserID   = chatData.FromUserID,
                FromUserName = chatData.FromUserName,
                ToUserID     = chatData.ToUserID,
                ChatType     = chatData.ChatType,
                Content      = chatData.Content,
                SendDate     = chatData.SendDate
            };

            using (var sender = DataSyncManager.GetDataSender())
            {
                sender.Send(chatLog);
            }
        }
Example #24
0
        private static void AsyncDoCombat(CountryUser cuser1, CountryUser cuser2, CountryCombatProcess process)
        {
            CountryLvGroup userLvGroup1;
            CountryLvGroup userLvGroup2;

            if (TryLvGroup(cuser1, out userLvGroup1) && TryLvGroup(cuser2, out userLvGroup2))
            {
                ISingleCombat combater = CombatFactory.TriggerTournament(cuser1, cuser2);
                bool          isWin    = combater.Doing();
                if (isWin)
                {
                    ProcessPrize(cuser1, cuser2, process);
                    cuser1.Refresh = DateTime.Now;
                    cuser1.Status  = 1;
                    userLvGroup1.CombaQueue.Add(cuser1);
                    CountryGroup userGroup1;
                    if (TryGroup(cuser1.GroupType, out userGroup1))
                    {
                        userGroup1.Score++;
                    }
                    cuser2.Refresh = DateTime.Now;
                    cuser2.Status  = 1;
                    userLvGroup2.CombaQueue.Add(cuser2);
                }
                else
                {
                    ProcessPrize(cuser2, cuser1, process);
                    cuser2.Refresh = DateTime.Now;
                    cuser2.Status  = 1;
                    userLvGroup2.CombaQueue.Add(cuser2);
                    CountryGroup userGroup2;
                    if (TryGroup(cuser2.GroupType, out userGroup2))
                    {
                        userGroup2.Score++;
                    }
                    cuser1.Refresh = DateTime.Now;
                    cuser1.Status  = 1;
                    userLvGroup1.CombaQueue.Add(cuser1);
                }

                process.ProcessContainer = (CombatProcessContainer)combater.GetProcessResult();

                lock (thisLock)
                {
                    if (_combatProcessList != null)
                    {
                        _combatProcessList.Add(process);
                    }
                    //日志
                    UserCombatLog log = new UserCombatLog();
                    log.CombatLogID   = Guid.NewGuid().ToString();
                    log.UserID        = cuser1.UserId;
                    log.CityID        = 0;
                    log.PlotID        = 0;
                    log.NpcID         = 0;
                    log.CombatType    = CombatType.Country;
                    log.HostileUser   = cuser2.UserId;
                    log.IsWin         = isWin;
                    log.CombatProcess = JsonUtils.Serialize(process);
                    log.CreateDate    = DateTime.Now;
                    var sender = DataSyncManager.GetDataSender();
                    sender.Send(log);
                }
            }
        }
Example #25
0
        public override bool TakeAction()
        {
            //if (ContextUser.EnergyNum <= 0)
            //{
            //    ErrorCode = LanguageManager.GetLang().ErrorCode;
            //    ErrorInfo = LanguageManager.GetLang().St_EnergyNotEnough;
            //    return false;
            //}
            //if (ContextUser.EnergyNum <= 0 && ContextUser.TempEnergyNum == 0)
            //{
            //    ErrorCode = LanguageManager.GetLang().ErrorCode;
            //    ErrorInfo = LanguageManager.GetLang().St_EnergyNotEnough;
            //    return false;
            //}
            if (ContextUser.UserStatus == UserStatus.SaoDang)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St4007_Saodanging;
                return(false);
            }
            if (ContextUser.UseMagicID == 0)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St4004_NoUseMagic;
                return(false);
            }
            if (new GameDataCacheSet <UserEmbattle>().FindAll(Uid, m => m.MagicID == ContextUser.UseMagicID).Count == 0)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St4004_EmbattleEmpty;
                return(false);
            }

            //if (ContextUser.TempEnergyNum == 0)
            //{
            //    ErrorCode = LanguageManager.GetLang().ErrorCode;
            //    ErrorInfo = LanguageManager.GetLang().St_EnergyNotEnough;
            //    return false;
            //}

            ContextUser.UserStatus = UserStatus.Combat;
            try
            {
                //触发战斗
                PlotNPCInfo npcInfo = new ConfigCacheSet <PlotNPCInfo>().FindKey(PlotNpcID);

                //原因:碰npc时掉线,再请求战斗详情
                if (npcInfo == null)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().LoadDataError;
                    return(false);
                }

                //原因:最后一个npc时,清空玩家保存副本
                if (ContextUser.UserExtend != null && ContextUser.UserExtend.MercenarySeq > npcInfo.NpcSeqNo)
                {
                    ContextUser.UserStatus = UserStatus.Normal;
                    ContextUser.UserExtend.UpdateNotify(obj =>
                    {
                        ContextUser.UserExtend.PlotStatusID = 0;
                        ContextUser.UserExtend.PlotNpcID    = -1;
                        ContextUser.UserExtend.MercenarySeq = 1;
                        ContextUser.UserExtend.IsBoss       = false;
                        return(true);
                    });
                    //ErrorCode = LanguageManager.GetLang().ErrorCode;
                    //ErrorInfo = LanguageManager.GetLang().St4011_NoMonster;
                    //return false;
                }

                PlotInfo plotInfo = new ConfigCacheSet <PlotInfo>().FindKey(npcInfo.PlotID);
                if (plotInfo == null)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().LoadDataError;
                    return(false);
                }

                var cacheSetUserPlot = new GameDataCacheSet <UserPlotPackage>();
                var cacheSetItemInfo = new ShareCacheStruct <ItemBaseInfo>();
                var cacheSet         = new GameDataCacheSet <UserPlotCombat>();
                var userPlotPack     = cacheSetUserPlot.FindKey(ContextUser.UserID);
                var userPlot         = userPlotPack != null?userPlotPack.PlotPackage.Find(s => s.PlotID == npcInfo.PlotID) : null;

                //PlotHelper.IsKill(ContextUser.UserID, plotInfo.PlotID, plotInfo.CityID)
                if (userPlot != null && userPlot.PlotNum >= plotInfo.ChallengeNum)
                {
                    if (plotInfo.PlotType == PlotType.Elite)
                    {
                        ErrorCode = LanguageManager.GetLang().ErrorCode;
                        ErrorInfo = LanguageManager.GetLang().St4002_EliteUsed;
                        return(false);
                    }
                    else if (plotInfo.PlotType == PlotType.HeroPlot)
                    {
                        ErrorCode = LanguageManager.GetLang().ErrorCode;
                        ErrorInfo = LanguageManager.GetLang().St4002_HeroPlotNum;
                        return(false);
                    }
                }

                //if (userPlot != null && userPlot.ItemList != null)
                //{
                //    userPlot.UpdateNotify(obj =>
                //    {
                //        userPlot.ItemList.Clear();
                //        return true;
                //    });
                //}
                if (npcInfo.NpcSeqNo == 1)
                {
                    userPlot.ItemList.Clear();
                    ContextUser.IsItem = false;
                }
                userPlotCombat = cacheSet.FindKey(ContextUser.UserID, PlotNpcID);
                if (userPlotCombat != null && userPlotCombat.IsWin && ContextUser.UserExtend != null &&
                    PlotNpcID == ContextUser.UserExtend.PlotNpcID && !ContextUser.IsItem)
                {
                    prizeItems = PlotHelper.GetPlotMonsterItems(Uid, npcInfo.PlotNpcID);
                }
                else
                {
                    ISingleCombat plotCombater = CombatFactory.TriggerPlot(ContextUser, PlotNpcID);
                    if (plotCombater == null)
                    {
                        ErrorCode = LanguageManager.GetLang().ErrorCode;
                        ErrorInfo = LanguageManager.GetLang().LoadDataError;
                        return(false);
                    }
                    if (userPlotCombat == null)
                    {
                        userPlotCombat = new UserPlotCombat()
                        {
                            UserID    = ContextUser.UserID,
                            PlotNpcID = PlotNpcID
                        };
                        cacheSet.Add(userPlotCombat, GameEnvironment.CacheUserPeriod);
                        userPlotCombat = cacheSet.FindKey(ContextUser.UserID, PlotNpcID);
                    }
                    userPlotCombat.PlotID     = npcInfo.PlotID;
                    userPlotCombat.CombatDate = DateTime.Now;
                    userPlotCombat.IsWin      = plotCombater.Doing();
                    if (!userPlotCombat.IsWin)
                    {
                        userPlotCombat.OverNum += 1;
                    }
                    ContextUser.IsItem            = npcInfo.NpcSeqNo == 1 ? false : ContextUser.IsItem;
                    combatProcessList             = (CombatProcessContainer)plotCombater.GetProcessResult();
                    userPlotCombat.GeneralNum     = combatProcessList.AttackList.Count;
                    userPlotCombat.GeneralOverNum = GetOverGeneralNum(combatProcessList.AttackList.ToList());
                    //userPlotCombat.CombatProcess = JsonUtils.Serialize(combatProcessList);
                    int generalNum = combatProcessList.DefenseList.FindAll(s => s.LiveNum > 0).Count;
                    if (userPlotCombat.IsWin)
                    {
                        if (ContextUser.UserExtend != null)
                        {
                            ContextUser.UserExtend.UpdateNotify(obj =>
                            {
                                ContextUser.UserExtend.PlotStatusID = npcInfo.PlotID;
                                ContextUser.UserExtend.PlotNpcID    = PlotNpcID;
                                ContextUser.UserExtend.MercenarySeq = MathUtils.Addition(npcInfo.NpcSeqNo, (short)1);
                                ContextUser.UserExtend.IsBoss       = npcInfo.IsBoss; //是否最后一个副本npc
                                return(true);
                            });
                        }
                        //玩家通过一个城市的所有副本时,增加聊天频道系统提示
                        if (userPlot.PlotStatus != PlotStatus.Completed && npcInfo.IsBoss)      //玩家此副本胜利
                        {
                            var city     = new ConfigCacheSet <CityInfo>().FindKey(plotInfo.CityID);
                            var nextPlot = new ConfigCacheSet <PlotInfo>().FindKey(plotInfo.AftPlotID);
                            if (city != null && nextPlot != null && nextPlot.CityID != plotInfo.CityID)            //此城市的最后一个副本
                            {
                                string content = string.Format(LanguageManager.GetLang().St_systemprompts, ContextUser.NickName,
                                                               city.CityName);
                                new TjxChatService().SystemSend(ChatType.World, content);
                            }
                        }
                        PlotHelper.DoPlotPrize(Uid, npcInfo, userPlotCombat, generalNum, out _honourNum);
                        if (npcInfo.NpcSeqNo == 1)
                        {
                            ContextUser.EnergyNum = MathUtils.Subtraction(ContextUser.EnergyNum, ContextUser.TempEnergyNum).ToShort();
                            //原因:刷晶石BUG
                            ContextUser.TempEnergyNum = 0;
                        }
                        if (!ContextUser.IsItem)
                        {
                            prizeItems = PlotHelper.GetPlotMonsterItems(Uid, npcInfo.PlotNpcID);
                        }
                        TaskHelper.KillPlotMonster(Uid, npcInfo.PlotID, PlotNpcID);

                        //var stroyTaskList = new ConfigCacheSet<StoryTaskInfo>().FindAll(s => s.PlotID == plotInfo.AftPlotID);
                        //foreach (var story in stroyTaskList)
                        //{
                        //    var usertask = new GameDataCacheSet<UserTask>().FindKey(ContextUser.UserID, story.PlotID);
                        //    if (usertask != null)
                        //    {
                        PlotHelper.EnablePlot(Uid, plotInfo.AftPlotID);
                        //    }
                        //}

                        if (plotInfo.PlotType == PlotType.Elite)
                        {
                            EliteDailyRestrain(npcInfo);
                            NoviceHelper.ElitePlotFestivalList(ContextUser); //通关精英副本获得奖励
                        }
                        else if (plotInfo.PlotType == PlotType.Kalpa)
                        {
                            KalpaDailyRestrain(npcInfo);
                        }
                        else if (plotInfo.PlotType == PlotType.HeroPlot)
                        {
                            PlotHelper.EnableHeroPlot(ContextUser.UserID, plotInfo.PlotID);
                            PlotHelper.HeroDailyRestrain(ContextUser.UserID, plotInfo.PlotID, plotInfo.CityID);
                        }
                    }
                    else
                    {
                        ContextUser.GeneralAllCount  = 0;
                        ContextUser.GeneralKillCount = 0;
                    }


                    var restrain = new GameDataCacheSet <UserDailyRestrain>().FindKey(Uid);
                    if (restrain != null)
                    {
                        var restrainSet = new ShareCacheStruct <DailyRestrainSet>().FindKey(RestrainType.PlotGoto);
                        if (restrainSet != null)
                        {
                            GotoNum = MathUtils.Subtraction(restrainSet.MaxNum, restrain.Funtion14, 0);
                        }
                    }
                }
                //原因:最后一个npc时,清空玩家保存副本
                if (ContextUser.UserExtend != null && ContextUser.UserExtend.IsBoss)
                {
                    ContextUser.UserExtend.UpdateNotify(obj =>
                    {
                        ContextUser.UserExtend.PlotStatusID = 0;
                        ContextUser.UserExtend.PlotNpcID    = -1;
                        ContextUser.UserExtend.MercenarySeq = 0;
                        ContextUser.UserExtend.IsBoss       = npcInfo.IsBoss;
                        return(true);
                    });
                }

                if (!ContextUser.IsItem)
                {
                    foreach (var prize in prizeItems)
                    {
                        if (prize.Type == 0 && userPlot != null)
                        {
                            var           itemInfo      = cacheSetItemInfo.FindKey(prize.ItemID);
                            UniversalInfo universalInfo = new UniversalInfo();
                            universalInfo.HeadID    = itemInfo != null ? itemInfo.HeadID : string.Empty;
                            universalInfo.ItemID    = itemInfo != null ? itemInfo.ItemID : 0;
                            universalInfo.ItemDesc  = itemInfo != null ? itemInfo.ItemDesc : string.Empty;
                            universalInfo.MaxHeadID = itemInfo != null ? itemInfo.MaxHeadID : string.Empty;
                            universalInfo.Name      = itemInfo != null ? itemInfo.ItemName : string.Empty;
                            universalInfo.Num       = prize.Num;
                            if (userPlot.ItemList != null && userPlot.ItemList.Count > 0)
                            {
                                var item = userPlot.ItemList.Find(s => s.ItemID == prize.ItemID);
                                if (item != null)
                                {
                                    item.UpdateNotify(obj =>
                                    {
                                        item.Num = MathUtils.Addition(item.Num, prize.Num);
                                        return(true);
                                    });
                                }
                                else
                                {
                                    userPlot.UpdateNotify(obj =>
                                    {
                                        userPlot.ItemList.Add(universalInfo);
                                        return(true);
                                    });
                                }
                            }
                            else
                            {
                                userPlot.UpdateNotify(obj =>
                                {
                                    userPlot.ItemList.Add(universalInfo);
                                    return(true);
                                });
                            }
                        }
                        ContextUser.IsItem = true;
                    }
                }
                var a = userPlot.ItemList;
            }
            finally
            {
                ContextUser.UserStatus = UserStatus.Normal;
            }
            //日志
            UserCombatLog log = new UserCombatLog();

            log.CombatLogID   = Guid.NewGuid().ToString();
            log.UserID        = userPlotCombat.UserID;
            log.CityID        = ContextUser.CityID;
            log.PlotID        = userPlotCombat.PlotID;
            log.NpcID         = userPlotCombat.PlotNpcID;
            log.CombatType    = CombatType.Plot;
            log.HostileUser   = string.Empty;
            log.IsWin         = userPlotCombat.IsWin;
            log.CombatProcess = JsonUtils.Serialize(combatProcessList);
            log.PrizeItem     = prizeItems;
            log.CreateDate    = DateTime.Now;
            var sender = DataSyncManager.GetDataSender();

            sender.Send(log);

            UserHelper.GetGeneralLife(ContextUser.UserID);
            UserHelper.RegainGeneralLife(ContextUser.UserID);

            //var userEmbattleList = EmbattleHelper.CurrEmbattle(ContextUser.UserID, true);
            //           foreach (var userEmbattle in userEmbattleList)
            //           {
            //               _userTalPriority = MathUtils.Addition(_userTalPriority, PriorityHelper.GeneralTotalPriority(ContextUser.UserID, userEmbattle.GeneralID));
            //           }
            selfAbilityEffectList = UserAbilityHelper.GetSelfAbilityEffectList(ContextUser.UserID, 0);
            //var userEmbattleList = EmbattleHelper.CurrEmbattle(ContextUser.UserID, true);

            _userTalPriority = CombatHelper.TotalPriorityNum(ContextUser.UserID, 0);

            return(true);
        }
Example #26
0
        /// <summary>
        /// 处理礼包
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="order"></param>
        private static void DoGiff(string userID, OrderInfo order)
        {
            int packType = 0;
            List <PackageReceive> packageReceivess = new List <PackageReceive>();
            UserRechargeLog       rechargeLog      = new UserRechargeLog
            {
                LogID        = Guid.NewGuid().ToString(),
                UserID       = userID,
                OrderNo      = order.OrderNO,
                ChargeAmount = order.Amount,
                PayGold      = order.GameCoins,
                ReargeDate   = DateTime.Now
            };
            var sender = DataSyncManager.GetDataSender();

            sender.Send(rechargeLog);

            UserRecharge recharge = new PersonalCacheStruct <UserRecharge>().FindKey(userID);

            if (recharge == null)
            {
                recharge = new UserRecharge()
                {
                    UserID = userID
                };
            }
            //处理充值活动
            recharge.LastNum = order.GameCoins;
            TriggerFestivalPack(recharge, order.GameCoins);
            if (IsCurrentWeek(recharge.ChargeDate))
            {
                recharge.WeekNum = MathUtils.Addition(recharge.WeekNum, order.GameCoins, int.MaxValue);
            }
            else
            {
                recharge.WeekNum = order.GameCoins;
            }
            if (recharge.ChargeDate.Month == DateTime.Now.Month)
            {
                recharge.MonthNum = MathUtils.Addition(recharge.MonthNum, order.GameCoins, int.MaxValue);
            }
            else
            {
                recharge.MonthNum = order.GameCoins;
            }

            recharge.TotalGoldNum = MathUtils.Addition(recharge.TotalGoldNum, order.GameCoins, int.MaxValue);
            recharge.ChargeDate   = DateTime.Now;
            var rechargeCacheSet = new PersonalCacheStruct <UserRecharge>();

            if (rechargeCacheSet.FindKey(userID) == null)
            {
                packType          = 1;
                recharge.FirstNum = order.GameCoins;
                TriggerReceivePack(userID, packType, recharge.FirstNum);
                rechargeCacheSet.Add(recharge);
                FestivalHelper.GetFirstReward(userID, FestivalType.FirstReward);
                GameUser userInfo = new PersonalCacheStruct <GameUser>().FindKey(userID);
                if (userInfo != null)
                {
                    FestivalHelper.GetPayReward(userInfo, order.GameCoins, FestivalType.FirstPayDoubleSpar);
                }
            }

            //触发总累计充值礼包
            packType = 2;
            TriggerReceivePack(userID, packType, recharge.TotalGoldNum);
            List <RechargePacks> rechargePackseArray = new ShareCacheStruct <RechargePacks>().FindAll(m => m.PacksType == packType);

            foreach (RechargePacks rechargePackse in rechargePackseArray)
            {
                RemoveCharge(userID, rechargePackse.PacksID);
            }
            TriggerWeekPack(userID, recharge.WeekNum);   //每周礼包
            TriggerMonthPack(userID, recharge.MonthNum); //每月礼包
        }
Example #27
0
        /// <summary>
        /// 触发战斗
        /// </summary>
        /// <param name="user"></param>
        /// <param name="bossCombatProcess"></param>
        /// <returns></returns>
        public bool Combat(GameUser user, BossCombatProcess bossCombatProcess)
        {
            CombatGeneral bossGeneral = Boss;

            bossGeneral.LossLifeNum = 0;
            bool     isWin    = false;
            BossUser bossUser = GetCombatUser(user.UserID);

            ICombatController controller     = CombatControllerFactory.Create();
            ISingleCombat     plotCombater   = controller.GetSingleCombat(CombatType.BossPlot);
            double            inspirePercent = bossUser.InspirePercent + bossUser.ReliveInspirePercent;

            plotCombater.SetAttack(new UserEmbattleQueue(user.UserID, user.UseMagicID, inspirePercent,
                                                         CombatType.BossPlot));
            plotCombater.SetDefend(new MonsterQueue(bossGeneral));

            isWin = plotCombater.Doing();
            bossCombatProcess.ProcessContainer = (CombatProcessContainer)plotCombater.GetProcessResult();
            bossUser.CombatNum         += 1;
            bossUser.DamageNum          = MathUtils.Addition(bossUser.DamageNum, bossGeneral.LossLifeNum, int.MaxValue);
            bossCombatProcess.LiveNum   = bossGeneral.LifeNum;
            bossCombatProcess.DamageNum = bossGeneral.LossLifeNum;
            bossCombatProcess.IsWin     = isWin;
            bossCombatProcess.UserId    = user.UserID;

            DoDamagePrize(user, bossGeneral.LossLifeNum, bossCombatProcess);
            if (isWin && bossGeneral.IsOver)
            {
                //GameActive active = GameActive;
                UserGuild guild        = UserGuild;
                short     bossprizeLv  = 0;
                int       killbossrate = 0;
                if (guild.BossPrize != null)
                {
                    bossprizeLv  = (short)guild.BossPrize.KillBossLv;
                    killbossrate = guild.BossPrize.KillBossRate;
                    //击杀奖
                    BossActivePrize bossPrize    = UserGuild.BossPrize;
                    string          prizeItemMsg = string.Empty;
                    DoTopThreePrize(0, user, bossPrize.KillReward, bossPrize.Items, out prizeItemMsg);
                }

                short lv       = MathUtils.Subtraction(bossGeneral.Lv, bossprizeLv, (short)1);
                int   killCoin = lv * killbossrate;
                user.GameCoin = MathUtils.Addition(user.GameCoin, killCoin, int.MaxValue);
                // new CacheChat().SystemSend(ChatType.World, string.Format("{0}玩家获得公会Boss战击杀奖,奖励{1}金币", user.NickName, killCoin));
                new TjxChatService(user).SystemGuildSend(ChatType.Guild,
                                                         string.Format(LanguageManager.GetLang().St6105_CombatKillReward, user.NickName, killCoin));
                bossCombatProcess.KillGameCoin = killCoin;

                DoKillPrize();


                int tempMinute = gameActive.Minutes - ConfigEnvSet.GetInt("BossCombat.KillTime");
                int subSeconds = (int)new TimeSpan(0, tempMinute, 0).TotalSeconds;
                if (subSeconds - guild.ColdTime < 0)
                {
                    //Boss自动升级
                    guild.GuildBossInfo.UpdateNotify(obj =>
                    {
                        guild.GuildBossInfo.BossLv = MathUtils.Addition(guild.GuildBossInfo.BossLv, (short)1, short.MaxValue);
                        return(true);
                    });
                    //guild.Update();
                }
                guild.CombatStatus = CombatStatus.Killed;
                CombatHelper.UpdateGuildBossKill(guild.GuildID); //公会boss已被杀
            }
            else
            {
                bossUser.IsRelive        = true;
                bossUser.ReliveBeginDate = DateTime.Now;
            }
            //日志
            var log = new UserCombatLog
            {
                CombatLogID   = Guid.NewGuid().ToString(),
                UserID        = user.UserID,
                CityID        = user.CityID,
                PlotID        = gameActive == null ? 0 : gameActive.BossPlotID,
                NpcID         = bossGeneral.GeneralID,
                CombatType    = CombatType.BossPlot,
                HostileUser   = string.Empty,
                IsWin         = isWin,
                CombatProcess = JsonUtils.Serialize(bossCombatProcess),
                CreateDate    = DateTime.Now
            };

            var sender = DataSyncManager.GetDataSender();

            sender.Send(log);

            //user.Update();

            return(isWin);
        }
Example #28
0
        protected override bool DoSuccess(int userId, out IUser user)
        {
            user = null;
            //原因:重登录时,数据会回档问题
            var      cacheSet = new PersonalCacheStruct <GameUser>();
            GameUser userInfo = cacheSet.FindKey(userId.ToString());

            if (userInfo != null)
            {
                //原因:还在加载中时,返回
                if (userInfo.IsRefreshing)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().ServerLoading;
                    return(false);
                }
            }

            if (userInfo == null ||
                string.IsNullOrEmpty(userInfo.SessionID) ||
                !userInfo.IsOnline)
            {
                UserCacheGlobal.Load(userId.ToString()); //重新刷缓存
                userInfo = cacheSet.FindKey(userId.ToString());
            }
            if (userInfo != null)
            {
                if (userInfo.UserStatus == UserStatus.FengJin)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().St1004_IDDisable;
                    return(false);
                }
                user = new SessionUser(userInfo);
                //todo
                //NoticeHelper.RankNotice(userInfo); //公告
                CombatHelper.LoadProperty(userInfo);
                //todo
                //NoviceHelper.OldFriendPack(Uid, userInfo.LoginTime); //好友礼包
                UserLoginLog userLoginLog = new UserLoginLog();
                userLoginLog.UserId     = userInfo.UserID;
                userLoginLog.SessionID  = Sid;
                userLoginLog.MobileType = MobileType;
                userLoginLog.ScreenX    = ScreenX;
                userLoginLog.ScreenY    = ScreenY;
                userLoginLog.RetailId   = RetailID;
                userLoginLog.AddTime    = DateTime.Now;
                userLoginLog.State      = LoginStatus.Logined;
                userLoginLog.DeviceID   = DeviceID;
                userLoginLog.Ip         = this.GetRealIP();
                userLoginLog.Pid        = userInfo.Pid;
                userLoginLog.UserLv     = userInfo.UserLv;
                //原因:报表统计
                userLoginLog.PlotID = userInfo.PlotProgress;
                PlotInfo plotInfo = new ShareCacheStruct <PlotInfo>().FindKey(userInfo.PlotProgress);
                if (plotInfo != null)
                {
                    userLoginLog.PlotName = plotInfo.PlotName;
                }

                var sender = DataSyncManager.GetDataSender();
                sender.Send(userLoginLog);

                //int vipLv;
                //var vipLvArray = new ShareCacheStruct<VipLvInfo>().FindAll(u => u.PayGold <= userInfo.PayGold);
                //vipLv = vipLvArray.Count > 0 ? vipLvArray[vipLvArray.Count - 1].VipLv : (short)0;

                userInfo.LoginTime = DateTime.Now;
                userInfo.SessionID = Sid;
                userInfo.IsOnline  = true;
                //userInfo.VipLv = vipLv;
                userInfo.GameId          = GameType;
                userInfo.ServerId        = ServerID;
                userInfo.ChatVesion      = 0;
                userInfo.ChatDate        = DateTime.MinValue;
                userInfo.BroadcastVesion = 0;
                if (userInfo.DailyLoginTime == MathUtils.SqlMinDate ||
                    userInfo.DailyLoginTime.Date != DateTime.Now.Date)
                {
                    userInfo.DailyLoginTime = DateTime.Now;
                }
                //todo
                RankingHelper.DailySportsRankPrize(userInfo);
            }
            else
            {
                user = new SessionUser()
                {
                    UserId     = userId,
                    PassportId = PassportId
                };
                ErrorCode = 1005;
                ErrorInfo = LanguageManager.GetLang().St1005_RoleCheck;
            }
            return(true);
        }
Example #29
0
        public override bool TakeAction()
        {
            bool result = true;

            taskInfo = new ConfigCacheSet <StoryTaskInfo>().FindKey(TaskID);
            if (taskInfo == null)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                //this.ErrorInfo = LanguageManager.GetLang().St3002_NotFind;
                SaveLog(new Exception(string.Format("{0},User:{1},task:{2}", LanguageManager.GetLang().St3002_NotFind, ContextUser.UserID, TaskID)));
                return(false);
            }
            _userGeneral = UserGeneral.GetMainGeneral(Uid);
            //获得奖励
            UserTask userTask = new GameDataCacheSet <UserTask>().FindKey(ContextUser.UserID, TaskID);

            if (userTask == null || userTask.TaskState != TaskState.Completed)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St3007_NoCompleted;
                return(false);
            }
            //交付物品任务扣除材料
            if (taskInfo.TermsType == PlotTermsType.Shouji || taskInfo.TermsType == PlotTermsType.Delivery)
            {
                UserItemHelper.UseUserItem(Uid, taskInfo.TargetItemID, taskInfo.TargetItemNum);
            }
            userTask.TaskState = TaskState.Close;
            UserTaskLog taskLog = new UserTaskLog()
            {
                LogID     = Guid.NewGuid().ToString(),
                TaskID    = userTask.TaskID,
                UserID    = userTask.UserID,
                TaskType  = userTask.TaskType,
                TaskState = userTask.TaskState,
                TaskPrize = string.Format("Experience:{0},GameCoin:{1};GameCoin:{2} ",
                                          taskInfo.Experience,
                                          taskInfo.GameCoin,
                                          ContextUser.GameCoin
                                          ),
                CreateDate = DateTime.Now
            };
            var sender = DataSyncManager.GetDataSender();

            sender.Send(taskLog);

            ContextUser.GameCoin = MathUtils.Addition(ContextUser.GameCoin, taskInfo.GameCoin, int.MaxValue);
            if (taskInfo.TaskType == TaskType.Master && ContextUser.TaskProgress < TaskID)
            {
                ContextUser.TaskProgress = TaskID;
            }
            //ContextUser.Update();

            //任务加佣兵经验
            //var userEmbattles = new GameDataCacheSet<UserEmbattle>().FindAll(UserEmbattle.Index_UserID_MagicID, Uid, ContextUser.UseMagicID);
            //foreach (var userEmbattle in userEmbattles)
            //{
            //    UserGeneral userGeneral = new GameDataCacheSet<UserGeneral>().FindKey(ContextUser.UserID, userEmbattle.GeneralID);
            //    if (userGeneral == null) continue;
            //    userGeneral.CurrExperience = MathUtils.Addition(userGeneral.CurrExperience, taskInfo.Experience, int.MaxValue);
            //    //userGeneral.Update();
            //}
            UserHelper.UserGeneralExp(ContextUser.UserID, taskInfo.Experience);

            //开启功能
            TaskHelper.EnableFunction(ContextUser, taskInfo.FunctionEnum);

            //下发可接任务
            TaskHelper.SendAllowTask(ContextUser, TaskID);

            //开启副本
            PlotHelper.EnablePlot(Uid, taskInfo.EnablePlot);

            //保留主线任务
            var cacheSet = new GameDataCacheSet <UserTask>();

            if (userTask.TaskType == TaskType.Master)
            {
                //userTask.Update();
            }
            else
            {
                //原因:最后支线任务无限刷新BUG
                if (!TaskHelper.IsLastTask(userTask))
                {
                    cacheSet.Delete(userTask);
                }
            }
            return(result);
        }
Example #30
0
        //protected override bool ValidateElement()
        //{
        //    return UserHelper.GetKeyWordSubstitution(UserName);

        //}
        protected override bool CreateUserRole(out IUser user)
        {
            user = null;
            int MaxLength = ConfigEnvSet.GetInt("User.MaxLength");
            int length    = System.Text.Encoding.Default.GetByteCount(UserName);

            if (UserHelper.GetKeyWordSubstitution(UserName))
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St1005_RegistNameKeyWord;
                return(false);
            }
            if (GameUser.IsNickName(UserName))
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St1005_Rename;
                return(false);
            }
            if (length <= 0 || length > MaxLength)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = string.Format(LanguageManager.GetLang().St1005_KingNameTooLong, MaxLength);
                return(false);
            }
            Regex re = new Regex(@"^[\u4e00-\u9fa5\w]+$");

            if (!re.IsMatch(UserName))
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St1005_RegistNameExceptional;
                return(false);
            }
            if (!Pid.ToLower().StartsWith("z"))
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St1005_PassportError;
                return(false);
            }
            GeneralInfo general = new ConfigCacheSet <GeneralInfo>().FindKey(generalID);

            if (general == null)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                return(false);
            }
            CareerInfo careerInfo = new ConfigCacheSet <CareerInfo>().FindKey(general.CareerID);

            if (careerInfo == null)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St1005_Professional;
                return(false);
            }

            GameUser userEntity = new GameDataCacheSet <GameUser>().FindKey(Uid);

            if (userEntity != null)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St1005_RoleExist;
                return(false);
            }
            bool userSex = Sex == 0 ? false : true;

            if (new GameDataCacheSet <GameUser>().FindKey(Uid) == null)
            {
                userEntity = CreateGameUser(userSex);
                user       = new SessionUser(userEntity);
                NoviceHelper.RetailLoginDaysReceive(userEntity); //渠道登录奖励
                CreateGeneral(careerInfo);
                CreateMagic(userEntity);
                //每日限制次数
                CreateDailyRestrain();
                //开启默认功能
                EnableFunction();
                //SendGifItem();
                UserPrayHelper.AddUserPray(Uid.ToInt(), PrayType.SanTianQiDao);
                UserPackHelper.AddUserPack(Uid);
                UserLoginLog userLoginLog = new UserLoginLog();
                userLoginLog.UserId     = Uid;
                userLoginLog.SessionID  = Sid;
                userLoginLog.MobileType = MobileType;
                userLoginLog.ScreenX    = ScreenX;
                userLoginLog.ScreenY    = ScreenY;
                userLoginLog.RetailId   = RetailID;
                userLoginLog.AddTime    = DateTime.Now;
                userLoginLog.State      = LoginStatus.Logined;
                userLoginLog.DeviceID   = DeviceID;
                userLoginLog.Ip         = this.GetRealIP();
                userLoginLog.Pid        = userEntity.Pid;
                userLoginLog.UserLv     = userEntity.UserLv;
                var sender = DataSyncManager.GetDataSender();
                sender.Send(userLoginLog);
                BackPackHelper.AddBack(userEntity);
                UserHelper.OpenMagic(Uid, 1);
                //封测注册发放礼包
                UserItemHelper.AddUserItem(Uid, 1704, 1, ItemStatus.BeiBao);
            }
            else
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St1005_RoleExist;
                return(false);
            }
            PlotHelper.EnablePlot(Uid, ConfigEnvSet.GetInt("UserPlot.OpenLockPlotID"));
            return(true);
        }