예제 #1
0
        /// <summary> 推送协议 </summary>
        /// <param name="session">session</param>
        /// <param name="model">战斗Vo</param>
        public void SendProtocol(TGGSession session, FightVo model)
        {
            var aso = new ASObject(FIGHT_PERSONAL_ENTER.GetInstance().BuildData(Convert.ToInt32(ResultType.SUCCESS), model));
            var pv  = session.InitProtocol((int)ModuleNumber.FIGHT, (int)FightCommand.FIGHT_PERSONAL_ENTER, (int)ResponseType.TYPE_SUCCESS, aso);

            session.SendData(pv);
        }
예제 #2
0
        private bool BuildMove(FightVo model, bool flag)
        {
            IsFirst = flag;
            var moves = new List <MovesVo>();
            var role  = GetShotRole();

            if (role == null)
            {
                model.isWin = IsFirst; return(false);
            }
            if (!AddRoleRound(role.id))
            {
                return(true);
            }
            XTrace.WriteLine(string.Format("{0} {1}", "出手id:", role.id));
            AddYinCount(role.user_id);

            if (!RoleShot(role.id, ref moves))
            {
                return(false);
            }
            model.moves.Add(moves);
            InitPosition();
            return(true);
        }
예제 #3
0
 /// <summary>
 /// 战斗协议发送
 /// </summary>
 private void FightSend(FightVo fight, Boolean isprop, List <RewardVo> reward, Int64 userid, List <RewardVo> proRewardVos)
 {
     fight.rewards    = reward;
     fight.propReward = proRewardVos;
     fight.haveProp   = isprop ? 1 : 0;
     (new Share.Fight.Fight()).SendProtocol(userid, fight);
 }
예제 #4
0
        /// <summary>组装数据</summary>
        private ASObject BuildData(FightVo fightvo, int fightresult)
        {
            var dic = new Dictionary <string, object> {
                { "type", fightresult }, { "fight", fightvo }
            };

            return(new ASObject(dic));
        }
예제 #5
0
파일: PUSH_FIGHT.cs 프로젝트: Lantnr/MyTest
        /// <summary>数据组装</summary>
        private Dictionary <String, Object> BuildData(FightVo vo)
        {
            var dic = new Dictionary <string, object>
            {
                { "fight", vo },
            };

            return(dic);
        }
예제 #6
0
        /// <summary>数据组装</summary>
        public Dictionary <String, Object> BuildData(int result, FightVo model)
        {
            var dic = new Dictionary <string, object>
            {
                { "result", result },
                { "fight", model },
            };

            return(dic);
        }
예제 #7
0
        /// <summary> 组装返回数据 </summary>
        private ASObject BuildData(int result, FightVo fight)
        {
            var dic = new Dictionary <string, object>()
            {
                { "result", result },
                { "fight", fight }
            };

            return(new ASObject(dic));
        }
예제 #8
0
        /// <summary>数据组装</summary>
        private Dictionary <String, Object> BuildData(int result, int count, FightVo vo)
        {
            var dic = new Dictionary <string, object>
            {
                { "result", result },
                { "ladder", count },
                { "fight", vo },
            };

            return(dic);
        }
예제 #9
0
        public void FightStart(Int64 userid)
        {
            var vo = new FightVo {
                attackId = FirstUserId, wuJiangName = RivalName, yinA = FirstYinVo, yinB = AfterYinVo
            };

start:      //战斗过程组装
            if (!BuildMove(vo, true))
            {
                goto end;
            }
            if (BuildMove(vo, false))
            {
                goto start;
            }
end:
            vo.isWin = true;
            var session = Variable.OnlinePlayer[userid];

            SendProtocol(session, new ASObject(BuildData(Convert.ToInt32(ResultType.SUCCESS), vo)));
        }
예제 #10
0
 /// <summary>初始化</summary>
 private void Init()
 {
     WIN               = 0;
     Round             = 0;
     IsAttack          = true;
     attack_number     = 0;
     defense_number    = 0;
     vo                = new FightVo();
     move              = new MovesVo();
     list_move         = new List <MovesVo>();
     list_skill        = new List <SkillVo>();
     list_role         = new List <FightRole>();
     attack_matrix     = new FightPersonal();
     list_role_hp      = new List <FightRole>();
     defense_matrix    = new FightPersonal();
     list_buff         = new List <FightRoleBuff>();
     list_attack_role  = new List <FightRole>();
     list_defense_role = new List <FightRole>();
     dic_round         = new Dictionary <decimal, int>();
     dic_yincount      = new Dictionary <decimal, int>();
     dic_vocation      = new Dictionary <decimal, double>();
 }
예제 #11
0
        /// <summary> 战斗双方推送 </summary>
        /// <param name="session">session</param>
        /// <param name="vo">vo</param>
        private void PushFight(TGGSession session, FightVo vo)
        {
            if (!Variable.OnlinePlayer.ContainsKey(session.Fight.Rival))
            {
                return;
            }
            var _session = Variable.OnlinePlayer[session.Fight.Rival] as TGGSession;
            var _vo      = vo.CloneEntity();
            int count    = _vo.moves.Sum(item => item.Count());
            var user     = session.Player.User;

            _vo.isWin = !_vo.isWin;
            if (!_vo.isWin)
            {
                Common.GetInstance().GetSiegePlayer(user.id, user.player_camp).state = (int)SiegePlayerType.EXIT_DEFEND;
            }
            PUSH_FIGHT.GetInstance().CommandStart(session, vo);   //发给自己
            PUSH_FIGHT.GetInstance().CommandStart(_session, _vo); //发给对方
            var time = Variable.Activity.Siege.BaseData.AShotTime;

            RivalStateUpdate(session.Fight.Rival, (count * time));
        }
