Как сделать базу в мта dayz
Установка модификации DayZ на сервер MTA достаточно простая. Для начала нужно скачать сам мода.
Установка файлов
Папка installation содержит файл internal.db, его необходимо поместить с заменой в директорию
Настройка ACL
Для работы мода (сохранение машин, пользовательских данных), ему необходимо выдать права администратора.
1. Откройте файл acl.xml.
2. Найдите группу Admin и вставьте туда следующее:
3. Если вы являетесь владельцем сервера, вам также нужно добавить себя в группу администраторов.
Установка ресурсов
Папка resources содержит все необходимые файлы для игры в MTA:DayZ.
Скопируйте папку [DayZ-MTA] копируем к остальным ресурсам сервера
Настройка конфигурации
Для запуска мода, вам нужно отредактировать файл конфигурации mtaserver.conf. Согласно лицензионному соглашению разработчика, имя сервера должно отвечать следующему шаблону:
Если название сервера не будет соответствовать данному шаблону, мод просто не запустится.</div>
Так же вам необходимо добавить 3 дополнительных ресурса в файл конфигурации mtaserver.conf
И удалить или отключить следующие ресурсы:
Если не удалить эти ресурсы из автозагрузки - мод DayZ будет работать нормально.
Общая информация
1. Не создавайте машины через панель администратора, это может повредить базу данных и все сохраненные данные будут потеряны.
2. Предметы респавнятся каждые 4 часа, что может приводить к лагам на сервере (time-out, выбросы игроков, временное отключение сервера).
Как сделать базу в мта dayz
Находиться в районе карьера, высоко в воздухе
Базовый ресурс для настройки кассы.
Находиться на побережье со стороны стадиона. У шоссе, которое ведет в ЛВ, есть развилка и дорога к базе
База в стандартном здании. Локация : Автосалон СФ. Замена на ID : 10949
Админская часть забиндена на F9 Ресурс позволяющий администраторам создавать базы за игровую валюту. Есть 2 типа валюты, это предмет в инвентаре (для dayz) либо стандартные деньги GTA. (Как настро.
Стандартное здание GTA:SA с открытым входом и небольшим помещением. Отлично подойдёт для режимов DayZ.
Находиться в LV (на въезде у моста).
Находиться на пирсе, в Лос Сантосе.
Имеет свой интерьер, находиться в LS возле "звездной дорожки".
Карта добавляет военную базу возле каньона.
Отличная база с защитой, новые стены (колиззия изменена), защита работает на группу игрока, изменить под свою можно, заправка собственная(можно не включать), текстуры тоже есть в архиве. Крыша откр.
Карта добавляет базу окруженную забором в пустыне (Кладбище самолетов).
Военная база для MTA DayZ
Данная карта добавляет бункер в небоскреб Сан Фиерро. Внутри есть:ворота,лифт,лестница,ванную и койки.
Представляю вашему вниманию весьма внушительный мапинг зоны 51 для сервера MTA. - Новое эксклюзивное ограждение (забор), по которому можно будет ходить.Взобраться можно по лестнице (их 15 штук) .
Моя сборка MTA DayZ. Го*ницо редкостное, но, на халяву :D Установлена новая логинка по серии. Исправлено большинство багов и т д. Кое что заменено, в общем качайте сами всё увидите.
Небольшая военная база в ЛВ. Не судите строго, это моя первая работа.
Глобальный маппинг по всей карте, подземный бункер.
Для работы бункера нужен пак стен из SAMP v2. Местонахождение в доках ЛС, гетто район.
Как сделать базу в мта dayz
Инструкция по эксплуатации баз ver2.0 на примере BUNKERBASE.
И вот спустя кучу времени руки дошли до этого гайда.
Для получения базы нужно сообщить свой серийный номер и место куда ее ставить. serial - серийник, GP - текущее местоположение. Установка базы занимает рекордные 5 мин. В данной базе исправлены все недостатки предыдущих версий. Текстурщики ни за что не смогут угнать или навредить вашим ТС, не занимает пространство и никак не мешает игрокам.
Чтобы войти в базу не нужно никаких команд, можно всего лишь подойти к лифту и нажать Е. В базе есть защита которая распознает игроков по серийному номеру и пропускает только тех кто прописан. Владелец базы прописывается перманентно.
Спустившись в лифте вы попадаете в центральное помещение из которого можно попасть в гараж либо жилые помещения.
В базе много дверей открыть которые можно через консоль справа от них опять же нажатием Е, они помогут сдержать рейдеров какое то время, на взлом каждой двери рейдерам потребуется 4 - 16 мин.
Лимит базы 6 малогабаритных ТС, база сама контролирует его и не даст вам поставить в базу ТС больше предусмотренного числа и габаритов. В случае если вы находитесь в ТС гаражная дверь открывается сама при подъезде к ней. Все ТС в базе получают, ремонт и ГМ.
Одна из самых главных комнат в базе - генераторная. Вся база работает на электричестве (защита, двери, лифт, компьютер. ), пока генератор работает все будет хорошо. Генератору требуется двигатель, аккумулятор и топливо. При спавне базы все в наличии и бак полностью заправлен, полного бака хватает на 5-7 реальных дней. Раз в час есть шанс 1/1000 что в генераторе что то сломается.
В базе есть лутовая, ее вместимость практически не ограничена и здесь вы сможете хранить весь свой лут. Когда вы добавляете что то или забираете оно появляется/пропадает с полок придавая реалистичности. При спавне выдается немного стартового лута которого хватит для небольшой перестрелки.
Бар, здесь вы можете включить музыку на всю базу, потанцевать и устроить дебош с сокланами. Если вы покупали базу можете заказать пару треков и они появятся в списке.
Для этой комнаты было слишком много идей из которых сложно выбрать лучшую и поэтому здесь почти ничего нет. Оставил ее на фантазию владельца.
Спальня, можно поспать на кровати и сохраниться. В случае если с прошлой смерти прошло более 60 мин, вы пороснетесь здесь в базе.
Комната с золотым унитазом. Во время зомби апокалипсиса можно себе и такое позволить.
Мини тюрьма. Планировалось что можно будет похищать игроков, но пока туда попадают только те кто не любит играть честно, лезет искать баги или по решению админа.
Комната совещаний, переговоров, планирования и дебоша.
Тоже одна из самых главных комнат специально помещенная в дальний от входа конец базы. Здесь находится компьютер который управляет базой. Пользоваться им может только владелец, ну или могут взломать бомж-рейдеры, если владелец не уследил за топливом и в базе все отключилось. Сколько же планов и разработок было с этим ПК. но в этой версии баз он управляет только вписанными в базу игроками. Те с помощью него можно прописать друга если он онлайн или удалить кого то кто уже прописан. Владелец базы в этом списке не отображается и выписать его даже после рейда не возможно. Многие специально сдавали базы рейдервам, те поселялись, пригоняли топ-тс и лут, а потом приходил владелец и выписывал их. Вообще такая система рейда баз была принята чтобы базы не простаивали призраками как это было с их прошлой версией + бонус игрокам которые не любят донатить, но своя база все равно лучше - никто не выпишет :)
Как сделать базу в мта dayz
if newbieShow == false then return end
local x,y,z = getElementPosition(newbiePosition)
local x,y = getScreenFromWorldPosition (x,y,z)
local length = dxGetTextWidth(newbieText,1,"default-bold")
dxDrawingColorText(newbieHead,x-length/2-screenWidth*0.01,y, x+length/2+screenWidth*0.01, y+screenHeight*0.03, tocolor(22,255,22,120),0.5, 1.1, "default-bold", "center", "center")
dxDrawingColorText(newbieText,x-length/2-screenWidth*0.01,y+screenHeight*0.03, x+length/2+screenWidth*0.01, y+screenHeight*0.07, tocolor(22,255,22,120),0.5, 1, "default-bold", "center", "center")
И меняем на это:
if newbieShow == false then return end
local x,y,z = getElementPosition(newbiePosition)
local x,y = getScreenFromWorldPosition (x,y,z)
local length = dxGetTextWidth(newbieText,1,"default-bold")
dxDrawImage ( x-length/3-screenWidth*0.02,y, screenWidth*0.07, screenHeight*0.1, "images/items.jpg",0,0,0,tocolor(255,255,255))
Открываем meta.xml и прописываем:
Саму картинку кидайте в папку images
И вставляем в самый вниз вот это:
function autoInjectMorphine(thePlayer)
if getElementData(thePlayer,"logedin") then
if getElementData(thePlayer,"brokenbone") then
setElementData(thePlayer,"brokenbone",false)
setElementData(thePlayer, "Morphine Auto-Injector", getElementData(thePlayer, "Morphine Auto-Injector") - 1)
end
end
end
addEventHandler("onPlayerDamage",getRootElement(),autoInjectMorphine)
Теперь осталось отредактировать скрипт и настроить его под свой мод.
Ищем строку:
За место Morphine Auto-Injector пишем свое название Морфина ( зависит от названия в вашем моде )
Должно получиться так:
setElementData(thePlayer, "Морфин", getElementData(thePlayer, "Морфин") - 1)
Вы так же можете изменить скрипт на любую другую вещь, а на какую это уже решать вам)
Открываем SurvivorSystem.lua
Ищем:
setPedAnimation (player,"WUZI","CS_Dead_Guy",-1,true,false,false,true)
И заменяем на:
setPedAnimation (player,"WUZI","CS_Dead_Guy",-1,false,false,false,true)
Приступим:
Создаём файл anim.lua,и вставляем туда это:
function funcBindLie(player, key, keyState)
if lying then
setPedAnimation(player, false)
lying = false
else
if isPedInVehicle(player) then
return
end
setPedAnimation(player, "ped", "cower", nil, true, false, false, true)
lying = true
function setVisibility()
value = 0
end
end
end
function funcBindLie(player, key, keyState)
if lying then
setPedAnimation(player, false)
lying = false
else
if isPedInVehicle(player) then
return
end
setPedAnimation(player, "ped", "fucku", nil, true, false, false, true)
lying = true
function setVisibility()
value = 0
end
end
end
function funcBindLie(player, key, keyState)
if lying then
setPedAnimation(player, false)
lying = false
else
if isPedInVehicle(player) then
return
end
setPedAnimation(player, "ped", "endchat_03", nil, true, false, false, true)
lying = true
function setVisibility()
value = 0
end
end
end
function bindTheKeys()
bindKey(source, "[", "down", funcBindLie)
end
addEventHandler("onPlayerLogin", getRootElement(), bindTheKeys)
Кидаем файл в mods/deathmatch/resources/[DayZ-MTA]/DayZ. Открываем meta.xml и пишем в самом низу там:
<script src="anim.lua" type="server" cache="false"/>
row2,column2 = guiGridListGetSelectedItem ( gridlistItems["inventory"] )
row2,column2 = guiGridListGetSelectedItem ( gridlistItems["loot"] )
--guiGridListSetSelectedItem ( gridlistItems["loot"], row2,column2)
И открываем код убирая —
guiGridListSetSelectedItem ( gridlistItems["loot"], row2,column2)
Заменяем на
statsLabel["blood"] = guiCreateLabel(0, 0.45, 1, 0.15, "Blood: 12000", true, statsWindows)
Теперь ищем
refreshDebugMonitor
Это заменяем
guiSetText(statsLabel.blood, "Blood: " .. value)
На
guiSetText(statsLabel.blood, "Blood: " .. value .. " [" .. math.round((value/100)/(12000/100/100), 2) .. "%]")
601 - это ID транспорта
4 - количество колёс (Tire)
1 - двигатель (0 не имеет) (Engine)
1 - топливный бак (TankParts)
Поиск (CTRL+F) вводим "vehicleFuelTable =
601 - это ID транспорта
150 - объём топливного бака
Открываем файл "Pickups.lua"
Поиск "CTRL+F" вводим "vehicleFuelTable =
601 - это ID транспорта
150 - объём топливного бака
ДОЛЖНО СОВПАДАТЬ С КОЛИЧЕСТВО УКАЗАННОМ В "inventory.lua"
Открываем файл "vehicle_spawns.lua"
В самом начале , добавляем :
Поиск "CTRL+F" вводим "vehicleAddonsInfo =
Поиск "CTRL+F" вводим "function spawnDayZVehicles()"
for i, veh in ipairs(pheonixSpawns) do
local x, y, z = veh[1], veh[2], veh[3]
veh = createVehicle(601, x, y, z)
vehCol = createColSphere(x, y, z, 1.5)
attachElements(vehCol, veh, 0, 0, 0)
setElementData(vehCol, "parent", veh)
setElementData(veh, "parent", vehCol)
setElementData(vehCol, "vehicle", true)
setElementData(vehCol, "MAX_Slots", 12)
local tires, engine, parts = getVehicleAddonInfos(getElementModel(veh))
setElementData(vehCol, "Tire_inVehicle", math.random(0, tires))
setElementData(vehCol, "Engine_inVehicle", math.random(0, engine))
setElementData(vehCol, "Parts_inVehicle", math.random(0, parts))
setElementData(vehCol, "spawn", <
471,
x,
y,
z
>)
setElementData(vehCol, "fuel", 10)
end
Строка
setElementData(vehCol, "MAX_Slots", 12) - количество слотов в машине
Поиск "CTRL+F" вводим "vehicleAddonsInfo =
Поиск "CTRL+F" вводим "vehicleFuelInfo =
601 - ID Транспорта
0.25 - Расход топлива за 1 км .
Поиск "CTRL+F" вводим "vehicle spawnpoint"
Добавляем координаты места , где будет спавниться транспорт :
function setVehicleWheelsIn ( veh )
if isElement ( veh ) then
local parent = getElementData ( veh, "parent" )
if isElement ( parent ) then
local wheels = getElementData ( parent, "Колесо_inVehicle" ) or 0
local tires = getVehicleAddonInfos ( getElementModel ( veh ) ) or 0
if tires > 3 then
setElementFrozen ( veh, true )
if wheels == 0 then
setTimer ( function (car) setVehicleWheelStates ( car, 2, 2, 2, 2) end, 5000, 1, veh )
elseif wheels == 1 then
setTimer ( function (car) setVehicleWheelStates ( car, 0, 2, 2, 2) end, 5000, 1, veh )
elseif wheels == 2 then
setTimer ( function (car) setVehicleWheelStates ( car, 0, 0, 2, 2) end, 5000, 1, veh )
elseif wheels == 3 then
setTimer ( function (car) setVehicleWheelStates ( car, 0, 0, 0, 2) end, 5000, 1, veh )
else
setTimer ( function (car) setVehicleWheelStates ( car, 0,0,0, 0); setElementFrozen ( car, false ) end, 5000, 1, veh )
end
end
end
end
end
function wheelsChanged(dataName,oldValue)
if getElementType(source) == "colshape" and dataName == "Колесо_inVehicle" then
setVehicleWheelsIn ( getElementData ( source, "parent" ) )
end
end
addEventHandler("onElementDataChange",getRootElement(),wheelsChanged)
Разберём строчку:
if getElementType(source) == "colshape" and dataName == "Колесо_inVehicle" then
Колесо_inVehicle , если кто не переводил (Двигатель,Колса,Бензобак) Ставит своё название.
Открываем на рабочем столе gta3.img через IMGManager
И в маленьком окошке поиска пишем .col
И у нас открывается список колизий всех объектов,среди всего этого ищем файл sfse_2.col и открываем его через ColEditor
И у нас снова открывается список файлов,из этого списка нам понадобится 2 файла: drydock1_SFSe и drydock1_SFSe01
Дальше жмём по одному из них ПКМ и наводим стрелку на кнопку Export и в появившемся окне жмём на Combined Collision File. и сохраняем это в любую папку,и так делаем с обеими файлами.
Так как я забросил свой сервер, решил помочь игрокам.
Почему я не залил его в ресурсы? -Потому что школота сразу начнёт его качать, а тут я подробно объясню как и что делать. Скрипт для защиты от дюпа во время релута.
Как работает дюп:
(Люди ждут релута, выбрасывают всё на землю, и когда появился NETWORK TROUBLE, люди начинают подбирать этот лут. После окончания релута, они подбирают в 20 раз больше).
Функции:
Во время обновления точек лута, скрипт выкидывает всех с сервера и ставит пароль на сервер. После окончания релута, снимается пароль и люди снова могут зайти.
2. Ищем такую строчку
function onPlayerChangeLoot(loot)
local players = getElementsWithinColShape (loot,"player")
for theKey,player in ipairs(players) do
triggerClientEvent(player,"refreshLootManual",player,loot)
и выделяем содержимое от её начала до конца всего файла pickups.lua.
3. Открываем мой файл, копируем всё содержимое моего файла.
4. Заменяем всё выделенное в вашем файле.
Дальше ищем строчку
Теперь убираем баг с бензином
Чуть ниже ищем такие строки :
if not getElementData(col,"Parts_inVehicle") then
setElementData(col,"Parts_inVehicle",math.random(0,parts))
end
И заменяем на это :
if ((getElementData(col,"Parts_inVehicle") or 0) < tonumber(parts)) then
setVehicleEngineState ( veh, false )
return
end
Теперь авто не сможет ездить без него
И теперь под бензобаком вставляем проверку на бензин
if (getElementData(col,"fuel") or 0) < 0 then
setVehicleEngineState ( veh, false )
return
end
И просто ставим "--" перед каждой строкой вот так :
И ее то же отключаем
Нам Нужно:
Открываем surviviorSystem.lua. Нажимаем Ctrl+F и ищем
Находим анимацию (анимация для употребления пищи):
setPedAnimation(source, "FOOD", "EAT_Burger", nil, false, false, nil, false)
и исправляем на:
setPedAnimation(source, "FOOD", "EAT_Burger", -1, false, false, false, false)
Где написано Drift King, Insane Drift, Outrageous,Colossal
Suberb,Great Drift,Good Drift
Это всё надо перевести допустим будет так:
Открываем: inventory.lua
и под
local buttonItems = <>
добавляем
local button = <>
теперь ищем:
inventoryWindows
и под этим добавляем это:
button["kill"] = guiCreateButton(0.89, 0.95, 0.09, 0.09, "Суицид",true,inventoryWindows)
и под этой строкой вставляем эту функцию:
function VitosProKILL()
if source == button["kill"] then
открываем файл survivorSystem_client
Открываем vehicle_spawns.lua
Ищем:
-----------------—
hospitalCol = <>
function createHospitalPacks()
number1 = 0
for i,box in ipairs(hospitalPacks) do
number1 = number1+1
local x,y,z = box[1],box[2],box[3]
object = createObject(1558,x,y,z,nil,nil,nil)
hospitalCol[i] = createColSphere(x,y,z,2)
setElementData(hospitalCol[i],"parent",object)
setElementData(hospitalCol[i],"hospitalbox",true)
setElementData(hospitalCol[i],"MAX_Slots",20)
for _,items in ipairs(lootItems["hospital"]) do
local randomNumber = math.random(1,10)
if randomNumber >= 2 then
setElementData(hospitalCol[i],items[1],math.random(1,5))
end
end
end
setTimer(updateHospitals,3600000,1)
end
createHospitalPacks()
-----------------—
Ниже вставляем эту функцию:
-----------------—
ammoCol = <>
function createAmmoPacks()
number1 = 0
for i,box in ipairs(ammoPacks) do
number1 = number1+1
local x,y,z = box[1],box[2],box[3]
object = createObject(1558,x,y,z,nil,nil,nil)
ammoCol[i] = createColSphere(x,y,z,2)
setElementData(ammoCol[i],"parent",object)
setElementData(ammoCol[i],"ammobox",true)
setElementData(ammoCol[i],"MAX_Slots",20)
for _,items in ipairs(lootItems["ammo1"]) do
local randomNumber = math.random(1,10)
if randomNumber >= 2 then
setElementData(ammoCol[i],items[1],math.random(1,5))
end
end
end
setTimer(updateAmmo,3600000,1)
end
createAmmoPacks()
-----------------—
Далее ищем:
-----------------—
hospitalPacks = <
-----------------—
И после всех кординат и закрытия функции ( > )
Нам нужны координаты "начала" и "конца" лифта.
Заходим в MapEditor,летим к месту где будет база.
Создаем объект лифт(id 3114 или 3115)
Ставим его на "начало".
И нажимаем F3 и скриншотим или записываем координаты,а также угол поворота.
И теперь тоже самое,но "конец".
Теперь открываем SciTE
Создаем файл с названием server:
addEventHandler("onResourceStart",getResourceRootElement(getThisResource()),
function(resource)
plate0 = createObject(3114,2416.8999023438,2503.8999023438,9.3000001907349,0,0,0) — [[координаты создания лифта, 3114 это id лифта,следующие 3 координаты по x,y,z,потом 3 угла поворота]]
end)
function moveup1()
moveObject(plate0,15000,2416.8999023438,2503.8999023438,67.900001525879) — [[координаты "конца"]]
triggerClientEvent("Lift1",getRootElement(),plate0)
outputChatBox("Лифт поднимается", source)
end
addCommandHandler ( "lu", moveup1 )— [[lu это команда поднимающая лифт,она пишется через /]]
function moveupu1()
triggerClientEvent("Lift1",getRootElement(),nil)
end
function movedn1()
moveObject(plate0,15000,2416.8999023438,2503.8999023438,9.3000001907349) — [[координаты "начала"]]
outputChatBox("Лифт опускается", source)
end
addCommandHandler ( "ld", movedn1 )— [[ld это команда опускающая лифт,она пишется через /]]
Создаем файл с именем client:
function Acc1(plate)
local vehicle = getPedOccupiedVehicle(getLocalPlayer())
if plate then
local x,y,z = getElementPosition(vehicle)
if x > 2426.8999023438 and x < 2406.8999023438 then — [[1-ая цифра это координата по x + 10,2-ая x -10]]
if y > 2513.8999023438 and y < 2493.8999023438 then — [[тоже самое только вместо x, координату y]]
local rx,ry,rz = getElementRotation(vehicle)
ox = x + -2416.8999023438 —[[пишем свою координату по x НО противоположную,тоесть если цифра отрицательная то пишем положительную]]
oy = y + -2503.8999023438 —[[пишем свою координату по y и тоже противоположную]]
attachElements(vehicle,plate,oy,-ox,1.2,0,0,rz-90)
end
end
else
detachElements(vehicle)
end
end
addEvent("Lift1",true)
addEventHandler("Lift1",getRootElement(),Acc1)
Читайте также: