Jump to content

Общий мини "HELP ME" топик по скриптингу


Recommended Posts

Здравствуйте, уважаемые форумчане :D Прошу помощи т.к. чую я, что что-то не догоняю, ибо скриптинг только осваиваю.

Задача: Имеем транспорт, который находится в движении. Нужно заспавнить игрока в какой-либо момент времени по координатам данного транспорта. Вопрос: Как это сделать?

Пытался получить координаты транспорта и после этого заспавнить по ним игрока.

т.е.

  
          local x, y, z = getElementPosition(vehicle) 
          spawnPlayer(player, x, y, z) 
           

Проблема в том, что при вызове

getElementPosition(vehicle) 

x, y, z присваиваются начальные координаты транспорта(координаты по которым он спавнился), а не те, которые в данный момент времени. А следовательно персонажа спавнит в точке спавна транспорта и почему-то транспорт так же спавнится в нач точке или рядом... визуально ощущение будто его отбрасывает назад. А если проделать все тоже самое еще раз то персонажа спавнит в след точку, в которую он должен был, по моему представлению, заспавнится в предыдущий раз.

P.S. Спавн персонажа реализован функцией spawn. Вызывается она по таймеру

setTimer(spawn, 20000, 1) 

И делаю это все на стороне сервера.

Link to comment
Всем привет, и всех не атеистов с рождеством :) У меня вопрос, можно ли со стороны сервера изменить клиенту масштаб чата и его фон?

Нет. Для этого придётся сделать свой чат.

Link to comment
Получай координаты тачки на стороне клиента, после этого делай тригер на сервер и спавни.

Спасибо! :D Реализовал. Но вот теперь вопросики возникли... а будут ли теперь проблемы с синхронизацией между игроками? Т.е. может ли оказаться у одного игрока транспорт в одном месте а у другого в другом в один и тот же момент времени? И если может, то тогда получится, что игроки буду спавнится по немного различным координатам? Или например один заспавнится через пару секунд после другого, при условии что спавн должен быть только тогда, когда транспорт окажется в определенной координате ? И если будет, то как этого избежать?

И еще вопрос. Возможно ли сделать так, чтоб бы транспорт было видно на большом расстоянии? Хотя бы в 1км, а лучше в пару.

Пробовал делать так:

engineSetModelLODDistance (476, 300) 

476 - это ID самолета Rustler. Так же пробовал вместо ID использовать элемент. Но изменений не заметил. Самолет пролетает и исчезает всегда на одном и том же месте. Возможно я в функции передаю не тот аргумент, но на вики вроде как написано что надо ID. Но я хз будет ли ID модели самолета - 476. Возможно моя ошибка в том что эти ID не одно и тоже... Так же как я понял из вики, то есть ограничения на дальность прорисовки. Но возможно я не так понял...

Юзаю это все вместе с

setElementStreamable 

что бы клиент просчитывал транспорт на любом расстоянии от игрока.

Link to comment
for _, v in pairs( Table ) do 
 for _, v2 in pairs( v ) do 
    source:setData( v2[ 1 ], v2[ 2 ] ); 
 end 
end 
  

Еще один вопрос а если я буду использовать JSON?

  
local needs = fromJSON(data[1]['needs']) 
local status = fromJSON(data[1]['status']) 
local items = fromJSON(data[1]['items']) 
for i, data in ipairs(Table.need) do 
    player:setData(data[1], needs[i]) 
end 
for i, data in ipairs(Table.stat) do 
    player:setData(data[1], status[i]) 
end 
for i, data in ipairs(Table.item) do 
    player:setData(data[1], items[i]) 
end 
  

Link to comment
Как можно ограничить дистанцию бега? Тобишь, чтобы персонаж уставал. На вики найти не могу, поиск тоже результатов не дал

https://wiki.multitheftauto.com/wiki/SetPedStat

Да это то я нашел, но ни один параметр не повлиял на продолжительность бега

Link to comment
Как можно ограничить дистанцию бега? Тобишь, чтобы персонаж уставал. На вики найти не могу, поиск тоже результатов не дал

https://wiki.multitheftauto.com/wiki/SetPedStat

Да это то я нашел, но ни один параметр не повлиял на продолжительность бега

https://wiki.multitheftauto.com/wiki/SetPedWalkingStyle

Link to comment

Да это то я нашел, но ни один параметр не повлиял на продолжительность бега

https://wiki.multitheftauto.com/wiki/SetPedWalkingStyle

Это стиль бега. А мне нужно сделать так, чтобы персонаж уставал, можно конечно скриптово его тормозить,тобишь через Velocity, но неужели в МТА нет готового решения? В сингле было что то типа прокачки этого умения, чем больше ты бегаешь, тем больше выносливость, чем больше выносливость, тем дальше ты сможешь пробежать.

Link to comment
Это стиль бега. А мне нужно сделать так, чтобы персонаж уставал, можно конечно скриптово его тормозить,тобишь через Velocity, но неужели в МТА нет готового решения? В сингле было что то типа прокачки этого умения, чем больше ты бегаешь, тем больше выносливость, чем больше выносливость, тем дальше ты сможешь пробежать.

Вроде как нет, нужно писать всю систему самому.

Link to comment

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

1. Создаем педа на экране

2. Вращаем педа

3. Пишем шейдер, который уменьшает размер элемента

https://wiki.multitheftauto.com/wiki/Sh ... #Ped_morph (посмотреть и сделать на основе его, там используется уменьшение/увеличение частей всего тела, думаю можно поэкспериментировать)

4. Применяем шейдер к этому педу

createPed 
setElementPosition 
setElementRotation 
getWorldFromScreenPosition 
dxCreateShader 
engineApplyShaderToWorldTexture 

С этого поста не совсем понял как засунуть пед в GuiCreateStaticImage/DxDrawImage, или как его по другому вывести? Заранее спасибо.

Link to comment

Подтяните в коде...

Какой метод лучше использовать?

Логическое

  
function isLogged(element) 
    if (not element) or (element:getType() ~= 'player') then return end 
    local elementData = element:getData('logged') 
    return elementData and true or false 
end 
  

IF ELSE

  
function isLogged(element) 
    if (not element) or (element:getType() ~= 'player') then return end 
    if (element:getData('logged') == true) 
        return true 
    else 
        return false 
    end 
end 
  

Link to comment
Подтяните в коде...

Какой метод лучше использовать?

Логическое

  
function isLogged(element) 
    if (not element) or (element:getType() ~= 'player') then return end 
    local elementData = element:getData('logged') 
    return elementData and true or false 
end 
  

IF ELSE

  
function isLogged(element) 
    if (not element) or (element:getType() ~= 'player') then return end 
    if (element:getData('logged') == true) 
        return true 
    else 
        return false 
    end 
end 
  

function isLogged( element ) 
    return element and element:getType() == 'player' and element:getData( 'logged ') == true; 
end 

Link to comment
Это стиль бега. А мне нужно сделать так, чтобы персонаж уставал, можно конечно скриптово его тормозить,тобишь через Velocity, но неужели в МТА нет готового решения? В сингле было что то типа прокачки этого умения, чем больше ты бегаешь, тем больше выносливость, чем больше выносливость, тем дальше ты сможешь пробежать.

Вроде как нет, нужно писать всю систему самому.

Алгоритм: Ставишь таймер, который обновляет раз в 30 секунд состояние бега (присваиваешь к переменной или элемент дате значение) если число == 100, то применяешь toggleControl и проигрываешь анимацию "уставания" - можешь найти в ресурсе freeroam, после истечения времени снова применяй toggleControl чтобы игрок смог снова бегать.

toggleControl 
setPedAnimation 
setTimer 
  

Link to comment

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

function createSelectedVehicle(leaf, seat) 
   local vmashine = getPedOccupiedVehicle(getLocalPlayer()) 
   if vmashine then 
    if (seat == 0) then 
                if not leaf then 
                leaf = getSelectedGridListLeaf(wndCreateVehicle, 'vehicles') 
                if not leaf then 
                return 
                end 
                end 
                server.giveMeVehicles(leaf.id) 
      else return end 
   else 
                if not leaf then 
                leaf = getSelectedGridListLeaf(wndCreateVehicle, 'vehicles') 
                if not leaf then 
                return 
                end 
                end 
                server.giveMeVehicles(leaf.id) 
   end 
end 

upd: сам сделал, надо было редактировать функцию на стороне сервера.

Link to comment

Ребят, нужна ваша помощь!

Для реализации своего проекта мне нужно вводить новые переменные или елемент даты в общем пока не знаю такие как хп, выносливость и другие...

Вопрос:

Как сохранять и хранить эти данные?

Link to comment
Ребят, нужна ваша помощь!

Для реализации своего проекта мне нужно вводить новые переменные или елемент даты в общем пока не знаю такие как хп, выносливость и другие...

Вопрос:

Как сохранять и хранить эти данные?

https://wiki.multitheftauto.com/wiki/Server_Scripting_Functions#Account_functions

https://wiki.multitheftauto.com/wiki/Server_Scripting_Functions#SQL_functions

Link to comment

Снова вас беспокою ребят! На этот раз проблема с триггерами! Я со своим светлым умом, никак не могу понять как они работают =\

Для начала мне нужно просто брать у клиента, координаты персонажа и отправлять их на сервер! Как такое сделать? И обьясните пожалуйста как работает, на википедии уж слишком заумно!

Link to comment

Я просто скину пример твоего случая, а ты задашь вопросы если они будут:

function someFunc() 
local x,y,z = getElementPosition(myElement) 
triggerServerEvent("myServerEvent",localPlayer,x,y,z) 
end 
  

function someServerFunc(x,y,z) 
outputChatBox("X: "..tostring(x)..", Y: "..tostring(y)..", Z: "..tostring(z)) 
end 
addEvent("myServerEvent",true) 
addEventHandler("myServerEvent",root,someServerFunc) 
  

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