Jump to content

Rose

Members
  • Posts

    189
  • Joined

  • Last visited

Everything posted by Rose

  1. speed = 1.5 if speed[localPlayer] == true then if getControlState( "sprint" ) == true or getControlState("jump") == true then local x, y, z = getElementPosition(getLocalPlayer()) local prot = getPedRotation(getLocalPlayer()) local nx, ny = getPointFromDistanceRotation(x, y, speed, (prot)*-1) local clear = isLineOfSightClear( x, y, z, nx, ny, z, true, true, true, true, true, true, true) if clear == true then local lx, ly = getPointFromDistanceRotation(x, y, 1, (prot-8)*-1) local rx, ry = getPointFromDistanceRotation(x, y, 1, (prot+8)*-1) local clearl = isLineOfSightClear( x, y, z, lx, ly, z, true, true, true, true, true, true, true) local clearr = isLineOfSightClear( x, y, z, rx, ry, z, true, true, true, true, true, true, true) if clearl == true and clearr == true then local nz = getGroundPosition ( nx, ny, z+1 ) if getDistanceBetweenPoints3D( x, y, z, nx, ny, nz) < 2 then setElementPosition(getLocalPlayer(), nx, ny, nz+1, false) end end end end end Use with onClientRender event. Not is my code.
  2. Buenas, quisiera saber para que sirve hacer esto: local table = {} function table.setCharacter( player, id ) setElementModel( player, id ) end Tengo esa duda porque he visto en varios códigos que crean las funciones así, entonces quisiera saber qué beneficios trae o por qué se usa. Un amigo me dijo que era para crear funciones locales, pero para eso está el crearlas así, ¿no? local function blabla() end ¿Cuál es la diferencia?
  3. Creo que este script te puede ayudar, mira a ver: --[[ Author: danibayez MTA Forum: https://goo.gl/QX0mcT ]] local width, height, h_height, r_height, s_width = 500, 520, 70, 40, 15 local renderTarget = dxCreateRenderTarget( width, height, true ) local font = dxCreateFont( "files/font.ttf", 18 ) local posX = ( screenW - width ) / 2 local isScrollActive, scrollCache, scrollColor = _, 0, 0 local players = { } addEventHandler( "onClientRender", root, function( ) if ( getKeyState( "TAB" ) ) then local c_height = #players * r_height local posY = ( screenH - ( math.min( c_height, height ) + h_height ) ) / 2 dxDrawRectangle( posX, posY, width, h_height, tocolor( 42, 93, 132, 255 ), true ) dxDrawImage( posX + 10, posY + ( h_height - 64 ), 64, 64, "files/skins/" .. getElementModel( localPlayer ) .. ".png", 0, 0, 0, tocolor( 255, 255, 255, 255 ), true ) dxDrawText( #players .. "/100", posX, posY, posX + width - 10, posY + h_height, tocolor( 255, 255, 255, 255 ), 1, font, "right", "center", false, false, true ) local headerX, headerY = posX + 85, posY + 7 dxDrawImageSection( headerX, headerY, 16, 16, 16, 0, 16, 16, "files/icons.png", 0, 0, 0, tocolor( 255, 255, 255, 255 ), true ) dxDrawText( getPlayerName( localPlayer ):gsub( "_", " " ), headerX + 20, headerY, headerX + 20, headerY + 16, tocolor( 255, 255, 255, 255 ), 0.55, font, "left", "center", false, false, true ) dxDrawImageSection( headerX, headerY + 20, 16, 16, 32, 0, 16, 16, "files/icons.png", 0, 0, 0, tocolor( 255, 255, 255, 255 ), true ) dxDrawText( convertNumber( getPlayerMoney( ) ) .. "$", headerX + 20, headerY + 20, headerX + 20, headerY + 36, tocolor( 255, 255, 255, 255 ), 0.55, font, "left", "center", false, false, true ) dxDrawImageSection( headerX, headerY + 40, 16, 16, 0, 0, 16, 16, "files/icons.png", 0, 0, 0, tocolor( 255, 255, 255, 255 ), true ) dxDrawText( _getZoneName( getElementPosition( localPlayer ) ), headerX + 20, headerY + 40, headerX + 20, headerY + 56, tocolor( 255, 255, 255, 255 ), 0.55, font, "left", "center", false, false, true ) local offsetY = 0 local _width = c_height > height and width - s_width - 5 or width dxSetRenderTarget( renderTarget, true ) for i = 1, #players do local r, g, b = getPlayerNametagColor( players[ i ] ) local posY = offsetY - scrollCache dxDrawRectangle( 0, posY, width, r_height, tocolor( 0, 0, 0, 200 ) ) dxDrawText( ( getElementData( players[ i ], "playerid" ) or 0 ), 0, posY, 50, posY + r_height, tocolor( r, g, b, 255 ), 0.6, font, "center", "center" ) dxDrawText( getPlayerName( players[ i ] ):gsub( "_", " " ), 60, posY, 160, posY + r_height, tocolor( r, g, b, 255 ), 0.6, font, "left", "center" ) dxDrawText( getPlayerPing( players[ i ] ), _width - 70, posY, _width, posY + r_height, tocolor( r, g, b, 255 ), 0.6, font, "center", "center" ) offsetY = offsetY + r_height end if ( width ~= _width ) then local vRatio = height / c_height local s_height = height * vRatio local scrollY = ( vRatio * scrollCache ) + 5 local isHover = isCursorOnElement( posX + _width, posY + scrollY + h_height, s_width, s_height - 10 ) local r, g, b = interpolateBetween( 42, 93, 132, 22, 73, 112, scrollColor, "Linear" ) scrollColor = math.min( math.max( isScrollActive and scrollColor + 0.1 or scrollColor - 0.1, 0 ), 1 ) _dxDrawRectangle( _width, 5, s_width, height - 10, 10, tocolor( 0, 0, 0, 200 ) ) _dxDrawRectangle( _width, scrollY, s_width, s_height - 10, 10, tocolor( r, g, b, 255 ) ) if ( isHover and getKeyState( "mouse1" ) ) then isScrollActive = not isScrollActive and cursorY( ) - scrollY + 5 or isScrollActive elseif ( not getKeyState( "mouse1" ) ) then isScrollActive = nil end if ( isScrollActive ) then scrollCache = math.min( math.max( ( cursorY( ) - isScrollActive ) / vRatio, 0 ), c_height - height ) end end dxSetRenderTarget( ) dxDrawImage( posX, posY + h_height, width, height, renderTarget, 0, 0, 0, tocolor( 255, 255, 255, 255 ), true ) end showCursor( getKeyState( "mouse2" ) ) end ) addEventHandler( "onClientPlayerJoin", root, function( ) players = getElementsByType( "player" ) end ) addEventHandler( "onClientResourceStart", resourceRoot, function( ) players = getElementsByType( "player" ) end ) addEventHandler( "onClientPlayerQuit", root, function( ) players = getElementsByType( "player" ) scrollCache = math.min( scrollCache, #players * r_height ) end ) addEventHandler( "onClientKey", root, function( key ) local c_height = #players * r_height if ( getKeyState( "TAB" ) and ( c_height > height ) ) then if ( key == "mouse_wheel_up" ) then scrollCache = math.max( scrollCache - r_height, 0 ) elseif ( key == "mouse_wheel_down" ) then scrollCache = math.min( scrollCache + r_height, c_height - height ) end end end )
  4. Rose

    Mover marker

    Con attachElements puedes hacerlo así: local x, y, z = getElementPosition( localPlayer ) local pb = createObject( 1500, x, y, z ) local marker = createMarker( x, y, z, "cylinder", 1.5 ) attachElements( marker, pb ) setElementAlpha( pb, 0 ) setElementCollisionsEnabled( pb, false ) addCommandHandler( "mv", function ( ... ) moveObject( pb, 1500, x, y+5, z) end)
  5. Rose

    Mover marker

    No puedes mover un marker como un objeto, pero creo que puedes attachear el marker a un objeto y mover el objeto.
  6. Si quieres que al logear por primera vez al server haya una pequeña introducción tienes que usar setAccountData, getAccountData y los eventos onPlayerJoin o onPlayerLogin, depende de lo que quieras hacer.
  7. Se almacenan si mal no recuerdo en registry.db
  8. (? local screenWidth, screenHeight = guiGetScreenSize( ) local stopAngle = 0 local time = 5000; -- Seconds to complete the circle local speed = ((getFPSLimit() / 60) * 100) / (time / 60); local tick = getTickCount(); addEventHandler( "onClientRender", root, function( ) local now = getTickCount() local endTime = tick + time local elapsedTime = now - tick local duration = endTime - tick local progress = elapsedTime / duration local angle = interpolateBetween ( 0, 0, 0, 360, 0, 0, progress, "Linear") dxDrawCircle( screenWidth / 2, screenHeight / 2, nil, nil, nil, nil, angle ) end ) @Arsilex's code.
  9. Cómo se crearían llamas con eso? te refieres a hacer algo como un gif?
  10. ¿Estabamos hablando sobre si mta está muerto o de quién rolea mejor?
  11. Prueba con esto: markerDoor = createMarker( 2673.44019, -836.30035, 59,"cylinder",2, 0, 255, 0, 150) markerDoor2 = createMarker( 2683.51782, -835.22827, 59,"cylinder",2, 0, 255, 0, 150) puente = createObject(5147, 2631.1005859375, -773.7998046875, 78.200001525879, 0, 6.998291015625, 281.99157714844) open = false --entrada function hPlayer( ) if ( source == markerDoor and open == false ) then moveObject ( puente, 10000, 2631.1005859375, -773.7998046875, 68.900001525879, 0, -6.998291015625, 0) open = true end end addEventHandler ( "onMarkerHit", markerDoor, hPlayer) --salida function hPlayer2( ) if ( source == markerDoor2 and open == true ) then moveObject ( puente, 10000, 2631.1005859375, -773.7998046875, 78.200001525879, 0, 6.998291015625, 0) open = false end end addEventHandler ( "onMarkerHit", markerDoor2, hPlayer2)
  12. Rose

    ayuda con esto

    @Mauro.e tienes que dividir la vida del auto entre 10, ya que 1000 / 10 = 100, 999 / 10 = 99, etc. Además creo que en la wiki ya te dan un ejemplo de cómo sacar la vida del auto, deberías revisarla para no estar preguntando cualquier cosa y te saques de dudas tú mismo.
  13. Creo que entendí más o menos, pero, funcionará con todos los jugadores? me refiero, si un jugador cualquiera pisa el marker para bajar el puente, los demás ya no podrán pisarlo hasta que pisen el otro marker. Si no es así mejor deberías hacerlo en client, creo.
  14. @GabrielBas es localPlayer, no localplayer(pudiese ser localplayer si defines qué es, pero localPlayer ya devuelve al jugador local...)
  15. No sé si venga al caso, pero creo que algo como una guerra de grupos vendría bien. No me refiero al típico turf, sino algo más organizado. Te digo como yo lo haría: - Cada grupo tendrá su prestigio, con el que empieza cada grupo puede ser de 100, al ganar guerras tu prestigio aumentará. - Las guerras solo pueden ser creadas por un administrador. - Será una guerra de grupo vs grupo, con la posibilidad de los que no participae puedan ver en público el duelo entre cada miembro. Ya de cómo serian los duelos queda a imaginación de cada uno(puede ser, 1vs1 con escopetas, el mejor de 3 con pistolas, cosas así)
  16. Muestra como lo tienes, yo lo probé así pero con botones(me da flojera buscar imágenes) y funciona bien
  17. function chooseG() background = guiCreateStaticImage(0, 0, 1, 1, "imagenes/background.png", true) soldado = guiCreateStaticImage(0.1, 0.100, 0.4, 0.6, "imagenes/infames.png", true) civil = guiCreateStaticImage(0.4, 0.100, 0.4, 0.6, "imagenes/insurgentes.png", true) bandido = guiCreateStaticImage(0.7, 0.100, 0.4, 0.6, "imagenes/imparciales.png", true) showCursor(true) end addEvent("equipo",true) addEventHandler("equipo",root,chooseG) function playerChosen() local date, time = getTheTime() if(source==soldado)then setGroup(localPlayer, "INFAMES", date, "Infame") setElementPosition ( localPlayer, 0, 0, 0 ) elseif(source==civil)then setGroup(localPlayer, "INSURGENTES", date, "Insurgente") setElementPosition ( localPlayer, 0, 0, 0 ) elseif(source==bandido)then setGroup(localPlayer, "IMPARCIALES", date, "Imparcial") setElementPosition ( localPlayer, 0, 0, 0 ) end destroyElement(background) showCursor(false) end addEventHandler("onClientGUIClick", root, playerChosen)
  18. @-Rex- Se refiere a que los nombres de los jugadores no aparezcan así: #ff0000:v, sino ya con el color: :v @Venerable solo tienes que marcar como verdadero el argumento "colorCoded" que trae dxDrawText, algo así: dxDrawText ( "Jogadores: "..tostring(#playersTable).." | "..tostring(max_players), baseX-640, baseY+60, baseX+width, baseY+30, tocolor(255,255,255), 1, "default-bold", "center", false, false, false, true, false) Has lo mismo con los otros textos
  19. En la wiki que yo recuerde hay una función para dibujar rectángulos con bordes, no sea si sea la misma ya que no he probado ninguna de las dos
  20. Es tal como dices, algunos se esfuerzan en hacer un freeroam mientras otros solo le añaden skins de anime, recursos de la comunidad, cualquier otra tontería y llegan a tener más jugadores(no siempre es el caso). La mayoría de la gente que juega esos servidores que solo tienen skins y recursos de la comunidad, es porque fue el primer server que jugaron. A mi me pasó esto cuando jugaba, estaba en un freeroam que no era muy divertido, y a pesar de eso, entraba todos los días(no entraba por el contenido del servidor, sino por la gente que conocía, siempre encontrábamos la manera de divertirnos).
  21. Concuerdo con @Aquiles. Siempre es lo mismo cuando van a crear un servidor, solo piensan en un roleplay con lo mismo de siempre. Yo siempre he estado esperando un servidor que se base en Left 4 dead 2(su modo de juego), pero por lo que veo no creo que salga un GM como ese, así que decidí empezar a crearlo con un amigo.
  22. Quisiera saber cómo podría calcular la fuerza según la distancia entre el jugador(o objeto) para así aumentar la fuerza con la que lanzará el objeto. Estoy usando este código que sirve para lanzar el objeto casi exactamente a su posición, pero quisiera calcular es la fuerza. local targetX, targetY, targetZ = getElementPosition(player) local targetX2, targetY2, targetZ2 = getElementPosition(c) local anglee = math.atan2(targetX - targetX2, targetY - targetY2) - math.rad(90) local velX, velY, velZ = getElementVelocity(player) local px, py, pz = getPositionFromElementOffset(player, 0, 2, 0) setElementPosition(rocks[player], px, py, pz) setElementVelocity(rocks[player], velX , velY , velZ + 1) setTimer(setElementVelocity, 50, 1, rocks[player], velX + 1 *-math.cos(anglee), velY + 1 *math.sin(anglee), velZ) Supongo que lo más obvio es usar getDistanceBetweenPoints3D, pero no sé qué calcular para que me de una fuerza según la distancia entre dos elementos. Por cierto, no quiero aumentar velX ni velY, me gustaría aumentar la fuerza con la que es lanzado hacia arriba(velZ).
  23. local screenWidth, screenHeight = guiGetScreenSize( ) width = 400 height = 420 function ctrl_dx() dxDrawRectangle( (screenWidth / 2)-(width/2), (screenHeight / 2)-(height/2), width, height, tocolor(57, 57, 57, 255), false) dxDrawRectangle( (screenWidth / 2)-(width/2), (screenHeight / 2)-(height/2), width, height, tocolor(254, 254, 254, 254), false) end addEventHandler("onClientRender", root, ctrl_dx) Yo para centrar un dx uso eso, lo ví en un script hace tiempo y me ha funcionado bien(creo que también sirve para posicionar un dx en cualquier parte de la pantalla).
×
×
  • Create New...