Exemple #1
0
        public static void ProcessDeleteChar(Client client, PacketReader packetReader)
        {
            var uid = packetReader.ReadMuid();
            var index = packetReader.ReadInt32();
            var name = packetReader.ReadString();
            var result = Results.Accepted;

            if (uid != client.GetMuid() || !Globals.AcceptedString.IsMatch(name) || index < 0 || index > 4)
            {
                client.Disconnect();
                return;
            }

            var cid = Globals.GunzDatabase.GetCid(client.ClientPlayer.PlayerAccount.AccountId, index);
            if (cid == 0)
            {
                result = Results.CharacterDeleteDisabled;
            }
            else
            {
                Globals.GunzDatabase.DeleteCharacter(client.ClientPlayer.PlayerAccount.AccountId, cid);
            }

            Match.ResponseDeleteCharacter(client, result);
        }
Exemple #2
0
        public override void OnGameKill(Client killer, Client victim)
        {
            if (killer == CurrentBerserker && CurrentStage.GetTraits().Name.ToLower().Contains("[sb]"))
            {
                lock (CurrentStage.ObjectLock)
                {
                    Battle.AssignBerserker(CurrentStage.GetTraits().Players, CurrentBerserker.GetMuid());
                }
            }

            if (victim == CurrentBerserker || CurrentBerserker == null)
            {
                lock (CurrentStage.ObjectLock)
                {
                    CurrentBerserker = killer;
                    Battle.AssignBerserker(CurrentStage.GetTraits().Players, CurrentBerserker.GetMuid());
                }
            }

            if (killer.ClientPlayer.PlayerStats.Kills == CurrentStage.GetTraits().RoundCount)
            {
                GameInProgress = false;
                ItemSpawns.Abort();
                GameOver();
            }
            else
            {
                Spawn(victim, 5);
            }
        }
Exemple #3
0
        public static void ProcessCreateChar(Client client, PacketReader packetReader)
        {
            var uid = packetReader.ReadMuid();
            var index = packetReader.ReadInt32();
            var name = packetReader.ReadString();
            var sex = packetReader.ReadInt32();
            var hair = packetReader.ReadInt32();
            var face = packetReader.ReadInt32();
            var costume = packetReader.ReadInt32();
            var result = Results.Accepted;

            if (uid != client.GetMuid() || index < 0 || index > 4 || sex < 0 || sex > 1)
            {
                client.Disconnect();
                return;
            }

            if (!Globals.AcceptedString.IsMatch(name))
                result = Results.CharacterEnterName;
            else if (Globals.GunzDatabase.GetCharacterCount(client.ClientPlayer.PlayerAccount.AccountId) >= 4)
                result = Results.CharacterNameNonExistant;
            else if (Globals.GunzDatabase.CharacterExists(name))
                result = Results.CharacterNameInUse;
            else if (!Globals.GunzDatabase.CreateCharacter(client.ClientPlayer.PlayerAccount.AccountId, (byte)index, name, sex, hair, face, costume))
                result = Results.CharacterInvalidName;

            Match.ResponseCreateChar(client, result, name);
        }
