[AGFC: Valley of Gothic] М: Скриптинг в Готике

Страница 21 из 65 « Первая 111415161718192021 2223242526272831 Последняя »
Поиск в этой теме:

Расширенный поиск
Старый 24.08.2005, 13:38   #801
Bog-Dan

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

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

2TycoooN:
Спасибо....а то все мучаюсь... :)
Ответить с цитированием
Старый 24.08.2005, 21:43   #802
TSYLin

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

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

Исчо вопрос, а что если максимальное кол-во в массиве, будет больше прописано, чем есть, будут ли глюки?
Ответить с цитированием
Старый 24.08.2005, 22:40   #803
Finsernis

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

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

2TSYLin:
Кто-то когда-то говорил, что размерность массива задается в экзешнике, так-что, ИМХО, глюки будут и еще какие!
Но попытка не пытка - попробуй, авось что-нибудь да и получится! Если получится - сообщи!
Ответить с цитированием
Старый 24.08.2005, 23:37   #804
Bog-Dan

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

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

Помогите со скриптом -
я хочу чтобы мой НПС после диалога Атаковал другого НПС но я хочу чтобы он его протыкал!!что прописать!!
это мой скрипт скажите что надо чтобы протыкал!!!
 Npc_SetTarget(self,tpl_9129_edvin);
 AI_StartState(self,ZS_Attack,1,"");
Ответить с цитированием
Старый 25.08.2005, 08:01   #805
WindWW

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

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

Цитата:
Сообщение от Finsternis link=board=gothic&t=1105030050&start=800#802 date=08/24/05, в 22:40:01
2TSYLin:
Кто-то когда-то говорил, что размерность массива задается в экзешнике, так-что, ИМХО, глюки будут и еще какие!
Но попытка не пытка - попробуй, авось что-нибудь да и получится! Если получится - сообщи!
В экзешнике жестко заданы размеры классов, а про размеры массивов никто не писал, поэтому есть два пути:
1) анализ декомпилированного кода экзешника ( это для крутых программистов );
2) проверка на практике.
Если задать размер больше, чем нужно, то ничего страшного не произойдет если размер не задается в экзешнике.
P.S. Декомпилированный экзешник изучал Vam, когда создавал свою чудо-программу. Он, по-моему, и писал о размерах классов. Может быть он, или кто-то еще из хороших программистов, просветит всех остальных и насчет размеров массивов?
Ответить с цитированием
Старый 25.08.2005, 08:38   #806
Vam

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

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

2WindWW:
Декомпилированный экзешник изучал Vam, когда создавал свою чудо-программу. Он, по-моему, и писал о размерах классов. Может быть он, или кто-то еще из хороших программистов, просветит всех остальных и насчет размеров массивов?
Предел размера любого массива 255, но в скриптах можно изменять не все массивы, размеры массивов, которые используются внутри любых классов трогать нельзя, остальные можно. Пример: GIL_MAX = 66, изменять нельзя, задет размер массивов класса C_GILVALUES, а MAX_WEAPONS = 13 изменять можно, задает размер массива изготавливаемого ГГ оружия.
Использовать индексацию массива более заданного размера категорически нельзя, последствия непредсказуемы ("слом" проги, вылет Готики, зависание компа и т.д.). Также нельзя использовать в качестве индекса сам размер массива - последствия те же.

2Bog-Dan:
я хочу чтобы мой НПС после диалога Атаковал другого НПС но я хочу чтобы он его протыкал!!что прописать!!
Используй функцию AI_FinishingMove. Все функции рассмотрены в Уроках скриптологии - читай!!!
Ответить с цитированием
Старый 25.08.2005, 10:19   #807
dixie

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

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

2Vendiga:
Так я всё-таки не пойму - можно новые спецы создавать в готе или нет? И к рунам их прикреплять. Или за это всё-такии экзешник отвечает?
Очень много заклинаний физически прописано в exe-шнике. Новые заклинания превращения, например не создашь - можно только заменить существующее. Пирокинез тоже имеет привязки, ну и.т.п. Боевые можно, но только похожие на те, которые есть. Сделать что-то в принципе другое попробовать можно, но сложно. А, вот, телепорты - запросто и в любом количестве.
Ответить с цитированием
Старый 25.08.2005, 15:53   #808
Bog-Dan

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

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

2Vam:
Неидет все равно ударит.....и все....а протыкнуть его не хочет...


и в АСЮ добавил и не отвечаешь... :(
Ответить с цитированием
Старый 26.08.2005, 15:52   #809
TSYLin

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

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

У меня вопрос, вот например все знают как сделать, что бы оружие приносило бонус к 1 или 2-ручному оружию, но не подскажите ли как сделать бонус к луку/арбалету.

Заранее спасибо
Ответить с цитированием
Старый 26.08.2005, 16:44   #810
Killer-XXX
Строители Миртаны
 
 
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
Killer-XXX вне форума

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

2TSYLin:
В скрипте твоего оружия пишешь строки:
on_equip = Equip_MyBow;
on_unequip = UnEquip_MyBow;

Ниже объявляешь эти функции:
func void Equip_MyBow()
{
if(Npc_IsPlayer(self))
* * *{
* * * * * *B_AddFightSkill(self,NPC_TALENT_BOW,30);
* * *};
};

func void UnEquip_MyBow()
{
if(Npc_IsPlayer(self))
* * *{
* * * * * *B_AddFightSkill(self,NPC_TALENT_BOW,-30);
* * *};
};
Для арбалета то же самое, только навык поменяешь на NPC_TALENT_CROSSBOW. Ну и на сколько увеличивать тоже разберешься.
Удачи!
Ответить с цитированием
Старый 26.08.2005, 21:42   #811
TSYLin

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

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

Прошу обьяснить

вот скрипт:

instance ITMW_SEK_1H_03(C_Item)
{
     name = "Меч Веры";
     mainflag = ITEM_KAT_NF;
     flags = ITEM_SWD;
     material = MAT_METAL;
     value = value_ITMW_SEK_1H_03;
     damageTotal = damage_ITMW_SEK_1H_03;
     damagetype = DAM_EDGE;
     range = Range_ITMW_SEK_1H_03;
     cond_atr[2] = ATR_MANA_MAX;
     cond_value[2] = COND_VALUE_ITMW_SEK_1H_03;
     visual = "ItMw_055_1h_sword_long_05.3DS";
     description = name;
     text[0] = NAME_RANGE;
     count[0] = range;
     text[1] = "Это оружие выковал я";
     text[2] = NAME_Damage;
     count[2] = damageTotal;
     text[3] = NAME_Mana_needed;
     count[3] = cond_value[2];
     text[4] = NAME_Bonus_Mana;
     count[4] = 25;
     text[5] = NAME_Value;
     count[5] = value;
};


func void Equip_ITMW_SEK_1H_03()
{
     self.attribute[ATR_MANA_MAX] = self.attribute[ATR_MANA_MAX] + 25;
     self.attribute[ATR_MANA] = self.attribute[ATR_MANA] + 25;
};

func void UnEquip_ITMW_SEK_1H_03()
{
     self.attribute[ATR_MANA_MAX] = self.attribute[ATR_MANA_MAX] - 25;
     if(self.attribute[ATR_MANA] >= 25)
     {
           self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - 25;
     }
     else
     {
           self.attribute[ATR_MANA] = 0;
     };
};


Но мана при одевании оружия не прибавляется.

или вот:

instance ITAR_GURU(C_Item)
{
     name = "Одеяние Гуру";
     mainflag = ITEM_KAT_ARMOR;
     flags = 0;
     protection[PROT_EDGE] = 150;
     protection[PROT_BLUNT] = 150;
     protection[PROT_POINT] = 150;
     protection[PROT_FIRE] = 130;
     protection[PROT_MAGIC] = 130;
     value = VALUE_ITAR_GUR_M;
     wear = WEAR_TORSO;
     visual = "ItAr_KDW_L_ADDON.3ds";
     visual_change = "HUM_GurM_Armor.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_ITAR_GURU()
{
     Npc_ChangeAttribute(self,ATR_REGENERATEMANA,ITRI_ MANAREGENERATE_BONUS);
};

func void unequip_ITAR_GURU()
{
     Npc_ChangeAttribute(self,ATR_REGENERATEMANA,-ITRI_MANAREGENERATE_BONUS);
};

Но мана при одевании доспехов не востанавливается, может надо где-нибудь что-нибудь прописать?

Заранее всем спасибо за советы и терпение

2Killer-XXX:
Спасибо за лук, и арбалет ;D
Ответить с цитированием
Старый 26.08.2005, 21:47   #812
Bog-Dan

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

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

2СКРИПТЕРЫ:
Ответьте Плиз на мой выше вопрос!!!!!
Ответить с цитированием
Старый 26.08.2005, 21:53   #813
SATANIZMat

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

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

func void Equip_ITMW_SEK_1H_03()
{
     if(Npc_IsPlayer(self))
     {
     self.attribute[ATR_MANA_MAX] = self.attribute[ATR_MANA_MAX] + 25;
    self.attribute[ATR_MANA] = self.attribute[ATR_MANA] + 25;
};
func void UnEquip_ITMW_SEK_1H_03()
{
     if(Npc_IsPlayer(self))
     {
     self.attribute[ATR_MANA_MAX] = self.attribute[ATR_MANA_MAX] - 25;
    if(self.attribute[ATR_MANA] >= 25)
    {
          self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - 25;
    }
    else
    {
          self.attribute[ATR_MANA] = 0;
    };
};


Так надо. Ты не написал что бонус ГГ идёт.
Ответить с цитированием
Старый 26.08.2005, 22:32   #814
Vam

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

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

2Bog-Dan:
Ответьте Плиз на мой выше вопрос!!!!!
Вызови эту функцию -
// ************************************************** ******
// Функция переводящая НПС в состояние атаки
// ************************************************** ******
* *
// ======================================
// Аргументы:
// --------------------------------------
// slf * * * * * * *- атакующий НПС (далее - агрессор)
// oth * * * * * * *- атакуемый НПС (далее - жертва)
// attack_reason * *- причина атаки
// wait * * * * * * - время выжидания перед атакой
// ======================================

func void B_Attack(var C_NPC slf,var C_NPC oth,var int attack_reason,var int wait);

аргумент attack_reason должен иметь значение AR_KILL, остальные аргументы понятны из описания. *;)
Ответить с цитированием
Старый 26.08.2005, 22:54   #815
TSYLin

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

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

2SATANIZMatik:

Нет, не получается, может быть есть ещё какой нибудь выход?  :'(
Ответить с цитированием
Старый 26.08.2005, 22:59   #816
Bog-Dan

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

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

2Vam:
Будь добор, скажи для Готики 1. ::)
Ответить с цитированием
Старый 26.08.2005, 23:00   #817
Finsernis

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

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

2TSYLin:
Ты забыл в инстанции твоего меча описать функции on_equip и on_unequip.
Просто после строки visual = "ItMw_055_1h_sword_long_05.3DS";
напиши вот что:
on_equip = Equip_ITMW_SEK_1H_03;
on_unequip = UnEquip_ITMW_SEK_1H_03;


Т.е. при одевании твоего меча будет вызываться функция Equip_ITMW_SEK_1H_03, добавляющая ману, а при снятии - UnEquip_ITMW_SEK_1H_03, возвращающая исходные значения маны.

А с регенерацией маны я тоже долго мучался, когда кольцо делал. У меня получилось только тогда, когда бонус регенерации был равен 1. Проверь, чтобы ITRI_MANAREGENERATE_BONUS было равно единице, может тогда заработает.

2SATANIZMatik:
Ты не написал что бонус ГГ идёт
Да, так бонус будет идти ТОЛЬКО ГГ, а если так, как в оригинале бонус будет идти всем. ИМХО, эти строки не обязательны, но и не повлекут никакой ошибки! Все зависит от того, что автор хотел сделать.
Ответить с цитированием
Старый 26.08.2005, 23:11   #818
TSYLin

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

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

2Finsternis:

Не подскажешь где надо поглядеть что бы
ITRI_MANAREGENERATE_BONUS было равно единице
Ответить с цитированием
Старый 26.08.2005, 23:21   #819
Finsernis

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

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

2TSYLin:
Думаю в Constans.d или Story_Globals.d или в папке _MISK_ в разныx скриптах, но ИМХО легче просто написать вот что:
Npc_ChangeAttribute(self,ATR_REGENERATEMANA,1);
Ответить с цитированием
Старый 27.08.2005, 11:38   #820
TSYLin

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

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

Помогите пожалуста сделать огненный/магический/огненно-магический меч, и что бы магия и огонь и удар меча наносили урон. Я конечно видел описание создание меча finch'a, но шаг 3 мне не понятен, если у кого есть этот мануал, то прошу обьяснить именно с 3 шага, а именно с создания 2 файлов в папке  Gothic II\_work\data\Scripts\Content\Story\B_Content

Заранее всем спасибо

Добавление от 08/27/05, в 11:42:57
Не уже ли, на каждый такой меч нужно создавать 2 файла?
Ответить с цитированием
Старый 27.08.2005, 13:01   #821
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2TSYLin:
Я конечно видел описание создание меча finch'a, но шаг 3 мне не понятен, если у кого есть этот мануал, то прошу обьяснить именно с 3 шага, а именно с создания 2 файлов в папке  Gothic II\_work\data\Scripts\Content\Story\B_Content
Так ты привел бы здесь этот мануал, мы бы тебе может объяснили, а то искать его лень ::)
Отправить личное сообщение для Ответить с цитированием
Старый 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);
Это означает, что наш меч будет поджигать людей и монстров соответственно.
Ответить с цитированием
Старый 27.08.2005, 13:32   #823
Vam

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

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

2Bog-Dan:
Будь добор, скажи для Готики 1.
В Готике 1, чтобы НПС добил другого НПС из цикла атаки ZS_Attack необходимо выполнение следующего условия:
// если отношения между НПС враждебные или (причина атаки AIV_AR_INTRUDER и НПС знает новости NEWS_DEFEAT)
if((Npc_GetPermAttitude(self,other) == ATT_HOSTILE) ¦¦ ((C_GetAttackReason(self) == AIV_AR_INTRUDER) && Npc_HasNews(self,NEWS_DEFEAT,self,other)))
т.е. надо задать враждебные отношения между НПС или установить соответствующую причину атаки и зафиксировать новость.
Ответить с цитированием
Старый 27.08.2005, 14:22   #824
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2TSYLin:
Так чего не понятно?
Делай как там написано, и все.

Не уже ли, на каждый такой меч нужно создавать 2 файла?
Ну да, хотя в принципе можно по-разному делать, но если неохота ничего переделывать в этом коде, то да.
Отправить личное сообщение для Ответить с цитированием
Старый 27.08.2005, 14:32   #825
TSYLin

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

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

2TycoooN:

Дык мне нужно свой собственный меч делать, а не этот брать, в этом вся и разница, и потом как сделать что бы меч наносил одновременно повреждение и от огня и от магии?
Ответить с цитированием
Старый 27.08.2005, 15:53   #826
Bog-Dan

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

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

