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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

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

Не стесняюсь спросить....

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Story\B_Story\C_NpcIsInQuarter.d(116): Внимание: Функция должна возвращать значение

func int C_NpcIsInQuarter(var C_Npc slf)
{
if(C_IsQuarterNearest(slf,Q_KASERNE))
{
return Q_KASERNE;
};
if(C_IsQuarterNearest(slf,Q_GALGEN))
{
return Q_GALGEN;
};
if(C_IsQuarterNearest(slf,Q_MARKT))
{
return Q_MARKT;
};
if(C_IsQuarterNearest(slf,Q_TEMPEL))
{
return Q_TEMPEL;
};
if(C_IsQuarterNearest(slf,Q_UNTERSTADT))
{
return Q_UNTERSTADT;
};
if(C_IsQuarterNearest(slf,Q_HAFEN))
{
return Q_HAFEN;
};
if(C_IsQuarterNearest(slf,Q_OBERSTADT))
{
return Q_OBERSTADT;
};
};

const int Q_KASERNE = 1;
const int Q_GALGEN = 2;
const int Q_MARKT = 3;
const int Q_TEMPEL = 4;
const int Q_UNTERSTADT = 5;
const int Q_HAFEN = 6;
const int Q_OBERSTADT = 7;

Если поставлю возврат число больше 7 или меньше 1 и при проверке в движке, если число не находится в диапазоне от 1 до 7 снова проверить. Будет зацикливание которое может привести к перегреву процессора. А если поставлю возврат любое число от 1 до 7 будет нарушение в игре.

Чтобы по версию 3.14 всё переделать, мне нужен движок в открытом виде. Т.к. с этими "Внимание: Функция должна возвращать значение" уже достали (111 вниманий из которых 103 это "Внимание: Функция должна возвращать значение").

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

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
Если поставлю возврат число больше 7 или меньше 1 и при проверке в движке, если число не находится в диапазоне от 1 до 7 снова проверить. Будет зацикливание которое может привести к перегреву процессора. А если поставлю возврат любое число от 1 до 7 будет нарушение в игре.
Чтобы по версию 3.14 всё переделать, мне нужен движок в открытом виде. Т.к. с этими "Внимание: Функция должна возвращать значение" уже достали (111 вниманий из которых 103 это "Внимание: Функция должна возвращать значение").
Ну ппц, блин, сделай так в конце блока этой функции:
Код:
    ...
    if(C_IsQuarterNearest(slf,Q_OBERSTADT))
    {
        return Q_OBERSTADT;
    };
    return 0; //или return FALSE; что равнозначно (!)
};
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Ну ппц, блин, сделай так в конце блока этой функции:
Код:
    ...
    if(C_IsQuarterNearest(slf,Q_OBERSTADT))
    {
        return Q_OBERSTADT;
    };
    return 0; //или return FALSE; что равнозначно (!)
};


func int C_GetDistToCenter(var C_Npc slf,var int quarter)
{
var int dist;
if(quarter == Q_KASERNE)
{
if(Npc_GetDistToWP(slf,"NW_CITY_HABOUR_KASERN_CENTRE_03") < Npc_GetDistToWP(slf,"NW_CITY_KASERN_ARMORY_SHARP"))
{
dist = Npc_GetDistToWP(slf,"NW_CITY_HABOUR_KASERN_CENTRE_03");
}
else
{
dist = Npc_GetDistToWP(slf,"NW_CITY_KASERN_ARMORY_SHARP");
};
}
else if(quarter == Q_GALGEN)
{
dist = Npc_GetDistToWP(slf,"NW_CITY_MERCHANT_PATH_33_B");
if(dist > 1900)
{
dist = 100000;
};
}
else if(quarter == Q_MARKT)
{
dist = Npc_GetDistToWP(slf,"NW_CITY_MERCHANT_PATH_36");
if(dist > 2300)
{
dist = 100000;
};
}
else if(quarter == Q_TEMPEL)
{
dist = Npc_GetDistToWP(slf,"NW_CITY_MERCHANT_TEMPLE_FRONT");
}
else if(quarter == Q_UNTERSTADT)
{
dist = Npc_GetDistToWP(slf,"NW_CITY_MAINSTREET_05");
}
else if(quarter == Q_HAFEN)
{
if(Npc_GetDistToWP(slf,"NW_CITY_HABOUR_POOR_AREA_PATH_07") < Npc_GetDistToWP(slf,"NW_CITY_HABOUR_SMALLTALK_02"))
{
dist = Npc_GetDistToWP(slf,"NW_CITY_HABOUR_POOR_AREA_PATH_07");
}
else
{
dist = Npc_GetDistToWP(slf,"NW_CITY_HABOUR_SMALLTALK_02");
};
}
else if(quarter == Q_OBERSTADT)
{
if((Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_04") < Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_16")) && (Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_04") < Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_18")))
{
dist = Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_04");
};
if((Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_16") < Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_04")) && (Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_16") < Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_18")))
{
dist = Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_16");
};
if((Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_18") < Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_04")) && (Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_18") < Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_16")))
{
dist = Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_18");
};
}
else
{
PrintPlus("WRONG Q-PARAMETER!");
};
return dist;
};

Вот чего я боюсь

PrintPlus("WRONG Q-PARAMETER!");

и возврат по новой определения дистанции

return dist;

Классическое зацикливание функции.

Как отключить эти "умные" внимания?

+ как реализовать (раз полная переделка мода) систему напарников: чтобы информация из одного игрового мира передавалась в другой по 2 людям и одному животному (какие они параметры имели, что у них в инвентаре было и т.д.) Т.к. в Risen такая система есть и она работает.

Если умер напарник то он возрождается т.к. когда повышается уровень ГГ то к числу перерождений у напарника добавляется 1 единица.
 
Последнее редактирование:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
Вот чего я боюсь
PrintPlus("WRONG Q-PARAMETER!");
и возврат по новой определения дистанции
return dist;
Я не совсем понял что это за файл и откуда он вообще, это твое творение?

Классическое зацикливание функции.
Если есть зацикливание значит метод реализации ты выбрал не верный, надо искать другое решение.

Как отключить эти "умные" внимания?
Их отключить нельзя, это синтаксис скриптового языка Дедал, просто скрипты надо писать правильно руководствуясь его грамматикой, правилами (!)

+ как реализовать (раз полная переделка мода) систему напарников: чтобы информация из одного игрового мира передавалась в другой по 2 людям и одному животному (какие они параметры имели, что у них в инвентаре было и т.д.)
Возможно имеет смысл сделать клоны инстанций каждого отдельно взятого Нпс, для каждого конкретного мира, с постфиксом мира, например:
BAU_7032_Fedy_NW.d
BAU_7032_Fedy_OW.d
BAU_7032_Fedy_ADW.d

Где, постфик это миры: NW - Хориниса; OW - Миненталя; ADW - Яркендара..

Если нужно перенести актуальную/текущую статистику НПС, то возможно имеет смысл ее предварительно скинуть в переменные для конкретного Нпс, или массив переменных.
И использовать при загрузке нового мира оттуда..
Это если я тебя правильно понял.. ::)
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Я не совсем понял что это за файл и откуда он вообще, это твое творение?


Если есть зацикливание значит метод реализации ты выбрал не верный, надо искать другое решение.


Их отключить нельзя, это синтаксис скриптового языка Дедал, просто скрипты надо писать правильно руководствуясь его грамматикой, правилами (!)


Возможно имеет смысл сделать клоны инстанций каждого отдельно взятого Нпс, для каждого конкретного мира, с постфиксом мира, например:
BAU_7032_Fedy_NW.d
BAU_7032_Fedy_OW.d
BAU_7032_Fedy_ADW.d

Где, постфик это миры: NW - Хориниса; OW - Миненталя; ADW - Яркендара..

Если нужно перенести актуальную/текущую статистику НПС, то возможно имеет смысл ее предварительно скинуть в переменные для конкретного Нпс, или массив переменных.
И использовать при загрузке нового мира оттуда..
Это если я тебя правильно понял.. ::)

DJG_705_Angar_DI.d и DJG_705_Angar_NW.d ничем не отличаются, кроме
CreateInvItems(self,ItPo_Health_02,6);
CreateInvItems(self,ItMi_OldCoin,1);

Но т.к. возможно реализовать учителя навыков напарника, увеличить его силу, ловкость, Mana, и т.д.. То мне нужно, чтобы напарнику с OldWorld локации досталось тоже самое чему он обучился в Newworld. Т.к. человека можно обучать через "B_SetAttributesToChapter(self,?);", а вот волкодава нужно отдельно обучать т.к. это животное и оно имеет в отличии от NPC отдельные параметры для силы, ловкость, Mana, HP.

Как мне передавать параметры из одного игрового мира в другой?
Снова копированием параметров?

+ даже в стандартном исполнении Пираний не вижу копирования инвентаря. Т.е. Напарник в Newworld получил сначала броню ITAR_CorAngar, после получил ITAR_AVATAR. Как мне передать информацию напарнику в Oldworld, что напарник в Newworld имел две брони ITAR_CorAngar и ITAR_AVATAR.
Тоже самое с мечами и т.д.
Тут один вариант, сразу во время передачи предмета его клонировать на нужное число NPC по разным мирам. Но это при варианте добавить, но ведь Игрок не Абрамович и он должен иметь возможность попросить назад предмет.
Т.е. реализовывать удаление у всех NPC по разным мира предметов?

Но с волкодавом проблемы в городе, если с ГГ кто-то затеял драку, он кидается на обидчика и сразу все вокруг начинают избивать волкодава. Как это исправить? (В городе пока ГГ не тронут на волкодава внимания не обращают, словно он овца)
 
Последнее редактирование:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
DJG_705_Angar_DI.d и DJG_705_Angar_NW.d ничем не отличаются, кроме
Отличаются тем что один используется на Ирдорате, а инстанция другого в Хоринисе.
Так работает движок игры с Нпс.

Но т.к. возможно реализовать учителя навыков напарника, увеличить его силу, ловкость, Mana, и т.д.. То мне нужно, чтобы напарнику с OldWorld локации досталось тоже самое чему он обучился в Newworld. Т.к. человека можно обучать через "B_SetAttributesToChapter(self,?);", а вот волкодава нужно отдельно обучать т.к. это животное и оно имеет в отличии от NPC отдельные параметры для силы, ловкость, Mana, HP.
Повторяю вопрос:
Что мешает создать инстанцию с заданными или требуемыми параметрами и навыками для конкретного Нпс в конкретном мире, и использовать ее ?!

Как мне передавать параметры из одного игрового мира в другой?
Снова копированием параметров?
Да, в некоторых случаях, это помогает, если значения сильно разнятся..
Или сразу создавай инстанцию Нпс со всем требуемым лутом..


+ даже в стандартном исполнении Пираний не вижу копирования инвентаря. Т.е. Напарник в Newworld получил сначала броню ITAR_CorAngar, после получил ITAR_AVATAR. Как мне передать информацию напарнику в Oldworld, что напарник в Newworld имел две брони ITAR_CorAngar и ITAR_AVATAR.
Ну возможно в их случае оно и не требовалось, а раз тебе это нужно, то создавай копию Непеся с уже прописанными вещами в инвентаре(если кол-во их 100% известно и не изменно).
Если числа плавающие и изменяемые, то фиксируй их в переменных, и после генерации Нпс в мире игры правь количество и число итемов в его инвентаре, так как тебе нужно.

Тоже самое с мечами и т.д.
Тут один вариант, сразу во время передачи предмета его клонировать на нужное число NPC по разным мирам. Но это при варианте добавить, но ведь Игрок не Абрамович и он должен иметь возможность попросить назад предмет.
Т.е. реализовывать удаление у всех NPC по разным мира предметов?
Ничего не понял..
Если тебе надо чтобы меч Нпс, был в руках этого-же Нпс, но с другой инстанцией и в другом мире, то:
1. получаешь ссылку на ИД предмета оружия, заносишь ее в переменную.
2. при вставке Нпс в новый мир, экипируешь его этим оружием вытаскивая значение его ИД из переменной.
Ну или как-то так, в чем здесь проблема ?!

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

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Отличаются тем что один используется на Ирдорате, а инстанция другого в Хоринисе.
Так работает движок игры с Нпс.


Повторяю вопрос:
Что мешает создать инстанцию с заданными или требуемыми параметрами и навыками для конкретного Нпс в конкретном мире, и использовать ее ?!


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



Ну возможно в их случае оно и не требовалось, а раз тебе это нужно, то создавай копию Непеся с уже прописанными вещами в инвентаре(если кол-во их 100% известно и не изменно).
Если числа плавающие и изменяемые, то фиксируй их в переменных, и после генерации Нпс в мире игры правь количество и число итемов в его инвентаре, так как тебе нужно.


Ничего не понял..
Если тебе надо чтобы меч Нпс, был в руках этого-же Нпс, но с другой инстанцией и в другом мире, то:
1. получаешь ссылку на ИД предмета оружия, заносишь ее в переменную.
2. при вставке Нпс в новый мир, экипируешь его этим оружием вытаскивая значение его ИД из переменной.
Ну или как-то так, в чем здесь проблема ?!
Я реализовываю не только возможность отдать предмет, но и возможность забрать предмет у NPC. Сейчас у тебя был меч 45 сила 45 повреждений и ты его напарнику отдаёшь. После тебе достался меч 65 сила и 65 повреждений и ты его напарнику отдаёшь, а меч на 45 силы и 45 повреждений можно и забрать, чтобы продать.

В зависимости от уровня ГГ можно и ставить изменение B_SetAttributesToChapter(self,?); т.к. в игре до 30 главы прописаны изменения NPC.

Насчёт странного поведения NPC в городе с волкодавом, ответа всё ещё ожидаю.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
Я реализовываю не только возможность отдать предмет, но и возможность забрать предмет у NPC. Сейчас у тебя был меч 45 сила 45 повреждений и ты его напарнику отдаёшь. После тебе достался меч 65 сила и 65 повреждений и ты его напарнику отдаёшь, а меч на 45 силы и 45 повреждений можно и забрать, чтобы продать.
А можно и удалить как хлам во время передачи нового меча на (65 силы и 65 повреждений)..

Но с волкодавом проблемы в городе, если с ГГ кто-то затеял драку, он кидается на обидчика и сразу все вокруг начинают избивать волкодава. Как это исправить? (В городе пока ГГ не тронут на волкодава внимания не обращают, словно он овца)
Попробуй изменять ему Гильдию/отношение, если псина в городе, в функции атаки через условия местонахождения, например..
Проставляя аналогичное значение как у портовых алкашей, которых бьешь, и на которых не агрятся..

Будет псинка с человеческим лицом, подумаешь невидаль.. ::)
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
А можно и удалить как хлам во время передачи нового меча на (65 силы и 65 повреждений)..


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

Будет псинка с человеческим лицом, подумаешь невидаль.. ::)

const int GIL_PAL = 1;
const int GIL_MIL = 2;
const int GIL_VLK = 3;
const int GIL_KDF = 4;
const int GIL_NOV = 5;
const int GIL_DJG = 6;
const int GIL_SLD = 7;
const int GIL_BAU = 8;
const int GIL_BDT = 9;
const int GIL_STRF = 10;
const int GIL_DMT = 11;
const int GIL_OUT = 12;
const int GIL_PIR = 13;
const int GIL_KDW = 14;
const int GIL_EMPTY_D = 15;

Только одна осталась свободная гильдия или ещё можно добавлять?
Т.к. для волкодава придётся новую гильдию создавать. А у меня и так новых гильдий Тёмные маги, Наёмные убийцы, Охотники, Купцы и можно ещё добавить Теневых убийц (чтобы игрок за оба лагеря мог поиграть). Итого нужно 6 новых гильдий.

P.S. И это сейчас, когда новых локаций нет. С новыми локациями около 10 новых гильдий нужно.

И возможно ли во время разговора менять этот параметр npcType = NPCTYPE_FRIEND;, чтобы напарнику сказать "веди себя мирно" и параметр NPCTYPE_FRIEND, "веди себя осторожно" и параметр npctype_main срабатывал?

Вариант изменения отношения к ГГ определённого NPC от дружелюбного до враждебного. Из-за разговора с напарником. (Этот вариант из Dragon Age мною взят)

Т.к. один из напарников ГГ будет амазонка и если игрок достигнет определённого уровня отношений, то будет свадьба.
 
Последнее редактирование:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
Только одна осталась свободная гильдия или ещё можно добавлять?
1. Зачем псине новая гильдия ?!
Если ее можно добавить как Нпс в шкуре псины, смотри как драконы сделаны или овца Лизель, например.

Итого нужно 6 новых гильдий.
Я уже не помню но 6 гильдий много, в оригинальных скриптах есть место только для этих:
Код:
const int GIL_EMPTY_D = 15; //(пусто)
const int GIL_EMPTY_X = 63; //(пусто)
const int GIL_EMPTY_Y = 64; //(пусто)
const int GIL_EMPTY_Z = 65; //(пусто)

P.S. И это сейчас, когда новых локаций нет. С новыми локациями около 10 новых гильдий нужно.
Тебя опять куда-то в глобализацию понесло...

И возможно ли во время разговора менять этот параметр npcType = NPCTYPE_FRIEND;, чтобы напарнику сказать "веди себя мирно" и параметр NPCTYPE_FRIEND, "веди себя осторожно" и параметр npctype_main срабатывал?
Да, вполне можно менять отношения к непесю или группе непесей(гильдии).
Примеры есть в игре, используй поиск в проекте сурстера по NPCTYPE_FRIEND, например:
Код:
func void DIA_Sergio_Start_Info()
{
    AI_Output(other,self,"DIA_Sergio_Start_15_00");    //Ты должен сопровождать меня к Проходу.
    AI_Output(self,other,"DIA_Sergio_Start_04_01");    //Хорошо, я сделаю это. Я знаю дорогу, иди за мной.
    AI_StopProcessInfos(self);
    self.aivar[AIV_PARTYMEMBER] = TRUE;
    self.npcType = NPCTYPE_FRIEND;
    Npc_ExchangeRoutine(self,"GUIDE");
};

Вариант изменения отношения к ГГ определённого NPC от дружелюбного до враждебного. Из-за разговора с напарником. (Этот вариант из Dragon Age мною взят)
В оригинале Готы 2 тоже где-то было еще до Dragon Age.. :D

Т.к. один из напарников ГГ будет амазонка и если игрок достигнет определённого уровня отношений, то будет свадьба.
Ну вот, осталось тока поженить их через скрипты...*popcorn*
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Раз с волкодавом можно гильдию человека добавить, тогда вопрос как сделать скелета, (попытки сделать как дракона не удались).
Мне нужно чтобы у тёмных магов сбежали 3 скелета и у игрока есть сутки их найти. Чтобы со скелетами возможно было поговорить, игроку выдаётся 3 кости (по 1 на каждого скелета). Если игрок находит скелета, происходит диалог и у игрока удаляется одна кость. Если все скелеты найдены за сутки, то игрок сдаёт квест.

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

Эту часть, мне не удалось реализовать. Пришлось в самих скелетов положить кости.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
Раз с волкодавом можно гильдию человека добавить, тогда вопрос как сделать скелета, (попытки сделать как дракона не удались).
Мне нужно чтобы у тёмных магов сбежали 3 скелета и у игрока есть сутки их найти. Чтобы со скелетами возможно было поговорить, игроку выдаётся 3 кости (по 1 на каждого скелета). Если игрок находит скелете, происходит диалог и у игрока удаляется одна кость. Если все скелеты найдены за сутки, то игрок сдаёт квест.
Делаешь обычного Нпс в скрипте, с прототипом или без в зависимости что требуется, а вижуал собачишь ему/им от скелетона, все..
Чувак в скелете на выходе..

Т.е. скелет от человека ничем не отличается кроме Гильдии и визуалом..
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Делаешь обычного Нпс в скрипте, с прототипом или без в зависимости что требуется, а вижуал собачишь ему/им от скелетона, все..
Чувак в скелете на выходе..

Т.е. скелет от человека ничем не отличается кроме Гильдии и визуалом..

Обязательно всё повторять?

Mdl_SetVisual(self,"HumanS.mds");
Mdl_ApplyOverlayMds(self,"humans_1hST1.mds");
Mdl_ApplyOverlayMds(self,"humans_2hST2.mds");
Mdl_ApplyOverlayMds(self,"humans_BowT1.mds");
Mdl_ApplyOverlayMds(self,"humans_CBowT1.mds");
Mdl_ApplyOverlayMds(self,"humans_skeleton.mds");
Mdl_SetVisualBody(self,"Ske_Body2",DEFAULT,DEFAULT,"",DEFAULT,DEFAULT,-1);

Т.к. у человека только Mdl_ApplyOverlayMds(self,"Humans_Relaxed.mds");

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

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
Mdl_ApplyOverlayMds(self,"humans_skeleton.mds");
Боюсь соврать, но по-моему, данного оверлея в Готике 2 нет. Он есть только в Готике 1.
Для готики 2 нужно это:
Код:
Mdl_SetVisual(self,"HumanS.mds");
Mdl_SetVisualBody(self,"Ske_Body2",DEFAULT,DEFAULT,"",DEFAULT,DEFAULT,-1);

И то, я бы проверил, что Ske_Body2.ASC в компилированном виде в Готике 2 есть. А сам скрипт не огрызок скрипта Г1.

Да, на заметку: скелеты в Готике 1 и 2 реализованы по-разному в плане "вижуала".

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

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
Обязательно всё повторять?
Все зависит от того что ты делаешь.
Если тупо одну инстанцию, то прототип клепать наверное смысла не имеет, достаточно просто указать:
Код:
instance BAU_50005_Addon_Trupik(Npc_Default)
{
    name[0] = "Трупик";
    npcType = npctype_main;
    guild = GIL_NONE;
    level = 4;
    flags = 0;
    voice = 3;
    id = 50005;
    flags = NPC_FLAG_IMMORTAL;
    attribute[ATR_STRENGTH] = 20;
    attribute[ATR_DEXTERITY] = 10;
    attribute[ATR_MANA_MAX] = 0;
    attribute[ATR_MANA] = 0;
    attribute[ATR_HITPOINTS_MAX] = 88;
    attribute[ATR_HITPOINTS] = 88;
    Mdl_SetVisual(self,"HUMANS.MDS");
    Mdl_SetVisualBody(self,"Ske_Body",DEFAULT,DEFAULT,"",DEFAULT,DEFAULT,-1);
    //или так: Mdl_SetVisualBody(self,"Ske_Body2",DEFAULT,DEFAULT,"",DEFAULT,DEFAULT,-1);
    fight_tactic = FAI_HUMAN_STRONG;
    EquipItem(self,ItMw_1h_Sld_Sword);
    EquipItem(self,ItRw_Mil_Crossbow);
    B_CreateAmbientInv(self);
    Npc_SetTalentSkill(self,NPC_TALENT_1H,1);
    daily_routine = Rtn_Start_50005;
};
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Доброе утро. Как можно ускорить сверку скриптов?

instance ITAR_PIR_L_Addon(C_Item)
{
name = "Одежда пирата";
mainflag = ITEM_KAT_ARMOR;
flags = 0;
on_equip = equip_sss171;
on_unequip = unequip_sss171;
protection[PROT_EDGE] = 40;
protection[PROT_BLUNT] = 40;
protection[PROT_POINT] = 40;
protection[PROT_FIRE] = 0;
protection[PROT_MAGIC] = 0;
value = VALUE_ITAR_PIR_L_Addon;
wear = WEAR_TORSO;
visual = "ItAr_PIR_L_ADDON.3ds";
visual_change = "Armor_Pir_L_Addon.ASC";
visual_skin = 0;
material = MAT_LEATHER;
description = name;
text[1] = NAME_Prot_Edge;
count[1] = protection[PROT_EDGE];
text[2] = NAME_Prot_Point;
count[2] = protection[PROT_POINT];
text[3] = NAME_Prot_Fire;
count[3] = protection[PROT_FIRE];
text[4] = NAME_Prot_Magic;
count[4] = protection[PROT_MAGIC];
text[5] = NAME_Value;
count[5] = value;
};


func void equip_sss171()
{
KG_3 = 16;
equip_kgmaximum();
};

func void unequip_sss171()
{
unequip_kgm3();
unequip_kgmaximum();
};

instance ITAR_PIR_L_Addon(C_Item)
{
name = "Одежда пирата";
mainflag = ITEM_KAT_ARMOR;
flags = 0;
protection[PROT_EDGE] = 40;
protection[PROT_BLUNT] = 40;
protection[PROT_POINT] = 40;
protection[PROT_FIRE] = 0;
protection[PROT_MAGIC] = 0;
value = VALUE_ITAR_PIR_L_Addon;
wear = WEAR_TORSO;
visual = "ItAr_PIR_L_ADDON.3ds";
visual_change = "Armor_Pir_L_Addon.ASC";
visual_skin = 0;
material = MAT_LEATHER;
description = name;
text[1] = NAME_Prot_Edge;
count[1] = protection[PROT_EDGE];
text[2] = NAME_Prot_Point;
count[2] = protection[PROT_POINT];
text[3] = NAME_Prot_Fire;
count[3] = protection[PROT_FIRE];
text[4] = NAME_Prot_Magic;
count[4] = protection[PROT_MAGIC];
text[5] = NAME_Value;
count[5] = value;
};

Сверка при помощи AkelPad и глаз отнимет до недели (чисто все аналогичные наработки перенести, без проверки работоспособности). После неделя на проверку работы и поиск кусков, что пропущены. После ещё неделя тестеру на проверку всего мода (его работы) и возможные правки на ходу.

Итого Август весь теряется и в 2015 году переходную версию не смогу выпустить из-за потери месяца (из-за версии 3.14).
 

hell9999

Участник форума
Регистрация
12 Апр 2008
Сообщения
2.049
Благодарности
1.170
Баллы
340
Итого Август весь теряется и в 2015 году переходную версию не смогу выпустить из-за потери месяца (из-за версии 3.14).
Господин Лебедев, честно говоря, я несколько офигеваю от Ваших опусов. Вот не пойму, как Вы сподобились выпустить Небесного воина, если даже не понимаете основ модостроя и всем форумом Вам приходится разжевывать азбучные истины?
Зы: Модостроитель, при создании мода, идет на потерю личного времени сознательно, потому, что нацелен на результат и хочет, чтобы его работа увидела свет. У Вас же кроме постоянного нытья и сваливания своих проблем на других (даже софт у него виноват в проблемах!) не наблюдается и капли ответственности создателя перед своим детищем. Не можете выпустить в срок - не выпускайте, но зачем плакаться постоянно о том, что мод постоянно откладывается из-за различных препятствий. Не можете заниматься модостроем - бросьте это дело, не мучайте ни себя, ни остальных посетителей форума!
Зы2: Да простят меня админы, просто накипело!
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
Сверка при помощи AkelPad и глаз отнимет до недели (чисто все аналогичные наработки перенести, без проверки работоспособности).
Кто сравнивает скрипты в AkelPad ?! Для этого есть специализированный софт для сравнения и слияния документов, например WinMerge.
Ставь, изучай доку и пользуйся, с ним вся твоя рутина сведется к одному дню сверок файлов проекта, при аццкой усидчивости..
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Для этого есть специализированный софт для сравнения и слияния документов, например WinMerge.
Мне визуальным отображением больше понравился Beyond Compare, но Лебедев судя по последним страницам темы видимо настолько суровЪ, что легких путей не ищет, а может быть и Георгий не разрешает *trollface*
 
Сверху Снизу