Beispiel #1
0
        /// <summary>家族列表集合</summary>
        public List <ASObject> ConvertListASObject(Int64 userid, List <tg_family> familylist, List <view_user_role_family_member> chiefmember)
        {
            var list_aso = new List <ASObject>();
            var list     = tg_family_apply.GetEntityByUserId(userid);

            if (list.Count > 0)
            {
                foreach (var item in familylist)
                {
                    var apply = list.FirstOrDefault(m => m.fid == item.id);
                    var chief = chiefmember.FirstOrDefault(m => m.userid == item.userid);
                    if (apply != null)
                    {
                        var model = EntityToVo.ToFamilyListVo(item, apply.state, chief.player_name);
                        list_aso.Add(AMFConvert.ToASObject(model));
                    }
                    else
                    {
                        var model = EntityToVo.ToFamilyListVo(item, 0, chief.player_name);
                        list_aso.Add(AMFConvert.ToASObject(model));
                    }
                }
            }
            else
            {
                foreach (var item in familylist)
                {
                    var chief = chiefmember.FirstOrDefault(m => m.userid == item.userid);
                    var model = EntityToVo.ToFamilyListVo(item, 0, chief.player_name);
                    list_aso.Add(AMFConvert.ToASObject(model));
                }
            }
            return(list_aso);
        }
Beispiel #2
0
        /// <summary>道具附件字符串</summary>
        private String PropAttachment(List <RewardVo> list)
        {
            var sb    = new StringBuilder();
            var props = list.Where(m => m.goodsType == (int)GoodsType.TYPE_PROP);

            foreach (var vo in props)
            {
                var bag = AMFConvert.AsObjectToVo <PropVo>(vo);
                //类型_id_是否绑定_数量
                var str = String.Format("{0}_{1}_{2}_{3}", vo.goodsType, bag.baseId, bag.bind, bag.count);
                sb.Append(str);
                sb.Append("|");
            }
            var fusions = list.Where(m => m.goodsType == (int)GoodsType.TYPE_FUSION);

            foreach (var vo in fusions)
            {
                var bag = AMFConvert.AsObjectToVo <FusionPropVo>(vo);
                //类型_id_数量
                var str = String.Format("{0}_{1}_{2}", vo.goodsType, bag.baseId, bag.count);
                sb.Append(str);
                sb.Append("|");
            }

            return(sb.ToString().TrimEnd("|"));
        }
Beispiel #3
0
        /// <summary>
        /// 组装奖励数据
        /// </summary>
        private List <RewardVo> BuildReward(List <tg_bag> props)
        {
            var reward    = new List <RewardVo>();
            var listequip = props.FindAll(q => q.type == (int)GoodsType.TYPE_EQUIP).ToList();
            var listprops = props.FindAll(q => q.type == (int)GoodsType.TYPE_PROP).ToList();

            if (listequip.Any())
            {
                var listaso = listequip.Select(item => AMFConvert.ToASObject(EntityToVo.ToEquipVo(item))).ToList();
                reward.Add(new RewardVo
                {
                    goodsType = (int)GoodsType.TYPE_EQUIP,
                    increases = listaso,
                });
            }
            if (!listprops.Any())
            {
                return(reward);
            }
            var listaso1 = listprops.Select(item => AMFConvert.ToASObject(EntityToVo.ToPropVo(item))).ToList();

            reward.Add(new RewardVo
            {
                goodsType = (int)GoodsType.TYPE_PROP,
                increases = listaso1,
            });

            return(reward);
        }
Beispiel #4
0
        /// <summary>仓库物品信息集合</summary>
        private List <ASObject> ToWarGoods(IEnumerable <GlobalWarGoods> list)
        {
            var war_goods = new List <ASObject>();

            war_goods.AddRange(list.Select(item => AMFConvert.ToASObject(EntityToVo.ToWarGoodsVo(item))));
            return(war_goods);
        }
Beispiel #5
0
        /// <summary>仓库物品信息集合</summary>
        private List <ASObject> TolistRoles(IEnumerable <view_war_role> depots)
        {
            var war_role = new List <ASObject>();

            war_role.AddRange(depots.Select(item => AMFConvert.ToASObject(EntityToVo.ToViewWarRoleVo(item))));
            return(war_role);
        }
Beispiel #6
0
        /// <summary>挑战结果处理</summary>
        private ASObject ChallengeResult(TGGSession session, string bprop, string bcount, FightVo fight, int cost)
        {
            var reward = new List <RewardVo>();
            var isprop = false;
            var userid = session.Player.User.id;

            if (fight.isWin)        //挑战胜利
            {
                var mainrole = session.Player.Role.Kind.CloneEntity();
                new Share.Role().PowerUpdateAndSend(mainrole, cost, userid);  //推送体力消耗
                var prop = WinReward(userid, bprop, bcount);
                isprop = prop != null;
                if (prop != null)
                {
                    Variable.TempProp.AddOrUpdate(userid, new List <tg_bag> {
                        prop
                    }, (m, n) => n);
                    var listaso = new List <ASObject> {
                        AMFConvert.ToASObject(EntityToVo.ToPropVo(prop))
                    };
                    reward.Add(new RewardVo
                    {
                        goodsType = (int)GoodsType.TYPE_PROP,
                        increases = listaso,
                    });
                }
            }
            FightSend(fight, isprop, reward, userid);    //发送战斗协议
            return(Result((int)ResultType.SUCCESS));
        }
Beispiel #7
0
        /// <summary>构建奖励更新数据</summary>
        /// <param name="list">物品类型集合</param>
        /// <param name="model">玩家</param>
        /// <param name="increases">新增物品对象集合</param>
        /// <param name="decreases">更新物品对象集合</param>
        /// <param name="delete">删除物品ID集合</param>
        private ASObject RewardsASObject(IEnumerable <int> list, tg_user model, List <ASObject> increases, List <ASObject> decreases, List <double> delete)
        {
            var dic      = new Dictionary <string, object>();
            var aso_list = list.Select(item => AMFConvert.ToASObject(BulidReward(item, model, increases, decreases, delete))).ToList();

            dic.Add("rewards", aso_list);
            return(new ASObject(dic));
        }
Beispiel #8
0
        /// <summary>转换为ListAsObject</summary>
        public List <ASObject> ListAsObject(List <tg_role_title> listtitles)
        {
            if (!listtitles.Any())
            {
                return(null);
            }
            var list = listtitles.Select(item => AMFConvert.ToASObject(EntityToVo.ToTitleVo(item))).ToList();

            return(list);
        }
Beispiel #9
0
        public Dictionary <String, Object> BuildData(int result, view_user_role_friend model)
        {
            var dic = new Dictionary <string, object>
            {
                { "result", result },
                { "friend", AMFConvert.ToASObject(EntityToVo.ToFriendVo(model)) }
            };

            return(dic);
        }
Beispiel #10
0
        /// <summary>数据组装</summary>
        public Dictionary <String, Object> BuildData(int result, dynamic props)
        {
            var dic = new Dictionary <string, object>
            {
                { "result", result },
                { "prop", props != null?AMFConvert.ToASObject(EntityToVo.ToPropVo(props)) : null }
            };

            return(dic);
        }
Beispiel #11
0
        private void UserUpdate(TGGSession session)
        {
            var data = new ASObject(new Dictionary <string, object>
            {
                { "result", (int)ResultType.SUCCESS },
                { "userInfoVo", AMFConvert.ToASObject(EntityToVo.ToUserInfoVo(session.Player)) }
            });

            Push(session, data, (int)ModuleNumber.USER, (int)UserCommand.USER_LOGIN);
        }
Beispiel #12
0
        public Dictionary <String, Object> BuildDataUser(int result, Player player)
        {
            var dic = new Dictionary <string, object>
            {
                { "result", result },
                { "userInfoVo", player != null?AMFConvert.ToASObject(EntityToVo.ToUserInfoVo(player)) : null },
            };

            return(dic);
        }
Beispiel #13
0
        public List <ASObject> ConvertListASObject(dynamic list_equip)
        {
            var list_aso = new List <ASObject>();

            foreach (var item in list_equip)
            {
                var model = EntityToVo.ToEquipVo(item);
                list_aso.Add(AMFConvert.ToASObject(model));
            }
            return(list_aso);
        }
Beispiel #14
0
        /// <summary>
        /// 组装防守地形数据
        /// </summary>
        /// <param name="planid"></param>
        /// <returns></returns>
        public List <ASObject> ConverDefenseAreas(Int64 planid)
        {
            var area = tg_war_plan_area.GetEntityByPlanId(planid);

            if (!area.Any())
            {
                return(null);
            }
            area = area.Where(q => q.type != (int)AreaType.陷阱).ToList();
            return(area.Select(set => AMFConvert.ToASObject(EntityToVo.ToAreaSetVo(set))).ToList());
        }
Beispiel #15
0
        /// <summary>构建奖励更新数据</summary>
        /// <param name="goodsType">物品类型</param>
        /// <param name="model">玩家</param>
        /// <param name="increases">新增物品对象集合</param>
        /// <param name="decreases">更新物品对象集合</param>
        /// <param name="delete">删除物品ID集合</param>
        private ASObject RewardsASObject(int goodsType, tg_user model, List <ASObject> increases, List <ASObject> decreases, List <double> delete)
        {
            var dic      = new Dictionary <string, object>();
            var aso_list = new List <ASObject>
            {
                AMFConvert.ToASObject(BulidReward(goodsType, model, increases, decreases, delete))
            };

            dic.Add("rewards", aso_list);
            return(new ASObject(dic));
        }
Beispiel #16
0
        /// <summary>返回注册</summary>
        public Dictionary <String, Object> BuildData(int result, Player player, Int64 time)
        {
            var dic = new Dictionary <string, object>
            {
                { "result", result },
                { "userInfoVo", player != null?AMFConvert.ToASObject(EntityToVo.ToUserInfoVo(player)) : null },
                { "influence", tg_user.FindCampInfluence() }
            };

            return(dic);
        }
Beispiel #17
0
        /// <summary>执行指令</summary>
        public override void ExecuteCommand(TGGSession session, BinaryRequestInfo requestInfo)
        {
#if DEBUG
            //XTrace.WriteLine("接收数据:{0}", BitConverter.ToString(requestInfo.Body, 0, requestInfo.Body.Length));
            session.Logger.Debug(string.Format("接收数据:{0}", BitConverter.ToString(requestInfo.Body, 0, requestInfo.Body.Length)));
#endif
            try
            {
                var sobj = new SocketObjectData {
                    session = session, requestInfo = requestInfo
                };

                var _temp = new CancellationTokenSource();
                new Task(m =>
                {
                    var model = m as SocketObjectData;

                    if (model == null)
                    {
                        return;
                    }
                    if (model.requestInfo.Body.Length <= 0)
                    {
                        return;
                    }
                    var stream    = new MemoryStream(model.requestInfo.Body, 0, model.requestInfo.Body.Length);
                    var byteArray = new ByteArray(stream);
                    var dy        = byteArray.ReadObject();
                    var retype    = dy.GetType().Name;
                    //判断接收数据类型
                    ASObject obj;
                    switch (retype)
                    {
                    case "ASObject": { obj = (ASObject)dy; break; }

                    case "ProtocolVo": { obj = AMFConvert.ToASObject(dy); break; }

                    default: { return; }
                    }
                    var pv = AutoParseAsObject <ProtocolVo> .Parse(obj);
                    if (pv.className != "ProtocolVo")
                    {
                        return;
                    }
                    ModuleQueue.GetInstance().LoadQueue(pv.moduleNumber, pv, model.session);
#if DEBUG
                    XTrace.WriteLine("Socket Handle接收数据Number:{0} - {1}", pv.moduleNumber, pv.commandNumber);
#endif

                    _temp.Cancel();
                }, sobj, _temp.Token).Start();
            }
            catch (Exception ex) { XTrace.WriteException(ex); }
        }
Beispiel #18
0
        /// <summary>将dynamic对象转换成ASObject对象</summary>
        public List <ASObject> ConvertListASObject(dynamic list)
        {
            var list_aso = new List <ASObject>();

            foreach (var item in list)
            {
                dynamic model = EntityToVo.ToScenePlayerVo(item);
                list_aso.Add(AMFConvert.ToASObject(model));
            }
            return(list_aso);
        }
Beispiel #19
0
        /// <summary>List集合转换ASObject</summary>
        public List <ASObject> ConvertListAsObject(List <view_messages> list)
        {
#if DEBUG
            XTrace.WriteLine("集合大小 {0}", list.Count);
#endif
            var list_aso = new List <ASObject>();
            foreach (var item in list)
            {
                list_aso.Add(AMFConvert.ToASObject(EntityToVo.ToMessagesVo(item)));
            }
            return(list_aso);
        }
Beispiel #20
0
        /// <summary>数据组装</summary>
        public Dictionary <String, Object> BuildData(Player player, object module, object cmd, object data)
        {
            var dic = new Dictionary <string, object>
            {
                { "userinfo", AMFConvert.ToASObject(EntityToVo.ToUserInfoVo(player)) },
                { "module", module },
                { "cmd", cmd },
                { "data", data }
            };

            return(dic);
        }
Beispiel #21
0
        /// <summary>
        /// 充值
        /// </summary>
        internal Int32 Recharge(Int64 user_id, Int32 amount)
        {
            var s = new MvcSocket(IP, Port);

            var str = string.Format("{0}|{1}", user_id, amount);
            var dic = new Dictionary <string, object>()
            {
                { "key", "" },
                { "data", CryptoHelper.Encrypt(str, "") },
            };

            XTrace.WriteLine("充值:{0}", str);
            var data = Build(new ASObject(dic));

            s.Send(data);
            var result = s.Receive();

            s.Dispose();
            //解析返回结果
            var len = result.Length - 8;
            var da  = new byte[len];

            Array.Copy(result, 8, da, 0, len);

            var bytea  = new ByteArray(da);
            var dy     = bytea.ReadObject();
            var retype = dy.GetType().Name;
            //XTrace.WriteLine("retype:{0}", retype);
            ASObject obj;

            switch (retype)  //判断接收数据类型
            {
            case "ASObject": { obj = (ASObject)dy; break; }

            case "ProtocolVo": { obj = AMFConvert.ToASObject(dy); break; }

            default: { return((int)ApiType.FAIL); }
            }
            var pv = AutoParseAsObject <ProtocolVo> .Parse(obj);

            //XTrace.WriteLine("pv.className:{0}", pv.className);
            if (pv.className != "ProtocolVo")
            {
                return((int)ApiType.FAIL);
            }
            var r = pv.data;

            // 解析返回结果数据
            var _state = Convert.ToInt32(r.FirstOrDefault(q => q.Key == "state").Value);

            return(_state);
        }
Beispiel #22
0
        /// <summary>组装奖励信息</summary>
        private List <RewardVo> BuildReward(tg_bag equip)
        {
            var aso    = new List <ASObject>(); { aso.Add(AMFConvert.ToASObject(EntityToVo.ToEquipVo(equip))); }
            var reward = new List <RewardVo>();
            var vo     = new RewardVo()
            {
                goodsType = (int)GoodsType.TYPE_EQUIP,
                increases = aso,
            };

            reward.Add(vo);
            return(reward);
        }
Beispiel #23
0
        /// <summary>装备附件字符串</summary>
        private String EquipAttachment(IEnumerable <RewardVo> equips)
        {
            var sb = new StringBuilder();

            foreach (var vo in equips)
            {
                var bag = AMFConvert.AsObjectToVo <EquipVo>(vo);
                var fi  = AttributeToString(bag);
                //类型_id_是否绑定_数量_属性项(属性类型-属性值(多个属性用,分割)例:1-100,2-70)
                var str = String.Format("{0}_{1}_{2}_{3}_{4}", vo.goodsType, bag.baseId, bag.bind, 1, fi);
                sb.Append(str);
                sb.Append("|");
            }
            return(sb.ToString().TrimEnd("|"));
        }
