Jak zrobić miecz runiczny ? 6222 15

O temacie

Autor Xenoneq

Zaczęty 2.02.2016 roku

Wyświetleń 6222

Odpowiedzi 15

Xenoneq

Xenoneq

Użytkownicy
posty7
ProfesjaGracz
  • Użytkownicy
Witam wszystkich forumowiczów ! :)  (Jeżeli to forum jest jeszcze aktywne) Mam pytanie tak jak w temacie.
Pewnie ten dział nie jest od tego ale gdy zrobiłem miecz runiczny w programie pana Rafała Budzisa i skrypty które program zrobił (tekst) wkleiłem linijki niżej w B_AssessDamege.d i w B_MM_AssessDamage i miecz IT.budzisMIECZ.d włożyłem do folderu Items. I po odpaleniu Spacera masa błędów typu : Unknown Indeficator (cz y jakoś tak) : B_ASSESSDAMAGE, ;(  i dalej inne błędy w innych plikach. A zależy mi na zrobieniu czegoś własnego bo ujrzeć pierwsze własne dzieło to jest satysfakcja  :lol:. Problemów z NPC nie miałem a zwykłe bronie w skryptach potrafię robić. Czy może program zawodzi czy to ja robię coś źle pomóżcie chociaż trochę.
 

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Gothic?
Skrypt?
głównie pokaż linijki które wkle................. Nie, pokaż wszystkie skrypty które wklejałeś.
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Halicor

Halicor

Użytkownicy
Hauptsturmfuhrer
posty365
Propsy57
ProfesjaNierób
  • Użytkownicy
  • Hauptsturmfuhrer
Odpal Gothica z zaznaczonym reparse script i zSpy na full'a

Xenoneq

Xenoneq

Użytkownicy
posty7
ProfesjaGracz
  • Użytkownicy

Xenoneq

Jak zrobić miecz runiczny ?
#3 2016-02-02, 21:28(Ostatnia zmiana: 2016-02-02, 21:40)
Tutaj podaje skrypt B_AssessDamage.d stworzony skrypt przez program pana Rafała "Miecze Runiczne"

Spoiler
func void B_U (var C_NPC oth, var C_NPC slf)
{
if (Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(hero))
{
var C_ITEM ready;
var int randomdmg;
var int procent_trafienia;
var int obrazenia;
ready = Npc_GetReadiedWeapon(hero);
randomdmg = Hlp_Random (1);
procent_trafienia = 100;
obrazenia = 200;
if (Npc_HasItems(hero, ItMw_ElBastardo) == TRUE && Hlp_IsItem(ready, ItMw_ElBastardo) == TRUE)
&& (randomdmg <= procent_trafienia)
{
if (slf.flags != NPC_FLAG_IMMORTAL)
{
Wld_PlayEffect("spellFX_Firestorm_SPREAD", slf, slf, 1, 1, 1, FALSE );
B_MagicHurtNpc (slf, slf, obrazenia);
Wld_PlayEffect("spellFX_FireRain", slf, slf, 1, 1, 1, FALSE );
B_MagicHurtNpc (slf, slf, obrazenia);
Wld_PlayEffect("spellFX_Beliarweapon", slf, slf, 1, 1, 1, FALSE );
B_MagicHurtNpc (slf, slf, obrazenia);
Wld_PlayEffect("spellFX_FireRain_RAIN", slf, slf, 1, 1, 1, FALSE );
B_MagicHurtNpc (slf, slf, obrazenia);
};
Wld_PlayEffect("spellFX_Zap_COLLIDE", hero, hero, 1, 1, 1, FALSE );
Wld_PlayEffect("spellFX_Sleep_ORIGIN", hero, hero, 1, 1, 1, FALSE );
};
if (Npc_HasItems(hero, ItMw_ItMw_ElBastardo) == TRUE && Hlp_IsItem(ready, ItMw_ElBastardo) == TRUE)
&& (randomdmg <= procent_trafienia)
{
Wld_PlayEffect("spellFX_Zap_COLLIDE", hero, hero, 1, 1, 1, FALSE );
Wld_PlayEffect("spellFX_Sleep_ORIGIN", hero, hero, 1, 1, 1, FALSE );
};
};
};
func void B_AssessDamage ()
{
   var C_NPC Quarho; Quarho = Hlp_GetNpc (NONE_ADDON_111_Quarhodron);
   var C_NPC Rhadem; Rhadem = Hlp_GetNpc (NONE_ADDON_112_Rhademes);
   if   ((Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Quarho)))
   ||   ((Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Rhadem)))
   {
      B_GhostSpecialDamage (other, self);
      return;
   };
   B_BeliarsWeaponSpecialDamage (other, self);
   B_U (other, self);
 miecz();
   if (self.aivar[AIV_ArenaFight] == AF_AFTER)
   {
      self.aivar[AIV_ArenaFight] = AF_AFTER_PLUS_DAMAGE;
   };
   if self.aivar [AIV_EnemyOverride] == TRUE
   {
      var C_NPC RAV; RAV = Hlp_GetNpc(BDT_1090_Addon_Raven);
      if (Hlp_GetInstanceID(self) == (Hlp_GetInstanceID(RAV)))
      {
         self.aivar [AIV_EnemyOverride] =   FALSE;
      };
   };
   if (Npc_IsInState(self,ZS_Attack))
   {
      if (Npc_IsPlayer (other))
      && (self.npctype == NPCTYPE_FRIEND)
      {
         return;
      };
      if (Npc_IsPlayer (other))
      && (self.aivar[AIV_PARTYMEMBER] == TRUE)
      {
         return;
      };
      if (Hlp_GetInstanceID (other) != self.aivar[AIV_LASTTARGET])
      {
         if (self.aivar[AIV_HitByOtherNpc] == Hlp_GetInstanceID (other))
         || (Hlp_GetInstanceID(other) != Hlp_GetInstanceID(hero))
         {
            Npc_SetTarget (self, other);
         }
         else
         {
            self.aivar[AIV_HitByOtherNpc] = Hlp_GetInstanceID (other);
         };
      };
      return;
   };
   if (B_AssessEnemy())
   {
      return;
   };
   if (!Npc_IsPlayer(other))
   && (other.aivar[AIV_ATTACKREASON] == AR_NONE)
   {
      B_Attack (self, other, AR_NONE, 0);
      return;
   };
   if (Npc_IsInFightMode (other, FMODE_MELEE))
   || (Npc_IsInFightMode (other, FMODE_FIST))
   || (Npc_IsInFightMode (other, FMODE_NONE))
   {
      if (Npc_GetAttitude (self, other) == ATT_FRIENDLY)
      || ( (self.npctype == NPCTYPE_FRIEND) && Npc_IsPlayer(other) )
      {
         if (!Npc_IsInState(self, ZS_ReactToDamage))
         {
            Npc_ClearAIQueue   (self);
            B_ClearPerceptions   (self);
            AI_StartState      (self, ZS_ReactToDamage, 0, "");
            return;   
         };
      };
   };   
   B_Attack (self, other, AR_ReactToDamage, 0);
   return;
};


Tutaj B_MM_AssessDamage.d również stworzony przez program

Spoiler
func void B_MM_AssessDamage ()
{
   self.aivar[AIV_MM_PRIORITY] = PRIO_ATTACK;
   B_BeliarsWeaponSpecialDamage (other, self);
   B_U (other, self);
   miecz();
   if (Npc_HasItems (other, Holy_Hammer_MIS) > 0)
   {
      var C_NPC MagGol; MagGol = Hlp_GetNpc(MagicGolem);
      Npc_GetInvItem(other, Holy_Hammer_MIS);
      var C_ITEM OthWeap; OthWeap = Npc_GetReadiedWeapon(other);
      if (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(MagGol))
      && (Hlp_GetInstanceID(OthWeap) == Hlp_GetInstanceID(item))
      {
         Npc_ChangeAttribute (self, ATR_HITPOINTS, -1000);
         return;
      };
   };   
   if (self.guild == GIL_STONEGUARDIAN)
   && (self.aivar[AIV_EnemyOverride] == TRUE)
   {
      B_AWAKE_STONEGUARDIAN (self);
   };
   if (C_PredatorFoundPrey(other,self))
   {
      Npc_ClearAIQueue   (self);
      Npc_SetTarget       (self, other);
      B_ClearPerceptions   (self);
      AI_StartState       (self, ZS_MM_Flee, 0, "");   
      return;
   };
   if (Npc_IsInState(self,ZS_MM_Attack))
   {
      if (Npc_IsPlayer (other))
      && (self.aivar[AIV_PARTYMEMBER] == TRUE)
      {
         return;
      };
      if (self.aivar[AIV_MM_REAL_ID] == ID_SKELETON)
      && (other.aivar[AIV_MM_REAL_ID] == ID_SKELETON_MAGE)
      {
         return;
      };
      if (Hlp_GetInstanceID (other) != self.aivar[AIV_LASTTARGET])
      {
         if (self.aivar[AIV_HitByOtherNpc] == Hlp_GetInstanceID (other))
         {
            Npc_SetTarget (self, other);
         }
         else
         {
            self.aivar[AIV_HitByOtherNpc] = Hlp_GetInstanceID (other);
         };
      };
      return;
   };
   Npc_ClearAIQueue   (self);
   Npc_SetTarget      (self, other);
   B_ClearPerceptions   (self);
   AI_StartState      (self, ZS_MM_Attack, 0, "");
   return;
};
A tutaj sam item
Spoiler
FUNC VOID miecz()
   {
    var c_item weapon; weapon = Npc_GetReadiedWeapon (other);
    if(Hlp_IsItem(weapon,itmw_addon_superswordrune01))
    {
Wld_PlayEffect("spellFX_Skull_SPREAD",self,self,0,0,0,FALSE);

    };


};
(nie powielałem efektów)
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Po pierwsze daj w tag "code"
 Po drugie podaj błędy...