2Vam:
Буду пробывать спасиб..
Ответить с цитированием
Старый 27.08.2005, 19:02   #827
Killer-XXX
Строители Миртаны
 
 
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
Killer-XXX вне форума

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

2TSYLin:
Если по русски, то скажи, тебе надо чтобы был эффект или тебе надо именно нанесение урона магией?
Если просто урон магический и от меча, вот так попробуй.
damagetype = DAM_EDGE && DAM_MAGIC;

Или еще можно пробовать, но на счет этого крайне не уверен:
damagetype = DAM_EDGE l DAM_MAGIC;

А если важен сам эффект, то делай как по тутору.

Ответить с цитированием
Старый 27.08.2005, 19:08   #828
Finsernis

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

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

2TSYLin:

Вот один из способов создать огненно – магический меч.

Вот инстанция меча:
instance ITMW_Fire_Magic_Sword(C_Item)
{
     name = "Огненно - магический меч";
     mainflag = ITEM_KAT_NF;
     flags = ITEM_2HD_SWD;
     material = MAT_METAL;
     value = 5000;
     wear = WEAR_EFFECT;
     effect = "SPELLFX_FIREARROW";
     damageTotal = 200;
     damagetype = DAM_EDGE;
     range = 120;
     cond_atr[2] = ATR_STRENGTH;
     cond_value[2] = 100;
     visual = "ItMw_025_2h_Sword_old_01.3DS";
     description = name;
};


