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

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

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

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

MaGoth

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

Вложения

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

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Пока напишу скрипт тестовый:
Читал - плакал...
В соседней теме спрашивали насчет ф-ций on_equip, on_unequip ...
Вы хоть почитайте тутор VAMа и попытайтесь понять что и как работает в скриптах и в мире Готики...
Кто мешает в эти функции поставить проверку на любой ваш атрибут/фишку/плюшку?
И прописать типа:
func void Equip_1H_02()
{
if(халапудра >= 200)
{
B_AddFightSkill(self,NPC_TALENT_1H,Waffenbonus_02);
}
else
{
AI_equipArmor(hero,instanse)
PrintScreen"Я не могу это одеть"
}
};
PS. Просто скопировать не получится, не хотите учиться на своих ошибках - учитесь на чужих.
 

unknown111

Участник форума
Регистрация
5 Фев 2013
Сообщения
1.072
Благодарности
1.581
Баллы
290
Всем доброго вечера...
есть небольшой вопросик - а где (в каком скрипте) реализована фишечка, которая позволяет Оркам-Шаманам швырять фаерболлы не задевая сородичей ?:)
и еще вопросик - почему если Human'у присвоить aivar[AIV_MM_REAL_ID] = ID_ORCSHAMAN , он тупит в ближнем бою (не достает оружие и стоит смотрит)?
я просто нулище в скриптах...
 

Defman

Участник форума
Регистрация
26 Май 2013
Сообщения
3.165
Благодарности
245
Баллы
300
Всем доброго вечера...
есть небольшой вопросик - а где (в каком скрипте) реализована фишечка, которая позволяет Оркам-Шаманам швырять фаерболлы не задевая сородичей ?:)
и еще вопросик - почему если Human'у присвоить aivar[AIV_MM_REAL_ID] = ID_ORCSHAMAN , он тупит в ближнем бою (не достает оружие и стоит смотрит)?
я просто нулище в скриптах...

Почитай сначала уроки скриптологии от Vam'а,там подробно расписано что и где.
http://forums.ag.ru/?board=gothic&action=display&s=0&num=1098161614&start=0
А так,все скрипты находятся в Gothic.dat,ищи в NPC
Ответ из разряда: Я видел звёзды, значит, я знаю физико-химические свойства газовой смеси, из которой они состоят. :D Советую и тебе посмотреть, как выращивать помидоры на тяжёлом грунте.
Ты вообще о чем,друг?
 

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
Почитай сначала уроки скриптологии от Vam'а,там подробно расписано что и где.
http://forums.ag.ru/?board=gothic&action=display&s=0&num=1098161614&start=0
А так,все скрипты находятся в Gothic.dat,ищи в NPC

Ответ из разряда: Я видел звёзды, значит, я знаю физико-химические свойства газовой смеси, из которой они состоят. :D Советую и тебе посмотреть, как выращивать помидоры на тяжёлом грунте.
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
я просто нулище в скриптах...
Здесь вас не только научат моды на Готику делать, но и помидоры выращивать... И все это - "на тяжелом грунте" :D
В скриптах нет обработки полета закла, есть только обработка "стрелок-цель" и действие закла в зависимости от типа закла и цели (скрипт C_CanNpcCollideWithSpell.d). Траекторией полета и коллизиями управляет движок и визуалы заклов.
Чтобы доставал оружие надо... прописать чтобы он его доставал, потому что шаманы (ID_ORCSHAMAN) могут использовать только магию (см. B_SelectSpell, B_SelectWeapon). И поиск по проекту по ID_ORCSHAMAN может показать много интересного.
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
А мог бы кто подсказать, как реализовать телепорт непися к герою\предмету? Что-то никак не могу придумать, как такое можно сделать... можно бы конечно юзать функцию вставки скелетов при закле "Армия тьмы", но там в качестве аргумента подходит только прототип, а не инстанция...
 

unknown111

Участник форума
Регистрация
5 Фев 2013
Сообщения
1.072
Благодарности
1.581
Баллы
290
Здесь вас не только научат моды на Готику делать, но и помидоры выращивать... И все это - "на тяжелом грунте" :D
В скриптах нет обработки полета закла, есть только обработка "стрелок-цель" и действие закла в зависимости от типа закла и цели (скрипт C_CanNpcCollideWithSpell.d). Траекторией полета и коллизиями управляет движок и визуалы заклов.
Чтобы доставал оружие надо... прописать чтобы он его доставал, потому что шаманы (ID_ORCSHAMAN) могут использовать только магию (см. B_SelectSpell, B_SelectWeapon). И поиск по проекту по ID_ORCSHAMAN может показать много интересного.

