refactor(common): 重构 Conn 实体并优化地图进入逻辑
- 优化 Conn 实体的 SendPack 方法,提高代码复用性 - 添加 goja 模块到 go.work 文件 - 重构地图进入逻辑,增加玩家广播和刷怪功能 - 调整 OutInfo 结构中的 Vip 和 Viped 字段类型 - 简化 MonsterRefresh 结构体定义
This commit is contained in:
140
common/utils/goja/builtin_reflect.go
Normal file
140
common/utils/goja/builtin_reflect.go
Normal file
@@ -0,0 +1,140 @@
|
||||
package goja
|
||||
|
||||
func (r *Runtime) builtin_reflect_apply(call FunctionCall) Value {
|
||||
return r.toCallable(call.Argument(0))(FunctionCall{
|
||||
This: call.Argument(1),
|
||||
Arguments: r.createListFromArrayLike(call.Argument(2))})
|
||||
}
|
||||
|
||||
func (r *Runtime) toConstructor(v Value) func(args []Value, newTarget *Object) *Object {
|
||||
if ctor := r.toObject(v).self.assertConstructor(); ctor != nil {
|
||||
return ctor
|
||||
}
|
||||
panic(r.NewTypeError("Value is not a constructor"))
|
||||
}
|
||||
|
||||
func (r *Runtime) builtin_reflect_construct(call FunctionCall) Value {
|
||||
target := call.Argument(0)
|
||||
ctor := r.toConstructor(target)
|
||||
var newTarget Value
|
||||
if len(call.Arguments) > 2 {
|
||||
newTarget = call.Argument(2)
|
||||
r.toConstructor(newTarget)
|
||||
} else {
|
||||
newTarget = target
|
||||
}
|
||||
return ctor(r.createListFromArrayLike(call.Argument(1)), r.toObject(newTarget))
|
||||
}
|
||||
|
||||
func (r *Runtime) builtin_reflect_defineProperty(call FunctionCall) Value {
|
||||
target := r.toObject(call.Argument(0))
|
||||
key := toPropertyKey(call.Argument(1))
|
||||
desc := r.toPropertyDescriptor(call.Argument(2))
|
||||
|
||||
return r.toBoolean(target.defineOwnProperty(key, desc, false))
|
||||
}
|
||||
|
||||
func (r *Runtime) builtin_reflect_deleteProperty(call FunctionCall) Value {
|
||||
target := r.toObject(call.Argument(0))
|
||||
key := toPropertyKey(call.Argument(1))
|
||||
|
||||
return r.toBoolean(target.delete(key, false))
|
||||
}
|
||||
|
||||
func (r *Runtime) builtin_reflect_get(call FunctionCall) Value {
|
||||
target := r.toObject(call.Argument(0))
|
||||
key := toPropertyKey(call.Argument(1))
|
||||
var receiver Value
|
||||
if len(call.Arguments) > 2 {
|
||||
receiver = call.Arguments[2]
|
||||
}
|
||||
return target.get(key, receiver)
|
||||
}
|
||||
|
||||
func (r *Runtime) builtin_reflect_getOwnPropertyDescriptor(call FunctionCall) Value {
|
||||
target := r.toObject(call.Argument(0))
|
||||
key := toPropertyKey(call.Argument(1))
|
||||
return r.valuePropToDescriptorObject(target.getOwnProp(key))
|
||||
}
|
||||
|
||||
func (r *Runtime) builtin_reflect_getPrototypeOf(call FunctionCall) Value {
|
||||
target := r.toObject(call.Argument(0))
|
||||
if proto := target.self.proto(); proto != nil {
|
||||
return proto
|
||||
}
|
||||
|
||||
return _null
|
||||
}
|
||||
|
||||
func (r *Runtime) builtin_reflect_has(call FunctionCall) Value {
|
||||
target := r.toObject(call.Argument(0))
|
||||
key := toPropertyKey(call.Argument(1))
|
||||
return r.toBoolean(target.hasProperty(key))
|
||||
}
|
||||
|
||||
func (r *Runtime) builtin_reflect_isExtensible(call FunctionCall) Value {
|
||||
target := r.toObject(call.Argument(0))
|
||||
return r.toBoolean(target.self.isExtensible())
|
||||
}
|
||||
|
||||
func (r *Runtime) builtin_reflect_ownKeys(call FunctionCall) Value {
|
||||
target := r.toObject(call.Argument(0))
|
||||
return r.newArrayValues(target.self.keys(true, nil))
|
||||
}
|
||||
|
||||
func (r *Runtime) builtin_reflect_preventExtensions(call FunctionCall) Value {
|
||||
target := r.toObject(call.Argument(0))
|
||||
return r.toBoolean(target.self.preventExtensions(false))
|
||||
}
|
||||
|
||||
func (r *Runtime) builtin_reflect_set(call FunctionCall) Value {
|
||||
target := r.toObject(call.Argument(0))
|
||||
var receiver Value
|
||||
if len(call.Arguments) >= 4 {
|
||||
receiver = call.Argument(3)
|
||||
} else {
|
||||
receiver = target
|
||||
}
|
||||
return r.toBoolean(target.set(call.Argument(1), call.Argument(2), receiver, false))
|
||||
}
|
||||
|
||||
func (r *Runtime) builtin_reflect_setPrototypeOf(call FunctionCall) Value {
|
||||
target := r.toObject(call.Argument(0))
|
||||
var proto *Object
|
||||
if arg := call.Argument(1); arg != _null {
|
||||
proto = r.toObject(arg)
|
||||
}
|
||||
return r.toBoolean(target.self.setProto(proto, false))
|
||||
}
|
||||
|
||||
func (r *Runtime) createReflect(val *Object) objectImpl {
|
||||
o := newBaseObjectObj(val, r.global.ObjectPrototype, classObject)
|
||||
|
||||
o._putProp("apply", r.newNativeFunc(r.builtin_reflect_apply, "apply", 3), true, false, true)
|
||||
o._putProp("construct", r.newNativeFunc(r.builtin_reflect_construct, "construct", 2), true, false, true)
|
||||
o._putProp("defineProperty", r.newNativeFunc(r.builtin_reflect_defineProperty, "defineProperty", 3), true, false, true)
|
||||
o._putProp("deleteProperty", r.newNativeFunc(r.builtin_reflect_deleteProperty, "deleteProperty", 2), true, false, true)
|
||||
o._putProp("get", r.newNativeFunc(r.builtin_reflect_get, "get", 2), true, false, true)
|
||||
o._putProp("getOwnPropertyDescriptor", r.newNativeFunc(r.builtin_reflect_getOwnPropertyDescriptor, "getOwnPropertyDescriptor", 2), true, false, true)
|
||||
o._putProp("getPrototypeOf", r.newNativeFunc(r.builtin_reflect_getPrototypeOf, "getPrototypeOf", 1), true, false, true)
|
||||
o._putProp("has", r.newNativeFunc(r.builtin_reflect_has, "has", 2), true, false, true)
|
||||
o._putProp("isExtensible", r.newNativeFunc(r.builtin_reflect_isExtensible, "isExtensible", 1), true, false, true)
|
||||
o._putProp("ownKeys", r.newNativeFunc(r.builtin_reflect_ownKeys, "ownKeys", 1), true, false, true)
|
||||
o._putProp("preventExtensions", r.newNativeFunc(r.builtin_reflect_preventExtensions, "preventExtensions", 1), true, false, true)
|
||||
o._putProp("set", r.newNativeFunc(r.builtin_reflect_set, "set", 3), true, false, true)
|
||||
o._putProp("setPrototypeOf", r.newNativeFunc(r.builtin_reflect_setPrototypeOf, "setPrototypeOf", 2), true, false, true)
|
||||
|
||||
o._putSym(SymToStringTag, valueProp(asciiString("Reflect"), false, false, true))
|
||||
|
||||
return o
|
||||
}
|
||||
|
||||
func (r *Runtime) getReflect() *Object {
|
||||
ret := r.global.Reflect
|
||||
if ret == nil {
|
||||
ret = &Object{runtime: r}
|
||||
r.global.Reflect = ret
|
||||
ret.self = r.createReflect(ret)
|
||||
}
|
||||
return ret
|
||||
}
|
||||
Reference in New Issue
Block a user