Skip to content

Commit 86a9e34

Browse files
authored
Merge pull request #279 from patrikjuvonen/github-issue-278
#278: fix blip code inconsistencies and clamp size value for backwards compatibility
2 parents 96830bb + 3739f84 commit 86a9e34

File tree

3 files changed

+79
-41
lines changed

3 files changed

+79
-41
lines changed

Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4224,58 +4224,77 @@ bool CStaticFunctionDefinitions::GetSFXStatus(eAudioLookupIndex containerIndex,
42244224
CClientRadarMarker* CStaticFunctionDefinitions::CreateBlip(CResource& Resource, const CVector& vecPosition, unsigned char ucIcon, unsigned char ucSize,
42254225
const SColor color, short sOrdering, unsigned short usVisibleDistance)
42264226
{
4227-
CClientRadarMarker* pBlip = new CClientRadarMarker(m_pManager, INVALID_ELEMENT_ID, sOrdering, usVisibleDistance);
4228-
if (pBlip)
4227+
// Valid icon and size?
4228+
if (CClientRadarMarkerManager::IsValidIcon(ucIcon) && ucSize <= 25)
42294229
{
4230-
pBlip->SetParent(Resource.GetResourceDynamicEntity());
4231-
pBlip->SetPosition(vecPosition);
4232-
pBlip->SetSprite(ucIcon);
4233-
pBlip->SetScale(ucSize);
4234-
pBlip->SetColor(color);
4230+
CClientRadarMarker* pBlip = new CClientRadarMarker(m_pManager, INVALID_ELEMENT_ID, sOrdering, usVisibleDistance);
4231+
if (pBlip)
4232+
{
4233+
pBlip->SetParent(Resource.GetResourceDynamicEntity());
4234+
pBlip->SetPosition(vecPosition);
4235+
pBlip->SetSprite(ucIcon);
4236+
pBlip->SetScale(ucSize);
4237+
pBlip->SetColor(color);
4238+
}
4239+
return pBlip;
42354240
}
4236-
return pBlip;
4241+
4242+
return nullptr;
42374243
}
42384244

42394245
CClientRadarMarker* CStaticFunctionDefinitions::CreateBlipAttachedTo(CResource& Resource, CClientEntity& Entity, unsigned char ucIcon, unsigned char ucSize,
42404246
const SColor color, short sOrdering, unsigned short usVisibleDistance)
42414247
{
4242-
CClientRadarMarker* pBlip = new CClientRadarMarker(m_pManager, INVALID_ELEMENT_ID, sOrdering, usVisibleDistance);
4243-
if (pBlip)
4248+
assert(&Entity);
4249+
// Valid icon and size?
4250+
if (CClientRadarMarkerManager::IsValidIcon(ucIcon) && ucSize <= 25)
42444251
{
4245-
pBlip->SetParent(Resource.GetResourceDynamicEntity());
4246-
pBlip->AttachTo(&Entity);
4247-
pBlip->SetSprite(ucIcon);
4248-
pBlip->SetScale(ucSize);
4249-
pBlip->SetColor(color);
4252+
CClientRadarMarker* pBlip = new CClientRadarMarker(m_pManager, INVALID_ELEMENT_ID, sOrdering, usVisibleDistance);
4253+
if (pBlip)
4254+
{
4255+
pBlip->SetParent(Resource.GetResourceDynamicEntity());
4256+
pBlip->AttachTo(&Entity);
4257+
pBlip->SetSprite(ucIcon);
4258+
pBlip->SetScale(ucSize);
4259+
pBlip->SetColor(color);
4260+
}
4261+
return pBlip;
42504262
}
4251-
return pBlip;
4263+
4264+
return nullptr;
42524265
}
42534266

42544267
bool CStaticFunctionDefinitions::SetBlipIcon(CClientEntity& Entity, unsigned char ucIcon)
42554268
{
4256-
RUN_CHILDREN(SetBlipIcon(**iter, ucIcon))
4257-
4258-
if (IS_RADARMARKER(&Entity))
4269+
if (CClientRadarMarkerManager::IsValidIcon(ucIcon))
42594270
{
4260-
CClientRadarMarker& Marker = static_cast<CClientRadarMarker&>(Entity);
4271+
RUN_CHILDREN(SetBlipIcon(**iter, ucIcon))
42614272

4262-
Marker.SetSprite(ucIcon);
4263-
return true;
4273+
if (IS_RADARMARKER(&Entity))
4274+
{
4275+
CClientRadarMarker& Marker = static_cast<CClientRadarMarker&>(Entity);
4276+
4277+
Marker.SetSprite(ucIcon);
4278+
return true;
4279+
}
42644280
}
42654281

42664282
return false;
42674283
}
42684284

42694285
bool CStaticFunctionDefinitions::SetBlipSize(CClientEntity& Entity, unsigned char ucSize)
42704286
{
4271-
RUN_CHILDREN(SetBlipSize(**iter, ucSize))
4272-
4273-
if (IS_RADARMARKER(&Entity))
4287+
if (ucSize <= 25)
42744288
{
4275-
CClientRadarMarker& Marker = static_cast<CClientRadarMarker&>(Entity);
4289+
RUN_CHILDREN(SetBlipSize(**iter, ucSize))
42764290

4277-
Marker.SetScale(ucSize);
4278-
return true;
4291+
if (IS_RADARMARKER(&Entity))
4292+
{
4293+
CClientRadarMarker& Marker = static_cast<CClientRadarMarker&>(Entity);
4294+
4295+
Marker.SetScale(ucSize);
4296+
return true;
4297+
}
42794298
}
42804299

42814300
return false;

Client/mods/deathmatch/logic/luadefs/CLuaBlipDefs.cpp

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,14 @@ int CLuaBlipDefs::CreateBlip(lua_State* luaVM)
6060
{
6161
CVector vecPosition;
6262
unsigned char ucIcon = 0;
63-
unsigned char ucSize = 2;
63+
int iSize = 2;
6464
SColorRGBA color(255, 0, 0, 255);
6565
int iOrdering = 0;
6666
int iVisibleDistance = 16383;
6767
CScriptArgReader argStream(luaVM);
6868
argStream.ReadVector3D(vecPosition);
6969
argStream.ReadNumber(ucIcon, 0);
70-
argStream.ReadNumber(ucSize, 2);
70+
argStream.ReadNumber(iSize, 2);
7171
argStream.ReadNumber(color.R, 255);
7272
argStream.ReadNumber(color.G, 0);
7373
argStream.ReadNumber(color.B, 0);
@@ -80,6 +80,9 @@ int CLuaBlipDefs::CreateBlip(lua_State* luaVM)
8080
argStream.SetCustomError("Invalid icon");
8181
}
8282

83+
if (iSize < 0 || iSize > 25)
84+
argStream.SetCustomWarning(SString("Blip size beyond 25 is no longer supported (got %i). It will be clamped between 0 and 25.", iSize));
85+
8386
if (!argStream.HasErrors())
8487
{
8588
CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM);
@@ -88,6 +91,7 @@ int CLuaBlipDefs::CreateBlip(lua_State* luaVM)
8891
CResource* pResource = pLuaMain->GetResource();
8992
if (pResource)
9093
{
94+
unsigned char ucSize = Clamp(0, iSize, 25);
9195
short sOrdering = Clamp(-32768, iOrdering, 32767);
9296
unsigned short usVisibleDistance = Clamp(0, iVisibleDistance, 65535);
9397

@@ -120,14 +124,14 @@ int CLuaBlipDefs::CreateBlipAttachedTo(lua_State* luaVM)
120124
CClientEntity* pEntity = NULL;
121125
// Default colors and size
122126
unsigned char ucIcon = 0;
123-
unsigned char ucSize = 2;
127+
int iSize = 2;
124128
SColorRGBA color(255, 0, 0, 255);
125129
int iOrdering = 0;
126130
int iVisibleDistance = 16383;
127131
CScriptArgReader argStream(luaVM);
128132
argStream.ReadUserData(pEntity);
129133
argStream.ReadNumber(ucIcon, 0);
130-
argStream.ReadNumber(ucSize, 2);
134+
argStream.ReadNumber(iSize, 2);
131135
argStream.ReadNumber(color.R, 255);
132136
argStream.ReadNumber(color.G, 0);
133137
argStream.ReadNumber(color.B, 0);
@@ -140,6 +144,9 @@ int CLuaBlipDefs::CreateBlipAttachedTo(lua_State* luaVM)
140144
argStream.SetCustomError("Invalid icon");
141145
}
142146

147+
if (iSize < 0 || iSize > 25)
148+
argStream.SetCustomWarning(SString("Blip size beyond 25 is no longer supported (got %i). It will be clamped between 0 and 25.", iSize));
149+
143150
if (!argStream.HasErrors())
144151
{
145152
CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM);
@@ -148,6 +155,7 @@ int CLuaBlipDefs::CreateBlipAttachedTo(lua_State* luaVM)
148155
CResource* pResource = pLuaMain->GetResource();
149156
if (pResource)
150157
{
158+
unsigned char ucSize = Clamp(0, iSize, 25);
151159
short sOrdering = Clamp(-32768, iOrdering, 32767);
152160
unsigned short usVisibleDistance = Clamp(0, iVisibleDistance, 65535);
153161

@@ -303,13 +311,18 @@ int CLuaBlipDefs::SetBlipIcon(lua_State* luaVM)
303311
int CLuaBlipDefs::SetBlipSize(lua_State* luaVM)
304312
{
305313
CClientEntity* pEntity = NULL;
306-
unsigned char ucSize = 0;
314+
int iSize = 0;
307315
CScriptArgReader argStream(luaVM);
308316
argStream.ReadUserData(pEntity);
309-
argStream.ReadNumber(ucSize);
317+
argStream.ReadNumber(iSize);
318+
319+
if (iSize < 0 || iSize > 25)
320+
argStream.SetCustomWarning(SString("Blip size beyond 25 is no longer supported (got %i). It will be clamped between 0 and 25.", iSize));
310321

311322
if (!argStream.HasErrors())
312323
{
324+
unsigned char ucSize = Clamp(0, iSize, 25);
325+
313326
if (CStaticFunctionDefinitions::SetBlipSize(*pEntity, ucSize))
314327
{
315328
lua_pushboolean(luaVM, true);

Server/mods/deathmatch/logic/luadefs/CLuaBlipDefs.cpp

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ void CLuaBlipDefs::AddClass(lua_State* luaVM)
6363
int CLuaBlipDefs::CreateBlip(lua_State* luaVM)
6464
{
6565
CVector vecPosition;
66-
unsigned char ucIcon, ucSize;
66+
unsigned char ucIcon;
67+
int iSize;
6768
SColorRGBA color(255, 0, 0, 255);
6869
int iOrdering;
6970
int iVisibleDistance;
@@ -72,7 +73,7 @@ int CLuaBlipDefs::CreateBlip(lua_State* luaVM)
7273
CScriptArgReader argStream(luaVM);
7374
argStream.ReadVector3D(vecPosition);
7475
argStream.ReadNumber(ucIcon, 0);
75-
argStream.ReadNumber(ucSize, 2);
76+
argStream.ReadNumber(iSize, 2);
7677
argStream.ReadNumber(color.R, color.R);
7778
argStream.ReadNumber(color.G, color.G);
7879
argStream.ReadNumber(color.B, color.B);
@@ -97,6 +98,7 @@ int CLuaBlipDefs::CreateBlip(lua_State* luaVM)
9798
CResource* pResource = pLuaMain->GetResource();
9899
if (pResource)
99100
{
101+
unsigned char ucSize = Clamp(0, iSize, 25);
100102
short sOrdering = Clamp(-32768, iOrdering, 32767);
101103
unsigned short usVisibleDistance = Clamp(0, iVisibleDistance, 65535);
102104

@@ -125,7 +127,8 @@ int CLuaBlipDefs::CreateBlip(lua_State* luaVM)
125127
int CLuaBlipDefs::CreateBlipAttachedTo(lua_State* luaVM)
126128
{
127129
CElement* pElement;
128-
unsigned char ucIcon, ucSize;
130+
unsigned char ucIcon;
131+
int iSize;
129132
SColorRGBA color(255, 0, 0, 255);
130133
int iOrdering;
131134
int iVisibleDistance;
@@ -134,7 +137,7 @@ int CLuaBlipDefs::CreateBlipAttachedTo(lua_State* luaVM)
134137
CScriptArgReader argStream(luaVM);
135138
argStream.ReadUserData(pElement);
136139
argStream.ReadNumber(ucIcon, 0);
137-
argStream.ReadNumber(ucSize, 2);
140+
argStream.ReadNumber(iSize, 2);
138141
argStream.ReadNumber(color.R, color.R);
139142
argStream.ReadNumber(color.G, color.G);
140143
argStream.ReadNumber(color.B, color.B);
@@ -156,6 +159,7 @@ int CLuaBlipDefs::CreateBlipAttachedTo(lua_State* luaVM)
156159
CResource* resource = m_pLuaManager->GetVirtualMachineResource(luaVM);
157160
if (resource)
158161
{
162+
unsigned char ucSize = Clamp(0, iSize, 25);
159163
short sOrdering = Clamp(-32768, iOrdering, 32767);
160164
unsigned short usVisibleDistance = Clamp(0, iVisibleDistance, 65535);
161165

@@ -325,15 +329,17 @@ int CLuaBlipDefs::SetBlipIcon(lua_State* luaVM)
325329

326330
int CLuaBlipDefs::SetBlipSize(lua_State* luaVM)
327331
{
328-
CElement* pElement;
329-
unsigned char ucSize;
332+
CElement* pElement;
333+
int iSize;
330334

331335
CScriptArgReader argStream(luaVM);
332336
argStream.ReadUserData(pElement);
333-
argStream.ReadNumber(ucSize);
337+
argStream.ReadNumber(iSize);
334338

335339
if (!argStream.HasErrors())
336340
{
341+
unsigned char ucSize = Clamp(0, iSize, 25);
342+
337343
if (CStaticFunctionDefinitions::SetBlipSize(pElement, ucSize))
338344
{
339345
lua_pushboolean(luaVM, true);

0 commit comments

Comments
 (0)