Jump to content

Erema93

Members
  • Posts

    60
  • Joined

  • Last visited

Posts posted by Erema93

  1. При переносе скриптов из 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)

     

    Сразу скажу, что сервер и клиент на последней версии, файл для модуля находится в нужном месте.

  2. @alexaxel705

    Я немного о другом имел ввиду. Если у всех старых 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?

  3. 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 )

    [M]Province

    Надо указать новый 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?

  4. Не ну это понятно, что так можно. Но не думаю, что разработчики сервера так делали, ибо несколько трамвайных путей и каждый трамвай ездил по своему маршруту. Опять же знаю, что при наличии файла Track можно заспавнить рельсовый транспорт на определенный путь. 

  5. On 24/02/2019 at 05:18, Fanbox said:

    Братан, тут нету ничего для позицци на игрока!?

    Ну тогда что означают эти координаты в таблицы?  Оставлял по одной разной строке и пассажир садился не на рандомное место, а на то куда указано в коде.  То есть каждая строка в таблице отвечала за определенное место

  6. Возможно подключить скриптом подключить дополнительные пути для рельсового  транспорта с помощью скрипта?
    Видел на одном сервере, где рельсовый транспорт ездит по разным маршрутам, но ведь в оригинальной GTA лимит путей очень маленький. Хотелось бы знать, с помощью чего прописывать пути, как их подключать (если возможно скриптом в MTA)?

  7. Есть вот такой код

    Spoiler
    
    local 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)

     

    Подскажите, каким образом задаются в этом коде координаты пассажирских мест и как узнать необходимую координату, если хочу новое место для пассажира прописать?

  8. 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
    )


     

  9. 2 hours ago, K1parik said:

    ну да. потому что условие такое. если машина 537 и игрок в группе он сможет сесть в машину 537. если хоть одно условие не соответствует то игрок никуда не может сесть

    Ну а мне нужно так: игрок в группе сможет сесть в машину 537, но если игрок не в группе, то не сможет сесть в неё. Не нужно, чтобы он никуда не смог сесть.

    Пример: игрок состоит в группе машинистов, то он сможет сесть в локомотив, но если он не состоит в этой группе, то он не сможет в него сесть (а в остальной любой сможет)

    Более понятный пример: если игрок состоит во фракции, то у него есть доступ к авто фракции, иначе - нет доступа.

  10. Пытался двигаться в нужном направлении, но пока что нужный итог не получается 

    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
    )

     

  11. Как сделать, чтобы определенным транспортом могли пользоваться только игроки определенной команды(группы,  team)?

    Знаю только одно условие: 

    if getTeamName (getPlayerTeam (client)) == "Название группы" then      
     
     
    else
    		
    outputChatBox ("У вас нет доступа к ТС", hitElement)
    end 

    А второе не могу додуматься. Причем нужно, чтобы оба условия соблюдались. 

  12. Всех приветствую. Нужна помощь: есть логин панель, надо

    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)
    

     

×
×
  • Create New...