Erema93
-
Posts
60 -
Joined
-
Last visited
Posts posted by Erema93
-
-
Положил файл из архива куда указал, теперь сервер после запуска сам закрывается
-
При переносе скриптов из samp выдает ошибки.
MODULE: Unable to load mods\deathmatch\modules\king.dll (126)ERROR: [gamemodes]\[amx]\amx\server\rcon.lua:47: attempt to call global 'amxVersionString' (a nil value)
ERROR: [gamemodes]\[amx]\amx\server\amx.lua:23: The amx module (king.dll/so) isn't loaded. It is required for amx to function. Please add it to your server config and restart your server.ERROR: [gamemodes]\[amx]\amx\server\amx.lua:108: attempt to call global 'amxLoad' (a nil value)
Сразу скажу, что сервер и клиент на последней версии, файл для модуля находится в нужном месте.
-
Wow Trailer sync fix, good
-
Я немного о другом имел ввиду. Если у всех старых ID авто уже будут заменены модели на новые, то скрипт уже не будет работать как надо?
I meant a little about something else. If all old car IDs already have models replaced by new ones, then the script will no longer work as it should?
-
Synchronization of the tractor with the trailer was repaired?
-
On 07/08/2019 at 13:29, alexaxel705 said:
function scriptCreateTank ( commandName ) local luckyBugger = getLocalPlayer() -- get the local player local x, y, z = getElementPosition ( luckyBugger ) -- retrive the player's position local theVehicle = createVehicle ( 404, x, y, z + 10 ) -- create the tank 10 units above them setElementData(theVehicle, "model", 737) outputChatBox ( "You got Tank'd!", 255, 0, 0)end--Attach the 'scriptCreateTank' function to the "tank" commandaddCommandHandler ( "tank", scriptCreateTank )
Надо указать новый ID модели setElementData(theVehicle, "model").
Модель которая указывается в createVehicle значения не имеет, главное чтобы была в диапазоне от 400 до 611.
Во время события onClientElementStreamIn он читает новую модель, и занимает свободный слот в диапазоне игровых моделей от 400 до 611 с учетом типа транспортного средства, в данном случае "Automobile".
При событии onClientElementStreamOut он освобождает раннее занятый слот.And if all the old IDs are busy, it turns out that the script will not work?
-
Сделал как в коде server.Lua написано, но получается ошибка.
Скрипт создания авто: вот
-
Можете показать, что в server.Lua? А то я пытаюсь командой заспавнить, используя CreateVehicle, но что-то авто не появляется
-
Ребят, помогите разобраться в этом скрипте, прописываю код на спавн авто на новые ID, а оно не спавнится никакой командой.
-
On 19/04/2019 at 20:51, Nicholas Manchini said:
Можно ли добавить новую машину на сервер не трогая старую?
На комьюнити MTA появился скрипт с добавлением машин на новых ID
-
Вот оно что, значит только методом тыка. Спасибо за ответ
-
А возможно ли сделать скриптом сделать переключение путей (смена маршрута) рельсового транспорта? Если да, то скажите как его сделать?
-
Не ну это понятно, что так можно. Но не думаю, что разработчики сервера так делали, ибо несколько трамвайных путей и каждый трамвай ездил по своему маршруту. Опять же знаю, что при наличии файла Track можно заспавнить рельсовый транспорт на определенный путь.
-
On 24/02/2019 at 05:18, Fanbox said:
Братан, тут нету ничего для позицци на игрока!
Ну тогда что означают эти координаты в таблицы? Оставлял по одной разной строке и пассажир садился не на рандомное место, а на то куда указано в коде. То есть каждая строка в таблице отвечала за определенное место
-
Возможно подключить скриптом подключить дополнительные пути для рельсового транспорта с помощью скрипта?
Видел на одном сервере, где рельсовый транспорт ездит по разным маршрутам, но ведь в оригинальной GTA лимит путей очень маленький. Хотелось бы знать, с помощью чего прописывать пути, как их подключать (если возможно скриптом в MTA)? -
Есть вот такой код
Spoilerlocal PlayerBuser = {} local TempTable = {} -- PlayerBuser["431"] = { {nil, nil, -0.900, 0.9, 1.0, 0}, {nil, nil, -0.510, 1.85, 1.0, 180}, {nil, nil, 0.900, 0.9, 1.0, 0}, {nil, nil, 0.510, 1.85, 1.0, 180}, {nil, nil, 0.990, 2.5, 1.0, 0}, {nil, nil, 0.600, -1.45, 1.1, 0}, {nil, nil, 0.500, 2.5, 1.0, 0}, {nil, nil, -0.900, 0.1, 1.0, 0}, {nil, nil, -0.500, -0.7, 1.0, 0}, {nil, nil, -0.990, -1.4, 1.2, 0}, {nil, nil, -0.990, -0.7, 1.1, 0}, {nil, nil, -0.500, -1.4, 1.2, 0}, {nil, nil, 0.910, -2.2, 1.2, 0}, {nil, nil, -0.990, -2.2, 1.2, 0}, {nil, nil, -0.500, -3.0, 1.2, 0}, {nil, nil, -0.900, -3.0, 1.2, 0}, {nil, nil, 0.990, -3.0, 1.2, 0}, {nil, nil, 0.500, -3.0, 1.2, 0}, {nil, nil, 0.900, -3.8, 1.4, 0}, {nil, nil, 0, -3.7, 1.4, 0}, {nil, nil, -0.900, -3.8, 1.4, 0} } PlayerBuser["437"] = { {nil, nil, 0.45, 3.88, 1.35, 0}, {nil, nil, 0.45, 3.08, 1.35, 0}, {nil, nil, -0.95, 3.88, 1.35, 0}, {nil, nil, 0.95, 2.22, 1.35, 0}, {nil, nil, 0.55, 1.50, 1.35, 0}, {nil, nil, 0.95, 0.50, 1.35, 0}, {nil, nil, -0.95, 2.22, 1.35, 0}, {nil, nil, -0.95, 1.50, 1.35, 0}, {nil, nil, -0.45, 1.50, 1.35, 0}, {nil, nil, -0.95, 0.50, 1.35, 0}, {nil, nil, -0.45, 0.50, 1.35, 0}, {nil, nil, -0.95, -0.22, 1.35, 0}, {nil, nil, -0.95, -1.12, 1.35, 0}, {nil, nil, -0.45, -1.12, 1.35, 0}, {nil, nil, -0.95, -1.95, 1.35, 0}, {nil, nil, 0.55, -2.02, 1.35, 0}, {nil, nil, -0.45, -2.75, 1.35, 0}, {nil, nil, 0.95, -2.75, 1.35, 0}, {nil, nil, 0.55, -2.75, 1.35, 0}, {nil, nil, 0.95, -3.53, 1.35, 0}, {nil, nil, 0.55, -3.53, 1.35, 0}, {nil, nil, -0.45, -3.53, 1.35, 0}, {nil, nil, 0.55, -4.31, 1.35, 0}, {nil, nil, -0.95, -4.31, 1.35, 0}, {nil, nil, 0.95, -5.16, 1.35, 0}, {nil, nil, -0.45, -5.16, 1.35, 0}, {nil, nil, 0.95, -6.06, 1.35, 0}, {nil, nil, 0.05, -6.06, 1.35, 0}, {nil, nil, -0.95, -6.06, 1.35, 0} } PlayerBuser["459"] = { {nil, nil, -0.79, 0.15, 0.7, 0}, {nil, nil, -0.35, 0.15, 0.7, 0}, {nil, nil, -0.79, -0.55, 0.7, 0}, {nil, nil, -0.35, -0.55, 0.7, 0}, {nil, nil, -0.79, -1.15, 0.7, 0}, {nil, nil, -0.35, -1.15, 0.7, 0}, {nil, nil, -0.79, -1.90, 0.7, 0}, {nil, nil, -0.35, -1.90, 0.7, 0}, {nil, nil, -0.79, -2.65, 0.7, 0}, {nil, nil, -0.35, -2.65, 0.7, 0}, {nil, nil, -0.79, -3.30, 0.7, 0}, {nil, nil, -0.35, -3.30, 0.7, 0}, {nil, nil, 0.72, -1.15, 0.7, 0}, {nil, nil, 0.72, -1.90, 0.7, 0}, {nil, nil, 0.72, -2.65, 0.7, 0}, {nil, nil, 0.72, -3.30, 0.7, 0} } local function getPlayerEXP( player ) -- получить количество опыта if not TempTable[player] then TempTable[player] = {} TempTable[player].EXP = 0 return TempTable[player].EXP else return TempTable[player].EXP end end addCommandHandler("setexp", function ( player, cmd, integer ) if not tonumber(integer) then --outputChatBox("[!]#FFFFFF Используйте /setexp [количество опыта]", player, 39, 199, 43, true) return end if not TempTable[player] then TempTable[player] = {} TempTable[player].EXP = tonumber(integer) else TempTable[player].EXP = tonumber(integer) end --outputChatBox('[!]#FFFFFF Текущее количество опыта: '.. TempTable[player].EXP ..' очков!', player, 39, 199, 43, true) end) addEvent("getJobInfo", true) addEventHandler("getJobInfo", resourceRoot, function ( index, bool ) if not client then return end local player = client if not TempTable[player] then TempTable[player] = {} end if not TempTable[player].EXP then TempTable[player].EXP = 0 end if bool then triggerClientEvent("client:getJobInfo", player, TempTable[player].EXP, index, true) else local zpcheck = PlayerBuser[player].increase local zpcount = PlayerBuser[player].ZPCount * zpcheck if PlayerBuser[player].ZPCount >= (math.floor(PlayerBuser[player].routeCount / 2)) then triggerClientEvent("client:getJobInfo", player, zpcount, index, false) else triggerClientEvent("client:getJobInfo", player, 0, index, false) end end end) local function unJobPlayer( player, text ) if PlayerBuser[player] then PlayerBuser[PlayerBuser[player].bus].seat = nil if isTimer(PlayerBuser[player].timerExit) then killTimer(PlayerBuser[player].timerExit) end triggerClientEvent(player, "client:setPlayerStartJob", player, false, PlayerBuser[player].bus) PlayerBuser[player].LimitBot_Enter = nil PlayerBuser[player].routeselect = nil PlayerBuser[player].routeNumber = nil PlayerBuser[player].Count = nil PlayerBuser[player].IntegerBot = nil PlayerBuser[player].state = nil PlayerBuser[player].countSeat = nil PlayerBuser[player].temp_index = nil if isTimer(PlayerBuser[player].timerStop) then killTimer(PlayerBuser[player].timerStop) end outputChatBox("[AТП] #FFFFFF".. text .."", player, 209, 10, 10, true) local zpcheck = PlayerBuser[player].increase local zpcount = PlayerBuser[player].ZPCount * zpcheck if PlayerBuser[player].ZPCount >= (math.floor(PlayerBuser[player].routeCount / 2)) then --outputChatBox("[АТП] #FFFFFFВам было начислено +10 очков опыта!", player, 38, 199, 43, true) outputChatBox("[АТП] #FFFFFFВаша заработная плата составляет ".. zpcount .."$!", player, 38, 199, 43, true) if TempTable[player] and TempTable[player].EXP then TempTable[player].EXP = TempTable[player].EXP + 10 else TempTable[player] = {} TempTable[player].EXP = 10 end givePlayerMoney ( player, zpcount ) else outputChatBox("[АТП] #FFFFFFВы проехали меньше половины маршрута и не получили зар.платы!", player, 209, 10, 10, true) end destroyElement(PlayerBuser[player].bus) PlayerBuser[player].bus = nil PlayerBuser[player].increase = nil PlayerBuser[player].ZPCount = nil PlayerBuser[player].routeCount = nil PlayerBuser[player] = nil triggerClientEvent(player, "checkJobWindow", player) end end addEvent("onPlayerStopJob", true) addEventHandler("onPlayerStopJob", resourceRoot, function ( ) if not client then return end local player = client unJobPlayer( player, "Вы закончили работу 'Водитель автобуса'!" ) end) -- 1779, -1888, 13.66, 0, 0, 270 addEvent("onPlayerStartJob", true) addEventHandler("onPlayerStartJob", resourceRoot, function ( table, index, city ) if not client then return end local player = client if PlayerBuser[player] then return end if not PlayerBuser[table[1]] then PlayerBuser[table[1]] = {} end PlayerBuser[player] = {} PlayerBuser[player].Count = 0 PlayerBuser[player].ZPCount = 0 for _ in pairs( PlayerBuser[table[1]] ) do PlayerBuser[player].Count = PlayerBuser[player].Count + 1 end if tonumber(PlayerBuser[player].Count) >= table[4] then outputChatBox("[AТП] #FFFFFFНа данном маршруте нет свободных автобусов!", player, 209, 10, 10, true) PlayerBuser[player] = nil return end local playerEXP = getPlayerEXP(player) --[[if tonumber(playerEXP) < tonumber(table[5]) then outputChatBox("[AТП] #FFFFFFИзвините, у Вас недостаточно опыта!", player, 209, 10, 10, true) PlayerBuser[player] = nil return end]]-- triggerClientEvent(player, "client:setPlayerStartJob", player, true) outputChatBox("[AТП] #FFFFFFВы начали работу 'Водитель автобуса'!", player, 38, 199, 43, true) if city == "LS" then PlayerBuser[player].bus = Vehicle(459, 1779, -1888, 13.66, 0, 0, 270) elseif city == "LV" then PlayerBuser[player].bus = Vehicle(459, 2766.43823, 1265.5, 11.02048, 0, 0, 270) end if index == 1 then PlayerBuser[player].bus.model = 459 local randomInteger = math.random(1, 3) if randomInteger == 1 then PlayerBuser[player].bus:setColor(28,123,209) elseif randomInteger == 2 then PlayerBuser[player].bus:setColor(28,123,209) elseif randomInteger == 3 then PlayerBuser[player].bus:setColor(28,123,209) end elseif index == 2 then PlayerBuser[player].bus.model = 431 PlayerBuser[player].bus:setColor(28,123,209) elseif index == 3 then PlayerBuser[player].bus.model = 437 PlayerBuser[player].bus:setColor(28,123,209) end -- доп.проверка на цвет в ЛВ и СФ if index == 2 and city == "LV" then PlayerBuser[player].bus:setColor(28,123,209) elseif index == 3 and city == "LV" then PlayerBuser[player].bus:setColor(28,123,209) end local vehicle = PlayerBuser[player].bus warpPedIntoVehicle(player, vehicle) setTimer(function ( ) triggerClientEvent("OffColVehicle", root, vehicle) end, 200, 1) PlayerBuser[player].routeIndex = index PlayerBuser[player].routeCount = #RouteIndex[table[6]] PlayerBuser[player].routeNumber = table[6] PlayerBuser[player].increase = table[7] PlayerBuser[player].routeselect = 0 PlayerBuser[vehicle] = {} PlayerBuser[player].LimitBot_Enter = 0 PlayerBuser[player].countSeat = 0 PlayerBuser[vehicle].seat = PlayerBuser[tostring(vehicle.model)] PlayerBuser[vehicle].player = player loadRoute(player, table[6]) vehicle:setData("emiTexture", "".. tostring(vehicle.model) .."/".. tostring(table[6])) if index == 3 then PlayerBuser[player].timerStop = setTimer(unJobPlayer, 900000, 1, player, "Вы закончили работу 'Водитель автобуса'! (АФК)") else PlayerBuser[player].timerStop = setTimer(unJobPlayer, 300000, 1, player, "Вы закончили работу 'Водитель автобуса'! (АФК)") end end) function StartEnterVehicle ( player, seat, jacked ) if not source then return end if PlayerBuser[player] then if (source ~= PlayerBuser[player].bus) then cancelEvent() end if (source == PlayerBuser[player].bus) and (seat ~= 0) then cancelEvent() end return else cancelEvent() end end addEventHandler ( "onVehicleStartEnter", resourceRoot, StartEnterVehicle ) function StartEnterVehicleRoot ( player, seat, jacked ) if not source then return end if (source.model == 431 or source.model == 459 or source.model == 437) and (seat ~= 0) then cancelEvent() return end end addEventHandler ( "onVehicleStartEnter", root, StartEnterVehicleRoot ) addEventHandler("onVehicleEnter", resourceRoot, function ( player ) if not source then return end if PlayerBuser[player] and (PlayerBuser[player].bus == source) then if isTimer(PlayerBuser[player].timerExit) then killTimer(PlayerBuser[player].timerExit) end end end) addEventHandler("onVehicleStartExit", resourceRoot, function ( player ) if not source then return end if PlayerBuser[player] then if (source == PlayerBuser[player].bus) then outputChatBox("[AТП] #FFFFFFВы вышли из автобуса! У вас есть 40 секунд, чтобы вернуться.", player, 209, 10, 10, true) PlayerBuser[player].timerExit = setTimer(unJobPlayer, 40000, 1, player, "Вы закончили работу 'Водитель автобуса'! (прошло 40 сек.)") end end end) function loadRoute( player, text ) local table_route = RouteIndex[text] PlayerBuser[player].routeselect = PlayerBuser[player].routeselect + 1 PlayerBuser[player].ZPCount = PlayerBuser[player].ZPCount + 1 local routeselect = PlayerBuser[player].routeselect if table_route[routeselect] == nil then unJobPlayer( player, "Вы закончили работу 'Водитель автобуса'!" ) else --[[if table_route[routeselect][1] == 2 then outputChatBox('ID: '..routeselect) outputChatBox('ANGLE:' ..tostring(table_route[routeselect][6])) end]] if table_route[routeselect + 1] and table_route[routeselect + 1][1] == 2 and table_route[routeselect + 1][4] then PlayerBuser[player].state = math.random(1, 9) -- если нужны пустые остановки if table_route[routeselect + 1][8] or (routeselect + 1) == 17 then PlayerBuser[player].state = 5 end if tonumber(PlayerBuser[player].state) ~= 5 then if PlayerBuser[player].routeIndex == 3 then PlayerBuser[player].IntegerBot = math.random(15, 20) or 20 else PlayerBuser[player].IntegerBot = math.random(2, table_route[routeselect + 1][5]) or 2 end triggerClientEvent(player, "CreateMarkerRouteBots", player, table_route[routeselect + 1][4], PlayerBuser[player].IntegerBot, table_route[routeselect + 1][6], table_route[routeselect + 1][7]) end end if table_route[routeselect][1] == 2 then triggerClientEvent(player, "CreateMarkerRoute", player, table_route[routeselect][3], true) return end if not table_route[routeselect + 1] then triggerClientEvent(player, "CreateMarkerRoute", player, table_route[routeselect][3], nil) else triggerClientEvent(player, "CreateMarkerRoute", player, table_route[routeselect][3], nil, table_route[routeselect + 1][3]) end end end function routeCheckMarker( ) if not client then return end local player = client loadRoute( player, PlayerBuser[player].routeNumber ) end addEvent("RouteCheckMarker", true) addEventHandler("RouteCheckMarker", resourceRoot, routeCheckMarker) addEvent("RouteCheckStop", true) addEventHandler("RouteCheckStop", resourceRoot, function ( ) if not client then return end local player = client local routeselect = PlayerBuser[player].routeselect local vehicle = PlayerBuser[player].bus local table_route = RouteIndex[PlayerBuser[player].routeNumber] if isTimer(PlayerBuser[player].timerStop) then resetTimer(PlayerBuser[player].timerStop) end if PlayerBuser[player] and PlayerBuser[player].bus then vehicle.frozen = true PlayerBuser[player].temp_index = 0 if isTimer(PlayerBuser[player].timeCheck) then killTimer(PlayerBuser[player].timeCheck) end if tonumber(PlayerBuser[player].state) ~= 5 then local random_exit_bot_limit = math.random(1, 4) local tables = PlayerBuser[vehicle].seat for i = 1, random_exit_bot_limit do if tables[i][1] ~= nil and (not tables[i][1].player) then PlayerBuser[player].temp_index = PlayerBuser[player].temp_index + 1 triggerClientEvent(player, "ExitBusDoorBot", player, vehicle, tables[i][1].modelid, PlayerBuser[player].temp_index, table_route[routeselect][4], table_route[routeselect][7]) tables[i][1].destroy = true vehicle:setData("table_route", tables) end end if PlayerBuser[player].temp_index == 0 then triggerClientEvent(player, "BotMissionStart", player, vehicle) end else if table_route[routeselect][8] and table_route[routeselect][8] == 1 then PlayerBuser[player].empty = true local tables = PlayerBuser[vehicle].seat PlayerBuser[player].countSeat = 0 for i = 1, #tables do if tables[i][1] ~= nil then PlayerBuser[player].countSeat = PlayerBuser[player].countSeat + 1 end end if PlayerBuser[player].countSeat == 0 then PlayerBuser[player].empty = nil triggerClientEvent(player, "client:exitAllBot", player) return end PlayerBuser[player].countSeat = 0 for i = 1, #tables do if tables[i][1] ~= nil and (not tables[i][1].player) then PlayerBuser[player].countSeat = PlayerBuser[player].countSeat + 1 triggerClientEvent(player, "ExitBusDoorBot", player, vehicle, tables[i][1].modelid, PlayerBuser[player].countSeat, table_route[routeselect][4], table_route[routeselect][7]) tables[i][1].destroy = true vehicle:setData("table_route", tables) end end return end local random_exit_bot_limit = math.random(1, 3) PlayerBuser[player].empty = true local tables = PlayerBuser[vehicle].seat PlayerBuser[player].countSeat = 0 for i = 1, random_exit_bot_limit do if tables[i][1] ~= nil then PlayerBuser[player].countSeat = PlayerBuser[player].countSeat + 1 end end if PlayerBuser[player].countSeat == 0 then PlayerBuser[player].empty = nil triggerClientEvent(player, "client:exitAllBot", player) return end PlayerBuser[player].countSeat = 0 for i = 1, random_exit_bot_limit do if tables[i][1] ~= nil and (not tables[i][1].player) then PlayerBuser[player].countSeat = PlayerBuser[player].countSeat + 1 triggerClientEvent(player, "ExitBusDoorBot", player, vehicle, tables[i][1].modelid, PlayerBuser[player].countSeat, table_route[routeselect][4], table_route[routeselect][7]) tables[i][1].destroy = true vehicle:setData("table_route", tables) end end end end end) addEvent("EnterBusDoor", true) addEventHandler("EnterBusDoor", resourceRoot, function ( veh ) if not client then return end local player = client if getPlayerMoney(player) < 10 then outputChatBox("[!]#FFFFFF Стоимость проезда на автобусе составляет: 10$", player, 209, 10, 10, true) return end takePlayerMoney(player, 10) local vehicle = veh if not PlayerBuser[vehicle] then PlayerBuser[vehicle] = {} PlayerBuser[vehicle].seat = PlayerBuser[tostring(vehicle.model)] end local tables = PlayerBuser[vehicle].seat for i = 1, #tables do if tables[i][1] == nil then tables[i][1] = {} tables[i][1].modelid = getElementModel(player) -- просто чтоб не писать костыль tables[i][1].player = player vehicle:setData("table_route", tables) return end end end) addEvent("EnterBusDoorBots", true) addEventHandler("EnterBusDoorBots", resourceRoot, function ( vehicle, modelid ) if not client then return end local player = client local vehicle = PlayerBuser[player].bus PlayerBuser[player].LimitBot_Enter = PlayerBuser[player].LimitBot_Enter + 1 if PlayerBuser[player].LimitBot_Enter == PlayerBuser[player].IntegerBot then triggerClientEvent(player, "client:enterAllBot", player, vehicle) PlayerBuser[player].LimitBot_Enter = 0 end local tables = PlayerBuser[vehicle].seat for i = 1, #tables do if tables[i][1] == nil then tables[i][1] = {} tables[i][1].modelid = modelid vehicle:setData("table_route", tables) return end end end) addEvent("ExitBusDoorBots", true) addEventHandler("ExitBusDoorBots", resourceRoot, function ( integer ) if not client then return end local player = client if (integer == PlayerBuser[player].countSeat) or (integer == PlayerBuser[player].temp_index) then if not PlayerBuser[player].empty then triggerClientEvent(player, "BotMissionStart", player, PlayerBuser[player].bus) else PlayerBuser[player].empty = nil triggerClientEvent(player, "client:exitAllBot", player, true) end PlayerBuser[player].countSeat = 0 PlayerBuser[player].temp_index = 0 end end) addCommandHandler("testm", function ( player ) local vehicle = player.vehicle local tables = PlayerBuser["459"] for i = 1, #tables do if tables[i][1] == nil then tables[i][1] = {} tables[i][1].modelid = 28 vehicle:setData("table_route", tables) end end PlayerBuser[player].routeselect = 75 end) addEvent("RouteBusFreeze", true) addEventHandler("RouteBusFreeze", resourceRoot, function ( state ) if not client then return end local player = client if PlayerBuser[player] and PlayerBuser[player].bus then PlayerBuser[player].bus.frozen = state end end) addEvent("ExitBusDoor", true) addEventHandler("ExitBusDoor", resourceRoot, function ( vehicle ) if not client then return end local player = client detachElements( player, vehicle ) setPedAnimation ( player, false ) local tables = PlayerBuser[vehicle].seat for i = 1, #tables do if tables[i][1] and tables[i][1].player == player then tables[i][1].destroy = true triggerClientEvent(root, "table_route_exit", root, player, vehicle, tables) return end end end) addEvent( "onElementSound", true ) addEventHandler( "onElementSound", root, function ( snd_name, distance, stop ) triggerClientEvent( "onElementSoundSync", source, snd_name, distance, stop ) end ) addEvent("TableRouteUpdate", true) addEventHandler("TableRouteUpdate", resourceRoot, function ( vehicle, tables ) PlayerBuser[vehicle].seat = tables end) addEventHandler("onElementDestroy", getRootElement(), function () if source.type == "vehicle" then if source.model == 431 or source.model == 437 or source.model == 459 then if PlayerBuser[source] and isElement(PlayerBuser[source].player) then triggerClientEvent(PlayerBuser[source].player, "client:setPlayerStartJob", PlayerBuser[source].player, false, source) end end end end) addEvent("updateBuserCount", true) addEventHandler("updateBuserCount", resourceRoot, function ( vehicle, count ) if not client then return end local player = client if PlayerBuser[player] then PlayerBuser[player].countSeat = tonumber(count + 1) PlayerBuser[player].temp_index = tonumber(count + 1) end end)
Подскажите, каким образом задаются в этом коде координаты пассажирских мест и как узнать необходимую координату, если хочу новое место для пассажира прописать?
-
15 hours ago, Sarrum said:
Удали 6-ую строку и
if getPlayerTeam ( player ) == "Машинист" then
замени на:
if getPlayerTeam ( player ) == teamjob then
Исправил, работает как надо. Спасибо.
12 hours ago, K1parik said:действительно. куда это getTeamName пропало из условия. невнимательность
Ваше getTeamName не работало и выдавало ошибку плохого аргумент.
Если кому-то будет нужен код, то вот он:
local teamjob = createTeam ( "Машинист", 0, 255, 0 ) addEventHandler ( "onVehicleStartEnter", getRootElement (), function ( player ) if getElementModel ( source ) == 537 then if getPlayerTeam ( player ) == teamjob then outputChatBox ( "Вы устроились на работу ", player, 255, 0, 0) else cancelEvent() outputChatBox ( "У вас нет доступа к ТС ", player, 255, 0, 0 ) end end end )
-
Проверил код. Игрок в группе не может сесть в транспорт 537
-
2 hours ago, K1parik said:
ну да. потому что условие такое. если машина 537 и игрок в группе он сможет сесть в машину 537. если хоть одно условие не соответствует то игрок никуда не может сесть
Ну а мне нужно так: игрок в группе сможет сесть в машину 537, но если игрок не в группе, то не сможет сесть в неё. Не нужно, чтобы он никуда не смог сесть.
Пример: игрок состоит в группе машинистов, то он сможет сесть в локомотив, но если он не состоит в этой группе, то он не сможет в него сесть (а в остальной любой сможет)
Более понятный пример: если игрок состоит во фракции, то у него есть доступ к авто фракции, иначе - нет доступа.
-
1 hour ago, K1parik said:
в 9 строке замени ~= на ==
Заменил оба, теперь вообще не садится никуда
-
Пытался двигаться в нужном направлении, но пока что нужный итог не получается
local teamjob = createTeam("Машинист", 0, 255, 0) addEventHandler ( "onVehicleStartEnter", getRootElement (), function ( player ) local teamjob = getPlayerTeam(player) if getPlayerTeam (player) ~= "Машинист" and getElementModel ( source ) ~= 537 then outputChatBox("Есть ", player, 255, 0, 0) else cancelEvent() outputChatBox("Вы не состоите в Группе ", player, 255, 0, 0) end end )
-
Как сделать, чтобы определенным транспортом могли пользоваться только игроки определенной команды(группы, team)?
Знаю только одно условие:
if getTeamName (getPlayerTeam (client)) == "Название группы" then else outputChatBox ("У вас нет доступа к ТС", hitElement) end
А второе не могу додуматься. Причем нужно, чтобы оба условия соблюдались.
-
Если умеешь моделировать и делать скрипты на Lua, то не составит проблем сделать свою MTA, даже на стандартной карте
-
Всех приветствую. Нужна помощь: есть логин панель, надо
1) из одной строки "Логин" сделать две строки для ввода ("Имя" и "Фамилия") и чтобы было вводить можно было только с заглавной буквы и только буквы (пример "Ivan_Petrov")
2) нужно сделать, чтобы ник игрока брался не из настроек, а который он ввёл при регистрации.
Server
function PlayerLogin(username,password,checksave) if not (username == "") then if not (password == "") then local account = getAccount ( username, password ) if ( account ~= false ) then logIn(source, account, password) triggerClientEvent (source,"hideLoginWindow",getRootElement()) if checksave == true then triggerClientEvent(source,"saveLoginToXML",getRootElement(),username,password) else triggerClientEvent(source,"resetSaveXML",getRootElement(),username,password) end else triggerClientEvent(source,"set_warning_text",getRootElement(),"Login","Wrong username and/or password!") end else triggerClientEvent(source,"set_warning_text",getRootElement(),"Login","Please enter your password!") end else triggerClientEvent(source,"set_warning_text",getRootElement(),"Login","Please enter your username!") end end addEvent("onRequestLogin",true) addEventHandler("onRequestLogin",getRootElement(),PlayerLogin) function registerPlayer(username,password,passwordConfirm) if not (username == "") then if not (password == "") then if not (passwordConfirm == "") then if password == passwordConfirm then local account = getAccount (username,password) if (account == false) then local accountAdded = addAccount(tostring(username),tostring(password)) if (accountAdded) then outputChatBox ("#FF0000* #00FF00Вы успешно зарегистрировались! [Username: #FFFFFF" .. username .. " #00FF00| Password: #FFFFFF" .. password .. "#00FF00 ]",source,255,255,255,true ) else triggerClientEvent(source,"set_warning_text",getRootElement(),"Register","An unknown error has occured! Please choose a different username/password and try again.") end else triggerClientEvent(source,"set_warning_text",getRootElement(),"Register","An account with this username already exists!") end else triggerClientEvent(source,"set_warning_text",getRootElement(),"Register","Passwords do not match!") end else triggerClientEvent(source,"set_warning_text",getRootElement(),"Register","Please confirm your password!") end else triggerClientEvent(source,"set_warning_text",getRootElement(),"Register","Please enter a password!") end else triggerClientEvent(source,"set_warning_text",getRootElement(),"Register","Please enter a username you would like to register with!") end end addEvent("onRequestRegister",true) addEventHandler("onRequestRegister",getRootElement(),registerPlayer)
Client
wdwLogin_Pannel = {} tabPannel_Main = {} tab_Login = {} tab_Register = {} --Settings blackLoginScreen = true --True/false Black screen, while player login... blackScreenTime = 5 --Time to complete disappearance of the black screen in seconds. GuestEnable = true --Can a Player play as Guest, or no. [true/false] function open_log_reg_pannel() if not(isElement(wdwLogin_Pannel)) then if blackLoginScreen == true then fadeCamera(false,0,0,0,0) end local sWidth,sHeight = guiGetScreenSize() -- The variables local Width,Height = 473,284 --Ширина, Высота окна local X = (sWidth/2) - (Width/2) --Получение центра по X (По ширине экрана) local Y = (sHeight/2) - (Height/2) --Получение центра по Y (Высоте экрана) wdwLogin_Pannel = guiCreateWindow(X,Y,Width,Height,"EBASH_BASS_V_TAZ",false) guiWindowSetSizable(wdwLogin_Pannel,false) tabPannel_Main = guiCreateTabPanel(9,23,455,251,false,wdwLogin_Pannel) tab_Login = guiCreateTab("Вход",tabPannel_Main) lbl_Login = guiCreateLabel(103,72,42,19,"Логин:",false,tab_Login) guiLabelSetVerticalAlign(lbl_Login,"center") guiLabelSetHorizontalAlign(lbl_Login,"right",false) guiSetFont(lbl_Login,"default-bold-small") edit_Login = guiCreateEdit(156,72,169,23,"",false,tab_Login) --Поле ввода логина edit_password = guiCreateEdit(156,106,169,23,"",false,tab_Login) --Поле ввода пароля guiEditSetMaxLength ( edit_Login,25) guiEditSetMaxLength ( edit_password,25) guiEditSetMasked ( edit_password, true ) lbl_Password = guiCreateLabel(48,106,96,19,"Пароль:",false,tab_Login) guiLabelSetVerticalAlign(lbl_Password,"center") guiLabelSetHorizontalAlign(lbl_Password,"right",false) guiSetFont(lbl_Password,"default-bold-small") lbl_top_info = guiCreateLabel(109,6,244,35,"Пожалуйста, напишите имя пользователя и пароль.",false,tab_Login) guiLabelSetColor(lbl_top_info,68,255,134) guiLabelSetVerticalAlign(lbl_top_info,"center") guiLabelSetHorizontalAlign(lbl_top_info,"center",false) lbl_about_legth = guiCreateLabel(142,42,184,18,"Максимум 25 символов.",false,tab_Login) guiLabelSetColor(lbl_about_legth,253,255,68) guiLabelSetVerticalAlign(lbl_about_legth,"center") guiLabelSetHorizontalAlign(lbl_about_legth,"center",false) checkbox_save = guiCreateCheckBox(329,110,100,20,"(Запомнить)",false,false,tab_Login) guiSetFont(checkbox_save,"default-small") btn_Login = guiCreateButton(164,162,147,41,"Вход",false,tab_Login) guiSetFont(btn_Login,"default-bold-small") login_tab_error_msg = guiCreateLabel(31,131,419,25,"Error_login_tab",false,tab_Login) guiLabelSetColor(login_tab_error_msg,255,0,0) guiLabelSetVerticalAlign(login_tab_error_msg,"center") guiLabelSetHorizontalAlign(login_tab_error_msg,"center",false) guiSetFont(login_tab_error_msg,"default-bold-small") tab_Register = guiCreateTab("Регистрация",tabPannel_Main) lbl_account_name = guiCreateLabel(43,39,119,21,"Логин:",false,tab_Register) guiLabelSetVerticalAlign(lbl_account_name,"center") guiLabelSetHorizontalAlign(lbl_account_name,"right",false) guiSetFont(lbl_account_name,"default-bold-small") lbl_reg_top_info = guiCreateLabel(66,5,364,31,"Пожалуйста, заполните все поля! (Не используйте \"!@#$\"%'^&*()\")",false,tab_Register) guiLabelSetColor(lbl_reg_top_info,255,234,55) guiLabelSetVerticalAlign(lbl_reg_top_info,"center") guiLabelSetHorizontalAlign(lbl_reg_top_info,"center",false) edit_account_name = guiCreateEdit(172,40,176,23,"",false,tab_Register) guiEditSetMaxLength ( edit_account_name,25) lbl__reg_tab_password = guiCreateLabel(43,71,119,21,"Пароль:",false,tab_Register) guiLabelSetVerticalAlign(lbl__reg_tab_password,"center") guiLabelSetHorizontalAlign(lbl__reg_tab_password,"right",false) guiSetFont(lbl__reg_tab_password,"default-bold-small") edit__reg_tab_password = guiCreateEdit(172,71,176,23,"",false,tab_Register) guiEditSetMaxLength ( edit__reg_tab_password,25) edit__reg_tab_Repassword = guiCreateEdit(172,102,176,23,"",false,tab_Register) guiEditSetMaxLength ( edit__reg_tab_Repassword,25) lvl_reg_tab_Repassword = guiCreateLabel(43,102,119,21,"Повторите пароль:",false,tab_Register) guiLabelSetVerticalAlign(lvl_reg_tab_Repassword,"center") guiLabelSetHorizontalAlign(lvl_reg_tab_Repassword,"right",false) guiSetFont(lvl_reg_tab_Repassword,"default-bold-small") btn_reg_tab_register = guiCreateButton(153,161,174,42,"Зарегистрироваться!",false,tab_Register) guiSetFont(btn_reg_tab_register,"default-bold-small") reg_tab_error_msg = guiCreateLabel(66,129,364,31,"Error_reg_ttab",false,tab_Register) guiLabelSetColor(reg_tab_error_msg,255,20,0) guiLabelSetVerticalAlign(reg_tab_error_msg,"center") guiLabelSetHorizontalAlign(reg_tab_error_msg,"center",false) guiSetFont(reg_tab_error_msg,"default-bold-small") guiSetVisible(wdwLogin_Pannel,true) --guiSetInputEnabled(true) showCursor(true) --Изменение надписей: guiSetText(reg_tab_error_msg, "") --Поле ошибки в Reg табе guiSetText(login_tab_error_msg, "") --Поле ошибки в Login табе local username, password = loadLoginFromXML() if not( username == "" or password == "") then guiCheckBoxSetSelected ( checkbox_save, true ) guiSetText ( edit_Login, tostring(username)) guiSetText ( edit_password, tostring(password)) else guiCheckBoxSetSelected ( checkbox_save, false ) guiSetText ( edit_Login, tostring(username)) guiSetText ( edit_password, tostring(password)) end --Эвенты addEventHandler("onClientGUIClick",btn_Login,onClickBtnLogin) addEventHandler("onClientGUIClick",btn_reg_tab_register,onClickBtnRegister) if GuestEnable == true then addEventHandler("onClientGUIClick",btnGuest,onClickGuest) end --else --destroyElement(wdwLogin_Pannel) --guiSetInputEnabled(false) --wdwLogin_Pannel = nil --showCursor(false) end end function start_cl_resource() --При старте open_log_reg_pannel() end addEventHandler("onClientResourceStart",getResourceRootElement(getThisResource()),start_cl_resource) function loadLoginFromXML() --Загрузка логина и пароля из XML local xml_save_log_File = xmlLoadFile ("files/xml/userdata.xml") if not xml_save_log_File then xml_save_log_File = xmlCreateFile("files/xml/userdata.xml", "login") end local usernameNode = xmlFindChild (xml_save_log_File, "username", 0) local passwordNode = xmlFindChild (xml_save_log_File, "password", 0) if usernameNode and passwordNode then return xmlNodeGetValue(usernameNode), xmlNodeGetValue(passwordNode) else return "", "" end xmlUnloadFile ( xml_save_log_File ) end function saveLoginToXML(username, password) --Сохрание логина и пароля в XML local xml_save_log_File = xmlLoadFile ("files/xml/userdata.xml") if not xml_save_log_File then xml_save_log_File = xmlCreateFile("files/xml/userdata.xml", "login") end if (username ~= "") then local usernameNode = xmlFindChild (xml_save_log_File, "username", 0) if not usernameNode then usernameNode = xmlCreateChild(xml_save_log_File, "username") end xmlNodeSetValue (usernameNode, tostring(username)) end if (password ~= "") then local passwordNode = xmlFindChild (xml_save_log_File, "password", 0) if not passwordNode then passwordNode = xmlCreateChild(xml_save_log_File, "password") end xmlNodeSetValue (passwordNode, tostring(password)) end xmlSaveFile(xml_save_log_File) xmlUnloadFile (xml_save_log_File) end addEvent("saveLoginToXML", true) addEventHandler("saveLoginToXML", getRootElement(), saveLoginToXML) function resetSaveXML() --Сохрание логина и пароля в XML local xml_save_log_File = xmlLoadFile ("files/xml/userdata.xml") if not xml_save_log_File then xml_save_log_File = xmlCreateFile("files/xml/userdata.xml", "login") end if (username ~= "") then local usernameNode = xmlFindChild (xml_save_log_File, "username", 0) if not usernameNode then usernameNode = xmlCreateChild(xml_save_log_File, "username") end end if (password ~= "") then local passwordNode = xmlFindChild (xml_save_log_File, "password", 0) if not passwordNode then passwordNode = xmlCreateChild(xml_save_log_File, "password") end xmlNodeSetValue (passwordNode, "") end xmlSaveFile(xml_save_log_File) xmlUnloadFile (xml_save_log_File) end addEvent("resetSaveXML", true) addEventHandler("resetSaveXML", getRootElement(), resetSaveXML) function onClickBtnLogin(button,state) --При нажатии на кнопку Login if(button == "left" and state == "up") then if (source == btn_Login) then username = guiGetText(edit_Login) password = guiGetText(edit_password) if guiCheckBoxGetSelected ( checkbox_save ) == true then checksave = true else checksave = false end triggerServerEvent("onRequestLogin",getLocalPlayer(),username,password,checksave) end end end function onClickBtnRegister(button,state) --При нажатии на кнопку Register and Cofirm if(button == "left" and state == "up") then if (source == btn_reg_tab_register) then username = guiGetText(edit_account_name) password = guiGetText(edit__reg_tab_password) passwordConfirm = guiGetText(edit__reg_tab_Repassword) triggerServerEvent("onRequestRegister",getLocalPlayer(),username,password,passwordConfirm) end end end function Error_msg(Tab, Text) if Tab == "Login" then guiSetText(login_tab_error_msg, tostring(Text)) setTimer(function() guiSetText(login_tab_error_msg, "") end,3000,1) elseif Tab == "Register" then guiSetText(reg_tab_error_msg, tostring(Text)) setTimer(function() guiSetText(reg_tab_error_msg, "") end,3000,1) end end addEvent("set_warning_text",true) addEventHandler("set_warning_text",getRootElement(),Error_msg) function onClickGuest(button,state) if(button == "left" and state == "up") then if (source == btnGuest) then guiSetVisible(wdwLogin_Pannel, false) guiSetInputEnabled(false) showCursor(false) if blackLoginScreen == true then fadeCamera(true,blackScreenTime) end end end end function hideLoginWindow() --Функция закрытия логин панели guiSetInputEnabled(false) guiSetVisible(wdwLogin_Pannel, false) destroyElement(wdwLogin_Pannel) wdwLogin_Pannel = nil showCursor(false) removeEventHandler("onClientGUIClick",btn_Login,onClickBtnLogin) if GuestEnable == true then removeEventHandler("onClientGUIClick",btnGuest,onClickGuest) end if blackLoginScreen == true then fadeCamera(true,blackScreenTime) end end addEvent("hideLoginWindow", true) addEventHandler("hideLoginWindow", getRootElement(), hideLoginWindow)
Amx перенос скриптов SAMP в MTA
in Помощь / Отчеты об ошибках
Posted
В логах пусто. Сервер тупо закрывается сам без ошибок.