Jump to content

Ayuda con dimensiones


Carlossg

Recommended Posts

Pues bueno estaba haciendo un script que requiere varias dimensiones y me he quedado atrancado en un punto, expongo:

addEventHandler("onPlayerWasted", root, 
    function() 
        --if getElementDimension ( source ) == 3 then 
        outputChatBox(getElementDimension( source )) 
        setTimer(spawn, 1800, 1, source) 
        end 
    --end 
) 

La dimension del jugador antes de morir era la 3, pero instantaneamente cuando muere cambia a la 0, esto impide que por ejemplo, siga en esa dimension y vuelva a aparecer en ella, me gustaría saber como harían para almacenar la dimensión del jugador para poder evitar esto.

Resumen para vagos:Tengo un jugador en una dimensión pero cuando muere instantaneamente cambia a 0 la dimensión, como puedo hacer para que vuelva a aparecer en esa dimension?

Gracias :D

Link to comment

No esta testeado..Aun asi si dices que la dimension se pone en 0, deberias antes de que muere con un timer o algo almacenar su ultima dimension conocida..

EDIT:

addEventHandler("onPlayerWasted", root, 
    function() 
local dim = getElementDimension( source ) 
local x,y,z = getElementPosition (source) 
        --if getElementDimension ( source ) == 3 then 
        outputChatBox(dim) 
        setTimer(spawn, 1800, 1,source,x,y,z,dim) 
        end 
    --end 
) 
  
function spawn (jugador,x,y,z,dim) 
spawnPlayer ( jugador, x, y, z, 0, 1, 0, dim ) 
end 
  

Edited by Guest
Link to comment
Estas usando el gamemode 'play'? Si no es asi, chequea todos tus scripts porque para revivir se debe hacer un script. Si no hay script, el jugador no revivira.

Estoy usando el gamemode play, si.

Al final creo que lo voy a hacer con triggers, de alguna manera almaceno en el cliente la dimensión en la que estaba y hago un trigger del evento desde el servidor que a su vez hace un trigger al servidor enviando la dimensión, quizá puede parecer lioso, y probablemente gaste mas recursos en el momento de ejecución, pero asi me evito estar comprobandolo cada rato que gasta recursos constantemente , de la manera que yo pienso solo gasta recursos cuando el player muere, así es más dificil ralentizar el servidor.

Ahora solo me queda saber como almacenarla en el cliente :lol:

EDITO:Lo he hecho tal que, como el cliente deja almacenada en la gui que he hecho para seleccionar la dimension(Si, cutre, pero es para probar :lol: ) la opción seleccionada pues la uso para respawnear:

Cliente:

addEvent("Dimension", true) 
function SeLaDoy() 
triggerServerEvent("Obtener", localPlayer, DimensionActual) --Donde DimensionActual lo seleccionado --> DimensionActual = guiGridListGetSelectedItem ( GUIEditor.gridlist[1] ) 
end 
  
addEventHandler("Dimension",getRootElement(), SeLaDoy) 

Servidor:

addEvent ( "Obtener", true) 
  
addEventHandler("onPlayerWasted", root, 
    function() 
        triggerClientEvent("Dimension", getRootElement() ) 
    end 
) 
  
function spawnear( Dimension ) 
    if Dimension == 3 then 
    setTimer(spawn, 1800, 1, source) 
    outputChatBox(Dimension) 
    end 
end 
  
addEventHandler( "Obtener", root, spawnear ) 

Puede parecer loco, pero yo lo prefiero :oops:

Link to comment

Exacto..Ademas un timer que no sea tan seguido no usa para nada recursos..El uso de recursos con los timers, genera cargas solamente cuando son con pocos intervalos y mucha cantidad de calculos..Pero si solo obtendras la posicion y la guardaras..Un timer que se ejecute despues de cada spawn para guardar su posicion es mas que suficiente y no generara ningun tipo de inconvenientes..

Salu2

Link to comment

Remplaza el script que esta en "MTA San Andreas 1.3\server\mods\deathmatch\resources\[gamemodes]\[play]\play" archivo broth.lua por este(No testeado):

local spawnpoint 
  
addEventHandler("onResourceStart", resourceRoot, 
    function() 
        spawnpoint = getRandomSpawnPoint() 
        resetMapInfo() 
        for i,player in ipairs(getElementsByType("player")) do 
            spawn(player, 0) 
        end 
    end 
) 
  
function spawn(player, dim) 
    if not isElement(player) then return end 
    if get("spawnreset") == "onSpawn" then 
        spawnpoint = getRandomSpawnPoint() 
    end 
    exports.spawnmanager:spawnPlayerAtSpawnpoint(player,spawnpoint,false) 
    repeat until setElementModel(player,math.random(312)) 
    fadeCamera(player, true) 
    setCameraTarget(player, player) 
    showChat(player, true) 
    setElementDimension(player, dim) 
end 
  
function getRandomSpawnPoint () 
    local spawnpoints = getElementsByType("spawnpoint") 
    return spawnpoints[math.random(1,#spawnpoints)] 
end 
  
addEventHandler("onPlayerJoin", root, 
    function() 
        spawn(source, 0) 
    end 
) 
  
addEventHandler("onPlayerQuit",root, 
    function () 
        if getPlayerCount() == 1 and get("spawnreset") == "onServerEmpty" then 
            spawnpoint = getRandomSpawnPoint() 
        end 
    end 
) 
  
addEventHandler("onPlayerWasted", root, 
    function() 
        setTimer(spawn, 1800, 1, source, getElementDimension(source)) 
    end 
) 
  

Link to comment
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...