// 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;
		}
Beispiel #3
0
        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);
 }