Jump to content

Castillo

Retired Staff
  • Posts

    21,935
  • Joined

  • Last visited

  • Days Won

    6

Everything posted by Castillo

  1. Use the event: onElementDataChange to detect when player occupation changes.
  2. Castillo

    Can't start

    Topic moved to "Support for MTA:SA 1.x > Client".
  3. @Andreas: The event onClientPlayerJoin is triggered for remote players, not for the local player, he should use onClientResourceStart if he wants it client side.
  4. Replace the content of "textlib.lua" with: dxText = {} dxText_mt = { __index = dxText } local idAssign,idPrefix = 0,"c" local g_screenX,g_screenY = guiGetScreenSize() local visibleText = {} ------ defaults = { fX = 0.5, fY = 0.5, bRelativePosition = true, strText = "", bVerticalAlign = "center", bHorizontalAlign = "center", tColor = {255,255,255,255}, fScale = 1, strFont = "default", strType = "normal", tAttributes = {}, bPostGUI = false, bClip = false, bWordWrap = true, bVisible = true, tBoundingBox = false, --If a bounding box is not set, it will not be used. bRelativeBoundingBox = true, } local validFonts = { default = true, ["default-bold"] = true, clear = true, arial = true, pricedown = true, bankgothic = true, diploma = true, beckett = true, } local validTypes = { normal = true, shadow = true, border = true, stroke = true, --Clone of border } local validAlignTypes = { center = true, left = true, right = true, } function dxText:create( text, x, y, relative, strFont, fScale, horzA ) assert(not self.fX, "attempt to call method 'create' (a nil value)") if ( type(text) ~= "string" ) or ( not tonumber(x) ) or ( not tonumber(y) ) then outputDebugString ( "dxText:create - Bad argument", 0, 112, 112, 112 ) return false end local new = {} setmetatable( new, dxText_mt ) --Add default settings for i,v in pairs(defaults) do new[i] = v end idAssign = idAssign + 1 new.id = idPrefix..idAssign new.strText = text or new.strText new.fX = x or new.fX new.fY = y or new.fY if type(relative) == "boolean" then new.bRelativePosition = relative end new:scale( fScale or new.fScale ) new:font( strFont or new.strFont ) new:align( horzA or new.bHorizontalAlign ) visibleText[new] = true return new end function dxText:text(text) if type(text) ~= "string" then return self.strText end self.strText = text return true end function dxText:position(x,y,relative) if not tonumber(x) then return self.fX, self.fY end self.fX = x self.fY = y if type(relative) == "boolean" then self.bRelativePosition = relative else self.bRelativePosition = true end return true end function dxText:color(r,g,b,a) if not tonumber(r) then return unpack(self.tColor) end g = g or self.tColor[2] b = b or self.tColor[3] a = a or self.tColor[4] self.tColor = { r,g,b,a } return true end function dxText:scale(scale) if not tonumber(scale) then return self.fScale end self.fScale = scale return true end function dxText:visible(bool) if type(bool) ~= "boolean" then return self.bVisible end if self.bVisible == bool then return end self.bVisible = bool if bool then visibleText[self] = true else visibleText[self] = nil end return true end function dxText:destroy() self.bDestroyed = true setmetatable( self, self ) return true end function dxText:font(font) if not validFonts[font] then return self.strFont end self.strFont = font return true end function dxText:postGUI(bool) if type(bool) ~= "boolean" then return self.bPostGUI end self.bPostGUI = bool return true end function dxText:clip(bool) if type(bool) ~= "boolean" then return self.bClip end self.bClip = bool return true end function dxText:wordWrap(bool) if type(bool) ~= "boolean" then return self.bWordWrap end self.bWordWrap = bool return true end function dxText:type(type,...) if not validTypes[type] then return self.strType, unpack(self.tAttributes) end self.strType = type self.tAttributes = {...} return true end function dxText:align(horzA, vertA) if not validAlignTypes[horzA] then return self.bHorizontalAlign, self.bVerticalAlign end vertA = vertA or self.bVerticalAlign self.bHorizontalAlign, self.bVerticalAlign = horzA, vertA return true end function dxText:boundingBox(left,top,right,bottom,relative) if left == nil then if self.tBoundingBox then return unpack(boundingBox) else return false end elseif tonumber(left) and tonumber(right) and tonumber(top) and tonumber(bottom) then self.tBoundingBox = {left,top,right,bottom} if type(relative) == "boolean" then self.bRelativeBoundingBox = relative else self.bRelativeBoundingBox = true end else self.tBoundingBox = false end return true end addEventHandler ( "onClientRender", getRootElement(), function() for self,_ in pairs(visibleText) do while true do if self.bDestroyed then visibleText[self] = nil break end if self.tColor[4] < 1 then break end local l,t,r,b --If we arent using a bounding box if not self.tBoundingBox then --Decide if we use relative or absolute local p_screenX,p_screenY = 1,1 if self.bRelativePosition then p_screenX,p_screenY = g_screenX,g_screenY end local fX,fY = (self.fX)*p_screenX,(self.fY)*p_screenY if self.bHorizontalAlign == "left" then l = fX r = fX + g_screenX elseif self.bHorizontalAlign == "right" then l = fX - g_screenX r = fX else l = fX - g_screenX r = fX + g_screenX end if self.bVerticalAlign == "top" then t = fY b = fY + g_screenY elseif self.bVerticalAlign == "bottom" then t = fY - g_screenY b = fY else t = fY - g_screenY b = fY + g_screenY end elseif type(self.tBoundingBox) == "table" then local b_screenX,b_screenY = 1,1 if self.bRelativeBoundingBox then b_screenX,b_screenY = g_screenX,g_screenY end l,t,r,b = self.tBoundingBox[1],self.tBoundingBox[2],self.tBoundingBox[3],self.tBoundingBox[4] l = l*b_screenX t = t*b_screenY r = r*b_screenX b = b*b_screenY end local type,att1,att2,att3,att4,att5 = self:type() if type == "border" or type == "stroke" then att2 = att2 or 0 att3 = att3 or 0 att4 = att4 or 0 att5 = att5 or self.tColor[4] outlinesize = att1 or 2 if outlinesize > 0 then for offsetX=-outlinesize,outlinesize,outlinesize do for offsetY=-outlinesize,outlinesize,outlinesize do if not (offsetX == 0 and offsetY == 0) then dxDrawColorText(self.strText, l + offsetX, t + offsetY, r + offsetX, b + offsetY, tocolor(att2, att3, att4, att5), self.fScale, self.strFont, self.bHorizontalAlign, self.bVerticalAlign, self.bClip, self.bWordWrap, self.bPostGUI ) end end
  5. As I supposed, the script is set as client side, but onPlayerJoin event is server side. "marston" name="chc" version="1.0.0" type="script" />
  6. Post your "meta.xml" content.
  7. 1: Event should go after function. 2: The timer is useless. function crosshairhide ( ) showPlayerHudComponent ( source, "crosshair", false ) end addEventHandler ( "onPlayerJoin", getRootElement(), crosshairhide )
  8. No, "race/textlib.lua" is the dx library used to draw text.
  9. You can't cut parts of a game mode and expect it to work alone.
  10. That text is created by the dx library on race, you'll have to edit the dx library with the color coded function. https://wiki.multitheftauto.com/wiki/DxDrawColorText
  11. Have you tried debugging the code to see if it's sending the first and second as well?
  12. You can set a special element data to some players and then client side when player takes damages: onClientPlayerDamage if player has the special data cancel it.
  13. Castillo

    GUI Help

    You're welcome. @TheIceman: 'source' of onElementClicked is the element clicked, not who clicked it.
  14. Sure that you copied last code? because I had a typo and I edited it, so try copying it again.
  15. Well, you shouldn't create the neon if the model is not one of these. local vehicles = { [ 415 ] = true, [ 411 ] = true, [ 549 ] = true } function neons ( thePlayer ) local x, y, z = getElementPosition ( source ) local id = getElementModel ( source ) if ( getPlayerName ( thePlayer ):find ( "AS|" ) ) then if ( vehicles [ id ] ) then local neon = createObject ( 14399, x, y, z ) local neon1 = createObject ( 14399, x, y, z ) if ( id == 415 ) then attachElements ( neon1, source, 1, 0, -0.5 ) attachElements ( neon, source, -1, 0, -0.5 ) elseif ( id == 411 ) then attachElements ( neon1, source, 1.05, 0, -0.55 ) attachElements ( neon, source, -1.05, 0, -0.55 ) elseif ( id == 549 ) then attachElements ( neon1, source, 1, 0, -0.4 ) attachElements ( neon, source, -1, 0, -0.4 ) end end end end addEventHandler ( "onVehicleEnter", getRootElement(), neons )
  16. Must be because the function: detachElement does not exist, it's: detachElements.
  17. Castillo

    GUI Help

    You must trigger the event to the player that clicked the element using: triggerClientEvent and add the event handler client side with: addEvent + addEventHandler.
  18. Castillo

    GUI Help

    When are you executing: "changeVisibility" function?
  19. Castillo

    GUI Help

    Post your entire script.
  20. Castillo

    GUI Help

    Hide it with: guiSetVisible
  21. Castillo

    GUI Help

    onElementClicked -> server side event.
  22. Castillo

    GUI Help

    I'm sure that your script is set as server side, GUI is client side only.
×
×
  • Create New...