mirror of
https://github.com/TES3MP/TES3MP.git
synced 2025-09-28 23:51:09 -04:00
[General] Rework ObjectDialogueChoice for multilingual compatibility
Use a different system for sending and applying ObjectDialogueChoice packets.
This commit is contained in:
parent
4620adc662
commit
1a4b817b31
@ -154,9 +154,14 @@ int ObjectFunctions::GetObjectLockLevel(unsigned int index) noexcept
|
|||||||
return readObjectList->baseObjects.at(index).lockLevel;
|
return readObjectList->baseObjects.at(index).lockLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* ObjectFunctions::GetObjectDialogueChoice(unsigned int index) noexcept
|
unsigned int ObjectFunctions::GetObjectDialogueChoiceType(unsigned int index) noexcept
|
||||||
{
|
{
|
||||||
return readObjectList->baseObjects.at(index).dialogueChoice.c_str();
|
return readObjectList->baseObjects.at(index).dialogueChoiceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* ObjectFunctions::GetObjectDialogueChoiceTopic(unsigned int index) noexcept
|
||||||
|
{
|
||||||
|
return readObjectList->baseObjects.at(index).topicId.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int ObjectFunctions::GetObjectGoldPool(unsigned int index) noexcept
|
unsigned int ObjectFunctions::GetObjectGoldPool(unsigned int index) noexcept
|
||||||
@ -500,9 +505,14 @@ void ObjectFunctions::SetObjectLockLevel(int lockLevel) noexcept
|
|||||||
tempObject.lockLevel = lockLevel;
|
tempObject.lockLevel = lockLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectFunctions::SetObjectDialogueChoice(const char* dialogueChoice) noexcept
|
void ObjectFunctions::SetObjectDialogueChoiceType(unsigned int dialogueChoiceType) noexcept
|
||||||
{
|
{
|
||||||
tempObject.dialogueChoice = dialogueChoice;
|
tempObject.dialogueChoiceType = dialogueChoiceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectFunctions::SetObjectDialogueChoiceTopic(const char* topic) noexcept
|
||||||
|
{
|
||||||
|
tempObject.topicId = topic;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectFunctions::SetObjectGoldPool(unsigned int goldPool) noexcept
|
void ObjectFunctions::SetObjectGoldPool(unsigned int goldPool) noexcept
|
||||||
|
@ -31,7 +31,8 @@
|
|||||||
{"GetObjectState", ObjectFunctions::GetObjectState},\
|
{"GetObjectState", ObjectFunctions::GetObjectState},\
|
||||||
{"GetObjectDoorState", ObjectFunctions::GetObjectDoorState},\
|
{"GetObjectDoorState", ObjectFunctions::GetObjectDoorState},\
|
||||||
{"GetObjectLockLevel", ObjectFunctions::GetObjectLockLevel},\
|
{"GetObjectLockLevel", ObjectFunctions::GetObjectLockLevel},\
|
||||||
{"GetObjectDialogueChoice", ObjectFunctions::GetObjectDialogueChoice},\
|
{"GetObjectDialogueChoiceType", ObjectFunctions::GetObjectDialogueChoiceType},\
|
||||||
|
{"GetObjectDialogueChoiceTopic", ObjectFunctions::GetObjectDialogueChoiceTopic},\
|
||||||
{"GetObjectGoldPool", ObjectFunctions::GetObjectGoldPool},\
|
{"GetObjectGoldPool", ObjectFunctions::GetObjectGoldPool},\
|
||||||
{"GetObjectLastGoldRestockHour", ObjectFunctions::GetObjectLastGoldRestockHour},\
|
{"GetObjectLastGoldRestockHour", ObjectFunctions::GetObjectLastGoldRestockHour},\
|
||||||
{"GetObjectLastGoldRestockDay", ObjectFunctions::GetObjectLastGoldRestockDay},\
|
{"GetObjectLastGoldRestockDay", ObjectFunctions::GetObjectLastGoldRestockDay},\
|
||||||
@ -106,7 +107,8 @@
|
|||||||
{"SetObjectScale", ObjectFunctions::SetObjectScale},\
|
{"SetObjectScale", ObjectFunctions::SetObjectScale},\
|
||||||
{"SetObjectState", ObjectFunctions::SetObjectState},\
|
{"SetObjectState", ObjectFunctions::SetObjectState},\
|
||||||
{"SetObjectLockLevel", ObjectFunctions::SetObjectLockLevel},\
|
{"SetObjectLockLevel", ObjectFunctions::SetObjectLockLevel},\
|
||||||
{"SetObjectDialogueChoice", ObjectFunctions::SetObjectDialogueChoice},\
|
{"SetObjectDialogueChoiceType", ObjectFunctions::SetObjectDialogueChoiceType},\
|
||||||
|
{"SetObjectDialogueChoiceTopic", ObjectFunctions::SetObjectDialogueChoiceTopic},\
|
||||||
{"SetObjectGoldPool", ObjectFunctions::SetObjectGoldPool},\
|
{"SetObjectGoldPool", ObjectFunctions::SetObjectGoldPool},\
|
||||||
{"SetObjectLastGoldRestockHour", ObjectFunctions::SetObjectLastGoldRestockHour},\
|
{"SetObjectLastGoldRestockHour", ObjectFunctions::SetObjectLastGoldRestockHour},\
|
||||||
{"SetObjectLastGoldRestockDay", ObjectFunctions::SetObjectLastGoldRestockDay},\
|
{"SetObjectLastGoldRestockDay", ObjectFunctions::SetObjectLastGoldRestockDay},\
|
||||||
@ -393,12 +395,20 @@ public:
|
|||||||
static int GetObjectLockLevel(unsigned int index) noexcept;
|
static int GetObjectLockLevel(unsigned int index) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Get the dialogue choice for the object at a certain index in the read object list.
|
* \brief Get the dialogue choice type for the object at a certain index in the read object list.
|
||||||
*
|
*
|
||||||
* \param index The index of the object.
|
* \param index The index of the object.
|
||||||
* \return The dialogue choice.
|
* \return The dialogue choice type.
|
||||||
*/
|
*/
|
||||||
static const char *GetObjectDialogueChoice(unsigned int index) noexcept;
|
static unsigned int GetObjectDialogueChoiceType(unsigned int index) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Get the dialogue choice topic for the object at a certain index in the read object list.
|
||||||
|
*
|
||||||
|
* \param index The index of the object.
|
||||||
|
* \return The dialogue choice topic.
|
||||||
|
*/
|
||||||
|
static const char *GetObjectDialogueChoiceTopic(unsigned int index) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Get the gold pool of the object at a certain index in the read object list.
|
* \brief Get the gold pool of the object at a certain index in the read object list.
|
||||||
@ -1000,12 +1010,20 @@ public:
|
|||||||
static void SetObjectLockLevel(int lockLevel) noexcept;
|
static void SetObjectLockLevel(int lockLevel) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Set the dialogue choice for the temporary object stored on the server.
|
* \brief Set the dialogue choice type of the temporary object stored on the server.
|
||||||
*
|
*
|
||||||
* \param dialogueChoice The dialogue choice.
|
* \param dialogueChoiceType The dialogue choice type.
|
||||||
* \return void
|
* \return void
|
||||||
*/
|
*/
|
||||||
static void SetObjectDialogueChoice(const char* dialogueChoice) noexcept;
|
static void SetObjectDialogueChoiceType(unsigned int dialogueChoiceType) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Set the dialogue choice topic for the temporary object stored on the server.
|
||||||
|
*
|
||||||
|
* \param topic The dialogue choice topic.
|
||||||
|
* \return void
|
||||||
|
*/
|
||||||
|
static void SetObjectDialogueChoiceTopic(const char* topic) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Set the gold pool of the temporary object stored on the server.
|
* \brief Set the gold pool of the temporary object stored on the server.
|
||||||
|
@ -296,16 +296,7 @@ namespace MWGui
|
|||||||
|
|
||||||
//Topics list
|
//Topics list
|
||||||
getWidget(mTopicsList, "TopicsList");
|
getWidget(mTopicsList, "TopicsList");
|
||||||
/*
|
mTopicsList->eventItemSelected += MyGUI::newDelegate(this, &DialogueWindow::onSelectListItem);
|
||||||
Start of tes3mp change (major)
|
|
||||||
|
|
||||||
Instead of running DialogueWindow::onSelectListItem() when clicking a list item, run
|
|
||||||
onSendDialoguePacket() so the server can approve or deny a dialogue choice
|
|
||||||
*/
|
|
||||||
mTopicsList->eventItemSelected += MyGUI::newDelegate(this, &DialogueWindow::onSendDialoguePacket);
|
|
||||||
/*
|
|
||||||
End of tes3mp change (major)
|
|
||||||
*/
|
|
||||||
|
|
||||||
getWidget(mGoodbyeButton, "ByeButton");
|
getWidget(mGoodbyeButton, "ByeButton");
|
||||||
mGoodbyeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &DialogueWindow::onByeClicked);
|
mGoodbyeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &DialogueWindow::onByeClicked);
|
||||||
@ -382,27 +373,25 @@ namespace MWGui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
void DialogueWindow::onSelectListItem(const std::string& topic, int id)
|
||||||
Start of tes3mp addition
|
|
||||||
|
|
||||||
A different event that should be used in multiplayer when clicking on list items
|
|
||||||
in the dialogue screen, sending DialogueChoice packets to the server so they can
|
|
||||||
be approved or denied
|
|
||||||
*/
|
|
||||||
void DialogueWindow::onSendDialoguePacket(const std::string& topic, int id)
|
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
Start of tes3mp change (major)
|
||||||
|
|
||||||
|
Instead of activating a list item here, send an ObjectDialogueChoice packet to the server
|
||||||
|
and let it decide whether the list item gets activated
|
||||||
|
*/
|
||||||
mwmp::ObjectList* objectList = mwmp::Main::get().getNetworking()->getObjectList();
|
mwmp::ObjectList* objectList = mwmp::Main::get().getNetworking()->getObjectList();
|
||||||
objectList->reset();
|
objectList->reset();
|
||||||
objectList->packetOrigin = mwmp::CLIENT_GAMEPLAY;
|
objectList->packetOrigin = mwmp::CLIENT_GAMEPLAY;
|
||||||
objectList->addObjectDialogueChoice(mPtr, topic, id);
|
objectList->addObjectDialogueChoice(mPtr, topic, id);
|
||||||
objectList->sendObjectDialogueChoice();
|
objectList->sendObjectDialogueChoice();
|
||||||
}
|
|
||||||
/*
|
|
||||||
End of tes3mp addition
|
|
||||||
*/
|
|
||||||
|
|
||||||
void DialogueWindow::onSelectListItem(const std::string& topic, int id)
|
return;
|
||||||
{
|
/*
|
||||||
|
End of tes3mp change (major)
|
||||||
|
*/
|
||||||
|
|
||||||
MWBase::DialogueManager* dialogueManager = MWBase::Environment::get().getDialogueManager();
|
MWBase::DialogueManager* dialogueManager = MWBase::Environment::get().getDialogueManager();
|
||||||
|
|
||||||
if (mGoodbye || dialogueManager->isInChoice())
|
if (mGoodbye || dialogueManager->isInChoice())
|
||||||
@ -453,6 +442,49 @@ namespace MWGui
|
|||||||
updateTopics();
|
updateTopics();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Start of tes3mp addition
|
||||||
|
|
||||||
|
Make it possible to activate any dialogue choice from elsewhere in the code
|
||||||
|
*/
|
||||||
|
void DialogueWindow::activateDialogueChoice(unsigned char dialogueChoiceType, std::string topic)
|
||||||
|
{
|
||||||
|
if (dialogueChoiceType == mwmp::DialogueChoiceType::TOPIC)
|
||||||
|
{
|
||||||
|
// If we're using a translated version of Morrowind, translate this topic from English into our language
|
||||||
|
if (MWBase::Environment::get().getWindowManager()->getTranslationDataStorage().hasTranslation())
|
||||||
|
topic = MWBase::Environment::get().getWindowManager()->getTranslationDataStorage().getLocalizedTopicId(topic);
|
||||||
|
|
||||||
|
onTopicActivated(topic);
|
||||||
|
}
|
||||||
|
else if (dialogueChoiceType == mwmp::DialogueChoiceType::PERSUASION)
|
||||||
|
mPersuasionDialog.setVisible(true);
|
||||||
|
else if (dialogueChoiceType == mwmp::DialogueChoiceType::COMPANION_SHARE)
|
||||||
|
MWBase::Environment::get().getWindowManager()->pushGuiMode(GM_Companion, mPtr);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MWBase::DialogueManager* dialogueManager = MWBase::Environment::get().getDialogueManager();
|
||||||
|
|
||||||
|
if (dialogueChoiceType == mwmp::DialogueChoiceType::BARTER && !dialogueManager->checkServiceRefused(mCallback.get(), MWBase::DialogueManager::Barter))
|
||||||
|
MWBase::Environment::get().getWindowManager()->pushGuiMode(GM_Barter, mPtr);
|
||||||
|
else if (dialogueChoiceType == mwmp::DialogueChoiceType::SPELLS && !dialogueManager->checkServiceRefused(mCallback.get(), MWBase::DialogueManager::Spells))
|
||||||
|
MWBase::Environment::get().getWindowManager()->pushGuiMode(GM_SpellBuying, mPtr);
|
||||||
|
else if (dialogueChoiceType == mwmp::DialogueChoiceType::TRAVEL && !dialogueManager->checkServiceRefused(mCallback.get(), MWBase::DialogueManager::Travel))
|
||||||
|
MWBase::Environment::get().getWindowManager()->pushGuiMode(GM_Travel, mPtr);
|
||||||
|
else if (dialogueChoiceType == mwmp::DialogueChoiceType::SPELLMAKING && !dialogueManager->checkServiceRefused(mCallback.get(), MWBase::DialogueManager::Spellmaking))
|
||||||
|
MWBase::Environment::get().getWindowManager()->pushGuiMode(GM_SpellCreation, mPtr);
|
||||||
|
else if (dialogueChoiceType == mwmp::DialogueChoiceType::ENCHANTING && !dialogueManager->checkServiceRefused(mCallback.get(), MWBase::DialogueManager::Enchanting))
|
||||||
|
MWBase::Environment::get().getWindowManager()->pushGuiMode(GM_Enchanting, mPtr);
|
||||||
|
else if (dialogueChoiceType == mwmp::DialogueChoiceType::TRAINING && !dialogueManager->checkServiceRefused(mCallback.get(), MWBase::DialogueManager::Training))
|
||||||
|
MWBase::Environment::get().getWindowManager()->pushGuiMode(GM_Training, mPtr);
|
||||||
|
else if (dialogueChoiceType == mwmp::DialogueChoiceType::REPAIR && !dialogueManager->checkServiceRefused(mCallback.get(), MWBase::DialogueManager::Repair))
|
||||||
|
MWBase::Environment::get().getWindowManager()->pushGuiMode(GM_MerchantRepair, mPtr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
End of tes3mp addition
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Start of tes3mp addition
|
Start of tes3mp addition
|
||||||
|
|
||||||
|
@ -120,6 +120,16 @@ namespace MWGui
|
|||||||
|
|
||||||
void notifyLinkClicked (TypesetBook::InteractiveId link);
|
void notifyLinkClicked (TypesetBook::InteractiveId link);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Start of tes3mp addition
|
||||||
|
|
||||||
|
Make it possible to activate any dialogue choice from elsewhere in the code
|
||||||
|
*/
|
||||||
|
void activateDialogueChoice(unsigned char dialogueChoiceType, std::string topic = "");
|
||||||
|
/*
|
||||||
|
End of tes3mp addition
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Start of tes3mp addition
|
Start of tes3mp addition
|
||||||
|
|
||||||
@ -150,30 +160,7 @@ namespace MWGui
|
|||||||
bool isCompanion(const MWWorld::Ptr& actor);
|
bool isCompanion(const MWWorld::Ptr& actor);
|
||||||
bool isCompanion();
|
bool isCompanion();
|
||||||
|
|
||||||
/*
|
|
||||||
Start of tes3mp addition
|
|
||||||
|
|
||||||
A different event that should be used in multiplayer when clicking on list items
|
|
||||||
in the dialogue screen, sending DialogueChoice packets to the server so they can
|
|
||||||
be approved or denied
|
|
||||||
*/
|
|
||||||
void onSendDialoguePacket(const std::string& topic, int id);
|
|
||||||
/*
|
|
||||||
End of tes3mp addition
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Start of tes3mp change (major)
|
|
||||||
|
|
||||||
Turn onSelectListItem() into a public function so it can be used elsewhere when
|
|
||||||
receiving ObjectDialogueChoice packets
|
|
||||||
*/
|
|
||||||
public:
|
|
||||||
void onSelectListItem(const std::string& topic, int id);
|
void onSelectListItem(const std::string& topic, int id);
|
||||||
protected:
|
|
||||||
/*
|
|
||||||
End of tes3mp change (major)
|
|
||||||
*/
|
|
||||||
void onByeClicked(MyGUI::Widget* _sender);
|
void onByeClicked(MyGUI::Widget* _sender);
|
||||||
void onMouseWheel(MyGUI::Widget* _sender, int _rel);
|
void onMouseWheel(MyGUI::Widget* _sender, int _rel);
|
||||||
void onWindowResize(MyGUI::Window* _sender);
|
void onWindowResize(MyGUI::Window* _sender);
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "CellController.hpp"
|
#include "CellController.hpp"
|
||||||
#include "RecordHelper.hpp"
|
#include "RecordHelper.hpp"
|
||||||
|
|
||||||
|
#include <components/translation/translation.hpp>
|
||||||
#include <components/openmw-mp/TimedLog.hpp>
|
#include <components/openmw-mp/TimedLog.hpp>
|
||||||
|
|
||||||
#include "../mwbase/world.hpp"
|
#include "../mwbase/world.hpp"
|
||||||
@ -1007,8 +1008,8 @@ void ObjectList::makeDialogueChoices(MWWorld::CellStore* cellStore)
|
|||||||
MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Dialogue, ptrFound);
|
MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Dialogue, ptrFound);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_APPEND(TimedLog::LOG_VERBOSE, "-- Making dialogue choice of %s", baseObject.dialogueChoice);
|
LOG_APPEND(TimedLog::LOG_VERBOSE, "-- Making dialogue choice of type %i", baseObject.dialogueChoiceType);
|
||||||
MWBase::Environment::get().getWindowManager()->getDialogueWindow()->onSelectListItem(baseObject.dialogueChoice, baseObject.guiId);
|
MWBase::Environment::get().getWindowManager()->getDialogueWindow()->activateDialogueChoice(baseObject.dialogueChoiceType, baseObject.topicId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1272,7 +1273,40 @@ void ObjectList::addObjectDialogueChoice(const MWWorld::Ptr& ptr, std::string di
|
|||||||
cell = *ptr.getCell()->getCell();
|
cell = *ptr.getCell()->getCell();
|
||||||
|
|
||||||
mwmp::BaseObject baseObject = getBaseObjectFromPtr(ptr);
|
mwmp::BaseObject baseObject = getBaseObjectFromPtr(ptr);
|
||||||
baseObject.dialogueChoice = dialogueChoice;
|
|
||||||
|
const MWWorld::Store<ESM::GameSetting>& gmst = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>();
|
||||||
|
|
||||||
|
// Because the actual text for any of the special dialogue choices can vary according to the game language used,
|
||||||
|
// set the type of dialogue choice by doing a lot of checks
|
||||||
|
if (dialogueChoice == gmst.find("sPersuasion")->mValue.getString())
|
||||||
|
baseObject.dialogueChoiceType = static_cast<int>(DialogueChoiceType::PERSUASION);
|
||||||
|
else if (dialogueChoice == gmst.find("sCompanionShare")->mValue.getString())
|
||||||
|
baseObject.dialogueChoiceType = DialogueChoiceType::COMPANION_SHARE;
|
||||||
|
else if (dialogueChoice == gmst.find("sBarter")->mValue.getString())
|
||||||
|
baseObject.dialogueChoiceType = DialogueChoiceType::BARTER;
|
||||||
|
else if (dialogueChoice == gmst.find("sSpells")->mValue.getString())
|
||||||
|
baseObject.dialogueChoiceType = DialogueChoiceType::SPELLS;
|
||||||
|
else if (dialogueChoice == gmst.find("sTravel")->mValue.getString())
|
||||||
|
baseObject.dialogueChoiceType = DialogueChoiceType::TRAVEL;
|
||||||
|
else if (dialogueChoice == gmst.find("sSpellMakingMenuTitle")->mValue.getString())
|
||||||
|
baseObject.dialogueChoiceType = DialogueChoiceType::SPELLMAKING;
|
||||||
|
else if (dialogueChoice == gmst.find("sEnchanting")->mValue.getString())
|
||||||
|
baseObject.dialogueChoiceType = DialogueChoiceType::ENCHANTING;
|
||||||
|
else if (dialogueChoice == gmst.find("sServiceTrainingTitle")->mValue.getString())
|
||||||
|
baseObject.dialogueChoiceType = DialogueChoiceType::TRAINING;
|
||||||
|
else if (dialogueChoice == gmst.find("sRepair")->mValue.getString())
|
||||||
|
baseObject.dialogueChoiceType = DialogueChoiceType::REPAIR;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
baseObject.dialogueChoiceType = DialogueChoiceType::TOPIC;
|
||||||
|
|
||||||
|
// For translated versions of the game, make sure we translate the topic back into English first
|
||||||
|
if (MWBase::Environment::get().getWindowManager()->getTranslationDataStorage().hasTranslation())
|
||||||
|
baseObject.topicId = MWBase::Environment::get().getWindowManager()->getTranslationDataStorage().topicID(dialogueChoice);
|
||||||
|
else
|
||||||
|
baseObject.topicId = dialogueChoice;
|
||||||
|
}
|
||||||
|
|
||||||
baseObject.guiId = guiId;
|
baseObject.guiId = guiId;
|
||||||
addBaseObject(baseObject);
|
addBaseObject(baseObject);
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,8 @@ namespace mwmp
|
|||||||
int lockLevel;
|
int lockLevel;
|
||||||
float scale;
|
float scale;
|
||||||
|
|
||||||
std::string dialogueChoice;
|
unsigned char dialogueChoiceType;
|
||||||
|
std::string topicId;
|
||||||
int guiId;
|
int guiId;
|
||||||
|
|
||||||
std::string soundId;
|
std::string soundId;
|
||||||
|
@ -10,6 +10,23 @@
|
|||||||
|
|
||||||
namespace mwmp
|
namespace mwmp
|
||||||
{
|
{
|
||||||
|
namespace DialogueChoiceType
|
||||||
|
{
|
||||||
|
enum DIALOGUE_CHOICE
|
||||||
|
{
|
||||||
|
TOPIC,
|
||||||
|
PERSUASION,
|
||||||
|
COMPANION_SHARE,
|
||||||
|
BARTER,
|
||||||
|
SPELLS,
|
||||||
|
TRAVEL,
|
||||||
|
SPELLMAKING,
|
||||||
|
ENCHANTING,
|
||||||
|
TRAINING,
|
||||||
|
REPAIR
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
enum PACKET_ORIGIN
|
enum PACKET_ORIGIN
|
||||||
{
|
{
|
||||||
CLIENT_GAMEPLAY = 0,
|
CLIENT_GAMEPLAY = 0,
|
||||||
|
@ -12,6 +12,10 @@ PacketObjectDialogueChoice::PacketObjectDialogueChoice(RakNet::RakPeerInterface
|
|||||||
void PacketObjectDialogueChoice::Object(BaseObject& baseObject, bool send)
|
void PacketObjectDialogueChoice::Object(BaseObject& baseObject, bool send)
|
||||||
{
|
{
|
||||||
ObjectPacket::Object(baseObject, send);
|
ObjectPacket::Object(baseObject, send);
|
||||||
RW(baseObject.dialogueChoice, send, true);
|
RW(baseObject.dialogueChoiceType, send);
|
||||||
|
|
||||||
|
if (baseObject.dialogueChoiceType == DialogueChoiceType::TOPIC)
|
||||||
|
RW(baseObject.topicId, send, true);
|
||||||
|
|
||||||
RW(baseObject.guiId, send);
|
RW(baseObject.guiId, send);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user