ArcEmu: Quest Erstellen Spieler Gegen Npc - ArcEmu

Jump to content

Toggle shoutbox Lastest Announcements

dfighter  : (07 December 2014 - 12:06 PM) Arcemu is in hibernation mode, please read http://arcemu.org/fo...showtopic=26903
dfighter  : (01 January 2013 - 05:56 PM) Arcemu wishes you all a happy new year!
Hasbro  : (12 September 2012 - 10:01 AM) Please excuse our outage from the web! Our web host had a major malfunction!
dfighter  : (01 September 2012 - 04:05 PM) Since the spam bots just don't want to stop, I've enabled admin verification when registering.
dfighter  : (23 January 2012 - 09:56 PM) Please note that from now on you will need to confirm your email on the wiki in order to edit it!
Hasbro  : (31 December 2011 - 12:50 PM) Happy New Years all!
Navid  : (26 December 2011 - 04:09 AM) Merry Christmas !!!!!! Happy holidays all :)
WAmadeus  : (24 December 2011 - 03:54 PM) Merry Christmas to all!
dfighter  : (24 December 2011 - 11:05 AM) The Arcemu team wishes y'all a Merry Christmukkah!
Hasbro  : (05 October 2011 - 12:53 PM) Looking for web designers for upcoming web related project. If you're interested in designing user interfaces contact me
dfighter  : (02 September 2011 - 03:47 PM) So who here wants vehicles in Arcemu? :P http://arcemu.org/fo...showtopic=25440
Hasbro  : (14 August 2011 - 03:25 PM) Join us on irc, grab an irc client and connect to irc.freenode.net join channel #arcemu /server irc.freenode.net:6667 /join #arcemu
jackpoz  : (03 August 2011 - 05:33 AM) to all Lua Engine (old one) users: please check http://arcemu.org/fo...showtopic=25274
Hasbro  : (20 May 2011 - 05:27 PM) Looking for people experienced with CMake configuration and setup! Contact me asap
Hasbro  : (15 May 2011 - 05:03 PM) ArcEmu is recruiting C++ programmers, contact Hasbro if interested.
paroxysm  : (03 May 2011 - 06:26 PM) Updated luabridge gossip example to describe the whole gossip creation process rather than just how to create menu. Gossip tutorial
paroxysm  : (23 April 2011 - 11:35 AM) Lua writers can refer to the Luabridge Tutorials section in the Wiki to learn how to write gossip code correctly.
Hasbro  : (20 April 2011 - 05:22 PM) Thank you for your continuous contribution of bug reports, we are working on them.
Hasbro  : (17 April 2011 - 03:20 AM) Please consider donating to support our bills. Donations can be sent using PayPal to donations@arcemu.org - Thank you for your support.
paroxysm  : (10 April 2011 - 12:43 AM) Refer to the Luabridge Tutorials section in the Wiki to learn the new syntax of luabridge.
Resize Shouts Area

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Quest Erstellen Spieler Gegen Npc

#1 User is offline   Garfield 

  • Newbie
  • Group: Members
  • Posts: 6
  • Joined: 29-June 11
  • Gender:Male
  • Server OS:Windows

Posted 18 March 2014 - 02:14 PM

Hallo zusammen,
ich bin grade dabei einige Questen vom DK zu fixen mom stehe ich vor der Quest "Herausforderung des Todes".
Ich habe es soweit hinbekommen wenn jemand diese Quest angenommen hat das beim NPC ein Menü zum Starten eines Duells erscheint.
Aber wie kann ich aus der GossipScript Klasse den CreatureAIScript starten?

Beides habe ich registriert
class SCRIPT_DECL ChallengeOfDeathGossip : public GossipScript
{
	public:
		void GossipHello(Object* pObject, Player* plr)
		{
			GossipMenu* Menu;
			objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 100, plr);
			if(plr->HasQuest(12733))
			{
				Menu->AddItem(Arcemu::Gossip::ICON_CHAT, "Zum Duell herausfordern", 1);
			}

			Menu->SendTo(plr);
		}

		void GossipSelectOption(Object* pObject, Player* plr, uint32 Id, uint32 IntId, const char* Code)
		{
			if(!pObject->IsCreature())
				return;
			Creature* pCreature = TO_CREATURE(pObject);

			GossipMenu* Menu;
			switch(IntId)
			{
				case 0: // Return to start
					GossipHello(pCreature, plr);
				break;
				case 1: 
				{
                    // Hier soll der Kampf beginnen, aber wie ???
				}
				break;

			}
		}
};

class ChallengeOfDeathQuestAI : public CreatureAIScript
{
public:
	ADD_CREATURE_FACTORY_FUNCTION(ChallengeOfDeathQuestAI);
	ChallengeOfDeathQuestAI(Creature* pCreature) : CreatureAIScript(pCreature)
	{
	    //...
		pCreature->SetFaction(35);
	}

	void OnCastSpell(uint32 iSpellId)
	{
	    //...
	}

	void OnCombatStart(Unit * mTarget)
	{
        //...
	}

	void OnCombatStop(Unit * mTarget)
	{
		_unit->GetAIInterface()->setCurrentAgent(AGENT_NULL);
		_unit->GetAIInterface()->SetAIState(STATE_IDLE);
		RemoveAIUpdateEvent();
	}

	void OnDied(Unit * mKiller)
	{
		RemoveAIUpdateEvent(); // Removes our AI update event
	}

	void OnDamageTaken(Unit* mAttacker, uint32 fAmount)
	{
        //...
	}

	void AIUpdate()
	{
        //...
	}
};

void SetupDeathKnight(ScriptMgr* mgr)
{
    //...
	mgr->register_creature_script(28406, &ChallengeOfDeathQuestAI::Create);
	mgr->register_creature_gossip(28406, new ChallengeOfDeathGossip);
}


Ich möchte hier keine Ausprogrammierte Klasse als Antwort bekommen sondern nur wie man das aus einen Menü heraus startet!
Wenn das später alles funktioniert wollte ich die Questen die ich gefixt habe hier zuverfügung stellen bzw den Coreprogrammierern geben damit es jeder bekommt.

lg Garfield
0

#2 User is offline   Artox 

  • Occasional Poster
  • PipPip
  • Group: Members
  • Posts: 142
  • Joined: 01-November 08

Posted 18 March 2014 - 02:42 PM

			if(!pCreature || !pCreature->isAlive())
				return;

			if(pCreature->GetEntry() == CN_INITIATE_1 || 
	           pCreature->GetEntry() == CN_INITIATE_2 ||
	           pCreature->GetEntry() == CN_INITIATE_3 || 
	           pCreature->GetEntry() == CN_INITIATE_4 ||
	           pCreature->GetEntry() == CN_INITIATE_5 )
			{
				// this way we have refference to our player
				pCreature->SetSummonedByGUID( pPlayer->GetGUID() );

				// do all other things directly in creature's AI class, it's more comfortable
				pCreature->GetScript()->RegisterAIUpdateEvent(1000);
			}

Hier mal ein Codeblock von einem DK-Quest-Script.
Wenn du Zugriff auf das Creature-Objekt hast kannst du per GetScript() das CreatureAIScript-Objekt bekommen und darauf die Methoden aufrufen, die f�r CreatureAIScript bereits vordefiniert sind, oder dieses auf den Typ deiner Skriptklasse casten und dann alle Methoden aufrufen die existieren.

Vielleicht hilft dir auch der Code hier, da existieren bereits ein paar Skripte für Todesritter: Hellgate Project
Posted Image
0

#3 User is offline   Garfield 

  • Newbie
  • Group: Members
  • Posts: 6
  • Joined: 29-June 11
  • Gender:Male
  • Server OS:Windows

Posted 22 March 2014 - 02:04 AM

View PostArtox, on 18 March 2014 - 02:42 PM, said:

			if(!pCreature || !pCreature->isAlive())
				return;

			if(pCreature->GetEntry() == CN_INITIATE_1 || 
	           pCreature->GetEntry() == CN_INITIATE_2 ||
	           pCreature->GetEntry() == CN_INITIATE_3 || 
	           pCreature->GetEntry() == CN_INITIATE_4 ||
	           pCreature->GetEntry() == CN_INITIATE_5 )
			{
				// this way we have refference to our player
				pCreature->SetSummonedByGUID( pPlayer->GetGUID() );

				// do all other things directly in creature's AI class, it's more comfortable
				pCreature->GetScript()->RegisterAIUpdateEvent(1000);
			}

Hier mal ein Codeblock von einem DK-Quest-Script.
Wenn du Zugriff auf das Creature-Objekt hast kannst du per GetScript() das CreatureAIScript-Objekt bekommen und darauf die Methoden aufrufen, die für CreatureAIScript bereits vordefiniert sind, oder dieses auf den Typ deiner Skriptklasse casten und dann alle Methoden aufrufen die existieren.

Vielleicht hilft dir auch der Code hier, da existieren bereits ein paar Skripte für Todesritter: Hellgate Project


Sorry für das späte Antworten.
Erstmal danke für deine Hilfe das hat mir weiter geholfen.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users