Beispiel #24
0
        /// <summary>
        /// 停止公告
        /// </summary>
        internal Int32 StopNotice(Int64 nid)
        {
#if DEBUG
            IP   = "192.168.1.111";
            Port = 10086;
#endif
            var s   = new MvcSocket(IP, Port);
            var str = string.Format("{0}", nid);
            var dic = new Dictionary <string, object>()
            {
                { "key", "" },
                { "data", CryptoHelper.Encrypt(str, "") },
            };

            var data = Build(new ASObject(dic));
            s.Send(data);
            var result = s.Receive();
            s.Dispose();
            //解析返回结果
            var len = result.Length - 8;
            var da  = new byte[len];
            Array.Copy(result, 8, da, 0, len);

            var      bytea  = new ByteArray(da);
            var      dy     = bytea.ReadObject();
            var      retype = dy.GetType().Name;
            ASObject obj;
            switch (retype)  //判断接收数据类型
            {
            case "ASObject": { obj = (ASObject)dy; break; }

            case "ProtocolVo": { obj = AMFConvert.ToASObject(dy); break; }

            default: { return((int)ApiType.FAIL); }
            }
            var pv = AutoParseAsObject <ProtocolVo> .Parse(obj);

            if (pv.className != "ProtocolVo")
            {
                return((int)ApiType.FAIL);
            }
            var r = pv.data;

            // 解析返回结果数据
            var state = Convert.ToInt32(r.FirstOrDefault(q => q.Key == "state").Value);
            return(state);
        }
Beispiel #25
0
        /// <summary>将dynamic对象转换成ASObject对象</summary>
        public List <ASObject> ConvertListASObject(dynamic list, string classname)
        {
            var list_aso = new List <ASObject>();

            foreach (var item in list)
            {
                dynamic model;
                switch (classname)
                {
                case "ScenePlayer": model = EntityToVo.ToScenePlayerVo(item); break;

                default: model = null; break;
                }
                list_aso.Add(AMFConvert.ToASObject(model));
            }
            return(list_aso);
        }
Beispiel #26
0
        public ASObject CommandStart(TGGSession session, ASObject data)
        {
            try
            {
#if DEBUG
                XTrace.WriteLine("{0}:{1}", "QUERY_PLAYER_ROLE", "查看玩家信息");
#endif
                var playerId = Convert.ToInt64(data.FirstOrDefault(m => m.Key == "userId").Value.ToString());

                var user = tg_user.GetUsersById(playerId);
                if (user == null)
                {
                    return(Result((int)ResultType.ROLE_QUERY_NOPLAYER));               //验证是否存在该玩家信息
                }
                if (playerId == session.Player.User.id)
                {
                    return(Result((int)ResultType.ROLE_QUERY_MYERROR));   //验证要查看的玩家是否为当前玩家本身
                }
                var lists = tg_role.GetFindAllByUserId(playerId);
                if (!lists.Any())
                {
                    return(Result((int)ResultType.ROLE_QUERY_NOINFO));                //验证要查看玩家的武将信息
                }
                var ids = lists.Select(m => m.id).ToList();
                //var listview = view_role.GetRoleById(ids);
                var roles = (new Share.Role()).GetRoleByIds(ids);

                if (!roles.Any())
                {
                    return(Result((int)ResultType.ROLE_QUERY_VIEWERROR));                //验证武将视图信息
                }
                var listroles = roles.Select(item => AMFConvert.ToASObject(ConvertToVo(item))).ToList();

                var equips     = tg_bag.GetEquipByUserIdStateType(playerId, (int)LoadStateType.LOAD, (int)GoodsType.TYPE_EQUIP); //查询玩家武将穿戴的装备
                var listequips = equips.Select(item => AMFConvert.ToASObject(EntityToVo.ToEquipVo(item))).ToList();

                return(new ASObject(BuildInfo((int)ResultType.SUCCESS, user.player_name, user.player_camp, user.player_influence, listroles, listequips)));
            }
            catch (Exception ex)
            {
                XTrace.WriteException(ex);
                return(new ASObject());
            }
        }
Beispiel #27
0
        public ASObject CommandStart(TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("{0}:{1}", "ENTER", "进入页面");
#endif
            var player = session.Player.CloneEntity();
            var number = Variable.BASE_DAMING;
            if (!number.Any())
            {
                return(Error((int)ResultType.BASE_TABLE_ERROR));
            }

            if (!player.DamingLog.Any() || player.DamingLog.Count != number.Count)
            {
                return(Error((int)ResultType.DAMING_INFO_ERROR));                                                                    //验证大名令任务数据
            }
            var listdata = player.DamingLog.Select(item => AMFConvert.ToASObject(EntityToVo.ToDaMingLingVo(item))).ToList();
            return(new ASObject(BuildData((int)ResultType.SUCCESS, listdata)));
        }
Beispiel #28
0
        /// <summary>对战结果处理</summary>
        private ASObject ChallengeResult(TGGSession session, BaseNpcMonster npcinfo, tg_train_home npc, FightVo fight)
        {
            var isprop      = false;
            var exp         = npcinfo.experience;
            var equips      = npcinfo.equip;
            var probability = npcinfo.probability;
            var reward      = new List <RewardVo>();
            var propreward  = new List <RewardVo>();

            if (fight.isWin)
            {
                PowerUpdate(fight.isWin, session.Player.Role.Kind); //体力更新
                reward = BuildReward(exp);
                RewardExp(session, exp);                            //推送经验奖励
                UpdateExt(session.Player.User.id);

                npc.npc_state = (int)FightResultType.WIN;                                                     //更新npc状态为已战胜
                npc.Update();
                var newequip = Common.GetInstance().RandomEquip(session.Player.User.id, equips, probability); //是否获得装备
                isprop = newequip != null;
                if (newequip != null)
                {
                    Variable.TempProp.AddOrUpdate(session.Player.User.id, new List <tg_bag>()
                    {
                        newequip
                    }, (m, n) => n);
                    var listaso = new List <ASObject> {
                        AMFConvert.ToASObject(EntityToVo.ToEquipVo(newequip))
                    };
                    propreward.Add(new RewardVo
                    {
                        goodsType = (int)GoodsType.TYPE_EQUIP,
                        increases = listaso,
                    });
                }
            }
            FightSend(fight, isprop, reward, session.Player.User.id, propreward); //发送战斗协议

            (new Share.DaMing()).CheckDaMing(session.Player.User.id, (int)DaMingType.武将宅挑战);
            return(new ASObject(Common.GetInstance().NpcChallengeData((int)ResultType.SUCCESS, fight.isWin ? (int)FightResultType.WIN : (int)FightResultType.LOSE)));
        }
Beispiel #29
0
        /// <summary>集合转换ASObject集合</summary>
        public List <ASObject> ConvertListASObject(dynamic list, string classname)
        {
            var list_aso = new List <ASObject>();

            foreach (var item in list)
            {
                dynamic model;
                switch (classname)
                {
                case "Props": model = EntityToVo.ToPropVo(item); break;

                case "Equip": model = EntityToVo.ToEquipVo(item); break;

                case "Fusion": model = EntityToVo.ToFusionPropVo(item); break;

                default: model = null; break;
                }
                list_aso.Add(AMFConvert.ToASObject(model));
            }
            return(list_aso);
        }
Beispiel #30
0
        public ASObject CommandStart(TGGSession session, ASObject data)
        {
            try
            {
#if DEBUG
                XTrace.WriteLine("{0}:{1}", "ROLE_JOIN", "加载武将数据");
#endif
                var player = session.Player;
                var list   = tg_role.GetFindAllByUserId(player.User.id);     //获取该用户当前所有武将信息

                var listroles = new List <ASObject>();
                var ids       = list.Select(m => m.id).ToList();
                //var roles = view_role.GetRoleById(ids);                  //所有武将视图信息
                var roles = (new Share.Role()).GetRoleByIds(ids);
                if (roles.Count == 0)
                {
                    return(new ASObject(Common.GetInstance().RoleLoadData((int)ResultType.DATABASE_ERROR, null)));
                }

                var listtrainrs = tg_train_role.GetEntityByIds(ids);

                foreach (var item in roles)
                {
                    var trainrole = listtrainrs.FirstOrDefault(m => m.rid == item.Kind.id);
                    var genre     = (new Share.Role()).LearnGenreOrNinja(item.FightSkill, item.Kind.role_genre, item.Kind.role_ninja); //开启流派

                    listroles.Add(trainrole != null ?
                                  AMFConvert.ToASObject((new Share.Role()).BuildRole(item, genre, trainrole)) :
                                  AMFConvert.ToASObject((new Share.Role()).BuildRole(item, genre, null)));
                }
                return(new ASObject(Common.GetInstance().RoleJoinData((int)ResultType.SUCCESS, player.UserExtend.train_bar, listroles,
                                                                      EntityToVo.ToRoleHomeHireVo(player.UserExtend), player.UserExtend.power_buy_count)));
            }
            catch (Exception ex)
            {
                XTrace.WriteException(ex);
                return(new ASObject());
            }
        }