Hallo liebe Community, heute zeige ich euch wie ihr einen Buff NPC erstellen könnt.
Schritt 1: Als erstes includiert ihr diese Sachen, dies ist notwendig sonst wird es nicht funktionieren.
C
#include "GossipDef.h"
#include "Player.h"
#include "ScriptedPch.h"
#include "ScriptedGossip.h"
#include "Database/DatabaseEnv.h"
#include "SpellMgr.h"
#include "Common.h"
Schritt 2: Nun erstellen wir unseren NPC
Code
bool GossipHello_simple_buff_npc(Player *player, Creature *_Creature)
{
player->SetTaxiCheater(true);
player->ADD_GOSSIP_ITEM(5, "Teleports", GOSSIP_SENDER_MAIN, 1/* '1' */ ); // Erstellt einen Menu Eintrag welcher der Spieler den NPC sieht wenn er den NPC ansprich
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _Creature->GetGUID());
return true;
}
Schritt 3: Was passieren soll, wen man in Anklickt
Code
void SendDefaultMenu_simple_buff_npc(Player *player, Creature *_Creature, uint32 action)
{
if(!player->getAttackers().empty()) //Eine Abfrage ob der Spieler in einen Kampf verwickelt ist falls ja schließt der NPC den Dialog und gibt dem Spieler die * Nachricht an
{
player->CLOSE_GOSSIP_MENU();
player->GetSession()->SendNotification("Ihr seid in einen Kampf verwickelt."); // Nachricht = *
}
else
{
switch(action) // Falls der jenige nicht in einen Kampf verwickelt ist wird er weitergeleitet
{
case 1: //Das ist der Fall wenn der Spieler den Menu Punkt 'Teleports' anklickt
player->ADD_GOSSIP_ITEM(5, "Ausdauer", GOSSIP_SENDER_MAIN, 2/* '2' */); //Erstellt erneut eine Auswahl bzw einen Menupunkt
player->ADD_GOSSIP_ITEM(5, "Rüstung", GOSSIP_SENDER_MAIN, 3); //Erstellt eine 2te Auswahl bzw. Menupunkt
player->ADD_GOSSIP_ITEM(0, "Schoenen Tag noch", GOSSIP_SENDER_MAIN, 4);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _Creature->GetGUID());
break;
case 2://Ausdauerbuff
player->CLOSE_GOSSIP_MENU(); // '3'
_Creature->CastSpell(player, 58453/*4*/, true);
break;
case 3://Rüstungsbuff
player->CLOSE_GOSSIP_MENU();
_Creature->CastSpell(player, 42995, true);
break;
case 4:
player->CLOSE_GOSSIP_MENU(); // Beendet den Dialog
player->GetSession()->SendNotification("Schoenen Tag noch."); // Gibt dem Spieler noch eine Abbschlussnachricht
break;
}
}
}
Alles anzeigen
Schritt 4: Der Buff NPC selber
Code
bool GossipSelect_simple_buff_npc(Player *player, Creature *_Creature, uint32 sender, uint32 action)
{
if (sender == GOSSIP_SENDER_MAIN)
SendDefaultMenu_simple_buff_npc(player, _Creature, action);
return true;
}
void AddSC_simple_buff_npc()
{
Script *newscript;
newscript =new Script;
newscript->Name ="simple_buff_npc";// Definiert den Scriptnamen der später in dem Feld 'Scriptnamen' in dem creature_template bei der Creature angeben werden muss
newscript->pGossipHello =&GossipHello_simple_buff_npc;
newscript->pGossipSelect =&GossipSelect_simple_buff_npc;
newscript->pItemHello =NULL;
newscript->pGOHello =NULL;
newscript->pAreaTrigger =NULL;
newscript->pItemQuestAccept =NULL;
newscript->pGOQuestAccept =NULL;
newscript->pGOChooseReward =NULL;
newscript->RegisterSelf();
}
Alles anzeigen
An Ende, müsste bei euch alles so aussehen.
C
#include "GossipDef.h"
#include "Player.h"
#include "ScriptedPch.h"
#include "ScriptedGossip.h"
#include "Database/DatabaseEnv.h"
#include "SpellMgr.h"
#include "Common.h"
bool GossipHello_simple_buff_npc(Player *player, Creature *_Creature)
{
player->SetTaxiCheater(true);
player->ADD_GOSSIP_ITEM(5, "Teleports", GOSSIP_SENDER_MAIN, 1/* '1' */ ); // Erstellt einen Menu Eintrag welcher der Spieler den NPC sieht wenn er den NPC ansprich
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _Creature->GetGUID());
return true;
}
void SendDefaultMenu_simple_buff_npc(Player *player, Creature *_Creature, uint32 action)
{
if(!player->getAttackers().empty()) //Eine Abfrage ob der Spieler in einen Kampf verwickelt ist falls ja schließt der NPC den Dialog und gibt dem Spieler die * Nachricht an
{
player->CLOSE_GOSSIP_MENU();
player->GetSession()->SendNotification("Ihr seid in einen Kampf verwickelt."); // Nachricht = *
}
else
{
switch(action) // Falls der jenige nicht in einen Kampf verwickelt ist wird er weitergeleitet
{
case 1: //Das ist der Fall wenn der Spieler den Menu Punkt 'Teleports' anklickt
player->ADD_GOSSIP_ITEM(5, "Ausdauer", GOSSIP_SENDER_MAIN, 2/* '2' */); //Erstellt erneut eine Auswahl bzw einen Menupunkt
player->ADD_GOSSIP_ITEM(5, "Rüstung", GOSSIP_SENDER_MAIN, 3); //Erstellt eine 2te Auswahl bzw. Menupunkt
player->ADD_GOSSIP_ITEM(0, "Schoenen Tag noch", GOSSIP_SENDER_MAIN, 4);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _Creature->GetGUID());
break;
case 2://Ausdauerbuff
player->CLOSE_GOSSIP_MENU(); // '3'
_Creature->CastSpell(player, 58453/*4*/, true);
break;
case 3://Rüstungsbuff
player->CLOSE_GOSSIP_MENU();
_Creature->CastSpell(player, 42995, true);
break;
case 4:
player->CLOSE_GOSSIP_MENU(); // Beendet den Dialog
player->GetSession()->SendNotification("Schoenen Tag noch."); // Gibt dem Spieler noch eine Abbschlussnachricht
break;
}
}
}
bool GossipSelect_simple_buff_npc(Player *player, Creature *_Creature, uint32 sender, uint32 action)
{
// Der Buff NPC selber
if (sender == GOSSIP_SENDER_MAIN)
SendDefaultMenu_simple_buff_npc(player, _Creature, action);
return true;
}
void AddSC_simple_buff_npc()
{
Script *newscript;
newscript =new Script;
newscript->Name ="simple_buff_npc";// Definiert den Scriptnamen der später in dem Feld 'Scriptnamen' in dem creature_template bei der Creature angeben werden muss
newscript->pGossipHello =&GossipHello_simple_buff_npc;
newscript->pGossipSelect =&GossipSelect_simple_buff_npc;
newscript->pItemHello =NULL;
newscript->pGOHello =NULL;
newscript->pAreaTrigger =NULL;
newscript->pItemQuestAccept =NULL;
newscript->pGOQuestAccept =NULL;
newscript->pGOChooseReward =NULL;
newscript->RegisterSelf();
}
Alles anzeigen
Dies ist ein Tutorial für Anfänger, ihr könnt natürlich auch den NPC erweitern.