예제 #1
0
        public void SendMessage(UInt16 Oid, string NameSender, string Text, SystemData.ChatLogFilters Filter)
        {
            if (Text.IndexOf("<LINK") >= 0 && Text.IndexOf("ITEM:") > 0)
            {
                int       Pos     = Text.IndexOf("ITEM:") + 5;
                int       LastPos = Text.IndexOf(" ", Pos) - 1;
                string    Value   = Text.Substring(Pos, LastPos - Pos);
                uint      ItemId  = uint.Parse(Value);
                Item_Info Info    = WorldMgr.GetItem_Info(ItemId);
                if (Info != null)
                {
                }
            }

            PacketOut Out = new PacketOut((byte)Opcodes.F_CHAT);

            Out.WriteUInt16(Oid);
            Out.WriteByte((byte)Filter);
            Out.Fill(0, 4);
            Out.WritePascalString(NameSender);
            Out.WriteByte(0);
            Out.WritePascalString(Text);
            Out.WriteByte(0);
            SendPacket(Out);
        }
예제 #2
0
        static public void F_CONNECT(Connection conn, PacketIn packet)
        {
            Log.Debug("F_CONNECT");
            packet.Skip(8);
            UInt32 Tag   = packet.GetUint32();
            string Token = packet.GetString(80);

            packet.Skip(21);
            string Username = packet.GetString(23);

            Log.Debug("New Connection : " + Token + ",User="******"Emulator");
            Out.WriteByte(0);
            Out.WriteUInt16(0);
            conn.SendTCP(Out);
        }
예제 #3
0
        public void SendCurrentStage(Player Plr)
        {
            PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECTIVE_INFO);

            Out.WriteUInt32(Info.Entry);
            Out.WriteByte(0);         // Type
            Out.WriteByte(Info.Type);
            Out.WriteByte(Info.Type); // Forteresse, rien du tout ,etc
            Out.WriteUInt16(0);
            Out.WritePascalString(Info.Name);
            Out.WriteByte(1);
            Out.WriteUInt16(0); // Time in second
            Out.WriteUInt32(0x034B0201);
            Out.WriteByte(1);
            Out.WriteByte(0);
            Out.WriteByte(1);
            Out.WriteUInt16(0);
            Out.WriteByte(0);
            Out.WritePascalString("Un Nom");
            Out.WriteByte(0);
            Out.WriteByte(0);
            Out.WriteStringToZero("Stage III");
            Out.WritePascalString("Test d'un message quelque soit");
            Out.WriteUInt16(0);
            Out.WriteUInt16(0x012C);
            Out.WriteUInt32(0x9E);
            Out.WriteUInt32(0);
            Out.WriteByte(0x48);
            Out.WriteUInt32(0);
            //Out.WriteHexStringBytes(Str.Replace(" ", string.Empty));
            Plr.SendPacket(Out);
        }
예제 #4
0
        public void SendFlagInfo(Player plr)
        {
            PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECTIVE_INFO);

            Out.WriteUInt32((uint)ObjectiveID);
            Out.WriteByte(0);
            Out.WriteByte((byte)OwningRealm);
            Out.WriteByte(1);
            Out.WriteUInt16(0);
            Out.WritePascalString(ObjectiveName);
            Out.WriteByte(2);
            Out.WriteUInt32(0x0000348F);
            Out.WriteUInt32(0x0000FF00);

            if (OwningRealm == 0)
            {
                Out.WritePascalString("Capturing");
            }
            else if ((int)plr.Realm == OwningRealm)
            {
                Out.WritePascalString("Defend");
            }
            else
            {
                Out.WritePascalString("Attack");
            }

            Out.WriteByte(0);
            Out.WritePascalString(""); // Tooltip text
            Out.Fill(0, 12);
            Out.WriteUInt16(0x3101);
            Out.Fill(0, 3);
            plr.SendPacket(Out);
        }
예제 #5
0
        public void BuildInteract(Player plr, Creature crea, PacketOut Out)
        {
            List <Quest> starter    = crea.Spawn.Proto.StartingQuests;
            List <Quest> finisher   = crea.Spawn.Proto.FinishingQuests;
            List <Quest> inProgress = starter != null?starter.FindAll(info => plr.QtsInterface.HasQuest(info.Entry) && !plr.QtsInterface.HasDoneQuest(info.Entry)) : null;

            Out.WriteUInt32(0);
            Out.WriteUInt16(plr.Oid);

            if (starter != null)
            {
                List <Quest> starts = starter.FindAll(q => plr.QtsInterface.CanStartQuest(q));

                Out.WriteByte((byte)starts.Count);
                foreach (Quest q in starts)
                {
                    Out.WriteByte(0);
                    Out.WriteUInt16(q.Entry);
                    Out.WriteUInt16(0);
                    Out.WritePascalString(q.Name);
                }
            }
            else
            {
                Out.WriteByte(0);
            }

            if (finisher != null)
            {
                List <Quest> finishs = finisher.FindAll(q => plr.QtsInterface.CanEndQuest(q));

                Out.WriteByte((byte)finishs.Count);
                foreach (Quest q in finishs)
                {
                    Out.WriteByte(0);
                    Out.WriteUInt16(q.Entry);
                    Out.WritePascalString(q.Name);
                }
            }
            else if (inProgress != null)
            {
                Out.WriteByte((byte)inProgress.Count);
                foreach (Quest q in inProgress)
                {
                    Out.WriteByte(0);
                    Out.WriteUInt16(q.Entry);
                    Out.WritePascalString(q.Name);
                }
            }
            else
            {
                Out.WriteByte(0);
            }
        }
예제 #6
0
        static public void F_CONNECT(BaseClient client, PacketIn packet)
        {
            GameClient cclient = client as GameClient;

            packet.Skip(8);
            UInt32 Tag   = packet.GetUint32();
            string Token = packet.GetString(80);

            packet.Skip(21);
            string Username = packet.GetString(23);

            // TODO
            AuthResult Result = Program.AcctMgr.CheckToken(Username, Token);

            if (Result != AuthResult.AUTH_SUCCESS)
            {
                Log.Error("F_CONNECT", "Invalid Token =" + Username);
                cclient.Disconnect();
            }
            else
            {
                cclient._Account = Program.AcctMgr.GetAccount(Username);
                if (cclient._Account == null)
                {
                    Log.Error("F_CONNECT", "Invalid Account =" + Username);
                    cclient.Disconnect();
                }
                else
                {
                    //Log.Success("F_CONNECT", "MeId=" + cclient.Id);

                    GameClient Other = (cclient.Server as TCPServer).GetClientByAccount(cclient, cclient._Account.AccountId);
                    if (Other != null)
                    {
                        Other.Disconnect();
                    }

                    {
                        PacketOut Out = new PacketOut((byte)Opcodes.S_CONNECTED);
                        Out.WriteUInt32(0);
                        Out.WriteUInt32(Tag);
                        Out.WriteByte(Program.Rm.RealmId);
                        Out.WriteUInt32(0);// this was 1// setting this at 0 removes the server population box
                        Out.WritePascalString(Username);
                        Out.WritePascalString(Program.Rm.Name);
                        Out.WriteByte(0);
                        Out.WriteUInt16(0);
                        cclient.SendPacket(Out);
                    }
                }
            }
        }
예제 #7
0
        private void SetTimerState(bool active)
        {
            PacketOut Out;

            EvtInterface.RemoveEvent(TimerUp);

            if (!active)
            {
                Out = new PacketOut((byte)Opcodes.F_OBJECTIVE_UPDATE);
                Out.WriteUInt32(0x1BA0);
                Out.WriteHexStringBytes("0300000016560100000000");
            }

            else
            {
                Out = new PacketOut((byte)Opcodes.F_OBJECTIVE_INFO);
                Out.WriteUInt32(0x1BA0);
                Out.WriteHexStringBytes("000001000000020000167C00");

                Out.WriteByte((byte)_capturePoints.Count);

                foreach (CapturePoint c in _capturePoints)
                {
                    Out.WriteHexStringBytes("000001000000");
                    Out.WritePascalString(c.ObjectiveName);
                }

                Out.WriteHexStringBytes("FF00");
                Out.WritePascalString("Pacify all of the Trolls!");

                Out.WriteByte(0);
                Out.WritePascalString("These are the areas that Destruction controls. They can only be claimed while holding the Troll Pacifier located at the top of Stone Troll Hill.");

                // Timer
                Out.WriteUInt32(60);
                // Timer
                Out.WriteUInt32(60);
                Out.WriteUInt32(0);
                Out.WriteByte(0);
                Out.WriteUInt32(0);

                EvtInterface.AddEvent(TimerUp, 60000, 1);
            }

            for (int i = 0; i < 2; ++i)
            {
                foreach (Player plr in Players[i])
                {
                    plr.SendPacket(Out);
                }
            }
        }
        public void SendFlagInfo(Player plr)
        {
            PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECTIVE_INFO);

            Out.WriteUInt32((uint)ObjectiveID);
            Out.WriteByte(0);
            Out.WriteByte((byte)Owner);
            Out.WriteByte(1);
            Out.WriteUInt16(0);
            Out.WritePascalString(ObjectiveName);
            Out.WriteByte(2);
            Out.WriteUInt32(0x0000348F);
            Out.WriteUInt32(0x0000FF00);

            if ((int)plr.Realm == HoldOwner)
            {
                Out.WritePascalString("Maintain control of " + ObjectiveName);
            }
            else
            {
                Out.WritePascalString("Interact with the flag to capture " + ObjectiveName + "!");
            }

            Out.WriteByte(0);

            if ((int)plr.Realm == HoldOwner)
            {
                Out.WritePascalString("Your realm controls " + ObjectiveName + ".");
            }
            else
            {
                Out.WritePascalString("Fight for control of " + ObjectiveName + "!");
            }

            if (HoldStartTime > 0)
            {
                Out.WriteUInt32(60); //total
                var remaining = 60 - ((TCPManager.GetTimeStampMS() - HoldStartTime) / 1000);
                Out.WriteUInt32((byte)remaining);
            }
            else
            {
                Out.WriteUInt32(0);
                Out.WriteUInt32(0);
            }

            Out.Fill(0, 4);
            Out.WriteUInt16(0x3101);
            Out.Fill(0, 3);
            plr.SendPacket(Out);
        }
예제 #9
0
파일: Player.cs 프로젝트: uvbs/DoR
        public override void SendMeTo(Player Plr)
        {
            if (Plr == null || Plr.IsDisposed || Plr.Client == null)
            {
                return;
            }

            if (IsDisposed || Client == null)
            {
                return;
            }

            PacketOut Out = new PacketOut((byte)Opcodes.F_CREATE_PLAYER);

            Out.WriteUInt16((UInt16)_Client.Id);
            Out.WriteUInt16(Oid);
            Out.WriteUInt16(_Info.ModelId);
            Out.WriteUInt16(_Info.CareerLine);
            Out.WriteUInt16((UInt16)Z);
            Out.WriteUInt16(Zone.ZoneId);

            Out.WriteUInt16((UInt16)X);
            Out.WriteUInt16((UInt16)Y);
            Out.WriteUInt16(Heading);

            Out.WriteByte(0);            // Level
            Out.WriteByte(_Value.Level); // Level

            Out.WriteByte(0x2B);
            Out.WriteByte((byte)(Faction + (IsDead ? 1 : 0))); // Faction
            Out.WriteByte(0);
            Out.WriteByte(0);                                  // ?

            Out.Write(_Info.bTraits, 0, _Info.bTraits.Length);
            Out.Fill(0, 12);

            Out.WriteByte(_Info.Race);
            Out.WriteByte(0); //sometimes 1
            Out.WriteByte(0); // health/ap?
            Out.WriteByte(PctHealth);
            Out.Fill(0, 8);

            Out.WritePascalString(_Info.Name);
            Out.WritePascalString(""); // suffix. title?
            Out.WritePascalString(""); // guild name
            Out.Fill(0, 4);

            Plr.SendPacket(Out);
            base.SendMeTo(Plr);
        }
        static public void F_CONNECT(BaseClient client, PacketIn packet)
        {
            GameClient cclient = client as GameClient;

            packet.Skip(8);
            UInt32 Tag   = packet.GetUint32();
            string Token = packet.GetString(80);

            packet.Skip(21);
            string Username = packet.GetString(23);

            Log.Debug("Connect", "Connexion avec : " + Token + ",User="******"F_CONNECT", "MeId=" + cclient.Id);

                    GameClient Other = (cclient.Server as TCPServer).GetClientByAccount(cclient, cclient._Account.AccountId);
                    if (Other != null)
                    {
                        Other.Disconnect();
                    }

                    PacketOut Out = new PacketOut((byte)Opcodes.S_CONNECTED);
                    Out.WriteUInt32(0);
                    Out.WriteUInt32(Tag);
                    Out.WriteByte(Program.Rm.RealmId);
                    Out.WriteUInt32(0);
                    Out.WritePascalString(Username);
                    Out.WritePascalString(Program.Rm.Name);
                    Out.WriteByte(0);
                    Out.WriteUInt16(0);
                    cclient.SendTCP(Out);
                }
            }
        }
예제 #11
0
        public void SendQuest(Character_quest cQuest)
        {
            if (cQuest == null)
            {
                Log.Error("QuestsInterface", "SendQuest CQuest == null");
                return;
            }

            PacketOut packet = new PacketOut((byte)Opcodes.F_QUEST_INFO);

            packet.WriteUInt16(cQuest.QuestID);
            packet.WriteByte(cQuest.Quest.Type); // Quest Type (database is wrong)
            BuildQuestHeader(packet, GetPlayer(), cQuest.Quest, true);

            Dictionary <Item_Info, uint> rewards = GenerateRewards(cQuest.Quest, GetPlayer());

            packet.WriteByte(cQuest.Quest.ChoiceCount);
            packet.WriteByte(0);
            packet.WriteByte((byte)rewards.Count);

            foreach (KeyValuePair <Item_Info, uint> kp in rewards)
            {
                Item.BuildItem(ref packet, null, kp.Key, null, 0, (ushort)kp.Value);
            }

            packet.WriteByte(0);

            BuildObjectives(packet, cQuest._Objectives);

            List <Quest_Map> SortedMaps = cQuest.Quest.Maps.OrderBy(x => x.Entry).ThenByDescending(x => x.Id).ToList();

            foreach (Quest_Map map in SortedMaps)
            {
                packet.WriteByte(map.Id);
                packet.WritePascalString(map.Name);
                packet.WritePascalString(map.Description);
                packet.WriteUInt16(map.ZoneId);
                packet.WriteUInt16(map.Icon);
                packet.WriteUInt16(map.X);
                packet.WriteUInt16(map.Y);
                packet.WriteUInt16(map.Unk);
                packet.WriteByte(map.When);
            }

            packet.WriteByte(0);

            GetPlayer().SendPacket(packet);
        }
예제 #12
0
        public void SendInited()
        {
            PacketOut Out = new PacketOut((byte)Opcodes.S_PLAYER_INITTED);

            Out.WriteUInt16(_ObjectId);
            Out.WriteUInt16(0);
            Out.WriteUInt32((uint)_Info.CharacterId);
            Out.WriteUInt16((ushort)_Value.WorldZ);
            Out.WriteUInt16(0);
            Out.WriteUInt32((uint)_Value.WorldX);
            Out.WriteUInt32((uint)_Value.WorldY);
            Out.WriteUInt16((ushort)_Value.WorldO);
            Out.WriteByte(0);
            Out.WriteByte((byte)Realm);
            Out.Fill(0, 5); // ??
            Out.WriteByte((byte)Zone.Info.Region);
            Out.WriteUInt16(1);
            Out.WriteByte(0);
            Out.WriteByte(_Info.Career);
            Out.Fill(0, 6);
            Out.WritePascalString(Program.Rm.Name);
            Out.Fill(0, 3);
            SendPacket(Out);


            /*  PacketOut Out = new PacketOut((byte)Opcodes.S_PLAYER_INITTED);
             * Out.WriteHexStringBytes("00CA00000028D5BF1D7F0000000CF824000CAFC7051700020000000000080001001A000000000000084261646C616E6473000000");
             * SendPacket(Out);
             */
        }
예제 #13
0
        public override void SendMeTo(Player Plr)
        {
            PacketOut Out = new PacketOut((byte)Opcodes.F_CREATE_STATIC);

            Out.WriteUInt16(Oid);
            Out.WriteUInt16(0);

            Out.WriteUInt16((UInt16)Spawn.WorldO);
            Out.WriteUInt16((UInt16)Spawn.WorldZ);
            Out.WriteUInt32((UInt32)Spawn.WorldX);
            Out.WriteUInt32((UInt32)Spawn.WorldY);
            Out.WriteUInt16((ushort)Spawn.DisplayID);

            Out.WriteUInt16(Spawn.Proto.GetUnk(0));
            Out.WriteUInt16(Spawn.Proto.GetUnk(1));
            Out.WriteUInt16(Spawn.Proto.GetUnk(2));
            Out.WriteByte(0);
            Out.WriteUInt16(Spawn.Proto.GetUnk(3));
            Out.Fill(0, 5);
            Out.WriteUInt16(Spawn.Proto.GetUnk(4));
            Out.WriteUInt16(Spawn.Proto.GetUnk(5));

            Out.WriteUInt32(0);

            Out.WritePascalString(Name);
            Out.WriteByte(0);

            Plr.SendPacket(Out);

            base.SendMeTo(Plr);
        }
예제 #14
0
 static public void BuildQuestInProgress(PacketOut Out, Quest Q, bool Particular)
 {
     Out.WritePascalString(Q.Name);
     Out.WriteUInt16((UInt16)Q.ProgressText.Length);
     Out.WriteStringBytes(Q.ProgressText);
     Out.WriteByte(1);
 }
예제 #15
0
        }// PQ RESTART TIMER

        public void SendReinitTime(Player Plr, ushort Time)
        {
            PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECTIVE_INFO);

            Out.WriteUInt32(Info.Entry);
            Out.WriteByte(1);
            Out.WriteByte(1);// is 1 // why set as 2 ?
            Out.WriteByte(1);
            Out.WriteUInt16(0);
            Out.WritePascalString(Info.Name); // 19
            Out.WriteUInt16(0);
            Out.WriteUInt16(Time);            // Time in seconds
            Out.WriteUInt16(0);
            Out.WriteUInt16(0);
            Plr.SendPacket(Out);


            {
                if (Stage.Objectives.First().Objective.Guid == (ushort)0x052E)//0x032B)// =811

                {
                    Out = new PacketOut((byte)Opcodes.F_ANIMATION);
                }
                Out.WriteUInt16((ushort)Oid); //Oid);// 0280// ObjectID
                Out.WriteByte(0);             // 0= on 1 = off
                Out.WriteByte((byte)0x44);
                Out.WriteUInt16((ushort)0);
                Plr.SendPacket(Out);
            }
        }
예제 #16
0
파일: Player.cs 프로젝트: uvbs/DoR
        public void SendInited()
        {
            PacketOut Out = new PacketOut((byte)Opcodes.S_PLAYER_INITTED);

            Out.WriteUInt16(_ObjectId);
            Out.WriteUInt16(0);
            Out.WriteUInt32((uint)_Info.CharacterId);
            Out.WriteUInt16((ushort)_Value.WorldZ);
            Out.WriteUInt16(0);
            Out.WriteUInt32((uint)_Value.WorldX);
            Out.WriteUInt32((uint)_Value.WorldY);
            Out.WriteUInt16((ushort)_Value.WorldO);
            Out.WriteByte(0);
            Out.WriteByte((byte)Realm);

            Out.WriteUInt16(0); //(ushort)(Zone.Region.RegionId < 18 ? 0 : 1));
            Out.WriteUInt16(0); //(ushort)(Zone.Region.RegionId < 18 ? 0 : 57)); // some kind of bitwise flag?


            Out.WriteUInt16((ushort)Zone.Info.Region); // 01 04
            Out.WriteUInt16((ushort)1);                // instance id // 1D 57
            Out.WriteByte(0);
            Out.WriteByte(_Info.Career);
            Out.Fill(0, 6);
            Out.WritePascalString(Program.Rm.Name);
            Out.Fill(0, 3);
            SendPacket(Out);
        }
예제 #17
0
        /*
         * SendUpdateLastNameSuccess
         */
        private static void SendUpdateLastNameSuccess(Player plr)
        {
            PacketOut Out = new PacketOut((byte)Opcodes.F_UPDATE_LASTNAME, 32);

            Out.WriteUInt16(plr.Oid);
            Out.WritePascalString(plr.CrrInterface.ExperimentalMode ? plr.Info.Surname + "*" : plr.Info.Surname);
            plr.SendPacket(Out);
        }
예제 #18
0
        public void SendQuest(Character_quest CQuest)
        {
            if (CQuest == null)
            {
                Log.Error("QuestsInterface", "SendQuest CQuest == null");
                return;
            }

            PacketOut Packet = new PacketOut((byte)Opcodes.F_QUEST_INFO);

            Packet.WriteUInt16(CQuest.QuestID);
            Packet.WriteByte(0); // Quest Type (database is wrong)
            BuildQuestHeader(Packet, CQuest.Quest, true);

            Dictionary <Item_Info, uint> Rewards = GenerateRewards(CQuest.Quest, GetPlayer());

            Packet.WriteByte(CQuest.Quest.ChoiceCount);
            Packet.WriteByte(0);
            Packet.WriteByte((byte)Rewards.Count);

            foreach (KeyValuePair <Item_Info, uint> Kp in Rewards)
            {
                Item.BuildItem(ref Packet, null, Kp.Key, 0, (ushort)Kp.Value);
            }

            Packet.WriteByte(0);

            BuildObjectives(Packet, CQuest._Objectives);

            foreach (Quest_Map Map in CQuest.Quest.Maps)
            {
                Packet.WriteByte(Map.Id);
                Packet.WritePascalString(Map.Name);
                Packet.WritePascalString(Map.Description);
                Packet.WriteUInt16(Map.ZoneId);
                Packet.WriteUInt16(Map.Icon);
                Packet.WriteUInt16(Map.X);
                Packet.WriteUInt16(Map.Y);
                Packet.WriteUInt16(Map.Unk);
                Packet.WriteByte(Map.When);
            }

            Packet.WriteByte(0);

            GetPlayer().SendPacket(Packet);
        }
