Для программистов, вопросы по скриптам ПКМ |
Здравствуйте, гость ( Вход | Регистрация )
Для программистов, вопросы по скриптам ПКМ |
igor_pol |
Aug 24 2005, 21:00
Сообщение
#1
|
боцман Группа: форумчанин Сообщений: 140 Регистрация: 3-December 04 Пользователь №: 169 |
Первое что я хотел написать "АДМИНЫ!!!!" НЕ ЗВЕРЕЙТЕ ЗА "НЕНУЖНУЮ ТЕМУ"
************************************************** на вопрос зачем создал эту тему отвечу так "Я например НЕ ПРОСТО ЮЗВЕРЬ А КОЕ ЧТО И САМ НАПИСАТЬ МОГУ. И хотел бы чтобы на форуме была тема для тех кто сам хочет что-то добавить в игру. На сайте аддона Алекс вікинул ссылку на описание скриптов ПКМ на английском. Я хотел бы узнать где можно нарыть больше инфы по этом скриптам. И кстати на каком языке они пишуться. Если кто-то знает ----- пишите. И вообще всем програмерам на форуме нужна своя тема. так что ГОСПОДА ПРОГРАМЕРЫ ВАЛИТЕ СЮДА !!!! Может из этого что небудь интересное выйдет!!!!!!(Если тему не УТРУТ) Жду сообщений (может у когот есть идеи на эту тему ) Сообщение отредактировал Догева - Apr 24 2006, 13:36 |
Thorgal |
Feb 1 2020, 15:51
Сообщение
#601
|
капер Группа: форумчанин Сообщений: 819 Регистрация: 13-December 05 Из: Москва Пользователь №: 1,667 |
Как разлочить персонажа в диалоге? После срабатывания скрипта на таймер умолк, хотя должен говорить. Хотя бы стандартный диалог "- Чего изволите? - Ничего, просто так зашел" должен активировать. Третий день копаюсь, ничего не выходит. Не понимаю...
|
ALexusB |
Feb 1 2020, 16:24
Сообщение
#602
|
Разработчик ВМЛ-КВЛ Группа: Admin Сообщений: 16,240 Регистрация: 2-November 04 Пользователь №: 3 |
это типичный баг
нпс остается актером по квесту куда-то шел или анимацию крутил надо вернуть состояние по коду не помню уже, см. примеры в др местах по квестам Еще может быть когда не сработал нормальный выход из диалога НПС залочится без реплики case "exit": Diag.CurrentNode = Diag.TempNode; NPChar.quest.meeting = NPC_Meeting; DialogExit(); break; |
Thorgal |
Feb 2 2020, 13:04
Сообщение
#603
|
капер Группа: форумчанин Сообщений: 819 Регистрация: 13-December 05 Из: Москва Пользователь №: 1,667 |
это типичный баг нпс остается актером по квесту куда-то шел или анимацию крутил надо вернуть состояние по коду не помню уже, см. примеры в др местах по квестам Еще может быть когда не сработал нормальный выход из диалога НПС залочится без реплики case "exit": Diag.CurrentNode = Diag.TempNode; NPChar.quest.meeting = NPC_Meeting; DialogExit(); break; Спасибо, но пока все равно ничего не выходит. При попытке оперировать данным блоком в файле квеста игра перестает обращаться к файлу в целом. Короче, все сложно... Пытаюсь найти в файлах, как вернуть состояние нпсчару. По поиску не нашел. Ищу вручную. |
Thorgal |
Feb 2 2020, 23:10
Сообщение
#604
|
капер Группа: форумчанин Сообщений: 819 Регистрация: 13-December 05 Из: Москва Пользователь №: 1,667 |
Убрал автоматическое продление диалога НПС, после вставленной картинки и стало еще интереснее. Виснуть НПС перестал, но диалог закольцевался с определенной реплики... Все страньше и страньше... По любому на следующую стадию и на дежурную реплику диалог не переходит.
|
ALexusB |
Feb 3 2020, 08:48
Сообщение
#605
|
Разработчик ВМЛ-КВЛ Группа: Admin Сообщений: 16,240 Регистрация: 2-November 04 Пользователь №: 3 |
См. другие диалоги, где все ок.
Внимание на Diag.CurrentNode и штатный выход DialogExit(); |
Thorgal |
Feb 3 2020, 11:32
Сообщение
#606
|
капер Группа: форумчанин Сообщений: 819 Регистрация: 13-December 05 Из: Москва Пользователь №: 1,667 |
См. другие диалоги, где все ок. Внимание на Diag.CurrentNode и штатный выход DialogExit(); Самое смешное, что я эту пикчу в диалоги вставлял уже несколько раз и после нее все было ок. Судя по тому, что я как-то добрался до финала квеста. Но тут просто какое-то заколдованное место. Что-то она там нарушает, но что, понять не могу. Все в точности, как раньше. Все строчки кода те же самые. Штатный выход срабатывает. Просто после него либо НПС лочится, либо диалог зацикливается... Мне уже плевать на сборку которую я клепал 3 месяца. Все равно, для собственного удовольствия времени не жалко. Но тут уже дело принципа. Либо я добью этот код, либо он меня... |
ALexusB |
Feb 3 2020, 11:56
Сообщение
#607
|
Разработчик ВМЛ-КВЛ Группа: Admin Сообщений: 16,240 Регистрация: 2-November 04 Пользователь №: 3 |
Еще не понятно о чем мы говорим - это мсто в НПС переигрывается или НПС уже залочен и нужно разлочить?
Т.к. все парвки диалога работают только в новом диалоге (С\Л до поломки и говорим заново). Если же уже НПС заклинили, то надо переигрывать это место Ну или писать чит, на получить pchar , присвоить ему нужную ветку диалога и тип горожанина задать, это сними его залоченность Я там тестил линейки квеста с середины, когда переигрывть долго и можно сразу начать с нужного этапа. |
Thorgal |
Feb 4 2020, 11:24
Сообщение
#608
|
капер Группа: форумчанин Сообщений: 819 Регистрация: 13-December 05 Из: Москва Пользователь №: 1,667 |
Еще не понятно о чем мы говорим - это мсто в НПС переигрывается или НПС уже залочен и нужно разлочить? Т.к. все парвки диалога работают только в новом диалоге (С\Л до поломки и говорим заново). Если же уже НПС заклинили, то надо переигрывать это место Ну или писать чит, на получить pchar , присвоить ему нужную ветку диалога и тип горожанина задать, это сними его залоченность Я там тестил линейки квеста с середины, когда переигрывть долго и можно сразу начать с нужного этапа. Я беру сейв ДО бага. Только так, иначе смысла нет. Вставил в диалог пикчу. Пробовал два варианта кода. В одном НПС после пикчи сам автоматически продолжает диалог, после которого идет блок с переходом на следующий этап квеста (включение таймера на месяц + репа). После этого НПС оказывается наглухо залочен. Хотя должен отвечать хотя бы на стандартное обращение. После истечения срока таймера все так же залочен. Второй вариант - НПС после пикчи активирует продолжение далога по клику мыши. Тут другая засада. Диалог, после перехода на следующий этап квеста и отработки таймера, закольцовывается и можно бесконечно проходить этап включения таймера с соответствующей записью в журнал, откатываться к продолженияю диалога сразу после пикчи и снова по кругу... Убрав пикчу получаем чистый диалог, переход на следующий этап квеста без малейших багов. Блок с пикчей уже нормально отработал в этом же файле в обоих видах дважды. В третий раз ни в одном виде без упомянутого бага работать не хочет. |
ALexusB |
Feb 4 2020, 12:48
Сообщение
#609
|
Разработчик ВМЛ-КВЛ Группа: Admin Сообщений: 16,240 Регистрация: 2-November 04 Пользователь №: 3 |
а break; есть в нужном кейс? А то без него соседние ветки может отработать и в итоге код будет ХЗ какой, а не как ожидается
Исходя из приведенного описания - баг в проектном коде, надо по строкам его в голове прокрутить (или дебугером по Ф5) и понять где у НПС теряется диалог и стостояние горожанина А ну и еще - если исходно диалог начал сам НПС, то он актеором был по квесту, нужно вернуть ему горожанина обратно - см примеры др квестов по аналогии В ПКМ не знаю сходу такое - в исходниках ВМЛ генератор квеста пассажира например, там чел на пирс ставится и спасибо говорит. См его диалог |
Thorgal |
Feb 4 2020, 16:24
Сообщение
#610
|
капер Группа: форумчанин Сообщений: 819 Регистрация: 13-December 05 Из: Москва Пользователь №: 1,667 |
Кажется я сумел... Теперь надо еще пройти квест до конца, причем проверить все концовки, а их там три штуки.
В общем я сдвинул пикчу вплотную к блоку с началом нового этапа квеста и таймером. Часть реплик засунул прямо в этот блок. Еще часть вывел после блока с таймером и в конце поставил: link.l1.go = "Exit"; Убрал из блока с пикчей автоматическое продление диалога. После пикчи надо еще раз кликнуть мышой, но это пустяки. Главное все сработало, записалось в журнал и тайминг запустился... И самое главное после этого сработала дежурная фраза. То есть НПС не залочился. Боюсь выдохнуть... Я не знаю, как это работает, но мой принцип - если что-то заработало больше к этому не прикасайся. Понятно, что это опять лечение зубов через анус, но я счастлив и такому результату. В общем это еще не Аустерлиц, но это уже Маренго... А ну и еще - если исходно диалог начал сам НПС, то он актеором был по квесту Нет, диалог начал ГГ. Он пришел сдать этап квеста. |
Martial |
May 3 2020, 22:44
Сообщение
#611
|
юнга Группа: форумчанин Сообщений: 21 Регистрация: 13-April 19 Пользователь №: 136,449 |
Всем, привет! ChangeCharacterAddressGroup падает с ошибкой stack error, кто-нибудь знает почему? вроде где-то читал что есть ограничение на общее кол-во персов в игре если да то где это знаение прописано?
|
Martial |
Jul 4 2020, 01:07
Сообщение
#612
|
юнга Группа: форумчанин Сообщений: 21 Регистрация: 13-April 19 Пользователь №: 136,449 |
увеличение переменной MAX_CHARACTERS не помогло, сам персонаж появляется но поговорить с ним нельзя, для его спавна идет цепочка разговоров с другими персами которые тоже были добавлены, если цепочку сократить то он и спавниться и диалог с ним нормально работает, то есть дело судя по всему в количистве нпс, но где тогда прописаны переменные максимума нпс?
|
ALexusB |
Jul 4 2020, 15:54
Сообщение
#613
|
Разработчик ВМЛ-КВЛ Группа: Admin Сообщений: 16,240 Регистрация: 2-November 04 Пользователь №: 3 |
MAX_CHARACTERS и инит НПС срабатывает с начала новой игры
Если это тестить в процессе старого сейва (где квест уже идет), то не сработает Нужно начинать новую игру и читами добегать до нужного места. См чит панель по Ф11 в ВМЛ (коды открыты). Там телепорт по тавернам городов и инит нужной ветки квеста в пчар. |
Martial |
Jul 5 2020, 20:41
Сообщение
#614
|
юнга Группа: форумчанин Сообщений: 21 Регистрация: 13-April 19 Пользователь №: 136,449 |
MAX_CHARACTERS и инит НПС срабатывает с начала новой игры Если это тестить в процессе старого сейва (где квест уже идет), то не сработает Нужно начинать новую игру и читами добегать до нужного места. См чит панель по Ф11 в ВМЛ (коды открыты). Там телепорт по тавернам городов и инит нужной ветки квеста в пчар. в том то и дело что я полностью заново начинаю, но все равно этот эррор вылазит: RUNTIME ERROR - file: quests\quests.c; line: 103 (метод - bool CheckQuestRecord(aref qref,string textId)) Invalid range кстати а можно открыть файлы игры как один проект ? |
Thorgal |
Jul 31 2020, 08:14
Сообщение
#615
|
капер Группа: форумчанин Сообщений: 819 Регистрация: 13-December 05 Из: Москва Пользователь №: 1,667 |
define MOD_DEAD_CLEAR_TIME 100 // in sec.
Подскажите, что регулирует эта строка в коде? Я так понимаю, что-то связанное со временем исчезновения трупов? Цифра это секунды? Но не совсем понятно почему написано "in sec". "В секунду"? |
ALexusB |
Jul 31 2020, 08:28
Сообщение
#616
|
Разработчик ВМЛ-КВЛ Группа: Admin Сообщений: 16,240 Регистрация: 2-November 04 Пользователь №: 3 |
в обсуждениях
есть строчка с *1000 (а это уже мс) Все непонятные строки можно поиском по тексту кода искать, где они в деле |
Thorgal |
Aug 1 2020, 09:14
Сообщение
#617
|
капер Группа: форумчанин Сообщений: 819 Регистрация: 13-December 05 Из: Москва Пользователь №: 1,667 |
Все непонятные строки можно поиском по тексту кода искать, где они в деле Я сразу их поиском нашел. В двух местах всего встречается. Только понятнее от этого не стало... Пояснения там очень скупые. Кстати, а что такое "мс"? Ладно потом сам покопаюсь на досуге и в игре опробовать надо. А пока надо Ворона допройти. |
BUKA_E}l{EBUKA |
Aug 1 2020, 12:41
Сообщение
#618
|
юнга Группа: форумчанин Сообщений: 31 Регистрация: 20-July 20 Пользователь №: 194,252 |
Это просто множитель. Единственное место, где он вызывается - удаление трупа. 1000*100 = 100 000 милисекунд, т.е. 100 секунд. Спустя это время труп исчезает
|
Thorgal |
Aug 2 2020, 20:04
Сообщение
#619
|
капер Группа: форумчанин Сообщений: 819 Регистрация: 13-December 05 Из: Москва Пользователь №: 1,667 |
Это просто множитель. Единственное место, где он вызывается - удаление трупа. 1000*100 = 100 000 милисекунд, т.е. 100 секунд. Спустя это время труп исчезает Спасибо! Значит миллисекунды. То есть, если строка будет такой MOD_DEAD_CLEAR_TIME * 3000, "i", chr - труп будет удаляться через 300 сек? Чтобы с гарантией можно было успеть облутать. Иногда боевка затягивается и трупы успевают исчезнуть вместе с лутом. |
BUKA_E}l{EBUKA |
Aug 2 2020, 22:10
Сообщение
#620
|
юнга Группа: форумчанин Сообщений: 31 Регистрация: 20-July 20 Пользователь №: 194,252 |
В точку!
Код PostEvent("LAi_event_Character_Dead", MOD_DEAD_CLEAR_TIME * 1000, "i", chr) равнозначноКод PostEvent("LAi_event_Character_Dead", 100000, "i", chr) На практике - не совсем. По крайней мере, в моих тестах при "MOD_DEAD_CLEAR_TIME * 1000" время от PostEvent до удаления = 106с, а при 100000 = 104с. Кстати о трупах! Мне не нравилось, что изначально пустые трупы (а их много по отношению к общему кол-ву, по крайней мере на 2й от конца сложности) в тесном пространстве мешают лутать вещи с остальных. Когда в узком проходе навалено полтора десятка скелетов почти в одной точке, приходится продвигаться по пикселю жмакая "1" чтоб ниче не пропустить. В итоге лутанье скелетов выходит дольше чем их убийство Поэтому я сделала так: \Program\Loc_ai\LAi_events.c, функция: void LAi_Character_Dead_Process(aref chr) находим в ней место Код if (MOD_DEAD_CLEAR == "On" && !CheckAttribute(chr, "DontClearDead")) { PostEvent("LAi_event_Character_Dead", MOD_DEAD_CLEAR_TIME * 1000, "i", chr); } //Реинкарнируем LAi_GenerateFantomFromMe(chr); меняем на Код if (MOD_DEAD_CLEAR == "On" && !CheckAttribute(chr, "DontClearDead")) { if (CheckAttribute(chr, "MomImDownshifter")) { PostEvent("LAi_event_Character_Dead", 10, "i", chr); } else { PostEvent("LAi_event_Character_Dead", MOD_DEAD_CLEAR_TIME * 2000, "i", chr); } } //Реинкарнируем LAi_GenerateFantomFromMe(chr); следующий шаг: \Program\Loc_ai\LAi_utils.c, функция: void Dead_AddLoginedCharacter(aref chr) находим Код } Dead_Characters[Dead_Char_num].px = x; Dead_Characters[Dead_Char_num].pz = z; Dead_Char_num++; } } меняем на Код } if (!CheckAttribute(chref, "Money") && GetItemsWeight(chref) == 0.0) { chr.MomImDownshifter = true; } Dead_Characters[Dead_Char_num].px = x; Dead_Characters[Dead_Char_num].pz = z; Dead_Char_num++; } } Вуаля! Трупы, на которых не было шмота, исчезают сразу; остальные - через 200с. Ничего не ломается, тела которые не должны исчезать - не исчезнут, даже если они пустые. Проверки и логика остались те же. Мой сетап (у вас должен быть аналогичный): ПКМ с последним ВМЛ поверх которого распакованы И таких мелких твиков я сделала кучу. Баланс не трогала, по моим меркам он близок к идеалу. Только ускорение всякой рутины. Взять те же кости - первые 10 раз все круто, но ближе к сотому тебе хочется протянуть руки чтобы быстрее двинуть этот чертов стакан, а потом самой разложить кубики. Иначе к тому времени как сопернику играть надоедает, у тебя кофе остыл, кот мумифицировался, а на улице наступил киберпанк. Отдельное спасибо AlexusB. Без его подсказок, особенно в каких файлах/функциях копать, я бы даже не стала лезть во все это |
Текстовая версия | Сейчас: 26th April 2024 - 06:23 |