Miecz runiczny 3004 5

O temacie

Autor krupam

Zaczęty 9.07.2011 roku

Wyświetleń 3004

Odpowiedzi 5

krupam

krupam

Użytkownicy
posty105
Propsy43
Profesjabrak
  • Użytkownicy
Nie, od razu mówię, że nie chodzi o żaden zatracony przecinek, czy niezrozumianą funkcję
Skrypt:
//***************************************************************
func void B_Blade_of_Gods (var C_NPC oth, var C_NPC slf)
{
var C_NPC UnNamed;
UnNamed = Hlp_GetNpc (KDF_2002_UnNamed);

if (Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(UnNamed))
{
var C_ITEM ready;
var int randomdmg;
var int damage;

var int Innos;
var int Adanos;
var int Beliar;

ready = Npc_GetReadiedWeapon(UnNamed);
randomdmg = Hlp_Random (100);
damage = 1000;

if (Npc_HasItems(UnNamed, ItMw_2H_BladeOfGods) == TRUE
&& Hlp_IsItem(ready, ItMw_2H_BladeOfGods) == TRUE)
&& (slf.flags != NPC_FLAG_IMMORTAL)
{
if (Innos >= 5)
&& (Adanos >= 5)
&& (Beliar >= 5)
{
Wld_PlayEffect("spellFX_MassDeath", UnNamed, UnNamed, 0, 0, 0, FALSE );
B_MagicHurtNpc (UnNamed, slf, 5000);
Innos = 0;
Adanos = 0;
Beliar = 0;
Print("Moc wszystkich trzech Bogów wyzwolona!");
}
else if (randomdmg <= 33)
{
Wld_PlayEffect("spellFX_Firestorm_Spread", slf, slf, 0, 0, 0, FALSE ); //Innos
B_MagicHurtNpc (UnNamed, slf, damage);
Innos += 1;
if (Innos >=5)
{
Print("Moc Innosa naładowana!");
};
}
else if (randomdmg > 33)
&& (randomdmg < 67)
{
Wld_PlayEffect("spellFX_Icebolt_Collide", slf, slf, 0, 0, 0, FALSE ); //Adanos
B_MagicHurtNpc (UnNamed, slf, damage);
Adanos += 1;
if (Adanos >=5)
{
Print("Moc Adanosa naładowana!");
};
}
else if (randomdmg >= 66)
{
Wld_PlayEffect("spellFX_BeliarsRage", slf, slf, 0, 0, 0, FALSE ); //Beliar
B_MagicHurtNpc (UnNamed, slf, damage);
Beliar += 1;
if (Beliar >=5)
{
Print("Moc Beliara naładowana!");
};
};
};
};
};

Gdzie tkwi problem? Ano bo gdy ja steruję ową postacią(Kdf_2002_UnNamed) to fala działa jak powinna i rozpierdala wszystko na swej drodze. Jednak gdy postać steruje się sama(tak jak będzie to w modzie), to fala robi jedynie ładny efekcik, ale obrażeń nikomu dookoła nie robi. Chciałbym po prostu wiedzieć, jak ustawić funkcję, która wywoła B_MagicHurtNPC na KAŻDYM npc(poza kolesiami w grupie) w zasięgu rażenia(no bo niby można zawsze wpisać wszystkie możliwe insty pod Npc_GetDistToNpc, ale to trochę bez sensu).
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
A jak dasz tak B_MagicHurtNpc (UnNamed, UnNamed, damage);
to co się dzieje?

krupam

krupam

Użytkownicy
posty105
Propsy43
Profesjabrak
  • Użytkownicy

krupam

Miecz runiczny
#2 2011-07-10, 11:33(Ostatnia zmiana: 2011-07-10, 11:45)
Cóż, skrypt od tej funkcji wygląda tak:
func void B_MagicHurtNpc (var C_NPC slf, var C_NPC oth, var int damage)
{
Npc_ChangeAttribute (oth, ATR_HITPOINTS, -damage);

// ------ XP HIER vergeben (ZS_Dead kennt den other nicht mehr) ------
if (Npc_IsDead(oth))
{
// ------ XP ------
if ( Npc_IsPlayer(slf) || (slf.aivar[AIV_PARTYMEMBER]==TRUE) )
&& (oth.aivar[AIV_VictoryXPGiven] == FALSE)
{
B_GivePlayerXP (self.level * XP_PER_VICTORY);

oth.aivar[AIV_VictoryXPGiven] = TRUE;
};
};
};

Logiczną siłą rzeczy, postać zabije się sama, ale jeszcze sprawdzę...

@edit
Sprawdziłem. Teraz faktycznie postać zabija się sama, chyba że ma flags=2...
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
A próbowałeś zadawać obrażenia przez Wld_PlayEffect(); dwa 0 odpowiadają bodajże za obrażenia poczytaj ;).

Jeśli wiesz jakich npc chcesz zabić możesz użyć funkcji B_kill

       var C_NPC zabity = Hlp_GetNpc (instance1);
        var C_NPC zabity1 = Hlp_GetNpc (instance2);
        var C_NPC zabity2 = Hlp_GetNpc (instance3);
        B_kill(zabity);
        B_kill(zabity1);
        B_kill(zabity2);

Pisałem z pamięci więc nie wiem czy pójdzie w G2 funkcja może się też nazywać trochę inaczej jak by coś to poszukaj nazw funkcji w pliku Externals.d

krupam

krupam

Użytkownicy
posty105
Propsy43
Profesjabrak
  • Użytkownicy
Te zera po Wld_PlayEffect to chyba oddalenie w płaszczyznach x y z...
Co do drugiego sposobu, to będzie w pieruna wpisywania, ale zrobię do tego osobną funkcję i myślę, że będzie działać...
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Te zera po Wld_PlayEffect to chyba oddalenie w płaszczyznach x y z...
Nie ucz ojca robić dzieci :D  Masz tutaj oryginalny skrypt rutyny śniącego z G1

Spoiler
func void ZS_Sleeper() // Immobile
{
    PrintDebugNpc (PD_MST_FRAME, "ZS_Sleeper");
   
Npc_PercEnable (self, PERC_ASSESSPLAYER, B_Sleeper_AssessSC);
  Npc_SetPercTime (self, 0.5);

AI_AlignToWP (self); // SN: Monster am Start am Wegpunkt ausrichten
};
func int ZS_Sleeper_loop()
{
if (SLF_FIRE == TRUE)
{
AI_TurnToNpc(self,hero);

if (Npc_GetStateTime(self) > 5)
{
Wld_PlayEffect("SPELLFX_SLEEPER_FIREBALL", self, hero, 2, 150, DAM_FIRE, TRUE); //Projetil = TRUE (trifft alle)
Npc_SetStateTime(self,0);
};
};
return 0;
};
func void ZS_Sleeper_end()
{
    PrintDebugNpc (PD_MST_FRAME, "ZS_Sleeper_end");
};

masz tam taką linijkę

Wld_PlayEffect("SPELLFX_SLEEPER_FIREBALL", self, hero, 2, 150, DAM_FIRE, TRUE);

150 to liczba obrażeń
DAM_FIRE to chyba jasne
i TRUE czyli ze chcesz żeby były zadawane obrażenia
2 nie pamiętam :D


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