Exemple #1
0
        /// <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));
        }
Exemple #2
0
        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");
        }
Exemple #3
0
        /// <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;
        }
Exemple #4
0
        /// <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);
                }
            }
        }
Exemple #5
0
 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);
     }
 }
Exemple #6
0
        /// <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;
        }
Exemple #7
0
        /// <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;
                }
            }
        }
Exemple #8
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;
 }
Exemple #9
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);
            }
        }
Exemple #10
0
        /// <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;
        }
Exemple #11
0
        /// <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;
        }
Exemple #12
0
 /// <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);
 }
Exemple #13
0
 /// <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;
             }
         }
     }
 }
Exemple #14
0
        /// <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);
        }
Exemple #15
0
 /// <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));
 }
Exemple #16
0
        /// <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;
        }
Exemple #17
0
        /// <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);
        }
Exemple #18
0
 /// <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;
 }
Exemple #19
0
 /// <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;
 }
Exemple #20
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;
 }
Exemple #21
0
 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;
 }
Exemple #22
0
        /// <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);
        }