Ejemplo n.º 1
0
        /// <summary>
        /// 得到宠物列表
        /// </summary>
        /// <param name="note"></param>
        public static void PetListArena(UserNote note)
        {
            PlayerEx b3 = note.Player.B3;
            IList c = b3.Value.GetValue<IList>("C");

            List<PetDetail> list = new List<PetDetail>();

            ArenaBase model;
            if (ArenaBusiness.ArenaList.TryGetValue(note.Player.SoleID, out model))
            {
                foreach (Variant v in c)
                {
                    string petid = v.GetStringOrDefault("E");
                    if (string.IsNullOrEmpty(petid))
                        continue;
                    Pet p = PetAccess.Instance.FindOneById(petid);
                    if (p != null)
                    {
                        p.IsWar = model.Pets.ContainsKey(p.ID);
                        PlayerBusiness user;
                        if (model.Players.TryGetValue(p.PlayerID, out user))
                        {
                            PetDetail detail = new PetDetail(p, user.Name);
                            list.Add(detail);
                        }
                    }
                }
            }
            note.Call(ArenaCommand.PetListArenaR, list);
        }
Ejemplo n.º 2
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;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 宠物进入参战
        /// </summary>
        /// <param name="note"></param>
        public static void PetInArena(UserNote note)
        {
            string petid = note.GetString(0);
            string groupname = note.GetString(1);

            int x = note.GetInt32(2);
            int y = note.GetInt32(3);

            if (string.IsNullOrEmpty(note.Player.SoleID))
            {
                //请选择要参战的竞技场
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.ArenaGroupName1));
                return;
            }

            ArenaBase model;
            if (!ArenaBusiness.ArenaList.TryGetValue(note.Player.SoleID, out model))
            {
                //请选择要参战的竞技场
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena1));
                return;
            }

            if (model.StartTime < DateTime.UtcNow)
            {
                //竞技场已经开始,不能再参战
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena2));
                return;
            }

            if (!model.GroupName.Contains(groupname))
            {
                //请选择分组
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena3));
                return;
            }

            if (!string.IsNullOrEmpty(note.Player.GroupName))
            {
                if (note.Player.GroupName != groupname)
                {
                    //你已经加入【" + note.Player.GroupName + "】组,不能再选择其它组
                    note.Call(ArenaCommand.PetInArenaR, false, string.Format(TipManager.GetMessage(ArenaReturn.PetInArena4), note.Player.GroupName));
                    return;
                }
            }

            PlayerEx b3 = note.Player.B3;
            IList c = b3.Value.GetValue<IList>("C");
            Variant tmp = null;
            foreach (Variant v in c)
            {
                if (v.GetStringOrDefault("E") == petid)
                {
                    tmp = v;
                    break;
                }
            }

            if (tmp == null)
            {
                //宠物不存在
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena5));
                return;
            }

            Pet p = PetAccess.Instance.FindOneById(petid);
            if (p == null || p.PlayerID != note.PlayerID)
            {
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena5));
                return;
            }

            if (PetAccess.Instance.IsFatigue(p))
            {
                //宠物过度疲劳,不能参加竞技场
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena6));
                return;
            }

            if (Math.Abs(note.Player.FightValue - model.FightValue) > model.FightPoor)
            {
                //战绩差距太大,不能参加
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena7));
                return;
            }

            int count = 0;//已经放入的宠物数量
            int groupcount = 0;//得到选组宠物总数
            foreach (Pet pk in model.Pets.Values)
            {
                if (pk.PlayerID == note.PlayerID)
                {
                    count++;
                }

                if (pk.GroupName == groupname)
                {
                    groupcount++;
                }
            }

            if (model.UserPets <= count)
            {
                //每人只能【" + model.UserPets + "】只宠物参战
                note.Call(ArenaCommand.PetInArenaR, false, string.Format(TipManager.GetMessage(ArenaReturn.PetInArena8), model.UserPets));
                return;
            }

            if (model.PetNumber <= groupcount)
            {
                //每组只能【" + model.PetNumber + "】只宠物参战
                note.Call(ArenaCommand.PetInArenaR, false, string.Format(TipManager.GetMessage(ArenaReturn.PetInArena9), model.PetNumber));
                return;
            }

            if (!model.Pets.TryAdd(p.ID, p))
            {
                //宠物已经参战
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena10));
                return;
            }
            note.Player.GroupName = groupname;

            p.GroupName = groupname;
            p.X = x;
            p.Y = y;

            p.BeginPoint = new Point(x, y);
            p.EndPoint = new Point(x, y);
            p.CurPoint = new Point(x, y);

            p.RangePet = string.Empty;
            p.PetStatus = 0;
            p.Range = 100;

            List<PetDetail> list = new List<PetDetail>();
            PetDetail detail = new PetDetail(p, note.Player.Name);
            list.Add(detail);

            model.CallAll(ArenaCommand.PetInArenaR, true, list);
            model.ArenaUserCount();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 进入竞技场
        /// </summary>
        /// <param name="note"></param>
        public static void ArenaInto(UserNote note)
        {
            string soleid = note.GetString(0);
            SceneBusiness sb = note.Player.Scene;
            if (sb.SceneType == SceneType.City || sb.SceneType == SceneType.Home || sb.SceneType == SceneType.Outdoor)
            {
                string password = note.GetString(1);
                ArenaBase model;
                if (!ArenaBusiness.ArenaList.TryGetValue(soleid, out model))
                {
                    //竞技场不存在
                    note.Call(ArenaCommand.ArenaIntoR, false, TipManager.GetMessage(ArenaReturn.ArenaInto1), soleid);
                    return;
                }
                if (note.Player.Team != null)
                {
                    //组队状态不能参加
                    note.Call(ArenaCommand.ArenaIntoR, false, TipManager.GetMessage(ArenaReturn.ArenaInto2), soleid);
                    return;
                }

                if (!string.IsNullOrEmpty(model.PassWord))
                {
                    if (model.PassWord != password)
                    {
                        //进入密码不正确
                        note.Call(ArenaCommand.ArenaIntoR, false, TipManager.GetMessage(ArenaReturn.ArenaInto3), soleid);
                        return;
                    }
                }

                if (!model.Players.TryAdd(note.PlayerID, note.Player))
                {
                    //已经进入竞技场,不能重复进入
                    note.Call(ArenaCommand.ArenaIntoR, false, TipManager.GetMessage(ArenaReturn.ArenaInto4), soleid);
                    return;
                }
                if (string.IsNullOrEmpty(soleid))
                {
                    //该竞技场不存在
                    note.Call(ArenaCommand.ArenaIntoR, false, TipManager.GetMessage(ArenaReturn.ArenaInto5), soleid);
                    return;
                }

                //通知当前场景所有角色,角色属性发生变化
                note.Player.SetActionState(ActionState.Arena);
                note.Player.SoleID = soleid;
                note.Player.GroupName = "";
                List<PetDetail> list = new List<PetDetail>();
                foreach (Pet p in model.Pets.Values)
                {
                    PlayerBusiness user;
                    if (model.Players.TryGetValue(p.PlayerID, out user))
                    {
                        PetDetail detail = new PetDetail(p, user.Name);
                        list.Add(detail);
                    }
                }
                note.Call(ArenaCommand.ArenaIntoR, true, list, soleid);
                model.ArenaUserCount();
            }
            else
            {
                //当前场景不能进入竞技场
                note.Call(ArenaCommand.ArenaIntoR, false, TipManager.GetMessage(ArenaReturn.ArenaInto6), soleid);
                return;

            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 角色断线,移除所有参战宠
        /// </summary>
        /// <param name="playerid"></param>
        public void UserDisconnected(string playerid)
        {
            if (this.Status == 1)
            {
                ArenaFight.UseDis(this, playerid);
            }
            PlayerBusiness pb;
            if (m_players.TryRemove(playerid, out pb))
            {
                pb.SoleID = "";
                pb.GroupName = "";

                pb.SetActionState(ActionState.Standing);

                List<string> tmp = new List<string>();
                foreach (Pet p in m_pets.Values)
                {
                    if (p.PlayerID == playerid)
                    {
                        tmp.Add(p.ID);
                    }
                }

                List<PetDetail> list = new List<PetDetail>();
                foreach (string k in tmp)
                {
                    Pet p;
                    if (m_pets.TryRemove(k, out p))
                    {
                        //移除的宠物
                        PetDetail model = new PetDetail(p, pb.Name, 1);
                        list.Add(model);
                    }
                }

                if (list.Count > 0)
                {
                    //通知当前所有该竞技场上的角色
                    CallAll(ArenaCommand.PetOutArenaR, true, list);
                }
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 移除指定宠物
        /// </summary>
        /// <param name="playerid">角色</param>
        /// <param name="petid">宠物</param>       
        /// <returns>true成功,false宠物不存在</returns>
        public bool RemovePet(string playerid, string petid)
        {
            List<PetDetail> list = new List<PetDetail>();
            Pet p;
            if (m_pets.TryRemove(petid, out p))
            {
                PetDetail detail = new PetDetail(p, "", 1);
                list.Add(detail);
            }

            if (list.Count > 0)
            {
                CallAll(ArenaCommand.PetOutArenaR, true, list);
                return true;
            }
            return false;
        }
Ejemplo n.º 7
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);
        }