Send() public static method

public static Send ( byte buffer, int Index ) : void
buffer byte
Index int
return void
示例#1
0
        public static void SendPatchInfo(int Index_)
        {
            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_PATCH_INFO);
            writer.AppendDword(0x05000101);
            writer.AppendByte(0x20);
            ServerSocket.Send(writer.getWorkspace(), Index_);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_PATCH_INFO);
            writer.AppendDword(0x01000100);
            writer.AppendDword(0x00050628);
            writer.AppendWord(0);
            writer.AppendByte(2);
            ServerSocket.Send(writer.getWorkspace(), Index_);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_PATCH_INFO);
            writer.AppendDword(0x05000101);
            writer.AppendByte(0x60);
            ServerSocket.Send(writer.getWorkspace(), Index_);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_PATCH_INFO);
            writer.AppendDword(0x02000300);
            writer.AppendWord(0x0200);
            ServerSocket.Send(writer.getWorkspace(), Index_);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_PATCH_INFO);
            writer.AppendDword(0x00000101);
            writer.AppendByte(0xA1);
            ServerSocket.Send(writer.getWorkspace(), Index_);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_PATCH_INFO);
            writer.AppendWord(0x0100);
            ServerSocket.Send(writer.getWorkspace(), Index_);
        }
示例#2
0
        public static void MonsterMovement(int Index_)
        {
            int X = random.Next(-20, 20);
            int Z = random.Next(-5, 10);
            int Y = random.Next(-20, 20);

            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_MOVEMENT);
            writer.AppendDword(Monsters.General[Index_].UniqueID);
            writer.AppendByte(1);
            writer.AppendByte(Monsters.Position[Index_].XSector);
            writer.AppendByte(Monsters.Position[Index_].YSector);
            writer.AppendWord((ushort)(Monsters.Position[Index_].X + X));
            writer.AppendWord((ushort)(Monsters.Position[Index_].Z + Z));
            writer.AppendWord((ushort)(Monsters.Position[Index_].Y + Y));
            writer.AppendByte(0);

            byte[] tmpBuffer = writer.getWorkspace();

            for (int i = 0; i < Player.PlayersOnline; i++)
            {
                if (Player.General[i].CharacterID != 0 && Player.Objects[i].SpawnedMonsterIndex.Contains(Index_))
                {
                    if (Formula.CalculateDistance(Monsters.Position[Index_], Player.Position[i]) <= 800)
                    {
                        ServerSocket.Send(tmpBuffer, i);
                    }
                }
            }
        }
示例#3
0
        private static void OnChatWhisper(PacketReader reader_, int Index_)
        {
            ushort charlen = reader_.ReadWord();
            string name    = reader.ReadString(false, charlen);

            if (name.ToCharArray(0, 1)[0] == '[')
            {
                name = name.Substring(3);
            }

            ushort msglen = reader_.ReadWord();

            byte[] bmsg = reader_.ReadByteArray(msglen * 2);


            if (DatabaseCore.Character.GetIndexByName(name) != -1)
            {
                PacketWriter writer = new PacketWriter();
                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_CHAT);
                writer.AppendByte(2);
                writer.AppendWord((ushort)Player.General[Index_].CharacterName.Length);
                writer.AppendString(false, Player.General[Index_].CharacterName);
                writer.AppendWord((ushort)(msglen / 2));
                writer.AppendByteArray(bmsg, bmsg.Length);
                for (int i = 0; i <= Player.PlayersOnline; i++)
                {
                    if (Player.General[i].CharacterName == name)
                    {
                        ServerSocket.Send(writer.getWorkspace(), i);
                        break;
                    }
                }
            }
        }
示例#4
0
 public static void OnRangeSpawn(int Index_)
 {
     for (int i = 0; i < Monsters.MonsterAmount; i++)
     {
         if (Monsters.General[i].UniqueID != 0 && !Monsters.General[i].Dead)
         {
             double Distance = Formula.CalculateDistance(Player.Position[Index_], Monsters.Position[i]);
             if (Distance <= 800)
             {
                 if (!Player.Objects[Index_].SpawnedMonsterIndex.Contains(i))
                 {
                     ServerSocket.Send(MonsterSpawn.CreateSpawnPacket(Monsters.General[i].ID, Monsters.General[i].UniqueID, Monsters.Position[i], Monsters.General[i].Type), Index_);
                     Player.Objects[Index_].SpawnedMonsterIndex.Add(i);
                 }
             }
         }
     }
     for (int i = 0; i < Item.ItemAmount; i++)
     {
         if (Item.General[i].UniqueID != 0)
         {
             double Distance = Formula.CalculateDistance(Player.Position[Index_], Item.Position[i]);
             if (Distance <= 800)
             {
                 if (!Player.Objects[Index_].SpawnedItemsIndex.Contains(i))
                 {
                     ServerSocket.Send(Items.CreateSpawnPacket(Item.General[i], Item.Position[i]), Index_);
                     Player.Objects[Index_].SpawnedItemsIndex.Add(i);
                 }
             }
         }
     }
 }
示例#5
0
        public static void OnSkillUpdate(PacketReader reader_, int Index_)
        {
            int CharacterSkillIndex = DatabaseCore.Skill.GetIndexByName(Player.General[Index_].CharacterName);

            uint SkillId = reader_.ReadDword();

            Silkroad.Skill_ NewSkill = Silkroad.GetSkillById(SkillId);
            if (Player.Stats[Index_].Skillpoints >= NewSkill.RequiredSp)
            {
                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_SKILLUPDATE);
                writer.AppendByte(1);
                writer.AppendDword(SkillId);
                ServerSocket.Send(writer.getWorkspace(), Index_);

                DatabaseCore.Skill.SkillAmount[CharacterSkillIndex]++;
                for (int i = 1; i <= DatabaseCore.Skill.SkillAmount[CharacterSkillIndex]; i++)
                {
                    if (DatabaseCore.Skill.Skills[CharacterSkillIndex].SkillId[i] == SkillId - 1)
                    {
                        DatabaseCore.WriteQuery("UPDATE skills SET Skill{0}='{1}' WHERE Skill{0}='{2}' AND owner='{3}'", i, SkillId, DatabaseCore.Skill.Skills[CharacterSkillIndex].SkillId[i], Player.General[Index_].CharacterName);
                        DatabaseCore.Skill.Skills[CharacterSkillIndex].SkillId[i + 1] = SkillId;
                    }
                }
                DatabaseCore.WriteQuery("UPDATE skills SET Skill{0}='{1}' WHERE owner='{2}'", DatabaseCore.Skill.SkillAmount[CharacterSkillIndex], SkillId, Player.General[Index_].CharacterName);
                DatabaseCore.WriteQuery("UPDATE skills SET AmountSkill='{0}' WHERE owner='{1}'", DatabaseCore.Skill.SkillAmount[CharacterSkillIndex], Player.General[Index_].CharacterName);

                DatabaseCore.Skill.Skills[CharacterSkillIndex].SkillId[DatabaseCore.Skill.SkillAmount[CharacterSkillIndex] - 1] = SkillId;

                Player.Stats[Index_].Skillpoints -= (uint)NewSkill.RequiredSp;
                SPUpdate(Index_);
            }
        }
示例#6
0
        public static void BeginBuff(int Index_)
        {
            uint SkillOverID = (uint)random.Next(65536, 1048575);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_END_SKILL);
            writer.AppendByte(1);
            writer.AppendDword(Player.Objects[Index_].BuffCastingID);
            writer.AppendByte(0);
            writer.AppendDword(0);
            ServerSocket.Send(writer.getWorkspace(), Index_);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_BUFF_1);
            writer.AppendDword(Player.General[Index_].UniqueID);
            writer.AppendDword(Player.Objects[Index_].UsingSkillID);
            writer.AppendDword(SkillOverID);

            ServerSocket.SendPacketIfPlayerIsSpawned(writer.getWorkspace(), Index_);

            for (byte i = 0; i <= 19; i++)
            {
                if (Player.Objects[Index_].ActiveBuffs[i].Id == 0)
                {
                    Player.Objects[Index_].ActiveBuffs[i].Id     = Player.Objects[Index_].UsingSkillID;
                    Player.Objects[Index_].ActiveBuffs[i].OverId = SkillOverID;
                }
            }

            Player.Objects[Index_].UsingSkill = false;
        }
