Показать сообщение отдельно
Старый 27.08.2005, 13:11   #822
TSYLin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Скриптинг в Готике

Хорошо, вот мануал, полностью (что бы понятно было):

Меч (мануалка для второй Готики)

Шаг 1.
В папке Gothic II\_work\data\Scripts\Content\Items создаем файл IT_MyWeapon.d
В этом файле мы описываем, как наш меч будет выглядеть. Мы можем использовать модели из самой Готики(как, например, делаю я) либо что-нибудь свое.
Вот внутренности моего файла:

INSTANCE ItMw_MySword (C_Item)
{      
    name                         =      "Мой меч";  //название меча

    mainflag                   =      ITEM_KAT_NF;
    flags                         =      ITEM_2HD_SWD;      
    material                   =      MAT_METAL;

    value                         =      Value_MySword;// стоимость нашего меча

    damageTotal              =       Damage_MySword;// повреждение
    damagetype                   =      DAM_EDGE;
    range                      =        Range_MySword; // радиус действия      
   
    wear                        =      WEAR_EFFECT;
    effect                        =      "SPELLFX_FIREBOW";//наш меч будет гореть

    cond_atr[2]               =      ATR_STRENGTH;// требуется сила
    cond_value[2]              =      Condition_MySword;// сколько требуется силы
    visual                         =      "ItMw_060_2h_sword_01.3DS";//модель меча

    description                  = name;
    TEXT[2]                        = NAME_Damage;                              COUNT[2]      = damageTotal;
    TEXT[3]                   = NAME_Str_needed;                        COUNT[3]      = cond_value[2];
    TEXT[4]                   = NAME_TwoHanded;
    TEXT[5]                        = NAME_Value;                              COUNT[5]      = value;
};
Здесь все понятно. Проблем возникнуть не должно.

Шаг 2.
В папке Gothic II\_work\data\Scripts\Content\ находим файл Tuning_Melee_Weapons.d и дописываем следующие строчки:

const int Damage_MySword             = 120;
const int Condition_MySword      = 100;
const int Range_MySword            = 120;
const int Value_MySword            = 100000;
Что это такое описано выше.

Шаг 3.
В папке Gothic II\_work\data\Scripts\Content\Story\B_Content создаем файл B_ScHasMyWeapon.d с такой начинкой:

func int C_ScHasMyWeapon ()
{      
    if (Npc_HasItems (hero, ItMw_MySword))
    {
          return TRUE;
    };
   
    return FALSE; //DEFAULT
};      

func int C_IsItemMyWeapon(var C_ITEM Wea)
{      
    if (Hlp_IsItem(Wea, ItMw_MySword) == TRUE)
    {
          return TRUE;
    };

    return FALSE; //DEFAULT
};      
func int C_ScHasReadiedMyWeapon ()
{      
    var C_ITEM ReadyWea; ReadyWea = Npc_GetReadiedWeapon(hero);
   
    if (C_IsItemMyWeapon(ReadyWea))
    {
          return TRUE;
    };
   
    return FALSE; //DEFAULT
};

func int C_ScHasEquippedMyWeapon ()
{      
    var C_ITEM EquipWea; EquipWea = Npc_GetEquippedMeleeWeapon(hero);
   
    if (C_IsItemMyWeapon(EquipWea))
    {
          return TRUE;
    };
   
    return FALSE; //DEFAULT
};

func void B_ClearMyWeapon ()
{      
    Npc_RemoveInvItems (hero , ItMw_MySword, Npc_HasItems (hero, ItMw_MySword));

};      

Что здесь к чему, объяснять не буду. Кому интересно – спрашивайте в личные или сами разбирайтесь. Здесь не так уж и сложно.

Теперь в той же папке создаем файл B_MyWeaponSpecialDamage.d и вписываем в него следующее:

func void B_MyWeaponSpecialDamage (var C_NPC oth, var C_NPC slf)
{
   
                     
          if (C_ScHasReadiedMyWeapon())
          && (Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(hero))//Вот этой строки не хватало!
         
    {
               
    Wld_PlayEffect("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE );
    Npc_ClearAIQueue      (self);
                     
    AI_StartState            (self, ZS_MagicFreeze, 0, "");
    return;
    };
                     
                           
};
Строчка Wld_PlayEffect("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE ); означает, что при каждом ударе нашего меча противник будет загораться.

VOB_MAGICBURN – непосредственно эффект горения. Названия других эффектов можно посмотреть в файле VisualFx.dat в папке Gothic II\_work\data\Scripts\_compiled.
Для просмотра dat-файлов рекомендую редактор bred.

Далее в файлах B_AssessDamage.d и B_MM_AssessDamage.d после строки B_BeliarsWeaponSpecialDamage (other, self); вставляем:
B_MyWeaponSpecialDamage (other, self);
Это означает, что наш меч будет поджигать людей и монстров соответственно.
Ответить с цитированием