Главная » Статьи » Туториал

Как добавить подствольный гранатомёт.

Приветствую уважаемые пользователи сайта mtadayz.ucoz.net

Думаю, многие хотели бы добавить к себе на сервер подствольный гранатомёт. Сейчас объясню как это сделать.

 

Сначала создаём файл в папке DayZ под названием grenadethrower.lua и вставляем код:

local throwInMinute = 30  -- максимальное количество выстрелов за минуту
local change_fire_button = "G" -- кнопка на которую будет меняться режим стрельбы

grenadesConfig = { -- ["Название оружия"] = { grenadeName = "Название гранаты" },
    ["М4А1 CCO"] = { grenadeName = "Оск. граната M67" },
}


local throwAvail = true

function throwGrenade()
    if not throwAvail or not getControlState ( "aim_weapon" ) then return true end
    local weaponID = getPedWeapon ( localPlayer )
    local weapon2 = getElementData ( localPlayer, "currentweapon_1")
    local weapon3 = getElementData ( localPlayer, "currentweapon_2")
    local selectedWeapon = getElementData (localPlayer, "selectedWeapon")
    if weapon2 == getElementData ( localPlayer, "usingGrenadeThrower" ) then
        weapon = weapon2
    elseif weapon3 == getElementData ( localPlayer, "usingGrenadeThrower" ) then
        weapon = weapon3
    else
        unbindKey ( "mouse1", "down", throwGrenade )
        return true
    end
    if selectedWeapon ~= getElementData ( localPlayer, "usingGrenadeThrower" ) then return true end
    if weaponID == 0 then return true end
    if grenadesConfig[weapon] then
        if ( getElementData ( localPlayer, grenadesConfig[weapon].grenadeName ) or 0 ) > 0 then
            throwAvail = false
            setElementData ( localPlayer, grenadesConfig[weapon].grenadeName, ( getElementData ( localPlayer, grenadesConfig[weapon].grenadeName ) or 1 ) - 1 )
            local xm, ym, zm = getPedWeaponMuzzlePosition ( localPlayer )
            local infx,infy,infz = getPositionInfrontOfLP ()
            local x, y, z, lx, ly, lz, roll, dof = getCameraMatrix ()
            local velx, vely = (infx-x)*0.2, (infy-y)*0.2
            createProjectile(getLocalPlayer(),16,xm,ym,zm-0.05,0,nil,0,0,0,velx, vely,lz-z+0.1)
            local uSound = playSound3D( 'wpn_grenadelauncher_fire_3d_01.wav', x, y, z )
            setTimer ( function () throwAvail = true end, 60/throwInMinute*1000, 1)
            --setControlState ( "aim_weapon", false)
            --triggerServerEvent ('forceToReloadWeapon', localPlayer )
        else
            triggerEvent ("displayClientInfo", getLocalPlayer(),"Inventory","У вас нет гранат!",255,22,0)
        end
    end
end

function getPositionInfrontOfLP()
    local posX, posY, posZ = getElementPosition(localPlayer)
    local _, _, rotation = getElementRotation(localPlayer)
    rotation = rotation-15
    posX = ( posX - math.sin(math.rad(rotation)) )
    posY = ( posY + math.cos(math.rad(rotation)) )
    return posX, posY, posZ
end

function playerUsedGrenadeThrower ( player )
    if isElement ( player ) then
        if getElementData ( player, "usingGrenadeThrower" ) and ( getElementData ( player, "usingGrenadeThrower" ) == getElementData ( localPlayer, "currentweapon_1") or getElementData ( player, "usingGrenadeThrower" ) == getElementData ( localPlayer, "currentweapon_2") )then
            return true
        else
            return false
        end
    else
        return false
    end
end

function changeFiringMode ()
    if getControlState ( "aim_weapon" ) then
        if getElementData ( localPlayer, "usingGrenadeThrower" ) then
            setElementData ( localPlayer, "usingGrenadeThrower", false )
            unbindKey ( "mouse1", "down", throwGrenade )
            toggleControl ( "fire", true )
            playSound ("itm_grenade_up.wav")
        else
            local weapon = getElementData ( localPlayer, "selectedWeapon") or "no"
            if weapon and grenadesConfig[weapon] and ( getElementData ( localPlayer, grenadesConfig[weapon].grenadeName ) or 0 ) > 0 then
                setElementData ( localPlayer, "usingGrenadeThrower", weapon )
                bindKey ( "mouse1", "down", throwGrenade )
                toggleControl ( "fire", false )
                playSound ("itm_grenade_up.wav")
            else
                triggerEvent ("displayClientInfo", getLocalPlayer(),"Inventory","У вас нет гранат!",255,22,0)
            end
        end
    end
end

bindKey ( change_fire_button, "up", changeFiringMode )

 

Где M4A1 CCO - название вашего оружия, на который хотите установить подствольный гранатомёт.

      Оск. граната М67 - название вашей гранаты.

Также можно добавить подствольный гранатомёт на несколько оружий.

 

Открываем файл meta.xml и вставляем:

 <script src="grenadethrower.lua" type="client" cache="false"/>
 <file src="itm_grenade_up.wav" />
 <file src="wpn_grenadelauncher_fire_3d_01.wav"/>

 

Далее переходим в файл survivorSystem.lua и ищем строчку:

elementWeaponBack = {}
function weaponSwitchBack ( previousWeaponID, currentWeaponID )

 

Над ними мы вставляем:

elementWeaponRaplace = {}
function weaponReplace ( previousWeaponID, currentWeaponID )
--local source = getRootElement()
local weapon1 = getElementData(source,"currentweapon_1")
local weapon2 = getElementData(source,"currentweapon_2")
local weapon3 = getElementData(source,"currentweapon_3")

if not weapon1 and not weapon2 and not weapon3 then return end
local ammoData1,weapID1 = getWeaponAmmoType(weapon1)
local ammoData2,weapID2 = getWeaponAmmoType(weapon2)
local ammoData3,weapID3 = getWeaponAmmoType(weapon3)
local x,y,z = getElementPosition(source)
local rx,ry,rz = getElementRotation(source)
            if currentWeaponID == weapID2 then
                setElementData ( source, "selectedWeapon",weapon2)
            elseif currentWeaponID == weapID1 then
                setElementData ( source, "selectedWeapon",weapon1)
            elseif currentWeaponID == weapID3 then
                setElementData ( source, "selectedWeapon",weapon3)
            end
            if getElementData ( source, "usingGrenadeThrower" ) then
                toggleControl ( source, 'fire', true )
                setElementData ( source, "usingGrenadeThrower", false )
            end
end
addEventHandler ( "onPlayerWeaponSwitch", getRootElement(), weaponReplace )

 

Ищем далее:

function rearmPlayerWeapon (weaponName,slot)

 

И под строчкой:

 setElementData(source,"currentweapon_"..slot,weaponName)

 

Вставляем:

setElementData ( source, "selectedWeapon",weaponName)

 

На этом туториал окончен. Чтобы стрелять из подствольного гранатомёта, мы выбираем оружие, на которое у нас установлен подствольный гранатомёт, нажимаем G (меняем режим), прицеливаемся и пускаем гранаты из подствольника.

Ах да, чуть не забыл, вот ссылка на звуки подствольного гранатомёта http://mtadayz.ucoz.net/down/script/soundgrenad.zip

Спасибо за внимание.

Категория: Туториал | Добавил: Middl (26.01.2015)
Просмотров: 3989 | Комментарии: 8 | Теги: подствольный, скрипт, FAQ, Звуки, GTA, ГРАНАТОМЁТ, как, DayZ, MTA, установить | Рейтинг: 1.0/1
Всего комментариев: 1
1 | CepseuBOP пишет: | 31.01.2015 | 15:26 Спам Страница с комментарием |
Оо спасибо cool
+ (0) -
Имя *:
Email *:
Код *: