// Prints information about all of the universes in the array // to a given player. void CHSUniverseDBDef::PrintInfo(int player) { if (m_mapUniverses.empty()) { hsInterface.Notify(player, "No universes currently loaded."); return; } hsInterface.Notify(player, "[Room#] Name Objects Active"); CSTLUniverseMap::iterator iter; for (iter = m_mapUniverses.begin(); iter != m_mapUniverses.end(); iter++) { CHSUniverse *pUniverse = iter->second; if (pUniverse) { hsInterface.Notify(player, hsInterface. HSPrintf("[%5d] %-32s%4d %4d", pUniverse->GetID(), pUniverse->GetName(), pUniverse->GetNumObjects(), pUniverse->GetNumActiveObjects())); } } }
void CHSHandlerUniverse::HandleGetUniverseList(CHSPacket * pPacket) { hs_log("ADMIN SERVER: Handle packet GetUniverseList"); CHSPGetUniverseList *cmdGetList = static_cast < CHSPGetUniverseList * >(pPacket); // Create a class list packet as a response. CHSPUniverseList cmdList; cmdList.SetPacketAddress(cmdGetList->GetPacketAddress()); THSUniverseIterator tIter; HS_BOOL8 bContinue; for (bContinue = CHSUniverseDB::GetInstance().GetFirstUniverse(tIter); bContinue; bContinue = CHSUniverseDB::GetInstance().GetNextUniverse(tIter)) { if (tIter.pValue != NULL) { CHSUniverse *pUniverse = (CHSUniverse *) tIter.pValue; CHSPUniverseList::THSUniverse tEntry; tEntry.uiID = pUniverse->GetID(); tEntry.strName = pUniverse->GetName(); tEntry.uiNumObjects = pUniverse->GetNumObjects(); tEntry.uiNumActiveObjects = pUniverse->GetNumActiveObjects(); cmdList.AddUniverse(tEntry); } } HSNetwork.SendPacket(cmdList); }
void CHSMTube::AttackObject(CHS3DObject * cSource, CHS3DObject * cTarget, CHSConsole * cConsole, HS_INT32 iSysType, HS_INT32 hit_flag) { HS_DBREF dbUser; // Grab the user of the console. dbUser = hsInterface.ConsoleUser(cConsole->m_objnum); if (cSource->GetType() == HST_SHIP) { CHSSysCloak *cCloak; CHSShip *ptr; ptr = (CHSShip *) cSource; // Look for the cloaking device. cCloak = (CHSSysCloak *) ptr->GetEngSystem(HSS_CLOAK); if (cCloak) if (cCloak->GetEngaged()) { if (dbUser != HSNOTHING) hsStdError(dbUser, "You cannot fire while cloaked."); return; } } // Can we attack that object? if (!CanAttackObject(cTarget)) { if (dbUser != HSNOTHING) hsStdError(dbUser, "You cannot attack that target with that weapon."); } // Create a missile object, and put it in space CHSMissile *cMiss; cMiss = new CHSMissile; cMiss->SetUID(cSource->GetUID()); if (hit_flag == 0) { cMiss->SetAutoMiss(); } // Add it to the universe CHSUniverse *uDest; uDest = cMiss->GetUniverse(); if (!uDest) { if (dbUser != HSNOTHING) { hsInterface.Notify(dbUser, "Error finding a universe to put the missile in."); } delete cMiss; return; } uDest->AddObject(cMiss); // Set missile coords cMiss->SetX(cSource->GetX()); cMiss->SetY(cSource->GetY()); cMiss->SetZ(cSource->GetZ()); // Set missile heading cMiss->SetHeading(cConsole->GetXYHeading(), cConsole->GetZHeading()); // Set missile type cMiss->SetWeaponData(this); // Set source info cMiss->SetSourceConsole(cConsole); cMiss->SetSourceObject(cSource); cMiss->SetTargetObject(cTarget); #ifdef PENNMUSH HS_DBREF obj_num = hsInterface.CreateNewGameObject(); #else HS_DBREF obj_num = hsInterface.CreateNewGameObject(TYPE_THING); #endif if (hsInterface.ValidObject(obj_num)) { cMiss->SetDbref(obj_num); // Try to set the name of the missile properly but default // just in case if (NULL == m_pWeaponData) { hsInterface.SetObjectName(obj_num, "Missile"); } else { hsInterface.SetObjectName(obj_num, static_cast < CHSMissileData * >(m_pWeaponData)->Name()); } hsInterface.MoveObject(obj_num, uDest->GetID()); hsInterface.SetToggle(obj_num, THING_HSPACE_OBJECT); hsInterface.SetObjectOwner(obj_num, hsInterface.GetGodDbref()); // Missile objects are temporary, clear them if the game // is restarted while the missile is still in existance hsInterface.AtrAdd(obj_num, "STARTUP", "@destroy me", hsInterface.GetGodDbref()); } else { // Set missile HS_DBREF to some very high number that's // probably not duplicated. cMiss->SetDbref(hsInterface.GetRandom(10000) + 28534); hs_log("CHSMTube::AttackObject() -- Deprecated fake dbref method \ utilized."); } if (dbUser != HSNOTHING) { hsStdError(dbUser, "Missile launched."); } m_loaded = false; }