DEV guide

Aus Orange Virus Wiki

Wechseln zu: Navigation, Suche
Plushy als Wizard. :)
Plushy als Wizard. :)

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.


Inhaltsverzeichnis

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:

Datenbankprojekte und Bezugsquellen:

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
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.

Und so verlinkt man das Windows SDK.
Und so verlinkt man das Windows SDK.

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

Hier zu beziehen

Dokumentation

HTML | PDF | Übersicht

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.
Genaue Beschreibung des Problems hier.


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
Rechtsklick auf die Datenbank in die importiert werden soll.
Rechtsklick auf die Datenbank in die importiert werden soll.

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.

Bild:phpma_1.gif

  • Tabelle Creature auswählen.

Bild:phpma_2.gif

  • Suche …

Bild:phpma_3.gif

  • Suche definieren.

Bild:phpma_4.gif

  • Exportieren

Bild:phpma_5.gif

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
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.

HowTo: http://www.mangosproject.org/forum/index.php?showtopic=7397

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

siehe hier

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.
INSERT INTO `creature` (`guid`, `id`, `map`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `spawn_position_x`, `spawn_position_y`, `spawn_position_z`, `spawn_orientation`, `curhealth`, `curmana`, `DeathState`, `MovementType`, `auras`) VALUES (6350, 6, 0, -8811, -244, 82.142, 2.682, 180, 9, 0, -8811, -244, 82.142, 2.682, 27, 0, 0, 1, NULL);
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
INSERT INTO `creature_loot_template` (`entry`, `item`, `ChanceOrRef`, `QuestChanceOrGroup`, `mincount`, `maxcount`, `quest_freeforall`) VALUES (3, 884, 0.001, 80, 1, 1, 1);

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.

  1. AI Scripts mittels ScriptDev2.
  2. Wegpunkte mittels MaNGOS Waypoints.
  3. Creature Addon
  4. Quest_StartScript
  5. 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:

[1]


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:

SELECT * FROM mangos.creature_loot_template WHERE entry = X

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!

Ansichten
Persönliche Werkzeuge
Navigation
Werkzeuge