예제 #1
0
        /// <summary>
        /// 取得领奖情况信息
        /// </summary>
        /// <returns></returns>
        public Variant GetAwardMsg(Player player)
        {
            Variant v = new Variant();
            for (int i = 0; i < 3; i++)
            {
                string str = "";
                if (i == 0)
                {
                    str = "MonthAward";
                }
                else if (i == 1)
                {
                    str = "WeekAward";
                }
                else
                {
                    str = "DayAward";
                }

                string tableName = "Player" + GetTableName(str);
                if (IsAward(player, tableName, str))
                {
                    v[str] = -1;//表示已经领取
                }
                else
                {
                    //得到排名
                    v[str] = GetMyRank(player, tableName);
                }
            }
            return v;
        }
예제 #2
0
파일: PlayerSimple.cs 프로젝트: abel/sinan
 /// <summary>
 /// 简单的玩家类
 /// </summary>
 /// <param name="player"></param>
 /// <param name="style">
 /// style=0:登录时用,
 /// style=1:玩家等级排行,
 /// style=2:成就排行
 /// style=3:得到社会基础信息
 /// </param>
 public PlayerSimple(Player player, int style = 0)
 {
     m_style = style;
     this.m_player = player;
 }
예제 #3
0
파일: PlayerPKRank.cs 프로젝트: abel/sinan
 /// <summary>
 /// 玩家类PK排行
 /// </summary>
 /// <param name="player"></param>
 /// <param name="winCount">
 /// </param>
 public PlayerPKRank(Player player, int winCount)
 {
     m_winCount = winCount;
     this.m_player = player;
 }
예제 #4
0
파일: Player.cs 프로젝트: abel/sinan
 public static Player Create()
 {
     Player player = new Player();
     player.Level = 1;
     player.State = 1;
     player.m_value = new Variant();
     return player;
 }
예제 #5
0
        /// <summary>
        /// 判断奖励是否存在
        /// </summary>
        /// <param name="player"></param>
        /// <returns></returns>
        public bool IsAward(Player player, string tableName, string msg)
        {
            if (!m_db.CollectionExists(tableName))
                return true;
            MongoCollection<BsonDocument> mc = m_db.GetCollection(tableName);
            if (player == null)
                return true;

            var query = Query.And(Query.EQ("_id", player.PID), Query.Exists("Value." + msg));
            return mc.Count(query) > 0;
        }
예제 #6
0
 /// <summary>
 /// 更新用户信息
 /// </summary>
 /// <param name="player"></param>
 /// <param name="msg"></param>
 /// <returns></returns>
 public bool UpdateInfo(Player player, string tableName, string msg)
 {
     if (!m_db.CollectionExists(tableName))
         return false;
     MongoCollection<BsonDocument> mc = m_db.GetCollection(tableName);
     if (player == null)
         return false;
     var query = Query.EQ("_id", player.PID);
     var update = Update.Set("Value." + msg, DateTime.UtcNow);
     var v = mc.Update(query, update, UpdateFlags.None, SafeMode.True);
     return v == null ? false : v.DocumentsAffected > 0;
 }
예제 #7
0
파일: GoodsUse.cs 프로젝트: abel/sinan
 /// <summary>
 /// 补充类使用限制
 /// </summary>
 /// <param name="player"></param>
 /// <param name="gc"></param>
 /// <returns></returns>
 private static int SupplyLimit(Player player, GameConfig gc)
 {
     Variant limit = gc.Value.GetVariantOrDefault("UserLimit");
     if (limit == null) return 0;
     return CheckLevel(player, limit);
 }
예제 #8
0
        /// <summary>
        /// 得到排名
        /// </summary>
        /// <param name="player">角色</param>
        /// <param name="tableName">表名</param>
        /// <returns>排名</returns>
        public int GetMyRank(Player player, string tableName)
        {
            if (!m_db.CollectionExists(tableName))
            {
                return -1;
            }

            MongoCollection<BsonDocument> mc = m_db.GetCollection(tableName);
            if (player == null)
            {
                return -1;
            }

            //表示用户不存在
            var q = Query.EQ("_id", player.PID);
            //表示没有上排行
            if (mc.Count(q) <= 0)
            {
                return -2;
            }

            var result = mc.FindOne(q);

            BsonValue r;
            if (result.TryGetValue("Rank", out r))
            {
                return Convert.ToInt32(r);
            }

            int level = 0;
            BsonValue o;
            if (result.TryGetValue("Level", out o))
            {
                level = Convert.ToInt32(o);
            }

            int sn = 0;
            BsonValue s;
            if (result.TryGetValue("S", out s))
            {
                sn = Convert.ToInt32(s);
            }

            var query = Query.Or(Query.GT("Level", level), Query.And(Query.EQ("Level", level), Query.LT("S", sn)));
            return mc.Count(query) + 1;
        }
