init: add workspace files
This commit is contained in:
228
os/item/obj.js
Normal file
228
os/item/obj.js
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user