Skip to content

Commit 9e79974

Browse files
authored
playerblips: various improvements (#225)
* playerblips: use LF, move main script, modify meta tags * playerblips: cleanup code * playerblips: add optional playercolors integration * playerblips: add blip_range setting * playerblips: fix settings config so they appear in admin panel Due to the changes to the setting names which were necesarry for admin to recognize the settings as public, this commit breaks backwards compatibility. Server admins will need to set their settings again via admin panel. The major version was bumped accordingly. * playerblips: add isElement checks to fix occasional debug errors Other resources (including race) delete blips attached to players, even those created by other resources. * playerblips: include playerblips in freeroam, remove duplicate code * playerblips: update resource authors * playerblips: fix event handlers * playerblips: gravy * playerblips: add missing error check
1 parent 9be00d6 commit 9e79974

File tree

5 files changed

+133
-87
lines changed

5 files changed

+133
-87
lines changed

[gameplay]/freeroam/fr_server.lua

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ function joinHandler(player)
129129
local r, g, b = math.random(50, 255), math.random(50, 255), math.random(50, 255)
130130
setPlayerNametagColor(player, r, g, b)
131131
g_PlayerData[player] = { vehicles = {}, settings={} }
132-
g_PlayerData[player].blip = createBlipAttachedTo(player, 0, 2, r, g, b)
133132
addEventHandler("onFreeroamLocalSettingChange",player,onLocalSettingChange)
134133
if getOption('welcometextonstart') then
135134
outputChatBox('Welcome to Freeroam', player, 0, 255, 0)
@@ -552,9 +551,6 @@ function unloadVehicle(vehicle)
552551
end
553552

554553
function quitHandler(player)
555-
if g_PlayerData[source].blip and isElement(g_PlayerData[source].blip) then
556-
destroyElement(g_PlayerData[source].blip)
557-
end
558554
if sawnoffAntiAbuse[source] and isTimer (sawnoffAntiAbuse[source]) then
559555
killTimer (sawnoffAntiAbuse[source])
560556
sawnoffAntiAbuse[source] = nil

[gameplay]/freeroam/meta.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<oop>true</oop>
1111
<info name="Freeroam GUI" author="arc_" version="1.5.7" />
1212
<min_mta_version client="1.5.6-9.16362"></min_mta_version>
13+
<include resource="playerblips" />
1314

1415
<script src="util_server.lua" type="server" />
1516
<script src="fr_server.lua" type="server" />

[gameplay]/playerblips/meta.xml

Lines changed: 55 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,55 @@
1-
<meta>
2-
<info author="Noki" type="script" name="playerblips"/>
3-
<script src="playerblips.lua" type="server"/>
4-
<settings>
5-
<setting name="use_team_colors" value="false"/> <!-- Set to true to enable, anything else will not use teams. Default: false -->
6-
<setting name="blip_color" value="[ [ 0, 255, 0 ] ]"/> <!-- Default blip color if se_team_colors is not enabled. Default: [ [ 0, 255, 0 ] ] -->
7-
<setting name="blip_size" value="2"/> <!-- Size of a player blip. Default: 2 -->
8-
<setting name="blip_alpha" value="255"/> <!-- Alpha value of a player blip (0 - 255). Default: 255 -->
9-
</settings>
10-
<oop>true</oop>
11-
</meta>
1+
<meta>
2+
<info name="Player Blips" author="Noki, jlillis" version="2.0.0" type="script" description="Attaches blips to players."/>
3+
<oop>true</oop>
4+
<script src="server/main.lua" type="server"/>
5+
<settings>
6+
<setting
7+
name="*use_team_colors"
8+
value="false"
9+
friendlyname="Use team colors"
10+
group="Color settings"
11+
accept="true,false"
12+
desc="Use team colors for player blips."
13+
/>
14+
<setting
15+
name="*use_nametag_colors"
16+
value="true"
17+
friendlyname="Use nametag colors"
18+
group="Color settings"
19+
accept="true,false"
20+
desc="Use nametag colors for player blips. Takes precedence over team colors."
21+
/>
22+
<setting
23+
name="*blip_color"
24+
value="[[0, 255, 0]]"
25+
friendlyname="Default blip color"
26+
group="Color settings"
27+
accept=""
28+
desc="Default blip color. Used if team and nametag colors are not used."
29+
/>
30+
<setting
31+
name="*blip_size"
32+
value="2"
33+
friendlyname="Blip size"
34+
group="Blip settings"
35+
accept="1-25"
36+
desc="Player blip size."
37+
/>
38+
<setting
39+
name="*blip_alpha"
40+
value="255"
41+
friendlyname="Blip transparency"
42+
group="Blip settings"
43+
accept="0-255"
44+
desc="Player blip transparency."
45+
/>
46+
<setting
47+
name="*blip_range"
48+
value="16383"
49+
friendlyname="Blip visibility range"
50+
group="Blip settings"
51+
accept="0-65535"
52+
desc="Player blip visibility range on the minimap. Blips are always visible on the map."
53+
/>
54+
</settings>
55+
</meta>

[gameplay]/playerblips/playerblips.lua

Lines changed: 0 additions & 72 deletions
This file was deleted.
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
local useTeams = get("*use_team_colors") == "true"
2+
local useNametags = get("*use_nametag_colors") == "true"
3+
local blipSize = get("*blip_size")
4+
local blipAlpha = get("*blip_alpha")
5+
local color = get("*blip_color")
6+
local blipRange = get("*blip_range")
7+
local colors = {}
8+
local blips = {}
9+
10+
local function resourceStart()
11+
for i, player in ipairs(Element.getAllByType("player")) do
12+
createPlayerBlip(player)
13+
end
14+
15+
local playercolorsResource = getResourceFromName("playercolors")
16+
if playercolorsResource and getResourceState(playercolorsResource) ~= "running" then
17+
outputDebugString("playerblips: playercolors resource not running; using blip_color. Restart this resource after starting playercolors.", 4, 255, 125, 0)
18+
useNametags = false
19+
end
20+
21+
if not (useTeams or useNametags) then
22+
addCommandHandler("setblipcolor", setBlipColor)
23+
end
24+
end
25+
addEventHandler("onResourceStart", resourceRoot, resourceStart)
26+
27+
function createPlayerBlip(player)
28+
if (not player or not isElement(player) or player.type ~= "player") then return false end
29+
local r, g, b
30+
if (useTeams and player.team) then
31+
r, g, b = player.team:getColor()
32+
elseif useNametags then
33+
r, g, b = getPlayerNametagColor(player)
34+
elseif (colors[player]) then
35+
r, g, b = colors[player][1], colors[player][2], colors[player][3]
36+
else
37+
r, g, b = color[1], color[2], color[3]
38+
end
39+
if isElement(blips[player]) then
40+
blips[player]:setColor(r, g, b, blipAlpha)
41+
else
42+
blips[player] = Blip.createAttachedTo(player, 0, blipSize, r, g, b, blipAlpha, 0, blipRange)
43+
end
44+
end
45+
46+
function setBlipColor(player, _, r, g, b)
47+
r, g, b = tonumber(r), tonumber(g), tonumber(b)
48+
if (r and g and b) then
49+
if (r >= 0 and r <= 255 and g >= 0 and g <= 255 and b >= 0 and b <= 255) then
50+
colors[player] = {r, g, b}
51+
createPlayerBlip(player)
52+
else
53+
outputChatBox("Couldn't change blip color - numbers must be between 0 and 255", player, 255, 0, 0)
54+
end
55+
else
56+
outputChatBox("Couldn't change blip color - invalid arguments specified", player, 255, 0, 0)
57+
end
58+
end
59+
60+
function destroyPlayerBlip(player)
61+
if (not player or not isElement(player) or player.type ~= "player") then return false end
62+
if isElement(blips[player]) then
63+
blips[player]:destroy()
64+
end
65+
blips[player] = nil
66+
colors[player] = nil
67+
end
68+
69+
addEventHandler("onPlayerQuit", root, function()
70+
destroyPlayerBlip(source)
71+
end)
72+
addEventHandler("onPlayerWasted", root, function()
73+
destroyPlayerBlip(source)
74+
end)
75+
addEventHandler("onPlayerSpawn", root, function()
76+
createPlayerBlip(source)
77+
end)

0 commit comments

Comments
 (0)