Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.28 KB | None | 0 0
  1. 8:53 AM]-̅1̅:
  2. #include "fonline.fosh"
  3.  
  4. bool module_init() {
  5.     FOnline.On("keydown", @OnKeydown);
  6.     FOnline.On("keydown", @AnotherKeydown);
  7.     FOnline.Dispatch("keydown", dictionary = { {"key", 12} });
  8.     return true;
  9. }
  10.  
  11. void OnKeydown(Event& event) {
  12.     Log( "Clicking " + uint(event["key"]) );
  13. }
  14.  
  15. void AnotherKeydown(Event& event) {
  16.    Log("Meanwhile is running too");
  17. }
  18. [9:01 AM]-̅1̅: И какая никакая, скриптовая модульность все-таки возможна
  19. [9:02 AM]-̅1̅: Фигня сверху отдельный от мейна/фонлайн.фос модуль, что может в резервированные функции в других модулях инжектировать свой код через FOnline.On(...) / FOnline.Dispatch(...). Т.е. просто закинуть его в папку и прописать в scripts.cfg, никаких дальнейших классических импортов и ручных вписываний в полудесятку файлов.
  20. [1:06 PM] VVish: Хм, пока не сильно понимаю что это дает. Например - боевка, там же вызовы внутри функций нужны в любом случае, при расчете урона или хитшанса.
  21. [1:06 PM] VVish: Чем это отличается от обычных модулей, которые паркуются в scripts.cfg и затем единожды импортируются в мейне или где-то еще, в случае если вызов необходим?
  22. [2:46 PM]-̅1̅: Тем что они этого не делают и весь добавляемый код остаётся в пределах добавляемого файла-модуля
  23. [2:46 PM]-̅1̅: Вытащил, вставил файл, включил, выключил scripts.cfg. Все.
  24. [2:52 PM]-̅1̅: Вызовов внутри резервированных функций прямых нет, все стандартные функции вынесены на подписку, ты в коде пишешь только "хочу чтобы внутри функции с таким тегом ты выполнил вот это" внутри своего модуля и держишь свои руки подальше от всех резервированных функций).
  25.  
  26. В стандартных функциях - dispatch event.
  27.  
  28. В своем модуле - on event и свой код.
  29.  
  30. Каждый из обработчиков в очереди подписчиков на эвент имеет доступ к общей структуре с ответом и аргументами исходной функции. При выстреле эвента последовательно проигрываются все подписавшиеся функции-обработчики.
  31.  
  32. Можно подписываться на не существующие ивенты и объявлять свои. Аля "weather_effect_start", "weather_effect_end". И в модулях боевки на них моды вешать. Отключил модуль погоды - соответствующих код в боевке просто игнорируется.
  33.  
  34. Те же логи в конце инициализации повесить удаленно на все стандартные функции и записывать результаты централизованно.
  35.  
  36. Короче аля JS Event.
  37. [2:54 PM]-̅1̅: Дебажить-проектировать сложнее, но если разобраться с вопросом производительности можно шарить модули как опциональные моды к серваку и избавится от ебаных листингов в десятков импортируемых и инлайн процедур в каждой стандартной функции.
  38.  
  39. Над только допилить нормально сортировку обработчиков/фильтров и дать возможность пересылать события с сервака на клиент и обратно прозрачно...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement