-
Posts
681 -
Joined
-
Last visited
-
Days Won
4
Everything posted by TheNormalnij
-
^^^^^ Прикольный шейдерный шар
-
обработка на стороне сервера события onVehicleDamage
-
это было бы лишком легко для вопроса, тут надо, чтобы автор разъяснил понятнее, что ему нужно...
-
[Lua] setmetatable, учимся работать с метатаблицами
TheNormalnij replied to Kernell's topic in Уроки / Примеры
Вроде б все понятно, но не хватает что ли вызова с помощью : типа MyTable:nulled() И немного жизненных примеров, хотя бы на словах ) спасибо -
ВСЕ клиентские события начинаются на onClient... игрок-элемент это hitElement, только надо будет отфильтровать другие элементы и function( hitElement, matchingDimension ) в таких случаях тоже обзывается
-
я что-то такое делал, в личку скайп скинь, если хочешь.
-
Посмотри как ты юзаешь таблицу plTable
-
https://forum.multitheftauto.com/viewtopic.php?f=91&t=22831 Но ты не добьешься такого же результата, как при ручном вычислении размеров.
-
onPlayerChangeNick Пример номер один. Если надо запретить на акк, то setAccountData юзать надо
-
-
всем спасибо 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
-
спасибо, попытаюсь, если получится, отпишусь. Я понял и назначил их сам, но onCleintCursorMove работает правильно на gui элементах. И в общем то не приводило к результату. PS может кто знает ссылку, где можно почитать о матрице?
-
Представь, что камера находится на крыле авто / фаре ( ставит сам игрок ). Она должна вести себя как, например, стандартная камера с бампера. Все просто звучит: получение разницы позиций, получение угла, расчеты, установка камеры. Расчеты, блин, тут не правильные. Если все по центру было, то все значения находились бы элементарно. С десяток способов уже перепробовал, тут надо полный математический подход.
-
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 )) ) Но и так тоже не раотает
-
Не получается прицепить камеру к объекту. С помощью функции игрок меняет положение камеры, после этого надо то камеру зафиксировать к авто. Проблема в том, что положение камеры сбивается при разных моих методах расчета ): . 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
-
Sorry, если слишком грубо вышло. Хмм... outputChatBox ( "Едем?", 255, 0, 0 ) Получилось, что в серверном скрипте клиентский синтаксис. Даже если это работает, то отправляет всем, что, наверное, не нужно тебе. outputChatBox ( "Едем?", ==> thePlayer <==, 255, 0, 0 )
-
ну, нафигачил. 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 можно в один всунуть
-
string.byte Только хардкор
-
у тебя в коде guiSetVisible(createGuiWeaponShop, false), первый аргумент - функция. Тебе человек подсказал, что первым аргументом должен быть элемент window
-
triggerServerEvent("onBankWithdraw", localPlayer, value) второй аргумент
-
Наверное, половина русских надписей не влезла.
-
очень интересная штука была в цикле: --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] давало ожидаемый результат
-
КАК именно не работает? Тебе точно надо давать деньги игроку на серверной стороне
-
в таком стиле можно ставить условия, однако в логике ошибка. takePlayerMoney ( localPlayer ) возвращает bool значение( true или false ). getPlayerMoney ( localPlayer ) возвратить число. Если типы первого и второго значения разные, то конструкция возвращает false, то есть начнет выполнятся код расположенный в else.