[General] Add packet GUIWindow

new-script-api
Koncord 7 years ago
parent 0a35b897be
commit c276ff4bd9

@ -195,6 +195,33 @@ namespace mwmp
std::string data;
};
struct GUIWindow
{
int32_t id;
short width, height;
enum class WidgetType: int
{
Button,
Editbox,
Label,
ListBoxActive,
ListBoxPassive,
Slider
};
struct Widget
{
WidgetType type;
std::string name;
bool disabled;
short posX, posY;
short width, height;
std::vector<std::string> data;
};
std::vector<Widget> widgets;
};
BasePlayer(RakNet::RakNetGUID guid) : guid(guid)
{
inventoryChanges.action = 0;
@ -219,6 +246,7 @@ namespace mwmp
GUIMessageBox guiMessageBox;
int month;
int day;
GUIWindow guiWindow;
double hour;
AttributeChanges attributeChanges;

@ -3,6 +3,7 @@
#include "../Packets/Player/PacketPlayerCharGen.hpp"
#include "../Packets/Player/PacketHandshake.hpp"
#include "../Packets/Player/PacketGUIBoxes.hpp"
#include "../Packets/Player/PacketGUIWindow.hpp"
#include "../Packets/Player/PacketLoaded.hpp"
#include "../Packets/Player/PacketGameSettings.hpp"
#include "../Packets/Player/PacketGameTime.hpp"
@ -54,6 +55,7 @@ mwmp::PlayerPacketController::PlayerPacketController(RakNet::RakPeerInterface *p
AddPacket<PacketChatMessage>(&packets, peer);
AddPacket<PacketHandshake>(&packets, peer);
AddPacket<PacketGUIBoxes>(&packets, peer);
AddPacket<PacketGUIWindow>(&packets, peer);
AddPacket<PacketLoaded>(&packets, peer);
AddPacket<PacketGameSettings>(&packets, peer);
AddPacket<PacketGameTime>(&packets, peer);
@ -95,7 +97,7 @@ mwmp::PlayerPacketController::PlayerPacketController(RakNet::RakPeerInterface *p
mwmp::PlayerPacket *mwmp::PlayerPacketController::GetPacket(RakNet::MessageID id)
{
return packets[(unsigned char)id].get();
return packets[(RakNet::MessageID)id].get();
}
void mwmp::PlayerPacketController::SetStream(RakNet::BitStream *inStream, RakNet::BitStream *outStream)

@ -18,7 +18,7 @@ namespace mwmp
bool ContainsPacket(RakNet::MessageID id);
typedef std::unordered_map<unsigned char, std::unique_ptr<PlayerPacket> > packets_t;
typedef std::unordered_map<RakNet::MessageID, std::unique_ptr<PlayerPacket> > packets_t;
private:
packets_t packets;
};

@ -17,6 +17,7 @@ enum GameMessages
ID_HANDSHAKE,
ID_LOADED,
ID_GUI_MESSAGEBOX,
ID_GUI_WINDOW,
ID_GAME_TIME,
ID_GAME_WEATHER,

@ -0,0 +1,60 @@
//
// Created by koncord on 15.11.17.
//
#include <components/openmw-mp/NetworkMessages.hpp>
#include "PacketGUIWindow.hpp"
using namespace mwmp;
PacketGUIWindow::PacketGUIWindow(RakNet::RakPeerInterface *peer) : PlayerPacket(peer)
{
packetID = ID_GUI_WINDOW;
orderChannel = CHANNEL_SYSTEM;
}
void PacketGUIWindow::Packet(RakNet::BitStream *bs, bool send)
{
BasePacket::Packet(bs, send);
RW(player->guiWindow.id, send);
RW(player->guiWindow.height, send);
RW(player->guiWindow.width, send);
int32_t size;
if (send)
size = player->guiWindow.widgets.size();
RW(size, send);
if(!send)
player->guiWindow.widgets.resize(size);
for (auto &&widget : player->guiWindow.widgets)
{
RW(widget.type, send);
RW(widget.name, send);
RW(widget.posX, send);
RW(widget.posY, send);
if (widget.type != BasePlayer::GUIWindow::WidgetType::Label)
{
RW(widget.disabled, send);
if(widget.type != BasePlayer::GUIWindow::WidgetType::Button)
{
RW(widget.width, send);
RW(widget.height, send);
size = widget.data.size();
RW(size, send);
if (!send)
widget.data.resize(size);
for (auto &&str : widget.data)
RW(str, send);
}
}
}
}

@ -0,0 +1,19 @@
//
// Created by koncord on 15.11.17.
//
#pragma once
#include <components/openmw-mp/Packets/Player/PlayerPacket.hpp>
namespace mwmp
{
class PacketGUIWindow : public PlayerPacket
{
public:
PacketGUIWindow(RakNet::RakPeerInterface *peer);
virtual void Packet(RakNet::BitStream *bs, bool send);
};
}
Loading…
Cancel
Save