Jump to content

Pregunta [(?)]


Centauro

Recommended Posts

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

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
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
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") 

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

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
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 :S

Link to comment
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
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
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

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
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
  • Recently Browsing   0 members

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