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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

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

MaGoth

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

Вложения

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

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Ты сам толком не понимаешь свою "проблему", чего ты хочешь и применительно к чему.

Как раз я и понимаю свою проблему, ты сам её не понял...
В следующий раз, если не чего-то не понимаешь, просто напиши, чтобы описали проблему понятнее. И напишут понятнее. А не устраивать здесь разгворов о том, кто прав, а кто виноват. Здесь раздел форума о скриптинге, а не о том, сам знаешь о чём.:)

Чем конкретнее определена проблема, тем проще найти решение. Причем не одно.
Вот с этим согласен.

Кстати, кто нибудь знает точное время ZS_ цикла? (одной итерации)

var int QInt; //переменная для хранения кол-ва интеграций за 1 секунду
var int STime;//счётчик для секунд

func void ZS_NPC()
{
self.aivar[AIV_StateTime] = 0;
};

func int ZS_NPC_Loop()
{
QInt = QInt + 1;//увеличиваем переменную на 1 с каждой интеграцией

if (Npc_GetStateTime(self) > STime)//реализуем счётчик - "догоняющий"
{
PrintScreen (IntToString(QInt), -1, -1, "font_old_20_white.tga", 1);//вывод на экран кол-ва интеграций за 1 секунду
STime = STime + 1;//реализуем счётчик - "ведущий"
QInt = 0;//сброс значений
};

return LOOP_CONTINUE;
};

func void ZS_NPC_End()
{
PrintScreen ("Выход из функции", -1, -1, "font_old_20_white.tga", 3);
};


instance EBR_9001_Gomez(Npc_Default)
{
name[0] = "Гомез";
npcType = npctype_main;
guild = GIL_PAL;
level = 100;
voice = 11;
id = 9001;
flags = NPC_FLAG_IMMORTAL;
attribute[ATR_STRENGTH] = 95;
attribute[ATR_DEXTERITY] = 80;
attribute[ATR_MANA_MAX] = 0;
attribute[ATR_MANA] = 0;
attribute[ATR_HITPOINTS_MAX] = 400;
attribute[ATR_HITPOINTS] = 400;
Mdl_SetVisual (self, "HUMANS.MDS");
Mdl_ApplyOverlayMds (self, "Humans_Arrogance.mds");
Mdl_SetVisualBody (self, "hum_body_Naked0", 0, 1, "Hum_Head_Bald", 85, 4, ITAR_Raven_Addon);
Mdl_SetModelFatness (self, 0);
Npc_SetTalentSkill (self, NPC_TALENT_2H, 2);
Npc_SetTalentSkill (self, NPC_TALENT_1H, 2);
Npc_SetTalentSkill (self, NPC_TALENT_BOW, 2);
fight_tactic = FAI_HUMAN_MASTER;
start_aistate = ZS_NPC;
};
Дальше создаёшь на своём ZEN вейпоинт для Гомеза.
Через Startup делаешь респаун Гомеза в этом вейпоинте(Wld_InsertNpc (EBR_9001_Gomez, [название вейпоинта]).
Далее на экран должна выводиться цифра - это кол-во интеграций за 1 секунду(QInt).

Вот простая пропорция:
QInt(раз) - 1(сек)
1(раз) - х(сек)

х = 1/QInt - вот по этой формуле придётся считать вручную. Так ты можешь найти время одной интеграции в Loop-цикле.

И если попробовать ударить Гомеза, то цифра должна уменьшиться, т.к. будет израсходована память на обработку анимаций + всяких восприятий и т.д.
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
Jr13San
Да я уже решил свою проблему, просто забыл про Npc_GetStateTime.
 

Wallerstein

Участник форума
Регистрация
26 Апр 2009
Сообщения
965
Благодарности
24
Баллы
195
Помогите! Надо штуку такую обязательно сделать.
Как в диалоге заставить ГГ использовать свиток превращения?
AI_UseItem - эффекта не дает.
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Если честно, то мне самому интересно...
Можно было бы попробовать сэмулировать функцию превращения, но как обратно то превратиться? кто отследит нажатие enter?
Не знаю, может быть есть какой-то флаг, который отвечает за то, что NPC совершил превращение, но какой флаг? и как правильно его установить?
А где описана сама ф-ция превращения?

Вот строчки из начала эмуляции:
AI_PlayAni (hero, "T_MAGRUN_2_TRFSHOOT");
Wld_PlayEffect("SPELLFX_TRANSFORM",hero,hero,0,0,0,FALSE);


а может быть правильнее будет написать так:
AI_PlayAniBS(hero,"T_MAGRUN_2_TRFSHOOT",BS_MOD_TRANSFORMED);
Wld_PlayEffect("SPELLFX_TRANSFORM",hero,hero,0,0,0,FALSE);
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Jr13San,
А где описана сама ф-ция превращения?
Зашита в движке.
Вызывается из скриптов и сработает только при касте заклинания превращения. Все превращения описаны в этом скрипте заклинаний: \AI\Magic\Spells\Spell_Transform.d

А то что ты назвал эмуляцией - простая анимация и визуальный эффект.
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
А то что ты назвал эмуляцией - простая анимация и визуальный эффект.
А кто спорит? Я написал, что это только начало эмуляции, а не вся эмуляция. А смысл мне писать эмуляцию превращения, если обратно нельзя превратиться на enter?
Меня заинтересовали 2 строчки, может быть так попробовать:
AI_ReadySpell(hero,SPL_TrfWolf,5);
AI_UseItem(hero,ItSc_TrfWolf);

Сначала активировать заклинание, а потом уже его юзать. У меня не работает AI_UseItem или я просто криво написал. Кто попрошаристей - проверьте!
Примечание:
Для активации заклинания нужно создать в инвентаре NPC свиток с заклинанием(CreateInvItem(self,ItSc_TrfWolf))


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

Эмуляция, так, на всякий случий:
AI_ReadySpell - готовим заклинание
AI_PlayAni - анимация для NPC
Wld_PlayEffect - эффект превращения
//Затем динамически смени mds, гильдию и т.д.
 

Wallerstein

Участник форума
Регистрация
26 Апр 2009
Сообщения
965
Благодарности
24
Баллы
195
Jr13San простая смена визуализации не сработает в моем случае. Нам лишь нужно,чтобы ПРОСТО ИСПОЛЬЗОВАЛСЯ СВИТОК, А НЕ ЭМУЛЯЦИЯ!

ПС: (ну так ради интереса) А что это за таймер такой и как его выставлять?
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Jr13San простая смена визуализации не сработает в моем случае. Нам лишь нужно,чтобы ПРОСТО ИСПОЛЬЗОВАЛСЯ СВИТОК, А НЕ ЭМУЛЯЦИЯ!
Наверное нельзя реальзовать именно так, как ты задумал. В твоём случае я бы сделал эмуляцию превращения до определённого места(если это квест) или на время с участием убывания манны и т.д.

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

Wallerstein

Участник форума
Регистрация
26 Апр 2009
Сообщения
965
Благодарности
24
Баллы
195
Ничего у меня не получилось, ну и бог с ним, я уже переиграл, но все-равно всем спасибо:)

Вот еще вопросик у меня имеется. Кто делал моды наверняка сталкивался с этим, особенно если имел дело с новой локацией. помните, в оригинале есть карта Хориниса, там её смотришь и видишь свой ползунок перемещения (стрелочка такая или крестик). Я создал свою карту территории, но как сделать, чтоб у меня такой ползунок появился и работал верно не пойму. В скрипте этой карты я нашел какие-то странные циферки
Doc_SetLevelCoords(Document,-28000,50500,95500,-42500); Наверно, это есть координаты того ползунка. Как мне сделать и вычислить свои координаты, чтоб ползунок вообще появился и мог перемещаться?
 

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
чтоб у меня такой ползунок появился и работал верно не поймут
т.е., появлялся и следовал за тобой? Выражайся яснее:)
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Ничего у меня не получилось, ну и бог с ним, я уже переиграл, но все-равно всем спасибо

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

Я создал свою карту территории, но как сделать, чтоб у меня такой ползунок появился и работал верно не пойму.
В скрипте этой карты я нашел какие-то странные циферки
Doc_SetLevelCoords(Document,-28000,50500,95500,-42500); Наверно, это есть координаты того ползунка. Как мне сделать и вычислить свои координаты, чтоб ползунок вообще появился и мог перемещаться?

