@@ -1551,24 +1551,32 @@ function PlayerTextDrawDestroy(amx, player, textdrawID)
15511551 if not IsPlayerTextDrawValid (player , textdrawID ) then
15521552 return false
15531553 end
1554- clientCall (player , ' TextDrawDestroy' , amx .name , textdrawID )
1554+ clientCall (player , ' TextDrawDestroy' , amx .name , g_PlayerTextDraws [ player ][ textdrawID ]. clientTDId )
15551555 g_PlayerTextDraws [player ][textdrawID ] = nil
15561556end
15571557function PlayerTextDrawShow (amx , player , textdrawID )
15581558 if not IsPlayerTextDrawValid (player , textdrawID ) then
15591559 outputDebugString (' PlayerTextDrawShow: not showing anything, not valid' )
15601560 return false
15611561 end
1562+ -- if g_PlayerTextDraws[player][textdrawID].visible == 1 then
1563+ -- return false
1564+ -- end
15621565 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)
15641568 return true
15651569end
15661570function PlayerTextDrawHide (amx , player , textdrawID )
15671571 if not IsPlayerTextDrawValid (player , textdrawID ) then
15681572 return false
15691573 end
1574+ -- if g_PlayerTextDraws[player][textdrawID].visible == 0 then
1575+ -- return false
1576+ -- end
15701577 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)
15721580end
15731581function PlayerTextDrawBoxColor (amx , player , textdrawID , r , g , b , a )
15741582 if not IsPlayerTextDrawValid (player , textdrawID ) then
@@ -1599,13 +1607,18 @@ function PlayerTextDrawLetterSize(amx, player, textdrawID, x, y)
15991607 return true
16001608end
16011609function 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
16021615 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 )
16041617 return false
16051618 end
16061619 local textdraw = g_PlayerTextDraws [player ][textdrawID ]
16071620 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 )
16091622 return false
16101623 end
16111624 return true
@@ -1618,10 +1631,16 @@ function CreatePlayerTextDraw(amx, player, x, y, text)
16181631 g_PlayerTextDraws [player ] = {}
16191632 end
16201633
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
16231643
1624- textdraw .id = id
16251644 setmetatable (
16261645 textdraw ,
16271646 {
@@ -1638,64 +1657,65 @@ function CreatePlayerTextDraw(amx, player, x, y, text)
16381657 end
16391658 end
16401659 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 )
16431663 t .shadow [k ] = v
16441664 end
16451665 end
16461666 }
16471667 )
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
16521672end
1653- function PlayerTextDrawAlignment (amx , playerid , textdrawID , align )
1673+ function PlayerTextDrawAlignment (amx , player , textdrawID , align )
16541674 if not IsPlayerTextDrawValid (player , textdrawID ) then
16551675 return false
16561676 end
16571677 g_PlayerTextDraws [player ][textdrawID ].align = (align == 0 and 1 or align )
16581678 return true
16591679end
1660- function PlayerTextDrawBackgroundColor (amx , playerid , textdrawID , r , g , b , a )
1680+ function PlayerTextDrawBackgroundColor (amx , player , textdrawID , r , g , b , a )
16611681 if not IsPlayerTextDrawValid (player , textdrawID ) then
16621682 return false
16631683 end
16641684 g_PlayerTextDraws [player ][textdrawID ].outlinecolor = { r , g , b , a }
16651685 return true
16661686end
1667- function PlayerTextDrawFont (amx , playerid , textdrawID , font )
1687+ function PlayerTextDrawFont (amx , player , textdrawID , font )
16681688 if not IsPlayerTextDrawValid (player , textdrawID ) then
16691689 return false
16701690 end
16711691 g_PlayerTextDraws [player ][textdrawID ].font = font
16721692 return true
16731693end
1674- function PlayerTextDrawColor (amx , playerid , textdrawID , r , g , b , a )
1694+ function PlayerTextDrawColor (amx , player , textdrawID , r , g , b , a )
16751695 if not IsPlayerTextDrawValid (player , textdrawID ) then
16761696 return false
16771697 end
16781698 g_PlayerTextDraws [player ][textdrawID ].color = { r , g , b }
16791699 return true
16801700end
1681- function PlayerTextDrawSetOutline (amx , playerid , textdrawID , size )
1701+ function PlayerTextDrawSetOutline (amx , player , textdrawID , size )
16821702 if not IsPlayerTextDrawValid (player , textdrawID ) then
16831703 return false
16841704 end
16851705 g_PlayerTextDraws [player ][textdrawID ].outlinesize = size
16861706 return true
16871707end
1688- function PlayerTextDrawSetProportional (amx , playerid , textdrawID , proportional )
1708+ function PlayerTextDrawSetProportional (amx , player , textdrawID , proportional )
16891709 -- TextDrawSetProportional(amx, textdraw, proportional)
16901710end
1691- function PlayerTextDrawSetShadow (amx , playerid , textdrawID , size )
1711+ function PlayerTextDrawSetShadow (amx , player , textdrawID , size )
16921712 if not IsPlayerTextDrawValid (player , textdrawID ) then
16931713 return false
16941714 end
16951715 g_PlayerTextDraws [player ][textdrawID ].shade = size
16961716 return true
16971717end
1698- function PlayerTextDrawSetString (amx , playerid , textdrawID , str )
1718+ function PlayerTextDrawSetString (amx , player , textdrawID , str )
16991719 if not IsPlayerTextDrawValid (player , textdrawID ) then
17001720 return false
17011721 end
@@ -1723,13 +1743,10 @@ end
17231743
17241744function TextDrawHideForPlayer (amx , player , textdrawID )
17251745 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
17291747 return
17301748 end
17311749 clientCall (player , ' TextDrawHideForPlayer' , amx .name , textdrawID )
1732- playerdata .visibletextdraws [textdraw ] = nil
17331750end
17341751
17351752function TextDrawLetterSize (amx , textdraw , width , height )
@@ -1761,13 +1778,10 @@ end
17611778
17621779function TextDrawShowForPlayer (amx , player , textdrawID )
17631780 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
17671782 return
17681783 end
17691784 clientCall (player , ' TextDrawShowForPlayer' , amx .name , textdrawID )
1770- playerdata .visibletextdraws [textdraw ] = true
17711785end
17721786
17731787function TextDrawTextSize (amx , textdraw , x , y )
@@ -2872,13 +2886,23 @@ function SetPlayerAttachedObject(amx, player, index, modelid, bone, fOffsetX, fO
28722886 local x , y , z = getElementPosition (player )
28732887 local mtaBone = g_BoneMapping [bone ]
28742888 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
28822906 return 1
28832907end
28842908
0 commit comments