Po trzecie jaka część  gothic...
A i po czwarte masz tu tutorial do "Mieczy" http://themodders.org/index.php?topic=5900.0
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Xenoneq

Xenoneq

Użytkownicy
posty7
ProfesjaGracz
  • Użytkownicy
Błędy ogólnie są takie że po wklejeniu tych skryptów do B_Assessdamage itd. wyskakują błędy o nieznalezionym indetyfikatorze B_ASSESSDAMAGE czy coś takiego.
EDIT: aa i gothic 2 noc kruka
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
W gothic 2 ktoś podał gotowy skrypt broni runicznej... w tamtym tutorialu niżej masz gotowy skrypt. Więc próbuj gotowcem :)
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Xenoneq

Xenoneq

Użytkownicy
posty7
ProfesjaGracz
  • Użytkownicy
Też chciałem gotowcem ale w tym problem że kiedy klikam na link nie ma tam tego skryptu pisze że nie ma takiej strony
 

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Cytat: Zysk link=topic=5900.msg363#msg363#msg363#msg363 date=#msg363Jul 31 2006, 17:13#msg363
Najpierw stwórzmy funkcję do wywołania podczas uderzenia bronią:
func void weaponreaction(var c_npc attacker,var c_npc defender)
{
if(!Npc_IsInFightMode(attacker,FMODE_MELEE))
{return;};
var c_item weapon;
weapon=Npc_GetReadiedWeapon(attacker);
if(Hlp_IsItem(weapon,instance_broni_a))
{
//reakcja na broń a

}
else if(Hlp_IsItem(weapon,instance_broni_b))
{
//reakcja na broń b

};
};



Reakcjami zajmiemy się na końcu teraz podam na początku jakich funkcji należy użyć, aby to wywołać:
weaponreaction(other,self);
ZS_Reacttodamage
B_CombatReacttodamage
B_MM_ReactToDamage
B_MM_ReactToCombatDamage
B_Orc_AssessDamage

I to prawie wszystko, ale nadal kogoś brakuje, a są nimi walczący orkowie oraz gracz. Najpierw zajmiemy się pierwszym przypadkiem. Tworzymy funkcję:

func void B_Orc_AssessCombatDamage()
{
weaponreaction(other,self);
};


I należy dodać w ZS_Orc_Attack (przy innych Npc_PercEnable):
Npc_PercEnable (self, PERC_ASSESSDAMAGE, B_Orc_AssessCombatDamage );Teraz zajmijmy się graczem, tworzymy funkcję:

