Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
void ChatMessageLib::sendChatRoomList(DispatchClient* client, ChannelList* list) const
{
    ChannelList::iterator iter = list->begin();

    gMessageFactory->StartMessage();
    gMessageFactory->addUint32(opChatRoomlist);

    gMessageFactory->addUint32(list->size());
    while (iter != list->end())
    {
        gMessageFactory->addUint32((*iter)->getId());
        gMessageFactory->addUint32((uint32)(*iter)->isPrivate());
        gMessageFactory->addUint8((*iter)->isModerated());

        BString roomPathName = "SWG.";
        roomPathName << (*iter)->getGalaxy().getAnsi() << ".";
        roomPathName << (*iter)->getName().getAnsi();
        gMessageFactory->addString(roomPathName);

        gMessageFactory->addString(SWG);
        gMessageFactory->addString((*iter)->getGalaxy());
#ifdef DISP_REAL_FIRST_NAME
        BString* name = (ChatManager::getSingletonPtr()->getFirstName((BString &)((*iter)->getOwner()->getLoweredName())));
        if (name->getLength() == 0)
        {
            gMessageFactory->addString((*iter)->getOwner()->getLoweredName());
        }
        else
        {
            gMessageFactory->addString(*name);
        }
#else
        gMessageFactory->addString((*iter)->getOwner()->getLoweredName());
#endif

        gMessageFactory->addString(SWG);
        gMessageFactory->addString((*iter)->getGalaxy());
#ifdef DISP_REAL_FIRST_NAME
        name = (ChatManager::getSingletonPtr()->getFirstName((BString &)((*iter)->getCreator()->getLoweredName())));
        if (name->getLength() == 0)
        {
            gMessageFactory->addString((*iter)->getCreator()->getLoweredName());
        }
        else
        {
            gMessageFactory->addString(*name);
        }
#else
        gMessageFactory->addString((*iter)->getCreator()->getLoweredName());
#endif
        gMessageFactory->addString((*iter)->getTitle());

        gMessageFactory->addUint32(0);
        gMessageFactory->addUint32(0);
        ++iter;
    }
    Message* message = gMessageFactory->EndMessage();

    client->SendChannelA(message, client->getAccountId(), CR_Client, 2);
}
Example #4
0
void ObjectController::_handleSetWaypointName(uint64 targetId,Message* message,ObjectControllerCmdProperties* cmdProperties)
{
    PlayerObject*	player		= dynamic_cast<PlayerObject*>(mObject);
    BString			name;
    Datapad* datapad			= player->getDataPad();
    WaypointObject*	waypoint	= datapad->getWaypointById(targetId);
    int8			sql[1024],restStr[64],*sqlPointer;

    if(waypoint == NULL)
    {
        DLOG(info) << "ObjController::handlesetwaypointname: could not find waypoint "<< targetId;
        return;
    }

    message->getStringUnicode16(name);

    if(!(name.getLength()))
        return;

    waypoint->setName(name);

    name.convert(BSTRType_ANSI);

    sprintf(sql,"UPDATE %s.waypoints SET name='",mDatabase->galaxy());
    sqlPointer = sql + strlen(sql);
    sqlPointer += mDatabase->escapeString(sqlPointer,name.getAnsi(),name.getLength());
    sprintf(restStr,"' WHERE waypoint_id=%" PRIu64 "",targetId);
    strcat(sql,restStr);

    mDatabase->executeSqlAsync(NULL,NULL,sql);


    gMessageLib->sendUpdateWaypoint(waypoint,ObjectUpdateChange,player);
}
Example #5
0
void ChatMessageLib::sendGroupSystemMessage(BString name, BString pointer, Player* target, GroupObject* group, bool unicode) const
{
    name.convert(BSTRType_Unicode16);
    uint32	pointerLength = (uint32)ceil((double)(pointer.getLength() / 2));

    Message* newMessage;

    gMessageFactory->StartMessage();
    gMessageFactory->addUint32(opChatSystemMessage);
    gMessageFactory->addUint8(0);
    gMessageFactory->addUint32(0);

    gMessageFactory->addUint32(45 + pointerLength + name.getLength());
    gMessageFactory->addUint16(1);
    gMessageFactory->addUint8(1);
    gMessageFactory->addUint32(0xffffffff);
    gMessageFactory->addString(BString("group"));
    gMessageFactory->addUint32(0);
    gMessageFactory->addString(pointer);
    gMessageFactory->addUint64(0);
    gMessageFactory->addUint64(0);

    if(unicode)
    {
        gMessageFactory->addString(name);
        gMessageFactory->addUint32(0);
        gMessageFactory->addUint64(0);
        gMessageFactory->addUint32(0);
        gMessageFactory->addUint32(0);
    }
    else
    {
        gMessageFactory->addUint32(0);
        gMessageFactory->addUint32(0);
        gMessageFactory->addUint64(0);
        gMessageFactory->addUint32(0);
        gMessageFactory->addString(name);
    }

    gMessageFactory->addUint64(0);
    gMessageFactory->addUint64(0);
    gMessageFactory->addUint32(0);
    gMessageFactory->addUint32(0);
    gMessageFactory->addUint32(0);
    gMessageFactory->addUint16(0);

    newMessage = gMessageFactory->EndMessage();

    if(group == NULL)
    {
        target->getClient()->SendChannelA(newMessage, target->getClient()->getAccountId(), CR_Client, 5);
    }
    else
    {
        group->broadcastMessage(newMessage);
    }
}
Example #6
0
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;
}
Example #7
0
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;
}
Example #8
0
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;
}
Example #9
0
void ChatMessageLib::sendChatOnCreateRoom(DispatchClient* client, Channel* channel, uint32 requestId) const
{
    gMessageFactory->StartMessage();
    gMessageFactory->addUint32(opChatOnCreateRoom);

    gMessageFactory->addUint32(0);
    gMessageFactory->addUint32(channel->getId());
    gMessageFactory->addUint32((uint32)channel->isPrivate());
    gMessageFactory->addUint8(channel->isModerated());
    gMessageFactory->addString(channel->getFullPath());

    gMessageFactory->addString(SWG);
    gMessageFactory->addString(channel->getGalaxy());
#ifdef DISP_REAL_FIRST_NAME
    BString* name = (ChatManager::getSingletonPtr()->getFirstName((BString &)(channel->getOwner()->getLoweredName())));
    if (name->getLength() == 0)
    {
        gMessageFactory->addString(channel->getOwner()->getLoweredName());
    }
    else
    {
        gMessageFactory->addString(*name);
    }
#else
    gMessageFactory->addString(channel->getOwner()->getLoweredName());
#endif
    gMessageFactory->addString(SWG);
    gMessageFactory->addString(channel->getGalaxy());
#ifdef DISP_REAL_FIRST_NAME
    name = (ChatManager::getSingletonPtr()->getFirstName((BString &)(channel->getCreator()->getLoweredName())));
    if (name->getLength() == 0)
    {
        gMessageFactory->addString(channel->getCreator()->getLoweredName());
    }
    else
    {
        gMessageFactory->addString(*name);
    }
#else
    gMessageFactory->addString(channel->getCreator()->getLoweredName());
#endif
    gMessageFactory->addString(channel->getTitle());
    gMessageFactory->addUint32(0);
    gMessageFactory->addUint32(0);
    gMessageFactory->addUint32(requestId);
    Message* message = gMessageFactory->EndMessage();

    client->SendChannelA(message, client->getAccountId(), CR_Client, 4);
}
Example #10
0
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;
}
Example #11
0
BString ObjectController::handleBroadcast(BString message) const
{
    int8 rawData[128];

    int8* replyStr = "OK";
    if (message.getLength())
    {
        // Any valid message?
        int32 elementCount = sscanf(message.getAnsi(), "%80s", rawData);
        if (elementCount > 0)
        {
            message.convert(BSTRType_Unicode16);

            PlayerAccMap::const_iterator it = gWorldManager->getPlayerAccMap()->begin();
            while(it != gWorldManager->getPlayerAccMap()->end())
            {
                const PlayerObject* const player = (*it).second;
                if (player->isConnected())
                {
                    gMessageLib->SendSystemMessage(message.getUnicode16(), player);
                }
                ++it;
            }
        }
        else
        {
            replyStr = "No broadcast supplied";
        }
    }
    else
    {
        replyStr = "No broadcast supplied";
    }
    return replyStr;
}
Example #12
0
bool MessageLib::sendXpUpdate(uint32 xpType,PlayerObject* playerObject)
{
    if(!(playerObject->isConnected()))
        return(false);

    // We must be able to set the value of 0, when we use up all xp.

    BString		xpTypeName = gSkillManager->getXPTypeById(xpType);

    mMessageFactory->StartMessage();
    mMessageFactory->addUint32(opDeltasMessage);
    mMessageFactory->addUint64(playerObject->getId());
    mMessageFactory->addUint32(opPLAY);
    mMessageFactory->addUint8(8);

    mMessageFactory->addUint32(19 + xpTypeName.getLength());

    mMessageFactory->addUint16(1);
    mMessageFactory->addUint16(0);

    mMessageFactory->addUint32(1);
    mMessageFactory->addUint32(++playerObject->mXpUpdateCounter);

    mMessageFactory->addUint8(2);
    mMessageFactory->addString(xpTypeName);
    mMessageFactory->addInt32(playerObject->getXpAmount(xpType));

    (playerObject->getClient())->SendChannelA(mMessageFactory->EndMessage(),playerObject->getAccountId(),CR_Client,5);

    return(true);
}
Example #13
0
void ObjectController::sendAdminFeedback(BString reply) const
{
    PlayerObject* player = dynamic_cast<PlayerObject*>(mObject);
    if ((player) && (player->isConnected()))
    {
        if (reply.getLength())
        {
            reply.convert(BSTRType_Unicode16);
            gMessageLib->SendSystemMessage(reply.getUnicode16(), player, true);
        }
        else
        {
            DLOG(info) << "Admin :" << player->getFirstName().getAnsi();
        }
    }
    else
    {
        if (reply.getDataLength())
        {
            DLOG(info) << "Admin (anon): " << reply.getAnsi();
        }
        else
        {
        }
    }
}
Example #14
0
void ObjectController::broadcastGalaxyMessage(BString theBroadcast, int32 planetId) const
{
    if (theBroadcast.getLength())
    {
        PlayerObject* player = dynamic_cast<PlayerObject*>(mObject);
        if (player)
        {
            theBroadcast.convert(BSTRType_Unicode16);

            // let the chatserver handle this.
            Message* newMessage;
            gMessageFactory->StartMessage();
            gMessageFactory->addUint32(opIsmBroadcastGalaxy);
            gMessageFactory->addUint32(planetId);
            gMessageFactory->addString(theBroadcast);
            newMessage = gMessageFactory->EndMessage();
            player->getClient()->SendChannelA(newMessage,player->getAccountId(),CR_Chat,2);
            //this should be fastpath as not being Mission critical and we want to prevent the communication protocol overhead with Acks and resends

            // Convert since we are going to print it.
            // theBroadcast.convert(BSTRType_ANSI);
        }
    }

}
Example #15
0
void ObjectController::sendAdminFeedback(BString reply) const
{
    PlayerObject* player = dynamic_cast<PlayerObject*>(mObject);
    if ((player) && (player->isConnected()))
    {
        if (reply.getLength())
        {
            gLogger->log(LogManager::NOTICE,"Admin (%s): %s", player->getFirstName().getAnsi(), reply.getAnsi());
            reply.convert(BSTRType_Unicode16);
            gMessageLib->SendSystemMessage(reply.getUnicode16(), player, true);
        }
        else
        {
            gLogger->log(LogManager::NOTICE,"Admin (%s):", player->getFirstName().getAnsi());
        }
    }
    else
    {
        if (reply.getDataLength())
        {
            gLogger->log(LogManager::NOTICE,"Admin (anon): %s", reply.getAnsi());
        }
        else
        {
            gLogger->log(LogManager::NOTICE,"Admin (anon):");
        }
    }
}
std::string MedicHandlerHelpers::handleMessage(Message* message, std::string regexPattern)
{
    // Read the message out of the packet.
    BString tmp;
    message->getStringUnicode16(tmp);

    // If the string has no length the message is ill-formatted, send the
    // proper format to the client.
    if (!tmp.getLength())
        return "";

    // Convert the string to an ansi string for ease with the regex.
    tmp.convert(BSTRType_ANSI);
    std::string input_string(tmp.getAnsi());

    static const regex pattern(regexPattern);
    smatch result;

    regex_search(input_string, result, pattern);

    // Gather the results of the pattern for validation and use.
    std::string messageType(result[1]);
    if (messageType.length() > 0)
    {
        return messageType;
    }
    return "";
}
Example #17
0
void AdminManager::cancelAdminRequest(uint64 requestType, BString message)
{
    // We will only handle one request at the time for each type.
    gWorldManager->cancelAdminRequest(static_cast<uint8>(requestType));	// Even though map's fix duplicate issues, the lower level implementation may change.

    AdminRequests::iterator adminRequestIterator = mAdminRequests.find(requestType);
    if (adminRequestIterator != mAdminRequests.end())
    {
        delete ((*adminRequestIterator).second);
        mAdminRequests.erase(adminRequestIterator);

        message.convert(BSTRType_Unicode16);
        PlayerAccMap::const_iterator it = gWorldManager->getPlayerAccMap()->begin();

        while (it != gWorldManager->getPlayerAccMap()->end())
        {
            const PlayerObject* const player = (*it).second;
            if (player->isConnected())
            {
                gMessageLib->SendSystemMessage(L"", player);
                if (message.getLength())
                {
                    gMessageLib->SendSystemMessage(message.getUnicode16(), player);
                }
            }
            ++it;
        }
    }
    mPendingShutdown = false;
}
Example #18
0
int32 ObjectController::indexOfNextField(const BString message) const
{
    int32 index = -1;
    int8 *ptr = message.getRawData();
    bool foundStart = false;
    bool foundEnd = false;
    for (int32 i = 0; i < (int32)message.getLength(); i++)
    {
        if (!foundStart)
        {
            if (!isspace(*ptr++))
            {
                foundStart = true;
            }
        }
        else if (!foundEnd)
        {
            if (isspace(*ptr++))
            {
                // we are done with the first field
                foundEnd = true;
            }
        }
        else
        {
            // Find the start of next field.
            if (!isspace(*ptr++))
            {
                index = i;
                break;
            }
        }
    }
    return index;
}
Example #19
0
void TreasuryManager::bankTipOffline(int32 amount,PlayerObject* playerObject,BString targetName)
{

    //============================================
    //check whether we have sufficient funds
    //dont forget the surcharge
    Bank* bank = dynamic_cast<Bank*>(playerObject->getEquipManager()->getEquippedObject(CreatureEquipSlot_Bank));
    int32 credits = bank->getCredits();

    int32 surcharge = (int32)((amount/100)*5);

    if((amount + surcharge) > credits)
    {
        BString uniName = targetName;
        uniName.convert(BSTRType_Unicode16);

        gMessageLib->SendSystemMessage(::common::OutOfBand("base_player", "prose_tip_nsf_bank", L"", L"", uniName.getUnicode16(), amount), playerObject);
        return;
    }
    //now get the player
    int8 name[50];
    mDatabase->Escape_String(name,targetName.getAnsi(),targetName.getLength());

    int8 sql[256];
    sprintf(sql,"SELECT id FROM characters WHERE firstname like '%s'",name);

    TreasuryManagerAsyncContainer* asyncContainer;
    asyncContainer = new TreasuryManagerAsyncContainer(TREMQuery_BankTipgetId,playerObject->getClient());
    asyncContainer->amount = amount;
    asyncContainer->surcharge = surcharge;
    asyncContainer->targetName = targetName;
    asyncContainer->player = playerObject;

    mDatabase->ExecuteSqlAsync(this,asyncContainer,sql);
}
//======================================================================================================================
//
// Modifies the Admin List
//
void	ObjectController::_handleNameStructure(uint64 targetId,Message* message,ObjectControllerCmdProperties* cmdProperties)

{
    // requirement we have the structure targeted AND give the name of the recipient on the commandline
    // OR we have the recipient targeted and stand NEXT to the structure were about to transfer

    //do we have a valid donor ?
    CreatureObject* creature  = dynamic_cast<CreatureObject*>(mObject); PlayerObject* player = creature->GetGhost();

    if(!player)
    {
        return;
    }

    //do we have a valid structure ??? check our target first
    uint64 id = player->GetCreature()->getTargetId();
    Object* object = gWorldManager->getObjectById(id);
    PlayerStructure* structure = dynamic_cast<PlayerStructure*>(object);

    if(!structure)
    {
        gMessageLib->SendSystemMessage(::common::OutOfBand("player_structure", "command_no_building"), player);
        return;
    }

    //is the structure in Range???
    float fTransferDistance = gWorldConfig->getConfiguration<float>("Player_Structure_Operate_Distance",(float)10.0);
    if(glm::distance(player->GetCreature()->mPosition, structure->mPosition) > fTransferDistance)
    {
        gMessageLib->SendSystemMessage(::common::OutOfBand("player_structure", "command_no_building"), player);
        return;
    }

    //find out where our structure is
    BString dataStr;
    message->getStringUnicode16(dataStr);

    BString nameStr;

    dataStr.convert(BSTRType_ANSI);

    sscanf(dataStr.getAnsi(),"%s",nameStr.getAnsi());

    if(nameStr.getLength() > 68)
    {
        gMessageLib->SendSystemMessage(::common::OutOfBand("player_structure", "not_valid_name"), player);
        return;
    }

    StructureAsyncCommand command;
    command.Command = Structure_Command_RenameStructure;
    command.PlayerId = player->getId();
    command.StructureId = structure->getId();

    gStructureManager->checkNameOnPermissionList(structure->getId(),player->getId(),player->GetCreature()->getFirstName(),"ADMIN",command);

}
Example #21
0
void MessageFactory::addString(const BString& data)
{
    // Make sure we've called StartMessage()
    assert(mCurrentMessage && "Must call StartMessage before adding data");

    // Adjust start bounds if necessary.
    _adjustHeapStartBounds(data.getDataLength());

    // Insert our data and move our end pointer.
    switch(data.getType())
    {
    case BSTRType_UTF8:
    case BSTRType_ANSI:
    {
        // First insert the string length
        *((uint16*)mCurrentMessageEnd) = data.getLength();
        mCurrentMessageEnd += 2;

        memcpy(mCurrentMessageEnd, data.getAnsi(), data.getLength());
        mCurrentMessageEnd += data.getLength();
    }
    break;

    case BSTRType_Unicode16:
    {
        // First insert the string length
        *((uint32*)mCurrentMessageEnd) = data.getLength();
        mCurrentMessageEnd += 4;

        memcpy(mCurrentMessageEnd, data.getUnicode16(), data.getLength() * 2);
        mCurrentMessageEnd += data.getLength() * 2;
    }
    break;
    }
}
Example #22
0
void CSRManager::_processCreateTicketMessage( Message* message, DispatchClient* client )
{
    BString playername;
    BString comment;
    BString info;
    BString harrassinguser;
    BString language;

    message->getStringAnsi(playername);
    uint32 category = message->getUint32();
    uint32 subcategory = message->getUint32();
    message->getStringUnicode16(comment);
    message->getStringUnicode16(info);
    message->getStringUnicode16(harrassinguser);
    message->getStringAnsi(language);
    /*uint32 errorcode = */
    message->getUint32();
    uint8 bugreport = message->getUint8();

    comment.convert(BSTRType_ANSI);
    info.convert(BSTRType_ANSI);;
    harrassinguser.convert(BSTRType_ANSI);

    CSRAsyncContainer* asyncContainer = new CSRAsyncContainer(CSRQuery_NewTicket);
    asyncContainer->mClient = client;

    int8 cleanPlayer[4000], cleanComment[4000], cleanInfo[4000], cleanHarrasser[4000], cleanLanguage[4000];
    mDatabase->Escape_String(cleanPlayer, playername.getAnsi(), playername.getLength());
    mDatabase->Escape_String(cleanInfo, info.getAnsi(), info.getLength());
    mDatabase->Escape_String(cleanComment, comment.getAnsi(), comment.getLength());
    mDatabase->Escape_String(cleanHarrasser, harrassinguser.getAnsi(), harrassinguser.getLength());
    mDatabase->Escape_String(cleanLanguage, language.getAnsi(), language.getLength());

    mDatabase->ExecuteProcedureAsync(this, asyncContainer, "CALL sp_CSRTicketAdd('%s', %u, %u, '%s', '%s', '%s', '%s', %d);", cleanPlayer, category, subcategory, cleanComment, cleanInfo, cleanHarrasser, cleanLanguage, bugreport);
    
}
Example #23
0
void CSRManager::_processAppendCommentMessage( Message* message, DispatchClient* client )
{
    gLogger->log(LogManager::DEBUG,"CSRManager::_processAppendCommentMessage");
    BString poster;
    BString comment;

    uint32 ticketid = message->getUint32();
    message->getStringAnsi(poster);
    message->getStringUnicode16(comment);
    comment.convert(BSTRType_ANSI);

    int8 cleanComment[4000], cleanPoster[4000];
    mDatabase->Escape_String(cleanComment,comment.getAnsi(),comment.getLength());
    mDatabase->Escape_String(cleanPoster,poster.getAnsi(), poster.getLength());
    mDatabase->ExecuteProcedureAsync(NULL, NULL, "CALL sp_CSRTicketCommentAdd(%u, '%s', '%s');", ticketid, cleanComment, cleanPoster);
    
    mDatabase->ExecuteProcedureAsync(NULL, NULL, "CALL sp_CSRTicketActivityUpdate(%u);", ticketid);
    

    gMessageFactory->StartMessage();
    gMessageFactory->addUint32(opAppendCommentResponseMessage);
    gMessageFactory->addUint32(0);
    gMessageFactory->addUint32(ticketid);
}
Example #24
0
//=============================================================================
//
// create a new waypoint
// never call this directly - always go over the datapad!!!!!  we need to check the capacity
//
void ObjectFactory::requestNewWaypoint(ObjectFactoryCallback* ofCallback,BString name, const glm::vec3& coords,uint16 planetId,uint64 ownerId,uint8 wpType)
{
    PlayerObject* player = dynamic_cast<PlayerObject*>(gWorldManager->getObjectById(ownerId));
    OFAsyncContainer* asyncContainer = new(mDbAsyncPool.ordered_malloc()) OFAsyncContainer(ofCallback,OFQuery_WaypointCreate,player->getClient());
    int8 sql[512],*sqlPointer;
    int8 restStr[128];

    sprintf(sql,"SELECT sf_WaypointCreate('");
    sqlPointer = sql + strlen(sql);
    sqlPointer += mDatabase->escapeString(sqlPointer,name.getAnsi(),name.getLength());
    sprintf(restStr,"',%"PRIu64",%f,%f,%f,%u,%u)", ownerId, coords.x, coords.y, coords.z, planetId, wpType);
    strcat(sql,restStr);

    mDatabase->executeSqlAsync(this,asyncContainer,sql);
    

}
Example #25
0
int32 ObjectController::indexOfFirstField(const BString message) const
{
    int32 index = -1;
    int8 *ptr = message.getRawData();
    //bool foundStart = false;
    //bool foundEnd = false;
    for (int32 i = 0; i < (int32)message.getLength(); i++)
    {
        // Find the start of next field.
        if (!isspace(*ptr++))
        {
            index = i;
            break;
        }
    }
    return index;
}
Example #26
0
void TreasuryManager::bankTipOffline(uint32 amount,PlayerObject* player,BString targetName)
{

    //============================================
    //check whether we have sufficient funds
    //dont forget the surcharge
    auto equip_service = gWorldManager->getKernel()->GetServiceManager()->GetService<swganh::equipment::EquipmentService>("EquipmentService");
	//auto inventory	= dynamic_cast<Inventory*>(equip_service->GetEquippedObject(player, "inventory"));
	auto bank		= dynamic_cast<Bank*>(equip_service->GetEquippedObject(player->GetCreature(), "bank"));

	if(!bank)    {
		LOG (error) << "TreasuryManager::bankJoin No bank for " << player->getId();
		return;
	}

    int32 credits = bank->getCredits();

    int32 surcharge = (int32)((amount/100)*5);

    if((amount + surcharge) > credits)
    {
        BString uniName = targetName;
        uniName.convert(BSTRType_Unicode16);

        gMessageLib->SendSystemMessage(::common::OutOfBand("base_player", "prose_tip_nsf_bank", L"", L"", uniName.getUnicode16(), amount), player);
        return;
    }
    //now get the player
    int8 name[50];
    mDatabase->escapeString(name,targetName.getAnsi(),targetName.getLength());

    int8 sql[256];
    sprintf(sql,"SELECT id FROM %s.characters WHERE firstname like '%s'",mDatabase->galaxy(),name);

    TreasuryManagerAsyncContainer* asyncContainer;
    asyncContainer = new TreasuryManagerAsyncContainer(TREMQuery_BankTipgetId,player->getClient());
    asyncContainer->amount = amount;
    asyncContainer->surcharge = surcharge;
    asyncContainer->targetName = targetName;
    asyncContainer->player = player;

    mDatabase->executeSqlAsync(this,asyncContainer,sql);
}
Example #27
0
//=============================================================================
//
// update existing waypoint
// never call this directly - always go over the datapad!!!!!
//
void ObjectFactory::requestUpdatedWaypoint(ObjectFactoryCallback* ofCallback,uint64 wpId,BString name,
        const glm::vec3& coords,uint16 planetId,uint64 ownerId, uint8 activeStatus)
{
    PlayerObject* player = dynamic_cast<PlayerObject*>(gWorldManager->getObjectById(ownerId));
    OFAsyncContainer* asyncContainer = new(mDbAsyncPool.ordered_malloc()) OFAsyncContainer(ofCallback,QFQuery_WaypointUpdate,player->getClient());
    asyncContainer->Id = wpId;

    int8 sql[512],*sqlPointer;
    int8 restStr[128];
    name.convert(BSTRType_ANSI);
    sprintf(sql,"CALL sp_WaypointUpdate('");
    sqlPointer = sql + strlen(sql);
    sqlPointer += mDatabase->escapeString(sqlPointer, name.getAnsi() ,name.getLength());
    sprintf(restStr,"',%"PRIu64",%f,%f,%f,%u,%u)",wpId, coords.x, coords.y, coords.z, planetId, activeStatus);
    strcat(sql,restStr);

    mDatabase->executeProcedureAsync(this,asyncContainer,sql);
    
}
Example #28
0
void ObjectController::_handleNewbieSelectStartingLocation(uint64 targetId,Message* message,ObjectControllerCmdProperties* cmdProperties)
{
    PlayerObject* player = dynamic_cast<PlayerObject*>(mObject);
    // gLogger->hexDump(message->getData(),message->getSize());

    // Find the planet and position.
    if (gWorldConfig->isTutorial())
    {
        BString name;
        message->getStringUnicode16(name);

        if (!(name.getLength()))
        {
            return;
        }
        name.convert(BSTRType_ANSI);
        player->getTutorial()->warpToStartingLocation(name);
    }
}
void ObjectController::_handleSetBiography(uint64 targetId,Message* message,ObjectControllerCmdProperties* cmdProperties)
{
    PlayerObject*	player	= dynamic_cast<PlayerObject*>(mObject);
    BString			bio;
    int8			sql[5000],end[64],*sqlPointer;

    message->getStringUnicode16(bio);

    player->setBiography(bio);

    bio.convert(BSTRType_ANSI);
    sprintf(sql,"UPDATE %s.character_biography SET biography ='",mDatabase->galaxy());
    sprintf(end,"' WHERE character_id = %" PRIu64 "",player->getId());
    sqlPointer = sql + strlen(sql);
    sqlPointer += mDatabase->escapeString(sqlPointer,bio.getAnsi(),bio.getLength());
    strcat(sql,end);

    mDatabase->executeAsyncSql(sql);
    
}
Example #30
0
void ObjectController::_handleSurrenderSkill(uint64 targetId,Message* message,ObjectControllerCmdProperties* cmdProperties)
{
    PlayerObject*	player		= dynamic_cast<PlayerObject*>(mObject);
    BString			skillStr;

    message->getStringUnicode16(skillStr);
    skillStr.convert(BSTRType_ANSI);

    if(!(skillStr.getLength()))
    {
        DLOG(info) << "ObjectController::handleSurrenderSkill: no skillname";
        return;
    }

    Skill* skill = gSkillManager->getSkillByName(skillStr.getAnsi());

    if(skill == NULL)
    {
        DLOG(info)<<"ObjectController::handleSurrenderSkill: could not find skill " << skillStr.getAnsi();
        return;
    }

    gSkillManager->dropSkill(skill->mId,player);
}