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

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

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

Lorddemonik

★★★★★
Редактор раздела
Регистрация
17 Дек 2011
Сообщения
1.030
Благодарности
525
Баллы
350
Похоже или мод не правильно собирается, или игра без мода запускается, хотя в стартере я выбираю именно мод.
По шагам путь от компиляции до перемещения в data/work или сборки в .vdf/.modс последущей сборки. Желательно с скринами
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.871
Благодарности
5.309
Баллы
910
В мод файле должна быть следующая структура файлов
Modname\_WORK\DATA\SCRIPTS\_COMPILED - тут лежат скомпилированные датники (Gothic.dat/SFX.dat и прочее)
Modname\_WORK\DATA\SCRIPTS\Content - тут лежит скомпилированный OU.bin

Открой сам свой мод файл и посмотри на его структуру.
 

UghZan3

Участник форума
Регистрация
12 Апр 2019
Сообщения
78
Благодарности
1
Баллы
155
1. компилю
compile.png
2. копирую Gоthci.dat в _compiled, Ou.bin в content/cutscene
Files.png

3. компилю мод
VDFS.png

4. запускаю в стартере(на описание можно не обращать внимание, делал по примеру мода для Г2НВ, там все работало сразу)
start.png

5. вот содержимое файла с описанием мода:
INI:
[INFO]
Title=\'CD\'e5\'EE\'F4\'E8\'F6\'E8\'E0\'EB\'FC\'ED\'EE\'e5 \'EE\'E1\'ED\'EE\'E2\'EB\'e5\'ED\'E8\'e5 \'C32\'CD\'C2
Version=1.08k_mod
Authors=Piranha Bytes
WebPage=http://www.piranha-bytes.com
Description=!<symlink>GothicGame.rtf
Icon=0

[FILES]
vdf=g1_my_patch_v1.mod
game=Content\Gothic
fightai=Content\Fight
menu=System\Menu
camera=System\Camera
music=System\Music
soundeffects=System\SFX
particleseffects=System\ParticleFX
visualeffects=System\VisualFX
outputunits=Content\Cutscene\OU

[SETTINGS]
player=PC_HERO
world=World.zen

[OPTIONS]
show_info=0
force_subtitles=0
force_parameters=

[OVERRIDES]
INTERNAL.extendedMenu=1
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.236
Благодарности
6.222
Баллы
1.565
UghZan3, в третьем пункте ошибка.
Вот тут нужно написать *.* и нажать рядом на плюсик. После этого нажать БилВолум
1614363800900.png
 

UghZan3

Участник форума
Регистрация
12 Апр 2019
Сообщения
78
Благодарности
1
Баллы
155

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.236
Благодарности
6.222
Баллы
1.565
UghZan3, Так, толи лыжи не едут, толи я фуфлыжник.
Нам надо, чтобы этот диалог появился после изучения основ? так?
Вот готовый скрипт.
Найдешь сам отличия?;)
Daedalus:
instance Org_819_Drax_CreaturesBIG(C_Info)
{
    npc = ORG_819_Drax;
    nr = 4;
    condition = Org_819_Drax_Creatures_ConditionBIG;
    information = Org_819_Drax_Creatures_InfoBIG;
    permanent = 1;
    description = "Можешь ли ты рассказать мне еще больше об охоте ?";
};

func int Org_819_Drax_Creatures_ConditionBIG()
{
    if(((Knows_GetTeeth == TRUE) && (Knows_GetFur == TRUE) && (Knows_GetClaws == TRUE) && (Knows_GetHide == TRUE)) && ((Knows_GetFIREWARAN == FALSE) || (Knows_GetSHADOWBEAST == FALSE) || (Knows_GetSWAMPSHARK == FALSE) || (Knows_GetTROLL == FALSE)))
    {
        return TRUE;
    };
    return FALSE;
};

func void Org_819_if_Knows_Get_new_talent()
{
    Info_ClearChoices(Org_819_Drax_CreaturesBIG);
    Info_AddChoice(Org_819_Drax_CreaturesBIG,DIALOG_BACK,Org_819_Drax_Creatures_BACKBIG);
    Info_AddChoice(Org_819_Drax_CreaturesBIG,"Твои советы стоят недешево.",Org_819_Drax_Creatures_PrettyMuch);
    if(Knows_GetFIREWARAN == FALSE)
    {
        Info_AddChoice(Org_819_Drax_CreaturesBIG,"Добывать клыки (2 ед. обучения, 500 кусков руды)",Org_819_Drax_Creatures_FIREWARAN);
    };
    if(Knows_GetSHADOWBEAST == FALSE)
    {
        Info_AddChoice(Org_819_Drax_CreaturesBIG,"Добывать мех (2 ед. обучения, 500 кусков руды)",Org_819_Drax_Creatures_SHADOWBEAST);
    };
    if(Knows_GetSWAMPSHARK == FALSE)
    {
        Info_AddChoice(Org_819_Drax_CreaturesBIG,"Добывать когти (2 ед. обучения, 500 кусков руды)",Org_819_Drax_Creatures_SWAMPSHARK);
    };
    if(Knows_GetTROLL == FALSE)
    {
        Info_AddChoice(Org_819_Drax_CreaturesBIG,"Добывать кожу (2 ед. обучения, 500 кусков руды)",Org_819_Drax_Creatures_TROLL);
    };
}
func void Org_819_Drax_Creatures_InfoBIG()
{
    AI_Output(other,self,"Org_819_Drax_Creatures_15_00");    //Можешь ли ты рассказать мне еще больше об охоте?
    if((Knows_GetFIREWARAN == FALSE) || (Knows_GetSHADOWBEAST == FALSE) || (Knows_GetSWAMPSHARK == FALSE) || (Knows_GetTROLL == FALSE))
    {
        AI_Output(self,hero,"Info_FreemineOrc_GIVEPOTION_17_06");    //Незнакомец нужно КРОТАК, ХАЗ-ТАК, ДВАХКАРР и ОРФ-АНТАК.
        Org_819_if_Knows_Get_new_talent();
    }
    else
    {
        AI_Output(self,other,"Org_819_Drax_Creatures_TaughtAll_06_00");    //Ну вот, я рассказал все, что знал.
    };
};

func void Org_819_Drax_Creatures_BACKBIG()
{
    Info_ClearChoices(Org_819_Drax_CreaturesBIG);
};


func void Org_819_Drax_Creatures_FIREWARAN()
{
    AI_Output(hero,self,"Info_FreemineOrc_FIREWARAN_15_01");    //Что такое КРОТАК?
    if(Npc_HasItems(other,ItMiNugget) >= 500)
    {
        if(other.lp >= 2)
        {
            other.lp = other.lp - 2;
            B_GiveInvItems(other,self,ItMiNugget,500);
            PrintScreen("Изучить: Язык огня",-1,-1,"FONT_OLD_20_WHITE.TGA",2);
            AI_Output(self,hero,"Info_FreemineOrc_FIREWARAN_17_02");    //Быть язык огня! Быть язык ящерица огня!
            Knows_GetFIREWARAN = TRUE;
            Log_CreateTopic(GE_AnimalTrophies,LOG_NOTE);
            B_LogEntry(GE_AnimalTrophies,"Знание о вырезании языка огненной ящерицы.");
        }
        else
        {
            AI_Output(self,other,"Org_819_Drax_Creatures_KEINE_LP_06_00");    //Тебе нужно набраться опыта, иначе мой совет окажется бесполезным для тебя.
            PrintScreen("Недостаточно очков обучения!",-1,-1,"FONT_OLD_20_WHITE.TGA",2);
        };
    }
    else
    {
        AI_Output(self,other,"Org_819_Drax_Creatures_KEIN_ERZ_06_00");    //Прежде покажи руду. Как я уже говорил, все здесь имеет свою цену.
    };
    Org_819_if_Knows_Get_new_talent();
};

func void Org_819_Drax_Creatures_SHADOWBEAST()
{
    AI_Output(hero,self,"Info_FreemineOrc_SHADOWBEAST_Info_15_01");    //Что означает ХАЗ-ТАК?
    if(Npc_HasItems(other,ItMiNugget) >= 500)
    {
        if(other.lp >= 2)
        {
            other.lp = other.lp - 2;
            B_GiveInvItems(other,self,ItMiNugget,500);
            PrintScreen("Изучить: Рог мракориса",-1,-1,"FONT_OLD_20_WHITE.TGA",2);
            AI_Output(self,hero,"Info_FreemineOrc_SHADOWBEAST_Info_17_02");    //Быть рог мракориса. Острый рог, как нож, твердый, как камень.
            Knows_GetSHADOWBEAST = TRUE;
            Log_CreateTopic(GE_AnimalTrophies,LOG_NOTE);
            B_LogEntry(GE_AnimalTrophies,"Знание о том, как достать рог мракориса.");
        }
        else
        {
            AI_Output(self,other,"Org_819_Drax_Creatures_KEINE_LP_06_01");    //У тебя не хватит опыта, чтобы воспользоваться моим советом.
            PrintScreen("Недостаточно очков обучения!",-1,-1,"FONT_OLD_20_WHITE.TGA",2);
        };
    }
    else
    {
        AI_Output(self,other,"Org_819_Drax_Creatures_KEIN_ERZ_06_01");    //Прежде покажи руду. Как я уже говорил, все здесь имеет свою цену.
    };
    Org_819_if_Knows_Get_new_talent();
};

func void Org_819_Drax_Creatures_SWAMPSHARK()
{
    AI_Output(hero,self,"Info_FreemineOrc_SWAMPSHARK_15_01");    //ДВАХКАРР? А это что?
    if(Npc_HasItems(other,ItMiNugget) >= 500)
    {
        if(other.lp >= 2)
        {
            other.lp = other.lp - 2;
            B_GiveInvItems(other,self,ItMiNugget,500);
            PrintScreen("Изучить: Зуб болотожора",-1,-1,"FONT_OLD_20_WHITE.TGA",2);
            AI_Output(self,hero,"Info_FreemineOrc_SWAMPSHARK_17_02");    //Быть зуб болотожора. Когда этот зуб кусать, жертва никогда не убегать.
            Knows_GetSWAMPSHARK = TRUE;
            Log_CreateTopic(GE_AnimalTrophies,LOG_NOTE);
            B_LogEntry(GE_AnimalTrophies,"Знание о том, как вырезать зубы болотожоров.");
        }
        else
        {
            AI_Output(self,other,"Org_819_Drax_Creatures_KEINE_LP_06_02");    //Сперва наберись опыта, иначе мой совет тебе не пригодится.
            PrintScreen("Недостаточно очков обучения!",-1,-1,"FONT_OLD_20_WHITE.TGA",2);
        };
    }
    else
    {
        AI_Output(self,other,"Org_819_Drax_Creatures_KEIN_ERZ_06_02");    //Прежде покажи руду. Как я уже говорил, все здесь имеет свою цену.
    };
    Org_819_if_Knows_Get_new_talent();
};

func void Org_819_Drax_Creatures_TROLL()
{
    AI_Output(hero,self,"Info_FreemineOrc_TROLL_15_01");    //Что такое ОРФ-АНТАК?
    if(Npc_HasItems(other,ItMiNugget) >= 500)
    {
        if(other.lp >= 2)
        {
            other.lp = other.lp - 2;
            B_GiveInvItems(other,self,ItMiNugget,500);
            PrintScreen("Изучить: Клык тролля",-1,-1,"FONT_OLD_20_WHITE.TGA",2);
            AI_Output(self,hero,"Info_FreemineOrc_TROLL_17_02");    //Быть зуб большой тролль! Делать большой дырка в добыча!
            Knows_GetTROLL = TRUE;
            Log_CreateTopic(GE_AnimalTrophies,LOG_NOTE);
            B_LogEntry(GE_AnimalTrophies,"Знание о добыче клыков тролля.");
        }
        else
        {
            AI_Output(self,other,"Org_819_Drax_Creatures_KEINE_LP_06_03");    //Сперва наберись опыта, иначе мой совет тебе не пригодится.
            PrintScreen("Недостаточно очков обучения!",-1,-1,"FONT_OLD_20_WHITE.TGA",2);
        };
    }
    else
    {
        AI_Output(self,other,"Org_819_Drax_Creatures_KEIN_ERZ_06_03");    //Прежде покажи руду. Как я уже говорил, все здесь имеет свою цену.
    };
    Org_819_if_Knows_Get_new_talent();
};
 

UghZan3

Участник форума
Регистрация
12 Апр 2019
Сообщения
78
Благодарности
1
Баллы
155
MEG@VOLT,
Скомпилил еще три раза, просто добавив в диалоги метку, чтобы понять, что игра идет уже с модом, и почему-то все заработало: и диалоги как надо, и новая охота после изучения обычной появляется.
Не знаю, что случилось.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.236
Благодарности
6.222
Баллы
1.565
UghZan3, И начал я вспоминать про старый косяк игры...
А случайно, нет в папке с игрой, толи в корне, толи в system файлов типа DMP ?
Если есть - грохни, это так называемые кеши.
 

UghZan3

Участник форума
Регистрация
12 Апр 2019
Сообщения
78
Благодарности
1
Баллы
155
MEG@VOLT,
Нет таких файлов в папке с игрой
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.236
Благодарности
6.222
Баллы
1.565
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.045
Благодарности
1.831
Баллы
240
А чё Timestamp такой древний? Почему бы текущую дату не поставить?
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
2. копирую Gоthci.dat в _compiled, Ou.bin в content/cutscene
избыточный пункт..
лучше сделать так..:
1. с помощью программы GothicVDFS.exe (для г1 или г2) распакуй свой мод файл в корень твоего диска Е, например в папку: mymod
структура которой должна быть примерно такой:
E:\mymod\_work\data\Scripts\_compiled
CAMERA.DAT
FIGHT.DAT
GOTHIC.DAT
MENU.DAT
MUSIC.DAT
OUINFO.INF
PARTICLEFX.DAT
SFX.DAT
VISUALFX.DAT
E:\mymod\
_work\DATA\Scripts\content\CUTSCENE
OU.BIN
OU.CSL



* где количество датников и прочих файлов в зависимости от их компиляции.

2. далее в корень диска Е кидаешь эти 2 файла:
mymod.bat - автосборщик томов мод/вдф
mymod.VM - скрипт для программы GothicVDFS.exe

* - для GothicVDFS.exe скорректируй путь на твой, если у тебя на компе он будет отличаться в файле mymod.bat, те где находится эта программа, например:
E:\Games\Gothic\_work\tools\VDFS\GothicVDFS.exe

3. в ГСурсере, в настройках активируй функцию автоставки файлов при компиляции, и укажи путь до игры и/или до каталога сборки, например этот:
E:\Games\Gothic и/или E:\mymod
программа будет копировать эти файлы в указанный каталог автоматически при компиляции..

4. для запуска сборки мод файла используй батник mymod.bat..
в нем, первый параметр строки программа-сборщик мод файлов, второй "E:\mymod.VM" - скрипт VDFS.
а в батнике указан путь до каталога в котором будет собран мод/вдф файл, например:: "E:\mymod-build\mymod.mod"

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

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

Вложения

  • mymod.7z
    493 байт · Просмотры: 4

.OPGWorld.

Участник форума
Регистрация
27 Ноя 2019
Сообщения
25
Благодарности
37
Баллы
115
Подскажите пожалуйста.
На днях решил в "Gothic 3" создать свой небольшой городок.
Дома и неписей я добавил через консольные команды.
А вот как эти самые дома обставить полками, кроватями и остальными атрибутами декора я не знаю((((((((.
Может кто подсказать, может есть какая прога позволяющая расставить декор в домах. За ранее благодарствую!!!
 

Lucidante

Участник форума
Регистрация
27 Авг 2020
Сообщения
14
Благодарности
4
Баллы
60
Доброго времени суток, товарищи!
Возник вопрос по скриптам. Сам в них только начинающий.
В Г1 добавляю кольца регенерации маны.
Сам код выглядит таким образом:
instance ITEM_MagicRegen_03(C_Item)
{
name = "Кольцо сильной регенерации маны";
mainflag = ITEM_MagicRegen_03;
flags = ITEM_MISSION | ITEM_RING;
value = 1000;
cond_atr[2] = ATR_MANA_MAX;
cond_value[2] = 100;
visual = "ItMi_Ring_03.3ds";
material = MAT_METAL;
on_equip = Equip_ITMI_MagicRegen_03;
on_unequip = UnEquip_ITMI_MagicRegen_03;
description = name;
text[0] = "Количество маны в секунду";
count[0] = 5;
text[5] = NAME_Value;
count[5] = value;
};

func void Equip_ITMI_MagicRegen_03 ()
{
self.attribute[ATR_REGENERATEMANA] = 5;
};

func void UnEquip_ITMI_MagicRegen_03()
{
self.attribute[ATR_REGENERATEMANA] = 0;
};
instance ITEM_MagicRegen_02(C_Item)
{
name = "Кольцо регенерации маны";
mainflag = ITEM_MagicRegen_02;
flags = ITEM_MISSION | ITEM_RING;
value = 500;
cond_atr[2] = ATR_MANA_MAX;
cond_value[2] = 50;
visual = "ItMi_Ring_02.3ds";
material = MAT_METAL;
on_equip = Equip_ITMI_MagicRegen_02;
on_unequip = UnEquip_ITMI_MagicRegen_02;
description = name;
text[0] = "Количество маны в секунду";
count[0] = 3;
text[5] = NAME_Value;
count[5] = value;
};

func void Equip_ITMI_MagicRegen_02 ()
{
self.attribute[ATR_REGENERATEMANA] = 3;
};

func void UnEquip_ITMI_MagicRegen_02()
{
self.attribute[ATR_REGENERATEMANA] = 0;
};
instance ITEM_MagicRegen_01(C_Item)
{
name = "Кольцо малой регенерации маны";
mainflag = ITEM_MagicRegen_01;
flags = ITEM_MISSION | ITEM_RING;
value = 100;
cond_atr[2] = ATR_MANA_MAX;
cond_value[2] = 15;
visual = "ItMi_Ring_01.3ds";
material = MAT_METAL;
on_equip = Equip_ITMI_MagicRegen_01;
on_unequip = UnEquip_ITMI_MagicRegen_01;
description = name;
text[0] = "Количество маны в секунду";
count[0] = 1;
text[5] = NAME_Value;
count[5] = value;
};

func void Equip_ITMI_MagicRegen_01 ()
{
self.attribute[ATR_REGENERATEMANA] = 1;
};

func void UnEquip_ITMI_MagicRegen_01()
{
self.attribute[ATR_REGENERATEMANA] = 0;
};

При компиляции ошибок не было.

Так же, хочу добавить в продажу эти кольца магу огня Торрезу. Но в продажу наподобие штанов рудокопа у Фиска, т.е. через диалог.
За основу брал, как раз сам скрипт Фиска по продаже брони.
По итогу получился данный скрипт:
var int torrez_RING_01_was_bought;
var int torrez_RING_02_was_bought;
var int torrez_RING_03_was_bought;

instance KDF_405_Torrez_RING(C_Info)
{
npc = KDF_405_Torrez;
condition = KDF_405_Torrez_RING_Condition;
information = KDF_405_Torrez_RING_Info;
important = 0;
permanent = 1;
description = "У тебя есть для меня что-нибудь особое?";
};


func int KDF_405_Torrez_RING_Condition()
{
if(Npc_KnowsInfo(hero,KDF_405_Torrez_GREET))
{
if(Kapitel == 1))
{
if(!torrez_RING_01_was_bought || !torrez_RING_02_was_bought || !torrez_RING_03_was_bought)
{
return TRUE;
};
};
};
};
func void KDF_405_Torrez_RING_Info()
{
AI_Output(other,self,"KDF_405_Torrez_RING_15_01"); //Какие особые магические кольца ты мне можешь предложить?
AI_Output(self,other,"KDF_405_Torrez_RING_12_02"); //Уверен, что мы что-нибудь обязательно подыщем.
Info_ClearChoices(KDF_405_Torrez_RING);
Info_AddChoice(KDF_405_Torrez_RING,DIALOG_BACK,KDF_405_Torrez_RING_BACK);
if(torrez_RING_01_was_bought != 1)
{
Info_AddChoice(KDF_405_Torrez_RING,B_BuildBuyArmorString(NAME_MagicRegen_01,VALUE_ITEM_MagicRegen_01),KDF_405_Torrez_RING_01);
};
if(torrez_RING_02_was_bought != 1)
{
Info_AddChoice(KDF_405_Torrez_RING,B_BuildBuyArmorString(NAME_MagicRegen_02,VALUE_ITEM_MagicRegen_02),KDF_405_Torrez_RING_02);
};
if(torrez_RING_03_was_bought != 1)
{
Info_AddChoice(KDF_405_Torrez_RING,B_BuildBuyArmorString(NAME_MagicRegen_03,VALUE_ITEM_MagicRegen_03),KDF_405_Torrez_RING_03);
};
};

func void KDF_405_Torrez_RING_BACK()
{
Info_ClearChoices(KDF_405_Torrez_RING);
};

func void KDF_405_Torrez_RING_01()
{
AI_Output(other,self,"KDF_405_Torrez_RING_01_Info_15_01"); //У тебя есть кольцо малой регенерации маны?
if(Npc_HasItems(hero,ItMiNugget) < VALUE_ITEM_MagicRegen_02)
{
AI_Output(self,other,"KDF_405_Torrez_RING_01_Info_12_02"); //Возвращайся, когда у тебя будет руда!
}
else
{
AI_Output(self,other,"KDF_405_Torrez_RING_01_Info_12_03"); //Хороший выбор!
CreateInvItem(other,fakeitem);
CreateInvItem(other,ITEM_MagicRegen_01);
Npc_RemoveInvItems(other,ItMiNugget,VALUE_ITEM_MagicRegen_01);
CreateInvItems(self,ItMiNugget,VALUE_ITEM_MagicRegen_01);
MYORE = Npc_HasItems(self,ItMiNugget);
SCREENMESSAGE = "Получено кольцо.";
SCREENMESSAGE2 = "Отдано 100 кусков руды.";
SCREENMESSAGEQUEUE = 3;
AI_UseItem(other,fakeitem);
torrez_RING_01_was_bought = 1;
};
};

func void KDF_405_Torrez_RING_02()
{
AI_Output(other,self,"KDF_405_Torrez_RING_02_Info_15_01"); //У тебя есть кольцо регенерации маны?
if(Npc_HasItems(hero,ItMiNugget) < VALUE_ITEM_MagicRegen_02)
{
AI_Output(self,other,"KDF_405_Torrez_RING_02_Info_12_02"); //Возвращайся, когда у тебя будет руда!
}
else
{
AI_Output(self,other,"KDF_405_Torrez_RING_02_Info_12_03"); //Хороший выбор!
CreateInvItem(other,fakeitem);
CreateInvItem(other,ITEM_MagicRegen_02);
Npc_RemoveInvItems(other,ItMiNugget,VALUE_ITEM_MagicRegen_02);
CreateInvItems(self,ItMiNugget,VALUE_ITEM_MagicRegen_02);
MYORE = Npc_HasItems(self,ItMiNugget);
SCREENMESSAGE = "Получено кольцо.";
SCREENMESSAGE2 = "Отдано 500 кусков руды.";
SCREENMESSAGEQUEUE = 3;
AI_UseItem(other,fakeitem);
torrez_RING_02_was_bought = 1;
};
};

func void KDF_405_Torrez_RING_03()
{
AI_Output(other,self,"KDF_405_Torrez_RING_03_Info_15_01"); //У тебя есть кольцо сильной регенерации маны?
if(Npc_HasItems(hero,ItMiNugget) < VALUE_ITEM_MagicRegen_03)
{
AI_Output(self,other,"KDF_405_Torrez_RING_03_Info_12_02"); //Возвращайся, когда у тебя будет руда!
}
else
{
AI_Output(self,other,"KDF_405_Torrez_RING_03_Info_12_03"); //Хороший выбор!
CreateInvItem(other,fakeitem);
CreateInvItem(other,ITEM_MagicRegen_03);
Npc_RemoveInvItems(other,ItMiNugget,VALUE_ITEM_MagicRegen_03);
CreateInvItems(self,ItMiNugget,VALUE_ITEM_MagicRegen_03);
MYORE = Npc_HasItems(self,ItMiNugget);
SCREENMESSAGE = "Получено кольцо.";
SCREENMESSAGE2 = "Отдано 1000 кусков руды.";
SCREENMESSAGEQUEUE = 3;
AI_UseItem(other,fakeitem);
torrez_RING_03_was_bought = 1;
};
};

Но при компиляции тут уже возникают ошибки на всех переменных типа: VALUE_ITEM_MagicRegen_01
Как понимаю ошибка связана с VALUE каким-то образом.
Сама ошибка: Ошибка: Неизвестный идентификатор: VALUE_ITEM_MagicRegen_01
И так для всех VALUE....
Прошу помочь советом. Буду благодарен.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.236
Благодарности
6.222
Баллы
1.565
Lucidante,
Daedalus:
if(torrez_RING_01_was_bought != 1)
{
Info_AddChoice(KDF_405_Torrez_RING,B_BuildBuyArmorString(NAME_MagicRegen_01,VALUE_ITEM_MagicRegen_01),KDF_405_Torrez_RING_01);
};
if(torrez_RING_02_was_bought != 1)
{
Info_AddChoice(KDF_405_Torrez_RING,B_BuildBuyArmorString(NAME_MagicRegen_02,VALUE_ITEM_MagicRegen_02),KDF_405_Torrez_RING_02);
};
if(torrez_RING_03_was_bought != 1)
{
Info_AddChoice(KDF_405_Torrez_RING,B_BuildBuyArmorString(NAME_MagicRegen_03,VALUE_ITEM_MagicRegen_03),KDF_405_Torrez_RING_03);
};
Что такое VALUE_ITEM_MagicRegen_0Х ?
Не говорю в чем ошибка, т.к. хочу, чтобы ты сам понял ее
 

Lucidante

Участник форума
Регистрация
27 Авг 2020
Сообщения
14
Благодарности
4
Баллы
60
Lucidante,
Daedalus:
if(torrez_RING_01_was_bought != 1)
{
Info_AddChoice(KDF_405_Torrez_RING,B_BuildBuyArmorString(NAME_MagicRegen_01,VALUE_ITEM_MagicRegen_01),KDF_405_Torrez_RING_01);
};
if(torrez_RING_02_was_bought != 1)
{
Info_AddChoice(KDF_405_Torrez_RING,B_BuildBuyArmorString(NAME_MagicRegen_02,VALUE_ITEM_MagicRegen_02),KDF_405_Torrez_RING_02);
};
if(torrez_RING_03_was_bought != 1)
{
Info_AddChoice(KDF_405_Torrez_RING,B_BuildBuyArmorString(NAME_MagicRegen_03,VALUE_ITEM_MagicRegen_03),KDF_405_Torrez_RING_03);
};
Что такое VALUE_ITEM_MagicRegen_0Х ?
Не говорю в чем ошибка, т.к. хочу, чтобы ты сам понял ее
Теоретически - переменная стоимости предмета. В данном случае кольца.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.236
Благодарности
6.222
Баллы
1.565

Lucidante

Участник форума
Регистрация
27 Авг 2020
Сообщения
14
Благодарности
4
Баллы
60
Хорошо. А как мы узнаем, что VALUE_ITEM_MagicRegen_0Х равно столько-то ?
А ну правильно. Имя то, для переменной value в самом кольце не задано. Поэтому и неизвестно откуда брать стоимость.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.236
Благодарности
6.222
Баллы
1.565
А ну правильно. Имя то, для переменной value в самом кольце не задано. Поэтому и неизвестно откуда брать стоимость.
Так, уже лучше. Одну проблему нашли.
Теперь как мы узнаем, что VALUE = [допустим] 1000 ?
 

Lucidante

Участник форума
Регистрация
27 Авг 2020
Сообщения
14
Благодарности
4
Баллы
60
Так, уже лучше. Одну проблему нашли.
Теперь как мы узнаем, что VALUE = [допустим] 1000 ?
Еще немного подключил мозг.
Видимо, верным решением будет:

Daedalus:
const int VALUE_ITEM_MagicRegen_03 = 1000;


value = VALUE_ITEM_MagicRegen_03;
count[5] = VALUE_ITEM_MagicRegen_03;
 
Сверху Снизу