что значит "шаманы могут использовать только магию" если они в игре вблизи достают топор? насколько я понял за это отвечает именно aivar[AIV_MM_REAL_ID] == ID_ORCSHAMAN
Код:
    if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCSHAMAN)
    {
        if(Npc_HasItems(slf,ItRu_InstantFireball) == 0)
        {
            CreateInvItems(slf,ItRu_InstantFireball,1);
        };
        if(Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_MELEE)
        {
            B_ReadySpell(slf,SPL_InstantFireball,SPL_COST_InstantFireball);
            return TRUE;
        }
        else
        {
            return FALSE;
        };
    };
 

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
А мог бы кто подсказать, как реализовать телепорт непися к герою\предмету? Что-то никак не могу придумать, как такое можно сделать... можно бы конечно юзать функцию вставки скелетов при закле "Армия тьмы", но там в качестве аргумента подходит только прототип, а не инстанция...

А чем тебе не нравится стандартные функции
AI_Teleport (npc_101_vasya, Npc_GetNearestWP(hero))
AI_Teleport (npc_101_vasya, Npc_GetNextWP(hero))
AI_Teleport (npc_101_vasya, ItMw_UniqueItemInWorld)

И это не говоря уже о том, что ты можешь пользоваться просто координатами в мире (ибо всё равно юзаешь расширения готики)
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
А чем тебе не нравится стандартные функции
AI_Teleport (npc_101_vasya, Npc_GetNearestWP(hero))
AI_Teleport (npc_101_vasya, Npc_GetNextWP(hero))
AI_Teleport (npc_101_vasya, ItMw_UniqueItemInWorld)

И это не говоря уже о том, что ты можешь пользоваться просто координатами в мире (ибо всё равно юзаешь расширения готики)

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

А в случае телепортации в предмету фишка в том, что предмет должен быть уникален, я правильно понимаю?

Нет, для этого небольшого проекта я расширитель скриптов не юзаю... :)
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
если они в игре вблизи достают топор?
кроме фильтра по ID_ORCSHAMAN, в скриптах еще может быть отсечка по : гильдии, по разделителю люди/орки и т.д. Ищите почему люди с ID_ORCSHAMAN не достают оружие. Значит или НПС прописан неверно (с флагом "всегда магия" и т.д.), или где-то фильтр отсекает вашего НПС.
 

Defman

Участник форума
Регистрация
26 Май 2013
Сообщения
3.165
Благодарности
245
Баллы
300
Скажите,как через скрипты можно вставить своего персонажа в игру на СВОЮ локацию?
то есть у меня есть готовая локация с вейпойнтами,как мне перса закинуть на эту локацию и привязать его к этим вейпойнтам?
 

xterm

Участник форума
Регистрация
25 Июн 2009
Сообщения
5.177
Благодарности
16
Баллы
400
Так Wld_InsertNPC()
И что значит привязать? Расписание персонажа задается в его инстанции, если ты об этом...
 

Defman

Участник форума
Регистрация
26 Май 2013
Сообщения
3.165
Благодарности
245
Баллы
300
Так Wld_InsertNPC()
И что значит привязать? Расписание персонажа задается в его инстанции, если ты об этом...
это я уже понял,про вейпойнты.Но вставка: у меня свой отдельный мир.Как быть?
 

Defman

Участник форума
Регистрация
26 Май 2013
Сообщения
3.165
Благодарности
245
Баллы
300
Читать мой пост в предыдущих темах по твоим вопросам...
спасибо,почитаю.Только как понимать "предыдущих темах"?
кстати,а сабы (титры) к диалогам где пишутся?
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
*** Стартпоинт ставь в мир, через Спейсер.
Будет он, будет и Гг из скриптов по миру бегать.
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Скажите,как через скрипты можно вставить своего персонажа в игру на СВОЮ локацию?
то есть у меня есть готовая локация с вейпойнтами,как мне перса закинуть на эту локацию и привязать его к этим вейпойнтам?
В ф-и Startup создай блок:
func void STARTUP_DJ_Insel_V_01 ()
{
Wld_InsertNpc (Lurker, "FP_ROAM_DARKINSEL_MONSTER_17");
...//здесь прописываешь своих нпс(людей и монстров). Люди спавняться на wp, монстры на fp

};

func void INIT_SUB_DJ_Insel_V_01 ()
{

};

func void INIT_DJ_Insel_V_01 ()
{
B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
B_InitNpcGlobals ();

INIT_SUB_DJ_Insel_V_01();
};
здесь красным выделено та часть текста которую следует заменить на свою. Лучше будет если они будут соответствовать названим мешей уровней на которых происходит растановка нпс, но!!! совсем не обязательно имена можно выбрать произвольно.
Далее идет сбора вышеописанных блоков в один(если у вас их несколько):
FUNC VOID STARTUP_INSEL ()
{
STARTUP_DJ_Insel_I_01 ();
STARTUP_DJ_Insel_II_01 ();
STARTUP_DJ_Insel_III_01 ();
STARTUP_DJ_Insel_IV_01 ();
STARTUP_DJ_Insel_V_01 ();
};
FUNC VOID INIT_INSEL ()
{
INIT_DJ_Insel_I_01 ();
INIT_DJ_Insel_II_01 ();
INIT_DJ_Insel_III_01 ();
INIT_DJ_Insel_IV_01 ();
INIT_DJ_Insel_V_01 ();

B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
B_InitNpcGlobals ();
};
Здесь синим цветом выделена та часть текста соответствующая названию вашего зена. Важно!!! Данное имя и названия зена должны быть идентичными. Например в моем случае зен должен называться INSEL.ZEN

Собственно осталось прописать распорядок в файле инициализации нпс. Думаю с этим у вас проблем не возникнет.
 

Defman

Участник форума
Регистрация
26 Май 2013
Сообщения
3.165
Благодарности
245
Баллы
300
В ф-и Startup создай блок:
func void STARTUP_DJ_Insel_V_01 ()
{
Wld_InsertNpc (Lurker, "FP_ROAM_DARKINSEL_MONSTER_17");
...//здесь прописываешь своих нпс(людей и монстров). Люди спавняться на wp, монстры на fp

};

func void INIT_SUB_DJ_Insel_V_01 ()
{

};

func void INIT_DJ_Insel_V_01 ()
{
B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
B_InitNpcGlobals ();

INIT_SUB_DJ_Insel_V_01();
};
здесь красным выделено та часть текста которую следует заменить на свою. Лучше будет если они будут соответствовать названим мешей уровней на которых происходит растановка нпс, но!!! совсем не обязательно имена можно выбрать произвольно.
Далее идет сбора вышеописанных блоков в один(если у вас их несколько):
FUNC VOID STARTUP_INSEL ()
{
STARTUP_DJ_Insel_I_01 ();
STARTUP_DJ_Insel_II_01 ();
STARTUP_DJ_Insel_III_01 ();
STARTUP_DJ_Insel_IV_01 ();
STARTUP_DJ_Insel_V_01 ();
};
FUNC VOID INIT_INSEL ()
{
INIT_DJ_Insel_I_01 ();
INIT_DJ_Insel_II_01 ();
INIT_DJ_Insel_III_01 ();
INIT_DJ_Insel_IV_01 ();
INIT_DJ_Insel_V_01 ();

B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
B_InitNpcGlobals ();
};
Здесь синим цветом выделена та часть текста соответствующая названию вашего зена. Важно!!! Данное имя и названия зена должны быть идентичными. Например в моем случае зен должен называться INSEL.ZEN
Как все расписано,спасибо,Илот.Вечером проверю и попробую. Распорядок дня уже прописан,там все легко.
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Кстати,а сабы (титры) к диалогам где пишутся?
Все файлы диалогов находяться в директории .../Story/Dialoge. Смотрите как там реализованно и делайте аналогично.
 

Валера

Забанен
Регистрация
27 Сен 2008
Сообщения
2.404
Благодарности
300
Баллы
270
Где находятся файлы, отвечающие за расход выносливости?
Сколько раз играю в Ребаланс версии 2.1, выносливость расходуется только на добычу руды и золота. Хочу посмотреть в скриптах
 
Сверху Снизу