Magiczna Broń 10558 35

O temacie

Autor

Zaczęty 25.08.2008 roku

Wyświetleń 10558

Odpowiedzi 35

Whiteye
  • Gość

Whiteye
Gość

Magiczna Broń
2008-08-25, 16:28(Ostatnia zmiana: 2008-08-25, 17:21)
Witam wszystkich, zdarzyło mi się ostatnio napisać skrypt uwalniający zaklęcie w momencie uderzenia bronią białą (nie oszukujmy się, większość dzięki tutkowi :P  )...no i niby wszystko fajnie, zaklęcie jest wywoływane...ale nie jeden raz w momencie uderzenia, ale kilkanaście a nawet kilkadziesiąt razy PO nim  <_<  (aż mi się gra zawiesza). Całkowicie zgłupiałem, nie przypominam sobie żebym wstawiał gdziekolwiek pętlę, zaklęcie nieważne jak zmienię skrypt powtarza się non stop do chwili schowania broni albo odejścia od przeciwnika, oczywiście efekt magii znika gdy usunę "weaponreaction(other,self);" z ZS_ReacttoDamage itp.itd. Bardzo bym prosił was - bardziej doświadczonych modderów o pomoc.

Na wszelki wypadek zamieszczam zawartość skryptu weaponreaction.d:

func void weaponreaction(var c_npc Hero,var c_npc Self)
{
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
  {
return;
  };
var c_item weapon;
weapon=Npc_GetReadiedWeapon(hero);
if(Hlp_IsItem(weapon,ItMw_Blade_Blessed_01))
{
Wld_PlayEffect("SPELLFX_ICECUBE",hero,self,0,10,DAM_MAGIC,FALSE);
};
};
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Gdy ma się wyciągniętą broń, to jest to nieskończona funkcja:
if(Hlp_IsItem(weapon,ItMw_Blade_Blessed_01))
{
Wld_PlayEffect("SPELLFX_ICECUBE",hero,self,0,10,DAM_MAGIC,FALSE);
};

Aby działało jak należy, trzeba to jakoś ograniczyć. Nie jestem co do tego pewny, ale spróbuj coś takiego:
func void weaponreaction(var c_npc Hero,var c_npc Self)
{
var int random; random = Hlp_Random (2); //ewentualnie może być większa liczba w nawiasie
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
  {
return;
  };
var c_item weapon;
weapon=Npc_GetReadiedWeapon(hero);
if((Hlp_IsItem(weapon,ItMw_Blade_Blessed_01)) && (random==1))
{
Wld_PlayEffect("SPELLFX_ICECUBE",hero,self,0,10,DAM_MAGIC,FALSE);
};
};

Whiteye
  • Gość
Fajnie wszystko działa :D  , magia nie jest wyzwalana przy każdym trafieniu, ale za to tylko RAZ, wielkie dzięki, sam bym nie wpadł o zadeklarowaniu zmiennej random i jej użyciu jak tutaj:

var int random;
random = Hlp_Random (2);
...
if((Hlp_IsItem(weapon,ItMw_Blade_Blessed_01)) && (random==1))

Jeszcze raz dzięki, ja jeszcze pomieszam z tą funkcją żeby za każdym trafieniem wyzwalało magię, ale z tym już sobie chyba poradzę. :|
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Cytuj
Jeszcze raz dzięki, ja jeszcze pomieszam z tą funkcją żeby za każdym trafieniem wyzwalało magię, ale z tym już sobie chyba poradzę. 13.gif
Gdyby ci się udało, to podaj rozwiązanie tego, bo chciałbym coś podobnego zrobić, ale na razie nie mam czasu nad tym myśleć  :D

Whiteye
  • Gość
Cytuj
Gdyby ci się udało, to podaj rozwiązanie tego, bo chciałbym coś podobnego zrobić, ale na razie nie mam czasu nad tym myśleć 10.gif - Adanos

Udało mi się napisać (prawie) normalne wywoływanie magii za każdym trafieniem...

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 weaponreaction(var c_npc Hero,var c_npc Self)
{
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
  {
return;
  };
var c_item weapon;
var c_item eqweapon;
weapon=Npc_GetReadiedWeapon(hero);
eqweapon=Npc_GetEquippedMeleeWeapon(hero);
if(Hlp_IsItem(weapon,ItMw_Blade_Blessed_01))
{
 Wld_SendTrigger("weaponreaction");
 Wld_PlayEffect("SPELLFX_ICECUBE",hero,hero,0,10,DAM_MAGIC,FALSE);
 Wld_SendTrigger("Sbd_is_damaged");
 Wld_SendTrigger("CmpNpc");
}
else if (Hlp_IsItem(eqweapon,ItMw_Blade_Blessed_01))
{
 Wld_SendTrigger("weaponreaction");
 Wld_SendTrigger("Sbd_is_damaged");
 Wld_SendTrigger("CmpNpc");
};
};

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

...dlaczego "prawie"? Ano dlatego że podczas uderzenia bronią zdarzają się 2 wywołania czaru, potem 1, potem znowu 2, 3, itd.itp. Generalnie ilość wywołań raczej nie przekracza 4 na uderzenie. nie mam jednak pewności czy się znowu na chwilę nie zapętli i zacznie trzaskać magią non-stop. Wciąż nad tym skryptem pracuję, więc jak już uda mi się go poprawnie napisać to dam znać.
 

Whiteye
  • Gość
Po wielu zmaganiach z tym...ekhem...skryptem :D  , udało mi się w końcu dojść do efektu jaki chciałem - mianowicie, efekt magii jest wyzwalany za każdym trafieniem broni białej, tylko raz, bez żadnych pętli i innych takich tam, oto gotowy skrypt:

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 weaponreaction(var c_npc Hero,var c_npc Self)
{
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
  {
return;
  };
var c_item weapon;
var c_item eqweapon;
weapon=Npc_GetReadiedWeapon(hero);
eqweapon=Npc_GetEquippedMeleeWeapon(hero);
if(Hlp_IsItem(weapon,ItMw_Blade_Blessed_01))
{
 Wld_PlayEffect("SPELLFX_ICEWAVE",self,self,0,50,DAM_MAGIC,FALSE);  
}
else if (Hlp_IsItem(eqweapon,ItMw_Blade_Blessed_01))
{
 Wld_SendTrigger("weaponreaction");  
};
};

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

!!!UWAGA!!!

W "Wld_PlayEffect("SPELLFX_ICEWAVE",self,self,0,50,DAM_MAGIC,FALSE);" trzeba pamiętać żeby ZAWSZE obydwie pogrubione wartości były "self", jeżeli zostanie wstawione "hero" albo "other" w dowolnie jakim innym miejscu utworzy się znowu nieskończona pętla. Starałem się jak najbardziej, ale zabrakło mi już sił i pomysłów więc zostało tak....

!!!JESZCZE JEDNO!!!

Jako że obydwie wartości są "self" zaklęcie "zaczyna się" i "kończy" W PRZECIWNIKU, więc jeśli użyjemy tak jak powyżej SPELLFX_ICEWAVE, fala lodu będzie się rozchodzić OD przeciwnika zadając mu obrażenia zdefiniowane przez nas w funkcji i zamrażając (bez obaw, nas nie zamrozi i nie zrani, ale innych NPC-ów w zasięgu już raczej tak, nie wiem dokładnie, nie sprawdzałem :D  )

Jeśli natomiast użyjemy SPELLFX_ICECUBE albo SPELLFX_FIRESTORM, nie będzie wybuchu czy efektu zamrożenia tylko w momencie trafienia bronią utworzy się w przeciwniku "kula" zaklęcia (wszyscy wiedzą o co chodzi) a nie efekt kolizji, więc efekty uderzenia trzeba będzie znaleźć samemu w "Visualfxinst" - więc zamiast SPELLFX_FIRESTORM będzie SPELLFX_FIRESTORM_SPREAD, a zamiast SPELLFX_ICECUBE będzie SPELLFX_ICECUBE_COLLIDE (chyba)....

Mam nadzieję że to innym ułatwi jakoś modowanie, a tobie Adanos dziękuję za pomoc i motywację do pracy :P  

(jeśli ma ktoś pytanie co do tego, to piszcie na PM, jeżeli zdołam odpowiedzieć i będę miał czas, to odpowiem)
 

Artex
  • Gość

Artex
Gość

Magiczna Broń
#6 2008-09-05, 15:20(Ostatnia zmiana: 2008-09-05, 15:22)
Mam pytanie. Gdzie należy zamieścić ten skrypt?

I jeszcze coś:

var c_item weapon;
var c_item eqweapon;
weapon=Npc_GetReadiedWeapon(hero);
eqweapon=Npc_GetEquippedMeleeWeapon(hero);
if(Hlp_IsItem(weapon,ItMw_Blade_Blessed_01))   /*Czy jeżeli wstawię tutaj nazwę swojej broni to skrypt będzie działać dla niej?*/
{
 Wld_PlayEffect("SPELLFX_ICEWAVE",self,self,0,50,DAM_MAGIC,FALSE);  /*Jeżeli zmienię nazwę czaru to przy uderzeniu powinno się wyzwolić dowolne zaklęcie? Czy trzeba to wcześniej jakoś przygotować?*/
}
else if (Hlp_IsItem(eqweapon,ItMw_Blade_Blessed_01)) // Tu też zamienić?
{
 Wld_SendTrigger("weaponreaction");  
};
};

Te trzy komentarze są średnio widoczne, ale nie potrafię ich pokolorować.
 

Zubot

Zubot

Użytkownicy
posty202
Propsy2
Profesjabrak
  • Użytkownicy
Cytat: Adanos link=topic=3495.msg29679#msg29679 date=Aug 26 2008, 10:27\'
Gdyby ci się udało, to podaj rozwiązanie tego, bo chciałbym coś podobnego zrobić, ale na razie nie mam czasu nad tym myśleć  :D

ja również. Może ktoś by dał to jako poprawiony tutek, jak bedzie można  :P
 

Artex
  • Gość
Cytat: "Zubenos"\'
Może ktoś by dał to jako poprawiony tutek, jak bedzie można  :P

Dokładnie. Bo ten od Zysk#msgote author="Zubenos"\']Może ktoś by dał to jako poprawiony tutek, jak bedzie można  :P [/quote]

Dokładnie. Bo ten od [url=http://themodders.org/index.php?topic=100]Zyska
jest dosyć skomplikowany : P.
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Cytuj
Te trzy komentarze są średnio widoczne, ale nie potrafię ich pokolorować.
3 razy odpowiem tak.
Dopowiem do tego jeszcze:
Cytuj
Jeżeli zmienię nazwę czaru to przy uderzeniu powinno się wyzwolić dowolne zaklęcie? Czy trzeba to wcześniej jakoś przygotować?
to zależy jaki efekt dasz.
Cytuj
Mam pytanie. Gdzie należy zamieścić ten skrypt?
Spróbuj stworzyć plik magicznabron.d np. w folderze items.

Artex
  • Gość
Errm...

Nie ma czegoś takiego. Czy mówisz o skryptach do G1 czy G2???

A jeśli G2 to czy jest możliwość zrobienia takiej broni w G1? (raczej jest, skoro w czas zapłaty to zrobili).
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
A czy masz zainstalowane GMDK? Jeśli tak to powinien być taki folder c:\Program Files\Piranha Bytes\Gothic\_Work\Data\Scripts\Content\Items

Cytuj
A jeśli G2 to czy jest możliwość zrobienia takiej broni w G1? (raczej jest, skoro w czas zapłaty to zrobili).
Skoro w CZ zrobili, to wygląda na to, że można...

Zubot

Zubot

Użytkownicy
posty202
Propsy2
Profesjabrak
  • Użytkownicy
W G2 inaczej to można zrobić niż w G1 jest pewna różnica
 

Artex
  • Gość

Artex
Gość

Magiczna Broń
#13 2008-09-05, 18:33(Ostatnia zmiana: 2008-09-05, 18:50)
Oczywista że mam GMDK. Jak inaczej mógłbym modować?

Tyle że instalowałem sobie potem polskie skrypty, może tam tego brakuję...

Ściągnę jeszcze raz GMDK i zobaczę.



EDIT:

Ahh... Sorry, źle przeczytałem. Miałem stworzyć plik a nie go znaleźć : P.

Folder Items oczywiście mam.

To teraz troszkę popróbuję : ).

Jeszcze jedna sprawa, czy ten .d to ma być zwykły tekstowy czy musi być jakiś specjalny edytor żeby stworzyć taki plik?
 

Dracon

Dracon

Użytkownicy
posty1068
Propsy904
Profesjabrak
  • Użytkownicy
Oczywiście - Notatnik windows'a :D
 
,,Dobry, to człowiek, który nie ukrywa siedzącego w nim zwierzęcia. A taki co usiłuje udawać dobrego, jest wręcz niebezpieczny. Najgroźniejsi są ci, którzy sami głęboko wierzą, że są dobrzy. Odrażający, ohydny przestępca może zamordować jednego człowieka, dziesięciu, stu, ale nigdy nie zabija milionów. Miliony mordują ci, którzy mają się za samą dobroć.''

Wiktor Suworow, Akwarium

Artex
  • Gość
Okej, zrobiłem. Ale miecz ciągle nie zamraża.

Wygląda to tak.

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 weaponreaction(var c_npc Hero,var c_npc Self)
{
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
  {
return;
  };
var c_item weapon;
var c_item eqweapon;
weapon=Npc_GetReadiedWeapon(hero);
eqweapon=Npc_GetEquippedMeleeWeapon(hero);
if(Hlp_IsItem(weapon,Kill_Lame))
{
 Wld_PlayEffect("SPELLFX_ICEWAVE",self,self,0,50,DAM_MAGIC,FALSE);  
}
else if (Hlp_IsItem(eqweapon,Kill_Lame))
{
 Wld_SendTrigger("weaponreaction");  
};
};

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

i tak

//-----------------------------------------------------------
//ARTEX
//-----------------------------------------------------------
INSTANCE Kill_Lame (C_Item)
{
name = "Zguba Lamera";

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

value = 2500;

damageTotal = 110;
damagetype = DAM_EDGE;
range =  130;

cond_atr[2]   = ATR_STRENGTH;
cond_value[2]  = 80;

owner = Non_2001_Artex;
visual = "ItMw_1H_Sword_Bastard_04.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;
};


Jestem może troszkę upierdliwy, ale zależy mi żeby dowiedzieć się jak to działa. A miecz jest jak był (stworzyłem go już wcześniej i działał jak należy) i nie wyzwala zaklęcia.

Tak, repasowałem skrypty.

Czy potrzeba ingerencji w jeszcze jakiś plik?
 

Artex
  • Gość
Nikt mi nie pomoże  ;p  ?


Sorry za double post, ale chcę żeby ktoś to zauważył.
 

Zubot

Zubot

Użytkownicy
posty202
Propsy2
Profesjabrak
  • Użytkownicy
No ja bym pomógł, ale sam się nad tym głowię.
 

Artex
  • Gość
Od razu zapytam o kolejną rzecz. Otóż wszystkie gothicowe skrypty windows rozpoznaję jako "plik D" czy to że mój plik z magiczną bronią rozpoznaje jako "Dokument tekstowy" niczemu nie przeszkadza?
 

sebinho

sebinho

Użytkownicy
posty339
Propsy44
Profesjabrak
  • Użytkownicy
Dodawaj do nazwy .d
 

Artex
  • Gość
Cytat: sebinho link=topic=3495.msg31301#msg31301 date=Sep 7 2008, 17:54\'
Dodawaj do nazwy .d

To nic nie daje, on i tak czyta to jako plik tekstowy chociaż nie chce się normalnie otwierać, ale chyba tak móże być.

To jak? Może pomoże ktoś : P?
 

sebinho

sebinho

Użytkownicy
posty339
Propsy44
Profesjabrak
  • Użytkownicy

sebinho

Magiczna Broń
#21 2008-09-07, 18:53(Ostatnia zmiana: 2008-09-07, 18:53)
To jest nowy plik? Jeżeli tak, to dodaj też linijkę do niego w gothic.src o ile reparsujesz Spacerem
 

Whiteye
  • Gość
O żesz w morde....wracam sobie z wakacji a tu co? Maltretują mój topic :D  , ale ok. ;]  

Cytuj
Okej, zrobiłem. Ale miecz ciągle nie zamraża.

Wygląda to tak.

KOD
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 weaponreaction(var c_npc Hero,var c_npc Self)
{
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
  {
    return;
  };
var c_item weapon;
var c_item eqweapon;
weapon=Npc_GetReadiedWeapon(hero);
eqweapon=Npc_GetEquippedMeleeWeapon(hero);
if(Hlp_IsItem(weapon,Kill_Lame))
    {
      Wld_PlayEffect("SPELLFX_ICEWAVE",self,self,0,50,DAM_MAGIC,FALSE);  
    }
    else if (Hlp_IsItem(eqweapon,Kill_Lame))
    {
      Wld_SendTrigger("weaponreaction");  
    };
};

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


i tak

KOD
//-----------------------------------------------------------
//ARTEX
//-----------------------------------------------------------
INSTANCE Kill_Lame (C_Item)
{
    name                 =    "Zguba Lamera";

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

    value                 =    2500;

    damageTotal            =     110;
    damagetype            =    DAM_EDGE;
    range                =      130;

    cond_atr[2]           =     ATR_STRENGTH;
    cond_value[2]          =     80;

    owner                 =     Non_2001_Artex;
    visual                 =    "ItMw_1H_Sword_Bastard_04.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;
};

Czy potrzeba ingerencji w jeszcze jakiś plik? - Artex

Po pierwsze, mam ja wielką nadzieję że dodałeś do gothic.src linijkę z nazwą twego skryptu (najlepiej pod itemami) czyli - "nazwatwegoskryptu.d".
Po drugie (powinno być po pierwsze ale co mi tam...) skrypt jest w porządku. :P  
Po trzecie (chyba najważniejsze), musisz dodać "weaponreaction(other,self);" na początek paru funkcji (znajdują się w \_Work\Data\Scripts\Content\AI), takich jak:

1. ZS_ReactToDamage - w pliku ZS_ReactToDamage.d
2. B_CombatReactToDamage - w pliku B_CombatReactToDamage.d
3. B_Orc_AssessDamage - w pliku B_Orc_AssessDamage.d
4. B_MM_ReactToDamage - w pliku ZS_MM_Master.d
5. B_MM_ReactToCombatDamage - w pliku ZS_MM_Master.d

Wtedy już powinno działać.

I jeszcze jedno:
Cytuj
(...)Jestem może troszkę upierdliwy... - Artex
Nie martw się, ja też XD
 

Artex
  • Gość
Cytat: Whiteye link=topic=3495.msg31391#msg31391 date=Sep 8 2008, 14:42\'
Po trzecie (chyba najważniejsze), musisz dodać "weaponreaction(other,self);" na początek paru funkcji (znajdują się w \_Work\Data\Scripts\Content\AI), takich jak:

1. ZS_ReactToDamage - w pliku ZS_ReactToDamage.d
2. B_CombatReactToDamage - w pliku B_CombatReactToDamage.d
3. B_Orc_AssessDamage - w pliku B_Orc_AssessDamage.d
4. B_MM_ReactToDamage - w pliku ZS_MM_Master.d
5. B_MM_ReactToCombatDamage - w pliku ZS_MM_Master.d

Wtedy już powinno działać.

I jeszcze jedno:

Nie martw się, ja też XD

Sorry za wszystkie upierdliwe pytania, ale dopiero się uczę, nie rozumiem jeszcze skryptów takich jak tez ZS czy AI.

Poprzez wstawienie na początku funkcji rozumiesz dodanie tego zaraz pod frazą np. "func void B_MM_ReactToDamage ()"?

Może podam przykład.

func void B_MM_ReactToDamage ()

weaponreaction(other,self);  // TO było dodane, czy dobrze?

{
PrintDebugNpc (PD_MST_FRAME,"B_MM_ReactToDamage");
  PrintGlobals (PD_MST_CHECK);  

self.aivar[AIV_MM_TEMP_PRIO] = PRIO_ATTACKER;

if (C_PreyToPredator(self,other))
{
  // A MOŻE TU?
PrintDebugNpc (PD_MST_FRAME,"...Monster ist Beute");
Npc_SetTarget (self, other); //für AI_Flee
Npc_ClearAIQueue(self);
Npc_PercDisable (self, PERC_ASSESSENEMY); // SN:da diese Wahrnehmung sonst die Ausführung des folgenden AI_StartState verhindert!
AI_StartState (self, ZS_MM_Flee, 0, "");
}
else //Kein Jäger
{
PrintDebugNpc (PD_MST_FRAME,"...Monster ist Jäger");
Npc_SetTarget (self, other);
Npc_ClearAIQueue(self);
Npc_PercDisable (self, PERC_ASSESSENEMY); // SN:da diese Wahrnehmung sonst die Ausführung des folgenden AI_StartState verhindert!
AI_StartState (self, ZS_MM_Attack, 0, "");
};
};

Jeszcze raz sorry ale zależy mi żeby zrobić taką broń... już napisałem wyżej że dopiero się uczę  ;]
 

Whiteye
  • Gość
Cytuj
Jeszcze raz sorry ale zależy mi żeby zrobić taką broń... już napisałem wyżej że dopiero się uczę - Artex
Spox, naprawdę nie martw się, każdy z nas się czegoś codziennie uczy :D  
(w każdym razie tak jest ze mną ;]  )
KOD
func void B_MM_ReactToDamage ()

weaponreaction(other,self);  // TO było dodane, czy dobrze?

{
PrintDebugNpc (PD_MST_FRAME,"B_MM_ReactToDamage");
PrintGlobals (PD_MST_CHECK);  

self.aivar[AIV_MM_TEMP_PRIO] = PRIO_ATTACKER;

if (C_PreyToPredator(self,other))
{
  // A MOŻE TU?
PrintDebugNpc (PD_MST_FRAME,"...Monster ist Beute");
Npc_SetTarget (self, other); //für AI_Flee
Npc_ClearAIQueue(self);
Npc_PercDisable (self, PERC_ASSESSENEMY); // SN:da diese Wahrnehmung sonst die Ausführung des folgenden AI_StartState verhindert!
AI_StartState (self, ZS_MM_Flee, 0, "");
}
else //Kein Jäger
{
PrintDebugNpc (PD_MST_FRAME,"...Monster ist Jäger");
Npc_SetTarget (self, other);
Npc_ClearAIQueue(self);
Npc_PercDisable (self, PERC_ASSESSENEMY); // SN:da diese Wahrnehmung sonst die Ausführung des folgenden AI_StartState verhindert!
AI_StartState (self, ZS_MM_Attack, 0, "");
};
};
Yyyy, nie, obydwa przypadki są źle, jeżeli ma być na początku funkcji, ma wyglądać tak:
func void B_MM_ReactToDamage ()
{
weaponreaction(other,self);  // musi być tutaj - czyli sam początek
PrintDebugNpc (PD_MST_FRAME,"B_MM_ReactToDamage");
PrintGlobals (PD_MST_CHECK);
...
...
}
 

Artex
  • Gość
Działa, ale połowicznie  ;]  .

A mianowicie jest świetny efekt wizualny (ta rozlewająca się fala lodu...) ale nikogo nie zmaraża, ani mnie (i nie powinna), ani gościa którego biję, ani NPC do okoła...
 

Whiteye
  • Gość

Whiteye
Gość

Magiczna Broń
#26 2008-09-08, 16:13(Ostatnia zmiana: 2008-09-08, 16:16)
Cytuj
Działa, ale połowicznie 13.gif .

A mianowicie jest świetny efekt wizualny (ta rozlewająca się fala lodu...) ale nikogo nie zmaraża, ani mnie (i nie powinna), ani gościa którego biję, ani NPC do okoła...
Bo nie powinna, to jest tylko wstawienie efektu który zadaje obrażenia, jeżeli chcesz żeby zamrażało, wejdź w B_AssessMagic.d (\_Work\Data\Scripts\Content\Magic) znajdź B_AssessMagic_IceCube i skopiuj całą zawartość:

func void B_AssessMagic_IceCube()
{
>>PrintDebugNpc(PD_MAGIC,"B_AssessMagic ...IceCube oder IceWave");//kopiuj od tej linijki
Npc_SendPassivePerc(self,PERC_ASSESSFIGHTSOUND,self,other);
if(!((self.guild == GIL_SLF) || (self.guild == GIL_DEMON) || (self.guild == GIL_GOLEM) || (self.guild == GIL_SWAMPSHARK) || (self.guild == GIL_TROLL)) && !(C_BodyStateContains(self,BS_SWIM) || C_BodyStateContains(self,BS_DIVE)))
{
Npc_ClearAIQueue(self);
AI_StartState(self,ZS_MagicFreeze,0,"");
};<<//do tej
};
i wklej do swojej funkcji o tak:
func void weaponreaction(var c_npc Hero,var c_npc Self)
{
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
{
return;
};
var c_item weapon;
var c_item eqweapon;
weapon=Npc_GetReadiedWeapon(hero);
eqweapon=Npc_GetEquippedMeleeWeapon(hero);
if(Hlp_IsItem(weapon,Kill_Lame))
{
Wld_PlayEffect("SPELLFX_ICEWAVE",self,self,0,50,DAM_MAGIC,FALSE);

///WKLEJ PO Wld_PlayEffect:///

PrintDebugNpc(PD_MAGIC,"B_AssessMagic ...IceCube oder IceWave");
Npc_SendPassivePerc(self,PERC_ASSESSFIGHTSOUND,self,other);
if(!((self.guild == GIL_SLF) || (self.guild == GIL_DEMON) || (self.guild == GIL_GOLEM) || (self.guild == GIL_SWAMPSHARK) || (self.guild == GIL_TROLL)) && !(C_BodyStateContains(self,BS_SWIM) || C_BodyStateContains(self,BS_DIVE)))
{
Npc_ClearAIQueue(self);
AI_StartState(self,ZS_MagicFreeze,0,"");
};
}
else if (Hlp_IsItem(eqweapon,Kill_Lame))
{
Wld_SendTrigger("weaponreaction");
};
};
I powinno fajnie zamrażać twego przeciwnika, jednakże będzie zamrażać TYLKO JEGO (ciebie nie - wiadome zresztą), nie będzie zamrażać NPC-ów dookoła...
 

Artex
  • Gość
Tak. Jestem niepoprawny i będę cię męczył do końca życia.

func void weaponreaction(var c_npc Hero,var c_npc Self)


{
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
{

return;
};




var c_item weapon;
var c_item eqweapon;
weapon=Npc_GetReadiedWeapon(hero);
eqweapon=Npc_GetEquippedMeleeWeapon(hero);
if(Hlp_IsItem(weapon,Kill_Lame))


{
Wld_PlayEffect("SPELLFX_FIRESTORM",self,self,0,50,DAM_MAGIC,FALSE);


PrintDebugNpc( PD_MAGIC, "B_AssessMagic_Firerain" );

Npc_SendPassivePerc(self, PERC_ASSESSFIGHTSOUND, self, other);

}


{

Wld_SendTrigger("weaponreaction"); ////////////////////TU JEST RZEKOMY BŁĄD!!!!!!!!!!!

};

Kiedy repasuje skrypty to wyskakuję mi komunikat że Int nie zwraca się w Return (jakoś tak). Wcześniej tego nie było. Nie wiem na czym polega problem.

Dalej mam ten problem że jak sobie ustawiłem trochę inne czary w skrypcie to ten... oszalał. Kiedy komuś sprzedam cios mieczem to on... hm... tańczy (jakby go prąd kopnął  ^_^  albo się palił) i ubywa my życie aż zginie (przy czym nie może się ruszać).

Wiem że jestem upierdliwy  <_<
 

Whiteye
  • Gość
Cytuj
Tak. Jestem niepoprawny i będę cię męczył do końca życia.
To ja już wolę wyskoczyć przez okno... :D  

func void weaponreaction(var c_npc Hero,var c_npc Self)


{
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
{

return;
};




var c_item weapon;
var c_item eqweapon;
weapon=Npc_GetReadiedWeapon(hero);
eqweapon=Npc_GetEquippedMeleeWeapon(hero);
if(Hlp_IsItem(weapon,Kill_Lame))


{
Wld_PlayEffect("SPELLFX_FIRESTORM",self,self,0,50,DAM_MAGIC,FALSE);


PrintDebugNpc( PD_MAGIC, "B_AssessMagic_Firerain" );

Npc_SendPassivePerc(self, PERC_ASSESSFIGHTSOUND, self, other);

}


{

Wld_SendTrigger("weaponreaction"); ////////////////////TU JEST RZEKOMY BŁĄD!!!!!!!!!!!

};
Źle, źle i jeszcze raz źle, ja wiem że dużo osób która moduje Gothica nie miała nauki programowania więc może nie znać struktury języka C, ale chociaż mozna by co najmniej dobrze kopiować i wklejać :P

Chodzi mi o to że zjadłeś "else":
{
Wld_PlayEffect("SPELLFX_FIRESTORM",self,self,0,50,DAM_MAGIC,FALSE);


PrintDebugNpc( PD_MAGIC, "B_AssessMagic_Firerain" );

Npc_SendPassivePerc(self, PERC_ASSESSFIGHTSOUND, self, other);

}

///W TYM OTO MIEJSCU!!!///
{

Wld_SendTrigger("weaponreaction"); ////////////////////TU JEST RZEKOMY BŁĄD!!!!!!!!!!!

};
///A TUTAJ BRAKUJE "};"///
A ten twój taniec NPC'a, to po prostu efekt podczas uderzenia deszczem ognia, a traci życie jakby się jarał...
 

Artex
  • Gość
Erm..... Tylko nie krzycz (  :D  )


mam takie coś

func void weaponreaction(var c_npc Hero,var c_npc Self)


{
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
{

return;
};




var c_item weapon;
var c_item eqweapon;
weapon=Npc_GetReadiedWeapon(hero);
eqweapon=Npc_GetEquippedMeleeWeapon(hero);
if(Hlp_IsItem(weapon,Kill_Lame))


{
Wld_PlayEffect("SPELLFX_FIRESTORM",self,self,0,50,DAM_MAGIC,FALSE);

PrintDebugNpc( PD_MAGIC, "B_AssessMagic_Firestorm" );

Npc_SendPassivePerc(self, PERC_ASSESSFIGHTSOUND, self, other);
};


else

{

Wld_SendTrigger("weaponreaction");

};
};

A debilator piszę :  "unknow identifier: ELSE".




I jeszcze jedna sprawa.

Są efekty graficzne, a co zrobić żeby był faktyczny efekt czaru (tzn. przy firerain podpala ludzi do okoła).
 

Zysk

Zysk

Użytkownicy
posty606
Propsy451
  • Użytkownicy
else nie może być po średniku
 

Artex
  • Gość
Cytat: Zysk link=topic=3495.msg33802#msg33802 date=Oct 7 2008, 21:13\'
else nie może być po średniku

Omg, ale wpadka  ;]  .

Jeszcze cuś, kiedy bije potwory jak np. Troll czy wąż błotny to efekt jest imponujący, niebo dosłownie płonie. Ale kiedy biję jakiegoś NPC to z nieba spada po parę "kropel" ognia. Co za to odpowiada?


No i jeszcze, co odpowiada za "prawdziwy" efekt czaru? : )
 

Zysk

Zysk

Użytkownicy
posty606
Propsy451
  • Użytkownicy
Symulację rzucenia czaru (efekt wizualny, dźwiękowy i dmg) wywołuje się przez:
Wld_PlayEffect("SPELLFX_FIRESTORM",self,self,0,50,DAM_MAGIC,FALSE);Podejrzewam, że u ciebie efekt szybko się kończy, ponieważ cel umiera. Spróbuj zamienić pierwszego selfa na hero. A jak nie zadziała to trochę poeksperymentuj.
 

Artex
  • Gość

Artex
Gość

Magiczna Broń
#33 2008-10-09, 17:53(Ostatnia zmiana: 2008-10-09, 17:53)
Cytat: Zysk link=topic=3495.msg33882#msg33882 date=Oct 8 2008, 20:19\'
Symulację rzucenia czaru (efekt wizualny, dźwiękowy i dmg) wywołuje się przez:
Wld_PlayEffect("SPELLFX_FIRESTORM",self,self,0,50,DAM_MAGIC,FALSE);Podejrzewam, że u ciebie efekt szybko się kończy, ponieważ cel umiera. Spróbuj zamienić pierwszego selfa na hero. A jak nie zadziała to trochę poeksperymentuj.

Ahaaa....

Ale przeczytałeś mojego posta i zapamiętałeś tylko jedno zdanie : )

Co zrobić żeby czar był "naprawdę" tzn. np. IceWave zamraża ludzi dookoła, firestorm podpala w małym promieniu od celu, Pięśc burzy odrzuca (nie tylko cel ale i NPC do okoła) itd...

EDIT: A cel wcale nie umiera bo uderzam w PC_FIGHTERfm a on jest nieśmiertelny...

ale pokombinuję.
 

Artex

Artex

Użytkownicy
posty99
  • Użytkownicy
Okej, to już w miarę działa, brakuje mi jeszcze obszarowego dmg i podpalenia  :D   Mam kod:

func void weaponreaction(var c_npc hero,var c_npc Self)


{
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
{

return;
};

/////   spellFX_FireRain


var c_item weapon;
var c_item eqweapon;
weapon=Npc_GetReadiedWeapon(hero);
eqweapon=Npc_GetEquippedMeleeWeapon(hero);
if(Hlp_IsItem(weapon,Kill_Lame))


{
Wld_PlayEffect("spellFX_FireRain",self,self,0,50,DAM_MAGIC,FALSE);

PrintDebugNpc( PD_MAGIC, "" );   /// Za co odpowiada ta linijka? Nie widzę różnicy...

Npc_SendPassivePerc(self, PERC_ASSESSFIGHTSOUND, self, other);
}


else

{

Wld_SendTrigger("weaponreaction");

};
};

No i tu jest ciekawostka...

Zrobiłem tak, przyzwałem sobie parę CharcterHelperów i ścierwojada którego unieśmiertelniłem, za każdym razem kiedy uderzam ścierwojada wyzwala się efekt graficzny i dźwiękowy, bez dmg.

Ale jeżeli jeszcze w trakcie trwania czaru wcielę się w ścierwojada (klawisz "O") to pc_hero i ch dostaną obrażenia (w przypadku CH, po prostu zginą). Tak samo się dzieje kiedy wcielę się w ścierwojada i zamierzę się ciosem na pc_hero z wyciągniętą bronią, ale w ostatniej chwili dam cofnięcie. Wtedy efekt też jest wyzwalany (grafa, dźwięk i dmg obszarowy).

OCB?
 

Artex

Artex

Użytkownicy
posty99
  • Użytkownicy

Artex

Magiczna Broń
#35 2008-10-30, 15:51(Ostatnia zmiana: 2008-11-01, 19:47)
Zna się ktoś na tym?

POMOCY!


EDIT:

No kurcze..... nikt mi nie pomoże?
 


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