// Range: -1 Access: 0 Flags: ( 0, 4, 255 ) public static void cultist_commune( BaseDynamic user = null, bool? say = null, string message = null ) { string my_message = null; dynamic M = null; if ( say == null ) { say = false; } if ( !Lang13.Bool( message ) ) { return; } if ( say == true ) { user.say( "O bidai nabora se" + Rand13.pick(new object [] { "'", "`" }) + "sma!" ); } else { user.call_verb("Whisper", "O bidai nabora se" + Rand13.pick(new object [] { "'", "`" }) + "sma!" ); } Task13.sleep( 10 ); if ( !( user != null ) ) { return; } if ( say == true ) { user.say( message ); } else { user.call_verb("Whisper", message ); } my_message = "<span class='cultitalic'><b>" + ( user is Mob_Living_Carbon_Human ? "Acolyte" : "Construct" ) + " " + user + ":</b> " + message + "</span>"; M = null; foreach (dynamic _a in GlobalVars.mob_list ) { M = _a; if ( GlobalFuncs.iscultist( M ) ) { M.write( my_message ); } if ( GlobalVars.dead_mob_list.contains( M ) ) { M.write( ((dynamic)new Txt( /* Pruned args, no ctor exists. */ )).Ref( M ).str( ";follow=" ).Ref( user ).str( "'>(F)</a> " ).item( my_message ) ); } }; GlobalFuncs.log_say( "" + ((dynamic)user).real_name + "/" + ((dynamic)user).key + " : " + message ); return; }
// Range: -1 Access: 0 Flags: ( 0, 4, 255 ) public static ByTable recursive_hear_check( BaseDynamic O = null ) { ByTable _default = null; ByTable processing_list = null; dynamic A = null; processing_list = new ByTable(new object [] { O }); _default = new ByTable(); while (processing_list.len != 0) { A = processing_list[1]; if ( Lang13.Bool( A.flags & 16 ) ) { _default += A; } processing_list.Cut( 1, 2 ); processing_list += A.contents; } return _default; }
public static void PushLua(this IntPtr l, object val) { if (l != IntPtr.Zero) { object raw = val.UnwrapDynamic(); BaseDynamic obj = val as BaseDynamic; if (obj is LuaOnStackUserData) { l.PushUserData(obj); } else if (obj is LuaState) { ((LuaState)obj).L.pushthread(); } else if (obj is BaseLuaOnStack) { l.pushvalue(((BaseLuaOnStack)obj).StackPos); } else if (obj is BaseLua) { l.getref(((BaseLua)obj).Refid); } //else if (raw is lua.CFunction) //{ //} else if (raw == null) { l.pushnil(); } else if (raw is bool) { l.pushboolean((bool)raw); } else if (raw is string) { //l.pushstring((string)raw); l.PushString((string)raw); } else if (raw is byte[]) { l.pushbuffer((byte[])raw); } else if (raw is IntPtr) { l.pushlightuserdata((IntPtr)raw); } else if (raw is Enum) { l.PushUserData(raw.WrapDynamic()); } else if (raw.IsObjIConvertible()) { l.pushnumber(Convert.ToDouble(raw)); } else { l.PushUserData(raw.WrapDynamic()); } } }
public static T CreateDelegate <T>(BaseDynamic dyn) where T : class { return(CreateDelegate(typeof(T), dyn) as T); }
public static Delegate CreateDelegate(Type t, BaseDynamic dyn) { if (dyn is BaseLua) { var dynlua = dyn as BaseLua; var l = dynlua.L; var refid = dynlua.Refid; if (l != IntPtr.Zero && refid != 0) { using (var lr = new LuaStateRecover(l)) { l.GetField(lua.LUA_REGISTRYINDEX, "___delreg"); if (!l.istable(-1)) { l.pop(1); l.newtable(); // reg l.newtable(); // reg meta l.PushString("k"); // reg meta 'k' l.SetField(-2, "__mode"); // reg meta l.setmetatable(-2); // reg l.pushvalue(-1); // reg reg l.SetField(lua.LUA_REGISTRYINDEX, "___delreg"); // reg } l.getref(refid); // reg func l.gettable(-2); // reg finfo if (!l.istable(-1)) { l.pop(1); // reg l.newtable(); // reg finfo l.pushvalue(-2); // reg finfo reg l.getref(refid); // reg finfo reg func l.pushvalue(-3); // reg finfo reg func finfo l.settable(-3); // reg info reg l.pop(1); //reg info } l.PushLua(t); // reg finfo dtype l.gettable(-2); // reg finfo del IDelegateDynamicWrapper delwrapper = null; if (l.isuserdata(-1)) { var wr = l.GetLua(-1).UnwrapDynamic <WeakReference>(); if (wr != null) { delwrapper = wr.GetWeakReference <IDelegateDynamicWrapper>(); if (delwrapper == null) { wr.ReturnToPool(); } } } if (delwrapper == null) { delwrapper = CreateDelegateImp(t, dyn); if (delwrapper != null) { var wr = ObjectPool.GetWeakReferenceFromPool(delwrapper); l.pop(1); // reg finfo l.PushLua(t); // reg finfo dtype l.PushRawObj(wr); // reg finfo dtype del l.settable(-3); // reg finfo } } if (delwrapper != null) { return(CreateDelegateFromWrapper(t, delwrapper)); } } } } var wrapper = CreateDelegateImp(t, dyn); if (wrapper != null) { return(CreateDelegateFromWrapper(t, wrapper)); } return(null); }
private static IDelegateDynamicWrapper CreateDelegateImp(Type t, BaseDynamic dyn) { if (t != null && t.IsSubclassOf(typeof(Delegate)) && !object.ReferenceEquals(dyn, null)) { System.Reflection.MethodInfo invoke = t.GetMethod("Invoke"); System.Reflection.ParameterInfo[] pars = invoke.GetParameters(); if (invoke.ReturnType == typeof(void)) { Type wrapperType = null; if (pars != null && pars.Length > 0) { if (pars.Length < ActionWrapperTypes.Length) { wrapperType = ActionWrapperTypes[pars.Length]; Type[] genericTypes = new Type[pars.Length]; for (int i = 0; i < pars.Length; ++i) { genericTypes[i] = pars[i].ParameterType; } wrapperType = wrapperType.MakeGenericType(genericTypes); } } else { wrapperType = typeof(ActionDynamicWrapper); } if (wrapperType != null) { var wrapper = Activator.CreateInstance(wrapperType) as IDelegateDynamicWrapper; wrapper.Target = dyn; return(wrapper); } } else { var gcnt = 0; if (pars != null && pars.Length > 0) { gcnt = pars.Length; } Type wrapperType = null; Type[] genericTypes = new Type[gcnt + 1]; genericTypes[0] = invoke.ReturnType; if (gcnt < FuncWrapperTypes.Length) { wrapperType = FuncWrapperTypes[gcnt]; if (gcnt > 0) { for (int i = 0; i < gcnt; ++i) { genericTypes[i + 1] = pars[i].ParameterType; } wrapperType = wrapperType.MakeGenericType(genericTypes); } } if (wrapperType != null) { var wrapper = Activator.CreateInstance(wrapperType) as IDelegateDynamicWrapper; wrapper.Target = dyn; return(wrapper); } } } return(null); }