SHARE
TWEET

Untitled

a guest Apr 19th, 2019 85 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. Над только допилить нормально сортировку обработчиков/фильтров и дать возможность пересылать события с сервака на клиент и обратно прозрачно...
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top