Creature * MapScriptInterface::SpawnCreature(CreatureSpawn * sp, bool AddToWorld) { if(!sp) return NULL; if( mapMgr._shutdown == true ) return NULL; CreatureProto * proto = CreatureProtoStorage.LookupEntry(sp->entry); CreatureInfo * info = CreatureNameStorage.LookupEntry(sp->entry); if(proto == 0 || info == 0) { return 0; } uint32 Gender = info->GenerateModelId(&sp->displayid); Creature * p = this->mapMgr.CreateCreature(sp->entry); ASSERT(p); p->Load(sp, (uint32)NULL, NULL); p->setGender(Gender); p->spawnid = 0; p->m_spawn = 0; if (AddToWorld) p->PushToWorld(&mapMgr); return p; }
Creature* MapScriptInterface::SpawnCreature(uint32 Entry, float cX, float cY, float cZ, float cO, bool AddToWorld, bool tmplate, uint32 Misc1, uint32 Misc2, uint32 phase) { CreatureProto* proto = CreatureProtoStorage.LookupEntry(Entry); CreatureInfo* info = CreatureNameStorage.LookupEntry(Entry); if(proto == NULL || info == NULL) { return 0; } CreatureSpawn* sp = new CreatureSpawn; sp->entry = Entry; uint32 DisplayID = 0; uint8 Gender = info->GenerateModelId(&DisplayID); sp->displayid = DisplayID; sp->form = 0; sp->id = 0; sp->movetype = 0; sp->x = cX; sp->y = cY; sp->z = cZ; sp->o = cO; sp->emote_state = 0; sp->flags = 0; sp->factionid = proto->Faction; sp->bytes0 = 0; sp->bytes1 = 0; sp->bytes2 = 0; //sp->respawnNpcLink = 0; sp->stand_state = 0; sp->death_state = 0; sp->channel_target_creature = sp->channel_target_go = sp->channel_spell = 0; sp->MountedDisplayID = 0; sp->Item1SlotDisplay = 0; sp->Item2SlotDisplay = 0; sp->Item3SlotDisplay = 0; sp->CanFly = 0; sp->phase = phase; Creature* p = this->mapMgr.CreateCreature(Entry); ARCEMU_ASSERT(p != NULL); p->Load(sp, (uint32)NULL, NULL); p->setGender(Gender); p->spawnid = 0; p->m_spawn = 0; delete sp; if(AddToWorld) p->PushToWorld(&mapMgr); return p; }
bool ChatHandler::HandleVehicleSpawn(const char * args, WorldSession * m_session) { uint32 entry = atol(args); uint8 gender = 0; if(entry == 0) return false; CreatureProto * proto = CreatureProtoStorage.LookupEntry(entry); CreatureInfo * info = CreatureNameStorage.LookupEntry(entry); if(proto == 0 || info == 0) { RedSystemMessage(m_session, "Invalid entry id."); return true; } CreatureSpawn * sp = new CreatureSpawn; gender = info->GenerateModelId(&sp->displayid); sp->entry = entry; sp->entry = entry; sp->form = 0; sp->id = objmgr.GenerateCreatureSpawnID(); sp->movetype = 0; sp->x = m_session->GetPlayer()->GetPositionX(); sp->y = m_session->GetPlayer()->GetPositionY(); sp->z = m_session->GetPlayer()->GetPositionZ(); sp->o = m_session->GetPlayer()->GetOrientation(); sp->emote_state = 0; sp->flags = 0; sp->factionid = proto->Faction; sp->bytes0 = sp->setbyte(0,2,gender); sp->bytes1 = 0; sp->bytes2 = 0; //sp->respawnNpcLink = 0; sp->stand_state = 0; sp->channel_target_creature = sp->channel_target_go = sp->channel_spell = 0; sp->MountedDisplayID = 0; sp->Item1SlotDisplay = 0; sp->Item2SlotDisplay = 0; sp->Item3SlotDisplay = 0; Creature * p = m_session->GetPlayer()->GetMapMgr()->CreateCreature(entry, true); Arcemu::Util::ARCEMU_ASSERT( p != NULL ); p->Load(sp, (uint32)NULL, NULL); p->m_loadedFromDB = true; p->PushToWorld(m_session->GetPlayer()->GetMapMgr()); uint32 x = m_session->GetPlayer()->GetMapMgr()->GetPosX(m_session->GetPlayer()->GetPositionX()); uint32 y = m_session->GetPlayer()->GetMapMgr()->GetPosY(m_session->GetPlayer()->GetPositionY()); // Add spawn to map m_session->GetPlayer()->GetMapMgr()->GetBaseMap()->GetSpawnsListAndCreate( x, y)->CreatureSpawns.push_back(sp); MapCell * mCell = m_session->GetPlayer()->GetMapMgr()->GetCell( x, y ); if( mCell != NULL ) mCell->SetLoaded(); BlueSystemMessage(m_session, "Spawned a vehicle `%s` with entry %u at %f %f %f on map %u", info->Name, entry, sp->x, sp->y, sp->z, m_session->GetPlayer()->GetMapId()); sGMLog.writefromsession(m_session, "spawned a %s at %u %f %f %f", info->Name, m_session->GetPlayer()->GetMapId(),sp->x,sp->y,sp->z); return true; }