Exemple #4
0
        public virtual void GameKillCallback(Client killer, Client victim)
        {
            victim.ClientPlayer.PlayerStats.Spawned = false;
            if (_gameType == ObjectStageGameType.Training)
            {
                var uids = new Pair<Muid, Muid>(killer.GetMuid(), victim.GetMuid());
                var args = new Pair<UInt32, UInt32>(0, 0);
                lock (CurrentStage.ObjectLock)
                {
                    Battle.GameDie(CurrentStage.GetTraits().Players, uids, args);
                }
            }
            else
            {
                if (killer != victim)
                {
                    var exp = ExpManager.GetExpFromKill(killer.GetCharacter().Level,
                                                        victim.GetCharacter().Level);

                    killer.GetCharacter().Xp += exp;

                    var uids = new Pair<Muid, Muid>(killer.GetMuid(), victim.GetMuid());
                    var args = new Pair<UInt32, UInt32>((exp << 16), 0);
                    lock (CurrentStage.ObjectLock)
                    {
                        Battle.GameDie(CurrentStage.GetTraits().Players, uids, args);

                        //killer.GetCharacter().Level =
                          //  (Int16) ExpManager.GetLevel((Int32) killer.GetCharacter().Xp);
                        Log.Write("Exp Gained: {0} | Exp To Next Level: {1} | Current Exp: {2}", exp, ExpManager.GetExp(killer.GetCharacter().Level + 1), killer.GetCharacter().Xp);
                        if (ExpManager.Level(killer.GetCharacter().Level,
                                             killer.GetCharacter().Xp))
                        {
                            killer.GetCharacter().Level++;
                            Battle.GameLevelUp(CurrentStage.GetTraits().Players, killer.GetMuid(),
                                               killer.GetCharacter().Level);
                            EventManager.AddCallback(
                                () =>
                                Globals.GunzDatabase.UpdateLevel(killer.GetCharacter().CharacterId,
                                                     killer.GetCharacter().Xp,
                                                     killer.GetCharacter().Level));
                        }
                    }

                    killer.ClientPlayer.PlayerStats.Kills++;
                    victim.ClientPlayer.PlayerStats.Deaths++;

                    if (killer.ClientPlayer.PlayerStats.Kills%20 == 0)
                    {
                        EventManager.AddCallback(
                            () =>
                            Globals.GunzDatabase.UpdateLevel(killer.GetCharacter().CharacterId,
                                                 killer.GetCharacter().Xp,
                                                 killer.GetCharacter().Level));
                    }
                }
            }
            OnGameKill(killer, victim);
        }
Exemple #5
0
        public static void LadderPrepare(Client client, int teamNumber)
        {
            using (var packet = new PacketWriter(Operation.LadderPrepare, CryptFlags.Encrypt))
            {
                packet.Write(client.GetMuid());
                packet.Write(teamNumber);

                client.Send(packet);
            }
        }
Exemple #6
0
        public static void ResponseBridgePeer(Client client)
        {
            using (var packet = new PacketWriter(Operation.BridgeResponse, CryptFlags.Decrypt))
            {
                packet.Write(client.GetMuid());
                packet.Write((Int32)Results.Accepted);

                client.Send(packet);
            }
        }
Exemple #7
0
        public static void Announce(Client client, string message)
        {
            using (var packet = new PacketWriter(Operation.AdminAnnounce, CryptFlags.Decrypt))
            {
                packet.Write(client.GetMuid());
                packet.Write(message);
                packet.Write(0);

                TcpServer.GlobalPacket(packet);
            }
        }
        public override void OnInitialStart()
        {
            var traits = CurrentStage.GetTraits();
            var rand = new Random();
            var red = traits.Players.FindAll(c => c.ClientPlayer.PlayerTeam == Team.Red);
            var blue = traits.Players.FindAll(c => c.ClientPlayer.PlayerTeam == Team.Blue);

            RedVip = red[rand.Next(red.Count)];
            BlueVip = blue[rand.Next(blue.Count)];

            Battle.AssignVips(traits.Players, RedVip.GetMuid(), BlueVip.GetMuid());

            new Thread(ItemThread).Start();
        }
Exemple #9
0
        public static void AskAgreement(List<Client> clients, Client proposer, int mode, int request)
        {
            using (var packet = new PacketWriter(Operation.MatchAskAgreement, CryptFlags.Encrypt))
            {
                packet.Write(proposer.GetMuid());

                packet.Write(clients.Count+1, 32);
                clients.ForEach(c => packet.Write(c.GetCharacter().Name, 32));
                packet.Write(proposer.GetCharacter().Name, 32);
                packet.Write(mode);
                packet.Write(request);

                clients.ForEach(c => c.Send(packet));
            }
        }
Exemple #10
0
        public override void GameInfoCallback(Client client)
        {
            var traits = CurrentStage.GetTraits();

            lock (CurrentStage.ObjectLock)
            {
                Battle.BattleResponseInfo(client, Scores[0], Scores[1], traits.Players);
            }

            client.ClientPlayer.PlayerStats.Spawned = true;
            client.ClientPlayer.PlayerStats.RequestedInfo = true;

            if (client.ClientPlayer.PlayerStats.LateJoined)
            {
                lock (CurrentStage.ObjectLock)
                {
                    if (traits.DuelQueue.Challenger != null)
                    {
                        traits.DuelQueue.AddToQueue(client);
                        var players = traits.DuelQueue.Clone();
                        Battle.DuelQueue(client, players, (byte)traits.DuelQueue.WaitQueue.Count,
                            traits.DuelQueue.Victories, true);
                        Battle.SetObserver(traits.Players, client.GetMuid());
                    }
                    else
                    {

                        var players = traits.DuelQueue.Clone();
                        players.Add(client);
                        Battle.DuelQueue(client, players, (byte)(traits.DuelQueue.WaitQueue.Count+1), traits.DuelQueue.Victories);

                        traits.DuelQueue.Challenger = client;
                        players = traits.DuelQueue.Clone();
                        Battle.DuelQueue(traits.Players, players, traits.DuelQueue.QueueLength,
                            traits.DuelQueue.Victories, true);
                        ThreadPool.QueueUserWorkItem(StartNextRound);
                    }
                }
            }
            ProcessRoundState();
        }
Exemple #11
0
        private void ProcessRound(object o)
        {
            var traits = CurrentStage.GetTraits();

            Log.Write("Starting new round.");
            lock (CurrentStage.ObjectLock)
            {

                GameInProgress = true;
                if (traits.Time > 0)
                {
                    GameTimer = new Timer();
                    GameTimer.Interval = TimeSpan.FromMinutes(traits.Time).TotalMilliseconds;
                    GameTimer.Elapsed += (s, a) => OnRoundEnd();
                    GameTimer.Enabled = true;
                }

                traits.Players.ForEach(delegate(Client c)
                                           {
                                               c.ClientPlayer.PlayerStats.Spawned = false;
                                               c.ClientPlayer.PlayerStats.Entered = false;
                                               c.ClientPlayer.PlayerStats.RequestedInfo = false;
                                           });

                traits.Round = RoundState.Countdown;
                Battle.StageRoundUpdate(traits.Players, traits.StageId, traits.CurrentRound, traits.Round);

                Thread.Sleep(TimeSpan.FromSeconds(3));

                traits.Round = RoundState.Play;
                Battle.StageRoundUpdate(traits.Players, traits.StageId, traits.CurrentRound, traits.Round);
                traits.Players.ForEach(delegate(Client c)
                                           {
                                               c.ClientPlayer.PlayerStats.Spawned = true;
                                               c.ClientPlayer.PlayerStats.InGame = true;
                                           });

                var rand = new Random();
                var red = traits.Players.FindAll(c => c.ClientPlayer.PlayerTeam == Team.Red);
                var blue = traits.Players.FindAll(c => c.ClientPlayer.PlayerTeam == Team.Blue);

                RedVip = red[rand.Next(red.Count)];
                BlueVip = blue[rand.Next(blue.Count)];

                Battle.AssignVips(traits.Players, RedVip.GetMuid(), BlueVip.GetMuid());

                if (!_killThread)
                {
                    _killThread = true;
                    while (_killThread)
                    {
                        Thread.Sleep(1);
                    }
                }

                _killThread = false;
                new Thread(ItemThread).Start();
            }
        }
        public static void ResponseLeave(Client client, Muid channel)
        {
            using (var packet = new PacketWriter(Operation.ChannelLeave, CryptFlags.Encrypt))
            {
                packet.Write(client.GetMuid());
                packet.Write(channel);

                client.Send(packet);
            }
        }
Exemple #13
0
        public virtual void GameLoadedCallback(Client client)
        {
            lock (_stage.ObjectLock)
            {
                Battle.LoadingComplete(CurrentStage.GetTraits().Players, client.GetMuid());
            }

            if (_stage.GetTraits().Master != client)
                client.ClientPlayer.PlayerState = ObjectStageState.NonReady;

            client.ClientPlayer.PlayerStats.InGame = true;
            client.ClientPlayer.PlayerStats.Loaded = true;
            client.ClientPlayer.PlayerLocation = Place.Battle;
            ProcessRoundState();
        }
Exemple #14
0
        public static void ResponseStageJoin(Client client, Results result)
        {
            using (var packet = new PacketWriter(Operation.StageJoin, CryptFlags.Encrypt))
            {
                packet.Write(client.GetMuid());
                packet.Write(client.GetStage().GetTraits().StageId);
                packet.Write(client.GetStage().GetTraits().StageIndex);
                packet.Write(client.GetStage().GetTraits().Name);

                client.Send(packet);
            }
        }
