diff --git a/src/common/engine/namedef.h b/src/common/engine/namedef.h index 411db2bda2..144b466364 100644 --- a/src/common/engine/namedef.h +++ b/src/common/engine/namedef.h @@ -167,10 +167,12 @@ xx(Insert) xx(InsertNew) xx(Remove) xx(Get) +xx(GetIfExists) xx(GetValue) xx(GetKey) xx(SetValue) xx(CheckKey) +xx(CheckValue) xx(Value) xx(Copy) xx(Move) diff --git a/src/common/scripting/core/types.cpp b/src/common/scripting/core/types.cpp index 6c40aa5f0b..b799ad2910 100644 --- a/src/common/scripting/core/types.cpp +++ b/src/common/scripting/core/types.cpp @@ -2237,6 +2237,7 @@ enum OverrideFunctionArgType { OFN_ARG_KEY, OFN_ARG_VAL, OFN_ARG_KEY_VAL, + OFN_ARG_KEY_OUT_BOOL, }; template @@ -2248,7 +2249,6 @@ void CreateOverrideFunction(MT *self, FName name) assert(NativeFn); assert(NativeFn->VMPointer); - TArray ret; TArray args; TArray argflags; @@ -2293,6 +2293,15 @@ void CreateOverrideFunction(MT *self, FName name) argnames.Push(NAME_Key); argnames.Push(NAME_Value); } + else if constexpr(ArgType == OFN_ARG_KEY_OUT_BOOL) + { + args.Push(self->KeyType); + args.Push(TypeBool); + argflags.Push(0); + argflags.Push(VARF_Out); + argnames.Push(NAME_Key); + argnames.Push(NAME_Exists); + } Fn->AddVariant(NewPrototype(ret, args), argflags, argnames, *NativeFn->VMPointer, VARF_Method | VARF_Native,SUF_ACTOR | SUF_OVERLAY | SUF_WEAPON | SUF_ITEM); self->FnOverrides.Insert(name, Fn); @@ -2304,8 +2313,10 @@ PMap::PMap(PType *keytype, PType *valtype, PStruct *backing, int backing_class) mDescriptiveName.Format("Map<%s, %s>", keytype->DescriptiveName(), valtype->DescriptiveName()); Size = sizeof(ZSFMap); Align = alignof(ZSFMap); - CreateOverrideFunction(this, NAME_Get); + CreateOverrideFunction(this, NAME_Get); + CreateOverrideFunction(this, NAME_GetIfExists); CreateOverrideFunction(this, NAME_CheckKey); + CreateOverrideFunction(this, NAME_CheckValue); CreateOverrideFunction(this, NAME_Insert); CreateOverrideFunction(this, NAME_InsertNew); CreateOverrideFunction(this, NAME_Remove);