init: add workspace files

This commit is contained in:
2026-05-26 16:41:20 +08:00
commit f4f2393f72
1041 changed files with 67405 additions and 0 deletions

228
os/item/obj.js Normal file
View File

@@ -0,0 +1,228 @@
OBJ = function () {
this.unit = "个";
this.path = null;
this.count = 1;
this.combined = true;
this.grade = 0;
this.otype = 0;
}
OBJ.inherits(ITEM);
OBJ.prototype.transable = false;
OBJ.prototype.init = function (me) {
this.on_init && this.on_init(me);
}
OBJ.prototype.long_name = function () {
if (this.combined) return UTIL.to_c(this.count) + this.unit + this.color_name;
return this.color_name;
}
OBJ.prototype.unit_name = function (count) {
return UTIL.to_c(count || this.count) + this.unit + this.color_name;
}
OBJ.prototype.item_to_json = function () {
return `["${this.name}","${this.id}",${this.count},${this.grade},"${this.unit}",${parseInt(this.value / 10)},${this.is_equipment ? 1 : 0},${this.on_use ? 1 : 0},${this.on_study ? 1 : 0},${this.on_open ? 1 : 0},${this.combine_count > 0 ? this.combine_count : 0}]`;
}
OBJ.prototype.query_commands = function (me) {
return this.query_desc(me);
}
OBJ.prototype.query_desc = function (me) {
if (this.json) return this.json;
var obj = {};
obj.type = "item";
obj.id = this.id;
obj.desc = this.get_desc(me);
obj.commands = [];
obj.commands.push({
cmd: "get " + this.id,
name: "捡起"
});
this.json = JSON.stringify(obj)
return this.json;
}
OBJ.prototype.get_desc = function () {
return this.color_name + "\n" + this.desc;
}
OBJ.prototype.uncombine = function (spcount) {
if (!spcount || spcount === this.count) return this;
if (spcount < this.count) {
var item = this.clone();
item.count = spcount;
this.count -= spcount;
return item;
}
}
OBJ.prototype.clone = function () {
var item = OBJ.CREATE(this.path);
if (this.temp) {
item.temp = Object.assign({}, this.temp);
}
return item;
}
OBJ.prototype.combineTemp = function (target, source) {
if (!source) return target;
if (!target) return source;
for (let key in source) {
let val = source[key];
if (val && typeof val === "number") {
let thisVal = target[key];
if (!thisVal) {
target[key] = val;
} else if (typeof thisVal === "number") {
target[key] = thisVal > val ? thisVal : val;
}
}
}
return target;
}
OBJ.prototype.combine = function (obj) {
if (this.is(obj)) {
if (obj.temp || this.temp) {
this.temp = this.combineTemp(this.temp, obj.temp);
}
this.count += (obj.count || 0);
}
}
OBJ.clone_to = function (otype, to, count) {
if (!otype || !to) return;
var item = OBJ.CREATE(otype);
if (!item) return;
count = count || 1;
if (item.is_money && to.money != undefined) {
item.count = count;
to.money += item.value * item.count;
return item;
}
if (!to.items) to.items = [];
if (item.combined) {
for (var i = 0; i < to.items.length; i++) {
if (to.items[i].is(item)) {
to.items[i].count += count;
return to.items[i];
}
}
item.count = count;
to.items.push(item);
} else {
to.items.push(item);
for (var i = 0; i < count - 1; i++) {
item = OBJ.CREATE(otype, 1);
to.items.push(item);
}
}
return item;
}
OBJ.prototype.save_db = function (str) {
str.push('["', this.path, '","', this.id, '",', this.count);
if (this.is_locked) {
str.push(',1');
}
if (this.temp)
str.push(",", this.format_temp(this.temp));
str.push(']');
}
OBJ.prototype.load_db = function (data) {
//path, id, count, temp or lock
this.id = data[1];
if (data[2] > 1) this.count = data[2];
if (data[3]) {
if (data[3] === 1) {
this.is_locked = true;
} else if (typeof data[3] === 'object') {
this.temp = data[3];
return;
}
}
if (data[4]) this.temp = data[4];
}
OBJ.prototype.on_load = function (me) {
this.on_reload && this.on_reload(me);
}
OBJ.prototype.on_clone = function () {
}
OBJ.CREATE = function (otype, count) {
let base = WORLD.OBJ_STROE.get(otype);
if (!base) {
base = BASE.CREATE(__PATH.OBJ, otype);
if (!base) throw new Error('没有物品' + otype + "的定义。");
//这里会自己调用create方法存储到OBJ_STROE记住了吗
}
// var item = BASE.CREATE(__PATH.OBJ, otype);
// if (!item) return;
let item = Object.create(base);
item.create_id();
item.on_clone();
if (count > 1)
item.count = count;
return item;
}
var grade_color = ["wht", "hig", "hic", "hiy", "HIZ", "hio", "ord"];
OBJ.prototype.create = function (path, par) {
if (par) this.path = path + par;
this.create_id();
this.on_create && this.on_create(path, par);
var cc = grade_color[this.grade];
this.color_name = "<" + cc + ">" + this.name + "</" + cc + ">";
WORLD.OBJ_STROE.set(this.path, this);
}
OBJ.prototype.update = function (path, par) {
this.create(path, par);
}
OBJ.prototype.query_grade_color = function () {
return grade_color[this.grade];
}
OBJ.prototype.notify_action = function (me, isadd) {
if (!this.on_use) return;
if (!this.showAction) return;
if (isadd)
me.send("{type:'addAction',id:'" + this.id + "',name:'" + this.name + "',distime:" + (this.distime || 0) + "}");
else
me.send("{type:'removeAction',id:'" + this.id + "'}");
}
OBJ.prototype.query_temp = CHARACTER.prototype.query_temp;
OBJ.prototype.set_temp = CHARACTER.prototype.set_temp;
OBJ.prototype.remove_temp = CHARACTER.prototype.remove_temp;
OBJ.prototype.add_temp = CHARACTER.prototype.add_temp;
OBJ.create_by_odds = function (args) {
var items = [];
if (!args) return items;
let drop = null, per = null,
obj = null;
for (var i = 0; i < args.length; i++) {
drop = args[i];
if (!drop) continue;
per = Math.random() * 10000;
obj = (drop.odds || 10000) > per ? drop.obj : drop.fall_obj;
if (obj) {
if (drop.min_count) hit_count = 0;
var count = drop.count || 1;
if (drop.min && drop.max) {
count = Math.floor(Math.random() * (drop.max - drop.min + 1)) + drop.min;
}
if (count > 0) {
if (obj instanceof Array) obj = obj.random();
items.push(OBJ.CREATE(obj, count));
}
}
}
return items;
}