/// <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; }
/// <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; }
/// <summary> /// 玩家类PK排行 /// </summary> /// <param name="player"></param> /// <param name="winCount"> /// </param> public PlayerPKRank(Player player, int winCount) { m_winCount = winCount; this.m_player = player; }
public static Player Create() { Player player = new Player(); player.Level = 1; player.State = 1; player.m_value = new Variant(); return player; }
/// <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; }
/// <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; }
/// <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); }
/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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 }); } }