Jump to content

Kenix

Retired Staff
  • Posts

    4,121
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by Kenix

  1. Я так понял со временем, что большая закачка файлов ассациируется у большинства игроков с тем, что на сервере ничего уникального нет, кроме как моделей. Поэтому я думаю, что нужно делать свою загрузку, показывать заставку (писать возможности сервера и т.п), либо что то еще во время загрузки. В потоке сделать закачку файлов не очень обязательных, теже тачки, но опять же все зависит от направленности сервера
  2. Google закрывает проект Google code, самое время переходить мташникам на github. http://www.google.com/appserve/mkt/p/KL ... EF45NhDAtD
  3. Все параметры прописываются в mtaserver.conf
  4. Функции нельзя передавать через exports.
  5. Экспортировать метатаблицы нельзя, придется встраивать тебе в каждый ресурс, увы.
  6. getPedMoveState более расширенный вариант
  7. setElementPosition Тебя никто не запрещает сделать свой редактор. dxDrawText dxDrawLine3D dxDrawImage
  8. Вряд ли вы сможете найти тут помощь по модам от сторонних разработчиков. Пишите только конкретные вопросы и предоставляя при этом всю информацию. viewtopic.php?f=141&t=40703
  9. Наверное он имел ввиду, что использовать C++ в качестве языка для разработки мода глупо.
  10. dxCreateRenderTarget dxSetRenderTarget
  11. Он скорее имеет ввиду dm версию, а не mta race.
  12. Помощь больше не нужна, проблема решена. Решение оказалось простым, теперь в новом комите доступен новый аргумент "base" для функций getVehicleComponentPosition/Rotation и берем значение "world". Проводим вектор от misc_b до misc_c и просто умножаем на новый вектор, чтобы сделать его длиннее (именно в то место полетит ракета). Большое спасибо SDraw.
  13. У меня тажа проблема, правдо теперь с прицелом для танка. До обновлений с компонентами все работало нормально, теперь же нет. Кому не сложно помогите, в геометрии/тригонометрии не силен. function DestroyAttachedTankObjects( pVehicle ) local pObject = getElementData( pVehicle, "AttachedObject" ); if pObject and isElement( pObject ) then destroyElement( pObject ); end local pObject2 = getElementData( pVehicle, "AttachedObject2" ); if pObject2 and isElement( pObject2 ) then destroyElement( pObject2 ); end end addEventHandler( "onClientPreRender", root, function() if isPedInVehicle( localPlayer ) then local pVehicle = getPedOccupiedVehicle( localPlayer ); if pVehicle and isElement( pVehicle ) then -- Танк local iVehicleModel = getElementModel( pVehicle ); if iVehicleModel == 432 then local _, fPosY, fPosZ = getVehicleComponentPosition( pVehicle, "misc_c" ); local fComponentRotX = getVehicleComponentRotation( pVehicle, "misc_b" ); local _, _, fComponentRotZ = getVehicleComponentRotation( pVehicle, "misc_a" ); fComponentRotX = 360 - fComponentRotX; local pObject = getElementData( pVehicle, "AttachedObject" ); local pObject2 = getElementData( pVehicle, "AttachedObject2" ); if pObject and isElement( pObject ) and pObject2 and isElement( pObject2 ) then attachElements( pObject2, pObject, fPosY * math.sin( math.rad( fComponentRotZ ) ) * math.cos( math.rad( fComponentRotX ) ), fPosY * math.cos( math.rad( fComponentRotZ ) ) * math.cos( math.rad( fComponentRotX ) ), ( fPosZ - 1.1 ) + fPosY * math.sin( math.rad( fComponentRotX ) ) ); -- Рассчитываем точку попадания снаряда local fObjectPosX, fObjectPosY, fObjectPosZ = getElementPosition( pObject ); local fObject2PosX, fObject2PosY, fObject2PosZ = getElementPosition( pObject2 ); local fMaxDistance = 300; local fDistance = getDistanceBetweenPoints3D( fObjectPosX, fObjectPosY, fObjectPosZ, fObject2PosX, fObject2PosY, fObject2PosZ ); local fDx, fDy, fDz = (fObject2PosX - fObjectPosX) / fDistance, (fObject2PosY - fObjectPosY) / fDistance, (fObject2PosZ - fObjectPosZ) / fDistance local fX3, fY3, fZ3 = fObjectPosX + fMaxDistance * fDx, fObjectPosY + fMaxDistance * fDy, fObjectPosZ + fMaxDistance * fDz; local iAimPosX , iAimPosY = getScreenFromWorldPosition( fX3, fY3, fZ3 ); if iAimPosX then local bHit, fColX, fColY, fColZ = processLineOfSight ( fObject2PosX, fObject2PosY, fObject2PosZ, fX3, fY3, fZ3 ); if bHit then dxDrawLine3D( fObject2PosX, fObject2PosY, fObject2PosZ, fColX, fColY, fColZ ); end end end end end end end ); addEventHandler( "onClientVehicleEnter", root, function( pPlayer, iSeat ) if pPlayer == localPlayer then local iVehicleModel = getElementModel( source ); -- В танке if iVehicleModel == 432 then local fPosX, fPosY, fPosZ = getElementPosition( source ); local pObject = createObject( 1239, fPosX, fPosY, fPosZ ); local pObject2 = createObject( 1239, fPosX, fPosY, fPosZ ); setElementAlpha( pObject, 0 ); setElementAlpha( pObject2, 0 ); setElementCollisionsEnabled( pObject, false ); setElementCollisionsEnabled( pObject2, false ); local _,_,fComponentPosZ = getVehicleComponentPosition( source, "misc_a" ); attachElements( pObject, source, 0, 0, fComponentPosZ ); attachElements( pObject2, pObject, 0, 5, fComponentPosZ ); setElementData( source, "AttachedObject", pObject ); setElementData( source, "AttachedObject2", pObject2 ); end end end ); addEventHandler( "onClientVehicleExit", root, function( pPlayer, iSeat ) if pPlayer == localPlayer then local iVehicleModel = getElementModel( source ); -- Слезаем с танка if iVehicleModel == 432 then DestroyAttachedTankObjects( source ); end end end ); addEventHandler( "onClientVehicleExplode", root, function() DestroyAttachedTankObjects( source ); end );
  14. Вроде как нет, нужно писать всю систему самому. Алгоритм: Ставишь таймер, который обновляет раз в 30 секунд состояние бега (присваиваешь к переменной или элемент дате значение) если число == 100, то применяешь toggleControl и проигрываешь анимацию "уставания" - можешь найти в ресурсе freeroam, после истечения времени снова применяй toggleControl чтобы игрок смог снова бегать. toggleControl setPedAnimation setTimer
  15. Напиши администрации сервера о проблеме.
  16. Мое мнение вот такое. Как только ты начинаешь кидать гранату, получай всех игроков в стриме и отправляй их на сервер. После этого на сервере отправляй 1 пакет всем игрокам, которых ты получил у себя в стриме. Вроде бы совсем недавно была добавлена возможность отправлять пакет конкретным игрокам, а не всем. Лучше этого варианта я думаю что не найдешь. Клиент -- Собираем всех игроков в стриме local aStreamedInPlayers = getElementsByType( "player", root, true ); triggerServerEvent("onPlayerThrowSuperBanana",localPlayer, aStreamedInPlayers, x,y,z,rotXY,rotZ,force); Сервер addEvent( "onPlayerThrowSuperBanana", true ); addEventHandler( "onPlayerThrowSuperBanana", root, function( aStreamedInPlayers, ... ) triggerClientEvent( aStreamedInPlayers, "onClientPlayerThrowSuperBanana", source, ... ); end );
  17. Получай координаты тачки на стороне клиента, после этого делай тригер на сервер и спавни.
  18. for _, v in pairs( Table ) do for _, v2 in pairs( v ) do source:setData( v2[ 1 ], v2[ 2 ] ); end end
  19. 1. Также в мта есть баг ещё, что иногда навсегда пропадает звук лопастей у вертолетов, можно сделать свой костыль через playSound3D attachElements по другому я не знаю как ты сможешь решить эту проблему. 2. setVehicleLandingGearDown Гугл в случае с мта вряд ли поможет, лучше искать ответ на wiki mta и на форуме в поиске. https://wiki.multitheftauto.com/wiki/Main_Page
  20. Кому нужна функция на эту же тему, забирайте. -- aInputTable - заполненная таблица -- iMaxRows, iMaxColumns - максимальное число строк/столбцов -- iX, iY - позиция ячейки -- iW, iH - ширина и высота ячейки -- bState - заполнена/не заполнена function FillCells( aInputTable, iMaxRows, iMaxColumns, iX, iY, iW, iH, bState ) for iRow = 1, iMaxRows do for iColumn = 1, iMaxColumns do if ( iRow >= iY and iRow < iY + iH ) and ( iColumn >= iX and iColumn < iX + iW ) then aInputTable[ iRow ][ iColumn ] = bState; end end end end
  21. 1st argument should be vehicle-pointer (veh - variable) but (your is number 2 ).
×
×
  • Create New...