Ристалище Серебряного турнира

база YtDB

собственно вопрос по квестам

Мастер ближнего боя

http://ru.wowhead.com/quest=13828 - альянс

http://ru.wowhead.com/quest=13829 - орда

Мастер стремительной атаки

http://ru.wowhead.com/quest=13837 -альянс

http://ru.wowhead.com/quest=13839 -орда

Мастер дальнего боя

http://ru.wowhead.com/quest=13835 - альянс

http://ru.wowhead.com/quest=13838 - орда

нарыл в пучине инета патч от французов весь кидать нету смысла кину тока интересующую часть


/*######

* npc_training_dummy_argent

######*/

// UPDATE `creature_template` SET `ScriptName`='npc_training_dummy_argent' WHERE `entry`=33229;

// UPDATE `creature_template` SET `ScriptName`='npc_training_dummy_argent' WHERE `entry`=33272;

// UPDATE `creature_template` SET `ScriptName`='npc_training_dummy_argent' WHERE `entry`=33243;

#define SPELL_DEFEND_AURA 62719

#define SPELL_DEFEND_AURA_1 64100

#define SPELL_ARGENT_CHARGE 68321

#define SPELL_ARGENT_BREAK_SHIELD 62626

#define SPELL_ARGENT_MELEE 62544 


class npc_training_dummy_argent : public CreatureScript

{

public:

	npc_training_dummy_argent(): CreatureScript("npc_training_dummy_argent"){}


	struct npc_training_dummy_argentAI : Scripted_NoMovementAI

	{

	    npc_training_dummy_argentAI(Creature *c) : Scripted_NoMovementAI(c)

	    {

		m_Entry = c->GetEntry();

	    }


	    uint64 m_Entry;

	    uint32 ResetTimer;

	    uint32 DespawnTimer;

		uint32 ShielTimer;

	    void Reset()

	    {

		me->SetControlled(true,UNIT_STAT_STUNNED);//disable rotate

		me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);//imune to knock aways like blast wave

		me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, true);

		ResetTimer = 10000;

		DespawnTimer = 15000;

			ShielTimer=0;

	    }


	    void EnterEvadeMode()

	    {

		if (!_EnterEvadeMode())

		    return;


		Reset();

	    }


	    void DamageTaken(Unit * /*done_by*/, uint32 &damage)

	    {

		ResetTimer = 10000;

		damage = 0;

	    }


	    void EnterCombat(Unit * /*who*/)

	    {

		if (m_Entry != 2674 && m_Entry != 2673)

		    return;

	    }


		void SpellHit(Unit* caster,const SpellEntry* spell)

		{

			if(caster->GetOwner())

			{

				if(m_Entry==33272)

					if(spell->Id==SPELL_ARGENT_CHARGE)

						if(!me->GetAura(SPELL_DEFEND_AURA))

							caster->GetOwner()->ToPlayer()->KilledMonsterCredit(33340, 0);

				if(m_Entry==33229){

					if(spell->Id==SPELL_ARGENT_MELEE)

					{

						caster->GetOwner()->ToPlayer()->KilledMonsterCredit(33341, 0);

						me->CastSpell(caster,62709,true);

					}

				}


			}


			if(m_Entry==33243)

					if(spell->Id==SPELL_ARGENT_BREAK_SHIELD)

						if(!me->GetAura(SPELL_DEFEND_AURA))

							if(caster->GetTypeId()==TYPEID_PLAYER)

								caster->ToPlayer()->KilledMonsterCredit(33339, 0);

		}


	    void UpdateAI(const uint32 diff)

	    {

			if (ShielTimer <= diff)

			{

				if(m_Entry==33243)

					me->CastSpell(me,SPELL_DEFEND_AURA,true);


			if(m_Entry==33272 && !me->GetAura(SPELL_DEFEND_AURA_1))

						me->CastSpell(me,SPELL_DEFEND_AURA_1,true);

				ShielTimer = 8000;

			}

			else

				ShielTimer -= diff;


		if (!UpdateVictim())

		    return;

		if (!me->HasUnitState(UNIT_STAT_STUNNED))

		    me->SetControlled(true,UNIT_STAT_STUNNED);//disable rotate


		if (m_Entry != 2674 && m_Entry != 2673)

		{

		    if (ResetTimer <= diff)

		    {

			EnterEvadeMode();

			ResetTimer = 10000;

		    }

		    else

			ResetTimer -= diff;

		    return;

		}

		else

		{

		    if (DespawnTimer <= diff)

			me->ForcedDespawn();

		    else

			DespawnTimer -= diff;

		}

	    }

	    void MoveInLineOfSight(Unit * /*who*/){return;}

	};


	CreatureAI* GetAI(Creature* pCreature) const

	{

	    return new npc_training_dummy_argentAI(pCreature);

	}


};


void AddSC_SilverTurnament()

{

    new npc_training_dummy_argent;

}

и суть проблемы при атаке целей не зашитывает килл кредиты в базе стоят те же кредиты что и в скриптах.

ps можно конечно захачить в кашу базу путем вбивания в наглую в критерии квеста манекенов для атаки, но мы не ищем легких путей.

с TDB базой пробовал?

Не не пробовал, но судя по данным в их квестах будет тоже самое.

причем не работает походу проверка спела когда на маунте а мож я нетак это готовлю но если вот так:


		void SpellHit(Unit* caster,const SpellEntry* spell)

		{

			if(m_Entry==33229)

				{

					if (spell->Id == 62544 && caster->GetTypeId() == TYPEID_PLAYER && caster->ToPlayer()->GetQuestStatus(13828) == QUEST_STATUS_INCOMPLETE)

					caster->ToPlayer()->KilledMonsterCredit(CREDIT_MELEE, 0);	

				}


		}

то сидя на маунте не работает но если я играком без маунта скастую спел 62544 в манекен то квест зашитывает как приделать проверку то что я юзаю вехикл не осилил

кстати говорили уже, что у французов не ахти. надо конвертировать и код почистить.

Эти патчи были актуальны во время 10000-10500 ревизий

может кастовать должна лошадь а игроку засчитывается?

а то я как понел по коду условием выполнение является то что скастовать должен игрок, а ведь кастер же поидее лошадка?

Все от французов - давно оттестьировано, поставьте себе и проверьте, охренеете от косяков.

некто и не использует фул патч используется только идея /emoticons/default_wink.png

ну да именно лошадь поэтому у мя вышло примерно так но все равно не работает


             if(caster->GetOwner()){

                        if(m_Entry==33229)

                                {  

                                        if (spell->Id == SPELL_ARGENT_MELEE && caster->GetOwner() && caster->GetOwner()->GetTypeId() == TYPEID_PLAYER && caster->GetOwner()->ToPlayer()->GetQuestStatus(13828) == QUEST_STATUS_INCOMPLETE)

                                                 caster->GetOwner()->ToPlayer()->KilledMonsterCredit(CREDIT_MELEE, 0);  

                                }

                                }

если без лошади засчитывается значит кастером по условию считаешься ты…

if (spell->Id == SPELL_ARGENT_MELEE && caster->GetOwner() && caster->GetOwner()->GetTypeId() == TYPEID_PLAYER && caster->GetOwner()->ToPlayer()->GetQuestStatus(13828) == QUEST_STATUS_INCOMPLETE)

может не TYPEID_PLAYER?

самая первая версия скрипта где без проверки на кобылку там просто тестил в ней работает только если без маунта, но оно и понятно. а вот последняя как раз таки с проверкой на кобылку но не работает хоть с конем хоть без. а насчёт TYPEID_PLAYER без понятия как по другому смутить. потому и отпостился тут мож кто подскажет /emoticons/default_wink.png да и выбирать там особо не изчего было не TYPEID_UNIT же.

сейчас выглядит вот так скрипт но все равно как не работал так и не работает


#include "ScriptPCH.h"

/*######

* npc_training_dummy_argent

######*/

// UPDATE `creature_template` SET `ScriptName`='npc_training_dummy_argent' WHERE `entry`=33229;

// UPDATE `creature_template` SET `ScriptName`='npc_training_dummy_argent' WHERE `entry`=33272;

// UPDATE `creature_template` SET `ScriptName`='npc_training_dummy_argent' WHERE `entry`=33243;

enum eTrainingdummy

{

        CREDIT_RANGE               = 33339,

	CREDIT_CHARGE              = 33340,

	CREDIT_MELEE               = 33341,

	NPC_CHARGE                 = 33272,

	NPC_MELEE                  = 33229,

	NPC_RANGE                  = 33243,

	SPELL_DEFEND_AURA          = 62719,  // it's spell spam in console

	SPELL_DEFEND_AURA_1        = 64100,  // it's spell spam in console

	SPELL_ARGENT_CHARGE        = 68321,

	SPELL_ARGENT_BREAK_SHIELD  = 62626,  // spell goes't work

	SPELL_ARGENT_MELEE         = 62544


};


class npc_training_dummy_argent : public CreatureScript

{

public:

	npc_training_dummy_argent(): CreatureScript("npc_training_dummy_argent"){}


	struct npc_training_dummy_argentAI : Scripted_NoMovementAI

	{

	    npc_training_dummy_argentAI(Creature *c) : Scripted_NoMovementAI(c)

	    {

		m_Entry = c->GetEntry();

	    }


	    uint64 m_Entry;

	    uint32 ResetTimer;

	    uint32 DespawnTimer;

		uint32 ShielTimer;

	    void Reset()

	    {

		me->SetControlled(true,UNIT_STAT_STUNNED);//disable rotate

		me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);//imune to knock aways like blast wave

		me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, true);

		ResetTimer = 10000;

		DespawnTimer = 15000;

			ShielTimer=0;

	    }


	    void EnterEvadeMode()

	    {

		if (!_EnterEvadeMode())

		    return;


		Reset();

	    }


	    void DamageTaken(Unit * /*done_by*/, uint32 &damage)

	    {

		ResetTimer = 10000;

		damage = 0;

	    }


	    void EnterCombat(Unit * /*who*/)

	    {

		if (m_Entry != 2674 && m_Entry != 2673)

		    return;

	    }


		void SpellHit(Unit* caster,const SpellEntry* spell)

		{	

		//caster->ToCreature()->IsVehicle()


		if(caster->GetOwner()){

			if(m_Entry==33229)

				{   //ally melee quest

					if (spell->Id == SPELL_ARGENT_MELEE && caster->GetOwner() && caster->GetOwner()->GetTypeId() == TYPEID_PLAYER && caster->GetOwner()->ToPlayer()->GetQuestStatus(13828) == QUEST_STATUS_INCOMPLETE)

					//if (spell->Id == SPELL_ARGENT_MELEE && caster->GetOwner()->GetTypeId() == TYPEID_PLAYER && caster->GetOwner()->ToPlayer()->GetQuestStatus(13828) == QUEST_STATUS_INCOMPLETE)

						 caster->GetOwner()->ToPlayer()->KilledMonsterCredit(CREDIT_MELEE, 0);	

				}

				}

			// if(caster->GetOwner())

			// {

				// if(m_Entry==33272)

					// if(spell->Id==SPELL_ARGENT_CHARGE)

						// if(!me->GetAura(SPELL_DEFEND_AURA))

							// caster->GetOwner()->ToPlayer()->KilledMonsterCredit(33340, 0);

				// if(m_Entry==33229){

					// if(spell->Id==SPELL_ARGENT_MELEE)

					// {

						// caster->GetOwner()->ToPlayer()->KilledMonsterCredit(33341, 0);

						// me->CastSpell(caster,62709,true);

					// }

				// }


			// }


			// if(m_Entry==33243)

					// if(spell->Id==SPELL_ARGENT_BREAK_SHIELD)

						// if(!me->GetAura(SPELL_DEFEND_AURA))

							// if(caster->GetTypeId()==TYPEID_PLAYER)

								// caster->ToPlayer()->KilledMonsterCredit(33339, 0);

		}


	    void UpdateAI(const uint32 diff)

	    {

			if (ShielTimer <= diff)

			{

				if(m_Entry==33243)

					me->CastSpell(me,SPELL_DEFEND_AURA,true);


			if(m_Entry==33272 && !me->GetAura(SPELL_DEFEND_AURA_1))

						me->CastSpell(me,SPELL_DEFEND_AURA_1,true);

				ShielTimer = 8000;

			}

			else

				ShielTimer -= diff;


		if (!UpdateVictim())

		    return;

		if (!me->HasUnitState(UNIT_STAT_STUNNED))

		    me->SetControlled(true,UNIT_STAT_STUNNED);//disable rotate


		if (m_Entry != 2674 && m_Entry != 2673)

		{

		    if (ResetTimer <= diff)

		    {

			EnterEvadeMode();

			ResetTimer = 10000;

		    }

		    else

			ResetTimer -= diff;

		    return;

		}

		else

		{

		    if (DespawnTimer <= diff)

			me->ForcedDespawn();

		    else

			DespawnTimer -= diff;

		}

	    }

	    void MoveInLineOfSight(Unit * /*who*/){return;}

	};


	CreatureAI* GetAI(Creature* pCreature) const

	{

	    return new npc_training_dummy_argentAI(pCreature);

	}


};

может скрипт подцепить к коню и конем апдейтить квест, а не к манекену. и у коня проверять какую цель он долбит спелом и потом уже апдейтить. тобиж будет конь апдейтит => игрока а шас таргет коня апдейтит => коня и уж тока потом меня но это только предположение

если к коню то тогда нужно как то проверять кто на нем сидит и уже ему а не коню апдейтить квест, вот только как?

доканал таки квест заработал он /emoticons/default_smile.png достал наверно всех уже но проверка была написана правильно нужно было использовать только GetCharmerOrOwner и все сразу стало работать /emoticons/default_smile.png

исправление работы копья на маунтах теперь будет кидать и снимать стак с цели


diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp

--- a/src/server/game/Spells/SpellEffects.cpp

+++ b/src/server/game/Spells/SpellEffects.cpp

@@ -4452,6 +4452,33 @@

                 case 26465:

                     unitTarget->RemoveAuraFromStack(26464);

                     return;

+				// turnament  Mount spell

+				case 62575:

+				{

+					if(m_caster->GetCharmerOrOwner())

+						m_caster->GetCharmerOrOwner()->CastSpell(unitTarget,62626,true );

+						return;

+				}

+				case 62960:

+				{

+					if (!unitTarget)

+						return;

+					m_caster->CastSpell(unitTarget,62563,true );

+					m_caster->CastSpell(unitTarget,68321,true );

+					return;

+				}

+				case 62626:

+				case 68321:

+				{

+					if(!unitTarget)

+						return;

+					if (unitTarget->GetAura(62719))

+						unitTarget->RemoveAuraFromStack(62719);

+

+					if(unitTarget->GetAura(64100))

+						unitTarget->RemoveAuraFromStack(64100);

+					return;

+				}

                 // Shadow Flame (All script effects, not just end ones to prevent player from dodging the last triggered spell)

                 case 22539:

                 case 22972:

подпихнул разрабам мож допилят напильником по качественнее

вот ешё каму надо для YtDB исправляет дейли квесты

http://www.wowhead.com/quest=14092

http://www.wowhead.com/quest=14076


INSERT INTO `spell_linked_spell` VALUES ('66512', '66510', '0', 'Quest Breakfast Of Champions 14092 14076');

для YTDB - пиши на их форуме - нечего тут всё это размещать /emoticons/default_dry.png

Это для обоих баз подойдет.

забыл тебя спросить что мне тут размешать а что нет.

не груби, человек правильно говорит, не стоит потому что как бы TDB и YTDB базы от разный разработчиков и они конкурируют между собой, сейчас не знаю но не стоит пиарить или говорить на косяки баз группе разрабов другой компании и наоборот … немного на диверсию смахивает)

Для особо тупых повторить?
Он же правильно сказал, что для обоих баз. /emoticons/default_wink.png