public Apc(Variant config) { ID = config.GetStringOrDefault("_id"); this.Name = config.GetStringOrDefault("Name"); Name = config.GetStringOrDefault("Name"); m_value = config.GetVariantOrDefault("Value"); m_life = new PlayerProperty(); if (m_value != null) { m_life.Add(m_value); this.Level = m_value.GetIntOrDefault("Level"); } this.ApcType = FighterType.APC; Variant ui = config.GetVariantOrDefault("UI"); if (ui != null) { this.Skin = ui.GetStringOrDefault("Skin"); string apcType = ui.GetStringOrDefault("Type"); if (apcType == "BB") { this.ApcType = FighterType.BB; } else if (apcType == "Boss") { this.ApcType = FighterType.Boss; } } }
public FightApc(int p, Apc apc) { this.P = p; this.ID = ObjectId.GenerateNewId().ToString(); //Guid.NewGuid().ToString("N"); this.m_apc = apc; this.m_ai = apc.Value.GetValueOrDefault<IList>("AI"); this.Name = apc.Name; this.Level = apc.Level; this.Skin = apc.Skin; PlayerProperty property = new PlayerProperty(); property.Add(apc.Value); this.Life = property; m_hp = property.ShengMing; m_mp = property.MoFa; if (m_apc.Value != null) { this.Talk = NewTalk(m_apc.Value.GetVariantOrDefault("Start")); } }
/// <summary> /// 生成完整的玩家属性 /// </summary> /// <param name="roleID">角色ID</param> /// <param name="level">玩家等级</param> /// <param name="life">附加加成属性</param> /// <returns></returns> public static PlayerProperty CreateProperty(string roleID, int level, PlayerProperty life) { level = Math.Min(level, APCProperty.MaxLevel); //0级属性.只受直接加成的影响 //伤害抗性 life.KangShangHai += 0; //反击率 life.FanJiLv = Math.Min(1, life.FanJiLv + 0.05); //合击率 life.HeJiLv = Math.Min(1, life.HeJiLv + 0.5); //逃跑率f life.TaoPaoLv = Math.Min(1, life.TaoPaoLv + 0.8); //暴击伤害倍数1.5 life.BaoJiShangHai = life.BaoJiShangHai + 1.5; //合击伤害倍数1.2 life.HeJiShangHai = life.HeJiShangHai + 1.2; InitLevel1(roleID, level, life); return life; }
/// <summary> /// 初始化第1层用户属性. /// </summary> static void InitLevel1(string roleID, int lv, PlayerProperty life) { if (roleID == "1") { life.LiLiang = life.LiLiang + (2 + 3 * lv); life.TiZhi = life.TiZhi + (2 + 2 * lv); life.ZhiLi = life.ZhiLi + 2; life.JingShen = life.JingShen + (2 + lv); life.SuDu = life.SuDu + (5 + 5 * lv); life.BaoJi = life.BaoJi + (45 + 5 * lv); life.MingZhong = life.MingZhong + (47 + 3 * lv); life.ShanBi = life.ShanBi + (48 + 2 * lv); } else if (roleID == "2") { life.LiLiang = life.LiLiang + 2; life.TiZhi = life.TiZhi + (2 + lv); life.ZhiLi = life.ZhiLi + (2 + 3 * lv); life.JingShen = life.JingShen + (2 + 2 * lv); life.SuDu = life.SuDu + (7 + 3 * lv); life.BaoJi = life.BaoJi + (46 + 4 * lv); life.MingZhong = life.MingZhong + (47 + 3 * lv); life.ShanBi = life.ShanBi + (45 + 5 * lv); } else if (roleID == "3") { life.LiLiang = life.LiLiang + ((2 + lv)); life.TiZhi = life.TiZhi + (2 + 2 * lv); life.ZhiLi = life.ZhiLi + (2 + 2 * lv); life.JingShen = life.JingShen + (2 + lv); life.SuDu = life.SuDu + (6 + 4 * lv); life.BaoJi = life.BaoJi + (47 + 3 * lv); life.MingZhong = life.MingZhong + (46 + 4 * lv); life.ShanBi = life.ShanBi + (46 + 4 * lv); } InitLevel2(roleID, lv, life); }
public static PlayerProperty CreatePlayerProperty(Variant v) { PlayerProperty life = new PlayerProperty(); life.LiLiang = v.GetIntOrDefault("LiLiang"); life.TiZhi = v.GetIntOrDefault("TiZhi"); life.ZhiLi = v.GetIntOrDefault("ZhiLi"); life.JingShen = v.GetIntOrDefault("JingShen"); life.KangShangHai = v.GetIntOrDefault("KangShangHai"); //----------------------- life.WuLiXiShou = v.GetDoubleOrDefault("WuLiXiShou"); life.MoFaXiShou = v.GetDoubleOrDefault("MoFaXiShou"); life.FanJiLv = v.GetDoubleOrDefault("FanJiLv"); life.HeJiLv = v.GetDoubleOrDefault("HeJiLv"); life.TaoPaoLv = v.GetDoubleOrDefault("TaoPaoLv"); life.BaoJiShangHai = v.GetDoubleOrDefault("BaoJiShangHai"); life.HeJiShangHai = v.GetDoubleOrDefault("HeJiShangHai"); life.SuDu = v.GetIntOrDefault("SuDu"); life.BaoJi = v.GetIntOrDefault("BaoJi"); life.MingZhong = v.GetIntOrDefault("MingZhong"); life.ShanBi = v.GetIntOrDefault("ShanBi"); life.BaoJiLv = v.GetDoubleOrDefault("BaoJiLv"); life.MingZhongLv = v.GetDoubleOrDefault("MingZhongLv"); life.ShanBiLv = v.GetDoubleOrDefault("ShanBiLv"); //---------------------------------- life.ShengMing = v.GetVariantOrDefault("ShengMing").GetIntOrDefault("M"); life.MoFa = v.GetVariantOrDefault("MoFa").GetIntOrDefault("M"); life.GongJi = v.GetVariantOrDefault("GongJi").GetIntOrDefault("V"); life.MoFaGongJi = v.GetVariantOrDefault("MoFaGongJi").GetIntOrDefault("V"); life.FangYu = v.GetVariantOrDefault("FangYu").GetIntOrDefault("V"); life.MoFaFangYu = v.GetVariantOrDefault("MoFaFangYu").GetIntOrDefault("V"); return life; }
/// <summary> /// 初始化装备的加成.. /// </summary> /// <returns></returns> private void ResetEquipsAdd(PlayerProperty p) { AddDressing(p); if (m_equips != null && m_equips.Value != null) { Dictionary<string, List<string>> dic = new Dictionary<string, List<string>>(); for (int i = 0; i <= 9; i++) { var v = m_equips.Value.GetVariantOrDefault("P" + i); if (v == null) continue; string equiD = v.GetStringOrDefault("E"); if (string.IsNullOrEmpty(equiD)) continue; Goods gs = GoodsAccess.Instance.FindOneById(equiD); if (gs == null) continue; Variant info = gs.Value; if (info == null) continue; //持久度 var st = info.GetVariantOrDefault("Stamina"); if (st != null && st.GetIntOrDefault("V") <= 0) continue; object life; if (info.TryGetValueT("Life", out life)) { p.Add(life as Variant); //宝石加成.. BaoShiAddition(p, gs); } //装备附加属性 object affix; if (info.TryGetValueT("Affix", out affix)) { p.Add(affix as Variant); } //判断是否是套装 if (!info.ContainsKey("EntireID")) continue; string entrieid = info.GetStringOrDefault("EntireID"); if (string.IsNullOrEmpty(entrieid)) continue; List<string> goods; string goodsid = v.GetStringOrDefault("G"); if (dic.TryGetValue(entrieid, out goods)) { //if (!goods.Contains(goodsid)) //{ // goods.Add(goodsid); //} //趣游要求相同的ID也要计算套装数量 goods.Add(goodsid); } else { goods = new List<string>() { goodsid }; dic.Add(entrieid, goods); } } //套装属性 Entire(p, dic); m_ePro.Value = p.GetChange(); m_ePro.Save(); } }
/// <summary> /// 套装属性 /// </summary> /// <param name="p"></param> /// <param name="dic"></param> private void Entire(PlayerProperty p, Dictionary<string, List<string>> dic) { foreach (var item in dic) { GameConfig gc = GameConfigAccess.Instance.FindOneById(item.Key); if (gc == null) continue; Variant v = gc.Value; if (v == null) continue; Variant life = v.GetVariantOrDefault("Life"); if (life == null) continue; //套装数量 List<string> num = item.Value as List<string>; foreach (var o in life) { int m = 0; if (int.TryParse(o.Key, out m)) { if (m > num.Count) continue; p.Add(o.Value as Variant); } } //object o; //if (life.TryGetValueT(strs.Count.ToString(), out o)) //{ // p.Add(o as Variant); //} } }
/// <summary> /// 星座加成 /// </summary> private void AddStar(PlayerProperty p) { if (Star == null || Star.Value == null) return; GameConfig gc = GameConfigAccess.Instance.FindOneById("ST_00001"); if (gc == null) return; Variant life = new Variant(); for (int j = 1; j < 13; j++) { IList o = Star.Value.GetValue<IList>(j.ToString()); if (o == null) continue; //得到某个星座配置 Variant v = gc.Value.GetVariantOrDefault(j.ToString()); if (v == null) continue; //得到要加的属性 string name = v.GetStringOrDefault("Name"); double num = 0; Variant c = v.GetVariantOrDefault("B"); if (c != null) { foreach (int i in o) { //num += PartAccess.Instance.StarForm(c.GetDoubleOrDefault("A"), i + 1, c.GetIntOrDefault("B"), c.GetDoubleOrDefault("C")); //num * Math.Pow(v.GetDoubleOrDefault("A"), n * (n - 1) / 2) //星阵属性加成 double b = c.GetDoubleOrDefault("B"); double a = c.GetDoubleOrDefault("A"); double n = (i + 1) * i / 2; num += Convert.ToInt32(b * Math.Pow(a, n)); } } if (o.Count == 14) { //激活所有的守护星额外加成 Variant other = v.GetVariantOrDefault("Life"); if (other != null) { foreach (var k in other) { life.SetOrInc(k.Key, Convert.ToDouble(k.Value)); } } } if (name == "BaoJiShangHai") { num = num / 100; } life.SetOrInc(name, num); } p.Add(life); }
/// <summary> /// 时装属性加成 /// </summary> /// <param name="p"></param> private void AddDressing(PlayerProperty p) { Variant v = Wardrobe.Value; if (v == null) return; string sz = v.GetStringOrDefault("ShiZhuang"); if (string.IsNullOrEmpty(sz)) return; GameConfig gc = GameConfigAccess.Instance.FindOneById(sz); if (gc == null) return; Variant life = gc.Value.GetVariantOrDefault("Life"); if (life == null) return; p.Add(life); }
/// <summary> /// 计算宝石加成 /// </summary> /// <param name="p"></param> /// <param name="gs"></param> private static void BaoShiAddition(PlayerProperty p, Goods gs) { object baoShiInfo; if (gs.Value.TryGetValueT("BaoShiInfo", out baoShiInfo) && baoShiInfo is IDictionary<string, object>) { foreach (var x in baoShiInfo as IDictionary<string, object>) { if (x.Value != null) { string bID = x.Value.ToString(); //"-1":无孔,"0"或"":无宝石 if (bID == string.Empty || bID == "0" || bID == "-1") { continue; } var bs = GameConfigAccess.Instance.FindOneById(bID); p.Add(bs.Value.GetVariantOrDefault("Life")); } } } }
public void Init() { //if (m_life == null) Variant v = this.Value; if (v != null) { m_life = PetProperty.CreatePlayerProperty(v); this.HP = v.GetVariantOrDefault("ShengMing").GetIntOrDefault("V"); this.MP = v.GetVariantOrDefault("MoFa").GetIntOrDefault("V"); m_fixBuffer = SkillHelper.InitFixBuffer(this.Value.GetVariantOrDefault("Skill")); } }
/// <summary> /// 设置扩展信息 /// </summary> private void setPlayerEx() { NewPlayerEx(ref m_skill, "Skill"); NewPlayerEx(ref m_equips, "Equips"); NewPlayerEx(ref m_social, "Social"); NewPlayerEx(ref m_family, "Family"); NewPlayerEx(ref m_title, "Title"); NewPlayerEx(ref m_effort, "Effort"); NewPlayerEx(ref m_home, "Home"); NewPlayerEx(ref m_petBook, "PetBook"); NewPlayerEx(ref m_daily, "Daily"); NewPlayerEx(ref m_buy, "Buy"); NewPlayerEx(ref m_b0, "B0"); NewPlayerEx(ref m_b1, "B1"); NewPlayerEx(ref m_b2, "B2"); NewPlayerEx(ref m_b3, "B3"); NewPlayerEx(ref m_star, "Star"); NewPlayerEx(ref m_lottery, "Lottery"); NewPlayerEx(ref m_member, "Member"); NewPlayerEx(ref m_taskday, "TaskDay"); NewPlayerEx(ref m_wardrobe, "Wardrobe"); NewPlayerEx(ref m_ePro, "EPro"); //NewPlayerEx(ref m_sPro, "SPro"); //重新计算,修复星座缓存问题. //if (Level > 25 && m_sPro.Value.Count == 0) { m_sPro = new PlayerEx(this.ID, "SPro"); PlayerProperty p = new PlayerProperty(); ResetSkillsAdd(p); } if (NewPlayerEx(ref m_hotKeys, "HotKeys")) { Variant hotkey = m_hotKeys.Value; for (int i = 0; i <= 9; i++) { hotkey.Add(i.ToString(), string.Empty); } hotkey.Add("-", string.Empty); hotkey.Add("=", string.Empty); hotkey.Add("B", "WopenPackageWin"); hotkey.Add("C", "WopenSKConfigWin"); hotkey.Add("P", string.Empty); hotkey.Add("R", "WopenPlayerWin"); m_hotKeys.Save(); } if (NewPlayerEx(ref m_ectype, "Ectype")) { m_ectype.Value["IntoLog"] = new Variant(); m_ectype.Save(); } if (!NewPlayerEx(ref m_assist, "Assist")) { //把剩余秒数转化为时间(双倍经验) SecondToTime(); //设置红黄名时间 SetNameTime(); } List<Mounts> list = MountsAccess.Instance.GetMounts(ID); if (list != null && list.Count > 0) { m_mounts = list[0]; } //得到装备面板信息 IList c = m_b3.Value.GetValue<IList>("C"); Variant v = null; foreach (Variant pv in c) { if (pv.GetIntOrDefault("I") == 1) { v = pv; break; } } if (v != null) { this.m_pet = PetAccess.Instance.FindOneById(v.GetStringOrDefault("E")); if (m_pet != null) { m_pet.Init(); PetAccess.PetReset(m_pet, Skill, false, m_mounts); } } this.m_slippets = PlayerExAccess.Instance.SlipPets(m_b3); this.IsVIP(); }
/// <summary> /// 初始化第2层用户属性. /// </summary> static void InitLevel2(string roleID, int lv, PlayerProperty life) { //二级属性.受1级属性和直接加成的影响.. //暴击率 life.BaoJiLv = life.BaoJiLv + life.BaoJi * 0.0001; //命中率 life.MingZhongLv = life.MingZhongLv + life.MingZhong * 0.0001; //闪避率 life.ShanBiLv = life.ShanBiLv + life.ShanBi * 0.0001; if (roleID == "1") { life.ShengMing = life.ShengMing + (35 + 150 * lv + 3 * life.LiLiang + 8 * life.TiZhi); life.MoFa = life.MoFa + (3 * life.ZhiLi + 4 * life.JingShen); life.GongJi = life.GongJi + life.LiLiang + 15; life.MoFaGongJi = life.MoFaGongJi + life.ZhiLi; life.FangYu = life.FangYu + life.TiZhi; life.MoFaFangYu = life.MoFaFangYu + life.JingShen; } else if (roleID == "2") { life.ShengMing = life.ShengMing + (35 + 100 * lv + 2 * life.LiLiang + 6 * life.TiZhi); life.MoFa = life.MoFa + (3 * life.ZhiLi + 7 * life.JingShen); life.GongJi = life.GongJi + life.LiLiang + 15; life.MoFaGongJi = life.MoFaGongJi + life.ZhiLi; life.FangYu = life.FangYu + life.TiZhi; life.MoFaFangYu = life.MoFaFangYu + life.JingShen; } else if (roleID == "3") { life.ShengMing = life.ShengMing + (35 + 120 * lv + 2 * life.LiLiang + 8 * life.TiZhi); life.MoFa = life.MoFa + (3 * life.ZhiLi + 5 * life.JingShen); life.GongJi = life.GongJi + life.LiLiang + 15; life.MoFaGongJi = life.MoFaGongJi + life.ZhiLi; life.FangYu = life.FangYu + life.TiZhi; life.MoFaFangYu = life.MoFaFangYu + life.JingShen; } InitLevel3(roleID, lv, life); }
/// <summary> /// 获取更新的值. /// </summary> /// <param name="old"></param> /// <returns></returns> public Variant GetChange(PlayerProperty old) { if (old == null) return this.GetChange(); Variant v = base.GetChange(old); if (LiLiang != old.LiLiang) v.Add("LiLiang", LiLiang); if (TiZhi != old.TiZhi) v.Add("TiZhi", TiZhi); if (ZhiLi != old.ZhiLi) v.Add("ZhiLi", ZhiLi); if (JingShen != old.JingShen) v.Add("JingShen", JingShen); if (KangShangHai != old.KangShangHai) v.Add("KangShangHai", KangShangHai); return v; }
/// <summary> /// 发出反击 /// </summary> /// <param name="pro">被反击者</param> /// <returns></returns> public int SendFangJi(PlayerProperty pro) { int v = (int)(this.BaoJi * (1 - pro.WuLiXiShou) - pro.KangShangHai); if (v <= 0) v = 1; return v; }
/// <summary> /// 初始化第3层用户属性. /// </summary> static void InitLevel3(string roleID, int lv, PlayerProperty life) { //三级属性.受2级属性和直接加成的影响 //物理吸收 life.WuLiXiShou = life.WuLiXiShou + ((1.0 * life.FangYu) / (3000 + life.FangYu)); //魔法吸收 life.MoFaXiShou = life.MoFaXiShou + ((1.0 * life.MoFaFangYu) / (3000 + life.MoFaFangYu)); }
/// <summary> /// /// </summary> /// <param name="upLev"></param> private void UpdataActorR(PlayerProperty old) { Variant v = m_life.GetChange(old); v["ShengMing"] = new MVPair(m_life.ShengMing, this.HP); v["MoFa"] = new MVPair(m_life.MoFa, this.MP); v["JingYan"] = new MVPair(this.m_maxExp, this.m_exp); v["Level"] = m_level; UpdataActorR(v); }
/// <summary> /// 更新玩家属性 /// </summary> private void RefreshPlayer(string name, string value, Action<PlayerProperty> action) { PlayerProperty old = m_life; PlayerProperty p = new PlayerProperty(); action(p); m_life = CreateProperty(); if (this.HP > m_life.ShengMing) { this.HP = m_life.ShengMing; } if (this.MP > m_life.MoFa) { this.MP = m_life.MoFa; } Variant v = m_life.GetChange(old); if (!string.IsNullOrEmpty(name)) { SceneBusiness scene = m_scene; if (scene != null) { Variant t = new Variant(2); t[name] = value; t["ID"] = this.ID; this.CallAll(ClientCommand.UpdateActorR, t); } else { v[name] = value; } } if (v.Count > 0) { if (v.ContainsKey("ShengMing")) { v["ShengMing"] = new MVPair(m_life.ShengMing, this.HP); } if (v.ContainsKey("MoFa")) { v["MoFa"] = new MVPair(m_life.MoFa, this.MP); } UpdataActorR(v); } }
/// <summary> /// 创建玩家属性 /// </summary> /// <returns></returns> public PlayerProperty CreateProperty() { PlayerProperty p = new PlayerProperty(); p.Add(m_ePro.Value); p.Add(m_sPro.Value); PlayerProperty life = PropertyHelper.CreateProperty(RoleID, Level, p); return life; }
/// <summary> /// 初始化(被动技能和称号)加成 /// 训练/强健/沉稳/睿智/石盾/天人等(前缀称号/后缀称号) /// </summary> private void ResetSkillsAdd(PlayerProperty p) { if (m_skill != null && m_skill.Value != null) { foreach (var s in m_skill.Value) { GameConfig gs = GameConfigAccess.Instance.FindOneById(s.Key); if (gs == null) continue; if (gs.SubType == SkillSub.Addition || gs.SubType == SkillSub.AdditionJ) { string level = s.Value.ToString(); p.Add(gs.Value[level] as Variant); } } } TitleAddition(p); InitFixBuffer(); AddStar(p); AddDressing(p); m_sPro.Value = p.GetChange(); m_sPro.Save(); }
/// <summary> /// 计算称号加成 /// </summary> private void TitleAddition(PlayerProperty p) { if (m_title != null && m_title.Value != null) { //称号前缀 string prefix = m_title.Value.GetStringOrDefault("Prefix"); if (!string.IsNullOrEmpty(prefix)) { GameConfig gs = GameConfigAccess.Instance.FindOneById(prefix); if (gs != null && gs.MainType == MainType.Title) { p.Add(gs.Value); } } //称号后缀 string suffix = m_title.Value.GetStringOrDefault("Suffix"); ; if (!string.IsNullOrEmpty(suffix)) { GameConfig gs = GameConfigAccess.Instance.FindOneById(suffix); if (gs != null && gs.MainType == MainType.Title) { p.Add(gs.Value); } } } }
/// <summary> /// 发动攻击 /// </summary> /// <param name="pro">被攻击者</param> /// <param name="lv"></param> /// <returns></returns> public int SendGongJi(PlayerProperty pro, double lv) { int v = (int)((this.BaoJi * lv) * (1 - pro.WuLiXiShou) - pro.KangShangHai); if (v <= 0) v = 1; return v; }