예제 #19
0
        /// <summary>
        ///     Sends the flag object to given player.
        /// </summary>
        /// <param name="plr">Player that entered the objective area</param>
        public override void SendMeTo(Player plr)
        {
            var Out = new PacketOut((byte)Opcodes.F_CREATE_STATIC, 64);

            Out.WriteUInt16(Oid);
            Out.WriteUInt16(0);

            Out.WriteUInt16(_o);
            Out.WriteUInt16(_z);
            Out.WriteUInt32(_x);
            Out.WriteUInt32(_y);

            ushort displayId;

            switch (OwningRealm)
            {
            case Realms.REALMS_REALM_NEUTRAL:
                displayId = 3442;
                break;

            case Realms.REALMS_REALM_ORDER:
                displayId = 3443;
                break;

            case Realms.REALMS_REALM_DESTRUCTION:
                displayId = 3438;
                break;

            default:
                displayId = 3442;
                break;
            }

            Out.WriteUInt16(displayId);

            Out.WriteUInt16(0x1E);
            Out.WriteUInt16(0);
            Out.WriteUInt16(0);
            Out.WriteByte(0);

            Out.WriteUInt16(0); // Write 4 here to set interactable

            Out.WriteByte(0);

            Out.WriteUInt16(0);
            Out.WriteByte(0);
            Out.WriteByte(100);

            Out.WriteUInt16(0);
            Out.WriteUInt16(0);
            Out.WriteUInt32(0);

            Out.WritePascalString("Battlefield Objective");
            Out.WriteByte(0);

            plr.SendPacket(Out);
            // does nothing : base.SendMeTo(plr);
        }
예제 #20
0
        public void SendDialog(UInt16 Type, string Text)
        {
            PacketOut Out = new PacketOut((byte)Opcodes.F_SHOW_DIALOG);

            Out.WriteUInt16(Type);
            Out.WriteByte(0);
            Out.WritePascalString(Text);
            SendPacket(Out);
        }
예제 #21
0
        static public void BuildObjectives(PacketOut Out, List <Quest_Objectives> Objs)
        {
            Out.WriteByte((byte)Objs.Count);

            foreach (Quest_Objectives Objective in Objs)
            {
                Out.WriteByte((byte)Objective.ObjCount);
                Out.WritePascalString(Objective.Description);
            }
        }
예제 #22
0
        public void SendQuest(Character_quest CQuest)
        {
            if (CQuest == null)
            {
                Log.Error("QuestsInterface", "SendQuest CQuest == null");
                return;
            }

            PacketOut Packet = new PacketOut((byte)Opcodes.F_QUEST_INFO);

            Packet.WriteUInt16(CQuest.QuestID);
            Packet.WriteByte(0);
            BuildQuestHeader(Packet, CQuest.Quest, true);

            Dictionary <Item_Info, uint> Rewards = GenerateRewards(CQuest.Quest, GetPlayer());

            Packet.WriteByte(CQuest.Quest.ChoiceCount);
            Packet.WriteByte(0);
            Packet.WriteByte((byte)Rewards.Count);

            foreach (KeyValuePair <Item_Info, uint> Kp in Rewards)
            {
                Item.BuildItem(ref Packet, null, Kp.Key, 0, (ushort)Kp.Value);
            }

            Packet.WriteByte(0);

            BuildObjectives(Packet, CQuest._Objectives);

            Packet.WriteByte(1);

            Packet.WritePascalString(CQuest.Quest.Name);
            Packet.WritePascalString("Return to your giver");

            Packet.WriteUInt16(0x006A);
            Packet.WriteUInt16(0x046D);
            Packet.WriteUInt16(0x4D9E);
            Packet.WriteUInt16(0xCB65);

            Packet.Fill(0, 18);

            GetPlayer().SendPacket(Packet);
        }
예제 #23
0
        public void SendObjectiveInfo(Player plr)
        {
            PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECTIVE_INFO, 64);

            Out.WriteUInt32(ObjectiveID);
            Out.WriteByte(0);
            Out.WriteByte((byte)OwningRealm);
            Out.WriteByte(1);
            Out.WriteUInt16(0);
            Out.WritePascalString(ObjectiveName);
            Out.WriteByte(2);
            Out.WriteUInt32(0x0000348F);
            Out.WriteUInt32(0x0000FF00);

            if (plr.Realm == OwningRealm)
            {
                Out.WritePascalString(_holdText);
            }
            else
            {
                Out.WritePascalString(_captureText);
            }

            Out.WriteByte(0);

            if (plr.Realm == OwningRealm)
            {
                Out.WritePascalString(_holdDesc);
            }
            else
            {
                Out.WritePascalString(_captureDesc);
            }

            uint timerend = (uint)(CountdownTimerEnd > TCPManager.GetTimeStamp() ? CountdownTimerEnd - TCPManager.GetTimeStamp() : 0);

            Out.WriteUInt32(timerend);
            Out.WriteUInt32(timerend);

            Out.Fill(0, 9);
            plr.SendPacket(Out);
        }
예제 #24
0
        public override void SendMeTo(Player plr)
        {
            PacketOut Out = new PacketOut((byte)Opcodes.F_CREATE_STATIC, 42 + ObjectiveName.Length);

            Out.WriteUInt16(Oid);
            Out.WriteUInt16(0);

            Out.WriteUInt16(Heading);
            Out.WriteUInt16((ushort)_z);
            Out.WriteUInt32((uint)_x);
            Out.WriteUInt32((uint)_y);

            int displayId = 3442;

            if (OwningRealm == 0)
            {
                displayId = 3442;
            }
            else if (OwningRealm == 1)
            {
                displayId = 3443;
            }
            else
            {
                displayId = 3438;
            }

            Out.WriteUInt16((ushort)displayId);

            Out.WriteUInt16(0x1E00);
            Out.WriteUInt16(0);
            Out.WriteUInt16(0);
            Out.WriteByte(0);

            // flags
            Out.WriteUInt16(0x21);

            Out.WriteByte(0);

            Out.WriteUInt16(0);
            Out.WriteByte(0);
            Out.WriteByte(100);

            Out.WriteUInt16(0);
            Out.WriteUInt16(0);
            Out.WriteUInt32(0);

            Out.WritePascalString(ObjectiveName);
            Out.WriteByte(0);

            plr.SendPacket(Out);

            base.SendMeTo(plr);
        }
예제 #25
0
파일: GameObject.cs 프로젝트: uvbs/DoR
        public override void SendMeTo(Player Plr)
        {
            //    Log.Info("GO", "go = " + Name + "  Oid = " + Oid + "  X= " + Spawn.WorldX + "  Y= " + Spawn.WorldY + "  Z= " + Spawn.WorldZ + " DoorId= " + Spawn.DoorId);


            PacketOut Out = new PacketOut((byte)Opcodes.F_CREATE_STATIC);

            Out.WriteUInt16(Oid);
            Out.WriteUInt16((byte)(DoorOpen ? 1 : Spawn.DoorOpen));

            Out.WriteUInt16((UInt16)Spawn.WorldO);
            Out.WriteUInt16((UInt16)Spawn.WorldZ);
            Out.WriteUInt32((UInt32)Spawn.WorldX);
            Out.WriteUInt32((UInt32)Spawn.WorldY);
            Out.WriteUInt16((ushort)Spawn.DisplayID);

            Out.WriteUInt16(Spawn.GetUnk(0));
            Out.WriteUInt16(Spawn.GetUnk(1));
            Out.WriteUInt16(Spawn.GetUnk(2));
            Out.WriteByte(Spawn.Unk1);

            int  flags = Spawn.GetUnk(3);
            Loot Loots = LootsMgr.GenerateLoot(this, Plr);

            if ((Loots != null && Loots.IsLootable()) || (Plr.QtsInterface.GetPublicQuest() != null) || Plr.QtsInterface.GameObjectNeeded(Spawn.Entry) || Spawn.DoorId != 0)

            {
                flags = flags | 4;
            }

            Out.WriteUInt16((ushort)flags);
            Out.WriteByte(Spawn.Unk2);
            Out.WriteUInt32(Spawn.Unk3);
            Out.WriteUInt16(Spawn.GetUnk(4));
            Out.WriteUInt16(Spawn.GetUnk(5));
            Out.WriteUInt32(Spawn.Unk4);

            Out.WritePascalString(Name);

            if (Spawn.DoorId != 0)
            {
                Out.WriteByte(0x04);
                Out.WriteUInt32((uint)(Spawn.DoorId));
            }
            else
            {
                Out.WriteByte(0x00);
            }


            Plr.SendPacket(Out);

            base.SendMeTo(Plr);
        }
예제 #26
0
        public override void SendMeTo(Player plr)
        {
            if (HeldState == EHeldState.Carried || HeldState == EHeldState.Inactive)
            {
                /*if (plr != null)
                 *  Log.Info("SendMeTo", "Sending to " + plr.Name + " failed: state is "+Enum.GetName(typeof(EHeldState), HeldState));
                 * else
                 *  Log.Info("SendMeTo", "Sending to all failed: state is "+Enum.GetName(typeof(EHeldState), HeldState));*/
                return;
            }

            /*if (plr != null)
             *  Log.Info("SendMeTo", "Sending to " + plr.Name);
             * else
             *  Log.Info("SendMeTo", "Sending to all");*/

            PacketOut Out = new PacketOut((byte)Opcodes.F_CREATE_STATIC);

            Out.WriteUInt16(Oid);
            Out.WriteUInt16(VfxState);

            Out.WriteUInt16(Heading);
            Out.WriteUInt16((ushort)WorldPosition.Z);
            Out.WriteUInt32((uint)WorldPosition.X);
            Out.WriteUInt32((uint)WorldPosition.Y);

            Out.WriteUInt16(HeldState == EHeldState.Ground ? GroundModelId : HomeModelId);

            Out.WriteByte(0x1E);
            Out.WriteByte(0);
            Out.WriteUInt16(0);
            Out.WriteUInt16(0x1C23);
            Out.WriteByte(0);

            // flags
            Out.WriteUInt16(0x24);

            Out.WriteByte(0);

            Out.WriteUInt16(0);
            Out.WriteByte(0);
            Out.WriteByte(100);

            Out.WriteUInt32(0xAB942AEC);
            Out.WriteUInt32(0);

            Out.WritePascalString(name);
            Out.WriteByte(0);

            plr.SendPacket(Out);

            base.SendMeTo(plr);
        }
예제 #27
0
        // Change "Character_Objectives" for "Character_InProgressObjectives" for show Quest Objectives in F_QUEST_LIST
        static public void BuildObjectives(PacketOut Out, List <Character_InProgressObjectives> Objs)
        {
            Out.WriteByte((byte)Objs.Count);

            foreach (Character_InProgressObjectives Objective in Objs)
            {
                Out.WriteByte((byte)Objective.Count);
                Out.WriteByte((byte)Objective.Objective.ObjCount);
                Out.WriteUInt16(0);
                Out.WritePascalString(Objective.Objective.Description);
            }
        }
예제 #28
0
        public static void BuildObjectives(PacketOut Out, List <Quest_Objectives> objs)
        {
            Out.WriteByte((byte)objs.Count);

            List <Quest_Objectives> SortedObjectives = objs.OrderBy(x => x.Entry).ThenBy(x => x.Guid).ToList();

            foreach (Quest_Objectives objective in SortedObjectives)
            {
                Out.WriteByte((byte)objective.ObjCount);
                Out.WritePascalString(objective.Description);
            }
        }
예제 #29
0
        public override void SendMeTo(Player Plr)
        {
            Log.Success("SendMeTo", "[" + Plr.Name + "] voit : " + Name);

            PacketOut Out = new PacketOut((byte)Opcodes.F_CREATE_PLAYER);

            Out.WriteUInt16((UInt16)_Client.Id);
            Out.WriteUInt16(Oid);
            Out.WriteUInt16(_Info.ModelId);
            Out.WriteUInt16(_Info.CareerLine);
            Out.WriteUInt16((UInt16)Z);
            Out.WriteUInt16(Zone.ZoneId);

            Out.WriteUInt16((UInt16)X);
            Out.WriteUInt16((UInt16)Y);
            Out.WriteUInt16(Heading);

            Out.WriteByte(_Value.Level); // Level
            Out.WriteByte(0);            // Level

            Out.WriteByte(0);
            Out.WriteByte(Faction);
            Out.WriteByte(0);
            Out.WriteByte(Faction);

            Out.Write(_Info.bTraits, 0, _Info.bTraits.Length);
            Out.Fill(0, 12);

            Out.WriteByte(_Info.Race);
            Out.Fill(0, 11);
            Out.WritePascalString(_Info.Name);
            Out.WritePascalString("");
            Out.WriteByte(0);
            Out.Fill(0, 4);

            Plr.SendPacket(Out);

            base.SendMeTo(Plr);
        }
예제 #30
0
 static public void BuildQuestHeader(PacketOut Out, Quest Q, bool Particular)
 {
     Out.WritePascalString(Q.Name);
     Out.WriteUInt16((UInt16)Q.Description.Length);
     Out.WriteStringBytes(Q.Description);
     if (Particular)
     {
         Out.WriteUInt16((UInt16)Q.Particular.Length);
         Out.WriteStringBytes(Q.Particular);
     }
     Out.WriteByte(1);
     Out.WriteUInt32(Q.Gold);
     Out.WriteUInt32(Q.Xp);
 }