|
|
|
|
@@ -13,6 +13,7 @@
|
|
|
|
|
#include "../client/gamemode/GameMode.h"
|
|
|
|
|
#include "../raknet/RakPeerInterface.h"
|
|
|
|
|
#include "../raknet/PacketPriority.h"
|
|
|
|
|
#include "platform/log.h"
|
|
|
|
|
#ifndef STANDALONE_SERVER
|
|
|
|
|
#include "../client/sound/SoundEngine.h"
|
|
|
|
|
#endif
|
|
|
|
|
@@ -245,6 +246,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, ReadyPac
|
|
|
|
|
|
|
|
|
|
if (packet->type == ReadyPacket::READY_REQUESTEDCHUNKS)
|
|
|
|
|
onReady_RequestedChunks(source);
|
|
|
|
|
|
|
|
|
|
LOGI("Ready player two ready ready player two!!\n ");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ServerSideNetworkHandler::onReady_ClientGeneration(const RakNet::RakNetGUID& source)
|
|
|
|
|
@@ -375,6 +378,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, RemoveBl
|
|
|
|
|
|
|
|
|
|
oldTile->destroy(level, x, y, z, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LOGI("Remove block [%i, %i, %i]\n", packet->x, packet->y, packet->z);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, RequestChunkPacket* packet)
|
|
|
|
|
@@ -404,6 +409,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, RequestC
|
|
|
|
|
raknetInstance->send(source, p);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// LOGI("Requested chunk [%i, %i]\n", packet->x, packet->z);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ServerSideNetworkHandler::levelGenerated( Level* level )
|
|
|
|
|
@@ -430,23 +437,36 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, PlayerEq
|
|
|
|
|
if (!player) return;
|
|
|
|
|
if (rakPeer->GetMyGUID() == player->owner) return;
|
|
|
|
|
|
|
|
|
|
LOGI("Equip item: id %i aux %i\n", packet->itemId, packet->itemAuxValue);
|
|
|
|
|
|
|
|
|
|
// override the player's inventory
|
|
|
|
|
//int slot = player->inventory->getSlot(packet->itemId, packet->itemAuxValue);
|
|
|
|
|
int slot = Inventory::MAX_SELECTION_SIZE;
|
|
|
|
|
int slot = player->inventory->getSlot(packet->itemId, packet->itemAuxValue);
|
|
|
|
|
|
|
|
|
|
if (slot >= 0) {
|
|
|
|
|
if (packet->itemId == 0) {
|
|
|
|
|
player->inventory->clearSlot(slot);
|
|
|
|
|
} else {
|
|
|
|
|
// @note: 128 is an ugly hack for depletable items.
|
|
|
|
|
// @todo: fix
|
|
|
|
|
ItemInstance newItem(packet->itemId, 128, packet->itemAuxValue);
|
|
|
|
|
player->inventory->replaceSlot(slot, &newItem);
|
|
|
|
|
}
|
|
|
|
|
// if (packet->itemId == 0) {
|
|
|
|
|
// player->inventory->clearSlot(slot);
|
|
|
|
|
// } else {
|
|
|
|
|
// // @note: 128 is an ugly hack for depletable items.
|
|
|
|
|
// // @todo: fix
|
|
|
|
|
// ItemInstance newItem(packet->itemId, 128, packet->itemAuxValue);
|
|
|
|
|
// player->inventory->replaceSlot(slot, &newItem);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
player->inventory->moveToSelectedSlot(slot, true);
|
|
|
|
|
redistributePacket(packet, source);
|
|
|
|
|
} else if (packet->itemId == 0) {
|
|
|
|
|
player->inventory->linkEmptySlot(player->inventory->selected);
|
|
|
|
|
} else {
|
|
|
|
|
LOGW("Warning: Remote player doesn't have his thing, Odd!\n");
|
|
|
|
|
LOGW("Warning: Remote player doesn't have his thing (or crafted it)!\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LOGI("Inventory:\n");
|
|
|
|
|
for (int i = 0; i < player->inventory->numTotalSlots; i++) {
|
|
|
|
|
auto item = player->inventory->getItem(i);
|
|
|
|
|
if (item) LOGI("\t %i: %s (%i)\n", i, item->getName().c_str(), item->count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
redistributePacket(packet, source);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, PlayerArmorEquipmentPacket* packet) {
|
|
|
|
|
@@ -456,6 +476,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, PlayerAr
|
|
|
|
|
if (!player) return;
|
|
|
|
|
if (rakPeer->GetMyGUID() == player->owner) return;
|
|
|
|
|
|
|
|
|
|
LOGI("Equip armor: %i %i %i %i\n", packet->head, packet->torso, packet->legs, packet->feet);
|
|
|
|
|
|
|
|
|
|
packet->fillIn(player);
|
|
|
|
|
redistributePacket(packet, source);
|
|
|
|
|
}
|
|
|
|
|
@@ -467,6 +489,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, Interact
|
|
|
|
|
Entity* entity = level->getEntity(packet->targetId);
|
|
|
|
|
if (src && entity && src->isPlayer())
|
|
|
|
|
{
|
|
|
|
|
LOGI("Interact: source %i target %i\n", packet->sourceId, packet->targetId);
|
|
|
|
|
|
|
|
|
|
Player* player = (Player*) src;
|
|
|
|
|
if (InteractPacket::Attack == packet->action) {
|
|
|
|
|
player->swing();
|
|
|
|
|
@@ -545,6 +569,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, UseItemP
|
|
|
|
|
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, EntityEventPacket* packet) {
|
|
|
|
|
if (!level) return;
|
|
|
|
|
|
|
|
|
|
LOGI("EntityEventPacket: id %i\n", packet->eventId);
|
|
|
|
|
|
|
|
|
|
if (Entity* e = level->getEntity(packet->entityId))
|
|
|
|
|
e->handleEntityEvent(packet->eventId);
|
|
|
|
|
}
|
|
|
|
|
@@ -578,6 +604,11 @@ void ServerSideNetworkHandler::handle( const RakNet::RakNetGUID& source, SendInv
|
|
|
|
|
{
|
|
|
|
|
if (!level) return;
|
|
|
|
|
|
|
|
|
|
LOGI("Sent inventory:\n");
|
|
|
|
|
for (int i = 0; i < packet->numItems; i++) {
|
|
|
|
|
LOGI("\t %i: %s (%i)\n", i, packet->items.at(i).getName().c_str(), packet->items.at(i).count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Entity* entity = level->getEntity(packet->entityId);
|
|
|
|
|
if (entity && entity->isPlayer()) {
|
|
|
|
|
Player* p = (Player*)entity;
|
|
|
|
|
@@ -593,6 +624,8 @@ void ServerSideNetworkHandler::handle( const RakNet::RakNetGUID& source, DropIte
|
|
|
|
|
{
|
|
|
|
|
if (!level) return;
|
|
|
|
|
|
|
|
|
|
LOGI("DropItemPacket\n");
|
|
|
|
|
|
|
|
|
|
Entity* entity = level->getEntity(packet->entityId);
|
|
|
|
|
if (entity && entity->isPlayer()) {
|
|
|
|
|
Player* p = (Player*)entity;
|
|
|
|
|
@@ -602,6 +635,7 @@ void ServerSideNetworkHandler::handle( const RakNet::RakNetGUID& source, DropIte
|
|
|
|
|
|
|
|
|
|
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, ContainerClosePacket* packet) {
|
|
|
|
|
if (!level) return;
|
|
|
|
|
LOGI("ContainerClosePacket\n");
|
|
|
|
|
|
|
|
|
|
Player* p = findPlayer(level, &source);
|
|
|
|
|
if (!p) return;
|
|
|
|
|
@@ -612,6 +646,7 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, Containe
|
|
|
|
|
|
|
|
|
|
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, ContainerSetSlotPacket* packet) {
|
|
|
|
|
if (!level) return;
|
|
|
|
|
LOGI("ContainerSetSlot: slot %i item %s\n", packet->slot, packet->item.getName().c_str());
|
|
|
|
|
|
|
|
|
|
Player* p = findPlayer(level, &source);
|
|
|
|
|
if (!p) return;
|
|
|
|
|
@@ -640,6 +675,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, Containe
|
|
|
|
|
|
|
|
|
|
void ServerSideNetworkHandler::handle( const RakNet::RakNetGUID& source, SetHealthPacket* packet )
|
|
|
|
|
{
|
|
|
|
|
LOGI("SetHealthPacket\n");
|
|
|
|
|
|
|
|
|
|
for (unsigned int i = 0; i < level->players.size(); ++i) {
|
|
|
|
|
Player* p = level->players[i];
|
|
|
|
|
if (p->owner == source) {
|
|
|
|
|
@@ -658,6 +695,8 @@ void ServerSideNetworkHandler::handle( const RakNet::RakNetGUID& source, SignUpd
|
|
|
|
|
if (!level)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
LOGI("SignUpdate: [%i, %i, %i]\n", packet->x, packet->y, packet->z);
|
|
|
|
|
|
|
|
|
|
TileEntity* te = level->getTileEntity(packet->x, packet->y, packet->z);
|
|
|
|
|
if (TileEntity::isType(te, TileEntityType::Sign)) {
|
|
|
|
|
SignTileEntity* ste = (SignTileEntity*) te;
|
|
|
|
|
|