예제 #9
0
파일: GoodsUse.cs 프로젝트: abel/sinan
 /// <summary>
 /// 限时使用
 /// </summary>
 /// <param name="player"></param>
 /// <param name="limit">限制条件</param>
 /// <param name="created">开始计时时间</param>
 /// <returns></returns>
 private static int CheckTimeLines(Player player, Goods g)
 {
     Variant TimeLines = g.Value.GetVariantOrDefault("TimeLines");
     //表示没有时间限制
     if (TimeLines != null && TimeLines.GetIntOrDefault("Type") > 0)
     {
         //Type 永久有效0
         //获得时计时1
         //使用后计时2
         DateTime dt = DateTime.UtcNow;
         TimeSpan ts = dt - g.Created;
         if (ts.TotalHours >= TimeLines.GetIntOrDefault("Hour"))
         {
             //表示道具已经过期不能使用
             //IsDestroy是否消失
             return GoodsReturn.TimeLines;
         }
     }
     return 0;
 }
예제 #10
0
파일: GoodsUse.cs 프로젝트: abel/sinan
        /// <summary>
        /// 装备使用限制
        /// </summary>
        /// <param name="player"></param>
        /// <param name="g"></param>
        /// <returns></returns>
        private static int DressLimit(Player player, Goods g)
        {
            Variant limit = g.Value.GetVariantOrDefault("UserLimit");
            if (limit == null) return 0;

            int fail = CheckRole(player, limit);
            if (fail != 0)
            {
                return fail;
            }
            fail = CheckSex(player, limit);
            if (fail != 0)
            {
                return fail;
            }
            fail = CheckLevel(player, limit);
            if (fail != 0)
            {
                return fail;
            }
            fail = CheckTimeLines(player, g);
            if (fail != 0)
            {
                return fail;
            }
            return 0;
        }
예제 #11
0
파일: GoodsUse.cs 프로젝트: abel/sinan
 /// <summary>
 /// 性别限制
 /// </summary>
 /// <param name="player"></param>
 /// <param name="limit"></param>
 /// <returns></returns>
 private static int CheckSex(Player player, Variant limit)
 {
     if (limit.ContainsKey("Sex"))
     {
         int sex = Convert.ToInt32(limit["Sex"]);
         if (sex != 2 && sex != player.Sex)
         {
             return GoodsReturn.NoSex;
         }
     }
     return 0;
 }
예제 #12
0
파일: GoodsUse.cs 프로젝트: abel/sinan
 /// <summary>
 /// 场景限制
 /// </summary>
 /// <param name="player"></param>
 /// <param name="limit"></param>
 /// <returns></returns>
 private static int CheckScene(Player player, Variant limit)
 {
     Variant sceneLimit = limit.GetVariantOrDefault("Scene");
     if (sceneLimit != null)
     {
         string needScene = sceneLimit.GetStringOrDefault("SceneID");
         if (!string.IsNullOrEmpty(needScene))
         {
             if (player.SceneID != needScene)
             {
                 return GoodsReturn.NoSex;
             }
             #region 区域限制
             //Variant r = sceneLimit.GetVariantOrDefault("P");
             //if (r != null)
             //{
             //    int x = r.GetIntOrDefault("X");
             //    int y = r.GetIntOrDefault("Y");
             //    int w = r.GetIntOrDefault("W");
             //    int h = r.GetIntOrDefault("H");
             //    if (note.Player.X < x || note.Player.Y < y || note.Player.X > x + w || note.Player.Y > y + h)
             //    {
             //         player.UseGoodsR( false, TipAccess.GetMessage(GoodsReturn.NoSex));
             //        return false;
             //    }
             //}
             #endregion
         }
     }
     return 0;
 }
예제 #13
0
파일: GoodsUse.cs 프로젝트: abel/sinan
 /// <summary>
 /// 角色限制
 /// </summary>
 /// <param name="player"></param>
 /// <param name="limit"></param>
 /// <returns></returns>
 private static int CheckRole(Player player, Variant limit)
 {
     if (limit.ContainsKey("RoleID"))
     {
         string RoleID = limit.GetStringOrDefault("RoleID");
         if (RoleID != "0" && RoleID != player.RoleID)
         {
             return GoodsReturn.NoRoleID;
         }
     }
     return 0;
 }
예제 #14
0
파일: GoodsUse.cs 프로젝트: abel/sinan
 /// <summary>
 /// 使用者等级限制
 /// </summary>
 /// <param name="player"></param>
 /// <param name="limit"></param>
 /// <returns></returns>
 private static int CheckLevel(Player player, Variant limit)
 {
     int needLev = limit.GetIntOrDefault("LevelRequire");
     if (needLev > player.Level)
     {
         return GoodsReturn.NoLevel;
     }
     return 0;
 }
예제 #15
0
파일: RobBusiness.cs 프로젝트: abel/sinan
 /// <summary>
 /// 断线或打怪失败
 /// 遗失光环(由系统回收)
 /// </summary>
 /// <param name="player"></param>
 public void LoseAuraOwner(Player player, bool online)
 {
     if (m_auraOwner == player.ID)
     {
         string msg;
         if (online)
         {
             msg = string.Format(TipManager.GetMessage((int)PartMsgType.AuraLoseApc), player.Name);
         }
         else
         {
             msg = string.Format(TipManager.GetMessage((int)PartMsgType.AuraLoseDis), player.Name);
         }
         m_auraOwner = string.Empty;
         m_ownerName = string.Empty;
         Call(PartCommand.AuraChangeR, new object[] { true, m_auraOwner, m_ownerName, msg });
     }
 }