Skip to content

Commit 8aa4fa8

Browse files
authored
Merge pull request #1 from stley/extensions
Merge all additions alltogether at master branch
2 parents 5e81f6c + 005d20a commit 8aa4fa8

File tree

7 files changed

+93
-8
lines changed

7 files changed

+93
-8
lines changed

Server/Components/CAPI/Impl/Players/APIs.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,12 @@ OMP_CAPI(Player_GetBuildingsRemoved, int(objectPtr player))
596596
return count;
597597
}
598598

599+
OMP_CAPI(Player_IsBuildingRemoved, bool(objectPtr player, int model, float x, float y, float z, float radius))
600+
{
601+
POOL_ENTITY_RET(players, IPlayer, player, player_, false);
602+
return player_->isDefaultObjectRemoved(model, {x, y, z}, radius);
603+
}
604+
599605
OMP_CAPI(Player_RemoveFromVehicle, bool(objectPtr player, bool force))
600606
{
601607
POOL_ENTITY_RET(players, IPlayer, player, player_, false);

Server/Components/CAPI/Impl/Vehicles/APIs.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,3 +780,23 @@ OMP_CAPI(Vehicle_CountOccupants, int(objectPtr vehicle))
780780

781781
return occupants;
782782
}
783+
784+
OMP_CAPI(ShowVehicle, bool(objectPtr vehicle))
785+
{
786+
POOL_ENTITY_RET(vehicles, IVehicle, vehicle, vehicle_, 0);
787+
vehicle_->toggleHide(false);
788+
return true;
789+
}
790+
791+
OMP_CAPI(HideVehicle, bool(objectPtr vehicle))
792+
{
793+
POOL_ENTITY_RET(vehicles, IVehicle, vehicle, vehicle_, 0);
794+
vehicle_->toggleHide(true);
795+
return true;
796+
}
797+
798+
OMP_CAPI(IsVehicleHidden, bool(objectPtr vehicle))
799+
{
800+
POOL_ENTITY_RET(vehicles, IVehicle, vehicle, vehicle_, 0);
801+
return vehicle_->isHidden();
802+
}

Server/Components/Pawn/Scripting/Player/Natives.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,12 @@ SCRIPT_API(RemoveBuildingForPlayer, bool(IPlayer& player, uint32_t model, Vector
502502

503503
SCRIPT_API(GetPlayerBuildingsRemoved, int(IPlayer& player))
504504
{
505-
return player.getDefaultObjectsRemoved();
505+
return player.getDefaultObjectsRemovedCount();
506+
}
507+
508+
SCRIPT_API(IsBuildingRemovedForPlayer, bool(IPlayer& player, uint32_t model, Vector3 pos, float radius))
509+
{
510+
return player.isDefaultObjectRemoved(model, pos, radius);
506511
}
507512

508513
SCRIPT_API(RemovePlayerFromVehicle, bool(IPlayer& player))

Server/Components/Pawn/Scripting/Vehicle/Natives.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,3 +679,20 @@ SCRIPT_API(CountVehicleOccupants, int(IVehicle& vehicle))
679679
occupants += passengers.size();
680680
return occupants;
681681
}
682+
683+
SCRIPT_API(ShowVehicle, bool(IVehicle& vehicle))
684+
{
685+
vehicle.toggleHide(false);
686+
return true;
687+
}
688+
689+
SCRIPT_API(HideVehicle, bool(IVehicle& vehicle))
690+
{
691+
vehicle.toggleHide(true);
692+
return true;
693+
}
694+
695+
SCRIPT_API(IsVehicleHidden, bool(IVehicle& vehicle))
696+
{
697+
return vehicle.isHidden();
698+
}

Server/Components/Vehicles/vehicle.hpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class Vehicle final : public IVehicle, public PoolIDProvider, public NoCopy
6767
uint32_t hydraThrustAngle = 0;
6868
float trainSpeed = 0.0f;
6969
int lastDriverPoolID = INVALID_PLAYER_ID;
70+
bool hidden_ = false;
7071

7172
/// Update the vehicle occupied status - set beenOccupied to true and update the lastOccupied time.
7273
void updateOccupied()
@@ -154,6 +155,16 @@ class Vehicle final : public IVehicle, public PoolIDProvider, public NoCopy
154155
~Vehicle();
155156
void destream();
156157

158+
void toggleHide(bool value) override
159+
{
160+
hidden_ = value;
161+
}
162+
163+
bool isHidden() const override
164+
{
165+
return hidden_;
166+
}
167+
157168
int getVirtualWorld() const override
158169
{
159170
return virtualWorld_;

Server/Components/Vehicles/vehicles_impl.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ class VehiclesComponent final : public IVehiclesComponent, public CoreEventHandl
706706
}
707707

708708
const Vector2 dist2D = vehicle->getPosition() - player.getPosition();
709-
const bool shouldBeStreamedIn = state != PlayerState_None && player.getVirtualWorld() == vehicle->getVirtualWorld() && (playerVehicle == vehicle || glm::dot(dist2D, dist2D) < maxDist);
709+
const bool shouldBeStreamedIn = state != PlayerState_None && (vehicle->isHidden() != true) && player.getVirtualWorld() == vehicle->getVirtualWorld() && (playerVehicle == vehicle || glm::dot(dist2D, dist2D) < maxDist);
710710

711711
const bool isStreamedIn = vehicle->isStreamedInForPlayer(player);
712712
if (!isStreamedIn && shouldBeStreamedIn)

Server/Source/player_impl.hpp

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ enum SecondarySyncUpdateType
5353
SecondarySyncUpdateType_Trailer = (1 << 2),
5454
};
5555

56+
struct RemovedDefaultObject
57+
{
58+
unsigned ModelId;
59+
Vector3 pos;
60+
float radius;
61+
};
62+
5663
struct Player final : public IPlayer, public PoolIDProvider, public NoCopy
5764
{
5865
PlayerPool& pool_;
@@ -113,12 +120,14 @@ struct Player final : public IPlayer, public PoolIDProvider, public NoCopy
113120
PlayerSpectateData spectateData_;
114121
float gravity_;
115122
bool ghostMode_;
116-
int defaultObjectsRemoved_;
123+
//int defaultObjectsRemoved_;
124+
DynamicArray<RemovedDefaultObject> defaultObjectsRemoved_;
117125
bool allowWeapons_;
118126
bool allowTeleport_;
119127
bool isUsingOfficialClient_;
120128
bool isUsingOmp_;
121129
bool leavingSpec_;
130+
122131

123132
PrimarySyncUpdateType primarySyncUpdateType_;
124133
int secondarySyncUpdateType_;
@@ -200,7 +209,7 @@ struct Player final : public IPlayer, public PoolIDProvider, public NoCopy
200209
spectateData_ = { false, INVALID_PLAYER_ID, PlayerSpectateData::ESpectateType::None };
201210
gravity_ = 0.0f;
202211
ghostMode_ = false;
203-
defaultObjectsRemoved_ = 0;
212+
defaultObjectsRemoved_.clear();
204213
primarySyncUpdateType_ = PrimarySyncUpdateType::None;
205214
secondarySyncUpdateType_ = 0;
206215
leavingSpec_ = false;
@@ -258,7 +267,6 @@ struct Player final : public IPlayer, public PoolIDProvider, public NoCopy
258267
, spectateData_({ false, INVALID_PLAYER_ID, PlayerSpectateData::ESpectateType::None })
259268
, gravity_(0.0f)
260269
, ghostMode_(false)
261-
, defaultObjectsRemoved_(0)
262270
, allowWeapons_(true)
263271
, allowTeleport_(false)
264272
, isUsingOfficialClient_(params.isUsingOfficialClient)
@@ -946,17 +954,35 @@ struct Player final : public IPlayer, public PoolIDProvider, public NoCopy
946954

947955
void removeDefaultObjects(unsigned model, Vector3 pos, float radius) override
948956
{
949-
defaultObjectsRemoved_++;
957+
RemovedDefaultObject theObject;
958+
theObject.ModelId = model;
959+
theObject.pos = pos;
960+
theObject.radius = radius;
961+
962+
defaultObjectsRemoved_.push(theObject);
963+
//defaultObjectsRemoved_++;
950964
NetCode::RPC::RemoveBuildingForPlayer removeBuildingForPlayerRPC;
951965
removeBuildingForPlayerRPC.ModelID = model;
952966
removeBuildingForPlayerRPC.Position = pos;
953967
removeBuildingForPlayerRPC.Radius = radius;
954968
PacketHelper::send(removeBuildingForPlayerRPC, *this);
955969
}
956970

957-
int getDefaultObjectsRemoved() const override
971+
int getDefaultObjectsRemovedCount() const override
958972
{
959-
return defaultObjectsRemoved_;
973+
return defaultObjectsRemoved_.size();
974+
}
975+
976+
bool isDefaultObjectRemoved(unsigned model, Vector3 pos, float radius) const override
977+
{
978+
for (const auto& object : defaultObjectsRemoved_)
979+
{
980+
if (model != object.ModelId) continue;
981+
if (pos != object.pos) continue;
982+
if (radius != object.radius) continue;
983+
return true;
984+
}
985+
return false;
960986
}
961987

962988
bool getKickStatus() const override

0 commit comments

Comments
 (0)