HellfirePeninsulaBannerAI(GameObjectPointer go) : GameObjectAIScript(go) { m_bannerStatus = BANNER_STATUS_NEUTRAL; Status = 50; switch(go->GetEntry()) { case TOWER_WEST: ControlPointName = "The Stadium"; towerid = TOWER_STADIUM; break; case TOWER_NORTH: ControlPointName = "The Overlook"; towerid = TOWER_OVERLOOK; break; case TOWER_SOUTH: ControlPointName = "Broken Hill"; towerid = TOWER_BROKENHILL; break; default: ControlPointName = "Unknown"; break; } }
ZangarmarshBannerAI(GameObjectPointer go) : GameObjectAIScript(go) { m_bannerStatus = BANNER_STATUS_NEUTRAL; Status = 50; switch(go->GetEntry()) { case G_TOWER_EAST: ControlPointName = "East Beacon"; towerid = TOWER_EAST; break; case G_TOWER_WEST: ControlPointName = "West Beacon"; towerid = TOWER_WEST; break; default: ControlPointName = "Unknown"; break; } }
explicit TerokkarForestBannerAI(GameObjectPointer go) : GameObjectAIScript(go) { map<uint32, uint32> StoredPlayers; uint32 Status; const char* ControlPointName; uint32 towerid; uint32 m_bannerStatus; m_bannerStatus = BANNER_STATUS_NEUTRAL; Status = 50; switch(go->GetEntry()) { case G_TOWER_1: ControlPointName = "Tower 1"; towerid = TOWER_1; break; case G_TOWER_2: ControlPointName = "Tower 2"; towerid = TOWER_2; break; case G_TOWER_3: ControlPointName = "Tower 3"; towerid = TOWER_3; break; case G_TOWER_4: ControlPointName = "Tower 4"; towerid = TOWER_4; break; case G_TOWER_5: ControlPointName = "Tower 5"; towerid = TOWER_5; break; default: ControlPointName = "Unknown"; break; } }
bool ChatHandler::HandleGODelete(const char *args, WorldSession *m_session) { GameObjectPointer GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } if(GObj->m_spawn != 0 && GObj->m_spawn->entry == GObj->GetEntry()) { uint32 cellx=float2int32(((_maxX-GObj->m_spawn->x)/_cellSize)); uint32 celly=float2int32(((_maxY-GObj->m_spawn->y)/_cellSize)); GObj->DeleteFromDB(); if(cellx < _sizeX && celly < _sizeY) { CellSpawns * c = GObj->GetMapMgr()->GetBaseMap()->GetSpawnsListAndCreate(cellx, celly); for(GOSpawnList::iterator itr = c->GOSpawns.begin(); itr != c->GOSpawns.end(); ++itr) { if((*itr) == GObj->m_spawn) { c->GOSpawns.erase(itr); break; } } delete GObj->m_spawn; GObj->m_spawn = NULL; } } GObj->Despawn(0); GObj->Destructor(); GObj = NULLGOB; m_session->GetPlayer()->m_GM_SelectedGO = NULLGOB; return true; }
bool ChatHandler::HandleGOInfo(const char *args, WorldSession *m_session) { std::stringstream sstext; GameObjectInfo *GOInfo = NULL; GameObjectPointer GObj = NULLGOB; GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } sstext << MSG_COLOR_SUBWHITE << "Informations:\n" << MSG_COLOR_GREEN << "Entry: " << MSG_COLOR_LIGHTBLUE << GObj->GetEntry() << "\n" << MSG_COLOR_GREEN << "Model: " << MSG_COLOR_LIGHTBLUE << GObj->GetUInt32Value(GAMEOBJECT_DISPLAYID)<< "\n" << MSG_COLOR_GREEN << "State: " << MSG_COLOR_LIGHTBLUE << (uint32)GObj->GetByte(GAMEOBJECT_BYTES_1, GAMEOBJECT_BYTES_STATE)<< "\n" << MSG_COLOR_GREEN << "flags: " << MSG_COLOR_LIGHTBLUE << GObj->GetUInt32Value(GAMEOBJECT_FLAGS)<< "\n" << MSG_COLOR_GREEN << "dynflags:" << MSG_COLOR_LIGHTBLUE << GObj->GetUInt32Value(GAMEOBJECT_DYNAMIC) << "\n" << MSG_COLOR_GREEN << "faction: " << MSG_COLOR_LIGHTBLUE << GObj->GetUInt32Value(GAMEOBJECT_FACTION)<< "\n" << MSG_COLOR_GREEN << "Type: " << MSG_COLOR_LIGHTBLUE << (uint32)GObj->GetByte(GAMEOBJECT_BYTES_1, GAMEOBJECT_BYTES_TYPE_ID) << " -- "; switch( GObj->GetByte(GAMEOBJECT_BYTES_1, GAMEOBJECT_BYTES_TYPE_ID) ) { case GAMEOBJECT_TYPE_DOOR: sstext << "Door"; break; case GAMEOBJECT_TYPE_BUTTON: sstext << "Button"; break; case GAMEOBJECT_TYPE_QUESTGIVER: sstext << "Quest Giver"; break; case GAMEOBJECT_TYPE_CHEST: sstext << "Chest"; break; case GAMEOBJECT_TYPE_BINDER: sstext << "Binder"; break; case GAMEOBJECT_TYPE_GENERIC: sstext << "Generic"; break; case GAMEOBJECT_TYPE_TRAP: sstext << "Trap"; break; case GAMEOBJECT_TYPE_CHAIR: sstext << "Chair"; break; case GAMEOBJECT_TYPE_SPELL_FOCUS: sstext << "Spell Focus"; break; case GAMEOBJECT_TYPE_TEXT: sstext << "Text"; break; case GAMEOBJECT_TYPE_GOOBER: sstext << "Goober"; break; case GAMEOBJECT_TYPE_TRANSPORT: sstext << "Transport"; break; case GAMEOBJECT_TYPE_AREADAMAGE: sstext << "Area Damage"; break; case GAMEOBJECT_TYPE_CAMERA: sstext << "Camera"; break; case GAMEOBJECT_TYPE_MAP_OBJECT: sstext << "Map Object"; break; case GAMEOBJECT_TYPE_MO_TRANSPORT: sstext << "Mo Transport"; break; case GAMEOBJECT_TYPE_DUEL_ARBITER: sstext << "Duel Arbiter"; break; case GAMEOBJECT_TYPE_FISHINGNODE: sstext << "Fishing Node"; break; case GAMEOBJECT_TYPE_RITUAL: sstext << "Ritual"; break; case GAMEOBJECT_TYPE_MAILBOX: sstext << "Mailbox"; break; case GAMEOBJECT_TYPE_AUCTIONHOUSE: sstext << "Auction House"; break; case GAMEOBJECT_TYPE_GUARDPOST: sstext << "Guard Post"; break; case GAMEOBJECT_TYPE_SPELLCASTER: sstext << "Spell Caster"; break; case GAMEOBJECT_TYPE_MEETINGSTONE: sstext << "Meeting Stone"; break; case GAMEOBJECT_TYPE_FLAGSTAND: sstext << "Flag Stand"; break; case GAMEOBJECT_TYPE_FISHINGHOLE: sstext << "Fishing Hole"; break; case GAMEOBJECT_TYPE_FLAGDROP: sstext << "Flag Drop"; break; default: sstext << "Unknown."; break; } sstext << "\n" << MSG_COLOR_GREEN << "Distance: " << MSG_COLOR_LIGHTBLUE << GObj->CalcDistance(m_session->GetPlayer()); GOInfo = GameObjectNameStorage.LookupEntry(GObj->GetEntry()); if( !GOInfo ) { RedSystemMessage(m_session, "This GameObject doesn't have template, you won't be able to get some informations nor to spawn a GO with this entry."); sstext << "|r"; SystemMessage(m_session, sstext.str().c_str()); return true; } sstext << "\n" << MSG_COLOR_GREEN << "Name: " << MSG_COLOR_LIGHTBLUE << GOInfo->Name << "\n" << MSG_COLOR_GREEN << "Size: " << MSG_COLOR_LIGHTBLUE << GObj->GetFloatValue(OBJECT_FIELD_SCALE_X) << "\n" << "|r"; SystemMessage(m_session, sstext.str().c_str()); return true; }
bool ChatHandler::HandleGOSpawn(const char *args, WorldSession *m_session) { std::stringstream sstext; char* pEntryID = strtok((char*)args, " "); if (!pEntryID) return false; uint32 EntryID = atoi(pEntryID); bool Save = false; char* pSave = strtok(NULL, " "); if (pSave) Save = (atoi(pSave)>0?true:false); OUT_DEBUG("Spawning GameObject By Entry '%u'", EntryID); sstext << "Spawning GameObject By Entry '" << EntryID << "'" << '\0'; SystemMessage(m_session, sstext.str().c_str()); GameObjectPointer go = m_session->GetPlayer()->GetMapMgr()->CreateGameObject(EntryID); if(go == NULL) { sstext << "GameObject Info '" << EntryID << "' Not Found" << '\0'; SystemMessage(m_session, sstext.str().c_str()); return true; } PlayerPointer chr = m_session->GetPlayer(); uint32 mapid = chr->GetMapId(); float x = chr->GetPositionX(); float y = chr->GetPositionY(); float z = chr->GetPositionZ(); float o = chr->GetOrientation(); go->SetInstanceID(chr->GetInstanceID()); go->CreateFromProto(EntryID,mapid,x,y,z,o,0.0f,0.0f,0.0f,0.0f); go->SetRotation(o); go->PushToWorld(m_session->GetPlayer()->GetMapMgr()); // Create sapwn instance GOSpawn * gs = new GOSpawn; gs->entry = go->GetEntry(); gs->facing = go->GetOrientation(); gs->faction = go->GetUInt32Value(GAMEOBJECT_FACTION); gs->flags = go->GetUInt32Value(GAMEOBJECT_FLAGS); gs->id = objmgr.GenerateGameObjectSpawnID(); gs->orientation1 = go->GetFloatValue(GAMEOBJECT_ROTATION); gs->orientation2 = go->GetFloatValue(GAMEOBJECT_ROTATION_01); gs->orientation3 = go->GetFloatValue(GAMEOBJECT_ROTATION_02); gs->orientation4 = go->GetFloatValue(GAMEOBJECT_ROTATION_03); gs->scale = go->GetFloatValue(OBJECT_FIELD_SCALE_X); gs->x = go->GetPositionX(); gs->y = go->GetPositionY(); gs->z = go->GetPositionZ(); gs->state = go->GetByte(GAMEOBJECT_BYTES_1, GAMEOBJECT_BYTES_STATE); //gs->stateNpcLink = 0; uint32 cx = m_session->GetPlayer()->GetMapMgr()->GetPosX(m_session->GetPlayer()->GetPositionX()); uint32 cy = m_session->GetPlayer()->GetMapMgr()->GetPosY(m_session->GetPlayer()->GetPositionY()); m_session->GetPlayer()->GetMapMgr()->GetBaseMap()->GetSpawnsListAndCreate(cx,cy)->GOSpawns.push_back(gs); go->m_spawn = gs; //go->AddToWorld(); if(Save == true) { // If we're saving, create template and add index go->SaveToDB(); } return true; }
bool ChatHandler::HandleGOSelect(const char *args, WorldSession *m_session) { GameObjectPointer GObj = NULLGOB; unordered_set<ObjectPointer >::iterator Itr = m_session->GetPlayer()->GetInRangeSetBegin(); unordered_set<ObjectPointer >::iterator Itr2 = m_session->GetPlayer()->GetInRangeSetEnd(); float cDist = 9999.0f; float nDist = 0.0f; bool bUseNext = false; if(args) { if(args[0] == '1') { if(m_session->GetPlayer()->m_GM_SelectedGO == NULL) bUseNext = true; for(;;Itr++) { if(Itr == Itr2 && GObj == NULL && bUseNext) Itr = m_session->GetPlayer()->GetInRangeSetBegin(); else if(Itr == Itr2) break; if((*Itr)->GetTypeId() == TYPEID_GAMEOBJECT) { // Find the current go, move to the next one if(bUseNext) { // Select the first. GObj = TO_GAMEOBJECT(*Itr); break; } else { if(((*Itr) == m_session->GetPlayer()->m_GM_SelectedGO)) { // Found him. Move to the next one, or beginning if we're at the end bUseNext = true; } } } } } } if(!GObj) { for( ; Itr != Itr2; Itr++ ) { if( (*Itr)->GetTypeId() == TYPEID_GAMEOBJECT ) { if( (nDist = m_session->GetPlayer()->CalcDistance( *Itr )) < cDist ) { cDist = nDist; nDist = 0.0f; GObj = TO_GAMEOBJECT(*Itr); } } } } if( GObj == NULL ) { RedSystemMessage(m_session, "No inrange GameObject found."); return true; } m_session->GetPlayer()->m_GM_SelectedGO = GObj; GreenSystemMessage(m_session, "Selected GameObject [ %s ] which is %.3f meters away from you.", GameObjectNameStorage.LookupEntry(GObj->GetEntry())->Name, m_session->GetPlayer()->CalcDistance(GObj)); return true; }