diff --git a/Server/data/configs/item_configs.json b/Server/data/configs/item_configs.json index bf79f32e1..07c04813b 100644 --- a/Server/data/configs/item_configs.json +++ b/Server/data/configs/item_configs.json @@ -39175,7 +39175,7 @@ "id": "4237" }, { - "examine": "It's a bowl of (milky) nettle tea.", + "examine": "It's a bowl of nettle tea.", "durability": null, "name": "Nettle tea", "weight": "0.9", @@ -39183,7 +39183,7 @@ "id": "4239" }, { - "examine": "It's a bowl of (milky) nettle tea.", + "examine": "It's a bowl of milky nettle tea.", "durability": null, "name": "Nettle tea", "weight": "0.9", @@ -39191,7 +39191,7 @@ "id": "4240" }, { - "examine": "(In inventory) A handful of nettles (In ground) I better not get stung/I wouldn't like to get stung/I wish I could sting other people/Dock leaves at the ready/These may hurt/nettles sting my leggies(Draynor Village nettles)", + "examine": "A handful of nettles.", "durability": null, "name": "Nettles", "archery_ticket_price": "0", @@ -39199,22 +39199,22 @@ }, { "shop_price": "10", - "examine": "A nice cup of tea.", + "examine": "A nice cup of nettle tea.", "grand_exchange_price": "30", "durability": null, "name": "Cup of tea", - "tradeable": "true", + "tradeable": "false", "weight": "0.1", "archery_ticket_price": "0", "id": "4242" }, { "shop_price": "10", - "examine": "A nice cup of tea.", + "examine": "A milky cup of nettle tea.", "grand_exchange_price": "30", "durability": null, "name": "Cup of tea", - "tradeable": "true", + "tradeable": "false", "weight": "0.1", "archery_ticket_price": "0", "id": "4243" @@ -39228,22 +39228,22 @@ }, { "shop_price": "10", - "examine": "A nice cup of tea.", + "examine": "Some nettle tea in a porcelain cup.", "grand_exchange_price": "30", "durability": null, "name": "Cup of tea", - "tradeable": "true", + "tradeable": "false", "weight": "0.1", "archery_ticket_price": "0", "id": "4245" }, { "shop_price": "10", - "examine": "A nice cup of tea.", + "examine": "Some milky nettle tea in a porcelain cup.", "grand_exchange_price": "30", "durability": null, "name": "Cup of tea", - "tradeable": "true", + "tradeable": "false", "weight": "0.1", "archery_ticket_price": "0", "id": "4246" @@ -70083,517 +70083,584 @@ "id": "7687" }, { + "bankable": "false", "examine": "The kettle is empty.", "durability": null, "name": "Kettle", + "tradeable": "false", "archery_ticket_price": "0", "id": "7688" }, { + "bankable": "false", "durability": null, "name": "Kettle", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7689" }, { + "bankable": "false", "examine": "It's full of cold water.", "durability": null, "name": "Full kettle", + "tradeable": "false", "archery_ticket_price": "0", "id": "7690" }, { + "bankable": "false", "examine": "It's full of boiling water.", "durability": null, "name": "Hot kettle", + "tradeable": "false", "archery_ticket_price": "0", "id": "7691" }, { + "bankable": "false", "examine": "I'd really like a nice cup of tea.", "durability": null, "name": "Pot of tea (4)", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7692" }, { + "bankable": "false", "durability": null, "name": "Pot of tea (4)", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7693" }, { + "bankable": "false", "examine": "I'd really like a nice cup of tea.", "durability": null, "name": "Pot of tea (3)", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7694" }, { + "bankable": "false", "durability": null, "name": "Pot of tea (3)", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7695" }, { + "bankable": "false", "examine": "I'd really like a nice cup of tea.", "durability": null, "name": "Pot of tea (2)", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7696" }, { + "bankable": "false", "durability": null, "name": "Pot of tea (2)", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7697" }, { + "bankable": "false", "examine": "I'd really like a nice cup of tea.", "durability": null, "name": "Pot of tea (1)", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7698" }, { + "bankable": "false", "durability": null, "name": "Pot of tea (1)", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7699" }, { + "bankable": "false", "examine": "Add boiling water to make a tea.", "durability": null, "name": "Teapot with leaves", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7700" }, { + "bankable": "false", "durability": null, "name": "Teapot with leaves", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7701" }, { + "bankable": "false", "examine": "This teapot is empty.", "durability": null, "name": "Teapot", - "tradeable": "true", + "tradeable": "false", "weight": "0.4", "archery_ticket_price": "0", "id": "7702" }, { + "bankable": "false", "durability": null, "name": "Teapot", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7703" }, { + "bankable": "false", "examine": "I'd really like a nice cup of tea.", "durability": null, "name": "Pot of tea (4)", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7704" }, { + "bankable": "false", "durability": null, "name": "Pot of tea (4)", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7705" }, { + "bankable": "false", "examine": "I'd really like a nice cup of tea.", "durability": null, "name": "Pot of tea (3)", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7706" }, { + "bankable": "false", "durability": null, "name": "Pot of tea (3)", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7707" }, { + "bankable": "false", "examine": "I'd really like a nice cup of tea.", "durability": null, "name": "Pot of tea (2)", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7708" }, { + "bankable": "false", "durability": null, "name": "Pot of tea (2)", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7709" }, { + "bankable": "false", "examine": "I'd really like a nice cup of tea.", "durability": null, "name": "Pot of tea (1)", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7710" }, { + "bankable": "false", "durability": null, "name": "Pot of tea (1)", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7711" }, { + "bankable": "false", "examine": "Add boiling water to make a tea.", "durability": null, "name": "Teapot with leaves", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7712" }, { + "bankable": "false", "durability": null, "name": "Teapot with leaves", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7713" }, { + "bankable": "false", "examine": "This teapot is empty.", "durability": null, "name": "Teapot", - "tradeable": "true", + "tradeable": "false", "weight": "0.4", "archery_ticket_price": "0", "id": "7714" }, { + "bankable": "false", "durability": null, "name": "Teapot", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7715" }, { + "bankable": "false", "examine": "I'd really like a nice cup of tea.", "durability": null, "name": "Pot of tea (4)", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7716" }, { + "bankable": "false", "durability": null, "name": "Pot of tea (4)", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7717" }, { + "bankable": "false", "examine": "I'd really like a nice cup of tea.", "durability": null, "name": "Pot of tea (3)", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7718" }, { + "bankable": "false", "durability": null, "name": "Pot of tea (3)", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7719" }, { + "bankable": "false", "examine": "I'd really like a nice cup of tea.", "durability": null, "name": "Pot of tea (2)", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7720" }, { + "bankable": "false", "durability": null, "name": "Pot of tea (2)", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7721" }, { + "bankable": "false", "examine": "I'd really like a nice cup of tea.", "durability": null, "name": "Pot of tea (1)", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7722" }, { + "bankable": "false", "durability": null, "name": "Pot of tea (1)", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7723" }, { + "bankable": "false", "examine": "Add boiling water to make a tea.", "durability": null, "name": "Teapot with leaves", - "tradeable": "true", + "tradeable": "false", "weight": "1.5", "archery_ticket_price": "0", "id": "7724" }, { + "bankable": "false", "durability": null, "name": "Teapot with leaves", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7725" }, { + "bankable": "false", "examine": "This teapot is empty.", "durability": null, "name": "Teapot", - "tradeable": "true", + "tradeable": "false", "weight": "0.4", "archery_ticket_price": "0", "id": "7726" }, { + "bankable": "false", "durability": null, "name": "Teapot", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7727" }, { + "bankable": "false", "shop_price": "1", "examine": "An empty cup.", "grand_exchange_price": "7", "durability": null, "name": "Empty cup", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7728" }, { + "bankable": "false", "durability": null, "name": "Empty cup", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7729" }, { + "bankable": "false", "shop_price": "10", - "examine": "A nice cup of tea.", + "examine": "A nice cup of nettle tea.", "grand_exchange_price": "30", "durability": null, "name": "Cup of tea", - "tradeable": "true", + "tradeable": "false", "weight": "0.1", "archery_ticket_price": "0", "id": "7730" }, { + "bankable": "false", "shop_price": "10", - "examine": "A nice cup of tea.", + "examine": "A milky cup of nettle tea.", "grand_exchange_price": "30", "durability": null, "name": "Cup of tea", - "tradeable": "true", + "tradeable": "false", "weight": "0.1", "archery_ticket_price": "0", "id": "7731" }, { + "bankable": "false", "examine": "A porcelain cup.", "durability": null, "name": "Porcelain cup", + "tradeable": "false", "archery_ticket_price": "0", "id": "7732" }, { + "bankable": "false", "shop_price": "10", - "examine": "A nice cup of tea.", + "examine": "Some nettle tea in a porcelain cup.", "grand_exchange_price": "30", "durability": null, "name": "Cup of tea", - "tradeable": "true", + "tradeable": "false", "weight": "0.1", "archery_ticket_price": "0", "id": "7733" }, { + "bankable": "false", "shop_price": "10", - "examine": "A nice cup of tea.", + "examine": "Some milky nettle tea in a porcelain cup.", "grand_exchange_price": "30", "durability": null, "name": "Cup of tea", - "tradeable": "true", + "tradeable": "false", "weight": "0.1", "archery_ticket_price": "0", "id": "7734" }, { + "bankable": "false", "examine": "A porcelain cup.", "durability": null, "name": "Porcelain cup", + "tradeable": "false", "archery_ticket_price": "0", "id": "7735" }, { + "bankable": "false", "shop_price": "10", - "examine": "A nice cup of tea.", + "examine": "Some nettle tea in a porcelain cup.", "grand_exchange_price": "30", "durability": null, "name": "Cup of tea", - "tradeable": "true", + "tradeable": "false", "weight": "0.1", "archery_ticket_price": "0", "id": "7736" }, { + "bankable": "false", "shop_price": "10", - "examine": "A nice cup of tea.", + "examine": "Some milky nettle tea in a porcelain cup.", "grand_exchange_price": "30", "durability": null, "name": "Cup of tea", - "tradeable": "true", + "tradeable": "false", "weight": "0.1", "archery_ticket_price": "0", "id": "7737" }, { + "bankable": "false", "examine": "Mmm, how about a nice cup of tea?", "durability": null, "name": "Tea leaves", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7738" }, { + "bankable": "false", "durability": null, "name": "Tea leaves", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7739" }, { + "bankable": "false", "examine": "A glass of frothy ale.", "grand_exchange_price": "151", "durability": null, "name": "Beer", - "tradeable": "true", + "tradeable": "false", "weight": "1", "archery_ticket_price": "0", "id": "7740" }, { + "bankable": "false", "durability": null, "name": "Beer", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7741" }, { + "bankable": "false", "shop_price": "1", "examine": "I need to fill this with beer.", "grand_exchange_price": "25", "durability": null, "name": "Beer glass", - "tradeable": "true", + "tradeable": "false", "weight": "0.05", "archery_ticket_price": "0", "id": "7742" }, { + "bankable": "false", "durability": null, "name": "Beer glass", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7743" }, { + "bankable": "false", "shop_price": "3", "examine": "Probably the finest readily-available ale in Asgarnia.", "grand_exchange_price": "131", "durability": null, "name": "Asgarnian ale", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7744" }, { + "bankable": "false", "durability": null, "name": "Asgarnian ale", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7745" }, { + "bankable": "false", "shop_price": "2", "examine": "A glass of frothy ale.", "grand_exchange_price": "569", "durability": null, "name": "Greenman's ale", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7746" }, { + "bankable": "false", "durability": null, "name": "Greenman's ale", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7747" }, { + "bankable": "false", "shop_price": "2", "examine": "A glass of bitter.", "grand_exchange_price": "523", "durability": null, "name": "Dragon bitter", - "tradeable": "true", + "tradeable": "false", "weight": "1", "archery_ticket_price": "0", "id": "7748" }, { + "bankable": "false", "durability": null, "name": "Dragon bitter", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7749" }, @@ -70615,36 +70682,40 @@ "id": "7751" }, { + "bankable": "false", "shop_price": "2", "examine": "A glass of Cider", "grand_exchange_price": "1539", "durability": null, "name": "Cider", - "tradeable": "true", + "tradeable": "false", "weight": "1", "archery_ticket_price": "0", "id": "7752" }, { + "bankable": "false", "durability": null, "name": "Cider", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7753" }, { + "bankable": "false", "examine": "A fruity, full-bodied ale.", "grand_exchange_price": "2371", "durability": null, "name": "Chef's delight", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7754" }, { + "bankable": "false", "durability": null, "name": "Chef's delight", - "tradeable": "true", + "tradeable": "false", "archery_ticket_price": "0", "id": "7755" }, diff --git a/Server/src/main/content/data/consumables/Consumables.java b/Server/src/main/content/data/consumables/Consumables.java index 58143afc0..e16b6aa23 100644 --- a/Server/src/main/content/data/consumables/Consumables.java +++ b/Server/src/main/content/data/consumables/Consumables.java @@ -201,6 +201,7 @@ public enum Consumables { /** Ales */ ASGOLDIAN_ALE(new FakeConsumable(7508, new String[] {"I don't think I'd like gold in beer thanks. Leave it for the dwarves."})), ASGARNIAN_ALE(new Drink(new int[] {1905, 1919}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")), + ASGARNIAN_ALE_POH(new Drink(new int[] {7744, 7742}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")), ASGARNIAN_ALE_KEG(new Drink(new int[] {5785, 5783, 5781, 5779, 5769}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), new Animation(2289), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")), ASGARNIAN_ALE_M(new Drink(new int[] {5739, 1919}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)))), ASGARNIAN_ALE_M_KEG(new Drink(new int[] {5865, 5863, 5861, 5859, 5769}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)), new Animation(2289))), @@ -210,17 +211,21 @@ public enum Consumables { AXEMANS_FOLLY_M_KEG(new Drink(new int[] {5905, 5903, 5901, 5899, 5769}, new MultiEffect(new SkillEffect(Skills.WOODCUTTING, 2, 0), new HealingEffect(2), new SkillEffect(Skills.STRENGTH, -4, 0), new SkillEffect(Skills.ATTACK, -4, 0)), new Animation(2289))), BANDITS_BREW(new Drink(new int[] {4627, 1919}, new MultiEffect(new SkillEffect(Skills.THIEVING, 1, 0), new SkillEffect(Skills.ATTACK, 1, 0), new SkillEffect(Skills.STRENGTH, -1, 0), new SkillEffect(Skills.DEFENCE, -6, 0), new HealingEffect(1)), "You drink the beer. You feel slightly reinvigorated...", "...and slightly dizzy too.")), BEER(new Drink(new int[] {1917, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 0, 0.04), new SkillEffect(Skills.ATTACK, 0, -0.07)), "You drink the beer. You feel slightly reinvigorated...", "...and slightly dizzy too.")), + BEER_POH(new Drink(new int[] {7740, 7742}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 0, 0.04), new SkillEffect(Skills.ATTACK, 0, -0.07)), "You drink the beer. You feel slightly reinvigorated...", "...and slightly dizzy too.")), BEER_TANKARD(new Drink(new int[] {3803, 3805}, new MultiEffect(new SkillEffect(Skills.ATTACK, -9, 0), new SkillEffect(Skills.STRENGTH, 4, 0)), "You quaff the beer. You feel slightly reinvigorated...", "...but very dizzy too.")), KEG_OF_BEER(new Drink(new int[] {3801}, new KegOfBeerEffect(), new Animation(1330), "You chug the keg. You feel reinvigorated...", "...but extremely drunk too.")), CHEFS_DELIGHT(new Drink(new int[] {5755, 1919}, new MultiEffect(new SkillEffect(Skills.COOKING, 1, 0.05), new HealingEffect(1), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))), + CHEFS_DELIGHT_POH(new Drink(new int[] {7754, 7742}, new MultiEffect(new SkillEffect(Skills.COOKING, 1, 0.05), new HealingEffect(1), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))), CHEFS_DELIGHT_KEG(new Drink(new int[] {5833, 5831, 5829, 5827, 5769}, new MultiEffect(new SkillEffect(Skills.COOKING, 1, 0.05), new HealingEffect(1), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)), new Animation(2289))), CHEFS_DELIGHT_M(new Drink(new int[] {5757, 1919}, new MultiEffect(new SkillEffect(Skills.COOKING, 2, 0.05), new HealingEffect(2), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0)))), CHEFS_DELIGHT_M_KEG(new Drink(new int[] {5913, 5911, 5909, 5907, 5769}, new MultiEffect(new SkillEffect(Skills.COOKING, 2, 0.05), new HealingEffect(2), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0)), new Animation(2289))), CIDER(new Drink(new int[] {5763, 1919}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 1, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0))))), + CIDER_POH(new Drink(new int[] {7752, 7742}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 1, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0))))), CIDER_KEG(new Drink(new int[] {5849, 5847, 5845, 5843, 5769}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 1, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0))), new Animation(2289))), MATURE_CIDER(new Drink(new int[] {5765, 1919}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 2, 0), new SkillEffect(Skills.ATTACK, -5, 0), new SkillEffect(Skills.STRENGTH, -5, 0))))), CIDER_M_KEG(new Drink(new int[] {5929, 5927, 5925, 5923, 5769}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 2, 0), new SkillEffect(Skills.ATTACK, -5, 0), new SkillEffect(Skills.STRENGTH, -5, 0))), new Animation(2289))), DRAGON_BITTER(new Drink(new int[] {1911, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)))), + DRAGON_BITTER_POH(new Drink(new int[] {7748, 7742}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)))), DRAGON_BITTER_KEG(new Drink(new int[] {5809, 5807, 5805, 5803, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), new Animation(2289))), DRAGON_BITTER_M(new Drink(new int[] {5745, 1919}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)))), DRAGON_BITTER_M_KEG(new Drink(new int[] {5889, 5887, 5885, 5883, 5769}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)), new Animation(2289))), @@ -229,6 +234,7 @@ public enum Consumables { DWARVEN_STOUT_M(new Drink(new int[] {5747, 1919}, new MultiEffect(new SkillEffect(Skills.MINING, 2, 0), new SkillEffect(Skills.SMITHING, 2 ,0), new SkillEffect(Skills.ATTACK, -7, 0), new SkillEffect(Skills.STRENGTH, -7, 0), new SkillEffect(Skills.DEFENCE, -7, 0), new HealingEffect(1)))), DWARVEN_STOUT_M_KEG(new Drink(new int[] {5857, 5855, 5853, 5851, 5769}, new MultiEffect(new SkillEffect(Skills.MINING, 2, 0), new SkillEffect(Skills.SMITHING, 2 ,0), new SkillEffect(Skills.ATTACK, -7, 0), new SkillEffect(Skills.STRENGTH, -7, 0), new SkillEffect(Skills.DEFENCE, -7, 0), new HealingEffect(1)), new Animation(2289))), GREENMANS_ALE(new Drink(new int[] {1909, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 1, 0), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.DEFENCE, -3, 0)))), + GREENMANS_ALE_POH(new Drink(new int[] {7746, 7742}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 1, 0), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.DEFENCE, -3, 0)))), GREENMANS_ALE_KEG(new Drink(new int[] {5793, 5791, 5789, 5787, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 1, 0), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.DEFENCE, -3, 0)), new Animation(2289))), GREENMANS_ALE_M(new Drink(new int[] {5743, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 2, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))), GREENMANS_ALE_M_KEG(new Drink(new int[] {5873, 5871, 5869, 5867, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 2, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)), new Animation(2289))), @@ -285,16 +291,19 @@ public enum Consumables { /** Tea */ CUP_OF_TEA(new Drink(new int[] {712, 1980}, new MultiEffect(new HealingEffect(3), new SkillEffect(Skills.ATTACK, 3, 0)), "Aaah, nothing like a nice cuppa tea!")), - CUP_OF_TEA_NETTLE(new Drink(new int[] {4242, 1980}, new EnergyEffect(10))), - CUP_OF_TEA_MILKY_NETTLE(new Drink(new int[] {4243, 1980}, new EnergyEffect(10))), - NETTLE_TEA(new Drink(new int[] {4239, 1923}, new NettleTeaEffect())), - NETTLE_TEA_MILKY(new Drink(new int[] {4240, 1980}, new NettleTeaEffect())), + NETTLE_WATER(new Drink(new int[] {Items.NETTLE_WATER_4237, Items.BOWL_1923}, new HealingEffect((1)))), + CUP_OF_TEA_NETTLE(new Drink(new int[] {4242, 1980}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))), + CUP_OF_TEA_MILKY_NETTLE(new Drink(new int[] {4243, 1980}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))), + CUP_OF_TEA_NETTLE_PORCELAIN(new Drink(new int[] {4245, 4244}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))), + CUP_OF_TEA_MILKY_NETTLE_PORCELAIN(new Drink(new int[] {4246, 4244}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))), + NETTLE_TEA(new Drink(new int[] {4239, 1923}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))), + NETTLE_TEA_MILKY(new Drink(new int[] {4240, 1923}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))), CUP_OF_TEA_CLAY(new Drink(new int[] {7730, 7728}, new SkillEffect(Skills.CONSTRUCTION, 1, 0), "You feel refreshed and ready for more building.")), - CUP_OF_TEA_CLAY_MILKY(new Drink(new int[] {7731, 7728}, new SkillEffect(Skills.CONSTRUCTION, 1, 0))), + CUP_OF_TEA_CLAY_MILKY(new Drink(new int[] {7731, 7728}, new SkillEffect(Skills.CONSTRUCTION, 1, 0), "You feel refreshed and ready for more building.")), CUP_OF_TEA_WHITE(new Drink(new int[] {7733, 7732}, new SkillEffect(Skills.CONSTRUCTION, 2, 0), "You feel refreshed and ready for more building.")), - CUP_OF_TEA_WHITE_MILKY(new Drink(new int[] {7734, 7732}, new SkillEffect(Skills.CONSTRUCTION, 2, 0))), + CUP_OF_TEA_WHITE_MILKY(new Drink(new int[] {7734, 7732}, new SkillEffect(Skills.CONSTRUCTION, 2, 0), "You feel refreshed and ready for more building.")), CUP_OF_TEA_GOLD(new Drink(new int[] {7736, 7735}, new SkillEffect(Skills.CONSTRUCTION, 3, 0), "You feel refreshed and ready for more building.")), - CUP_OF_TEA_GOLD_MILKY(new Drink(new int[] {7737, 7735}, new SkillEffect(Skills.CONSTRUCTION, 3, 0))), + CUP_OF_TEA_GOLD_MILKY(new Drink(new int[] {7737, 7735}, new SkillEffect(Skills.CONSTRUCTION, 3, 0), "You feel refreshed and ready for more building.")), /** Miscellaneous */ CHOCOLATE_BAR(new Food(new int[] {1973}, new HealingEffect(3))), diff --git a/Server/src/main/content/data/consumables/effects/NettleTeaEffect.java b/Server/src/main/content/data/consumables/effects/NettleTeaEffect.java deleted file mode 100644 index 8f20e8c33..000000000 --- a/Server/src/main/content/data/consumables/effects/NettleTeaEffect.java +++ /dev/null @@ -1,20 +0,0 @@ -package content.data.consumables.effects; - -import core.game.consumable.ConsumableEffect; -import core.game.node.entity.player.Player; - -public class NettleTeaEffect extends ConsumableEffect { - - private final static int healing = 3; - - @Override - public void activate(Player p) { - final ConsumableEffect effect = p.getSkills().getLifepoints() < p.getSkills().getMaximumLifepoints() ? new MultiEffect(new HealingEffect(3), new EnergyEffect(5)) : new HealingEffect(3); - effect.activate(p); - } - - @Override - public int getHealthEffectValue(Player player) { - return healing; - } -} diff --git a/Server/src/main/content/global/handlers/item/EmptyOptionListener.kt b/Server/src/main/content/global/handlers/item/EmptyOptionListener.kt index 89dd5caae..da4ddef6c 100644 --- a/Server/src/main/content/global/handlers/item/EmptyOptionListener.kt +++ b/Server/src/main/content/global/handlers/item/EmptyOptionListener.kt @@ -43,6 +43,7 @@ class EmptyOptionListener : InteractionListener { BUCKET_OF_SLIME(Items.BUCKET_OF_SLIME_4286, Items.BUCKET_1925, "You empty the contents of the bucket on the floor.", Sounds.LIQUID_2401), VIAL_OF_WATER(Items.VIAL_OF_WATER_227, Items.VIAL_229, "You empty the vial.", Sounds.LIQUID_2401), BOWL_OF_WATER(Items.BOWL_OF_WATER_1921, Items.BOWL_1923, "You empty the contents of the bowl onto the floor.", Sounds.LIQUID_2401), + BOWL_OF_HOT_WATER(Items.BOWL_OF_HOT_WATER_4456, Items.BOWL_1923, "You empty the contents of the bowl onto the floor.", Sounds.LIQUID_2401), JUG_OF_WATER(Items.JUG_OF_WATER_1937, Items.JUG_1935, "You empty the contents of the jug onto the floor.", Sounds.LIQUID_2401), BURNT_PIE(Items.BURNT_PIE_2329, Items.PIE_DISH_2313, "You empty the pie dish."), POTION(Items.POTION_195, Items.VIAL_229, "You empty the vial.", Sounds.LIQUID_2401), @@ -51,6 +52,30 @@ class EmptyOptionListener : InteractionListener { CUP_OF_TEA(Items.CUP_OF_TEA_4242, Items.EMPTY_CUP_1980, "You empty the cup of tea.", Sounds.LIQUID_2401), NETTLE_WATER(Items.NETTLE_WATER_4237, Items.BOWL_1923, "You empty the contents of the bowl onto the floor.", Sounds.LIQUID_2401), NETTLE_TEA_MILKY(Items.NETTLE_TEA_4240, Items.BOWL_1923, "You empty the contents of the bowl onto the floor.", Sounds.LIQUID_2401), + NETTLE_TEA_CUP(Items.CUP_OF_TEA_4242, Items.EMPTY_CUP_1980, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401), + NETTLE_TEA_CUP_MILKY(Items.CUP_OF_TEA_4243, Items.EMPTY_CUP_1980, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401), + TEA_CUP_WATER(Items.CUP_OF_WATER_4458, Items.EMPTY_CUP_1980, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401), + TEA_CUP_HOT_WATER(Items.CUP_OF_HOT_WATER_4460, Items.EMPTY_CUP_1980, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401), + NETTLE_TEA_PORCELAIN(Items.CUP_OF_TEA_4245, Items.PORCELAIN_CUP_4244, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401), + NETTLE_TEA_PORCELAIN_MILKY(Items.CUP_OF_TEA_4246, Items.PORCELAIN_CUP_4244, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401), + BUILDERS_TEA1(Items.CUP_OF_TEA_7730, Items.EMPTY_CUP_7728, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401), + BUILDERS_TEA1_MILKY(Items.CUP_OF_TEA_7731, Items.EMPTY_CUP_7728, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401), + BUILDERS_TEA2(Items.CUP_OF_TEA_7733, Items.PORCELAIN_CUP_7732, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401), + BUILDERS_TEA2_MILKY(Items.CUP_OF_TEA_7734, Items.PORCELAIN_CUP_7732, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401), + BUILDERS_TEA3(Items.CUP_OF_TEA_7736, Items.PORCELAIN_CUP_7735, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401), + BUILDERS_TEA3_MILKY(Items.CUP_OF_TEA_7737, Items.PORCELAIN_CUP_7735, "You empty the contents of the cup onto the floor.", Sounds.LIQUID_2401), + CLAY_POT_OF_TEA4(Items.POT_OF_TEA_4_7692, Items.TEAPOT_7702, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401), + CLAY_POT_OF_TEA3(Items.POT_OF_TEA_3_7694, Items.TEAPOT_7702, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401), + CLAY_POT_OF_TEA2(Items.POT_OF_TEA_2_7696, Items.TEAPOT_7702, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401), + CLAY_POT_OF_TEA1(Items.POT_OF_TEA_1_7698, Items.TEAPOT_7702, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401), + PORCELAIN_POT_OF_TEA4(Items.POT_OF_TEA_4_7704, Items.TEAPOT_7714, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401), + PORCELAIN_POT_OF_TEA3(Items.POT_OF_TEA_3_7706, Items.TEAPOT_7714, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401), + PORCELAIN_POT_OF_TEA2(Items.POT_OF_TEA_2_7708, Items.TEAPOT_7714, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401), + PORCELAIN_POT_OF_TEA1(Items.POT_OF_TEA_1_7710, Items.TEAPOT_7714, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401), + GOLD_PORCELAIN_POT_OF_TEA4(Items.POT_OF_TEA_4_7716, Items.TEAPOT_7726, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401), + GOLD_PORCELAIN_POT_OF_TEA3(Items.POT_OF_TEA_3_7718, Items.TEAPOT_7726, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401), + GOLD_PORCELAIN_POT_OF_TEA2(Items.POT_OF_TEA_2_7720, Items.TEAPOT_7726, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401), + GOLD_PORCELAIN_POT_OF_TEA1(Items.POT_OF_TEA_1_7722, Items.TEAPOT_7726, "You empty the contents of the pot onto the floor", Sounds.LIQUID_2401), BURNT_CURRY(Items.BURNT_CURRY_2013, Items.BOWL_1923, "You empty the contents of the bowl onto the floor.", Sounds.LIQUID_2401), BURNT_GNOMEBOWL(Items.BURNT_GNOMEBOWL_2175, Items.GNOMEBOWL_MOULD_2166, "You empty the contents of the gnomebowl onto the floor."), BURNT_EGG(Items.BURNT_EGG_7090, Items.BOWL_1923, "You empty the contents of the bowl onto the floor."), diff --git a/Server/src/main/content/global/handlers/item/withobject/WaterSourceListener.kt b/Server/src/main/content/global/handlers/item/withobject/WaterSourceListener.kt index 59a8e2049..75652b75d 100644 --- a/Server/src/main/content/global/handlers/item/withobject/WaterSourceListener.kt +++ b/Server/src/main/content/global/handlers/item/withobject/WaterSourceListener.kt @@ -129,6 +129,14 @@ class WaterSourceListener : InteractionListener { FISHBOWL( inputs = intArrayOf(Items.FISHBOWL_6667), output = Items.FISHBOWL_6668 + ), + KETTLE( + inputs = intArrayOf(Items.KETTLE_7688), + output = Items.FULL_KETTLE_7690 + ), + CUP( + inputs = intArrayOf(Items.EMPTY_CUP_1980), + output = Items.CUP_OF_WATER_4458 ); companion object diff --git a/Server/src/main/content/global/skill/construction/HouseZone.java b/Server/src/main/content/global/skill/construction/HouseZone.java index 83bbd1da2..64165f49f 100644 --- a/Server/src/main/content/global/skill/construction/HouseZone.java +++ b/Server/src/main/content/global/skill/construction/HouseZone.java @@ -1,6 +1,8 @@ package content.global.skill.construction; +import core.api.Container; +import org.rs09.consts.Items; import core.game.node.entity.Entity; import core.game.node.entity.player.Player; import core.game.world.map.zone.MapZone; @@ -91,6 +93,7 @@ public final class HouseZone extends MapZone { public boolean leave(Entity e, boolean logout) { if (e instanceof Player) { Player p = (Player) e; + remove_items(p); // The below tears down the house if the owner was the one who left if (house == p.getHouseManager()) { house.expelGuests(p); @@ -121,4 +124,11 @@ public final class HouseZone extends MapZone { } return true; } + + private void remove_items(Player p) { + for (int item = Items.KETTLE_7688; item <= Items.CHEFS_DELIGHT_7755; item++) {//Removes all PoH versions of tea and beer barrel-related items + removeAll(p, item, Container.INVENTORY); + removeAll(p, item, Container.BoB); + } + } } diff --git a/Server/src/main/content/global/skill/construction/decoration/BeerBarrelPlugin.java b/Server/src/main/content/global/skill/construction/decoration/BeerBarrelPlugin.java deleted file mode 100644 index dce9b7cf9..000000000 --- a/Server/src/main/content/global/skill/construction/decoration/BeerBarrelPlugin.java +++ /dev/null @@ -1,76 +0,0 @@ -package content.global.skill.construction.decoration; - -import core.game.interaction.NodeUsageEvent; -import core.game.interaction.UseWithHandler; -import core.game.node.entity.player.Player; -import core.game.node.item.Item; -import core.game.node.scenery.Scenery; -import core.game.world.update.flag.context.Animation; -import core.plugin.Initializable; -import core.plugin.Plugin; -import org.rs09.consts.Items; - -/** - * Handles the Construction beer barrels. - * @author Splinter - */ -@Initializable -public class BeerBarrelPlugin extends UseWithHandler { - - /** - * The object ids - */ - private static final int[] OBJECTS = new int[] { - 13568, 13569, 13570, 13571, 13572, 13573 - }; - - /** - * Constructs a new {@Code BeerBarrelPlugin} {@Code Object} - */ - public BeerBarrelPlugin() { - super(1919); - } - - @Override - public Plugin newInstance(Object arg) throws Throwable { - for (int id : OBJECTS) { - addHandler(id, OBJECT_TYPE, this); - } - return this; - } - - @Override - public boolean handle(NodeUsageEvent event) { - Player player = event.getPlayer(); - final Scenery object = (Scenery) event.getUsedWith(); - - if (player.getInventory().remove(new Item(Items.BEER_GLASS_1919))) { - player.animate(Animation.create(833)); - player.sendMessage("You fill up your glass."); - player.getInventory().add(new Item(getReward(object.getId()), 1)); - } - return true; - } - - /** - * Get the beer reward based on the interaced barrel. - * @return the item to give. - */ - public int getReward(int barrelId) { - switch (barrelId) { - case 13568: - return 1917; - case 13569: - return 5763; - case 13570: - return 1905; - case 13571: - return 1909; - case 13572: - return 1911; - case 13573: - return 5755; - } - return 1917; - } -} diff --git a/Server/src/main/content/global/skill/construction/decoration/kitchen/AbstractContainer.kt b/Server/src/main/content/global/skill/construction/decoration/kitchen/AbstractContainer.kt new file mode 100644 index 000000000..6086aff25 --- /dev/null +++ b/Server/src/main/content/global/skill/construction/decoration/kitchen/AbstractContainer.kt @@ -0,0 +1,78 @@ +package content.global.skill.construction.decoration.kitchen + +import core.api.addItem +import core.api.freeSlots +import core.api.sendDialogue +import core.game.dialogue.DialogueFile +import core.game.dialogue.Topic +import core.game.node.entity.player.Player +import core.tools.END_DIALOGUE + +abstract class AbstractContainer(containerId: Int, containers: Map>>, private val containerName: String) : DialogueFile() { + + private val container = containers[containerId]!! + private val containerItemsNames = container.map { it.first } + private val containerItemsIds = container.map { it.second } + private val size = container.size + private val itemsPerPage = 4 + + private fun checkItem(player: Player, idx : Int){ + val item = containerItemsIds[idx] + if (addItem(player, item)){ + end() + } + else{ + sendDialogue(player, "You need at least one free inventory space to take from the $containerName.").also { stage = END_DIALOGUE } + } + } + + private fun createTopics(page: Int): MutableList> { + val startIndex = (page - 1) * itemsPerPage + val endIndex = (startIndex + itemsPerPage).coerceAtMost(size) + + val topics = containerItemsNames.subList(startIndex, endIndex) + .mapIndexed { index, item -> Topic(item, startIndex + index + 1, skipPlayer = true) } + .toMutableList() + + // Add "More" button if there's another page or to loop back + if (endIndex < size || page > 1) { + topics.add(Topic("More", endIndex + 1, skipPlayer = true)) + } + + return topics + } + + + + override fun handle(componentID: Int, buttonID: Int) { + if (freeSlots(player!!) == 0) { + sendDialogue(player!!, "You need at least one free inventory space to take from the $containerName.").also { stage = END_DIALOGUE } + return + } + val itemsPerPage = 4 + + when (stage) { + 0, size + 1 -> { // Initial stage or final more button clicked + val topics = createTopics(1) + showTopics(*topics.toTypedArray()).also { stage = 1 } + } + in 1..size -> { + val currentPage = (stage-1) / itemsPerPage + val startIndex = currentPage * itemsPerPage + + if (buttonID == itemsPerPage + 1) { // "More" button clicked (but not the last one) + val topics = createTopics(currentPage + 1) + showTopics(*topics.toTypedArray()).also { stage = currentPage*itemsPerPage + 1 } + } else { // Handle item selection + val itemIndex = startIndex + (buttonID - 1) + if (itemIndex < size) { + checkItem(player!!, itemIndex) + } + } + } + else -> end() + } + } + + +} \ No newline at end of file diff --git a/Server/src/main/content/global/skill/construction/decoration/kitchen/BeerBarrelInteraction.kt b/Server/src/main/content/global/skill/construction/decoration/kitchen/BeerBarrelInteraction.kt new file mode 100644 index 000000000..4c6ee0949 --- /dev/null +++ b/Server/src/main/content/global/skill/construction/decoration/kitchen/BeerBarrelInteraction.kt @@ -0,0 +1,29 @@ +package content.global.skill.construction.decoration.kitchen + +import core.api.* +import core.game.interaction.InteractionListener +import org.rs09.consts.Items + +class BeerBarrelInteraction : InteractionListener { + + companion object{ + private val barrelMap = mapOf( + org.rs09.consts.Scenery.BEER_BARREL_13568 to Items.BEER_7740, + org.rs09.consts.Scenery.CIDER_BARREL_13569 to Items.CIDER_7752, + org.rs09.consts.Scenery.ASGARNIAN_ALE_13570 to Items.ASGARNIAN_ALE_7744, + org.rs09.consts.Scenery.GREENMAN_S_ALE_13571 to Items.GREENMANS_ALE_7746, + org.rs09.consts.Scenery.DRAGON_BITTER_13572 to Items.DRAGON_BITTER_7748, + org.rs09.consts.Scenery.CHEF_S_DELIGHT_13573 to Items.CHEFS_DELIGHT_7754, + ) + } + override fun defineListeners() { + onUseWith(SCENERY, Items.BEER_GLASS_7742, *barrelMap.keys.toIntArray()){ player, used, with -> + val drinkName = with.name.lowercase().replace("barrel", "").trim()+"." + if (removeItem(player, used)){ + sendMessage(player, "You fill up your glass with $drinkName") + addItem(player, barrelMap[with.id]!!) + } + return@onUseWith true + } + } +} \ No newline at end of file diff --git a/Server/src/main/content/global/skill/construction/decoration/kitchen/BeerBarrelPlugin.java b/Server/src/main/content/global/skill/construction/decoration/kitchen/BeerBarrelPlugin.java deleted file mode 100644 index eb6b3fe20..000000000 --- a/Server/src/main/content/global/skill/construction/decoration/kitchen/BeerBarrelPlugin.java +++ /dev/null @@ -1,77 +0,0 @@ -package content.global.skill.construction.decoration.kitchen; - - -import core.game.interaction.NodeUsageEvent; -import core.game.interaction.UseWithHandler; -import core.game.node.entity.player.Player; -import core.game.node.item.Item; -import core.game.node.scenery.Scenery; -import core.game.world.update.flag.context.Animation; -import core.plugin.Initializable; -import core.plugin.Plugin; -import org.rs09.consts.Items; - -/** - * Handles the Construction beer barrels. - * @author Splinter - */ -@Initializable -public class BeerBarrelPlugin extends UseWithHandler { - - /** - * The object ids - */ - private static final int[] OBJECTS = new int[] { - 13568, 13569, 13570, 13571, 13572, 13573 - }; - - /** - * Constructs a new {@Code BeerBarrelPlugin} {@Code Object} - */ - public BeerBarrelPlugin() { - super(1919); - } - - @Override - public Plugin newInstance(Object arg) throws Throwable { - for (int id : OBJECTS) { - addHandler(id, OBJECT_TYPE, this); - } - return this; - } - - @Override - public boolean handle(NodeUsageEvent event) { - Player player = event.getPlayer(); - final Scenery object = (Scenery) event.getUsedWith(); - - if (player.getInventory().remove(new Item(Items.BEER_GLASS_1919))) { - player.animate(Animation.create(3661 + (object.getId() - 13569))); - player.sendMessage("You fill up your glass with " + object.getName().toLowerCase().replace("barrel", "").trim() + "."); - player.getInventory().add(new Item(getReward(object.getId()), 1)); - } - return true; - } - - /** - * Get the beer reward based on the interacted barrel. - * @return the item to give. - */ - public int getReward(int barrelId) { - switch (barrelId) { - case 13568: - return 1917; - case 13569: - return 5763; - case 13570: - return 1905; - case 13571: - return 1909; - case 13572: - return 1911; - case 13573: - return 5755; - } - return 1917; - } -} \ No newline at end of file diff --git a/Server/src/main/content/global/skill/construction/decoration/kitchen/LarderListener.kt b/Server/src/main/content/global/skill/construction/decoration/kitchen/LarderListener.kt new file mode 100644 index 000000000..1bff6bc47 --- /dev/null +++ b/Server/src/main/content/global/skill/construction/decoration/kitchen/LarderListener.kt @@ -0,0 +1,42 @@ +package content.global.skill.construction.decoration.kitchen + +import core.api.openDialogue +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import org.rs09.consts.Items +import org.rs09.consts.Scenery + +class LarderListener : InteractionListener { + + companion object { + private val wooden_larder_items = listOf( + "Tea Leaves" to Items.TEA_LEAVES_7738, + "Bucket of Milk" to Items.BUCKET_OF_MILK_1927 + ) + private val oak_larder_items = wooden_larder_items + listOf( + "Eggs" to Items.EGG_1944, + "Pot of Flour" to Items.POT_OF_FLOUR_1933 + ) + private val teak_larder_items = oak_larder_items + listOf( + "Potatoes" to Items.POTATO_1942, + "Garlic" to Items.GARLIC_1550, + "Onions" to Items.ONION_1957, + "Cheese" to Items.CHEESE_1985 + ) + + val larders = mapOf( + Scenery.LARDER_13565 to wooden_larder_items, + Scenery.LARDER_13566 to oak_larder_items, + Scenery.LARDER_13567 to teak_larder_items + ) + } + + override fun defineListeners() { + on(larders.keys.toIntArray(), IntType.SCENERY, "Search") { player, node -> + openDialogue(player, LarderDialogue(node.id)) + return@on true + } + } + + class LarderDialogue(shelfId: Int) : AbstractContainer(shelfId, larders, "larder") +} \ No newline at end of file diff --git a/Server/src/main/content/global/skill/construction/decoration/kitchen/LarderPlugin.java b/Server/src/main/content/global/skill/construction/decoration/kitchen/LarderPlugin.java deleted file mode 100644 index 9c3289cf2..000000000 --- a/Server/src/main/content/global/skill/construction/decoration/kitchen/LarderPlugin.java +++ /dev/null @@ -1,149 +0,0 @@ -package content.global.skill.construction.decoration.kitchen; - - -import core.cache.def.impl.SceneryDefinition; -import core.plugin.Initializable; -import core.game.dialogue.DialoguePlugin; -import core.game.interaction.OptionHandler; -import core.game.node.Node; -import core.game.node.entity.player.Player; -import core.game.node.item.Item; -import core.plugin.Plugin; -import core.plugin.ClassScanner; -import org.rs09.consts.Items; - -/** - * Handles the interactions for the three Larders. - * @author Splinter - */ -@Initializable -public final class LarderPlugin extends OptionHandler { - - @Override - public Plugin newInstance(Object arg) throws Throwable { - ClassScanner.definePlugin(new LarderDialogue()); - SceneryDefinition.forId(13565).getHandlers().put("option:search", this); - SceneryDefinition.forId(13566).getHandlers().put("option:search", this); - SceneryDefinition.forId(13567).getHandlers().put("option:search", this); - return this; - } - - @Override - public boolean handle(Player player, Node node, String option) { - player.getDialogueInterpreter().open(42048, node.getId()); - return true; - } - - /** - * Dialogue options for the Larders. - * @author Splinter - * @version 1.0 - */ - public final class LarderDialogue extends DialoguePlugin { - - /** - * Constructs a new {@code LarderDialogue} {@code Object}. - */ - public LarderDialogue() { - /** - * empty. - */ - } - - /** - * Constructs a new {@code LarderDialogue} {@code Object}. - * - * @param player - * the player. - */ - public LarderDialogue(Player player) { - super(player); - } - - @Override - public DialoguePlugin newInstance(Player player) { - return new LarderDialogue(player); - } - - @Override - public boolean open(Object... args) { - int id = (int) args[0]; - switch (id) { - case 13565: - interpreter.sendOptions("Select an Option", "Tea Leaves", "Bucket of Milk"); - stage = 1; - break; - case 13566: - interpreter.sendOptions("Select an Option", "Tea Leaves", "Bucket of Milk", "Eggs", "Pot of Flour"); - stage = 1; - break; - case 13567: - interpreter.sendOptions("Select an Option", "Tea Leaves", "Bucket of Milk", "Eggs", "Pot of Flour", "More Options"); - stage = 1; - break; - } - return true; - } - - @Override - public boolean handle(int interfaceId, int buttonId) { - if (player.getInventory().freeSlots() < 1) { - player.sendMessage("You need at least one free inventory space to take from the larder."); - end(); - return true; - } - switch (stage) { - case 1: - switch (buttonId) { - case 1: - player.getInventory().add(new Item(Items.TEA_LEAVES_7738, 1)); - end(); - break; - case 2: - player.getInventory().add(new Item(Items.BUCKET_OF_MILK_1927, 1)); - end(); - break; - case 3: - player.getInventory().add(new Item(Items.EGG_1944, 1)); - end(); - break; - case 4: - player.getInventory().add(new Item(Items.POT_OF_FLOUR_1933, 1)); - end(); - break; - case 5: - player.getDialogueInterpreter().sendOptions( - "Select an Option", "Potatoes", "Garlic", "Onions", "Cheese"); - stage = 2; - break; - } - break; - case 2: - switch (buttonId) { - case 1: - player.getInventory().add(new Item(Items.POTATO_1942, 1)); - end(); - break; - case 2: - player.getInventory().add(new Item(Items.GARLIC_1550, 1)); - end(); - break; - case 3: - player.getInventory().add(new Item(Items.ONION_1957, 1)); - end(); - break; - case 4: - player.getInventory().add(new Item(Items.CHEESE_1985, 1)); - end(); - break; - } - } - return true; - } - - @Override - public int[] getIds() { - return new int[] { 42048 }; - } - } -} \ No newline at end of file diff --git a/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfListener.kt b/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfListener.kt new file mode 100644 index 000000000..bf39a34dc --- /dev/null +++ b/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfListener.kt @@ -0,0 +1,97 @@ +package content.global.skill.construction.decoration.kitchen + +import core.api.* +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import org.rs09.consts.Items +import org.rs09.consts.Scenery + + +class ShelfListener : InteractionListener { + companion object { + // Source for text https://www.youtube.com/watch?v=SNuqelEft3Y + + private val woodshelf_1_items = listOf( + "Kettle" to Items.KETTLE_7688, + "Teapot" to Items.TEAPOT_7702, + "Cup" to Items.EMPTY_CUP_7728 + ) + + private val woodshelf_2_items = woodshelf_1_items + listOf( + "Beer glass" to Items.BEER_GLASS_7742 + ) + + private val woodshelf_3_items = woodshelf_2_items.map { (name, itemId) -> + when (name) { + "Cup" -> { + "Porcelain cup" to Items.PORCELAIN_CUP_7732 + } + + "Teapot" -> { + "Teapot" to Items.TEAPOT_7714 + } + + else -> { + name to itemId + } + } + } + listOf("Cake tin" to Items.CAKE_TIN_1887) + + private val oakshelf_1_items = woodshelf_2_items + listOf("Cake tin" to Items.CAKE_TIN_1887) + listOf("Bowl" to Items.BOWL_1923) + + private val oakshelf_2_items = oakshelf_1_items.map { (name, itemId) -> + when (name) { + "Cup" -> { + "Porcelain cup" to Items.PORCELAIN_CUP_7732 + } + + "Teapot" -> { + "Teapot" to Items.TEAPOT_7714 + } + + else -> { + name to itemId + } + } + } + listOf("Pie dish" to Items.PIE_DISH_2313) + + private val teakshelf_1_items = oakshelf_2_items + listOf( + "Pot" to Items.EMPTY_POT_1931 + ) + + private val teakshelf_2_items = teakshelf_1_items.map { (name, itemId) -> + when (name) { + "Porcelain cup" -> { + "Porcelain cup" to Items.PORCELAIN_CUP_7735 + } + + "Teapot" -> { + "Teapot" to Items.TEAPOT_7726 + } + + else -> { + name to itemId + } + } + } + listOf("Chef's Hat" to Items.CHEFS_HAT_1949) + + val shelves = mapOf( + Scenery.SHELVES_13545 to woodshelf_1_items, + Scenery.SHELVES_13546 to woodshelf_2_items, + Scenery.SHELVES_13547 to woodshelf_3_items, + Scenery.SHELVES_13548 to oakshelf_1_items, + Scenery.SHELVES_13549 to oakshelf_2_items, + Scenery.SHELVES_13550 to teakshelf_1_items, + Scenery.SHELVES_13551 to teakshelf_2_items, + ) + } + + override fun defineListeners() { + on(shelves.keys.toIntArray(), IntType.SCENERY, "Search") { player, node -> + openDialogue(player, ShelfDialogue(node.id)) + return@on true + } + } + + class ShelfDialogue(shelfId: Int) : AbstractContainer(shelfId, shelves, "shelf") +} \ No newline at end of file diff --git a/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfPlugin.java b/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfPlugin.java deleted file mode 100644 index 9fed7ebce..000000000 --- a/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfPlugin.java +++ /dev/null @@ -1,239 +0,0 @@ -package content.global.skill.construction.decoration.kitchen; - - -import core.cache.def.impl.SceneryDefinition; -import core.game.dialogue.DialoguePlugin; -import core.game.interaction.OptionHandler; -import core.game.node.Node; -import core.game.node.entity.player.Player; -import core.game.node.item.Item; -import core.plugin.Initializable; -import core.plugin.Plugin; -import core.plugin.ClassScanner; -import org.rs09.consts.Items; - -/** - * Handles the shelves in the kitchen room. - * @author Splinter - */ -@Initializable -public final class ShelfPlugin extends OptionHandler { - - @Override - public Plugin newInstance(Object arg) throws Throwable { - ClassScanner.definePlugin(new ShelfDialogue()); - for (int i = 13545; i < 13552; i++) { - SceneryDefinition.forId(i).getHandlers().put("option:search", this); - } - return this; - } - - @Override - public boolean handle(Player player, Node node, String option) { - player.getDialogueInterpreter().open(778341, node.getId()); - return true; - } - - /** - * Dialogue options for the shelves, what a mess! - * @author Splinter - * @version 1.0 - */ - public final class ShelfDialogue extends DialoguePlugin { - - /** - * Constructs a new {@code ShelfDialogue} {@code Object}. - */ - public ShelfDialogue() { - /** - * empty. - */ - } - - /** - * Constructs a new {@code ShelfDialogue} {@code Object}. - * @param player the player. - */ - public ShelfDialogue(Player player) { - super(player); - } - - @Override - public DialoguePlugin newInstance(Player player) { - return new ShelfDialogue(player); - } - - @Override - public boolean open(Object... args) { - int id = (int) args[0]; - switch (id) { - case 13545:// wood 1 - interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup"); - stage = 1; - break; - case 13546:// wood 2 - interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass"); - stage = 1; - break; - case 13547:// wood 3 - interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass", "Cake tin"); - stage = 1; - break; - case 13548:// oak 1 - interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass", "Bowl"); - stage = 2; - break; - case 13549:// oak 2 - interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Porcelain cup", "Empty beer glass", "More Options"); - stage = 3; - break; - case 13550:// teak 1 - case 13551: - interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Porcelain cup", "Empty beer glass", "More Options"); - stage = 5; - break; - } - return true; - } - - @Override - public boolean handle(int interfaceId, int buttonId) { - if (player.getInventory().freeSlots() < 1) { - player.sendMessage("You need at least one free inventory space to take from the shelves."); - end(); - return true; - } - switch (stage) { - case 1:// all wood shelves - switch (buttonId) { - case 1: - end(); - player.getInventory().add(new Item(Items.KETTLE_7688, 1)); - break; - case 2: - end(); - player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); - break; - case 3: - end(); - player.getInventory().add(new Item(Items.EMPTY_CUP_7728, 1)); - break; - case 4: - end(); - player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); - break; - case 5: - end(); - player.getInventory().add(new Item(Items.CAKE_TIN_1887, 1)); - break; - } - break; - case 2:// Oak shelf #1 - switch (buttonId) { - case 1: - end(); - player.getInventory().add(new Item(Items.KETTLE_7688, 1)); - break; - case 2: - end(); - player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); - break; - case 3: - end(); - player.getInventory().add(new Item(Items.EMPTY_CUP_7728, 1)); - break; - case 4: - end(); - player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); - break; - case 5: - end(); - player.getInventory().add(new Item(Items.BOWL_1923, 1)); - break; - } - break; - case 3:// Oak shelves #2 only - switch (buttonId) { - case 1: - end(); - player.getInventory().add(new Item(Items.KETTLE_7688, 1)); - break; - case 2: - end(); - player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); - break; - case 3: - end(); - player.getInventory().add(new Item(Items.PORCELAIN_CUP_4244, 1)); - break; - case 4: - end(); - player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); - break; - case 5: - interpreter.sendOptions("Select an Option", "Bowl", "Cake tin"); - stage = 4; - break; - } - break; - case 4:// Oak shelves #2 only - switch (buttonId) { - case 1: - end(); - player.getInventory().add(new Item(Items.BOWL_1923, 1)); - break; - case 2: - end(); - player.getInventory().add(new Item(Items.CAKE_TIN_1887, 1)); - break; - } - case 5:// teak shelves - switch (buttonId) { - case 1: - end(); - player.getInventory().add(new Item(Items.KETTLE_7688, 1)); - break; - case 2: - end(); - player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); - break; - case 3: - end(); - player.getInventory().add(new Item(Items.PORCELAIN_CUP_7735, 1)); - break; - case 4: - end(); - player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); - break; - case 5: - interpreter.sendOptions("Select an Option", "Bowl", "Pie dish", "Empty pot"); - stage = 6; - break; - } - break; - case 6:// teak shelves - switch (buttonId) { - case 1: - end(); - player.getInventory().add(new Item(Items.BOWL_1923, 1)); - break; - case 2: - end(); - player.getInventory().add(new Item(Items.PIE_DISH_2313, 1)); - break; - case 3: - end(); - player.getInventory().add(new Item(Items.EMPTY_POT_1931, 1)); - break; - } - break; - } - return true; - } - - @Override - public int[] getIds() { - return new int[] { 778341 }; - } - } -} \ No newline at end of file diff --git a/Server/src/main/content/global/skill/construction/decoration/kitchen/StoveInteraction.kt b/Server/src/main/content/global/skill/construction/decoration/kitchen/StoveInteraction.kt new file mode 100644 index 000000000..74b0c35f4 --- /dev/null +++ b/Server/src/main/content/global/skill/construction/decoration/kitchen/StoveInteraction.kt @@ -0,0 +1,88 @@ +package content.global.skill.construction.decoration.kitchen + +import core.api.* +import core.game.interaction.InteractionListener +import core.game.interaction.QueueStrength +import org.rs09.consts.Scenery as SceneryConst +import org.rs09.consts.Items +import core.game.node.scenery.Scenery +import core.tools.secondsToTicks + + +class StoveInteraction : InteractionListener { + + // Imagine if these indexes incremented logically... + companion object{ + val valid_stoves = intArrayOf( + SceneryConst.FIREPIT_WITH_HOOK_13529, + SceneryConst.FIREPIT_WITH_POT_13531, + SceneryConst.SMALL_OVEN_13533, + SceneryConst.LARGE_OVEN_13536, + SceneryConst.STEEL_RANGE_13539, + SceneryConst.FANCY_RANGE_13542 + ) + val in_progress_stoves = intArrayOf( + SceneryConst.FIREPIT_WITH_HOOK_13530, + SceneryConst.FIREPIT_WITH_POT_13532, + SceneryConst.SMALL_OVEN_13534, + SceneryConst.LARGE_OVEN_13537, + SceneryConst.STEEL_RANGE_13541, + SceneryConst.FANCY_RANGE_13544 + + ) + val stoves_with_kettle = intArrayOf( + SceneryConst.FIREPIT_WITH_HOOK_13530, + SceneryConst.FIREPIT_WITH_POT_13532, + SceneryConst.SMALL_OVEN_13535, + SceneryConst.LARGE_OVEN_13538, + SceneryConst.STEEL_RANGE_13540, + SceneryConst.FANCY_RANGE_13543 + + ) + const val kettleBoiled = "kettle_boiled" + } + override fun defineListeners() { + onUseWith(SCENERY, Items.FULL_KETTLE_7690, *valid_stoves){ player, used, with -> + val idx = valid_stoves.indexOf(with.id) + if (removeItem(player, used)){ + replaceScenery(with as Scenery, in_progress_stoves[idx], -1) + sendMessage(player, "You place the kettle over the fire.") + setAttribute(player, kettleBoiled, 1) + queueScript(player, secondsToTicks(10), QueueStrength.SOFT){ _ -> + sendMessage(player, "The kettle boils.") + // Of course they changed how these items work so we need 2 different cases + setAttribute(player, kettleBoiled, 2) + if (with.id in intArrayOf(SceneryConst.FIREPIT_WITH_HOOK_13529, SceneryConst.FIREPIT_WITH_POT_13531)) + return@queueScript stopExecuting(player) + else{ + getScenery(with.location)?.let { replaceScenery(it, stoves_with_kettle[idx], -1) } + return@queueScript stopExecuting(player) + } + } + } + return@onUseWith true + } + + + on(stoves_with_kettle, SCENERY, "take-kettle"){ player, node -> + if (getAttribute(player, kettleBoiled, 0) == 0){ + sendMessage(player, "This is not your kettle.") + return@on false + } + else if (getAttribute(player, kettleBoiled, 0) == 1){ + sendMessage(player, "The kettle has not boiled yet.") + return@on false + } + if(addItem(player, Items.HOT_KETTLE_7691)){ + replaceScenery(node as Scenery, valid_stoves[stoves_with_kettle.indexOf(node.id)], -1) + setAttribute(player, kettleBoiled, 0) + return@on true + } + else { + sendMessage(player, "You do not have space to do that.") + return@on false + } + } + } + +} diff --git a/Server/src/main/content/global/skill/cooking/CookableItems.java b/Server/src/main/content/global/skill/cooking/CookableItems.java index cea0f356d..2c77f3acd 100644 --- a/Server/src/main/content/global/skill/cooking/CookableItems.java +++ b/Server/src/main/content/global/skill/cooking/CookableItems.java @@ -81,7 +81,7 @@ public enum CookableItems { // bowl foods BOWL_STEW(2003, 2001, 2005, 25, 117, 68, 392, 68, 392), BOWL_CURRY(2011, 2009, 2013, 60, 280, 38, 332, 38, 332), - BOWL_NETTLE(4239, 4237, 4239, 20, 52, 78, 412, 78, 412), + BOWL_NETTLE(4239, 4237, 4239, 20, 53, 78, 412, 78, 412), BOWL_EGG(7078, 7076, 7090, 13, 50, 0, 0, 90, 438), BOWL_ONION(7084, 1871, 7092, 43, 60, 36, 322, 36, 322), BOWL_MUSHROOM(7082, 7080, 7094, 46, 60, 16, 282, 16, 282), diff --git a/Server/src/main/content/global/skill/cooking/CookingRewrite.kt b/Server/src/main/content/global/skill/cooking/CookingRewrite.kt index e65406487..693a4ff81 100644 --- a/Server/src/main/content/global/skill/cooking/CookingRewrite.kt +++ b/Server/src/main/content/global/skill/cooking/CookingRewrite.kt @@ -33,6 +33,7 @@ class CookingRewrite : InteractionListener { list.add(RAW_BEEF_2132) list.add(RAW_BEAR_MEAT_2136) list.add(SEAWEED_401) + list.add(Items.BOWL_OF_WATER_1921) RAW_FOODS = list.toIntArray() } @@ -79,6 +80,10 @@ class CookingRewrite : InteractionListener { player.packetDispatch.sendMessage("You need to cook this on a range.") return@onUseWith false } + Items.BOWL_OF_WATER_1921 ->{ + cook(player, obj, Items.BOWL_OF_WATER_1921, Items.BOWL_OF_HOT_WATER_4456, 1) + return@onUseWith true + } } //cook a standard item diff --git a/Server/src/main/content/global/skill/cooking/TeaInteraction.kt b/Server/src/main/content/global/skill/cooking/TeaInteraction.kt new file mode 100644 index 000000000..5890ad372 --- /dev/null +++ b/Server/src/main/content/global/skill/cooking/TeaInteraction.kt @@ -0,0 +1,166 @@ +package content.global.skill.cooking + +import core.api.* +import core.game.interaction.InteractionListener +import core.game.node.Node +import core.game.node.entity.player.Player +import core.game.node.entity.skill.Skills +import org.rs09.consts.Items + +/** + * This deals with all tea mixtures + * cup of tea + * nettle tea + * nettle water + * nettle tea (cup) + * poh tea + * clay + * porcelain + * gold trim + * Flask + */ +class TeaInteraction : InteractionListener { + private val teaMilkMap = mapOf( + Items.NETTLE_TEA_4239 to Items.NETTLE_TEA_4240, + Items.CUP_OF_TEA_4242 to Items.CUP_OF_TEA_4243, + Items.CUP_OF_TEA_4245 to Items.CUP_OF_TEA_4246, + Items.CUP_OF_TEA_7730 to Items.CUP_OF_TEA_7731, + Items.CUP_OF_TEA_7733 to Items.CUP_OF_TEA_7734, + Items.CUP_OF_TEA_7736 to Items.CUP_OF_TEA_7737, + ) + + private val teaCupMap = mapOf( + Items.NETTLE_TEA_4239 to Items.CUP_OF_TEA_4242, + Items.NETTLE_TEA_4240 to Items.CUP_OF_TEA_4243, + Items.BOWL_OF_HOT_WATER_4456 to Items.CUP_OF_HOT_WATER_4460 + ) + + // This is specifically for the porcelain cup without a handle for Ghost Ahoy + private val teaCupPorcelainMap = mapOf( + Items.NETTLE_TEA_4239 to Items.CUP_OF_TEA_4245, + Items.NETTLE_TEA_4240 to Items.CUP_OF_TEA_4246 + ) + + private val emptyTeaPot = intArrayOf( + Items.TEAPOT_7702, + Items.TEAPOT_7714, + Items.TEAPOT_7726 + ) + + private val leafTeaPot = intArrayOf( + Items.TEAPOT_WITH_LEAVES_7700, + Items.TEAPOT_WITH_LEAVES_7712, + Items.TEAPOT_WITH_LEAVES_7724 + ) + + private val filledTeaPot = intArrayOf( + Items.POT_OF_TEA_4_7692, + Items.POT_OF_TEA_3_7694, + Items.POT_OF_TEA_2_7696, + Items.POT_OF_TEA_1_7698, + Items.POT_OF_TEA_4_7704, + Items.POT_OF_TEA_3_7706, + Items.POT_OF_TEA_2_7708, + Items.POT_OF_TEA_1_7710, + Items.POT_OF_TEA_4_7716, + Items.POT_OF_TEA_3_7718, + Items.POT_OF_TEA_2_7720, + Items.POT_OF_TEA_1_7722, + ) + + private val emptyBuilderCup = intArrayOf( + Items.EMPTY_CUP_7728, + Items.PORCELAIN_CUP_7732, + Items.PORCELAIN_CUP_7735 + ) + + override fun defineListeners() { + onUseWith(ITEM, teaMilkMap.keys.toIntArray(), Items.BUCKET_OF_MILK_1927){ player, used, with -> + if (removeItem(player, used) && removeItem(player, with)){ + addItem(player, teaMilkMap[used.id]!!) + addItem(player, Items.BUCKET_1925) + } + return@onUseWith true + } + + onUseWith(ITEM, teaCupMap.keys.toIntArray(), Items.EMPTY_CUP_1980){ player, used, with -> + if (used.id != Items.BOWL_OF_HOT_WATER_4456){ + if (getDynLevel(player, Skills.COOKING) < 20){ + sendDialogue(player, "You need a cooking level of 20 to make tea.") + return@onUseWith false + } + } + if (removeItem(player, used) && removeItem(player, with)) { + addItem(player, teaCupMap[used.id]!!) + addItem(player, Items.BOWL_1923) + } + return@onUseWith true + } + + onUseWith(ITEM, Items.BOWL_OF_WATER_1921, Items.NETTLES_4241) { player, used, with -> + if (removeItem(player, used) && removeItem(player, with)){ + addItem(player, Items.NETTLE_WATER_4237) + } + return@onUseWith true + } + + onUseWith(ITEM, teaCupPorcelainMap.keys.toIntArray(), Items.PORCELAIN_CUP_4244){player, used, with -> + if (getDynLevel(player, Skills.COOKING) < 20){ + sendDialogue(player, "You need a cooking level of 20 to make tea.") + return@onUseWith false + } + + if(removeItem(player, used) && removeItem(player, with)){ + addItem(player, teaCupPorcelainMap[used.id]!!) + addItem(player, Items.BOWL_1923) + } + return@onUseWith true + } + + onUseWith(ITEM, emptyTeaPot, Items.TEA_LEAVES_7738) { player, used, with -> + if (removeItem(player, used) && removeItem(player, with)){ + addItem(player, used.id - 2) + } + return@onUseWith true + } + + onUseWith(ITEM, leafTeaPot, Items.HOT_KETTLE_7691) { player, used, with -> + if (getDynLevel(player, Skills.COOKING) < 20){ + sendDialogue(player,"You need to be level 20 to make tea.") + return@onUseWith false + } + if (removeItem(player, used) && removeItem(player, with)){ + addItem(player, Items.KETTLE_7688) + addItem(player, used.id - 8) + rewardXP(player, Skills.COOKING, 53.0) + + } + return@onUseWith true + } + + onUseWith(ITEM, filledTeaPot, *emptyBuilderCup) { player, used, with -> + return@onUseWith fillBuildersTea(player, used, with) + } + } + + private fun fillBuildersTea(player: Player, used: Node, with: Node) : Boolean { + if (removeItem(player, used) && removeItem(player, with)){ + // Thanks tea pot with tea leaves + if (used.id + 4 in emptyTeaPot){ + addItem(player, used.id + 4) + } + else{ + addItem(player, used.id + 2) + } + // Why do these cups have a noted form! + if (with.id == Items.EMPTY_CUP_7728){ + addItem(player, with.id + 2) + } + else{ + addItem(player, with.id + 1) + } + return true + } + return false + } +} diff --git a/Server/src/main/content/region/desert/handlers/DesertZone.java b/Server/src/main/content/region/desert/handlers/DesertZone.java index 070889206..3110c7233 100644 --- a/Server/src/main/content/region/desert/handlers/DesertZone.java +++ b/Server/src/main/content/region/desert/handlers/DesertZone.java @@ -39,7 +39,7 @@ public final class DesertZone extends MapZone implements Plugin { /** * Represents data of water vessils to dry up. */ - private static final int[][] VESSILS = new int[][] { { 1937, 1935 }, { 1929, 1925 }, { 1921, 1923 }, { 227, 229 } }; + private static final int[][] VESSILS = new int[][] { { 1937, 1935 }, { 1929, 1925 }, { 1921, 1923 }, { 227, 229 }, { 4458, 1980} }; /** * Represents the animation of drinking water. diff --git a/Server/src/main/core/api/Container.kt b/Server/src/main/core/api/Container.kt index 590d94a61..bdcfd4900 100644 --- a/Server/src/main/core/api/Container.kt +++ b/Server/src/main/core/api/Container.kt @@ -3,5 +3,6 @@ package core.api enum class Container { INVENTORY, BANK, - EQUIPMENT + EQUIPMENT, + BoB } \ No newline at end of file diff --git a/Server/src/main/core/api/ContentAPI.kt b/Server/src/main/core/api/ContentAPI.kt index 8185d5079..f5b12c1e4 100644 --- a/Server/src/main/core/api/ContentAPI.kt +++ b/Server/src/main/core/api/ContentAPI.kt @@ -341,6 +341,12 @@ fun removeItem(player: Player, item: T, container: Container = Container.INV Container.INVENTORY -> player.inventory.remove(it) Container.BANK -> player.bank.remove(it) || player.bankSecondary.remove(it) Container.EQUIPMENT -> player.equipment.remove(it) + Container.BoB -> { + if (player.familiarManager.hasFamiliar() && player.familiarManager.familiar.isBurdenBeast) + (player.familiarManager.familiar as BurdenBeast).container.remove(it) + else + false + } } } @@ -375,6 +381,12 @@ fun addItem(player: Player, id: Int, amount: Int = 1, container: Container = Con Container.INVENTORY -> player.inventory Container.BANK -> player.bank Container.EQUIPMENT -> player.equipment + Container.BoB -> { + if(player.familiarManager.hasFamiliar() && player.familiarManager.familiar.isBurdenBeast) + (player.familiarManager.familiar as BurdenBeast).container + else + return false + } } return cont.add(Item(id, amount)) @@ -394,6 +406,7 @@ fun replaceSlot(player: Player, slot: Int, item: Item, currentItem: Item? = null Container.INVENTORY -> player.inventory Container.EQUIPMENT -> player.equipment Container.BANK -> player.bank + Container.BoB -> (player.familiarManager.familiar as BurdenBeast).container } if (item.id == 65535 || item.amount <= 0) { @@ -1684,6 +1697,14 @@ fun removeAll(player: Player, item: T, container: Container = Container.INVE player.bank.remove(Item(it, amountInPrimary)) && player.bankSecondary.remove(Item(it, amountInSecondary)) } Container.INVENTORY -> player.inventory.remove(Item(it, amountInInventory(player, it))) + Container.BoB -> { + if (player.familiarManager.hasFamiliar() && player.familiarManager.familiar.isBurdenBeast){ + val cont = (player.familiarManager.familiar as BurdenBeast).container + cont.remove(Item(it, cont.getAmount(it))) + } + else + false + } } }