/// <summary> /// 宠物基本信息 /// </summary> /// <param name="pet">宠物信息</param> /// <param name="style">0表示明细,1宠物ID</param> public PetDetail(Pet pet,string name, int style = 0) { m_pet = pet; m_style = style; m_name = name; m_level = pet.Value.GetIntOrDefault("PetsLevel"); m_fatigue.Add("V", pet.Value.GetIntOrDefault("Fatigue")); m_fatigue.Add("M", PetAccess.Instance.MaxFatigue(m_level)); }
public PetRank(Pet pet) { this.ID = pet.ID; this.Name = pet.Name; this.Total = pet.Value.GetVariantOrDefault("ChengChangDu").GetIntOrDefault("V"); this.Level = pet.Value.GetIntOrDefault("PetsLevel"); this.PetsType = pet.Value.GetStringOrDefault("PetsType"); this.Value = pet.Value.GetVariantOrDefault("Topn"); int pid; if (Sinan.Extensions.StringFormat.TryHexNumber(pet.PlayerID, out pid)) { this.PlayerID = pid; } this.PlayerName = string.Empty; //this.PlayerName = pet.Value.GetStringOrDefault("PlayerName"); }
/// <summary> /// 宠物升级 /// </summary> /// <param name="pet"></param> /// <param name="newExp"></param> /// <param name="max"></param> /// <param name="petLev"></param> /// <returns></returns> private int UpPetLev(Pet pet, int newExp, int max, int petLev) { if (pet == null) return petLev; Variant mv = pet.Value; if (mv == null) return petLev; string petsType = mv.GetStringOrDefault("PetsType"); bool isPet = false; while (true) { petLev += 1; //得到可以领捂的技能 pet.Value["PetsLevel"] = petLev; PetProperty life = PetAccess.GetSkillPro(pet, petLev); Variant ccd = mv.GetVariantOrDefault("ChengChangDu"); life.ChengChangDu = ccd.GetIntOrDefault("V"); int curExp = newExp - max; //表示出战宠升级 if (Pet != null && Pet.ID == pet.ID) { isPet = true; } PetAccess.RefreshPetProperty(pet.Value, life, curExp, true); LevelLogAccess.Instance.Insert(pet.ID, petLev, UserID); if (petLev < maxLevel) { Variant exp = mv.GetVariantOrDefault("Experience"); max = exp.GetIntOrDefault("M"); if (curExp < max) { exp["V"] = curExp; break; } } else { break; } } FinishNote(FinishCommand.PetUpLev, petLev); pet.Init(); if (isPet) { //表示出战宠 PetAccess.PetReset(pet, m_skill, false, m_mounts); Call(PetsCommand.UpdatePetR, true, pet); } else { pet.Save(); } return petLev; }
/// <summary> /// 宠物领捂技能 /// </summary> /// <param name="pet"></param> /// <param name="petLev"></param> /// <param name="petsType"></param> private void AddPetSkill(Pet pet, int petLev, string petsType) { string skillid = RoleManager.Instance.GetRoleConfig(petsType, "P" + petLev); if (string.IsNullOrEmpty(skillid)) return; GameConfig gc = GameConfigAccess.Instance.FindOneById(skillid); if (gc == null) return; string roleLimit = gc.Value.GetStringOrDefault("RoleLimit"); if (roleLimit == "0" || petsType == roleLimit) { Variant skill; if (pet.Value.TryGetValueT("Skill", out skill)) { if (skill == null) { skill = new Variant(); pet.Value["Skill"] = skill; } } if (skill.ContainsKey(skillid)) return; //得到宠物技能槽 IList skillList = pet.Value.GetValue<IList>("SkillGroove"); Variant sk = null; bool noSkill = true; foreach (Variant k in skillList) { if (sk == null && k.GetStringOrDefault("SkillID") == "0" && k.GetIntOrDefault("Born") == 0) sk = k; //已经存在改技能 if (k.GetStringOrDefault("SkillID") == skillid) noSkill = false; } if (noSkill && sk != null) { sk["SkillID"] = skillid; sk["Level"] = 1; sk["Born"] = 0; sk["MaxUse"] = gc.UI.GetIntOrDefault("MaxUse"); sk["SkillName"] = gc.Name; skill.Add(skillid, 1); //1表示宠物,技能ID,技能ID,表示宠物领悟新的技能 Call(ClientCommand.GetNewSkillR, 1, skillid, petLev); } } }
public void ResetPet(Pet value, bool iscall = true) { m_pet = value; if (m_pet != null) { m_pet.Init(); } if (iscall) { Variant v = new Variant(2); v["ID"] = this.ID; v["Pet"] = value; this.CallAll(ClientCommand.UpdateActorR, v); } }
/// <summary> /// 宠物取得经验 /// </summary> /// <param name="pet"></param> /// <param name="experience"></param> /// <param name="isCall"></param> /// <param name="eType">宠物经验来源</param> /// <returns></returns> public bool AddPetExp(Pet pet, int experience, bool isCall, int eType) { if (pet == null) { return false; } Variant exp = pet.Value.GetVariantOrDefault("Experience"); if (exp.GetIntOrDefault("V") == int.MaxValue) { return false; } int newExp = exp.SetOrInc("V", experience); if (newExp < 0) { newExp = int.MaxValue; exp["V"] = newExp; } int petLev = pet.Value.GetIntOrDefault("PetsLevel"); if (petLev >= maxLevel) { pet.Save(); } else { int max = exp.GetIntOrDefault("M"); if (newExp >= max) { petLev = UpPetLev(pet, newExp, max, petLev); newExp = exp.GetIntOrDefault("V"); } else { pet.SaveLife(); } } if (isCall) { Call(PetsCommand.UpdatePetR, true, pet); } //宠物取得经验 PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.PetExp); log.level = petLev; log.modifyexp = experience; log.totalexp = newExp; log.reserve_1 = eType; log.remark = pet.ID; log.touid = PID; this.WriteLog(log); return true; }
/// <summary> /// 清理宠物装备的技能 /// </summary> /// <param name="p"></param> public static void SkillClear(Pet p) { IList skillGroove = p.Value.GetValue<IList>("SkillGroove"); if (skillGroove == null) return; Variant skill = p.Value.GetVariantOrDefault("Skill"); foreach (Variant sk in skillGroove) { int born = sk.GetIntOrDefault("Born"); if (born == 0 || born == 2) continue; string skillid = sk.GetStringOrDefault("SkillID"); if (skillid != "-1") { if (skill != null) { //移除所有非天生技能 if (skill.ContainsKey(skillid)) { skill.Remove(skillid); } } sk["SkillID"] = "0"; sk["MaxUse"] = 0; sk["Key"] = string.Empty; sk["Level"] = 0; sk["SkillName"] = string.Empty; sk["Born"] = 0; } } }
/// <summary> /// 自动加满宠物的HP /// </summary> /// <returns></returns> private int AutoFullPMP(Pet pet) { Variant moFa = pet.Value.GetVariantOrDefault("MoFa"); //"MoFa" : { "M" : 27, "V" : 27 }, int need = moFa.GetIntOrDefault("M") - pet.MP; if (need > 0) { int usable; if (m_assist.Value.TryGetValueT<int>("PHP", out usable) && usable > 0) { if (usable > need) { pet.MP += need; moFa["V"] = pet.MP; m_assist.Value["PHP"] = usable - need; return need; } else { m_assist.Value.Remove("PHP"); pet.MP += usable; moFa["V"] = pet.MP; return usable; } } } return 0; }
/// <summary> /// 取回宠物 /// </summary> /// <param name="note"></param> public static void PetRetrieve(UserNote note) { string soleid = note.PlayerID + "PetRetrieve"; if (!m_dic.TryAdd(soleid, soleid)) { return; } try { IList boby = note.Body as IList; if (boby == null) return; string id = note.GetString(0); //0表示产生宠物,1表示采集,生产取出宠物,2表示训化完成后取回宠物 int goodsType = note.GetInt32(1); string bType = "B3"; if (boby.Count > 2) { bType = note.GetString(2); } if (bType != "B2" && bType != "B3") return; string npcid = note.GetString(3);//NPC if (!note.Player.EffectActive(npcid, "")) return; //驯化取回 PlayerEx home = note.Player.Home; if (goodsType == 0) { #region 将道具变成宠物的过程 Variant pk = home.Value.GetValueOrDefault<Variant>("PetKeep"); string goodsid = pk.GetStringOrDefault("ID"); Goods g = GoodsAccess.Instance.FindOneById(goodsid); if (g == null) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.ConfigError)); return; } if (goodsid == id) { if (pk.GetStringOrDefault("EndTime") != string.Empty) { DateTime endTime; if (!DateTime.TryParse(pk.GetStringOrDefault("EndTime"), out endTime)) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.HomeKeeping)); return; } if (endTime > DateTime.UtcNow) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.HomeKeeping)); return; } } if (pk.GetIntOrDefault("PetsWild") == -1) { //宠物已经产生,不能重复产生 return; } string petid = g.Value.GetStringOrDefault("PetID"); // 得到宠物基本信息 GameConfig gc = GameConfigAccess.Instance.FindOneById(petid); if (gc == null || gc.Value == null) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetError)); return; } Variant model = gc.Value; string petType = model.GetStringOrDefault("PetsType"); int petLevel = model.GetIntOrDefault("PetsLevel"); //宠物已经产生 Variant petInfo = PetAccess.CreateBase(gc, 0, g.Value.GetIntOrDefault("IsBinding")); Pet p = new Pet(); p.ID = ObjectId.GenerateNewId().ToString(); p.Name = gc.Name; p.Value = petInfo; p.Modified = DateTime.UtcNow; p.PlayerID = note.PlayerID; p.Created = DateTime.UtcNow; p.Save(); pk["ID"] = p.ID; pk["PetID"] = petid; pk["StartTime"] = string.Empty; pk["EndTime"] = string.Empty; pk["PetsWild"] = -1; pk["PetName"] = gc.Name; pk["PetsRank"] = gc.Value.GetIntOrDefault("PetsRank"); home.Save(); note.Call(HomeCommand.PetRetrieveR, true, goodsType, id); //表示宠物驯化成功 note.Player.FinishNote(FinishCommand.PetJobFuHua, gc.Value.GetStringOrDefault("PetsType")); //移除道具 GoodsAccess.Instance.Remove(g.ID, note.PlayerID); } return; #endregion } else if (goodsType == 2) { #region 表示取出训化成功的宠物 Variant pk = home.Value.GetValueOrDefault<Variant>("PetKeep"); if (pk.GetStringOrDefault("ID") != id) { //宠物ID不正确 note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetError)); return; } Pet px = PetAccess.Instance.FindOneById(id); if (px == null) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetError)); return; } //宠物槽 PlayerEx pgx = bType == "B3" ? note.Player.B3 : note.Player.B2; IList pcx = pgx.Value.GetValue<IList>("C"); Variant vx = null; foreach (Variant k in pcx) { if (k.GetStringOrDefault("E") == string.Empty) { vx = k; break; } } if (vx == null) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetBurdenFull)); return; } vx["E"] = px.ID; vx["G"] = px.Value.GetStringOrDefault("PetsID"); vx["S"] = px.Value.GetIntOrDefault("Sort"); vx["H"] = px.Value.GetIntOrDefault("IsBinding"); vx["A"] = 1; vx["D"] = 0; vx["R"] = px.Value.GetIntOrDefault("PetsRank"); vx["I"] = 0; if (bType == "B2") { Variant ct = PetAccess.Instance.CreateAward(note.Player.Level, id, note.PlayerID, note.Player.Pet); vx["T"] = ct; } //宠物背包保存 pgx.Save(); pk["ID"] = string.Empty; pk["PetID"] = string.Empty; pk["StartTime"] = string.Empty; pk["EndTime"] = string.Empty; pk["PetsWild"] = 0; pk["PetName"] = string.Empty; pk["PetsRank"] = 0; home.Save(); //更新宠物背包 //note.Call(ClientCommand.UpdateActorR, new PlayerExDetail(note.Player.B3)); note.Player.UpdateBurden(bType); note.Call(HomeCommand.PetRetrieveR, true, goodsType, id); if (bType == "B3") { //溜宠格子内,宠物将给随 if (vx.GetIntOrDefault("P") > 3) { List<Variant> ps = PlayerExAccess.Instance.SlipPets(note.Player.B3); note.Player.GetSlipPets(ps); } } else { note.Call(PetsCommand.StockingR, true, true, PetAccess.Instance.GetPetModel(vx)); } return; #endregion } #region 取回采集,生产,合成的宠物 Pet pet = PetAccess.Instance.FindOneById(id); if (pet == null) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetError)); return; } //宠物槽 PlayerEx pg = bType == "B3" ? note.Player.B3 : note.Player.B2; IList pc = pg.Value.GetValue<IList>("C"); Variant v = null; foreach (Variant k in pc) { if (string.IsNullOrEmpty(k.GetStringOrDefault("E"))) { v = k; break; } } if (v == null) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetBurdenFull)); return; } Variant produces = home.Value.GetValueOrDefault<Variant>("Produces"); foreach (string k in produces.Keys) { Variant p = produces[k] as Variant; IList petList = p.GetValue<IList>("PetList"); for (int i = 0; i < petList.Count; i++) { Variant m = petList[i] as Variant; if (m.GetStringOrDefault("ID") == id) { if (!string.IsNullOrEmpty(p.GetStringOrDefault("GoodsID"))) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.Produceing)); return; } v["E"] = pet.ID; v["G"] = pet.Value.GetStringOrDefault("PetsID"); v["S"] = pet.Value.GetIntOrDefault("Sort"); v["D"] = 0; v["R"] = pet.Value.GetIntOrDefault("PetsRank"); v["I"] = 0; v["A"] = 1; v["H"] = pet.Value.GetIntOrDefault("IsBinding"); if (bType == "B2") { v["T"] = PetAccess.Instance.CreateAward(note.Player.Level, id, note.PlayerID, note.Player.Pet); } petList.Remove(m); home.Save(); pet.Save(); pg.Save(); if (bType == "B3") { //溜宠格子内,宠物将给随 if (v.GetIntOrDefault("P") > 3) { List<Variant> ps = PlayerExAccess.Instance.SlipPets(note.Player.B3); note.Player.GetSlipPets(ps); } } else { note.Call(PetsCommand.StockingR, true, true, PetAccess.Instance.GetPetModel(v)); } note.Player.UpdateBurden(bType); note.Call(HomeCommand.PetRetrieveR, true, goodsType, id); return; } } } note.Call(HomeCommand.PetRetrieveR, false, TipManager.GetMessage(HomeReturn.PetError)); #endregion } finally { string str; m_dic.TryRemove(soleid, out str); } }
/// <summary> /// 判断是否允许攻击 /// </summary> /// <param name="root">攻击者</param> /// <param name="target">被攻击者</param> /// <returns></returns> private static bool ChechFight(Pet root, Pet target) { //同组不能攻击 if (root.GroupName == target.GroupName) return false; Variant v_target = target.Value; Variant shengMing = v_target.GetValueOrDefault<Variant>("ShengMing"); //攻击目标已经死亡 if (shengMing.GetIntOrDefault("V") <= 0) { return false; } //表示不在攻击范围 double spacing = Spacing(root.CurPoint, target.CurPoint); //宠物之前距离大于100,小于15都不攻击 if (spacing > root.Range || spacing < 15) { return false; } return true; }
/// <summary> /// 吸星魔法 /// </summary> /// <param name="note"></param> /// <param name="petid">进攻宠物的ID</param> /// <param name="p">放养的宠物</param> private double PetXiShou(UserNote note, Pet p, int level) { //取技能配置 GameConfig gc = GameConfigAccess.Instance.FindOneById(AbsorbSkillID); if (gc == null) { note.Call(PetsCommand.PetAbsorbR, false, string.Empty, TipManager.GetMessage(PetsReturn.NoSkill)); return 0; } Variant config = gc.Value.GetVariantOrDefault(level.ToString()); if (config == null) { note.Call(PetsCommand.PetAbsorbR, false, string.Empty, TipManager.GetMessage(PetsReturn.NoSkill)); return 0; } //每天可以使用吸星魔法上限 int maxcount = gc.UI.GetIntOrDefault("MaxUse"); if (maxcount <= 0) { maxcount = 30; } if (note.Player.ReadDaily(PlayerBusiness.DailyOther, "Xi") >= maxcount) { //每天可以使用吸星魔法上限为"+maxcount+"次 note.Call(PetsCommand.PetAbsorbR, false, string.Empty, string.Format(TipManager.GetMessage(PetsReturn.Absorb3), maxcount)); return 0; } int count = maxcount - note.Player.WriteDaily(PlayerBusiness.DailyOther, "Xi"); //成功率 double su = config.GetDoubleOrDefault("P"); //double su = 0.15 + 0.05 * (level); if (!Sinan.Extensions.NumberRandom.RandomHit(su)) { //"吸星失败!无收益。今日还可以使用吸星魔法" + count + "次。" note.Call(PetsCommand.PetAbsorbR, false, string.Empty, string.Format(TipManager.GetMessage(PetsReturn.Absorb4), count)); return 0; } //收益比 double xishoulv = config.GetDoubleOrDefault("A"); return xishoulv; }
/// <summary> /// 重新计算宠物基本属性 /// </summary> /// <param name="note"></param> /// <param name="p"></param> private static void UpdateSkill(UserNote note, Pet p) { PlayerEx family = note.Player.Family; if (note.Player.Pet != null && note.Player.Pet.ID == p.ID) { PetAccess.PetReset(p, note.Player.Skill, false,note.Player.Mounts); } else { PetAccess.PetReset(p, null, false, null); } note.Call(PetsCommand.UpdatePetR, true, p); }
/// <summary> /// 清除快捷键 /// </summary> /// <param name="p"></param> /// <param name="skillid"></param> private static void RemoveKey(Pet p, string skillid) { for (int i = 0; i < 10; i++) { if (p.Value.ContainsKey(i.ToString())) { if (p.Value.GetStringOrDefault(i.ToString()) == skillid) { p.Value[i.ToString()] = string.Empty; } } } }
/// <summary> /// 诱宠成功率 /// </summary> /// <param name="p">被诱宠物</param> /// <param name="number">投入成长果实个数</param> /// <returns></returns> private static double StealLv(Pet p, int number) { Variant v = p.Value; //投放果实数 int zz = v.GetIntOrDefault("ZiZhi"); string petsid = v.GetStringOrDefault("PetsID"); GameConfig gc = GameConfigAccess.Instance.FindOneById(petsid); if (gc == null) return 0; //是否可以进化 int isRank = gc.Value.GetIntOrDefault("IsRank"); double a = number * 5 + (100 - Loyalty(p)); double b = (1000 * (isRank + zz) + 1200); double d = Math.Round(a / b, 4); return (Math.Round(d, 4) > 0.8) ? 0.8 : Math.Round(d, 4); //return NumberRandom.RandomHit(d); }
/// <summary> /// 初始忠诚度 /// </summary> /// <param name="p"></param> /// <returns></returns> private static int Loyalty(Pet p) { Variant v = p.Value; //家政总值 int total = v.GetIntOrDefault("YaoJi") + v.GetIntOrDefault("JuanZhou") + v.GetIntOrDefault("JiaGong") + v.GetIntOrDefault("CaiJi"); int feed = v.GetIntOrDefault("FeedCount"); decimal d = total / 6 + feed / 2; return Convert.ToInt32(Math.Ceiling(d)); }
/// <summary> /// 补充宠物的HP/MP /// </summary> /// <param name="v"></param> /// <returns></returns> private static bool SupplyPet(Variant v, Pet m_pet, ArenaBase model, string name) { bool use = false; //庞物 if (m_pet == null) return use; Variant pet = m_pet.Value; if (pet == null) return use; Variant moFa = pet.GetVariantOrDefault("MoFa"); Variant shengMing = pet.GetVariantOrDefault("ShengMing"); double dhp = v.GetDoubleOrDefault("HP"); double dmp = v.GetDoubleOrDefault("MP"); int hp, mp; if (dhp <= 1) { hp = (int)(dhp * shengMing.GetIntOrDefault("M")); //百分比方式 } else { hp = (int)(dhp); } if (dmp <= 1) { mp = (int)(dmp * moFa.GetIntOrDefault("M")); //百分比方式 } else { mp = (int)(dmp); } if (hp > 0) { int sv = shengMing.GetIntOrDefault("V"); int need = shengMing.GetIntOrDefault("M") - sv; if (need > 0) { m_pet.HP = Math.Min(need, hp) + sv; shengMing["V"] = m_pet.HP; use = true; } } if (mp > 0) { int mv = moFa.GetIntOrDefault("V"); int need = moFa.GetIntOrDefault("M") - mv; if (need > 0) { m_pet.MP = Math.Min(need, mp) + mv; moFa["V"] = m_pet.MP; use = true; } } if (hp > 0 || mp > 0) { List<PetDetail> list = new List<PetDetail>(); PetDetail detail = new PetDetail(m_pet, name); list.Add(detail); model.CallAll(ArenaCommand.ArenaGoodsR, true, list); m_pet.Save(); } return use; }
/// <summary> /// 计算得到当前屏幕坐标 /// </summary> /// <param name="p"></param> private static void CurPoint(Pet p) { Point begin = p.BeginPoint; Point end = p.EndPoint; if (p.PetStatus == 0) { p.CurPoint = begin; return; } TimeSpan ts = DateTime.UtcNow - p.StartTime; //总的毫秒数 double ms = ts.TotalMilliseconds; //两点间的距离 double s = Spacing(begin, end); //移动实际需要时间 double t = s / p.Speed; if (t > p.Speed) { p.CurPoint = end; return; } //移动的距离 double s0 = Math.Abs(ms * p.Speed * 0.001); int x = Convert.ToInt32(s0 * (end.X - begin.X) + s * begin.X); int y = Convert.ToInt32(s0 * (end.Y - begin.Y) + s * begin.Y); p.CurPoint = new Point(x, y); }
/// <summary> /// 得到宠物基本信息 /// </summary> /// <param name="p"></param> /// <returns></returns> private static Variant PetBase(Pet p) { Variant n = new Variant(); Variant v = p.Value; if (v != null) { n.Add("ID", p.ID); int ccd = v.GetVariantOrDefault("ChengChangDu").GetIntOrDefault("V"); n.Add("ChengChangDu", ccd); n.Add("PetsID", v.GetStringOrDefault("PetsID")); n.Add("PetsRank", v.GetIntOrDefault("PetsRank")); n.Add("Skin", v.GetStringOrDefault("Skin")); n.Add("Name", p.Name); n.Add("PetsLevel", v.GetIntOrDefault("PetsLevel")); //进入星阵时间 n.Add("StarTime", DateTime.UtcNow); } return n; }
/// <summary> /// 自动加满宠物的HP /// </summary> /// <returns></returns> private int AutoFullPHP(Pet pet) { Variant shengMing = pet.Value.GetVariantOrDefault("ShengMing"); //"ShengMing" : { "M" : 88, "V" : 88 } int need = shengMing.GetIntOrDefault("M") - pet.HP; if (need > 0) { int usable; //可用的 if (m_assist.Value.TryGetValueT<int>("PHP", out usable) && usable > 0) { if (usable > need) { pet.HP += need; shengMing["V"] = pet.HP; m_assist.Value["PHP"] = usable - need; return need; } else { m_assist.Value.Remove("PHP"); pet.HP += usable; shengMing["V"] = pet.HP; return usable; } } } return 0; }
/// <summary> /// 简单的玩家类 /// </summary> /// <param name="pet"></param> /// <param name="style"> /// style=0:, /// style=1:宠物等级排行 /// style=2:魔法和生命 /// style=3:溜宠物 /// </param> public PetSimple(Pet pet, int style = 0) { m_style = style; this.m_pet = pet; }
private void initPet() { this.m_pet = m_player.Pet; this.Name = m_pet.Name; this.Level = m_pet.Value.GetIntOrDefault("PetsLevel"); this.Skin = GetPetSkin(m_pet.Value); this.m_hp = m_pet.HP; this.m_mp = m_pet.MP; this.Life = m_pet.Life; this.m_skills = m_pet.Value.GetVariantOrDefault("Skill"); this.m_fixBuffer = m_pet.FixBuffer; this.ID = m_pet.ID; }
/// <summary> /// 得到攻击受害值 /// </summary> /// <param name="root">攻击者</param> /// <param name="target">被攻击者</param> /// <returns></returns> public PetFightDetail FightObject(Pet root, Pet target) { m_root = root; m_target = target; FightBase fightBase = new FightBase(); fightBase.ID = target.ID; fightBase.Name = target.Name; fightBase.PlayerID = target.PlayerID; fightBase.CurSkill = m_curskill; //判断是否命中 if (m_injuryType == 0) { if (CheckMingZhong(m_root.Value, m_target.Value)) { if (CheckBaoJi(m_root.Value, m_target.Value)) { //暴击 fightBase.FB = FightType.BaoJi; } else { //普通攻击 fightBase.FB = FightType.PuTong; } fightBase.HPcost = FightValue(fightBase.FB); //最小1点受害 fightBase.HPcost = fightBase.HPcost >= 1 ? fightBase.HPcost : 1; } else { //闪避成功 fightBase.FB = FightType.ShangBi; fightBase.HPcost = 0; } } else { if (CheckBaoJi(m_root.Value, m_target.Value)) { //暴击 fightBase.FB = FightType.BaoJi; } else { //普通攻击 fightBase.FB = FightType.PuTong; } fightBase.HPcost = FightValue(fightBase.FB); //最小1点受害 fightBase.HPcost = fightBase.HPcost >= 1 ? fightBase.HPcost : 1; } Variant sm = m_target.Value.GetValueOrDefault<Variant>("ShengMing"); int m = sm.GetIntOrDefault("V"); if (fightBase.HPcost >= m) { sm["V"] = 0; //计算相关战绩值 GetFightValue(); //宠物被打挂 Variant tmp = new Variant(); tmp.Add("ID", target.ID); tmp.Add("Level", target.Value.GetIntOrDefault("PetsLevel")); root.FightDeath.Add(tmp); PetDetail model = new PetDetail(root, "", 2); m_model.CallAll(ArenaCommand.ArenaPetOverR, model); } else { sm["V"] = m - fightBase.HPcost; } fightBase.ShengMing = sm; fightBase.MoFa = m_target.Value.GetValueOrDefault<Variant>("MoFa"); return new PetFightDetail(fightBase); }