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> 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> 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> /// <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")); } } } }
/// <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; }