예제 #12
0
        /// <summary> 战斗推送协议 </summary>
        /// <param name="userid">userid</param>
        /// <param name="model">战斗Vo</param>
        public void SendProtocol(Int64 userid, FightVo model)
        {
            var s = Variable.OnlinePlayer.ContainsKey(userid);

            if (!s)
            {
                return;
            }
            var session = Variable.OnlinePlayer[userid] as TGGSession;

            if (session == null)
            {
                return;
            }

            var dic = new Dictionary <string, object> {
                { "result", (int)ResultType.SUCCESS }, { "fight", model }
            };
            var aso = new ASObject(dic);
            var pv  = session.InitProtocol((int)ModuleNumber.FIGHT, (int)FightCommand.FIGHT_PERSONAL_ENTER, (int)ResponseType.TYPE_SUCCESS, aso);

            session.SendData(pv);
        }
예제 #13
0
        /// <summary> 一夜墨俣--击杀boss</summary>
        public ASObject CommandStart(TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("一夜墨俣:击杀BOSS -{0}——{1}", session.Player.User.player_name, "KILL_BOSS");
#endif
            var  userid    = session.Player.User.id;
            var  shotcount = 0;
            bool iswin;

            var camp = session.Player.User.player_camp;
            if (!CheckPoint(camp, userid))
            {
                return(BuildData((int)ResultType.BUILDING_POINT_OUT, null));                           //验证坐标
            }
            if (!Variable.Activity.BuildActivity.userGoods.ContainsKey(userid))
            {
                return(BuildData((int)ResultType.BUILDING_NOT_IN, null));
            }
            var ac        = Variable.Activity.BuildActivity.userGoods[userid];
            var fighttime = ac.FightTime;
            if (DateTime.Now < fighttime)
            {
                return(BuildData((int)ResultType.BUILDING_TIME_OUT, null));
            }
            var bossid = GetBoosId(camp);

            var bossblood = camp == (int)CampType.East ? Variable.Activity.BuildActivity.WestBoosBlood : Variable.Activity.BuildActivity.EastBoosBlood;
            if (bossblood <= 0)
            {
                return(BuildData((int)ResultType.SUCCESS, null));
            }
            if (!CheckQueue(userid))
            {
                return(BuildData((int)ResultType.BUILDING_TIME_OUT, null));
            }

            var fightvo = new FightVo();
            lock (obj)
            {
                //  Thread.Sleep(5000); //测试数据
                var fight = new Share.Fight.Fight().GeFight(userid, bossid, FightType.BUILDING, bossblood, false, true);
                new Share.Fight.Fight().Dispose();
                if (fight.Result != ResultType.SUCCESS)
                {
                    return(BuildData((int)ResultType.FIGHT_ERROR, null));
                }
                var blood = fight.BoosHp;
                bossblood = blood;
                shotcount = fight.ShotCount;
                iswin     = fight.Iswin;
                fightvo   = fight.Ofight;
                GetBossBlood(camp, bossblood);
                var fightcost = shotcount * 0.5;
                ac.FightTime = DateTime.Now.AddSeconds(fightcost); //下一次挑战时间
                if (iswin)
                {
                    new Common().AddFame(Variable.Activity.BuildActivity.KillAddFame, ac); //打赢boss
                }
                PushBossBlood(userid, camp == (int)CampType.East ? 2 : 1);                 //1.东军返回西军Boss血量 2.西军返回东军boss血量
            }
            RemoveQueue(userid);
            return(BuildData((int)ResultType.SUCCESS, fightvo));
        }
예제 #14
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)));
        }
예제 #15
0
파일: PUSH_FIGHT.cs 프로젝트: Lantnr/MyTest
 /// <summary> 推送玩家匹配战斗</summary>
 public void CommandStart(TGGSession session, FightVo vo)
 {
     //Common.GetInstance().PushPv(session, new ASObject(BuildData(vo)), (int)SiegeCommand.PUSH_FIGHT);
     Common.GetInstance().TrainingSiegeEndSend(session, new ASObject(BuildData(vo)), (int)SiegeCommand.PUSH_FIGHT);
 }
예제 #16
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));
        }
예제 #17
0
        //private static WORK_FIGHT_PUSH ObjInstance;

        ///// <summary> WORK_FIGHT_PUSH单体模式 </summary>
        //public static WORK_FIGHT_PUSH GetInstance()
        //{
        //    return ObjInstance ?? (ObjInstance = new WORK_FIGHT_PUSH());
        //}

        /// <summary> 战斗推送</summary>
        public void CommandStart(TGGSession session, FightVo fightvo, int fightresult)
        {
            var aso = BuildData(fightvo, fightresult);

            FightPush(session, aso);
        }