Beispiel #1
0
        /// <summary>
        /// 领取奖励
        /// </summary>
        /// <param name="note"></param>
        public static void BossAward(UserNote note)
        {
            string fid = note.Player.Family.Value.GetStringOrDefault("FamilyID");
            if (string.IsNullOrEmpty(fid))
            {
                note.Call(FamilyCommand.BossAwardR, false, TipManager.GetMessage(FamilyReturn.NoAddFamily));
                return;
            }

            string bid = note.GetString(0);
            var p = GameConfigAccess.Instance.FindOneById(bid);
            if (p == null)
            {
                return;
            }

            string gid = note.GetString(1); //FamilyBossAccess.Instance.ViewAward(fid + bid, note.Player.ID);
            if (string.IsNullOrEmpty(gid))
            {
                return;
            }

            string[] tt = gid.Split('$');
            int number = 1;
            if (tt.Length != 2 || (!int.TryParse(tt[1], out number)))
            {
                number = 1;
            }
            string goodsid = tt[0];

            //TODO:检查包袱
            Dictionary<string, Variant> goods = new Dictionary<string, Variant>();
            Variant tmp = new Variant();
            tmp.Add("Number1", number);
            goods.Add(goodsid, tmp);
            if (BurdenManager.GetBurdenSpace(note.Player.B0.Value.GetValue<IList>("C")) == null)
            {
                note.Call(FamilyCommand.BossAwardR, false, TipManager.GetMessage(ActivityReturn.SignAward4));
                return;
            }

            //if (BurdenManager.IsFullBurden(note.Player.B0, goods))
            //{
            //    note.Call(FamilyCommand.BossAwardR, false, TipManager.GetMessage(ActivityReturn.SignAward4));
            //    return;
            //}

            if (FamilyBossAccess.Instance.GetAward(fid + bid, note.Player.ID, gid))
            {
                //发放物品
                note.Player.AddGoods(goods, GoodsSource.FamilyBoss);
                note.Call(FamilyCommand.BossAwardR, true, gid);
            }
            else
            {
                //已领取..
                note.Call(FamilyCommand.BossAwardR, false, TipManager.GetMessage(FamilyReturn.CannotBossAward));
            }
        }
Beispiel #2
0
 /// <summary>
 /// 删除仇人
 /// </summary>
 /// <param name="note"></param>
 public static void DelEnemy(UserNote note)
 {
     string playerid = note.GetString(0);
     PlayerEx Social = note.Player.Social;
     IList Enemy = Social.Value.GetValue<IList>("Enemy");
     if (Enemy != null)
     {
         Variant msg = null;
         foreach (Variant d in Enemy)
         {
             if (d.GetStringOrDefault("PlayerID") == playerid)
             {
                 msg = d;
                 break;
             }
         }
         if (msg != null)
         {
             ///移除成功
             Enemy.Remove(msg);
             Social.Save();
         }
     }
     Variant v = new Variant();
     v.Add("ID",playerid);
     note.Call(SocialCommand.DelEnemyR, true, v);
 }
Beispiel #3
0
        /// <summary>
        /// 添加好友
        /// </summary>
        /// <param name="note"></param>
        public static void AddFriends(UserNote note)
        {
            string name = note.GetString(0);
            if (note.Player.Name == name)
            {
                return;
            }
            PlayerEx social = note.Player.Social;
            if (social == null)
            {
                note.Call(SocialCommand.AddFriendsR, false, TipManager.GetMessage(SocialReturn.UserInfoError));
                return;
            }

            PlayerBusiness player = PlayersProxy.FindPlayerByName(name);
            if (player == null)
            {
                note.Call(SocialCommand.AddFriendsR, false, TipManager.GetMessage(SocialReturn.UserInfoError));
                return;
            }

            if (social.Value != null)
            {
                if (SocialBusiness.IsLet(social, player.ID, new List<string> { "Friends" }))
                {
                    note.Call(SocialCommand.AddFriendsR, false, TipManager.GetMessage(SocialReturn.Friends));
                    return;
                }

                if (SocialBusiness.IsLet(social, player.ID, new List<string> { "Enemy" }))
                {
                    note.Call(SocialCommand.AddFriendsR, false, TipManager.GetMessage(SocialReturn.Master));
                    return;
                }
            }

            Variant v = new Variant();
            v.Add("PlayerID", player.ID);
            v.Add("Created", DateTime.UtcNow);
            IList list = social.Value.GetValue<IList>("Friends");
            int num = 0;
            if (list == null)
            {
                social.Value["Friends"] = new List<Variant>() { v };
                num = 1;
            }
            else
            {
                list.Add(v);
                num = list.Count;
            }
            social.Save();

            note.Call(SocialCommand.AddFriendsR, true, new PlayerSimple(player, 3));

            //添加好友
            note.Player.FinishNote(FinishCommand.Friends, num);
        }
Beispiel #4
0
        /// <summary>
        /// 进入玩家和怪的战斗
        /// </summary>
        /// <param name="note"></param>
        private void IntoBattle(UserNote note)
        {
            List<PlayerBusiness> players = FightBase.GetPlayers(note.Player);
            FightObject[] teamA = FightBase.CreateFightPlayers(players);
            FightType fType = (FightType)(note.GetInt32(0));
            FightObject[] teamB = FightBase.CreateApcTeam(players, fType, note[1]);

            string npcID = note.GetString(2);

            if (players.Count == 0 || teamB.Length == 0)
            {
                foreach (var v in players)
                {
                    v.SetActionState(ActionState.Standing);
                }
                return;
            }
            bool isEctype = (note.Player.Scene is SceneEctype || note.Player.Scene is SceneSubEctype);

            FightBusiness fb;
            if (fType == FightType.SceneAPC)
            {
                //打明怪
                SceneApc sab = note.GetValue<SceneApc>(3);
                int subID = note.GetInt32(4);
                fb = new FightSceneApc(teamA, teamB, players, npcID, isEctype, sab, subID);
            }
            else if (fType == FightType.RobAPC)
            {
                SceneApc sab = note.GetValue<SceneApc>(3);
                int subID = note.GetInt32(4);
                RobBusiness rb = note.GetValue<RobBusiness>(5);
                fb = new FightBusinessRobApc(teamA, teamB, players, npcID, isEctype, sab, subID, rb);
            }
            else if (fType == FightType.ProAPC)
            {
                //守护战争明怪
                SceneApc sab = note.GetValue<SceneApc>(3);
                int subID = note.GetInt32(4);
                PartBusiness pb = note.GetValue<PartBusiness>(5);
                fb = new FightBusinessProApc(teamA, teamB, players, npcID, isEctype, sab, subID, pb);
            }
            else
            {
                fb = new FightBusiness(teamA, teamB, players, npcID, isEctype);
            }
            foreach (var player in players)
            {
                player.Fight = fb;
            }
            fb.SendToClinet(FightCommand.StartFight, (int)fType, teamA, teamB);
            fb.Start();
        }
Beispiel #5
0
        /// <summary>
        /// 添加仇人
        /// </summary>
        /// <param name="note"></param>
        public static void AddEnemy(UserNote note)
        {
            string name = note.GetString(0);

            PlayerEx Social = note.Player.Social;
            if (Social == null)
            {
                note.Call(SocialCommand.AddEnemyR, false, TipManager.GetMessage(SocialReturn.UserInfoError));
                return;
            }
            PlayerBusiness player = PlayersProxy.FindPlayerByName(name);
            if (player == null)
            {
                note.Call(SocialCommand.AddEnemyR, false, TipManager.GetMessage(SocialReturn.UserInfoError));
                return;
            }
            if (SocialBusiness.IsLet(Social, player.ID, new List<string> { "Enemy" }))
            {
                note.Call(SocialCommand.AddEnemyR, false, TipManager.GetMessage(SocialReturn.Enemy));
                return;
            }
            if (SocialBusiness.IsLet(Social, player.ID, new List<string> {  "Friends" }))
            {
                note.Call(SocialCommand.AddEnemyR, false, TipManager.GetMessage(SocialReturn.Friends));
                return;
            }
            if (SocialBusiness.IsLet(Social, player.ID, new List<string> {  "Apprentice" }))
            {
                note.Call(SocialCommand.AddEnemyR, false, TipManager.GetMessage(SocialReturn.Apprentice));
                return;
            }
            if (SocialBusiness.IsLet(Social, player.ID, new List<string> {  "Master" }))
            {
                note.Call(SocialCommand.AddEnemyR, false, TipManager.GetMessage(SocialReturn.Master));
                return;
            }

            IList Enemy = Social.Value.GetValue<IList>("Enemy");
            Variant v = new Variant();
            v.Add("PlayerID", player.ID);
            v.Add("Created", DateTime.UtcNow);
            if (Enemy == null)
            {
                Social.Value["Enemy"] = new List<Variant> { v };
            }
            else
            {
                Enemy.Add(v);
            }
            Social.Save();
            note.Call(SocialCommand.AddEnemyR, true, new PlayerSimple(player, 3));
        }
Beispiel #6
0
 /// <summary>
 /// 创建队伍
 /// </summary>
 /// <param name="note"></param>
 private bool CreateTeam(UserNote note)
 {
     PlayerBusiness player = note.Player;
     if (player.Team != null)
     {
         //已有队伍
         player.Call(TeamCommand.CreateTeamR, false, TipManager.GetMessage(ClientReturn.TeamsMediator1));
         return false;
     }
     PlayerTeam team = new PlayerTeam(player);
     if (team.Captain == player)
     {
         team.Icon = note.GetString(0);
         team.Explain = note.GetString(1);
         if (m_teams.TryAdd(team.TeamID, team))
         {
             player.CallAll(TeamCommand.CreateTeamR, true, team);
             return true;
         }
     }
     return false;
 }
Beispiel #7
0
 /// <summary>
 /// 移交队长
 /// </summary>
 /// <param name="note"></param>
 /// <param name="team"></param>
 private void ChangeManager(UserNote note, PlayerTeam team)
 {
     string teamID = team.TeamID;
     string newCaptainID = note.GetString(0);
     PlayerBusiness newCaptain = team.TransferCaptain(newCaptainID);
     if (newCaptain != null)
     {
         //通知
         var buffer = AmfCodec.Encode(TeamCommand.ChangeManagerR, new object[] { teamID, newCaptainID });
         team.Captain.CallAll(buffer);
         team.CallAway(buffer, note.Player.SceneID);
     }
 }
Beispiel #8
0
        /// <summary>
        /// 申请交易
        /// </summary>
        /// <param name="note"></param>
        public static void DealApply(UserNote note)
        {
            string playerid = note.GetString(0);

            if (note.Player.Value.ContainsKey("Deal"))
            {
                note.Call(DealCommand.DealApplyR, false, TipManager.GetMessage(DealReturn.DealOther));
                return;
            }
            PlayerBusiness OnlineBusiness = PlayersProxy.FindPlayerByID(playerid);
            if (OnlineBusiness == null || (!OnlineBusiness.Online))
            {
                note.Call(DealCommand.DealApplyR, false, TipManager.GetMessage(DealReturn.NoLine));
                return;
            }

            if (OnlineBusiness.AState == ActionState.Fight)
            {
                note.Call(DealCommand.DealApplyR, false, TipManager.GetMessage(DealReturn.Fighting));
                return;
            }

            if (OnlineBusiness.Value.ContainsKey("Deal"))
            {
                Variant dy = OnlineBusiness.Value.GetVariantOrDefault("Deal");
                if (dy.GetIntOrDefault("Status") >= 0)
                {
                    note.Call(DealCommand.DealApplyR, false, TipManager.GetMessage(DealReturn.DealOther));
                    return;
                }
            }

            Variant d0 = new Variant();
            d0.Add("Status", 0);
            d0.Add("PlayerID", playerid);//被邀请者
            d0.Add("Goods", null);
            if (!note.Player.Value.ContainsKey("Deal"))
                note.Player.Value.Add("Deal", d0);

            Variant d1 = new Variant();
            d1.Add("Status", 0);
            d1.Add("PlayerID", note.PlayerID);//邀请者
            d1.Add("Goods", null);
            if (!OnlineBusiness.Value.ContainsKey("Deal"))
                OnlineBusiness.Value.Add("Deal", d1);

            OnlineBusiness.Call(DealCommand.DealApplyR, true, note.PlayerID);
            note.Call(DealCommand.DealApplyR, true, note.PlayerID);
        }
Beispiel #9
0
 /// <summary>
 /// 请求切磋
 /// </summary>
 /// <param name="note"></param>
 protected void FightCC(UserNote note)
 {
     PlayerBusiness player = note.Player;
     if (player.AState == ActionState.Fight || player.TeamJob == TeamJob.Member)
     {
         return;
     }
     string pkID = note.GetString(0);
     PlayerBusiness b;
     if (m_players.TryGetValue(pkID, out b))
     {
         if (b.Fight != null) return;
         b.Call(FightCommand.FightCCR, note.PlayerID);
     }
 }
Beispiel #10
0
        /// <summary>
        /// 强制PK
        /// </summary>
        /// <param name="note"></param>
        protected virtual void FightPK(UserNote note)
        {
            if (m_fightType == FightType.NotPK)
            {
                return;
            }

            PlayerBusiness player = note.Player;
            if (player.AState == ActionState.Fight || player.RedName || player.TeamJob == TeamJob.Member)
            {
                return;
            }

            string pkID = note.GetString(0);
            PlayerBusiness b;
            if (m_players.TryGetValue(pkID, out b))
            {
                if (b.Fight != null)
                {
                    return;
                }
                if (player.Team != null && player.Team == b.Team)
                {
                    return;
                }
                DateTime now = DateTime.UtcNow;
                //PK保护时间
                if (m_fightType == FightType.PK)
                {
                    if (player.GetPKProtect() > now)
                    {
                        player.Call(ClientCommand.SendActivtyR, new object[] { "T01", TipManager.GetMessage(ClientReturn.PKProtect) });
                        return;
                    }
                    if (b.LastPK > now || b.GetPKProtect() > now)
                    {
                        player.Call(ClientCommand.SendActivtyR, new object[] { "T01", TipManager.GetMessage(ClientReturn.PKProtect) });
                        return;
                    }
                }

                player.FightTime = DateTime.UtcNow;
                UserNote note2 = new UserNote(note, FightCommand.IntoBattlePK, new object[] { m_fightType, b });
                Notifier.Instance.Publish(note2);
            }
        }
Beispiel #11
0
        /// <summary>
        /// 得到宠物列表
        /// </summary>
        /// <param name="note"></param>
        public void GetPetsList(UserNote note)
        {
            //表示没有家园不
            //if (note.Player.SceneID != SceneHome.DefaultID)
            //    return;
            //玩家ID
            string id = note.GetString(0);
            if (note.PlayerID == id)
            {
                note.Call(PetsCommand.GetPetsListR, PetAccess.Instance.GetPetList(note.Player.B2));
                return;
            }

            PlayerBusiness pb = PlayersProxy.FindPlayerByID(id);
            if (pb == null)
                return;
            note.Call(PetsCommand.GetPetsListR, PetAccess.Instance.GetPetList(pb.B2));
        }
Beispiel #12
0
        /// <summary>
        /// 请出队伍
        /// </summary>
        /// <param name="note"></param>
        /// <param name="team"></param>
        private void KillMember(UserNote note, PlayerTeam team)
        {
            string memberID = note.GetString(0);
            PlayerBusiness memeber = team.RemoveMember(memberID);
            if (memeber != null)
            {
                var buffer = AmfCodec.Encode(TeamCommand.OutTeamR,
                    new object[] { true, team.TeamID, memberID, memeber.Name, null });

                team.Captain.CallAll(buffer);
                //通知其它场景上的用户
                team.CallAway(buffer, note.Player.SceneID);

                var t = memeber.TeamInstance;
                if (t != null)
                {
                    t.Exit(memeber, true);
                }
            }
        }
Beispiel #13
0
        void OpenBox(UserNote note)
        {
            BoxBusiness box;
            if (!BoxProxy.TryGetBox(note.GetString(0), out box))
            {
                return;
            }
            PlayerBusiness player = note.Player;
            bool open = box.OpenBox(player);
            if (open)
            {
                //更新
                box.Reset();
                List<BoxBusiness> boxs = BoxProxy.GetSceneBox(player.SceneID);
                player.Scene.CallAll(player.ShowID, ClientCommand.RefreshBoxR, new object[] { player.SceneID, boxs });

                //守护战争开启宝箱
                ScenePro sp = player.Scene as ScenePro;
                if (sp != null)
                {
                    PlayersProxy.CallAll(ActivityCommand.OpenChestR, new object[] { note.Player.Name });
                }
            }
        }
Beispiel #14
0
        /// <summary>
        /// 镶嵌,主要是将宝石镶嵌在装备上
        /// </summary>
        /// <param name="note"></param>
        private void Mosaic(UserNote note)
        {
            //宝石等级不能超过装备等级,必须能够改造
            string goodsid = note.GetString(0);
            //提升成功率的道具
            int upcount = note.GetInt32(1);
            //镶在什么位置
            string p = note.GetString(2);
            string baoshiid = note.GetString(3);

            int baoship = note.GetInt32(4);//宝石在包袱中的位置

            string npcid = note.GetString(5);
            if (!note.Player.EffectActive(npcid, ""))
                return;

            Goods g = GoodsAccess.Instance.GetGoodsByID(goodsid, note.PlayerID);
            if (g == null)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicEquipNo));
                return;
            }

            if (g.Value.GetIntOrDefault("IsChange") == 0)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoChange));
                return;
            }

            List<GameConfig> mosaic = GameConfigAccess.Instance.Find("Mosaic");
            GameConfig gc = null;
            foreach (GameConfig gcg in mosaic)
            {
                if (gcg.Value.GetStringOrDefault("Type") == g.Value.GetStringOrDefault("GoodsType"))
                {
                    gc = gcg;
                    break;
                }
            }
            if (gc == null)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                return;
            }
            //允许镶嵌的宝石列表
            IList mosaicNeed = gc.Value.GetValue<IList>("MosaicNeed");

            GameConfig baoshi = GameConfigAccess.Instance.FindOneById(baoshiid);
            if (baoshi == null)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoBaoShi));
                return;
            }

            int baoShiLevel = baoshi.Value.GetIntOrDefault("Level");

            //需用绑定游戏币数量

            Variant price = g.Value.GetVariantOrDefault("Price");
            Variant buy = price.GetVariantOrDefault("Buy");

            if (!mosaicNeed.Contains(baoshi.ID))
            {
                //不能够镶嵌该宝石
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                return;
            }

            //得到物品所在孔的信息
            Variant baoShiInfo = g.Value.GetVariantOrDefault("BaoShiInfo");

            object o;
            if (!baoShiInfo.TryGetValueT(p, out o))
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicEquipNo));
                return;
            }

            if ((string)o == "-1")
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoPunch));
                return;
            }

            GameConfig goods = null;

            if ((string)o != "0")
            {
                //表示想镶嵌的位置存在宝石
                goods = GameConfigAccess.Instance.FindOneById((string)o);
                //表示该位置已经镶嵌宝石,但新宝石要求必须大于旧宝石
                if (goods.Value.GetIntOrDefault("Level") >= baoShiLevel)
                {
                    //新镶嵌的宝石等级要求大于旧宝石
                    note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNewOrOld));
                    return;
                }
            }

            string upID = gc.Value.GetStringOrDefault("UpID");

            GameConfig upGoods = GameConfigAccess.Instance.FindOneById(upID);
            if (upGoods == null)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicEquipNo));
                return;
            }

            //GameConfig gcWin = ConfigAccess.Instance.FindOneById(g.GoodsID);
            //if (gcWin == null)
            //    return;

            int score = Convert.ToInt32(baoShiLevel * GetPrice(g.GoodsID) * 0.2);

            if (note.Player.Score < score || (!note.Player.AddScore(-score, FinanceType.Mosaic)))
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoScoreB));
                return;
            }

            int upCount = 0;

            PlayerEx b = note.Player.B0;

            bool isBaoShi = false;
            IList c = b.Value.GetValue<IList>("C");
            Variant vr = null;
            Variant zb = null;
            foreach (Variant con in c)
            {
                if (con.GetIntOrDefault("P") == baoship)
                {
                    if (con.GetStringOrDefault("E") == baoshiid)
                    {
                        vr = con;
                        //break;
                    }
                    else
                    {
                        note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                        return;
                    }
                }
                if (con.GetStringOrDefault("G") == upID)
                {
                    upCount += con.GetIntOrDefault("A");
                }

                if (zb == null)
                {
                    if (con.GetStringOrDefault("E") == goodsid)
                    {
                        zb = con;
                    }
                }
            }
            if (vr != null)
            {
                isBaoShi = true;
            }

            if (!isBaoShi)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                return;
            }

            if (upCount < upcount)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                return;
            }

            double lv = GetSuccessLv(baoShiLevel);
            if (upcount > 0)
            {
                lv += GoodsAccess.Instance.GetSuccess(upcount);
            }

            Variant us = new Variant();

            if (upcount > 0)
            {
                //BurdenAccess.Remove(b, UpID, upcount);
                //移除提高成功率的道具
                note.Player.RemoveGoods(upID, upcount, GoodsSource.Mosaic);

                us[upID] = upcount;
            }

            if (!note.Player.RemoveGoods(baoshiid, 1, GoodsSource.Mosaic))
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoBaoShi));
                return;
            }

            //使用的宝石
            us[baoshiid] = 1;
            bool isSuccess = NumberRandom.RandomHit(lv);
            if (isSuccess)
            {
                baoShiInfo[p] = baoshiid;
                b.Save();
                g.Save();
                note.Player.FinishNote(FinishCommand.XianQian, g.ID);
                note.Player.UpdateBurden();
                note.Call(MosaicCommand.MosaicR, true, goodsid);
            }
            else
            {
                note.Player.UpdateBurden();
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicFail));
            }

            Variant os=new Variant();
            os["IsSuccess"] = isSuccess;
            //装备唯一标识
            os["ID"] = g.ID;
            os["GoodsID"] = g.GoodsID;
            os["Lv"] = lv;
            os["Score"] = -score;
            note.Player.AddLogVariant(Actiontype.Mosaic, us, null,os);
        }
