DEV guide
Aus Orange Virus Wiki
Entwickler Dokumentation
Was ein DEV braucht und wissen muss…
Hier drin steht mein Wissen darüber, was ein DEV gegenüber seiner Orange Virus Community wissen muss. So wird gearbeitet und so soll es auch gemacht werden.
Legende
Bevor du versuchst meinen Text zu lesen und zu verstehen solltest du einige Sachen wissen:
Konsolen Befehle
- cat lala | grep 1234
SQL Code
- SELECT tomate, käse FROM sandwich WHERE lecker = 1;
Bitte die SQL Docs lesen bevor Fragen über SQL stellst. In diesem Doc wird keine SQL Syntax genau erläutert. Diese Grundlage muss man sich selbst beibringen, wenn man sie noch nicht kann.
- Aufschlüsselung von Datenbank Einträgen
- [mangos.]creature_template.entry
- bedeutet
- [Datenbank.]Tabelle.Spalte // Database.Table.Column
- Nezz: Database everytime optional (in case of use xy is present)
- tivi: Ich glaube, dass er damit folgendes meint:
Am Anfang einer MySQL Session sollte man use database mangos; machen. Dann kann man bei den Querys den Database. Teil weglassen und bei creature_template.entry verbleiben.
- SQL Dump
- In einem SQL Dump Datei sind alle Querys gespeichert um eine Datenbank mit Struktur und Inhalt wiederherzustellen.
- GM Befehle
.shutdown 0
Für eine Liste der GM Befehle bitte .commands machen oder SELECT * FROM mangos.command;. GM Befehle werden ausschließlich in Game ausgeführt!
- Kommentare
Da mehrere Kommentatoren hin und wieder in meinen Denkprozess eingesprungen sind, habe ich die jeweiligen Namen getaggt.
- tivi: Waah!!!
- TheMayhem: Muuhh!!!
Nur so zum Beispiel. :)
- Warnhinweise
Wer diese ignoriert ist selbst schuld und wird beim Nachfragen geschlachtet!
Einführung und Codex
To be a (godlike) developer…
Regeln und Richtlinien
Man hat große Verantwortung als Entwickler auf Orange Virus. Man muss einerseits viel lernen. Andererseits kann man als Entwickler unendlich viel Spaß haben wenn man weiß wie. Die User sind eigentlich für alles unendlich dankbar, sagen es aber nicht so häufig. Es gibt immer etwas zu lernen und zu machen. Das Mantis (http://mantis.orangevir.us) ist immer voll mit Arbeitsaufträgen (Bugmeldungen). Man kann unendlich machen. Contests, Projekte, Bugfixing, Support… Die Unendlichkeit erwartet dich. ;) Darum kann man sich die Arbeit um einiges einfacher machen z.B. mit Hilfe diesem Doc. Sie wurde von tivi geschrieben und erwarte zumindest Feedback wenn man mir schon nicht dafür dankt. „Die Dokumentation über das, was ein guten Entwickler ausmacht.„
- Was macht einen guten Entwickler aus?
- Engagement
- Entwickler versuchen sich überall dort einzubringen, wo man für Ideen kämpfen muss. Jeder hat wunderbare Ideen. Es macht aber mehr Spaß wenn die User auch umgesetzte Ideen sehen und erleben können.
- Entwickler kennen kein „Es geht nicht“ Es geht immer! Alles geht! Wieso sollte etwas nicht gehen?
- Teamfähigkeit
- Gute GMs vermitteln zwischen Personen.
- … lassen niemand alleine arbeiten.
- … helfen sich gegenseitig bei Problem und bilden somit ein TEAM!
- Kreativität
- Man kann immer neue Ideen in Projekte umsetzen.
Man kennt als GM somit keine Grenzen. Doch wie löst man nun Aufgaben?
Support
Man darf sich nicht aus der Ruhe bringen lassen wenn gerade viel passiert. Es gilt:
- Niemals von Usern aus der Fassung bringen lassen. Es gibt einige Ärsche, die einen abzocken wollen. Diese können auch gerne gebannt werden.
- Niemals beleidigen.
- Probleme lösen, nicht schaffen.
- NICHT ANGEBEN!!!
- Keine Items verschenken.
- GM Befehle werden übrigens geloggt…
- Fairness + Gleichberechtigung unter allen Usern.
- Wenn man sich nicht sicher bei etwas ist, sollte man immer eine zweite Meinung einholen.
- Es gibt auch ein Jail.
- Screenshots und IRC Logauszüge sind die besten Beweismittel.
- Admins können sich als gute Freunde erweisen…
Bugfixing
Jeder, der einen Fehler behebt, verbessert Orange Virus. Man gibt den Usern das Gefühl nicht ignoriert zu werden, der Fehler ist weg und man selbst hat was gelernt. Darum sollte man Bugs fixen und nicht fixen lassen. Bugfixing ist leider eine lästige Arbeit. Aber wenn jeder auch nur einen kleinen Teil behebt, ist die Arbeit auf das Team verteilt und somit schaffbar.
- Mantis benutzen, wenn man gerade den Bug nicht beheben kann. Dadurch geht die Bugmeldung nicht verloren.
- MaNGOS Forum, Dokumentationen (MaNGOS Wiki) und anderen Datenbanken-Foren für Infos aufsuchen.
- Selbst machen und lernen ist 1000 X besser als alles auf eine Person zu schieben. Teamplay und sowas.
- Bugfixes müssen getestet werden!
- Man sollte Bugs fixen um WoW @ OV besser zu gestalten. Jeder kann dabei mithelfen OV besser zu machen. Auch DU!
- Es wird mit SVN gearbeitet.
- Ein eigenes MaNGOS mit einer Auswahl an verschiedenen Datenbanken (SDB, Silvermoon, modDB etc.) wäre von großem Vorteil.
Teamplay
- Man spricht sich ab. Das heißt:
- Man benutzt das Forum, Mantis, IRC (Alle Räume, die mitgeteilt wurden), ggf. Teamspeak und man hilft anderen bei ihrer Arbeit. Ebenso helfen auch andere bei deiner Arbeit.
- Man wird nicht gleich zerfleischt, wenn man einen Fehler macht. Wir sind auch alle nur Menschen. Nur reagieren diese Menschen leicht genervt wenn sie glauben verarscht zu werden z.B., wenn der gleiche Fehler 10 Mal gemacht wird, Anweisungen und Tipps ignoriert werden oder man selbst stark durch Spamming und Flooding auffällt. (Gerade durch Rechtschreibfehler, übermäßiges Benutzen von Smileys (xD))
- Man dient anderen als Vorbild. Die User vergleichen sich immer mit Entwickler. Werden User ignoriert, beschimpft oder sogar beleidigt, sinkt das Charisma. Die User ignorieren Regeln, beleidigen andere Spieler und man hat damit das perfekte Schneeballsystem erreicht. Das Verhalten zeigt sich auch bei Entwickler. Entweder es arbeiten alle oder keiner. Helft den Admins, denn ohne sie gäbe es kein OV und damit kannst du wieder zu Jappy oder Knuddels zurückgehen und dort Freunde für dein Leben finden. :P
Technische Grundlagen zur Entwicklung und Bugfixing
Natürlich kann man vieles versuchen und jeden Fehler von Hand zu beheben. Wenn man das auch macht ist man dumm. Die Faulheit hat uns gelehrt, dass es doch immer wieder effizientere Mittel und Wege gibt Arbeiten zu automatisieren oder zu vereinfachen. Es gibt drei Arbeitsgebiete mit jeweils verschiedenen Programmiersprachen und Grundkenntnisse, die erfordert werden.
Mangos Datenbank
Sprache: SQL Datenbanktyp: MySQL
Dokumentationen
- SQL
- Hinweis
Bitte achte auf saubere Syntax von SQL. Fehlerhafte Querys werden nicht übernommen. tivi: Bitte beachte auch, dass Kommastellen in SQL Punkte sind. D.h. nicht 1,0 sondern 1.0 MaNGOS Datenbank:
- MaNGOS Wiki (Das offizielle)
Datenbankprojekte und Bezugsquellen:
- SDB (Silver’s Database)
- Silvermoon
- Unified Database
Aufgabenbereiche
- Bespawnung von Zonen und Instanzen (Unter Beachtung aller Templates)
- AI Scripts für Mobs.
- Templates
- Areatrigger.
- Creatures.
- Gameobjects.
- Items.
- Loots.
- Quests.
Grundvoraussetzungen für das Kompilieren von MaNGOS
- Allgemeines
Sprache: C++
- Compiler
- g++ (Linux)
- Microsoft Visual C++ 2005 Express Edition
- Sourceforge Project (MaNGOS)
- Sourceforge Project (ScriptDev2)
- SDK
Um für Windows Programme kompilieren zu können wir das Microsoft Windows SDK voraus gesetzt. Dieses findet man hier (Version: Windows® Server 2003 R2 Platform SDK Full Download). Nach der SDK Installation müssen die Verzeichnisse in Visual C++ 2005 eingetragen werden.
Dies gilt für
- Ausführbare Dateien -> \Bin
- Include Dateien -> \Include
- Bibliotheksdateien -> \Lib
Bezug des MaNGOS Quellcode
- Trac/Wiki: http://wiki.udbforums.org/index.php/Main_Page
- Forum: http://www.getmangos.com
SVN (MaNGOS): https://mangos.svn.sourceforge.net/svnroot/mangos/trunk/
- Git (MaNGOS): http://github.com/mangos/mangos
- Doxygen: http://amki.kicks-ass.org/doxygens/mangos/
- Beschreibung
- MaNGOS ist der Massive Network Game Object Server.
- Er besteht aus einem realmdaemon und einem worlddaemon.
- Realmd
- Dies ist der Loginserver, der auf die Accountdatenbank zugreift, der beim Login erst die Realmlist anzeigt mit Serverauswahl.
- Worldd
- Dies ist der eigentliche World of Warcraft Server. Die ganzen unit Templates werden auf einer großen Welt positioniert, mit denen der Spieler interagieren kann -- WoW
Installationsanleitungen
- ScriptDev2 Quell code
- Forum:http://www.scriptdev2.com/
- Git (SD2): http://github.com/scriptdev2/scriptdev2
- SVN (SD2): https://scriptdev2.svn.sourceforge.net/svnroot/scriptdev2
- Beschreibung
- SD2 ist eine Erweiterung zu Mangos, die ermöglicht, dass NPCs Scripts ausführen können.
- Mobs können Spells casten oder sprechen.
Orange Virus Interface (OVI)
- Allgemeines
- Das OVI ist eine Scriptsammlung von PHP Scripts, die auf die MaNGOS Datenbank zugreifen. Darüber wird zum Beispiel die komplette Accounterstellung abgefertigt.
- Sprache: PHP
tivi:
- Im OVI steckt gewaltiges Potential. Man kann über PHP Scripts die komplette Datenbank bearbeiten und verwalten. So kann man Bugs fixen, Contests planen und verwalten oder Informationen wrappen, die man um Bugfixen braucht.
Es ist aber leider zum gegenwärtigen Zeitpunkt noch nicht fertig. :(
Werkzeuge
SVN
TortoiseSVN
- Beschreibung
- TortoiseSVN ist der Client für Subversion. SVN kann man sich ähnlich wie ein FTP vorstellen, nur dass jede Änderung an Textdateien in Form von Diffs übertragen wird. Somit können ganze Teams an den gleichen Dateien arbeiten ohne sich gegenseitig zu überschreiben.
- Bezugsquelle
- http://tortoisesvn.net/downloads
- Tipp: Die meisten Menschen haben eine 32-Bit CPU …
- Noch einer: Es gibt TortoiseSVN auch als TortoiseGit
- Dokumentation
- Accounts
- SVN Accounts gibt es bei tivi. Man kann sie per PN im Forum beantragen, wenn ein Passwort mitgeschickt wird.
- Arbeitsweise
SQL Patches werden in SVN gelegt. Hat man sich hochgearbeitet und die Admins sind überzeugt, dass Du SQL kannst, kannst du auch später ein MySQL Account beantragen.
Git
Wie bei Subversions(SVN) handelt es sich bei Git um eine Versionsverwaltungssoftware und hat sich inzwischen als der Quasinachfolger von SVN etabliert. Auch MaNGOS und ScriptDev kann man inzwischen via Git beziehen. Gehostet werden die Projekte, wie auch die OV-Forks, bei GitHub. Es empfiehlt sich hier einen Account anzulegen und die Projekte zu verfolgen. Git funktioniert ähnlich wie SVN, wer mehr Infos zu Benutzung und Geschichte braucht sollte sich hier oder hier für SVN-Umsteiger
XAMPP
Eine nette Kombination aus Apache, MySQL, PHP…
- Beschreibung
- http://de.wikipedia.org/wiki/Xampp
- Damit kann man die nachfolgenden Werkzeuge benutzen. Ohne MySQL Server ist man ein sehr schlechter GM.
- Bezugsquelle
- http://www.apachefriends.org/de/xampp-windows.html
MySQL Installation
- Installation
- Nach der Installation lautet das Passwort des Accounts „root“, "". Es ist leer! Ihr solltet dies ändern. Am einfachsten über http://localhost/phpmyadmin.
- MySQL Server has gone away…“
- Während dem Import von SQL Dumps können Timeouts auftreten wenn euer MySQL Server falsch konfiguriert wurde.
- Work Around
- set-variable = wait_timeout=5000
- max_allowed_packet = 32M # In allen Zeilen! Der Wert kommt öfter vor…
- interactive-timeout -> #interactive-timeout
- Zum Abschluss MySQL Server neustarten!
- Rechtsklick auf Arbeitsplatz > Verwalten > Dienste und Anwendungen > Dienste > Rechtsklick auf MySQL > Neu starten.
Einen SQL-Dump importieren
- Wir brauchen auf jeden Fall eine MaNGOS Datenbank zum Testen. Entweder ein aktuellen OV DB SQL-Dump nehmen oder ein Dump eines DB-Projektes. (Stehen weiter oben)
- Am besten alle MaNGOS Datenbanken in verschiedenen MySQL Datenbanken importieren. z.B. Silvermoon in mangos_silvermoon, SDB in mangos_sdb, moddb in mangos_moddb…
- Beispiel 1
- mysql[.exe] -u [user] –p [database] < pfad\zur\file.sql
- Beispiel 2
- cd c:\programme\xampp\mysql\bin
- mysql.exe -u tivi -p mangos < mangos.sql
Einen SQL-Dump erstellen
- Beispiel 1
- mysqldump[.exe] –u [user] –p [database] > pfad\zur\file.sql
- Beispiel 2
- cd c:\programme\xampp\mysql\bin
- mysqldump.exe -u tivi –p mangos > mangos.sql
Agatho:
- Man gibt niemals das PW direkt in die Console ein. Wenn man –p ohne Passwort eingibt, wird man anschließend zur Passworteingabe aufgefordert.
MySQL Gebrauch
MySQL Console
Das klassische Einfache
- mysql[.exe] –u [user] –p[password] –D [database]
- Dumps importieren kann man damit nur mit den Befehlen, die ein Thema weiter oben beschrieben wurden.
SQLyog
Das professionelle, lineare und mächtige...
- Download (Community Edition)
- http://www.webyog.com/en/downloads.php
- Dumps importieren
Navicat
Das kreativere und spielerische
- Download
- http://www.navicat.de/download.html
- Crack
- Selbst suchen. :P
- Dumps importieren
- Rechtsklick auf die Datenbank in die importiert werden soll.
tivi:
- Anmerkung zu Navicat und SQLyog
- Beide Programme können vom Funktionsumfang scheinbar das Gleiche. Nur ist die Bedienung von beiden Programmen extrem unterschiedlich, da man Probleme haben wird wenn man gezwungen ist zu wechseln. Navicat hat mich nach 10 Minuten verwirrt und die Benutzerführung abgelenkt, TheMayhem liebt dieses Programm, da er schon mal damit gearbeitet hat.
- Darum schlage ich vor dieses Programm nicht und stattdessen SQLyog zu benutzen. Es ist Freeware, kann das Gleiche und ich habe es empfohlen.
phpMyAdmin
Das Ultimative
phpMyAdmin ist das ultimativste Programm das es gibt. Keines der anderen GUIs ermöglicht es auf solch einfache Art und Weise bestimmte Zeilen oder Ergebnisse aus Abfragen in .sql Dateien zu exportieren. Es hat eine einzigartige Suchfunktion und jeder kann innerhalb von nur 10 Minuten Arbeit brauchbare Ergebnisse erzielen ohne selbst SQL zu können.
- Bezugsquelle
phpMyAdmin steckt im XAMPP Paket bereits drin und ist über http://localhost/phpmyadmin zu erreichen. Falls es nachinstalliert werden muss, man findet es unter: http://www.phpmyadmin.net Beispiel: Wie man alle Creature Spawns in eine .sql exportieren kann der Creature ID 6. (Geht natürlich noch in vielen anderen Fällen)
- Einloggen.
- Datenbank mangos auswählen.
- Tabelle Creature auswählen.
- Suche …
- Suche definieren.
- Exportieren
tivi: Mit dem Text „Exportieren“ ist NICHT der Text in der oberen Leiste sondern etwa 10 cm darunter gemeint!
- Exportoptionen.
Bitte keine Struktur exportieren. (Häkchen entfernen!)
- Et voila, die Spawns der Creature 6 in einem Textfeld.
Localhost MaNGOS
Die tragbare WoW auf dem eigenen Rechner Jeder GM sollte auf seinem Rechner MaNGOS installiert haben. Man hat dadurch die Möglichkeit Fehler zu bearbeiten oder Sachen zu testen ohne 200 Usern den Spielspaß zu versauen, weil z.B. alle Charaktere gelöscht worden sind. Man sollte sich zuerst eine Datenbank installieren.
- Selbstkompilieren
Zu diesem Thema gibt es viele HowTos. Da brauchen wir nicht noch eins. Man findet sie hier.
- TheMayhem: Ich habe ein eigenes Linux Tutorial geschrieben. <Wird grade überarbeitet>
- Precompiled Bins
Für Leute, die nicht selbstkompilieren können oder wollen (weil sie z.B. nicht in den Source gucken) können sich auch vorkompilierte Bins laden. Diese findet man hier.
- tivi: Für Anfänger sind diese geeignet, da man kein Compiler und SDK installieren muss. Aber auch wirklich nur für den Anfang.
MaNGOS Shares
Mangos benötigt die WoW Maps und die DBCs.
Maps
- Aus dem MaNGOS SVN \contrib\map_extractor\ad.exe laden und in den WoW Ordner kopieren.
- Im WoW Ordner den Ordner maps erstellen.
- ad.exe starten und arbeiten lassen.
- Map Ordner in den Mangos Ordner kopieren.
DBCs
- MPQ Extractor laden von http://www.mangosproject.org/forum/index.php?showtopic=7456
- .NET 2.0 Framework installieren. (Google!)
- MPQE /p /v dbc.MPQ DBFilesClient\*.dbc >a.txt
- tivi: Ich gebe hierzu keine Hilfe. Bitte den Thread im Mangos Forum dazu durchlesen!
- *.dbc in einen dbc Ordner legen und diesen in Mangos kopieren.
Datenbanken installieren
Es müssen Datenbanken erzeugt werden auf die realmd und mangosd zugreifen kann.
- Realmd
- create database realmd;
- mysql -u mangos -p \sql\realmd.sql > realmd
- Mangos
Eine Datenbank besorgen.
- create database mangos;
- mangos.sql > mangos
Datenbank updaten
Man muss die Datenbank regelmäßig updaten, da Mangos auch fortlaufend geupdated wird. Datenbank Updates befinden sich im Mangos SVN in \sql\updates. Man kann diese Updates ausführen wie gewöhnliche SQL Dumps. Spätestens an dieser Stelle machen sich die SQL Gui Tools ihre Freunde. Hat man MaNGOS Rev. 2000 installiert mit dazugehöriger Datenbank und updaten auf Version 2500, müssen alle Updates von 2000 – 2500 installiert werden. Von 2000 angefangen bis 2500. Ebenso gibt es einige Datenbank Teams, die für Ihre Datenbank auch Patches releasen. Diese haben meistens ein SVN.
- Siehe: Übersicht der Datenbanken
Mangos Source Updaten
Im Prinzip muss man nur SVN Checkout machen um die Patches zu laden und auszuführen. Anschließend kompiliert man den Source neu und führt die Datenbankpatches aus.
Config
Mangos SVN
- \src\mangosd\mangosd.conf.in -> mangosd.conf in den Mangos Ordner kopieren.
- \src\realmd\realmd.conf.in -> realmd.conf in den Mangos Ordner kopieren.
- DataDir = "."
- tivi: Wir haben ja den maps und dbc Ordner in den gleichen Ordner wie die mangosd.exe gelegt!
- Realmlist anpassen!
SQL… Die Realmlist, die realmd benutzt, stehen in der Datenbank realmd in der Tabelle realmlist.
ScriptDev2
Quice + dbBiene
Die Mangos Datenbank GUIs
Es existieren GUIs, die einem das Bugfixen WESENTLICH vereinfachen können.
- Wichtig!
- Es muss eine (aktuelle) Mangos DB installiert sein! Diese Datenbanken müssen auch geupdated werden ansonsten wird die neue OV Datenbank mit alten Daten überschrieben.
- Fehlerquelle #1 !!!
Quice
Die C++ (Oder Delphi?) Variante.
- Beschreibung
Quice wird von indomit programmiert.
- Bezugsquelle(n)
- http://filebeam.com/folder/508
- Link zum SDB Forum
- Benutzung
So ist Quice aufgebaut:
Die einzelnen Datenfelder werden im MaNGOS Wiki erklärt. Dieses Wiki ist im Moment out of date. Wichtige Neuerungen sind noch nicht enthalten. Deswegen lohnt es sich solche Informationen aus den Datenbankforen zu beschaffen.
- Tipps + Hinweise
Bitte beachten, dass durch DB Updates Quice sehr schnell altern kann. Benutzt man eine alte Version von Quice und führt die SQL Querys unbedacht aus, kann es zu massiven Problemen kommen. Deswegen sollte Quice immer up to date sein. Zuerst wird der Questeintrag gelöscht und der neue kann nicht eingefügt werden weil die Spalten nicht stimmen -> Bugfix und Quest = Müll. Darum bitte einzelne Änderungen von Hand per UPDATE machen und nicht Copy & Paste aus Quice.
dbBiene
Die Java Variante von kizura
- Bezugsquelle
- SVN: https://dbbiene.svn.sourceforge.net/svnroot/dbbiene
- Dokumentation
- \trunk\documentation\tutorial_de.pdf
tivi: Wenn jemand mal mit dbbiene gearbeitet hat, möge er mir dazu Feedback geben. Es ist jedenfalls voll konfigurierbar und wird von einem äußerst fähigen Entwickler entwickelt.
Bugfixing von Datenbankproblemen
Fallbeispiele aus Mantis
Spawns bearbeiten.
HowTo Spawning
- Spawnen
In der Mangos Datenbank befinden sich in der Tabelle Creatures die Spawns. Es gibt 3 Möglichkeiten Spawns hinzuzufügen. 1. Möglichkeit: Man spawnt direkt in Game.
- Creature
- a. .npc add <creature entry>
- b. .spawndist <distance> Zum Anpassen der Spawndistanz.
- c. .spawntime < spawntimeSecs > Zum Anpassen der Spawntime.
Löschen: Creature markieren + .del • Gameobject
a. .gameobject <gamobject entry> <lootID> <spawntimeSecs>
- tivi: Die LootID steht für die entry aus gameobject_loot_template.
Löschen: .targetobj Nahrungsmittelkiste GUID: 12823 ID: 3662 … .delobj 12823
- tivi: Dies lohnt sich nur bei einzelnen, wenigen Spawns oder wenn von Hand angepasst werden muss. Beispielsweise in Instanzen um die richtige Entfernung des Spawns zu Objekten einzuschätzen.
2. Möglichkeit: Man spawnt per SQL.
- Bezug der Koordinaten
.gps
- Creature spawnen.
- Löschen
guid der Creature erhält man mit .npcinfo DELETE FROM `creature` WHERE guid = 6350;
- tivi: Es erweist sich als sehr schwierig per SQL zu spawnen. Dennoch ist es die beste Möglichkeit Spawns von außerhalb zu importieren oder eigene Spawns mittels phpMyAdmin zu exportieren.
Loot fehlt
Lässt sich beheben durch SQL Eintrag.
- Loot hinzufügen
Die unterschiedlichen Units (creature, go, item) unterscheiden sich nur beim Tabellennamen.
- Hinweis
- Bei den Units ist eine Spalte eingetragen, die Loot Id heißt. Sie sollte immer auf die Entry der Unit zeigen.
- Questloot: QuestChanceOrGroup
- Normales Loot: ChanceOrRef
- tivi: Lootfounder
Gefordertes Item ist kein Questitem
- Brueggus:
- In der Tabelle quest_template zusätzlich über die Spalten ReqSourceId1-4 (ID des Items), ReqSourceCount 1-4 (Anzahl) und ReqSourceRef 1-4 (benötigt für Questziel 1-4) festlegen.
- Link
Quest wird nicht gegeben.
Jeder Questgeber (creature oder gameobject) benötigt ein Eintrag … Die creature_questrelation ist gültig wenn eine Creature ein Quest starten soll. Ebenso sollte der NPC npcflag = 2 aufweisen um als Questgeber zu gelten.
- INSERT INTO `creature_questrelation` (`id`, `quest`) VALUES (196, 33);
Wenn ein Item ein Quest starten soll dann muss darauf geachtet werden, dass StartQuest beim Item auf das Quest zeigt, das gestartet werden soll.
Fertiges Quest kann nicht abgegeben werden.
Das Gleiche wie bei oben, nur statt questrelation, involvedrelation…
Quest kann nicht beendet werden.
Hier kommt der Knackpunkt der gesamten Bugfixerei. Man muss den kompletten Questeintrag verstehen um diesen Bug lösen zu können. Meistens stimmen die SpecialFlags Werte nicht. Man muss eben alles überprüfen und dafür gibt es kein Tutorial. Dies unterscheidet wahre GMs von kleinen blöden Kiddys, die jede Frage an den Admin stellen bzw. in einem Doc nachlesen wollen.
Quest wird direkt beendet...
Meistens handelt es sich hierbei um SpeakTo Quests (questtype = 4), bei denen Questrelation und involved_relation auf die gleiche Unit zeigen.
Quest erfordert Areatrigger
Ein Quest wo man lediglich ein Ort aufsuchen muss und KEIN Spell casten muss. Manche Quests haben eine SpecialFlag von >= 2. Hier arbeite ich persönlich mit Quice, da ich sehr gute Erfahrungen mit dem Aufsuchen von Areatriggern gemacht habe. Sie lassen sich nämlich dort in „Quest Part 2“ -> „Areatrigger“ suchen.
- Vorsicht!
Manche Quests erfordern für das Casten eines Spells an einem bestimmten Ort ein Gameobject um das Quest zu beenden. Berühmtestes Beispiel „Der Mondbrunnen“ um eine Flasche mit Wasser zu füllen. Diese Quests haben KEINE SpecialFlag >= 2 sondern lediglich die Flag für Deliver. Hierbei muss ein Gameobject gespawned werden mit der richtigen SpellFocusObjectID. Gameobject type = 8 (SPELL_FOCUS )
- Gameobject_template
Welcher Spell welches SpellFocusObject benötigt lässt sich einfach feststellen. Entweder man sucht nach dem Namen in SpellFocusObjectID oder man sucht die SpellID in der Spell.dbc und schaut sich die 17# Spalte an. Dies ist die benötigte SpellFocusObjectID.
Herausfinden ob ein Template gespawnt ist
Lösungswege:
Caarcrinolas:
- select tpl.name, obj.guid, tpl.entry from gameobject_template tpl left join gameobject obj on tpl.entry = bj.id where tpl.name like "%hügel%" and ISNULL(obj.guid)
Nezz:
- SELECT entry FROM `gameobject_template` WHERE entry NOT IN (SELECT id FROM `gameobject`);
MaNGOS Advanced (AIs, Wegpunkte und Mounts)
Hirn für NPCs.
- Übersicht
Man kann NPCs Anweisungen geben was sie machen sollen. Dies können fünf Sachen sein.
- AI Scripts mittels ScriptDev2.
- Wegpunkte mittels MaNGOS Waypoints.
- Creature Addon
- Quest_StartScript
- Quest_EndScript
AI Scripts mittels ScriptDev2
Beispiele für AI Scripte sind im SVN von SD2 zu finden! Diese Scripts müssen nur angepasst werden sowie creature_template. ScriptName und die Spells bzw. der Inhalt des Scriptes. ScriptDev2 HowTo
Wegpunkte mittels MaNGOS-Waypoints.
Man kann Ingame einer Creature (Mob), gebunden an ihre GUID (also nur für diesen Spawn), Wegpunkte zuweisen. Darüber hinaus ist es möglich jedem gelegten Waypoint Funktionen zuzuweisen, die die jeweilige Creature dann ausführt.
Diese Funktionen beschränken sich im Moment auf das Aussprechen von festgelegten Sätzen, das Ausführen von Emotes und das Wirken von Zauber.
Die MaNGOS-Waypoints bringen eine Vielzahl von Befehlen mit sich, die aber alle sehr intuitiv zu bedienen sind.
| Befehl | Beschreibung | Beispiel |
|---|---|---|
| .wp add GUID/Ausgewähltes Mob | Weißt einer Creature den aktuellen Punkt des Charakters als Waypoint zu. | .wp add 42345 |
| .wp show on/off | Zeigt die Waypoints des ausgewählten Mobs für GMs an/ nicht an. | .wp show on |
| .wp show first/last | Zeigt den ersten/letzten WP des ausgewählten Mobs an. | .wp show last |
| .wp show info | Gibt Informationen zu dem ausgewählten Waypoint aus. | .wp show info |
| .wp modify waittime "Wert" | Weißt dem ausgewählten Waypoint eine Wartezeit für den NPC zu. (Zeitangabe in Millisekunden) | .wp modify waittime 15000 (15 Sekunden) |
| .wp modify emote ID | Weißt dem ausgewählten Waypoint ein Emote für den NPC zu. | .wp modify emote 10 (10 = /dance) |
| .wp modify spell ID | Weißt dem ausgewählten Waypoint einen Spell für den NPC zu. | .wp modify spell 23504 (Feuerregen) |
| .wp modify text1 info | Gibt Informationen zu dem ausgewählten Waypoint aus. | .wp show info |
NOCH EINE BAUSTELLE
Using WP Command Syntax: .wp add[creature_GUID or Select a Creature] Syntax: .wp modify [#creature_guide or Select Creature] <command>
add- Add a waypoint after the selected visual
import $filename - for selected npc
export $filename - for selected npc
waittime $time - setting wait
emote ID - dbc folder for a list
spell IF - dbc folder for a list
text1|text2|text3|text4|text5 - <text>
model1 ID - Male (look SQL)
model2 ID - Female (look SQL)
aiscript $Name - MangoScript folder
move - (moves wp to player pos):del - (deletes the wp)
Only one parameter per time!
Syntax: .wp show [#creature_guid or Select Creature] <command> Command:on|first|last|off|info
For using info you have to do first show on and then select a Visual-Waypoint and do the show info.
Creature Addon.
Mit creature_addon ist es möglich Creatures anzupassen. Man kann ihnen ein Mounteintrag geben oder Emotionen ausführen lassen. Etwa sitzen, schlafen, arbeiten… Eine Liste der Emotionen ist im MaNGOS SVN in src/game/shareddefines.h zu finden.
Quest_StartScript
Ist eine Aktion die vom Questgeber ausgeführt wird.
Questgeber kann eine Creature sein oder aber auch ein Gameobject. Die ID muss immer dieselbe sein.(ID vom Quest = ID von Quest_start_scripts = ID die bei der Quest steht für Quest_start_scripts)
Es gibt zur Zeit 12 commands :
- SAY [0]
- EMOTE [1]
- FIELD_SET [2]
- MOVE_TO [3]
- FLAG_SET [4]
- FLAG_REMOVE [5]
- TELEPORT_TO [6]
- QUEST_EXPLORED [7]
- RESPAWN_GAMEOBJECT [9]
- TEMP_SUMMON [10]
- OPEN_DOOR [11]
- CLOSE_DOOR [12]
Die meisten erklären sich von alleine:
0: Questgeber sagt den Text X [datatext] in einer Blase.
1: Questgeber spielt den Emote X ab [datalong].
2: Ändert einen bestimmten Wert X [datalong] vom Spieler mit dem Wert X [datalong2].
3: Englisch: Relocate creature to a destination.
4: Englisch: Turns on bits on a flag field at an index for the player.
5: Englisch: Turns off bits on a flag field at an index for the player.
6: Teleportiert den Spieler zu der Map [datalong] mit den Koordinaten x [x] y [y] z[z] und o[o].
7: Englisch: Satisfies the explore requirement for a quest.
9: Spawnt ein noch nicht gespawntes(despawntes) Gameobject mit der RespawnID X(zu finden in der Tabelle: gameobject [datalong] mit der Despawnzeit X [datalong2].
10: Englisch: Temporarily summon a creature.
11: Öffnet eine Tür mit der ID X [datalong] und hat eine Verzögerungszeit von X Sekunden [datalong2] bevor sich die Tür schliesst.
12: Schliesst eine Tür mit der ID X [datalong] und hat eine Verzögerungszeit von X Sekunden [datalong2] bevor sich die Tür wieder öffnet.
unvollständig?#evtl. Fehler?#
Quest_EndScript
Ist eine Aktion die vom Questannehmer ausgeführt wird.
Questannehmer kann eine Creature sein oder aber auch ein Gameobject. Die ID muss immer dieselbe sein.(ID vom Quest = ID von Quest_end_scripts = ID die bei der Quest steht für Quest_end_scripts)
Alles weitere seht ihr bei Quest_StartScript !
Ausser, dass hier alles der Questannehmer macht, also bei der Creature oder Object wo man den Quest abgeben muss.
Mangos
phamo:
Quests
Hier steht das wichtigste drin, wie man Quests mit Mangos macht. Mit Programmen wie Quice erleichtert einem es sehr einen Quest selber zu machen, als z.B. mit Navicat. Quice ist zwar einfach zu bedienen, aber man muss ja auch wissen was der jeweilige Wert bedeutet und was die Felder ünerhaupt bezwecken:
Die meisten Felder erklären sich von selbst(minlevel/questlevel/...), deshalb beschreibe ich nur die wichtigsten Felder und lasse unwichtiges aus.
Type: Als erstes gibt es zur Zeit 10 types, also 10 Grundarten von Quests:
- [1] Group
- [21] Life
- [41] PvP
- [62] Raid
- [81] Dungeon
- [82] World Event
- [83] Legendary
- [84] Escort
- [85] Heroic
- [88] Raid (10)
- [89] Raid (25)
Ich denke, jeder sollte wissen was sie bedeuten.
Race:
Sollte auch jeder Wissen.(0 steht für alle Rassen, Werte gibt es im UDBWiki)
nur Horde: 690
nur Allianz: 1101
SuggestedPlayers:
Anzahl der vorgeschlagenen Spieler für die Quest.
QuestFlags:
RequiredX:
Das X steht für SkillVallue,MinRepFaction,MinRepValue,MaxRepFaction,RequiredMaxRepValue. Hier ist denke ich klar was gemeint ist. "Required" bedeutet soviel wie "benötigt".
PrevQuestId:
Die QuestID von dem Quest das schon abgeschlossen sein muss, bevor dieser Quest überhaupt angenommen werden kann.
Weitere Beispiele hier: [2]
NextQuestId:
Die Quest die nach diesem Quest vom Questgeber gegeben wird.
Weitere Beispiele hier: [3]
NextQuestInChain:
Fast genauso wie bei "NextQuestId", nur das wenn man die Quest abgibt sofort die nächste Quest erscheint.
Weitere Beispiele hier: [4]
SrcItemId:
Ein Item mit der ID X, die der Spieler zum Beginnd er Quest krieg(wird meistens benutzt um etwas damit zu machen während dem Quest), aber beim abgeben der Quest gelöscht wird.
SrcItemCount:
Die Anzahl der Items (siehe SrcItemId) die der Spieler kriegt mit der Anzahl X.
SrcSpell:
Ein Spell der dem Spieler zu Beginn des Quest gegeben wird.(Buff oder Fähigkeit)
ReqItemId und Co.
Das benötigte Item X um die Quest abzugeben, mit der Anzahl X [ReqItemCount]
Dann gibt es noch viele andere Sachen die benötigt werden, hier sollte jeder alles wissen.
RewOrReqMoney:
Das Geld was der Spieler nach erfolgreichem abschliessen der Quest bekommt.
Beispiel: RewOrReqMoney = 1100 Das wären dann 11 Silber. [1 = 1 Kupfer,10 = 10 Kupfer,100 = 1 Silber,1000 = 10 Silber,10000 = 1 Gold,100000 = 10 Gold, usw.)
RewMoneyMaxLevel:
Entwerder die Menge an Geld X wenn der Spieler lvl 70 ist (Maximales Level) oder die Erfahrungspunkte wennd er Spieler keine lvl 70 ist.
Wichtig ist auch noch dazu:
The formula for calculating XP from the value in this field:
QuestLevel >= 65: XP = RewMoneyMaxLevel / 6.0
QuestLevel == 64: XP = RewMoneyMaxLevel / 4.8
QuestLevel == 63: XP = RewMoneyMaxLevel / 3.6
QuestLevel == 62: XP = RewMoneyMaxLevel / 2.4
QuestLevel == 61: XP = RewMoneyMaxLevel / 1.2
QuestLevel <= 60: XP = RewMoneyMaxLevel / 0.6
StartScript/CompleteScript:
Siehe: #Quest_StartScript
Items erstellen ab Patch 2.4.1
Genauso wie immer, doch sollte man beim einbatchen etwas löschen und zwar: Das rote löschen !
INSERT INTO item_template (entry,....., ExtendedCost, RequiredDisenchantSkill, ArmorDamageModifier, ScriptName, DisenchantID) VALUES (111114,...,0,0,0,0,0,0,'internalitemhanler',0);
Ansonsten geht es nicht ! Liegt an Blizzard welche die Items verschärft haben, sodass entryID und DisplayID nicht mehr übereinstimmt.
Ausser man macht: 1. ein bestehendes Item verändern 2. per Hackpatch Aushilfe schaffen!
Bugfixing
Vom Bug zum Bugfix. Wir versuchen ein Bug, der unsere Aufmerksamkeit bedarf, zu beheben. Das Bugfixing läuft in vier Teilschritten auf, die ich mit schönen Bildchen dargestellt habe.
Nehmen wir uns mal ein fiktives Beispiel:
QuestLoot
Zuerst checken wir ob dieser Bug auch wirklich ein Bug ist. Loot wird prozentual berechnet bei jeden MobKill. Kleine Prozentwerte sind ggf. erwünscht! Darum ein Blick auf wow.allakhazam.com oder www.buffed.de und wir sind schlau. Wir gucken und sehen, dass unser gesuchtes Item zu 100% drin steht.Nun überprüfen wir unsere lokale Datenbank durch eine Abfrage:
Dies listet alle Items auf, die der Mob mit der Id X trägt. Würde man nach Item = X suchen, würde man alle Mobs suchen, die das Item X tragen.
Wir sehen also, dass der Mob diesen Eintrag nicht hat oder er bei 0.01 liegt und somit zu wenig ist.
Nun dürfen wir uns über den bestätigten Bug freuen. Das in Game testen kann man sich nach dieser SQL Abfrage sparen, da man das Ergebnis nun sieht.
Der SQL Query um diesen Fehler zu beheben lautet:
- update `creature_loot_template` set `entry`='6907',`item`='2459',`ChanceOrRef`='0',`QuestChanceOrGroup`='50.9',`mincount`='1',`maxcount`='1',`quest_freeforall`='1' where `entry`='6907' and `item`='2459';
z.B. ändert ein gesamten Looteintrag bei dem Mob 6907 für das Item 2459.
Diesen speichern wir in eine .sql Datei und liegen diese ins SVN.
- #note: Das Item sollte nur bei Quest gelootet werden und nicht regular. Deswegen wird das Item auch nur dann gelootet wenn man das Q gerade hat.
- update `creature_loot_template` set `entry`='6907',`item`='2459',`ChanceOrRef`='0',`QuestChanceOrGroup`='50.9',`mincount`='1',`maxcount`='1',`quest_freeforall`='1' where `entry`='6907' and `item`='2459';
Diese Datei nennen wir 07_06_17_tivi_bugfix.sql
- Jahr
- Monat -> Damit wir immer wissen welcher Patch von welchem Datum ist.
- Tag
- Username -> Und dein Benutzernamen damit wir immer wissen wer es verbrochen hat.
- bugfix -> Da es ein Bugfix ist. Könnte aber auch Contest, Backup oder etwas anderes sein.
Wir verschieben diese Datei nun in den OV-SVN in \mangos\sql\todo und hoffen, dass der Patch korrekt war.
Beim Hochladen denken wir auch an eine aussagekräftige Beschreibung für das SVN Log. Ein Fremder soll nachvollziehen können, dass es sich bei eurer Übertragung um ein Bugfix handelt und nicht um ein Nacktfoto eurer Freundin. :P
Wir testen diesen Patch nun auf unserem eigenen MySQL Server.
Die Admins prüfen in diesem Teilschritt euren Patch. Für den schlimmsten Fall...
- Patch ist fehlerhaft.
Der Patch wird dann nach \WoW\mangos\sql\reject mit Begründung verschoben!
Dazu solltest du dir den SVN Log lesen und anhand dessen schonmal an einer Korrektur arbeiten. Andernfalls verschwindet euer Patch in einem schwarzen Loch. (Wird gelöscht)
Gratulation. Dein Patch hat den Einzug auf unseren Server geschafft. Er wurde auf Fehler geprüft und sollte das, was ihr kommentiert habt, auch erfüllen. Fehlt ein Kommentar, erreicht der Patch diesen Schritt nicht.
Du hast ein Fehler behoben und zahlreiche Spieler sind dir dankbar!