示例#7
0
        public static void OnMasteryUpdate(PacketReader reader_, int Index_)
        {
            uint mastery = reader_.ReadDword();

            int[] CharacterMasteryIndex = DatabaseCore.Mastery.GetIndexByName(Player.General[Index_].CharacterName, Player.Stats[Index_].Model >= 14717);

            byte CurrentMasteryIndex = 0;

            for (byte i = 0; i < CharacterMasteryIndex.Length; i++)
            {
                if (DatabaseCore.Mastery.MasteryId[CharacterMasteryIndex[i]] == mastery)
                {
                    CurrentMasteryIndex = i;
                }
            }
            ulong sp_required = Silkroad.GetLevelDataByLevel(DatabaseCore.Mastery.MasteryLevel[CharacterMasteryIndex[CurrentMasteryIndex]]).Skillpoints;

            if (Player.Stats[Index_].Skillpoints >= sp_required)
            {
                DatabaseCore.Mastery.MasteryLevel[CharacterMasteryIndex[CurrentMasteryIndex]]++;
                Player.Stats[Index_].Skillpoints -= (uint)sp_required;
                SPUpdate(Index_);

                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_MASTERYUPDATE);
                writer.AppendByte(1);
                writer.AppendDword(mastery);
                writer.AppendByte(DatabaseCore.Mastery.MasteryLevel[CharacterMasteryIndex[CurrentMasteryIndex]]);
                ServerSocket.Send(writer.getWorkspace(), Index_);

                DatabaseCore.WriteQuery("UPDATE mastery SET level='{0}' WHERE mastery='{1}' AND owner='{2}'", DatabaseCore.Mastery.MasteryLevel[CharacterMasteryIndex[CurrentMasteryIndex]], mastery, Player.General[Index_].CharacterName);
            }
        }
示例#8
0
        public static void OnAuth(PacketReader Reader_, int Index_)
        {
            reader = Reader_;

            uint session = reader.ReadDword();

            ushort userlen = reader.ReadWord();
            string user    = reader.ReadString(false, userlen);

            ushort passlen = reader.ReadWord();
            string pass    = reader.ReadString(false, passlen);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_LOGIN_RESULT);

            int id = DatabaseCore.User.GetIndexByName(user);

            if (id != -1)
            {
                writer.AppendByte(0x01);
                Player.General[Index_].AccountID = DatabaseCore.User.UserId[id];
                Player.General[Index_].Index     = Index_;
                Player.General[Index_].User      = user;
                Player.General[Index_].Pass      = pass;
            }
            else
            {
                writer.AppendByte(0x02);
                writer.AppendByte(0x01);
            }

            ServerSocket.Send(writer.getWorkspace(), Index_);
        }
示例#9
0
        public static void GetXP(int Index_, ulong exp, ulong sp)
        {
            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_EXP);
            writer.AppendDword(Player.General[Index_].UniqueID);
            writer.AppendLword(exp);
            writer.AppendLword(sp);
            writer.AppendByte(0);
            if (CheckIfNewLevel(Index_, exp))
            {
                writer.AppendWord(Player.Stats[Index_].Attributes);
                ServerSocket.Send(writer.getWorkspace(), Index_);

                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_ANIMATION_LEVEL_UP);
                writer.AppendDword(Player.General[Index_].UniqueID);
                ServerSocket.SendPacketIfPlayerIsSpawned(writer.getWorkspace(), Index_);

                Formula.CalculateHP(Index_);
                Formula.CalculateMP(Index_);
                STRUpdate(Index_);
                INTUpdate(Index_);
            }
            else
            {
                ServerSocket.Send(writer.getWorkspace(), Index_);
            }

            CheckIfNewSp(Index_, sp);

            HPUpdate(Index_, false);
            MPUpdate(Index_, false);
            OnStatPacket(Index_);
            DatabaseCore.WriteQuery("UPDATE characters SET experience='{0}',level = '{1}',sp = '{2}',skillpointbar = '{3}' WHERE name='{4}'", Player.Stats[Index_].Experience, Player.Stats[Index_].Level, Player.Stats[Index_].Skillpoints, Player.Stats[Index_].SkillpointBar, Player.General[Index_].CharacterName);
        }
示例#10
0
        private static void hansh(int Index)
        {
            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(0x5000);
            writer.AppendByte(1);//NO HANDSHAKE
            ServerSocket.Send(writer.getWorkspace(), Index);
        }
示例#11
0
        public static void SendHandshake(int ClientIndex)
        {
            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_HANDSHAKE);
            writer.AppendByte(1);
            ServerSocket.Send(writer.getWorkspace(), ClientIndex);
        }
示例#12
0
 public static void SendPacketIfItemIsSpawned(byte[] tmpBuffer, int Index_)
 {
     for (int i = 0; i < Player.PlayersOnline; i++)
     {
         if (Player.General[i].CharacterID != 0 && Player.Objects[i].SpawnedItemsIndex.Contains(Index_))
         {
             ServerSocket.Send(tmpBuffer, i);
         }
     }
 }
示例#13
0
        public static void OnEmotion(PacketReader reader_, int Index_)
        {
            PacketWriter writer = new PacketWriter();
            byte         type   = reader_.ReadByte();

            writer.SetOpcode(CLIENT_OPCODES.GAME_CLIENT_EMOTION);
            writer.AppendDword(Player.General[Index_].UniqueID);
            writer.AppendByte(type);
            ServerSocket.Send(writer.getWorkspace(), Index_);
        }
示例#14
0
        public static void SPUpdate(int Index_)
        {
            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_SKILLPOINTS);
            writer.AppendByte(2);
            writer.AppendDword(Player.Stats[Index_].Skillpoints);
            writer.AppendByte(0);
            ServerSocket.Send(writer.getWorkspace(), Index_);
            DatabaseCore.WriteQuery("UPDATE characters SET sp='{0}' WHERE name='{1}'", Player.Stats[Index_].Skillpoints, Player.General[Index_].CharacterName);
        }
示例#15
0
        public static void SendServerInfo(int Index_)
        {
            string name    = "AgentServer";
            ushort namelen = (ushort)name.Length;

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_INFO);
            writer.AppendWord(namelen);
            writer.AppendString(false, name);
            writer.AppendByte(0);
            ServerSocket.Send(writer.getWorkspace(), Index_);
        }
示例#16
0
        public static void INTUpdate(int Index_)
        {
            Player.Stats[Index_].Attributes--;
            Player.Stats[Index_].Intelligence++;
            OnStatPacket(Index_);

            Formula.CalculateMP(Index_);
            MPUpdate(Index_, false);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_INT_UPDATE);
            writer.AppendByte(0x01);
            ServerSocket.Send(writer.getWorkspace(), Index_);
        }
示例#17
0
        public static void STRUpdate(int Index_)
        {
            Player.Stats[Index_].Attributes--;
            Player.Stats[Index_].Strength++;
            OnStatPacket(Index_);

            Formula.CalculateHP(Index_);
            HPUpdate(Index_, false);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_STR_UPDATE);
            writer.AppendByte(0x01);
            ServerSocket.Send(writer.getWorkspace(), Index_);
        }
示例#18
0
        public static void GetBerserk(int Index_, int ObjectIndex)
        {
            if (random.Next(0, 10) > 7 && Player.Stats[Index_].BerserkBar != 5)
            {
                Player.Stats[Index_].BerserkBar++;

                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_SKILLPOINTS);
                writer.AppendByte(4);
                writer.AppendByte(Player.Flags[Index_].Berserk);
                writer.AppendDword(Monsters.General[ObjectIndex].UniqueID);
                ServerSocket.Send(writer.getWorkspace(), Index_);
                DatabaseCore.WriteQuery("UPDATE characters SET berserkbar='{0}' WHERE name='{1}'", Player.Flags[Index_].Berserk, Player.General[Index_].CharacterName);
            }
        }
示例#19
0
 public static void SendPacketInRangeExceptMe(byte[] tmpBuffer, int Index_)
 {
     for (int i = 0; i < Player.PlayersOnline; i++)
     {
         if (Player.General[i].CharacterID != 0 && i != Index_)
         {
             if (Formula.CalculateDistance(Player.Position[Index_], Player.Position[i]) <= 800)
             {
                 ServerSocket.Send(tmpBuffer, i);
                 Player.Objects[i].SpawnedIndex.Add(Index_);
             }
         }
     }
 }
示例#20
0
        public static void OnChat(PacketReader reader_, int Index_)
        {
            reader = reader_;

            byte type       = reader.ReadByte();
            byte chatoffset = reader.ReadByte();

            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_CHAT_ACCEPT);
            writer.AppendByte(1);
            writer.AppendByte(type);
            writer.AppendByte(chatoffset);

            ServerSocket.Send(writer.getWorkspace(), Index_);

            switch (type)
            {
            case 1:
            case 3:
                OnChatPublic(reader_, Index_);
                break;

            case 2:
                OnChatWhisper(reader_, Index_);
                break;

            case 4:
                //	OnChatParty();
                break;

            case 5:
                //	OnChatGuild();
                break;

            case 6:
                //	OnChatGlobal();
                break;

            case 7:
                OnChatNotice(reader_);
                break;

            case 11:
                //	OnChatUnion();
                break;
            }
        }
示例#21
0
        public static void CreateItem(PacketReader reader_, int Index_)
        {
            int[] CharacterItemIndex = DatabaseCore.Item.GetIndexByName(Player.General[Index_].CharacterName);

            byte freeslot = FreeSlot(CharacterItemIndex);

            uint itemid   = reader_.ReadDword();
            byte itemplus = reader_.ReadByte();

            Silkroad.Item_ DestinationItem_ = Silkroad.GetItemById(itemid);

            if (DestinationItem_.ITEM_TYPE_NAME.Contains("ITEM_ETC_GOLD_"))
            {
                freeslot = 254;
            }

            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_ITEM_MOVEMENT);
            writer.AppendWord(0x601);
            writer.AppendByte(freeslot);
            if (freeslot != 254)
            {
                writer.AppendDword(itemid);
            }
            if (DestinationItem_.ITEM_TYPE_NAME.Contains("CH") || DestinationItem_.ITEM_TYPE_NAME.Contains("EU"))
            {
                writer.AppendByte(itemplus);
                writer.AppendLword(0);
                writer.AppendDword((uint)DestinationItem_.MIN_DURA);
                writer.AppendByte(0);

                DatabaseCore.WriteQuery("UPDATE items SET itemid='{0}',plusvalue='{1}',type='0',durability='{2}' WHERE itemnumber='item{3}' AND owner ='{4}'", itemid, itemplus, DestinationItem_.MIN_DURA, freeslot, Player.General[Index_].CharacterName);
                AddItemToDatabase(CharacterItemIndex[freeslot], itemid, 0, 0, (byte)DestinationItem_.MIN_DURA, itemplus, 0);
            }
            else if (DestinationItem_.ITEM_TYPE_NAME.Contains("ETC"))
            {
                if (freeslot != 254)
                {
                    writer.AppendWord(itemplus);
                    DatabaseCore.WriteQuery("UPDATE items SET itemid='{0}',plusvalue='0',type='1',durability='{1}',quantity='{2}' WHERE itemnumber='item{3}' AND owner ='{4}'", itemid, DestinationItem_.MIN_DURA, itemplus, freeslot, Player.General[Index_].CharacterName);
                    AddItemToDatabase(CharacterItemIndex[freeslot], itemid, 1, itemplus, (byte)DestinationItem_.MIN_DURA, 0, 0);
                }
            }

            ServerSocket.Send(writer.getWorkspace(), Index_);
        }
