• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток! Спешите принять участие в конкурсе "Таинственные миры" 2024!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.802
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 511
Последнее редактирование модератором:

Vengeful_Blade

Участник форума
Регистрация
1 Фев 2015
Сообщения
13
Благодарности
1
Баллы
150
чтобы инвентарь восстановить - надо для начала его куда-то запомнить, что методами скриптов невозможно. во всяком случае без кучки костылей в коде...
А как тогда вы объясните это? - если продать торговцу один или несколько предметов то даже после сохранения/загрузки/выхода/входа/удаления/установки игры проданные предметы будут доступны для покупки, тоже самое с золотом - если, допустим, отдать Гаану 100 золотых за обучение, а после побить его, то в инвентаре будет на 100 золотых больше.
Это не есть ли "запоминание" инвентаря?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
А как тогда вы объясните это? - если продать торговцу один или несколько предметов то даже после сохранения/загрузки/выхода/входа/удаления/установки игры проданные предметы будут доступны для покупки, тоже самое с золотом - если, допустим, отдать Гаану 100 золотых за обучение, а после побить его, то в инвентаре будет на 100 золотых больше.
Это не есть ли "запоминание" инвентаря?
инвентарь - это класс, содержащий кнутри себя массив из предметов типа oCItem. при сохранении/загрузке игры происходит обращение к виртуальному методу архивации данных класса oCNpc и все нужные нам данные пишутся в файлы по пути gothic/saves/... .

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

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

небольшой пример для запоминания данных инвентаря
// Тут будет указатель на оригинальный инвентарь
static zCListSort<oCItem>* arrItemList = NULL;
// Получаем указатель на контейнер предметов
oCItemContainer* pContainer = dynamic_cast<oCItemContainer*>(pNpc->GetInventory());
// Сохраняем указатель оригинального инвентаря
arrItemList = pContainer->m_pItemList;
// Создаем *пустой инвентарь персонажу после избиения*
pContainer->m_pItemList = new zCListSort<oCItem>;

небольшой пример для возвращения данных инвентаря на место
// Получаем указатель на контейнер предметов
oCItemContainer* pContainer = dynamic_cast<oCItemContainer*>(pNpc->GetInventory());
// Удаляем указатель на *пустой инвентарь после избиения*
delete pContainer->m_pItemList;
// Возвращаем инвентарь на место
pContainer->m_pItemList = arrItemList;

а потом регистрируешь функции в парсере, как к примеру Npc_SaveAndClearInventory(C_NPC), Npc_LoadOldInventory(C_NPC). после этого они станут доступны для использования в скрипте..

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

или, как я уже говорил ранее, лучше всего сразу использовать 2 инвентаря для нпс - один основной, другой для торговли.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
Надо. Только если это движок, а не костыли к нему.
на самом деле уже начинаешь бесить. сидишь как бабка во дворе - нихрена не знаешь, но все равно трындишь о том, в чем нифига не шаришь. тебе уже всё разжевали и в рот положили, как что работает. может теперь твоя очеьндь объяснить нам в чем мы не правы? пока я кроме слова костыль не увидел ни одного аргумента в защиту твоих слов.
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
на самом деле уже начинаешь бесить

Ну тогда бесись втихомолку, а не выплескивай свои эмоции на других!!! И обрати свой вопрос к себе самому, "попытайся объяснить мне, в чем я не прав". Без заклинаний "на дворе 21 век, и все прогрессивные люди доброй воли обязаны ходить с костылями".
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.332
Баллы
315
Ну тогда бесись втихомолку, а не выплескивай свои эмоции на других!!! И обрати свой вопрос к себе самому, "попытайся объяснить мне, в чем я не прав". Без заклинаний "на дворе 21 век, и все прогрессивные люди доброй воли обязаны ходить с костылями".
ЧТо в твоем понятии костыль? И что плохого в "костылях" Мне вот этот момент неясен от слова вобще.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
я тебя попросил - аргументируй. аргументируй свои слова! ты не любишь расширители - значит должна быть причина, а если есть причина - ты можешь ее без проблем описать. что тебя так испугало в расширителях, что для тебя груда грязи в скриптах внезапно ни разу не костыль? что ты вообще знаешь о расширителях и их работе?
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Потому, что вполне можно легко обходится без них. "Не плоди сущностей сверх необходимого". Если разработчик не способен создать мод без "расширителей", то ему надо "немного подучиться". Писать сценарии, например. Реализовывать задумки.Находить способы решения задач. И не плодить при этом "груды грязи" в скриптах. Я. как-то, обхожусь без груды грязи.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Потому, что вполне можно легко обходится без них. "Не плоди сущностей сверх необходимого". Если разработчик не способен создать мод без "расширителей", то ему надо "немного подучиться". Писать сценарии, например. Реализовывать задумки.Находить способы решения задач. И не плодить при этом "груды грязи" в скриптах. Я. как-то, обхожусь без груды грязи.

Если разработчик не способен создать мод без расширителя, это прежде всего вина инструментария на котором пишется мод, а не самого разработчика. И сколько бы ты не учился, тебе все равно выше головы не прыгнуть. Не говори глупости про грязь в скриптах. Грязь это как раз сами скрипты, которые вынесли за рамки движка, чтобы его не засорять.
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Да. Если каменьщик не может сложить стену, то, однозначно, виновата конструкция кирпичей. Тут нет вопроса.

Теперь пример. Вся волна пошла оттого, что "у торговца не восстанавливаетсяего ассортимент товаров". При этом вы тут утверждаете, что проблема не решается без применения "расширителей". Я же привел простое решения этой задачи без них. Где не надо ничего сохранять. Просто снова сгенерить ему заново его инвентарь. Одна строка скрипта. И, может быть, пара строк для проверки каких-нибудь условий. Но. возможно, и их не потребуется. Просто надо уметь решать задачи оптимальным способом. А этому не научиться без правильного подхода к решению задачи.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.276
Благодарности
4.579
Баллы
625
обойтись без них можно тогда, когда задача не требует вмешательства извне. весь список внешних функций достался вам от пираний. их там ровно столько, сколько им было необходимо для написания скрипта без лишних обращений к движку и при этом без ереси.

товарищем четко был поставлен вопрос
после, восстанавливается обратно, разве не так?

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

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

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

так что сравниваем:

ты намерен ребутить содержимое торгоша респауном вещей согласно конкретному списку.
1 получаем ферму лута, где после каждого избиения новый ассортимент.
2 ты не вернешь проданный тобою товар, что в край ломает восприятие к игровой логике, у меня по крайней мере.
3 это не то, что от нас хотел товарищ. не более, чем казуальная альтернатива.

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

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.332
Баллы
315
Да. Если каменьщик не может сложить стену, то, однозначно, виновата конструкция кирпичей. Тут нет вопроса.

Теперь пример. Вся волна пошла оттого, что "у торговца не восстанавливаетсяего ассортимент товаров". При этом вы тут утверждаете, что проблема не решается без применения "расширителей". Я же привел простое решения этой задачи без них. Где не надо ничего сохранять. Просто снова сгенерить ему заново его инвентарь. Одна строка скрипта. И, может быть, пара строк для проверки каких-нибудь условий. Но. возможно, и их не потребуется. Просто надо уметь решать задачи оптимальным способом. А этому не научиться без правильного подхода к решению задачи.
Кирпич - вещь фундаментальная, это как ассемблер, а скрипт это вещь высокоуровневая, это как конкретный блок конкретной конструкции, который ты без набора инструментов больше никуда не впишешь.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
обойтись без них можно тогда, когда задача не требует вмешательства извне. весь список внешних функций достался вам от пираний. их там ровно столько, сколько им было необходимо для написания скрипта без лишних обращений к движку и при этом без ереси.

товарищем четко был поставлен вопрос


на что последовал мой ответ


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


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

так что сравниваем:

ты намерен ребутить содержимое торгоша респауном вещей согласно конкретному списку.
1 получаем ферму лута, где после каждого избиения новый ассортимент.
2 ты не вернешь проданный тобою товар, что в край ломает восприятие к игровой логике, у меня по крайней мере.
3 это не то, что от нас хотел товарищ. не более, чем казуальная альтернатива.

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

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

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Теперь вопрос "по-существу". Нужно правильно ставить задачи и находить правильные (оптимальные) пути решения задачи. Я об этом уже писал. Зачем восстианавливать именно то, что было "на руках" у торговца перед нападением? Если хочется правдаподобности, то достаточно восстановить "типовой" набор товаров торговца. И для этого достаточно имеющегося движка. И это делается очень просто. И никак не портит игровой процесс. Исчезновение товаров при нападении является куда более сильным допущением. И то, что после нападения на торговца ГГ не становится преследуемым преступником - тоже.

Системно надо мыслить, а не надувать щеки: "мы в 21 веке"! Тогда вам и не придется биться головой о стену хоть с расширителями, хоть без них.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Теперь вопрос "по-существу". Нужно правильно ставить задачи и находить правильные (оптимальные) пути решения задачи. Я об этом уже писал. Зачем восстианавливать именно то, что было "на руках" у торговца перед нападением? Если хочется правдаподобности, то достаточно восстановить "типовой" набор товаров торговца. И для этого достаточно имеющегося движка. И это делается очень просто. И никак не портит игровой процесс. Исчезновение товаров при нападении является куда более сильным допущением. И то, что после нападения на торговца ГГ не становится преследуемым преступником - тоже.

Системно надо мыслить, а не надувать щеки: "мы в 21 веке"! Тогда вам и не придется биться головой о стену хоть с расширителями, хоть без них.

Вода, вода, опять вода...одна вода. Не видя в деле твою систему, трудно воспринимать твои слова серьезно. Бьешься ты как раз, не понимая того, что костыли как ты их называешь и есть тот ключ, с которым все становится легко и просто. Уже все модостроители - и наши и немцы и поляки, которые могут сделать что то серьезное сидят на костылях/расширителях. Один ты тут уперто кому то доказываешь, что мир плоский, а не круглый. Мне интересно было бы взглянуть на твою системную реализацию например функции того же урона по ГГ ну или скажем триалога НПС. А пока весь этот твой "системный" подход вызывает только смех. Не я конечно понимаю, что обычным способом можно много чего сделать. Но рано или поздно наступит такой момент, а он наступит поверь, когда ты не сможешь этого сделать в силу того, что твой инструмент разработки давно устарел и не способен на большее.
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
А мне и так "легко и просто". Я задачу решаю простыми средствами. Более простыми, чем с применением костылей.
И я ничего никому не доказываю. Просто тут многие утверждают, что эту задачу невозможно решить без "расширителей". А я просто говорю, что она без них решается очень легко. Вот и все. И мне не совсем понятно, почему одного это "просто бесит", а другому "трудно воспринимать".

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

А что до того, что "другие все сидят", так они тоже вольны в своих действиях. Им это интересно. А мне заковыристых инструментов программирования с избытком хватает на работе. А в модостроении меня больше увлекает развитие сюжетной линии. Если бы была возможность переложить кодирование на кого-нибудь другого, я давно бы так и сделал. Вместо этого мне приходится тратить остатки свободного времени на (например) освоение моделирования локаций. И я еще стану усложнять себе жизнь "расширителями", когда я легко обхожусь без них?

PS: Кстати. Не сочиняйте новых слов без необходимости

Толковый словарь Ушакова написал(а):
ДИАЛ’ОГ, диалога, ·муж. (·греч. dialogos).
1. Разговор между двумя или несколькими лицами.
А слова "триалог" в русском языке нет.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
А мне и так "легко и просто". Я задачу решаю простыми средствами. Более простыми, чем с применением костылей.
И я ничего никому не доказываю. Просто тут многие утверждают, что эту задачу невозможно решить без "расширителей". А я просто говорю, что она без них решается очень легко. Вот и все. И мне не совсем понятно, почему одного это "просто бесит", а другому "трудно воспринимать".

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

А что до того, что "другие все сидят", так они тоже вольны в своих действиях. Им это интересно. А мне заковыристых инструментов программирования с избытком хватает на работе. А в модостроении меня больше увлекает развитие сюжетной линии. Если бы была возможность переложить кодирование на кого-нибудь другого, я давно бы так и сделал. Вместо этого мне приходится тратить остатки свободного времени на (например) освоение моделирования локаций. И я еще стану усложнять себе жизнь "расширителями", когда я легко обхожусь без них?

PS: Кстати. Не сочиняйте новых слов без необходимости


А слова "триалог" в русском языке нет.

Я тебе написал что тебе надо решить твоими простыми средствами - так реши же ;) Зачем опять столько воды...ближе к делу, как говорится. Вот тогда это уже будет предметный разговор. А сейчас только пустые слова.

з.ы. Если что это не русское слово, даже не слово а термин в одном из любимых тобой костылей.
 

НастасьСанна

Участник форума
Регистрация
6 Дек 2012
Сообщения
351
Благодарности
521
Баллы
325
икарус что ли? а че там больше 3х нльзя?
ЛеГо на базе Икаруса. Можно сколько угодно добавить NPC в диалог, но реализация не очень у этой конкретно возможности.
 
Сверху Снизу