Вот функция специального повреждения:
func void B_FireMagicSwordSpecialDamage(var C_Npc oth,var C_Npc slf)
{
     var C_Item ReadyWeap;
     ReadyWeap = Npc_GetReadiedWeapon (oth);
     var int hlp_haotic_damage;
     if (Hlp_IsItem (ReadyWeap, ITMW_Fire_Magic_Sword) == TRUE)
     {
           hlp_haotic_damage =  Hlp_Random (100);
           if (hlp_haotic_damage < 50)
           {
                 Wld_PlayEffect ("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE);
           }
           else if (hlp_haotic_damage >= 50)
           {
                 Wld_PlayEffect ("spellFX_BELIARSRAGE", self, self, 0, 0, 0, FALSE);
           };                  
     };
};


Далее в скриптах
AI\Human\B_Human\B_AssessDamage.d
AI\Monster\B_Monster\B_MM_AssessDamage.d

после B_BeliarsWeaponSpecialDamage (other, self);
напиши B_FireMagicSwordSpecialDamage(other, self);

Откомпилируй и все.

Сори за краткость, спешу! Если не поймешь, скажи. Вечером обьясню!
Ответить с цитированием
Старый 27.08.2005, 20:23   #829
TSYLin

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

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

2Killer-XXX:

Мне надо что бы
damagetype = DAM_EDGE && DAM_MAGIC;
, но так что бы каждый пункт (дамага), обазночался отдельно, и каждый удар наносил не одинаковое код-во повреждения от оружия и магии.

2Finsternis:

Скорее всего меч будет бить молнией, и наносить такое же магическое повреждение как Коготь Балиара, а мне надо что бы оружие наносило повреждение и от магии, и от огня, и от оруждия.
Ответить с цитированием
Старый 27.08.2005, 23:48   #830
Finsernis

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

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

2TSYLin:
Меч не будет наносить повреждения от магии и от огня. Этот меч наносит повреждение только от оружия. Я привел тебе пример, как визуально отобразить повреждение от магии и от огня. Это просто болванка. ::)
Далее, чтобы наносился урон от огня, магии и оружия в инстанции твоего меча должно быть вот что:
* * *
* * *damagetype = DAM_MAGIC | DAM_FIRE | DAM_EDGE;
* * *damage[DAM_INDEX_MAGIC] = damage_magic_FireMagicSword;
* * *damage[DAM_INDEX_FIRE] = damage_fire_FireMagicSword;
* * *damage[DAM_INDEX_EDGE] = damage_edge_FireMagicSword;


Поясняю:

damagetype = DAM_MAGIC | DAM_FIRE | DAM_EDGE;
- это означает, что твой меч будет наносить уроны магией, огнем и просто острием.

damage[DAM_INDEX_MAGIC] = damage_magic_FireMagicSword;
– показывает, сколько будет наноситься урона магией, естественно, что константа damage_magic_FireMagicSword должна быть описана заранее.

damage[DAM_INDEX_FIRE] = damage_fire_FireMagicSword;
damage[DAM_INDEX_EDGE] = damage_edge_FireMagicSword;
– соответственно урон огнем и "ребром", т.е. острием (так дословно будет EDGE).

Далее, помогу тебе создать твой меч: ;D
1. В файле Items\IT_Melee_weapons.d напиши вот что:

Const int damage_magic_FireMagicSword = 130;
Const int damage_fire_FireMagicSword = 130;
Const int damage_edge_FireMagicSword = 30;
Const int value_ FireMagicSword = 5000;
Const int Condition_ FireMagicSword = 100;
Const int Range_ FireMagicSword = 120;

instance ITMW_Fire_Magic_Sword(C_Item)
{
* * *name = "Огненно - магический меч";
* * *mainflag = ITEM_KAT_NF;
* * *flags = ITEM_2HD_SWD;
* * *material = MAT_METAL;
* * *value = value_ FireMagicSword;
* * *wear = WEAR_EFFECT;
* * *effect = "SPELLFX_FIREARROW";
* * *damagetype = DAM_MAGIC | DAM_FIRE | DAM_EDGE;
* * *damage[DAM_INDEX_MAGIC] = damage_magic_FireMagicSword;
* * *damage[DAM_INDEX_FIRE] = damage_fire_FireMagicSword;
* * *damage[DAM_INDEX_EDGE] = damage_edge_FireMagicSword;
* * *range = Range_ FireMagicSword;
* * *cond_atr[2] = ATR_STRENGTH;
* * *cond_value[2] = Condition_ FireMagicSword;
* * *visual = "ItMw_025_2h_Sword_old_01.3DS";
* * *description = name;
* * *text[1] = "Повреждение огнем";
* * *count[1] = damage_fire_FireMagicSword;
* * *text[2] = "Повреждение магией";
* * *count[2] = damage_magic_FireMagicSword;
* * *text[3] = "Требуемая сила";
* * *count[3] = Condition_ FireMagicSword;
* * *text[5] = NAME_Value;
* * *count[5] = value; };


2. Все, теперь твой меч действительно будет наносить урон магией, огнем и острием. Жертва будет загораться в любом случае. Но теперь нам надо показать, что урон наносится также и магией. Для этого пишем вот какую функцию:
Создаем файл Story\B_Content\ B_FireMagicSwordSpecialDamage.d со следующим содержанием:

func void B_FireMagicSwordSpecialDamage(var C_Npc oth,var C_Npc slf)
{
* * *var C_Item ReadyWeap; //переменная типа C_Item для получения текущего оружия
* * *ReadyWeap = Npc_GetReadiedWeapon (oth); // присваиваем переменной ReadyWeap значение текущего оружия, находящегося в состоянии боевой готовности, т.е. ГГ держит его в руке
* * *var int hlp_haotic_damage; // переменная для определения "случайного случая"
* * *// Если предмет ReadyWeap это наш меч то

if (Hlp_IsItem (ReadyWeap, ITMW_Fire_Magic_Sword) == TRUE)
* * *{
* * * * * *hlp_haotic_damage = *Hlp_Random (100); // генерируем псевдослучайное число
// если число меньше 50 то

* * * * * *if (hlp_haotic_damage < 50)
* * * * * *{
* * * * * * * * *Wld_PlayEffect ("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE); // проиграть эффект горения на жертве
* * * * * *}
// Иначе
* * * * * *else if (hlp_haotic_damage >= 50)
* * * * * *{
* * * * * * * * *Wld_PlayEffect ("spellFX_BELIARSRAGE", self, self, 0, 0, 0, FALSE); // Эффект повреждения магией
*
* * * * *}; * * * * * * * * *
* * *};
};


3. Далее нам нужно, чтобы при каждом ударе по человеку или животному запускался наш спецэффект, для этого *в файлах
AI\Human\B_Human\B_AssessDamage.d
AI\Monster\B_Monster\B_MM_AssessDamage.d

после B_BeliarsWeaponSpecialDamage (other, self);
напиши B_FireMagicSwordSpecialDamage(other, self);

4. В файле gothic.src после строки Story\B_Content\C_ArtefaktValues.d напиши вот что Story\B_Content\ B_FireMagicSwordSpecialDamage.d .

5. Окомпилируй *и посмотри, что получилось. По идее, должно работать. Сообщи, получилось или нет, и удачи… ;)

Теперь к тебе вопрос: У тебя получилась фишка с регенерацией манны?
Ответить с цитированием
Старый 28.08.2005, 10:21   #831
TSYLin

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

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

2Finsternis:
Огромнеший респект.


Ну и на последок ещё вопрос  ;D ,какой скрипт отвечает за смену анимации вбою, после 30, 60 процентами владения?

Добавление от 08/28/05, в 10:41:57
Теперь к тебе вопрос: У тебя получилась фишка с регенерацией манны?
Да всё получилось, но в
Npc_ChangeAttribute(self,ATR_REGENERATEMANA,1);
надо писать не менее 200, иначе ты эфект не у видишь, и в день будет прибавляться где-то 1 мана.
То есть:
Npc_ChangeAttribute(self,ATR_REGENERATEMANA,200); (при одевании)
Npc_ChangeAttribute(self,ATR_REGENERATEMANA,-200); (при снятии соответственно)
Ответить с цитированием
Старый 28.08.2005, 11:26   #832
SATANIZMat

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

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

Решил я тут попрактиковаться и создать НПС. Давно не делал.
Провожу Декомпиляцию в C:\*\_work\data\Scripts\_decompiled\Story\NPС
Создаю файл
None_8000_Name

Содержание
instance None_8000_Name(Npc_Default)
{
     name[0] = Name;
     guild = GIL_None;
     id = 8000;
     voice = 6;
     flags = 0;
     npcType = npctype_main;
     level = 100;
     attribute[ATR_STRENGTH] = 300;
     attribute[ATR_DEXTERITY] = 300;
     attribute[ATR_MANA] = 1000;
     attribute[ATR_MANA_MAX] = 2000;
     attribute[ATR_HITPOINTS] = 2000;
     attribute[ATR_HITPOINTS_MAX] = 2000;
     fight_tactic = FAI_HUMAN_MASTER;
     EquipItem(self,ItMw_2h_Sld_Axe);
     B_CreateAmbientInv(self);
     B_SetNpcVisual(self,MALE,"Hum_Head_FatBald",Face_ B_Tough_Silas,BodyTex_B,ITAR_Prisoner);
     Mdl_SetModelFatness(self,0);
     Mdl_ApplyOverlayMds(self,"Humans_Arrogance.md s");
     B_GiveNpcTalents(self);
     B_SetFightSkills(self,100);
     daily_routine = Rtn_Start_8000;
};


func void Rtn_Start_8000()
{
     TA_Pray_Innos(7,0,8,0,"name_place_1");
     TA_Practice_Sword(8,0,16,0,"name_place_2");
     TA_Pray_Innos(16,0,18,0,"name_place_1");
     TA_Practice_Sword(18,0,23,0,"name_place_2");
     TA_Stand_Guarding(23,0,7,0,"name_place_3");
};

Всё вроде правильно иду в файл Npc_Globals.
НПС стоит возле Ковалорна. Поэтому дело так:

Cavalorn = Hlp_GetNpc(BAU_4300_Addon_Cavalorn);
Name = Hlp_GetNpc(None_8000_Name);

И

var C_Npc Cavalorn;
var C_Npc Name;

В Startup тоже прописываю.

Wld_InsertNpc(BAU_4300_Addon_Cavalorn,"NW_XARDAS_S TART");
Wld_InsertNpc(None_8000_Name,"NW_XARDAS_START"); - тут не уверен что писать.

В итоге провожу Компиляцию. Выдаётся ошибка
Fatal:-1 U:   PAR: STORY\NPC_GLOBALS.D: Unknown identifier : NONE_8000_Name .... <zParser.cpp,#599>
ЧТо я не там прописал?
Ответить с цитированием
Старый 28.08.2005, 11:58   #833
Bog-Dan

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

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

2SATANIZMatik:
В Глобался пробуй прописать это
---===---
var C_Npc Name;
Cavalorn = Hlp_GetNpc(BAU_4300_Addon_Cavalorn);
Name = Hlp_GetNpc(None_8000_Name);
---===----
Ответить с цитированием
Старый 28.08.2005, 12:13   #834
SATANIZMat

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

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

2Bog-Dan:
Тоже самое. И ошибка таже самая. =)
Ответить с цитированием
Старый 28.08.2005, 12:20   #835
Bog-Dan

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

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

2SATANIZMatik:
Хмм...Нужно ждать скриптеров.....и посмотрим что они нам начеркают :)
Ответить с цитированием
Старый 28.08.2005, 12:29   #836
Vam

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

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

2SATANIZMatik:
В итоге провожу Компиляцию. Выдаётся ошибка
Fatal:-1 U:   PAR: STORY\NPC_GLOBALS.D: Unknown identifier : NONE_8000_Name .... <zParser.cpp,#599>
ЧТо я не там прописал?
Ты свой файл с НПС не записал в src файл.
Ответить с цитированием
Старый 28.08.2005, 13:00   #837
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2Bog-Dan:
2SATANIZMatik:
var C_Npc Name;
Cavalorn = Hlp_GetNpc(BAU_4300_Addon_Cavalorn);
Name = Hlp_GetNpc(None_8000_Name);
Повторяю 1001 раз: писать все это необязательно.
Вообще необязательно лезть в файл Npc_Globals.d
И вообще, даже если и прописывать туда, то СОВЕРШЕННО НЕВАЖНО куда, место прописывания имеет значение только в файле Startup.d, потому что он весь разбит на функции, и поэтому НПС, стоящего рядом с Кавалорном надо вписать в ту же функцию -
Код:
STARTUP_NewWorld_Part_Xardas_01
Отправить личное сообщение для Ответить с цитированием
Старый 28.08.2005, 13:21   #838
SATANIZMat

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

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

2Vam:
Токо что записал. Та же ошибка.
Ответить с цитированием
Старый 28.08.2005, 15:41   #839
DEDROIT

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

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

2SATANIZMatik:
Значит ты создал скрипт.Потом прописал в в Startup.d.А ты прописал своего непися в Gothic.src.и где находятся твои веппоинты?

Добавление от 08/28/05, в 16:00:48
2DEDROIT: Знаешь я попробывал сделать твоего непися,только не прописыва в Глобалс д.Так вот он у меня выдаёт другую ошибку
связанную с Lee.de.у него почему то тоже прописано daily_routine = Rtn_Start_8000;
Попробуй изменить ID=8000;На допустим 666.Такой точно не повторяется проверял.
А насчёт того что у тя ошибка в глоболсе д,может ты забал чёнить удалить7Проверь!
Удачи!

Добавление от 08/28/05, в 16:01:57
Тоесть не 2DEDROIT: а 2SATANIZMatik:
Ответить с цитированием
Старый 28.08.2005, 16:32   #840
Bog-Dan

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

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

2СКРИПТЕРАМ:
Как сделать чтобапример я поговорил с НПС и поле этого другой нпс автоматом подбежл ко мне???
Ответить с цитированием
Страница 21 из 65 « Первая 111415161718192021 2223242526272831 Последняя »


Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе

Смайлы Вкл.
[IMG] код Вкл.
HTML код Вкл.


Текущее время: 00:12. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot

AGFC: Valley of Gothic © 2004-2022

Яндекс.Метрика