forked from mirror/openmw-tes3mp
[Server] Create ShapeshiftFunctions and move relevant functions there
This commit is contained in:
parent
2bb7a4253e
commit
76e7392a84
6 changed files with 208 additions and 182 deletions
|
@ -88,7 +88,8 @@ set(SERVER
|
|||
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
|
||||
Script/Functions/Shapeshift.cpp Script/Functions/Spells.cpp Script/Functions/Stats.cpp
|
||||
Script/Functions/Timer.cpp
|
||||
|
||||
Script/API/TimerAPI.cpp Script/API/PublicFnAPI.cpp
|
||||
${PawnScript_Sources}
|
||||
|
|
|
@ -76,38 +76,6 @@ const char *MechanicsFunctions::GetSelectedSpellId(unsigned short pid) noexcept
|
|||
return player->selectedSpellId.c_str();
|
||||
}
|
||||
|
||||
double MechanicsFunctions::GetScale(unsigned short pid) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, 0.0f);
|
||||
|
||||
return player->scale;
|
||||
}
|
||||
|
||||
bool MechanicsFunctions::IsWerewolf(unsigned short pid) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, 0);
|
||||
|
||||
return player->isWerewolf;
|
||||
}
|
||||
|
||||
const char *MechanicsFunctions::GetCreatureRefId(unsigned short pid) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, 0);
|
||||
|
||||
return player->creatureRefId.c_str();
|
||||
}
|
||||
|
||||
bool MechanicsFunctions::GetCreatureNameDisplayState(unsigned short pid) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, 0);
|
||||
|
||||
return player->displayCreatureName;
|
||||
}
|
||||
|
||||
void MechanicsFunctions::SetMarkCell(unsigned short pid, const char *cellDescription) noexcept
|
||||
{
|
||||
Player *player;
|
||||
|
@ -143,38 +111,6 @@ void MechanicsFunctions::SetSelectedSpellId(unsigned short pid, const char *spel
|
|||
player->selectedSpellId = spellId;
|
||||
}
|
||||
|
||||
void MechanicsFunctions::SetScale(unsigned short pid, double scale) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
player->scale = scale;
|
||||
}
|
||||
|
||||
void MechanicsFunctions::SetWerewolfState(unsigned short pid, bool isWerewolf) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
player->isWerewolf = isWerewolf;
|
||||
}
|
||||
|
||||
void MechanicsFunctions::SetCreatureRefId(unsigned short pid, const char *refId) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
player->creatureRefId = refId;
|
||||
}
|
||||
|
||||
void MechanicsFunctions::SetCreatureNameDisplayState(unsigned short pid, bool displayState) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
player->displayCreatureName = displayState;
|
||||
}
|
||||
|
||||
void MechanicsFunctions::SendMarkLocation(unsigned short pid)
|
||||
{
|
||||
Player *player;
|
||||
|
@ -197,16 +133,6 @@ void MechanicsFunctions::SendSelectedSpell(unsigned short pid)
|
|||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_MISCELLANEOUS)->Send(false);
|
||||
}
|
||||
|
||||
void MechanicsFunctions::SendShapeshift(unsigned short pid)
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_SHAPESHIFT)->setPlayer(player);
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_SHAPESHIFT)->Send(false);
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_SHAPESHIFT)->Send(true);
|
||||
}
|
||||
|
||||
void MechanicsFunctions::Jail(unsigned short pid, int jailDays, bool ignoreJailTeleportation, bool ignoreJailSkillIncreases,
|
||||
const char* jailProgressText, const char* jailEndText) noexcept
|
||||
{
|
||||
|
|
|
@ -14,24 +14,13 @@
|
|||
{"GetMarkRotZ", MechanicsFunctions::GetMarkRotZ},\
|
||||
{"GetSelectedSpellId", MechanicsFunctions::GetSelectedSpellId},\
|
||||
\
|
||||
{"GetScale", MechanicsFunctions::GetScale},\
|
||||
{"IsWerewolf", MechanicsFunctions::IsWerewolf},\
|
||||
{"GetCreatureRefId", MechanicsFunctions::GetCreatureRefId},\
|
||||
{"GetCreatureNameDisplayState", MechanicsFunctions::GetCreatureNameDisplayState},\
|
||||
\
|
||||
{"SetMarkCell", MechanicsFunctions::SetMarkCell},\
|
||||
{"SetMarkPos", MechanicsFunctions::SetMarkPos},\
|
||||
{"SetMarkRot", MechanicsFunctions::SetMarkRot},\
|
||||
{"SetSelectedSpellId", MechanicsFunctions::SetSelectedSpellId},\
|
||||
\
|
||||
{"SetScale", MechanicsFunctions::SetScale},\
|
||||
{"SetWerewolfState", MechanicsFunctions::SetWerewolfState},\
|
||||
{"SetCreatureRefId", MechanicsFunctions::SetCreatureRefId},\
|
||||
{"SetCreatureNameDisplayState", MechanicsFunctions::SetCreatureNameDisplayState},\
|
||||
\
|
||||
{"SendMarkLocation", MechanicsFunctions::SendMarkLocation},\
|
||||
{"SendSelectedSpell", MechanicsFunctions::SendSelectedSpell},\
|
||||
{"SendShapeshift", MechanicsFunctions::SendShapeshift},\
|
||||
\
|
||||
{"Jail", MechanicsFunctions::Jail},\
|
||||
{"Resurrect", MechanicsFunctions::Resurrect}
|
||||
|
@ -104,43 +93,6 @@ public:
|
|||
*/
|
||||
static const char *GetSelectedSpellId(unsigned short pid) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Get the scale of a player.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \return The scale.
|
||||
*/
|
||||
static double GetScale(unsigned short pid) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Check whether a player is a werewolf.
|
||||
*
|
||||
* This is based on the last PlayerShapeshift packet received or sent for that player.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \return The werewolf state.
|
||||
*/
|
||||
static bool IsWerewolf(unsigned short pid) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Get the refId of the creature the player is disguised as.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \return The creature refId.
|
||||
*/
|
||||
static const char *GetCreatureRefId(unsigned short pid) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Check whether a player's name is replaced by that of the creature they are
|
||||
* disguised as when other players hover over them.
|
||||
*
|
||||
* This is based on the last PlayerShapeshift packet received or sent for that player.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \return The creature name display state.
|
||||
*/
|
||||
static bool GetCreatureNameDisplayState(unsigned short pid) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Set the Mark cell of a player.
|
||||
*
|
||||
|
@ -195,54 +147,6 @@ public:
|
|||
*/
|
||||
static void SetSelectedSpellId(unsigned short pid, const char *spellId) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Set the scale of a player.
|
||||
*
|
||||
* This changes the scale recorded for that player in the server memory, but
|
||||
* does not by itself send a packet.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \param scale The new scale.
|
||||
* \return void
|
||||
*/
|
||||
static void SetScale(unsigned short pid, double scale) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Set the werewolf state of a player.
|
||||
*
|
||||
* This changes the werewolf state recorded for that player in the server memory, but
|
||||
* does not by itself send a packet.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \param isWerewolf The new werewolf state.
|
||||
* \return void
|
||||
*/
|
||||
static void SetWerewolfState(unsigned short pid, bool isWerewolf) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Set the refId of the creature a player is disguised as.
|
||||
*
|
||||
* This changes the creature refId recorded for that player in the server memory, but
|
||||
* does not by itself send a packet.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \param refId The creature refId.
|
||||
* \param displaysCreatureName Whether the player's name appears as that of the creature
|
||||
* when hovered over by others.
|
||||
* \return void
|
||||
*/
|
||||
static void SetCreatureRefId(unsigned short pid, const char *refId) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Set whether a player's name is replaced by that of the creature they are
|
||||
* disguised as when other players hover over them.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \param displayState The creature name display state.
|
||||
* \return void
|
||||
*/
|
||||
static void SetCreatureNameDisplayState(unsigned short pid, bool displayState) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Send a PlayerMiscellaneous packet with a Mark location to a player.
|
||||
*
|
||||
|
@ -259,17 +163,6 @@ public:
|
|||
*/
|
||||
static void SendSelectedSpell(unsigned short pid);
|
||||
|
||||
/**
|
||||
* \brief Send a PlayerShapeshift packet about a player.
|
||||
*
|
||||
* This sends the packet to all players connected to the server. It is currently used
|
||||
* only to communicate werewolf states.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \return void
|
||||
*/
|
||||
static void SendShapeshift(unsigned short pid);
|
||||
|
||||
/**
|
||||
* \brief Send a PlayerJail packet about a player.
|
||||
*
|
||||
|
|
84
apps/openmw-mp/Script/Functions/Shapeshift.cpp
Normal file
84
apps/openmw-mp/Script/Functions/Shapeshift.cpp
Normal file
|
@ -0,0 +1,84 @@
|
|||
#include "Shapeshift.hpp"
|
||||
|
||||
#include <components/openmw-mp/NetworkMessages.hpp>
|
||||
#include <components/openmw-mp/Log.hpp>
|
||||
|
||||
#include <apps/openmw-mp/Script/ScriptFunctions.hpp>
|
||||
#include <apps/openmw-mp/Networking.hpp>
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
double ShapeshiftFunctions::GetScale(unsigned short pid) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, 0.0f);
|
||||
|
||||
return player->scale;
|
||||
}
|
||||
|
||||
bool ShapeshiftFunctions::IsWerewolf(unsigned short pid) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, 0);
|
||||
|
||||
return player->isWerewolf;
|
||||
}
|
||||
|
||||
const char *ShapeshiftFunctions::GetCreatureRefId(unsigned short pid) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, 0);
|
||||
|
||||
return player->creatureRefId.c_str();
|
||||
}
|
||||
|
||||
bool ShapeshiftFunctions::GetCreatureNameDisplayState(unsigned short pid) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, 0);
|
||||
|
||||
return player->displayCreatureName;
|
||||
}
|
||||
|
||||
void ShapeshiftFunctions::SetScale(unsigned short pid, double scale) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
player->scale = scale;
|
||||
}
|
||||
|
||||
void ShapeshiftFunctions::SetWerewolfState(unsigned short pid, bool isWerewolf) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
player->isWerewolf = isWerewolf;
|
||||
}
|
||||
|
||||
void ShapeshiftFunctions::SetCreatureRefId(unsigned short pid, const char *refId) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
player->creatureRefId = refId;
|
||||
}
|
||||
|
||||
void ShapeshiftFunctions::SetCreatureNameDisplayState(unsigned short pid, bool displayState) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
player->displayCreatureName = displayState;
|
||||
}
|
||||
|
||||
void ShapeshiftFunctions::SendShapeshift(unsigned short pid)
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_SHAPESHIFT)->setPlayer(player);
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_SHAPESHIFT)->Send(false);
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_SHAPESHIFT)->Send(true);
|
||||
}
|
120
apps/openmw-mp/Script/Functions/Shapeshift.hpp
Normal file
120
apps/openmw-mp/Script/Functions/Shapeshift.hpp
Normal file
|
@ -0,0 +1,120 @@
|
|||
#ifndef OPENMW_SHAPESHIFTAPI_HPP
|
||||
#define OPENMW_SHAPESHIFTAPI_HPP
|
||||
|
||||
#include "../Types.hpp"
|
||||
|
||||
#define SHAPESHIFTAPI \
|
||||
{"GetScale", ShapeshiftFunctions::GetScale},\
|
||||
{"IsWerewolf", ShapeshiftFunctions::IsWerewolf},\
|
||||
{"GetCreatureRefId", ShapeshiftFunctions::GetCreatureRefId},\
|
||||
{"GetCreatureNameDisplayState", ShapeshiftFunctions::GetCreatureNameDisplayState},\
|
||||
\
|
||||
{"SetScale", ShapeshiftFunctions::SetScale},\
|
||||
{"SetWerewolfState", ShapeshiftFunctions::SetWerewolfState},\
|
||||
{"SetCreatureRefId", ShapeshiftFunctions::SetCreatureRefId},\
|
||||
{"SetCreatureNameDisplayState", ShapeshiftFunctions::SetCreatureNameDisplayState},\
|
||||
\
|
||||
{"SendShapeshift", ShapeshiftFunctions::SendShapeshift}
|
||||
|
||||
class ShapeshiftFunctions
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* \brief Get the scale of a player.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \return The scale.
|
||||
*/
|
||||
static double GetScale(unsigned short pid) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Check whether a player is a werewolf.
|
||||
*
|
||||
* This is based on the last PlayerShapeshift packet received or sent for that player.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \return The werewolf state.
|
||||
*/
|
||||
static bool IsWerewolf(unsigned short pid) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Get the refId of the creature the player is disguised as.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \return The creature refId.
|
||||
*/
|
||||
static const char *GetCreatureRefId(unsigned short pid) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Check whether a player's name is replaced by that of the creature they are
|
||||
* disguised as when other players hover over them.
|
||||
*
|
||||
* This is based on the last PlayerShapeshift packet received or sent for that player.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \return The creature name display state.
|
||||
*/
|
||||
static bool GetCreatureNameDisplayState(unsigned short pid) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Set the scale of a player.
|
||||
*
|
||||
* This changes the scale recorded for that player in the server memory, but
|
||||
* does not by itself send a packet.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \param scale The new scale.
|
||||
* \return void
|
||||
*/
|
||||
static void SetScale(unsigned short pid, double scale) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Set the werewolf state of a player.
|
||||
*
|
||||
* This changes the werewolf state recorded for that player in the server memory, but
|
||||
* does not by itself send a packet.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \param isWerewolf The new werewolf state.
|
||||
* \return void
|
||||
*/
|
||||
static void SetWerewolfState(unsigned short pid, bool isWerewolf) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Set the refId of the creature a player is disguised as.
|
||||
*
|
||||
* This changes the creature refId recorded for that player in the server memory, but
|
||||
* does not by itself send a packet.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \param refId The creature refId.
|
||||
* \param displaysCreatureName Whether the player's name appears as that of the creature
|
||||
* when hovered over by others.
|
||||
* \return void
|
||||
*/
|
||||
static void SetCreatureRefId(unsigned short pid, const char *refId) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Set whether a player's name is replaced by that of the creature they are
|
||||
* disguised as when other players hover over them.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \param displayState The creature name display state.
|
||||
* \return void
|
||||
*/
|
||||
static void SetCreatureNameDisplayState(unsigned short pid, bool displayState) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Send a PlayerShapeshift packet about a player.
|
||||
*
|
||||
* This sends the packet to all players connected to the server. It is currently used
|
||||
* only to communicate werewolf states.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \return void
|
||||
*/
|
||||
static void SendShapeshift(unsigned short pid);
|
||||
};
|
||||
|
||||
#endif //OPENMW_SHAPESHIFTAPI_HPP
|
|
@ -17,6 +17,7 @@
|
|||
#include <Script/Functions/Miscellaneous.hpp>
|
||||
#include <Script/Functions/Positions.hpp>
|
||||
#include <Script/Functions/Quests.hpp>
|
||||
#include <Script/Functions/Shapeshift.hpp>
|
||||
#include <Script/Functions/Settings.hpp>
|
||||
#include <Script/Functions/Spells.hpp>
|
||||
#include <Script/Functions/Stats.hpp>
|
||||
|
@ -127,6 +128,7 @@ public:
|
|||
MISCELLANEOUSAPI,
|
||||
POSITIONAPI,
|
||||
QUESTAPI,
|
||||
SHAPESHIFTAPI,
|
||||
SETTINGSAPI,
|
||||
SPELLAPI,
|
||||
STATAPI,
|
||||
|
|
Loading…
Reference in a new issue