Important Вопросы по fonline mapper

Дата рег
13 Авг 2017
Сообщения
23
Симпатии
1
я понял почему deletenpc не срабатывал. Я его передавал с @, а это by value (если я правильно понимаю). Выходит, я локальную копию нпц удалял.
 
Дата рег
13 Авг 2017
Сообщения
23
Симпатии
1
жжжжжесть вообще. Короче, оказывается, что:
  1. Диалог менеджер вызывает функции, но всегда передает пользователя референсом, а вот непися, какого-то черта, передает только by value. Самое жуткое, что я не могу в функции принимать непися референсом. У меня байндинг не проходит. Не хочу знать какого черта это было захардкожено в диалогере, но вот что мне щас интересно - это как достучаться до настоящего непися, имея на руках его копию, переданную через @
  2. Диалог менеджер не может в вызываемые функции класть больше одного дополнительного аргумента. Это бред полный, не знаю зачем было так его лимитировать.
  3. Почему-то метод запускаемый с результата должен быть войдовым. Ну не пох ли что он возвращает? Не нравится бул? Игнорь! Жесть какая... Я хотел сделать это одним методом, пришлось расписывать на два.
  4. По ходу, диалог менеджер не может передавать открытые константы. Вот это не работает так, как хотелось бы:
Жесть я устал воевать с этой фигней. Разочарование за разочарованием. Подскажите по пунктам, но так, по ходу, не будет работать. Мне внатуре нужно писать дурацкий цикл поиска реального непися, чтобы получить его. Все, пошло оно все к черту. Буду использовать разные пользовательские переменные для каждой копии робота. И каждой копии по копии диалога. Последний раз когда я писал такой херовый код, мне было 15 лет. И это был VBA, наполовину сгенеренный макросами.
 
Дата рег
4 Авг 2016
Сообщения
162
Симпатии
30
Дата рег
13 Авг 2017
Сообщения
23
Симпатии
1
а по сабжу есть чо сказать? Должны же быть еще какие-то хаки вокруг этого.

Я не владелец сервера, чтобы решать, а под 2238 уже слишком много накодили, чтобы переходить куда-то. СДК с 2013 мало кого интересует в западном мире. ХЗ, соберется ли кто-то мигрировать на свежую сдк, но я так не думаю. Там годы работы для переезда.
 
Дата рег
19 Фев 2011
Сообщения
196
Симпатии
71
жжжжжесть вообще. Короче, оказывается, что:
  1. Диалог менеджер вызывает функции, но всегда передает пользователя референсом, а вот непися, какого-то черта, передает только by value. Самое жуткое, что я не могу в функции принимать непися референсом. У меня байндинг не проходит. Не хочу знать какого черта это было захардкожено в диалогере, но вот что мне щас интересно - это как достучаться до настоящего непися, имея на руках его копию, переданную через @
  2. Диалог менеджер не может в вызываемые функции класть больше одного дополнительного аргумента. Это бред полный, не знаю зачем было так его лимитировать.
  3. Почему-то метод запускаемый с результата должен быть войдовым. Ну не пох ли что он возвращает? Не нравится бул? Игнорь! Жесть какая... Я хотел сделать это одним методом, пришлось расписывать на два.
  4. По ходу, диалог менеджер не может передавать открытые константы. Вот это не работает так, как хотелось бы:
Жесть я устал воевать с этой фигней. Разочарование за разочарованием. Подскажите по пунктам, но так, по ходу, не будет работать. Мне внатуре нужно писать дурацкий цикл поиска реального непися, чтобы получить его. Все, пошло оно все к черту. Буду использовать разные пользовательские переменные для каждой копии робота. И каждой копии по копии диалога. Последний раз когда я писал такой херовый код, мне было 15 лет. И это был VBA, наполовину сгенеренный макросами.
1) Еще раз повторю, у тебя нету в диалоге непися вообще, через ссылку передается ноль, диалог ведется с гексом. Именно поэтому я дал тебе несколько вариантов получения непися.

2) Все он может
Безымянный.png


Отмечаешь нужное количество, в зависимости от количества делаешь функцию соответствующую:

Для результатов:
void r_FuncName(Critter& master, Critter@ slave)
uint r_FuncName(Critter& master, Critter@ slave)
void r_FuncName(Critter& master, Critter@ slave, int val)
uint r_FuncName(Critter& master, Critter@ slave, int val)
void r_FuncName(Critter& master, Critter@ slave, int val0, int val1,)
uint r_FuncName(Critter& master, Critter@ slave, int val0, int val1,)
void r_FuncName(Critter& master, Critter@ slave, int val0, int val1, int val2)
uint r_FuncName(Critter& master, Critter@ slave, int val0, int val1, int val2)
void r_FuncName(Critter& master, Critter@ slave, int val0, int val1, int val2, int val3)
uint r_FuncName(Critter& master, Critter@ slave, int val0, int val1, int val2, int val3)
void r_FuncName(Critter& master, Critter@ slave, int val0, int val1, int val2, int val3, int val4)
uint r_FuncName(Critter& master, Critter@ slave, int val0, int val1, int val2, int val3, int val4)

Для условий:
bool d_FuncName(Critter& master, Critter@ slave)
bool d_FuncName(Critter& master, Critter@ slave, int val)
bool d_FuncName(Critter& master, Critter@ slave, int val0, int val1,)
bool d_FuncName(Critter& master, Critter@ slave, int val0, int val1, int val2)
bool d_FuncName(Critter& master, Critter@ slave, int val0, int val1, int val2, int val3)
bool d_FuncName(Critter& master, Critter@ slave, int val0, int val1, int val2, int val3, int val4)

4) Передает.
 
Дата рег
13 Авг 2017
Сообщения
23
Симпатии
1
1) Я же писал, что я поменял диалог, смотри:



2) По поводу переменных понял, спасибо большое. Я был сбит с толку радиобаттоном. Ожжидал там чекбоксы. Но это не сильно помогает, так как непись с диалога передается не референсом. Я ничего с неписем делать не могу в методе. Но айди же я его получаю, верно? Айди я могу получить с копии непися, а как мне, зная его айди, обратиться к настоящему неписю?
4)Ок, щас перепроверю.
 
Дата рег
19 Фев 2011
Сообщения
196
Симпатии
71
1) Я же писал, что я поменял диалог, смотри:



2) По поводу переменных понял, спасибо большое. Я был сбит с толку радиобаттоном. Ожжидал там чекбоксы. Но это не сильно помогает, так как непись с диалога передается не референсом. Я ничего с неписем делать не могу в методе. Но айди же я его получаю, верно? Айди я могу получить с копии непися, а как мне, зная его айди, обратиться к настоящему неписю?
4)Ок, щас перепроверю.
Оо
Как ты вообще себе это представляешь?
 
Дата рег
13 Авг 2017
Сообщения
23
Симпатии
1
Ок, короче, у меня по этому вектору ничего не получилось. Я верну разговор с хексом, так как с неписем бесполезно говорить. Попробую сделать так, как ты говорил. при взаимодейсвии с неписем, закидывать его айди юзеру в карман. Но потом вопрос как мне к этому неписю обратиться по айди?

В твоем bool _RobotDialog(Critter& me, Critter& whoUse, int skill) перед вызовом диалога ( перед RunDialog ) сохраняй айди робота туда.
Типо:
::GameVar@ varNpcId = ::GetLocalVar( LVAR_TalkNpcId, whoUse.Id );

Так, это дельная идея. Я немного разобрался. Смотри, как я хочу. Могу я так сделать?

Сначала, как ты и писал, я сохраняю айди непися в игроке, пока у нас есть айди этого непися:


Я смотрел другие манипуляции с геймварами, они так поступают, как я понял.

Теперь у нас всегда есть доступ к айди криттера. Вот что мы дальше делаем:



Видишь? Я использую переменную с тем же именем, но теперь уже на стороне непися. Хз, можно ли так делать, но почему бы и нет? во втором методе я обошелся одной переменной вместо двоих. Убого выглядит, но переделывать диаложек уже не хочу.

