lucascba Posted September 3, 2014 Share Posted September 3, 2014 hola, me gustaria saber como puedo hacer esto: Tengo un script del hijack y que cada vez que el jugador entregue el hijack se le coloque un "setElementData" para que luego yo use getElementData lo pueda poner en mis stats, me podrian decir como puedo hacer eso? Gracias Link to comment
Mr.Aleks Posted September 3, 2014 Share Posted September 3, 2014 Lo que quieres hacer lo estás diciendo tu mismo, usa los elementData. Link to comment
Tomas Posted September 3, 2014 Share Posted September 3, 2014 Recuerda que usando un setElementData cuando el jugador salga del servidor (se destruya el ped/al elemento que le asignaste la data) se borrará, te recomiendo usar getAccountData. Y como dijo Aleks tu mismo estás posteando como hacerlo, te dejo el syntax de setElementData y setAccountData por si te sirve setElementData(elemento,data,info) Data va dentro de comillas (string) en caso que esté dentro de una variable ya definida. Con info pasa lo mismo que arriba. setAccountData(cuenta,data,info) Y pasa exáctamente igual con el elementData. Link to comment
lucascba Posted September 3, 2014 Author Share Posted September 3, 2014 Si yo se eso, pero solo me pone 1 setElementData, lo que yo quiero hacer es que cada vez que entregue el hijack le sume 1 y así sucesivamente, como puedo hacer eso? Link to comment
Mr.Aleks Posted September 3, 2014 Share Posted September 3, 2014 Explícate mejor, o introduce el código para que podamos ver, dices que sabes pero no te aclaras. Link to comment
Tomas Posted September 3, 2014 Share Posted September 3, 2014 Debes usar aritmética, detectar cuanto tiene y sumarle uno, ejemplo: function onChat() local messages = getElementData(source,"LinesofChat") or 0 setElementData(source,messages+1) end addEventHandler("onPlayerChat",getRootElement(),onChat) Link to comment
Alexs Posted September 3, 2014 Share Posted September 3, 2014 Debes usar aritmética, detectar cuanto tiene y sumarle uno, ejemplo: function onChat() local messages = getElementData(source,"LinesofChat") or 0 setElementData(source,messages+1) end addEventHandler("onPlayerChat",getRootElement(),onChat) Por obvios motivos, eso no funcionaria. * ¿Que es hijack? Link to comment
lucascba Posted September 3, 2014 Author Share Posted September 3, 2014 Aca hay un ejemplo de un hijack, pero yo tengo otro: https://community.multitheftauto.com/index.php?p=resources&s=details&id=7030 Link to comment
Guest Posted September 3, 2014 Share Posted September 3, 2014 * ¿Que es hijack? Es un resource donde un vehículo determinado aparece de forma random en el mapa, cuando subes a él tienes que llevarlo al lugar donde te indique Link to comment
Mr.Aleks Posted September 3, 2014 Share Posted September 3, 2014 ¿Lo que quieres es asignarte un elementData en concreto y que cada vez que completes el hijack te suba "un punto"? De ser así podrías editar el propio script de hijack y agregar que cada vez que lo completes te agregue uno, por ejemplo. Digamos que al subir por primera vez al coche te asigna algo como: setElementData(source, "hijack", 0) function aumentarstat(player) local stat = getElementData(player, "hijack") -- en este caso devolvería el valor de stat del jugador que complete el hijack setElementData(player, "hijack", stat+1) -- si tenías stat 0, al completar el hijack te suma 1 al anterior end No sé si te referías a eso o a qué, podrías aclararte. * Hijack en inglés significa "secuestro", de ahí se supone de lo que trata el juego. Link to comment
lucascba Posted September 3, 2014 Author Share Posted September 3, 2014 mirra te explico mejor, primero que todos los jugadores tengo por defecto 0 "hijacks" entregados, y que cuando entreguen 1 hijack les sume 1 y así si entregan otro que sea 2, y que cuando reconecten eso se guarde, fui un poco mas claro? Link to comment
Arsilex Posted September 3, 2014 Share Posted September 3, 2014 Postea tu codigo y te ayudamos a ponerlo todo en su sitio... aleks te explico la manera de hacerlo si no sabes como organizarlo es mejor que pongas el script aquí para que podamos ayudarte mas. Como ya te dijeron arriba para que se guarde una vez que salga de servidor se tiene que usar setAccountData o otros metodos como puede ser sql mysql xml.... Link to comment
lucascba Posted September 3, 2014 Author Share Posted September 3, 2014 Ok este es mi codigo, Es un mysterybag seria lo mismo que lo del hijack pero con una bolsa, cada vez que el jugador agarre la bolsa le sume +1 en sus stats. Codigo: local mbag = { {2422.3,-2261.6,16}, {1758.9,-2767.9,1.7}, {2493.3,-951.8,82.25}, {815.7,-1108.2,25.8}, {390.9,-2054.3,13.8}, {-719.05,-1938.8,8.35}, {-625.7,-2249.5,23.05}, {-1812.3,-168.5,18.2}, {-2659.5,1528.05,54.79}, {-1733.76,194.75,3.6}, {-2535.5,40.15,8.5}, {-1804.85,558.45,35.15}, {-752.6,-131.6,65.8}, } function createBag() local random = math.random ( #mbag ) local x, y, z = mbag[random][1], mbag[random][2], mbag[random][3] bag = createPickup( x, y, z, 3, 1550 ) setElementCollisionsEnabled( bag, false ) bl = createBlipAttachedTo(bag,37) exports.UIPtexts:output("Una Bolsa Misteriosa ha aparecido en tu mapa conseguila primero y obten algunos premios agradables en ella!", root, 0, 255, 0) end addEventHandler("onResourceStart", resourceRoot,createBag) addEventHandler("onPickupHit",root, function ( player, killer ) if ( source ~= bag ) then return end if ( isPedInVehicle( player ) ) then return end if ( getElementData( player, "Ocupacion" ) == "FBI" ) then else if ( getElementData( player, "Ocupacion" ) == "SAPD" ) then else if ( getElementData( player, "Ocupacion" ) == "SWAT" ) then else if ( getElementData( player, "Ocupacion" ) == "Special Forces" ) then else if ( getElementData( player, "Ocupacion" ) == "Police Officer" ) then else if ( getElementData( player, "Ocupacion" ) == "Medic" ) then else if ( getElementData( player, "Ocupacion" ) == "None" ) then else if ( getElementData( player, "Ocupacion" ) == "Bus Driver" ) then else if ( getElementData( player, "Ocupacion" ) == "Mechanic" ) then else if ( getElementData( player, "Ocupacion" ) == "Pilot" ) then else if ( getElementData( player, "Ocupacion" ) == "Taxi Driver" ) then else if ( getElementData( player, "Ocupacion" ) == "Trucker" ) then return exports.CLtexts:output("Debes Ser Criminal Para Agarrar La Bolsa Misteriosa", localPlayer, 0, 255, 0) end destroyElement( bag ) destroyElement( bl ) randomMoney = math.random ( 1000, 20000 ) randomArmor = math.random( 40, 80 ) setPedArmor ( player, getPedArmor(player) + randomArmor ) outputChatBox("Usted Gano $" .. tostring(randomMoney) .." Y ".. tostring(randomArmor) .."% De Chaleco", player, 0, 250, 0) setTimer( createBag, 90000, 1 ) givePlayerMoney(player,randomMoney) local stat = getElementData(player, "BC") setElementData(player, "BC", stat+1) end end end end end end end end end end end end ) addEventHandler( "onResourceStart",resourceRoot, function( ) outputDebugString( "add Total Kills to scoreboard Return: "..tostring( call( getResourceFromName("dxscoreboard"), "addScoreboardColumn", "BC",root,2, 0.032 ) ) ) end ) Link to comment
Mr.Aleks Posted September 3, 2014 Share Posted September 3, 2014 Bien, si lo que quieres es que se guarde, en vez de usar setElementData y getElementData puedes seguir el procedimiento que te he dicho antes pero usando setAccountData y getAccountData. De esta manera, quedará guardado en la "cuenta" de cada usuario. Link to comment
Tomas Posted September 3, 2014 Share Posted September 3, 2014 Debes usar aritmética, detectar cuanto tiene y sumarle uno, ejemplo: function onChat() local messages = getElementData(source,"LinesofChat") or 0 setElementData(source,messages+1) end addEventHandler("onPlayerChat",getRootElement(),onChat) Por obvios motivos, eso no funcionaria. * ¿Que es hijack? ¿Por qué no funcionaría? Link to comment
Mr.Aleks Posted September 3, 2014 Share Posted September 3, 2014 Debes usar aritmética, detectar cuanto tiene y sumarle uno, ejemplo: function onChat() local messages = getElementData(source,"LinesofChat") or 0 setElementData(source,messages+1) end addEventHandler("onPlayerChat",getRootElement(),onChat) Por obvios motivos, eso no funcionaria. * ¿Que es hijack? ¿Por qué no funcionaría? Tomas, revisa el código, si quitas la variable estás haciendo esto: setElementData(source,getElementData(source,"LinesofChat")+1) Link to comment
Tomas Posted September 4, 2014 Share Posted September 4, 2014 En mis scripts lo suelo hacer así, pero en el foro lo detallo más, la idea es que él entienda, ¿no? El "or" lo uso porque si el player no tiene ninguna data returnaría un booleano (false) por eso el "or" Link to comment
Mr.Aleks Posted September 4, 2014 Share Posted September 4, 2014 Lo que alexs y yo nos referimos es que tal y como lo pusiste no funcionaria, fijate en como queda el setElementData y revisa su syntax. Link to comment
Arsilex Posted September 4, 2014 Share Posted September 4, 2014 Bueno volviendo al tema aquí esta lo que necesitas: local mbag = { {2422.3,-2261.6,16}, {1758.9,-2767.9,1.7}, {2493.3,-951.8,82.25}, {815.7,-1108.2,25.8}, {390.9,-2054.3,13.8}, {-719.05,-1938.8,8.35}, {-625.7,-2249.5,23.05}, {-1812.3,-168.5,18.2}, {-2659.5,1528.05,54.79}, {-1733.76,194.75,3.6}, {-2535.5,40.15,8.5}, {-1804.85,558.45,35.15}, {-752.6,-131.6,65.8}, } function createBag() local random = math.random ( #mbag ) local x, y, z = mbag[random][1], mbag[random][2], mbag[random][3] bag = createPickup( x, y, z, 3, 1550 ) setElementCollisionsEnabled( bag, false ) bl = createBlipAttachedTo(bag,37) exports.UIPtexts:output("Una Bolsa Misteriosa ha aparecido en tu mapa conseguila primero y obten algunos premios agradables en ella!", root, 0, 255, 0) end addEventHandler("onResourceStart", resourceRoot,createBag) addEventHandler("onPickupHit",root, function ( player, killer ) if ( source ~= bag ) then return end if ( isPedInVehicle( player ) ) then return end if ( getElementData( player, "Ocupacion" ) == "Criminal" ) then destroyElement( bag ) destroyElement( bl ) randomMoney = math.random ( 1000, 20000 ) randomArmor = math.random( 40, 80 ) setPedArmor ( player, getPedArmor(player) + randomArmor ) outputChatBox("Usted Gano $" .. tostring(randomMoney) .." Y ".. tostring(randomArmor) .."% De Chaleco", player, 0, 250, 0) setTimer( createBag, 90000, 1 ) givePlayerMoney(player,randomMoney) local stat = getElementData(player, "BC") setElementData(player, "BC", stat+1) --Linea de stats HiJack local hjackeds = getElementData(player, "hijacks") or 032 setElementData(player, "j", hjackeds+1) else exports.CLtexts:output("Debes Ser Criminal Para Agarrar La Bolsa Misteriosa", player, 0, 255, 0) end end ) function saveData(player) local account = getPlayerAccount ( player ) if not isGuestAccount ( account ) then setAccountData ( account, "hijack", getElementData(player, "hijacks") or 0 ) end end addEventHandler ( "onResourceStop", getThisResource ( ), function ( resource ) local players = getElementsByType ( "player" ) for theKey,thePlayer in ipairs(players) do saveData(thePlayer) end end ) addEventHandler( "onResourceStart",resourceRoot, function( ) outputDebugString( "add Total Kills to scoreboard Return: "..tostring( call( getResourceFromName("dxscoreboard"), "addScoreboardColumn", "BC",root,2, 0.032 ) ) ) end ) addEventHandler("onPlayerLogin", root, function(_, account) local data = getAccountData ( account, "hijack" ) or 032 setElementData(source, "hijacks", data) end ) function loggedOut() saveData(source) end addEventHandler("onPlayerLogout",getRootElement(),loggedOut) eh mejorado algunas cosas de tu scripts.. Link to comment
Tomas Posted September 4, 2014 Share Posted September 4, 2014 Lo que alexs y yo nos referimos es que tal y como lo pusiste no funcionaria, fijate en como queda el setElementData y revisa su syntax. Damn, ya entendí el error function onChat() local messages = getElementData(source,"LinesofChat") or 0 setElementData(source,"LinesofChat",messages+1) end addEventHandler("onPlayerChat",getRootElement(),onChat) Link to comment
lucascba Posted September 4, 2014 Author Share Posted September 4, 2014 Bueno volviendo al tema aquí esta lo que necesitas: local mbag = { {2422.3,-2261.6,16}, {1758.9,-2767.9,1.7}, {2493.3,-951.8,82.25}, {815.7,-1108.2,25.8}, {390.9,-2054.3,13.8}, {-719.05,-1938.8,8.35}, {-625.7,-2249.5,23.05}, {-1812.3,-168.5,18.2}, {-2659.5,1528.05,54.79}, {-1733.76,194.75,3.6}, {-2535.5,40.15,8.5}, {-1804.85,558.45,35.15}, {-752.6,-131.6,65.8}, } function createBag() local random = math.random ( #mbag ) local x, y, z = mbag[random][1], mbag[random][2], mbag[random][3] bag = createPickup( x, y, z, 3, 1550 ) setElementCollisionsEnabled( bag, false ) bl = createBlipAttachedTo(bag,37) exports.UIPtexts:output("Una Bolsa Misteriosa ha aparecido en tu mapa conseguila primero y obten algunos premios agradables en ella!", root, 0, 255, 0) end addEventHandler("onResourceStart", resourceRoot,createBag) addEventHandler("onPickupHit",root, function ( player, killer ) if ( source ~= bag ) then return end if ( isPedInVehicle( player ) ) then return end if ( getElementData( player, "Ocupacion" ) == "Criminal" ) then destroyElement( bag ) destroyElement( bl ) randomMoney = math.random ( 1000, 20000 ) randomArmor = math.random( 40, 80 ) setPedArmor ( player, getPedArmor(player) + randomArmor ) outputChatBox("Usted Gano $" .. tostring(randomMoney) .." Y ".. tostring(randomArmor) .."% De Chaleco", player, 0, 250, 0) setTimer( createBag, 90000, 1 ) givePlayerMoney(player,randomMoney) local stat = getElementData(player, "BC") setElementData(player, "BC", stat+1) --Linea de stats HiJack local hjackeds = getElementData(player, "hijacks") or 032 setElementData(player, "j", hjackeds+1) else exports.CLtexts:output("Debes Ser Criminal Para Agarrar La Bolsa Misteriosa", player, 0, 255, 0) end end ) function saveData(player) local account = getPlayerAccount ( player ) if not isGuestAccount ( account ) then setAccountData ( account, "hijack", getElementData(player, "hijacks") or 0 ) end end addEventHandler ( "onResourceStop", getThisResource ( ), function ( resource ) local players = getElementsByType ( "player" ) for theKey,thePlayer in ipairs(players) do saveData(thePlayer) end end ) addEventHandler( "onResourceStart",resourceRoot, function( ) outputDebugString( "add Total Kills to scoreboard Return: "..tostring( call( getResourceFromName("dxscoreboard"), "addScoreboardColumn", "BC",root,2, 0.032 ) ) ) end ) addEventHandler("onPlayerLogin", root, function(_, account) local data = getAccountData ( account, "hijack" ) or 032 setElementData(source, "hijacks", data) end ) function loggedOut() saveData(source) end addEventHandler("onPlayerLogout",getRootElement(),loggedOut) eh mejorado algunas cosas de tu scripts.. No funciona solo suma 1 y se queda alli. Link to comment
Alexs Posted September 4, 2014 Share Posted September 4, 2014 Bueno volviendo al tema aquí esta lo que necesitas: local mbag = { {2422.3,-2261.6,16}, {1758.9,-2767.9,1.7}, {2493.3,-951.8,82.25}, {815.7,-1108.2,25.8}, {390.9,-2054.3,13.8}, {-719.05,-1938.8,8.35}, {-625.7,-2249.5,23.05}, {-1812.3,-168.5,18.2}, {-2659.5,1528.05,54.79}, {-1733.76,194.75,3.6}, {-2535.5,40.15,8.5}, {-1804.85,558.45,35.15}, {-752.6,-131.6,65.8}, } function createBag() local random = math.random ( #mbag ) local x, y, z = mbag[random][1], mbag[random][2], mbag[random][3] bag = createPickup( x, y, z, 3, 1550 ) setElementCollisionsEnabled( bag, false ) bl = createBlipAttachedTo(bag,37) exports.UIPtexts:output("Una Bolsa Misteriosa ha aparecido en tu mapa conseguila primero y obten algunos premios agradables en ella!", root, 0, 255, 0) end addEventHandler("onResourceStart", resourceRoot,createBag) addEventHandler("onPickupHit",root, function ( player, killer ) if ( source ~= bag ) then return end if ( isPedInVehicle( player ) ) then return end if ( getElementData( player, "Ocupacion" ) == "Criminal" ) then destroyElement( bag ) destroyElement( bl ) randomMoney = math.random ( 1000, 20000 ) randomArmor = math.random( 40, 80 ) setPedArmor ( player, getPedArmor(player) + randomArmor ) outputChatBox("Usted Gano $" .. tostring(randomMoney) .." Y ".. tostring(randomArmor) .."% De Chaleco", player, 0, 250, 0) setTimer( createBag, 90000, 1 ) givePlayerMoney(player,randomMoney) local stat = getElementData(player, "BC") setElementData(player, "BC", stat+1) --Linea de stats HiJack local hjackeds = getElementData(player, "hijacks") or 032 setElementData(player, "j", hjackeds+1) else exports.CLtexts:output("Debes Ser Criminal Para Agarrar La Bolsa Misteriosa", player, 0, 255, 0) end end ) function saveData(player) local account = getPlayerAccount ( player ) if not isGuestAccount ( account ) then setAccountData ( account, "hijack", getElementData(player, "hijacks") or 0 ) end end addEventHandler ( "onResourceStop", getThisResource ( ), function ( resource ) local players = getElementsByType ( "player" ) for theKey,thePlayer in ipairs(players) do saveData(thePlayer) end end ) addEventHandler( "onResourceStart",resourceRoot, function( ) outputDebugString( "add Total Kills to scoreboard Return: "..tostring( call( getResourceFromName("dxscoreboard"), "addScoreboardColumn", "BC",root,2, 0.032 ) ) ) end ) addEventHandler("onPlayerLogin", root, function(_, account) local data = getAccountData ( account, "hijack" ) or 032 setElementData(source, "hijacks", data) end ) function loggedOut() saveData(source) end addEventHandler("onPlayerLogout",getRootElement(),loggedOut) eh mejorado algunas cosas de tu scripts.. Esa tabla posee una ligera incorrección en su forma. Link to comment
lucascba Posted September 5, 2014 Author Share Posted September 5, 2014 Como puedo hacer para reparar eso? Link to comment
Alexs Posted September 5, 2014 Share Posted September 5, 2014 A lo que me refiero es que sobra una coma. Link to comment
Recommended Posts