Carlossg Posted December 10, 2013 Share Posted December 10, 2013 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 Link to comment
Castillo Posted December 10, 2013 Share Posted December 10, 2013 En el chatbox que dimension aparece? Link to comment
MTA Team 0xCiBeR Posted December 10, 2013 MTA Team Share Posted December 10, 2013 (edited) 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 December 10, 2013 by Guest Link to comment
Castillo Posted December 10, 2013 Share Posted December 10, 2013 Ese timer esta mal, Ciber. Link to comment
MTA Team 0xCiBeR Posted December 10, 2013 MTA Team Share Posted December 10, 2013 Ese timer esta mal, Ciber. Listo Link to comment
Carlossg Posted December 10, 2013 Author Share Posted December 10, 2013 En el chatbox que dimension aparece? La 0 @Ciber Un temporizador fue lo primero que pense, pero quizá haya otra forma que no "consuma" tantos recursos(De hecho, a parte de programar todo intento optimizar al máximo posible todo lo que hago ) Link to comment
Sasu Posted December 10, 2013 Share Posted December 10, 2013 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. Link to comment
Carlossg Posted December 10, 2013 Author Share Posted December 10, 2013 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 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 ) 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 Link to comment
Sensacion Posted December 11, 2013 Share Posted December 11, 2013 No se que tanto problema te haces con 1 timer, pero si te obsecionas con eso, se puede hacer todo en client side y trigear a server solamente para spawnear. Link to comment
MTA Team 0xCiBeR Posted December 11, 2013 MTA Team Share Posted December 11, 2013 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
Sasu Posted December 11, 2013 Share Posted December 11, 2013 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
Carlossg Posted December 12, 2013 Author Share Posted December 12, 2013 Sasuke creo que ese los spawnearía todos en la diension 0 que es la que se pone cuando un jugador muere Al final el wasted lo pongo en el cliente y solo triggeo una función al servidor, como dijo Sensación Link to comment
Recommended Posts