Перейти к содержанию

Ошибки в скрипте


Рекомендуемые сообщения

Я написал скрипт:

[morrscript]

Begin Caverna_ticket_script

 

short doOnce

short PC_Has_Caverna_Ticket

 

if (MenuMode == 1)

return

endif

 

if (GetPCCell Мидуна, Клуб Каверна == 1)

if (doOnce == 0)

ForceGreeting

Set doOnce to 1

;the officer asks player about his ticket

endif

endif

 

if (doOnce == 1) ;if player go out from Caverna

if (CellChanged == 1)

Set doOnce to 0

endif

endif

 

if (PC_Has_Caverna_Ticket == 1)

if (CellChanged == 1)

Set PC_Has_Caverna_Ticket to 0 ; set player has ticket to 0 if he go out from the club

endif

endif

 

end

[/morrscript]

 

Он компилируется, но в игре выдается два сообщения:

1. Script error: EXPRESSION in caverna_ticket_script

2. Left eval

 

И включается меню персонажа. (В смысле карта, багаж и т.п.)

Я не понимаю из-за чего это может быть.

Ссылка на комментарий
Поделиться на другие сайты

Нет, если ставишь название в кавычки, CS выдает ошибку о несуществующей функции (район называется Мидуна, Клуб "Каверна")
Ссылка на комментарий
Поделиться на другие сайты

Переименуй ячейку, в ее имени лучше кавычки не ставить... ставь апостровы, вот такие '

ЗЫ: А какой тег использовать для "Скрипт ТЕС3"?

Ссылка на комментарий
Поделиться на другие сайты

Действительно надо было поменять " на '. Теперь у меня другой вопрос:

Вдиалоговом меню стражник спрашивает PC о билете в клуб. В случае, если таковой наличиствует, то он отпускает игрока и должна включиться переменная. Только вот, не включается она. Когда снова пытаешься заговорить со стражем, он выдает стартовую реплику, а билета-то у тебя уже нет! Я не знаю что делать. Все строки расположены так, как надо.

Ссылка на комментарий
Поделиться на другие сайты

Действительно надо было поменять " на '. Теперь у меня другой вопрос:

Вдиалоговом меню стражник спрашивает PC о билете в клуб. В случае, если таковой наличиствует, то он отпускает игрока и должна включиться переменная. Только вот, не включается она. Когда снова пытаешься заговорить со стражем, он выдает стартовую реплику, а билета-то у тебя уже нет! Я не знаю что делать. Все строки расположены так, как надо.

 

Должно быть что-то вроде:

greetin 1:

Дай-ка мне свой билет!

в results(как я понял):

player -> RemoveItem "ID билета"

set твоя_локальная_переменная to 1

в условиях:

ID стражника

Local твоя_локальная_переменная (ты ее через скрипт стражнику определил?) == 0

 

greeting 2

Угу, проходи, я уже забирал у тебя билет

в условиях:

ID стражника

Local твоя_локальная_переменнвя == 1 (попробуй вариант != 0 или > 0)

Ссылка на комментарий
Поделиться на другие сайты

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

гритинг1

если есть

гритинг2

если если нету и не проходил

гритинг3

если нету, но уже проходил

Ссылка на комментарий
Поделиться на другие сайты

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

гритинг1

если есть

гритинг2

если если нету и не проходил

гритинг3

если нету, но уже проходил

 

Так я то же самое и предлагаю, только БЕЗ глобальных переменных(чего это вас всех на Глобал тянет, когда и локалом можно легко обойтись?!) я, как понял, та переменная и должна отвечать за прохождение... те, один гритинг не обязателен, если нет разницы в том проходил он или нет... просто после того как билет отдан будет выводиться одно и то же приветствие

Ссылка на комментарий
Поделиться на другие сайты

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

Вот что у меня:

Greeting 0

-----------------

- На кой *** ты сюда приперся?

Условия:

Global "PC_Has_Caverna_Ticket" < 0

Results:

player->PositionCell.....

Goodbye

-----------------

- Как дела?

Условия:

ID "Imper_captain"

Global "PC_Has_Caverna_Ticket" != 0

Results:

-----------------

- Отлично, можешь развлекаться.

Условия:

Function "Choice" == 1

Item "Ticket" >= 1

Results:

player->removeitem "ticket" 1

Set PC_Has_Caverna_Ticket" to 1

Goodbye

------------------

- Ты меня обманул! Урод!

Условия:

Function "Choice" == 1

Item "Ticket" == 0

Results:

Set PC_Has_Caverna_Ticket to -1

player->PositionCell......

Goodbye

------------------

- Хорошо, возьми его.

Условия:

Function "Choice" == 2

Results:

player->PositionCell......

Goodbye

------------------

- У тебя есть билет?

Условия:

Global "PC_Has_Caverna_Ticket" == 0

Results:

Choice "Да" 1 "Я его забыл" 2

:unsure:

Ссылка на комментарий
Поделиться на другие сайты

Вот что у меня:

Greeting 0

-----------------

- На кой *** ты сюда приперся?

Условия:

Global "PC_Has_Caverna_Ticket" < 0

Results:

player->PositionCell.....

Goodbye

-----------------

:unsure:

 

плаг можешь скинуть, попробую поправить...? _lost81@mail.ru

Ссылка на комментарий
Поделиться на другие сайты

Слушай, поправить я тебе поправил.... :rolleyes: диалоги капитана стражи и бармена B) (косяк все-таки был в основном в скрипте) , но, похоже, запорол такие как "мое занятие", "определенное место" и тд и тп, осталось только "кто-то особенный" :blink: ... Я склонен думать это из за особенностей CS по части вырезания @ и # :angry: признайся честно, у тебя эти топики фурыкали или нет? Если нет, то я попробую поправить... и на будующее, создавай топики в greeeting 3 удачней будет а вообще читай MSFD8 помогает! ;) Изменено пользователем lost81
Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Раз разговор коснулся диалогов, то мне кажется, что будет полезным такое замечание. Когда используется команда Choice "ID1" 1 "ID2" 2, то ее нужно размещать под теми репликами (TopicInfo), которые содержат ответы. Просто у меня были затруднения, когда я пытался все это дело органзовать снизу вверх, оп порядку. И еще. Иерархия Greeting имеет силу. Для тех приветствий, которые должны быть реализованы в первую очередь, лучше использовать Greeting 0 или Greeting 1. Менее важные следует размещать в других. И если гритинг должен быть задействован единожды, то необходима проверка условия. Кроме того, это уже чисто практическое, темы, созданные для одного определенного персонажа, удобнее всего добавлять в отфильтрованном диалоге. Да, КС в переводе акеллы действительно опчему-то любит вырезать знаки гиперссылок. С английским такое не происходит. поэтому лучше всего воспользоваться конструкцией

"Реплика"

Choice "Продолжить"

AddTopic "тема"

"Ответ"

После этого тема добавляется в список тем. Если задействовать просто AddTopic, то топик возникнет, если щелкнуть еще оп одному. И если тема имеет какое-то особенное значение, то обозначить ее лучше примерно так"-тема". Тогда она по-любому всплывет вверху.

Надеюсь, мои замечания помогут.

И еще. 2Lost81, если в этих топиках не содержится новой информации, то проще всего почистить плаг при помощи специальным программ физически удаляющих данные из мода, поскольку КС все равно хранит память (возможно, это баг такой, в любом случае, это свойство приносит вред).

Ссылка на комментарий
Поделиться на другие сайты

2Tiberius Flavius 1- Сначала создай топик, а уж затем греетинг с использованием этого топика!

2 - Весь прикол в том, что эти темы специфические... (стандартных NPC они не коснулись!) 3- конструкция не совсем верна, в самом низу- вопрос! А выше ответ, при чем, чем больше условий накладывается на этот ответ (при наличии нескольких его вариантов) тем он должен быть выше, с самым минимальным количеством условий ответ должен находиться в самом низу, но не ниже самого вопроса!

Ссылка на комментарий
Поделиться на другие сайты

Должно быть, я высказался не совсем верно. Разумеется, сначал необходмо создать тему, иначе при проверке и компиляции скриптов диалога Морр обнаружит ошибку, причем в игре сообщит о ней довольно неприятным образом. Собственно, гритинга это не касается, а скорее самой команды AddTopic.

А что касается структур продолжения, то вопрос (точнее, ту реплику, которая использует вариации Choice), то ее необходимо размещать в низу открываемого ей списка. Правда, я не совсем понимаю почему так. Впрочем, движок Морра билдила Беседка, к ней и вопросы:)

О темах. Если они не коснулись стандартных неписей (я так понимаю, они задействованы для опреденнного персонажа или группы), то по делу они не должны выбивать топики. У КС есть весьма нехорошее свойство сохранять даже то, что только было просмотрено, а не изменено. Я как вспомню первый промотр своих плагинов через Advanced ModCleener... Возможно, причина в другом, но на всякий случай проверь.

Ссылка на комментарий
Поделиться на другие сайты

А что касается структур продолжения, то вопрос (точнее, ту реплику, которая использует вариации Choice), то ее необходимо размещать в низу открываемого ей списка. Правда, я не совсем понимаю почему так. Впрочем, движок Морра билдила Беседка, к ней и вопросы:)

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

 

Весь прикол в том, что игра начинает проверять топики и гритинги сверху в низ, и при удовлетворительных условиях выводит на экран! Следовательно "легковыводимые" топики должны проверяться позже "трудновыводимых" иначе всегда будут вылазить "легковыводимые", а до трудновыводимых игра просто не будет добираться, по той простой причине, что после вывода на экран мессаги, игра больше не проверяет топики!

Ссылка на комментарий
Поделиться на другие сайты

Весь прикол в том, что игра начинает проверять топики и гритинги сверху в низ, и при удовлетворительных условиях выводит на экран!

Согласен. Это действительно так. Впрочем, если говорить о практике, то это как раз то, что очень легко устранить. По-любому в грамотно организованном диалоге будет задействована проверка условия действительности того или иного события.

Кстати, ты случаем не знаешь в каком порядке игра начинает проверять условия в скриптах? Иногда бывает так, что вроде как if/elseif/endif структуры построены логически верно (если говорить о логике полноценных языков программирования вроде Дельфи или Джаваскрипта), однако игра выдает совсем не то, что требовалось? Может, это из-за того, что Моррскрипт это, по сути, производное игрового движка :unsure: ?

Ссылка на комментарий
Поделиться на другие сайты

Кстати, ты случаем не знаешь в каком порядке игра начинает проверять условия в скриптах? Иногда бывает так, что вроде как if/elseif/endif структуры построены логически верно (если говорить о логике полноценных языков программирования вроде Дельфи или Джаваскрипта), однако игра выдает совсем не то, что требовалось? Может, это из-за того, что Моррскрипт это, по сути, производное игрового движка :unsure: ?

 

Скрипты исполняются КАЖДЫЙ КАДР сверху вниз пока действуют, соответственно если у тебя 35 fps, он будет выполнен 35 раз за одну секунду. В том то и проблема всех начинающих скриптеров - они не знают принцип действия.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...