Üdv!
A kérdés a következő: hogyan tudom megoldani hogy a legközelebbi spirit healerhez rakjon ki ha meghalok?
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.
de ha t
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.
Anélkül a wow-v nélkül ez hogy megvalósítható?(szeretném megtanulni nem csak használni :D )
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
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.
Kedvenc megold
Asszem megvan a következő scriptes melóm. :D
Hmm Girosz, ha sikerül megvalósítani majd ha lehetséges oszd meg velünk is:D
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
Hajrá, ha valamiben tok segíteni írj.
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. ::)
:S Olyan csúnya ,hogy 5 egymás alatt lévő topicot is Elysyum indított :S
Ezek legalább értelmes kérdések...
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
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
a killplayer az hal
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().
aha :D , akkor a killplayer-en belül megmutatnád hogy kell pointert csinálni player-re?
Oszt
helyesen:
Idézif (!isAlive())
SummonCreature(92345, GetPositionX(), GetPositionY(), GetPositionZ(), 0, TEMPSUMMON_CORPSE_DESPAWN, 40000);
mert nem fordult a plr miatt , így jó.
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?
a magon is v
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)
é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.
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
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 =)
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
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
3-4
nah megírom rendesen megint az élesztő scriptjét és ha kész van akkor egybe szedem majd az egészet
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.
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)
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)
gondolom hasonló okból crashel az én kódom is , holnap majd ujraírom.
A killplayer az nem akkor h
M
Bocs, nem oldastam vissza :D