Exemple #15
0
        public static void ProcessLoginRequest(Client client, PacketReader packetReader)
        {
            var user = packetReader.ReadString();
            var pass = packetReader.ReadString();
            var version = packetReader.ReadInt32();
            var checksum = packetReader.ReadInt32();
            var totalSize = packetReader.ReadInt32();
            var blobSize = packetReader.ReadInt32();
            var blobCount = packetReader.ReadInt32();
            var md5 = new byte[blobSize*blobCount];

            packetReader.Read(md5, 0, blobSize);

            if (blobSize > 32)
            {
                client.Disconnect();
                return;
            }

            if (!Globals.AcceptedString.IsMatch(user) || !Globals.AcceptedString.IsMatch(pass))
            {
                Match.ResponseLogin(client, Results.LoginAuthenticationFailed, user, UGradeId.Guest, PGradeId.Free, new Muid(0,0));
                client.Disconnect();
                return;
            }

            if (Globals.Config.Server.AutoRegistration)
            {
                if (user.StartsWith("!r"))
                {
                    user = user.Substring(2);
                    if (!Globals.GunzDatabase.AccountExists(user))
                        Globals.GunzDatabase.CreateAccount(user, pass, ref client.ClientPlayer.PlayerAccount);
                    else
                    {
                        Match.ResponseNotify(client, "That account is already in use!", 1);
                        client.Disconnect();
                        return;
                    }
                }
                else
                    Globals.GunzDatabase.GetAccount(user, pass, ref client.ClientPlayer.PlayerAccount);
            }
            else
                Globals.GunzDatabase.GetAccount(user, pass, ref client.ClientPlayer.PlayerAccount);

            if (client.ClientPlayer.PlayerAccount.AccountId == 0)
            {
                Match.ResponseLogin(client, Results.LoginIncorrectPassword, user, UGradeId.Guest, PGradeId.Free, new Muid(0, 0));
                client.Disconnect();
                return;
            }

            if (client.ClientPlayer.PlayerAccount.Access == UGradeId.Banned || client.ClientPlayer.PlayerAccount.Access == UGradeId.Criminal)
            {
                Match.ResponseLogin(client, Results.LoginBannedId, user, UGradeId.Guest, PGradeId.Free, new Muid(0, 0));
                client.Disconnect();
                return;
            }

            if (version != Globals.Config.Client.Version)
            {
                Match.ResponseLogin(client, Results.LoginInvalidVersion, user, UGradeId.Guest, PGradeId.Free, new Muid(0, 0));
                return;
            }

            if (Globals.Config.Client.UseCrc)
            {
                if ((checksum^0) != Globals.Config.Client.FileList)
                {
                    Match.ResponseLogin(client, Results.LoginInvalidVersion, user, UGradeId.Guest, PGradeId.Free, new Muid(0, 0));
                    client.Disconnect();
                    return;
                }
            }

            var inuse = TcpServer.GetClientFromAid(client.ClientPlayer.PlayerAccount.AccountId);

            if (inuse != null && inuse != client)
            {
                inuse.Disconnect();
            }

            client.ClientFlags = PacketFlags.Login;
            Match.ResponseLogin(client, Results.Accepted, user, client.ClientPlayer.PlayerAccount.Access, PGradeId.Free, client.GetMuid());
        }
Exemple #16
0
 public void PlayerState(Client client)
 {
     lock (ObjectLock)
         StagePackets.ResponsePlayerState(_traits.Players, client.GetMuid(), _traits.StageId, client.ClientPlayer.PlayerState);
 }
Exemple #17
0
        public static void ProcessCreateClan(Client client, PacketReader packetReader)
        {
            var masterId = packetReader.ReadMuid();
            var reqeuest = packetReader.ReadInt32();
            var clanName = packetReader.ReadString();
            var member1 = packetReader.ReadString();
            var member2 = packetReader.ReadString();
            var member3 = packetReader.ReadString();
            var member4 = packetReader.ReadString();

            var members = new List<Client>();
            members.Add(TcpServer.GetClientFromName(member1));
            members.Add(TcpServer.GetClientFromName(member2));
            members.Add(TcpServer.GetClientFromName(member3));
            members.Add(TcpServer.GetClientFromName(member4));

            if (!Globals.AcceptedString.IsMatch(clanName))
            {
                return;
            }

            if (Globals.GunzDatabase.ClanExists(clanName))
            {
                ClanPackets.ResponseCreateClan(client, Results.ClanNameInUse, reqeuest);
                return;
            }

            foreach (var member in members)
            {
                if (member == null || Globals.GunzDatabase.IsInClan(member))
                {
                    ClanPackets.ResponseCreateClan(client, Results.ClanUserAlreadyInAClan, reqeuest);
                    return;
                }
            }

            var pendingClan = new PendingClan();
            pendingClan.ClanMaster = client;
            pendingClan.ClanName = clanName;
            pendingClan.RequestId = reqeuest;
            pendingClan.Member1 = new Pair<Client, bool>(members[0], false);
            pendingClan.Member2 = new Pair<Client, bool>(members[1], false);
            pendingClan.Member3 = new Pair<Client, bool>(members[2], false);
            pendingClan.Member4 = new Pair<Client, bool>(members[3], false);

            lock (Globals.PendingClans)
                Globals.PendingClans.Add(pendingClan);

            ClanPackets.ResponseCreateClan(client, Results.Accepted, reqeuest);
            ClanPackets.AskAgreement(members, reqeuest, clanName, client.GetMuid(), client.GetCharacter().Name);

            var responsetimer = new Timer(30000);
            responsetimer.Elapsed += (s, o) => CancelRequest(client, pendingClan, responsetimer);
            responsetimer.Start();
        }
Exemple #18
0
        public override void GameLeaveBattle(Client client)
        {
            lock (CurrentStage.ObjectLock)
            {
                client.ClientPlayer.PlayerStats = new GameStats();
                Battle.LeaveBattle(CurrentStage.GetTraits().Players, client.GetMuid());

                if (client == CurrentStage.GetTraits().DuelQueue.Champion || client == CurrentStage.GetTraits().DuelQueue.Challenger)
                {
                    var traits = CurrentStage.GetTraits();

                    if (traits.DuelQueue.Challenger == client)
                    {
                        if (traits.DuelQueue.WaitQueue.Count > 0)
                        {
                            traits.DuelQueue.NewChallenger();
                        }
                        else
                        {
                            traits.DuelQueue.Challenger = null;
                        }
                        if (traits.DuelQueue.Victories % 10 == 0 && traits.DuelQueue.Victories > 0)
                            Battle.UpdateDuelStreak(traits.DuelQueue.Champion.GetCharacter().Name, traits.DuelQueue.Champion.ClientPlayer.PlayerChannel.GetTraits().ChannelName, traits.StageIndex, traits.DuelQueue.Victories);
                    }
                    else
                    {
                        if (traits.DuelQueue.Victories % 10 == 0 && traits.DuelQueue.Victories > 0)
                            Battle.EndDuelStreak(traits.DuelQueue.Champion.GetCharacter().Name, traits.DuelQueue.Challenger.GetCharacter().Name, traits.DuelQueue.Victories);
                        traits.DuelQueue.NewChampion();
                    }

                    ThreadPool.QueueUserWorkItem(StartNextRound);
                    return;
                }

                CurrentStage.GetTraits().DuelQueue.RemovePlayer(client);
                var players = CurrentStage.GetTraits().DuelQueue.Clone();
                Battle.DuelQueue(CurrentStage.GetTraits().Players, players, (byte)CurrentStage.GetTraits().DuelQueue.WaitQueue.Count,
                                 CurrentStage.GetTraits().DuelQueue.Victories);
            }

            base.GameLeaveBattle(client);
        }
Exemple #19
0
        protected void Spawn(Client client, int sleep = 0)
        {
            if (sleep > 0)
                Thread.Sleep(sleep * 1000);
            var map = _stage.GetTraits().CurrentMap;
            var r = new Random();
            var index = r.Next(1, map.Deathmatch.Count);

            var coords = map.Deathmatch[index];

            lock (_stage.ObjectLock)
            {
                Battle.GameSpawn(CurrentStage.GetTraits().Players, client.GetMuid(), coords.First, coords.Second);
            }
        }
Exemple #20
0
        public static void ResponseNotify(Client client, string message, Int32 type = 0)
        {
            using (var packet = new PacketWriter(Operation.AdminAnnounce, CryptFlags.Encrypt))
            {
                packet.Write(client.GetMuid());
                packet.Write(message);
                packet.Write(type);

                client.Send(packet);
            }
        }
