public override void Execute(GameCommandTrigger trigger) { Player player = trigger.Session.Player; Character fieldPlayer = player.FieldPlayer; int mountId = trigger.Get <int>("mountId"); byte enable = trigger.Get <byte>("enable"); if (enable is 0) { player.Mount = null; // Remove mount from player trigger.Session.FieldManager.BroadcastPacket(MountPacket.StopRide(fieldPlayer, true)); trigger.Session.Send(KeyTablePacket.SendHotbars(player.GameOptions)); return; } IFieldObject <Mount> fieldMount = trigger.Session.FieldManager.RequestFieldObject(new Mount { Type = RideType.Default, Id = mountId, Uid = 0 }); fieldMount.Value.Players[0] = fieldPlayer; player.Mount = fieldMount; trigger.Session.FieldManager.BroadcastPacket(MountPacket.StartRide(fieldPlayer)); }
public override void Execute(GameCommandTrigger trigger) { Player player = trigger.Session.Player; int trophyId = trigger.Get <int>("trophyId"); int amount = trigger.Get <int>("amount"); if (trophyId == 0) { trigger.Session.Send(NoticePacket.Notice("Type an trophy id!", NoticeType.Chat)); return; } if (!player.TrophyData.ContainsKey(trophyId)) { player.TrophyData[trophyId] = new(player.CharacterId, player.AccountId, trophyId); } player.TrophyData[trophyId].AddCounter(trigger.Session.Player, amount); player.TrophyData.TryGetValue(trophyId, out Trophy trophy); trigger.Session.Send(TrophyPacket.WriteUpdate(trophy)); DatabaseManager.Trophies.Update(trophy); trigger.Session.Send(NoticePacket.Notice("Done!", NoticeType.Chat)); }
public override void Execute(GameCommandTrigger trigger) { int mobId = trigger.Get <int>("id"); if (NpcMetadataStorage.GetNpc(mobId) == null) { trigger.Session.Send(NoticePacket.Notice($"No MOB was found with the id: {mobId.ToString().Color(Color.DarkOliveGreen)}", NoticeType.Chat)); return; } Mob mob = new Mob(mobId) { Animation = trigger.Get <short>("ani"), ZRotation = trigger.Get <short>("dir") }; IFieldObject <Mob> fieldMob = trigger.Session.FieldManager.RequestFieldObject(mob); CoordF coord = trigger.Get <CoordF>("coord"); if (coord == default) { fieldMob.Coord = trigger.Session.FieldPlayer.Coord; } else { fieldMob.Coord = coord; } trigger.Session.FieldManager.AddMob(fieldMob); }
public override void Execute(GameCommandTrigger trigger) { byte option = trigger.Get <byte>("option"); byte red = trigger.Get <byte>("red"); byte green = trigger.Get <byte>("green"); byte blue = trigger.Get <byte>("blue"); if (red is 0 && green is 0 && blue is 0) { trigger.Session.SendNotice(Usage); return; } switch (option) { case 0: trigger.Session.FieldManager.BroadcastPacket(FieldPropertyPacket.ChangeAmbientLight(red, green, blue)); break; case 1: trigger.Session.FieldManager.BroadcastPacket(FieldPropertyPacket.ChangeDirectionalLight(red, green, blue)); break; default: trigger.Session.SendNotice($"Invalid option: {option}"); break; } }
public override void Execute(GameCommandTrigger trigger) { string type = trigger.Get <string>("type"); string[] command = trigger.Get <string[]>("name"); if (string.IsNullOrEmpty(type) || !Options.Contains(type) || command is null) { trigger.Session.SendNotice($"Usage: /find [{string.Join("/", Options)}] [name]"); return; } string[] args = command[1..];
public override void Execute(GameCommandTrigger trigger) { string currencyName = trigger.Get <string>("name"); long amount = trigger.Get <long>("amount"); GameSession session = trigger.Session; if (string.IsNullOrEmpty(currencyName)) { session.SendNotice("No currency type were found. Try one of the list."); session.Send(NoticePacket.Notice("valor, treva, rue, havi, meso, meret, mesotoken".Color(Color.DarkOrange), NoticeType.Chat)); return; } if (amount <= 0) { session.SendNotice("Amount must be more than 0 to add."); return; } switch (currencyName) { case "valor": session.Player.Wallet.ValorToken.SetAmount(amount); break; case "treva": session.Player.Wallet.Treva.SetAmount(amount); break; case "rue": session.Player.Wallet.Rue.SetAmount(amount); break; case "havi": session.Player.Wallet.HaviFruit.SetAmount(amount); break; case "meso": session.Player.Wallet.Meso.SetAmount(amount); break; case "meret": session.Player.Account.Meret.SetAmount(amount); break; case "mesotoken": session.Player.Account.MesoToken.SetAmount(amount); break; } }
public override void Execute(GameCommandTrigger trigger) { string jobName = trigger.Get <string>("job"); byte awakened = trigger.Get <byte>("awakened"); Player player = trigger.Session.Player; IFieldObject <Player> fieldPlayer = trigger.Session.Player.FieldPlayer; long activeSkillTabId = player.ActiveSkillTabId; SkillTab skillTab = player.SkillTabs.First(tab => tab.TabId == activeSkillTabId); if (string.IsNullOrEmpty(jobName)) { string[] classes = Enum.GetNames(typeof(Job)); player.Session.Send(NoticePacket.Notice("You have to give a classname and specifiy awakening (1 or 0)\nAvailable classes:\n".Bold().Color(Color.DarkOrange) + $"{string.Join(", ", classes).Color(Color.Aquamarine)}", NoticeType.Chat)); return; } Job job = Job.None; if (!Enum.TryParse(jobName, true, out job)) { player.Session.SendNotice($"{jobName} is not a valid class name"); return; } if (job == Job.None) { player.Session.SendNotice("None is not a valid class"); return; } if (job != player.Job) { DatabaseManager.SkillTabs.Delete(skillTab.Uid); SkillTab newSkillTab = new(player.CharacterId, job, skillTab.TabId, skillTab.Name); player.SkillTabs[player.SkillTabs.IndexOf(skillTab)] = newSkillTab; player.Job = job; } player.Awakened = awakened == 1; trigger.Session.Send(JobPacket.SendJob(fieldPlayer)); }
public override void Execute(GameCommandTrigger trigger) { Player player = trigger.Session.Player; bool mapIsHome = player.MapId == (int)Map.PrivateResidence; if (!mapIsHome) { return; } Home home = GameServer.HomeManager.GetHomeById(player.VisitingHomeId); if (home.AccountId != player.AccountId) { return; } string[] args = trigger.Get <string[]>("options"); if (args is null) { trigger.Session.Send(HomeActionPacket.SurveyMessage()); return; } string[] options = args[1..];
public override void Execute(GameCommandTrigger trigger) { Player player = trigger.Session.Player; bool mapIsHome = player.MapId == (int)Map.PrivateResidence; if (!mapIsHome) { return; } Home home = GameServer.HomeManager.GetHomeById(player.VisitingHomeId); if (home.AccountId != player.AccountId) { return; } string[] args = trigger.Get <string[]>("message"); if (args is null) { trigger.Session.FieldManager.BroadcastPacket(HomeActionPacket.HostAlarm(string.Empty)); return; } StringBuilder message = new(); foreach (string arg in args[1..])
public override void Execute(GameCommandTrigger trigger) { int questId = trigger.Get <int>("id"); if (questId == 0) { trigger.Session.SendNotice("Type an quest id."); return; } QuestMetadata quest = QuestMetadataStorage.GetMetadata(questId); if (quest == null) { trigger.Session.Send(NoticePacket.Notice($"Quest not found with id: {questId.ToString().Color(Color.Aquamarine)}.", NoticeType.Chat)); return; } if (trigger.Session.Player.QuestData.ContainsKey(questId)) { trigger.Session.Send(NoticePacket.Notice($"You already have quest: {questId.ToString().Color(Color.Aquamarine)}.", NoticeType.Chat)); return; } trigger.Session.Player.QuestData.Add(questId, new(trigger.Session.Player, quest, QuestState.Started, TimeInfo.Now())); trigger.Session.Send(QuestPacket.AcceptQuest(questId)); }
public override void Execute(GameCommandTrigger trigger) { int trophyId = trigger.Get <int>("trophyId"); int amount = trigger.Get <int>("amount"); if (trophyId == 0) { trigger.Session.Send(NoticePacket.Notice("Type an trophy id!", NoticeType.Chat)); return; } trigger.Session.Player.TrophyUpdate(trophyId, amount); trigger.Session.Player.TrophyData.TryGetValue(trophyId, out Trophy trophy); DatabaseManager.Trophies.Update(trophy); trigger.Session.Send(NoticePacket.Notice("Done!", NoticeType.Chat)); }
public override void Execute(GameCommandTrigger trigger) { int id = trigger.Get <int>("id"); short level = trigger.Get <short>("level") > 0 ? trigger.Get <short>("level") : (short)1; if (SkillMetadataStorage.GetSkill(id) == null) { trigger.Session.SendNotice($"Skill with id: {id} is not defined."); return; } SkillCast skillCast = new SkillCast(id, level, GuidGenerator.Long(), trigger.Session.ServerTick, trigger.Session.FieldPlayer.ObjectId, trigger.Session.ClientTick); CoordF empty = CoordF.From(0, 0, 0); IFieldObject <Player> player = trigger.Session.FieldPlayer; trigger.Session.FieldManager.BroadcastPacket(SkillUsePacket.SkillUse(skillCast, player.Coord, empty, empty)); }
public override void Execute(GameCommandTrigger trigger) { int mapId = trigger.Get <int>("id"); int instanceId = trigger.Get <int>("instance"); if (MapMetadataStorage.GetMetadata(mapId) == null) { trigger.Session.SendNotice($"Current map id:{trigger.Session.Player.MapId} instance: {trigger.Session.Player.InstanceId}"); return; } if (trigger.Session.Player.MapId == mapId && trigger.Session.Player.InstanceId == instanceId) { trigger.Session.SendNotice("You are already on that map."); return; } trigger.Session.Player.Warp(mapId: mapId, instanceId: instanceId); }
public override void Execute(GameCommandTrigger trigger) { int id = trigger.Get <int>("id"); if (SkillMetadataStorage.GetSkill(id) == null) { trigger.Session.SendNotice($"No skill found with id: {id}"); return; } short level = trigger.Get <short>("level") <= 10 && trigger.Get <short>("level") != 0 ? trigger.Get <short>("level") : (short)1; // The Status packet needs this in miliseconds, we are converting them here for the user to just input the actual seconds. int duration = trigger.Get <int>("duration") <= 3600 && trigger.Get <int>("duration") != 0 ? trigger.Get <int>("duration") * 1000 : 10000; int stacks = trigger.Get <int>("stacks") == 0 ? 1 : trigger.Get <int>("stacks"); SkillCast skillCast = new SkillCast(id, level); if (skillCast.IsBuffToOwner() || skillCast.IsBuffToEntity() || skillCast.IsBuffShield() || skillCast.IsGM() || skillCast.IsGlobal() || skillCast.IsHealFromBuff()) { Status status = new Status(skillCast, trigger.Session.FieldPlayer.ObjectId, trigger.Session.FieldPlayer.ObjectId, stacks); StatusHandler.Handle(trigger.Session, status); return; } trigger.Session.SendNotice($"Skill with id: {id} is not a buff to the owner."); }
public override void Execute(GameCommandTrigger trigger) { string[] command = trigger.Get <string[]>("map"); if (command is null) { return; } string[] map = command[1..];
public override void Execute(GameCommandTrigger trigger) { GameSession gameSession = trigger.Session; IFieldObject <Player> player = gameSession.Player.FieldPlayer; int id = trigger.Get <int>("id"); short level = trigger.Get <short>("level") > 0 ? trigger.Get <short>("level") : (short)1; if (SkillMetadataStorage.GetSkill(id) is null) { gameSession.SendNotice($"Skill with id: {id} is not defined."); return; } SkillCast skillCast = new(id, level, GuidGenerator.Long(), gameSession.ServerTick, player.ObjectId, gameSession.ClientTick) { Position = player.Coord, Direction = default,
public override void Execute(GameCommandTrigger trigger) { int mobId = trigger.Get <int>("id"); if (NpcMetadataStorage.GetNpcMetadata(mobId) is null) { trigger.Session.Send(NoticePacket.Notice($"No MOB was found with the id: {mobId.ToString().Color(Color.DarkOliveGreen)}", NoticeType.Chat)); return; } CoordF coord = trigger.Get <CoordF>("coord"); if (coord == default) { coord = trigger.Session.Player.FieldPlayer.Coord; } trigger.Session.FieldManager.RequestMob(mobId, coord, CoordF.From(0.0f, 0.0f, trigger.Get <short>("dir")), trigger.Get <short>("ani")); }
public override void Execute(GameCommandTrigger trigger) { int itemId = trigger.Get <int>("id"); int rarity = trigger.Get <int>("rarity"); int amount = trigger.Get <int>("amount"); if (!ItemMetadataStorage.IsValid(itemId)) { trigger.Session.SendNotice("Invalid item: " + itemId); return; } rarity = Math.Min(rarity, 6); rarity = Math.Max(rarity, 1); Item item = new(itemId, Math.Max(1, amount), rarity); // Simulate looting item trigger.Session.Player.Inventory.AddItem(trigger.Session, item, true); }
public override void Execute(GameCommandTrigger trigger) { int exp = trigger.Get <int>("exp"); if (exp > 0) { trigger.Session.Player.Levels.GainExp(exp); return; } trigger.Session.SendNotice("Exp must be a number or more than 0."); }
public override void Execute(GameCommandTrigger trigger) { short level = trigger.Get <short>("level"); if (level > 0) { trigger.Session.Player.Levels.SetLevel(level); return; } trigger.Session.SendNotice("Level must be a number or more than 0."); }
public override void Execute(GameCommandTrigger trigger) { string weather = trigger.Get <string>("weatherType"); if (!Enum.TryParse(weather, ignoreCase: true, out WeatherType weatherType)) { trigger.Session.SendNotice($"Available weathers: {WeatherTypes}"); return; } trigger.Session.FieldManager.BroadcastPacket(FieldPropertyPacket.ChangeWeather(weatherType)); }
public override void Execute(GameCommandTrigger trigger) { CoordF coordF = trigger.Get <CoordF>("pos"); if (coordF == default) { trigger.Session.SendNotice(trigger.Session.FieldPlayer.Coord.ToString()); return; } trigger.Session.Player.Coord = coordF; trigger.Session.Send(UserMoveByPortalPacket.Move(trigger.Session.FieldPlayer, coordF, trigger.Session.Player.Rotation)); }
public override void Execute(GameCommandTrigger trigger) { int noticeId = trigger.Get <int>("noticeId"); if (!Enum.IsDefined(typeof(SystemNotice), noticeId)) { trigger.Session.SendNotice("Invalid notice id."); return; } trigger.Session.Send(NoticePacket.Notice((SystemNotice)noticeId, NoticeType.Chat)); }
public override void Execute(GameCommandTrigger trigger) { bool enable = trigger.Get <byte>("enable") == 1; if (!enable) { trigger.Session.Send(TimeScalePacket.SetTimeScale(false, 0, 0, 0, 0)); return; } float startScale = trigger.Get <float>("startScale"); float endScale = trigger.Get <float>("endScale"); float duration = trigger.Get <float>("duration"); byte interpolator = trigger.Get <byte>("interpolator"); bool broadcast = trigger.Get <byte>("broadcast") == 1; PacketWriter packet = TimeScalePacket.SetTimeScale(true, startScale, endScale, duration, interpolator); if (broadcast) { trigger.Session.FieldManager.BroadcastPacket(packet); return; } trigger.Session.Send(packet); }
public override void Execute(GameCommandTrigger trigger) { int questId = trigger.Get <int>("id"); if (questId == 0) { trigger.Session.SendNotice("Please type an quest id"); return; } if (!QuestMetadataStorage.IsValid(questId)) { trigger.Session.Send(NoticePacket.Notice($"Quest not found with id: {questId.ToString().Color(Color.Aquamarine)}.", NoticeType.Chat)); return; } Player player = trigger.Session.Player; if (!player.QuestData.TryGetValue(questId, out QuestStatus questStatus)) { questStatus = new(player, QuestMetadataStorage.GetMetadata(questId)); player.QuestData.Add(questId, questStatus); } questStatus.State = QuestState.Finished; questStatus.StartTimestamp = TimeInfo.Now(); questStatus.CompleteTimestamp = TimeInfo.Now(); player.Levels.GainExp(questStatus.Reward.Exp); player.Wallet.Meso.Modify(questStatus.Reward.Money); foreach (QuestRewardItem reward in questStatus.RewardItems) { Item newItem = new(reward.Code) { Amount = reward.Count, Rarity = reward.Rank }; if (newItem.RecommendJobs.Contains(player.Job) || newItem.RecommendJobs.Contains(0)) { player.Inventory.AddItem(trigger.Session, newItem, true); } } DatabaseManager.Quests.Update(questStatus); trigger.Session.Send(QuestPacket.CompleteQuest(questId, true)); // Add next quest IEnumerable <KeyValuePair <int, QuestMetadata> > questList = QuestMetadataStorage.GetAllQuests().Where(x => x.Value.Require.RequiredQuests.Contains(questId)); foreach ((int id, QuestMetadata quest) in questList) { player.QuestData.Add(id, new(player, quest)); } } }
public override void Execute(GameCommandTrigger trigger) { string[] args = trigger.Get <string[]>("id"); if (args == null || args.Length <= 1) { trigger.Session.Send(NoticePacket.Notice("No events provided. Choose one through three events. \n" + "1 = OX Quiz \n" + "2 = Trap Master \n" + "3 = Spring Beach \n" + "4 = Crazy Runner \n" + "5 = Final Survivor \n" + "6 = Ludibrium Escape \n" + "7 = Dance Dance Stop \n" + "8 = Crazy Runner Shanghai \n" + "9 = Hide And Seek \n" + "10 = Red Arena \n" + "11 = Blood Mine \n" + "12 = Treasure Island \n" + "13 = Christmas Dance Dance Stop", NoticeType.Chat)); return; } GlobalEvent globalEvent = new(); byte[] eventIds = Array.ConvertAll(args[1].Split(","), byte.Parse); if (eventIds.Length > 3) { trigger.Session.Send(NoticePacket.Notice("Too many events chosen. Please choose only between one and three.", NoticeType.Chat)); return; } foreach (byte eventId in eventIds) { if (Enum.IsDefined(typeof(GlobalEventType), eventId)) { globalEvent.Events.Add((GlobalEventType)eventId); } } if (globalEvent.Events.Count == 1) { globalEvent.Events.Insert(0, GlobalEventType.none); globalEvent.Events.Insert(2, GlobalEventType.none); } else if (globalEvent.Events.Count == 2) { globalEvent.Events.Insert(2, GlobalEventType.none); } globalEvent.Start(); }
public override void Execute(GameCommandTrigger trigger) { int gravity = (int)Math.Round(trigger.Get <float>("gravity")); gravity = Math.Min(gravity * 40, 400); if (gravity < 0) { gravity = 0; } trigger.Session.FieldManager.BroadcastPacket(FieldPropertyPacket.ChangeGravity(gravity * -1)); trigger.Session.FieldManager.BroadcastPacket(NoticePacket.Notice(SystemNotice.GravityChanged, NoticeType.Chat)); }
public override void Execute(GameCommandTrigger trigger) { int questId = trigger.Get <int>("id"); bool forceStart = trigger.Get <bool>("force"); if (questId == 0) { trigger.Session.SendNotice("Type an quest id."); return; } QuestMetadata quest = QuestMetadataStorage.GetMetadata(questId); if (quest == null) { trigger.Session.Send(NoticePacket.Notice($"Quest not found with id: {questId.ToString().Color(Color.Aquamarine)}.", NoticeType.Chat)); return; } Player player = trigger.Session.Player; if (player.QuestData.TryGetValue(questId, out QuestStatus questStatus) && !forceStart) { trigger.Session.Send(NoticePacket.Notice( $"You already have quest: {questId.ToString().Color(Color.Aquamarine)}. \r\tUse '/startquest {questId} true' to start it again.", NoticeType.Chat)); return; } if (questStatus is not null) { player.QuestData.Remove(questId, out _); DatabaseManager.Quests.Delete(questStatus.Uid); } questStatus = new(player.CharacterId, questId, QuestState.Started, TimeInfo.Now(), accepted : true); player.QuestData.Add(questId, questStatus); trigger.Session.Send(QuestPacket.AcceptQuest(questStatus)); }
public override void Execute(GameCommandTrigger trigger) { Player player = trigger.Session.Player; IFieldActor <Player> fieldPlayer = player.FieldPlayer; FieldManager fieldManager = trigger.Session.FieldManager; bool mapIsHome = player.MapId == (int)Map.PrivateResidence; if (!mapIsHome) { return; } Home home = GameServer.HomeManager.GetHomeById(player.VisitingHomeId); if (home.AccountId != player.AccountId) { return; } IFieldObject <GuideObject> ballObject = fieldManager.State.Guide.Values.FirstOrDefault(x => x.Value.IsBall); if (ballObject is not null) { fieldManager.RemoveGuide(ballObject); fieldManager.BroadcastPacket(HomeActionPacket.RemoveBall(ballObject)); return; } int size = trigger.Get <int>("size"); size = Math.Min(30 + size * 30, 330); if (size < 0) { size = 60; } GuideObject ball = new(0, player.CharacterId) { IsBall = true }; IFieldObject <GuideObject> fieldObject = fieldManager.RequestFieldObject(ball); fieldObject.Coord = CoordF.From(fieldPlayer.Coord.X, fieldPlayer.Coord.Y, fieldPlayer.Coord.Z + Block.BLOCK_SIZE * 2); fieldObject.Rotation = CoordF.From(0, 0, size); fieldManager.AddGuide(fieldObject); fieldManager.BroadcastPacket(HomeActionPacket.AddBall(fieldObject)); } }
public override void Execute(GameCommandTrigger trigger) { int itemId = trigger.Get <int>("id"); int rarity = trigger.Get <int>("rarity"); int amount = trigger.Get <int>("amount"); if (!ItemMetadataStorage.IsValid(itemId)) { trigger.Session.SendNotice("Invalid item: " + itemId); return; } Item item = new Item(itemId) { Rarity = rarity >= 0 ? rarity : ItemMetadataStorage.GetRarity(itemId), Amount = amount }; item.Stats = new ItemStats(item); // Simulate looting item InventoryController.Add(trigger.Session, item, true); }