func int CmpNpc(var c_npc p1,var c_npc p2)
{
var int old1;
var int old2;
var int result;
old1=p1.aivar[0];
old2=p2.aivar[0];
p1.aivar[0]=0;
p2.aivar[0]=1;
result=p1.aivar[0];
p1.aivar[0]=old1;
p2.aivar[0]=old2;
return result;
};

func void Sbd_is_damaged()
{
//ERRATA if (self==other&&hero==victim)
if(Npc_IsPlayer(victim)&&CmpNpc(self,other))
{weaponreaction(self,hero);};
};

Jeśli broń może wpaść w ręce orka to dodajemy też do ZS_Orc_Attack (a jeśli w goblina to także w ZS_MM_Attack).

Mamy więc funkcję która jest wywołana, ale obiecałem też wywołanie czaru, najpierw znajdujemy instancję efektu w system\visualfx\visualfxinst.d, w moim przypadku (bryła lodu) jest to spellFX_IceCube, więc wywołanie wyglądać będzie następująco:


Wld_PlayEffect("spellFX_IceCube",attacker,defender,0/*- poziom czaru 0, bo bryła nie ma poziomów*/,0/*obrażenia - obrażenie zadawane przez ZS_MagicFreeze*/,0/*rodzaj obrażeń (żadne)*/,FALSE)

//tu należy wstawić zawartość funkcji B_AssessMagic_IceCube gdzie self zmienimy na defender




Powodzenia życzę! Jeszcze można zrobić, aby zamrożeni mogli otrzymywać reakcję na trafienie, ale teraz powinniście sobie z tym poradzić.

Post połączony: 2016-02-03, 17:20
lub :
Witam,

Na wstępie chciałbym zaznaczyć, że jest to mój pierwszy tutek więc proszę o wyrozumiałość ;] .


Chciałbym wam pokazać jak zrobić podobny efekt trafienia jaki masz Szpon Beliara.
A więc zaczynamy.
Robimy sobie broń (Jak to zrobić jest opisane TUTAJ)
Mój będzie taki:

Cytuj
INSTANCE test (C_Item)
{   
   name             =   "Potężny miecz zniszczenia";

   mainflag          =   ITEM_KAT_NF;
   flags          =   ITEM_SWD;   
   material          =   MAT_METAL;

   value             = 99999;

   damageTotal        =    1;
   damagetype          =   DAM_EDGE;
   range             =     120;      

   cond_atr[2]         =   ATR_STRENGTH;
   cond_value[2]        =   Condition_MiscSword;
   visual             =   "ItMw_020_1h_sword_old_01.3DS";

   description         = name;
   TEXT[2]            = NAME_Damage;               COUNT[2]   = damageTotal;
   TEXT[3]          = NAME_Str_needed;            COUNT[3]   = cond_value[2];
   TEXT[4]          = NAME_OneHanded;
   TEXT[5]            = NAME_Value;               COUNT[5]   = value;
};

Jak widać, niesamowicie potężna broń :D .
Teraz chcemy aby miecz walił nie z takiego pioruna jak Szpon tylko z ognistej kuli.
Otwieramy plik o nazwie:

Cytuj
B_AssessDamage.D

który to znajduje się w:

Cytuj
_Work\Data\Scripts\Content\AI\Human\B_Human

Teraz na początku przed:

Cytuj
func void B_AssessDamage ()
{

Dodajemy to:

Cytuj
func void B_U (var C_NPC oth, var C_NPC slf)
{

   if (Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(hero))
   {
      var C_ITEM ready;
      var int randomdmg;
      var int procent_trafienia;
      var int obrazenia;

      ready = Npc_GetReadiedWeapon(hero);
      randomdmg = Hlp_Random (100);
      procent_trafienia = 50;
      obrazenia = 1000;

      if (Npc_HasItems(hero, test) == TRUE && Hlp_IsItem(ready, test) == TRUE)
      && (randomdmg <= procent_trafienia)
      {
            if (slf.flags != NPC_FLAG_IMMORTAL)
            {
               Wld_PlayEffect("spellFX_Firestorm_SPREAD", slf, slf, 0, 0, 0, FALSE );
               B_MagicHurtNpc (slf, slf, obrazenia);           
            };
            Wld_PlayEffect("spellFX_InstantFireball_FIRECLOUD", hero, hero, 0, 0, 0, FALSE );
      };
   
      if (Npc_HasItems(hero, test) == TRUE && Hlp_IsItem(ready, test) == TRUE)
      && (randomdmg <= procent_trafienia)
      {
            Wld_PlayEffect("spellFX_InstantFireball_FIRECLOUD", hero, hero, 0, 0, 0, FALSE );
      };
   };
};

Kolor fioletowy - To nazwa funkcji, musi być unikalna
Kolor zielony - To szansa z jaką możemy uderzyć ze specjalnego efektu zamiast 50 możemy wpisać np. 100
Kolor czerwony - To obrażenia jakie zada nasz specjalny efekt zamiast 1000 możemy dać też np. 50
Kolor niebieski - To INSTANCJA naszej broni
Kolor srebrny - to efekty jakie będą się wyzwalać przy uderzeniu "spellFX_InstantFireball_FIRECLOUD" jest to czar Ognista kula, ale tylko jej "wybuch", który następuje przy uderzeniu przeciwnika, "spellFX_InstantFireball_FIRECLOUD" to efekt który będzie tworzył się na rękach. Pierwsze wystąpienie wyzwolenia tego efektu jest wyzwalane przy uderzeniu, drugie takie wystąpienie jest losowe niekoniecznie przy uderzeniu.


Efekty można znaleźć w pliku:

Cytuj
_Work\Data\Scripts\System\VisualFX\VisualFxInst.D

Na koniec trzeba jeszcze dodać do:

B_AssessDamage.D

Który znajduje się w:

_Work\Data\Scripts\Content\AI\Human\B_Human

Oraz do:

B_MM_AssessDamage.D

Który znajduje się w:

_Work\Data\Scripts\Content\AI\Monster\B_Monster

Najłatwiej po wystąpieniu tego:

B_BeliarsWeaponSpecialDamage (other, self);

Dodać to:

B_U(other, self);

Teraz reparsować skrypty i cieszyć się nową bronią :D
Możliwe. że będzie działać w G1 i G2 ale nie testowałem nie jestem pewien
Mam nadzieję, że to wszystko i cieszę się, jeśli pomogłem.

Pozdrawiam

Przepraszam za post pod postem.
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Nie wiem czy to możliwe, ale chyba stworzenie miecza runicznego było by możliwe za pomocą  tego skryptu.
Z WoG'a wtedy można by było ładny dmg zrobić + dodatkowy efekt , jednak do tego potrzebne są pakiety skryptowe...
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Nie. Ten skrypt odpowiada za otrzymywanie obrażeń. Jeśli przeciwnik jest nieśmiertelny, albo ma jakąś inną odporność na obrażenia (cheat god, flags immortal, chyba nawet w zbroi IMMUNE) to nic się nie dzieje.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Xenoneq

Xenoneq

Użytkownicy
posty7
ProfesjaGracz
  • Użytkownicy
Miecz działa poprawiłem skrypty ale miecz działa tylko na potworkach a na ludziach nie, w dodatku gdy "runa" miecza zabije nie dostaje się expa, ale ogólnie to działa tylko na potworki.
 

Halicor

Halicor

Użytkownicy
Hauptsturmfuhrer
posty365
Propsy57
ProfesjaNierób
  • Użytkownicy
  • Hauptsturmfuhrer

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
On po prostu ominął połowę poradnika. Wszystko jest wypisane jak to zrobić.

Żebyś dostawał expa musisz dodać warunek, że jeśli przeciwnik nie żyje, dodaje ci doświadczenie.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Xenoneq

Xenoneq

Użytkownicy
posty7
ProfesjaGracz
  • Użytkownicy
Problem rozwiązałem! Wystarczyło tylko zmienić B_U na B_W skrypt przekleić na górę i w B_Monster pod B_beliarsweaponspecialdamage dopisać funkcję B_W. Dzięki wszystkim za pomoc ! :)
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
@Bogdan Zwei   nie potrzeba robić warunku ... Przeszukując skrypt szponu natrafiłem na to : B_MagicHurtNpc (oth, slf, 100); W tym tutorialu jest dwukrotnie na slf przez co expa nie otrzymuje bohater... Po zamianie na oth->slf wszysko działa.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry