Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- MP-360 FLAMETHROWER ( SOURCE CODE )
- -- AUTHOR : ALTAMURENZA
- --[[
- ALREADY DONE:
- [+] Moving fire particles
- [+] Vertical directions by mouse/stick
- [+] Burnable dynamic objects
- [+] Explosion for any vehicle
- [+] Purchase-able weapon from store
- [+] Fuel gauge on the right screen
- [+] Trouble meter effect on ped, object, and vehicle
- NEED TO BE DONE:
- [+] A worthy opponent for this weapon
- ]]
- -- GLOBAL ENV
- _G.ANIMATION = {}
- _G.OBJ_EFF = {}
- _G.VEH_EFF = {}
- -- LOCAL ENV
- local ANIM_SPEED_PER_FRAME = 5
- local ANIM_DELAY_PER_FRAME = 0
- local ANIM_RANGE = 10
- -- NEW GLOBAL FUNCTION
- _G.SHOP_ADD = _G.ShopAddItem
- _G.ShopAddItem = function(ZERO, ID, POINT, STOCK, PRICE, FUNC, AMOUNT)
- _G.SHOP_ADD(ZERO, ID, POINT, STOCK, PRICE, FUNC, AMOUNT)
- if ID == 309 then
- _G.BUY_MP360_FT = function()
- local POTATO = PedGetAmmoCount(gPlayer, 316)
- GiveWeaponToPlayer(396, false)
- if PedGetAmmoCount(gPlayer, 305) == 1 then
- ItemSetCurrentNum(316, POTATO > 0 and POTATO or 1)
- end
- PlayerSetScriptSavedData(90, 60)
- end
- _G.SHOP_ADD(0, 396, POINTLIST._STORE_DT_COMIC_ITEM5, PlayerGetScriptSavedData(90) >= 1 and 0 or 1, 5000, BUY_MP360_FT, 12)
- end
- end
- _G.STAT_ADD = _G.StatAddToInt
- _G.StatAddToInt = function(STAT)
- if STAT == 3 then
- PlayerSetScriptSavedData(90, 0)
- end
- _G.STAT_ADD(STAT)
- end
- -- FRAMEWORK
- function FRAMEWORK()
- while true do
- Wait(0)
- -- ANIMATION
- for I, V in ipairs(ANIMATION) do
- if EffectIsRunning(V[1]) then
- if V[4] < GetTimer() then
- EffectSetPosition(V[1], V[2][V[3]][1], V[2][V[3]][2], V[2][V[3]][3] + 0.5)
- V[3], V[4] = V[3] + ANIM_SPEED_PER_FRAME, GetTimer() + ANIM_DELAY_PER_FRAME
- end
- if V[3] < table.getn(V[2]) then
- for K, PED in {PedFindInAreaXYZ(0, 0, 0, 99999)} do
- if PedIsValid(PED) and PED ~= V[5] and PedGetHealth(PED) > 0 and PedIsInAreaXYZ(PED, V[2][V[3]][1], V[2][V[3]][2], V[2][V[3]][3] + 0.5, 1.5) then
- if not PedMePlaying(PED, "HitTree") and math.random(1, 10) == 5 then
- PedPlayHitReaction(PED)
- end
- PedApplyDamage(PED, 1)
- if PedIsValid(PedGetTargetPed(V[5])) and PedGetTargetPed(V[5]) == PED then
- PedCreateStimulus(V[5], PED, 4)
- end
- end
- end
- local OBJ_LIST = {ObjectFindInArea(V[2][V[3]][1], V[2][V[3]][2], V[2][V[3]][3] + 0.5, 0.3)}
- if OBJ_LIST[1] then
- for INDEX = 2, table.getn(OBJ_LIST) do
- local ALREADY_HAVE_ONE = false
- for OBJECT, TABLE in pairs(OBJ_EFF) do
- if OBJECT and string.format("%.1f", TABLE[2]) == string.format("%.1f", V[2][V[3]][1]) and string.format("%.1f", TABLE[3]) == string.format("%.1f", V[2][V[3]][2]) and string.format("%.1f", TABLE[4]) == string.format("%.1f", V[2][V[3]][3] + 0.5) then
- ALREADY_HAVE_ONE = true
- break
- end
- end
- if not ALREADY_HAVE_ONE and not OBJ_EFF[OBJ_LIST[INDEX]] then
- PedCreateStimulus(V[5], OBJ_LIST[INDEX], 2)
- OBJ_EFF[OBJ_LIST[INDEX]] = {nil, V[2][V[3]][1], V[2][V[3]][2], V[2][V[3]][3] + 0.5, AreaGetVisible(), 15, GetTimer() + math.random(3000, 5000)}
- end
- end
- end
- local VEH_LIST = VehicleFindInAreaXYZ(V[2][V[3]][1], V[2][V[3]][2], V[2][V[3]][3] + 0.5, 1.5)
- if type(VEH_LIST) == "table" then
- for ID, VEH in ipairs(VEH_LIST) do
- if VehicleIsValid(VEH) and not VEH_EFF[VEH] then
- local ALREADY_HAVE_ONE = false
- for VEHICLE, TABLE in pairs(VEH_EFF) do
- if VehicleIsValid(VEHICLE) and string.format("%.1f", TABLE[2]) == string.format("%.1f", V[2][V[3]][1]) and string.format("%.1f", TABLE[3]) == string.format("%.1f", V[2][V[3]][2]) and string.format("%.1f", TABLE[4]) == string.format("%.1f", V[2][V[3]][3] + 0.5) then
- ALREADY_HAVE_ONE = true
- break
- end
- end
- if not ALREADY_HAVE_ONE then
- PedCreateStimulus(V[5], VEH, 2)
- VEH_EFF[VEH] = {nil, V[2][V[3]][1], V[2][V[3]][2], V[2][V[3]][3] + 0.5, AreaGetVisible(), 15, GetTimer() + math.random(6000, 10000)}
- end
- end
- end
- end
- else
- if EffectIsRunning(V[1]) then
- EffectSlowKill(V[1], 1, true)
- end
- table.remove(ANIMATION, I)
- end
- else
- table.remove(ANIMATION, I)
- end
- end
- -- OBJECT EFFECT
- for OBJ, TABLE in pairs(OBJ_EFF) do
- if not TABLE[1] or not EffectIsRunning(TABLE[1]) then
- TABLE[1] = EffectCreate("GymFire", TABLE[2], TABLE[3], TABLE[4])
- else
- if TABLE[7] < GetTimer() then
- EffectSlowKill(TABLE[1], 2, true)
- ObjectBreak(OBJ)
- OBJ_EFF[OBJ] = nil
- end
- for I, PED in {PedFindInAreaXYZ(0, 0, 0, 999999)} do
- if PedIsValid(PED) and PedGetHealth(PED) > 0 and PedIsInAreaXYZ(PED, TABLE[2], TABLE[3], TABLE[4], 2) then
- PedApplyDamage(PED, 0.1)
- end
- end
- end
- if AreaGetVisible() ~= TABLE[5] or not PedIsInAreaObject(gPlayer, OBJ, 0, TABLE[6], 0) or ObjectIsDestroyed(OBJ) then
- if EffectIsRunning(TABLE[1]) then
- EffectSlowKill(TABLE[1], 2, true)
- end
- OBJ_EFF[OBJ] = nil
- end
- end
- -- VEHICLE EFFECT
- for VEH, TABLE in pairs(VEH_EFF) do
- if VehicleIsValid(VEH) then
- local VX, VY, VZ = VehicleGetPosXYZ(VEH)
- if not TABLE[1] or not EffectIsRunning(TABLE[1]) then
- TABLE[1] = EffectCreate("GymFire", TABLE[2], TABLE[3], TABLE[4])
- else
- for I, PED in {PedFindInAreaXYZ(0, 0, 0, 999999)} do
- if PedIsValid(PED) then
- if PedIsInVehicle(PED, VEH) then
- PedExitVehicle(PED)
- else
- if PED ~= gPlayer and PedGetLastVehicle(PED) == VEH then
- PedStop(PED)
- PedClearObjectives(PED)
- PedMakeAmbient(PED)
- PedFlee(PED)
- end
- end
- if PedIsInAreaXYZ(PED, VX, VY, VZ + 0.5, 3) then
- if PedGetHealth(PED) > 0 then
- PedApplyDamage(PED, 0.1)
- end
- if PED == gPlayer and PedMePlaying(gPlayer, "MoveToVehicle") then
- PlayerStopAllActionControllers()
- end
- end
- end
- end
- local BIKE = {
- [272] = true,
- [273] = true,
- [274] = true,
- [279] = true,
- [277] = true,
- [278] = true,
- [280] = true,
- [281] = true,
- [282] = true,
- [283] = true,
- }
- if BIKE[VehicleGetModelId(VEH)] then
- EffectSetPosition(TABLE[1], VX, VY, VZ + 0.5)
- else
- VehicleEnableEngine(VEH, false)
- VehicleSetAccelerationMult(VEH, 0)
- end
- if TABLE[7] < GetTimer() and not PedIsInVehicle(gPlayer, VEH) then
- EffectSlowKill(TABLE[1], 2, true)
- local EXPLOSION = EffectCreate("BigExplosion", VX, VY, VZ + 0.5)
- local DESTROYED = EffectCreate("CarDestroyed", VX, VY, VZ + 0.5)
- for I, PED in {PedFindInAreaXYZ(0, 0, 0, 999999)} do
- if PedIsValid(PED) and PedIsInAreaXYZ(PED, VX, VY, VZ + 0.5, BIKE[VehicleGetModelId(VEH)] and 2.25 or 4.25) then
- PedApplyDamage(PED, PedGetHealth(PED) > PedGetMaxHealth(PED) and PedGetHealth(PED) + 1 or PedGetMaxHealth(PED) + 1)
- PedPlayHitReaction(PED)
- end
- end
- if VehicleIsValid(VEH) then
- VehicleDelete(VEH)
- end
- VEH_EFF[VEH] = nil
- end
- end
- if AreaGetVisible() ~= TABLE[5] or not PedIsInAreaXYZ(gPlayer, TABLE[2], TABLE[3], TABLE[4], TABLE[6]) then
- if EffectIsRunning(TABLE[1]) then
- EffectSlowKill(TABLE[1], 2, true)
- end
- if VehicleIsValid(VEH) then
- VehicleDelete(VEH)
- end
- VEH_EFF[VEH] = nil
- end
- else
- if EffectIsRunning(TABLE[1]) then
- EffectKill(TABLE[1])
- end
- VEH_EFF[VEH] = nil
- end
- end
- end
- end
- -- MAIN FUNCTION
- function main()
- while not SystemIsReady() or AreaIsLoading() do
- Wait(0)
- end
- -- REQUIRED THREAD
- CreateThread("FRAMEWORK")
- -- FIRE TIMER
- local TIMER = GetTimer()
- -- VERTICAL DIR
- local VER_DIR = 0
- while true do
- Wait(0)
- -- POSITION
- local X, Y, Z = PlayerGetPosXYZ()
- -- CHECK CONDITION
- local IS_POSSIBLE = true
- local NODE_LIST = {
- "Block", "Blocks", "BlockHits", "HitTree", "Vehicles", "Attacks",
- }
- for K, V in ipairs(NODE_LIST) do
- if PedMePlaying(gPlayer, V) or PedIsValid(PedGetGrappleTargetPed(gPlayer)) then
- IS_POSSIBLE = false
- break
- end
- end
- -- FLAMETHROWER
- if PlayerHasWeapon(396) then
- -- FUEL SCRIPT
- if not PedIsValid(FUEL_PED) then
- FUEL_PED = PedCreateXYZ(136, X, Y, Z + 12)
- PedSetEffectedByGravity(FUEL_PED, false)
- PedSetStationary(FUEL_PED, true)
- PedSetAsleep(FUEL_PED, true)
- PedSetInvulnerable(FUEL_PED, true)
- PedMakeTargetable(FUEL_PED, false)
- PedSetHealth(FUEL_PED, PlayerGetScriptSavedData(90))
- PedSetMaxHealth(FUEL_PED, 60)
- PedShowHealthBar(FUEL_PED, true, "N_FUEL", false)
- FUEL_DECREASE_TIMER = GetTimer()
- else
- PedSetPosXYZ(FUEL_PED, X, Y, Z + 12)
- PedSetHealth(FUEL_PED, PlayerGetScriptSavedData(90))
- end
- -- FIRE SCRIPT
- if IS_POSSIBLE then
- if IsButtonPressed(12, 0) then
- VER_DIR = VER_DIR + GetStickValue(19, 0)
- VER_DIR = VER_DIR > 0.3 and 0.3 or (VER_DIR < -0.1 and -0.1 or VER_DIR)
- if TIMER < GetTimer() then
- local XYZ = {}
- for CURRENT_DIST = 2, ANIM_RANGE do
- for INTEGER = 1, 10 do
- local PX, PY, PZ = PedGetOffsetInWorldCoords(gPlayer, 0, CURRENT_DIST + INTEGER/10, 0)
- HEIGHT = VER_DIR * (CURRENT_DIST + INTEGER/10)
- PZ = PZ + HEIGHT
- local TARGET = PedGetTargetPed(gPlayer)
- if PedIsValid(TARGET) then
- local TX, TY, TZ = PedGetPosXYZ(TARGET)
- GAP = (PZ - TZ) / (CURRENT_DIST + INTEGER/10)
- PZ = PZ + GAP
- end
- table.insert(XYZ, {PX, PY, PZ})
- end
- end
- local EFFECT = EffectCreate("Gymfire", XYZ[1][1], XYZ[1][2], XYZ[1][3] + 0.5)
- table.insert(ANIMATION, {EFFECT, XYZ, 2, GetTimer() + ANIM_DELAY_PER_FRAME, gPlayer})
- TIMER = GetTimer() + 100
- end
- if FUEL_DECREASE_TIMER + 1000 < GetTimer() then
- PlayerSetScriptSavedData(90, PlayerGetScriptSavedData(90) - 1)
- FUEL_DECREASE_TIMER = GetTimer()
- end
- if CameraGetActive() == 13 then
- CameraSetActive(1, 0.5, false)
- end
- elseif IsButtonBeingReleased(12, 0) then
- PlayerStopAllActionControllers()
- TIMER = GetTimer() + 0
- end
- end
- else
- if PedIsValid(FUEL_PED) then
- PedDelete(FUEL_PED)
- end
- end
- -- ETC
- if PlayerGetScriptSavedData(90) >= 1 then
- -- FIXED WILD EDITS ( MOSTLY FROM 100% SAVEGAME ON INTERNET, BEWARE!! )
- if PlayerGetScriptSavedData(90) > 60 then
- PlayerSetScriptSavedData(90, 60)
- end
- -- FIXED SPUD_GUN
- if ItemGetCurrentNum(316) == 0 then
- GiveWeaponToPlayer(396, false)
- ItemSetCurrentNum(316, 1)
- PedDestroyWeapon(gPlayer, 305)
- end
- else
- -- REMOVE FLAMETHROWER
- if ItemGetCurrentNum(396) ~= 0 then
- PedDestroyWeapon(gPlayer, 396)
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement