Jump to content

Second Rhino


Xwad

Recommended Posts

you mean like this? i tryed this but it does not shoot only the green point works

  
-- *** THESE ARE THE SETTINGS. MODIFY IN META.XML ***
 
reloadTime = 6000       -- for Rhino
reloadTimeHydra = 4000  -- for Hydra
reloadTimeHunter = 3000 -- for Hunter
range = 2               -- To increase range, set this value to 1. To decrease range, use 3. My code is optimized for 2.
 
--*** BETTER NOT TOUCH BELOW ***
 
event = nil
fired = false
drawHandler = nil
armedVehicles = {[425]=true, [520]=true, [601]=true}
w, h = guiGetScreenSize()
height = nil
endY = nil
r, g = 255, 0
time = 0
 
function getPositionFromElementOffset(element,offX,offY,offZ)
    local m = getElementMatrix ( element )  -- Get the matrix
    local x = offX * m[1][1] + offY * m[2][1] + offZ * m[3][1] + m[4][1]
    local y = offX * m[1][2] + offY * m[2][2] + offZ * m[3][2] + m[4][2]
    local z = offX * m[1][3] + offY * m[2][3] + offZ * m[3][3] + m[4][3]
    return x, y, z
end
 
function onStart()
    height = math.ceil(h / 50)
    if height < 19 then
        height = 19
    end
    endY = math.ceil((h/100)*6)
    corona = createMarker (0, 0, -10, "corona", 1.0, 200, 100, 0, 150)
    bindKey ( "mouse1", "down", toggleRhino )
    bindKey("vehicle_fire", "down", toggleHunter)
    bindKey("vehicle_secondary_fire", "down", toggleHunter)
    color = tocolor(255, 255, 255, 200)
end
addEventHandler("onClientResourceStart", resourceRoot, onStart)
 
function entering( thePlayer, seat )
if thePlayer == localPlayer then
    toggleControl ( "vehicle_fire", true )
    toggleControl ( "vehicle_secondary_fire", true )
    local model = getElementModel ( source )
    if model == 601 or model == 425 or model == 520 then
        drawHandler = addEventHandler("onClientRender", root, reloadFinished)
    end
    if model == 601 then
        toggleControl ( "vehicle_fire", false )
        addEventHandler("onClientRender", root, marker)
        event = true
    end
end
end
addEventHandler("onClientVehicleEnter", getRootElement(), entering)
 
function exit( thePlayer, seat )
if thePlayer == localPlayer then
    local model = getElementModel ( source )
    if model == 601 then
        if event ~= nil then
            removeEventHandler("onClientRender", root, marker)
            event = nil
        end
        toggleControl ( "vehicle_fire", true )
    end
end
end
addEventHandler("onClientVehicleExit", getRootElement(), exit)
 
addEventHandler("onClientElementDestroy", getRootElement(), function ()
if (getElementModel(source) == 601 then
    if event ~= nil then
        removeEventHandler("onClientRender", root, marker)
        event = nil
    end
    toggleControl ( "vehicle_secondary_fire", true )
end
end)
 
function wasted()
    if source == localPlayer then
        if event ~= nil then
            removeEventHandler("onClientRender", root, marker)
            event = nil
        end
        toggleControl ( "vehicle_fire", true )
        toggleControl ( "vehicle_secondary_fire", true )
    end
end
addEventHandler ( "onClientPlayerWasted", getLocalPlayer(), wasted )
 
function clientResourceStop()
    toggleControl ( "vehicle_fire", true )
    toggleControl ( "vehicle_secondary_fire", true )
end
addEventHandler( "onClientResourceStop", getResourceRootElement(getThisResource()), clientResourceStop )
 
function toggleRhino()
if fired == false then
    if isPedInVehicle ( localPlayer ) and not isCursorShowing() then
        local veh = getPedOccupiedVehicle ( localPlayer )
        if (veh) then
            if ( getElementModel ( veh ) == 601 ) then
                fired = true
                local turX, turY, turZ = getElementPosition(veh)
                local cx,cy,cz = getVehicleComponentPosition( veh, "misc_a" )
                local x, y, z = getVehicleComponentPosition( veh, "misc_c" )
                local barrelX, barrelY, barrelZ = getPositionFromElementOffset(veh,cx,cy,cz)
                local muzzleX, muzzleY, muzzleZ = getPositionFromElementOffset(veh,x,y,z)
                local velX = (muzzleX - barrelX) /range
                local velY = (muzzleY - barrelY) /range
                local velZ = (muzzleZ - barrelZ) /range
                local vx, vy, vz = getElementVelocity(veh)
                setElementVelocity (veh, vx+(((velX/3)*(-1))/50), vy+(((velY/3)*(-1))/50), vz+(((velZ/3)*(-1))/50) )
                bullet = createProjectile(veh, 21, muzzleX, muzzleY, muzzleZ, 1, nil, 0, 0, 0, velX, velY, velZ)
                createExplosion(turX, turY, turZ-10, 8, false, 0.5, false)
                removeEventHandler("onClientRender", root, reloadFinished)
                drawHandler = nil
                start = getTickCount()
                drawHandler = addEventHandler("onClientRender", root, reload)
                time = 6000
                soundTimer = setTimer(function()
                    local sound = playSound("reload.mp3")
                    setSoundVolume(sound, 0.1)
                    end,
                (reloadTime-1000), 1)
            end
        end
    end
end
end
 
function toggleHunter(control)
if isPedInVehicle(localPlayer) then
local model = getElementModel(getPedOccupiedVehicle(localPlayer))
if model == 425 and fired == false and control == "vehicle_fire" then
    fired = true
    setTimer(function()
        toggleControl ( "vehicle_fire", false )
    end, 100, 1)
    setTimer(function()
        toggleControl ( "vehicle_fire", true )
        fired = false
    end, reloadTimeHunter, 1)
    removeEventHandler("onClientRender", root, reloadFinished)
    drawHandler = nil
    start = getTickCount()
    drawHandler = addEventHandler("onClientRender", root, reload)
    time = 3000
elseif model == 520 and fired == false and control == "vehicle_secondary_fire" then
    fired = true
    setTimer(function()
        toggleControl ( "vehicle_secondary_fire", false )
    end, 100, 1)
    setTimer(function()
        toggleControl ( "vehicle_secondary_fire", true )
        fired = false
    end, reloadTimeHydra, 1)
    removeEventHandler("onClientRender", root, reloadFinished)
    drawHandler = nil
    start = getTickCount()
    drawHandler = addEventHandler("onClientRender", root, reload)
    time = 4000
end
end
end
 
function reload()
if not isPedInVehicle(localPlayer) then
    removeEventHandler("onClientRender", root, reload)
    drawHandler = nil
end
setMarkerColor ( corona, 255, 0, 0, 100 )
local getTime = (getTickCount()) - start
local height = math.ceil(h / 50)
if height < 19 then
    height = 19
end
dxDrawRectangle (0, h-endY-height-6, height+6, endY, tocolor(0,0,0,150), false)
local endY = math.ceil((h/100)*6)
endY = endY - 4
    if getTime <= time then
        endY = (getTime/time)*endY
    else
        removeEventHandler("onClientRender", root, reload)
        drawHandler = nil
        drawHandler = addEventHandler("onClientRender", root, reloadFinished)
        if getElementModel(getPedOccupiedVehicle(localPlayer)) ~= 601 then
            local sfx = playSFX ( "genrl", 136, 72 )
            setSoundVolume (sfx, 1)
        end
        setMarkerColor ( corona, r, g, 0, 150 )
        start = nil
        fired = false
    end
    dxDrawRectangle (2, h-endY-height-8, height+2, endY, tocolor(220,0,0,150), false)
end
 
function reloadFinished()
if not isPedInVehicle(localPlayer) then
    removeEventHandler("onClientRender", root, reloadFinished)
    drawHandler = nil
else
    dxDrawRectangle (0, h-endY-height-6, height+6, endY, tocolor(0,0,0,150), false)
    dxDrawRectangle (2, h-endY-height-4, height+2, endY-4, tocolor(220,0,0,150), false)
end
end
 
function marker()
if not isPedInVehicle(localPlayer) then
    removeEventHandler("onClientRender", getRootElement(), marker)
    if isTimer(soundTimer) then
        killTimer(soundTimer)
    end
    fired = false
    drawHandler = nil
    setElementPosition (corona, 0, 0, -10)
else
    local vx, vy, vz = nil, nil, nil
    local cx, cy, cz = nil, nil, nil
    local veh = getPedOccupiedVehicle ( localPlayer )
    if veh then
        local x, y, z = getVehicleComponentPosition( veh, "misc_a" )
        cx, cy, cz = getPositionFromElementOffset( veh, x, y, z )
        x, y, z = getVehicleComponentPosition( veh, "misc_c" )
        vx, vy, vz = getPositionFromElementOffset( veh, x, y, z )
        if vx ~= nil then
        local velX = (vx - cx) /range
        local velY = (vy - cy) /range
        local velZ = (vz - cz) /range
       
        local vx1, vy1 = cx + (velX * 50 * 0.1), cy + (velY * 50 * 0.1)
        local vx2, vy2 = cx + (velX * 50 * 0.2), cy + (velY * 50 * 0.2)
        local vx3, vy3 = cx + (velX * 50 * 0.3), cy + (velY * 50 * 0.3)
        local vx4, vy4 = cx + (velX * 50 * 0.5), cy + (velY * 50 * 0.5)
        local vx5, vy5 = cx + (velX * 50 * 0.6), cy + (velY * 50 * 0.6)
        local vx6, vy6 = cx + (velX * 50 * 0.7), cy + (velY * 50 * 0.7)
        local vx7, vy7 = cx + (velX * 50 * 0.-- s8) -->, cy + (velY * 50 * 0.
 
        local m1 = cz + (velZ * 50 * 0.1) - ((getGravity()*2400*0.01)/2)
        local m2 = cz + (velZ * 50 * 0.2) - ((getGravity()*2400*0.04)/2)
        local m3 = cz + (velZ * 50 * 0.3) - ((getGravity()*2400*0.09)/2)
        local m4 = cz + (velZ * 50 * 0.5) - ((getGravity()*2400*0.25)/2)
        local m5 = cz + (velZ * 50 * 0.6) - ((getGravity()*2400*0.36)/2)
        local m6 = cz + (velZ * 50 * 0.7) - ((getGravity()*2400*0.49)/2)
        local m7 = cz + (velZ * 50 * 0.-- s8) --> - ((getGravity()*2400*0.64)/2)
       
       
Link to comment

Try CODE

bindKey("Button that you want him to hit a rocket", "down",  
local veh = getPedOccupiedVehicle ( localPlayer ) 
if vehicle and getElementModel(vehicle) == ID then 
 local x, y, z = getElementPosition ( localPlayer) 
 createProjectile(getLocalPlayer(),19,x,y,z,200) then  
[thePlayer] = setTimer(function() end,1000,1,thePlayer) 
    end 
 end 

Link to comment
  • 2 weeks later...

ProcessLineOfSight with custom effects and all that stuff is a dirty workaround imho.

And not as precise as necessary.

Explosions do not cause damage to the rhino.

Fire does. You would need to use onClientExplosion and determine if a tank/swat is within a certain distance to this explosion and apply damage according to its distance from explosion center. Still there is the problem that explosions dont even trigger the event when they are not streamed in so even this approach needs testing. Server side onExplosion would fit perfectly but does not even exist and you would have to sync it manually.

Oh, and there is another approach to do this with high precision by using Satchels and custom effects.

Xwad, look my PM for your question about the range.

Link to comment

You need to use something lower than 2 to increase the range. 3 decreases the range (I know, it doesn't make sense, but that's how it's calculated).

If you want to get the same range for both vehicles I need to write a small workaround because the total range depends on the barrel length of your tank. Short barrel = low range. And SWAT has a very short gun.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

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