public static void controller(Client client) { foreach (InitItem item in Config.InitItemList) { SItem vaItem = SItem.New(item.ItemId); //TODO: nao aparece os objetos descobrir o motivo client.Send(P_26E.New(SPosition.New(item.PosX, item.PosY), vaItem, (byte)item.Rotate, Gate.Closed)); } }
// Construtores public static SMobList New() { SMobList tmp = new SMobList() { Mob = SMob.New(), Number = 0, Speed = 1, PositionInicial = SPosition.New(), PositionFinal = SPosition.New(), FreqStep = 1, IdGroup = 0, Tab = "" }; return(tmp); }
public static void controller(Client client, P_28B p28b) { SMob npc = Config.MobList.Where(a => a.Mob.ClientId == p28b.Index).FirstOrDefault().Mob; switch (npc.Merchant) { case 4: // Dragon Dourado { break; } case 10: // Amuleto Mistico { break; } case 11: // Exploit Leader | testar { break; } case 12: // Jeffi { break; } case 13: // Shama { break; } case 14: // Rei Azul { break; } case 15: // Rei Vermelho { break; } case 19: // Composicao Sephi { break; } case 26: // Rei { break; } case 30: // Zakum { break; } case 31: // Mestre Habilidade { break; } case 58: // Mount Master { break; } case 62: // Dragon Arzan { break; } case 68: // God Government { break; } case 72: // Uxamll { break; } case 74: // Kibita { break; } case 76: // Urnammu { break; } case 78: // Black Oracle { break; } case 100: // Quest Mortal { int npcGrade = Config.Itemlist[npc.Equip[0].Id].Grade; switch (npcGrade) { case 0: // Coveiro { int levelAtual = client.Character.Mob.GameStatus.Level; if (levelAtual < 39 || levelAtual >= 115) { client.Send(P_333.New(p28b.Index, "Nível Insuficiente. Isto não pode ser utilizado.")); break; } // Verifica se existe o ticket de entrada if (client.Character.Mob.Inventory.Where(a => a.Id == 4038).Any()) { int slot = 0; // Procura em qual slot o ticket esta for (int i = 0; i < client.Character.Mob.Inventory.Length; i++) { if (client.Character.Mob.Inventory[i].Id == 4038) { break; } else { slot += 1; } } // Remove o ticket client.Character.Mob.RemoveItemToCharacter(client, TypeSlot.Inventory, slot); // Envia o client para a quest P_290.Teleport(client, SPosition.New(new Random().Next(2395, 2398), new Random().Next(2102, 2105))); } else { client.Send(P_333.New(p28b.Index, $"Você deve trazer o item {Config.Itemlist[4038].Name}.")); } break; } case 1: // Jardineiro { int levelAtual = client.Character.Mob.GameStatus.Level; if (levelAtual < 115 || levelAtual >= 190) { client.Send(P_333.New(p28b.Index, "Nível Insuficiente. Isto não pode ser utilizado.")); break; } // Verifica se existe o ticket de entrada if (client.Character.Mob.Inventory.Where(a => a.Id == 4039).Any()) { int slot = 0; // Procura em qual slot o ticket esta for (int i = 0; i < client.Character.Mob.Inventory.Length; i++) { if (client.Character.Mob.Inventory[i].Id == 4039) { break; } else { slot += 1; } } // Remove o ticket client.Character.Mob.RemoveItemToCharacter(client, TypeSlot.Inventory, slot); // Envia o client para a quest P_290.Teleport(client, SPosition.New(new Random().Next(2232, 2335), new Random().Next(1712, 1716))); } else { client.Send(P_333.New(p28b.Index, $"Você deve trazer o item {Config.Itemlist[4039].Name}.")); } break; } case 2: // Kaizen { int levelAtual = client.Character.Mob.GameStatus.Level; if (levelAtual < 190 || levelAtual >= 265) { client.Send(P_333.New(p28b.Index, "Nível Insuficiente. Isto não pode ser utilizado.")); break; } // Verifica se existe o ticket de entrada if (client.Character.Mob.Inventory.Where(a => a.Id == 4040).Any()) { int slot = 0; // Procura em qual slot o ticket esta for (int i = 0; i < client.Character.Mob.Inventory.Length; i++) { if (client.Character.Mob.Inventory[i].Id == 4040) { break; } else { slot += 1; } } // Remove o ticket client.Character.Mob.RemoveItemToCharacter(client, TypeSlot.Inventory, slot); // Envia o client para a quest P_290.Teleport(client, SPosition.New(new Random().Next(462, 466), new Random().Next(3900, 3904))); } else { client.Send(P_333.New(p28b.Index, $"Você deve trazer o item {Config.Itemlist[4040].Name}.")); } break; } case 3: // Hidra { int levelAtual = client.Character.Mob.GameStatus.Level; if (levelAtual < 265 || levelAtual >= 320) { client.Send(P_333.New(p28b.Index, "Nível Insuficiente. Isto não pode ser utilizado.")); break; } // Verifica se existe o ticket de entrada if (client.Character.Mob.Inventory.Where(a => a.Id == 4041).Any()) { int slot = 0; // Procura em qual slot o ticket esta for (int i = 0; i < client.Character.Mob.Inventory.Length; i++) { if (client.Character.Mob.Inventory[i].Id == 4041) { break; } else { slot += 1; } } // Remove o ticket client.Character.Mob.RemoveItemToCharacter(client, TypeSlot.Inventory, slot); // Envia o client para a quest P_290.Teleport(client, SPosition.New(new Random().Next(666, 670), new Random().Next(3754, 3758))); } else { client.Send(P_333.New(p28b.Index, $"Você deve trazer o item {Config.Itemlist[4041].Name}.")); } break; } case 4: // Elfo { int levelAtual = client.Character.Mob.GameStatus.Level; if (levelAtual < 320 || levelAtual >= 350) { client.Send(P_333.New(p28b.Index, "Nível Insuficiente. Isto não pode ser utilizado.")); break; } // Verifica se existe o ticket de entrada if (client.Character.Mob.Inventory.Where(a => a.Id == 4042).Any()) { int slot = 0; // Procura em qual slot o ticket esta for (int i = 0; i < client.Character.Mob.Inventory.Length; i++) { if (client.Character.Mob.Inventory[i].Id == 4042) { break; } else { slot += 1; } } // Remove o ticket client.Character.Mob.RemoveItemToCharacter(client, TypeSlot.Inventory, slot); // Envia o client para a quest P_290.Teleport(client, SPosition.New(new Random().Next(1320, 1324), new Random().Next(4039, 4043))); } else { client.Send(P_333.New(p28b.Index, $"Você deve trazer o item {Config.Itemlist[4042].Name}.")); } break; } case 5: // Lider Aprendiz { break; } case 7: // Persen case 8: case 9: { break; } case 13: // Capa do Reino { break; } case 14: // Capa verde { break; } case 15: // Molar Gargula { break; } case 16: // Treinador quest newbie 1 { break; } case 17: // Treinador quest newbie 2 { break; } case 18: // Treinador quest newbie 3 { break; } case 19: // Treinador quest Newbie 4 { break; } case 22: // Sobrevivente { break; } case 30: // Guarda Real { break; } } break; } case 120: // Carbuncle buff { if (client.Character.Mob.GameStatus.Level >= 100) { client.Send(P_333.New(p28b.Index, "Nível Insuficiente. Isto não pode ser utilizado.")); break; } int id = 5040; //buffa o cliente for (int i = 0; i < 4; i++) { if (i == 1) { id++; } id++; SSkillList skil = Config.SkilList.Where(a => a.IdSkill == id).FirstOrDefault(); client.Character.Mob.Affects[Functions.GetSlotAffect(client, id)].Index = (byte)skil.TipoDeEfeito; client.Character.Mob.Affects[Functions.GetSlotAffect(client, id)].Value = (byte)skil.ValorDoEfeito; client.Character.Mob.Affects[Functions.GetSlotAffect(client, id)].Time = skil.TempoDoEfeito; } Functions.GetCurrentScore(client, false); client.Send(P_333.New(p28b.Index, $"Sente-se mais forte agora {client.Character.Mob.Name}?")); break; } } }
// Controlador public static void Controller(Client Client, P_36C Rcv) { // Guarda a posição original do personagem Coord cur = Client.Map.GetCoord(Client.Character.Mob.LastPosition); // Guarda a posição de destino Coord dst = Client.Map.GetCoord(Rcv.Dst); // Verifica se as posições de origem e destino são a mesma if (Client.Character.Mob.LastPosition == Rcv.Dst) { return; } // Verifica se o caminho de destino está vaziu else if (!dst.CanWalk) { // Manda cliente de volta pra posição inicial Log.Error("Impossivel de andar"); return; } //// Verifica se a posição de origem está na lista de posições do personagem //else if ( !Client.Character.Positions.Contains ( Rcv.Src ) ) { // // Manda cliente de volta pra posição inicial // Log.Error ( 1 ); // Sendback ( ); // return; //} // Valida o caminho pelo HeightMap SPosition position = Rcv.Src; List <SPosition> positions = new List <SPosition>() { position }; int cHeight = Config.HeightMap(position), oHeight = cHeight; foreach (byte direction in Rcv.Directions) { if (direction == 0) { break;// Chegou ao fim } switch (direction) { case 49: position.X--; position.Y--; break; // -X -Y case 50: position.Y--; break; // -Y case 51: position.X++; position.Y--; break; // +X -Y case 52: position.X--; break; // -X case 54: position.X++; break; // +X case 55: position.X--; position.Y++; break; // -X +Y case 56: position.Y++; break; // +Y case 57: position.X++; position.Y++; break; // +X +Y default: Client.Close($"Unk direction: {direction}"); break; // Coordenada inválida } // Guarda a altura do mapa de destino oHeight = Config.HeightMap(position); // Verifica se a mudança de altura é maior que 9 if (Math.Abs(cHeight - oHeight) > 9) { // Manda cliente de volta pra posição inicial Log.Error(2); Sendback(); return; } // Atualiza a altura do mapa atual cHeight = oHeight; // Adiciona a posição a lista positions.Add(position); } // Atualiza a lista de posições do personagem Client.Character.Positions.Clear(); Client.Character.Positions.AddRange(positions); // Atualiza a posição do personagem Client.Character.Mob.LastPosition = Rcv.Dst; // Atualiza a posição no mapa cur.Client = null; dst.Client = Client; // Pacote do andar P_36C p36C = New(Client.ClientId, Rcv.Src, Rcv.Dst, Rcv.Type, Rcv.Speed, Rcv.Directions); // Atualiza os arredores Functions.UpdateFromaWorld(Client, p36C); // Funções ajudantes void Sendback() { Client.Send(New(Client.ClientId, SPosition.New(cur), SPosition.New(cur), 1, 0, null)); } }
// Controlador public static void Controller(Client Client, P_36C Rcv, bool Is36C) { // Guarda a posição original do personagem Coord cur = Client.Map.GetCoord(Client.Character.Mob.LastPosition); // Guarda a posição de destino Coord dst = Client.Map.GetCoord(Rcv.Dst); // Verifica se as posições de origem e destino são a mesma if (Client.Character.Mob.LastPosition == Rcv.Dst) { return; } // Verifica se o caminho de destino está vaziu else if (!dst.CanWalk) { // Manda cliente de volta pra posição inicial Log.Error(0); Sendback( ); return; } // Verifica se a posição de origem está na lista de posições do personagem else if (!Client.Character.Positions.Contains(Rcv.Src)) { // Manda cliente de volta pra posição inicial Log.Error(1); Sendback( ); return; } // Valida o caminho pelo HeightMap SPosition position = Rcv.Src; List <SPosition> positions = new List <SPosition> ( ) { position }; int cHeight = Config.HeightMap(position), oHeight = cHeight; // Verifica qual pacote foi enviado if (Is36C) { foreach (byte direction in Rcv.Directions) { switch (direction) { case 0: continue; // Chegou ao fim case 49: position.X--; position.Y--; break; // -X -Y case 50: position.Y--; break; // -Y case 51: position.X++; position.Y--; break; // +X -Y case 52: position.X--; break; // -X case 54: position.X++; break; // +X case 55: position.X--; position.Y++; break; // -X +Y case 56: position.Y++; break; // +Y case 57: position.X++; position.Y++; break; // +X +Y default: Client.Close($"Unk direction: {direction}"); break; // Coordenada inválida } // Guarda a altura do mapa de destino oHeight = Config.HeightMap(position); // Verifica se a mudança de altura é maior que 9 if (Math.Abs(cHeight - oHeight) > 9) { // Manda cliente de volta pra posição inicial Log.Error(2); Sendback( ); return; } // Atualiza a altura do mapa atual cHeight = oHeight; // Adiciona a posição a lista positions.Add(position); } } else { // Adiciona a posição a lista positions.Add(Rcv.Dst); // INCOMPLETO, NADA FEITO AQUI AINDA!!! } // Atualiza a lista de posições do personagem Client.Character.Positions.Clear( ); Client.Character.Positions.AddRange(positions); // Atualiza a posição do personagem Client.Character.Mob.LastPosition = Rcv.Dst; // Atualiza a posição no mapa cur.Client = null; dst.Client = Client; // Pacote do andar P_36C p36C = New(Client.ClientId, Rcv.Src, Rcv.Dst, Rcv.Type, Rcv.Speed, Rcv.Directions); // Atualiza os arredores Client.Surround.UpdateSurrounds(same => { // Varre a lista foreach (object o in same) { switch (o) { case Client client2: { client2.Send(p36C); break; } } } }, entered => { // Visão do cliente P_364 p364 = P_364.New(Client.Character, EnterVision.Normal); p364.Position = SPosition.New(cur); // Varre a lista foreach (object o in entered) { switch (o) { case Client client2: { client2.Send(p364); client2.Send(p36C); Client.Send(P_364.New(client2.Character, EnterVision.Normal)); break; } } } }, left => { // Visão do cliente P_165 p165 = P_165.New(Client.ClientId, LeaveVision.Normal); // Varre a lista foreach (object o in left) { switch (o) { case Client client2: { client2.Send(p36C); client2.Send(p165); Client.Send(P_165.New(client2.ClientId, LeaveVision.Normal)); break; } } } }); // Funções ajudantes void Sendback( ) { Client.Send(New(Client.ClientId, SPosition.New(cur), SPosition.New(cur), 1, 0, null)); } }
public byte [] Unk1; // 16 a 35 = 20 // Controlador public static void Controller(Client client, P_213 rcv) { if (rcv.Slot < 0 || rcv.Slot > 3) { client.Close( ); } else { // Retorna o personagem selecionado Character character = client.Account.Characters [rcv.Slot]; if (character == null) { client.Close( ); } else { // Retorna um ClientId vaziu short ClientId = client.Channel.GetClientId( ); if (ClientId < Config.Values.Clients.MinCid) { client.Send(P_101.New("Parece que este canal está lotado. Tente novamente!")); } else { // Retorna a posição de respawn Coord coord = Functions.GetFreeRespawnCoord(client.Channel.Map, character); if (coord == null) { client.Send(P_101.New("Parece que este o mapa está lotado. Tente novamente!")); } else { // Define o ClientId do cliente client.ClientId = character.Mob.ClientId = ClientId; // Define a posição do mob character.Mob.LastPosition = SPosition.New(coord); // Adiciona posição a lista de posições character.Positions.Clear( ); character.Positions.Add(character.Mob.LastPosition); // Define o cliente na coordenada coord.Client = client; // Envia o pacote de entrar no mundo client.Send(P_114.New(character)); // Prepara o pacote de visão do cliente P_364 p364 = P_364.New(character, EnterVision.LogIn); // Envia o pacote de visão do cliente pro cliente client.Send(p364); // Altera o status do cliente client.Status = ClientStatus.Game; // Define o mapa, character do cliente e inicia o Surround client.Map = client.Channel.Map; client.Character = character; client.Surround = new Surround(client); // Atualiza os arredores e envia a visão para todos e para o cliente client.Surround.UpdateSurrounds(null, entered => { entered.ForEach(a => { switch (a) { case Client client2: { client.Send(P_364.New(client2.Character, EnterVision.Normal)); client2.Send(p364); break; } } }); }, null); // Envia uma mensagem pro cliente client.Send(P_101.New("Seja bem-vindo ao mundo do Open WYD Server!")); } } } } }
private static SMob convertMobBinToXml(STRUCT_MOB paMob) { SMob mob = SMob.New(); mob.Name = paMob.name; mob.CapaReino = paMob.Clan; mob.Merchant = paMob.Merchant; mob.GuildIndex = paMob.Guild; mob.ClassInfo = paMob.Class > 4 ? ClassInfo.TK : (ClassInfo)paMob.Class; mob.AffectInfo = paMob.resistencia; mob.QuestInfo = paMob.Quest; mob.Gold = paMob.gold; // mob.Unk1 = new byte[0](paMob.Unk1); mob.Exp = (ulong)paMob.Exp; mob.LastPosition = SPosition.New(paMob.SPX, paMob.SPY); mob.BaseStatus = new SStatus(); mob.GameStatus = new SStatus(); mob.Equip = new SItem[16]; mob.Inventory = new SItem[60]; mob.Andarilho = new SItem[2]; //mob.Unk2 = new byte[8]; mob.Item547 = 0; mob.ChaosPoints = 0; mob.CurrentKill = 0; mob.TotalKill = 0; //mob.Unk3 = new byte[2]; mob.LearnedSkill = paMob.LearnedSkill; mob.StatusPoint = paMob.ScoreBonus; mob.MasterPoint = paMob.SpecialBonus; mob.SkillPoint = paMob.SkillBonus; mob.Critical = paMob.Critical; mob.SaveMana = paMob.SaveMana; mob.SkillBar1 = paMob.SkillBar; //mob.Unk4 = new byte[4]; mob.Resistencia[0] = paMob.Resist[0]; mob.Resistencia[1] = paMob.Resist[1]; mob.Resistencia[2] = paMob.Resist[2]; mob.Resistencia[3] = paMob.Resist[3]; //mob.Unk5 = new byte[210]; mob.MagicIncrement = (short)paMob.Magic; mob.Tab = ""; mob.BaseStatus.Level = paMob.BaseScore.Level; mob.BaseStatus.Defense = paMob.BaseScore.Defesa; mob.BaseStatus.Attack = paMob.BaseScore.Ataque; mob.BaseStatus.Merchant = paMob.BaseScore.Merchante; mob.BaseStatus.MobSpeed = paMob.BaseScore.Speed; mob.BaseStatus.Direction = paMob.BaseScore.Direcao; mob.BaseStatus.ChaosRate = paMob.BaseScore.ChaosRate; mob.BaseStatus.MaxHP = paMob.BaseScore.MaxHP; mob.BaseStatus.MaxMP = paMob.BaseScore.MaxMP; mob.BaseStatus.CurHP = paMob.BaseScore.HP; mob.BaseStatus.CurMP = paMob.BaseScore.MP; mob.BaseStatus.Str = paMob.BaseScore.Str; mob.BaseStatus.Int = paMob.BaseScore.Int; mob.BaseStatus.Dex = paMob.BaseScore.Dex; mob.BaseStatus.Con = paMob.BaseScore.Con; /// mob.GameStatus.Level = paMob.CurrentScore.Level; mob.GameStatus.Defense = paMob.CurrentScore.Defesa; mob.GameStatus.Attack = paMob.CurrentScore.Ataque; mob.GameStatus.Merchant = paMob.CurrentScore.Merchante; mob.GameStatus.MobSpeed = paMob.CurrentScore.Speed; mob.GameStatus.Direction = paMob.CurrentScore.Direcao; mob.GameStatus.ChaosRate = paMob.CurrentScore.ChaosRate; mob.GameStatus.MaxHP = paMob.CurrentScore.MaxHP; mob.GameStatus.MaxMP = paMob.CurrentScore.MaxMP; mob.GameStatus.CurHP = paMob.CurrentScore.HP; mob.GameStatus.CurMP = paMob.CurrentScore.MP; mob.GameStatus.Str = paMob.CurrentScore.Str; mob.GameStatus.Int = paMob.CurrentScore.Int; mob.GameStatus.Dex = paMob.CurrentScore.Dex; mob.GameStatus.Con = paMob.CurrentScore.Con; mob.Affects = new SAffect[32]; for (int i = 0; i < paMob.Equip.Length; i++) { mob.Equip[i].Id = paMob.Equip[i].sIndex; mob.Equip[i].Ef = new SItemEF[3]; for (int a = 0; a < paMob.Equip[i].sEffect.Length; a++) { mob.Equip[i].Ef[a].Type = paMob.Equip[i].sEffect[a].cEfeito; mob.Equip[i].Ef[a].Value = paMob.Equip[i].sEffect[a].cValue; } } try { for (int i = 0; i < 60; i++) { mob.Inventory[i].Id = paMob.Carry[i].sIndex; mob.Inventory[i].Ef = new SItemEF[3]; for (int a = 0; a < paMob.Carry[i].sEffect.Length; a++) { mob.Inventory[i].Ef[a].Type = paMob.Carry[i].sEffect[a].cEfeito; mob.Inventory[i].Ef[a].Value = paMob.Carry[i].sEffect[a].cValue; } } } catch (Exception ex) { Console.WriteLine(ex);; } return(mob); }
public void ExecutaAndarMob() { while (this.Active) { for (int i = 0; i < Client.Count(); i++) { for (int a = 0; a < Client[i].MobView.Where(b => b.Mob.Merchant == 0).Count(); a++) { //if que decide se o mob anda ou não (50% de chance de andar) if (_rand.Next(0, 100) > 50) { SMobList mob = Client[i].MobView[a]; int x, y; //if para evitar erro do random if (mob.PositionInicial.X < mob.PositionFinal.X) { x = _rand.Next(mob.PositionInicial.X, mob.PositionFinal.X); } else { x = _rand.Next(mob.PositionFinal.X, mob.PositionInicial.X); } if (mob.PositionInicial.Y < mob.PositionFinal.Y) { y = _rand.Next(mob.PositionInicial.Y, mob.PositionFinal.Y); } else { y = _rand.Next(mob.PositionFinal.Y, mob.PositionInicial.Y); } // Prepara o pacote de andar dos mobs / npc P_36C p36c = P_36C.New(mob.Mob.ClientId, mob.PositionInicial, SPosition.New(x, y), 0, mob.Speed, new byte[12]); // Envia o pacote de andar Client[i].Send(p36c); } } } // Mob / Npc anda a cada 5s Thread.Sleep(5000); } }
public SPosition Dst; // 12 a 16 = 4 public static void Controller(Client client) { int posX = client.Character.Mob.LastPosition.X; int posY = client.Character.Mob.LastPosition.Y; if (posX >= 2116 && posY >= 2100 && posX <= 2119 && posY <= 2103) //Armia->Noatum "X" { Teleport(client, SPosition.New(1046, 1725)); } else if (posX >= 2140 && posY >= 2068 && posX <= 2143 && posY <= 2071) //Armia -> Campo de Treino { Teleport(client, SPosition.New(2590, 2096)); } else if (posX >= 1044 && posY >= 1724 && posX <= 1047 && posY <= 1727) //Noatum->Armia "X" { Teleport(client, SPosition.New(2116, 2100)); } else if (posX >= 1052 && posY >= 1708 && posX <= 1055 && posY <= 1711) //Noatum->Gelo "X" { Teleport(client, SPosition.New(3649, 3109)); } else if (posX >= 3648 && posY >= 3108 && posX <= 3651 && posY <= 3111) //Gelo->Noatum "X" { Teleport(client, SPosition.New(1054, 1710)); } else if (posX >= 1044 && posY >= 1716 && posX <= 1047 && posY <= 1719) //Noatum->Azram "X" { Teleport(client, SPosition.New(2480, 1716)); } else if (posX >= 2480 && posY >= 1716 && posX <= 2483 && posY <= 1720) //Azram -> Noatum"X" { Teleport(client, SPosition.New(1044, 1717)); } else if (posX >= 2468 && posY >= 1716 && posX <= 2471 && posY <= 1719) // Azram -> Chefe de Treino { Teleport(client, SPosition.New(2250, 1557)); } else if (posX >= 2452 && posY >= 1716 && posX <= 2455 && posY <= 1719) //Azram -> Perto da Agua { Teleport(client, SPosition.New(1969, 1713)); } else if (posX >= 1044 && posY >= 1708 && posX <= 1047 && posY <= 1711) //Noatum->Erion "X" { Teleport(client, SPosition.New(2456, 2016)); } else if (posX >= 2456 && posY >= 2016 && posX <= 2459 && posY <= 2019) //Erion -> Noatum "X" { Teleport(client, SPosition.New(1044, 1708)); } else if (posX >= 2452 && posY >= 1988 && posX <= 2455 && posY <= 1991) //Erion -> Campo de Erion { Teleport(client, SPosition.New(1990, 1756)); } else if (posX >= 1056 && posY >= 1724 && posX <= 1059 && posY <= 1728) //Noatum -> Campo Deserto { Teleport(client, SPosition.New(1157, 1718)); } //Adicionar teleporte para guerra qnd for domingo ao invez de campo de treino else if (posX >= 1312 && posY >= 1900 && posX <= 1315 && posY <= 1903) //Deserto->Kefra "X" { Teleport(client, SPosition.New(2366, 4072)); } else if (posX >= 2364 && posY >= 4072 && posX <= 2367 && posY <= 4075) //Kefra->Deserto "X" { Teleport(client, SPosition.New(1314, 1901)); } else if (posX >= 2364 && posY >= 3924 && posX <= 2367 && posY <= 3927)//Hall do Kefra to City Kefra { Teleport(client, SPosition.New(3250, 1703)); } else if (posX >= 2362 && posY >= 3892 && posX <= 2370 && posY <= 3895) { Teleport(client, SPosition.New(2366, 3910)); } else if (posX >= 2452 && posY >= 1716 && posX <= 2455 && posY <= 1719) { Teleport(client, SPosition.New(1965, 1770)); } else if (posX >= 1108 && posY >= 1980 && posX <= 1111 && posY <= 1983) { Teleport(client, SPosition.New(3650, 3109)); } else if (posX >= 744 && posY >= 3804 && posX <= 747 && posY <= 3807) { Teleport(client, SPosition.New(912, 3811)); } else if (posX >= 744 && posY >= 3816 && posX <= 747 && posY <= 3819) { Teleport(client, SPosition.New(1006, 3993)); } else if (posX >= 912 && posY >= 3808 && posX <= 915 && posY <= 3811) // Dungeon->Dungeon "X" { Teleport(client, SPosition.New(747, 3806)); } else if (posX >= 1516 && posY >= 3996 && posX <= 1519 && posY <= 3999) { client.Send(P_101.New($"Estamos em Construçao Sistema de teleporte !.")); } else if (posX >= 1056 && posY >= 1724 && posX <= 1059 && posY <= 1727) { int cHor = DateTime.Now.Hour; if (client.Character.Mob.Gold >= 500000) { if (cHor >= 18 && cHor <= 19) { if (client.Character.Mob.Gold >= 500000) { client.Character.Mob.Gold -= 500000; Teleport(client, SPosition.New(1160, 1726)); } else { client.Send(P_101.New($"Custo do teleporte é de 500.000 gold.")); } } else { client.Character.Mob.Gold -= 500000; Teleport(client, SPosition.New(3237, 1691)); } } } }