Jump to content

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


Recommended Posts

Пользуюсь заготовкой телепорта с форума:

    local Teleports = { --Создаем список телепортов 
        { x=2244.6, y=-1664.8, z=15.5, pickupInt=0, pickupDim=0, teleX=207.7, teleY=-109.6, teleZ=1005.2, rot=0, int=15, dim=0}; 
        { x=207.7, y=-110.9, z=1005.2, pickupInt=15, pickupDim=0, teleX=2244.9, teleY=-1663.4, teleZ=15.5, rot=0, int=0, dim=0} 
    }      
      
    addEventHandler ( "onResourceStart", resourceRoot, --При старте этого ресурса проходимся по массиву Teleports и создаем телепорты(пикапы) 
        function ( ) 
            for _,teleport in ipairs(Teleports) do --Цикл прохода по списку 
                --teleport в данном случае это массив. В массиве Teleports это строчка { x=, y=, z=, teleX=, teleY=, teleZ=, rot=, int=, dim=}; 
                --При каждом проходе позиция teleport сдвигается на 1 от предыдущей 
                local TelePickup = createPickup(teleport["x"], teleport["y"], teleport["z"], 3, 1318) --Создем пикап 
                if ( TelePickup ) then --Если пикап создан 
                    setElementInterior ( TelePickup, teleport["pickupInt"] ) 
                    setElementDimension ( TelePickup, teleport["pickupDim"] ) 
                    
                    setElementData ( --Записываем в его дату "TeleportData", массив с позициями телепорта 
                        TelePickup, 
                        "TeleportData", 
                        { 
                            x = teleport.teleX, 
                            y = teleport.teleY, 
                            z = teleport.teleZ, 
                            rot = teleport.rot, 
                            int = teleport.int, 
                            dim = teleport.dim 
                        } 
                    ) 
                    addEventHandler ( "onPickupHit", TelePickup, onTeleportPickupHit ) --Добавляем эвент, при входе на этот пикап 
                end 
            end 
        end 
    ) 
      
    function onTeleportPickupHit(hitElement) 
        if ( getElementType ( hitElement ) == "player" and not isPedInVehicle ( hitElement )) then 
            local TeleportData = getElementData(source, "TeleportData") --получаем массив с позицией телепортации 
            setElementInterior ( hitElement, TeleportData["int"] ) 
            setElementDimension ( hitElement, TeleportData["dim"] ) 
            setElementPosition ( hitElement, TeleportData["x"], TeleportData["y"], TeleportData["z"], true ) 
        end 
    cancelEvent() 
    end 

Но работает не всегда. А т.е., допустим, я вхожу в здание, всё ОК, при выходе интерьер не изменяется. К тому же я не дошел до плавного 'потемнения' экрана. Оно срабатывает после телепорта, а не во время него. Собственно 2 вопроса: Как исправить данный баг с телепортом из интерьера на улицу (0 инт). Скидывайте, если есть другие способы ТП-а; Как сделать плавное 'потемнение' экрана.

Link to comment
fadeCamera 

Использовал, я же писал, что затемнение идет после телепорта, а не во время него. И самое главное что мне нужно - исправить баг с телепортом из интерера. Ин-фа инт-ра которого берется из 1-ого пикапа...

Link to comment

Привет всем, скажите, можно ли с php подключится к registry.db и вытащить информацию на сайт. На форуме ничего подобного не нашёл, только кто-то написал, что нельзя. С php, sql поверхностно знаком. И вобще, неужели в интернете нигде нет никакого скрипта, например, топ по чему-либо, его повсюду все спрашивают.

Link to comment
Привет всем, скажите, можно ли с php подключится к registry.db и вытащить информацию на сайт. На форуме ничего подобного не нашёл, только кто-то написал, что нельзя. С php, sql поверхностно знаком. И вобще, неужели в интернете нигде нет никакого скрипта, например, топ по чему-либо, его повсюду все спрашивают.

PHP прекрасно работает с SQLite. Качаешь SQLiteBrowser и смотришь интересующие тебя таблицы, поля, а потом составляешь запрос к ним.

Link to comment
Ну собственно я про запрос и спрашиваю. Пример какой-нибудь, скрипт. Буду очень благодарен.

Нету такого скрипта, который подходит ко всем случаям. Чтобы лезть к базе, вначале нужно знать SQL, без его вам с базами делать нечего.

Примеры есть на вики

https://wiki.multitheftauto.com/wiki/DbConnect#Example

https://wiki.multitheftauto.com/wiki/DbQuery#Example

Link to comment
Как установить тайм-аут на команде? Допустим сейчас требуется поставить таймер использования на починку авто.

Наверное так?

  
addCommandHandler("timeout", 
    function() 
        outputChatBox("Таймаут команды на две секунды") 
        setTimer(function() 
            outputChatBox("Команда выполнена...") 
        end, 2000, 1) 
    end 
) 
  

Link to comment
Как установить тайм-аут на команде? Допустим сейчас требуется поставить таймер использования на починку авто.

Наверное так?

  
addCommandHandler("timeout", 
    function() 
        outputChatBox("Таймаут команды на две секунды") 
        setTimer(function() 
            outputChatBox("Команда выполнена...") 
        end, 2000, 1) 
    end 
) 
  

Нет, нет, я про getTickCount().

Примерный алгоритм: Отправка команды, запрос на инф-ю времени о получении данной командой данным игроком ранее, разность данных, вывод в n-переменной, если время прошло более чем 2 000 мс, то отправить команду, если нет, то вернуть.

Не пользовался getTickCount() ранее, в функции он мне возвращает данные timeup сервера.

Link to comment

Так и есть, getTickCount возвращает uptime машины в миллесекундах.

Надо просто сравнить два отрезка времени.

  
int lastTick = 0; 
  
// обработчик команды 
if( getTickCount() - lastTick >= 2000 ) 
{ 
    lastTick = getTickCount(); 
    // true; 
} 

Link to comment

Здравсвуйте, помогите сделать видимым текст над игроком для всех. Вот выдернул функцию из chatbubbles, ну естественно подогнал под себя, работает, но видит только localPlayer, а остальные нет.

localPlayer = getLocalPlayer(); 
function showLevel() 
local camPosXl, camPosYl, camPosZl = getPedBonePosition (localPlayer, 6) 
local camPosXr, camPosYr, camPosZr = getPedBonePosition (localPlayer, 7) 
local x,y,z = (camPosXl + camPosXr) / 2, (camPosYl + camPosYr) / 2, (camPosZl + camPosZr) / 2 
local cx,cy,cz = getCameraMatrix() 
local px,py,pz = getElementPosition(localPlayer) 
local distance = getDistanceBetweenPoints3D(cx,cy,cz,px,py,pz) 
local posx,posy = getScreenFromWorldPosition(x,y,z+0.020*distance+0.10) 
local elementtoignore1 = getPedOccupiedVehicle(localPlayer) or localPlayer 
   if posx and distance <= 45 and ( isLineOfSightClear(cx,cy,cz,px,py,pz,true,true,false,true,false,true,true,elementtoignore1) ) then 
      local width = 50 
      if getElementData(localPlayer, "Level") then   
       dxDrawText ( "Уровень "..getElementData(localPlayer, "Level"), posx - (0.5 * width),posy - 20,posx - (0.5 * width),posy - 20, tocolor(70,255,70,255), 1.5, "default-bold", "center", "bottom", false, false, false, true, true ) 
      end 
   end 
end 
addEventHandler("onClientRender",getRootElement(),showLevel) 

Link to comment
Здравсвуйте, помогите сделать видимым текст над игроком для всех. Вот выдернул функцию из chatbubbles, ну естественно подогнал под себя, работает, но видит только localPlayer, а остальные нет.
localPlayer = getLocalPlayer(); 
function showLevel() 
local camPosXl, camPosYl, camPosZl = getPedBonePosition (localPlayer, 6) 
local camPosXr, camPosYr, camPosZr = getPedBonePosition (localPlayer, 7) 
local x,y,z = (camPosXl + camPosXr) / 2, (camPosYl + camPosYr) / 2, (camPosZl + camPosZr) / 2 
local cx,cy,cz = getCameraMatrix() 
local px,py,pz = getElementPosition(localPlayer) 
local distance = getDistanceBetweenPoints3D(cx,cy,cz,px,py,pz) 
local posx,posy = getScreenFromWorldPosition(x,y,z+0.020*distance+0.10) 
local elementtoignore1 = getPedOccupiedVehicle(localPlayer) or localPlayer 
   if posx and distance <= 45 and ( isLineOfSightClear(cx,cy,cz,px,py,pz,true,true,false,true,false,true,true,elementtoignore1) ) then 
      local width = 50 
      if getElementData(localPlayer, "Level") then   
       dxDrawText ( "Уровень "..getElementData(localPlayer, "Level"), posx - (0.5 * width),posy - 20,posx - (0.5 * width),posy - 20, tocolor(70,255,70,255), 1.5, "default-bold", "center", "bottom", false, false, false, true, true ) 
      end 
   end 
end 
addEventHandler("onClientRender",getRootElement(),showLevel) 

Получить всех игроков, тем самым из таблицы выдернуть всех игроков под видом любой переменной, типа thePlayer. Нет? :)

Link to comment
Так и есть, getTickCount возвращает uptime машины в миллесекундах.

Надо просто сравнить два отрезка времени.

  
int lastTick = 0; 
  
// обработчик команды 
if( getTickCount() - lastTick >= 2000 ) 
{ 
    lastTick = getTickCount(); 
    // true; 
} 

Благодарю, разобрался.

local ltick = getTickCount() 
  
function repairVehicle() 
    local vehicle = getPedOccupiedVehicle(g_Me) 
    if vehicle then 
        if getTickCount() - ltick > 900000 then 
            ltick = getTickCount() 
            server.fixVehicle(vehicle) 
        else 
        errMsg ( 'Вы не можете так часто чинить авто!', g_Me ) 
        end 
    end 
end 

Но, так как я перфекционист, то как можно сделать, чтобы точкой отсчета стало использование функции, а не uptime сервера? Или всё так и построено?

Link to comment
Но, так как я перфекционист, то как можно сделать, чтобы точкой отсчета стало использование функции, а не uptime сервера? Или всё так и построено?

Дк ведь ты сам сделал точку отсчёта на аптайм сервера инициализировав переменную ltick. Ставь на 0, как я показывал выше. Ведь как можно поставить точку отсчёта на последне использование, если использования не было?

Link to comment
Но, так как я перфекционист, то как можно сделать, чтобы точкой отсчета стало использование функции, а не uptime сервера? Или всё так и построено?

Дк ведь ты сам сделал точку отсчёта на аптайм сервера инициализировав переменную ltick. Ставь на 0, как я показывал выше. Ведь как можно поставить точку отсчёта на последне использование, если использования не было?

В таком случае условие не выполняется...

____________________

Всё, я разобрался, спасибо еще раз.

Link to comment

Получить всех игроков, тем самым из таблицы выдернуть всех игроков под видом любой переменной, типа thePlayer. Нет? :)

Если честно, я не въехал в суть данной мне информации :D Так что возможно. Вобщем, надо как ник игрока (например, в рэйс), его же видят все, но сделан он на dx. А у меня тоже самое только над ником будет уровень. Собственно, пробовал nametags из race выдергивать, редактировал, но что-то не работало и ошибок никаких не выдавал.

Link to comment

Получить всех игроков, тем самым из таблицы выдернуть всех игроков под видом любой переменной, типа thePlayer. Нет? :)

Если честно, я не въехал в суть данной мне информации :D Так что возможно. Вобщем, надо как ник игрока (например, в рэйс), его же видят все, но сделан он на dx. А у меня тоже самое только над ником будет уровень. Собственно, пробовал nametags из race выдергивать, редактировал, но что-то не работало и ошибок никаких не выдавал.

nametags - Выдает сам dx, но не данные о видимости другим игрокам.

Создай таблицу:

local players = getElementsByType ( "player" ) -- get a table of all the players in the server 
for theKey,thePlayer in ipairs(players) do -- use a generic for loop to step through each player 

thePlayer - Переменная, указывающая на всех игроков сервера. Вот её и суй. :wink:

Link to comment

Здравствуйте. Собственно интересует вопрос, можно ли вытащить инвентарь с валхаллы и сделать его под "обычный " сервер? Может кто уже занимался таким? Или может кто сделает за оплату? )

Link to comment
Пиши с нуля. Заодно научишься.

Да в том то и дело, что не такой высокий уровень моих знаний, который требуется для этого инвентаря :(

Ну а так учусь по-немножку, начиная с простых скриптов и вот сейчас как два часа пытаюсь разобраться что такое ооп:)

Link to comment
Да в том то и дело, что не такой высокий уровень моих знаний, который требуется для этого инвентаря :(

Ну а так учусь по-немножку, начиная с простых скриптов и вот сейчас как два часа пытаюсь разобраться что такое ооп:)

Если уж и разбираться в ООП, то определенно не в Lua.

Да и нужно ли, лесть в ООП с начальными знаниями?

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