Jump to content

TheNormalnij

MTA Contributors
  • Posts

    681
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by TheNormalnij

  1. обработка на стороне сервера события onVehicleDamage
  2. это было бы лишком легко для вопроса, тут надо, чтобы автор разъяснил понятнее, что ему нужно...
  3. Вроде б все понятно, но не хватает что ли вызова с помощью : типа MyTable:nulled() И немного жизненных примеров, хотя бы на словах ) спасибо
  4. ВСЕ клиентские события начинаются на onClient... игрок-элемент это hitElement, только надо будет отфильтровать другие элементы и function( hitElement, matchingDimension ) в таких случаях тоже обзывается
  5. я что-то такое делал, в личку скайп скинь, если хочешь.
  6. Посмотри как ты юзаешь таблицу plTable
  7. https://forum.multitheftauto.com/viewtopic.php?f=91&t=22831 Но ты не добьешься такого же результата, как при ручном вычислении размеров.
  8. onPlayerChangeNick Пример номер один. Если надо запретить на акк, то setAccountData юзать надо
  9. всем спасибо function a_start() car = getPedOccupiedVehicle( localPlayer ) if car then local x, y, z = getElementPosition( car ) x2, y2, z2, tx, ty, tz, roll, fov = getCameraMatrix() offX, offY, offZ = -x + x2, -y + y2, -z + z2 tx, ty, tz = -x + tx, -y + ty, -z + tz addEventHandler( "onClientPreRender", root, attachCam ) end end function attachCam() if not car then return; end local m = getElementMatrix ( car ) -- Get the matrix local x = offX * m[1][1] + offY * m[2][1] + offZ * m[3][1] + m[4][1] -- Apply transform local y = offX * m[1][2] + offY * m[2][2] + offZ * m[3][2] + m[4][2] local z = offX * m[1][3] + offY * m[2][3] + offZ * m[3][3] + m[4][3] local x3 = tx * m[1][1] + ty * m[2][1] + tz * m[3][1] + m[4][1] -- Apply transform local y3 = tx * m[1][2] + ty * m[2][2] + tz * m[3][2] + m[4][2] local z3 = tx * m[1][3] + ty * m[2][3] + tz * m[3][3] + m[4][3] setCameraMatrix( x, y, z ,x3, y3, z3, 0, 0 ) end function fixCar() -- ленивое решение проблемы неправильных мест подключения камеры car = getPedOccupiedVehicle( localPlayer ) if car then setElementRotation( car, 0, 0, 0 ) end end
  10. спасибо, попытаюсь, если получится, отпишусь. Я понял и назначил их сам, но onCleintCursorMove работает правильно на gui элементах. И в общем то не приводило к результату. PS может кто знает ссылку, где можно почитать о матрице?
  11. Представь, что камера находится на крыле авто / фаре ( ставит сам игрок ). Она должна вести себя как, например, стандартная камера с бампера. Все просто звучит: получение разницы позиций, получение угла, расчеты, установка камеры. Расчеты, блин, тут не правильные. Если все по центру было, то все значения находились бы элементарно. С десяток способов уже перепробовал, тут надо полный математический подход.
  12. Kernell, код OnClientCursorMove не приводит к результату и нету зависимости от поворота авто. ( синтаксис крут, кое что подлвачу ) Flaker, да, я знаю об погрешностях и они компенсируют друг друга в коде rz - rotalionxy Игроку нужно смотреть не на авто, а в туже сторону относительно авто, что и было. math.cos( math.rad( rz - rotalionxy )) * distancexy тут бред. Бо рассчитывается все относительно не первой позиции авто. x - ( px * math.cos( math.rad( rz - rotalionxy )) ), y - ( py * math.sin( math.rad( rz - rotalionxy )) ) Но и так тоже не раотает
  13. Не получается прицепить камеру к объекту. С помощью функции игрок меняет положение камеры, после этого надо то камеру зафиксировать к авто. Проблема в том, что положение камеры сбивается при разных моих методах расчета ): . function a_start() car = getPedOccupiedVehicle( localPlayer ) -- к этой машине надо прицепить if car then -- проверяем существование машины local x, y, z = getElementPosition( car ) -- получаем позицию авто x2, y2, z2, tx, ty, tz, roll, fov = getCameraMatrix() -- получаем первоначальные настройки камеры px, py, pz = x - x2, y - y2, z - z2 -- вычисляем отклонения distancexy = math.sqrt ( px^2 + py^2 ) -- вычисляем расстояние до элемента по одной оси null, null, rotalionxy = getElementRotation( car ) -- ( пока только по одной оси ) получаем угол поворота авто addEventHandler( "onClientPreRender", root, attachCam ) -- запускаем обработчик end end function attachCam() if car then -- проверяем существование авто local x, y, z = getElementPosition( car ) -- получаем координаты local rx, ry, rz = getElementRotation( car ) -- получаем углы наклона local px = math.cos( math.rad( rz - rotalionxy )) * distancexy -- вычисляем отклонения ERROR? local py= math.sin( math.rad( rz - rotalionxy ) ) * distancexy -- и тут setCameraMatrix( x + px, y + py, z - pz -- устанавливаем позиции ERROR? ,math.cos( math.rad( rz + 90 ) ) + x - px, math.sin( math.rad( rz + 90 ) ) + y - py, -- и точку просмотра ERROR? math.sin( math.rad( rx ) ) + z - pz, ry, 0 ) end end
  14. Sorry, если слишком грубо вышло. Хмм... outputChatBox ( "Едем?", 255, 0, 0 ) Получилось, что в серверном скрипте клиентский синтаксис. Даже если это работает, то отправляет всем, что, наверное, не нужно тебе. outputChatBox ( "Едем?", ==> thePlayer <==, 255, 0, 0 )
  15. ну, нафигачил. function elementClicked( Button, State, ==> ThePlayer <== ) sourse - это источник события, в данном случае это элеиент на который клиннул игрок. local ob = createPed ( 120, 2823.5195,972.787, 10.75 ) если ты хотел, чтобы просматривался клик по педу, то надо было педа до этого кода создать PS не в локальную переменную, если он создается в функции. if getElementType ( clickedElement ) == "ob" then ну, даже если ты хотел проверить тот ли это элемент, то надо было if source == ob then или ты хотел проверить, что это объект if getElementType ( source) == "object" then ну и разные if можно в один всунуть
  16. у тебя в коде guiSetVisible(createGuiWeaponShop, false), первый аргумент - функция. Тебе человек подсказал, что первым аргументом должен быть элемент window
  17. triggerServerEvent("onBankWithdraw", localPlayer, value) второй аргумент
  18. Наверное, половина русских надписей не влезла.
  19. очень интересная штука была в цикле: --server self.status[i] = { } self.status[i][1] = getPlayerName( player ) self.status[i][2] = { 0, 0, 0 } Да, все работает, но почему при такой инициализации self.status[i] = { getPlayerName( player ), { 0, 0, 0 } } в цикле с условием self.status[i][1] == getPlayerName( player ) давало некорректный результат? UP Некорректно в смысле того, что self.status[1] иногда получался таблицей, иногда показывало игрока UP2 Только self.status[1][1] давало ожидаемый результат
  20. КАК именно не работает? Тебе точно надо давать деньги игроку на серверной стороне
  21. в таком стиле можно ставить условия, однако в логике ошибка. takePlayerMoney ( localPlayer ) возвращает bool значение( true или false ). getPlayerMoney ( localPlayer ) возвратить число. Если типы первого и второго значения разные, то конструкция возвращает false, то есть начнет выполнятся код расположенный в else.
×
×
  • Create New...