Seaward.ru

Здравствуйте, гость ( Вход | Регистрация )

> Для программистов, вопросы по скриптам ПКМ
igor_pol
сообщение Aug 24 2005, 21:00
Сообщение #1


боцман
****


Группа: форумчанин
Сообщений: 140
Регистрация: 3-December 04
Пользователь №: 169



Первое что я хотел написать "АДМИНЫ!!!!" НЕ ЗВЕРЕЙТЕ ЗА "НЕНУЖНУЮ ТЕМУ"
**************************************************
на вопрос зачем создал эту тему отвечу так "Я например НЕ ПРОСТО ЮЗВЕРЬ А КОЕ ЧТО И САМ НАПИСАТЬ МОГУ.
И хотел бы чтобы на форуме была тема для тех кто сам хочет что-то добавить в игру.
На сайте аддона Алекс вікинул ссылку на описание скриптов ПКМ на английском.
Я хотел бы узнать где можно нарыть больше инфы по этом скриптам.
И кстати на каком языке они пишуться.
Если кто-то знает ----- пишите.
И вообще всем програмерам на форуме нужна своя тема.
так что ГОСПОДА ПРОГРАМЕРЫ ВАЛИТЕ СЮДА !!!!
Может из этого что небудь интересное выйдет!!!!!!(Если тему не УТРУТ)
Жду сообщений (может у когот есть идеи на эту тему )

Сообщение отредактировал Догева - Apr 24 2006, 13:36
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
35 страниц V « < 29 30 31 32 33 > »   
Reply to this topicStart new topic
Ответов(600 - 619)
Thorgal
сообщение Feb 1 2020, 15:51
Сообщение #601


капер
******

Ветеран ФорумаЗаслуженный Художник
Группа: форумчанин
Сообщений: 819
Регистрация: 13-December 05
Из: Москва
Пользователь №: 1,667



Как разлочить персонажа в диалоге? После срабатывания скрипта на таймер умолк, хотя должен говорить. Хотя бы стандартный диалог "- Чего изволите? - Ничего, просто так зашел" должен активировать. Третий день копаюсь, ничего не выходит. Не понимаю...
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Feb 1 2020, 16:24
Сообщение #602


Разработчик ВМЛ-КВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 16,168
Регистрация: 2-November 04
Пользователь №: 3



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

Еще может быть когда не сработал нормальный выход из диалога
НПС залочится без реплики

case "exit":
Diag.CurrentNode = Diag.TempNode;
NPChar.quest.meeting = NPC_Meeting;
DialogExit();
break;
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Thorgal
сообщение Feb 2 2020, 13:04
Сообщение #603


капер
******

Ветеран ФорумаЗаслуженный Художник
Группа: форумчанин
Сообщений: 819
Регистрация: 13-December 05
Из: Москва
Пользователь №: 1,667



Цитата(ALexusB @ Feb 1 2020, 16:24) *

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

Еще может быть когда не сработал нормальный выход из диалога
НПС залочится без реплики

case "exit":
Diag.CurrentNode = Diag.TempNode;
NPChar.quest.meeting = NPC_Meeting;
DialogExit();
break;

Спасибо, но пока все равно ничего не выходит. При попытке оперировать данным блоком в файле квеста игра перестает обращаться к файлу в целом. Короче, все сложно...
Пытаюсь найти в файлах, как вернуть состояние нпсчару. По поиску не нашел. Ищу вручную.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Thorgal
сообщение Feb 2 2020, 23:10
Сообщение #604


капер
******

Ветеран ФорумаЗаслуженный Художник
Группа: форумчанин
Сообщений: 819
Регистрация: 13-December 05
Из: Москва
Пользователь №: 1,667



Убрал автоматическое продление диалога НПС, после вставленной картинки и стало еще интереснее. Виснуть НПС перестал, но диалог закольцевался с определенной реплики... Все страньше и страньше... По любому на следующую стадию и на дежурную реплику диалог не переходит.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Feb 3 2020, 08:48
Сообщение #605


Разработчик ВМЛ-КВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 16,168
Регистрация: 2-November 04
Пользователь №: 3



См. другие диалоги, где все ок.
Внимание на Diag.CurrentNode и штатный выход DialogExit();
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Thorgal
сообщение Feb 3 2020, 11:32
Сообщение #606


капер
******

Ветеран ФорумаЗаслуженный Художник
Группа: форумчанин
Сообщений: 819
Регистрация: 13-December 05
Из: Москва
Пользователь №: 1,667



Цитата(ALexusB @ Feb 3 2020, 08:48) *

См. другие диалоги, где все ок.
Внимание на Diag.CurrentNode и штатный выход DialogExit();

Самое смешное, что я эту пикчу в диалоги вставлял уже несколько раз и после нее все было ок. Судя по тому, что я как-то добрался до финала квеста. Но тут просто какое-то заколдованное место. Что-то она там нарушает, но что, понять не могу. Все в точности, как раньше. Все строчки кода те же самые. Штатный выход срабатывает. Просто после него либо НПС лочится, либо диалог зацикливается... Мне уже плевать на сборку которую я клепал 3 месяца. Все равно, для собственного удовольствия времени не жалко. Но тут уже дело принципа. Либо я добью этот код, либо он меня... laugh.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Feb 3 2020, 11:56
Сообщение #607


Разработчик ВМЛ-КВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 16,168
Регистрация: 2-November 04
Пользователь №: 3



Еще не понятно о чем мы говорим - это мсто в НПС переигрывается или НПС уже залочен и нужно разлочить?
Т.к. все парвки диалога работают только в новом диалоге (С\Л до поломки и говорим заново). Если же уже НПС заклинили, то надо переигрывать это место
Ну или писать чит, на получить pchar , присвоить ему нужную ветку диалога и тип горожанина задать, это сними его залоченность
Я там тестил линейки квеста с середины, когда переигрывть долго и можно сразу начать с нужного этапа.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Thorgal
сообщение Feb 4 2020, 11:24
Сообщение #608


капер
******

Ветеран ФорумаЗаслуженный Художник
Группа: форумчанин
Сообщений: 819
Регистрация: 13-December 05
Из: Москва
Пользователь №: 1,667



Цитата(ALexusB @ Feb 3 2020, 11:56) *

Еще не понятно о чем мы говорим - это мсто в НПС переигрывается или НПС уже залочен и нужно разлочить?
Т.к. все парвки диалога работают только в новом диалоге (С\Л до поломки и говорим заново). Если же уже НПС заклинили, то надо переигрывать это место
Ну или писать чит, на получить pchar , присвоить ему нужную ветку диалога и тип горожанина задать, это сними его залоченность
Я там тестил линейки квеста с середины, когда переигрывть долго и можно сразу начать с нужного этапа.

Я беру сейв ДО бага. Только так, иначе смысла нет.

Вставил в диалог пикчу. Пробовал два варианта кода. В одном НПС после пикчи сам автоматически продолжает диалог, после которого идет блок с переходом на следующий этап квеста (включение таймера на месяц + репа). После этого НПС оказывается наглухо залочен. Хотя должен отвечать хотя бы на стандартное обращение. После истечения срока таймера все так же залочен.
Второй вариант - НПС после пикчи активирует продолжение далога по клику мыши. Тут другая засада. Диалог, после перехода на следующий этап квеста и отработки таймера, закольцовывается и можно бесконечно проходить этап включения таймера с соответствующей записью в журнал, откатываться к продолженияю диалога сразу после пикчи и снова по кругу...
Убрав пикчу получаем чистый диалог, переход на следующий этап квеста без малейших багов.

Блок с пикчей уже нормально отработал в этом же файле в обоих видах дважды. В третий раз ни в одном виде без упомянутого бага работать не хочет.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Feb 4 2020, 12:48
Сообщение #609


Разработчик ВМЛ-КВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 16,168
Регистрация: 2-November 04
Пользователь №: 3



а break; есть в нужном кейс? А то без него соседние ветки может отработать и в итоге код будет ХЗ какой, а не как ожидается
Исходя из приведенного описания - баг в проектном коде, надо по строкам его в голове прокрутить (или дебугером по Ф5) и понять где у НПС теряется диалог и стостояние горожанина
А ну и еще - если исходно диалог начал сам НПС, то он актеором был по квесту, нужно вернуть ему горожанина обратно - см примеры др квестов по аналогии

В ПКМ не знаю сходу такое - в исходниках ВМЛ генератор квеста пассажира например, там чел на пирс ставится и спасибо говорит. См его диалог
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Thorgal
сообщение Feb 4 2020, 16:24
Сообщение #610


капер
******

Ветеран ФорумаЗаслуженный Художник
Группа: форумчанин
Сообщений: 819
Регистрация: 13-December 05
Из: Москва
Пользователь №: 1,667



Кажется я сумел... Теперь надо еще пройти квест до конца, причем проверить все концовки, а их там три штуки.
В общем я сдвинул пикчу вплотную к блоку с началом нового этапа квеста и таймером. Часть реплик засунул прямо в этот блок. Еще часть вывел после блока с таймером и в конце поставил:
link.l1.go = "Exit";

Убрал из блока с пикчей автоматическое продление диалога. После пикчи надо еще раз кликнуть мышой, но это пустяки. Главное все сработало, записалось в журнал и тайминг запустился... И самое главное после этого сработала дежурная фраза. То есть НПС не залочился. Боюсь выдохнуть...

Я не знаю, как это работает, но мой принцип - если что-то заработало больше к этому не прикасайся. Понятно, что это опять лечение зубов через анус, но я счастлив и такому результату.

В общем это еще не Аустерлиц, но это уже Маренго...

Цитата(ALexusB @ Feb 4 2020, 12:48) *

А ну и еще - если исходно диалог начал сам НПС, то он актеором был по квесту

Нет, диалог начал ГГ. Он пришел сдать этап квеста.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Martial
сообщение May 3 2020, 22:44
Сообщение #611


юнга
**


Группа: форумчанин
Сообщений: 21
Регистрация: 13-April 19
Пользователь №: 136,449



Всем, привет! ChangeCharacterAddressGroup падает с ошибкой stack error, кто-нибудь знает почему? вроде где-то читал что есть ограничение на общее кол-во персов в игре если да то где это знаение прописано?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Martial
сообщение Jul 4 2020, 01:07
Сообщение #612


юнга
**


Группа: форумчанин
Сообщений: 21
Регистрация: 13-April 19
Пользователь №: 136,449



увеличение переменной MAX_CHARACTERS не помогло, сам персонаж появляется но поговорить с ним нельзя, для его спавна идет цепочка разговоров с другими персами которые тоже были добавлены, если цепочку сократить то он и спавниться и диалог с ним нормально работает, то есть дело судя по всему в количистве нпс, но где тогда прописаны переменные максимума нпс?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Jul 4 2020, 15:54
Сообщение #613


Разработчик ВМЛ-КВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 16,168
Регистрация: 2-November 04
Пользователь №: 3



MAX_CHARACTERS и инит НПС срабатывает с начала новой игры
Если это тестить в процессе старого сейва (где квест уже идет), то не сработает
Нужно начинать новую игру и читами добегать до нужного места.
См чит панель по Ф11 в ВМЛ (коды открыты).
Там телепорт по тавернам городов и инит нужной ветки квеста в пчар.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Martial
сообщение Jul 5 2020, 20:41
Сообщение #614


юнга
**


Группа: форумчанин
Сообщений: 21
Регистрация: 13-April 19
Пользователь №: 136,449



Цитата(ALexusB @ Jul 4 2020, 15:54) *

