Hier erkläre ich euch, wie ihr neue Chat-Commands (Wie man's kennt, z.B. /kill) für euren Core bastelt.
Kurzes Vorwort: Nach kurzer recherche hab' ich kein HowTo dazu gefunden. Es gibt in 'nem anderen Forum 'n Guide zur Client/Core - Core/Client-Kommunikation mittels Packets, der Vorteil an Commands ist - dass die Implementierung bei weitem einfacher ist, und man für die Client-Server-Kommunikation nurnoch via Aufruf der Python-Function net.SendChatCommand("/command") das gewünschte... wasauchimmer ausführen kann
Im Beispiel werd' ich 'nen Command schreiben, mit dem man ein gewünschtes Pet mittels Vnum als Argument spawnen kann.
Fangen wir an:
Ihr öffnet "cmd.cpp" - dort seht ihr sehr viele Functions wie "ACMD(do_warp)" - sucht euch eine Stelle irgendwo zwischen den ganzen Functions, wo ihr das gefühl habt, dass es dort richtig ist, und fügt hinzu:
Code:
ACMD(do_pet_summon);
"struct command_info cmd_info[] ="
Dort sind die ganzen im Core implementierten Chatcommands aufgelistet.
Hier wird auch festgelegt, wann ein solcher Befehl verwendet werden kann, und welche Rechte ein Spieler benötigt, um diesen zu verwenden.
Wo's gerade Sinn macht fügt ihr ein:
Code:
{ "pet_summon", do_pet_summon, 0, POS_DEAD, GM_IMPLEMENTOR },
"POS_DEAD" weil - ich hab' ganz offen keine Ahnung, muss ich mir mal genauer anschauen. "GM_IMPLEMENTOR" weil - nur GM's mit IMPLEMENTOR-Rechten (Wird in der Datenbank von euch selbst bestimmt) den Befehl nutzen können sollen. Wenn ihr wollt, dass jeder normale Player den Befehl auch nutzen kann - schreibt ihr stattdessen "GM_PLAYER".
Und damit steht soweit auch das gerüst, jetzt müssen wir noch bestimmen, was der Command denn genau machen soll
Dazu öffnen wir "cmd_general.cpp", hier findet die eigentliche Implementierung statt.
Da wir mit dem PetSystem arbeiten - macht es Sinn, die Funktionen des PetSystems auch aufrufen zu können, dazu gehen wir bei der Datei ganz nach oben und fügen bei den Includes hinzu:
Code:
#include "PetSystem.h"
Code:
ACMD(do_pet_summon)
{
if (ch->IsDead())
return;
char arg1[256];
one_argument(argument, arg1, sizeof(arg1));
if (!*arg1)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("do_pet_summon: not enough Argument"));
return;
}
int vnum = 0;
str_to_number(vnum, arg1);
CPetSystem* petSys = ch->GetPetSystem();
if (!petSystem)
return;
CPetActor* pet = petSys->Summon(vnum, NULL, NULL, false);
if (!pet)
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Could not summon pet");
}
Jedenfalls - solltet ihr jetzt mit "/pet_summon 101" <- 'nen Wildhund als Pet rufen können =) Viel Spaß!
ACH VERDAMMT MAN VÖLLIG FALSCHE SECTION WAS SOLL DAS WIESO PASSIERT MIR DAS ahhh >_<
#moverequest