Beispiel #15
0
        /// <summary>
        /// 熔炼,主要是将装备销除得到新的道具和取下镶嵌的宝石,只能够选择一颗宝石
        /// </summary>
        /// <param name="note"></param>
        private void Melt(UserNote note)
        {
            //熔练配置信息
            //string id = note.GetString(0);
            //熔炼的道具
            string goodsid = note.GetString(0);
            //选择宝石,-1表示没有选择
            string baoshi = note.GetString(1);

            //熔炼的道具信息
            Goods g = GoodsAccess.Instance.GetGoodsByID(goodsid, note.PlayerID);

            if (g == null)
            {
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltEquipNo));
                return;
            }
            //熔炼物品的绑定状态
            int isBinding = g.Value.GetIntOrDefault("IsBinding");
            if (g.Value.GetIntOrDefault("IsChange") == 0)
            {
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltNoChange));
                return;
            }

            if (g.Value.GetStringOrDefault("GoodsType").IndexOf("111") != 0)
            {
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltEquipNo));
                return;
            }
            Variant Price = g.Value.GetValueOrDefault<Variant>("Price");
            Variant Buy = Price.GetValueOrDefault<Variant>("Buy");
            double Score = Math.Round(Buy.GetIntOrDefault("Score") * 0.5);
            if (Score > note.Player.Score)
            {
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltNoScoreB));
                return;
            }
            string id = string.Empty;
            List<GameConfig> meltList = GameConfigAccess.Instance.Find("Split");
            foreach (GameConfig gcs in meltList)
            {
                if ((int)gcs.Value["Level"] == g.Value.GetIntOrDefault("Level"))
                {
                    //可以熔炼类型列表
                    IList ts = gcs.Value["Type"] as IList;
                    foreach (Variant m in ts)
                    {
                        if (m.GetStringOrDefault("GoodsType") == g.Value.GetStringOrDefault("GoodsType"))
                        {
                            id = gcs.ID;
                            break;
                        }
                    }
                }
            }

            //得到熔炼配置信息
            GameConfig gc = GameConfigAccess.Instance.FindOneById(id);
            if (gc == null)
            {
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltConfigError));
                return;
            }
            //得到的道具
            IList v = gc.Value.GetValue<IList>("GetGoods");

            PlayerEx burden = note.Player.B0;
            IList c = burden.Value.GetValue<IList>("C");
            //包袱空格数
            int space = BurdenManager.BurdenSpace(c);
            //需要空格数
            int count = baoshi == "-1" ? v.Count : v.Count + 1;

            if (count > space)
            {
                //表示包袱不能存放可得到的物品
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltBurdenFull));
                return;
            }
            List<Variant> list = new List<Variant>();

            Dictionary<string, PlayerEx> bus = new Dictionary<string, PlayerEx>();
            Dictionary<string, int> numberList = new Dictionary<string, int>();
            Dictionary<string, int> binds = new Dictionary<string, int>();
            Variant tmp;
            foreach (Variant m in v)
            {
                //得到的物品
                GameConfig getGoods = GameConfigAccess.Instance.FindOneById(m.GetStringOrDefault("GoodsID"));

                int a = BurdenManager.StactCount(getGoods);
                string name = "B0";
                if (a == 0)
                {
                    note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltEquipError));
                    return;
                }
                PlayerEx b = note.Player.Value[name] as PlayerEx;
                if (!bus.ContainsKey(name)) bus.Add(name, b);

                if (!numberList.ContainsKey(getGoods.ID))
                    numberList.Add(getGoods.ID, m.GetIntOrDefault("Number"));
                else
                    numberList[getGoods.ID] += m.GetIntOrDefault("Number");

                if (!binds.ContainsKey(getGoods.ID)) binds.Add(getGoods.ID, isBinding);

                //TODO:得到的物品检查
                tmp = new Variant();
                tmp.Add("GoodsID", getGoods.ID);
                tmp.Add("Name", getGoods.Name);
                tmp.Add("Count", m.GetIntOrDefault("Number"));
                tmp.Add("IsGet", 1);
                list.Add(tmp);
            }
            if (baoshi != string.Empty)
            {
                GameConfig getBaoShi = GameConfigAccess.Instance.FindOneById(g.Value.GetVariantOrDefault("BaoShiInfo")[baoshi].ToString());
                if (getBaoShi != null)
                {
                    if (!bus.ContainsKey("B0"))
                    {
                        bus.Add("B0", note.Player.B0);
                    }
                    numberList.SetOrInc(getBaoShi.ID, 1);
                    if (!binds.ContainsKey(getBaoShi.ID))
                    {
                        binds.Add(getBaoShi.ID, isBinding);
                    }
                }
            }

            if (BurdenManager.BurdenIsFull(bus, numberList, binds))
            {
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltBurdenFull));
                return;
            }

            BurdenManager.TaskGoodsInsert(bus, numberList, binds, note.PlayerID);

            #region 移除熔炼的装备
            foreach (Variant con in c)
            {
                if (con.GetStringOrDefault("E") == goodsid)
                {
                    tmp = new Variant();
                    tmp.Add("GoodsID", g.GoodsID);
                    tmp.Add("Name", g.Name);
                    tmp.Add("Count", con.GetIntOrDefault("A"));
                    tmp.Add("IsGet", 0);//0表示失去,1表示得到
                    list.Add(tmp);

                    //g.Mode = 1;
                    g.Save();

                    BurdenManager.BurdenClear(con);
                    break;
                }
            }
            #endregion

            burden.Save();
            note.Call(MeltCommand.MeltR, true, list);
            note.Player.UpdateBurden();
        }
Beispiel #16
0
        /// <summary>
        /// 得到道具熔炼配置信息[完成]
        /// </summary>
        /// <param name="note"></param>
        private void MeltInfo(UserNote note)
        {
            string goodsid = note.GetString(0);
            Goods g = GoodsAccess.Instance.FindOneById(goodsid);
            if (g == null)
            {
                note.Call(MeltCommand.MeltInfoR, false, TipManager.GetMessage(MeltReturn.MeltEquipNo));
                return;
            }
            //不能改造
            if (g.Value.GetIntOrDefault("IsChange") == 0)
            {
                note.Call(MeltCommand.MeltInfoR, false, TipManager.GetMessage(MeltReturn.MeltNoChange));
                return;
            }
            //类型不正确
            if (g.Value["GoodsType"].ToString().IndexOf("111") != 0)
            {
                note.Call(MeltCommand.MeltInfoR, false, TipManager.GetMessage(MeltReturn.MeltEquipNo));
                return;
            }

            List<GameConfig> meltList = GameConfigAccess.Instance.Find("Split");

            foreach (GameConfig gc in meltList)
            {
                if ((int)gc.Value["Level"] == (int)g.Value["Level"])
                {
                    //可以熔炼类型列表
                    IList ts = gc.Value["Type"] as IList;
                    foreach (Variant m in ts)
                    {
                        if (m["GoodsType"].ToString() == g.Value["GoodsType"].ToString())
                        {
                            Variant v = new Variant();
                            v.Add("ID", gc.ID);
                            //得到当前装备宝石的信息-1表示没有打孔,0表示打孔没有镶嵌宝石,其它表示宝石ID
                            v.Add("BaoShiInfo", g.Value.GetVariantOrDefault("BaoShiInfo"));
                            //得到的可选道具列表
                            v.Add("GetGoods", gc.Value["GetGoods"]);
                            //熔炼需要币=买价*0.5,绑定游戏币
                            Variant Price = g.Value["Price"] as Variant;
                            Variant Buy = Price["Buy"] as Variant;

                            v.Add("Score", Math.Round(Convert.ToInt32(Buy["Score"]) * 0.5));
                            note.Call(MeltCommand.MeltInfoR, true, v);
                            return;
                        }
                    }
                }
            }

            note.Call(MeltCommand.MeltInfoR, false, TipManager.GetMessage(MeltReturn.MeltConfigError));
        }
Beispiel #17
0
        /// <summary>
        /// 得到社交用户列表信息
        /// </summary>
        /// <param name="note"></param>
        public static void SocialList(UserNote note)
        {
            string name = note.GetString(0);
            PlayerEx soc = note.Player.Social;
            List<PlayerSimple> list = new List<PlayerSimple>();
            if (soc != null && soc.Value != null)
            {
                IList ls = null;
                if (name == "Master" || name == "Apprentice")
                {
                    Variant d = soc.Value.GetVariantOrDefault("Mentor");
                    if (d != null) ls = d[name] as IList;
                }
                else
                {
                    ls = soc.Value[name] as IList;
                }

                if (ls != null && ls.Count != 0)
                {
                    list = SocialBusiness.SocialInfo(ls);
                }
            }

            Variant tmp = new Variant();
            tmp.Add(name, list);
            note.Call(SocialCommand.SocialListR, true, tmp);
        }
Beispiel #18
0
        /// <summary>
        /// 更新任务
        /// </summary>
        /// <param name="note"></param>
        /// <param name="obj">要求更新的任务</param>
        public static void UpdateTask_1(UserNote note)
        {
            string id = note.GetString(0);

            Task task = TaskAccess.Instance.GetTaskInfo(id, note.PlayerID);
            if (task == null)
            {
                note.Call(TaskCommand.UpdateTaskR, false, TipManager.GetMessage(TaskReturn.TaskError));
                return;
            }

            GameConfig gc = GameConfigAccess.Instance.FindTaskId(task.Value.GetStringOrDefault("TaskID"));
            if (gc == null)
            {
                note.Call(TaskCommand.UpdateTaskR, false, TipManager.GetMessage(TaskReturn.TaskError));
                return;
            }
            FinishBusiness.UpdateFinishTask(note, gc, task);
        }
Beispiel #19
0
        /// <summary>
        /// 采集任务
        /// </summary>
        /// <param name="note"></param>
        public static void TaskCollect(UserNote note)
        {
            string taskid = note.GetString(0);
            string npcid = note.GetString(1);

            Npc npcinfo = NpcManager.Instance.FindOne(npcid);
            if (npcinfo == null) return;

            string goodsid = npcinfo.Value.GetStringOrDefault("GoodsID");
            Task task = TaskAccess.Instance.GetTaskInfo(taskid, note.PlayerID);
            if (task == null)
                return;

            GameConfig gc = GameConfigAccess.Instance.FindTaskId(task.Value.GetStringOrDefault("TaskID"));
            if (gc == null)
                return;

            if (task.Value.GetIntOrDefault("Status") == 1)
            {
                IList finish = task.Value.GetValue<IList>("Finish");
                //表示要已经接收
                for (int i = 0; i < finish.Count; i++)
                {
                    Variant v = finish[i] as Variant;
                    if (v == null)
                        continue;
                    if (v.GetIntOrDefault("Type") != 10009)
                        continue;

                    if (FinishBusiness.TaskFinish10009(note, v, goodsid))
                        return;
                }

                for (int i = 0; i < finish.Count; i++)
                {
                    Variant v = finish[i] as Variant;
                    if (v == null)
                        continue;
                    if (v.GetIntOrDefault("Type") == 10004)
                    {
                        FinishBusiness.Task10004(note, v);
                    }
                }

                bool ishave = true;

                foreach (Variant v in finish)
                {
                    if (v.GetIntOrDefault("Total") != v.GetIntOrDefault("Cur"))
                    {
                        ishave = false;
                        break;
                    }
                }

                if (ishave)
                {
                    task.Value["Status"] = 2;
                }

                task.Save();
                note.Call(TaskCommand.UpdateTaskR, true, TaskAccess.Instance.GetTaskInfo(task));
                TaskBusiness.TaskAPC(note);
            }
        }
Beispiel #20
0
        /// <summary>
        /// 任务奖励
        /// </summary>
        /// <param name="note"></param>
        /// <param name="obj">任务奖励</param>
        public static void Award(UserNote note)
        {
            string soleid = note.PlayerID + "Award";
            if (!m_dic.TryAdd(soleid, soleid))
            {
                return;
            }

            try
            {

                string id = note.GetString(0);
                IList list = note[1] as IList;

                #region 奖励判断

                //得到指定的任务
                Task task = TaskAccess.Instance.GetTaskInfo(id, note.PlayerID);
                if (task == null)
                {
                    note.Call(TaskCommand.AwardR, false, null, TipManager.GetMessage(TaskReturn.TaskError));
                    return;
                }

                //得到基本配置表
                GameConfig gc = GameConfigAccess.Instance.FindTaskId(task.Value.GetStringOrDefault("TaskID"));
                if (gc == null)
                {
                    note.Call(TaskCommand.AwardR, false, null, TipManager.GetMessage(TaskReturn.TaskError));
                    return;
                }

                IList npcInfo = gc.Value.GetValue<IList>("NPCBaseInfo");
                if (npcInfo == null)
                    return;
                Variant npc = null;
                foreach (Variant model in npcInfo)
                {
                    if (model.GetIntOrDefault("Type") == 1)
                    {
                        npc = model;
                        break;
                    }
                }

                if (npc == null)
                {
                    return;
                }

                string npcid = npc.GetStringOrDefault("NPCID");

                if (!TaskBusiness.TaskNpcCheck(note.Player, TaskCommand.AwardR, npcid))
                {
                    note.Call(TaskCommand.AwardR, false, null, TipManager.GetMessage(TaskReturn.Npc3));
                    return;
                }

                //表示任务完成条件已经满足,可以领奖
                if (task.Value.GetIntOrDefault("Status") != 2)
                {
                    note.Call(TaskCommand.AwardR, false, null, TipManager.GetMessage(TaskReturn.TaskAwardFail));
                    return;
                }
                ///得到包袱列表
                PlayerEx burden = note.Player.B0;

                ///物品绑定状态
                Dictionary<string, int> isbinding = new Dictionary<string, int>();

                IList finish = task.Value.GetValue<IList>("Finish");
                bool isback = false;
                foreach (Variant f in finish)
                {
                    if (f.GetStringOrDefault("Type") == "10004")
                    {
                        isback = true;
                        break;
                    }
                }
                //bool IsGoods = false;
                ///得到奖励条件
                IList award = task.Value.GetValue<IList>("Award");

                ///得到可选的奖励

                List<Variant> fixAward = new List<Variant>();

                List<string> select = new List<string>();//可选的奖励

                int m = 0;
                int n = 0;
                foreach (Variant w in award)
                {
                    int selectType = w.GetIntOrDefault("SelectType");
                    string awardID = w.GetStringOrDefault("AwardID");
                    if (selectType > 0)
                    {
                        //可选择奖励的数量
                        if (m == 0) m = selectType;
                        select.Add(awardID);
                        if (list.Contains(awardID))
                        {
                            fixAward.Add(w);
                            n++;
                        }
                    }
                    else
                    {
                        fixAward.Add(w);
                    }
                }

                if (m != n)
                {
                    note.Call(TaskCommand.AwardR, false, null, TipManager.GetMessage(TaskReturn.SelectAwardError));
                    return;
                }

                bool noGoods = false;//非道具的情况
                ///宠物
                Dictionary<string, int> pets = new Dictionary<string, int>();

                Dictionary<string, Variant> dic = new Dictionary<string, Variant>();
                foreach (Variant fix in fixAward)
                {
                    if (fix.GetStringOrDefault("Type") != "20002")
                    {
                        noGoods = true;
                        continue;
                    }

                    string goodsid = fix.GetStringOrDefault("GoodsID");
                    int count = fix.GetIntOrDefault("Count");

                    if (fix.GetStringOrDefault("GoodsType") == "112009")
                    {
                        if (!pets.ContainsKey(goodsid))
                        {
                            pets.Add(goodsid, count);
                        }
                        else
                        {
                            pets[goodsid] += count;
                        }
                        continue;
                    }

                    Variant tmp;
                    if (dic.TryGetValue(goodsid, out tmp))
                    {
                        tmp.SetOrInc("Number1", count);
                    }
                    else
                    {
                        tmp = new Variant();
                        tmp.Add("Number1", count);
                        GameConfig gc1 = GameConfigAccess.Instance.FindOneById(goodsid);
                        if (gc1 == null)
                            continue;
                        GoodsAccess.Instance.TimeLines(gc1, tmp);
                        dic.Add(goodsid, tmp);
                    }
                }

                if (dic.Count > 0)
                {
                    if (BurdenManager.IsFullBurden(burden, dic))
                    {
                        note.Call(TaskCommand.AwardR, false, null, TipManager.GetMessage(TaskReturn.BurdenFull));
                        return;
                    }
                }

                #endregion

                #region 任务奖励处理
                task.Value["Status"] = 3;
                if (!task.Save())
                    return;

                //领奖成功
                note.Call(TaskCommand.AwardR, true, null, task.ID);
                int tasktype = task.Value.GetIntOrDefault("TaskType");
                string taskid = task.Value.GetStringOrDefault("TaskID");

                TaskType(note.Player, tasktype.ToString());

                Variant gs = new Variant();
                //得到物品奖励
                if (dic.Count > 0)
                {
                    Dictionary<string, int> info = note.Player.AddGoods(dic, GoodsSource.TaskAward);
                    foreach (var item in info)
                    {
                        gs.SetOrInc(item.Key, item.Value);
                    }
                }

                //得到宠物奖励
                if (pets.Count > 0)
                {
                    AwardBusiness.TaskAward112009(note, pets);
                }

                Variant us = new Variant();
                //物品回收处理
                if (isback)
                {
                    us = FinishBusiness.TaskFinish10004(note, finish);
                }
                Variant os = new Variant();
                //非道具的奖励
                if (noGoods)
                {
                    if (task.Value.GetIntOrDefault("TaskType") == 2)
                    {
                        os=AwardBusiness.TaskAward20001(note, award, true);
                    }
                    else
                    {
                        os=AwardBusiness.TaskAward20001(note, award);
                    }
                }
                os["ID"] = task.ID;
                os["TaskID"] = taskid;
                os["TaskType"] = tasktype;

                string des = gc.Value.GetStringOrDefault("Description");
                string[] msg = des.Split('|');
                if (msg.Length > 3) AwardBusiness.TaskEmail(note, msg);

                #endregion

                #region 触发新的任务

                switch (tasktype)
                {
                    case 2:
                        note.Player.AddAcivity(ActivityType.DayTask, 1);
                        break;
                    case 4:
                        note.Player.AddAcivity(ActivityType.LoopTask, 1);

                        break;

                }

                if (tasktype == 2)
                {
                    TaskBusiness.DayTask(note.Player, true);
                }
                else if (tasktype == 7)
                {
                    TaskBusiness.FamilyTask(note.Player, true);
                }
                else if (tasktype == 8)
                {
                    TaskBusiness.WeekTask(note.Player, npcid, true);
                }
                else
                {
                    List<string> reatTask = new List<string>();
                    string[] strs = gc.Value.GetStringOrDefault("RearTask").Split(',');
                    for (int i = 0; i < strs.Length; i++)
                    {
                        if (string.IsNullOrEmpty(strs[i]))
                            continue;
                        reatTask.Add(strs[i]);
                    }
                    if (reatTask.Count > 0)
                    {
                        TaskFinishActivation(note, reatTask);
                    }
                }
                #endregion

                #region 任务成就

                note.Player.FinishNote(FinishCommand.TotalTask, taskid, tasktype);

                if (tasktype == 0 || tasktype == 1 || tasktype == 2 || tasktype == 8)
                {
                    //移除主线任务,支线任务
                    TaskBusiness.MainTask(note.PlayerID, task.ID, tasktype);
                }
                #endregion

                note.Player.AddLogVariant(Actiontype.TaskAward, us, gs, os);
            }
            finally
            {
                m_dic.TryRemove(soleid, out soleid);
            }
        }
Beispiel #21
0
        /// <summary>
        /// 道具关联任务
        /// </summary>
        /// <param name="note"></param>
        public static void GoodsTask(UserNote note)
        {
            List<Task> tasks = TaskAccess.Instance.GetTasks(note.PlayerID);
            //发生变化的道具
            string goodsid = note.GetString(0);
            //得到指定道具的数量
            int num = BurdenManager.GoodsCount(note.Player.B0, goodsid);
            for (int j = 0; j < tasks.Count; j++)
            {
                Task t = tasks[j] as Task;
                if (t == null)
                    continue;
                IList finish = t.Value["Finish"] as IList;
                bool isChange = false;
                for (int i = 0; i < finish.Count; i++)
                {
                    Variant f = finish[i] as Variant;
                    int type = f.GetIntOrDefault("Type");
                    if (type == 10004 && f.GetStringOrDefault("GoodsID") == goodsid)
                    {
                        if (num >= f.GetIntOrDefault("Total"))
                        {
                            f["Cur"] = f.GetIntOrDefault("Total");
                        }
                        else
                        {
                            f["Cur"] = num;
                        }
                        isChange = true;
                    }

                    if (type == 10003 && f.GetStringOrDefault("GoodsID") == goodsid)
                    {
                        if (num >= f.GetIntOrDefault("Total"))
                        {
                            f["Cur"] = f.GetIntOrDefault("Total");
                        }
                        else
                        {
                            f["Cur"] = num;
                        }
                        isChange = true;
                    }
                }

                //判断是否已经完成,true表示已经完成
                if (isChange)
                {
                    bool isfinish = true;//判断任务是否已经完成
                    foreach (Variant f in finish)
                    {
                        if (f.GetIntOrDefault("Total") != f.GetIntOrDefault("Cur"))
                        {
                            isfinish = false;
                            break;
                        }
                    }

                    t.Value["Status"] = isfinish ? 2 : 1;
                    t.Save();
                    note.Call(TaskCommand.UpdateTaskR, true, TaskAccess.Instance.GetTaskInfo(t));
                    TaskBusiness.TaskAPC(note);
                }
            }
        }
Beispiel #22
0
 /// <summary>
 /// 申请加为好友
 /// </summary>
 /// <param name="note"></param>
 public static void FriendsApply(UserNote note)
 {
     string name = note.GetString(0);
     PlayerBusiness player = PlayersProxy.FindPlayerByName(name);
     if (player == null)
     {
         note.Call(SocialCommand.FriendsApplyR, false, TipManager.GetMessage(SocialReturn.UserInfoError), string.Empty);
         return;
     }
     if (!CheckFriends(note.Player, player, SocialCommand.FriendsApplyR, 0))
     {
         return;
     }
     //"等待【" + name + "】回复"
     note.Call(SocialCommand.FriendsApplyR, true, string.Format(TipManager.GetMessage(SocialReturn.FriendsApply), name), note.PlayerID);
     player.Call(SocialCommand.FriendsApplyR, true, note.Player.Name, note.PlayerID);
 }
Beispiel #23
0
        /// <summary>
        /// 得到申请回应
        /// </summary>
        /// <param name="note"></param>
        public static void FriendsBack(UserNote note)
        {
            string id = note.GetString(0);
            bool isagree = note.GetBoolean(1);
            PlayerBusiness pb = PlayersProxy.FindPlayerByID(id);
            if (!isagree)
            {
                pb.Call(SocialCommand.FriendsBackR, false, string.Format(TipManager.GetMessage(SocialReturn.FriendsBack1), note.Player.Name));
                //"【" + note.Player.Name + "】拒绝加你为好友", "");
                return;
            }

            if (!CheckFriends(note.Player, pb, SocialCommand.FriendsBackR, 1))
                return;

            Variant v = new Variant();
            v.Add("PlayerID", pb.ID);
            v.Add("Created", DateTime.UtcNow);

            PlayerEx social = note.Player.Social;
            IList enemy = social.Value.GetValue<IList>("Friends");
            int m = 0;
            int n = 0;
            if (enemy != null)
            {
                enemy.Add(v);
                m = enemy.Count;
            }
            else
            {
                social.Value["Friends"] = new List<Variant>() { v };
                m = 1;
            }

            Variant tmp = new Variant();
            tmp.Add("PlayerID", note.PlayerID);
            tmp.Add("Created", DateTime.UtcNow);

            PlayerEx social1 = pb.Social;
            IList enemy1 = social1.Value.GetValue<IList>("Friends");

            if (enemy1 != null)
            {
                enemy1.Add(tmp);
                n = enemy1.Count;
            }
            else
            {
                social1.Value["Friends"] = new List<Variant>() { tmp };
                n = 1;
            }
            social.Save();
            social1.Save();
            //"【" + note.Player.Name + "】与你成为好友,愿你们友谊在石器宝贝中长存"
            pb.Call(SocialCommand.FriendsBackR, true, string.Format(TipManager.GetMessage(SocialReturn.FriendsBack2), note.Player.Name), string.Empty);
            //"【" + user.Name + "】与你成为好友,愿你们友谊在石器宝贝中长存"
            note.Call(SocialCommand.FriendsBackR, true, string.Format(TipManager.GetMessage(SocialReturn.FriendsBack3), pb.Name), string.Empty);

            note.Player.FinishNote(FinishCommand.Friends, m);
            pb.FinishNote(FinishCommand.Friends, n);
        }
