Add set/show_dhudmessage (bug 5979, r=ds)
This commit is contained in:
@ -568,6 +568,97 @@ static cell AMX_NATIVE_CALL show_hudmessage(AMX *amx, cell *params) /* 2 param *
|
||||
return len;
|
||||
}
|
||||
|
||||
static cell AMX_NATIVE_CALL set_dhudmessage(AMX *amx, cell *params) /* 10 param */
|
||||
{
|
||||
g_hudset.a1 = 0;
|
||||
g_hudset.a2 = 0;
|
||||
g_hudset.r2 = 255;
|
||||
g_hudset.g2 = 255;
|
||||
g_hudset.b2 = 250;
|
||||
g_hudset.r1 = static_cast<byte>(params[1]);
|
||||
g_hudset.g1 = static_cast<byte>(params[2]);
|
||||
g_hudset.b1 = static_cast<byte>(params[3]);
|
||||
g_hudset.x = amx_ctof(params[4]);
|
||||
g_hudset.y = amx_ctof(params[5]);
|
||||
g_hudset.effect = params[6];;
|
||||
g_hudset.fxTime = amx_ctof(params[7]);
|
||||
g_hudset.holdTime = amx_ctof(params[8]);
|
||||
g_hudset.fadeinTime = amx_ctof(params[9]);
|
||||
g_hudset.fadeoutTime = amx_ctof(params[10]);
|
||||
g_hudset.channel = -1;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static cell AMX_NATIVE_CALL show_dhudmessage(AMX *amx, cell *params) /* 2 param */
|
||||
{
|
||||
int len = 0;
|
||||
int index = params[1];
|
||||
char *message;
|
||||
|
||||
if (!index)
|
||||
{
|
||||
for (int i = 1; i <= gpGlobals->maxClients; ++i)
|
||||
{
|
||||
CPlayer *pPlayer = GET_PLAYER_POINTER_I(i);
|
||||
|
||||
if (pPlayer->ingame && !pPlayer->IsBot())
|
||||
{
|
||||
g_langMngr.SetDefLang(i);
|
||||
message = format_amxstring(amx, params, 2, len);
|
||||
|
||||
if (len > 127) // Client truncates after byte 127.
|
||||
{
|
||||
len = 127;
|
||||
|
||||
// Don't truncate a double-byte character
|
||||
if (((message[len - 1] & 0xFF) >= 0xC2) && ((message[len - 1] & 0xFF) <= 0xEF))
|
||||
{
|
||||
len--;
|
||||
}
|
||||
|
||||
message[len] = 0;
|
||||
}
|
||||
|
||||
UTIL_DHudMessage(pPlayer->pEdict, g_hudset, message, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (index < 1 || index > gpGlobals->maxClients)
|
||||
{
|
||||
LogError(amx, AMX_ERR_NATIVE, "Invalid player id %d", index);
|
||||
return 0;
|
||||
}
|
||||
|
||||
CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
|
||||
|
||||
if (pPlayer->ingame && !pPlayer->IsBot())
|
||||
{
|
||||
g_langMngr.SetDefLang(index);
|
||||
message = format_amxstring(amx, params, 2, len);
|
||||
|
||||
if (len > 127) // Client truncates after byte 127.
|
||||
{
|
||||
len = 127;
|
||||
|
||||
// Don't truncate a double-byte character
|
||||
if (((message[len - 1] & 0xFF) >= 0xC2) && ((message[len - 1] & 0xFF) <= 0xEF))
|
||||
{
|
||||
--len;
|
||||
}
|
||||
|
||||
message[len] = 0;
|
||||
}
|
||||
|
||||
UTIL_DHudMessage(pPlayer->pEdict, g_hudset, message, len);
|
||||
}
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
static cell AMX_NATIVE_CALL get_user_name(AMX *amx, cell *params) /* 3 param */
|
||||
{
|
||||
int index = params[1];
|
||||
@ -4925,6 +5016,7 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
|
||||
{"set_cvar_num", set_cvar_num},
|
||||
{"set_cvar_string", set_cvar_string},
|
||||
{"set_fail_state", set_fail_state},
|
||||
{"set_dhudmessage", set_dhudmessage},
|
||||
{"set_hudmessage", set_hudmessage},
|
||||
{"set_localinfo", set_localinfo},
|
||||
{"set_pcvar_flags", set_pcvar_flags},
|
||||
@ -4936,6 +5028,7 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
|
||||
{"set_user_info", set_user_info},
|
||||
{"set_xvar_float", set_xvar_num},
|
||||
{"set_xvar_num", set_xvar_num},
|
||||
{"show_dhudmessage", show_dhudmessage},
|
||||
{"show_hudmessage", show_hudmessage},
|
||||
{"show_menu", show_menu},
|
||||
{"show_motd", show_motd},
|
||||
|
@ -140,6 +140,7 @@ void UTIL_ClientPrint(edict_t *pEntity, int msg_dest, char *msg);
|
||||
void UTIL_FakeClientCommand(edict_t *pEdict, const char *cmd, const char *arg1 = NULL, const char *arg2 = NULL);
|
||||
void UTIL_GetFlags(char* flags, int flag);
|
||||
void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const char *pMessage);
|
||||
void UTIL_DHudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const char *pMessage, unsigned int length);
|
||||
void UTIL_IntToString(int value, char *output);
|
||||
void UTIL_ShowMOTD(edict_t *client, char *motd, int mlen, const char *name);
|
||||
void UTIL_ShowMenu(edict_t* pEntity, int slots, int time, char *menu, int mlen);
|
||||
|
@ -273,6 +273,29 @@ void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const ch
|
||||
MESSAGE_END();
|
||||
}
|
||||
|
||||
void UTIL_DHudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const char *pMessage, unsigned int length)
|
||||
{
|
||||
#define DRC_CMD_MESSAGE 6
|
||||
|
||||
if (pEntity)
|
||||
MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_DIRECTOR, NULL, pEntity);
|
||||
else
|
||||
MESSAGE_BEGIN(MSG_BROADCAST, SVC_DIRECTOR);
|
||||
|
||||
WRITE_BYTE(length + 31); // message length (counting WRITE size)
|
||||
WRITE_BYTE(DRC_CMD_MESSAGE);
|
||||
WRITE_BYTE(textparms.effect);
|
||||
WRITE_LONG(textparms.b1 + (textparms.g1 << 8) + (textparms.r1 << 16)); // pack color.
|
||||
WRITE_LONG(amx_ftoc(textparms.x));
|
||||
WRITE_LONG(amx_ftoc(textparms.y));
|
||||
WRITE_LONG(amx_ftoc(textparms.fadeinTime));
|
||||
WRITE_LONG(amx_ftoc(textparms.fadeoutTime));
|
||||
WRITE_LONG(amx_ftoc(textparms.holdTime));
|
||||
WRITE_LONG(amx_ftoc(textparms.fxTime));
|
||||
WRITE_STRING(pMessage); // max length: 128. Truncated on the client.
|
||||
MESSAGE_END();
|
||||
}
|
||||
|
||||
/* warning - buffer of msg must be longer than 190 chars!
|
||||
(here in AMX it is always longer) */
|
||||
void UTIL_ClientPrint(edict_t *pEntity, int msg_dest, char *msg)
|
||||
|
Reference in New Issue
Block a user