Портал Готика Готика II Готика 3 Аркания Модификации Файлы Форумы РПГ Альманах Дух Готики

 

Ergebnis 1 bis 2 von 2
  1. Homepage besuchen Beitrge anzeigen #1 Zitieren
    Knight Commander Avatar von odin68
    Registriert seit
    Aug 2008
    Beitrge
    2.729
     
    odin68 ist offline

    G2-MODDING: Вставка НПС и Создание диалогов

    12.02.2008, 13:08
    Zitat Zitat von MEG@VOLT Beitrag anzeigen
    Вставка НПС:
    instance PAL_9991_Toreodore (Npc_Default) // - Стандартная переменная для всех НПС
    {
    // ------ NSC ------ // - просто разделение, чтоб не запутаться. В готовом датнике его нет/
    name = "Toreodore"; // - имя
    guild = GIL_PAL; // - гильдия (см. в \_work\Data\Scripts\Content\AI\Human\guilds.d)
    ) id = 9991; // тот самый ID ,берётся из PAL_***9991***_Toreodore, влияет на определение НПС игрой.
    voice = 14; // голос НПС, в нашем случае без разницы какой голос ))
    flags = NPC_FLAG_IMMORTAL; // NPC_FLAG_IMMORTAL - НПС бессмертный, ещё есть значение (flags = 0) - НПС смертен.
    level = 21; // - уравень НПС
    npctype = NPCTYPE_MAIN; // - нужность НПС т.е. друг ,враг, нейтрал, главный (NpcType_Friend, NpcType_Ambient, NpcType_Bl_Main и NpcType_Ocambient , т.е. нужны для миссий)


    // ------ Attribute ------ // - аттрибуты НПС
    attribute[ATR_STRENGTH] = 40; // - сила НПС
    attribute[ATR_DEXTERITY] = 30; // - ловкость НПС
    attribute[ATR_MANA_MAX] = 100; // - Максимальная мана
    attribute[ATR_MANA] = 10; // - мана на данный момент
    attribute[ATR_HITPOINTS_MAX] = 100; // - максимальная жизнь
    attribute[ATR_HITPOINTS] = 46; // - жизнь на данный момент


    // ------ Kampf-Taktik ------ // - Далее описана Характеристика Атаки
    fight_tactic = FAI_HUMAN_STRONG; // -(STRONG) характеристика атаки--> МАСТЕР/БОЕЦ/НОВИЧОК--->MASTER / STRONG / COWARD


    // ------ Equippte Waffen ------ // - Вооружение НПС
    EquipItem (self, ItMw_1h_Bau_Mace); // - оружие которым вооружён НПС ( в нашем случае **Простой посох**)
    EquipItem (self, ItRw_Mil_Crossbow); // -(см.в \_work\Data\Scripts\Content\Items)


    // ------ Inventory ------ ** - Инвентарь НПС
    CreateInvItems (self, ItRw_SLD_Bow); // - оружие в инвентаре НПС ( в данном случае **Салдатский лук**, в основном у НПС здесь лежат деньги, драгоценности и ценные вещи


    // ------ visuals ------ // - Визуализация НПС
    B_SetNpcVisual (self, MALE,// - (Мужик, Female-женщина) "Hum_Head_FatBald",//- (текстура головы НПС) Face_N_OldBald_Jeremiah,// - (лицо НПС) BodyTex_N,// - (текстура тела НПС) ITAR_Vlk_H);// - Броня одетая на НПС
    Mdl_SetModelFatness (self, 2); // - жироность НПС )
    Mdl_ApplyOverlayMds (self, "Humans_Arrogance.mds"); //- может вместо **Arrogance** быть--> Tired / Militia / Mage / Arrogance / Relaxed это походка НПС- КрутоЙ, уставший пьяный и тд.



    // ------ NSC-relevante Talente vergeben ------ // - Таланты НПС
    Npc_SetTalentSkill (self, NPC_TALENT_PICKLOCK, 1); // - НПС обучен взлому замков ( Обучен = 1; Не обучен = 0)


    // ------ Kampf-Talente ------ // - Возможности НПС
    B_AddFightSkill (self, NPC_TALENT_1H, 30); // - талант владения одноручем
    B_AddFightSkill (self, NPC_TALENT_2H, 30); // - талант владения двуручем
    B_AddFightSkill (self, NPC_TALENT_BOW, 50); // - талант владения луком
    B_AddFightSkill (self, NPC_TALENT_CROSSBOW, 50); // - талант владения арболетом


    // ------ TA anmelden ------ Рассписание дня
    daily_routine = Rtn_Start_9991; // - рассписание дня НПС (само рассписани следует НИЖЕ ===\___/===)
    };

    FUNC VOID Rtn_Start_9991 ()

    {
    TA_Sit_Throne (09,00,21,00,"МестО1"); // - Нпс сидит но стуле находящийся около вейпоинта Место1

    TA_Sleep (21,00,09,00,"МестО2"); // - НПС спит на кровати, находящийся у вейпоинта Место2
    };


    1) - (Место1;Место2) - это вейпоинты. создаются в Спайсере, около них должно быть то, на что направлено действие (стул, кровать, дверь)
    2) - Потом дописываешь в файле ***NPC_Globals**** (C:\Program Files\Gothic II\_work\data\Scripts\Content\Story\NPC_Globals) строчку (var C_NPC Toreodore; - в начале и
    Toreodore = Hlp_GetNpc(PAL_9991_Toreodore); - ,ближе к концу

    3)Полный состав (ТА_*****) ( TA_Sleep и т.д.) можно посмотреть в (C:\Program Files\Gothic II\_work\data\Scripts\Content\AI\Human) в разделе ***TA***
    4)полный спиок лиц
    // Для мужчин и женщин (по 4 штуки)
    BodyTex_P = 0; //Бледнокожий
    BodyTex_N = 1; //Европеец
    BodyTex_L = 2; //Латиноамериканец
    BodyTex_B = 3; //Негр
    BodyTexBabe_P = 4; //Бледнокожая
    BodyTexBabe_N = 5; //Европейка
    BodyTexBabe_L = 6; //Латиноамериканка
    BodyTexBabe_B = 7; //Негритянка
    BodyTex_Player = 8; //ГГ

    const int BodyTex_T = 10; //Татуированный мужик
    const int BodyTexBabe_F = 11; //Татуированная женщина
    const int BodyTexBabe_S = 12; //Чернокожий ребенок

    const int NO_ARMOR = -1; //Без доспехов

    // Лица мужчин
    Face_N_Gomez = 0;
    Face_N_Scar = 1;
    Face_N_Raven = 2;
    Face_N_Bullit = 3;
    Face_B_Thorus = 4;
    Face_N_Corristo = 5;
    Face_N_Milten = 6;
    Face_N_Bloodwyn = 7;
    Face_L_Scatty = 8;
    Face_N_YBerion = 9;
    Face_N_CoolPock = 10;
    Face_B_CorAngar = 11;
    Face_B_Saturas = 12;
    Face_N_Xardas = 13;
    Face_N_Lares = 14;
    Face_L_Ratford = 15;
    Face_N_Drax = 16;
    Face_B_Gorn = 17;
    Face_N_Player = 18;
    Face_P_Lester = 19;
    Face_N_Lee = 20;
    Face_N_Torlof = 21;
    Face_N_Mud = 22;
    Face_N_Ricelord = 23;
    Face_N_Horatio = 24;
    Face_N_Richter = 25;
    Face_N_Cipher_neu = 26;
    Face_B_Cavalorn = 28;
    Face_L_Ian = 29;
    Face_N_MadPsi = 31;
    Face_N_Bartholo = 32;
    Face_N_Snaf = 33;
    Face_N_Mordrag = 34;
    Face_N_Lefty = 35;
    Face_N_Wolf = 36;
    Face_N_Fingers = 37;
    Face_N_Whistler = 38;
    Face_P_Gilbert = 39;
    Face_L_Jackal = 40;

    // Бледнолицые
    Face_P_ToughBald = 41;
    Face_P_Tough_Drago = 42;
    Face_P_Tough_Torrez = 43;
    Face_P_Tough_Rodriguez = 44;
    Face_P_ToughBald_Nek = 45;
    Face_P_NormalBald = 46;
    Face_P_Normal01 = 47;
    Face_P_Normal02 = 48;
    Face_P_Normal_Fletcher = 49;
    Face_P_Normal03 = 50;
    Face_P_NormalBart01 = 51;
    Face_P_NormalBart_Cronos = 52;
    Face_P_NormalBart_Nefarius= 53;
    Face_P_NormalBart_Riordian= 54;
    Face_P_OldMan_Gravo = 55;
    Face_P_Weak_Cutter = 56;
    Face_P_Weak_Ulf_Wohlers = 57;

    // Европейцы
    Face_N_Important_Arto = 58;
    Face_N_ImportantGrey = 59;
    Face_N_ImportantOld = 60;
    Face_N_Tough_Lee_дhnlich = 61;
    Face_N_Tough_Skip = 62;
    Face_N_ToughBart01 = 63;
    Face_N_Tough_Okyl = 64;
    Face_N_Normal01 = 65;
    Face_N_Normal_Cord = 66;
    Face_N_Normal_Olli_Kahn = 67;
    Face_N_Normal02 = 68;
    Face_N_Normal_Spassvogel = 69;
    Face_N_Normal03 = 70;
    Face_N_Normal04 = 71;
    Face_N_Normal05 = 72;
    Face_N_Normal_Stone = 73;
    Face_N_Normal06 = 74;
    Face_N_Normal_Erpresser = 75;
    Face_N_Normal07 = 76;
    Face_N_Normal_Blade = 77;
    Face_N_Normal08 = 78;
    Face_N_Normal14 = 79;
    Face_N_Normal_Sly = 80;
    Face_N_Normal16 = 81;
    Face_N_Normal17 = 82;
    Face_N_Normal18 = 83;
    Face_N_Normal19 = 84;
    Face_N_Normal20 = 85;
    Face_N_NormalBart01 = 86;
    Face_N_NormalBart02 = 87;
    Face_N_NormalBart03 = 88;
    Face_N_NormalBart04 = 89;
    Face_N_NormalBart05 = 90;
    Face_N_NormalBart06 = 91;
    Face_N_NormalBart_Senyan = 92;
    Face_N_NormalBart08 = 93;
    Face_N_NormalBart09 = 94;
    Face_N_NormalBart10 = 95;
    Face_N_NormalBart11 = 96;
    Face_N_NormalBart12 = 97;
    Face_N_NormalBart_Dexter = 98;
    Face_N_NormalBart_Graham = 99;
    Face_N_NormalBart_Dusty = 100;
    Face_N_NormalBart16 = 101;
    Face_N_NormalBart17 = 102;
    Face_N_NormalBart_Huno = 103;
    Face_N_NormalBart_Grim = 104;
    Face_N_NormalBart20 = 105;
    Face_N_NormalBart21 = 106;
    Face_N_NormalBart22 = 107;
    Face_N_OldBald_Jeremiah = 108;
    Face_N_Weak_Ulbert = 109;
    Face_N_Weak_BaalNetbek = 110;
    Face_N_Weak_Herek = 111;
    Face_N_Weak04 = 112;
    Face_N_Weak05 = 113;
    Face_N_Weak_Orry = 114;
    Face_N_Weak_Asghan = 115;
    Face_N_Weak_Markus_Kark = 116;
    Face_N_Weak_Cipher_alt = 117;
    Face_N_NormalBart_Swiney = 118;
    Face_N_Weak12 = 119;

    // Латиноамериканцы
    Face_L_ToughBald01 = 120;
    Face_L_Tough01 = 121;
    Face_L_Tough02 = 122;
    Face_L_Tough_Santino = 123;
    Face_L_ToughBart_Quentin = 124;
    Face_L_Normal_GorNaBar = 125;
    Face_L_NormalBart01 = 126;
    Face_L_NormalBart02 = 127;
    Face_L_NormalBart_Rufus = 128;

    // Негры
    Face_B_ToughBald = 129;
    Face_B_Tough_Pacho = 130;
    Face_B_Tough_Silas = 131;
    Face_B_Normal01 = 132;
    Face_B_Normal_Kirgo = 133;
    Face_B_Normal_Sharky = 134;
    Face_B_Normal_Orik = 135;
    Face_B_Normal_Kharim = 136;

    // Лица женщин
    FaceBabe_N_BlackHair = 137;
    FaceBabe_N_Blondie = 138;
    FaceBabe_N_BlondTattoo = 139;
    FaceBabe_N_PinkHair = 140;
    FaceBabe_L_Charlotte = 141;
    FaceBabe_B_RedLocks = 142;
    FaceBabe_N_HairAndCloth = 143;
    FaceBabe_N_WhiteCloth = 144;
    FaceBabe_N_GreyCloth = 145;
    FaceBabe_N_Brown = 146;
    FaceBabe_N_VlkBlonde = 147;
    FaceBabe_N_BauBlonde = 148;
    FaceBabe_N_YoungBlonde = 149;
    FaceBabe_N_OldBlonde = 150;
    FaceBabe_P_MidBlonde = 151;
    FaceBabe_N_MidBauBlonde = 152;
    FaceBabe_N_OldBrown = 153;
    FaceBabe_N_Lilo = 154;
    FaceBabe_N_Hure = 155;
    FaceBabe_N_Anne = 156;
    FaceBabe_B_RedLocks2 = 157;
    FaceBabe_L_Charlotte2 = 158;

    // Лицо Фортуно
    Face_N_Fortuno = 159;

    // Лица пиратов
    Face_P_Greg = 160;
    Face_N_Pirat01 = 161;
    Face_N_ZombieMud = 162;
    5) - Советую поставить!G2MDK(63метра) (без него никуда)!



    Теперь о том, как вставить этот самый НПС в игру:

    ШАГ 1-ый

    Копируем наш *.d файл в папку со всеми неписями у Gothic II\_work\Data\Scripts\Content\Story\NPC

    ШАГ 2-ой

    В файле Gothic II\_work\data\Scripts\Content\Story\NPC_Globals.d находим строчку var C_NPC Lester; и дописываем под ней var C_NPC Vendigo;(имя вашего НПС). Теперь в этом же файле находим Lester = Hlp_GetNpc(PC_Psionic); и дописываем ниже Vendigo = Hlp_GetNpc(PAL_9991_Toreodore); где PAL_9991_Toreodore название файла Вашего непися.
    Почему именно под этой строчкой. Важно не под какой строчкой, а в каком разделе файла, в какой функции. Лестер, так же как и наш новенький непись попадает в в функцию, которая вставляет персов в окрестностях башни ксардаса. А так как нашего перса мы вставляем именно у его башни, то соответственно прописывать нужно именно здесь.(вместо строчки МестО1/2 нужно написать NW_XARDAS_PATH_FARM1_08 или любой другой вуапоинт,их можно посмтреть,открым zen файл в спайсере.)

    ШАГ 3-ий

    Открываем файл Gothic II\_work\Data\Scripts\Content\Story\StartUp.d Находим в нём строку Wld_InsertNpc (PC_Psionic, "NW_XARDAS_TOWER_PATH_01"); И дописываем ниже Wld_InsertNpc (PAL_9991_Toreodore, ""NW_XARDAS_PATH_FARM1_08");

    ШАГ 4-ый

    Открываем Spacer, прогу, поставляющуюся из Девелопменкита или вместе с игрой. Экзешник в папке System. Нажимаем World\Repare Script(Мир заменить скрипты), выбираем Gothic.scr и нажимаем открыть. После чего начнётся компиляция скриптов. Продолжаться она может достаточно долго. В идиале не должно выскочить ни одной ошибки. Если они всё-таки повыскакивали, не отчаивайтесь, персонаж и с ними может вставиться. Конец компиляции выдаст окно Аутпут-Юнитс, которе заменится на окно Материалз.

    ШАГ 5-ый

    Теперь заходим в игру и начинаем новую (обязательно! не загружаем!). Проверяем, стоит ли персонаж на месте. Если же персонажа на указанном вайпоинте не оказалось, детально, по строчечке проверте правильность ваших скриптов (везде ли стоят ; и "{", нету ли описок в словах и т.д.).


    Написание Миссий

    INSTANCE DIA_Alex_MIS(C_INFO)
    {
    npc = bau_999_Alex;Код нпс, который будет доватьь миссию
    nr = 2;Важность,месть положение в меню
    condition = DIA_Alex_MIS_Condition;// название переменной
    information = DIA_Alex_MIS_Info;// название переменной
    permanent = FALSE;// то что диалог повторяется бесконечно, если = TRUE, если =False, то один раз
    important = TRUE; // нпс начинает говорить первым =TRUE, если =False, то нечего не происходит
    description = "ХХХ"; // здесь то о чём будет написанно в меню
    };

    FUNC INT DIA_Mager_MIS_Condition() //функция переменной, которая записана выше
    {
    if () //Тут записывается условие,условия можно посмотреть в других миссиях
    {
    return TRUE;
    };
    };
    FUNC VOID DIA_Alex_MIS_Info() //функция переменной которая записана выше

    {
    AI_Output (other, self, "DIA_Alex_MIS_15_00");// //Тут идет диалог отображается в субтитрах,если (other, self) , то начинает ГГ к НПС, если наоборот, то НПС к ГГ
    AI_Output (self, other, "DIA_Alex_MIS_04_01");//
    AI_Output (self, other, "DIA_Alex_MIS_04_02");//
    AI_Output (self, other, "DIA_Alex_MIS_04_03");//
    AI_Output (self, other, "DIA_Alex_MIS_04_04");//
    AI_Output (self, other, "DIA_Alex_MIS_04_05");//
    AI_Output (other, self, "DIA_Alex_MIS_15_06");//

    Log_CreateTopic (Topic_Alex,LOG_MISSION); //создаётся запись в дневнике, в теме активных заданий......(Topic_Alex) создаёшь в (Gothic II\_work\data\Scripts\Content\Story\Log_Entries)в (LOG_Constants_Mattes)
    Log_SetTopicStatus (Topic_Alex,LOG_RUNNING); // миссия НАЧАЛАСЬ
    B_LogEntry (Topic_Alex,"ХХХ."); //То, что написано в дневнике

    };

    сохраняем в (Gothic II\_work\data\Scripts\Content\Story\Dialoge)
    Внимание : если вы нашли и исправили ошибку, нужно снова компилить Gothic.src

    francisc,помогал VenDigo, использовались уроки скриптологии Вама

    [Bild: odin_md_akcr.jpg]
    ASUS LGA-1150 Z97-K, Intel Core i7-4770 3.4 GHz, EVGA GTX 980 Ti Hybrid ( 6.0 Gb), 16Gb DDR3, SSD OSZ Vertex 460A (240 Gb) + SSD Samsung SM951 M.2 (256 Gb), Dell Ultrasharp U2515H (2560 x 1440) + BenQ E2400HD (1920x1080)
    Gendert von ukur (13.09.2010 um 07:54 Uhr)

  2. Homepage besuchen Beitrge anzeigen #2 Zitieren
    Knight Commander Avatar von odin68
    Registriert seit
    Aug 2008
    Beitrge
    2.729
     
    odin68 ist offline
    12.02.2008, 13:10
    Zitat Zitat von MEG@VOLT Beitrag anzeigen
    Создание диалогов:
    В папке Gothic II\_work\Data\Scripts\Content\Story\Dialoge

    создаём файл DIA_NONE_1000_Dedroit.d(создадим далог допустим убить кого-нибудь)!

    Вот содержимое этого файла:

    instance DIA_Dedroit_q (C_Info)


    {
    npc = NONE_1000_Dedroit; //ваш нпс
    nr = 2;
    condition = dia_Dedroit_q_condition;
    information = dia_Dedroit_q_info;
    permanent = FALSE;
    important = FALSE; //если false то диалог начмнаете вы,если TRUE нпс начинает разговор с вами!
    description = "Я могу чем нибудь помочь?";
    };
    func int dia_Dedroit_q_condition()
    {
    return TRUE;
    };
    func void dia_Dedroit_q_info()
    {
    AI_Output(other,self,"DIA_Dedroit_q_15_00"); //Я могу чем нибудь помочь?
    AI_Output(self,other,"DIA_Dedroit_q_3_01"); //Да ты можешь мне почь!Ты бы мог бы убить Вино?
    Info_ClearChoices(DIA_Dedroit_q);
    Info_AddChoice(dia_Dedroit_q,"Нет я не буду тебе помогать.",dia_Dedroit_q_w); //Это варианты ответом,которые будут отображаться в главном меню!
    Info_AddChoice(dia_Dedroit_q,"Хорошо я убью Вино",dia_Dedroit_q_e); //Это второй вариант ответа!
    };
    Если он отказывается помогать ,то

    func void dia_Dedroit_q_w()
    {
    AI_Output(other,self,"dia_Dedroit_q_w_15_00"); //Я не буду помогать тебе!
    AI_Output(self,other,"dia_Dedroit_q_w_03_01"); //Тогда не жди и отменя помощи.
    };
    Если игрок соглашается,то

    func void dia_Dedroit_q_e()
    {
    AI_Output(other,self,"dia_Dedroit_q_e_15_00"); //Хорошо я погу тебе.
    AI_Output(self,other,"dia_Dedroit_q_e_03_01"); //Вот и отлично,еслт ты его убьёшь я щедро вознагрожу тебя!
    Log_CreateTopic(TOPIC_KillVino,LOG_MISSION);
    Log_SetTopicStatus(TOPIC_KillVino,LOG_Running); //дневник
    B_LogEntry(TOPIC_KillVino,"Арес попросил меня убить Вино."); //запись в дневнике
    MIS_KillVino = LOG_Running; //Это означает,что миссия началась!
    };

    instance DIA_Dedroit_q2 (C_Info)
    {
    npc = NONE_1000_Dedroit;
    nr = 1;
    condition = dia_Dedroit_q2_condition;
    information = dia_Dedroit_q2_info;
    permanent = FALSE;
    important = FALSE;
    description = "Я убил Вино.";
    };

    func int dia_Dedroit_q2_condition()
    {
    if(Npc_IsDead(Vino) && (MIS_KillVino == LOG_Running)) //это означает,что если Вино мёртв то начинается этот диалог!
    {
    return TRUE;
    };
    };
    func void dia_Dedroit_q2_info()
    {
    AI_Output(other,self,"dia_Dedroit_q2_info_15_00"); //Я убил вино.
    AI_Output(self,other,"dia_Dedroit_q2_info_3_01"); //Великолепно,как я и обещал мой подарок!
    MIS_KillVino=LOG_SUCCESS; //миссия завершена
    Log_SetTopicStatus(TOPIC_KillVino,LOG_SUCCESS);
    B_LogEntry(TOPIC_KillVino,"Я убил вино,а арес как и обещал дал мне подарок."); //запись в дневнике
    B_GivePlayerXP(500); //количество получаевомого опыта,в даном случаи 500!
    b_giveinvitems(self,other,ItMW_Addon_Stab03,1); //непись даёт нам подарок посох воды!
    };


    instance NONE_1000_Dedroit_EXIT(C_Info)
    {
    npc = NONE_1000_Dedroit;
    nr = 999;
    condition = NONE_1000_Dedroit_EXIT_Condition;
    information = NONE_1000_Dedroit_EXIT_Info;
    permanent = TRUE;
    description = "Конец";
    };
    func int NONE_1000_Dedroit_EXIT_Condition()
    {
    return TRUE;
    };
    func void NONE_1000_Dedroit_EXIT_Info()
    {
    AI_StopProcessInfos(self);
    };




    Вот так должен выглядеть наш диалог:

    instance DIA_Dedroit_q (C_Info)
    {
    npc = NONE_1000_Dedroit;
    nr = 2;
    condition = dia_Dedroit_q_condition;
    information = dia_Dedroit_q_info;
    permanent = FALSE;
    important = FALSE;
    description = "Я могу чем нибудь помочь?";
    };

    func int dia_Dedroit_q_condition()
    {
    return TRUE;
    };
    func void dia_Dedroit_q_info()
    {
    AI_Output(other,self,"DIA_Dedroit_q_15_00"); //Я могу чем нибудь помочь?
    AI_Output(self,other,"DIA_Dedroit_q_3_01"); //Да ты можешь мне почь!Ты бы мог бы убить Вино?
    Info_ClearChoices(DIA_Dedroit_q);
    Info_AddChoice(dia_Dedroit_q,"Нет я не буду тебе помогать.",dia_Dedroit_q_w);
    Info_AddChoice(dia_Dedroit_q,"Хорошо я убью Вино",dia_Dedroit_q_e);
    };
    func void dia_Dedroit_q_w()
    {
    AI_Output(other,self,"dia_Dedroit_q_w_15_00"); //Я не буду помогать тебе!
    AI_Output(self,other,"dia_Dedroit_q_w_03_01"); //Тогда не жди и отменя помощи.
    AI_StopProcessInfos(self);
    };
    func void dia_Dedroit_q_e()
    {
    AI_Output(other,self,"dia_Dedroit_q_e_15_00"); //Хорошо я погу тебе.
    AI_Output(self,other,"dia_Dedroit_q_e_03_01"); //Вот и отлично,еслт ты его убьёшь я щедро вознагрожу тебя!
    Log_CreateTopic(TOPIC_KillVino,LOG_MISSION);
    Log_SetTopicStatus(TOPIC_KillVino,LOG_Running);
    B_LogEntry(TOPIC_KillVino,"Арес попросил меня убить Вино.");
    MIS_KillVino = LOG_Running;
    AI_StopProcessInfos(self);
    };


    instance DIA_Dedroit_q2 (C_Info)
    {
    npc = NONE_1000_Dedroit;
    nr = 1;
    condition = dia_Dedroit_q2_condition;
    information = dia_Dedroit_q2_info;
    permanent = FALSE;
    important = FALSE;
    description = "Я убил Вино.";
    };
    func int dia_Dedroit_q2_condition()
    {
    if(Npc_IsDead(Vino) && (MIS_KillVino == LOG_Running))
    {
    return TRUE;
    };
    };
    func void dia_Dedroit_q2_info()
    {
    AI_Output(other,self,"dia_Dedroit_q2_info_15_00"); //Я убил вино.
    AI_Output(self,other,"dia_Dedroit_q2_info_3_01"); //Великолепно,как я и обещал мой подарок!
    MIS_KillVino=LOG_SUCCESS;
    Log_SetTopicStatus(TOPIC_KillVino,LOG_SUCCESS);
    B_LogEntry(TOPIC_KillVino,"Я убил вино,а арес как и обещал дал мне подарок.");
    B_GivePlayerXP(500);
    b_giveinvitems(self,other,ItMW_Addon_Stab03,1);
    };


    instance NONE_1000_Dedroit_EXIT(C_Info)
    {
    npc = NONE_1000_Dedroit;
    nr = 999;
    condition = NONE_1000_Dedroit_EXIT_Condition;
    information = NONE_1000_Dedroit_EXIT_Info;
    permanent = TRUE;
    description = "Конец";
    };

    func int NONE_1000_Dedroit_EXIT_Condition()
    {
    return TRUE;
    };

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


    Дальше заходим в Story_Globals и в самом конце прописываем var int MIS_KillVino; Потом заходим допустим в LOG_Constants_Yoly(находится в папке \Story\Log_Entries) и всамом конце прописываем const string TOPIC_KillVino= "Убийство Вино";
    Потом заходим в спайсер2 нажимаем world->Reparse Script->gothic.src потом выбираем окно Output-units->update->refresh(ждем,удаляем Ou.bin и Ou.csl)->save. Ou.bin и Ou.csl->находятся в Gothic II\_work\Data\Scripts\Content\Cutscene!
    Если вы пользуетесь прогой от вама то просто нужно прописать диалог в Gothic.src и закомпилировать! Ну вот и всё!
    12.02.2008, 13:18
    Zitat Zitat von MEG@VOLT Beitrag anzeigen
    Итак продолжаем:

    Давайте создадим миссию допустим что-то принести:

    В том файле пишем:

    instance DIA_DEDEROIT_q3 (C_Info)
    {
    npc = NONE_1000_Dedroit;//имя непися
    nr = 1; //важность,т.е в где будет стоять строка в начале в конце в середине.
    condition = dia_DEDEROIT_q3_condition;
    information = dia_DEDEROIT_q3_info;
    permanent = FALSE;
    important = FALSE;
    description = "Я могу ещё чем нибудьпомочь";//То что отображается в меню дилога
    };

    func int dia_DEDEROIT_q3_condition()
    {
    if(Npc_KnowsInfo(other, DIA_DEDROIT_q2)) //условие когда начнётся диалог,в нашем случаи после разговора о убийстве Вино
    {
    return TRUE;
    };
    };

    func void dia_DEDEROIT_q3_info()
    {
    AI_Output(other,self,"DIA_DEDEROIT_q_15_00"); //Я могу ещё чем нибудьпомочь
    AI_Output(self,other,"DIA_DEDEROIT_q_03_01"); //Да ты бы мог мне принести кольцо защиты от пламени!
    Info_ClearChoices(DIA_DEDEROIT_q3);
    Info_AddChoice(dia_DEDEROIT_q3,"Хорошо я принесу.",dia_DEDEROIT_q3_w); //Варианты ответов
    Info_AddChoice(dia_DEDEROIT_q3,"Нет, забудь",dia_DEDEROIT_q3_e); //Варианты ответов
    Info_AddChoice(dia_DEDEROIT_q3,"Ты мне уже надоел.",dia_DEDEROIT_q3_r); //Варианты ответов
    };

    Если игрок соглашается

    func void dia_DEDEROIT_q3_w()
    {
    AI_Output(other,self,"dia_DEDEROIT_q3_w_15_00"); //Хорошо я принесу тебе кольцо.
    AI_Output(self,other,"dia_DEDEROIT_q3_w_03_01"); //Вот и отлично!
    AI_StopProcessInfos (self);
    Log_CreateTopic(TOPIC_q_r,LOG_MISSION);//дневник.
    Log_SetTopicStatus(TOPIC_q_r,LOG_Running);//дневник(миссия началась)!
    B_LogEntry(TOPIC_q_r,"Нужно принести кольцо для Ареса"); //запись в дневнике.
    };

    если игрок отказывается

    func void dia_DEDEROIT_q3_e()
    {
    AI_Output(other,self,"dia_DEDEROIT_q3_e_15_00"); //Нет, забудь.
    AI_Output(self,other,"dia_DEDEROIT_q3_e_03_01"); //Ну и ладно!
    AI_StopProcessInfos (self);
    };

    Если игрок говорит третий вариант ответа

    func void dia_DEDEROIT_q3_r()
    {
    AI_Output(other,self,"dia_DEDEROIT_q3_r_15_00"); //Забудь!
    AI_Output(self,other,"dia_DEDEROIT_q3_r_03_01"); //Тогда умри!
    AI_StopProcessInfos (self);
    B_Attack(self,other,AR_NONE,1);//функция атаки,после разговора непись будет вас атаковать
    };

    instance DIA_DEDEROIT_q4 (C_Info)
    {
    npc = NONE_1000_Dedroit;//опятьже имя
    nr = 1;
    condition = dia_DEDEROIT_q4_condition;
    information = dia_DEDEROIT_q4_info;
    permanent = FALSE;
    important = FALSE;
    description = "Вот, я прнёс тебе кольцо";//отображение в меню диалога
    };

    func int dia_DEDEROIT_q4_condition()
    {
    if(Npc_HasItems(other, ItRi_Prot_Fire_01)>= 1) //он начнётся если привас будет это кольцо
    {
    return TRUE;
    };
    };

    func void dia_DEDEROIT_q4_info()
    {
    AI_Output(other,self,"DIA_DEDEROIT_q4_15_00"); //Вот, я прнёс тебе кольцо!
    AI_Output(self,other,"dia_DEDEROIT_q4_03_01"); //Отлично!
    b_giveinvitems(other,self, ItRi_Prot_Fire_01,1);//вы отдаёте это кольцо!
    B_GivePlayerXP(250);//это сеолько опыта вы получили
    Log_SetTopicStatus(TOPIC_q_r,LOG_SUCCESS);//миссия закончена
    B_LogEntry(TOPIC_q_r,"Я отдал Арксу кольцо.");//запись в дневнике
    };

    TOPIC_q_r прописываем в \Story\Log_Entries\LOG_Constants_Yoly.d
    и в конце прописываем const string TOPIC_q_r= "Кольцо для Ареса";
    12.02.2008, 13:21
    Zitat Zitat von MEG@VOLT Beitrag anzeigen
    Создать новую,полноценную гильдию нельзя,можно только переделать под свои нужды существующие!
    Давайте сделам допустим гильдию сектатнтов.
    Чтобы её сделать:
    1)заходим в _Intern\Constants.d
    там заменяем допустим
    const int GIL_EMPTY_D= 15; на const int GIL_SEC= 15;(где SEC->сокращёное название гильдии)!
    2)Заходим в Scripts\Content\Story\TEX.d
    и в разделе const string TXT_GUILDS[66] =
    парописываем вместо "D",ставим "Сектант",
    3)заходим в _work\data\Scripts\_decompiled\AI\Human\Guilds.d
    Там вместо этого
    /* D */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, /* D */ ATT_NEUTRAL, ATT_NEUTRAL, /* D */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, /* D */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, /* D */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL
    };
    ставим
    /* SEC */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, /* SEC */ ATT_NEUTRAL, ATT_NEUTRAL, /* SEC */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, /* SEC */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, /* SEC */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL
    };

    Автор статей DEDROIT

    [Bild: odin_md_akcr.jpg]
    ASUS LGA-1150 Z97-K, Intel Core i7-4770 3.4 GHz, EVGA GTX 980 Ti Hybrid ( 6.0 Gb), 16Gb DDR3, SSD OSZ Vertex 460A (240 Gb) + SSD Samsung SM951 M.2 (256 Gb), Dell Ultrasharp U2515H (2560 x 1440) + BenQ E2400HD (1920x1080)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhnge hochladen: Nein
  • Beitrge bearbeiten: Nein
Impressum | Наши Баннеры | Приват
World of Gothic by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide