RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
Cooking.java
1package com.osroyale.content.skill.impl.cooking;
2
3import com.osroyale.Config;
4import com.osroyale.content.activity.randomevent.RandomEventHandler;
5import com.osroyale.content.dialogue.ChatBoxItemDialogue;
6import com.osroyale.content.event.impl.ItemOnObjectInteractionEvent;
7import com.osroyale.content.skillcape.SkillCape;
8import com.osroyale.game.Animation;
9import com.osroyale.game.action.Action;
10import com.osroyale.game.action.policy.WalkablePolicy;
11import com.osroyale.game.world.entity.mob.player.Player;
12import com.osroyale.game.world.entity.skill.Skill;
13import com.osroyale.game.world.items.Item;
14import com.osroyale.game.world.items.ItemDefinition;
15import com.osroyale.game.world.object.GameObject;
16import com.osroyale.net.packet.out.SendInputAmount;
17import com.osroyale.net.packet.out.SendMessage;
18import com.osroyale.util.Utility;
19
20import java.util.Arrays;
21
56
57public class Cooking extends Skill {
58
59 private transient final String[] objects = { "range", "fire", "oven", "stove", "cooking range", "fireplace" };
60
61 public Cooking(int level, double experience) {
62 super(Skill.COOKING, level, experience);
63 }
64
65 private boolean cookableObject(GameObject object) {
66 String name = object.getDefinition().getName().toLowerCase();
67 return Arrays.stream(objects).anyMatch(name::contains);
68 }
69
70 private boolean success(Player player, int level, int noBurn) {
71 if (SkillCape.isEquipped(player, SkillCape.COOKING) || player.skills.getLevel(Skill.COOKING) >= noBurn || player.equipment.contains(775)) {
72 return true;
73 }
74
75
76 int burn_bonus = 3;
77 double burn_chance = (45.0 - burn_bonus);
78 double cook_level = player.skills.getLevel(Skill.COOKING);
79 double multi_a = ((double) noBurn - (double) level);
80 double burn_dec = (burn_chance / multi_a);
81 double multi_b = (cook_level - (double) level);
82 burn_chance -= (multi_b * burn_dec);
83 double random_number = Utility.random(100);
84 return burn_chance <= random_number;
85 }
86
87 @Override
88 protected double modifier() {
90 }
91
92 @Override
93 protected boolean useItem(Player player, ItemOnObjectInteractionEvent event) {
94 Item item = event.getItem();
95 GameObject object = event.getObject();
96
97 if (!cookableObject(object)) {
98 return false;
99 }
100
101 if (!CookData.forId(item.getId()).isPresent()) {
102 return false;
103 }
104
105 if (player.skills.get(Skill.COOKING).isDoingSkill()) {
106 return true;
107 }
108
109 CookData cook = CookData.forId(item.getId()).get();
110
111 if (getLevel() < cook.getLevel()) {
112 player.dialogueFactory.sendStatement("You need a cooking level of " + cook.getLevel() + " to cook this!").execute();
113 return true;
114 }
115
116
117 if (player.inventory.computeAmountForId(item.getId()) == 1) {
118 player.action.execute(cook(player, cook, 1), true);
119 } else {
120 ChatBoxItemDialogue.sendInterface(player, 1746, cook.getCooked(), 0, -5, 170);
121 player.chatBoxItemDialogue = new ChatBoxItemDialogue(player) {
122 @Override
123 public void firstOption(Player player) {
124 player.action.execute(cook(player, cook, 1), true);
125 }
126
127 @Override
128 public void secondOption(Player player) {
129 player.action.execute(cook(player, cook, 5), true);
130 }
131
132 @Override
133 public void thirdOption(Player player) {
134 player.send(new SendInputAmount("Enter amount of fish you would like to cook", 10, input -> player.action.execute(cook(player, cook, Integer.parseInt(input)), true)));
135 }
136
137 @Override
138 public void fourthOption(Player player) {
139 player.action.execute(cook(player, cook, 28), true);
140 }
141 };
142 }
143 return true;
144 }
145
146 private Action<Player> cook(Player player, CookData cook, int amount) {
147 return new Action<Player>(player, 3, true) {
148 int ticks = 0;
149
150 @Override
151 protected void onSchedule() {
152 player.skills.get(Skill.COOKING).setDoingSkill(true);
153 }
154
155 @Override
156 public void execute() {
157 if (!player.skills.get(Skill.COOKING).isDoingSkill()) {
158 cancel();
159 return;
160 }
161
162 if (!player.inventory.contains(cook.getItem())) {
163 cancel();
164 player.send(new SendMessage("<col=369>You have run out of materials."));
165 return;
166 }
167 player.animate(new Animation(883));
168 String name = ItemDefinition.get(cook.getCooked()).getName();
169 player.inventory.remove(cook.getItem(), 1);
170
171 if (success(player, cook.getLevel(), cook.getNoBurn())) {
172 player.inventory.add(cook.getCooked(), 1);
173 player.skills.addExperience(Skill.COOKING, cook.getExp() * modifier());
174 player.send(new SendMessage("You successfully cook the " + name + ".", true));
175 player.playerAssistant.activateSkilling(1);
176 RandomEventHandler.trigger(player);
177 } else {
178 player.inventory.add(cook.getBurnt(), 1);
179 player.send(new SendMessage("You accidently burn the " + name + ".", true));
180 }
181
182 if (++ticks == amount) {
183 cancel();
184 }
185 }
186
187 @Override
188 protected void onCancel(boolean logout) {
189 player.resetFace();
190 player.skills.get(Skill.COOKING).setDoingSkill(false);
191 }
192
193 @Override
194 public String getName() {
195 return "Cooking";
196 }
197
198 @Override
199 public boolean prioritized() {
200 return false;
201 }
202
203 @Override
204 public WalkablePolicy getWalkablePolicy() {
206 }
207 };
208 }
209}
static final double COOKING_MODIFICATION
Definition Config.java:292
final DialogueFactory sendStatement(String... lines)
static String getName(int skill)
Definition Skill.java:502
Skill(int skill, int level, double experience)
Definition Skill.java:221
void addExperience(int id, double experience)