Centauro Posted October 4, 2015 Share Posted October 4, 2015 Buenas a todos, bueno mi pregunta es como puedo obtener la munición del arma de un jugador, es que esto es necesario para mi en este momento ya que quiero realizar un script que cuando el jugador tenga 1 de municion no pueda disparar, esto como para que no se acaben sus armas. ¿Alguien sabe o me puede ayudar? Gracias. Link to comment
aka Blue Posted October 4, 2015 Share Posted October 4, 2015 Si no me equivoco, seria algo tal que asi: addEventHandler ( "onWeaponFire", getRootElement ( ) function ( thePlayer, weapon ) local ammo = getWeaponAmmo ( weapon ) if ( ammo == 1 ) then ouputChatBox ( "Solo tienes '1' de munición. No puedes disparar.", thePlayer, 255, 0, 0 ) end end ) Link to comment
Centauro Posted October 4, 2015 Author Share Posted October 4, 2015 Si no me equivoco, seria algo tal que asi: addEventHandler ( "onWeaponFire", getRootElement ( ) function ( thePlayer, weapon ) local ammo = getWeaponAmmo ( weapon ) if ( ammo == 1 ) then ouputChatBox ( "Solo tienes '1' de munición. No puedes disparar.", thePlayer, 255, 0, 0 ) end end ) No, ya lo probé corrigiendo el codigo y no funciona. Link to comment
aka Blue Posted October 4, 2015 Share Posted October 4, 2015 Prueba con getWeaponClipAmmo Link to comment
Centauro Posted October 4, 2015 Author Share Posted October 4, 2015 Prueba con getWeaponClipAmmo Esa no se ajusta a lo que quiero porque es la munición a disparar no toda completa Alguien puede ayudarme ? Link to comment
aka Blue Posted October 4, 2015 Share Posted October 4, 2015 Deberías leerte mejor la función... Link to comment
Centauro Posted October 4, 2015 Author Share Posted October 4, 2015 Deberías leerte mejor la función... Ya la leí, perdón si se me pasa algo, pero esa función devuelve lo que tenga para disparar no la munición completa del jugador. Link to comment
aka Blue Posted October 4, 2015 Share Posted October 4, 2015 Pues entonces utiliza getPedWeapon con getWeaponAmmo... Link to comment
alex17 Posted October 5, 2015 Share Posted October 5, 2015 tienes que usar esta funcion getPedAmmoInClip Link to comment
Centauro Posted October 6, 2015 Author Share Posted October 6, 2015 tienes que usar esta funcion getPedAmmoInClip No me sirve para lo que quiero porque eso devuelve la munición a disparar y necesito que me de toda la municion del jugador.. Link to comment
alex17 Posted October 6, 2015 Share Posted October 6, 2015 getPedAmmoInClip devuelve la municion que queda en el cartucho getPedTotalAmmo devuelve toda la municion total restante y si lo que quires es saver cuanta municion puede alacenar cada arma en su cartucho utiliza getWeaponProperty(weapon, "poor", "maximum_clip_ammo") Link to comment
Centauro Posted October 6, 2015 Author Share Posted October 6, 2015 getPedAmmoInClip devuelve la municion que queda en el cartuchogetPedTotalAmmo devuelve toda la municion total restante y si lo que quires es saver cuanta municion puede alacenar cada arma en su cartucho utiliza getWeaponProperty(weapon, "poor", "maximum_clip_ammo") Ya gracias, creo que getPedTotalAmmo es la indicada, y no lo que quiero hacer es que cuando un jugador tenga munición 1 no pueda disparar, solo que no se como hacerlo muy bien, eso intento. EDIT: Hasta ahora este es mi codigo, solo que no se como ejecutar la función, ni con que evento sea el indicado para que cuando llegue a 1 no pueda disparar. alguien puede ayudarme? function ammoF (thePlayer ) if ( thePlayer ) then local ammo = getPedTotalAmmo ( thePlayer ) if (ammo == 1) then setControlState ( thePlayer, "fire", false ) end end end Link to comment
alex17 Posted October 6, 2015 Share Posted October 6, 2015 tal ves esto funcione no estoy seguro addEventHandler( "onWeaponFire", root, function () if ( isElement( source ) ) and ( getElementType( source ) == "player" ) then local ammo = getPedTotalAmmo ( source ) if ammo == 1 then outputChatBox("solo tienes 1 de municion",source,255,0,0) cancelEvent() end end end ) Link to comment
Centauro Posted October 6, 2015 Author Share Posted October 6, 2015 tal ves esto funcione no estoy seguro addEventHandler( "onWeaponFire", root, function () if ( isElement( source ) ) and ( getElementType( source ) == "player" ) then local ammo = getPedTotalAmmo ( source ) if ammo == 1 then outputChatBox("solo tienes 1 de municion",source,255,0,0) cancelEvent() end end end ) Gracias, pero no, no funciona y no tira error Link to comment
Tomas Posted October 6, 2015 Share Posted October 6, 2015 No funciona, por que onWeaponFire, no es para player, si no que es para otro tipo.Client Side function onClientPlayerWeaponFireFunc(weapon, ammo, ammoInClip, hitX, hitY, hitZ, hitElement, startX, startY, startZ) if weapon and ammo then if ammo == 1 then setPedWeaponSlot ( localPlayer, 0 ) end end end addEventHandler("onClientPlayerWeaponFire", getLocalPlayer(), onClientPlayerWeaponFireFunc) El problema es que el evento no se puede cancelar, de esta forma. El evento se triggea al disparar, si antes de disparar tiene una bala ya no la tendrá cuando el evento sea triggeado, osea que eso no funcionaría Link to comment
Sasu Posted October 6, 2015 Share Posted October 6, 2015 En onClientPlayerWeaponFire en vez de ammo == 1 que la condicion sea ammo == 2. Link to comment
alex17 Posted October 7, 2015 Share Posted October 7, 2015 En onClientPlayerWeaponFire en vez de ammo == 1 que la condicion sea ammo == 2. eso solo funcionaria una ves ya que como dijo tomas el evento se triggea despues de disparar y la municion disminuiria 1 Link to comment
Centauro Posted October 7, 2015 Author Share Posted October 7, 2015 Que pruebe mi último script, él puede variar algunas si lo desea. Gracias por el codigo, lo probe y no sucede nada, es decir llego a 1 y no me cambia el slot o algo parecido y el arma se acaba como tal.. PD: Si lo hice con las armas restringidas por ti. Link to comment
Centauro Posted October 7, 2015 Author Share Posted October 7, 2015 Que pruebe mi último script, él puede variar algunas si lo desea. Gracias por el codigo, lo probe y no sucede nada, es decir llego a 1 y no me cambia el slot o algo parecido y el arma se acaba como tal.. PD: Si lo hice con las armas restringidas por ti. Usa este script, lo que pasa es lo siguiente, cuando la munición llega a 1, entonces este evento onClientPlayerWeaponFire, hace que se cambie el slot a 0, es decir a la mano, pero el arma, siempre existe en tus slot, cuando quieres cambiar de slot, con onClientPlayerWeaponSwitch te pone en la mano cualquier arma que tengas con munición mayor que 1. No te permite ponerte en mano cualquier arma que tenga munición 1 o 0. Si no hay arma que tenga munición mayor que 0, automáticamente el sistema te pone en el slot 0, que es la mano. Pero siempre, vas a tener el arma en tus slots, pero no la puedes usar o ponertela en la mano. Client side function onClientPlayerWeaponFireFunc(weapon, ammo, ammoInClip, hitX, hitY, hitZ, hitElement, startX, startY, startZ) if weapon and ammo then if ammo == 1 then setPedWeaponSlot ( localPlayer, 0 ) end end end addEventHandler("onClientPlayerWeaponFire", getLocalPlayer(), onClientPlayerWeaponFireFunc) WeaponsRestricted = {16, 17, 18, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43} function disableWeaponOnSwitch ( prevSlot, newSlot ) local weapon = getPedWeapon(getLocalPlayer(),newSlot) local ammoSlot = getPedTotalAmmo ( getLocalPlayer(), newSlot ) for k,v in ipairs(WeaponsRestricted) do if (ammoSlot == 1) and (weapon == v) then local h = 0 local dis = 0 repeat dis = 0 h = h + 1 local weapon2 = getPedWeapon(getLocalPlayer(), h) local ammoSlot2 = getPedTotalAmmo ( getLocalPlayer(), h) if ammoSlot2 > 1 then setPedWeaponSlot ( localPlayer, h ) dis = 1 end if (h == 12) and (ammoSlot2 <= 1) then setPedWeaponSlot ( localPlayer, 0 ) dis = 1 end until dis == 1 end end end addEventHandler ( "onClientPlayerWeaponSwitch", getRootElement(), disableWeaponOnSwitch ) Funciona a la perfección, muchas gracias, pero no puedo hacer que en vez de que le cambie un slot si pueda ver su arma, mas no pueda dispararla? Link to comment
aka Blue Posted October 7, 2015 Share Posted October 7, 2015 Lo suyo sería comprobar que al disparar, si tiene 1 de munición no le deje. Sería algo como lo que te puse al principio. Link to comment
Tomas Posted October 7, 2015 Share Posted October 7, 2015 Ahora, hay otra forma, en la cual, debes remover el click cuando tengas en tu mano un arma, que tenga munición igual a 1. bind 2 fire, izi Link to comment
UserToDelete Posted October 9, 2015 Share Posted October 9, 2015 El hecho de cancelar un evento en server side, solo significa que no se sincroniza, pero no que se gaste, Debes hacerlo en client side creo yo. o sino, cancelar en servidor, y giveWeapon No estoy seguro de si se puede cancelar este evento addEventHandler("onClientPlayerWeaponFire", root, function () if getPedTotalAmmo(localPlayer) == 1 then outputChatBox("Solo tienes 1 bala") cancelEvent() end end ) Link to comment
Enargy, Posted October 11, 2015 Share Posted October 11, 2015 type = { [22] = "handguns", [23] = "handguns", [24] = "handguns", [25] = "shotguns", [26] = "shotguns", [27] = "shotguns", [28] = "sub-machine_guns", [29] = "sub-machine_guns", [32] = "sub-machine_guns", [30] = "machine_guns", [31] = "machine_guns", [33] = "rifles", [34] = "rifles", [35] = "heavy_weapons", [36] = "heavy_weapons", [37] = "heavy_weapons", [38] = "heavy_weapons", } function getWeaponCategory( id ) local myWeapon = getPlayerWeapon( localPlayer ) if ( myWeapon ) then return type[id] end return false end weapons = { ["handguns"] = true,["shotguns"] = true,["sub-machine_guns"] = true, ["machine_guns"] = true,["rifles"] = true,["heavy_weapons"] = true, } function blockWeapon( ) if (not weapons[getWeaponCategory( getPlayerWeapon(localPlayer) )] ) then toggleControl("fire", true) return end if ( getPedTotalAmmo( getLocalPlayer() ) == 1 ) then toggleControl("fire", false) else toggleControl("fire", true) end end addEventHandler( "onClientPlayerWeaponFire", root, blockWeapon ) addEventHandler( "onClientPlayerWeaponSwitch", root, blockWeapon ) addEventHandler( "onClientResourceStop", resourceRoot, function() toggleControl("fire", true) end ) Link to comment
Recommended Posts