Показать сообщение отдельно
Старый 29.06.2005, 19:17   #488
Bliz@rd

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

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

Попытался всё сделать сначала,вот что я делал:
1)Созал непися(NONE_999_Recharger):
instance None_999_Recharger (Npc_Default)  
{
name                             = "";
guild                            = GIL_NONE;
npctype                          = NPCTYPE_AMBIENT;
flags                            = NPC_FLAG_IMMORTAL;
level                            = 999;
voice                            = 0;
id                               = 999;
noFocus                          = 1;
bodyStateInterruptableOverride       = 1;

damagetype                          = DAM_EDGE;
damage [DAM_INDEX_EDGE]            = 0;


//-------- visuals --------
B_SetNpcVisual (self, MALE, "Hum_Head_Fatbald", 0, 0, ITAR_MIL_M);
Mdl_SetModelScale (self, 0.01, 0.01, 0.01);


//-------- talents --------
B_SetFightSkills (self, 0);  


//------------- ai -------------
fight_tactic    = FAI_HUMAN_COWARD;

// ------ TA anmelden ------
daily_routine    = Rtn_start_999;
};


func void Rtn_Regeneration_999 ()
{
 TA_Recharger (0,00,13,00, Npc_GetNearestWP (hero));
 TA_Recharger (13,00,0,00, Npc_GetNearestWP (hero));
};

func void Rtn_start_999 ()
{
 TA_Stand_Eating    (08,00,23,00,"NW_FARM1_OUT_01");
TA_Stand_ArmsCrossed   (23,00,08,00,"NW_FARM1_OUT_01");
};
Потом его прописал Глобалсе var C_Npc Recharger; и Recharger = Hlp_GetNpc(NONE_999_Recharger);
Потом в статупе Wld_InsertNpc(NONE_999_Recharger,"NW_FARM1_OUT_01" );
Всё это я прописывал после Лобарта.
И ещё прописал в Gothic src
Story\NPC\NONE_999_Recharger.d
Прописал ниже ксардаса.
Потом начал вставлять амулет:
Сначала зашёл AI\Human\TA_Human и создал там  ZS_Recharger
В нём прописал
func void ZS_Recharger()
{
    B_ResetAll (self);
    B_ClearPerceptions (self);
};

func int ZS_Recharger_loop()
{
    if (Npc_GetStateTime(self) > 3)
    {
          Npc_SetStateTime (self, 0);

          if (hero.attribute[ATR_MANA] < hero.attribute[ATR_MANA_MAX])
          {
                      hero.attribute[ATR_MANA]=hero.attribute[ATR_MANA]+1;
          };

          AI_Teleport (self, Npc_GetNearestWP (hero));
         
    };

    return LOOP_CONTINUE;
};

func void ZS_Recharger_end()
{
    AI_PlayAni (self,"T_LGUARD_2_STAND");      
};
Потом зашёл в TA.D и прописал в самом конце
func void TA_Recharger                  (var int start_h, var int start_m, var int stop_h, var int stop_m, VAR string waypoint)      {TA_Min            (self,      start_h,start_m, stop_h, stop_m, ZS_Recharger,                        waypoint);};
Потом зашёл в IT_Amulette.D и после этого
instance ItAm_Hp_Mana_01(C_Item)
{
     name = "Амулет просвещения";
     mainflag = ITEM_KAT_MAGIC;
     flags = ITEM_AMULET;
     value = Value_Am_HpMana;
     visual = "ItAm_Hp_Mana_01.3ds";
     visual_skin = 0;
     material = MAT_METAL;
     on_equip = Equip_ItAm_Hp_Mana_01;
     on_unequip = UnEquip_ItAm_Hp_Mana_01;
     wear = WEAR_EFFECT;
     effect = "SPELLFX_ITEMGLIMMER";
     description = "Амулет просвещения";
     text[2] = NAME_Bonus_HP;
     count[2] = Am_HpMana_Hp;
     text[3] = NAME_Bonus_Mana;
     count[3] = Am_HpMana_Mana;
     text[5] = NAME_Value;
     count[5] = value;
     inv_zbias = INVCAM_ENTF_AMULETTE_STANDARD;
};
прописал это
INSTANCE  ItAm_Mana_Regener(C_Item)
{
    name                   =      NAME_Amulett;

    mainflag             =      ITEM_KAT_MAGIC;
    flags                   =      ITEM_AMULET;

    value                   =      100;(здесь ИЗМЕНИЛ как и сказа Tycooon)

    visual                   =      "ItAm_Strg_01.3ds";

    visual_skin       =      0;
    material             =      MAT_METAL;
    on_equip            =      Equip_ItAm_Mana_Regener;
    on_unequip            =      UnEquip_ItAm_Mana_Regener;

    wear                  =       WEAR_EFFECT;
    effect                  =      "SPELLFX_ITEMGLIMMER";

    description            = "Амулет регенерации маны";
   
   
    TEXT[5]                  = NAME_Value;
    COUNT[5]            = value;

    INV_ZBIAS                        = INVCAM_ENTF_AMULETTE_STANDARD;
   
};

FUNC VOID Equip_ItAm_Mana_Regener()
{
    Npc_ExchangeRoutine      (None_999_Recharger,"Regeneration");
};

FUNC VOID UnEquip_ItAm_Mana_Regener()
{
    Npc_ExchangeRoutine      (None_999_Recharger,"Start");
};
Потом его прописал в Gothic src
После AI\Human\TA_Human\ZS_Wash_FP.d
Прописал AI\Human\TA_Human\ZS_Recharger.d
Потом начал компиляцию и прога от Vama выдаёт ошибку(красным это после того как я исправил value    =      Value_Mana_Regener; на  value  = 100;а раньше ошибка была синяя приведена выше)
Ошибка:00:01 Fatal:-1 U: PAR:ITEMS/IT_AMULETTED.D:Suntax error INSTANCE (line 420)…<zPARSER.cpp,#599>
Как можно исправить эту ошибку(вроде бы заменил  Value_Mana_Regener  на 100(исправил в одном месте))?Заранее спосибо.




Добавление от 06/28/05, в 20:45:12
И ещё хотел попробывать сделать точь в точь как написал Finch.
func void Rtn_Regeneration_999 ()
{
 TA_Recharger (0,00,13,00, Npc_GetNearestWP (hero));
 TA_Recharger (13,00,0,00, Npc_GetNearestWP (hero));
};

func void Rtn_start_999 ()
{
 TA_Stand_WP (0,00,13,00, Npc_GetNearestWP (hero));
 TA_Stand_WP (13,00,0,00, Npc_GetNearestWP (hero));
};
Но не знаю после кого в Startup.d и Npc_Globals.d нужно прописывать(незнаю где находится веппоинт)Никто бы не могсказать
после кого нужно прописывать в глобалсе и стаупе?

Добавление от 06/29/05, в 19:37:34
Пытался вставить просто амулет без непися(а потом просто вставит его в инвентарь NPC), вот что я делал:
В папке AI\Human\TA_Human создал файл ZS_Recharger
Вот его содержимое:
func void ZS_Recharger()
{
    B_ResetAll (self);
    B_ClearPerceptions (self);
};

func int ZS_Recharger_loop()
{
    if (Npc_GetStateTime(self) > 3)
    {
          Npc_SetStateTime (self, 0);

          if (hero.attribute[ATR_MANA] < hero.attribute[ATR_MANA_MAX])
          {
                      hero.attribute[ATR_MANA]=hero.attribute[ATR_MANA]+1;
          };

          AI_Teleport (self, Npc_GetNearestWP (hero));
         
    };

    return LOOP_CONTINUE;
};

func void ZS_Recharger_end()
{
    AI_PlayAni (self,"T_LGUARD_2_STAND");      
};
Далее в файле TA.d дописывал следующую строчку:
func void TA_Recharger      (var int start_h, var int start_m, var int stop_h, var int stop_m, VAR string waypoint)      {TA_Min            (self,      start_h,start_m, stop_h, stop_m, ZS_Recharger,                        waypoint);};
Ну и в конце-концов вставил в файле It_Amulette.d следующее:
INSTANCE  ItAm_Mana_Regener(C_Item)
{
    name                   =      NAME_Amulett;

    mainflag             =      ITEM_KAT_MAGIC;
    flags                   =      ITEM_AMULET;

    value                   =      Value_Mana_Regener;

    visual                   =      "ItAm_Strg_01.3ds";

    visual_skin       =      0;
    material             =      MAT_METAL;
    on_equip            =      Equip_ItAm_Mana_Regener;
    on_unequip            =      UnEquip_ItAm_Mana_Regener;

    wear                  =       WEAR_EFFECT;
    effect                  =      "SPELLFX_ITEMGLIMMER";

    description            = "Амулет регенерации маны";
   
   
    TEXT[5]                  = NAME_Value;
    COUNT[5]            = value;

    INV_ZBIAS                        = INVCAM_ENTF_AMULETTE_STANDARD;
   
};
Но в компиляцие выдаёт ошибку:
00:00 Fatal:-1 U: PAR:ITEMS/IT_AMYLETTED.D:Syntax error:INSTANCE(line 421)…<zParser.cpp,#599>
Указывает на эту строчку      name   =      NAME_Amulett;
Что я делаю не правильно?

Я попытался вставить амулет (защита от магии 50)
всё получилось
Просто вставил в папку IT_Amulette.d(_decompiled\Items):
INSTANCE ItAm_Prot_Fire(C_Item)
{
name = "Амулет из жерла вулкана";

mainflag = ITEM_KAT_MAGIC;
flags = ITEM_AMULET;

value = 10000;

visual = "ItAm_Prot_Fire_01.3ds";

visual_skin = 0;
material = MAT_METAL;

wear = WEAR_EFFECT;
on_equip = Equip_Prot_Fire;
on_unequip = UnEquip_Prot_Fire;

description = name;

TEXT[2] = "Защита от огня";
COUNT[2] = 50;
TEXT[5] = NAME_Value;
COUNT[5] = 10000;

INV_ZBIAS = INVCAM_ENTF_AMULETTE_STANDARD;
};

FUNC VOID Equip_Prot_Fire()
{
self.protection [PROT_FIRE] += 50;
};


FUNC VOID UnEquip_Prot_Fire()
{
self.protection [PROT_FIRE] -= 50;
};
потом вставил его в инвентарь( CreateInvItems (self,ItAm_Prot_Fire,1)Компелирую и всё.
А с омулетом востоновления маны не получается какую я делаюошибку?

Ответить с цитированием