Beispiel #24
0
 /// <summary>
 /// 获取单个技能的信息
 /// </summary>
 /// <param name="note"></param>
 private void GetSkill(UserNote note)
 {
     string id = note.GetString(0);
     var skill = GameConfigAccess.Instance.FindOneById(id);
     note.Call(SkillCommand.GetSkillR, true, new GameConfigUI(skill));
 }
Beispiel #25
0
        private void MosaicNeed(UserNote note)
        {
            string goodsid = note.GetString(0);
            Goods g = GoodsAccess.Instance.GetGoodsByID(goodsid, note.PlayerID);
            if (g == null)
            {
                note.Call(MosaicCommand.MosaicNeedR, false, TipManager.GetMessage(MosaicReturn.MosaicEquipNo));
                return;
            }

            if (g.Value.GetIntOrDefault("IsChange") == 0)
            {
                note.Call(ExchangeCommand.ExchangNeedR, false, TipManager.GetMessage(MosaicReturn.MosaicNoChange));
                return;
            }

            Variant BaoShiInfo = g.Value.GetVariantOrDefault("BaoShiInfo");

            bool IsLet = true;
            foreach (string d in BaoShiInfo.Keys)
            {
                if (BaoShiInfo[d].ToString() != "-1")
                {
                    IsLet = false;
                    break;
                }
            }

            if (IsLet)
            {
                note.Call(MosaicCommand.MosaicNeedR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                return;
            }

            List<GameConfig> mosaic = GameConfigAccess.Instance.Find("Mosaic");
            GameConfig gc = null;
            foreach (GameConfig gcg in mosaic)
            {
                if (gcg.Value.GetStringOrDefault("Type") == g.Value.GetStringOrDefault("GoodsType"))
                {
                    gc = gcg;
                    break;
                }
            }

            if (gc == null)
            {
                note.Call(MosaicCommand.MosaicNeedR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                return;
            }

            string UpID = gc.Value.GetStringOrDefault("UpID");

            int UpCount = 0;

            PlayerEx b = note.Player.B0;
            foreach (Variant con in b.Value.GetValueOrDefault<IList>("C"))
            {
                if (con.GetStringOrDefault("G") == UpID)
                    UpCount += con.GetIntOrDefault("A");
            }
            //可以镶嵌的宝石
            IList MosaicNeed = gc.Value.GetValue<IList>("MosaicNeed");

            List<string> bs = new List<string>();
            foreach (string key in MosaicNeed)
            {
                GameConfig tmp = GameConfigAccess.Instance.FindOneById(key);
                if (tmp == null)
                    continue;
                if (g.Value.GetIntOrDefault("Level") >= tmp.Value.GetIntOrDefault("Level"))
                {
                    bs.Add(tmp.ID);
                }
            }

            if (bs.Count == 0)
            {
                note.Call(MosaicCommand.MosaicNeedR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                return;
            }
            Variant v = new Variant();
            v.Add("BaoShiInfo", bs);
            v.Add("UpID", UpID);
            v.Add("UpCount", UpCount);
            note.Call(MosaicCommand.MosaicNeedR, true, v);
        }
Beispiel #26
0
        /// <summary>
        /// 好友祝福
        /// </summary>
        /// <param name="note"></param>
        public static void FriendsBless(UserNote note)
        {
            string soleid = note.PlayerID + "FriendsBless";
            try
            {
                if (!m_dic.TryAdd(soleid, soleid))
                    return;

                string playerid = note.GetString(0);
                string goodsid = note.GetString(1);
                GameConfig gc = GameConfigAccess.Instance.FindOneById("BL_0001");
                if (gc == null || gc.Value == null)
                {
                    note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1));
                    return;
                }

                Variant bless = gc.Value.GetValueOrDefault<Variant>("Bless");

                Variant tmp = null;
                foreach (var k in bless)
                {
                    string[] strs = k.Key.Split('-');
                    if (strs.Length < 2)
                    {
                        note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1));
                        return;
                    }
                    int min = Convert.ToInt32(strs[0]);
                    int max = Convert.ToInt32(strs[1]);

                    if (note.Player.Level >= min && note.Player.Level <= max)
                    {
                        tmp = k.Value as Variant;
                        break;
                    }
                }

                if (tmp == null || (!tmp.ContainsKey(goodsid)))
                {
                    note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1));
                    return;
                }

                Variant goods = tmp.GetValueOrDefault<Variant>(goodsid);

                Dictionary<string, Variant> dic = new Dictionary<string, Variant>();
                Variant vv = new Variant();
                vv.Add("Number1", goods.GetIntOrDefault("Count"));
                dic.Add(goodsid, vv);

                if (BurdenManager.IsFullBurden(note.Player.B0, dic))
                {
                    note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless2));
                    return;
                }

                Variant beBless = gc.Value.GetValueOrDefault<Variant>("BeBless");
                Variant beTmp = null;
                foreach (var k in beBless)
                {
                    string[] strs = k.Key.Split('-');
                    if (strs.Length < 2)
                    {
                        note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1));
                        return;
                    }
                    int min = Convert.ToInt32(strs[0]);
                    int max = Convert.ToInt32(strs[1]);

                    if (note.Player.Level >= min && note.Player.Level <= max)
                    {
                        beTmp = k.Value as Variant;
                        break;
                    }
                }

                if (beTmp == null)
                {
                    note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1));
                    return;
                }
                int mn = 0;
                string beGoods = BeBless(beTmp, out mn);
                if (string.IsNullOrEmpty(beGoods) || mn <= 0)
                {
                    note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1));
                    return;
                }
                GameConfig gc1 = GameConfigAccess.Instance.FindOneById(beGoods);
                if (gc1 == null)
                {
                    note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1));
                    return;
                }

                PlayerBusiness pb = PlayersProxy.FindPlayerByID(playerid);
                if (pb == null)
                {
                    //"好友不存在");
                    note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.UserInfoError));
                    return;
                }

                PlayerEx ex;
                Variant v;
                if (!note.Player.Value.TryGetValueT("Bless", out ex))
                {
                    ex = new PlayerEx(note.PlayerID, "Bless");
                    v = new Variant();
                    v.Add("Total", 10);//允许祝福次数
                    v.Add("BlessList", null);
                    ex.Value = v;
                    //祝福时间
                    note.Player.Value.Add("Bless", ex);
                }
                v = ex.Value;
                Variant blessList = v.GetValueOrDefault<Variant>("BlessList");
                if (blessList != null)
                {
                    int count = 0;//今日祝福次数
                    foreach (DateTime k in blessList.Values)
                    {
                        if (k.ToLocalTime().Date == DateTime.Now.Date)
                            count++;
                        if (count >= v.GetIntOrDefault("Total"))
                        {
                            //"今日祝福次已经用完,每日最多能祝福好友10次"
                            note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless3));
                            return;
                        }
                    }

                    if (blessList.ContainsKey(playerid))
                    {
                        DateTime blessDate = blessList.GetDateTimeOrDefault(playerid);
                        if (blessDate.ToLocalTime().Date == DateTime.Now.Date)
                        {
                            //"每日同一好友只能祝福一次"
                            note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless4));
                            return;
                        }
                    }
                }
                else
                {
                    v["BlessList"] = new Variant();
                    blessList = v.GetValueOrDefault<Variant>("BlessList");
                }

                string gid = "G_d000683";

                if (!note.Player.RemoveGoods(gid, 1, GoodsSource.FriendsBless))
                {
                    //"你没有鲜花,无法祝福"
                    note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless5));
                    return;
                }

                //更新祝福时间
                blessList[playerid] = DateTime.UtcNow;
                ex.Save();

                note.Player.AddGoods(dic, GoodsSource.FriendsBless);
                note.Player.AddAcivity(ActivityType.FriendsBless, 1);

                if (mn > 0)
                {
                    Variant gs = new Variant();
                    gs.Add("G", beGoods);
                    gs.Add("A", mn);
                    gs.Add("E", beGoods);
                    gs.Add("H", 1);

                    List<Variant> goodsList = new List<Variant>();
                    goodsList.Add(gs);
                    int reTime = Convert.ToInt32(TipManager.GetMessage(EmailReturn.HameDay));
                    //"因为你好友【" + note.Player.Name + "】对你的祝福,你获得了【" + gc1.Name+ "】,为了你们的友谊,你也快祝福祝福他吧!";
                    string msg = string.Format(TipManager.GetMessage(SocialReturn.FriendsBless6), note.Player.Name, gc1.Name);
                    //if (EmailAccess.Instance.SendEmail("好友祝福", "系统邮件", pb.ID, pb.Name, msg, string.Empty, goodsList))
                    if (EmailAccess.Instance.SendEmail(TipManager.GetMessage(SocialReturn.FriendsBless7), TipManager.GetMessage(SocialReturn.FriendsBless8), pb.ID, pb.Name, msg, string.Empty, goodsList, reTime))
                    {
                        if (pb.Online)
                        {
                            pb.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(pb.ID));
                            pb.Call(SocialCommand.FriendsBlessR, true, note.Player.Name);
                        }
                    }
                }
                note.Call(ClientCommand.UpdateActorR, new PlayerExDetail(ex));
                note.Call(SocialCommand.FriendsBlessR, true, TipManager.GetMessage(SocialReturn.FriendsBless9));
                note.Player.FinishNote(FinishCommand.WishFriends);

                //日志记录
                //note.Player.AddLog(Log.Actiontype.GoodsUse, gid, 1, GoodsSource.FriendsBless, "", 0);
            }
            finally
            {
                m_dic.TryRemove(soleid, out soleid);
            }
        }
Beispiel #27
0
        /// <summary>
        /// 学习技能
        /// </summary>
        /// <param name="note"></param>
        private void StudySkill(UserNote note)
        {
            string skillID = note.GetString(0);

            GameConfig c = GameConfigAccess.Instance.FindOneById(skillID);
            if (c == null) return;

            PlayerEx skill = note.Player.Skill;
            int oldLev = skill.Value.GetIntOrDefault(skillID);
            if (oldLev == 0) //第一次学习检查职业限制
            {
                //RoleLimit:职业限制 无限制"";  狂战士"1"; 魔弓手"2"; 神祭师"3"
                string roleID = c.UI.GetStringOrDefault("RoleLimit");
                if (roleID == "1" || roleID == "2" || roleID == "3")
                {
                    if (note.Player.RoleID != roleID)
                    {
                        note.Call(SkillCommand.StudySkillR, false, TipManager.GetMessage(SkillReturn.StudySkill1), oldLev);
                        return;
                    }
                }
            }

            //已达最大等级检查
            int maxLev = c.UI.GetIntOrDefault("Level");
            Variant studyLimit = c.UI.GetVariantOrDefault(oldLev.ToString());
            if (studyLimit == null || oldLev >= maxLev)
            {
                note.Call(SkillCommand.StudySkillR, false, TipManager.GetMessage(SkillReturn.StudySkill3), oldLev);
                return;
            }

            //学习所需角色等级检查
            int studyLev = studyLimit.GetIntOrDefault("StudyLev");
            if (studyLev > note.Player.Level)
            {
                note.Call(SkillCommand.StudySkillR, false, string.Format(TipManager.GetMessage(SkillReturn.StudySkill4), studyLev), oldLev);
                return;
            }

            //前置技能检查
            string preSkill = studyLimit.GetStringOrDefault("PreSkill");
            if (!string.IsNullOrEmpty(preSkill))
            {
                int preLev = studyLimit.GetIntOrDefault("PreLev");
                if (preLev > 0)
                {
                    GameConfig preConfig = GameConfigAccess.Instance.FindOneById(preSkill);
                    if (preConfig != null)
                    {
                        int check = skill.Value.GetIntOrDefault(preSkill);
                        if (preLev > check)
                        {
                            note.Call(SkillCommand.StudySkillR, false,
                                string.Format(TipManager.GetMessage(SkillReturn.StudySkill5), preConfig.Name, preLev), oldLev);
                            return;
                        }
                    }
                }
            }

            //学习消耗技能书检查
            string book = c.UI.GetStringOrDefault("Book");
            if (!string.IsNullOrEmpty(book))
            {
                if (BurdenManager.GoodsCount(note.Player.Value["B0"] as PlayerEx, book) == 0)
                {
                    note.Call(SkillCommand.StudySkillR, false, TipManager.GetMessage(SkillReturn.StudySkill2), oldLev);
                    return;
                }
            }

            //积分消耗检查
            int studyCost = studyLimit.GetIntOrDefault("StudyCost");
            if (note.Player.Score < studyCost || (!note.Player.AddScore(-studyCost, FinanceType.SkillStudy)))
            {
                note.Call(SkillCommand.StudySkillR, false, string.Format(TipManager.GetMessage(SkillReturn.StudySkill6), studyCost), oldLev);
                return;
            }

            skill.Value[skillID] = oldLev + 1;
            skill.Save();
            note.Call(SkillCommand.StudySkillR, true, skillID, oldLev + 1);
            //扣除技能书,每一级都要消耗一本
            if (!string.IsNullOrEmpty(book))
            {
                PlayerEx b0 = note.Player.Value.GetValueOrDefault<PlayerEx>("B0");
                BurdenManager.Remove(b0, book);
                Variant v = new Variant(1);
                v["B0"] = b0;
                note.Call(BurdenCommand.BurdenListR, v);
            }
            note.Player.RefeshSkill();
        }
Beispiel #28
0
        /// <summary>
        /// 好友分享
        /// </summary>
        /// <param name="note"></param>
        public static void FriendShare(UserNote note)
        {
            string id = note.GetString(0);
            GameConfig gc = GameConfigAccess.Instance.FindOneById(id);
            if (gc == null)
                return;
            Variant v = gc.Value;
            if (v == null)
                return;
            PlayerEx effort = note.Player.Effort;

            IList share;

            if (effort.Value.TryGetValueT("Share", out share))
            {
                //表示已经分享
                if (share.Contains(gc.ID))
                    return;
                share.Add(gc.ID);
            }
            else
            {
                share = new List<string>() { gc.ID };
                effort.Value.Add("Share", share);
            }

            if (!effort.Save())
                return;

            int bond = v.GetIntOrDefault("Bond");
            if (bond > 0)
            {
                note.Player.AddBond(bond, FinanceType.FriendShare, gc.ID);
            }
            note.Call(SocialCommand.FriendShareR, true, bond);
        }
Beispiel #29
0
        private void LoadSkill(UserNote note)
        {
            try
            {
                string skillID = note.GetString(0);
                string path = System.AppDomain.CurrentDomain.BaseDirectory;
                path = Path.Combine(ConfigLoader.Config.DirGame, "Skill", skillID);
                if (File.Exists(path))
                {
                    using (FileStream fs = File.OpenRead(path))
                    {
                        byte[] key = new byte[fs.Length];

                        fs.Read(key, 0, key.Length);
                        note.Session.SendAsync(key);
                        note.Session.Close();
                    }
                }
            }
            catch { }
        }
Beispiel #30
0
 /// <summary>
 /// 队长返回请求结果
 /// </summary>
 /// <param name="note"></param>
 private void ReplyApply(UserNote note, PlayerTeam team)
 {
     bool reply = note.GetBoolean(0);
     string memberID = note.GetString(1);
     int check = note.GetInt32(2);
     PlayerBusiness member;
     if (note.Player.Scene.TryGetPlayer(memberID, out member))
     {
         if (member.GetHashCode() == check)
         {
             if (reply)
             {
                 if (team.TryAddMember(member))
                 {
                     var members = team.AllPlayerDetail;
                     member.Call(TeamCommand.IntoTeamR, true, new object[] { team, members });
                     note.Player.CallAllExcludeOne(member, TeamCommand.NewMemberR, team.TeamID, new PlayerDetail(member));
                     return;
                 }
             }
             else //不同意
             {
                 //对方拒绝了你的入队请求
                 member.Call(TeamCommand.IntoTeamR, false, TipManager.GetMessage(ClientReturn.ReplyApply1));
             }
         }
     }
 }