mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-03-07 09:09:48 +00:00
Merge branch 'main' into main
This commit is contained in:
@@ -285,7 +285,7 @@ void GameMessageHandler::HandleMessage(RakNet::BitStream* inStream, const System
|
||||
|
||||
auto* skillComponent = entity->GetComponent<SkillComponent>();
|
||||
|
||||
success = skillComponent->CastPlayerSkill(behaviorId, startSkill.uiSkillHandle, bs, startSkill.optionalTargetID);
|
||||
success = skillComponent->CastPlayerSkill(behaviorId, startSkill.uiSkillHandle, bs, startSkill.optionalTargetID, startSkill.skillID);
|
||||
|
||||
if (success && entity->GetCharacter()) {
|
||||
DestroyableComponent* destComp = entity->GetComponent<DestroyableComponent>();
|
||||
@@ -595,7 +595,9 @@ void GameMessageHandler::HandleMessage(RakNet::BitStream* inStream, const System
|
||||
case GAME_MSG_VEHICLE_NOTIFY_HIT_IMAGINATION_SERVER:
|
||||
GameMessages::HandleVehicleNotifyHitImaginationServer(inStream, entity, sysAddr);
|
||||
break;
|
||||
|
||||
case GAME_MSG_UPDATE_PROPERTY_PERFORMANCE_COST:
|
||||
GameMessages::HandleUpdatePropertyPerformanceCost(inStream, entity, sysAddr);
|
||||
break;
|
||||
// SG
|
||||
case GAME_MSG_UPDATE_SHOOTING_GALLERY_ROTATION:
|
||||
GameMessages::HandleUpdateShootingGalleryRotation(inStream, entity, sysAddr);
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "TeamManager.h"
|
||||
#include "ChatPackets.h"
|
||||
#include "GameConfig.h"
|
||||
#include "RocketLaunchLupComponent.h"
|
||||
|
||||
#include <sstream>
|
||||
#include <future>
|
||||
@@ -411,7 +412,7 @@ void GameMessages::SendGMLevelBroadcast(const LWOOBJID& objectID, uint8_t level)
|
||||
SEND_PACKET_BROADCAST
|
||||
}
|
||||
|
||||
void GameMessages::SendAddItemToInventoryClientSync(Entity* entity, const SystemAddress& sysAddr, Item* item, const LWOOBJID& objectID, bool showFlyingLoot, int itemCount, LWOOBJID subKey) {
|
||||
void GameMessages::SendAddItemToInventoryClientSync(Entity* entity, const SystemAddress& sysAddr, Item* item, const LWOOBJID& objectID, bool showFlyingLoot, int itemCount, LWOOBJID subKey, eLootSourceType lootSourceType) {
|
||||
CBITSTREAM
|
||||
CMSGHEADER
|
||||
|
||||
@@ -421,9 +422,8 @@ void GameMessages::SendAddItemToInventoryClientSync(Entity* entity, const System
|
||||
bitStream.Write(item->GetInfo().isBOE);
|
||||
bitStream.Write(item->GetInfo().isBOP);
|
||||
|
||||
bitStream.Write0(); // Loot source
|
||||
//if (invType != LOOTTYPE_NONE) bitStream.Write(invType);
|
||||
|
||||
bitStream.Write(lootSourceType != eLootSourceType::LOOT_SOURCE_NONE); // Loot source
|
||||
if (lootSourceType != eLootSourceType::LOOT_SOURCE_NONE) bitStream.Write(lootSourceType);
|
||||
LWONameValue extraInfo;
|
||||
|
||||
auto config = item->GetConfig();
|
||||
@@ -451,8 +451,8 @@ void GameMessages::SendAddItemToInventoryClientSync(Entity* entity, const System
|
||||
auto* inventory = item->GetInventory();
|
||||
const auto inventoryType = inventory->GetType();
|
||||
|
||||
bitStream.Write(inventoryType != INVENTORY_DEFAULT);
|
||||
if (inventoryType != INVENTORY_DEFAULT) bitStream.Write(inventoryType);
|
||||
bitStream.Write(inventoryType != eInventoryType::ITEMS);
|
||||
if (inventoryType != eInventoryType::ITEMS) bitStream.Write(inventoryType);
|
||||
|
||||
bitStream.Write(itemCount != 1);
|
||||
if (itemCount != 1) bitStream.Write(itemCount);
|
||||
@@ -558,7 +558,7 @@ void GameMessages::SendNotifyMissionTask(Entity* entity, const SystemAddress& sy
|
||||
SEND_PACKET
|
||||
}
|
||||
|
||||
void GameMessages::SendModifyLEGOScore(Entity* entity, const SystemAddress& sysAddr, int64_t score, int sourceType) {
|
||||
void GameMessages::SendModifyLEGOScore(Entity* entity, const SystemAddress& sysAddr, int64_t score, eLootSourceType sourceType) {
|
||||
CBITSTREAM
|
||||
CMSGHEADER
|
||||
|
||||
@@ -566,9 +566,8 @@ void GameMessages::SendModifyLEGOScore(Entity* entity, const SystemAddress& sysA
|
||||
bitStream.Write((uint16_t)GAME_MSG_MODIFY_LEGO_SCORE);
|
||||
bitStream.Write(score);
|
||||
|
||||
//Stuff stolen from the old codebase, no idea why this works. The proper implementation didn't for some reason.
|
||||
bitStream.Write((int32_t)129);
|
||||
bitStream.Write((unsigned char)0);
|
||||
bitStream.Write(sourceType != eLootSourceType::LOOT_SOURCE_NONE);
|
||||
if (sourceType != eLootSourceType::LOOT_SOURCE_NONE) bitStream.Write(sourceType);
|
||||
|
||||
SEND_PACKET
|
||||
}
|
||||
@@ -1254,8 +1253,7 @@ void GameMessages::SendVendorOpenWindow(Entity* entity, const SystemAddress& sys
|
||||
SEND_PACKET
|
||||
}
|
||||
|
||||
// ah yes, impl code in a send function, beautiful!
|
||||
void GameMessages::SendVendorStatusUpdate(Entity* entity, const SystemAddress& sysAddr) {
|
||||
void GameMessages::SendVendorStatusUpdate(Entity* entity, const SystemAddress& sysAddr, bool bUpdateOnly) {
|
||||
CBITSTREAM
|
||||
CMSGHEADER
|
||||
|
||||
@@ -1267,7 +1265,7 @@ void GameMessages::SendVendorStatusUpdate(Entity* entity, const SystemAddress& s
|
||||
bitStream.Write(entity->GetObjectID());
|
||||
bitStream.Write(GAME_MSG::GAME_MSG_VENDOR_STATUS_UPDATE);
|
||||
|
||||
bitStream.Write(false);
|
||||
bitStream.Write(bUpdateOnly);
|
||||
bitStream.Write(static_cast<uint32_t>(vendorItems.size()));
|
||||
|
||||
for (std::pair<LOT, int> item : vendorItems) {
|
||||
@@ -1275,6 +1273,7 @@ void GameMessages::SendVendorStatusUpdate(Entity* entity, const SystemAddress& s
|
||||
bitStream.Write(static_cast<int>(item.second));
|
||||
}
|
||||
|
||||
if (sysAddr == UNASSIGNED_SYSTEM_ADDRESS) SEND_PACKET_BROADCAST
|
||||
SEND_PACKET
|
||||
}
|
||||
|
||||
@@ -1517,6 +1516,18 @@ void GameMessages::SendRequestActivityEnter(LWOOBJID objectId, const SystemAddre
|
||||
SEND_PACKET
|
||||
}
|
||||
|
||||
void GameMessages::NotifyLevelRewards(LWOOBJID objectID, const SystemAddress& sysAddr, int level, bool sending_rewards) {
|
||||
CBITSTREAM
|
||||
CMSGHEADER
|
||||
|
||||
bitStream.Write(objectID);
|
||||
bitStream.Write((uint16_t)GAME_MSG::GAME_MSG_NOTIFY_LEVEL_REWARDS);
|
||||
|
||||
bitStream.Write(level);
|
||||
bitStream.Write(sending_rewards);
|
||||
|
||||
SEND_PACKET
|
||||
}
|
||||
|
||||
void GameMessages::SendSetShootingGalleryParams(LWOOBJID objectId, const SystemAddress& sysAddr,
|
||||
float cameraFOV,
|
||||
@@ -2716,10 +2727,15 @@ void GameMessages::HandleEnterProperty(RakNet::BitStream* inStream, Entity* enti
|
||||
auto* player = Player::GetPlayer(sysAddr);
|
||||
|
||||
auto* entranceComponent = entity->GetComponent<PropertyEntranceComponent>();
|
||||
if (entranceComponent != nullptr) {
|
||||
entranceComponent->OnEnterProperty(player, index, returnToZone, sysAddr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (entranceComponent == nullptr) return;
|
||||
|
||||
entranceComponent->OnEnterProperty(player, index, returnToZone, sysAddr);
|
||||
auto rocketLaunchLupComponent = entity->GetComponent<RocketLaunchLupComponent>();
|
||||
if (rocketLaunchLupComponent != nullptr) {
|
||||
rocketLaunchLupComponent->OnSelectWorld(player, index);
|
||||
}
|
||||
}
|
||||
|
||||
void GameMessages::HandleSetConsumableItem(RakNet::BitStream* inStream, Entity* entity, const SystemAddress& sysAddr)
|
||||
@@ -3227,12 +3243,12 @@ void GameMessages::HandleClientTradeRequest(RakNet::BitStream* inStream, Entity*
|
||||
|
||||
void GameMessages::HandleClientTradeCancel(RakNet::BitStream* inStream, Entity* entity, const SystemAddress& sysAddr)
|
||||
{
|
||||
Game::logger->Log("GameMessages", "Trade canceled from (%llu)\n", entity->GetObjectID());
|
||||
|
||||
auto* trade = TradingManager::Instance()->GetPlayerTrade(entity->GetObjectID());
|
||||
|
||||
if (trade == nullptr) return;
|
||||
|
||||
Game::logger->Log("GameMessages", "Trade canceled from (%llu)\n", entity->GetObjectID());
|
||||
|
||||
TradingManager::Instance()->CancelTrade(trade->GetTradeId());
|
||||
}
|
||||
|
||||
@@ -3665,7 +3681,7 @@ void GameMessages::HandlePetTamingTryBuild(RakNet::BitStream* inStream, Entity*
|
||||
return;
|
||||
}
|
||||
|
||||
petComponent->TryBuild(bricks, clientFailed);
|
||||
petComponent->TryBuild(bricks.size(), clientFailed);
|
||||
}
|
||||
|
||||
void GameMessages::HandleNotifyTamingBuildSuccess(RakNet::BitStream* inStream, Entity* entity, const SystemAddress& sysAddr)
|
||||
@@ -4126,6 +4142,41 @@ void GameMessages::HandleRacingPlayerInfoResetFinished(RakNet::BitStream* inStre
|
||||
}
|
||||
}
|
||||
|
||||
void GameMessages::SendUpdateReputation(const LWOOBJID objectId, const int64_t reputation, const SystemAddress& sysAddr) {
|
||||
CBITSTREAM;
|
||||
CMSGHEADER;
|
||||
|
||||
bitStream.Write(objectId);
|
||||
bitStream.Write(GAME_MSG::GAME_MSG_UPDATE_REPUTATION);
|
||||
|
||||
bitStream.Write(reputation);
|
||||
|
||||
SEND_PACKET;
|
||||
}
|
||||
|
||||
void GameMessages::HandleUpdatePropertyPerformanceCost(RakNet::BitStream* inStream, Entity* entity, const SystemAddress& sysAddr) {
|
||||
float performanceCost = 0.0f;
|
||||
|
||||
if (inStream->ReadBit()) inStream->Read(performanceCost);
|
||||
|
||||
if (performanceCost == 0.0f) return;
|
||||
|
||||
auto zone = dZoneManager::Instance()->GetZone();
|
||||
const auto& worldId = zone->GetZoneID();
|
||||
const auto cloneId = worldId.GetCloneID();
|
||||
const auto zoneId = worldId.GetMapID();
|
||||
|
||||
auto updatePerformanceCostQuery = Database::CreatePreppedStmt("UPDATE properties SET performance_cost = ? WHERE clone_id = ? AND zone_id = ?");
|
||||
|
||||
updatePerformanceCostQuery->setDouble(1, performanceCost);
|
||||
updatePerformanceCostQuery->setInt(2, cloneId);
|
||||
updatePerformanceCostQuery->setInt(3, zoneId);
|
||||
|
||||
updatePerformanceCostQuery->executeUpdate();
|
||||
|
||||
delete updatePerformanceCostQuery;
|
||||
updatePerformanceCostQuery = nullptr;
|
||||
}
|
||||
|
||||
void GameMessages::HandleVehicleNotifyHitImaginationServer(RakNet::BitStream* inStream, Entity* entity, const SystemAddress& sysAddr)
|
||||
{
|
||||
@@ -4654,7 +4705,7 @@ void GameMessages::HandleBuyFromVendor(RakNet::BitStream* inStream, Entity* enti
|
||||
|
||||
inv->RemoveItem(tokenId, altCurrencyCost);
|
||||
|
||||
inv->AddItem(item, count);
|
||||
inv->AddItem(item, count, eLootSourceType::LOOT_SOURCE_VENDOR);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4679,8 +4730,8 @@ void GameMessages::HandleBuyFromVendor(RakNet::BitStream* inStream, Entity* enti
|
||||
inv->RemoveItem(itemComp.currencyLOT, altCurrencyCost);
|
||||
}
|
||||
|
||||
character->SetCoins(character->GetCoins() - (coinCost), LOOT_SOURCE_VENDOR);
|
||||
inv->AddItem(item, count);
|
||||
character->SetCoins(character->GetCoins() - (coinCost), eLootSourceType::LOOT_SOURCE_VENDOR);
|
||||
inv->AddItem(item, count, eLootSourceType::LOOT_SOURCE_VENDOR);
|
||||
}
|
||||
|
||||
GameMessages::SendVendorTransactionResult(entity, sysAddr);
|
||||
@@ -4723,12 +4774,12 @@ void GameMessages::HandleSellToVendor(RakNet::BitStream* inStream, Entity* entit
|
||||
if (Inventory::IsValidItem(itemComp.currencyLOT))
|
||||
{
|
||||
const auto altCurrency = (itemComp.altCurrencyCost * sellScalar) * count;
|
||||
inv->AddItem(itemComp.currencyLOT, std::floor(altCurrency)); // Return alt currencies like faction tokens.
|
||||
inv->AddItem(itemComp.currencyLOT, std::floor(altCurrency), eLootSourceType::LOOT_SOURCE_VENDOR); // Return alt currencies like faction tokens.
|
||||
}
|
||||
|
||||
//inv->RemoveItem(count, -1, iObjID);
|
||||
inv->MoveItemToInventory(item, VENDOR_BUYBACK, count, true, false, true);
|
||||
character->SetCoins(std::floor(character->GetCoins() + ((itemComp.baseValue * sellScalar)*count)), LOOT_SOURCE_VENDOR);
|
||||
inv->MoveItemToInventory(item, eInventoryType::VENDOR_BUYBACK, count, true, false, true);
|
||||
character->SetCoins(std::floor(character->GetCoins() + ((itemComp.baseValue * sellScalar)*count)), eLootSourceType::LOOT_SOURCE_VENDOR);
|
||||
//EntityManager::Instance()->SerializeEntity(player); // so inventory updates
|
||||
GameMessages::SendVendorTransactionResult(entity, sysAddr);
|
||||
}
|
||||
@@ -4790,7 +4841,7 @@ void GameMessages::HandleBuybackFromVendor(RakNet::BitStream* inStream, Entity*
|
||||
|
||||
//inv->RemoveItem(count, -1, iObjID);
|
||||
inv->MoveItemToInventory(item, Inventory::FindInventoryTypeForLot(item->GetLot()), count, true, false);
|
||||
character->SetCoins(character->GetCoins() - cost, LOOT_SOURCE_VENDOR);
|
||||
character->SetCoins(character->GetCoins() - cost, eLootSourceType::LOOT_SOURCE_VENDOR);
|
||||
//EntityManager::Instance()->SerializeEntity(player); // so inventory updates
|
||||
GameMessages::SendVendorTransactionResult(entity, sysAddr);
|
||||
}
|
||||
@@ -4981,17 +5032,6 @@ void GameMessages::HandleRequestUse(RakNet::BitStream* inStream, Entity* entity,
|
||||
|
||||
missionComponent->Progress(MissionTaskType::MISSION_TASK_TYPE_MISSION_INTERACTION, interactedObject->GetLOT(), interactedObject->GetObjectID());
|
||||
missionComponent->Progress(MissionTaskType::MISSION_TASK_TYPE_NON_MISSION_INTERACTION, interactedObject->GetLOT(), interactedObject->GetObjectID());
|
||||
|
||||
//Do mail stuff:
|
||||
if (interactedObject->GetLOT() == 3964) {
|
||||
AMFStringValue* value = new AMFStringValue();
|
||||
value->SetStringValue("Mail");
|
||||
|
||||
AMFArrayValue args;
|
||||
args.InsertValue("state", value);
|
||||
GameMessages::SendUIMessageServerToSingleClient(entity, sysAddr, "pushGameState", &args);
|
||||
delete value;
|
||||
}
|
||||
}
|
||||
|
||||
void GameMessages::HandlePlayEmote(RakNet::BitStream* inStream, Entity* entity) {
|
||||
@@ -5068,7 +5108,7 @@ void GameMessages::HandleModularBuildConvertModel(RakNet::BitStream* inStream, E
|
||||
|
||||
item->Disassemble(TEMP_MODELS);
|
||||
|
||||
item->SetCount(item->GetCount() - 1, false, false);
|
||||
item->SetCount(item->GetCount() - 1, false, false, true, eLootSourceType::LOOT_SOURCE_QUICKBUILD);
|
||||
}
|
||||
|
||||
void GameMessages::HandleSetFlag(RakNet::BitStream* inStream, Entity* entity) {
|
||||
@@ -5234,7 +5274,7 @@ void GameMessages::HandlePickupCurrency(RakNet::BitStream* inStream, Entity* ent
|
||||
|
||||
auto* ch = entity->GetCharacter();
|
||||
if (entity->CanPickupCoins(currency)) {
|
||||
ch->SetCoins(ch->GetCoins() + currency, LOOT_SOURCE_PICKUP);
|
||||
ch->SetCoins(ch->GetCoins() + currency, eLootSourceType::LOOT_SOURCE_PICKUP);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5289,21 +5329,11 @@ void GameMessages::HandleEquipItem(RakNet::BitStream* inStream, Entity* entity)
|
||||
|
||||
Item* item = inv->FindItemById(objectID);
|
||||
if (!item) return;
|
||||
/*if (item->GetLot() == 6416) { // if it's a rocket
|
||||
std::vector<Entity*> rocketPads = EntityManager::Instance()->GetEntitiesByComponent(COMPONENT_TYPE_ROCKET_LAUNCH);
|
||||
for (Entity* rocketPad : rocketPads) {
|
||||
RocketLaunchpadControlComponent* rocketComp = static_cast<RocketLaunchpadControlComponent*>(rocketPad->GetComponent(COMPONENT_TYPE_ROCKET_LAUNCH));
|
||||
if (rocketComp) {
|
||||
rocketComp->RocketEquip(entity, objectID);
|
||||
}
|
||||
}
|
||||
}
|
||||
else*/ {
|
||||
|
||||
item->Equip();
|
||||
|
||||
EntityManager::Instance()->SerializeEntity(entity);
|
||||
}
|
||||
}
|
||||
|
||||
void GameMessages::HandleUnequipItem(RakNet::BitStream* inStream, Entity* entity) {
|
||||
bool immediate;
|
||||
@@ -5398,6 +5428,8 @@ void GameMessages::HandleRemoveItemFromInventory(RakNet::BitStream* inStream, En
|
||||
return;
|
||||
}
|
||||
|
||||
iStackCount = std::min<uint32_t>(item->GetCount(), iStackCount);
|
||||
|
||||
if (bConfirmed) {
|
||||
for (auto i = 0; i < iStackCount; ++i) {
|
||||
if (eInvType == eInventoryType::MODELS)
|
||||
@@ -5447,8 +5479,8 @@ void GameMessages::HandleMoveItemInInventory(RakNet::BitStream* inStream, Entity
|
||||
}
|
||||
|
||||
void GameMessages::HandleMoveItemBetweenInventoryTypes(RakNet::BitStream* inStream, Entity* entity, const SystemAddress& sysAddr) {
|
||||
int inventoryTypeA;
|
||||
int inventoryTypeB;
|
||||
eInventoryType inventoryTypeA;
|
||||
eInventoryType inventoryTypeB;
|
||||
LWOOBJID objectID;
|
||||
bool showFlyingLoot = true;
|
||||
bool stackCountIsDefault = false;
|
||||
@@ -5465,7 +5497,7 @@ void GameMessages::HandleMoveItemBetweenInventoryTypes(RakNet::BitStream* inStre
|
||||
inStream->Read(templateIDIsDefault);
|
||||
if (templateIDIsDefault) inStream->Read(templateID);
|
||||
|
||||
InventoryComponent* inv = static_cast<InventoryComponent*>(entity->GetComponent(COMPONENT_TYPE_INVENTORY));
|
||||
auto inv = entity->GetComponent<InventoryComponent>();
|
||||
if (!inv) return;
|
||||
|
||||
auto* item = inv->FindItemById(objectID);
|
||||
@@ -5486,7 +5518,7 @@ void GameMessages::HandleMoveItemBetweenInventoryTypes(RakNet::BitStream* inStre
|
||||
}
|
||||
}
|
||||
|
||||
inv->MoveItemToInventory(item, static_cast<eInventoryType>(inventoryTypeB), stackCount, showFlyingLoot, false);
|
||||
inv->MoveItemToInventory(item, inventoryTypeB, stackCount, showFlyingLoot);
|
||||
EntityManager::Instance()->SerializeEntity(entity);
|
||||
}
|
||||
|
||||
@@ -5553,11 +5585,11 @@ void GameMessages::HandleModularBuildFinish(RakNet::BitStream* inStream, Entity*
|
||||
|
||||
if (count == 3)
|
||||
{
|
||||
inv->AddItem(6416, 1, MODELS, config);
|
||||
inv->AddItem(6416, 1, eLootSourceType::LOOT_SOURCE_QUICKBUILD, eInventoryType::MODELS, config);
|
||||
}
|
||||
else if (count == 7)
|
||||
{
|
||||
inv->AddItem(8092, 1, MODELS, config);
|
||||
inv->AddItem(8092, 1, eLootSourceType::LOOT_SOURCE_QUICKBUILD, eInventoryType::MODELS, config);
|
||||
}
|
||||
|
||||
auto* missionComponent = character->GetComponent<MissionComponent>();
|
||||
@@ -5587,7 +5619,7 @@ void GameMessages::HandleModularBuildFinish(RakNet::BitStream* inStream, Entity*
|
||||
|
||||
for (auto* item : items)
|
||||
{
|
||||
inv->MoveItemToInventory(item, MODELS, item->GetCount(), false);
|
||||
inv->MoveItemToInventory(item, eInventoryType::MODELS, item->GetCount(), false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5702,7 +5734,7 @@ void GameMessages::HandleDoneArrangingWithItem(RakNet::BitStream* inStream, Enti
|
||||
|
||||
for (auto* item : items)
|
||||
{
|
||||
inv->MoveItemToInventory(item, MODELS, item->GetCount(), false, false);
|
||||
inv->MoveItemToInventory(item, eInventoryType::MODELS, item->GetCount(), false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5728,7 +5760,7 @@ void GameMessages::HandleModularBuildMoveAndEquip(RakNet::BitStream* inStream, E
|
||||
return;
|
||||
}
|
||||
|
||||
inv->MoveItemToInventory(item, MODELS, 1, false, true);
|
||||
inv->MoveItemToInventory(item, eInventoryType::MODELS, 1, false, true);
|
||||
}
|
||||
|
||||
void GameMessages::HandlePickupItem(RakNet::BitStream* inStream, Entity* entity) {
|
||||
@@ -5890,6 +5922,7 @@ void GameMessages::HandleReportBug(RakNet::BitStream* inStream, Entity* entity)
|
||||
std::string nOtherPlayerID;
|
||||
std::string selection;
|
||||
uint32_t messageLength;
|
||||
int32_t reporterID = 0;
|
||||
|
||||
//Reading:
|
||||
inStream->Read(messageLength);
|
||||
@@ -5900,6 +5933,9 @@ void GameMessages::HandleReportBug(RakNet::BitStream* inStream, Entity* entity)
|
||||
body.push_back(character);
|
||||
}
|
||||
|
||||
auto character = entity->GetCharacter();
|
||||
if (character) reporterID = character->GetID();
|
||||
|
||||
uint32_t clientVersionLength;
|
||||
inStream->Read(clientVersionLength);
|
||||
for (unsigned int k = 0; k < clientVersionLength; k++) {
|
||||
@@ -5915,6 +5951,9 @@ void GameMessages::HandleReportBug(RakNet::BitStream* inStream, Entity* entity)
|
||||
inStream->Read(character);
|
||||
nOtherPlayerID.push_back(character);
|
||||
}
|
||||
// Convert other player id from LWOOBJID to the database id.
|
||||
uint32_t otherPlayer = LWOOBJID_EMPTY;
|
||||
if (nOtherPlayerID != "") otherPlayer = std::atoi(nOtherPlayerID.c_str());
|
||||
|
||||
uint32_t selectionLength;
|
||||
inStream->Read(selectionLength);
|
||||
@@ -5925,16 +5964,17 @@ void GameMessages::HandleReportBug(RakNet::BitStream* inStream, Entity* entity)
|
||||
}
|
||||
|
||||
try {
|
||||
sql::PreparedStatement* insertBug = Database::CreatePreppedStmt("INSERT INTO `bug_reports`(body, client_version, other_player_id, selection) VALUES (?, ?, ?, ?)");
|
||||
sql::PreparedStatement* insertBug = Database::CreatePreppedStmt("INSERT INTO `bug_reports`(body, client_version, other_player_id, selection, reporter_id) VALUES (?, ?, ?, ?, ?)");
|
||||
insertBug->setString(1, GeneralUtils::UTF16ToWTF8(body));
|
||||
insertBug->setString(2, clientVersion);
|
||||
insertBug->setString(3, nOtherPlayerID);
|
||||
insertBug->setString(3, std::to_string(otherPlayer));
|
||||
insertBug->setString(4, selection);
|
||||
insertBug->setInt(5, reporterID);
|
||||
insertBug->execute();
|
||||
delete insertBug;
|
||||
}
|
||||
catch (sql::SQLException& e) {
|
||||
Game::logger->Log("HandleReportBug", "Couldn't save bug report!\n");
|
||||
Game::logger->Log("HandleReportBug", "Couldn't save bug report! (%s)\n", e.what());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -61,15 +61,16 @@ namespace GameMessages {
|
||||
void SendGMLevelBroadcast(const LWOOBJID& objectID, uint8_t level);
|
||||
void SendChatModeUpdate(const LWOOBJID& objectID, uint8_t level);
|
||||
|
||||
void SendAddItemToInventoryClientSync(Entity* entity, const SystemAddress& sysAddr, Item* item, const LWOOBJID& objectID, bool showFlyingLoot, int itemCount, LWOOBJID subKey = LWOOBJID_EMPTY);
|
||||
void SendAddItemToInventoryClientSync(Entity* entity, const SystemAddress& sysAddr, Item* item, const LWOOBJID& objectID, bool showFlyingLoot, int itemCount, LWOOBJID subKey = LWOOBJID_EMPTY, eLootSourceType lootSourceType = eLootSourceType::LOOT_SOURCE_NONE);
|
||||
void SendNotifyClientFlagChange(const LWOOBJID& objectID, int iFlagID, bool bFlag, const SystemAddress& sysAddr);
|
||||
void SendChangeObjectWorldState(const LWOOBJID& objectID, int state, const SystemAddress& sysAddr);
|
||||
|
||||
void SendOfferMission(const LWOOBJID& entity, const SystemAddress& sysAddr, int32_t missionID, const LWOOBJID& offererID);
|
||||
void SendNotifyMission(Entity * entity, const SystemAddress& sysAddr, int missionID, int missionState, bool sendingRewards);
|
||||
void SendNotifyMissionTask(Entity * entity, const SystemAddress& sysAddr, int missionID, int taskMask, std::vector<float> updates);
|
||||
void NotifyLevelRewards(LWOOBJID objectID, const SystemAddress& sysAddr, int level, bool sending_rewards);
|
||||
|
||||
void SendModifyLEGOScore(Entity* entity, const SystemAddress& sysAddr, int64_t score, int sourceType);
|
||||
void SendModifyLEGOScore(Entity* entity, const SystemAddress& sysAddr, int64_t score, eLootSourceType sourceType);
|
||||
void SendUIMessageServerToSingleClient(Entity* entity, const SystemAddress& sysAddr, const std::string& message, NDGFxValue args);
|
||||
void SendUIMessageServerToAllClients(const std::string& message, NDGFxValue args);
|
||||
|
||||
@@ -108,7 +109,7 @@ namespace GameMessages {
|
||||
void SendModularBuildEnd(Entity* entity);
|
||||
|
||||
void SendVendorOpenWindow(Entity* entity, const SystemAddress& sysAddr);
|
||||
void SendVendorStatusUpdate(Entity* entity, const SystemAddress& sysAddr);
|
||||
void SendVendorStatusUpdate(Entity* entity, const SystemAddress& sysAddr, bool bUpdateOnly = false);
|
||||
void SendVendorTransactionResult(Entity* entity, const SystemAddress& sysAddr);
|
||||
|
||||
void SendRemoveItemFromInventory(Entity* entity, const SystemAddress& sysAddr, LWOOBJID iObjID, LOT templateID, int inventoryType, uint32_t stackCount, uint32_t stackRemaining);
|
||||
@@ -385,6 +386,8 @@ namespace GameMessages {
|
||||
bool bUseLeaderboards
|
||||
);
|
||||
|
||||
void HandleUpdatePropertyPerformanceCost(RakNet::BitStream* inStream, Entity* entity, const SystemAddress& sysAddr);
|
||||
|
||||
void SendNotifyClientShootingGalleryScore(LWOOBJID objectId, const SystemAddress& sysAddr,
|
||||
float addTime,
|
||||
int32_t score,
|
||||
@@ -394,6 +397,8 @@ namespace GameMessages {
|
||||
|
||||
void HandleUpdateShootingGalleryRotation(RakNet::BitStream* inStream, Entity* entity, const SystemAddress& sysAddr);
|
||||
|
||||
void SendUpdateReputation(const LWOOBJID objectId, const int64_t reputation, const SystemAddress& sysAddr);
|
||||
|
||||
// Leaderboards
|
||||
void SendActivitySummaryLeaderboardData(const LWOOBJID& objectID, const Leaderboard* leaderboard,
|
||||
const SystemAddress& sysAddr = UNASSIGNED_SYSTEM_ADDRESS);
|
||||
|
||||
@@ -13,7 +13,7 @@ void GameMessages::PropertyDataMessage::Serialize(RakNet::BitStream& stream) con
|
||||
stream.Write<int32_t>(TemplateID); // - template id
|
||||
stream.Write<uint16_t>(ZoneId); // - map id
|
||||
stream.Write<uint16_t>(VendorMapId); // - vendor map id
|
||||
stream.Write<uint32_t>(1);
|
||||
stream.Write<uint32_t>(cloneId); // clone id
|
||||
|
||||
const auto& name = GeneralUtils::ASCIIToUTF16(Name);
|
||||
stream.Write(uint32_t(name.size()));
|
||||
@@ -40,11 +40,12 @@ void GameMessages::PropertyDataMessage::Serialize(RakNet::BitStream& stream) con
|
||||
stream.Write<uint32_t>(0); // - minimum price
|
||||
stream.Write<uint32_t>(1); // - rent duration
|
||||
|
||||
stream.Write(ClaimedTime); // - timestamp
|
||||
stream.Write<uint64_t>(LastUpdatedTime); // - timestamp
|
||||
|
||||
stream.Write<uint32_t>(1);
|
||||
|
||||
stream.Write<uint64_t>(0);
|
||||
stream.Write<uint32_t>(reputation); // Reputation
|
||||
stream.Write<uint32_t>(0);
|
||||
|
||||
const auto& spawn = GeneralUtils::ASCIIToUTF16(SpawnName);
|
||||
stream.Write(uint32_t(spawn.size()));
|
||||
@@ -63,9 +64,18 @@ void GameMessages::PropertyDataMessage::Serialize(RakNet::BitStream& stream) con
|
||||
|
||||
stream.Write<uint64_t>(0);
|
||||
|
||||
stream.Write<uint32_t>(1);
|
||||
if (rejectionReason != "") stream.Write<uint32_t>(REJECTION_STATUS_REJECTED);
|
||||
else if (moderatorRequested == true && rejectionReason == "") stream.Write<uint32_t>(REJECTION_STATUS_APPROVED);
|
||||
else stream.Write<uint32_t>(REJECTION_STATUS_PENDING);
|
||||
|
||||
stream.Write<uint32_t>(0); // String length
|
||||
// Does this go here???
|
||||
// const auto& rejectionReasonConverted = GeneralUtils::ASCIIToUTF16(rejectionReason);
|
||||
// stream.Write(uint32_t(rejectionReasonConverted.size()));
|
||||
// for (uint32_t i = 0; i < rejectionReasonConverted.size(); ++i) {
|
||||
// stream.Write(uint16_t(rejectionReasonConverted[i]));
|
||||
// }
|
||||
|
||||
stream.Write<uint32_t>(0);
|
||||
|
||||
stream.Write<uint64_t>(0);
|
||||
|
||||
|
||||
@@ -28,12 +28,23 @@ namespace GameMessages
|
||||
|
||||
std::string Name = "";
|
||||
std::string Description = "";
|
||||
std::string rejectionReason = "";
|
||||
|
||||
bool moderatorRequested = 0;
|
||||
LWOCLONEID cloneId = 0;
|
||||
uint32_t reputation = 0;
|
||||
uint64_t ClaimedTime = 0;
|
||||
uint64_t LastUpdatedTime = 0;
|
||||
|
||||
NiPoint3 ZonePosition = { 548.0f, 406.0f, 178.0f };
|
||||
char PrivacyOption = 0;
|
||||
float MaxBuildHeight = 128.0f;
|
||||
std::vector<NiPoint3> Paths = {};
|
||||
private:
|
||||
enum RejectionStatus : uint32_t {
|
||||
REJECTION_STATUS_APPROVED = 0,
|
||||
REJECTION_STATUS_PENDING = 1,
|
||||
REJECTION_STATUS_REJECTED = 2
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -22,15 +22,16 @@ void PropertySelectQueryProperty::Serialize(RakNet::BitStream& stream) const
|
||||
stream.Write(static_cast<uint16_t>(description[i]));
|
||||
}
|
||||
|
||||
stream.Write(Reputation);
|
||||
stream.Write(IsBestFriend);
|
||||
stream.Write(IsFriend);
|
||||
stream.Write(IsModeratorApproved);
|
||||
stream.Write(IsAlt);
|
||||
stream.Write(IsOwner);
|
||||
stream.Write(AccessType);
|
||||
stream.Write(DatePublished);
|
||||
stream.Write(PerformanceCost);
|
||||
stream.Write(Reputation);
|
||||
stream.Write(IsBestFriend);
|
||||
stream.Write(IsFriend);
|
||||
stream.Write(IsModeratorApproved);
|
||||
stream.Write(IsAlt);
|
||||
stream.Write(IsOwned);
|
||||
stream.Write(AccessType);
|
||||
stream.Write(DateLastPublished);
|
||||
stream.Write(PerformanceIndex);
|
||||
stream.Write(PerformanceCost);
|
||||
}
|
||||
|
||||
void PropertySelectQueryProperty::Deserialize(RakNet::BitStream& stream) const
|
||||
|
||||
@@ -9,17 +9,18 @@ public:
|
||||
|
||||
void Deserialize(RakNet::BitStream& stream) const;
|
||||
|
||||
LWOCLONEID CloneId = LWOCLONEID_INVALID;
|
||||
std::string OwnerName = "";
|
||||
std::string Name = "";
|
||||
std::string Description = "";
|
||||
uint32_t Reputation = 0;
|
||||
bool IsBestFriend = false;
|
||||
bool IsFriend = false;
|
||||
bool IsModeratorApproved = false;
|
||||
bool IsAlt = false;
|
||||
bool IsOwner = false;
|
||||
uint32_t AccessType = 0;
|
||||
uint32_t DatePublished = 0;
|
||||
uint64_t PerformanceCost = 0;
|
||||
LWOCLONEID CloneId = LWOCLONEID_INVALID; // The cloneID of the property
|
||||
std::string OwnerName = ""; // The property owners name
|
||||
std::string Name = ""; // The property name
|
||||
std::string Description = ""; // The property description
|
||||
float Reputation = 0; // The reputation of the property
|
||||
bool IsBestFriend = false; // Whether or not the property belongs to a best friend
|
||||
bool IsFriend = false; // Whether or not the property belongs to a friend
|
||||
bool IsModeratorApproved = false; // Whether or not a moderator has approved this property
|
||||
bool IsAlt = false; // Whether or not the property is owned by an alt of the account owner
|
||||
bool IsOwned = false; // Whether or not the property is owned
|
||||
uint32_t AccessType = 0; // The privacy option of the property
|
||||
uint32_t DateLastPublished = 0; // The last day the property was published
|
||||
float PerformanceCost = 0; // The performance cost of the property
|
||||
uint32_t PerformanceIndex = 0; // The performance index of the property? Always 0?
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user