Merge remote-tracking branch 'upstream/master'

This commit is contained in:
skelsoft 2021-07-28 10:12:21 +10:00
commit dcfc02e60d
8 changed files with 110 additions and 12 deletions

View file

@ -2122,5 +2122,14 @@
"id": "239",
"title": "Contraband yak produce.",
"stock": "{10818,25}-{10816,50}-{10814,50}-{10820,10}"
},
{
"npcs": "1163,1164",
"high_alch": "0",
"currency": "995",
"general_store": "false",
"id": "240",
"title": "Tiadeche's Karambwan Stall",
"stock": "{3142,10}-{3157,10}"
}
]

View file

@ -1,5 +1,6 @@
package core.game.interaction.city.lumbridge;
import api.ContentAPI;
import core.cache.def.impl.SceneryDefinition;
import core.game.content.dialogue.DialoguePlugin;
import core.game.interaction.OptionHandler;
@ -7,6 +8,7 @@ import core.game.node.Node;
import core.game.node.entity.player.Player;
import core.plugin.Initializable;
import core.plugin.Plugin;
import rs09.GlobalStats;
/**
* Cow field sign manager
@ -40,7 +42,12 @@ public class CowFieldSign extends OptionHandler {
public DialoguePlugin newInstance(Player player){return new SignDialogue(player);}
@Override
public boolean open(Object... args){
interpreter.sendPlainMessage(false,"Wandering adventurers have killed " + CowPenZone.CowDeaths + " cows in this field.", "Local farmers call it an epidemic.");
int dailyCowDeaths = GlobalStats.getDailyCowDeaths();
if(dailyCowDeaths > 0) {
ContentAPI.sendDialogue(player, "Local cowherders have reported that " + dailyCowDeaths + " cows have been slain in this field today by passing adventurers. Farmers throughout the land fear this may be an epidemic.");
} else {
ContentAPI.sendDialogue(player, "The Lumbridge cow population has been thriving today, without a single cow death to worry about!" );
}
return true;
}

View file

@ -8,6 +8,7 @@ import core.game.world.map.zone.ZoneBorders;
import core.game.world.map.zone.ZoneBuilder;
import core.plugin.Initializable;
import core.plugin.Plugin;
import rs09.GlobalStats;
/**
* Zone for the lumbridge cow pen
@ -40,7 +41,7 @@ public class CowPenZone extends MapZone implements Plugin<Object> {
@Override
public boolean death(Entity e, Entity killer) {
if (killer instanceof Player && e instanceof NPC) {
CowDeaths++;
GlobalStats.incrementDailyCowDeaths();
}
return false;
}

View file

@ -72,6 +72,7 @@ import core.tools.StringUtils;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import org.rs09.consts.Items;
import rs09.GlobalStats;
import rs09.ServerConstants;
import rs09.game.VarpManager;
import rs09.game.content.ame.RandomEventManager;
@ -582,6 +583,7 @@ public class Player extends Entity {
@Override
public void finalizeDeath(Entity killer) {
GlobalStats.incrementDeathCount();
settings.setSpecialEnergy(100);
settings.updateRunEnergy(settings.getRunEnergy() - 100);
Player k = killer instanceof Player ? (Player) killer : this;

View file

@ -0,0 +1,45 @@
package rs09
import org.json.simple.JSONObject
import rs09.ServerStore.getInt
object GlobalStats {
@JvmStatic
fun incrementDeathCount(){
getDailyDeathArchive()["players"] = getDailyDeathArchive().getInt("players") + 1
}
@JvmStatic
fun incrementDailyCowDeaths(){
getDailyDeathArchive()["lumbridge-cows"] = getDailyDeathArchive().getInt("lumbridge-cows") + 1
}
@JvmStatic
fun incrementGuardPickpockets(){
getGuardPickpocketArchive()["count"] = getGuardPickpocketArchive().getInt("count") + 1
}
@JvmStatic
fun getDailyGuardPickpockets(): Int {
return getGuardPickpocketArchive().getInt("count")
}
fun getDailyDeaths(): Int {
return getDailyDeathArchive().getInt("players")
}
@JvmStatic
fun getDailyCowDeaths(): Int {
return getDailyDeathArchive().getInt("lumbridge-cows")
}
private fun getDailyDeathArchive(): JSONObject {
return ServerStore.getArchive("daily-deaths-global")
}
private fun getGuardPickpocketArchive(): JSONObject {
return ServerStore.getArchive("daily-guard-pickpockets")
}
}

View file

@ -6,15 +6,16 @@ import core.game.node.Node
import core.game.node.entity.Entity
import core.game.world.map.zone.MapZone
import core.game.world.map.zone.ZoneBorders
import rs09.GlobalStats
import rs09.game.interaction.InteractionListener
import rs09.game.system.SystemLogger
class VarrockGuardSignpost : InteractionListener() {
override fun defineListeners() {
val zone = object : MapZone("Varrock Guards", true){
var pickpocketCounter = 0
override fun interact(e: Entity?, target: Node?, option: Option?): Boolean {
if(option != null && option.name.toLowerCase().contains("pickpocket") && target != null && target.name.toLowerCase().contains("guard")){
pickpocketCounter++
GlobalStats.incrementGuardPickpockets()
}
return false
}
@ -25,8 +26,14 @@ class VarrockGuardSignpost : InteractionListener() {
ContentAPI.registerMapZone(zone, ZoneBorders(3180,3420,3165,3435))
ContentAPI.registerMapZone(zone, ZoneBorders(3280,3422,3266,3435))
on(31298, SCENERY, "read"){player, node ->
ContentAPI.sendDialogue(player, "Guards in the Varrock Palace are on full alert due to increasing levels of pickpocketing. So far today, ${zone.pickpocketCounter} guards have had their money pickpocketed in the palace or at the city gates.")
on(31298, SCENERY, "read"){player, _ ->
val pickpocketCount = GlobalStats.getDailyGuardPickpockets()
SystemLogger.logInfo("Is equal? ${pickpocketCount == 0}")
when(pickpocketCount){
0 -> ContentAPI.sendDialogue(player, "The Varrock Palace guards are pleased to announce that crime is at an all-time low, without a single guard in the palace or at the city gates being pickpocketed today.")
1 -> ContentAPI.sendDialogue(player, "One of the Varrock Palace guards was pickpocketed today. He was close to tears at having lost his last few gold pieces." )
else -> ContentAPI.sendDialogue(player, "Guards in the Varrock Palace are on full alert due to increasing levels of pickpocketing. So far today, $pickpocketCount guards have had their money pickpocketed in the palace or at the city gates.")
}
return@on true
}
}

View file

@ -0,0 +1,23 @@
package rs09.game.interaction.region
import api.ContentAPI
import rs09.GlobalStats
import rs09.game.interaction.InteractionListener
class LumbridgeListeners : InteractionListener() {
val CHURCH_SIGN = 31299
override fun defineListeners() {
on(CHURCH_SIGN, SCENERY, "read"){player, _ ->
val deaths = GlobalStats.getDailyDeaths()
if(deaths > 0){
ContentAPI.sendDialogue(player, "So far today $deaths unlucky adventurers have died on RuneScape and been sent to their respawn location. Be careful out there.")
} else {
ContentAPI.sendDialogue(player, "So far today not a single adventurer on RuneScape has met their end grisly or otherwise. Either the streets are getting safer or adventurers are getting warier.")
}
return@on true
}
}
}

View file

@ -39,6 +39,7 @@ class MajorUpdateWorker {
val start = System.currentTimeMillis()
val rmlist = ArrayList<Pulse>()
val list = ArrayList(GameWorld.Pulser.TASKS)
Server.heartbeat()
//run our pulses
for(pulse in list) {
@ -52,22 +53,25 @@ class MajorUpdateWorker {
rmlist.clear()
//perform our update sequence where we write masks, etc
sequence.start()
sequence.run()
sequence.end()
PacketWriteQueue.flush()
try {
sequence.start()
sequence.run()
sequence.end()
PacketWriteQueue.flush()
} catch (e: Exception){
e.printStackTrace()
}
//increment global ticks variable
GameWorld.pulse()
//disconnect all players waiting to be disconnected
Repository.disconnectionQueue.update()
//tick all manager plugins
Managers.tick()
Server.heartbeat()
//Handle daily restart if enabled
if(sdf.format(Date()).toInt() == 0){
if(GameWorld.checkDay() == 7) {//sunday
if(GameWorld.checkDay() == 1) {//monday
ServerStore.clearWeeklyEntries()
}