count activities
This commit is contained in:
parent
60baec853f
commit
e298193057
2 changed files with 27 additions and 4 deletions
|
|
@ -9,6 +9,7 @@ package games.stendhal.server.entity.mapstuff.source;
|
|||
//
|
||||
//
|
||||
|
||||
import games.stendhal.common.MathHelper;
|
||||
import games.stendhal.server.core.engine.SingletonRepository;
|
||||
import games.stendhal.server.core.events.TurnListener;
|
||||
import games.stendhal.server.core.events.UseListener;
|
||||
|
|
@ -24,8 +25,11 @@ import java.lang.ref.WeakReference;
|
|||
* the entity when it finished to succeed. The activity must finish before being
|
||||
* initiated again.
|
||||
*/
|
||||
public abstract class PlayerActivityEntity extends Entity implements
|
||||
UseListener {
|
||||
public abstract class PlayerActivityEntity extends Entity implements UseListener {
|
||||
|
||||
private static final long PENALTY_TIMEOUT = 30 * 60 * 1000;
|
||||
private static final long PENALTY_COUNT = 3000;
|
||||
|
||||
/**
|
||||
* Create a player activity entity.
|
||||
*/
|
||||
|
|
@ -54,7 +58,11 @@ public abstract class PlayerActivityEntity extends Entity implements
|
|||
* activity fails.
|
||||
*/
|
||||
if (nextTo(player)) {
|
||||
onFinished(player, isSuccessful(player));
|
||||
if (isPenalized(player)) {
|
||||
onFinished(player, false);
|
||||
} else {
|
||||
onFinished(player, isSuccessful(player));
|
||||
}
|
||||
} else {
|
||||
player.sendPrivateText("You are too far away from the "+this.getName()+
|
||||
", try to come closer.");
|
||||
|
|
@ -104,6 +112,19 @@ public abstract class PlayerActivityEntity extends Entity implements
|
|||
*/
|
||||
protected abstract void onStarted(final Player player);
|
||||
|
||||
protected boolean isPenalized(final Player player) {
|
||||
String timestamp = player.get("source_usage", this.getName() + ".lastused");
|
||||
int usageCount = 0;
|
||||
if (MathHelper.parseLong(timestamp) > System.currentTimeMillis() - PENALTY_TIMEOUT) {
|
||||
usageCount = player.getInt("source_usage", this.getName() + ".count");
|
||||
}
|
||||
usageCount++;
|
||||
player.put("source_usage", this.getName() + ".lastused", Long.toString(System.currentTimeMillis()));
|
||||
player.put("source_usage", this.getName() + ".count", usageCount);
|
||||
|
||||
return usageCount > PENALTY_COUNT;
|
||||
}
|
||||
|
||||
//
|
||||
// UseListener
|
||||
//
|
||||
|
|
|
|||
|
|
@ -123,10 +123,12 @@ public class PlayerRPClass {
|
|||
// Last time this player attacked another player
|
||||
player.addAttribute("last_pvp_action_time", Type.FLOAT, Definition.HIDDEN);
|
||||
player.addAttribute("last_player_kill_time", Type.FLOAT, Definition.STANDARD);
|
||||
|
||||
|
||||
player.addRPEvent("transition_graph", Definition.PRIVATE);
|
||||
player.addRPEvent("examine", Definition.PRIVATE);
|
||||
player.addRPEvent("show_item_list", Definition.PRIVATE);
|
||||
|
||||
player.addAttribute("source_usage", Type.MAP, Definition.HIDDEN);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue