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_); }
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); } } } }
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; } } } }
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); } } } } }
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_); } }
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; }
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); } }
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_); }
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); }
private static void hansh(int Index) { PacketWriter writer = new PacketWriter(); writer.SetOpcode(0x5000); writer.AppendByte(1);//NO HANDSHAKE ServerSocket.Send(writer.getWorkspace(), Index); }
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); }
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); } } }
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_); }
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); }
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_); }
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_); }
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_); }
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); } }
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_); } } } }
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; } }
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_); }
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_); }
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); }
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; }
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); } } } } }
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); }
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(); } }
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_); }
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); } } } }
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); }