mirror of
https://github.com/gooba42/adventureland.git
synced 2026-10-14 10:33:47 -05:00
Fix tracker unlist condition to not include stationary and game update
This commit is contained in:
+51
-32
@@ -176,7 +176,7 @@ var events = {
|
||||
pinkgoo: 0, // every N minutes - 60
|
||||
snowman: 20 * 60, // 1200 normally - 60 - at sprocess_game_data
|
||||
egghunt: 0, // every N minutes - 60
|
||||
halloween: false,
|
||||
halloween: true,
|
||||
// RANDOM
|
||||
goblin: false,
|
||||
goldenbat: 160000,
|
||||
@@ -2071,8 +2071,13 @@ function drop_something(player, monster, share) {
|
||||
}
|
||||
});
|
||||
}
|
||||
// Home-server monster-specific drops
|
||||
if (player.p.home && player.p.home === region + server_name && D.drops.monsters_home_server[monster.type] && player.tskin != "konami") {
|
||||
// Home-server monster-specific drops
|
||||
if (
|
||||
player.p.home &&
|
||||
player.p.home === region + server_name &&
|
||||
D.drops.monsters_home_server[monster.type] &&
|
||||
player.tskin != "konami"
|
||||
) {
|
||||
D.drops.monsters_home_server[monster.type].forEach(function (item) {
|
||||
let itemShouldDrop = shouldItemDrop(item);
|
||||
if (itemShouldDrop || mode.drop_all) {
|
||||
@@ -4712,7 +4717,8 @@ function init_io() {
|
||||
for (var name in data.drops) {
|
||||
register_table(data.drops[name]);
|
||||
}
|
||||
for (var name in data.drops_home) { //include home tables
|
||||
for (var name in data.drops_home) {
|
||||
//include home tables
|
||||
register_table(data.drops_home[name]);
|
||||
}
|
||||
for (var name in data.maps) {
|
||||
@@ -7048,6 +7054,11 @@ function init_io() {
|
||||
bless_loop();
|
||||
|
||||
discord_call(player.name + " blessed " + region + " " + server_name);
|
||||
|
||||
realm_broadcast("server_message", {
|
||||
message: player.name + " blessed " + region + " " + server_name,
|
||||
color: "#8F70D8",
|
||||
});
|
||||
},
|
||||
);
|
||||
success_response({ success: false, in_progress: true });
|
||||
@@ -12030,36 +12041,40 @@ function update_instance(instance) {
|
||||
set_ghash(aggressives, monster, 32);
|
||||
}
|
||||
}
|
||||
if (monster.target && monster.spawns && get_player(monster.target) && !is_disabled(monster)) {
|
||||
monster.spawns.forEach((spi) => {
|
||||
const condition = spi[0]; // interval or "hp:0.75"
|
||||
const name = spi[1]; // monster type
|
||||
const count = spi[2] || 1; // default to 1
|
||||
if (monster.target && monster.spawns && get_player(monster.target) && !is_disabled(monster)) {
|
||||
monster.spawns.forEach((spi) => {
|
||||
const condition = spi[0]; // interval or "hp:0.75"
|
||||
const name = spi[1]; // monster type
|
||||
const count = spi[2] || 1; // default to 1
|
||||
|
||||
// --- Timed spawns (existing) ---
|
||||
if (typeof condition === "number") {
|
||||
if (!monster.last[name] || mssince(monster.last[name]) > condition) {
|
||||
for (let i = 0; i < count; i++) {
|
||||
const pname = random_one(Object.keys(monster.points));
|
||||
const player = get_player(pname);
|
||||
if (!player || player.npc || distance(monster, player) > 400) return;
|
||||
if (!is_same(player, get_player(monster.target), true)) return;
|
||||
// --- Timed spawns (existing) ---
|
||||
if (typeof condition === "number") {
|
||||
if (!monster.last[name] || mssince(monster.last[name]) > condition) {
|
||||
for (let i = 0; i < count; i++) {
|
||||
const pname = random_one(Object.keys(monster.points));
|
||||
const player = get_player(pname);
|
||||
if (!player || player.npc || distance(monster, player) > 400) return;
|
||||
if (!is_same(player, get_player(monster.target), true)) return;
|
||||
|
||||
monster.last[name] = new Date();
|
||||
const spot = safe_xy_nearby(player.map, player.x + Math.random() * 20 - 10, player.y + Math.random() * 20 - 10);
|
||||
if (!spot) return;
|
||||
monster.last[name] = new Date();
|
||||
const spot = safe_xy_nearby(
|
||||
player.map,
|
||||
player.x + Math.random() * 20 - 10,
|
||||
player.y + Math.random() * 20 - 10,
|
||||
);
|
||||
if (!spot) return;
|
||||
|
||||
new_monster(instance.name, {
|
||||
type: name,
|
||||
stype: "spawn",
|
||||
x: spot.x,
|
||||
y: spot.y,
|
||||
target: player.name,
|
||||
master: monster.id,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
new_monster(instance.name, {
|
||||
type: name,
|
||||
stype: "spawn",
|
||||
x: spot.x,
|
||||
y: spot.y,
|
||||
target: player.name,
|
||||
master: monster.id,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- HP threshold spawns (new) ---
|
||||
if (typeof condition === "string" && condition.startsWith("hp:")) {
|
||||
@@ -12072,7 +12087,11 @@ function update_instance(instance) {
|
||||
const player = get_player(pname);
|
||||
if (player && !player.npc && distance(monster, player) < 400) {
|
||||
if (is_same(player, get_player(monster.target), true)) {
|
||||
const spot = safe_xy_nearby(player.map, player.x + Math.random() * 20 - 10, player.y + Math.random() * 20 - 10);
|
||||
const spot = safe_xy_nearby(
|
||||
player.map,
|
||||
player.x + Math.random() * 20 - 10,
|
||||
player.y + Math.random() * 20 - 10,
|
||||
);
|
||||
if (spot) {
|
||||
new_monster(instance.name, {
|
||||
type: name,
|
||||
|
||||
+25
-21
@@ -1905,34 +1905,38 @@ function event_loop() {
|
||||
if (events.halloween) {
|
||||
var s = get_monster("slenderman");
|
||||
if (s) {
|
||||
var p = false;
|
||||
var should_warp = false;
|
||||
for (var id in projectiles) {
|
||||
if (projectiles[id].target == s) {
|
||||
p = true;
|
||||
should_warp = true;
|
||||
}
|
||||
}
|
||||
if (!s.last_jump || msince(s.last_jump) > 2) {
|
||||
p = true;
|
||||
should_warp = true;
|
||||
}
|
||||
for (var name in instances[s.in].players) {
|
||||
var player = instances[s.in].players[name];
|
||||
if (p || (!player.s.invis && distance(player, s) < 600)) {
|
||||
xy_emit(s, "disappear", { id: s.id });
|
||||
delete instances[s.in].monsters[s.id];
|
||||
s.oin = s.in = s.map = random_one(["spookytown", "halloween", "cave"]);
|
||||
instances[s.in].monsters[s.id] = s;
|
||||
var p = random_place(s.map);
|
||||
s.moving = false;
|
||||
s.abs = true;
|
||||
s.map_def.boundary = [p.x, p.y, p.x, p.y];
|
||||
s.map_def.i = s.map;
|
||||
s.x = p.x;
|
||||
s.y = p.y;
|
||||
s.u = true;
|
||||
s.cid++;
|
||||
s.last_jump = new Date();
|
||||
break;
|
||||
if (!should_warp)
|
||||
for (var name in instances[s.in].players) {
|
||||
var player = instances[s.in].players[name];
|
||||
if (p || (!player.s.invis && distance(player, s) < 600)) {
|
||||
should_warp = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (should_warp) {
|
||||
xy_emit(s, "disappear", { id: s.id });
|
||||
delete instances[s.in].monsters[s.id];
|
||||
s.oin = s.in = s.map = random_one(["spookytown", "halloween", "cave"]);
|
||||
instances[s.in].monsters[s.id] = s;
|
||||
var pl = random_place(s.map);
|
||||
s.moving = false;
|
||||
s.abs = true;
|
||||
s.map_def.boundary = [pl.x, pl.y, pl.x, pl.y];
|
||||
s.map_def.i = s.map;
|
||||
s.x = pl.x;
|
||||
s.y = pl.y;
|
||||
s.u = true;
|
||||
s.cid++;
|
||||
s.last_jump = new Date();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user