Informatikai Barkács Fórum

WORLD OF WARCRAFT SZERVER => Általános => A témát indította: Elysyum Dátum 2010 április 24, 09:58:49 DÉLUTÁN

Cím: Spirit Healer
Írta: Elysyum Dátum 2010 április 24, 09:58:49 DÉLUTÁN
Üdv!

A kérdés a következő: hogyan tudom megoldani hogy a legközelebbi spirit healerhez rakjon ki ha meghalok?

Cím: Re:Spirit Healer
Írta: Girosz Dátum 2010 április 24, 10:07:54 DÉLUTÁN
Nem nagyon lehet saját spirit healert készíteni. Azaz lehet, de azt, hogy ott dobjon ki azt nem. Minden zónának van a saját sh-ja és ha megváltoztatod, akkor abban a zónában a te sh-dhoz fog mindenkit kirakni. De mivel gondolom ez valami speciális helyen lenne (pl. tanaris isle), és nem akarod, hogy bárki csak úgy odakerüljön, nem nagyon lehet megoldani.
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 25, 08:17:26 DÉLELŐTT
de ha t
Cím: Re:Spirit Healer
Írta: Elysyum Dátum 2010 április 25, 09:31:09 DÉLELŐTT
Azshara Crater ben lenne ^^ azthiszem 37 es map id szóval mindenki mehet ott egy helyre :D

EDIT: Jó messze pvp event guardjaimtól :) mert ha pvp z nek egy tiltott helyen megölik őket... és le kell telni egy kevés időnek.
Cím: Re:Spirit Healer
Írta: Elysyum Dátum 2010 április 25, 05:15:20 DÉLUTÁN
Anélkül a wow-v nélkül ez hogy megvalósítható?(szeretném megtanulni nem csak használni :D )
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 25, 07:48:12 DÉLUTÁN
a wow-v az csak sql-t kreál szóval persze hogy megoldható de per pill gőzöm sincs arról hogy kézileg hogy kéne mert nem tom a struktúrát hogy használja a core szóval használd wow-v -t de ha nagyon érdekel google-z rá , mondjuk:
http://www.google.hu/search?hl=hu&client=firefox-a&hs=0ql&rls=org.mozilla:hu:official&ei=AoDUS4btM-SdOK2pxOwC&sa=X&oi=spell&resnum=0&ct=result&cd=1&ved=0CCEQBSgA&q=mangos+how+to+create+a+graveyard&spell=1 (http://www.google.hu/search?hl=hu&client=firefox-a&hs=0ql&rls=org.mozilla:hu:official&ei=AoDUS4btM-SdOK2pxOwC&sa=X&oi=spell&resnum=0&ct=result&cd=1&ved=0CCEQBSgA&q=mangos+how+to+create+a+graveyard&spell=1)
2. találat mondjuk jó is neked http://www.mmowned.com/forums/ascent-guides/41368-how-make-custom-graveyard.html (http://www.mmowned.com/forums/ascent-guides/41368-how-make-custom-graveyard.html) , nem tom mangos-ra van-e de kb hasonló lehet a struktúra
Cím: Re:Spirit Healer
Írta: Girosz Dátum 2010 április 25, 08:50:45 DÉLUTÁN
Hmmm... Úgy nézem kicsit el voltam tévedve, és máshogy működnek ezek a graveyardok, mint gondoltam. Utána fogok nézni ennek, és közlöm, hogy mire jutottam.
Cím: Re:Spirit Healer
Írta: Speeros Dátum 2010 április 25, 08:53:37 DÉLUTÁN
Kedvenc megold
Cím: Re:Spirit Healer
Írta: Girosz Dátum 2010 április 25, 09:23:55 DÉLUTÁN
Asszem megvan a következő scriptes melóm. :D
Cím: Re:Spirit Healer
Írta: szotyo Dátum 2010 április 25, 09:27:25 DÉLUTÁN
Hmm Girosz, ha sikerül megvalósítani majd ha lehetséges oszd meg velünk is:D
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 25, 09:31:05 DÉLUTÁN
nem bonyolult , csak meg kell találni azt a függvényt ami player halálakor fut le , spawn npc , gondolom átad pointert a játékosról és castspell , ha lesz időm megírom , ha Girosz nem előz meg  :D
Cím: Re:Spirit Healer
Írta: szotyo Dátum 2010 április 25, 09:32:27 DÉLUTÁN
Hajrá, ha valamiben tok segíteni írj.
Cím: Re:Spirit Healer
Írta: Girosz Dátum 2010 április 25, 09:39:37 DÉLUTÁN
Idézetet írta: $0undX Dátum 2010 április 25, 09:31:05 DÉLUTÁN
nem bonyolult , csak meg kell találni azt a függvényt ami player halálakor fut le , spawn npc , gondolom átad pointert a játékosról és castspell , ha lesz időm megírom , ha Girosz nem előz meg  :D

