BString ObjectController::handleCancelShutdownGalaxy(BString message) const { int8 replyData[128]; if (!AdminManager::Instance()->shutdownPending()) { sprintf(replyData,"No shutdown in progress"); } else { sprintf(replyData,"OK"); // We have no idea of how much white space are inserted in string... BString ansiData; int32 index = indexOfFirstField(message); if (index < 0) { // We may not have any "next field", it's optional here. index = 0; ansiData = ""; } else { // Now we can get the broadcaste from the message. // Remove first field from message. ansiData.setLength(message.getLength()); message.substring(ansiData, static_cast<uint16>(index), message.getLength()); } // Send request to all zones, via chatserver. this->cancelScheduledShutdown(ansiData); } return replyData; }
BString ObjectController::handleBroadcastGalaxy(BString message) const { int8* replyStr = "OK"; int8 rawData[128]; // We have no idea of how much white space are inserted in string... int32 index = indexOfFirstField(message); if (index >= 0) { // Now we can get the broadcast from the message. // Remove white space from start of message. BString ansiData; ansiData.setLength(message.getLength()); message.substring(ansiData, static_cast<uint16>(index), message.getLength()); // Any valid message? int32 elementCount = sscanf(ansiData.getAnsi(), "%80s", rawData); if (elementCount > 0) { this->broadcastGalaxyMessage(ansiData, -1); } else { replyStr = "No broadcast supplied"; } } else { replyStr = "No valid broadcast supplied"; } return replyStr; }
BString ObjectController::handleShutdownGalaxy(BString message) const { int8 replyData[128]; if (AdminManager::Instance()->shutdownPending()) { sprintf(replyData,"Shutdown already in progress"); } else { sprintf(replyData,"OK"); // Get time for shutdown // int32 minutesToShutdown; int32 elementCount = sscanf(message.getAnsi(), "%3d", &minutesToShutdown); // string planet(rawData); if (elementCount > 0) { // We have no idea of how much white space are inserted in string... BString ansiData; int32 index = indexOfNextField(message); if (index < 0) { // We may not have any "next field", it's optional here. index = 0; ansiData = ""; } else { // Now we can get the broadcaste from the message. // Remove first field from message. ansiData.setLength(message.getLength()); message.substring(ansiData, static_cast<uint16>(index), message.getLength()); } // Validate the timeout. if (minutesToShutdown >= 0) { // Any valid message? int8 rawData[128]; elementCount = sscanf(ansiData.getAnsi(), "%80s", rawData); // Send request to all zones, via chatserver. this->scheduleShutdown(minutesToShutdown*60, ansiData); } else { sprintf(replyData,"%d is not valid shutdown time", minutesToShutdown); } } else { sprintf(replyData,"No shutdown time supplied"); } } return replyData; }
BString ObjectController::handleBroadcastPlanet(BString message) const { // Get planet name int8 rawData[128]; rawData[0] = 0; int32 elementCount = sscanf(message.getAnsi(), "%80s", rawData); BString planet(rawData); if (elementCount > 0) { // Yes. Validate the planet name. int32 planetId = gWorldManager->getPlanetIdByNameLike(planet); if (planetId >= 0) { // We have no idea of how much white space are inserted in string... int32 index = indexOfNextField(message); if (index > 0) { // Now we can get the broadcaste from the message. // Remove planet name from message. BString ansiData; ansiData.setLength(message.getLength()); message.substring(ansiData, static_cast<uint16>(index), message.getLength()); // Any valid message? elementCount = sscanf(ansiData.getAnsi(), "%80s", rawData); if (elementCount > 0) { // string planetName(gWorldManager->getPlanetNameById(planetId)); this->broadcastGalaxyMessage(ansiData, planetId); sprintf(rawData,"OK"); } else { sprintf(rawData,"No broadcast supplied"); } } else { sprintf(rawData,"No valid broadcast supplied"); } } else { sprintf(rawData,"%s is not valid planet name", planet.getAnsi()); } } else { sprintf(rawData,"Missing planet name"); } return rawData; }
BString ObjectController::removeWhiteSpace(BString str) const { int32 index = indexOfFirstField(str); if (index > 0) { // Remove white space from start of message. BString resultStr; resultStr.setLength(str.getLength()); str.substring(resultStr, static_cast<uint16>(index), str.getLength()); return resultStr; } // Nothing we can do about that string... good or bad. return str; }
BString ObjectController::skipToNextField(BString str) const { int32 index = indexOfNextField(str); if (index < 0) { // Not all commands have payload. index = str.getLength(); } // Remove white space from start of message. BString resultStr; resultStr.setLength(str.getLength()); str.substring(resultStr, static_cast<uint16>(index), str.getLength()); return resultStr; }
void AdminManager::_processScheduleShutdown(Message* message, DispatchClient* client) { message->ResetIndex(); BString msg; msg.setType(BSTRType_Unicode16); msg.setLength(512); /* uint32 opCode = */ message->getUint32(); uint32 scheduledTime = message->getUint32(); message->getStringUnicode16(msg); msg.convert(BSTRType_ANSI); this->addAdminRequest(AdminScheduledShutdown, msg, (int32)scheduledTime); }
BString ResourceType::getContainerModel() { // gotta put shared_resource_container_ into the name BStringVector splits; BString tmpStr; tmpStr.setLength(512); int elements = mModel.split(splits,'/'); tmpStr = splits[0].getAnsi(); for(int i = 1; i < elements - 1; i++) tmpStr << "/" << splits[i].getAnsi(); tmpStr << "/shared_resource_container_" << splits[elements-1].getAnsi(); return tmpStr; }
void Instrument::sendAttributes(PlayerObject* playerObject) { if(!(playerObject->isConnected())) return; Message* newMessage; gMessageFactory->StartMessage(); gMessageFactory->addUint32(opAttributeListMessage); gMessageFactory->addUint64(mId); gMessageFactory->addUint32(1 + mAttributeMap.size()); BString tmpValueStr = BString(BSTRType_Unicode16,64); BString value; tmpValueStr.setLength(swprintf(tmpValueStr.getUnicode16(),50,L"%u/%u",mMaxCondition - mDamage,mMaxCondition)); gMessageFactory->addString(BString("condition")); gMessageFactory->addString(tmpValueStr); AttributeMap::iterator mapIt; AttributeOrderList::iterator orderIt = mAttributeOrderList.begin(); while(orderIt != mAttributeOrderList.end()) { mapIt = mAttributeMap.find(*orderIt); gMessageFactory->addString(gWorldManager->getAttributeKey((*mapIt).first)); value = (*mapIt).second.c_str(); value.convert(BSTRType_Unicode16); gMessageFactory->addString(value); ++orderIt; } //gMessageFactory->addUint32(0xffffffff); newMessage = gMessageFactory->EndMessage(); (playerObject->getClient())->SendChannelAUnreliable(newMessage, playerObject->getAccountId(), CR_Client, 9); }
void GroupObject::createChannel() { int8 channelName[64]; Channel* channel = new Channel(); channel->setId(((uint32)(mId)) + 0xf0000000); channel->setCreator(gSystemAvatar); sprintf(channelName, "%"PRIu64".GroupChat", mId); channel->setName(BString(channelName)); channel->setGalaxy(gChatManager->getGalaxyName()); BString tmpValueStr = BString(BSTRType_Unicode16,64); tmpValueStr.setLength(swprintf(tmpValueStr.getUnicode16(),64,L"%"WidePRIu64, mId)); channel->setTitle(tmpValueStr); gLogger->log(LogManager::DEBUG,"Group channel created: '%s' with id %u.", channel->getName().getAnsi(), channel->getId()); channel->setOwner(gSystemAvatar); mChannel = channel; gChatManager->registerChannel(mChannel); }
void ObjectController::_handleAdminSysMsg(uint64 targetId,Message* message,ObjectControllerCmdProperties* cmdProperties) { bool status = false; BString dataStr; message->getStringUnicode16(dataStr); PlayerObject* player = dynamic_cast<PlayerObject*>(mObject); if ((player) && (player->isConnected())) { // gMessageLib->sendSystemMessage(player, dataStr, true); dataStr.convert(BSTRType_ANSI); gLogger->log(LogManager::DEBUG,"Admin (%s): %s", player->getFirstName().getAnsi(), dataStr.getAnsi()); } else { dataStr.convert(BSTRType_ANSI); gLogger->log(LogManager::DEBUG,"Admin (anon): %s", dataStr.getAnsi()); } int8 rawData[128]; rawData[0] = 0; if (dataStr.getLength()) { int32 elementCount = sscanf(dataStr.getAnsi(), "%80s", rawData); BString adminCommand(rawData); if (elementCount > 0) { int32 commandIndex = this->getAdminCommandFunction(adminCommand); if (commandIndex >= 0) { // We have a valid command name, but strip it. It can be an abreviation. int32 index = indexOfNextField(dataStr); if (index < 0) { // Not all commands have payload. index = dataStr.getLength(); } BString ansiData; ansiData.setLength(dataStr.getLength()); dataStr.substring(ansiData,static_cast<uint16>(index), dataStr.getLength()); // Now ADD a proper spelled command. It HAS to match the crc. BString newCommandString; newCommandString.setLength(adminCommands[commandIndex].command.getLength() + ansiData.getLength() + 1); sprintf(newCommandString.getAnsi(),"%s %s", adminCommands[commandIndex].command.getAnsi(), ansiData.getAnsi()); // Execute the command. BString opcodeStr(adminCommands[commandIndex].command); opcodeStr.toLower(); newCommandString.convert(BSTRType_Unicode16); // Now let's parse it BACK to objectcontroller, so we can continue to maintain access rights control as initial designed. gMessageFactory->StartMessage(); gMessageFactory->addUint32(0); // clientTicks, We do not have these, here. gMessageFactory->addUint32(0); // sequence number, we really need this gMessageFactory->addUint32(opcodeStr.getCrc()); // opCode for new command. gMessageFactory->addUint64(targetId); gMessageFactory->addString(newCommandString); Message* newMessage = gMessageFactory->EndMessage(); newMessage->ResetIndex(); this->enqueueCommandMessage(newMessage); status = true; } else { // Invalid command. sprintf(rawData,"Admin: [%s No such command]", adminCommand.getAnsi()); } } else { sprintf(rawData,"Admin: [Unexpected error]"); } } else { sprintf(rawData,"Admin: [Missing command]"); } // Send reply to caller. if (!status) { this->sendAdminFeedback(rawData); } }
void FactoryCrate::sendAttributes(PlayerObject* playerObject) { if(!(playerObject->isConnected())) return; AttributeMap* iAttributeMap = this->getLinkedObject()->getAttributeMap(); AttributeOrderList* iAttributeOrderList = this->getLinkedObject()->getAttributeOrder(); Message* newMessage; gMessageFactory->StartMessage(); gMessageFactory->addUint32(opAttributeListMessage); gMessageFactory->addUint64(mId); gMessageFactory->addUint32(2 + mAttributeMap.size()+iAttributeMap->size()); BString tmpValueStr = BString(BSTRType_Unicode16,64); BString value,aStr; tmpValueStr.setLength(swprintf(tmpValueStr.getUnicode16(),50,L"%u/%u",mMaxCondition - mDamage,mMaxCondition)); gMessageFactory->addString(BString("condition")); gMessageFactory->addString(tmpValueStr); AttributeMap::iterator mapIt; AttributeOrderList::iterator orderIt = mAttributeOrderList.begin(); while(orderIt != mAttributeOrderList.end()) { mapIt = mAttributeMap.find(*orderIt); gMessageFactory->addString(gWorldManager->getAttributeKey((*mapIt).first)); value = (*mapIt).second.c_str(); value.convert(BSTRType_Unicode16); gMessageFactory->addString(value); ++orderIt; } gMessageFactory->addString(BString("factory_attribs")); aStr = "\\#"SOE_RED" --------------"; aStr.convert(BSTRType_Unicode16); gMessageFactory->addString(aStr); orderIt = iAttributeOrderList->begin(); while(orderIt != iAttributeOrderList->end()) { mapIt = iAttributeMap->find(*orderIt); gMessageFactory->addString(gWorldManager->getAttributeKey((*mapIt).first)); value = (*mapIt).second.c_str(); value.convert(BSTRType_Unicode16); gMessageFactory->addString(value); ++orderIt; } newMessage = gMessageFactory->EndMessage(); (playerObject->getClient())->SendChannelAUnreliable(newMessage, playerObject->getAccountId(), CR_Client, 9); }