public virtual unsafe void Run()
        {
            long giveNmMessageFunc;
            long createNmMessageFunc = (long)MemoryAccess.CreateNmMessageFunc;
            long num2 = *(createNmMessageFunc + createNmMessageFunc[(int)0x22]) + 0x26 (0x1218L);

            if (num2 == 0)
            {
                return;
            }
            else
            {
                *(createNmMessageFunc + createNmMessageFunc[(int)60]) + 0x40 (num2, num2 + 0x18, 0x40);
                Dictionary <string, object> .Enumerator enumerator = this._arguments.GetEnumerator();
                if (enumerator.MoveNext())
                {
                    do
                    {
                        KeyValuePair <string, object> current = enumerator.Current;
                        IntPtr ptr4 = ScriptDomain.CurrentDomain.PinString(current.Key);
                        if (current.Value.GetType() == typeof(bool))
                        {
                            int num16 = ((bool)current.Value) ? 1 : 0;
                            *MemoryAccess.SetNmBoolAddress(num2, ptr4.ToInt64(), (byte)num16);
                        }
                        if (current.Value.GetType() == typeof(int))
                        {
                            *MemoryAccess.SetNmIntAddress(num2, ptr4.ToInt64(), (int)current.Value);
                        }
                        if (current.Value.GetType() == typeof(float))
                        {
                            *MemoryAccess.SetNmFloatAddress(num2, ptr4.ToInt64(), (float)current.Value);
                        }
                        if (current.Value.GetType() == typeof(Vector3))
                        {
                            Vector3 vector = current.Value[0];
                            *MemoryAccess.SetNmVec3Address(num2, ptr4.ToInt64(), vector.X, vector.Y, vector.Z);
                        }
                        if (current.Value.GetType() == typeof(string))
                        {
                            IntPtr ptr3 = ScriptDomain.CurrentDomain.PinString((string)current.Value);
                            *MemoryAccess.SetNmStringAddress(num2, ptr4.ToInt64(), ptr3.ToInt64());
                        }
                    }while (enumerator.MoveNext());
                }
                giveNmMessageFunc = (long)MemoryAccess.GiveNmMessageFunc;
                long num13 = (giveNmMessageFunc + giveNmMessageFunc[0xbcL]) + 0xc0L;
                long num12 = (giveNmMessageFunc + giveNmMessageFunc[0xceL]) + 210L;
                long num3  = MemoryAccess.GetEntityAddress(this._targetHandle).ToInt64();
                bool flag  = false;
                if ((num3 == 0) || (num3[(int)0x30] == 0))
                {
                    return;
                }
                else
                {
                    long num6  = *num3[0][(int)0x58](num3);
                    int  num11 = (getGameVersion() >= 0x1a) ? ((int)(giveNmMessageFunc + giveNmMessageFunc[0x4c])[0x9dL]) : ((int)giveNmMessageFunc[(int)0x4e]);
                    if ((num3[(int)0x30] != num6) || ((((long)num11)[(int)num3] > num3[640L]) || (*num6[0][0x98L](num6) == -1)))
                    {
                        return;
                    }
                    else
                    {
                        long num5 = giveNmMessageFunc[0x93L][(int)num3];
                        if (*((giveNmMessageFunc + giveNmMessageFunc[0xa2L]) + 0xa6L)(num5[0x360L])[(int)0x34] != 0x191)
                        {
                            sbyte modopt(IsSignUnspecifiedByte) num8 = *((sbyte modopt(IsSignUnspecifiedByte) *)num13);

                            if (num8 != null)
                            {
                                *(giveNmMessageFunc + giveNmMessageFunc[0xd3L]) + 0xd7L (num12);
                                num8 = *((sbyte modopt(IsSignUnspecifiedByte) *)num13);
                            }
                            int num10 = *((int *)(num5 + 0x428L));
                            if (num8 != null)
                            {
                                *(giveNmMessageFunc + giveNmMessageFunc[240L]) + 0xf4L (num12);
                            }
                            int num4 = 0;
                            if (0 >= num10)
                            {
                                goto TR_0001;
                            }
                            else
                            {
                                long num15 = num5 + 0x424L;
                                while (true)
                                {
                                    long num7 = (num5 + ((((num15[0] + num4) + 1) % 0x10) * 8))[0x3a0L];
                                    if ((num7 != 0) && (*num7[0][(int)0x18](num7) == 0x84))
                                    {
                                        long num9 = num7[(int)40];
                                        if (num9 != 0)
                                        {
                                            flag = (num9[(int)0x34] == 0x191) || flag;
                                        }
                                    }
                                    num4++;
                                    if (num4 >= num10)
                                    {
                                        if (flag)
                                        {
                                            break;
                                        }
                                        goto TR_0001;
                                    }
                                }
                            }
                        }
                        if (*num6[0][0x98L](num6) != -1)
                        {
                            IntPtr ptr = ScriptDomain.CurrentDomain.PinString(this._message);
                            *(giveNmMessageFunc + giveNmMessageFunc[0x1aaL]) + 430L (num6, ptr.ToInt64(), num2);
                        }
                    }
                }
            }
TR_0001:
            *(giveNmMessageFunc + giveNmMessageFunc[0x1bbL]) + 0x1bfL (num2);
        }
Example #2
0
        public virtual unsafe void Run()
        {
            long createNmMessageFunc = (long)MemoryAccess.CreateNmMessageFunc;
            long num1 = createNmMessageFunc;
            // ISSUE: cast to a function pointer type
            // ISSUE: function pointer call
            long num2 = __calli((__FnPtr <long (long)>)(num1 + (long)*(int *)(num1 + 34L) + 38L))(4632L);

            if (num2 == 0L)
            {
                return;
            }
            long num3 = num2;
            long num4 = num3 + 24L;
            long num5 = createNmMessageFunc;
            // ISSUE: cast to a function pointer type
            // ISSUE: function pointer call
            long num6 = __calli((__FnPtr <long (long, long, int)>)(num5 + (long)*(int *)(num5 + 60L) + 64L))((int)num3, num4, 64L);

            Dictionary <string, object> .Enumerator enumerator = this._arguments.GetEnumerator();
            if (enumerator.MoveNext())
            {
                do
                {
                    KeyValuePair <string, object> current = enumerator.Current;
                    IntPtr num7 = ScriptDomain.CurrentDomain.PinString(current.Key);
                    if (current.Value.GetType() == typeof(bool))
                    {
                        int  num8  = (bool)current.Value ? 1 : 0;
                        long num9  = num2;
                        long int64 = num7.ToInt64();
                        int  num10 = (int)(byte)num8;
                        // ISSUE: function pointer call
                        int num11 = (int)__calli(MemoryAccess.SetNmBoolAddress)((byte)num9, int64, (long)num10);
                    }
                    if (current.Value.GetType() == typeof(int))
                    {
                        long num8  = num2;
                        long int64 = num7.ToInt64();
                        int  num9  = (int)current.Value;
                        // ISSUE: function pointer call
                        int num10 = (int)__calli(MemoryAccess.SetNmIntAddress)((int)num8, int64, (long)num9);
                    }
                    if (current.Value.GetType() == typeof(float))
                    {
                        long   num8  = num2;
                        long   int64 = num7.ToInt64();
                        double num9  = (double)(float)current.Value;
                        // ISSUE: function pointer call
                        int num10 = (int)__calli(MemoryAccess.SetNmFloatAddress)((float)num8, int64, (long)num9);
                    }
                    if (current.Value.GetType() == typeof(Vector3))
                    {
                        Vector3 vector3 = (Vector3)current.Value;
                        long    num8    = num2;
                        long    int64   = num7.ToInt64();
                        double  x       = (double)vector3.X;
                        double  y       = (double)vector3.Y;
                        double  z       = (double)vector3.Z;
                        // ISSUE: function pointer call
                        int num9 = (int)__calli(MemoryAccess.SetNmVec3Address)((float)num8, (float)int64, (float)x, (long)y, (long)z);
                    }
                    if (current.Value.GetType() == typeof(string))
                    {
                        IntPtr num8    = ScriptDomain.CurrentDomain.PinString((string)current.Value);
                        long   num9    = num2;
                        long   int64_1 = num7.ToInt64();
                        long   int64_2 = num8.ToInt64();
                        // ISSUE: function pointer call
                        int num10 = (int)__calli(MemoryAccess.SetNmStringAddress)(num9, int64_1, int64_2);
                    }
                }while (enumerator.MoveNext());
            }
            long giveNmMessageFunc = (long)MemoryAccess.GiveNmMessageFunc;
            long num12             = giveNmMessageFunc;
            long num13             = num12 + (long)*(int *)(num12 + 188L) + 192L;
            long num14             = giveNmMessageFunc;
            long num15             = num14 + (long)*(int *)(num14 + 206L) + 210L;
            long int64_3           = MemoryAccess.GetEntityAddress(this._targetHandle).ToInt64();
            bool flag = false;

            if (int64_3 == 0L || *(long *)(int64_3 + 48L) == 0L)
            {
                return;
            }
            long num16 = int64_3;
            // ISSUE: cast to a function pointer type
            // ISSUE: function pointer call
            long num17 = __calli((__FnPtr <long (long)>) * (long *)(*(long *)num16 + 88L))(num16);
            int  num18;

            if (_Module_.getGameVersion() < (eGameVersion)26)
            {
                num18 = *(int *)(giveNmMessageFunc + 78L);
            }
            else
            {
                long num7 = giveNmMessageFunc;
                num18 = *(int *)(num7 + (long)*(int *)(num7 + 76L) + 157L);
            }
            if (*(long *)(int64_3 + 48L) != num17 || (double)*(float *)((long)num18 + int64_3) > (double)*(float *)(int64_3 + 640L))
            {
                return;
            }
            long num19 = num17;

            // ISSUE: cast to a function pointer type
            // ISSUE: function pointer call
            if (__calli((__FnPtr <int (long)>) * (long *)(*(long *)num19 + 152L))(num19) == -1)
            {
                return;
            }
            long num20 = *(long *)((long)*(int *)(giveNmMessageFunc + 147L) + int64_3);
            long num21 = *(long *)(num20 + 864L);
            long num22 = giveNmMessageFunc;

            // ISSUE: cast to a function pointer type
            // ISSUE: function pointer call
            if (*(short *)(__calli((__FnPtr <long (long)>)(num22 + (long)*(int *)(num22 + 162L) + 166L))(num21) + 52L) != (short)401)
            {
                sbyte num7 = *(sbyte *)num13;
                if (num7 != (sbyte)0)
                {
                    long num8 = num15;
                    long num9 = giveNmMessageFunc;
                    // ISSUE: cast to a function pointer type
                    // ISSUE: function pointer call
                    __calli((__FnPtr <void (long)>)(num9 + (long)*(int *)(num9 + 211L) + 215L))(num8);
                    num7 = *(sbyte *)num13;
                }
                int num10 = *(int *)(num20 + 1064L);
                if (num7 != (sbyte)0)
                {
                    long num8 = num15;
                    long num9 = giveNmMessageFunc;
                    // ISSUE: cast to a function pointer type
                    // ISSUE: function pointer call
                    __calli((__FnPtr <void (long)>)(num9 + (long)*(int *)(num9 + 240L) + 244L))(num8);
                }
                int num11 = 0;
                if (0 < num10)
                {
                    long num8 = num20 + 1060L;
                    do
                    {
                        long num9 = *(long *)(num20 + (long)((*(int *)num8 + num11 + 1) % 16 * 8) + 928L);
                        if (num9 != 0L)
                        {
                            long num23 = num9;
                            // ISSUE: cast to a function pointer type
                            // ISSUE: function pointer call
                            if (__calli((__FnPtr <int (long)>) * (long *)(*(long *)num23 + 24L))(num23) == 132)
                            {
                                long num24 = *(long *)(num9 + 40L);
                                if (num24 != 0L)
                                {
                                    flag = *(short *)(num24 + 52L) == (short)401 || flag;
                                }
                            }
                        }
                        ++num11;
                    }while (num11 < num10);
                    if (!flag)
                    {
                        goto label_34;
                    }
                }
                else
                {
                    goto label_34;
                }
            }
            long num25 = num17;

            // ISSUE: cast to a function pointer type
            // ISSUE: function pointer call
            if (__calli((__FnPtr <int (long)>) * (long *)(*(long *)num25 + 152L))(num25) != -1)
            {
                IntPtr num7    = ScriptDomain.CurrentDomain.PinString(this._message);
                long   num8    = num17;
                long   int64_1 = num7.ToInt64();
                long   num9    = num2;
                long   num10   = giveNmMessageFunc;
                // ISSUE: cast to a function pointer type
                // ISSUE: function pointer call
                __calli((__FnPtr <void (long, long, long)>)(num10 + (long)*(int *)(num10 + 426L) + 430L))(num8, int64_1, num9);
            }
label_34:
            long num26 = num2;
            long num27 = giveNmMessageFunc;

            // ISSUE: cast to a function pointer type
            // ISSUE: function pointer call
            __calli((__FnPtr <void (long)>)(num27 + (long)*(int *)(num27 + 443L) + 447L))(num26);
        }