mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-03 07:19:41 +00:00
[General] Implement PlayerJail packet
Rework server's DeathFunctions into MechanicsFunctions Remove connection between PlayerResurrect and jailing
This commit is contained in:
parent
b1b27728e2
commit
3280f0c5ee
11 changed files with 44 additions and 54 deletions
|
@ -85,8 +85,8 @@ set(SERVER
|
|||
Script/Functions/Actors.cpp Script/Functions/World.cpp Script/Functions/Miscellaneous.cpp
|
||||
|
||||
Script/Functions/Books.cpp Script/Functions/Cells.cpp Script/Functions/CharClass.cpp
|
||||
Script/Functions/Chat.cpp Script/Functions/Death.cpp Script/Functions/Dialogue.cpp
|
||||
Script/Functions/Factions.cpp Script/Functions/GUI.cpp Script/Functions/Items.cpp
|
||||
Script/Functions/Chat.cpp Script/Functions/Dialogue.cpp Script/Functions/Factions.cpp
|
||||
Script/Functions/GUI.cpp Script/Functions/Items.cpp Script/Functions/Mechanics.cpp
|
||||
Script/Functions/Positions.cpp Script/Functions/Quests.cpp Script/Functions/Settings.cpp
|
||||
Script/Functions/Spells.cpp Script/Functions/Stats.cpp Script/Functions/Timer.cpp
|
||||
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
#ifndef OPENMW_DEATHAPI_HPP
|
||||
#define OPENMW_DEATHAPI_HPP
|
||||
|
||||
#include "../Types.hpp"
|
||||
|
||||
#define DEATHAPI \
|
||||
{"SetDeathPenaltyJailDays", DeathFunctions::SetDeathPenaltyJailDays},\
|
||||
\
|
||||
{"Resurrect", DeathFunctions::Resurrect}
|
||||
|
||||
class DeathFunctions
|
||||
{
|
||||
public:
|
||||
static void SetDeathPenaltyJailDays(unsigned short pid, int days) noexcept;
|
||||
|
||||
static void Resurrect(unsigned short pid, unsigned int type) noexcept;
|
||||
};
|
||||
|
||||
#endif //OPENMW_DEATHAPI_HPP
|
|
@ -1,4 +1,4 @@
|
|||
#include "Death.hpp"
|
||||
#include "Mechanics.hpp"
|
||||
#include <apps/openmw-mp/Script/ScriptFunctions.hpp>
|
||||
#include <components/openmw-mp/NetworkMessages.hpp>
|
||||
#include <apps/openmw-mp/Networking.hpp>
|
||||
|
@ -7,20 +7,25 @@
|
|||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
void DeathFunctions::SetDeathPenaltyJailDays(unsigned short pid, int days) noexcept
|
||||
void MechanicsFunctions::Jail(unsigned short pid, int jailDays, bool ignoreJailTeleportation) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
player->deathPenaltyJailDays = days;
|
||||
player->jailDays = jailDays;
|
||||
player->ignoreJailTeleportation = ignoreJailTeleportation;
|
||||
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_JAIL)->setPlayer(player);
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_JAIL)->Send(false);
|
||||
}
|
||||
|
||||
void DeathFunctions::Resurrect(unsigned short pid, unsigned int type) noexcept
|
||||
void MechanicsFunctions::Resurrect(unsigned short pid, unsigned int type) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
player->resurrectType = type;
|
||||
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_RESURRECT)->setPlayer(player);
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_RESURRECT)->Send(false);
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_RESURRECT)->Send(true);
|
19
apps/openmw-mp/Script/Functions/Mechanics.hpp
Normal file
19
apps/openmw-mp/Script/Functions/Mechanics.hpp
Normal file
|
@ -0,0 +1,19 @@
|
|||
#ifndef OPENMW_MECHANICSAPI_HPP
|
||||
#define OPENMW_MECHANICSAPI_HPP
|
||||
|
||||
#include "../Types.hpp"
|
||||
|
||||
#define MECHANICSAPI \
|
||||
{"Jail", MechanicsFunctions::Jail},\
|
||||
\
|
||||
{"Resurrect", MechanicsFunctions::Resurrect}
|
||||
|
||||
class MechanicsFunctions
|
||||
{
|
||||
public:
|
||||
static void Jail(unsigned short pid, int jailDays, bool ignoreJailTeleportation) noexcept;
|
||||
|
||||
static void Resurrect(unsigned short pid, unsigned int type) noexcept;
|
||||
};
|
||||
|
||||
#endif //OPENMW_MECHANICSAPI_HPP
|
|
@ -9,11 +9,11 @@
|
|||
#include <Script/Functions/Books.hpp>
|
||||
#include <Script/Functions/Cells.hpp>
|
||||
#include <Script/Functions/CharClass.hpp>
|
||||
#include <Script/Functions/Death.hpp>
|
||||
#include <Script/Functions/Dialogue.hpp>
|
||||
#include <Script/Functions/Factions.hpp>
|
||||
#include <Script/Functions/GUI.hpp>
|
||||
#include <Script/Functions/Items.hpp>
|
||||
#include <Script/Functions/Mechanics.hpp>
|
||||
#include <Script/Functions/Miscellaneous.hpp>
|
||||
#include <Script/Functions/Positions.hpp>
|
||||
#include <Script/Functions/Quests.hpp>
|
||||
|
@ -112,11 +112,11 @@ public:
|
|||
BOOKAPI,
|
||||
CELLAPI,
|
||||
CHARCLASSAPI,
|
||||
DEATHAPI,
|
||||
DIALOGUEAPI,
|
||||
FACTIONAPI,
|
||||
GUIAPI,
|
||||
ITEMAPI,
|
||||
MECHANICSAPI,
|
||||
MISCELLANEOUSAPI,
|
||||
POSITIONAPI,
|
||||
QUESTAPI,
|
||||
|
|
|
@ -74,8 +74,7 @@ namespace MWGui
|
|||
/*
|
||||
Start of tes3mp change (minor)
|
||||
|
||||
If the jail code is being used from elsewhere to lower skills, don't
|
||||
teleport the player to the nearest prison
|
||||
Prevent teleportation to jail if specified
|
||||
*/
|
||||
if (!mwmp::Main::get().getLocalPlayer()->ignoreJailTeleportation)
|
||||
MWBase::Environment::get().getWorld()->teleportToClosestMarker(player, "prisonmarker");
|
||||
|
@ -129,21 +128,11 @@ namespace MWGui
|
|||
/*
|
||||
Start of tes3mp addition
|
||||
|
||||
If the jail code is being used from elsewhere to lower skills, reset the
|
||||
corresponding boolean and use more ambiguous wording for the message displayed
|
||||
If jail teleportation was ignored, reset its boolean here
|
||||
*/
|
||||
if (mwmp::Main::get().getLocalPlayer()->ignoreJailTeleportation)
|
||||
{
|
||||
mwmp::Main::get().getLocalPlayer()->ignoreJailTeleportation = false;
|
||||
|
||||
const std::string stringToReplace = "been released";
|
||||
const std::string stringToReplace2 = "in prison";
|
||||
|
||||
if (message.find(stringToReplace) != std::string::npos)
|
||||
message.replace(message.find(stringToReplace), stringToReplace.size(), "recovered");
|
||||
|
||||
if (message.find(stringToReplace2) != std::string::npos)
|
||||
message.replace(message.find(stringToReplace2), stringToReplace2.size(), "incapacitated");
|
||||
}
|
||||
/*
|
||||
End of tes3mp addition
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#ifndef OPENMW_PROCESSORPLAYERJAIL_HPP
|
||||
#define OPENMW_PROCESSORPLAYERJAIL_HPP
|
||||
|
||||
#include "apps/openmw/mwbase/environment.hpp"
|
||||
#include "apps/openmw/mwgui/windowmanagerimp.hpp"
|
||||
|
||||
#include "../PlayerProcessor.hpp"
|
||||
#include "apps/openmw/mwmp/Main.hpp"
|
||||
#include "apps/openmw/mwmp/Networking.hpp"
|
||||
|
@ -21,7 +24,11 @@ namespace mwmp
|
|||
|
||||
if (isLocal())
|
||||
{
|
||||
// To be filled in
|
||||
// Apply death penalties
|
||||
if (player->jailDays > 0)
|
||||
{
|
||||
MWBase::Environment::get().getWindowManager()->goToJail(player->jailDays);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -5,9 +5,6 @@
|
|||
#ifndef OPENMW_PROCESSORPLAYERRESURRECT_HPP
|
||||
#define OPENMW_PROCESSORPLAYERRESURRECT_HPP
|
||||
|
||||
#include "apps/openmw/mwbase/environment.hpp"
|
||||
#include "apps/openmw/mwgui/windowmanagerimp.hpp"
|
||||
|
||||
#include "../PlayerProcessor.hpp"
|
||||
#include "apps/openmw/mwmp/Main.hpp"
|
||||
#include "apps/openmw/mwmp/Networking.hpp"
|
||||
|
@ -61,13 +58,6 @@ namespace mwmp
|
|||
static_cast<LocalPlayer*>(player)->updateStatsDynamic(true);
|
||||
Main::get().getNetworking()->getPlayerPacket(ID_PLAYER_STATS_DYNAMIC)->setPlayer(player);
|
||||
Main::get().getNetworking()->getPlayerPacket(ID_PLAYER_STATS_DYNAMIC)->Send(serverAddr);
|
||||
|
||||
// Apply death penalties
|
||||
if (player->deathPenaltyJailDays > 0)
|
||||
{
|
||||
player->ignoreJailTeleportation = true;
|
||||
MWBase::Environment::get().getWindowManager()->goToJail(player->deathPenaltyJailDays);
|
||||
}
|
||||
}
|
||||
else if (player != 0)
|
||||
{
|
||||
|
|
|
@ -250,10 +250,9 @@ namespace mwmp
|
|||
bool isChangingRegion;
|
||||
|
||||
std::string deathReason;
|
||||
int deathPenaltyJailDays;
|
||||
bool ignoreJailTeleportation;
|
||||
|
||||
int jailDays;
|
||||
bool ignoreJailTeleportation;
|
||||
|
||||
unsigned int resurrectType;
|
||||
};
|
||||
|
|
|
@ -14,4 +14,5 @@ void PacketPlayerJail::Packet(RakNet::BitStream *bs, bool send)
|
|||
PlayerPacket::Packet(bs, send);
|
||||
|
||||
RW(player->jailDays, send);
|
||||
RW(player->ignoreJailTeleportation, send);
|
||||
}
|
||||
|
|
|
@ -14,5 +14,4 @@ void PacketPlayerResurrect::Packet(RakNet::BitStream *bs, bool send)
|
|||
PlayerPacket::Packet(bs, send);
|
||||
|
||||
RW(player->resurrectType, send);
|
||||
RW(player->deathPenaltyJailDays, send);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue