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

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

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

MaGoth

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

Вложения

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

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Да вот была идея оттуда скатать, но с вейпоинтом чета в падлу кумарица(много времени поставь поинт подпиши его запомни название и тд) я вот думаю об альтернативном варианте, хотя вряд ли он возможен, а нельзя сделать деспавн жилы при опр кол-ве заходов к ней?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Re: Імпорт моделей в 3ds max

Дохлый номер импортить меши из г3 какими-то плагинами.
Во первых некто не будет тратить время на их разработку, тк сейчас вышел Ризен и все трудятся над ним.
Во вторых есть 3D Ripper DX на данный момент наилучшая альтернатива плагинам, а вот для Ризена его использовать категорически не рекомендую, по причине того что Рипер "захватывает" активный прогруженый участок карты, что для Г3 является самым оптимальным вариантом, и на против для Ризена тк в ризене на сколько я лично понял, прогружается ВСЯ карта полностью по части дистант-лодов изза чего "рип" выйдет размером со ВСЮ карту Ризена что приведет к неменуемым в крешам(утечки памяти ) при загрузке в Макс, так что вот так.::)
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Saturas, добыча руды происходит из диалога?
 

Saturas


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

Dimmell

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

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Муверы?! ты чтоли смерти моей хочеш?)) Я работу с ивентами на муверах тригах триг листах надух не переношу(времени КРАЙНЕ много)
К тому-же, это лишнее нагромождение в скриптах и идет в - производительность
Так-что не заморачивайте себе мозг)

Зы Сори за оффтоп и идиотский ответ
Иван можеш удалить пост
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Saturas,
заявлено было что:
Буду скатывать с г2а тк визуальный деспавн жилы невозможен на двигле готики.
о смерти и лени ни слова. :D
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Такс буду дальше мучать скриптеров(а точнее математегофф)
Кароче гаваря, как представить Общее кол-во Здоровья или маны в Процентах?
Тоесть запихать % от ХП или маны в переменную.
|______________________________________________________
|
И вот есчо.
class c_mission
{
var string name;
var string description;
var int duration;
var int important;
var func offerConditions;
var func offer;
var func successConditions;
var func success;
var func failureConditions;
var func failure;
var func obsoleteConditions;
var func obsolete;
var func running;
};

Работает-ли этот класс? просто нету времени экспериментировать.
 

jeludok

Участник форума
Регистрация
23 Окт 2010
Сообщения
41
Благодарности
0
Баллы
150
Saturas, если я правильно понял вопрос, то:

x = hero.attribute[ATR_HITPOINTS_MAX] * 23 / 100;// запихнёшь 23% от макс. жизни гг в x
x = hero.attribute[ATR_MANA_MAX] * 23 / 100;// запихнёшь 23% от макс. маны гг в x.

Ну а класс должен работать, чёж ему не работать-то?8)
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Saturas,
И вот есчо. class c_mission
Читать надо тутор Вама, в нем написано что данный класс не используется, с остальным сам разберешся надеюсь. :)
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Saturas,
Читать надо тутор Вама, в нем написано что данный класс не используется, с остальным сам разберешся надеюсь. :)
Дык читал, но вот вдруг он пашет?) хотя особого смысла в нем не вижу)
нада будет глянуть примеры квестов построенных на этом классе из г18)

Saturas, если я правильно понял вопрос, то:

x = hero.attribute[ATR_HITPOINTS_MAX] * 23 / 100;// запихнёшь 23% от макс. жизни гг в x
x = hero.attribute[ATR_MANA_MAX] * 23 / 100;// запихнёшь 23% от макс. маны гг в x.
Да тут я разобрался еще давно но вот просто не учел что делить на 0 нельзя) и при загрузке игры в момент вызова функции которая использует это значение то игра вылетала, вот и подумал что делаю чтота не так)
hero.attribute[ATR_MANA] * 100 / hero.attribute[ATR_MANA_MAX] я вот таким выражением взял за 100% общее кол-во маны ГГ
трабла была в том что что я в условии не поставил hero.attribute[ATR_MANA_MAX] != 0 чтобы исключить деление на 0 и терь все как часы работает)
 

lee

Участник форума
Регистрация
25 Окт 2009
Сообщения
106
Благодарности
0
Баллы
165
У меня тут проблема возникла,захотел кинуть доспех наемника из г1 в г2 при этом не удаляя старых доспехов наемника из г2,добавил анимацию,прописал текстуру,добавил 3д модель,но вышла какая-то хрень:Доспехи из г2 в порядке ,но у них почему то текстура доспеха из г1,а у доспехов из г1 так то все хорошо,но у тяжелого доспеха наемника отсутствует текстура в инвентаре(или когда он просто валяется на земле,он невидим) и когда заходишь в инвентарь ,то игра начинает заедать.Кто поможет?
 

Jr13San


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

Код:
[FONT="Verdana"][B]func void SCRFUNC_TIMER()//функция, вызываемая триггером
{
	var int i;
	
	i = i + 1;
	Print (IntToString(i));
	Wld_SendTrigger("TIMER_01");//вызов триггера
};[/B]

Можно заменить на:

[B]func void SCRFUNC_TIMER()//функция, вызываемая триггером
{
	var int i;
	
	i = i + 1;
	Print (IntToString(i));
	SCRFUNC_TIMER()//вызов внутри функции самой себя
};[/B][/FONT]
Какие мысли на это счёт?
 

Saturas


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

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
Добавил анимацию значит привязал доспех к скелету? Прописал текстуру? Для доспехов текстуры не прописываеться, она применяеться. Просто в максе натащил и все, скрипты тут не задействованы. Добавил 3д модель? А асц-файл добавил?
И распиши нормально весь алгоритм действий. Запятые, это, конечно, круто, но незачем все в одно предложение пихать... я вот лично слабо понял, какая у тебя проблема. Пиши так:

"я хотел сделать это и это.
Делал так:
1 - действие
2 - действие
3 - действие
Но в итоге не работает то и это. Что я сделал не так?"


Тогда и помогут знающие люди:)
 

valbort

Участник форума
Регистрация
22 Мар 2011
Сообщения
10
Благодарности
0
Баллы
150
помогите, пожалуйста! У меня такая проблема :
я создаю диалог, все правильно, вроде, но работают они не так, как ожидаеться. По скрипту нпс останавливает перед собой гг, и просто на него смотрит, хотя должен говорить. Вверху где должен отображаться текст даже окошко не появляется. Спасибо заранее.
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
помогите, пожалуйста! У меня такая проблема :
я создаю диалог, все правильно, вроде, но работают они не так, как ожидаеться. По скрипту нпс останавливает перед собой гг, и просто на него смотрит, хотя должен говорить. Вверху где должен отображаться текст даже окошко не появляется. Спасибо заранее.

Кинь сюда скрипт диалога, будем разбираться *flowers*
 

valbort

Участник форума
Регистрация
22 Мар 2011
Сообщения
10
Благодарности
0
Баллы
150
instance DIA_Elven_FirstIn(C_Info)
{
npc = Non_6000_Elven;
nr = 1;
condition = DIA_Elven_FirstIn_Condition;
information = DIA_Elven_FirstIn_Info;
permanent = 0;
important = 1;
};


func int DIA_Elven_FirstIn_Condition()
{
return 1;
};

func void DIA_Elven_FirstIn_Info()
{
AI_Output(self,other,"DIA_Elven_FirstIn_10_00"); //Как ты здесь очутился?
};


instance DIA_Elven_EXIT(C_Info)
{
npc = Non_6000_Elven;
nr = 999;
condition = DIA_Elven_EXIT_Condition;
information = DIA_Elven_EXIT_Info;
permanent = 1;
description = "Завершить";
};


func int DIA_Elven_EXIT_Condition()
{
return 1;
};

func void DIA_Elven_EXIT_Info()
{
AI_StopProcessInfos(self);
};
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Дай скрипт нпс вероятно трабла в нем, кстати return 1; советую заменить на return true; хотя по идеи разницы 0.
Скорее всего у тебя в скрипте нпс не назначено расписание(ну что он должен делать) а без расписания нпс говорить неможет.
 

valbort

Участник форума
Регистрация
22 Мар 2011
Сообщения
10
Благодарности
0
Баллы
150
Saturas, хм, скорее всего - ты прав, только расписание есть, непись его выполнять не хочет вот он сам :

instance NON_6000_Elven(Npc_Default)
{
name[0] = "Эльф";
npcType = npctype_main;
guild = GIL_None;
level = 25;
voice = 10;
id = 6000;
attribute[ATR_STRENGTH] = 50;
attribute[ATR_DEXTERITY] = 75;
attribute[ATR_MANA_MAX] = 50;
attribute[ATR_MANA] = 50;
attribute[ATR_HITPOINTS_MAX] = 200;
attribute[ATR_HITPOINTS] = 200;
Mdl_SetVisual(self,"HUMANS.MDS");
Mdl_ApplyOverlayMds(self,"Humans_Tired.mds");
Mdl_SetVisualBody(self,"hum_body_Naked0",2,0,"Hum_HEAD_elf",118,1,STT_ARMOR_H);
B_Scale(self);
Mdl_SetModelFatness(self,-1);
fight_tactic = FAI_HUMAN_COWARD;
Npc_SetTalentSkill(self,NPC_TALENT_1H,2);
Npc_SetTalentSkill(self,NPC_TALENT_BOW,3);
EquipItem(self,ItMw_1H_Sword_02);
daily_routine = rtn_start_6000;
};

func void Rtn_start_6000()
{
TA_SitAround(22,0,4,0,"WP_ELVE_G1");
TA_StandAround(4,0,5,0,"WP_ELVE_G1");
TA_SitAround(5,0,22,0,"WP_ELVE_G1");
};
 
Сверху Снизу