pet vendor

Indította kagebunshin, 2010 augusztus 23, 08:37:49 DÉLUTÁN

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

kagebunshin


Üdv mindenkinek!

Girosz már készített egy 'pet vendor' Script-et, amivel gossip menün keresztül vehetnek maguknak petet a hunterek.
Topic: http://infobarkacs.hu/index.php?topic=4537.15

A script nagy részét leloptam, remélem nincs harag.
A különbség csak annyi, hogy én itemscript-el próbálkoztam és némi core módosítást is belekevertem. Azért írom, hogy próbálkoztam, mert a custom item-eket sose lehetett igazán szépen beültetni a szerverbe. Gondolok itt pl arra, hogy kérdőjelnek látszanak ami ugyan addon-al kicsit finomítható, de mégsem az igazi. Ezen kívül az én verziómban is van 1-2 foltozott rész.
Néhány tesztet is elvégeztem item scriptekkel kapcsolatban amiknek az eredményeire szintén kitérek majd.

Szerettem volna ha nem kell belepiszkálnom a core-ba és ha csak néhány petről van szó akkor nincs rá szükség viszont szerintem rondán néz ki ha az egész scriptet le kell másolni és csak a creature id-t átírni.

Szükségszerűnek láttam, hogy bevezessek egy új táblát is. Ezt mindössze csak takarékossági szempontból tettem. Először arra gondoltam, hogy az item_template-et bővítem ki egy plussz mezővel, viszont így a legtöbb tárgynál ez felesleges lett volna ezért hoztam létre egy újat.
Tulajdonképpen semmi extra. Két mezője van az egyik a tárgy id-jét a másik a creature id-jét tárolja.
Amikor a script lefut a tárgy id alapján lekéri a creature id-t és fogja be mint petet.
Ezekhez a módosításokhoz készítettem a patch file-t is.

TrinityCore 8848 patch:
http://pastebin.com/gqWdcchi

És hozzá a tábla:
IdézCREATE TABLE custom_item_pet (
item_template_entry MEDIUMINT NOT NULL UNIQUE,
creature_template_entry MEDIUMINT NOT NULL
) DEFAULT CHARSET = utf8;

A mezők nevei jelzik, hogy melyekkel vannak kapcsolatba.
Annak ellenére, hogy új pet-hez csak az adatbázist kell piszkálni még mindig sokkal több macera van vele mint girosz script-jével.
Ott ugyanis elég 2 helyen beszúrni 1-1 új sort és az id-ket átírni.
Még itt kell készíteni egy új item-et és a custom_item_pet táblában összekötni egy creature-el.

Egy példa:
IdézINSERT item_template (entry, NAME, displayid, quality, flags, maxcount, delay, spellid_1, material, scriptname) VALUES
(100101, 'Call Black Wolf', 16207, 1, 64, 1, 0, 41232, -1, 'item_pet_vendor');
INSERT custom_item_pet (item_template_entry, creature_template_entry) VALUES
(100101, 356);

Gondolom a nagy része érthető. Ami magyarázatra szorulhat az a spellid_1.
Megmondom őszintén erre nem tudtam rájönni. Rengeteg tesztet futtatam le és nem értettem miért nem akar lefutni a scriptem.
Már nem is tudom honnan jött az ötlet, hogy adjak meg neki egy spell-t.
A lényeg, hogy ha nem adunk meg spellid-t használatra akkor a script nem fut le, viszont ha megadunk egy spell-t akkor a script-el együtt az is aktiválódik. Ezért a példában egy olyan spell-t használtam ami nem csinál semmit csak vizuális effect-je van.
A másik dolog ami feltűnhet az a maxcount. Ezt egy másik 'dolog' miatt kellett bevezetnem amire szintén nem tudom a magyarázatot.
Erre is sok tesztet végeztem és a következő a probléma.

A játékos megveszi ezt a tárgyat. Használja és megkapja a hozzá rendelt pet-et. Ezzel semmi probléma.
Viszont ha a játékos ugyanabból a tárgyból kettőt vesz és mindkettőt az inventory-ban tárolja és szintén elhasználja, hogy megkapja a pet-et a szerver összeomlik.
Amennyiben a stackable mező értékét megnöveljük pl 10-re és a játékos 10 db-ot vesz ugyanabból a pet-ből akkor szintén megfelelően
működik. Vagyis 10-szer lehívhatja ugyanazt a petet (persze csak akkor ha stable-be teszi vagy eldobja a többit).
Ezekből én arra következtettem, hogy ha egy adot sloton belül ha elhasználja az utolsó tárgyat is és valamelyik bag-ben van ugyanolyan item az crash-t okoz. Két megoldás jutott eszembe.
1. Ahogy a jelen példában is korlátozom, hogy csak 1 db lehet a játékosnál.
2. Vagy egyszerűen lemondunk arról, hogy az item használat után törlődjön.
Nagyon árulkodó a neve de azért leírom hátha valakinek a második változat tetszik.
A script végén egy sor-t kell csak törölni:
pPlayer->DestroyItemCount(pItem, count, true);

Végezetül pedig. Összedobtam egy sql parancsot is ami összegyűjti a befogható peteket és létrehozza hozzájuk az item-et.

IdézSET @s := 100100;

SET @i := @s;
TRUNCATE custom_item_pet;
INSERT INTO custom_item_pet (item_template_entry, creature_template_entry)
SELECT @i := @i + 1, entry FROM creature_template WHERE TYPE = 1 AND family !=0 AND vehicleid=0 GROUP BY modelid1 ORDER BY entry;

SET @i := @s;
DELETE FROM item_template WHERE entry>@s;
INSERT INTO item_template (entry, NAME, displayid, quality, flags, maxcount, delay, spellid_1, material, scriptname)
SELECT @i := @i + 1, creature_template.name, 16207, 1, 64, 1, 0, 41232, -1, 'item_pet_vendor' FROM creature_template WHERE TYPE = 1 AND family !=0 AND vehicleid=0 GROUP BY modelid1 ORDER BY entry;

Petopia szerint(ha jól értelmezem) a játékban 934 befogható pet van. Ezzel a paranccsal nálam majdnem 800 tárgyat hozott létre szóval nem tökéletes és persze mindnek ugyanaz az icon-ja, de azért némi munkától megkímél. Talán ki lehetne még egészíteni azzal, hogy kerüljenek is valamibe ezek a cuccok. Esetleg csak hunter használhassa(ezt maga a script is ellenőrzi, de nem árt ha a playerek is tudnak róla).

Hmmm, azt hiszem nem hagytam ki semmit. Aki tud valamit az említett hibákról vagy esetleg olyan hiba van benne ami nekem nem szúrt szemet vagy ha valamelyik rész nem tiszta és bővebb magyarázatra szorul az kérem jelezze.

Üdvözlettel:
Kagebunshin
"-Egy dolgot viszont elárulhatnál nekem. Ki találta ki, hogy a fák őreinek erejével szálljatok szembe velem, mert nem te ugye? Te nem tudtad!
-Nem... de azért vagyunk többen, hogy valaki tudja."

drestor


Skyne

Neee kelljen már leírnom hogy várom a leírás bővített verzióját a szokásos célokból... =) grat hozzá +rep

Girosz

Nem vagy semmi... Feltűnsz itt a semmiből, és csak ontod a leírásokat magadból. Grat hozzá.

$0undX


kagebunshin


Köszönöm.
Bár azt hiszem ez a legkevesebb, hiszen az itteni leírások segítettek elindulni ezen a téren.

Skyne:
Amint kicsit magamhoz tértem és lesz elég harci kedvem megcsinálom  :).
"-Egy dolgot viszont elárulhatnál nekem. Ki találta ki, hogy a fák őreinek erejével szálljatok szembe velem, mert nem te ugye? Te nem tudtad!
-Nem... de azért vagyunk többen, hogy valaki tudja."

Lackó

#6
Nem vagy semmi :O Te nagyon j

DoomKiller

Lackó, ehhez miért kellet az egész 1. hozzászólást leírni ismét?:D

Epic fail...

...is epic fail

kagebunshin


Sajnos még fele annyira se ismerem az emu-t mint szeretném és csak a tc-t. Többnyire csak próbálkozok ezzel-azzal, aztán ha valami összejön és hasznosnak ítélem azt megosztom.
"-Egy dolgot viszont elárulhatnál nekem. Ki találta ki, hogy a fák őreinek erejével szálljatok szembe velem, mert nem te ugye? Te nem tudtad!
-Nem... de azért vagyunk többen, hogy valaki tudja."

Powered by EzPortal