XxRomxX Posted January 15, 2014 Share Posted January 15, 2014 Quisiera Saber como hacer que el scoreboard,Salga de un lado,por ejemplo yo Apretó la Tecla para que salga el scoreboard,y salga del lado derecho y se centre en pantalla algo así como el de xlatino Link to comment
Arsilex Posted January 18, 2014 Share Posted January 18, 2014 xlatino uso shaders para hacer su scoreboard.. Link to comment
MTA Team 0xCiBeR Posted January 18, 2014 MTA Team Share Posted January 18, 2014 El Scoreboard, usa por default, Shaders.Lo que hizo xlatino es agregar uno, y ademas, modificar como funciona el que traia por default.Yo lo se hacer, y es una tarea muy tediosa... Link to comment
Alexs Posted January 18, 2014 Share Posted January 18, 2014 El Scoreboard, usa por default, Shaders.Lo que hizo xlatino es agregar uno, y ademas, modificar como funciona el que traia por default.Yo lo se hacer, y es una tarea muy tediosa... Una respuesta tan ambigua es inútil e incluso innecesaria, ¿Por que no le haces el favor a @XxRomxX y al resto de posibles interesados de exponerles el proceso tan tedioso que utilizarías? Link to comment
Renkon Posted January 19, 2014 Share Posted January 19, 2014 El Scoreboard, usa por default, Shaders.Lo que hizo xlatino es agregar uno, y ademas, modificar como funciona el que traia por default.Yo lo se hacer, y es una tarea muy tediosa... Una respuesta tan ambigua es inútil e incluso innecesaria, ¿Por que no le haces el favor a @XxRomxX y al resto de posibles interesados de exponerles el proceso tan tedioso que utilizarías? El scoreboard, no usa shaders , corríjanme si me equivoco Link to comment
MTA Team 0xCiBeR Posted January 19, 2014 MTA Team Share Posted January 19, 2014 Si usa. El Scoreboard, usa por default, Shaders.Lo que hizo xlatino es agregar uno, y ademas, modificar como funciona el que traia por default.Yo lo se hacer, y es una tarea muy tediosa... Una respuesta tan ambigua es inútil e incluso innecesaria, ¿Por que no le haces el favor a @XxRomxX y al resto de posibles interesados de exponerles el proceso tan tedioso que utilizarías? Para guiarte, te mostrare como modifique el parte del manejo del shader en dxscrorebard_rt.lua : (de igual manera, debes modificar algunas cosas en el dxscoreboard_client.lua.) openedon = 1 shouldDraw = false local shaderset = {} animtime = 900 shaderset.RotateZ = 0 shaderset.PersCenterOffsetX = 0 shaderset.PersCenterOffsetY = 0 shaderset.sHighlightOffset = 1.75 shaderset.RotateY = 355 shaderset.TesselateX = 50 shaderset.sWaveSize = 0.154 shaderset.TesselateY = 8 shaderset.Size = 0.2 shaderset.RotateX = 10 shaderset.PosY = 0.87 shaderset.sWaveFreq = 2 shaderset.Alpha = 255 shaderset.sHighlightAmount = 0.78 shaderset.PersCenIsScreen = 0 shaderset.sWireframe = 0 shaderset.RotCenterOffsetY = 0 shaderset.RotCenterOffsetZ = 0 shaderset.RotCenIsScreen = 0 shaderset.RotCenterOffsetX = 0 shaderset.sWaveSpeed = 10 shaderset.PosX = 0.93 local swareached = 0 overAvatar = false local sw, sh = guiGetScreenSize() local rtShader, rt local lastUpdateTime = 0 addEventHandler("onClientResourceStart", resourceRoot, function(resource) rtShader = dxCreateShader("rt_blend.fx") avShader = dxCreateShader("rt_blend.fx") end) function drawScoreboard() cursorCache = {} if #savedRowsNext > 0 then savedRows = savedRowsNext savedRowsNext = {} end if not scoreboardDrawn then bForceUpdate = true end local bUpdate = false if getTickCount() - lastUpdateTime > 1000 or bForceUpdate then bUpdate = true bForceUpdate = false lastUpdateTime = getTickCount() end local sX, sY = getRequiredRtSize() if rt then local rX, rY = dxGetMaterialSize(rt) if sX ~= rX or sY ~= rY then destroyElement(rt) rt = nil end end if not rt then rt = dxCreateRenderTarget(sX, sY, true) bUpdate = true end if not rt then doDrawScoreboard(false, false, guiGetScreenSize()) return end local newRowIdx = getCursorOverRow(true) if newRowIdx ~= lastRowIdx then lastRowIdx = newRowIdx bUpdate = true end doDrawScoreboard(true, true, guiGetScreenSize()) if bUpdate then dxSetRenderTarget(rt, true) local drawOverGUISaved = drawOverGUI drawOverGUI = false doDrawScoreboard(true, false, getRequiredRtSize()) drawOverGUI = drawOverGUISaved dxSetRenderTarget() end local percent = math.max(math.min(getTickCount() - openedon, animtime), 0) / animtime if not scoreboardToggled then percent = percent * -1 end if percent <= -1 then shouldDraw = false return else shouldDraw = true end local deltaroty = shaderset.RotateY - 270 local offput = deltaroty * percent if percent < 0 then offput = swareached + swareached * percent else swareached = offput end local x, y = scoreboardGetTopCornerPosition() local rotarget = 270 + offput dxSetShaderValue(rtShader, "sTexture0", rt) if overAvatar then local ufcent = 0 if percent > 0 then ufcent = percent else ufcent = 1 + percent end dxSetShaderValue(avShader, "sTexture0", overAvatar[1]) dxSetShaderTransform(avShader, 450 - 105 * ufcent, 0, shaderset.RotateZ, 1, 0, shaderset.RotCenterOffsetZ, shaderset.RotCenIsScreen > 0.5, shaderset.PersCenterOffsetX, shaderset.PersCenterOffsetY, 0.5 < shaderset.PersCenIsScreen) dxDrawImage(overAvatar[2] * 0.25, sh * 0.5 - overAvatar[3] * 0.5, overAvatar[2], overAvatar[3], avShader, 0, 0, 0, tocolor(255, 255, 255), drawOverGUI) end dxSetShaderTransform(rtShader, shaderset.RotateX, rotarget, shaderset.RotateZ, shaderset.RotCenterOffsetX, 1, shaderset.RotCenterOffsetZ, shaderset.RotCenIsScreen > 0.5, shaderset.PersCenterOffsetX, shaderset.PersCenterOffsetY, 0.5 < shaderset.PersCenIsScreen) if x then dxDrawImage(x, y, sX, sY, rtShader, 0, 0, 0, tocolor(255, 255, 255), drawOverGUI) end end function reescale(x, y, sx, sy, scale) x = x - (x * scale - x) y = y - (y * scale - y) sx = sx * scale sy = sy * scale return x, y, sx, sy end function getRequiredRtSize() local sX, sY = calculateWidth(), calculateHeight() if not sX then sX, sY = guiGetScreenSize() else sY = sY + 30 end return math.floor(sX), math.floor(sY) end cursorCache = {} function getCursorScoreboardPosition(rtPass) if #cursorCache == 0 then local cX, cY = getCursorPosition() local sX, sY = guiGetScreenSize() cX, cY = cX * sX, cY * sY if rtPass then local x, y = scoreboardGetTopCornerPosition() cX, cY = cX - x, cY - y end cursorCache = {cX, cY} end return unpack(cursorCache) end savedRowsNext = {} savedRows = {} function checkCursorOverRow(rtPass, xl, xh, yl, yh) if isCursorShowing() then savedRowsNext[#savedRowsNext + 1] = { xl, xh, yl, yh } local cX, cY = getCursorScoreboardPosition(rtPass) if xl <= cX and xh >= cX and yl <= cY and yh >= cY then return true end end return false end function getCursorOverRow(rtPass) if isCursorShowing() then local cX, cY = getCursorScoreboardPosition(rtPass) for idx, row in ipairs(savedRows) do if cX >= row[1] and cX <= row[2] and cY >= row[3] and cY <= row[4] then return idx end end end return false end local bAddFakePlayers = false local bAllowFPlayers = true if bAllowFPlayers then _getElementsByType = getElementsByType _getElementType = getElementType _getPlayerTeam = getPlayerTeam _getPlayerNametagColor = getPlayerNametagColor _getPlayersInTeam = getPlayersInTeam _getPlayerName = getPlayerName _getPlayerPing = getPlayerPing function getElementsByType(type) local results = _getElementsByType(type) if type == "player" then for k, fp in ipairs(_getElementsByType("fplayer")) do results[#results + 1] = fp end end return results end function getPlayerTeam(player) if isElement(player) then if _getElementType(player) == "fplayer" then return getElementData(player, "team") else return _getPlayerTeam(player) end else return false end end function getElementType(elem) local trtype = _getElementType(elem) if trtype == "fplayer" then trtype = "player" end return trtype end function getPlayerNametagColor(plr) if _getElementType(plr) == "fplayer" then return 255, 255, 255, 255 end return _getPlayerNametagColor(plr) end function getPlayersInTeam(team) local trlist = _getPlayersInTeam(team) for k, fp in ipairs(_getElementsByType("fplayer")) do if getElementData(fp, "team") == team then trlist[#trlist + 1] = fp end end return trlist end function getPlayerName(player) if _getElementType(player) == "fplayer" then return tostring(getElementData(player, "name")) end return _getPlayerName(player) end function getPlayerPing(player) if _getElementType(player) == "fplayer" then return math.random(10, 100) end return _getPlayerPing(player) end end if bAddFakePlayers then do local numberOfTeams = 4 local numberOfPlayersPerTeam = 20 _getElementsByType = getElementsByType function getElementsByType(type) local results = _getElementsByType(type) if type == "player" then results = {} for t = 1, numberOfTeams do for p = 1, numberOfPlayersPerTeam do results Link to comment
Alexs Posted January 19, 2014 Share Posted January 19, 2014 @Alexs no seas tan quejon, simplemente le señale el hecho de que era una tarea tediosa y que requeria bastante analisis. El objetivo de este foro es que la gente aprenda y entienda las cosas, evitando confusiones, así que me quejare siempre que algún usuario haga algo que complique estos objetivos. El scoreboard, no usa shaders , corríjanme si me equivoco Tiene un archivo llamado 'rt_blend.fx' que contiene esto: // // rt_blend.fx // //--------------------------------------------------------------------- // rt_blend settings //--------------------------------------------------------------------- texture sTexture0; //------------------------------------------------------------------------------------------ // Techniques //------------------------------------------------------------------------------------------ technique tec0 { pass P0 { // Set our texture Texture[0] = sTexture0; // Use additive blending SrcBlend = One; DestBlend = InvSrcAlpha; } } // Fallback technique fallback { pass P0 { // Just draw normally } } Que tampoco es tan complejo, de todas formas, conociendo a @samt2497, hizo una scoreboard propia sin utilizar la de MTA. Link to comment
Recommended Posts