本文整理汇总了C++中Creature::EventModelChange方法的典型用法代码示例。如果您正苦于以下问题:C++ Creature::EventModelChange方法的具体用法?C++ Creature::EventModelChange怎么用?C++ Creature::EventModelChange使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Creature
的用法示例。
在下文中一共展示了Creature::EventModelChange方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DoScript
void GameEventMgr::DoScript(uint32 event_id, uint32 sql_id, uint8 type, uint32 data1, uint32 data2, uint32 data3, char * say, uint32 mapid)
{
MapMgr * mapmgr = sInstanceMgr.GetMapMgr( mapid );
if( mapmgr == NULL )
return;
Creature *c;
GameObject *go;
if(type < GAMEOBJECT_CHANGE_STATE)
{
c = mapmgr->GetSqlIdCreature( sql_id );
if( c == NULL ) return;
}
else
{
go = mapmgr->GetSqlIdGameObject( sql_id );
if( go == NULL ) return;
}
// create backup for original values
EventScript * es = new EventScript();
es->sql_id = sql_id;
es->mapid = mapid;
es->type = type;
es->data_1 = 0; // null them out first!
es->data_2 = 0;
es->data_3 = 0;
if( c && strlen(say) )
{
c->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, say);
}
switch( type )
{
case CREATURE_CHANGE_SCRIPTED_CHANGE:
{
CALL_SCRIPT_EVENT(c, GameEventStart)(event_id);
} break;
case CREATURE_CHANGE_EMOTE:
{
// do not backup one-shoot emote
c->Emote(EmoteType(data1));
// backup emote state first
es->data_2 = c->GetEmoteState();
c->SetEmoteState(data2);
// backup stand state
es->data_3 = static_cast<uint32>(c->GetStandState());
c->SetStandState(static_cast<uint8>(data3));
} break;
case CREATURE_CHANGE_DISPLAYID:
{
es->data_1 = c->GetDisplayId();
c->SetDisplayId(data1);
es->data_2 = c->GetNativeDisplayId();
c->SetNativeDisplayId(data2);
es->data_3 = c->GetMount();
c->SetMount(data3);
c->EventModelChange();
} break;
case CREATURE_CHANGE_WEAPON:
{
es->data_1 = c->GetEquippedItem(MELEE);
es->data_2 = c->GetEquippedItem(OFFHAND);
es->data_3 = c->GetEquippedItem(RANGED);
c->SetEquippedItem(MELEE, data1);
c->SetEquippedItem(OFFHAND, data2);
c->SetEquippedItem(RANGED, data3);
} break;
case CREATURE_CHANGE_REACT:
{
es->data_1 = c->GetFaction();
c->SetFaction(data1);
es->data_2 = c->GetUInt32Value(UNIT_NPC_FLAGS);
c->SetUInt32Value(UNIT_NPC_FLAGS, data2);
es->data_3 = c->GetUInt32Value(UNIT_FIELD_FLAGS);
c->SetUInt32Value(UNIT_FIELD_FLAGS, data3);
} break;
case CREATURE_CAST_SPELL_ON_EVENT_START:
{
SpellEntry * sp = dbcSpell.LookupEntryForced( data1 );
if( sp == NULL )
return;
SpellCastTime * casttime = dbcSpellCastTime.LookupEntry(sp->CastingTimeIndex);
Spell * spell = sSpellFactoryMgr.NewSpell(c, sp, false, NULL);
SpellCastTargets t(0);
// force self casting
if( data2 )
{
t.m_unitTarget = c->GetGUID();
//.........这里部分代码省略.........
示例2: ScriptedBackToOrig
void GameEventMgr::ScriptedBackToOrig(uint32 event_id)
{
GameEventScriptMap::iterator event_backup = m_GameEventScriptBackup.find(event_id);
if( event_backup == m_GameEventScriptBackup.end() )
return;
set<EventScript*>::iterator itr = event_backup->second.begin();
for( itr; itr != event_backup->second.end(); itr++ )
{
uint32 mapid = (*itr)->mapid;
uint32 sql_id = (*itr)->sql_id;
uint8 type = (*itr)->type;
uint32 data1 = (*itr)->data_1;
uint32 data2 = (*itr)->data_2;
uint32 data3 = (*itr)->data_3;
MapMgr * mapmgr = sInstanceMgr.GetMapMgr( mapid );
if( mapmgr == NULL )
return;
Creature *c;
GameObject *go;
if(type < GAMEOBJECT_CHANGE_STATE)
{
c = mapmgr->GetSqlIdCreature( sql_id );
if( c == NULL ) return;
}
else
{
go = mapmgr->GetSqlIdGameObject( sql_id );
if( go == NULL ) return;
}
switch( type )
{
case CREATURE_CHANGE_SCRIPTED_CHANGE:
{
CALL_SCRIPT_EVENT(c, GameEventFinish)(event_id);
} break;
case CREATURE_CHANGE_EMOTE:
{
c->Emote(EmoteType(data1));
c->SetEmoteState(data2);
c->SetStandState(static_cast<uint8>(data3));
} break;
case CREATURE_CHANGE_DISPLAYID:
{
c->SetDisplayId(data1);
c->SetNativeDisplayId(data2);
c->SetMount(data3);
c->EventModelChange();
} break;
case CREATURE_CHANGE_WEAPON:
{
c->SetEquippedItem(MELEE, data1);
c->SetEquippedItem(OFFHAND, data2);
c->SetEquippedItem(RANGED, data3);
} break;
case CREATURE_CHANGE_REACT:
{
c->SetFaction(data1);
c->SetUInt32Value(UNIT_NPC_FLAGS, data2);
c->SetUInt32Value(UNIT_FIELD_FLAGS, data3);
} break;
case CREATURE_CAST_SPELL_ON_EVENT_STOP:
{
SpellEntry * sp = dbcSpell.LookupEntryForced( data1 );
if( sp == NULL )
return;
SpellCastTime * casttime = dbcSpellCastTime.LookupEntry(sp->CastingTimeIndex);
Spell * spell = sSpellFactoryMgr.NewSpell(c, sp, false, NULL);
SpellCastTargets t(0);
// force self casting
if( data2 )
{
t.m_unitTarget = c->GetGUID();
}
else
{
spell->GenerateTargets(&t);
spell->m_targets = t;
}
if (objmgr.IsSpellDisabled(spell->GetProto()->Id) || spell->CanCast(false) != SPELL_CANCAST_OK || !spell->HasPower() || c->m_silenced || c->IsStunned() || c->IsFeared() )
{
delete spell;
return;
}
if( casttime->CastTime > 0 )
c->GetAIInterface()->StopMovement(casttime->CastTime);
//.........这里部分代码省略.........
示例3: showWayPoints
bool AI_Movement::showWayPoints(Player* pPlayer, bool Backwards)
{
ASSERT(m_Unit != NULL);
if(!m_waypoints)
return false;
//wpid of 0 == all
WayPointMap::const_iterator itr;
if(m_WayPointsShowing == true)
return false;
m_WayPointsShowing = true;
WayPoint* wp = NULL;
for (itr = m_waypoints->begin(); itr != m_waypoints->end(); itr++)
{
if( (*itr) != NULL )
{
wp = *itr;
//Create
Creature* pWayPoint = NULLCREATURE;
pWayPoint = new Creature((uint64)HIGHGUID_TYPE_WAYPOINT << 32 | wp->id);
pWayPoint->Init();
pWayPoint->CreateWayPoint(wp->id, pPlayer->GetMapId(), wp->x, wp->y, wp->z, wp->orientation);
pWayPoint->SetUInt32Value(OBJECT_FIELD_ENTRY, 300000);
pWayPoint->SetFloatValue(OBJECT_FIELD_SCALE_X, 0.5f);
bool ModelChange = false;
if(!Backwards)
{
if(wp->forwardInfo)
{
uint32 DisplayID = (wp->forwardInfo->SkinID == 0) ? m_Unit->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID) : wp->forwardInfo->SkinID;
if(DisplayID != m_Unit->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID))
ModelChange = true;
pWayPoint->SetUInt32Value(UNIT_FIELD_DISPLAYID, DisplayID);
pWayPoint->SetUInt32Value(UNIT_NPC_EMOTESTATE, wp->forwardInfo->EmoteID);
pWayPoint->SetStandState(wp->forwardInfo->StandState);
}
}
else
{
if(wp->backwardInfo)
{
uint32 DisplayID = (wp->backwardInfo->SkinID == 0) ? m_Unit->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID) : wp->backwardInfo->SkinID;
if(DisplayID != m_Unit->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID))
ModelChange = true;
pWayPoint->SetUInt32Value(UNIT_FIELD_DISPLAYID, DisplayID);
pWayPoint->SetUInt32Value(UNIT_NPC_EMOTESTATE, wp->backwardInfo->EmoteID);
pWayPoint->SetStandState(wp->backwardInfo->StandState);
}
}
if(ModelChange)
pWayPoint->EventModelChange();
pWayPoint->SetUInt32Value(UNIT_FIELD_LEVEL, wp->id);
pWayPoint->SetUInt32Value(UNIT_NPC_FLAGS, 0);
// pWayPoint->SetUInt32Value(UNIT_FIELD_AURA+32, 8326); //invisable & deathworld look
pWayPoint->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE , pPlayer->GetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE));
pWayPoint->SetUInt32Value(UNIT_FIELD_HEALTH, 1);
pWayPoint->SetUInt32Value(UNIT_FIELD_MAXHEALTH, 1);
pWayPoint->SetUInt32Value(UNIT_FIELD_STAT0, wp->flags);
//Create on client
ByteBuffer buf(2500);
uint32 count = pWayPoint->BuildCreateUpdateBlockForPlayer(&buf, pPlayer);
pPlayer->PushCreationData(&buf, count);
//root the object
WorldPacket data1;
data1.Initialize(SMSG_FORCE_MOVE_ROOT);
data1 << pWayPoint->GetNewGUID();
pPlayer->GetSession()->SendPacket( &data1 );
//Cleanup
delete pWayPoint;
pWayPoint = NULL;
}
}
return true;
}