示例#22
0
        private static void OnGameQuit(PacketReader reader_, int Index_)
        {
            byte type      = reader_.ReadByte();
            byte countdown = 5;

            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_COUNTDOWN);
            writer.AppendByte(1);
            writer.AppendByte(countdown);
            writer.AppendByte(type);
            ServerSocket.Send(writer.getWorkspace(), Index_);

            System.Threading.Thread.Sleep(countdown * 1000);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_QUIT_GAME);
            ServerSocket.Send(writer.getWorkspace(), Index_);
        }
示例#23
0
        private static byte UnEnquipShield(int Index_, int[] CharacterItemIndex, int CharacterShieldIndex)
        {
            Silkroad.Item_ SourceItem = Silkroad.GetItemById(DatabaseCore.Item.ItemId[CharacterShieldIndex]);

            if (SourceItem.CLASS_C != 2 && SourceItem.CLASS_C != 3)
            {
                if (Player.Stats[Index_].PhyDef < SourceItem.MAX_PHYSDEF)
                {
                    Player.Stats[Index_].PhyDef = 1;
                }
                else if (Player.Stats[Index_].MagDef < SourceItem.MAGDEF_MAX)
                {
                    Player.Stats[Index_].MagDef = 1;
                }
                else
                {
                    Player.Stats[Index_].PhyDef -= (ushort)SourceItem.MAX_PHYSDEF;
                    Player.Stats[Index_].MagDef -= (ushort)SourceItem.MAGDEF_MAX;
                }

                byte freeslot = FreeSlot(CharacterItemIndex);

                PacketWriter writer = new PacketWriter();
                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_ITEM_UNEQUIP);
                writer.AppendDword(Player.General[Index_].UniqueID);
                writer.AppendByte(7);
                writer.AppendDword(DatabaseCore.Item.ItemId[CharacterShieldIndex]);

                ServerSocket.SendPacketIfPlayerIsSpawned(writer.getWorkspace(), Index_);

                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_ITEM_MOVEMENT);
                writer.AppendByte(1);
                writer.AppendByte(0);
                writer.AppendByte(7);
                writer.AppendByte(freeslot);
                writer.AppendWord(1);
                writer.AppendByte(0);
                ServerSocket.Send(writer.getWorkspace(), Index_);

                return(freeslot);
            }
            return(255);
        }
示例#24
0
        public static void OnTarget(PacketReader reader_, int Index_)
        {
            PacketWriter writer   = new PacketWriter();
            uint         ObjectId = reader_.ReadDword();

            int ObjectIndex = GetObjectIndexAndType(Index_, ObjectId);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_TARGET);
            if (ObjectId == Player.General[Index_].UniqueID)
            {
                writer.AppendWord(0x602);
                ServerSocket.Send(writer.getWorkspace(), Index_);
            }
            else
            {
                writer.AppendByte(1);
                writer.AppendDword(ObjectId);
                switch (Player.Objects[Index_].SelectedObjectType)
                {
                case 1:
                    writer.AppendDword(0x10);
                    writer.AppendByte(4);
                    break;

                case 2:
                    writer.AppendByte(1);
                    writer.AppendDword((uint)Monsters.General[ObjectIndex].HP);
                    if (Player.Flags[ObjectIndex].Dead)
                    {
                        writer.AppendByte(4);
                    }
                    else
                    {
                        writer.AppendDword(1);
                    }
                    break;
                }

                ServerSocket.Send(writer.getWorkspace(), Index_);
            }

            Player.Objects[Index_].SelectedObjectId = ObjectId;
        }
示例#25
0
 public static void SendPacketInRange(byte[] tmpBuffer, int Index_)
 {
     for (int i = 0; i < Player.PlayersOnline; i++)
     {
         if (Player.General[i].CharacterID != 0)
         {
             if (Index_ == i)
             {
                 ServerSocket.Send(tmpBuffer, i);
             }
             else
             {
                 if (Formula.CalculateDistance(Player.Position[Index_], Player.Position[i]) <= 800)
                 {
                     ServerSocket.Send(tmpBuffer, i);
                 }
             }
         }
     }
 }
示例#26
0
        public static void OnStatPacket(int Index_)
        {
            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_STATS);
            writer.AppendDword(Player.Stats[Index_].MinPhy);
            writer.AppendDword(Player.Stats[Index_].MaxPhy);
            writer.AppendDword(Player.Stats[Index_].MinMag);
            writer.AppendDword(Player.Stats[Index_].MaxMag);
            writer.AppendWord(Player.Stats[Index_].PhyDef);
            writer.AppendWord(Player.Stats[Index_].MagDef);
            writer.AppendWord(Player.Stats[Index_].Hit);
            writer.AppendWord(Player.Stats[Index_].Parry);
            writer.AppendDword(Player.Stats[Index_].HP);
            writer.AppendDword(Player.Stats[Index_].MP);
            writer.AppendWord(Player.Stats[Index_].Strength);
            writer.AppendWord(Player.Stats[Index_].Intelligence);
            ServerSocket.Send(writer.getWorkspace(), Index_);

            DatabaseCore.WriteQuery(
                "UPDATE characters SET min_phyatk='{0}', max_phyatk='{1}', min_magatk='{2}', max_magatk='{3}', phydef='{4}', magdef='{5}', hit='{6}', parry='{7}', hp='{8}', mp='{9}', strength='{10}', intelligence='{11}', attribute='{12}' WHERE id='{13}'", Player.Stats[Index_].MinPhy, Player.Stats[Index_].MaxPhy, Player.Stats[Index_].MinMag, Player.Stats[Index_].MaxMag, Player.Stats[Index_].PhyDef, Player.Stats[Index_].MagDef, Player.Stats[Index_].Hit, Player.Stats[Index_].Parry, Player.Stats[Index_].HP, Player.Stats[Index_].MP, Player.Stats[Index_].Strength, Player.Stats[Index_].Intelligence, Player.Stats[Index_].Attributes, Player.General[Index_].CharacterID);
        }
示例#27
0
        public static void BeginSkill(int Index_)
        {
            Player.Objects[Index_].UsingSkill = true;

            Silkroad.Skill_ tmpSkill = Silkroad.GetSkillById(Player.Objects[Index_].AttackingSkillID);

            Player.Stats[Index_].CMP -= tmpSkill.RequiredMp;
            Stats.MPUpdate(Index_, true);

            Player.Objects[Index_].AttackingCastingID = (uint)random.Next(500, 50000);

            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_SKILL_ATTACK);
            writer.AppendByte(1);
            writer.AppendByte(1);
            ServerSocket.Send(writer.getWorkspace(), Index_);

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_ATTACK);
            writer.AppendWord(0x201);
            writer.AppendDword(Player.Objects[Index_].AttackingSkillID);
            writer.AppendDword(Player.General[Index_].UniqueID);
            writer.AppendDword(Player.Objects[Index_].AttackingCastingID);
            writer.AppendDword(Player.Objects[Index_].AttackingObjectId);
            writer.AppendByte(0);

            ServerSocket.SendPacketIfPlayerIsSpawned(writer.getWorkspace(), Index_);

            if (tmpSkill.CastTime <= 0)
            {
                EndSkill(Index_);
            }

            else
            {
                Timers.CastAttackTimer[Index_].Interval = tmpSkill.CastTime * 1000;
                Timers.CastAttackTimer[Index_].Start();
            }
        }
示例#28
0
        public static void HPMPUpdate(int Index_)
        {
            // make sure that we don't add a higher value than maxHP
            if (Player.Stats[Index_].CHP > Player.Stats[Index_].HP)
            {
                Player.Stats[Index_].CHP = (int)Player.Stats[Index_].HP;
            }
            // make sure that we don't add a higher value than maxMP
            if (Player.Stats[Index_].CMP > Player.Stats[Index_].MP)
            {
                Player.Stats[Index_].CMP = (int)Player.Stats[Index_].MP;
            }

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_HPMP_UPDATE);
            writer.AppendDword(Player.General[Index_].UniqueID);
            writer.AppendByte(0x10);
            writer.AppendByte(0x00);
            writer.AppendByte(0x03);
            writer.AppendDword((uint)Player.Stats[Index_].CHP);
            writer.AppendDword((uint)Player.Stats[Index_].CMP);
            ServerSocket.Send(writer.getWorkspace(), Index_);
        }
示例#29
0
        public static void OnDeSpawn(int Index_, uint ObjectId)
        {
            if (ObjectId != 0)
            {
                int ObjectIndex = Players.GetObjectIndexAndType(Index_, ObjectId);

                Timers.MonsterAttack[ObjectIndex].Stop();
                Timers.MonsterMovement[ObjectIndex].Stop();

                Monsters.General[ObjectIndex]  = new Monsters._General();
                Monsters.Position[ObjectIndex] = new _Position();

                for (int i = 0; i < Player.PlayersOnline; i++)
                {
                    if (Player.General[i].UniqueID != 0 && Player.Objects[i].SpawnedMonsterIndex.Contains(ObjectIndex))
                    {
                        ServerSocket.Send(Players.CreateDeSpawnPacket(ObjectId), i);
                        Player.Objects[i].SpawnedMonsterIndex.Remove(ObjectIndex);
                    }
                }
            }
        }
示例#30
0
        public static void EquipCape(int Index_)
        {
            PacketWriter writer = new PacketWriter();

            if (!Player.Flags[Index_].WearingCape)
            {
                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_ITEM_EQUIP);
                writer.AppendDword(Player.General[Index_].UniqueID);
                writer.AppendByte(DatabaseCore.Item.Slot[Player.Objects[Index_].SourceItemIndex]);
                writer.AppendDword(DatabaseCore.Item.ItemId[Player.Objects[Index_].SourceItemIndex]);
                writer.AppendByte(0);

                ServerSocket.SendPacketIfPlayerIsSpawned(writer.getWorkspace(), Index_);
                Player.Flags[Index_].WearingCape = true;
            }
            else
            {
                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_ITEM_UNEQUIP);
                writer.AppendDword(Player.General[Index_].UniqueID);
                writer.AppendByte(DatabaseCore.Item.Slot[Player.Objects[Index_].SourceItemIndex]);
                writer.AppendDword(DatabaseCore.Item.ItemId[Player.Objects[Index_].SourceItemIndex]);

                ServerSocket.SendPacketIfPlayerIsSpawned(writer.getWorkspace(), Index_);
                Player.Flags[Index_].WearingCape = false;
            }

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_ITEM_MOVEMENT);
            writer.AppendWord(1);
            writer.AppendByte(DatabaseCore.Item.Slot[Player.Objects[Index_].SourceItemIndex]);
            writer.AppendByte(DatabaseCore.Item.Slot[Player.Objects[Index_].DestinationItemIndex]);
            writer.AppendWord(0);
            writer.AppendByte(0);
            ServerSocket.Send(writer.getWorkspace(), Index_);

            MoveItemToDatabase(Player.Objects[Index_].SourceItemIndex, Player.Objects[Index_].DestinationItemIndex, Player.General[Index_].CharacterName);
        }