MAX_CHARACTERS и инит НПС срабатывает с начала новой игры
Если это тестить в процессе старого сейва (где квест уже идет), то не сработает
Нужно начинать новую игру и читами добегать до нужного места.
См чит панель по Ф11 в ВМЛ (коды открыты).
Там телепорт по тавернам городов и инит нужной ветки квеста в пчар.

в том то и дело что я полностью заново начинаю, но все равно этот эррор вылазит: RUNTIME ERROR - file: quests\quests.c; line: 103 (метод - bool CheckQuestRecord(aref qref,string textId))
Invalid range

кстати а можно открыть файлы игры как один проект ?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Thorgal
сообщение Jul 31 2020, 08:14
Сообщение #615


капер
******

Ветеран ФорумаЗаслуженный Художник
Группа: форумчанин
Сообщений: 819
Регистрация: 13-December 05
Из: Москва
Пользователь №: 1,667



define MOD_DEAD_CLEAR_TIME 100 // in sec.
Подскажите, что регулирует эта строка в коде? Я так понимаю, что-то связанное со временем исчезновения трупов? Цифра это секунды? Но не совсем понятно почему написано "in sec". "В секунду"?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Jul 31 2020, 08:28
Сообщение #616


Разработчик ВМЛ-КВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 16,168
Регистрация: 2-November 04
Пользователь №: 3



в обсуждениях
http://www.seaward.ru/forum/index.php?s=&a...st&p=350428
есть строчка с *1000 (а это уже мс)
Все непонятные строки можно поиском по тексту кода искать, где они в деле
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Thorgal
сообщение Aug 1 2020, 09:14
Сообщение #617


капер
******

Ветеран ФорумаЗаслуженный Художник
Группа: форумчанин
Сообщений: 819
Регистрация: 13-December 05
Из: Москва
Пользователь №: 1,667



Цитата(ALexusB @ Jul 31 2020, 08:28) *

Все непонятные строки можно поиском по тексту кода искать, где они в деле

Я сразу их поиском нашел. В двух местах всего встречается. Только понятнее от этого не стало... Пояснения там очень скупые. Кстати, а что такое "мс"?
Ладно потом сам покопаюсь на досуге и в игре опробовать надо. А пока надо Ворона допройти.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
BUKA_E}l{EBUKA
сообщение Aug 1 2020, 12:41
Сообщение #618


юнга
**


Группа: форумчанин
Сообщений: 31
Регистрация: 20-July 20
Пользователь №: 194,252



Это просто множитель. Единственное место, где он вызывается - удаление трупа. 1000*100 = 100 000 милисекунд, т.е. 100 секунд. Спустя это время труп исчезает
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Thorgal
сообщение Aug 2 2020, 20:04
Сообщение #619


капер
******

Ветеран ФорумаЗаслуженный Художник
Группа: форумчанин
Сообщений: 819
Регистрация: 13-December 05
Из: Москва
Пользователь №: 1,667



Цитата(BUKA_E}l{EBUKA @ Aug 1 2020, 12:41) *

Это просто множитель. Единственное место, где он вызывается - удаление трупа. 1000*100 = 100 000 милисекунд, т.е. 100 секунд. Спустя это время труп исчезает

Спасибо! Значит миллисекунды.

То есть, если строка будет такой MOD_DEAD_CLEAR_TIME * 3000, "i", chr - труп будет удаляться через 300 сек? Чтобы с гарантией можно было успеть облутать. Иногда боевка затягивается и трупы успевают исчезнуть вместе с лутом.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
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" чтоб ниче не пропустить. В итоге лутанье скелетов выходит дольше чем их убийство biggrin.gif

Поэтому я сделала так:

\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. Без его подсказок, особенно в каких файлах/функциях копать, я бы даже не стала лезть во все это laugh.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

35 страниц V « < 29 30 31 32 33 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29th March 2024 - 05:37

Блок рекламы
Яндекс цитирования Rambler's Top100
Rambler's Top100