Играл 12 лет назад, название квеста не помню, квест не проходился. Сохранились сейвы В последнем помимо папки с опциями такие файлы: Player Мартиника Форт де Франс улицы Player Мэйн Белиз верфь Player Пуэрто-Рико Сан-Хуан Дом Изабеллы Player Тортуга - море Player Эспаньола Порт-о-Принс улицы Player Юкатан - море 1 Player Ямайка выход в джунгли
Последнее действия связаны с Изабеллой. Если нужно могу сейв отослать, только объясните как это сделать, сейв около 7 мегабайт.
P.S.За свою игровую практику прошёл сотни игр, но это была первая игра которую не смог пройти до конца, второй был Сталкер чистое небо.......
ALexusB
Oct 30 2019, 08:46
В ВМЛ была "стройка века" и квеста Изабелла там до конца не было - он только в КВЛ дописан. ТАм вообще много заглушек осталось, т.к. делалось "по аджайл", доставка контента по готовности, но не финального завершения.
ЗЫ и это не баги, чего не сделано вообще - глючить не может
tislic
Oct 30 2019, 19:50
Цитата
квеста Изабелла там до конца не было - он только в КВЛ дописан. ТАм вообще много заглушек осталось, т.к. делалось "по аджайл", доставка контента по готовности, но не финального завершения.
Об этом я и говорил, что можно доделать, немого переосмыслив (переделав), сделав тем самым альтернативную ветвь.
delfin_
Oct 30 2019, 21:36
Цитата(tomclon @ Oct 30 2019, 07:09)
Player Юкатан - море 1
Такого я в вмл не помню...
ALexusB
Nov 1 2019, 17:12
Это какая-то бухта на крайне левом выступе суши (полуострова) на карте. Там же где-то пешкодралом по квесту ЧЖ нужно искать кое кого
delfin_
Nov 2 2019, 03:30
Цитата(ALexusB @ Nov 1 2019, 16:12)
Это какая-то бухта на крайне левом выступе суши (полуострова) на карте.
В ВМЛ суши не было. И полуострова тоже. Там же все острова из ПКМ остались + 2 необитаемых, теркс и кайман. Я все же убежден что вы про КВЛ\ГПК. Ну или я что то упустил, прям что то большое и важное - если в ВМЛ сушу добавили.
Хотя про ВМЛ уже не помню, материк может в посл версиях появился, т.к. карту заменяли она в КВЛ от ВМЛ шла
delfin_
Nov 2 2019, 15:42
Цитата(ALexusB @ Nov 2 2019, 14:19)
Хотя про ВМЛ уже не помню, материк может в посл версиях появился, т.к. карту заменяли она в КВЛ от ВМЛ шла
Такой шедевр и сам автор его забыл. )
Смотрел папку локаций и исландс в открытых скриптах, вроде никаких новых локаций нету.
tislic
Nov 3 2019, 13:45
Цитата
Такой шедевр и сам автор его забыл.
За столько лет и я забыл, что там было
cleverboy
Nov 24 2019, 17:16
Запускаю аддон на windows 10. Работает только быстрое сохранение-загрузка. Когда пытаюсь сохранить или загрузить обычным способом - выбираю слот сохранения жму загрузить или сохранить ничего не происходит. А на одном сейве далеко не уедешь. До этого играл на 7-ке проблем не было
delfin_
Nov 24 2019, 19:56
Ничего не происходит, имеете в виду кнопка не нажимается? Пробуйте переключится в полноэкранном режиме - должно помочь.
cleverboy
Nov 25 2019, 18:15
Цитата(delfin_ @ Nov 24 2019, 20:56)
Ничего не происходит, имеете в виду кнопка не нажимается? Пробуйте переключится в полноэкранном режиме - должно помочь.
Пробовал и в полноэкранном и в оконном режиме. Анимация нажатия на кнопку есть. Звук тоже есть. Однако действия (сохранение-загрузка) не происходит
delfin_
Nov 25 2019, 23:05
Вот мои настройки engine.ini Один из параметров на это влияет, по пробуйте скопировать эти настройки или по играться с ними, только разрешение под свой монитор измените.
В теме про ПКМ были какие-то .ДЛЛ на которых нет тормозов и проблем в выборе С/Л и моталках. У ВМЛ проблемы те же, что у ПКМ (аддон же), должно помочь. Просьба собрать эти файлы, что помогут и написать сводный рецепт для лечения.
cleverboy
Nov 26 2019, 21:59
Цитата(ALexusB @ Nov 26 2019, 11:23)
В теме про ПКМ были какие-то .ДЛЛ на которых нет тормозов и проблем в выборе С/Л и моталках. У ВМЛ проблемы те же, что у ПКМ (аддон же), должно помочь. Просьба собрать эти файлы, что помогут и написать сводный рецепт для лечения.
Обнаружил что это все таки тормоза. Если выделить кнопку и зажать Enter на клавиатуре секунд через 5-7 действие все же происходит. Покопался на форуме Нашел это: "как убрать тормоза на вин8 и вин10 в интерфейсах, где прокрутка списка http://www.seaward.ru/forum/index.php?s=&a...st&p=346807 Поставить ENB и поправить строку в .ini" Распаковал содержимое архива ENB в корень игры. Заменил engine.ini на файл из 3-го архива. Ситуация не поменялась. Посмотрел файлы и увидел что в enbconvertor.ini в прописано "ProxyLibrary=d3d9.dll" Хотя в самом архиве лежала d3d8.dll. Поменял в этом файле на d3d8.dll. Все равно ничего не меняется. Но есть еще кое что. Там же постом ниже у вас написано "в игре идет зеленая надпись, что грузится мод." Я помню что в Skyrim при установленном ENB при запуске игры появлялась надпись о его загрузке. Здесь ничего подобного у меня не отобразилось. Еще попробовал закинуть d3d9.dll и ENB Generic. С тем же результатом
delfin_
Nov 27 2019, 20:00
Нда, очень странно. Раньше еще от версии драйвера зависело, на какой то древнем драйвере от нвидия все работало отлично, но это очень давно было. У меня тоже были эти проблемы, вылечилось правкой engine.ini и полноэкранном режимом. В оконном режиме - тоже есть тормоза. Однако я не ставил никакие енб и прочие доп. файлы, все стандартное.
Смерч
Dec 12 2019, 15:11
Блин.... давно не играл, решил поиграть на ноуте с 10 виндой... ставлю ПКМ, потом аддон, все как надо, жму запустить, запускается игра...ура... далее начать игру, вступительный диалог в таверне, настройка перснажа и.... экран загрузки перед каютой капитана и вылет на рабочий стол без ошибок просто вылет... и переустанавливал несколько раз, и в режиме совместимости со всеми виндовс пробовал... итог один, вылет перед каютой капитана.... даже нашел старый сейв и при его загрузке тоже вылет(( может что еще посоветуете сделать?
ALexusB
Dec 12 2019, 17:54
см. тему голого ПКМ без ВМЛ. Добейся игры ПКМ без аддона - скорее всего тоже может быть вылет.
ALexusB
Dec 12 2019, 20:48
Итак, проверил у себя на Вин10 Запускается, не вылетает, но играть невозможно - тормозит жутко, как и ПКМ. Поэтому нужно - взять из архива http://www.seaward.ru/forum/index.php?s=&a...st&p=349698 ENGINE.EXE и \D3D8-to-D3D9\D3D8.DLL И поместить в корень игры И все заработало, тормозов в интерфейсе тоже нет, скорость бега норм.
Работает на открытых скриптах ВМЛ, на закрытых не будет, в ЕХЕ не прописала ДЛЛ.
сделал так на текущей версии, без переустановки заново, плюс поставил с++ из папки с файлом dll, все заработало... Спасибо за помощь)
Denis
Jan 25 2020, 22:46
Ставлю Аддон на ПКМ. При установку получаю ошибку при распаковке data1.slb. Win 7x64 Может проблема, что у меня сборка ПКМ 1.03? Блин, забыл уже как это делать.
ALexusB
Jan 25 2020, 23:46
Что за ошибка? При запуске?
Где-то недавно писал как на ПКМ ставить мод_в6 + ехе от 1.03 где нет тормозов (залочено 60 фпс)
ВМЛ нужно стаивть так же, но строго с открытыми скриптами поверх
Итак. Есть ПКМ (неважно что за сборка) Если 1.0,то там с папками не то, нужно батних запускать, чтоб звуки были
Ставим аддон ВМЛ с ресурсами, и прочим В составе будет exe и dll закрытых скриптов. По идее оно должно работать, но тормозить Хотя на Вин10 может уже и не запустится...
Поверх этого ставим открытые скрипты ВМЛ Далее поверх ставим ехе от патча 1.03, он отучит от .dll запаковки.
Denis
Jan 26 2020, 14:36
Цитата(ALexusB @ Jan 26 2020, 00:46)
Что за ошибка? При запуске?
Где-то недавно писал как на ПКМ ставить мод_в6 + ехе от 1.03 где нет тормозов (залочено 60 фпс)
ВМЛ нужно стаивть так же, но строго с открытыми скриптами поверх
Как раз говорю о проблеме установки ВМЛ. При запуске сетап-адон (всё в одной папке) указываю путь к ПКМ и аддон устанавливается с ошибками. А что можно ставить открытый ВМЛ вместо того, что ставился раньше?
ALexusB
Jan 26 2020, 14:55
Нет. В открытом только скрипты, нет ресурсов Если ставится с ошибками, то может распакован криво. Битый архив, перекачай. Или в ПКМ 1.03 нет чего-то, что нужно копировать и текстуры подменять.
В те годы, Инет был по карточкам и телефону... и размер имел значения. Я в архиве не давал модели, что можно было откопировать, давал только текстуры и менял названия по байтам вроде в бинарном файле. Не помню. Сча проще скачать в сборе уже, но там папка была несколько гигов после распаковки, а не до сотни мег.
дата.слиб - это скрипты, это лечится скриптами открытыми поверх, не критично.
Denis
Jan 26 2020, 15:14
Цитата(ALexusB @ Jan 26 2020, 15:55)
Сча проще скачать в сборе уже, но там папка была несколько гигов после распаковки, а не до сотни мег. дата.слиб - это скрипты, это лечится скриптами открытыми поверх, не критично.
У меня тогда ставился аддон на лицензию. Сейчас имею нечто выкачанное с инета версии 1.03. ПКМ рабочий. но видимо чего то там нет. Вопрос на банн: рабочая сборка есть? Пара десятков ГИГ сейчас не проблема.
ALexusB
Jan 26 2020, 20:02
Где-то есть, наверное, искать нужно Когда-то видел, но не качал. Как вариант брать сборку пкм другую. По понятным причинам ссылки не дам, а у мя на локале есть сборка та самая с обростом до ВМЛ и бережного хранения с 2003г, не тер, не переставлял Запускается до сих пор, но на .ехе от 1.03 или с фиксом на 60фпс, иначе на вин10 было не играбельно
BUKA_E}l{EBUKA
Jul 20 2020, 19:33
Добрый день! Несколько технических вопросов:
1. Азартные игры. Хочется ускорить процесс. Как уменьшить длительность анимаций раскладывания карт и движения кубка с костями?
2. Ускорение времени. Повысить лимит в море от 3го лица и на суше с 15х/20х до 30х/50х (можно и меньше, если эти значения технически невозможны). В идеале еще бы поменять значения для нажатой/удерживаемой кнопки T.
3. Трупы. Реально ли чтобы после сбора всех вещей с трупа, этот труп исчезал? Опционально - возможно ли сделать чтобы изначально пустые (без вещей) трупы исчезали сразу либо быстрее их непустых товарищей?
Полагаю, для этого надо лезть в код. Я хоть и не программист, но технически подкована, умею в Batch и Papyrus (скриптовый язык Скайрима), ковыряла mesh'и в Nifscope и анимации в Blender. Буду рада любой помощи, инструкциям и информации!
Преамбула: В детстве смотрела как папа играет в Корсаров 2, понравилось, сама прошла пару раз. И вот, спустя 13 лет, оказалась в другой стране, имея из технических мощностей только пожилой ноут и кучу времени. Решила тряхнуть стариной, отрыла Пиратов. Пока ставились, нашла инфу что на них существуют моды (а я к моддингу неровно дышу еще со времен Обливиона). Так и вышла на ВМЛ. Суперская вещь! Мой поклон авторам. Для полного счастья только пару вещиц подправить не хватает. И вот я здесь
ALexusB
Jul 20 2020, 19:47
>>Полагаю, для этого надо лезть в код. Да, все три вещи можно сделать в коде.
1. На карты там не время задается, а скорость в пикселях, нужно больше пикселей поставить, подобрать опытно (в х2-х3 увеличить) Сами карты папки Интерфейсов что-то там игра в карты
2. Это просто. В seadogs.c найти по коду место по имени TimeScaleCounter типа if (TimeScaleCounter > 36) TimeScaleCounter = 36; и поставить сколько нужно
3. Трупы в методе LAi_Character_Dead_Process файла LAi_events.c Для пустых логику нужно писать дополнительно, а так мод исчезания настраивается _mod_on_off.h // Killed body clear #define MOD_DEAD_CLEAR "On" #define MOD_DEAD_CLEAR_TIME 100 // in sec.
BUKA_E}l{EBUKA
Jul 21 2020, 20:28
Благодаря вашим наводкам, я почти закончила с 1. и 2. Удивительно, как хорошо вы помните содержимое файлов и даже отдельные куски кода спустя столько времени!
Однако, в процессе финальных тестов внезапно вылезли проблемы. Сперва я получила краш при запуске, потом сообщение о сбросе конфига. Подозреваю, что сейву на одной версии не очень нравятся манипуляции с заменой части файлов на другую версию. Посему хочу уточнить:
1. Что есть stormex2.dll? Запакованная PROGRAM? Но в версии с исходниками этот файл тоже присутствует.
2. Можно ли как-то вытащить (распаковать?) PROGRAM установленного ВМЛ (актуальной версии пака 0124)?
2.5 Если нет, то как подключить отдельные файлы (seadogs.c например), не распаковывая в каталог игры все исходники (в т.ч. не заменяя stormex2.dll)? Чтобы игра как и прежде пользовалась родными (запакованными) файлами, но еще подгружала отдельные внешние (которые я правила)?
3. Будет ли работать сейв если переустановить игру, ВМЛ, и выставив все настройки как было до этого (каждое изменение дефолта - записывала)? Ибо конфиг я не бэкапила (даже не знаю где он хранится), а прогресс терять очень жалко (сложность Командор, 50 часов в игре).
P.S. на всякий: ПКМ 1.01, лицензия, Российской версии (program не распакована). ВМЛ 0124, только дистрибутив, без доп. ресурсов. Сорцы: на время тестов закинула только PROGRAM и stormex2.dll, RESOURCE пока не стала. Мб в этом причина?
В исходниках версия новее, там какие-то моды, но совместимость может быть (а может и не быть - с гарантий новая игра нужна).
BUKA_E}l{EBUKA
Jul 23 2020, 00:27
Да, я как раз по этой ссылке брала! Новая игра нужна, вы правы. Закончу тесты и переставлю все с нуля. Эти исходники вообще предназначены для игры? Может они для энтузиастов и модостроителей, а я тут их накатила, правлю и играть на них планирую
По поводу 3., вещей на трупах: Есть мыслишки, но я так и не разобралась полностью. Вот кусок кода из LAi_events.c (строки 370-381):
Код
void LAi_Character_Dead_Process(aref chr) { DialogExit(); LAi_CharacterLogoff(chr); if(sti(chr.index) != GetMainCharacterIndex()) { //Подождём, а затем удалим персонажа // boal трупы не убирать if (MOD_DEAD_CLEAR == "On" && !CheckAttribute(chr, "DontClearDead")) { PostEvent("LAi_event_Character_Dead", MOD_DEAD_CLEAR_TIME * 1000, "i", chr); }
Если выставить 30 вместо 1000, трупы исчезают сразу. Но как оставить только те что со шмотом? Вижу два варианта: проверка на "у трупа нет вещей" или на "у трупа есть вещи". //*не уверена как обыск реализован, возможно надо проверять не "наличие вещей в принципе" а "наличие вещей, которые видно в инвентаре при обыске"*// Как считаете, это сработает? Выглядеть будет так:
if (MOD_DEAD_CLEAR == "On" && !CheckAttribute(chr, "DontClearDead")) if есть вещи { PostEvent("LAi_event_Character_Dead", MOD_DEAD_CLEAR_TIME * 1000, "i", chr); }else{ PostEvent("LAi_event_Character_Dead", MOD_DEAD_CLEAR_TIME * 30, "i", chr); } //Реинкарнируем
Однако, я так и не разобралась в механизме раздачи вещей и не нашла примеров где подобная проверка реализована. Есть идеи?
P.S. В процессе чтения ченджлогов обнаружилось, что в детстве у меня были Корсары с вашим модом. С классными штуками вроде "всегда бежать" и табличкой "кто плывет". Флэшбек: Смотрела как у папы (который был тем еще казуалом, хе-хе) офицеры бегут суицидиться о толпу бандитов и сама потом долго не брала этих болванчиков в пешие приключения. А потом обнаружила, что им можно скомандовать "Стой здесь" Это был геймченджер!
Возможно, именно благодаря вам я сейчас вернулась в Корсары, а не какие-нибудь Герои 3. Спасибо!
ALexusB
Jul 23 2020, 08:49
Спасибо! и Пожалуйста!
Скрипты играбельные.
Код нужно делать if (!CheckAttribute(chr, "DontClearDead")) { PostEvent("LAi_event_Character_Dead", MOD_DEAD_CLEAR_TIME * 1000, "i", chr); }
Цель же не убирать трупы с вещами? Или убирать их уже после обыска, а не просто дать им время полежать и растаять чуть дольше.
Нужно найти место,где в трупы вещи пихаются и дать им флаг DontClearDead
Потом в интерфейсе обыска трупа на выходе удалить атрибут DontClearDead и вызвать PostEvent("LAi_event_Character_Dead", 1000, "i", chr); Тогда он начнет таять через секунду прям на глазах.
За обыск отвечает процедура Dead_OpenBoxProcedure, она вызывает INTERFACE_ITEMSBOX там по тегу "666" определяется, что это был труп Но вызвать для простоты стиралку можно сразу в Dead_LaunchCharacterItemChange Просто время дать не 1с, а 10сек, пока идет обыск уже начнет таять
Заполнение вещами идет в Dead_AddLoginedCharacter там цикл for (j= ItemDeadStartCount; j<ITEMS_QUANTITY; j++) вот после него нужно ставить chref.DontClearDead = true;
Нужно освоить поиск текста по папке Программ. Я использовал ТоталКомандер, Alt-F7 И плугин текстового редактора. Можно Нотпад++ Вообще все это находится по русс слову труп, далее уже кусками кода под комментариями.
BUKA_E}l{EBUKA
Jul 24 2020, 21:38
Не справилась еще на первой стадии Засунула после блока с циклом. Трупы продолжают исчезать
Код
for (j= ItemDeadStartCount; j<ITEMS_QUANTITY; j++) // нужно оптимизировать!!! 137 - это много начало с опред места { if (howI >= (11 - MOD_SKILL_ENEMY_RATE)) { break; } makeref(itm,Items[j]); if (CheckAttribute(itm, name)) { makearef(typeRef, itm.(name)); //attrName = name+".rare"; if (!CheckAttribute(typeRef, "rare") && MOD_BETTATESTMODE == "On") Log_Info("Error: Не найдет RARE для предмета = "+itm.id + " тип = " + name);
if ( rand(1000) < (((stf(typeRef.rare) + stf(typeRef.rare)*nLuck / 20.0) / makefloat(MOD_SKILL_ENEMY_RATE))*930.0)) { value = sti(typeRef.min); value = value+rand(sti(typeRef.max) - value); itemID = itm.id; chref.items.(itemID) = value; howI++; } } } chref.DontClearDead = true; //+++++НОВЫЙ КОД ЗДЕСЬ+++++ } // заполнили по списку } Dead_Characters[Dead_Char_num].px = x; Dead_Characters[Dead_Char_num].pz = z; Dead_Char_num++; } }
Но если изменить chref на chr то все работает, я правда не знаю что такое "chr". UPD: Уточню, что тестила в т.ч. и на новой игре. Не сработало. А вот chr работал и на сейве.
>>Потом в интерфейсе обыска трупа на выходе удалить атрибут DontClearDead и вызвать Так?
Код
void Dead_OpenBoxProcedure() { ref chr = GetMainCharacter(); int dchr_index; ref deadCh; dchr_index = Dead_FindCloseBody(); if (dchr_index == -1) return;
deadCh = &Dead_Characters[dchr_index];
Dead_LaunchCharacterItemChange(deadCh); //+++++НОВЫЙ КОД ЗДЕСЬ+++++ DeleteAttribute(deadCh, "DontClearDead"); PostEvent("LAi_event_Character_Dead", 1000, "i", chr); //+++++НОВЫЙ КОД ЗДЕСЬ+++++ }
P.S. Я пыталась разобраться, но постоянно спотыкаюсь о непонимание самих основ. Без знания Плюсов (или схожих полноценных языков) это как пытаться оперировать формулами квантовой теории поля, имея в багаже знаний лишь учебник физики за 6й класс. На эти трупы уже суммарно потратила около 30 часов. Так и некрофилкой стать недолго
P.S.S. Поиском по папке пользуюсь конечно, даже RegEx щущуть применяю. Освоить N++ и TC пришлось давным давно, стандартные средства винды слишком убоги. Гуглом тоже, в основном в виде "запрос site:seaward.ru OR site:piratesahoy.net OR site:corsairs-harbour.ru" А страницы википедии и прочие мануалы про С и С++ скоро на сетчатке отпечатаются.
ALexusB
Jul 25 2020, 10:51
Если эксперимент с chr.DontClearDead = true; //+++++НОВЫЙ КОД ЗДЕСЬ+++++ и chref.DontClearDead = true; //+++++НОВЫЙ КОД ЗДЕСЬ+++++ позитивный, то и с //+++++НОВЫЙ КОД ЗДЕСЬ+++++ DeleteAttribute(deadCh, "DontClearDead"); PostEvent("LAi_event_Character_Dead", 1000, "i", chr); //+++++НОВЫЙ КОД ЗДЕСЬ+++++ chr и deadCh нужно Но одинаково в двух строках Это сами НПС, но там один фэйковый, в котором вещи, а другой моделька, который валяется. Как правильно надо опытно подобрать.
Ну и в исходном убивании if (!CheckAttribute(chr, "DontClearDead")) { PostEvent("LAi_event_Character_Dead", MOD_DEAD_CLEAR_TIME * 1000, "i", chr); } А не код, после проб, когда они сразу пропадали.
BUKA_E}l{EBUKA
Jul 25 2020, 16:12
Проблема в том, что в этой конкретной функции:
Код
void Dead_OpenBoxProcedure() { ref chr = GetMainCharacter(); int dchr_index; ref deadCh; dchr_index = Dead_FindCloseBody(); if (dchr_index == -1) return;
deadCh = &Dead_Characters[dchr_index];
Dead_LaunchCharacterItemChange(deadCh); }
chr это ГГ: "ref chr = GetMainCharacter();" И "PostEvent("LAi_event_Character_Dead", 1000, "i", chr);" удаляет ГГ. А "PostEvent("LAi_event_Character_Dead", 1000, "i", deadCh);" не имеет эффекта вообще
Если ивент "LAi_event_Character_Dead" все равно не проверяет наличие "DontClearDead" аттрибута? Мы же напрямую соообщаем что нам надо убрать этого товарища. Минуя "LAi_Character_Dead_Process"
ALexusB
Jul 25 2020, 16:25
Тогда надо получить нужного НПС Там где chref.DontClearDead = true; //+++++НОВЫЙ КОД ЗДЕСЬ+++++
Нужно chr.DontClearDead = true; //это реальная модель chref.ToClearDeadIdx = chr.index;
Возможно нужно не Characters[] брать, а другой массив, т.к. в бою могут быть фантомные НПС, но я уже не помню, они в этом же массиве были (с другого номера) или в каком-то своем
BUKA_E}l{EBUKA
Jul 25 2020, 17:06
Не робит Давайте бросим это дело. Я уже и так потратила много вашего времени, и в 50 раз больше - своего. Оно того не стоит. Честно говоря, я ожидала что все будет гораздо проще, вроде проверки на наличие вещей у трупов. А тут актор при смерти разделяется на коробку и фантомное тело. Массивы, индексы, ссылки. Чтоб понять че происходит надо изучить хотя бы базовый курс плюсов.
UPD (2 hours later): Еще немного поковырялась и половину задачи таки сделала! Возвращаемся к ванильному состоянию кода. Добавляем одну единственную строку:
Код
{ ref chr = GetMainCharacter(); int dchr_index; ref deadCh; dchr_index = Dead_FindCloseBody(); if (dchr_index == -1) return;
deadCh = &Dead_Characters[dchr_index];
Dead_LaunchCharacterItemChange(deadCh); Dead_DelLoginedCharacter(deadCh); //вот эту }
Теперь после выхода из инвентаря трупа возможность повторного обыска исчезает. Значит, deadCh - это коробка. Как найти и убрать соответствующий ей труп, я не представляю. Ну и по идее функция едет танком по все обысканным трупам, даже не предназначенным к удалению, что не очень приятно.
BUKA_E}l{EBUKA
Jul 27 2020, 07:55
Чем отличается ref от aref? Нет, пояснения "ref - ссылка на объект, aref - ссылка на атрибут объекта (или ссылки на объект)" я видела. Но все же
Например DumpAttributes(ref(object)). То есть, дампает атрибуты ссылки на объект. И тем не менее, второе же упоминание (при поиске по папке) использования DumpAttributes (boal_debug2.c , строка 285), выглядит как: DumpAttributes(rootItems); хотя rootItems это aref
Или вышеупомянутая Dead_DelLoginedCharacter у меня в коде. У самой функции "void Dead_DelLoginedCharacter" (LAi_utils.c , страница 856) параметры "(aref chr)". Но она вполне себе имеет эффект при скармливании ей deadCh, который ref
ALexusB
Jul 27 2020, 08:39
Не помню Но из описания - ref - только для большого (элемент массива целиком). aref - для всего остального - для ветки внутри дерева структуры персонажа. Может быть как корнем, так и куском поддерева.
BUKA_E}l{EBUKA
Jul 27 2020, 09:09
Многие функции имеют вид "SomeFunction(aref chr)". То есть, они ждут ссылку на атрибут этого "chr". Но почти всегда они вызываются в виде "SomeFunction(chr)". И я до сих пор не могу в этом разобраться.
chr является ссылкой на атрибут самого себя? Что есть chr? Откуда он берется? В большинстве случаев он не декларирован там, где вызывается "SomeFunction(chr)".
Фигня какая-то. Будто я попала в рекурсию где я попала в рекурсию. Так и становятся алкоголиками
ALexusB
Jul 27 2020, 11:37
SomeFunction(chr) нужно смотреть вызов, там выше есть получение чара из массива чаров, или метод поиска, либо это какое-то прерывание ядра и там переменная возвращается обратно. В своих методах правильно делать по аналогии, смотреть примеры и копипастить себе. Разница в http://www.seaward.ru/forum/index.php?s=&a...st&p=350422
Нужно понять, что такое вообще структура чара - это дерево, там в ветках на ГГ все квесты живут, сложные структуры, в которых и таблицы хранятся (те же цены). Вот эти ветки - это атрибуты.
BUKA_E}l{EBUKA
Jul 27 2020, 12:35
Буду бороздить синие просторы, постоянно ощущая в своих зарослях посторонние предметы, сомнительных личностей и всякую живность. Не об этом я мечтала, становясь пиратом. Зато реалистично
Про прерывание ядра поподробнее, записываю! Что за штука, как выглядит?
ALexusB
Jul 27 2020, 13:22
PostEvent("LAi_event_Character_Dead", MOD_DEAD_CLEAR_TIME * 1000, "i", chr); Это прерывание из скриптов в ядро. А есть получатели обратные, когда их ядро порождает само. Типа SetEventHandler("Control Activation","proc_break_video",0); Это слушатель, а сработает оно, когда реально произойдет.
За счет этого реализуется многопоточность, т.к. в игре крутится вечный цикл событий, и они срабатывают по запросу. Например, моделька корабля вошла в коллизию с берегом - будет урон.
Понять (и думать) этим - это цела философия. В игре в скриптах это сделано "как везде". Например, в Юнити это тоже так, но там задаются прерывания через интерфейс (свойства).
BUKA_E}l{EBUKA
Jul 28 2020, 12:11
PostEvent("LAi_event_Character_Dead", MOD_DEAD_CLEAR_TIME * 1000, "i", chr); передает параметр "chr" ивенту LAi_Character_Dead_Event() Который, в свою очередь, получает значение параметра "chr" с помощью "aref chr = GetEventData();"
А как я могу увидеть это значение? Наверняка есть команда которая позволить записать его в какой-нибудь лог. Что-нибудь вроде:
Код
void LAi_Character_Dead_Event() { aref chr = GetEventData(); Log_Info("chr = " +chr+); //только это не работает
ALexusB
Jul 28 2020, 12:35
Структуру в лог не вывести, это не строка - это ближе к XML структуре или дереву. Смотреть можно по конкретным атрибутам, так квесты и тестятся с выводом в лог или функции F11 дебуга Я где-то там что-то такое выводил в текстовое окно см файл boal_debug2.c и там string descF2 = "Показать инфу о параметре"; вот там дерево и выводится
Но pchar структура она глубже 3х уровней, там по 10 слоев в квестах может быть.
BUKA_E}l{EBUKA
Jul 28 2020, 22:09
Каким макаром можно сохранить значение "chr" чтобы передать его позже? Пока происходит так:
...[chr появился где-то в движке]... || ...[передается дальше по цепочке]... || void LAi_CheckKillCharacter(aref chr) Dead_AddLoginedCharacter(chr) // это тело, которое мы видим LAi_Character_Dead_Process(chr) // это коробка, которую мы сможем шмонать || --------------------------- \\ void Dead_AddLoginedCharacter(aref chr)void LAi_Character_Dead_Process(aref chr) Dead_Char_num //этот номер идет дальше тут запускается LAi_event_Character_Dead, на этом цепочка прерывается, который с помощью "#event_handler" "chr" дальше не передается запускает. . . || ----------------------------- || int Dead_FindCloseBody()void LAi_Character_Dead_Event() Dead_Char_num преобразуется в dchr_index, Dead_DelLoginedCharacter(chr) - стираем коробку который передастся в Dead_OpenBoxProcedure CharacterExitFromLocation(chr) - стираем тело || ----------------------------- || void Dead_OpenBoxProcedure()void Dead_DelLoginedCharacter(aref chr) открываем коробку "chr" дальше не передается || void Dead_LaunchCharacterItemChange(ref chref) интерфейс коробки
То есть, на момент взаимодействия с коробкой мы не можем воспользоваться "chr" для стирания тела - он пал смертью храбрых задолго до этого. Единственный способ, которым я придумала получить тот самый "chr": захватить через "PostEvent" получить через "aref chr = GetEventData()"
Но я допускаю, что оно уже не сработает, т.к. этот чар с моделькой связан не будет и событие удалить труп на нем не заработает. Я не помню какой массив за НПС в локации отвечает, там какие-то фантомы были - может в нем нужно смотреть.
BUKA_E}l{EBUKA
Jul 29 2020, 19:06
Цитата
chr - это переменная, ссылка на массив.
Нельзя ли получить из этой переменной другие данные? Название массива, номер объекта на который ссылается переменная?
Может, я запуталась в терминологии, но любой массив (array) в PotC это ведь object? В С++ массивы имеют вид things[n], здесь в виде "object things[n]"
ALexusB
Jul 29 2020, 21:53
массив может и инт быть и стринг. Объект - это структура такая прикольная, древовидная, см методы и файлы иниты всего.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.