1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-24 21:57:44 +00:00

GM Ranks, some fixes

This commit is contained in:
amibu 2017-09-11 18:59:50 +02:00
parent 4b914aae3c
commit cb7c6ab65e
13 changed files with 398 additions and 357 deletions

View file

@ -11,7 +11,7 @@
<LobbyHost>127.0.0.1</LobbyHost> <LobbyHost>127.0.0.1</LobbyHost>
<!-- IP of the frontier server --> <!-- IP of the frontier server -->
<FrontierHost>127.0.0.1</FrontierHost> <FrontierHost>127.0.0.1</FrontierHost>
<!-- Secret used for server auth --> <!-- Secret used for server auth - you *must* change this for public servers -->
<ServerSecret>default</ServerSecret> <ServerSecret>default</ServerSecret>
<!-- Web server port --> <!-- Web server port -->
<HttpPort>80</HttpPort> <HttpPort>80</HttpPort>
@ -23,4 +23,9 @@
<Database>sapphire</Database> <Database>sapphire</Database>
</Mysql> </Mysql>
</General> </General>
<Parameters>
<!-- GM Rank for newly created characters - should be changed to 0 for public servers -->
<DefaultGMRank>255</DefaultGMRank>
</Parameters>
</Settings> </Settings>

View file

@ -218,7 +218,7 @@ void Core::Network::GameConnection::enterWorld( FFXIVARR_PACKET_RAW& packet, uin
uint64_t lookupId = *reinterpret_cast< uint64_t* >( &packet.data[0] + 0x18 ); uint64_t lookupId = *reinterpret_cast< uint64_t* >( &packet.data[0] + 0x18 );
uint32_t logInCharId; uint32_t logInCharId = -1;
std::string logInCharName; std::string logInCharName;
auto charList = g_restConnector.getCharList( ( char * )m_pSession->getSessionId() ); auto charList = g_restConnector.getCharList( ( char * )m_pSession->getSessionId() );
for( uint32_t i = 0; i < charList.size(); i++ ) for( uint32_t i = 0; i < charList.size(); i++ )
@ -233,6 +233,8 @@ void Core::Network::GameConnection::enterWorld( FFXIVARR_PACKET_RAW& packet, uin
} }
} }
if( logInCharId == -1 )
return;
g_log.info( "[" + std::to_string( m_pSession->getAccountID() ) + "] Logging in as " + logInCharName + "(" + std::to_string( logInCharId ) + ")" ); g_log.info( "[" + std::to_string( m_pSession->getAccountID() ) + "] Logging in as " + logInCharName + "(" + std::to_string( logInCharId ) + ")" );

View file

@ -270,6 +270,7 @@ namespace Core {
" unlocks, " " unlocks, "
" QuestTracking, " " QuestTracking, "
" Aetheryte, " " Aetheryte, "
" GMRank, "
" UPDATE_DATE ) " " UPDATE_DATE ) "
" VALUES (" + std::to_string( m_iD ) + ", " " VALUES (" + std::to_string( m_iD ) + ", "
+ std::to_string( m_guardianDeity ) + ", " + std::to_string( m_guardianDeity ) + ", "
@ -283,7 +284,8 @@ namespace Core {
+ "UNHEX('" + std::string( Util::binaryToHexString( (uint8_t*)questComplete, 200 ) ) + "'), " + "UNHEX('" + std::string( Util::binaryToHexString( (uint8_t*)questComplete, 200 ) ) + "'), "
+ "UNHEX('" + std::string( Util::binaryToHexString( (uint8_t*)unlocks, 64 ) ) + "'), " + "UNHEX('" + std::string( Util::binaryToHexString( (uint8_t*)unlocks, 64 ) ) + "'), "
+ "UNHEX('" + std::string( Util::binaryToHexString( (uint8_t*)questTracking, 10 ) ) + "'), " + "UNHEX('" + std::string( Util::binaryToHexString( (uint8_t*)questTracking, 10 ) ) + "'), "
+ "UNHEX('" + std::string( Util::binaryToHexString( (uint8_t*)aetherytes, 12 ) ) + "'), NOW());" ); + "UNHEX('" + std::string( Util::binaryToHexString( (uint8_t*)aetherytes, 12 ) ) + "'),"
+ std::to_string( m_gmRank ) + ", NOW());" );
g_database.execute( "INSERT INTO characlass (CharacterId, Lv_" + std::to_string( g_exdData.m_classJobInfoMap[m_class].exp_idx ) + ", UPDATE_DATE ) " g_database.execute( "INSERT INTO characlass (CharacterId, Lv_" + std::to_string( g_exdData.m_classJobInfoMap[m_class].exp_idx ) + ", UPDATE_DATE ) "

View file

@ -140,6 +140,16 @@ namespace Core {
m_tribe = tribe; m_tribe = tribe;
} }
uint8_t getGmRank()
{
return m_birthMonth;
}
void setGmRank( uint8_t rank )
{
m_gmRank = rank;
}
uint32_t m_modelEquip[10]; uint32_t m_modelEquip[10];
private: private:
@ -162,6 +172,8 @@ namespace Core {
std::map<uint8_t, uint16_t> m_classMap; std::map<uint8_t, uint16_t> m_classMap;
uint8_t m_look[26]; uint8_t m_look[26];
uint8_t m_gmRank;
char m_name[34]; char m_name[34];

View file

@ -113,7 +113,7 @@ bool Core::Network::SapphireAPI::createAccount( const std::string& username, con
} }
int Core::Network::SapphireAPI::createCharacter( const int& accountId, const std::string& name, const std::string& infoJson ) int Core::Network::SapphireAPI::createCharacter( const int& accountId, const std::string& name, const std::string& infoJson, const int& gmRank )
{ {
Core::PlayerMinimal newPlayer; Core::PlayerMinimal newPlayer;
@ -166,6 +166,7 @@ int Core::Network::SapphireAPI::createCharacter( const int& accountId, const std
newPlayer.setBirthDay( tmpVector2.at( 3 ), tmpVector2.at( 2 ) ); newPlayer.setBirthDay( tmpVector2.at( 3 ), tmpVector2.at( 2 ) );
newPlayer.setClass( tmpVector2.at( 4 ) ); newPlayer.setClass( tmpVector2.at( 4 ) );
newPlayer.setTribe( tmpVector2.at( 5 ) ); newPlayer.setTribe( tmpVector2.at( 5 ) );
newPlayer.setGmRank( gmRank );
newPlayer.saveAsNew(); newPlayer.saveAsNew();

View file

@ -27,7 +27,7 @@ namespace Core
bool createAccount( const std::string& username, const std::string& pass, std::string& sId ); bool createAccount( const std::string& username, const std::string& pass, std::string& sId );
int32_t createCharacter( const int& accountId, const std::string& name, const std::string& infoJson ); int32_t createCharacter( const int& accountId, const std::string& name, const std::string& infoJson, const int& gmRank );
void deleteCharacter( std::string name, uint32_t accountId ); void deleteCharacter( std::string name, uint32_t accountId );

View file

@ -331,7 +331,7 @@ int main(int argc, char* argv[])
} }
else else
{ {
int32_t charId = g_sapphireAPI.createCharacter( result, name, finalJson ); int32_t charId = g_sapphireAPI.createCharacter( result, name, finalJson, m_pConfig->getValue< uint8_t >( "Settings.Parameters.DefaultGMRank", 255 ) );
std::string json_string = "{\"result\":\"" + std::to_string( charId ) + "\"}"; std::string json_string = "{\"result\":\"" + std::to_string( charId ) + "\"}";
*response << "HTTP/1.1 200\r\nContent-Length: " << json_string.length() << "\r\n\r\n" << json_string; *response << "HTTP/1.1 200\r\nContent-Length: " << json_string.length() << "\r\n\r\n" << json_string;

View file

@ -110,6 +110,16 @@ uint16_t Core::Entity::Player::getZoneId() const
return m_zoneId; return m_zoneId;
} }
uint8_t Core::Entity::Player::getGmRank() const
{
return m_gmRank;
}
void Core::Entity::Player::setGmRank( uint8_t rank )
{
m_gmRank = rank;
}
uint8_t Core::Entity::Player::getMode() const uint8_t Core::Entity::Player::getMode() const
{ {
return m_mode; return m_mode;
@ -780,11 +790,6 @@ void Core::Entity::Player::setLevelForClass( uint8_t level, Core::Common::ClassJ
setSyncFlag( PlayerSyncFlags::ExpLevel ); setSyncFlag( PlayerSyncFlags::ExpLevel );
} }
uint8_t Core::Entity::Player::getUserLevel() const
{
return m_userLevel;
}
void Core::Entity::Player::eventActionStart( uint32_t eventId, void Core::Entity::Player::eventActionStart( uint32_t eventId,
uint32_t action, uint32_t action,
ActionCallback finishCallback, ActionCallback finishCallback,

View file

@ -478,6 +478,9 @@ public:
uint16_t getZoneId() const; uint16_t getZoneId() const;
uint8_t getGmRank() const;
void setGmRank( uint8_t rank );
uint8_t getMode() const; uint8_t getMode() const;
void setMode( uint8_t mode ); void setMode( uint8_t mode );
@ -589,7 +592,7 @@ private:
boost::shared_ptr< Common::QuestActive > m_activeQuests[30]; boost::shared_ptr< Common::QuestActive > m_activeQuests[30];
int16_t m_questTracking[5]; int16_t m_questTracking[5];
uint8_t m_stateFlags[7]; uint8_t m_stateFlags[7];
uint8_t m_userLevel; uint8_t m_gmRank;
uint16_t zoneId; uint16_t zoneId;
bool m_bInCombat; bool m_bInCombat;

View file

@ -80,7 +80,8 @@ bool Core::Entity::Player::load( uint32_t charId, Core::SessionPtr pSession )
"cd.GrandCompany, " "cd.GrandCompany, "
"cd.GrandCompanyRank, " "cd.GrandCompanyRank, "
"cd.CFPenaltyUntil, " "cd.CFPenaltyUntil, "
"cd.OpeningSequence " "cd.OpeningSequence, "
"cd.GMRank "
"FROM charabase AS c " "FROM charabase AS c "
" INNER JOIN charadetail AS cd " " INNER JOIN charadetail AS cd "
" ON c.CharacterId = cd.CharacterId " " ON c.CharacterId = cd.CharacterId "
@ -171,13 +172,13 @@ bool Core::Entity::Player::load( uint32_t charId, Core::SessionPtr pSession )
m_openingSequence = field[36].getUInt32(); m_openingSequence = field[36].getUInt32();
m_gmRank = field[37].getUInt8();
m_pCell = nullptr; m_pCell = nullptr;
if( !loadActiveQuests() || !loadClassData() || !loadSearchInfo() ) if( !loadActiveQuests() || !loadClassData() || !loadSearchInfo() )
g_log.error( "Player id " + char_id_str + " data corrupt!" ); g_log.error( "Player id " + char_id_str + " data corrupt!" );
m_userLevel = 1;
m_maxHp = getMaxHp(); m_maxHp = getMaxHp();
m_maxMp = getMaxMp(); m_maxMp = getMaxMp();

View file

@ -70,6 +70,12 @@ void Core::DebugCommandHandler::registerCommand( const std::string& n, Core::Deb
void Core::DebugCommandHandler::execCommand( char * data, Core::Entity::PlayerPtr pPlayer ) void Core::DebugCommandHandler::execCommand( char * data, Core::Entity::PlayerPtr pPlayer )
{ {
if( pPlayer->getGmRank() <= 0 )
{
pPlayer->sendUrgent( "You are not allowed to use debug commands." );
return;
}
// define callback pointer // define callback pointer
void ( DebugCommandHandler::*pf )( char *, Entity::PlayerPtr, boost::shared_ptr< DebugCommand > ); void ( DebugCommandHandler::*pf )( char *, Entity::PlayerPtr, boost::shared_ptr< DebugCommand > );

View file

@ -86,9 +86,11 @@ enum GmCommand
Jump = 0x025E, Jump = 0x025E,
JumpNpc = 0x025F, JumpNpc = 0x025F,
}; };
void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPacket, void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPacket, Entity::PlayerPtr pPlayer )
Entity::PlayerPtr pPlayer )
{ {
if( pPlayer->getGmRank() <= 0 )
return;
uint32_t commandId = inPacket.getValAt< uint32_t >( 0x20 ); uint32_t commandId = inPacket.getValAt< uint32_t >( 0x20 );
uint32_t param1 = inPacket.getValAt< uint32_t >( 0x24 ); uint32_t param1 = inPacket.getValAt< uint32_t >( 0x24 );
uint32_t param2 = inPacket.getValAt< uint32_t >( 0x28 ); uint32_t param2 = inPacket.getValAt< uint32_t >( 0x28 );
@ -320,7 +322,7 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac
{ {
targetPlayer->setGcRankAt( targetPlayer->getGc() - 1, param1 ); targetPlayer->setGcRankAt( targetPlayer->getGc() - 1, param1 );
pPlayer->sendNotice( "GC Rank for " + targetPlayer->getName() + pPlayer->sendNotice( "GC Rank for " + targetPlayer->getName() +
" for GC " + std::to_string( targetPlayer->getGc()) + " for GC " + std::to_string( targetPlayer->getGc() ) +
" was set to " + std::to_string( targetPlayer->getGcRankArray()[targetPlayer->getGc() - 1] ) ); " was set to " + std::to_string( targetPlayer->getGcRankArray()[targetPlayer->getGc() - 1] ) );
break; break;
} }
@ -335,9 +337,11 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac
} }
void Core::Network::GameConnection::gm2Handler( const Packets::GamePacket& inPacket, void Core::Network::GameConnection::gm2Handler( const Packets::GamePacket& inPacket, Entity::PlayerPtr pPlayer )
Entity::PlayerPtr pPlayer )
{ {
if( pPlayer->getGmRank() <= 0 )
return;
uint32_t commandId = inPacket.getValAt< uint32_t >( 0x20 ); uint32_t commandId = inPacket.getValAt< uint32_t >( 0x20 );
std::string param1 = inPacket.getStringAt( 0x34 ); std::string param1 = inPacket.getStringAt( 0x34 );
@ -358,7 +362,7 @@ void Core::Network::GameConnection::gm2Handler( const Packets::GamePacket& inPac
} }
else else
{ {
pPlayer->sendUrgent("Player " + param1 + " not found on this server."); pPlayer->sendUrgent( "Player " + param1 + " not found on this server." );
return; return;
} }
} }
@ -379,7 +383,7 @@ void Core::Network::GameConnection::gm2Handler( const Packets::GamePacket& inPac
targetPlayer->sendToInRangeSet( ActorControlPacket143( pPlayer->getId(), ZoneIn, 0x01, 0x01, 0, 113 ), true ); targetPlayer->sendToInRangeSet( ActorControlPacket143( pPlayer->getId(), ZoneIn, 0x01, 0x01, 0, 113 ), true );
targetPlayer->sendToInRangeSet( ActorControlPacket142( pPlayer->getId(), SetStatus, targetPlayer->sendToInRangeSet( ActorControlPacket142( pPlayer->getId(), SetStatus,
static_cast< uint8_t >( Entity::Actor::ActorStatus::Idle ) ), true ); static_cast< uint8_t >( Entity::Actor::ActorStatus::Idle ) ), true );
pPlayer->sendNotice( "Raised " + targetPlayer->getName()); pPlayer->sendNotice( "Raised " + targetPlayer->getName() );
break; break;
} }
case GmCommand::Jump: case GmCommand::Jump:
@ -390,7 +394,7 @@ void Core::Network::GameConnection::gm2Handler( const Packets::GamePacket& inPac
} }
pPlayer->changePosition( targetActor->getPos().x, targetActor->getPos().y, targetActor->getPos().z, pPlayer->changePosition( targetActor->getPos().x, targetActor->getPos().y, targetActor->getPos().z,
targetActor->getRotation() ); targetActor->getRotation() );
pPlayer->sendNotice( "Jumping to " + targetPlayer->getName()); pPlayer->sendNotice( "Jumping to " + targetPlayer->getName() );
break; break;
} }
case GmCommand::Call: case GmCommand::Call:

View file

@ -45,7 +45,7 @@ namespace Server {
m_data.tPCurr = pPlayer->getTp(); m_data.tPCurr = pPlayer->getTp();
m_data.hPMax = pPlayer->getMaxHp(); m_data.hPMax = pPlayer->getMaxHp();
m_data.mPMax = pPlayer->getMaxMp(); m_data.mPMax = pPlayer->getMaxMp();
m_data.gmRank = 0xff; m_data.gmRank = pPlayer->getGmRank();
//m_data.tPMax = 3000; //m_data.tPMax = 3000;
m_data.level = pPlayer->getLevel(); m_data.level = pPlayer->getLevel();
memcpy( m_data.look, pPlayer->getLookArray(), 26 ); memcpy( m_data.look, pPlayer->getLookArray(), 26 );