Если у тебя не появляется ползунок, значит либо у тебя нет его текстуры в папке TEXTURES, либо эта текстура прозрачная, либо ползунок находится за пределами видимости(т.е. неправильно написаны координаты)

А что касается вычисления координат, то начни с создания квадратного или прямоугольного уровня, подгони координаты по краям(бегай по краям уровня и смотри на карту), найди зависимость координат от длины сторон уровня. Попробуй составить формулу. И юзай.

Примечание:
Если не понятен синтаксис, то:
Doc_SetLevelCoords([номер обработчика документа],[лево],[верх],[право],[низ]);

Лично моё мнение на счёт карт, то я потив ползунка. Его сделали потому что без него можно заблудиться => бросить играть в Готику.
Может ещё и GPRS навигатор ГГ в голову встроить? вам самим то не смешно? Я за реалистичность!
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Ничего у меня не получилось, ну и бог с ним, я уже переиграл, но все-равно всем спасибо:)

Вот еще вопросик у меня имеется. Кто делал моды наверняка сталкивался с этим, особенно если имел дело с новой локацией. помните, в оригинале есть карта Хориниса, там её смотришь и видишь свой ползунок перемещения (стрелочка такая или крестик). Я создал свою карту территории, но как сделать, чтоб у меня такой ползунок появился и работал верно не пойму. В скрипте этой карты я нашел какие-то странные циферки
Doc_SetLevelCoords(Document,-28000,50500,95500,-42500); Наверно, это есть координаты того ползунка. Как мне сделать и вычислить свои координаты, чтоб ползунок вообще появился и мог перемещаться?

Могу лишь сказать, смотри пример карт которые я делал для Глобала. Ну и тебе потребуются 3дс Макс и Фотошоп...
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
У меня есть вопрос. Как отследить - просматкивает ли ГГ свой статус? Кто знает, подскажите пожалуйста.
 

Feuermagier


Модостроитель
Регистрация
13 Апр 2008
Сообщения
934
Благодарности
136
Баллы
225
Ребят, у нас есть сама карта, уже и в игре отображается, нам непонятно что конкретно отображают данные координаты:
Код:
Doc_SetLevelCoords(Document,-28000,50500,95500,-42500);
Это
1 Пределы границ карты?
или
2 Это координаты точки, являющейся опорной для карты?
Поясните пожалуйста, если кто знает*flowers*
 
Последнее редактирование модератором:

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Если бы это были координаты точки, являющейся опорной для карты, то достаточно было бы указать (x,y). Хоть я и не занимался картами, но могу сказать, что это связано как с картой(как рисунок), так и с самим уровнем.
Doc - документ или карта
Set - установить
Level - уровень
Coords - координаты

Могу ещё уточнить то, что это какая то ограниченная область.
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Ребят, у нас есть сама карта, уже и в игре отображается, нам непонятно что конкретно отображают данные координаты:
Код:
Doc_SetLevelCoords(Document,-28000,[COLOR="Red"]50500,95500,-42500[/COLOR]);
Это
1 Пределы границ карты?
или
2 Это координаты точки, являющейся опорной для карты?
Поясните пожалуйста, если кто знает*flowers*

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

Lingviston

Участник форума
Регистрация
10 Май 2010
Сообщения
14
Благодарности
0
Баллы
150
ukur
Скажи, я вот пытался в B_AssessDamage прописать нанесение доп. урона. Ну просто ф-ией как у Эссенции жизни прописать прибавку отрицательного здоровья нпц. Да вот не получилось, доп. урон не наносится. Я правильно понимаю, что если я хочу нанести доп. урон, то надо прописывать именно в этой ф-ии?
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Lingviston,
Эта функция регистрирует урон для всех НПЦ людей КРОМЕ ГГ (у ГГ нет восприятия урона)
Кроме того в той функции много условий, которые заканчиваются прерыванием функции return;
Многое зависит от того, в какое место и как ты прописал дополнительный урон, other - в функции атакующий, self - тот кто получил повреждение.
 
Сверху Снизу