Это то, о чем ты ранее писал? По моему, это должно сработать. По крайней мере, оно компилится. Пойду проверять.

Так, очень интересно. Затестил на сервере. Диалог запускается, скрипты тоже. Проверки работают, но проблема в том, что они работают так, будто все неписи шарят эту переменную...

Если один непись записал переменную безопасности в себя, то другой непись внезапно ее читает и в нее же пишет. То есть, двоих роботов можно обыскать один раз только. Странно.

Интересно... Станно... Локальные переменные должны вести себя нормально, каждому неписю по отдельному куску памяти... Ну хорошо, а что если я укажу, что у меня функции того. в глобальном пространсве ::

ух блин, не помогает... очень странно. Где же я налажал... Ладно. буду логать переменные. А что еще делать? Ахахах, через 15 минут дебагинга оказалось, что я в локальной переменной поставил максимальное значение 5. И никаких ошибок при попытке впихнуть туда айди непися. ЛООООЛ. В общем, пофиксил, ща гляну.


УРРРРРРРРРРРРРРРААААААААААААА!!!!!!!

ПОЛУЧИЛООООСЬ!!!!

Все, роботы ведут себя как надо, вне зависимости друг от друга и они совершенно не прортив того, чтобы их копировали и вставляли, что на этой карте, что на другой. Им пофиг, они красотулечки.

И так, вывод, который я сделал: нехер гладить сервер против шерсти, он этого не любит.

StaleCracker, спасибо ОГРОМНОЕ за помощь. Я очень многому научился. Сам бы фиг решил.
 
Последнее редактирование:
Дата рег
25 Сен 2011
Сообщения
2
Симпатии
23
Как начать рисовать карты?
Скачал маппер с репозитория, в инструкции сказано что нужно положить его в папку с клиентом. Скачал клиент, положил - выдает ошибку - 'ProjectFiles' not found in config file
 

Вложения

Дата рег
19 Фев 2011
Сообщения
196
Симпатии
71
Для новых ревизий инструкция не всегда актуальна. Ты для кого-то рисовать собрался, или для себя? Если для кого-то, то смысла разбираться в последнем маппере нету, подбирай маппер по рабочей ревизии сервера.
Если для себя, то запасись успокоительным. Нужно качать полностью весь сдк, настроить конфиг файл. И контента там из коробки нету, то есть рисовать ты ничего не сможешь пока не создашь этот контент.
 
Дата рег
25 Сен 2011
Сообщения
2
Симпатии
23
Для новых ревизий инструкция не всегда актуальна. Ты для кого-то рисовать собрался, или для себя? Если для кого-то, то смысла разбираться в последнем маппере нету, подбирай маппер по рабочей ревизии сервера.
Если для себя, то запасись успокоительным. Нужно качать полностью весь сдк, настроить конфиг файл. И контента там из коробки нету, то есть рисовать ты ничего не сможешь пока не создашь этот контент.
Да хотелось бы для себя, с возможностью выкладывать эти карты.
Вроде где то писали что с оригинала контент не подходит - верно?
Я понимаю что вопрос беспощадный, но...как настроить конфиг фаил?
 
Дата рег
19 Фев 2011
Сообщения
196
Симпатии
71
Да хотелось бы для себя, с возможностью выкладывать эти карты.
Вроде где то писали что с оригинала контент не подходит - верно?
Я понимаю что вопрос беспощадный, но...как настроить конфиг фаил?
С оригинала как есть он не запустится, нужно переносить самому.

