1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2025-02-22 04:37:13 +01:00

Update player messaging to support alpha/transparency in the specified color.

This commit is contained in:
Sandu Liviu Catalin 2016-06-19 08:13:02 +03:00
parent 07c7ebb8d1
commit 4dc36b9889

View File

@ -2,6 +2,7 @@
#include "Entity/Player.hpp" #include "Entity/Player.hpp"
#include "Entity/Vehicle.hpp" #include "Entity/Vehicle.hpp"
#include "Base/Color3.hpp" #include "Base/Color3.hpp"
#include "Base/Color4.hpp"
#include "Base/Vector3.hpp" #include "Base/Vector3.hpp"
#include "Library/Utils/BufferWrapper.hpp" #include "Library/Utils/BufferWrapper.hpp"
#include "Core.hpp" #include "Core.hpp"
@ -1594,20 +1595,44 @@ SQInteger CPlayer::Msg(HSQUIRRELVM vm)
return sq_throwerror(vm, "Missing message value"); return sq_throwerror(vm, "Missing message value");
} }
// The player instance // The player instance
CPlayer * player = nullptr; CPlayer * player;
// The message color
Color3 color;
// Attempt to extract the argument values // Attempt to extract the argument values
try try
{ {
player = Var< CPlayer * >(vm, 1).value; player = Var< CPlayer * >(vm, 1).value;
color = Var< Color3 >(vm, 2).value;
} }
catch (const Sqrat::Exception & e) catch (const Sqrat::Exception & e)
{ {
// Propagate the error // Propagate the error
return sq_throwerror(vm, e.Message().c_str()); return sq_throwerror(vm, e.Message().c_str());
} }
// Failed to retrieve a Color4 value
bool failed = false;
// The message color
Color4 color;
// Attempt to extract the argument values
try
{
color = Var< Color4 >(vm, 2).value;
}
catch (...)
{
failed = true;
}
// Did we failed to retrieve a Color4 instance?
if (failed)
{
// Attempt to extract the argument values
try
{
color = Var< Color3 >(vm, 2).value;
}
catch (const Sqrat::Exception & e)
{
// Propagate the error
return sq_throwerror(vm, e.Message().c_str());
}
}
// Do we have a valid player instance? // Do we have a valid player instance?
if (!player) if (!player)
{ {
@ -1720,26 +1745,27 @@ SQInteger CPlayer::MsgEx(HSQUIRRELVM vm)
{ {
const Int32 top = sq_gettop(vm); const Int32 top = sq_gettop(vm);
// Was the message color specified? // Was the message color specified?
if (top <= 3) if (top <= 4)
{ {
return sq_throwerror(vm, "Missing message color"); return sq_throwerror(vm, "Missing message color");
} }
// Was the message value specified? // Was the message value specified?
else if (top <= 4) else if (top <= 5)
{ {
return sq_throwerror(vm, "Missing message value"); return sq_throwerror(vm, "Missing message value");
} }
// The player instance // The player instance
CPlayer * player = nullptr; CPlayer * player = nullptr;
// The message color // The message color
Uint8 r, g, b; Uint32 color;
// Attempt to extract the argument values // Attempt to extract the argument values
try try
{ {
player = Var< CPlayer * >(vm, 1).value; player = Var< CPlayer * >(vm, 1).value;
r = Var< Uint8 >(vm, 2).value; color = SQMOD_PACK_RGBA(Var< Uint8 >(vm, 2).value,
g = Var< Uint8 >(vm, 3).value; Var< Uint8 >(vm, 3).value,
b = Var< Uint8 >(vm, 4).value; Var< Uint8 >(vm, 4).value,
Var< Uint8 >(vm, 5).value);
} }
catch (const Sqrat::Exception & e) catch (const Sqrat::Exception & e)
{ {
@ -1757,14 +1783,14 @@ SQInteger CPlayer::MsgEx(HSQUIRRELVM vm)
return sq_throwerror(vm, "Invalid player reference"); return sq_throwerror(vm, "Invalid player reference");
} }
// Attempt to generate the string value // Attempt to generate the string value
StackStrF val(vm, 5); StackStrF val(vm, 6);
// Have we failed to retrieve the string? // Have we failed to retrieve the string?
if (SQ_FAILED(val.mRes)) if (SQ_FAILED(val.mRes))
{ {
return val.mRes; // Propagate the error! return val.mRes; // Propagate the error!
} }
// Send the resulted message string // Send the resulted message string
const vcmpError result = _Func->SendClientMessage(player->GetID(), SQMOD_PACK_RGBA(r, g, b, 0), const vcmpError result = _Func->SendClientMessage(player->GetID(), color,
"%s%s%s", "%s%s%s",
player->mMessagePrefix.c_str(), player->mMessagePrefix.c_str(),
val.mPtr, val.mPtr,