当前位置: 首页>>代码示例>>C#>>正文


C# Packet.WriteStringBuffer方法代码示例

本文整理汇总了C#中Packet.WriteStringBuffer方法的典型用法代码示例。如果您正苦于以下问题:C# Packet.WriteStringBuffer方法的具体用法?C# Packet.WriteStringBuffer怎么用?C# Packet.WriteStringBuffer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Packet的用法示例。


在下文中一共展示了Packet.WriteStringBuffer方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Join

        public void Join(Player plr)
        {
            plr.Room = this;
            if (ServerType == EServerType.Game)
            {
                plr.ResetScore();
                plr.State = EPlayerState.Lobby;
            }
            _players.TryAdd(plr.Session.Guid, plr);

            if (ServerType != EServerType.Game) return;

            var ack = new Packet(EGamePacket.SEnterRoomSuccessAck);
            ack.Write(ID);
            ack.Write(MatchKey);
            ack.Write((uint)State);
            ack.Write((uint)TimeState);
            ack.Write(TimeLimit);

            var ts = DateTime.Now - StartTime;
            if(State == EGameRuleState.Waiting || State == EGameRuleState.Result)
                ack.Write((uint)0);
            else
                ack.Write((uint)ts.TotalMilliseconds); // time passed
            ack.Write(ScoreLimit);
            ack.Write(IsFriendly);
            ack.Write(IsBalanced);
            ack.Write(MinLevel);
            ack.Write(MaxLevel);
            ack.Write(EquipLimit);
            ack.Write(IsNoIntrusion);
            plr.Session.Send(ack);

            // Generate unique slot id!
            var slotID = 2;
            while (FindPlayerInSlot(slotID) != null)
                slotID++;
            plr.SlotID = (byte)slotID;

            ack = new Packet(EGamePacket.SIdsInfoAck);
            ack.Write(plr.SlotID);
            ack.Write(TunnelID);
            ack.Write((uint)0);
            plr.Session.Send(ack);

            ack = new Packet(EGamePacket.SPlayerEnteredAck);
            ack.Write((byte)0x00);
            ack.Write((byte)_players.Count);

            foreach (var player in _players.Values)
            {
                ack.Write(player.PrivateIP); // private ip
                ack.Write(player.PrivatePort); // private port
                ack.Write(player.PublicIP); // public ip
                ack.Write(player.PublicPort); // public port
                ack.Write(player.NATUnk);
                ack.Write(player.ConnectionType); // connection type | 6 relay
                ack.Write(player.AccountID);
                ack.Write(player.SlotID);
                ack.Write((uint)0);
                ack.Write((byte)0x01);
                ack.WriteStringBuffer(player.Nickname, 31);
            }
            Broadcast(ack);
        }
开发者ID:KingCrazy,项目名称:S115,代码行数:65,代码来源:Room.cs

示例2: Leave

        public void Leave(Player plr, byte leaveType = 0)
        {
            Packet ack;
            if (ServerType == EServerType.Game)
            {
                ack = new Packet(EGamePacket.SRoomPlayerLeave);
                ack.Write(plr.AccountID);
                ack.WriteStringBuffer(plr.Nickname, 31);
                ack.Write(leaveType); // leave reason | 1 = kick
                Broadcast(ack);

                ack = new Packet(EGamePacket.SPlayerLeaveAck);
                ack.Write(plr.AccountID);
                ack.Write(plr.SlotID);
                Broadcast(ack);
            }

            Player tmp;
            if (!_players.TryRemove(plr.Session.Guid, out tmp)) return;
            plr.IsReady = false;
            plr.State = EPlayerState.Lobby;
            plr.SlotID = 0;
            plr.Room = null;
            plr.Team = ETeam.Neutral;
            plr.GameMode = EPlayerGameMode.Normal;
            plr.ResetScore();

            if (_players.Count == 0)
            {
                Room roomTEMP;
                RoomCollection.TryRemove(TunnelID, out roomTEMP);

                if (Channel == null || ServerType != EServerType.Game) return;
                ack = new Packet(EGamePacket.SDisposeRoomAck);
                ack.Write(ID);
                Channel.Broadcast(ack);
                return;
            }

            if (ServerType != EServerType.Game) return;
            if (MasterID == plr.AccountID) // master left, we need a new one
            {
                MasterID = _players.First().Value.AccountID;
                ack = new Packet(EGamePacket.SRoomChangeRefereeAck);
                ack.Write(MasterID);
                Broadcast(ack);

                ack = new Packet(EGamePacket.SRoomChangeMasterAck);
                ack.Write(MasterID);
                Broadcast(ack);
            }

            if (State == EGameRuleState.Playing && ( (CountInTeam(ETeam.Alpha) == 0 || CountInTeam(ETeam.Beta) == 0) 
                || (CountInTeamPlaying(ETeam.Alpha) == 0 || CountInTeamPlaying(ETeam.Beta) == 0) ))
                BeginResult();
        }
开发者ID:KingCrazy,项目名称:S115,代码行数:56,代码来源:Room.cs

示例3: HandleRemoveDeny

        private void HandleRemoveDeny(TcpSession session, Packet p)
        {
            var accID = p.ReadUInt64();
            var nickname = p.ReadCStringBuffer(31);
            //_logger.Debug("-C_REMOVE_DENY_REQ- ID: {0} Nickname: {1}", accID, nickname);

            Player plr;
            if (!_players.TryGetValue(session.Guid, out plr))
            {
                session.StopListening();
                return;
            }

            var ack = new Packet(EChatPacket.SRemoveDenyAck);
            if (plr.DenyList.ContainsKey(accID))
            {
                plr.DenyList.Remove(accID);
                GameDatabase.Instance.RemoveDeny(plr.AccountID, accID);
                ack.Write((byte)EDenyResult.OK);
            }
            else
            {
                ack.Write((byte)EDenyResult.Failed2);
            }

            ack.Write(accID);
            ack.WriteStringBuffer(nickname, 31);
            session.Send(ack);

            SendDenyList(plr);
        }
开发者ID:KingCrazy,项目名称:S115,代码行数:31,代码来源:ChatServer.cs

示例4: HandleLoginRequest

 private static void HandleLoginRequest(TcpSession session, Packet p)
 {
     var serverList = AuthDatabase.Instance.GetServerList();
     var ack = new Packet(EAuthPacket.SServerlistAck);
     ack.Write((byte)serverList.Count);
     foreach (var server in serverList)
     {
         ack.Write(server.ID);
         ack.Write(server.Type);
         ack.WriteStringBuffer(server.Name, 40);
         ack.Write(server.PlayersOnline);
         ack.Write(server.PlayerLimit);
         ack.Write(server.IP.GetAddressBytes());
         ack.Write(server.Port);
     }
     session.Send(ack);
 }
开发者ID:KingCrazy,项目名称:S115,代码行数:17,代码来源:AuthServer.cs

示例5: HandleAddFriend

        private void HandleAddFriend(TcpSession session, Packet p)
        {
            var accID = p.ReadUInt64();
            var nickname = p.ReadCStringBuffer(31);
            //_logger.Debug("-C_ADD_FRIEND_REQ- ID: {0} Nickname: {1}", accID, nickname);

            Player plr;
            if (!_players.TryGetValue(session.Guid, out plr))
            {
                session.StopListening();
                return;
            }

            var ack = new Packet(EChatPacket.SAddFriendAck);
            ack.Write(accID);

            var plrToRequest = _players.GetPlayerByID(accID);
            if (plrToRequest == null)
            {
                ack.Write((byte)EAddFriendResult.DoenstExist);
            }
            else
            {
                var friend = plr.FriendList.FirstOrDefault(f => f.ID == accID);
                if (friend == null)
                {
                    plr.FriendList.Add(new Friend() { ID = accID, Nickname = nickname, Accepted = false });
                    GameDatabase.Instance.AddFriend(plr.AccountID, accID, nickname);

                    SendBRSFriendNotify(plr, plrToRequest, EFriendNotify.Request);

                    ack.Write((byte)EAddFriendResult.MadeRequest);
                }
                else
                {
                    if (friend.Accepted)
                        ack.Write((byte)EAddFriendResult.AlreadyInList);
                    else
                        ack.Write((byte)EAddFriendResult.AlreadyRequested);
                }
            }

            ack.WriteStringBuffer(nickname, 31);
            session.Send(ack);
        }
开发者ID:KingCrazy,项目名称:S115,代码行数:45,代码来源:ChatServer.cs

示例6: HandleChannelListRequest

        private void HandleChannelListRequest(TcpSession session, Packet p)
        {
            //_logger.Debug("-C_CHANLIST_REQ-");

            var ack = new Packet(EChatPacket.SChannelListAck);
            ack.Write((uint)_channels.Count);
            foreach (var chan in _channels.Values)
            {
                ack.Write((byte)chan.ID); // unk
                ack.Write((uint)chan.ID); // id??
                ack.WriteStringBuffer(chan.Name, 21, Encoding.ASCII);
            }
            session.Send(ack);
        }
开发者ID:KingCrazy,项目名称:S115,代码行数:14,代码来源:ChatServer.cs

示例7: SendDenyList

 private static void SendDenyList(Player plr)
 {
     var ack = new Packet(EChatPacket.SDenyListAck);
     ack.Write((uint)plr.DenyList.Count);
     foreach (var entry in plr.DenyList)
     {
         ack.Write(entry.Key);
         ack.WriteStringBuffer(entry.Value, 31);
     }
     plr.Session.Send(ack);
 }
开发者ID:KingCrazy,项目名称:S115,代码行数:11,代码来源:ChatServer.cs

示例8: HandleLoginRequest


//.........这里部分代码省略.........

                for (var j = 0; j < 3; j++)
                {
                    for (var n = 0; n < 3; n++)
                    {
                        ack.Write((byte)n);
                        ack.Write(character.Weapons[n]);
                    }

                    ack.Write((byte)0);
                    ack.Write(character.Skill);
                }

                for (var j = 0; j < 7; j++)
                {
                    ack.Write((byte)j);
                    ack.Write(character.Clothes[j]);
                }

                session.Send(ack);
            }

            #endregion

            #region Inventory

            ack = new Packet(EGamePacket.SInventoryAck);
            ack.Write((uint)player.Inventory.Count);
            foreach (var item in player.Inventory)
            {
                ack.Write(item.ID);
                ack.Write(item.Category);
                ack.Write(item.SubCategory);
                ack.Write(item.ItemID);
                ack.Write(item.ProductID);
                ack.Write(item.EffectID);
                ack.Write(item.SellPrice);
                ack.Write(item.PurchaseTime);
                ack.Write(item.ExpireTime);
                ack.Write(item.Energy);
                ack.Write(item.TimeLeft);
            }
            session.Send(ack);

            #endregion

            ack = new Packet(EGamePacket.SResultAck);
            ack.Write((uint)0x27);
            session.Send(ack);

            #region Account info

            ack = new Packet(EGamePacket.SBeginAccountInfoAck);
            ack.Write((byte)0x00);
            ack.Write((byte)player.Level);
            ack.Write((uint)(player.CalculateTotalEXP() + player.EXP));
            ack.Write((uint)0); // points??
            ack.Write((uint)(player.TutorialCompleted ? 3 : 0));
            ack.WriteStringBuffer(player.Nickname, 31);
            ack.Write((uint)0); // unk

            // dm stuff
            ack.Write(player.DMStats.Won); // wins?
            ack.Write(player.DMStats.Lost); // loses??
            ack.Write((uint)player.DMStats.CalculateWinRate() >> 1);
            ack.Write((uint)0);
            ack.Write((uint)0);
            ack.Write((uint)0);
            ack.Write((uint)0);
            ack.Write((uint)0);
            ack.Write((uint)0);

            // td score stuff
            ack.Write(player.TDStats.CalculateWinRate()); // wins??
            ack.Write(0); // loses?
            ack.Write(player.TDStats.TotalTouchdowns);
            ack.Write(20 * player.TDStats.TotalMatches);
            ack.Write(player.TDStats.TotalTouchdownAssists);
            ack.Write(player.TDStats.TotalKills);
            ack.Write(player.TDStats.TotalKillAssists);
            ack.Write(player.TDStats.TotalOffense);
            ack.Write(player.TDStats.TotalOffenseAssists);
            ack.Write(player.TDStats.TotalDefense);
            ack.Write(player.TDStats.TotalDefenseAssists);
            ack.Write(player.TDStats.TotalRecovery);

            ack.Write((uint)0); // Total / x / 2 ???
            ack.Write((uint)0); // unk, nothing happens
            ack.Write((uint)0); // super increase for total score??
            ack.Write((uint)0); // total score goes to 0??
            ack.Write((uint)0); // unk, nothing happens
            ack.Write((uint)0); // unk, nothing happens
            session.Send(ack);

            #endregion

            ack = new Packet(EGamePacket.SResultAck);
            ack.Write((uint)0x11);
            session.Send(ack);
        }
开发者ID:jacerrillo,项目名称:TempestCore,代码行数:101,代码来源:GameServer.cs

示例9: SendRoomList

 private void SendRoomList(TcpSession session)
 {
     var ack = new Packet(EGamePacket.SRoomListAck);
     ack.Write((ushort)Rooms.Count);
     foreach (var room in Rooms.Values)
     {
         ack.Write(room.ID);
         ack.Write(room.GetConnectingCount()); //connecting people count
         ack.Write((byte)room.Players.Count);
         ack.Write((byte)room.State);
         ack.Write(room.GetPing()); // ping
         ack.Write(room.MatchKey);
         ack.WriteStringBuffer(room.Name, 31);
         ack.Write(room.PublicType); // has pw
         ack.Write(room.TimeLimit);
         ack.Write(room.ScoreLimit);
         ack.Write(room.IsFriendly);
         ack.Write(room.IsBalanced);
         ack.Write(room.MinLevel);
         ack.Write(room.MaxLevel);
         ack.Write(room.EquipLimit);
         ack.Write(room.IsNoIntrusion);
     }
     session.Send(ack);
 }
开发者ID:jacerrillo,项目名称:TempestCore,代码行数:25,代码来源:GameServer.cs

示例10: HandlePlayerEntered

        private void HandlePlayerEntered(TcpSession session, Packet p)
        {
            //_logger.Debug("-SC_PLAYER_ENTERED-");

            Player player;
            if (!Players.TryGetValue(session.Guid, out player))
            {
                session.StopListening();
                return;
            }

            var room = player.Room;
            if (room == null)
                return;

            var ack = new Packet(EGamePacket.SRoomChangeRefereeAck);
            ack.Write(room.MasterID);
            session.Send(ack);

            ack = new Packet(EGamePacket.SRoomChangeMasterAck);
            ack.Write(room.MasterID);
            session.Send(ack);

            var numAlpha = room.CountInTeam(ETeam.Alpha);
            var numBeta = room.CountInTeam(ETeam.Beta);

            if (numAlpha < numBeta)
                player.Team = ETeam.Alpha;
            else if (numAlpha > numBeta)
                player.Team = ETeam.Beta;
            else
                player.Team = ETeam.Alpha;

            ack = new Packet(EGamePacket.SCRoomPlayerEnter);
            ack.Write(player.AccountID);
            ack.Write((byte)player.Team);
            ack.Write((byte)player.GameMode); // 1 normal, 2 specate
            ack.Write((uint)player.CalculateTotalEXP()); // exp
            ack.WriteStringBuffer(player.Nickname, 31);
            room.Broadcast(ack);

            room.BroadcastBriefing();
        }
开发者ID:jacerrillo,项目名称:TempestCore,代码行数:43,代码来源:GameServer.cs

示例11: HandleCreateRoom

        private void HandleCreateRoom(TcpSession session, Packet p)
        {
            Player player;
            if (!Players.TryGetValue(session.Guid, out player))
            {
                session.StopListening();
                return;
            }
            if (player.Channel == null || player.PublicIP == 0)
                return;

            var room = new Room(Rooms);
            var roomID = Rooms.CreateRoomID(player.Channel.ID);
            var tunnelID = Rooms.CreateTunnelID();

            room.MasterID = player.AccountID;
            room.ID = roomID;
            room.TunnelID = tunnelID;
            room.Channel = player.Channel;
            room.Name = p.ReadCStringBuffer(31);
            room.MatchKey = p.ReadBytes(4);
            room.TimeLimit = p.ReadByte();
            room.TimeLimit *= 60 * 1000;
            room.ScoreLimit = p.ReadByte();
            room.Unk = p.ReadInt32();
            room.Password = p.ReadUInt32();
            room.IsFriendly = p.ReadBoolean();
            room.IsBalanced = p.ReadBoolean();
            room.MinLevel = p.ReadByte();
            room.MaxLevel = p.ReadByte();
            room.EquipLimit = p.ReadByte();
            room.IsNoIntrusion = p.ReadBoolean();
            room.State = EGameRuleState.Waiting;

            var cont = _pluginManager.OnCreateRoom(player, room);
            Packet ack;
            //_logger.Debug("-CCreateRoom- MapID: {0} Mode: {1}", room.MapID, (int)room.GameRule);

            if (!GameDatabase.Instance.IsValidMapID(room.MapID))
            {
                Logger.Error("-CCreateRoom HAX- NOT ALLOWED MapID: {0} Mode: {1}", room.MapID, (int)room.GameRule);
                ack = new Packet(EGamePacket.SResultAck);
                ack.Write((uint)EServerResult.FailedToRequestTask);
                session.Send(ack);
                return;
            }

            if (room.GameRule != EGameRule.Touchdown && room.GameRule != EGameRule.Deathmatch && room.GameRule != EGameRule.Survival && cont)
            {
                ack = new Packet(EGamePacket.SResultAck);
                ack.Write((uint)EServerResult.FailedToRequestTask);
                session.Send(ack);
                return;
            }
            Rooms.TryAdd(tunnelID, room);


            ack = new Packet(EGamePacket.SDeployRoomAck);
            ack.Write(room.ID);
            ack.Write(room.MatchKey);
            ack.Write((byte)room.State);
            ack.Write(room.GetPing()); 
            ack.WriteStringBuffer(room.Name, 31);
            ack.Write(room.PublicType);
            ack.Write(room.TimeLimit);
            ack.Write(room.ScoreLimit);
            ack.Write(room.IsFriendly);
            ack.Write(room.IsBalanced);
            ack.Write(room.MinLevel);
            ack.Write(room.MaxLevel);
            ack.Write(room.EquipLimit);
            ack.Write(room.IsNoIntrusion);

            player.Channel.Broadcast(ack);

            room.Join(player);
        }
开发者ID:jacerrillo,项目名称:TempestCore,代码行数:77,代码来源:GameServer.cs


注:本文中的Packet.WriteStringBuffer方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。