Jump to content

Вопросы и ответы по MTA.


Recommended Posts

On 22/11/2018 at 18:03, KovornaPLAY said:

Почему у меня чёрный экран при заходе на свой сервак? Я знаю, что куда-то надо ввести FadeCamera(player) = false, но вот только куда?

Если уж на то пошло, то

fadeCamera(player, true)

 в серверном скрипте. 

 

Если сервер freeroam, то попробуй запустить ресурс play, в котором прописаны спавны.

Link to comment

Аве, идущий на смерть приветствует Вас. Столкнулся с проблемой прорисовки объектов при создании карты. Большие объекты прописаны вручную, мелкие разбросаны через map editor, но на сервере получается чуча буча из пропадающих или поворачивающихся вместе с камерой объектов которых даже в помине нет рядом или багование стандартных незатронутых объектов. Как можно это поправить?

Link to comment
  • 1 month later...

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

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)

 

Link to comment
  • 1 month later...

[19-02-08 19:42:17] WARNING: editor_main/server/saveloadtest_server.lua:323: Bad argument @ 'triggerClientEvent' [Expected string at argument 1, got nil]
[19-02-08 19:43:17] WARNING: editor_gui/server/guiserverlink.lua:36: Bad argument @ 'triggerClientEvent' [Expected string at argument 1, got nil]

Кто может помочь с этими проблемами?

Link to comment

Здрасте, возможно ли какнибудь установить готовую карту например new york-а или москвы которые преднозначены для GTA SAN ANDREAS

и если возможно как это пройсходит?

Link to comment
  • 2 weeks later...
  • 4 weeks later...
On 25/02/2019 at 22:08, TheNormalnij said:

@miqadze, scene2res и его аналоги. Или же создание своей сорки мта, с отклченным AC на gta3.img

можно ссылку на документацию? про второй вариант

Link to comment
  • 3 months later...
On 04/07/2019 at 15:19, KatastrofaS said:

Как узнать, какой текстурой покрыта дорога под колёсами машины? Или в более общем виде, какой тип поверхности: бетон, песок, трава?

https://wiki.multitheftauto.com/wiki/ProcessLineOfSight

material: an integer representing the GTASA material ID of the surface hit when applicable (world, objects)

Link to comment

2 K1parik

Спасибо!

Если кому надо, показываю, что у меня получилось:

<script src="cscript.Lua" type="client" />

local material = "???"
setTimer(function()
  local cx,cy,cz = getElementPosition(localPlayer) -- get position
  local gz = getGroundPosition(cx,cy,cz) - 0.001 -- down z
  local hit,_,_,_,_,_,_,_,surface = processLineOfSight(cx,cy,cz,cx,cy,gz,true,false,false,true) -- get material
  if hit then
    material = surface
  else
    material = "---"
  end
end,200,0)
local sx,sy = guiGetScreenSize()
addEventHandler("onClientRender",root, -- display
function()
  dxDrawText(material,sx-94,2,sx-4,12,tocolor(0,0,0,255),3,"arial","right")
  dxDrawText(material,sx-96,0,sx-6,10,tocolor(255,128,255,255),3,"arial","right")
end)

 

Link to comment
local models = {
	["redhex_oneside"] = 7919
	["redhex_oneside2"] = 7920
	["redhex_oneside3"] = 7921
	["sidemosque"] = 7922
	["mural11b"] = 7923
	["mural12"] = 7924
	["mural13"] = 7925
	["wall_new"] = 7926
	["wall_new_pillar"] = 7927
	["wall_new_stena"] = 7929
	["opx2_side_curve1"] = 7940
	["opx2_side_drvway"] = 7945
	["opx2_side1"] = 7947
	["opx2_side2"] = 7950
	["opx2_side3"] = 7938
	["gate4_part1"] = 7952
	["gate4_part2"] = 7953
	["road_alpha1"] = 7939

}

addEventHandler("onClientResourceStart",root,function()
	for i,v in pairs(models) do
		local tex = engineLoadTXD("models/"..i..".txd", v)
		engineImportTXD(tex, v)
		local mod = engineLoadDFF("models/"..i..".dff", v)
		engineReplaceModel(mod, v)
		local col = engineLoadCOL("models/"..i..".col", v)
		engineReplaceCOL(col, v)
	end
end)

Хелп, не могу понять в чем прикол, пытаюсь сделать более короткий код для замены моделей, но чет не работает.

Link to comment
  • Scripting Moderators

@Dexlord, элементы таблицы необходимо отделять друг от друга запятыми.
P.S. Разумнее использовать resourceRoot, а не root, дабы не было повторной замены при старте других ресурсов.

Link to comment
  • 2 weeks later...

Ребята, не могу понять, что за проблема.Установил ГТА, накатил МТА.В итоге не пускает на сервер с ошибкой VF 2 2800007(что-то такое).При том все что можно было попробывать, попробывал.Хелпуйте, иначе загнусь.

Link to comment
  • Scripting Moderators
12 hours ago, lodka said:

Ребята, не могу понять, что за проблема.Установил ГТА, накатил МТА.В итоге не пускает на сервер с ошибкой VF 2 2800007(что-то такое).При том все что можно было попробывать, попробывал.Хелпуйте, иначе загнусь.

Привет. Код точно этот? А так, скорее всего вирусная активность на ПК. Рекомендую выполнить полное сканирование с помощью Malwarebytes.

Link to comment
12 hours ago, lodka said:

Ребята, не могу понять, что за проблема.Установил ГТА, накатил МТА.В итоге не пускает на сервер с ошибкой VF 2 2800007(что-то такое).При том все что можно было попробывать, попробывал.Хелпуйте, иначе загнусь.

 

Link to comment
  • 5 months later...

Как получить элемент из карты на стороне клиента?

Фрагмент карты:

  <marker id="marker (1)" posX="154" posY="-1952" posZ="48" >
	<vehicle id="veh (Enforcer) (1)" model="427" posX="-1635.64" posY="678.53" posZ="7.3" rotZ="300" />
  </marker>

На стороне сервера без проблем получаю таблицу машинок:

addEventHandler("onResourceStart",resourceRoot,
function()
  local vhs = getElementsByType("vehicle")
  outputChatBox("vehicles: " .. #vhs)
end)

А на стороне клиента #vhs = 0  ☹️

Link to comment
  • Scripting Moderators

Если транспорт создан на сервере, он в любом случае должен быть доступен с помощью getElementsByType на клиенте. Возможно проблема в другом месте.

Link to comment
  • 3 weeks later...
  • Other Languages Moderators
4 hours ago, MRmihailZH said:

У меня вопрос. Можно ли доверять https://luac.multitheftauto.com/ ? То есть могут ли люди декомпилировать мой ресурс?

Есть слухи, что на старом обфускаторе 1.5.2-9.07903 потуги были.

На новом, всё надежно.

Link to comment
  • 5 months later...

Как экспортировать "ООП-функции"?

Например, MyClass:new()
Добавляю в meta.xml: <export function="MyClass:new"/>
При вызове через exports.MyClass:new() выдает ошибку "call: failed to call 'MyClass:new' [string "?"]"
При вызове через exports.MyClass:MyClass:new() выдает ошибку "function arguments expected near ':' "

Link to comment
  • 5 weeks later...

У меня есть картинка .png формата, в котором есть черный прямоугольник. Как можно узнать координаты черного прямоугольника и его размеры относительно монитора? И можно ли с помощью шейдера будет убрать этот черный прямоугольника. Заранее благодарю за ответ.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...