public int HandlePacket(GameClient client, GSPacketIn packet) { if (client.Player.CurrentRoom == null) return 0; int id = packet.ReadInt(); GamePlayer player = Managers.WorldMgr.GetPlayerById(id); if (player == client.Player) return 0; List<GamePlayer> players = client.Player.CurrentRoom.GetPlayers(); foreach (GamePlayer p in players) { if (p == player) { client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("friendnotinthesameserver.Sameroom")); return 0; } } GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_INVITE); if (player != null && player.CurrentRoom == null) { pkg.WriteInt(client.Player.PlayerCharacter.ID); pkg.WriteInt(client.Player.CurrentRoom.RoomId); pkg.WriteInt(client.Player.CurrentRoom.MapId); pkg.WriteByte((byte)client.Player.CurrentRoom.TimeMode); pkg.WriteByte((byte)client.Player.CurrentRoom.RoomType); pkg.WriteByte((byte)client.Player.CurrentRoom.HardLevel); pkg.WriteByte((byte)client.Player.CurrentRoom.LevelLimits); pkg.WriteString(client.Player.PlayerCharacter.NickName); pkg.WriteBoolean(true); pkg.WriteInt(5); pkg.WriteString(client.Player.CurrentRoom.Name); pkg.WriteString(client.Player.CurrentRoom.Password); //TrieuLSL BN IMInvite barrierNum pkg.WriteInt(50); player.Out.SendTCP(pkg); } else { if (player != null && player.CurrentRoom != null && player.CurrentRoom != client.Player.CurrentRoom) { client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("friendnotinthesameserver.Room")); } else { client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("friendnotinthesameserver.Fail")); } } return 0; }
public void SendLoginFailed(string msg) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.LOGIN); pkg.WriteByte(1); pkg.WriteString(msg); SendTCP(pkg); }
protected override void ExecuteImp(BaseGame game, long tick) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, m_living.Id); pkg.Parameter1 = m_living.Id; pkg.WriteByte((byte)eTankCmdType.LIVING_RANGEATTACKING); List<Living> playersAround = game.Map.FindPlayers(m_fx, m_tx, m_players); int count = playersAround.Count; foreach (Living p in playersAround) { if (m_living.IsFriendly(p) == true) count--; } pkg.WriteInt(count); m_living.SyncAtTime = false; try { foreach (Living p in playersAround) { p.SyncAtTime = false; if (m_living.IsFriendly(p) == true) continue; int dander = 0; p.IsFrost = false; game.SendGameUpdateFrozenState(p); int damage = MakeDamage(p); int critical = MakeCriticalDamage(p, damage); int totalDemageAmount = 0; if (p.TakeDamage(m_living, ref damage, ref critical, "范围攻击")) { totalDemageAmount = damage + critical; if (p is Player) { Player player = p as Player; dander = player.Dander; } } pkg.WriteInt(p.Id); pkg.WriteInt(totalDemageAmount); pkg.WriteInt(p.Blood); //同步怒气值 pkg.WriteInt(dander); //attackEffect pkg.WriteInt(new Random().Next(2)); } game.SendToAll(pkg); Finish(tick); } finally { m_living.SyncAtTime = true; foreach (Living p in playersAround) { p.SyncAtTime = true; } } }
public int HandlePacket(GameClient client, GSPacketIn packet) { //bool result = false; if (string.IsNullOrEmpty(client.Player.PlayerCharacter.CheckCode)) return 1; //int check = packet.ReadInt(); string check = packet.ReadString(); if (client.Player.PlayerCharacter.CheckCode.ToLower() == check.ToLower()) { client.Player.PlayerCharacter.CheckCount = 0; //int rewardItemID = GameServer.Instance.Configuration.CheckRewardItem; //ItemTemplateInfo rewardItem = ItemMgr.GetSingleGoods(rewardItemID); //ItemInfo item = ItemInfo.CreateFromTemplate(rewardItem, 1, (int)Game.Server.Statics.ItemAddType.CheckCode); //if (item != null) //{ // item.IsBinds = true; // if (client.Player.AddItem(item, Game.Server.Statics.ItemAddType.CheckCode) != -1) // { // client.Out.SendMessage(eMessageType.ChatERROR, LanguageMgr.GetTranslation("CheckCodeHandler.Msg1", item.Template.Name)); // } // else // { // client.Out.SendMessage(eMessageType.ChatERROR, LanguageMgr.GetTranslation("CheckCodeHandler.Msg2")); // } //} int GP = LevelMgr.GetGP(client.Player.PlayerCharacter.Grade); client.Player.AddGP(LevelMgr.IncreaseGP(client.Player.PlayerCharacter.Grade, client.Player.PlayerCharacter.GP)); client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("CheckCodeHandler.Msg1", client.Player.PlayerCharacter.Grade * 12)); //result = true; packet.ClearContext(); packet.WriteByte(1); packet.WriteBoolean(false); client.Out.SendTCP(packet); } // else if (client.Player.PlayerCharacter.CheckError < 1 && client.Player.PlayerCharacter.CheckCount < 20000) else if (client.Player.PlayerCharacter.CheckError < 9) { client.Out.SendMessage(eMessageType.ChatERROR, LanguageMgr.GetTranslation("CheckCodeHandler.Msg3")); client.Player.PlayerCharacter.CheckError++; client.Out.SendCheckCode(); } else { client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("CheckCodeHandler.Msg3")); client.Disconnect(); } return 0; }
public override void OnStarting(BaseSceneGame game, Game.Base.Packets.GSPacketIn data) { //base.OnStarting(game, data); TankData tank = game.Data; tank.Reset(); GamePlayer[] list = game.Data.GetAllPlayers(); int i = random.Next(list.Length); GamePlayer player = GetLowDelayPlayer(game, list[i]); //List<Point> pos = new List<Point>(); //pos.AddRange(Managers.MapMgr.GetMapPos(game.Data.MapIndex)); MapPoint pos = Managers.MapMgr.GetMapRandomPos(game.Data.MapIndex); tank.CurrentWind = random.Next(-40, 40); data.WriteInt(player.PlayerCharacter.ID); data.WriteInt(tank.CurrentWind); data.WriteByte((byte)game.Data.Count); Point temp = new Point(); int lastTeam = -1; foreach (GamePlayer p in list) { temp = GetRandom(pos, temp, lastTeam, p.CurrentTeamIndex); tank.Players[p].X = temp.X; tank.Players[p].Y = temp.Y; tank.CurrentMap.AddPhysical(tank.Players[p]); p.CanFly = true; p.Count = 2; data.WriteInt(p.PlayerCharacter.ID); data.WriteInt(tank.Players[p].X); data.WriteInt(tank.Players[p].Y); data.WriteInt(random.Next(0, 2) > 0 ? 1 : -1); data.WriteInt(tank.Players[p].Blood); data.WriteBoolean(game.Data.Players[p].IsCaptain); lastTeam = p.CurrentTeamIndex; } tank.CurrentIndex = player; game.BeginTimer(TIMEOUT); if (game.RoomType == eRoomType.PAIRUP && game.MatchGame != null) { game.MatchGame.StopTimer(); } }
public void HandleCommand(BaseGame game, Player player, GSPacketIn packet) { if (game.GameState == eGameState.Loading) { player.LoadingProcess = packet.ReadInt(); if (player.LoadingProcess >= 100) { game.CheckState(0); } var pkg = new GSPacketIn((short)ePackageType.GAME_CMD); pkg.WriteByte((byte)eTankCmdType.LOAD); //var pkg = packet.Clone(); // pkg.ClearContext(); pkg.WriteInt(player.LoadingProcess); pkg.WriteInt(4); pkg.WriteInt(player.PlayerDetail.PlayerCharacter.ID); game.SendToAll(pkg); } }
/* internal void SendAttackEffect(Living player, int type) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.Parameter1 = player.Id; pkg.WriteByte((byte)eTankCmdType.ATTACKEFFECT); pkg.WriteBoolean(true); pkg.WriteInt(type); SendToAll(pkg); } */ internal void SendSyncLifeTime() { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); //pkg.Parameter2 = -1; pkg.WriteByte((byte)eTankCmdType.SYNC_LIFETIME); pkg.WriteInt(m_lifeTime); SendToAll(pkg); }
internal void SendRemovePhysicalObj(PhysicalObj obj) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.WriteByte((byte)eTankCmdType.DISAPPEAR); pkg.WriteInt(obj.Id); SendToAll(pkg); //TODO 完成删除物品 }
internal void SendPlayerUseProp(Player player, int type, int place, int templateID) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, player.Id); pkg.Parameter1 = player.Id; pkg.WriteByte((byte)eTankCmdType.PROP); pkg.WriteByte((byte)type); pkg.WriteInt(place); pkg.WriteInt(templateID); pkg.WriteInt(player.Id);//var _loc_7:* = _gameInfo.findLiving(_loc_2.readInt()); pkg.WriteBoolean(false);//var _loc_8:* = _loc_2.readBoolean(); buff dan dat SendToAll(pkg); }
internal void SendPlayerPicture(Living living, int type, bool state) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.Parameter1 = living.Id; pkg.WriteByte((byte)eTankCmdType.SEND_PICTURE); pkg.WriteInt(type); pkg.WriteBoolean(state); SendToAll(pkg); //(living as Player).PlayerDetail.SendTCP(pkg); }
//, bool isLiving, string action) //string action internal void SendPlayerMove(Player player, int type, int x, int y, byte dir) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, player.Id); pkg.Parameter1 = player.Id; pkg.WriteByte((byte)eTankCmdType.MOVESTART); pkg.WriteByte((byte)type); pkg.WriteInt(x); pkg.WriteInt(y); pkg.WriteByte(dir); pkg.WriteBoolean(player.IsLiving); SendToAll(pkg); }
internal void SendPhysicalObjFocus(Physics obj, int type) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.WriteByte((byte)eTankCmdType.FOCUS_ON_OBJECT); pkg.WriteInt(type); pkg.WriteInt(obj.X); pkg.WriteInt(obj.Y); SendToAll(pkg); }
internal void SendOpenSelectLeaderWindow(int maxTime) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.WriteByte((byte)eTankCmdType.GAME_CAPTAIN_AFFIRM); pkg.WriteInt(maxTime); SendToAll(pkg); }
internal void SendGameWindPic(byte windId, byte[] windpic) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.WriteByte((byte)eTankCmdType.WIND_PIC); pkg.WriteByte(windId); pkg.Write(windpic); SendToAll(pkg); }
internal void SendGameUpdateWind(float wind) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.WriteByte((byte)eTankCmdType.VANE); int _wind = (int)(wind * 10); pkg.WriteInt(_wind); pkg.WriteBoolean(_wind > 0); pkg.WriteByte(GetVane(_wind, 1)); pkg.WriteByte(GetVane(_wind, 2)); pkg.WriteByte(GetVane(_wind, 3)); SendToAll(pkg); }
public override void OnStopping(BaseSceneGame game, Game.Base.Packets.GSPacketIn pkg) { base.OnStopping(game, pkg); game.BeginTimer(TIMEOUT / 2); TankData data = game.Data; pkg.WriteByte((byte)data.Players.Count); int winTeam = -1; int lastTeam = -1; data.killFlag = false; foreach (KeyValuePair <GamePlayer, Player> p in data.Players) { //if(p.Value.TotalHurt > 0) //{ // data.killFlag = true; //} if (winTeam == -1 && p.Value.Blood > 0) { if (game.GameMode == eGameMode.FLAG) { if (p.Value.IsCaptain) { winTeam = p.Key.CurrentTeamIndex; break; } else { lastTeam = p.Key.CurrentTeamIndex; } } else { winTeam = p.Key.CurrentTeamIndex; break; } } } //if (!data.killFlag) //{ // game.BeginTimer(3000); //} if (winTeam == -1 && game.Data.CurrentIndex == null) { winTeam = lastTeam; } if (winTeam == -1) { if (game.Data.CurrentFire != null) { winTeam = game.Data.CurrentFire.CurrentTeamIndex; } else { winTeam = data.LastDead; } } int GP; //E等级差=(对方平均等级+5)-玩家等级;取值区间(1~9); // P赢=4*[(对方平均等级+5)-玩家等级]+伤害的血量*0.2%+击杀数*2+(命中次数/玩家总的回合次数)*8; //P输=1*[(对方平均等级+5)-玩家等级]+伤害的血量*0.2%+击杀数*2+(命中次数/玩家总的回合次数)*8 // P赢=[2+伤害的血量*0.1%+击杀数*0.5+(命中次数/玩家总的回合次数)*2]*[(对方平均等级+10)-玩家等级] //P输=[伤害的血量*0.1%+击杀数*0.5+(命中次数/玩家总的回合次数)*2]*[(对方平均等级+10)-玩家等级]; // P赢=[2+伤害的血量*0.1%+击杀数*0.5+(命中次数/玩家总的回合次数)*2]*对方平均等级*[1+(总击杀数-1)*33%] //P输=[伤害的血量*0.1%+击杀数*0.5+(命中次数/玩家总的回合次数)*2]*对方平均等级*[1+(总击杀数-1)*33%] //P赢=[2+伤害的血量*0.1%+击杀数*0.5+(命中次数/玩家总的回合次数)*2]*对方平均等级*[0.9+(游戏开始时对方玩家人数-1)*30%] //P输=[伤害的血量*0.1%+击杀数*0.5+(命中次数/玩家总的回合次数)*2]*对方平均等级*[0.9+(游戏开始时对方玩家人数-1)*30%] //bool flag = data.GameStart.AddMinutes(1).CompareTo(DateTime.Now) > 0; string winStr = LanguageMgr.GetTranslation("Game.Server.SceneGames.OnStopping.Msg5"); GamePlayer winPlayer = null; string loseStr = LanguageMgr.GetTranslation("Game.Server.SceneGames.OnStopping.Msg5"); GamePlayer losePlayer = null; foreach (KeyValuePair <GamePlayer, Player> p in data.Players) { if (game.RoomType == 0) { p.Key.PlayerCharacter.CheckCount++; } else { p.Key.PlayerCharacter.CheckCount += 2; } p.Key.Out.SendCheckCode(); if (p.Value.TotalHurt > 0) { data.killFlag = true; } if (game.GameClass == eGameClass.CONSORTIA) { if (p.Key.CurrentTeamIndex == winTeam) { winStr += " [" + p.Key.PlayerCharacter.NickName + "] "; winPlayer = p.Key; } else { loseStr += " [" + p.Key.PlayerCharacter.NickName + "] "; losePlayer = p.Key; } } } int riches = 0; if (game.GameClass == eGameClass.CONSORTIA) { winStr += LanguageMgr.GetTranslation("Game.Server.SceneGames.OnStopping.Msg1") + losePlayer.PlayerCharacter.ConsortiaName + LanguageMgr.GetTranslation("Game.Server.SceneGames.OnStopping.Msg2"); loseStr += LanguageMgr.GetTranslation("Game.Server.SceneGames.OnStopping.Msg3") + winPlayer.PlayerCharacter.ConsortiaName + LanguageMgr.GetTranslation("Game.Server.SceneGames.OnStopping.Msg4"); riches = ConsortiaMgr.ConsortiaFight(winPlayer.CurrentTeamIndex == 1 ? data.ConsortiaID1 : data.ConsortiaID2, winPlayer.CurrentTeamIndex == 1 ? data.ConsortiaID2 : data.ConsortiaID1, game.Data.Players, game.RoomType, game.GameClass, data.persons[winPlayer.CurrentTeamIndex].TotalKillHealth); GameServer.Instance.LoginServer.SendConsortiaFight(winPlayer.PlayerCharacter.ConsortiaID, riches, winStr); //GameServer.Instance.LoginServer.SendConsortiaFight(losePlayer.PlayerCharacter.ConsortiaID, -riches, loseStr); } foreach (KeyValuePair <GamePlayer, Player> p in data.Players) { GP = 1; if (p.Value.State != TankGameState.LOSE) { if (game.RoomType == eRoomType.PAIRUP) { p.Key.PlayerCharacter.Total++; } double level = (data.TotalLevel - data.persons[p.Key.CurrentTeamIndex].TotalLevel) / (data.TotalPerson - data.persons[p.Key.CurrentTeamIndex].TeamPerson); double disLevel = level + 10 - p.Key.PlayerCharacter.Grade; if (p.Key.CurrentTeamIndex == winTeam) { if (game.RoomType == eRoomType.PAIRUP) { p.Key.PlayerCharacter.Win++; } //GP = (int)Math.Ceiling((((data.killFlag ? 2 : 0) + (double)p.Value.TotalHurt * 0.001 + p.Value.TotalKill * 0.5 + (p.Value.HitNum / (p.Value.BoutNum == 0 ? 1 : p.Value.BoutNum)) * 2) * level * (1 + (data.persons[p.Key.CurrentTeamIndex].TatolKill - 1) * 0.33))); GP = (int)Math.Ceiling((((data.killFlag ? 2 : 0) + (double)p.Value.TotalHurt * 0.001 + p.Value.TotalKill * 0.5 + (p.Value.HitNum / (p.Value.BoutNum == 0 ? 1 : p.Value.BoutNum)) * 2) * level * (0.9 + (data.persons[p.Key.CurrentTeamIndex].TeamPerson - 1) * 0.3))); } else { GP = (int)Math.Ceiling(((double)p.Value.TotalHurt * 0.001 + p.Value.TotalKill * 0.5 + (p.Value.HitNum / (p.Value.BoutNum == 0 ? 1 : p.Value.BoutNum)) * 2) * level * (0.9 + (data.persons[p.Key.CurrentTeamIndex].TeamPerson - 1) * 0.3)); } bool isMarried = false; if (p.Key.PlayerCharacter.IsMarried) { foreach (GamePlayer q in data.Players.Keys) { if (q.PlayerCharacter.ID != p.Key.PlayerCharacter.ID) { if (q.CurrentTeamIndex == p.Key.CurrentTeamIndex && p.Key.PlayerCharacter.SpouseID == q.PlayerCharacter.ID) { GP = (int)(GP * 1.2); isMarried = true; } } } } p.Key.QuestInventory.CheckWin(data.MapIndex, (int)game.GameMode, game.ScanTime, p.Value.IsCaptain, data.persons[p.Key.CurrentTeamIndex].TeamPerson, data.TotalPerson - data.persons[p.Key.CurrentTeamIndex].TeamPerson, p.Key.CurrentTeamIndex == winTeam, game.GameClass == eGameClass.CONSORTIA, (int)game.RoomType, isMarried); double AAS = AntiAddictionMgr.GetAntiAddictionCoefficient(p.Key.PlayerCharacter.AntiAddiction); GP = (int)(GP * AAS); GP = (int)(GP * RateMgr.GetRate(eRateType.Experience_Rate)); GP *= p.Key.BuffInventory.GPMultiple(); if (game.RoomType != eRoomType.PAIRUP && (disLevel <= 0 || disLevel >= 20)) { GP = 1; } if (AAS < 10E-6) { GP = 0; } else { if (GP < 1) { GP = 1; } } p.Key.SetGP(GP); Dictionary <int, int> requestItems = p.Key.QuestInventory.GetRequestItems(); List <MapGoodsInfo> questItems = Managers.MapMgr.GetQuestGoodsAll(data.MapIndex); foreach (MapGoodsInfo questID in questItems) { if (requestItems.ContainsKey(questID.GoodsID) && requestItems[questID.GoodsID] > 0) { int total = random.Next(questID.Value + 1); if (p.Key.CurrentTeamIndex != winTeam) { total = total / 2; } else if (total < 1) { total = 1; } if (total < 1) { continue; } int count = requestItems[questID.GoodsID] > total ? total : requestItems[questID.GoodsID]; ItemTemplateInfo temp = Bussiness.Managers.ItemMgr.GetSingleGoods(questID.GoodsID); p.Key.TempInventory.AddItemTemplate(temp, questID, count); requestItems[questID.GoodsID] -= count; } } } //p.Value.IsTakeOut = true; pkg.WriteInt(p.Key.PlayerCharacter.ID); pkg.WriteBoolean(winTeam == p.Key.CurrentTeamIndex); pkg.WriteInt(p.Key.PlayerCharacter.Grade); pkg.WriteInt(p.Key.PlayerCharacter.GP); pkg.WriteInt((int)p.Value.TotalKill); pkg.WriteInt(p.Value.TotalHurt); pkg.WriteInt(GP); pkg.WriteInt((int)p.Value.HitNum); pkg.WriteInt((int)p.Value.BoutNum); pkg.WriteInt(p.Value.Offer); if (data.persons[p.Key.CurrentTeamIndex].TotalKillHealth > 0) { p.Value.IsTakeOut = true; if (p.Key.CurrentGame != null) { p.Key.CurrentGame.IsTakeOut = true; } } pkg.WriteBoolean(p.Value.IsTakeOut); } pkg.WriteInt(riches); //pkg.WriteBoolean(data.killFlag); pkg.WriteInt(data.TotalPerson / 2); data.InsertGameInfo(game, winTeam); GamePlayer[] list = data.Players.Keys.ToArray(); foreach (GamePlayer p in list) { if (data.Players[p].State == TankGameState.LOSE) { data.Players.Remove(p); } else { //data.Players[p].Reset(); //p.PropInventory.Clear(); //if (!killFlag) //{ // if (p.CurrentGame.GameState != eGameState.FREE) // { // p.CurrentGame.ShowArk(p.CurrentGame, p); // } //} } } }
internal void SendMissionTryAgain(int TryAgain) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.WriteByte((byte)eTankCmdType.GAME_MISSION_TRY_AGAIN); pkg.WriteInt(TryAgain); SendToAll(pkg); }
internal void SendIsLastMission(bool isLast) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.WriteByte((byte)eTankCmdType.IS_LAST_MISSION); pkg.WriteBoolean(isLast); SendToAll(pkg); }
internal void SendPetUseKill(Player player, int killId, bool isUse) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, player.Id); pkg.Parameter1 = player.Id; pkg.WriteByte((byte)eTankCmdType.PET_SKILL); pkg.WriteInt(killId); pkg.WriteBoolean(isUse); SendToAll(pkg); }
internal void SendLivingBeat(Living living, Living target, int totalDemageAmount, string action, int livingCount, int attackEffect) { int dander = 0; if (target is Player) { Player p = target as Player; dander = p.Dander; } GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, living.Id); pkg.Parameter1 = living.Id; pkg.WriteByte((byte)eTankCmdType.LIVING_BEAT); pkg.WriteString(!string.IsNullOrEmpty(action) ? action : "");//action pkg.WriteInt(livingCount);//livingCount for (int i = 1; i <= livingCount; i++) { pkg.WriteInt(target.Id);//target pkg.WriteInt(totalDemageAmount);//damage pkg.WriteInt(target.Blood);//targetBlood pkg.WriteInt(dander);//dander pkg.WriteInt(attackEffect);//attackEffect } SendToAll(pkg);//, (target as Player).PlayerDetail); }
internal void SendPhysicalObjPlayAction(PhysicalObj obj) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.WriteByte((byte)eTankCmdType.UPDATE_BOARD_STATE); pkg.WriteInt(obj.Id); pkg.WriteString(obj.CurrentAction); SendToAll(pkg); }
internal void SendLivingMoveTo(Living living, int fromX, int fromY, int toX, int toY, string action,int speed) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, living.Id); pkg.Parameter1 = living.Id; pkg.WriteByte((byte)eTankCmdType.LIVING_MOVETO); pkg.WriteInt(fromX); pkg.WriteInt(fromY); pkg.WriteInt(toX); pkg.WriteInt(toY); pkg.WriteInt(speed); pkg.WriteString(!string.IsNullOrEmpty(action) ? action : "");//怪物资源的动作 pkg.WriteString(""); SendToAll(pkg); }
internal void SendPlayerMove(Player player, int type, int x, int y, byte dir, bool isLiving) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, player.PlayerDetail.PlayerCharacter.ID); pkg.Parameter1 = player.Id; pkg.WriteByte((byte)eTankCmdType.MOVESTART); pkg.WriteByte((byte)type); pkg.WriteInt(player.X); pkg.WriteInt(player.Y); pkg.WriteByte(dir); pkg.WriteBoolean(isLiving); if (type == 2) { //PickBoxAction //_loc_9 = _loc_2.readInt(); count box pkg.WriteInt(m_tempBox.Count); foreach(Box box in m_tempBox){ //_loc_2.readInt(), _loc_2.readInt() pos(x,y); pkg.WriteInt(box.X); pkg.WriteInt(box.Y); } } SendToAll(pkg, player.PlayerDetail); }
internal void SendLivingPlayMovie(Living living, string action) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, living.Id); pkg.Parameter1 = living.Id; pkg.WriteByte((byte)eTankCmdType.PLAY_MOVIE);//.LIVING_PLAYMOVIE pkg.WriteString(action); SendToAll(pkg); }
internal void SendPlayerRemove(Player player) { //GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_PLAYER_EXIT, player.PlayerDetail.PlayerCharacter.ID); GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_ROOM, player.PlayerDetail.PlayerCharacter.ID);//GAME_PLAYER_EXIT pkg.WriteByte((byte)ePackageType.GAME_ROOM_REMOVEPLAYER); pkg.WriteInt(serverId); pkg.WriteInt(4); SendToAll(pkg, player.PlayerDetail); }
internal void SendLivingRangeAttacking(Living living, Living target, int totalDemageAmount, string action,int livingCount) { int dander = 0; if (target is Player) { Player p = target as Player; dander = p.Dander; } GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, living.Id); pkg.Parameter1 = living.Id; pkg.WriteByte((byte)eTankCmdType.LIVING_RANGEATTACKING); pkg.WriteInt(livingCount);//livingCount for (int i = 1; i <= livingCount; i++) { pkg.WriteInt(living.Id); pkg.WriteInt(totalDemageAmount); pkg.WriteInt(target.Id); pkg.WriteInt(dander);//dander pkg.WriteInt(target.Blood); } SendToAll(pkg); }
internal void SendRemoveLiving(int id) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.WriteByte((byte)eTankCmdType.DISAPPEAR); pkg.WriteInt(id); SendToAll(pkg); //TODO 完成删除物品 }
internal void SendLivingSay(Living living, string msg, int type) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, living.Id); pkg.Parameter1 = living.Id; pkg.WriteByte((byte)eTankCmdType.LIVING_SAY); pkg.WriteString(msg); pkg.WriteInt(type); SendToAll(pkg); }
internal void SendStartLoading(int maxTime) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.WriteByte((byte)eTankCmdType.GAME_LOAD); pkg.WriteInt(maxTime); pkg.WriteInt(m_map.Info.ID); pkg.WriteInt(m_loadingFiles.Count); foreach (LoadingFileInfo file in m_loadingFiles) { pkg.WriteInt(file.Type); pkg.WriteString(file.Path); pkg.WriteString(file.ClassName); } pkg.WriteInt(1);//petSkill Count for (int i = 0; i < 1; i++) { pkg.WriteString("1");//_loc_7.pic = event.pkg.readUTF(); pkg.WriteString("");//_loc_7.effect = event.pkg.readUTF(); } SendToAll(pkg); }
internal void SendLivingUpdateAngryState(Living living) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.Parameter1 = living.Id; pkg.WriteByte((byte)eTankCmdType.CHANGE_STATE);//CHANGE_STATE pkg.WriteInt(living.State); SendToAll(pkg); }
public bool HandleCommand(TankGameLogicProcessor process, GamePlayer player, GSPacketIn packet) { if (player.CurrentGame.Data.CurrentIndex == player && player.CurrentGame.Data.Players[player].State != TankGameState.DEAD) { if (player.CurrentGame.Data.CurrentFire == null) player.CurrentGame.Data.CurrentFire = player; int x = packet.ReadInt(); int y = packet.ReadInt(); if (Math.Abs(player.CurrentGame.Data.Players[player].X - x) > 100) { //player.Out.SendMessage(eMessageType.ALERT, LanguageMgr.GetTranslation("Game.Server.SceneGames.TankHandle")); StatMgr.LogErrorPlayer(player.PlayerCharacter.ID, player.PlayerCharacter.UserName, player.PlayerCharacter.NickName, ItemRemoveType.FireError, player.CurrentGame.Data.Players[player].X.ToString() + " to " + x.ToString() + ",MapID:" + player.CurrentGame.Data.MapIndex); player.Client.Disconnect(); return false; ; } int force = packet.ReadInt(); int angle = packet.ReadInt(); TankData data = player.CurrentGame.Data; Tile shape = Managers.BallMgr.FindTile(data.CurrentBall.ID); GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, player.PlayerCharacter.ID); pkg.WriteByte((byte)TankCmdType.FIRE); pkg.WriteInt(data.AddBall); for (int i = 0; i < data.AddBall; i++) { if (player.CurrentGame.Data.ReduceFireBombs) { if (data.IsFastSpeed()) { StatMgr.LogErrorPlayer(player.PlayerCharacter.ID, player.PlayerCharacter.UserName, player.PlayerCharacter.NickName, ItemRemoveType.FastError, "MapID:" + player.CurrentGame.Data.MapIndex); player.Client.Disconnect(); return false; ; } data.FireLogin = true; double reforce = 1; int reangle = 0; if (i == 1) { reforce = 0.9; reangle = -5; } else if (i == 2) { reforce = 1.1; reangle = 5; } int vx = (int)(force * reforce * Math.Cos((double)(angle + reangle) / 180 * Math.PI)); int vy = (int)(force * reforce * Math.Sin((double)(angle + reangle) / 180 * Math.PI)); data.PhyID++; BombObject bomb = new BombObject(data.PhyID, BallMgr.GetBallType(data.CurrentBall.ID), data.Players[player], shape, data.CurrentBall.Radii, data.AddMultiple < 1, data.CurrentBall.Mass, data.CurrentBall.Weight, data.CurrentBall.Wind, data.CurrentBall.DragIndex, data.BallPower); bomb.SetXY(x, y); bomb.setSpeedXY(vx, vy); data.CurrentMap.AddPhysical(bomb); pkg.WriteBoolean(bomb.IsHole); pkg.WriteInt(bomb.Id); pkg.WriteInt(x); pkg.WriteInt(y); pkg.WriteInt(vx); pkg.WriteInt(vy); pkg.WriteInt(bomb.Actions.Count); foreach (BombAction action in bomb.Actions) { pkg.WriteInt(action.TimeInt); pkg.WriteInt(action.Type); pkg.WriteInt(action.Param1); pkg.WriteInt(action.Param2); pkg.WriteInt(action.Param3); pkg.WriteInt(action.Param4); } data.SetRunTime((int)bomb.RunTime); } } player.CurrentGame.SendToAll(pkg); data.FireLogin = false; if (data.Bombs || data.Players[player].State == TankGameState.DEAD) { data.TotalDelay += data.CurrentBall.Delay; process.SendArk(player.CurrentGame, player); player.PropInventory.AddItemTemplate(PropItemMgr.GetRandomFightProp(data.MapIndex)); data.Players[player].SetDander(20); process.SendPlayFinish(player.CurrentGame, player); //GSPacketIn pkgMsg = new GSPacketIn((byte)ePackageType.GAME_CMD); //pkgMsg.WriteByte((byte)TankCmdType.PLAYFINISH); //pkgMsg.WriteInt(player.CurrentGame.Data.TurnNum); //player.CurrentGame.SendToAll(pkgMsg); } return true; } return false; }
internal void SendLivingUpdateDirection(Living living) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD); pkg.Parameter1 = living.Id; pkg.WriteByte((byte)eTankCmdType.DIRECTION); pkg.WriteInt(living.Direction); SendToAll(pkg); }