I finished my fishing skill, fixed all issues with it, except for one.
If you mass click the fishing spot, it "mass fishes". In other words, click it twice, it fishes two times as fast, basically starting a second event. But, I have this when you click a spot:
Code:
if(!c.isFishing) {
//Fishing.fishingEvent.stop();
Fishing.doFishingEvent(c, npcType, 2);
} else {
Fishing.fishingEvent.stop();
}
This is the event itself:
Code:
public static Event fishingEvent = new Event(){
@Override
public void execute(EventContainer cont) {
if(client.isFishing) {
if(!runFishingCheck(client, fishingSpot, clickedSpot)) {
cont.stop();
return;
}
int checkedFish = checkFish(client, getFish(fishingSpot, clickedSpot));
client.startAnimation(getAnim(fishingSpot, clickedSpot));
client.getItems().addItem(checkedFish, 1);
client.sendMessage("You catch " + getString(client.getItems().getItemName(checkedFish).toLowerCase()) + ".");
if(getSpotBait(fishingSpot, clickedSpot) > 0)
client.getItems().deleteItem(getSpotBait(fishingSpot, clickedSpot), 1);
client.getPA().addSkillXP(getXP(checkedFish) * Config.XP_RATE, 10);
client.getPA().refreshSkill(10);
cont.setTick(20 * (300 - reducedTime(client, checkedFish)));
}
}
@Override
public void stop() {
client.isFishing = false;
}
};
And where the event is initialized:
Code:
if(!c.isFishing) {
c.isFishing = true;
EventManager.getSingleton().addEvent(fishingEvent, 20 * 200);
}
I honestly can't figure it out. I've tried everything.
EDIT: Here is the event related stuff in Fishing.java
Spoiler for Fishing.java :
Code:
package server.model.players.skills;
import server.event.*;
import server.model.players.Client;
import server.Constants;
public class Fishing {
public static int fishingSpot;
public static int clickedSpot;
public static Client client;
public static void doFishingEvent(final Client c, final int spot, final int click) {
try {
fishingSpot = spot;
clickedSpot = click;
client = c;
if(c.isFishing) {
c.isFishing = false;
return;
}
if(!runFishingCheck(c, spot, click)) {
return;
}
c.startAnimation(getAnim(spot, click));
if(!c.isFishing) {
c.isFishing = true;
EventManager.getSingleton().addEvent(fishingEvent, 4000);
}
} catch(Exception e) {
e.printStackTrace();
}
}
public static Event fishingEvent = new Event() {
@Override
public void execute(EventContainer cont) {
if(client.isFishing) {
if(!runFishingCheck(client, fishingSpot, clickedSpot)) {
cont.stop();
return;
}
int checkedFish = checkFish(client, getFish(fishingSpot, clickedSpot));
client.startAnimation(getAnim(fishingSpot, clickedSpot));
client.getItems().addItem(checkedFish, 1);
client.sendMessage("You catch " + getString(client.getItems().getItemName(checkedFish).toLowerCase()) + ".");
if(getSpotBait(fishingSpot, clickedSpot) > 0)
client.getItems().deleteItem(getSpotBait(fishingSpot, clickedSpot), 1);
client.getPA().addSkillXP(getXP(checkedFish) * Constants.XP_RATE, 10);
client.getPA().refreshSkill(10);
cont.setTick(20 * (300 - reducedTime(client, checkedFish)));
}
}
@Override
public void stop() {
client.isFishing = false;
}
};
public static boolean runFishingCheck(Client c, int spot, int click) {
if(c.playerLevel[c.playerFishing] < getSpotLevel(spot, click)) {
c.sendMessage("You need a fishing level of " + getSpotLevel(spot, click) + " to fish here.");
return false;
}
if(!c.getItems().playerHasItem(getSpotItem(spot, click), 1) && getSpotItem(spot, click) != -1) {
c.sendMessage("You need a " + c.getItems().getItemName(getSpotItem(spot, click)).toLowerCase() + " to fish here.");
return false;
}
if(getSpotBait(spot, click) != -1 && !c.getItems().playerHasItem(getSpotBait(spot, click), 1)){
c.sendMessage("You need some bait to fish here.");
return false;
}
if(c.getItems().freeSlots() <= 0){
c.sendMessage("You can't carry anymore fish.");
return false;
}
return true;
}
}