Informatikai Barkács Fórum

WORLD OF WARCRAFT SZERVER => Core/Mag Modifikációk => A témát indította: Pemi Dátum 2011 június 14, 10:28:29 DÉLELŐTT

Cím: Guild Based System Patch[TrinityCore 3.3.5a]
Írta: Pemi Dátum 2011 június 14, 10:28:29 DÉLELŐTT

Sziasztok!

Egyetemi tanulmányaim során felszedett C/C++ tudás gyakorlása képpen belenyúltam fél évvel ezelőtt egy TrinityCore rev.-be(10793+, 3.3.5a). A diff közel 800 sor, gondoltam megosztom Veletek, hátha ad ötletet, vagy akár segít a megvalósításban. Sokhelyen láttam felesleges dolgokat, a kód nem tökéletes, de fordítható, és működő képes, tesztelve. A project egy új játék szemléletről szólt, egy guild alapú rendszerről. Minden guildnak van egy arena rate-hez hasonló  pontja, a guildpont. Növelhető PvP-vel, instával, és csökken, ha új tag kerül a guildbe. Az ehhez szükséges parancsok hozzálettek adva mind a játékosok, mind a GM-ek számára. A vendorokba a kibővített additem parancsal beállítható, hogy melyik itemhez mennyi guildpont kell, az alatt pedig nem lesz látható a karakterek számára. Az adatbázist ennek megfelőlen bővíteni kell. A szükséges mezők: char/guild: pont; world/npc_vendor: pontkell
(A kódban szerepel néhány nem ehhez kapcsolódó változtatás, így alant összeírtam a lényeget!)


Forrás: http://pastebin.com/CMNBGhFD



A módosítások:
ArenaTeam.cpp:
-Penalties increased (5v5: *5)
Battleground.cpp:
-Remove ASSERT(m_Map) Crash
Chat.cpp:
-Help modified to "parancsok"
-New command "guildpont"
-New command "maxszint"
Chat.h:
-Added headers
Commands/Level0.cpp:
-ShowHelpForCommand "segits"
-New function: "guildpont" -> CharDB Query "guildpont"
-New function: "maxszint" -> HandleCharacterLevel lv80
Commands/cs_npc:cpp:
-New variables (pontkell)
-AddVendorItem new argument(pontkell)
-handler->PSendSysMessage new argument(pontkell)
Creature.h:
-VendorItem argument: "pontkell" (guildpont)
-AddItem argument: "pontkell"
GameEventMgr.cpp:
-AddVendorItem new argument
ObjectMgr.cpp:
-Modded Vendor Items QueryResult (pontkell)
-vList.AddItem new argument(pontkell)
-ObjectMgr::AddVendorItem new argument(pontkell)
-SaveToDatabase vendor items new argument(pontkell)
Guild.cpp:
-Set guildpont to DB
-OnGuildAddMember guildpont -300, if account = 5 SET level to 100
ScriptLoader.cpp:
-Added headers
ScriptMgr.cpp:
-OnPVPKill guildpont +1, if killer level-10 > killed level guildpont -10
ItemHandler.cpp:
-Added include
-Added DB Query to show guildpont < pontkell  //to hide items
CMakeLists.txt:
-Added new files
/scripts/../ghostlands.cpp:
-npc_blood_knight_dawnstar modded to HunterPetNPC
scripts/../stormwind_city.cpp:
-Add buffer npc
-npc_archmage_malin can teleport,castspell and modify honorpont(SQL Query) now
BOSS modded to add guildpont on kill:
-boss_amanitar.cpp
-boss_elder_nadox.cpp
-boss_herald_volazj.cpp
-boss_jedoga_shadowseeker.cpp
-boss_prince_taldaram.cpp
-boss_dred.cpp
-boss_novos.cpp
-boss_tharon_ja.cpp
-boss_trollgore.cpp
Cím: Re:Guild Based System Patch[TrinityCore 3.3.5a]
Írta: Bluerák Dátum 2011 június 14, 11:59:36 DÉLUTÁN
K
Cím: Re:Guild Based System Patch[TrinityCore 3.3.5a]
Írta: Bluerák Dátum 2011 június 15, 12:16:43 DÉLUTÁN
Kimaradt 3 sor:
http://pastebin.com/9sdfdVQG
Cím: Re:Guild Based System Patch[TrinityCore 3.3.5a]
Írta: Skyne Dátum 2011 június 18, 10:28:47 DÉLELŐTT
naajsz, végre valaki valami értelmessel állt elő :D, kicsit itt ott találni benne szépséghibákat, de apróságok, grat, széplett :)
Cím: Re:Guild Based System Patch[TrinityCore 3.3.5a]
Írta: ident Dátum 2011 június 18, 03:45:59 DÉLUTÁN
Ez nagyon jó ötlet, hasonlít picit a Lineage2-es raid pontos rendszerre. Gratula!
Cím: Re:Guild Based System Patch[TrinityCore 3.3.5a]
Írta: Pemi Dátum 2011 június 23, 04:24:30 DÉLUTÁN
Köszönöm, bár még van vele munka, ha valaki komolyan szeretné használni.

Viszont megkerestek, hogy hogyan lehetne beállítani minden mobra, hogy mennyi guildpontot adjon.

A dolog egyszerű:

/trinitycore/src/server/game/Entities/Player/Player.cpp:

void Player::GiveXP(..) függvény elejéhez tegyük hozzá ezt a pár sort:

QueryResult result = WorldDatabase.PQuery("SELECT KillCredit1 FROM creature_template WHERE entry='%d'", victim->ToCreature()->GetEntry());
if(result)
{
Field *fields = result->Fetch();
uint32 pontszam = fields[0].GetUInt32();
CharacterDatabase.PQuery("UPDATE guild SET pont = pont+%d WHERE guildid='%d'", pontszam, GetGuildId());
}


Így a creature_template táblában minden mobhoz megadhatjuk mennyi guildpontot adjon a KillCredit1 mezőben.
(Nem kell külön scriptelni a bossokat sem!)