*GO - Southfury Moonstone script, from SD2, patch by manuel

*Fix Auctionhouse CPU usage during item expire check, by MrSmite

--HG--
branch : trunk
This commit is contained in:
maximius
2009-09-19 16:01:08 -07:00
parent 22869c7a47
commit ec054272e1
6 changed files with 53 additions and 3 deletions

View File

@@ -1158,6 +1158,7 @@ UPDATE `creature_template` SET `ScriptName`='npc_elder_kuruti' WHERE `entry`=181
UPDATE `creature_template` SET `ScriptName`='npc_mortog_steamhead' WHERE `entry`=23373;
UPDATE `creature_template` SET `ScriptName`='npc_kayra_longmane' WHERE `entry`=17969;
UPDATE `creature_template` SET `ScriptName`='npc_timothy_daniels' WHERE `entry`=18019;
UPDATE `gameobject_template` SET `ScriptName`='go_southfury_moonstone' WHERE `entry`=185566;
/* ZUL'AMAN */
UPDATE `instance_template` SET `script`='instance_zulaman' WHERE `map`=568;

View File

@@ -0,0 +1,2 @@
UPDATE `gameobject_template` SET `ScriptName`='go_southfury_moonstone' WHERE `entry`=185566;

View File

@@ -31,6 +31,7 @@ go_ethereum_prison
go_ethereum_stasis
go_sacred_fire_of_life
go_shrine_of_the_birds
go_southfury_moonstone
go_field_repair_bot_74A
go_orb_of_command
go_resonite_cask
@@ -348,6 +349,29 @@ bool GOHello_go_shrine_of_the_birds(Player* pPlayer, GameObject* pGo)
return false;
}
/*######
## go_southfury_moonstone
######*/
enum
{
NPC_RIZZLE = 23002,
SPELL_BLACKJACK = 39865, //stuns player
SPELL_SUMMON_RIZZLE = 39866
};
bool GOHello_go_southfury_moonstone(Player* pPlayer, GameObject* pGo)
{
//implicitTarget=48 not implemented as of writing this code, and manual summon may be just ok for our purpose
//pPlayer->CastSpell(pPlayer,SPELL_SUMMON_RIZZLE,false);
if (Creature* pCreature = pPlayer->SummonCreature(NPC_RIZZLE, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0))
pCreature->CastSpell(pPlayer,SPELL_BLACKJACK,false);
return false;
}
/*######
## go_tele_to_dalaran_crystal
######*/
@@ -460,6 +484,11 @@ void AddSC_go_scripts()
newscript->pGOHello = &GOHello_go_shrine_of_the_birds;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "go_southfury_moonstone";
newscript->pGOHello = &GOHello_go_southfury_moonstone;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name="go_tablet_of_madness";
newscript->pGOHello = &GOHello_go_tablet_of_madness;

View File

@@ -537,8 +537,16 @@ void AuctionHouseObject::Update()
{
time_t curTime = sWorld.GetGameTime();
///- Handle expired auctions
AuctionEntryMap::iterator next;
for (AuctionEntryMap::iterator itr = AuctionsMap.begin(); itr != AuctionsMap.end();itr = next)
// reset next if at end of map
if (next == AuctionsMap.end())
next = AuctionsMap.begin();
uint32 loopBreaker = 0;
// Initialize itr with next. next is stored for future calls to Update() after
// 50 items are checked
for (AuctionEntryMap::const_iterator itr = next; itr != AuctionsMap.end(); itr = next)
{
next = itr;
++next;
@@ -565,6 +573,12 @@ void AuctionHouseObject::Update()
delete itr->second;
RemoveAuction(itr->first);
}
// only check 50 items per update to not peg the CPU
++loopBreaker;
if (loopBreaker > 50)
break;
}
}

View File

@@ -76,7 +76,8 @@ struct AuctionEntry
class AuctionHouseObject
{
public:
AuctionHouseObject() {}
// Initialize storage
AuctionHouseObject() { next = AuctionsMap.begin(); }
~AuctionHouseObject()
{
for (AuctionEntryMap::iterator itr = AuctionsMap.begin(); itr != AuctionsMap.end(); ++itr)
@@ -118,6 +119,9 @@ class AuctionHouseObject
private:
AuctionEntryMap AuctionsMap;
// storage for "next" auction item for next Update()
AuctionEntryMap::const_iterator next;
};
class AuctionHouseMgr