Jump to content

Flaker

Members
  • Posts

    619
  • Joined

  • Last visited

Everything posted by Flaker

  1. Ну вариант 1: Если у педа будет 999 жизней, то путем несложных высичлений мы узнаем, что получать урона он должен в 9.9 раз меньше... Следовательно, при попадании по педу делим полученный урон на 9.9 Вариант 2: Присвоить отдельную дату с жизнями и по при попадании по педу ее уменьшать на определенное значение, которое прямо пропорционлально нанесенному урону... Обычный урон при этом убрать...
  2. Пишешь скрипт, который при выстреле в бота отменяет эвент и востанавливает здоровье на 100... все...
  3. Возможно будет проще воспользоваться ресурсом Кеникса? https://community.multitheftauto.com/index.php?p=resources&s=details&id=2020
  4. Хмм... Спорно... Вобщем то, наиболее правильный вариант, имхо, такой: В таблицу с моделью и ценой машины добавить еще и название: {579,60000, "Название"} И строку local carName = getVehicleNameFromModel (v[1]) заменить на local carName = v[3] P.S. Stemka, код загоняй в [lua] тэги
  5. https://community.multitheftauto.com/index.php?p=resources&s=details&id=4481
  6. Нашел, я эту функцию: function processLineForElements(startX, startY, startZ, endX, endY, endZ) local foundElement = false local hitX, hitY, hitZ = nil, nil, nil --limit foundElementDistance to distance to endpoint because the collision check goes past the endpoint for some reason local foundElementDistance = math.sqrt((endX-startX)^2 + (endY-startY)^2 + (endZ-startZ)^2) for v in pairs(g_colless) do while true do --forget elements that have been destroyed if not isElement(v) then g_colless[v] = nil break end --ignore if it's in a different dimension if getElementDimension(v) ~= getWorkingDimension() then break end --ignore if its not a valid type local strType = getElementType(v) if not isColless[strType] and strType ~= "object" then g_colless[v] = nil break end --ignore if it's in a different interior if not noInteriors[strType] and getElementInterior(v) ~= g_workingInterior then break end --ignore selection arrow marker if v == g_arrowMarker then break end local centerX, centerY, centerZ = getElementPosition(v) local distance = math.sqrt((centerX-startX)^2 + (centerY-startY)^2 + (centerZ-startZ)^2) if (distance <= foundElementDistance) then local intersection = specialIntersections[getElementType(v)] or commonIntersection local _hitX, _hitY, _hitZ = intersection(startX, startY, startZ, endX, endY, endZ, centerX, centerY, centerZ, v) if _hitX then foundElement = v foundElementDistance = distance hitX = _hitX hitY = _hitY hitZ = _hitZ end end break end end return foundElement, hitX, hitY, hitZ end Логика примерно такая: 1) в эвенте onClientElementStreamIn: если тип source не подходит не под один из стандартных, то source добавляется в g_colless. В эвенте onClientElementStreamOut, соответственно, вытаскивается из таблицы. 2) В функции processLineForElements проход по таблице g_colless с последующией проверкой на наличие объекта. 3) Наличие объекта на заданом пути проверяется функцией: collisionTest.Sphere = function(lineStart, lineEnd, sphereCenter, sphereRadius) -- check if line intersects sphere around element local vec = Vector3D:new(lineEnd.x - lineStart.x, lineEnd.y - lineStart.y, lineEnd.z - lineStart.z) local A = vec.x^2 + vec.y^2 + vec.z^2 local B = ( (lineStart.x - sphereCenter.x) * vec.x + (lineStart.y - sphereCenter.y) * vec.y + (lineStart.z - sphereCenter.z) * vec.z ) * 2 local C = ( (lineStart.x - sphereCenter.x)^2 + (lineStart.y - sphereCenter.y)^2 + (lineStart.z - sphereCenter.z)^2 ) - sphereRadius^2 local delta = B^2 - 4*A*C if (delta >= 0) then delta = math.sqrt(delta) local t = (-B - delta) / (2*A) if (t > 0) then return Vector3D:new(lineStart.x + vec.x * t, lineStart.y + vec.y * t, lineStart.z + vec.z * t) end end end Lil, вопрос такой, функция TestLineSphere будет в скриптинг выведена? Или это просто набросок? http://code.google.com/searchframe#KdIewVX4zdg/trunk/MTA10/game_sa/CWorldSA.cpp&q=TestLineSphere%20package:mtasa-blue%5C.googlecode%5C.com&ct=rc&cd=2&sq=&l=126
  7. Мде... Интересную задачку ты задал) Я про эту функцию эдитора вобще не знал, так как не пользовался им особо... Просмотрел код эдитора, там вобще закопаешься... Ну вобщем при беглом осмотре кода, ничего больше чем: local surfaceFound, surfaceX, surfaceY, surfaceZ, element = processLineOfSight(camX, camY, camZ, worldX, worldY, worldZ, true, true, true, true, true, true, false, true, selectedElement) local waterFound, waterX, waterY, waterZ = testLineAgainstWater(camX, camY, camZ, worldX, worldY, worldZ) В функции processCursorMove таким образом отлавливаются объекты, вроде бы... Дальше есть такой код: if (not collisionless) then centerToBaseDistance = exports.edf:edfGetElementDistanceToBase(selectedElement) local finalX, finalY, finalZ = getCoordsWithBoundingBox(waterX, waterY, waterZ) setElementPosition(selectedElement, finalX, finalY, finalZ) else setElementPosition(selectedElement, waterX, waterY, waterZ) end Я попробовал прошерстить функции edfGetElementDistanceToBase и getCoordsWithBoundingBox... Но там ничего не нашел... (Осматривал бегло) Дальше лезть не стал, если есть желание, сам глянь... P.S. Ты точно уверен что processLineOfSight не может отследить такие объекты? Для чего тебе вобще это понадбилось?
  8. https://wiki.multitheftauto.com/wiki/GetPedTargetCollision - На заметку) Если делаешь что то типо лазера и тд... https://wiki.multitheftauto.com/wiki/ProcessLineOfSight смотри аргументы. Там можно настроить на что она будет реагировать. А что ты конкретно сделать пытаешься?
  9. Ныне покинувший нас MX_Master уже делал такое)
  10. 1) Создаешь GUI 2) Вешаешь обработчики эвентов на нужные тебе элементы. ( Или можешь повесить глобальный и отсеживать source ) 3) В функциях обработчиках для каждого эвента аргументы свои, это надо учитывать... Читай это: https://wiki.multitheftauto.com/wiki/Introduction_to_Scripting_the_GUI P.S. localPlayer = getLocalPlayer() не надо делать... localPlayer входит в список предопределенных переменных, тоесть там изначально ссылка на локального игрока есть...
  11. А на что ты вобще вешаешь обработчики? У тебя нет никаких кнопок вроде... Не порядок( Так же у тебя в функции обработчике не правильные аргументы. Допустим вот: ShowChatGUI ( player, key ) Почитай раздел Parameters: https://wiki.multitheftauto.com/wiki/OnClientGUIClick
  12. Возможно поэтому... Хотя не уверен. Чесно говоря не приходилось такого реализовывать.
  13. Ну, как минимум, работай с дебагом, который тебе подскажет ошибки в синтаксисе! Конкретно тут ты не закрыл IF
  14. Вот ты проверь, и расскажи) Вобще, думаю, грузить то они конечно будут, но в пределах нормы... Все дело в обработчиках их эвентов, таких как попадание в колизию, выход из нее...
  15. Если хочешь, что бы люди могли зарегестрироваться, советую добавить панель регистрации, в ACL... По теме: Ну вобщем то в логе я не увидел ошибок связанных с webadmin (хотя, признаюсь смотрел не очень хорошо, очень уж большой лог) Ресурс AJAX ты не менял/удалял? Вобще если что то с ACL или стандартными ресурсами напортил, то советую просто переустановить сервер (Последнюю stable сборку не забывай ставить), а после переустановки сразу же, не ставя ничего лишнего, проверить, работает ли webadmin. Если нет, то порты проверяй, если же работает, то потихоньку ставь свои ресурсы и смотри, что обрушивает webadmin...
  16. Тоесть при нажатии сразу двух клавиш выполнить что то? В обработчике нажатия F проверяешь, нажата ли ПКМ, если да, тогда делать что то... Или тебе не на кнопки, а именно на прицеливание и т.п.? Тогда используй в рендере getControlState функцию... p.s. у тебя функция названа getControlStat а не getControlState.
  17. На сколько я знаю, на прямую это не реализовать... Но подключив немного brain'a можно попробовать написать костыль... Вобщем я представляю себе это так: Вариант 1: При нажатии на левую кнопку мыши onClientKey проверять таргет игрока getPedTarget... Ну и если это машина getElementType, то делать что то... При таком варианте стрельба должна быть забиндена именно на ЛКМ... Иначе не будет работать Вариант 2: В рендере проверяем стреляет ли игрок getControlState, если стреляет, то получаем таргет, и если это машина, делаем что то...
  18. Вот гейммод, там это есть: https://community.multitheftauto.com/index.php?p=resources&s=details&id=1365 Покопай... А так вобще просто объект какой нибудь цепануть к игроку можно, а к ниму уже камеру...
  19. Почитай: https://forum.multitheftauto.com/viewtopic.php?f=153&t=47692
  20. https://wiki.multitheftauto.com/wiki/OnClientPlayerWeaponFire (hitElement) https://wiki.multitheftauto.com/wiki/GetElementType
  21. Погляди примеры: https://wiki.multitheftauto.com/wiki/EngineLoadDFF
  22. local keyPressTime; addEventHandler("onClientKey", root, function(button, press) if ( button == "3" ) then if ( press ) then keyPressTime = getTickCount(); else if ( getTickCount() - 2000 >= keyPressTime ) then --TODO end end end end )
  23. Сомневаюсь, что это будет на сколько нибудь оптимальнее... Не думаю, что таймер загрузит клиента на столько...
×
×
  • Create New...