Merge branch '2009scape-makingTea' into 'master'

POH Drinks

Closes #2122, #2132, #2131, and #2133

See merge request 2009scape/2009scape!2103
This commit is contained in:
Syndromeramo 2025-12-07 22:26:34 +00:00
commit bb1b89ed8f
21 changed files with 738 additions and 649 deletions

View file

@ -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"
},

View file

@ -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))),

View file

@ -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;
}
}

View file

@ -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."),

View file

@ -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

View file

@ -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);
}
}
}

View file

@ -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<Object> 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;
}
}

View file

@ -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<Int,List<Pair<String, Int>>>, 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<Topic<Int>> {
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()
}
}
}

View file

@ -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
}
}
}

View file

@ -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<Object> 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;
}
}

View file

@ -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")
}

View file

@ -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<Object> 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 };
}
}
}

View file

@ -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")
}

View file

@ -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<Object> 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 };
}
}
}

View file

@ -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
}
}
}
}

View file

@ -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),

View file

@ -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

View file

@ -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
}
}

View file

@ -39,7 +39,7 @@ public final class DesertZone extends MapZone implements Plugin<Object> {
/**
* 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.

View file

@ -3,5 +3,6 @@ package core.api
enum class Container {
INVENTORY,
BANK,
EQUIPMENT
EQUIPMENT,
BoB
}

View file

@ -341,6 +341,12 @@ fun <T> 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 <T> 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
}
}
}