Files
wsmud/world/cmd/dialog/map.js
2026-05-26 16:41:20 +08:00

72 lines
2.0 KiB
JavaScript

this.inherits(COMMAND);
this.command = "map";
this.allow_busy = true;
this.allow_state = true;
this.allow_die = true;
this.map_json;
this.buffer = {};
var world_map = null;
this.enter = function (me, area) {
//if (!area) {
// if (!this.map_json) this.map_json = getAllMaps(me);
// return me.send(this.map_json);
//}
if (!area || area == "here") {
if (!me.environment) return;
var str = me.environment.path;
area = str.substr(0, str.lastIndexOf("/"));
}
var path = area + "/"
if (this.buffer[area]) return me.send(this.buffer[area]);
var area_obj = null;
for (var i = 0; i < WORLD.AREAS.length; i++) {
if (path == WORLD.AREAS[i].room_path) {
area_obj = WORLD.AREAS[i];
break;
}
}
if (!area_obj) return;
if (area_obj.render_map) return area_obj.render_map(me);
this.buffer[area] = this.createMapJson(area_obj, area);
me.send(this.buffer[area]);
}
this.clearCache = function () {
this.buffer = {};
}
this.update_map = function (id, rm, pos) {
this.buffer[id] = null;
if (!rm) {
var area_obj;
for (var i = 0; i < WORLD.AREAS.length; i++) {
if (path == WORLD.AREAS[i].room_path) {
area_obj = WORLD.AREAS[i];
break;
}
}
return;
}
var str = "{type:'updatemap',map:'" + id + "',id:'" + rm.path + "',n:'" + rm.name + "'";
if (pos) str += ",pos:[" + pos.join() + "]}";
else str += "}";
for (var i = 0; i < rm.items.length; i++) {
if (rm.items[i].is_player)
rm.items[i].send(str);
}
}
this.createMapJson = function (area_obj, area) {
if (!area_obj) return '{type:"map",maps:[]}';
var obj = {};
obj.type = "map";
obj.path = area;
obj.map = area_obj.map;
return JSON.stringify(obj);
}
function getAreaByPath(areas, path) {
if (!areas) return;
for (var i = 0; i < areas.length; i++) {
if (areas[i].path == path) return areas[i];
}
}