@@ -1551,24 +1551,32 @@ function PlayerTextDrawDestroy(amx, player, textdrawID)
1551
1551
if not IsPlayerTextDrawValid (player , textdrawID ) then
1552
1552
return false
1553
1553
end
1554
- clientCall (player , ' TextDrawDestroy' , amx .name , textdrawID )
1554
+ clientCall (player , ' TextDrawDestroy' , amx .name , g_PlayerTextDraws [ player ][ textdrawID ]. clientTDId )
1555
1555
g_PlayerTextDraws [player ][textdrawID ] = nil
1556
1556
end
1557
1557
function PlayerTextDrawShow (amx , player , textdrawID )
1558
1558
if not IsPlayerTextDrawValid (player , textdrawID ) then
1559
1559
outputDebugString (' PlayerTextDrawShow: not showing anything, not valid' )
1560
1560
return false
1561
1561
end
1562
+ -- if g_PlayerTextDraws[player][textdrawID].visible == 1 then
1563
+ -- return false
1564
+ -- end
1562
1565
g_PlayerTextDraws [player ][textdrawID ].visible = true
1563
- clientCall (player , ' TextDrawShowForPlayer' , amx .name , textdrawID )
1566
+ clientCall (player , ' TextDrawShowForPlayer' , amx .name , g_PlayerTextDraws [player ][textdrawID ].clientTDId )
1567
+ -- outputDebugString('PlayerTextDrawShow: proccessed for ' .. textdrawID .. ' with ' .. g_PlayerTextDraws[player][textdrawID].text)
1564
1568
return true
1565
1569
end
1566
1570
function PlayerTextDrawHide (amx , player , textdrawID )
1567
1571
if not IsPlayerTextDrawValid (player , textdrawID ) then
1568
1572
return false
1569
1573
end
1574
+ -- if g_PlayerTextDraws[player][textdrawID].visible == 0 then
1575
+ -- return false
1576
+ -- end
1570
1577
g_PlayerTextDraws [player ][textdrawID ].visible = false
1571
- clientCall (player , ' TextDrawHideForPlayer' , amx .name , textdrawID )
1578
+ clientCall (player , ' TextDrawHideForPlayer' , amx .name , g_PlayerTextDraws [player ][textdrawID ].clientTDId )
1579
+ -- outputDebugString('PlayerTextDrawHide: proccessed for ' .. textdrawID .. ' with ' .. g_PlayerTextDraws[player][textdrawID].text)
1572
1580
end
1573
1581
function PlayerTextDrawBoxColor (amx , player , textdrawID , r , g , b , a )
1574
1582
if not IsPlayerTextDrawValid (player , textdrawID ) then
@@ -1599,13 +1607,18 @@ function PlayerTextDrawLetterSize(amx, player, textdrawID, x, y)
1599
1607
return true
1600
1608
end
1601
1609
function IsPlayerTextDrawValid (player , textdrawID )
1610
+ local tableType = type (g_PlayerTextDraws [player ])
1611
+ if tableType ~= " table" then
1612
+ outputDebugString (" [ERROR_NOT_A_TABLE] IsPlayerTextDrawValid: g_PlayerTextDraws[player] is not a table yet for textdrawID: " .. textdrawID .. " it's actually a " .. tableType )
1613
+ return false
1614
+ end
1602
1615
if not g_PlayerTextDraws [player ] then
1603
- outputDebugString (" [ERROR ] IsPlayerTextDrawValid: g_PlayerTextDraws[player] is nil! for textdrawID: " .. textdrawID )
1616
+ outputDebugString (" [ERROR_NIL_TABLE ] IsPlayerTextDrawValid: g_PlayerTextDraws[player] is nil! for textdrawID: " .. textdrawID )
1604
1617
return false
1605
1618
end
1606
1619
local textdraw = g_PlayerTextDraws [player ][textdrawID ]
1607
1620
if not textdraw then
1608
- outputDebugString (" [ERROR ] IsPlayerTextDrawValid: no textdraw properties for player with textdrawID: " .. textdrawID )
1621
+ outputDebugString (" [ERROR_NOTD_PROPERTIES ] IsPlayerTextDrawValid: no textdraw properties for player with textdrawID: " .. textdrawID )
1609
1622
return false
1610
1623
end
1611
1624
return true
@@ -1618,10 +1631,16 @@ function CreatePlayerTextDraw(amx, player, x, y, text)
1618
1631
g_PlayerTextDraws [player ] = {}
1619
1632
end
1620
1633
1621
- local textdraw = { x = x , y = y , shadow = {visible = 0 , align = 1 , text = text , font = 1 , lwidth = 0.5 , lheight = 0.5 } }
1622
- local id = # amx .textdraws + table.insert (g_PlayerTextDraws [player ], textdraw )
1634
+ local serverTDId = # g_PlayerTextDraws [player ]+ 1
1635
+ local clientTDId = # amx .textdraws + serverTDId
1636
+
1637
+ local textdraw = { x = x , y = y , lwidth = 0.5 , lheight = 0.5 , shadow = { visible = 0 , align = 1 , text = text , font = 1 , lwidth = 0.5 , lheight = 0.5 } }
1638
+ textdraw .clientTDId = clientTDId
1639
+ textdraw .serverTDId = serverTDId
1640
+ textdraw .visible = 0
1641
+
1642
+ g_PlayerTextDraws [player ][serverTDId ] = textdraw
1623
1643
1624
- textdraw .id = id
1625
1644
setmetatable (
1626
1645
textdraw ,
1627
1646
{
@@ -1638,64 +1657,65 @@ function CreatePlayerTextDraw(amx, player, x, y, text)
1638
1657
end
1639
1658
end
1640
1659
if different then
1641
- outputDebugString (' A property changed for ' .. textdraw .id .. ' string: ' .. textdraw .text )
1642
- clientCall (player , ' TextDrawPropertyChanged' , amx .name , textdraw .id , k , v )
1660
+ -- table.dump(v, 1, nil) --Dump the data
1661
+ -- outputDebugString(string.format('A property changed for %s string: %s visibility is %d', textdraw.serverTDId, textdraw.text, textdraw.visible))
1662
+ clientCall (player , ' TextDrawPropertyChanged' , amx .name , textdraw .clientTDId , k , v )
1643
1663
t .shadow [k ] = v
1644
1664
end
1645
1665
end
1646
1666
}
1647
1667
)
1648
-
1649
- outputDebugString (' assigned id ' .. id .. ' to playertextdraws ' )
1650
- clientCall (player , ' TextDrawCreate' , amx .name , id , table .deshadowize (textdraw , true ))
1651
- return id
1668
+
1669
+ outputDebugString (' assigned id s-> ' .. serverTDId .. ' c-> ' .. clientTDId .. ' to g_PlayerTextDraws[player] ' )
1670
+ clientCall (player , ' TextDrawCreate' , amx .name , clientTDId , table .deshadowize (textdraw , true ))
1671
+ return serverTDId
1652
1672
end
1653
- function PlayerTextDrawAlignment (amx , playerid , textdrawID , align )
1673
+ function PlayerTextDrawAlignment (amx , player , textdrawID , align )
1654
1674
if not IsPlayerTextDrawValid (player , textdrawID ) then
1655
1675
return false
1656
1676
end
1657
1677
g_PlayerTextDraws [player ][textdrawID ].align = (align == 0 and 1 or align )
1658
1678
return true
1659
1679
end
1660
- function PlayerTextDrawBackgroundColor (amx , playerid , textdrawID , r , g , b , a )
1680
+ function PlayerTextDrawBackgroundColor (amx , player , textdrawID , r , g , b , a )
1661
1681
if not IsPlayerTextDrawValid (player , textdrawID ) then
1662
1682
return false
1663
1683
end
1664
1684
g_PlayerTextDraws [player ][textdrawID ].outlinecolor = { r , g , b , a }
1665
1685
return true
1666
1686
end
1667
- function PlayerTextDrawFont (amx , playerid , textdrawID , font )
1687
+ function PlayerTextDrawFont (amx , player , textdrawID , font )
1668
1688
if not IsPlayerTextDrawValid (player , textdrawID ) then
1669
1689
return false
1670
1690
end
1671
1691
g_PlayerTextDraws [player ][textdrawID ].font = font
1672
1692
return true
1673
1693
end
1674
- function PlayerTextDrawColor (amx , playerid , textdrawID , r , g , b , a )
1694
+ function PlayerTextDrawColor (amx , player , textdrawID , r , g , b , a )
1675
1695
if not IsPlayerTextDrawValid (player , textdrawID ) then
1676
1696
return false
1677
1697
end
1678
1698
g_PlayerTextDraws [player ][textdrawID ].color = { r , g , b }
1679
1699
return true
1680
1700
end
1681
- function PlayerTextDrawSetOutline (amx , playerid , textdrawID , size )
1701
+ function PlayerTextDrawSetOutline (amx , player , textdrawID , size )
1682
1702
if not IsPlayerTextDrawValid (player , textdrawID ) then
1683
1703
return false
1684
1704
end
1685
1705
g_PlayerTextDraws [player ][textdrawID ].outlinesize = size
1686
1706
return true
1687
1707
end
1688
- function PlayerTextDrawSetProportional (amx , playerid , textdrawID , proportional )
1708
+ function PlayerTextDrawSetProportional (amx , player , textdrawID , proportional )
1689
1709
-- TextDrawSetProportional(amx, textdraw, proportional)
1690
1710
end
1691
- function PlayerTextDrawSetShadow (amx , playerid , textdrawID , size )
1711
+ function PlayerTextDrawSetShadow (amx , player , textdrawID , size )
1692
1712
if not IsPlayerTextDrawValid (player , textdrawID ) then
1693
1713
return false
1694
1714
end
1695
1715
g_PlayerTextDraws [player ][textdrawID ].shade = size
1696
1716
return true
1697
1717
end
1698
- function PlayerTextDrawSetString (amx , playerid , textdrawID , str )
1718
+ function PlayerTextDrawSetString (amx , player , textdrawID , str )
1699
1719
if not IsPlayerTextDrawValid (player , textdrawID ) then
1700
1720
return false
1701
1721
end
@@ -1723,13 +1743,10 @@ end
1723
1743
1724
1744
function TextDrawHideForPlayer (amx , player , textdrawID )
1725
1745
local textdraw = amx .textdraws [textdrawID ]
1726
- local playerdata = g_Players [getElemID (player )]
1727
- playerdata .visibletextdraws = playerdata .visibletextdraws or {}
1728
- if not textdraw or not playerdata .visibletextdraws [textdraw ] then
1746
+ if not textdraw then
1729
1747
return
1730
1748
end
1731
1749
clientCall (player , ' TextDrawHideForPlayer' , amx .name , textdrawID )
1732
- playerdata .visibletextdraws [textdraw ] = nil
1733
1750
end
1734
1751
1735
1752
function TextDrawLetterSize (amx , textdraw , width , height )
@@ -1761,13 +1778,10 @@ end
1761
1778
1762
1779
function TextDrawShowForPlayer (amx , player , textdrawID )
1763
1780
local textdraw = amx .textdraws [textdrawID ]
1764
- local playerdata = g_Players [getElemID (player )]
1765
- playerdata .visibletextdraws = playerdata .visibletextdraws or {}
1766
- if not textdraw or playerdata .visibletextdraws [textdraw ] then
1781
+ if not textdraw then
1767
1782
return
1768
1783
end
1769
1784
clientCall (player , ' TextDrawShowForPlayer' , amx .name , textdrawID )
1770
- playerdata .visibletextdraws [textdraw ] = true
1771
1785
end
1772
1786
1773
1787
function TextDrawTextSize (amx , textdraw , x , y )
@@ -2872,13 +2886,23 @@ function SetPlayerAttachedObject(amx, player, index, modelid, bone, fOffsetX, fO
2872
2886
local x , y , z = getElementPosition (player )
2873
2887
local mtaBone = g_BoneMapping [bone ]
2874
2888
local obj = createObject (modelid , x , y , z )
2875
- local playerID = getElemID (player )
2876
- g_Players [playerID ].attachedObjects [index ] = obj
2877
- setElementCollisionsEnabled (obj , false )
2878
- setObjectScale (obj , fScaleX , fScaleY , fScaleZ )
2879
- attachElementToBone (obj , player , mtaBone , fOffsetX , fOffsetY , fOffsetZ , fRotX , fRotY , fRotZ )
2880
- -- Todo: Implement material colors
2881
-
2889
+
2890
+ if obj ~= false then
2891
+ local playerID = getElemID (player )
2892
+ g_Players [playerID ].attachedObjects [index ] = obj
2893
+ setElementCollisionsEnabled (obj , false )
2894
+ setObjectScale (obj , fScaleX , fScaleY , fScaleZ )
2895
+
2896
+ fRotX = fRotX
2897
+ fRotY = fRotY
2898
+ fRotZ = fRotZ
2899
+
2900
+ attachElementToBone (obj , player , mtaBone , fOffsetX , fOffsetY , fOffsetZ , fRotX , fRotY , fRotZ )
2901
+ -- Todo: Implement material colors
2902
+ else
2903
+ outputDebugString (' SetPlayerAttachedObject: Cannot attach object since the model is invalid. Model id was ' .. modelid )
2904
+ return 0
2905
+ end
2882
2906
return 1
2883
2907
end
2884
2908
0 commit comments