Приветствую уважаемые пользователи сайта 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
Спасибо за внимание.
|