[G2:NK]Jak utworzyć miecz, który po trafieniu zamraża? 15271 34

O temacie

Autor Graveir

Zaczęty 31.01.2011 roku

Wyświetleń 15271

Odpowiedzi 34

Skorpion

Skorpion

Użytkownicy
posty19
Propsy4
  • Użytkownicy
AI_StartState (self, ZS_MagicFreeze, 0, "");Twój skrypt nie posiadał tej linijki, a ona odpowiada za zamrożenie NPC'a po uderzeniu. Nawet jakby nie było żadnych błędów to pokazywałby ci się sam PFX.

Cieszę się że ci działa  ^^
 

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Ok dzięki=)A i sorry,że przynudzam,ale czy da radę zrobić tak,by na postać Xardasa(lub inną nieśmiertelną działały dane efekty[wizualnie,bo obrażeń/unieruchomienie na nich raczej nie działa])?Bo mam taki skrypt:
// *********************
// Lodowy miecz
// *********************
func void B_Lodowymiecz (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 = 0;  
 
if (Npc_HasItems(hero, itmw_jumper) == TRUE && Hlp_IsItem(ready, itmw_jumper) == TRUE)
&& (randomdmg <= procent_trafienia)  
{
if (slf.flags != NPC_FLAG_IMMORTAL)  
{
Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );
Wld_PlayEffect("spellFX_Whirlwind", slf, slf, 1, 1, 1, FALSE );
AI_StartState (self, ZS_MagicFreeze, 0, "");
B_MagicHurtNpc (slf, slf, obrazenia);
};
 
};
 
if (Npc_HasItems(hero, itmw_jumper) == TRUE && Hlp_IsItem(ready, itmw_jumper) == TRUE)  
&& (randomdmg <= procent_trafienia)
 
{
Wld_PlayEffect("spellFX_IceCube", hero, hero, 1, 1, 1, FALSE );
Wld_PlayEffect("spellFX_Firestorm", hero, hero, 1, 1, 1, FALSE );
};
 
};
};
No i wszystko byłoby pięknie gdyby nie to,że:
1)Zaatakuję mieczem Xardasa,to działają spellfx_firestorm i spellfx_icecube
2)Zaatakuję mieczem postać śmiertelną(np.bandytę)to na nim się pojawiają trzy efekty(firestorm,whirlwind i icecube).

Da radę takie coś zrobić,żeby na postać śmiertelną działały tylko efekty firestorm i icecube,a na Xardasa icecube i whirlwind?No i tyle,z góry dzięki za pomoc:)
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Zamiast tego:
if (slf.flags != NPC_FLAG_IMMORTAL)  
{
Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );
Wld_PlayEffect("spellFX_Whirlwind", slf, slf, 1, 1, 1, FALSE );
AI_StartState (self, ZS_MagicFreeze, 0, "");
B_MagicHurtNpc (slf, slf, obrazenia);
};
daj to
if (slf.flags != NPC_FLAG_IMMORTAL)  
{
   Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );
   Wld_PlayEffect("spellFX_Firestorm", slf, slf, 1, 1, 1, FALSE );
}
else
{
   Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );
   Wld_PlayEffect("spellFX_Whirlwind", slf, slf, 1, 1, 1, FALSE );
};
AI_StartState (self, ZS_MagicFreeze, 0, "");
B_MagicHurtNpc (slf, slf, obrazenia);
A chyba najlepiej zamiast tego:
if (Npc_HasItems(hero, itmw_jumper) == TRUE && Hlp_IsItem(ready, itmw_jumper) == TRUE)
&& (randomdmg <= procent_trafienia)  
{
if (slf.flags != NPC_FLAG_IMMORTAL)  
{
Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );
Wld_PlayEffect("spellFX_Whirlwind", slf, slf, 1, 1, 1, FALSE );
AI_StartState (self, ZS_MagicFreeze, 0, "");
B_MagicHurtNpc (slf, slf, obrazenia);
};
 
};
 
if (Npc_HasItems(hero, itmw_jumper) == TRUE && Hlp_IsItem(ready, itmw_jumper) == TRUE)  
&& (randomdmg <= procent_trafienia)
 
{
Wld_PlayEffect("spellFX_IceCube", hero, hero, 1, 1, 1, FALSE );
Wld_PlayEffect("spellFX_Firestorm", hero, hero, 1, 1, 1, FALSE );
};
daj to
if (Npc_HasItems(hero, itmw_jumper) == TRUE && Hlp_IsItem(ready, itmw_jumper) == TRUE)
&& (randomdmg <= procent_trafienia)  
{
   if (slf.flags != NPC_FLAG_IMMORTAL)  
   {
      Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );
      Wld_PlayEffect("spellFX_Firestorm", slf, slf, 1, 1, 1, FALSE );
   }
   else
   {
      Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );
      Wld_PlayEffect("spellFX_Whirlwind", slf, slf, 1, 1, 1, FALSE );
   };

   AI_StartState (self, ZS_MagicFreeze, 0, "");
   B_MagicHurtNpc (slf, slf, obrazenia);
 
   Wld_PlayEffect("spellFX_IceCube", hero, hero, 1, 1, 1, FALSE );
   Wld_PlayEffect("spellFX_Firestorm", hero, hero, 1, 1, 1, FALSE );
};

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Adanos po wklejeniu twojego skryptu wyskakuje mi błąd unknown identifier: func (line 47).Skrypt wklejony+kilka linijek od linii,w której występuje błąd:
// *********************
// Lodowy miecz
// *********************
func void B_Lodowymiecz (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 = 0;  
 
if (Npc_HasItems(hero, itmw_jumper) == TRUE && Hlp_IsItem(ready, itmw_jumper) == TRUE)  
&& (randomdmg <= procent_trafienia)  
{  
   if (slf.flags != NPC_FLAG_IMMORTAL)  
   {  
      Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );  
      Wld_PlayEffect("spellFX_Firestorm", slf, slf, 1, 1, 1, FALSE );
   }
   else
   {
      Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );
      Wld_PlayEffect("spellFX_Whirlwind", slf, slf, 1, 1, 1, FALSE );  
   };  
 
   AI_StartState (self, ZS_MagicFreeze, 0, "");  
   B_MagicHurtNpc (slf, slf, obrazenia);  
 
   Wld_PlayEffect("spellFX_IceCube", hero, hero, 1, 1, 1, FALSE );  
   Wld_PlayEffect("spellFX_Firestorm", hero, hero, 1, 1, 1, FALSE );
};


// ****************************************************************
// B_AssessDamage
// --------------
// wird durchWahrnehmung PERC_AssessDamage ÜBERALL her aufgerufen
// (also auch aus ZS_Attack, AR kann sich allerdings NICHT ändern!)
// ****************************************************************
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łąd dotyczy linii:
func void B_AssessDamage ()
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
:ayfkm:  

Ty nawet porządnie nie umiesz wkleić?

// *********************
// Lodowy miecz
// *********************
func void B_Lodowymiecz (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 = 0;  
 
      if (Npc_HasItems(hero, itmw_jumper) == TRUE && Hlp_IsItem(ready, itmw_jumper) == TRUE)  
      && (randomdmg <= procent_trafienia)  
      {  
         if (slf.flags != NPC_FLAG_IMMORTAL)  
         {  
            Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );  
            Wld_PlayEffect("spellFX_Firestorm", slf, slf, 1, 1, 1, FALSE );
         }
         else
         {
            Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );
            Wld_PlayEffect("spellFX_Whirlwind", slf, slf, 1, 1, 1, FALSE );  
         };  
 
         AI_StartState (self, ZS_MagicFreeze, 0, "");  
         B_MagicHurtNpc (slf, slf, obrazenia);  
 
         Wld_PlayEffect("spellFX_IceCube", hero, hero, 1, 1, 1, FALSE );  
         Wld_PlayEffect("spellFX_Firestorm", hero, hero, 1, 1, 1, FALSE );
      };
   };
};


// ****************************************************************
// B_AssessDamage
// --------------
// wird durchWahrnehmung PERC_AssessDamage ÜBERALL her aufgerufen
// (also auch aus ZS_Attack, AR kann sich allerdings NICHT ändern!)
// ****************************************************************
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;
        };
};

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Właśnie problem,że poprzednio zastąpiłem swój sprawny i był błąd.Teraz zastąpiłem i już nie ma błędu.Jak sprawdzę,czy działa zeedytuje post.
Edit:No w sumie działa.A żeby nie zakładać nowego tematu-stworzyłem 4 lub 5 postaci i po zaatakowaniu jednej z nich(pobicie do nieprzytomności)nie mogę rozmawiać z żadną(a raczej ona ze mną,bo pojawia się tekst typu "Jesteś jakimś oprychem,lepiej stąd znikaj"czy jakoś tak).Da radę zrobić,by można było jakoś "przeprosić"te postacie,albo żeby się do mnie odzywały nawet po zaatakowaniu?A postać,która się do mnie odzywa(jedyna)to...Wrzód^^
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
A jakie gildie mają te postacie i twój bohater?

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Wszystkie nie mają gildii(tworzyłem postacie z przedrostkiem NONE_,czyli bez gildii),tak samo mój bohater ma brak gildii.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

zmajcek

zmajcek

Użytkownicy
posty49
Propsy99
Profesjabrak
  • Użytkownicy
Chciałem odświeżyć ten dość stary temat trzema pytaniami

1. Rozumiem ze nie ma innego sposobu zmiany czasu zamrożenia broni niż utworzenie nowego czaru o krótszym czasie działania?

2. Jest taki problem np z efektem snu na mieczu że przy wielokrotnym trafieniu cel zaczyna odgrywać animację po kolei, czy jest jakiś warunek aby w przypadku startu animacji nowe ciosy nie wyzwalały nowej animacji?

3. Skrypt podany przez Skorpiona nie wyzwala fxa zamrożenia na przeciwniku (icecube), powstaje tylko animacja MagicFreeze.

próbowałem zmienić Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );
na Wld_PlayEffect("spellFX_IceCube", oth, slf, 1, 1, 1, FALSE )
wtedy i owszem efekt powstaje ale zwielokrotniony, no i w ogóle dzieją się dziwne rzeczy :D

a tu jeszcze raz kod jakby co:
/***************************** ICE *****************************
func void B_ICE (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 = 0;

if (Npc_HasItems(hero, ItMw_Addon_untamed) == TRUE && Hlp_IsItem(ready, ItMw_Addon_untamed) == TRUE)
&& (randomdmg <= procent_trafienia)
{
if (slf.flags != NPC_FLAG_IMMORTAL)
{
Wld_PlayEffect("spellFX_IceCube", slf, slf, 1, 1, 1, FALSE );
Wld_PlayEffect("spellFX_Icebolt", slf, slf, 1, 1, 1, FALSE );
AI_StartState (self, ZS_MagicFreeze, 0, "");

B_MagicHurtNpc (slf, slf, obrazenia);
};

};

if (Npc_HasItems(hero, ItMw_Addon_untamed) == TRUE && Hlp_IsItem(ready, ItMw_Addon_untamed) == TRUE)
&& (randomdmg <= procent_trafienia)

{
Wld_PlayEffect("spellFX_Pyrokinesis_BRIDGE", hero, hero, 1, 1, 1, FALSE );
};

};
};

 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
zmajcek Wld_PlayEffect odpowiada za efekt cząsteczkowy i za zadawanie obrażeń

Za czas działania zabrożenia odpowiada AI_StartState gdzie wpisujesz RUTYNE a nie czar więc musisz się nauczyć pisac rutyny :) Nie jest to takie trudne na rutyne składają sie 3 funkcje

ZS_nazwa - co ma sie wykonać na start rutyny może sprawdzić czy NPC nie był juz w trakcie spania i nie wykonywac animki drugi raz
ZS_nazwa_Loop - pętla to co się wykona po rozpoczęciu wykonuje się w kółko wiele razy
ZS_nazwa_End - wykonuje się po skończeniu rutyny :)

Najlepiej sobie poszukac jak wygląda funkcja ZS_MagicFreeze i ZS_MagicFreeze_Loop i pewnie wszystko będzie jasne ;)

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Przed AI_StartState(...); spróbuj dać to
Npc_ClearAIQueue(slf);
B_ClearPerceptions(slf);
Może wtedy efekt bryły po zamrożeniu będzie widoczny.

zmajcek

zmajcek

Użytkownicy
posty49
Propsy99
Profesjabrak
  • Użytkownicy
Przed AI_StartState(...); spróbuj dać to
Npc_ClearAIQueue(slf);
B_ClearPerceptions(slf);
Może wtedy efekt bryły po zamrożeniu będzie widoczny.
Niestety nie pomogło

jednak udało mi się zrobić dobry efekt ze snem.
Dzięki Rafał za tą podpowiedź z tymi rutynami, faktycznie myślałem że AI_StartState odpowiada za animacje.
Ponadto w rutynie ZS_MagicSleep rzeczywiście można zadeklarować czas, trzeba go zmienić na około 5s bo w przeciwnym razie kolejne ataki stawiają wroga do pionu ale będzie nieaktywny przez okres 30s (domyślnie) co wygląda dziwnie.

Jakby ktoś wiedział jak naprawić skrypt zamrażania (dodać tą animacje lodu) albo miałby gdzieś kawałek dobrego kodu to było by fajnie :)

Aha skoro pozmieniam ustawienia tych rutyn ZS_MagicSleep i ...freez to dobrze byłoby stworzyć je jako nowe i tu pytanie czy trzeba je gdzieś jeszcze opisywać/zadeklarować w innym pliku?
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Co do efektu bryły lodu to testowałem ten skrypt. Działa na 100% bo u mnie było widać efekt.
Npc_ClearAIQueue(slf);
B_MagicHurtNpc (slf, obrazenia);
  PrintDebugNpc(PD_MAGIC,"B_AssessMagic ...IceCube oder IceWave"); // to jest useless
   Npc_SendPassivePerc(slf,PERC_ASSESSFIGHTSOUND,slf,oth);
    Wld_PlayEffect("spellFX_IceSpell_TARGET", slf, slf, 1, 0, 0, FALSE );
     AI_StartState(slf,ZS_MagicFreeze,0,"");
Był to mój skrypt z g1.

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Aha skoro pozmieniam ustawienia tych rutyn ZS_MagicSleep i ...freez to dobrze byłoby stworzyć je jako nowe i tu pytanie czy trzeba je gdzieś jeszcze opisywać/zadeklarować w innym pliku?

Możesz stworzyć inny plik ale musisz sprawdzić jak są podane ścieżki w Gothic.src Mi się zdaje ze najlepszym sposobem to swoje rutyny dać pod spodem w tym samym pliku ;) Co do skryptu :
ważny jest chyba tylko 
Wld_PlayEffect("spellFX_IceSpell_TARGET", slf, slf, 1, 0, 0, FALSE );i zamiast go dawać przed AI_StartState dał bym go do rutyny kod bedzie bardziej uporządkowany :) Tylko w rutynach jest zmienna self zamiast slf. Zmianna self w rutynach oznacza NPC który wykonuje te rutynę.

zmajcek

zmajcek

Użytkownicy
posty49
Propsy99
Profesjabrak
  • Użytkownicy
Ha Chicken twój kod jest dobry a i owszem :D

Tylko jest jeden problem...sprawdziłem, u mnie animacja IceSpell_TARGET
jest albo niewidzialna albo jej niema, nie wiem jakim cudem!?

Czar bryła lodu czyli icecube działa bez zarzutu, jak kodem zaopatrzę jakiś miecz w ten efekt to uzyskuje zamrożenie (gracza),
jednak w  Wld_PlayEffect("spellFX_IceSpell_TARGET", slf, slf, 1, 0, 0, FALSE );
slf slf sprawia ze czar idzie od celu do celu i tej animacji nie ma.
Po wstawieniu oth robią się jakieś pętle, no nieważne zresztą.

Da się coś zrobić z tą animacją IceSpell_TARGET? Mniemam że chyba nie.. :/?
Może jakaś inna jest podobna?


Edit---------------------------------------------------------------

No ok wywołałem zbliżony efekt fxem spellFX_IceSpell_Sendperception

Jakby komuś też ten powyższy nie działał, co prawda jest bardziej rozczłonkowany ale to minimalna różnica.

Ps: Nie mam pojęcia czemu nie mam tej animacji, posiadam świeżą kopie G2 NK, no ale nieważne już. Problem rozwiązany.
 


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