RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
Birdhouses.java
1package com.osroyale.content.skill.impl.hunter.birdhouse;
2
3import com.osroyale.game.world.entity.mob.player.Player;
4import com.osroyale.game.world.entity.mob.player.persist.PlayerSerializer;
5import com.osroyale.game.world.entity.skill.SkillData;
6import com.osroyale.game.world.items.Item;
7import com.osroyale.game.world.items.ground.GroundItem;
8import com.osroyale.game.world.object.CustomGameObject;
9import com.osroyale.game.world.object.ObjectDirection;
10import com.osroyale.game.world.object.ObjectType;
11import com.osroyale.net.packet.out.SendAddObject;
12import com.osroyale.net.packet.out.SendRemoveInterface;
13import com.osroyale.util.Utility;
14
15import java.util.ArrayList;
16import java.util.Random;
17
44
45public class Birdhouses {
46 static long SECOND = 1000,
47 MINUTE = SECOND * 60,
48 HOUR = MINUTE * 60,
49 DAY = HOUR * 24;
50
51 public static String getTimeLeft(PlayerBirdHouseData playerBirdHouseData) {
52 long left = playerBirdHouseData.birdhouseTimer - System.currentTimeMillis();
53 long minutes = left / MINUTE;
54 return minutes < 0 ? "rougly 1 minute." : minutes + " minute(s).";
55 }
56
57 public static void receiveLoot(Player player, PlayerBirdHouseData birdHouseData) {
58 player.send(new SendRemoveInterface());
59
60 if(player.inventory.getFreeSlots() < 2) {
61 player.message("You must have two spaces in your inventory to dismantle the birdhouse.");
62 return;
63 }
64
65 ArrayList<Item> receivedItems = new ArrayList<>();
66 player.animate(827);
67
68 player.inventory.addOrDrop(new Item(8792));
69 receivedItems.add(new Item(8792));
70 for(int index = 0; index < 10; index++) {
71 GroundItem.create(player, new Item(9978));
72 receivedItems.add(new Item(9978));
73 }
74 int[] featerAmount = { 30, 40, 50, 60 };
75 int featherAmount = featerAmount[Utility.random(featerAmount.length - 1)];
76
77 player.inventory.addOrDrop(new Item(314, featherAmount));
78 receivedItems.add(new Item(314, featherAmount));
79
80 int nestsReceived = 0;
81
82 player.inventory.addOrDrop(new Item(5073));
83 receivedItems.add(new Item(5073));
84
85 if(wasSuccesful(player, SkillData.HUNTER.ordinal(), 0, 200)) {
86 player.inventory.addOrDrop(new Item(5073));
87 receivedItems.add(new Item(5073));
88 nestsReceived++;
89 }
90
91 for(int index = 0; index < 10; index++) {
92 int hunterLevel = player.skills.getLevel(SkillData.HUNTER.ordinal());
93
94 if(hunterLevel < 50)
95 hunterLevel = 50;
96
97 int nestRate = birdHouseData.birdhouseData.succesRates * (hunterLevel - 1) / 98;
98 int randomRoll = Utility.random(1000);
99
100 if(randomRoll < nestRate) {
101 int nestChance = 100;
102 if(player.equipment.contains(10134))
103 nestChance = 95;
104 int nestRoll = Utility.random(nestChance);
105
106 if(nestRoll < 1) {
107 player.inventory.addOrDrop(new Item(5072));
108 receivedItems.add(new Item(5072));
109 nestsReceived++;
110 }
111 else if(nestRoll < 2) {
112 player.inventory.addOrDrop(new Item(5070));
113 receivedItems.add(new Item(5070));
114 nestsReceived++;
115 } else if(nestRoll < 3) {
116 player.inventory.addOrDrop(new Item(5071));
117 receivedItems.add(new Item(5071));
118 nestsReceived++;
119 } else if(nestRoll < 35) {
120 player.inventory.addOrDrop(new Item(5074));
121 receivedItems.add(new Item(5074));
122 nestsReceived++;
123 } else {
124 player.inventory.addOrDrop(new Item(5075));
125 receivedItems.add(new Item(5075));
126 nestsReceived++;
127 }
128 }
129 }
130
131 player.inventory.refresh();
132
133 player.message("You dismantle and discard the trap, retrieving "+nestsReceived+" nest"+(nestsReceived > 1 ? "s" : "")+", 10 dead birds, "+featherAmount+" feathers and "+birdHouseData.birdhouseData.hunterData[1]+" Hunter XP.");
134 player.skills.addExperience(SkillData.HUNTER.ordinal(), birdHouseData.birdhouseData.hunterData[1]);
135
136 player.send(new SendAddObject(new CustomGameObject(birdHouseData.oldObjectId, birdHouseData.birdhousePosition, ObjectDirection.valueOf(birdHouseData.rotation).get(), ObjectType.valueOf(birdHouseData.type).get())));
137 player.birdHouseData.remove(birdHouseData);
138 PlayerSerializer.save(player);
139 }
140
141 private static boolean wasSuccesful(Player player, int skill, int low, int high) {
142 int level = player.skills.getLevel(skill);
143
144 int odds = 1 + (low * (99 - level) / 98) + (high * (level - 1) / 98);
145 double percent = ((double)odds / 256D) * 100D;
146 int random = new Random().nextInt(256);
147
148 return odds >= random;
149 }
150
151}
void addExperience(int id, double experience)
static GroundItem create(Player player, Item item)
static Optional< ObjectDirection > valueOf(final int id)
static Optional< ObjectType > valueOf(final int id)