Pontosabban átadja a player pointerét, de igen nagyjából ennyi, + megnézed, hogy melyik zónában van, mert nem akarjuk, hogy mindenhol ezt csinálja ugye.  ::)
Cím: Re:Spirit Healer
Írta: Szilárd Dátum 2010 április 25, 09:58:31 DÉLUTÁN
:S Olyan csúnya ,hogy 5 egymás alatt lévő topicot is Elysyum indított :S
Cím: Re:Spirit Healer
Írta: Girosz Dátum 2010 április 25, 10:10:43 DÉLUTÁN
Ezek legalább értelmes kérdések...
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 25, 10:11:16 DÉLUTÁN
na Girosz én jutottam 1-2 dologra , megosztom hátha téged előrébb visz , továbbá kis véleményt is mondhattok róla :D
itt 1 sql eloszor is:
http://pastebin.com/WWc4AEqX (http://pastebin.com/WWc4AEqX)

aztán a src/game/map.cpp-ben
void Map::Update(const uint32 &t_diff)
-en belül van ez a rész:
Idéz/// update players at tick
   for(m_mapRefIter = m_mapRefManager.begin(); m_mapRefIter != m_mapRefManager.end(); ++m_mapRefIter)
   {
       Player* plr = m_mapRefIter->getSource();
       if(plr && plr->IsInWorld())
           plr->Update(t_diff);
   }

na ezt módosíthatjuk erre:
Idéz/// update players at tick
   for(m_mapRefIter = m_mapRefManager.begin(); m_mapRefIter != m_mapRefManager.end(); ++m_mapRefIter)
   {
       Player* plr = m_mapRefIter->getSource();
      //Todo: needs some zone check if someone want it
      if (!plr->isAlive())
         plr->SummonCreature(92345, plr->GetPositionX, plr->GetPositionY, plr->GetPositionZ, 0, type, 40000);
       if(plr && plr->IsInWorld())
           plr->Update(t_diff);
   }
, és hozzá mingyárt készítek 1 sd2-es szépséget is , am nem tudom hogy ez a map update-es cucc jó-e így de ha nem akkor majd Girosz kijavít  ;D
Cím: Re:Spirit Healer
Írta: Girosz Dátum 2010 április 25, 10:19:48 DÉLUTÁN
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 25, 10:21:29 DÉLUTÁN
nah az sql-ben a scriptname-et módosítsátok
Idézeleszto
-re és tessék beilleszteni ezt a cuccot sd2-be: http://pastebin.com/7JZrCUFE (http://pastebin.com/7JZrCUFE)
Scriptloader.cpp-ben adjátok hozzá ezt a 2 sort:
extern void AddSC_eleszto();
és
AddSC_eleszto();

egyiket fentre másikat lentre

Fontos: én ezt most megcsináltam de nem teszteltem és nem tudom hogy a módszer jó-e már késő van és fáradt vagyok , majd holnap tesztelek és írok
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 25, 10:23:41 DÉLUTÁN
a killplayer az hal
Cím: Re:Spirit Healer
Írta: Girosz Dátum 2010 április 25, 10:29:21 DÉLUTÁN
Ez a kód öli meg a playert. Mutatom:
Player::Update-n belül ez a rész
    if (m_deathState == JUST_DIED)
        KillPlayer();


Szóval minden egyes player updatenél leellenőrzi, hogy meg kell-e halnod, és ha igen akkor megy a killplayer().
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 25, 10:33:27 DÉLUTÁN
aha  :D , akkor a killplayer-en belül megmutatnád hogy kell pointert csinálni player-re?
Cím: Re:Spirit Healer
Írta: Girosz Dátum 2010 április 25, 10:41:17 DÉLUTÁN
Oszt
Cím: Re:Spirit Healer
Í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ó.
Cím: Re:Spirit Healer
Írta: Elysyum Dátum 2010 április 25, 10:49:18 DÉLUTÁN
Köszönöm a válaszokat de am ami kódot belinkeltél http://pastebin.com/7JZrCUFE ez már kész is és be kell forgatni?
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 25, 10:50:31 DÉLUTÁN
a magon is v
Cím: Re:Spirit Healer
Írta: Elysyum Dátum 2010 április 25, 10:51:58 DÉLUTÁN
Idézetet írta: $0undX Dátum 2010 április 25, 10:50:31 DÉLUTÁN
a magon is változtatni kell azon még dolgozunk Girosz-al , de majdnem kész , am rossz az sql is fentről , a nagy Élesztő HALOTT XDDDD

xD Sok sikert hozzá :D

edit:Bárcsak én is tudnék c++ kódot írni xD(nem tudtok egy jó könyvet?:D amiből meg tanulhatok? Csak mert Strousrtup könyve nem egy kezdőhöz van tervezve :D)
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 25, 11:05:08 DÉLUTÁN
én tudod hogy tanulom a c++ -t? sehogy. nem olvastam könyvet, soha nem írtam benne semmit mielőtt mangossal foglalkoztam , egyedül úgy írom a kódjaimat hogy nézek más kódokat és megpróbálok rájönni az összefüggésekre hogy 1 boss mit csinál a kód melyik része mit csinál , és ha tudsz angolul nem nehéz rájönni.
Cím: Re:Spirit Healer
Írta: Elysyum Dátum 2010 április 25, 11:09:31 DÉLUTÁN
Idézetet írta: $0undX Dátum 2010 április 25, 11:05:08 DÉLUTÁN
én tudod hogy tanulom a c++ -t? sehogy. nem olvastam könyvet, soha nem írtam benne semmit mielőtt mangossal foglalkoztam , egyedül úgy írom a kódjaimat hogy nézek más kódokat és megpróbálok rájönni az összefüggésekre hogy 1 boss mit csinál a kód melyik része mit csinál , és ha tudsz angolul nem nehéz rájönni.

Nem túl sok kódot látok az a baj... de majd nézelődök mert google a barátom XD
Cím: Re:Spirit Healer
Í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 =)
Cím: Re:Spirit Healer
Írta: Elysyum Dátum 2010 április 25, 11:16:11 DÉLUTÁN
Tudok írni egy primitív számológépet és ilyen ... elfelejtettem hogy hívják nah casekkal pár dolgot ^^ Össz-vissz amit eddig tudok cpp ből :D
Cím: Re:Spirit Healer
Írta: Girosz Dátum 2010 április 25, 11:31:25 DÉLUTÁN
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
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 25, 11:39:45 DÉLUTÁN
 3-4
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 26, 03:13:05 DÉLUTÁN
nah megírom rendesen megint az élesztő scriptjét és ha kész van akkor egybe szedem majd az egészet
Cím: Re:Spirit Healer
Írta: Girosz Dátum 2010 április 26, 03:34:27 DÉLUTÁN
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.
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 26, 03:51:31 DÉLUTÁN
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 (http://pastebin.com/kuVTCHiF)
Cím: Re:Spirit Healer
Írta: Girosz Dátum 2010 április 26, 08:42:34 DÉLUTÁN
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 (http://pastebin.com/gY6m0e1L)
Cím: Re:Spirit Healer
Írta: $0undX Dátum 2010 április 26, 11:27:49 DÉLUTÁN
gondolom hasonló okból crashel az én kódom is , holnap majd ujraírom.
Cím: Re:Spirit Healer
Írta: Speeros Dátum 2010 április 27, 02:49:54 DÉLUTÁN
A killplayer az nem akkor h
Cím: Re:Spirit Healer
Írta: Girosz Dátum 2010 április 27, 04:16:10 DÉLUTÁN
M
Cím: Re:Spirit Healer
Írta: Speeros Dátum 2010 április 27, 04:17:27 DÉLUTÁN
Bocs, nem oldastam vissza :D