Magiczna Broń 16669 35

O temacie

Autor

Zaczęty 25.08.2008 roku

Wyświetleń 16669

Odpowiedzi 35

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