diff --git a/client/entities/base_creature.cpp b/client/entities/base_creature.cpp index 046d728..47278b6 100644 --- a/client/entities/base_creature.cpp +++ b/client/entities/base_creature.cpp @@ -37,7 +37,7 @@ std::string BaseCreature::GetHandle() const { std::string BaseCreature::SetAvatar(SDL_Renderer* const renderer, std::string s) { avatar = s; - sprite.Load(renderer, ConfigUtility::GetSingleton()["dir.sprites"] + avatar, 4, 1); + sprite.Load(renderer, ConfigUtility::GetSingleton()["dir.sprites"] + avatar, 4, 4); return avatar; } diff --git a/client/scenes/world.cpp b/client/scenes/world.cpp index 759af00..758abe9 100644 --- a/client/scenes/world.cpp +++ b/client/scenes/world.cpp @@ -684,13 +684,16 @@ void World::hCharacterCreate(CharacterPacket* const argPacket) { roomIndex = argPacket->roomIndex; //query the world state (room) - CharacterPacket newPacket; - memset(&newPacket, 0, MAX_PACKET_SIZE); - newPacket.type = SerialPacketType::QUERY_CHARACTER_EXISTS; - newPacket.roomIndex = roomIndex; - network.SendTo(Channels::SERVER, &newPacket); - newPacket.type = SerialPacketType::QUERY_CREATURE_EXISTS; - network.SendTo(Channels::SERVER, &newPacket); + CharacterPacket characterPacket; + memset(&characterPacket, 0, MAX_PACKET_SIZE); + characterPacket.type = SerialPacketType::QUERY_CHARACTER_EXISTS; + characterPacket.roomIndex = roomIndex; + network.SendTo(Channels::SERVER, &characterPacket); + + CreaturePacket creaturePacket; + creaturePacket.type = SerialPacketType::QUERY_CREATURE_EXISTS; + creaturePacket.roomIndex = roomIndex; + network.SendTo(Channels::SERVER, &creaturePacket); } //debug @@ -805,14 +808,14 @@ void World::hCreatureCreate(CreaturePacket* const argPacket) { throw(std::runtime_error(msg.str())); } -// //ignore creatures from other rooms -// if (roomIndex != argPacket->roomIndex) { -// //temporary error checking -// std::ostringstream msg; -// msg << "Creature from the wrong room received: "; -// msg << "creatureIndex: " << argPacket->creatureIndex << ", roomIndex: " << argPacket->roomIndex; -// throw(std::runtime_error(msg.str())); -// } + //ignore creatures from other rooms + if (roomIndex != argPacket->roomIndex) { + //temporary error checking + std::ostringstream msg; + msg << "Creature from the wrong room received: "; + msg << "creatureIndex: " << argPacket->creatureIndex << ", roomIndex: " << argPacket->roomIndex; + throw(std::runtime_error(msg.str())); + } //implicitly create the element BaseCreature* creature = &creatureMap[argPacket->creatureIndex]; @@ -843,6 +846,8 @@ void World::hCreatureUnload(CreaturePacket* const argPacket) { } void World::hQueryCreatureExists(CreaturePacket* const argPacket) { + std::cout << "Creature Query" << std::endl; + //ignore creatures in a different room (sub-optimal) if (argPacket->roomIndex != roomIndex) { return; diff --git a/server/rooms/room_manager.cpp b/server/rooms/room_manager.cpp index 9560fc7..68c4814 100644 --- a/server/rooms/room_manager.cpp +++ b/server/rooms/room_manager.cpp @@ -142,6 +142,7 @@ void RoomManager::PopCharacter(CharacterData const* character) { }); } +//TODO: rename these functions from Get to Find RoomData* RoomManager::Get(int uid) { std::map::iterator it = elementMap.find(uid); diff --git a/server/server_application.cpp b/server/server_application.cpp index 2e93803..4596f2d 100644 --- a/server/server_application.cpp +++ b/server/server_application.cpp @@ -806,15 +806,16 @@ void ServerApplication::hCharacterMovement(CharacterPacket* const argPacket) { //TODO: On creature create, etc. void ServerApplication::hQueryCreatureExists(CreaturePacket* const argPacket) { + //respond with all creature data + CreaturePacket newPacket; + CreatureManager* creatureMgr = roomMgr.Get(argPacket->roomIndex)->GetCreatureMgr(); - CreaturePacket newPacket; - for ( auto& it : *(creatureMgr->GetContainer()) ) { - if (distance(argPacket->origin, it.second.GetOrigin()) < 1000) { - copyCreatureToPacket(&newPacket, &(it.second), it.first); - newPacket.type = SerialPacketType::QUERY_CREATURE_EXISTS; - network.SendTo(argPacket->srcAddress, reinterpret_cast(&newPacket), MAX_PACKET_SIZE); - } + //TODO: move this into the room class + for (auto& it : *(creatureMgr->GetContainer()) ) { + copyCreatureToPacket(&newPacket, &(it.second), it.first); + newPacket.type = SerialPacketType::QUERY_CREATURE_EXISTS; + network.SendTo(argPacket->srcAddress, static_cast(&newPacket)); } }