Menu

Ako vymenit Fireball v inventári Drakov za iný spell?

Vše o tvorbě a úpravách módů
Veľa som sa prehrabával v Gothic Sourceri a hlavne s G2A skriptami a neviem nájsť, kde Drakom hra pridáva a zároveň equipuje (keďže oni si to sami nevedia lebo nemajú naučené Žiadne kruhy mágie) Fireball kúzlo. Chcem ho vymeniť za ten silnejší Fireball(Deathball) čo majú Seekeri a Vodný Mágovia, lebo som zmenil skipty kúziel - všetky čo sú elementálne ohnivé dealujú Fire nie Magic damage (tak trochu logické, narozdiel od originálu) - ale trochu som upravil štatistiky zbrojí, aby Drakobijci mali viac Fire Armoru, Paladinovia viac Melee Armoru atď... A teraz neviem ako dať drakom väčší ranged damage bez toho aby som totálne breakol základné kúzlo mágovskej guildy....
Vie mi to niekto povedať/nájsť?
A keď bude pritom ešte jedna vec:
Kde sú staty všetkých NPC - lebo narozdiel od Monštier ich nemajú vo svojej karte (alebo ako sa to volá) ?
V G1 skriptách som to našiel rovno pod NPC knižnicou a každý mal osobitne všetko napísané pod svojím NPC menom.
Vopred Ďakujem
Rovnyvlas
Nováček
 
Příspěvky: 6
Registrován: ned 03. úno 2019 11:24:27

Autorům už se asi nechtělo se s každou NPC piplat, vytvořili pro Gě hromadný systém který se volá z tohoto
* pozor navzdory prvnímu dojmu to nemá nic společného s kapitolami hry
Kód: Vybrat vše
func void B_SetAttributesToChapter(var C_Npc slf,var int kap)
{
   Npc_SetTalentSkill(slf,NPC_TALENT_MAGE,6);
   if(kap == 0)
   {
      slf.level = 3;
      slf.attribute[ATR_STRENGTH] = 10;
      slf.aivar[REAL_STRENGTH] = 10;
      slf.attribute[ATR_DEXTERITY] = 10;
      slf.aivar[REAL_DEXTERITY] = 10;
      slf.attribute[ATR_MANA_MAX] = 1000;
      slf.aivar[REAL_MANA_MAX] = 1000;
      slf.attribute[ATR_MANA] = 1000;
      slf.attribute[ATR_HITPOINTS_MAX] = 40;
      slf.attribute[ATR_HITPOINTS] = 40;
   };
   if(kap == 1)
   {
      slf.level = 10;
      slf.attribute[ATR_STRENGTH] = 50;
      slf.aivar[REAL_STRENGTH] = 50;
      slf.attribute[ATR_DEXTERITY] = 50;
      slf.aivar[REAL_DEXTERITY] = 50;
      slf.attribute[ATR_MANA_MAX] = 1000;
      slf.aivar[REAL_MANA_MAX] = 1000;
      slf.attribute[ATR_MANA] = 1000;
      slf.attribute[ATR_HITPOINTS_MAX] = 160;
      slf.attribute[ATR_HITPOINTS] = 160;
   };
   if(kap == 2)
   {
      slf.level = 20;
      slf.attribute[ATR_STRENGTH] = 100;
      slf.aivar[REAL_STRENGTH] = 100;
      slf.attribute[ATR_DEXTERITY] = 100;
      slf.aivar[REAL_DEXTERITY] = 100;
      slf.attribute[ATR_MANA_MAX] = 1000;
      slf.aivar[REAL_MANA_MAX] = 1000;
      slf.attribute[ATR_MANA] = 1000;
      slf.attribute[ATR_HITPOINTS_MAX] = 280;
      slf.attribute[ATR_HITPOINTS] = 280;
   };
   if(kap == 3)
   {
      slf.level = 30;
      slf.attribute[ATR_STRENGTH] = 125;
      slf.aivar[REAL_STRENGTH] = 125;
      slf.attribute[ATR_DEXTERITY] = 125;
      slf.aivar[REAL_DEXTERITY] = 125;
      slf.attribute[ATR_MANA_MAX] = 1000;
      slf.aivar[REAL_MANA_MAX] = 1000;
      slf.attribute[ATR_MANA] = 1000;
      slf.attribute[ATR_HITPOINTS_MAX] = 400;
      slf.attribute[ATR_HITPOINTS] = 400;
   };
   if(kap == 4)
   {
      slf.level = 40;
      slf.attribute[ATR_STRENGTH] = 150;
      slf.aivar[REAL_STRENGTH] = 150;
      slf.attribute[ATR_DEXTERITY] = 150;
      slf.aivar[REAL_DEXTERITY] = 150;
      slf.attribute[ATR_MANA_MAX] = 1000;
      slf.attribute[ATR_MANA] = 1000;
      slf.aivar[REAL_MANA_MAX] = 1000;
      slf.attribute[ATR_HITPOINTS_MAX] = 520;
      slf.attribute[ATR_HITPOINTS] = 520;
   };
   if(kap == 5)
   {
      slf.level = 50;
      slf.attribute[ATR_STRENGTH] = 175;
      slf.aivar[REAL_STRENGTH] = 175;
      slf.attribute[ATR_DEXTERITY] = 175;
      slf.aivar[REAL_DEXTERITY] = 175;
      slf.attribute[ATR_MANA_MAX] = 1000;
      slf.aivar[REAL_MANA_MAX] = 1000;
      slf.attribute[ATR_MANA] = 1000;
      slf.attribute[ATR_HITPOINTS_MAX] = 640;
      slf.attribute[ATR_HITPOINTS] = 640;
   };
   if(kap >= 6)
   {
      slf.level = 60;
      slf.attribute[ATR_STRENGTH] = 200;
      slf.aivar[REAL_STRENGTH] = 200;
      slf.attribute[ATR_DEXTERITY] = 200;
      slf.aivar[REAL_DEXTERITY] = 200;
      slf.attribute[ATR_MANA_MAX] = 1000;
      slf.aivar[REAL_MANA_MAX] = 1000;
      slf.attribute[ATR_MANA] = 1000;
      slf.attribute[ATR_HITPOINTS_MAX] = 760;
      slf.attribute[ATR_HITPOINTS] = 760;
   };
   slf.exp = 500 * ((slf.level + 1) / 2) * (slf.level + 1);
   slf.exp_next = 500 * ((slf.level + 2) / 2) * (slf.level + 1);
};



U NPC pak už tedy najdeš jen třeba
Kód: Vybrat vše
   B_SetAttributesToChapter(self,4);

a víš že její staty se odvodí z tohoto
Kód: Vybrat vše
if(kap == 4)
   {
      slf.level = 40;
      slf.attribute[ATR_STRENGTH] = 150;
      slf.aivar[REAL_STRENGTH] = 150;
      slf.attribute[ATR_DEXTERITY] = 150;
      slf.aivar[REAL_DEXTERITY] = 150;
      slf.attribute[ATR_MANA_MAX] = 1000;
      slf.attribute[ATR_MANA] = 1000;
      slf.aivar[REAL_MANA_MAX] = 1000;
      slf.attribute[ATR_HITPOINTS_MAX] = 520;
      slf.attribute[ATR_HITPOINTS] = 520;
   };


Definovanou hodnotu bere hra při vložení NPC do světa. Nicméně lze to pak i měnit třeba během dialogu (tak se upgraduje Alrik když později znovu zápasí s Herem).

Kód: Vybrat vše
func void DIA_Alrik_NewFights3_Info()
{
   B_AddFightSkill(self,NPC_TALENT_1H,20);
   B_SetAttributesToChapter(self,4);        // !!!
   B_Alrik_Again();
};
Uživatelský avatar
Beowulf
Dlouhodobý uživatel
 
Příspěvky: 2966
Registrován: sob 06. led 2018 16:39:50

Dračí ohně teď budu teoretizovat ale myslím že to je prostě v
func int B_SelectSpell(var C_Npc slf,var C_Npc oth)

Alespoň se mi to tu krásně rýsuje.
Kód: Vybrat vše
if(slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_SWAMP)
   {
      if(Npc_HasItems(slf,ItRu_InstantFireball) == 0)
      {
         CreateInvItems(slf,ItRu_InstantFireball,1);
      };
      if(Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_DRAGON_MAGIC)
      {
         B_ReadySpell(slf,SPL_InstantFireball,SPL_COST_InstantFireball);
         return TRUE;
      }
      else
      {
         return FALSE;
      };
   };
   if(slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_ROCK)
   {
      if(Npc_HasItems(slf,ItRu_InstantFireball) == 0)
      {
         CreateInvItems(slf,ItRu_InstantFireball,1);
      };
      if(Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_DRAGON_MAGIC)
      {
         B_ReadySpell(slf,SPL_InstantFireball,SPL_COST_InstantFireball);
         return TRUE;
      }
      else
      {
         return FALSE;
      };
   };
   if(slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_FIRE)
   {
      if(Npc_HasItems(slf,ItRu_InstantFireball) == 0)
      {
         CreateInvItems(slf,ItRu_InstantFireball,1);
      };
      if(Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_DRAGON_MAGIC)
      {
         B_ReadySpell(slf,SPL_InstantFireball,SPL_COST_InstantFireball);
         return TRUE;
      }
      else
      {
         return FALSE;
      };
   };
   if(slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_ICE)
   {
      if(Npc_HasItems(slf,ItRu_InstantFireball) == 0)
      {
         CreateInvItems(slf,ItRu_InstantFireball,1);
      };
      if(Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_DRAGON_MAGIC)
      {
         B_ReadySpell(slf,SPL_InstantFireball,SPL_COST_InstantFireball);
         return TRUE;
      }
      else
      {
         return FALSE;
      };
   };
   if(slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_UNDEAD)
   {
      Npc_ClearAIQueue(self);
      if(Npc_HasItems(slf,ItRu_Deathball) == 0)
      {
         CreateInvItems(slf,ItRu_Deathball,1);
      };
      if(Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_DRAGON_MAGIC)
      {
         B_ReadySpell(slf,SPL_Deathball,SPL_COST_Deathball);
         return TRUE;
      }
      else
      {
         return FALSE;
      };
   };


Jestli dobře chápu, hodláš vlastně všem drakům nasadit spell který v původní hře má jen Nemrtvák.
Uživatelský avatar
Beowulf
Dlouhodobý uživatel
 
Příspěvky: 2966
Registrován: sob 06. led 2018 16:39:50

Jo, presne to mám namysli (aj keď som si neuvedomil že to mal ten Nemŕtvy Drak :D ).
Toto je úplná bomba človeče, díki moc s týmto to už zmením ľahko...
Ozaj keby to chcem zavesiť niekde sem na Gothicz.net pre ostatných (ak by mal náhodou niekto záujem) tak stačí keď sem dám tie súbory čo som vytovril(25MB) a tie si môžu ľudia nakopírovať do svojich alebo si to musia skompilovať cez GSourcer?
Rovnyvlas
Nováček
 
Příspěvky: 6
Registrován: ned 03. úno 2019 11:24:27

Moznosti je nekolik.
Ono v podstate staci poskytnout i samostatne .d soubory textove a ten kdo zna si je vlozi. Ale silne nevhodne.
Lepsi uz je to co asi delas ty ze kompilujes pres GS a tedy ti vznika GOTHIC.DAT a OU.BIN , tyto dva soubory pak staci vlozit do adresaru kam patri a vetsinou se muze valit.
Jeste lepsi ale je zabalit je ty dva soubory jako .mod balik. V ten moment totiz lze pres GOTHICSTARTER spoustet jak puvodni hru tak i tvoji modi
Uživatelský avatar
Beowulf
Dlouhodobý uživatel
 
Příspěvky: 2966
Registrován: sob 06. led 2018 16:39:50

Ten mod sa mi pozdava, ale neviem ako mod urobiť... nikdy som to nerobil... Je tu niekde nejaký návod alebo sa to dá aj dáko dvomi vetami vysvetliť?
Rovnyvlas
Nováček
 
Příspěvky: 6
Registrován: ned 03. úno 2019 11:24:27


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé

cron