Server accepts and creates the character's data
This commit is contained in:
@@ -92,9 +92,10 @@ private:
|
||||
void SaveServerState();
|
||||
|
||||
//character management
|
||||
// void HandleCharacterNew(CharacterPacket* const);
|
||||
// void HandleCharacterDelete(CharacterPacket* const);
|
||||
// void HandleCharacterUpdate(CharacterPacket* const);
|
||||
void HandleCharacterCreate(CharacterPacket* const);
|
||||
void HandleCharacterDelete(CharacterPacket* const);
|
||||
void HandleCharacterLoad(CharacterPacket* const);
|
||||
void HandleCharacterUnload(CharacterPacket* const);
|
||||
|
||||
//mismanagement
|
||||
// void HandleSynchronize(ClientPacket* const);
|
||||
|
||||
+14
-14
@@ -274,6 +274,20 @@ void ServerApplication::HandlePacket(SerialPacket* const argPacket) {
|
||||
HandleRegionRequest(static_cast<RegionPacket*>(argPacket));
|
||||
break;
|
||||
|
||||
//character management
|
||||
case SerialPacketType::CHARACTER_CREATE:
|
||||
HandleCharacterCreate(static_cast<CharacterPacket*>(argPacket));
|
||||
break;
|
||||
case SerialPacketType::CHARACTER_DELETE:
|
||||
HandleCharacterDelete(static_cast<CharacterPacket*>(argPacket));
|
||||
break;
|
||||
case SerialPacketType::CHARACTER_LOAD:
|
||||
HandleCharacterLoad(static_cast<CharacterPacket*>(argPacket));
|
||||
break;
|
||||
case SerialPacketType::CHARACTER_UNLOAD:
|
||||
HandleCharacterUnload(static_cast<CharacterPacket*>(argPacket));
|
||||
break;
|
||||
|
||||
/*
|
||||
case SerialPacketType::QUERY_CHARACTER_EXISTS:
|
||||
// HandleCharacterStatsRequest(static_cast<RegionPacket*>(argPacket));
|
||||
@@ -288,20 +302,6 @@ void ServerApplication::HandlePacket(SerialPacket* const argPacket) {
|
||||
// HandleCharacterStatsRequest(static_cast<RegionPacket*>(argPacket));
|
||||
break;
|
||||
|
||||
//character management
|
||||
case SerialPacketType::CHARACTER_CREATE:
|
||||
// HandleCharacterNew(static_cast<CharacterPacket*>(argPacket));
|
||||
break;
|
||||
case SerialPacketType::CHARACTER_DELETE:
|
||||
// HandleCharacterDelete(static_cast<CharacterPacket*>(argPacket));
|
||||
break;
|
||||
case SerialPacketType::CHARACTER_LOAD:
|
||||
// HandleCharacterNew(static_cast<CharacterPacket*>(argPacket));
|
||||
break;
|
||||
case SerialPacketType::CHARACTER_UNLOAD:
|
||||
// HandleCharacterDelete(static_cast<CharacterPacket*>(argPacket));
|
||||
break;
|
||||
|
||||
//character movement
|
||||
case SerialPacketType::CHARACTER_SET_ROOM:
|
||||
// HandleCharacterUpdate(static_cast<CharacterPacket*>(argPacket));
|
||||
|
||||
+44
-19
@@ -306,45 +306,70 @@ void ServerApplication::HandleRegionRequest(RegionPacket* const argPacket) {
|
||||
network.SendTo(argPacket->srcAddress, static_cast<SerialPacket*>(&newPacket));
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
//-------------------------
|
||||
//Character Management
|
||||
//-------------------------
|
||||
|
||||
//SET: entities
|
||||
void ServerApplication::HandleCharacterNew(CharacterPacket* const argPacket) {
|
||||
//NOTE: misnomer, try to load the character first
|
||||
int characterIndex = characterMgr.Load(argPacket->accountIndex, argPacket->handle, argPacket->avatar);
|
||||
void ServerApplication::HandleCharacterCreate(CharacterPacket* const argPacket) {
|
||||
int characterIndex = characterMgr.Create(argPacket->accountIndex, argPacket->handle, argPacket->avatar);
|
||||
|
||||
//cannot load or create
|
||||
if (characterIndex < 0) {
|
||||
//build the error message
|
||||
std::ostringstream msg;
|
||||
if (characterIndex == -1) {
|
||||
msg << "Character already loaded: ";
|
||||
}
|
||||
else if (characterIndex == -2) {
|
||||
msg << "Character already exists: ";
|
||||
}
|
||||
msg << argPacket->handle;
|
||||
msg << "Character already exists: " << argPacket->handle;
|
||||
|
||||
//create, fill and send the packet
|
||||
//build & send the packet
|
||||
TextPacket newPacket;
|
||||
newPacket.type = SerialPacketType::CHARACTER_REJECTION;
|
||||
memset(newPacket.name, 0, PACKET_STRING_SIZE);
|
||||
strncpy(newPacket.text, msg.str().c_str(), PACKET_STRING_SIZE);
|
||||
network.SendTo(argPacket->srcAddress, static_cast<SerialPacket*>(&newPacket));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//send this new character to all clients
|
||||
//send this character to the player
|
||||
CharacterPacket newPacket;
|
||||
newPacket.type = SerialPacketType::CHARACTER_CREATE;
|
||||
CopyCharacterToPacket(&newPacket, characterIndex);
|
||||
PumpPacket(&newPacket);
|
||||
//TODO?
|
||||
}
|
||||
|
||||
void ServerApplication::HandleCharacterDelete(CharacterPacket* const argPacket) {
|
||||
//TODO
|
||||
}
|
||||
|
||||
void ServerApplication::HandleCharacterLoad(CharacterPacket* const argPacket) {
|
||||
int characterIndex = characterMgr.Load(argPacket->accountIndex, argPacket->handle, argPacket->avatar);
|
||||
|
||||
if (characterIndex < 0) {
|
||||
//build the error message
|
||||
std::ostringstream msg;
|
||||
if (characterIndex == -1)
|
||||
msg << "Character already loaded: ";
|
||||
if (characterIndex == -1)
|
||||
msg << "Character name is taken: ";
|
||||
msg << argPacket->handle;
|
||||
|
||||
//build & send the packet
|
||||
TextPacket newPacket;
|
||||
newPacket.type = SerialPacketType::CHARACTER_REJECTION;
|
||||
strncpy(newPacket.text, msg.str().c_str(), PACKET_STRING_SIZE);
|
||||
network.SendTo(argPacket->srcAddress, static_cast<SerialPacket*>(&newPacket));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//send this character to the player
|
||||
CharacterPacket newPacket;
|
||||
newPacket.type = SerialPacketType::CHARACTER_CREATE;
|
||||
//TODO?
|
||||
}
|
||||
|
||||
void ServerApplication::HandleCharacterUnload(CharacterPacket* const argPacket) {
|
||||
//TODO
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
//SET: entities
|
||||
void ServerApplication::HandleCharacterDelete(CharacterPacket* const argPacket) {
|
||||
//NOTE: Disconnecting only unloads a character, this explicitly deletes it
|
||||
|
||||
Reference in New Issue
Block a user