[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Форум » Моддинг » 6.3. Прочие идеи и их обсуждение » Lua инъекция (Внедриться в lua-движок червей)
Lua инъекция
Vorobey
Модераторы
Сообщений: 1740
Реп: 101 / Инв: 11
Quote (firsacho)
Один минус - у нас на сайте с lua работать полноценно умеют 3-4 человека...

Да, я их не осилил)
 
4erveR
Модераторы
Сообщений: 1511
Реп: 77 / Инв: 13
Я писал некоторые скрипты, например часть "режима буйвола" в New Edition... не столь сложно, как кажется

Сообщение отредактировал 4erveR - ВТ, 07.02.2012, 20:52:11
 
Jhonny_old
Заблокированные
Сообщений: 355
Реп: 57 / Инв: 5
Я даже заголовок темы не понял. Куда мне скрипты %) хотя я их не пробовал, может мне рискнуть сломать мозг? Хотя может скриптинг не такой сложный всё же я попробую ;)
 
Unaited
Админы
Сообщений: 1463
Реп: 92 / Инв: 13
Quote (Герыч)
Хотелось бы слышать ваши пожелания и вопросы типа "возможно ли будет сделать вот-это?", чтобы я немного смог развить свои идеи.
а можно будет добавить свой контент в игру без замены?


 
Woitek
Проверенные
Сообщений: 523
Реп: 57 / Инв: 11
Hmmmm be possible edit Vector? At this moment is not possible change vector by lua. Much mods be possible create :D. Be great because my older idea be possible for create now.
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Quote (Unaited)
а можно будет добавить свой контент в игру без замены?

думаю, что нет. Контент загружается до луа.

Кстати в игре есть дофига "пустых" моделей. Так что вполне можно ими пользоваться, не заменяя стандартное.




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Vorobey
Модераторы
Сообщений: 1740
Реп: 101 / Инв: 11
Jhonny, читай уроки по lua
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Quote (Woitek)
Hmmmm be possible edit Vector?

It depends on several things: how vectors are passed to lua, is it a copy of vector from engine or a real pointer or reference to it. One thing I can say surely - I can open all lua(but not engine) facilities, which are not available now.

Quote (Unaited)
а можно будет добавить свой контент в игру без замены?

Не факт. Ещё раз повторю - луа - это мостик между нами и движком игры. При этом сами разработчики червяков определили, насколько он широк. В частности они не позволили загружать свои луа(*.lua или *.dll)-библиотеки - эту возможность я открою. А вот недра движка заставить работать по-другому - сложнее, но в принципе и можно.

Quote (firsacho)
сохранять оружие вконце раунда в MySQL)

Интересная задумка... на паузу игру ставить)
Фирсачо, развивай мысль)

Quote (firsacho)
Один минус - у нас на сайте с lua работать полноценно умеют 3-4 человека...

Изучайте, будет полезно.
Вообще советую в связи с грядущим появлением моего проекта начать изучение C# или C++, ибо появится возможность добавлять в игру любой код, а максимальными возможностями будет обладать запускатель игры (на C#).


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Code

             luaL_openlib_hook = Utils.SetupHook<luaL_openlib_Delegate>("luaL_openlib", hookedModule,
                 (original) => (L, s, l, nup) =>
                 {
                     Interface.Echo("luaL_openlib called");
                     original(L, s, l, nup);
                 });


Вот как сейчас выглядит хук функции luaL_openlib... красота для сишарповца)

Code

             luaL_openlib_hook = Utils.SetupHook<luaL_openlib_Delegate>("luaL_openlib", hookedModule,
                 (original) => (L, s, l, nup) =>
                 {
                     Interface.Echo("luaL_openlib called");
                     original(L, s, l, nup);
                 });

Дальше мне надо придумать, как сделать красивым вот такой код:
Code


         [StructLayout(LayoutKind.Sequential)]
         struct luaL_Reg
         {
             public string name;
             [MarshalAs(UnmanagedType.FunctionPtr)]
             public lua_CFunction func;
         };

         static int test(IntPtr L)
         {
             Console.WriteLine("Hacked!");

             return 0;
         }

         private static readonly luaL_Reg[] mylib = new[]
                    {
                    new luaL_Reg {name = "test", func = test}
                    };

...

                 IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(luaL_Reg)) * (mylib.Length + 1));

                 try
                 {
                     for (int i = 0; i < mylib.Length; i++)
                     {
                         Marshal.StructureToPtr(mylib[i], new IntPtr((long)ptr + Marshal.SizeOf(typeof(luaL_Reg)) * i), false);
                     }

                     Marshal.StructureToPtr(new luaL_Reg(), new IntPtr((long)ptr + Marshal.SizeOf(typeof(luaL_Reg)) * mylib.Length), false);

                     luaL_openlib(L, "test", ptr, 0);
                 }
                 finally
                 {
                     // Free the unmanaged memory.
                     Marshal.FreeHGlobal(ptr);
                 }


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Всё, начальная версия, которая способна хукать lua.exe лежит тут
https://github.com/gerich-home/lua-inject
Работает для этой версии луа http://code.google.com/p/luaforwindows/downloads/list


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Если синхронизировать через интернет C# составляющую между игроками играющими одновременно в одной комнате (сделав идентификацию оппонентов например по никам червей)- возможно ли синхронизировать между игроками их пользовательские куски кода (например характеристики оружия индивидуальные для каждого игрока)? То есть определяем, допустим, характеристики и установленные эффекты для базуки в специальной части скрипта пользователя 1 и отправляем кусок скрипта их задающий всем юзерам, чтобы не было вылета.



Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
По поводу синхронизации я бы предложил бы такой вариант:
ланчер червяков запускает игру, при этом он устанавливает хук, он же посредством хука регистрирует в луа какую-либо библиотеку для работы.
При этом, чтобы не пытаться определить что-то по никам, можно определять с помощью функций который предоставил ланчер, все ли игроки имеют у себя на компе запущенный ланчер. Если да, то у главного игрока или с сервера загружается актуальный скрипт и выполняется.


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Grimnir
Проверенные
Сообщений: 589
Реп: 19
А можно сделать голосовой чат как в Team Fortness ?







Понравилось моё сообщение ? Повысь репутацию и дай червонец.
Не бывает разницы в возрасте, бывает разница в уме © Вин Дизель
 
Woitek
Проверенные
Сообщений: 523
Реп: 57 / Инв: 11
Vector and repair weapon_select funtion to like w3d. Add laser to game (shotgun) Most important things in Multi,Mission :D
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Grimnir, его можно сделать и без внедрения в луа) только worms 4 голосовой чат противопоказан... там столько малолеток играет от 7 до 13 лет, что давать им что то орать в микрофон - это взрыв мозга за 2 минуты (ненавижу детей :D ).



Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Jhonny_old
Заблокированные
Сообщений: 355
Реп: 57 / Инв: 5
да и ктому же слушать, как дети от 7 лет до 13 лет ругаются матом, так это вообще помрёшь за 2 секунды
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Борюсь с .net 4.0... проблема в том, что я сейчас могу писать только .net3.5 приложения, что не позволяет мне реализовать одну клёвую задумку..

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Та-дам!)

я прикрутил MEF к хукеру. Теперь можно писать хуки(в форме DLL -библиотек) при уже имеющемся хукере, просто подкладывать их в нужную папку и при запуске они будут, работая в адресном пространстве worms.exe, загружать дотнетовские плагины и устанавливать хуки на произвольные экспортируемые функции червяков. При этом можно будет изначально написать пару таких плагинов, которые устанавливают хук на пару функций, на пример на loadLibrary и на luaL_loadbuffer например, а затем по мере необходимости или при возникновении новых идей добавлять новые хуки.


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Woitek
Проверенные
Сообщений: 523
Реп: 57 / Инв: 11
Gz!!!
Waiting for any hack :D.
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Та-дам! Делаю всё более и более конфигурируемые хуки.
Теперь, какие хуки ставить и с помощью чего, определяется через Config.xml
Можете потрогать ручками(конкретно вот этот файл).

Очень классно, если кто-нибудь попробует запустить хукер с таким конфигом над червяками (в формочке надо поменять путь на путь к червякам, и заменить конфиг):
Code
<?xml version="1.0" encoding="utf-8" ?>
<LuaHookerConfig luamodule="WORMS 4 MAYHEM.EXE">
   <Hookers>
     <Hooker name="TestHooker">TestHooker.dll</Hooker>
   </Hookers>
   <Hooks>
     <Hook name="luaL_openlib">TestHooker</Hook>
   </Hooks>
</LuaHookerConfig>


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Форум » Моддинг » 6.3. Прочие идеи и их обсуждение » Lua инъекция (Внедриться в lua-движок червей)
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск: