Spirit Healer

Indította Elysyum, 2010 április 24, 09:58:49 DÉLUTÁN

Előző téma - Következő téma

Girosz

Idézetet írta: Skyne Dátum 2010 április 25, 11:11:45 DÉLUTÁN
ott (egy) komplett core van abban bőven :P, még scriptek is =), de amúgy azért kell hozzá valamien programozási alapismeret hogy megértse az ember, de kétségkívül a legjobb tanulási módszer ha megérted hogy mi van oda írva, és megtudod fogalmazni hogy mit szeretnél elérni, majd ezt a kettőt egyesíted =)

Alapvető programozási ismeretek kellenek csak, meg rengeteg kitartás + egy kicsi google, ha elakadsz. ja és kell tudni minimálisan angolul.

Idézetet írta: $0undX Dátum 2010 április 25, 10:45:43 DÉLUTÁN
helyesen:
Idézif (!isAlive())
      SummonCreature(92345, GetPositionX(), GetPositionY(), GetPositionZ(), 0, TEMPSUMMON_CORPSE_DESPAWN, 40000);
mert nem fordult a plr miatt , így jó.

Bocsi nézd be annak, hogy kurva fáradt vok. :D Na csak hogy én is kötekedjek: ha a summon típusa TEMPSUMMON_CORPSE_DESPAWN, akkor instant eltűnik a creature, ergo nincs szükség despawntime-ra (a 40000-es érték az). Igaz leginkább semmire nincs szükség, mert a spirit healer nem szokott csak úgy meghalni. :D

$0undX

#31
 3-4

$0undX

nah megírom rendesen megint az élesztő scriptjét és ha kész van akkor egybe szedem majd az egészet

Girosz

Megnéztem az sd2 kódot és van benne egy két hiba. Gondolom rájöttél már te is de azért leírom:

//Called at creature reset either by death or evade
void Reset() {}


Tehát a reset nem az igazi, mert a creature halálakor indul, meg ha életben marad egy harc után. Igaz, hogy egyszer meghívódik, amikor betölt a creature, de ettől még nem az igazi, mert alapvetően nem erre való. De ez inkább csak amolyan formalitás, semmi extra. Én inkább az update()-ba raknám, egy 1 másodperces időzítővel, és despawn előtt megbizonyosodnék róla, hogy biztos él-e a player.

Ezt meg le lehet erre egyszerűsíteni:

if (m_creature->GetOwner())
    owner = ((Unit*)m_creature)->GetOwner();
else
{
    m_creature->ForcedDespawn();
    return;
}


Egyszer megnézed, hogy az m_creature->GetOwner()-nek van-e értéke. Ha van akkor beírja az owner változóba. Ezek után fölösleges megnézni, hogy az owner-nek van-e értéke, mert tuti, hogy lesz.

$0undX

igen, erre én is gondoltam és meg is írtam a következő kódot de amikor megjelenik az npc ACCESS_VIOLATION nevű dologgal elszáll az egész és ki is írja hogy a mangoscript.dll-ben van a violation,  tessék a kód:
http://pastebin.com/kuVTCHiF

Girosz

Na megvan végre a kód egyelőre csak Trinityhez, de $0undX majd biztos megcsinálja SD2-köz is. ;D
A player.cpp fájlban a KillPlayer() függvény végére pakoljátok be ezt a két sort:
    TempSummon* SpiritHealer = SummonCreature(9000000, GetPositionX(), GetPositionY(), GetPositionZ(), 0, TEMPSUMMON_CORPSE_DESPAWN);
    SpiritHealer->SetUInt64Value(UNIT_FIELD_SUMMONEDBY, this->GetGUID());

A SpiritHealer változót azért kell bevezetni, mert különben nem lehetne a következő sorban átadni az ownert (tulajdonos).
Így már a scriptben a GetOwner() függvény rendes értéket ad vissza.

A scriptben azért nem akkor despawnolom a creature-t amikor élővé válik a player, mert folyton becrashelt a szerver. Feltételezem, hogy mikor feléled a player, új GUID-ot kap, és így a régi változó elég nagy gubancot okoz, ezért egy 30 másodperces időzítés után tűnik csak el.
npc_event_sh.cpp

$0undX

gondolom hasonló okból crashel az én kódom is , holnap majd ujraírom.

Speeros

#37
A killplayer az nem akkor h
Html/Css/JavaScript/Php/C++/Mangos framework
CNC esztergályos, marós

Girosz

#38
M

Speeros

Html/Css/JavaScript/Php/C++/Mangos framework
CNC esztergályos, marós

Powered by EzPortal