// Example: "item id:20000027" private static void ProcessItemCommand(GameSession session, string command) { Dictionary <string, string> config = command.ToMap(); if (!int.TryParse(config.GetValueOrDefault("id", "20000027"), out int itemId)) { return; } if (!ItemMetadataStorage.IsValid(itemId)) { session.SendNotice("Invalid item: " + itemId); return; } _ = int.TryParse(config.GetValueOrDefault("rarity", "5"), out int rarity); _ = int.TryParse(config.GetValueOrDefault("amount", "1"), out int amount); Item item = new Item(itemId) { CreationTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds(), TransferFlag = TransferFlag.Splitable | TransferFlag.Tradeable, PlayCount = itemId.ToString().StartsWith("35") ? 10 : 0, Rarity = rarity, Amount = amount, Stats = new ItemStats(itemId, rarity) }; // Simulate looting item InventoryController.Add(session, item, true); }
// Example: "item id:20000027" private static void ProcessItemCommand(GameSession session, string command) { Dictionary <string, string> config = command.ToMap(); if (!int.TryParse(config.GetValueOrDefault("id", "20000027"), out int itemId)) { return; } if (!ItemMetadataStorage.IsValid(itemId)) { session.SendNotice("Invalid item: " + itemId); return; } // Add some bonus attributes to equips and pets ItemStats stats = new ItemStats(); if (ItemMetadataStorage.GetTab(itemId) == InventoryTab.Gear || ItemMetadataStorage.GetTab(itemId) == InventoryTab.Pets) { Random rng = new Random(); stats.BonusAttributes.Add(ItemStat.Of((ItemAttribute)rng.Next(35), 0.01f)); stats.BonusAttributes.Add(ItemStat.Of((ItemAttribute)rng.Next(35), 0.01f)); } Item item = new Item(itemId) { CreationTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds(), TransferFlag = TransferFlag.Splitable | TransferFlag.Tradeable, Stats = stats, PlayCount = itemId.ToString().StartsWith("35") ? 10 : 0 }; if (int.TryParse(config.GetValueOrDefault("rarity", "5"), out int rarity)) { item.Rarity = rarity; } if (int.TryParse(config.GetValueOrDefault("amount", "1"), out int amount)) { item.Amount = amount; } // Simulate looting item InventoryController.Add(session, item, true); /*if (session.Player.Inventory.Add(item)) * { * session.Send(ItemInventoryPacket.Add(item)); * session.Send(ItemInventoryPacket.MarkItemNew(item, item.Amount)); * }*/ }
private static void ProcessQuestCommand(GameSession session, string command) { if (command == "") { session.SendNotice("Type a quest id."); return; } if (!int.TryParse(command, out int questId)) { return; } QuestStatus questStatus = session.Player.QuestList.FirstOrDefault(x => x.Basic.Id == questId); if (questStatus == null) { return; } questStatus.Completed = true; questStatus.CompleteTimestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); session.Player.Levels.GainExp(questStatus.Reward.Exp); session.Player.Wallet.Meso.Modify(questStatus.Reward.Money); foreach (QuestRewardItem reward in questStatus.RewardItems) { Item newItem = new Item(reward.Code) { Amount = reward.Count, Rarity = reward.Rank }; if (newItem.RecommendJobs.Contains(session.Player.Job) || newItem.RecommendJobs.Contains(0)) { InventoryController.Add(session, newItem, true); } } 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 (KeyValuePair <int, QuestMetadata> kvp in questList) { session.Player.QuestList.Add(new QuestStatus(kvp.Value)); } }