Jump to content

TheVadiaCool

Members
  • Posts

    12
  • Joined

  • Last visited

Posts posted by TheVadiaCool

  1. Всех приветствую. Нашли такую проблему. У нас на проекте карта в ресурсе, то есть при старте ресурса появляются объекты и удаляется стандартная карта GTA SA. Так вот, по какой-то причине ни на один объект не падает свет. От столба, от фар света нет. Решили разобраться, по какой же причине это. Выяснили, что даже если спавнишь стандартный объект из GTA SA, например, дорогу, то на нее свет не падает, НО СВЕТ НА ЭТОМ ЖЕ ОБЪЕКТЕ НА СТАНДАРТНОЙ КАРТЕ ЕСТЬ!

    Так вот, почему не работает свет на других объектах? Как решить? Может быть какие-то флаги для объекта надо прописывать или что? Или свет падает только в том случае, если карта через .IPL?

  2. 18 hours ago, Disinterpreter said:

    Ну если ты натыкаешь бесконечных циклов, то CPU от этого вырастит, например. Так же иногда в простое сервер всё же делает какие-то вещи(но обычно на гарфиках это пики вего лишь).

    Я выключал почти все ресурсы, все тоже самое, не могу найти причину. ДАЖЕ если бы были циклы, то перфоманс браузер показал бы это. Я специально создал цикл и проверил - нагрузка была показана в браузере.
    Причину найти не могу.

  3. Здравствуйте. Столкнулся с такой ситуацией, даже не знаю, является это проблемой или нет. Дело в том, что при простое мой сервер использует 220 MHz процессора (хостинг куплен с тарифом на 1100 MHz), соответственно, в панели хостинга показывает, что процессор нагружен на 19% (220 MHz от 1100 MHz). Притом, что игроков на сервере нет. Искал причину в Resource Browser'e, но там мне показывает, что нагрузки нет ВООБЩЕ, лишь занята оперативная память. Посмотрел и внутри самой игры с помощью IPB (Ingame Perfomance Browser), но там написано, что нагрузка процессора меньше 1%. И эти 19% держатся почти постоянно, даже ночью, когда нет СОВСЕМ никакой нагрузки от игроков. Находясь в игре, это нагрузку никак не ощутить, все сообщения отправляются быстро, задержек не имеется. Скажите, пожалуйста, норма ли это? Возможно, что сервер сам по себе тратит ресурсы, просто будучи запущенным?

  4. 16 hours ago, K1parik said:

    отправляй триггер не всем, а тем кто рядом с игроком

    Даже если буду делать так, то триггер будет отправляться на координаты игрока, то есть будет 2 звука

  5. 41 minutes ago, Sarrum said:

    Конкретизируйте вопрос. С чем конкретно возникли трудности в понимании?

    Всё, спасибо Вам огромное, вопросов уж нет по данной теме. Но при написании другого скрипта, у меня возникли определённые проблемы. Не могли бы помочь? https://forum.multitheftauto.com/topic/125436-помогите-пожалуйста/?tab=comments#comment-981807

     

  6. Написал скрипт для дверей автобуса: сделал функцию открытия и закрытия дверей с соответствующим звуком. Открытие/закрытие происходит на серверной части, а звук на локальной, т.к. на серверной, как я понимаю, нет функции playSound3D. Всё работало, слышал звуки других игроков, свои тоже, позиционирование есть, но одна заметил одну проблему. Когда один игрок, который сидит в автобусе, открывает двери, то звук воспроизводится и у второго водителя на любом расстоянии. Даже на другом конце карты. На видео, прикреплённом ниже, это отчётливо слышно и видно. Код также оставлю внизу. Помогите, кто сможет. Буду благодарен.

    Мета:
    <meta>
    <info author="TheVadiaCool" type="script" name="BusDoors" description="Script for open doors" />
    <script src="server.Lua" type="server" />
    <script src="client.Lua" type="client" />
    <file src="sounds/opendoors.wav" download="true" />
    <file src="sounds/closedoors.wav" download="true" />
    </meta>
    
    Сервер:
    function binds(source)
    bindKey(source, "2", "down", doors)
    end
    addEventHandler("onPlayerJoin", getRootElement(), binds)
    
    
    function doorsFunc(source)
    	if isPedInVehicle(source) and getPedOccupiedVehicleSeat(source) == 0 then
    		bus = getPedOccupiedVehicle(source)
    		if getElementModel(bus) == 413 then
    			if not getElementData(bus, "doorsOpen") then
    				setElementData(bus, "doorsOpen", true)
    				triggerClientEvent("openSound", getRootElement())
    				setVehicleDoorOpenRatio(bus, 3, 1, 2000)
    				setVehicleDoorOpenRatio(bus, 4, 1, 2000)
    				setVehicleDoorOpenRatio(bus, 5, 1, 2000)
    			else
    				setElementData(bus, "doorsOpen", nil)
    				triggerClientEvent("closeSound", getRootElement())
    				setVehicleDoorOpenRatio(bus, 3, 0, 2000)
    				setVehicleDoorOpenRatio(bus, 4, 0, 2000)
    				setVehicleDoorOpenRatio(bus, 5, 0, 2000)
    			end
    		end
    	end
    end
    addCommandHandler("doors", doorsFunc)
    
    Клиент:
    function playOpenDoors(source)
    	plr = getLocalPlayer()
    	local x,y,z = getElementPosition(plr)
    	openDoorsSound = playSound3D("sounds/opendoors.wav", x,y,z)
    	setSoundMaxDistance(openDoorsSound, 25)
    	setElementDimension(openDoorsSound, 0)
    end
    
    function playCloseDoors(source)
    	plr = getLocalPlayer()
    	local x,y,z = getElementPosition(plr)
    	closeDoorsSound = playSound3D("sounds/closedoors.wav", x,y,z)
    	setSoundMaxDistance(closeDoorsSound, 25)
    	setElementDimension(closeDoorsSound, 0)
    end
    
    addEvent("openSound", true)
    addEventHandler("openSound", getRootElement(), playOpenDoors)
    
    addEvent("closeSound", true)
    addEventHandler("closeSound", getRootElement(), playCloseDoors)

     

  7. 9 hours ago, Sarrum said:

    ?. Необходимо добавить проверку в событие, тогда маркер будет срабатывать только для локального игрока.

    
    if ( hitPlayer == localPlayer ) then
    

    Но по коду есть проблема. Событие onClientMarkerHit имеет неверный набор параметров. Если посмотреть на вики, то там их 2: hitPlayer и matchingDimension. В вашем коде source (источник события, которым является маркер) указан первым аргументом, тем самым переопределяется и становится элементом, который попал в маркер (hitPlayer). Соответственно идёт сдвиг, и hitPlayer становится matchingDimension. Формально это ни на что не влияет и можно называть параметры как душе угодно, но в данном случае налицо ошибка, которая лишает нас источника события (source) и путает неверным визуальным набором параметров. Главное понимать, что не названия параметров имеют значение, а их порядок.

    Пример того, как это должно быть:

    
    function createPickMarker ( hitPlayer, matchingDimension )
    	-- source - маркер
    	-- hitPlayer - игрок, который попал в маркер
    	-- matchingDimension - логический тип, true - если игрок находится в одном измерении с маркером
    	if ( hitPlayer == localPlayer ) then -- проверка, если элемент это локальный игрок
    		if ( matchingDimension ) then -- если измерение игрока с маркером совпадает (опционально)
    			-- ...
    		end
    	end
    end
    

     

    Большое спасибо за ответ! Понял свою ошибку, но до сих пор не могу понять, на что влияют аргументы.

  8. В общем, написал скрипт на работу грузчика, основная часть написана на клиенте. Суть такая: спавнится точка, игрок встает на неё, берёт "груз", затем несёт его в здание. 

    Суть проблемы: спавнится метка у двоих игроков в одном месте (от лица одного игрока она в одном месте и от лица того же в том же), и если её заберёт один игрок, то она пропадёт и у второго игрока и у обоих сработает хитКлиентМаркер. Кто знает, что нужно сделать, чтобы исправить это? Может быть как-то присвоить каждому игроку свой маркер или что? Пожалуйста, помогите. Скрипт и демонстрационное видео оставлю ниже.

     

    Сервер:
    pickup = createPickup(131.72089, -155.40170, 141.00000, 3, 1275, 0)
    jobBlip = createBlip(131.72089, -155.40170, 141.00000, 11, 0, 0, 0, 255)
    
    function jobCheck(source)
    	if not getElementData(source, "job") then
    		setElementData(source, "job", true)
    		outputChatBox("#00FF00Вы устроились на работу грузчика.", source, 255, 255, 255, true)
    		playerSkin = getPlayerSkin(source)
    		setElementData(source, "skin", playerSkin)
    		setPlayerSkin(source, 27)
    		setTimer(function() triggerClientEvent(source, "createPickStart", source) end, 100, 1)
    		else
    		setElementData(source, "job", nil)
    		outputChatBox("#00FF00Вы закончили работу грузчика.", source, 255, 255, 255, true)
    		setPlayerSkin(source, getElementData(source, "skin"))
    		triggerClientEvent(source, "endJ", source)
    	end
    end
    addEventHandler("onPickupHit", pickup, jobCheck)
    
    Клиент:
    pickMarkers = {
    	{141.09631, -162.59451, 141.00000},
    	{141.55725, -156.79323, 141.00000},
    	{143.05446, -150.61909, 141.00000}
    }
    
    putMarkers = {
    	{145.51653, -168.54268, 142.50313},
    	{145.38332, -179.90881, 142.49567},
    	{136.64456, -175.62262, 142.50313},
    	{145.56894, -207.79187, 142.50313},
    	{136.34845, -199.31641, 142.50082},
    	{136.86980, -184.26260, 142.50313},
    	{136.42323, -167.00807, 142.50313}
    }
    zpMin = 50
    zpMax = 150
    
    function createPickMarker(source, hitPlayer, matchingDimension)
    	local x,y,z = pickMarkers[math.random(1, #pickMarkers)][1],pickMarkers[math.random(1, #pickMarkers)][2],pickMarkers[math.random(1, #pickMarkers)][3]-1
    	pickMarker = createMarker(x,y,z, "cylinder", 1.5, 0, 150, 150, 155)
    	plr = getLocalPlayer()
    	outputChatBox("#00FF00Возьмите стройматериалы со склада.", 255, 255, 255, true)
    	if not getElementData(source, "zp") then
    	else
    	local money = math.random(zpMin,zpMax)
    	givePlayerMoney(money)
    	outputChatBox("#00FF00Заработано: ".. money .."", 255, 255, 255, true)
    	end
    	if isElement(putMarker) then destroyElement(putMarker) end
    	addEventHandler("onClientMarkerHit", pickMarker, createPutMarker)
    end
    
    function createPutMarker(source, hitPlayer, matchingDimension)
    	local x,y,z = putMarkers[math.random(1, #putMarkers)][1],putMarkers[math.random(1, #putMarkers)][2],putMarkers[math.random(1, #putMarkers)][3]-1
    	putMarker = createMarker(x,y,z, "cylinder", 1.5, 0, 150, 150, 155)
    	outputChatBox("#00FF00Отнесите стройматериалы в здание.", 255, 255, 255, true)
    	if isElement(pickMarker) then destroyElement(pickMarker) end
    	setElementData(source, "zp", true)
    	addEventHandler("onClientMarkerHit", putMarker, createPickMarker)
    end
    addEvent("createPickStart", true)
    addEventHandler("createPickStart", root, createPickMarker)
    
    
    function endJob(source)
    	if isElement(pickMarker) then destroyElement(pickMarker) end
    	if isElement(putMarker) then destroyElement(putMarker) end
    end
    addEvent("endJ", true)
    addEventHandler("endJ", root, endJob)
    
    Мета:
    <meta>
    <info author="TheVadiaCool" type="script" name="Job" description="Gruzchik" />
    <script src="server.Lua" type="server" />
    <script src="client.Lua" type="client" />
    </meta>

     

×
×
  • Create New...