diff options
| author | Kudlaty <none@none> | 2009-08-06 19:10:50 +0200 |
|---|---|---|
| committer | Kudlaty <none@none> | 2009-08-06 19:10:50 +0200 |
| commit | 87f573752e9b6035091c3a540743d6c2c6a584e3 (patch) | |
| tree | 9816d1dc23024e7d6b15603de8f5b83f7ffd5e77 /src | |
| parent | e1cfdaedcf26546c7732d1de4e30da3d519e4fd8 (diff) | |
Merge [SD2]
r1120 Add CallForHelp at aggro for two instance bosses. Requires Mangos 7951+
r1121 Added basic parts of boss spell definitions and texts for Nexus instance - skip (already have better)
r1122 Correct one spellId, add more spell definitions for boss noth - skip
r1123 Remove wrong spell for gluth and add missing emote text. Summon only expected amount of adds. Some additional cleanup in anubrekhan and check heroic for a few spell cast. - skip
r1124 Use normal health check calculation for easier backport (to older client)
r1125 Fixed typo in previous commit
r1126 Add spell cast to dragon in scrying orb event and add workaround for kill credit.
r1127 Convert gossip related define to enum and remove one useless (redefinition)
r1128 Remove no longer needed item scripts that can be controlled with database table item_required_target (Mangos 7980+)
r1129 Remove one more obsolete item script (use spell_area DB table for area limited spell).
Cleanup other and provide spell error message. Requires Mangos 7983+
--HG--
branch : trunk
Diffstat (limited to 'src')
9 files changed, 181 insertions, 562 deletions
diff --git a/src/bindings/scripts/include/sc_gossip.h b/src/bindings/scripts/include/sc_gossip.h index 9665a7e1123..0bee1dca5c8 100644 --- a/src/bindings/scripts/include/sc_gossip.h +++ b/src/bindings/scripts/include/sc_gossip.h @@ -73,60 +73,59 @@ #define GOSSIP_TEXT_JEWELCRAFTING "Jewelcrafting" #define GOSSIP_TEXT_INSCRIPTION "Inscription" +enum +{ // Skill defines - -#define TRADESKILL_ALCHEMY 1 -#define TRADESKILL_BLACKSMITHING 2 -#define TRADESKILL_COOKING 3 -#define TRADESKILL_ENCHANTING 4 -#define TRADESKILL_ENGINEERING 5 -#define TRADESKILL_FIRSTAID 6 -#define TRADESKILL_HERBALISM 7 -#define TRADESKILL_LEATHERWORKING 8 -#define TRADESKILL_POISONS 9 -#define TRADESKILL_TAILORING 10 -#define TRADESKILL_MINING 11 -#define TRADESKILL_FISHING 12 -#define TRADESKILL_SKINNING 13 -#define TRADESKILL_JEWLCRAFTING 14 -#define TRADESKILL_INSCRIPTION 15 - -#define TRADESKILL_LEVEL_NONE 0 -#define TRADESKILL_LEVEL_APPRENTICE 1 -#define TRADESKILL_LEVEL_JOURNEYMAN 2 -#define TRADESKILL_LEVEL_EXPERT 3 -#define TRADESKILL_LEVEL_ARTISAN 4 -#define TRADESKILL_LEVEL_MASTER 5 -#define TRADESKILL_LEVEL_GRAND_MASTER 6 + TRADESKILL_ALCHEMY = 1, + TRADESKILL_BLACKSMITHING = 2, + TRADESKILL_COOKING = 3, + TRADESKILL_ENCHANTING = 4, + TRADESKILL_ENGINEERING = 5, + TRADESKILL_FIRSTAID = 6, + TRADESKILL_HERBALISM = 7, + TRADESKILL_LEATHERWORKING = 8, + TRADESKILL_POISONS = 9, + TRADESKILL_TAILORING = 10, + TRADESKILL_MINING = 11, + TRADESKILL_FISHING = 12, + TRADESKILL_SKINNING = 13, + TRADESKILL_JEWLCRAFTING = 14, + TRADESKILL_INSCRIPTION = 15, + + TRADESKILL_LEVEL_NONE = 0, + TRADESKILL_LEVEL_APPRENTICE = 1, + TRADESKILL_LEVEL_JOURNEYMAN = 2, + TRADESKILL_LEVEL_EXPERT = 3, + TRADESKILL_LEVEL_ARTISAN = 4, + TRADESKILL_LEVEL_MASTER = 5, + TRADESKILL_LEVEL_GRAND_MASTER = 6, // Gossip defines - -#define GOSSIP_ACTION_TRADE 1 -#define GOSSIP_ACTION_TRAIN 2 -#define GOSSIP_ACTION_TAXI 3 -#define GOSSIP_ACTION_GUILD 4 -#define GOSSIP_ACTION_BATTLE 5 -#define GOSSIP_ACTION_BANK 6 -#define GOSSIP_ACTION_INN 7 -#define GOSSIP_ACTION_HEAL 8 -#define GOSSIP_ACTION_TABARD 9 -#define GOSSIP_ACTION_AUCTION 10 -#define GOSSIP_ACTION_INN_INFO 11 -#define GOSSIP_ACTION_UNLEARN 12 -#define GOSSIP_ACTION_INFO_DEF 1000 - -#define GOSSIP_SENDER_MAIN 1 -#define GOSSIP_SENDER_INN_INFO 2 -#define GOSSIP_SENDER_INFO 3 -#define GOSSIP_SENDER_SEC_PROFTRAIN 4 -#define GOSSIP_SENDER_SEC_CLASSTRAIN 5 -#define GOSSIP_SENDER_SEC_BATTLEINFO 6 -#define GOSSIP_SENDER_SEC_BANK 7 -#define GOSSIP_SENDER_SEC_INN 8 -#define GOSSIP_SENDER_SEC_MAILBOX 9 -#define GOSSIP_SENDER_SEC_STABLEMASTER 10 - -#define DEFAULT_GOSSIP_MESSAGE 0xffffff + GOSSIP_ACTION_TRADE = 1, + GOSSIP_ACTION_TRAIN = 2, + GOSSIP_ACTION_TAXI = 3, + GOSSIP_ACTION_GUILD = 4, + GOSSIP_ACTION_BATTLE = 5, + GOSSIP_ACTION_BANK = 6, + GOSSIP_ACTION_INN = 7, + GOSSIP_ACTION_HEAL = 8, + GOSSIP_ACTION_TABARD = 9, + GOSSIP_ACTION_AUCTION = 10, + GOSSIP_ACTION_INN_INFO = 11, + GOSSIP_ACTION_UNLEARN = 12, + GOSSIP_ACTION_INFO_DEF = 1000, + + GOSSIP_SENDER_MAIN = 1, + GOSSIP_SENDER_INN_INFO = 2, + GOSSIP_SENDER_INFO = 3, + GOSSIP_SENDER_SEC_PROFTRAIN = 4, + GOSSIP_SENDER_SEC_CLASSTRAIN = 5, + GOSSIP_SENDER_SEC_BATTLEINFO = 6, + GOSSIP_SENDER_SEC_BANK = 7, + GOSSIP_SENDER_SEC_INN = 8, + GOSSIP_SENDER_SEC_MAILBOX = 9, + GOSSIP_SENDER_SEC_STABLEMASTER = 10 +}; extern uint32 GetSkillLevel(Player *player,uint32 skill); diff --git a/src/bindings/scripts/scripts/item/item_scripts.cpp b/src/bindings/scripts/scripts/item/item_scripts.cpp index 3b72aab6529..10c3069e1dc 100644 --- a/src/bindings/scripts/scripts/item/item_scripts.cpp +++ b/src/bindings/scripts/scripts/item/item_scripts.cpp @@ -22,54 +22,24 @@ SDCategory: Items EndScriptData */ /* ContentData -item_area_52_special(i28132) Prevents abuse of this item -item_attuned_crystal_cores(i34368) Prevent abuse(quest 11524 & 11525) -item_blackwhelp_net(i31129) Quest Whelps of the Wyrmcult (q10747). Prevents abuse -item_dart_gun Prevent quest provided item instakill anything but the expected item_draenei_fishing_net(i23654) Hacklike implements chance to spawn item or creature -item_disciplinary_rod Prevents abuse item_nether_wraith_beacon(i31742) Summons creatures for quest Becoming a Spellfire Tailor (q10832) item_flying_machine(i34060,i34061) Engineering crafted flying machines item_gor_dreks_ointment(i30175) Protecting Our Own(q10488) -item_muiseks_vessel Cast on creature, they must be dead(q 3123,3124,3125,3126,3127) item_only_for_flight Items which should only useable while flying -item_protovoltaic_magneto_collector Prevents abuse -item_razorthorn_flayer_gland Quest Discovering Your Roots (q11520) and Rediscovering Your Roots (q11521). Prevents abuse -item_tame_beast_rods(many) Prevent cast on any other creature than the intended (for all tame beast quests) -item_soul_cannon(i32825) Prevents abuse of this item -item_sparrowhawk_net(i32321) Quest To Catch A Sparrowhawk (q10987). Prevents abuse -item_voodoo_charm Provide proper error message and target(q2561) -item_vorenthals_presence(i30259) Prevents abuse of this item -item_yehkinyas_bramble(i10699) Allow cast spell on vale screecher only and remove corpse if cast sucessful (q3520) -item_zezzak_shard(i31463) Quest The eyes of Grillok (q10813). Prevents abuse -item_inoculating_crystal Quest Inoculating. Prevent abuse EndContentData */ #include "precompiled.h" -#include "SpellMgr.h" #include "Spell.h" -#include "WorldPacket.h" /*##### -# item_area_52_special +# item_only_for_flight #####*/ -bool ItemUse_item_area_52_special(Player *player, Item* _Item, SpellCastTargets const& targets) +enum { - if ( player->GetAreaId() == 3803 ) - { - return false; - } - else - { - player->SendEquipError(EQUIP_ERR_OUT_OF_RANGE,_Item,NULL); - return true; - } -} - -/*##### -# item_only_for_flight -#####*/ + SPELL_ARCANE_CHARGES = 45072 +}; bool ItemUse_item_only_for_flight(Player *player, Item* _Item, SpellCastTargets const& targets) { @@ -87,6 +57,10 @@ bool ItemUse_item_only_for_flight(Player *player, Item* _Item, SpellCastTargets if(player->GetZoneId() != 4080) disabled = true; break; + case 34475: + if (const SpellEntry* pSpellInfo = GetSpellStore()->LookupEntry(SPELL_ARCANE_CHARGES)) + Spell::SendCastResult(player, pSpellInfo, 1, SPELL_FAILED_NOT_ON_GROUND); + break; } // allow use in flight only @@ -99,57 +73,6 @@ bool ItemUse_item_only_for_flight(Player *player, Item* _Item, SpellCastTargets } /*##### -# item_attuned_crystal_cores -#####*/ - -bool ItemUse_item_attuned_crystal_cores(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && - targets.getUnitTarget()->GetEntry() == 24972 && targets.getUnitTarget()->isDead() && - (player->GetQuestStatus(11524) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(11525) == QUEST_STATUS_INCOMPLETE) ) - { - CAST_CRE(targets.getUnitTarget())->RemoveCorpse(); - return false; - } - - player->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,_Item,NULL); - return true; -} - -/*##### -# item_blackwhelp_net -#####*/ - -bool ItemUse_item_blackwhelp_net(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && - targets.getUnitTarget()->GetEntry() == 21387 ) - return false; - - player->SendEquipError(EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM,_Item,NULL); - return true; -} - -/*##### -# item_dart_gun -#####*/ - -enum -{ - NPC_HAMMER_SCOUT = 32201 -}; - -bool ItemUse_item_dart_gun(Player* pPlayer, Item* pItem, const SpellCastTargets &pTargets) -{ - if (pTargets.getUnitTarget() && pTargets.getUnitTarget()->GetTypeId() == TYPEID_UNIT && - pTargets.getUnitTarget()->GetEntry() == NPC_HAMMER_SCOUT) - return false; - - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW, pItem, NULL); - return true; -} - -/*##### # item_draenei_fishing_net #####*/ @@ -186,20 +109,6 @@ bool ItemUse_item_draenei_fishing_net(Player *player, Item* _Item, SpellCastTarg } /*##### -# item_disciplinary_rod -#####*/ - -bool ItemUse_item_disciplinary_rod(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && - (targets.getUnitTarget()->GetEntry() == 15941 || targets.getUnitTarget()->GetEntry() == 15945) ) - return false; - - player->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,_Item,NULL); - return true; -} - -/*##### # item_nether_wraith_beacon #####*/ @@ -251,265 +160,6 @@ bool ItemUse_item_gor_dreks_ointment(Player *player, Item* _Item, SpellCastTarge } /*##### -# item_muiseks_vessel -#####*/ - -bool ItemUse_item_muiseks_vessel(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - Unit* uTarget = targets.getUnitTarget(); - uint32 itemSpell = _Item->GetProto()->Spells[0].SpellId; - uint32 cEntry = 0; - uint32 cEntry2 = 0; - uint32 cEntry3 = 0; - uint32 cEntry4 = 0; - - if(itemSpell) - { - switch(itemSpell) - { - case 11885: //Wandering Forest Walker - cEntry = 7584; - break; - case 11886: //Owlbeasts - cEntry = 2927; - cEntry2 = 2928; - cEntry3 = 2929; - cEntry4 = 7808; - break; - case 11887: //Freyfeather Hippogryphs - cEntry = 5300; - cEntry2 = 5304; - cEntry3 = 5305; - cEntry4 = 5306; - break; - case 11888: //Sprite Dragon Sprite Darters - cEntry = 5276; - cEntry2 = 5278; - break; - case 11889: //Zapped Land Walker Land Walker Zapped Cliff Giant Cliff Giant - cEntry = 5357; - cEntry2 = 5358; - cEntry3 = 14640; - cEntry4 = 14604; - break; - } - if( uTarget && uTarget->GetTypeId()==TYPEID_UNIT && uTarget->isDead() && - (uTarget->GetEntry()==cEntry || uTarget->GetEntry()==cEntry2 || uTarget->GetEntry()==cEntry3 || uTarget->GetEntry()==cEntry4) ) - { - CAST_CRE(uTarget)->RemoveCorpse(); - return false; - } - } - - WorldPacket data(SMSG_CAST_FAILED, (4+2)); // prepare packet error message - data << uint32(_Item->GetEntry()); // itemId - data << uint8(SPELL_FAILED_BAD_TARGETS); // reason - player->GetSession()->SendPacket(&data); // send message: Invalid target - - player->SendEquipError(EQUIP_ERR_NONE,_Item,NULL); // break spell - return true; -} - -/*##### -# item_inoculating_crystal -#####*/ - -bool ItemUse_item_inoculating_crystal(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && - targets.getUnitTarget()->GetEntry() == 16518 ) - return false; - - WorldPacket data(SMSG_CAST_FAILED, (4+2)); // prepare packet error message - data << uint32(_Item->GetEntry()); // itemId - data << uint8(SPELL_FAILED_BAD_TARGETS); // reason - player->GetSession()->SendPacket(&data); // send message: Invalid target - - player->SendEquipError(EQUIP_ERR_NONE,_Item,NULL); // break spell - return true; -} - -/*##### -# item_razorthorn_flayer_gland -#####*/ - -bool ItemUse_item_razorthorn_flayer_gland(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && - targets.getUnitTarget()->GetEntry() == 24922 ) - return false; - - player->SendEquipError(EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM,_Item,NULL); - return true; -} - -/*##### -# item_tame_beast_rods -#####*/ - -bool ItemUse_item_tame_beast_rods(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - uint32 itemSpell = _Item->GetProto()->Spells[0].SpellId; - uint32 cEntry = 0; - - if(itemSpell) - { - switch(itemSpell) - { - case 19548: cEntry = 1196; break; //Ice Claw Bear - case 19674: cEntry = 1126; break; //Large Crag Boar - case 19687: cEntry = 1201; break; //Snow Leopard - case 19688: cEntry = 2956; break; //Adult Plainstrider - case 19689: cEntry = 2959; break; //Prairie Stalker - case 19692: cEntry = 2970; break; //Swoop - case 19693: cEntry = 1998; break; //Webwood Lurker - case 19694: cEntry = 3099; break; //Dire Mottled Boar - case 19696: cEntry = 3107; break; //Surf Crawler - case 19697: cEntry = 3126; break; //Armored Scorpid - case 19699: cEntry = 2043; break; //Nightsaber Stalker - case 19700: cEntry = 1996; break; //Strigid Screecher - case 30646: cEntry = 17217; break; //Barbed Crawler - case 30653: cEntry = 17374; break; //Greater Timberstrider - case 30654: cEntry = 17203; break; //Nightstalker - case 30099: cEntry = 15650; break; //Crazed Dragonhawk - case 30102: cEntry = 15652; break; //Elder Springpaw - case 30105: cEntry = 16353; break; //Mistbat - } - if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && - targets.getUnitTarget()->GetEntry() == cEntry ) - return false; - } - - WorldPacket data(SMSG_CAST_FAILED, (4+2)); // prepare packet error message - data << uint32(_Item->GetEntry()); // itemId - data << uint8(SPELL_FAILED_BAD_TARGETS); // reason - player->GetSession()->SendPacket(&data); // send message: Invalid target - - player->SendEquipError(EQUIP_ERR_NONE,_Item,NULL); // break spell - return true; -} - -/*##### -# item_protovoltaic_magneto_collector -#####*/ - -bool ItemUse_item_protovoltaic_magneto_collector(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && - targets.getUnitTarget()->GetEntry() == 21729 ) - return false; - - player->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,_Item,NULL); - return true; -} - -/*##### -# item_soul_cannon -#####*/ - -bool ItemUse_item_soul_cannon(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - // allow use - if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && - targets.getUnitTarget()->GetEntry() == 22357 ) - return false; - - // error - player->SendEquipError(EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM,_Item,NULL); - return true; -} - -/*##### -# item_sparrowhawk_net -#####*/ - -bool ItemUse_item_sparrowhawk_net(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && - targets.getUnitTarget()->GetEntry() == 22979 ) - return false; - - player->SendEquipError(EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM,_Item,NULL); - return true; -} - -/*##### -# item_voodoo_charm -#####*/ - -bool ItemUse_item_voodoo_charm(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && targets.getUnitTarget()->isDead() && - targets.getUnitTarget()->GetEntry()==7318 ) - return false; - - WorldPacket data(SMSG_CAST_FAILED, (4+2)); // prepare packet error message - data << uint32(_Item->GetEntry()); // itemId - data << uint8(SPELL_FAILED_BAD_TARGETS); // reason - player->GetSession()->SendPacket(&data); // send message: Invalid target - - player->SendEquipError(EQUIP_ERR_NONE,_Item,NULL); // break spell - return true; -} - -/*##### -# item_vorenthals_presence -#####*/ - -bool ItemUse_item_vorenthals_presence(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - // allow use - if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && - targets.getUnitTarget()->GetEntry() == 20132 ) - return false; - - // error - player->SendEquipError(EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM,_Item,NULL); - return true; -} - -/*##### -# item_yehkinyas_bramble -#####*/ - -bool ItemUse_item_yehkinyas_bramble(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - if (player->GetQuestStatus(3520) == QUEST_STATUS_INCOMPLETE) - { - Unit * unit_target = targets.getUnitTarget(); - if( unit_target && - unit_target->GetTypeId()==TYPEID_UNIT && - unit_target->isDead() && - // cast only on corpse 5307 or 5308 - (unit_target->GetEntry()==5307 || unit_target->GetEntry()==5308) ) - { - CAST_CRE(unit_target)->RemoveCorpse(); // remove corpse for cancelling second use - return false; // all ok - } - } - WorldPacket data(SMSG_CAST_FAILED, (4+2)); // prepare packet error message - data << uint32(10699); // itemId - data << uint8(SPELL_FAILED_BAD_TARGETS); // reason - player->GetSession()->SendPacket(&data); // send message: Bad target - player->SendEquipError(EQUIP_ERR_NONE,_Item,NULL); // break spell - return true; -} - -/*##### -# item_zezzak_shard -#####*/ - -bool ItemUse_item_zezzak_shard(Player *player, Item* _Item, SpellCastTargets const& targets) -{ - if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && - targets.getUnitTarget()->GetEntry() == 19440 ) - return false; - - player->SendEquipError(EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM,_Item,NULL); - return true; -} - -/*##### # item_incendiary_explosives #####*/ @@ -561,36 +211,11 @@ void AddSC_item_scripts() Script *newscript; newscript = new Script; - newscript->Name="item_area_52_special"; - newscript->pItemUse = &ItemUse_item_area_52_special; - newscript->RegisterSelf(); - - newscript = new Script; newscript->Name="item_only_for_flight"; newscript->pItemUse = &ItemUse_item_only_for_flight; newscript->RegisterSelf(); newscript = new Script; - newscript->Name="item_attuned_crystal_cores"; - newscript->pItemUse = &ItemUse_item_attuned_crystal_cores; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_blackwhelp_net"; - newscript->pItemUse = &ItemUse_item_blackwhelp_net; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "item_dart_gun"; - newscript->pItemUse = &ItemUse_item_dart_gun; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_disciplinary_rod"; - newscript->pItemUse = &ItemUse_item_disciplinary_rod; - newscript->RegisterSelf(); - - newscript = new Script; newscript->Name="item_draenei_fishing_net"; newscript->pItemUse = &ItemUse_item_draenei_fishing_net; newscript->RegisterSelf(); @@ -611,61 +236,6 @@ void AddSC_item_scripts() newscript->RegisterSelf(); newscript = new Script; - newscript->Name="item_muiseks_vessel"; - newscript->pItemUse = &ItemUse_item_muiseks_vessel; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_inoculating_crystal"; - newscript->pItemUse = &ItemUse_item_inoculating_crystal; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_razorthorn_flayer_gland"; - newscript->pItemUse = &ItemUse_item_razorthorn_flayer_gland; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_tame_beast_rods"; - newscript->pItemUse = &ItemUse_item_tame_beast_rods; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_protovoltaic_magneto_collector"; - newscript->pItemUse = &ItemUse_item_protovoltaic_magneto_collector; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_soul_cannon"; - newscript->pItemUse = &ItemUse_item_soul_cannon; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_sparrowhawk_net"; - newscript->pItemUse = &ItemUse_item_sparrowhawk_net; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_voodoo_charm"; - newscript->pItemUse = &ItemUse_item_voodoo_charm; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_vorenthals_presence"; - newscript->pItemUse = &ItemUse_item_vorenthals_presence; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_yehkinyas_bramble"; - newscript->pItemUse = &ItemUse_item_yehkinyas_bramble; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_zezzaks_shard"; - newscript->pItemUse = &ItemUse_item_zezzak_shard; - newscript->RegisterSelf(); - - newscript = new Script; newscript->Name="item_incendiary_explosives"; newscript->pItemUse = &ItemUse_item_incendiary_explosives; newscript->RegisterSelf(); diff --git a/src/bindings/scripts/scripts/zone/blackrock_depths/boss_emperor_dagran_thaurissan.cpp b/src/bindings/scripts/scripts/zone/blackrock_depths/boss_emperor_dagran_thaurissan.cpp index 378f8163f9d..0e0639fa14a 100644 --- a/src/bindings/scripts/scripts/zone/blackrock_depths/boss_emperor_dagran_thaurissan.cpp +++ b/src/bindings/scripts/scripts/zone/blackrock_depths/boss_emperor_dagran_thaurissan.cpp @@ -47,6 +47,7 @@ struct TRINITY_DLL_DECL boss_draganthaurissanAI : public ScriptedAI void EnterCombat(Unit *who) { DoScriptText(SAY_AGGRO, m_creature); + m_creature->CallForHelp(VISIBLE_RANGE); } void KilledUnit(Unit* victim) diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/magisters_terrace.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/magisters_terrace.cpp index 18694fe15e6..d9b33bbf4fc 100644 --- a/src/bindings/scripts/scripts/zone/magisters_terrace/magisters_terrace.cpp +++ b/src/bindings/scripts/scripts/zone/magisters_terrace/magisters_terrace.cpp @@ -34,6 +34,7 @@ EndContentData */ enum { SPELL_TRANSFORM_TO_KAEL = 44670, + SPELL_ORB_KILL_CREDIT = 46307, NPC_KAEL = 24848, //human form entry POINT_ID_LAND = 1 }; @@ -72,12 +73,40 @@ struct TRINITY_DLL_DECL npc_kalecgosAI : public ScriptedAI m_uiTransformTimer = MINUTE*IN_MILISECONDS; } + // some targeting issues with the spell, so use this workaround as temporary solution + void DoWorkaroundForQuestCredit() + { + Map* pMap = m_creature->GetMap(); + + if (!pMap || pMap->IsHeroic()) + return; + + Map::PlayerList const &lList = pMap->GetPlayers(); + + if (lList.isEmpty()) + return; + + SpellEntry const* pSpell = GetSpellStore()->LookupEntry(SPELL_ORB_KILL_CREDIT); + + for(Map::PlayerList::const_iterator i = lList.begin(); i != lList.end(); ++i) + { + if (Player* pPlayer = i->getSource()) + { + if (pSpell && pSpell->EffectMiscValue[0]) + pPlayer->KilledMonsterCredit(pSpell->EffectMiscValue[0], 0); + } + } + } + void UpdateAI(const uint32 uiDiff) { if (m_uiTransformTimer) { if (m_uiTransformTimer < uiDiff) { + m_creature->CastSpell(m_creature,SPELL_ORB_KILL_CREDIT,false); + DoWorkaroundForQuestCredit(); + // Transform and update entry, now ready for quest/read gossip m_creature->CastSpell(m_creature,SPELL_TRANSFORM_TO_KAEL,false); m_creature->UpdateEntry(NPC_KAEL); diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp index cf16afba616..e5fda84fa95 100644 --- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp +++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp @@ -24,25 +24,28 @@ EndScriptData */ #include "precompiled.h" #include "def_nexus.h" +enum +{ //Spells -#define SPELL_SPARK_N 47751 -#define SPELL_SPARK_H 57062 -#define SPELL_RIFT_SHIELD 47748 -#define SPELL_CHARGE_RIFT 47747 //Works wrong (affect players, not rifts) -#define SPELL_CREATE_RIFT 47743 //Don't work, using WA -#define SPELL_ARCANE_ATTRACTION 57063 //No idea, when it's used - -#define MOB_CRAZED_MANA_WRAITH 26746 -#define MOB_CHAOTIC_RIFT 26918 -#define SPELL_CHAOTIC_ENERGY_BURST 47688 -#define SPELL_CHARGED_CHAOTIC_ENERGY_BURST 47737 -#define SPELL_ARCANEFORM 48019 //Chaotic Rift visual + SPELL_SPARK_N = 47751, + SPELL_SPARK_H = 57062, + SPELL_RIFT_SHIELD = 47748, + SPELL_CHARGE_RIFT = 47747, //Works wrong (affect players, not rifts) + SPELL_CREATE_RIFT = 47743, //Don't work, using WA + SPELL_ARCANE_ATTRACTION = 57063, //No idea, when it's used + + MOB_CRAZED_MANA_WRAITH = 26746, + MOB_CHAOTIC_RIFT = 26918, + SPELL_CHAOTIC_ENERGY_BURST = 47688, + SPELL_CHARGED_CHAOTIC_ENERGY_BURST = 47737, + SPELL_ARCANEFORM = 48019, //Chaotic Rift visual //Yell -#define SAY_AGGRO -1576010 -#define SAY_DEATH -1576011 -#define SAY_RIFT -1576012 -#define SAY_SHIELD -1576013 + SAY_AGGRO = -1576010, + SAY_DEATH = -1576011, + SAY_RIFT = -1576012, + SAY_SHIELD = -1576013 +}; float RiftLocation[6][3]= { diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp index 02bcebb7b49..6bba503e777 100644 --- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp +++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp @@ -24,22 +24,25 @@ EndScriptData */ #include "precompiled.h" #include "def_nexus.h" +enum +{ //Spells -#define SPELL_FROZEN_PRISON 47854 -#define SPELL_TAIL_SWEEP 50155 -#define SPELL_CRYSTAL_CHAINS 50997 -#define SPELL_ENRAGE 8599 -#define SPELL_CRYSTALFIRE_BREATH_N 48096 -#define SPELL_CRYSTALFIRE_BREATH_H 57091 -#define SPELL_CRYSTALIZE 48179 -#define SPELL_INTENSE_COLD 48094 + SPELL_FROZEN_PRISON = 47854, + SPELL_TAIL_SWEEP = 50155, + SPELL_CRYSTAL_CHAINS = 50997, + SPELL_ENRAGE = 8599, + SPELL_CRYSTALFIRE_BREATH_N = 48096, + SPELL_CRYSTALFIRE_BREATH_H = 57091, + SPELL_CRYSTALIZE = 48179, + SPELL_INTENSE_COLD = 48094, //Yell -#define SAY_AGGRO -1576040 -#define SAY_SLAY -1576041 -#define SAY_ENRAGE -1576042 -#define SAY_DEATH -1576043 -#define SAY_CRYSTAL_NOVA -1576044 + SAY_AGGRO = -1576040, + SAY_SLAY = -1576041, + SAY_ENRAGE = -1576042, + SAY_DEATH = -1576043, + SAY_CRYSTAL_NOVA = -1576044 +}; struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI { diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp index 24482bf837a..5bce7c4c7e3 100644 --- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp +++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp @@ -24,37 +24,38 @@ EndScriptData */ #include "precompiled.h" #include "def_nexus.h" -//Spells - -#define SPELL_ICE_NOVA_N 47772 -#define SPELL_ICE_NOVA_H 56935 -#define SPELL_FIREBOMB_N 47773 -#define SPELL_FIREBOMB_H 56934 -#define SPELL_GRAVITY_WELL 47756 -#define SPELL_TELESTRA_BACK 47714 - -float CenterOfRoom[1][4] = +enum { - {504.80, 89.07, -16.12, 6.27} -}; +//Spells + SPELL_ICE_NOVA_N = 47772, + SPELL_ICE_NOVA_H = 56935, + SPELL_FIREBOMB_N = 47773, + SPELL_FIREBOMB_H = 56934, + SPELL_GRAVITY_WELL = 47756, + SPELL_TELESTRA_BACK = 47714, //At 50% HP - 3 clones, Frost, Fire, Arcane (and in 10% HP in Heroic) -#define MOB_FIRE_MAGUS 26928 -#define MOB_FROST_MAGUS 26930 -#define MOB_ARCANE_MAGUS 26929 + MOB_FIRE_MAGUS = 26928, + MOB_FROST_MAGUS = 26930, + MOB_ARCANE_MAGUS = 26929, -#define SPELL_FIRE_MAGUS_VISUAL 47705 -#define SPELL_FROST_MAGUS_VISUAL 47706 -#define SPELL_ARCANE_MAGUS_VISUAL 47704 + SPELL_FIRE_MAGUS_VISUAL = 47705, + SPELL_FROST_MAGUS_VISUAL = 47706, + SPELL_ARCANE_MAGUS_VISUAL = 47704, //Yell -#define SAY_AGGRO -1576000 -#define SAY_KILL -1576001 -#define SAY_DEATH -1576002 -#define SAY_MERGE -1576003 -#define SAY_SPLIT_1 -1576004 -#define SAY_SPLIT_2 -1576005 + SAY_AGGRO = -1576000, + SAY_KILL = -1576001, + SAY_DEATH = -1576002, + SAY_MERGE = -1576003, + SAY_SPLIT_1 = -1576004, + SAY_SPLIT_2 = -1576005 +}; +float CenterOfRoom[1][4] = +{ + {504.80, 89.07, -16.12, 6.27} +}; struct TRINITY_DLL_DECL boss_magus_telestraAI : public ScriptedAI { diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp index db9bf2317bb..1cda12197a2 100644 --- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp +++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp @@ -24,29 +24,32 @@ EndScriptData */ #include "precompiled.h" #include "def_nexus.h" +enum +{ //Spells -#define SPELL_CRYSTAL_SPIKES_N 47958 //Don't work, using walkaround -#define SPELL_CRYSTAL_SPIKES_H 57082 //Don't work, using walkaround + SPELL_CRYSTAL_SPIKES_N = 47958, //Don't work, using walkaround + SPELL_CRYSTAL_SPIKES_H = 57082, //Don't work, using walkaround //Walkaround for spells Crystal Spikes ----------------- -#define SPELL_CRYSTALL_SPIKE_DAMAGE_N 47944 -#define SPELL_CRYSTALL_SPIKE_DAMAGE_H 57067 -#define SPELL_CRYSTAL_SPIKE_PREVISUAL 50442 -#define MOB_CRYSTAL_SPIKE 27099 + SPELL_CRYSTALL_SPIKE_DAMAGE_N = 47944, + SPELL_CRYSTALL_SPIKE_DAMAGE_H = 57067, + SPELL_CRYSTAL_SPIKE_PREVISUAL = 50442, + MOB_CRYSTAL_SPIKE = 27099, //------------------------------------------------------ -#define SPELL_SPELL_REFLECTION 47981 -#define SPELL_TRAMPLE_N 48016 -#define SPELL_TRAMPLE_H 57066 -#define SPELL_FRENZY 48017 -#define SPELL_SUMMON_CRYSTALLINE_TANGLER 61564 //summons npc 32665 -#define MOB_CRYSTALLINE_TANGLER 32665 -#define SPELL_ROOTS 28858 //proper spell id is unknown + SPELL_SPELL_REFLECTION = 47981, + SPELL_TRAMPLE_N = 48016, + SPELL_TRAMPLE_H = 57066, + SPELL_FRENZY = 48017, + SPELL_SUMMON_CRYSTALLINE_TANGLER = 61564, //summons npc 32665 + MOB_CRYSTALLINE_TANGLER = 32665, + SPELL_ROOTS = 28858, //proper spell id is unknown //Yell -#define SAY_AGGRO -1576020 -#define SAY_DEATH -1576021 -#define SAY_REFLECT -1576022 -#define SAY_CRYSTAL_SPIKES -1576023 -#define SAY_KILL -1576024 + SAY_AGGRO = -1576020, + SAY_DEATH = -1576021, + SAY_REFLECT = -1576022, + SAY_CRYSTAL_SPIKES = -1576023, + SAY_KILL = -1576024 +}; #define SPIKE_DISTANCE 5.0f diff --git a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_mograine_and_whitemane.cpp b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_mograine_and_whitemane.cpp index 85f74cf2a9b..c4d062bdfcd 100644 --- a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_mograine_and_whitemane.cpp +++ b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_mograine_and_whitemane.cpp @@ -99,6 +99,8 @@ struct TRINITY_DLL_DECL boss_scarlet_commander_mograineAI : public ScriptedAI { DoScriptText(SAY_MO_AGGRO, m_creature); DoCast(m_creature,SPELL_RETRIBUTIONAURA); + + m_creature->CallForHelp(VISIBLE_RANGE); } void KilledUnit(Unit* pVictim) @@ -235,6 +237,14 @@ struct TRINITY_DLL_DECL boss_high_inquisitor_whitemaneAI : public ScriptedAI m_pInstance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, NOT_STARTED); } + void AttackStart(Unit* pWho) + { + if (m_pInstance && m_pInstance->GetData(TYPE_MOGRAINE_AND_WHITE_EVENT) == NOT_STARTED) + return; + + ScriptedAI::AttackStart(pWho); + } + void EnterCombat(Unit* pWho) { DoScriptText(SAY_WH_INTRO, m_creature); @@ -286,14 +296,14 @@ struct TRINITY_DLL_DECL boss_high_inquisitor_whitemaneAI : public ScriptedAI { Creature* pTarget = NULL; - if (!m_creature->HasAuraState(AURA_STATE_HEALTH_ABOVE_75_PERCENT)) + if (m_creature->GetHealth() <= m_creature->GetMaxHealth()*0.75f) pTarget = m_creature; if (m_pInstance) { if (Creature* pMograine = (Creature*)Unit::GetUnit((*m_creature), m_pInstance->GetData64(DATA_MOGRAINE))) { - if (pMograine->isAlive() && !pMograine->HasAuraState(AURA_STATE_HEALTH_ABOVE_75_PERCENT)) + if (pMograine->isAlive() && pMograine->GetHealth() <= pMograine->GetMaxHealth()*0.75f) pTarget = pMograine; } } |
