mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-12-23 05:53:34 +00:00
Merge pull request #484 from EmosewaMC/property-fixes
Reputation now saved in charxml. This is not a retroactive fix for reputation earned before this merge.
This commit is contained in:
commit
395d607632
@ -32,6 +32,7 @@ CharacterComponent::CharacterComponent(Entity* parent, Character* character) : C
|
|||||||
|
|
||||||
m_EditorEnabled = false;
|
m_EditorEnabled = false;
|
||||||
m_EditorLevel = m_GMLevel;
|
m_EditorLevel = m_GMLevel;
|
||||||
|
m_Reputation = 0;
|
||||||
|
|
||||||
m_CurrentActivity = 0;
|
m_CurrentActivity = 0;
|
||||||
m_CountryCode = 0;
|
m_CountryCode = 0;
|
||||||
@ -256,7 +257,10 @@ void CharacterComponent::LoadFromXML() {
|
|||||||
Game::logger->Log("CharacterComponent", "Failed to find char tag while loading XML!\n");
|
Game::logger->Log("CharacterComponent", "Failed to find char tag while loading XML!\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (character->QueryAttribute("rpt", &m_Reputation) == tinyxml2::XML_NO_ATTRIBUTE) {
|
||||||
|
SetReputation(0);
|
||||||
|
}
|
||||||
|
|
||||||
character->QueryInt64Attribute("ls", &m_Uscore);
|
character->QueryInt64Attribute("ls", &m_Uscore);
|
||||||
|
|
||||||
// Load the statistics
|
// Load the statistics
|
||||||
@ -378,6 +382,8 @@ void CharacterComponent::UpdateXml(tinyxml2::XMLDocument* doc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
character->SetAttribute("ls", m_Uscore);
|
character->SetAttribute("ls", m_Uscore);
|
||||||
|
// Custom attribute to keep track of reputation.
|
||||||
|
character->SetAttribute("rpt", GetReputation());
|
||||||
character->SetAttribute("stt", StatisticsToString().c_str());
|
character->SetAttribute("stt", StatisticsToString().c_str());
|
||||||
|
|
||||||
// Set the zone statistics of the form <zs><s/> ... <s/></zs>
|
// Set the zone statistics of the form <zs><s/> ... <s/></zs>
|
||||||
|
@ -146,6 +146,18 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool GetPvpEnabled() const;
|
bool GetPvpEnabled() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the characters lifetime reputation
|
||||||
|
* @return The lifetime reputation of this character.
|
||||||
|
*/
|
||||||
|
int64_t GetReputation() { return m_Reputation; };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the lifetime reputation of the character to newValue
|
||||||
|
* @param newValue the value to set reputation to
|
||||||
|
*/
|
||||||
|
void SetReputation(int64_t newValue) { m_Reputation = newValue; };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the current value of PvP combat being enabled
|
* Sets the current value of PvP combat being enabled
|
||||||
* @param value whether to enable PvP combat
|
* @param value whether to enable PvP combat
|
||||||
@ -291,6 +303,11 @@ private:
|
|||||||
*/
|
*/
|
||||||
int64_t m_Uscore;
|
int64_t m_Uscore;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The lifetime reputation earned by the entity
|
||||||
|
*/
|
||||||
|
int64_t m_Reputation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether the character is landing by rocket
|
* Whether the character is landing by rocket
|
||||||
*/
|
*/
|
||||||
|
@ -518,24 +518,11 @@ void Mission::YieldRewards() {
|
|||||||
|
|
||||||
if (info->reward_reputation > 0) {
|
if (info->reward_reputation > 0) {
|
||||||
missionComponent->Progress(MissionTaskType::MISSION_TASK_TYPE_EARN_REPUTATION, 0, 0L, "", info->reward_reputation);
|
missionComponent->Progress(MissionTaskType::MISSION_TASK_TYPE_EARN_REPUTATION, 0, 0L, "", info->reward_reputation);
|
||||||
auto character = entity->GetCharacter();
|
auto character = entity->GetComponent<CharacterComponent>();
|
||||||
if (!character) return;
|
if (character) {
|
||||||
|
character->SetReputation(character->GetReputation() + info->reward_reputation);
|
||||||
auto charId = character->GetID();
|
GameMessages::SendUpdateReputation(entity->GetObjectID(), character->GetReputation(), entity->GetSystemAddress());
|
||||||
auto propertyCloneId = character->GetPropertyCloneID();
|
}
|
||||||
|
|
||||||
auto reputationUpdate = Database::CreatePreppedStmt("UPDATE properties SET reputation = reputation + ? where owner_id = ? AND clone_id = ?");
|
|
||||||
|
|
||||||
reputationUpdate->setInt64(1, info->reward_reputation);
|
|
||||||
reputationUpdate->setInt(2, charId);
|
|
||||||
reputationUpdate->setInt64(3, propertyCloneId);
|
|
||||||
|
|
||||||
reputationUpdate->executeUpdate();
|
|
||||||
|
|
||||||
delete reputationUpdate;
|
|
||||||
reputationUpdate = nullptr;
|
|
||||||
|
|
||||||
GameMessages::SendUpdateReputation(entity->GetObjectID(), info->reward_reputation, entity->GetSystemAddress());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->reward_maxhealth > 0) {
|
if (info->reward_maxhealth > 0) {
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "LDFFormat.h"
|
#include "LDFFormat.h"
|
||||||
#include "dServer.h"
|
#include "dServer.h"
|
||||||
#include "dZoneManager.h"
|
#include "dZoneManager.h"
|
||||||
|
#include "CharacterComponent.h"
|
||||||
#include "ZCompression.h"
|
#include "ZCompression.h"
|
||||||
|
|
||||||
void WorldPackets::SendLoadStaticZone(const SystemAddress& sysAddr, float x, float y, float z, uint32_t checksum) {
|
void WorldPackets::SendLoadStaticZone(const SystemAddress& sysAddr, float x, float y, float z, uint32_t checksum) {
|
||||||
@ -126,26 +127,34 @@ void WorldPackets::SendServerState ( const SystemAddress& sysAddr ) {
|
|||||||
SEND_PACKET
|
SEND_PACKET
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldPackets::SendCreateCharacter(const SystemAddress& sysAddr, const LWOOBJID& objectID, const std::string& xmlData, const std::u16string& username, int32_t gm) {
|
void WorldPackets::SendCreateCharacter(const SystemAddress& sysAddr, Entity* entity, const std::string& xmlData, const std::u16string& username, int32_t gm) {
|
||||||
RakNet::BitStream bitStream;
|
RakNet::BitStream bitStream;
|
||||||
PacketUtils::WriteHeader(bitStream, CLIENT, MSG_CLIENT_CREATE_CHARACTER);
|
PacketUtils::WriteHeader(bitStream, CLIENT, MSG_CLIENT_CREATE_CHARACTER);
|
||||||
|
|
||||||
RakNet::BitStream data;
|
RakNet::BitStream data;
|
||||||
data.Write<uint32_t>(6); //LDF key count
|
data.Write<uint32_t>(7); //LDF key count
|
||||||
|
|
||||||
LDFData<LWOOBJID>* objid = new LDFData<LWOOBJID>(u"objid", objectID);
|
auto character = entity->GetComponent<CharacterComponent>();
|
||||||
|
if (!character) {
|
||||||
|
Game::logger->Log("WorldPackets", "Entity is not a character?? what??");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LDFData<LWOOBJID>* objid = new LDFData<LWOOBJID>(u"objid", entity->GetObjectID());
|
||||||
LDFData<LOT>* lot = new LDFData<LOT>(u"template", 1);
|
LDFData<LOT>* lot = new LDFData<LOT>(u"template", 1);
|
||||||
LDFData<std::string> * xmlConfigData = new LDFData<std::string>(u"xmlData", xmlData);
|
LDFData<std::string> * xmlConfigData = new LDFData<std::string>(u"xmlData", xmlData);
|
||||||
LDFData<std::u16string>* name = new LDFData<std::u16string>(u"name", username);
|
LDFData<std::u16string>* name = new LDFData<std::u16string>(u"name", username);
|
||||||
LDFData<int32_t>* gmlevel = new LDFData<int32_t>(u"gmlevel", gm);
|
LDFData<int32_t>* gmlevel = new LDFData<int32_t>(u"gmlevel", gm);
|
||||||
LDFData<int32_t>* chatmode = new LDFData<int32_t>(u"chatmode", gm);
|
LDFData<int32_t>* chatmode = new LDFData<int32_t>(u"chatmode", gm);
|
||||||
|
LDFData<int64_t>* reputation = new LDFData<int64_t>(u"reputation", character->GetReputation());
|
||||||
|
|
||||||
objid->WriteToPacket(&data);
|
objid->WriteToPacket(&data);
|
||||||
lot->WriteToPacket(&data);
|
lot->WriteToPacket(&data);
|
||||||
name->WriteToPacket(&data);
|
name->WriteToPacket(&data);
|
||||||
gmlevel->WriteToPacket(&data);
|
gmlevel->WriteToPacket(&data);
|
||||||
chatmode->WriteToPacket(&data);
|
chatmode->WriteToPacket(&data);
|
||||||
xmlConfigData->WriteToPacket(&data);
|
xmlConfigData->WriteToPacket(&data);
|
||||||
|
reputation->WriteToPacket(&data);
|
||||||
|
|
||||||
delete objid;
|
delete objid;
|
||||||
delete lot;
|
delete lot;
|
||||||
@ -153,7 +162,8 @@ void WorldPackets::SendCreateCharacter(const SystemAddress& sysAddr, const LWOOB
|
|||||||
delete gmlevel;
|
delete gmlevel;
|
||||||
delete chatmode;
|
delete chatmode;
|
||||||
delete name;
|
delete name;
|
||||||
|
delete reputation;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
bitStream.Write<uint32_t>(data.GetNumberOfBytesUsed() + 1);
|
bitStream.Write<uint32_t>(data.GetNumberOfBytesUsed() + 1);
|
||||||
bitStream.Write<uint8_t>(0);
|
bitStream.Write<uint8_t>(0);
|
||||||
@ -175,7 +185,7 @@ void WorldPackets::SendCreateCharacter(const SystemAddress& sysAddr, const LWOOB
|
|||||||
|
|
||||||
PacketUtils::SavePacket("chardata.bin", (const char *)bitStream.GetData(), static_cast<uint32_t>(bitStream.GetNumberOfBytesUsed()));
|
PacketUtils::SavePacket("chardata.bin", (const char *)bitStream.GetData(), static_cast<uint32_t>(bitStream.GetNumberOfBytesUsed()));
|
||||||
SEND_PACKET
|
SEND_PACKET
|
||||||
Game::logger->Log("WorldPackets", "Sent CreateCharacter for ID: %llu\n", objectID);
|
Game::logger->Log("WorldPackets", "Sent CreateCharacter for ID: %llu\n", entity->GetObjectID());
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldPackets::SendChatModerationResponse(const SystemAddress& sysAddr, bool requestAccepted, uint32_t requestID, const std::string& receiver, std::unordered_map<char, char> unacceptedItems) {
|
void WorldPackets::SendChatModerationResponse(const SystemAddress& sysAddr, bool requestAccepted, uint32_t requestID, const std::string& receiver, std::unordered_map<char, char> unacceptedItems) {
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "dCommonVars.h"
|
#include "dCommonVars.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
#include "Entity.h"
|
||||||
|
|
||||||
class User;
|
class User;
|
||||||
struct SystemAddress;
|
struct SystemAddress;
|
||||||
@ -16,7 +17,7 @@ namespace WorldPackets {
|
|||||||
void SendCharacterDeleteResponse(const SystemAddress& sysAddr, bool response);
|
void SendCharacterDeleteResponse(const SystemAddress& sysAddr, bool response);
|
||||||
void SendTransferToWorld(const SystemAddress& sysAddr, const std::string& serverIP, uint32_t serverPort, bool mythranShift);
|
void SendTransferToWorld(const SystemAddress& sysAddr, const std::string& serverIP, uint32_t serverPort, bool mythranShift);
|
||||||
void SendServerState(const SystemAddress& sysAddr);
|
void SendServerState(const SystemAddress& sysAddr);
|
||||||
void SendCreateCharacter(const SystemAddress& sysAddr, const LWOOBJID& objectID, const std::string& xmlData, const std::u16string& username, int32_t gm);
|
void SendCreateCharacter(const SystemAddress& sysAddr, Entity* entity, const std::string& xmlData, const std::u16string& username, int32_t gm);
|
||||||
void SendChatModerationResponse(const SystemAddress& sysAddr, bool requestAccepted, uint32_t requestID, const std::string& receiver, std::unordered_map<char, char> unacceptedItems);
|
void SendChatModerationResponse(const SystemAddress& sysAddr, bool requestAccepted, uint32_t requestID, const std::string& receiver, std::unordered_map<char, char> unacceptedItems);
|
||||||
void SendGMLevelChange(const SystemAddress& sysAddr, bool success, uint8_t highestLevel, uint8_t prevLevel, uint8_t newLevel);
|
void SendGMLevelChange(const SystemAddress& sysAddr, bool success, uint8_t highestLevel, uint8_t prevLevel, uint8_t newLevel);
|
||||||
}
|
}
|
||||||
|
@ -1013,15 +1013,15 @@ void HandlePacket(Packet* packet) {
|
|||||||
Character* c = user->GetLastUsedChar();
|
Character* c = user->GetLastUsedChar();
|
||||||
if (c != nullptr) {
|
if (c != nullptr) {
|
||||||
std::u16string username = GeneralUtils::ASCIIToUTF16(c->GetName());
|
std::u16string username = GeneralUtils::ASCIIToUTF16(c->GetName());
|
||||||
WorldPackets::SendCreateCharacter(packet->systemAddress, c->GetObjectID(), c->GetXMLData(), username, c->GetGMLevel());
|
|
||||||
WorldPackets::SendServerState(packet->systemAddress);
|
|
||||||
|
|
||||||
Game::server->GetReplicaManager()->AddParticipant(packet->systemAddress);
|
Game::server->GetReplicaManager()->AddParticipant(packet->systemAddress);
|
||||||
|
|
||||||
EntityInfo info {};
|
EntityInfo info {};
|
||||||
info.lot = 1;
|
info.lot = 1;
|
||||||
Entity* player = EntityManager::Instance()->CreateEntity(info, UserManager::Instance()->GetUser(packet->systemAddress));
|
Entity* player = EntityManager::Instance()->CreateEntity(info, UserManager::Instance()->GetUser(packet->systemAddress));
|
||||||
|
|
||||||
|
WorldPackets::SendCreateCharacter(packet->systemAddress, player, c->GetXMLData(), username, c->GetGMLevel());
|
||||||
|
WorldPackets::SendServerState(packet->systemAddress);
|
||||||
|
|
||||||
const auto respawnPoint = player->GetCharacter()->GetRespawnPoint(dZoneManager::Instance()->GetZone()->GetWorldID());
|
const auto respawnPoint = player->GetCharacter()->GetRespawnPoint(dZoneManager::Instance()->GetZone()->GetWorldID());
|
||||||
|
|
||||||
EntityManager::Instance()->ConstructEntity(player, UNASSIGNED_SYSTEM_ADDRESS, true);
|
EntityManager::Instance()->ConstructEntity(player, UNASSIGNED_SYSTEM_ADDRESS, true);
|
||||||
|
Loading…
Reference in New Issue
Block a user