/// <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); }
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); }
/// <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); }
/// <summary>组装数据</summary> private ASObject BuildData(FightVo fightvo, int fightresult) { var dic = new Dictionary <string, object> { { "type", fightresult }, { "fight", fightvo } }; return(new ASObject(dic)); }
/// <summary>数据组装</summary> private Dictionary <String, Object> BuildData(FightVo vo) { var dic = new Dictionary <string, object> { { "fight", vo }, }; return(dic); }
/// <summary>数据组装</summary> public Dictionary <String, Object> BuildData(int result, FightVo model) { var dic = new Dictionary <string, object> { { "result", result }, { "fight", model }, }; return(dic); }
/// <summary> 组装返回数据 </summary> private ASObject BuildData(int result, FightVo fight) { var dic = new Dictionary <string, object>() { { "result", result }, { "fight", fight } }; return(new ASObject(dic)); }
/// <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); }
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))); }
/// <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>(); }
/// <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)); }
/// <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); }
/// <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)); }
/// <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))); }
/// <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); }
/// <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)); }
//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); }