По конфигу:
#
# [Common]
#
# Window name
WindowName = FOCasual
#
# [Server]
#
# Autostart server
Start = 1
# Modules to work with
ProjectFiles = ../SDK/Modules/Core; Modules/;
# Position of server window
# 0, 0 - center of monitor
PositionX = -1
PositionY = -1
# GUI size modifier
GUISize = 17
# Listening port
Port = 4005
# Admin panel listening port
# 0 to disable
AdminPanelPort = 0
# Sleep time after every game cycle, time in milliseconds
GameSleep = 10
# World saving, time in minutes
WorldSaveTime = 60
# Save management
# 0 - data writing directly to disk, without thread buffering
# 1 - data writing to another thread, than to disk; also automaticly deleting old world saves
WorldSaveManager = 1
# Count of network threads
# If zero than system allows as many concurrently running threads as there are processors in the system
NetWorkThread = 0
# Memory monitoring
# 0 - disable, 1 - simple monitoring, 2 - deepest monitoring, 3 - more deepest monitoring
MemoryDebugLevel = 3
# Logging to file or text box
Logging = True
# Logging to OutputDebugString (Windows) or printf (other platforms)
LoggingDebugOutput = False
# Adding time in milliseconds to log output
LoggingTime = True
# Adding thread name to log output
LoggingThread = False
# Profiler data collection mode
# 0 - disabled, 1 - save to file, 2 - display in server, 3 - both
ProfilerMode = 0
# Interval for call stack sampling, in ms
ProfilerSampleInterval = 50
# Allow or disallow server native calls
# You must provide server binaries only for platform where launched server
AllowServerNativeCalls = False
# Allow or disallow client native calls
# This option disabled due to portability of client on all platforms
# If you enable it then you must to provide client binaries for all supported platforms
AllowClientNativeCalls = True
# Type all supported languages, 0 is default language if matches not found
# Length of all languages must be 4 letter
Language_0 = russ
# Keys for accesses
# Aviable four access mode: client (default on login), tester, moder, admin
Access_client = 000000 00000000
Access_tester =
Access_moder =
Access_admin =
AccessNames_admin =
#
# [Client]
#
# Язык.
Language = russ
# Настройки сервера.
RemoteHost = localhost
RemotePort = 4005
# Настройки сервера обновлений.
# При пустых значениях используются настройки игрового сервера.
UpdateServerHost =
UpdateServerPort =
# Прокси.
# Типы (ProxyType):
# 0 - Нет прокси.
# 1 - Socks4
# 2 - Socks5
# 3 - HTTP
ProxyType = 0
ProxyHost = localhost
ProxyPort = 1080
ProxyUser =
ProxyPass =
# Звуковое давление музыки, звуков.
# От 0 (off) до 100 (max)
MusicVolume = 100
SoundVolume = 100
BaseTexture=20480
# Разрешение окна.
ScreenWidth = 1024
ScreenHeight = 768
# Полноэкранный режим.
FullScreen = False
# Поверх всех окон.
AlwaysOnTop = False
# Фиксированное количество отрисовки кадров в секунду.
# Чем меньше значение, тем меньше загрузка процессора, и наоборот.
# Не учитывается при включенной опции VSync.
# 0 - без ограничения.
FixedFPS = 100
# Вертикальная синхронизация.
VSync = False
# Перенаправление ввода кодов символов.
# Через пробел X Y X Y..., где X код который меняем, Y на который.
# Номера кодов - http://fonline.pastebin.com/Qy3E0qwj
KeyboardRemap =
# Additional parameters for command line:
# -showgui (to see server gui)
# -nologpath (write server log in server folder instead client)
ServerCommandLine =
#
# [InterfaceEditor]
#
# Path to *.fogui files
GuiPath = ./Modules/Client/Gui
# GuiScreens.fos output path
GuiOutputPath = ./Modules/Client
# Path to interface resources
GuiResourcesPath = ./Modules/Data/Resources/Client

В первую очередь обрати внимание на пути ( ключи типо *Path ), и пропиши их.
В ключ ProjectFiles указываются все папки с контентом.

ехе'шники запускаются с передачей этого конфига через аргумент -AddConfig, например можно создать ярлык с параметрами:
D:\FOnline\SDK\Binaries\Mapper\Mapper.exe -AddConfig "D:\FOnline\Casual\FOnline.cfg" -ServerDir "D:\FOnline\Casual\Server" -WorkDir "D:\FOnline\Casual\Client"