Exemple #21
0
        public static void ProcessObtainWorldItem(Client client, PacketReader packet)
        {
            var uidChar = packet.ReadMuid();
            var nItem = packet.ReadInt32();

            lock (client.GetStage().GetTraits().CurrentMap)
            {
                var i =
                    client.GetStage().GetTraits().CurrentMap.DeathMatchItems.Find(
                        ii => ii.ItemUid == nItem);

                if (i != null)
                {
                    i.Taken = true;
                    i.NextSpawn = DateTime.Now.AddSeconds(i.SpawnTime);
                    Log.Write("Spawning item: {0}. Next Spawn: {1}", i.ItemId, DateTime.Now.AddSeconds(i.SpawnTime / 1000));
                }
                else
                {
                    lock (client.GetStage().GetTraits().WorldItems)
                    {
                        i = client.GetStage().GetTraits().WorldItems.Find(ii => ii.ItemUid == nItem);

                        if (i != null)
                        {
                            client.GetStage().GetTraits().WorldItems.Remove(i);
                        }
                        else
                        {
                            return;
                        }
                    }
                }

                lock (client.GetStage().ObjectLock)
                    Battle.ObtainWorldItem(client.GetStage().GetTraits().Players,
                                           client.GetMuid(), nItem);
            }
        }
Exemple #22
0
        public static void ProcessGameSpawn(Client client, PacketReader packetReader)
        {
            var uid = packetReader.ReadUInt64();
            var xpos = packetReader.ReadSingle();
            var ypos = packetReader.ReadSingle();
            var zpos = packetReader.ReadSingle();
            var xdir = packetReader.ReadSingle();
            var ydir = packetReader.ReadSingle();
            var zdir = packetReader.ReadSingle();

            if (client.GetStage() != null)
            {
                var traits = client.GetStage().GetTraits();

                if (traits.Ruleset.IsDuel())
                {
                    if (traits.DuelQueue.Challenger != client && traits.DuelQueue.Champion != client)
                        return;
                }
                if (traits.Ruleset.IsTeam())
                    return;

                var position = new Position();
                var direction = new Direction();

                position.X = xpos;
                position.Y = ypos;
                position.Z = zpos;

                direction.X = xdir;
                direction.Y = ydir;
                direction.Z = zdir;
                lock (client.GetStage().ObjectLock)
                {
                    Battle.GameSpawn(client.GetStage().GetTraits().Players, client.GetMuid(),
                                     position, direction);
                }
            }
        }
Exemple #23
0
        public static void ResponseObjectCacheExclusive(List<Client> clients, ObjectCache cache, Client player)
        {
            using (var packet = new PacketWriter(Operation.MatchObjectCache, CryptFlags.Encrypt))
            {
                packet.Write((byte) cache);
                packet.Write(1, 176);

                packet.Write(0);
                packet.Write(player.GetMuid());
                packet.Write(player.GetCharacter().Name, 32);
                packet.Write(player.GetCharacter().ClanName, 16);
                packet.Write((Int32) player.GetCharacter().Level);
                packet.Write((Int32) player.ClientPlayer.PlayerAccount.Access);
                packet.Write(0);
                packet.Write(0);
                packet.Write(player.GetCharacter().ClanId);
                packet.Write(0);
                packet.Write((Int32) player.GetCharacter().Sex);
                packet.Write(player.GetCharacter().Hair);
                packet.Write(player.GetCharacter().Face);
                packet.Write((Int16) 0);

                foreach (var item in player.GetCharacter().EquippedItems)
                {
                    packet.Write(item.ItemId);
                }

                packet.Write(player.GetCharacter().Rank); //rank
                packet.Write(player.GetCharacter().Kills); //kill
                packet.Write(player.GetCharacter().Deaths); //death
                packet.Write(player.GetCharacter().DuelRank); //duel

                clients.ForEach(c => c.Send(packet));

            }
        }
Exemple #24
0
        public static void RequestJoin(Client client, Client target, string clanName)
        {
            using (var packet = new PacketWriter(Operation.MatchClanAskJoinAgreement, CryptFlags.Encrypt))
            {
                packet.Write(clanName);
                packet.Write(client.GetMuid());
                packet.Write(client.GetCharacter().Name);

                target.Send(packet);
            }
        }
Exemple #25
0
 public void Team(Client client)
 {
     lock (ObjectLock)
         StagePackets.ResponseStageTeam(_traits.Players, client.GetMuid(), _traits.StageId,
                                        client.ClientPlayer.PlayerTeam);
 }
Exemple #26
0
        public virtual void GameLeaveBattle(Client client)
        {
            lock (_stage.ObjectLock)
            {
                Globals.GunzDatabase.UpdateLevel(client.GetCharacter().CharacterId, client.GetCharacter().Xp, client.GetCharacter().Level);
                client.ClientPlayer.PlayerStats.Reset();

                Battle.LeaveBattle(CurrentStage.GetTraits().Players, client.GetMuid());

                var traits = _stage.GetTraits();
                if (traits.Players.FindAll(c => !c.GetGameStats().InGame).Count == traits.Players.Count)
                {
                    traits.State = StageState.Standby;

                    foreach (var c in _stage.GetTraits().Players)
                    {
                        c.ClientPlayer.PlayerStats = new GameStats();

                        if (c != traits.Master)
                            client.ClientPlayer.PlayerState = ObjectStageState.NonReady;
                    }

                    if (_gameType == ObjectStageGameType.DeathMatch && (this as Deathmatch).ItemSpawns != null)
                        (this as Deathmatch).ItemSpawns.Abort();
                    else if (_gameType == ObjectStageGameType.Berserker && (this as Berserker).ItemSpawns != null)
                        (this as Berserker).ItemSpawns.Abort();
                    else if (_gameType == ObjectStageGameType.TeamDeathMatchExtreme && (this as TeamDeathmatchExtreme).ItemSpawns != null)
                        (this as TeamDeathmatchExtreme).ItemSpawns.Abort();

                    _stage.GetTraits().Players.ForEach(c => StagePackets.ResponseSettings(_stage.GetTraits().Players, _stage.GetTraits()));
                }
            }
        }
Exemple #27
0
        public static void ProcessStageCreate(Client client, PacketReader packetReader)
        {
            var uid = packetReader.ReadMuid();
            var name = packetReader.ReadString();
            var locked = packetReader.ReadBoolean();
            var password = packetReader.ReadString();

            if (uid != client.GetMuid())
            {
                client.Disconnect();
                return;
            }

            var traits = new StageTraits();
            traits.StageId = Globals.StageCounter.GetNext();
            traits.Name = name;
            traits.Locked = locked;
            traits.Password = password;
            traits.Master = client;

            client.ClientPlayer.PlayerStage = client.GetChannel().Add(traits);
            client.GetStage().Join(client);
        }
Exemple #28
0
 public void Chat(Client client, string message)
 {
     lock(ObjectLock)
        StagePackets.ResponseStageChat( _traits.Players, client.GetMuid(), _traits.StageId, message);
     Settings(client,true);
 }
Exemple #29
0
        public static void GameEnterBattle(List<Client> clients, Client client)
        {
            var stage = client.GetStage().GetTraits();

            using (var packet = new PacketWriter(Operation.StageEnterBattle, CryptFlags.Encrypt))
            {
                if (stage.State == StageState.Standby)
                    packet.Write((byte)0);
                else
                    packet.Write((byte)1);

                //really hate constants :(.
                packet.Write(1, 394);
                packet.Write(client.GetMuid());

                if (client.PeerEnd == null)
                {
                    packet.Write(new byte[4], 0, 4);
                    packet.Write(0);
                }
                else
                {
                    packet.Write(client.PeerEnd.Address.GetAddressBytes(), 0, 4);
                    packet.Write(client.PeerEnd.Port);
                }

                packet.Write(client.GetCharacter().Name, 32);
                packet.Write(client.GetCharacter().ClanName, 16);
                packet.Write((Int32)client.GetCharacter().ClanGrade);//clan rank
                packet.Write(client.GetCharacter().ClanPoint);//clan points
                packet.Write((byte)0);//?
                packet.Write(client.GetCharacter().Level);
                packet.Write(client.GetCharacter().Sex);
                packet.Write(client.GetCharacter().Hair);
                packet.Write(client.GetCharacter().Face);
                packet.Write(client.GetCharacter().Xp);
                packet.Write(client.GetCharacter().Bp);
                packet.Write(client.GetCharacter().BonusRate);
                packet.Write(client.GetCharacter().Prize);
                packet.Write(client.GetCharacter().Hp);
                packet.Write(client.GetCharacter().Ap);
                packet.Write(client.GetCharacter().MaxWeight);
                packet.Write(client.GetCharacter().SafeFalls);
                packet.Write(client.GetCharacter().Fr);
                packet.Write(client.GetCharacter().Cr);
                packet.Write(client.GetCharacter().Er);
                packet.Write(client.GetCharacter().Wr);
                foreach (Item nItem in client.GetCharacter().EquippedItems)
                    packet.Write(nItem.ItemId);

                packet.Write((Int32)client.ClientPlayer.PlayerAccount.Access);
                packet.Write(client.GetCharacter().ClanId);
                packet.Write(client.GetCharacter().DuelRank); // duel tourney

                byte[] obfuscation = new byte[] {
                    0x00, 0x00, 0x00, 0x00,  //head
                    0x79, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //chest
                    0x7B, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //hands
                    0x6E, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //legs
                    0x6D, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //feet
                    0x6C, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //fingerL
                    0x49, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //fingerR
                    0x48, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //melee
                    0x4B, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //primary
                    0x72, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //secondary
                    0x4C, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //custom1
                    0x7F, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //custom2
                    0x4A, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //avatar
                    0x80, 0xF5, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //community1
                    0x00, 0x00, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //community2
                    0x00, 0x00, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //long buff1
                    0x00, 0x00, 0x00, 0x00,

                    0x00, 0x00, 0x00, 0x00, //long buff2
                    0x00, 0x00, 0x00, 0x00,

                    0x01, 0x00, 0x00, 0x00, //head quantity

                    0x01, 0x00, 0x00, 0x00, //chest quantity

                    0x01, 0x00, 0x00, 0x00, //hands quantity

                    0x01, 0x00, 0x00, 0x00, //legs quantity

                    0x01, 0x00, 0x00, 0x00, //feet quantity

                    0x01, 0x00, 0x00, 0x00, //fingerL quantity

                    0x01, 0x00, 0x00, 0x00, //fingerR quantity

                    0x01, 0x00, 0x00, 0x00, //melee quantity

                    0x01, 0x00, 0x00, 0x00, //primary quantity

                    0x01, 0x00, 0x00, 0x00, //secondary quantity

                    0x4C, 0x00, 0x00, 0x00, //custom1 quantity

                    0x01, 0x00, 0x00, 0x00, //custom2 quantity

                    0x01, 0x00, 0x00, 0x00, //vatar quantity

                    0x00, 0x00, 0x00, 0x00, //community1 quantity

                    0x00, 0x00, 0x00, 0x00, //community2 quantity

                    0x00, 0x00, 0x00, 0x00, //longbuff1 quantity

                    0x00, 0x00, 0x00, 0x00 //longbuff2 quantity
                };
                packet.Write(obfuscation);

                packet.Write((byte)client.ClientPlayer.PlayerTeam);
                packet.Write((byte)0);
                packet.Write((Int16)0);
                clients.ForEach(c => c.Send(packet));

            }
        }
Exemple #30
0
        public void Leave(Client client)
        {
            lock (ObjectLock)
            {
                client.ClientPlayer.PlayerLocation = Place.Lobby;
                client.ClientFlags = PacketFlags.Character;
                client.ClientPlayer.PlayerStage = null;

                StagePackets.ResponseStageLeave(_traits.Players, client.GetMuid());
                _traits.Players.Remove(client);

                if (_traits.Players.Count == 0)
                {
                    if (Globals.NatAgent != null)
                    {
                        AgentPackets.ReleaseStageToAgent(Globals.NatAgent, _traits.StageId);
                        Log.Write("Released stage: {0} from NAT Server", _traits.Name);
                    }

                    var channel = ChannelList.Find(this);
                    if (channel != null)
                    {
                        channel.Remove(this);
                        channel.Refresh();
                    }
                    return;
                }

                if (_traits.Master == client)
                    _traits.Master = _traits.Players[0];

                StagePackets.ResponseObjectCache(_traits.Players, ObjectCache.New, _traits.Players);
                StagePackets.ResponseStageMaster(_traits.Players, this);
                StagePackets.ResponseSettings(_traits.Players, _traits);

                StagePackets.ResponseStageMaster(_traits.Players, this);
                Channel.Refresh(client);
            }
        }