Jump to content

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


Recommended Posts

Скрипт не мой но я пытаюсь поменять шрифт, не выходит, совсем. Помогите пожалуйста, варианты кончились...

--these are the banned vehicle ids where you cannot get drift points. 
local BannedIDs = { 432, 532 } 
  
local rootElem = getRootElement() 
local thisRoot = getResourceRootElement(getThisResource()) 
local player = getLocalPlayer() 
local vehicle 
local size = 1.2 
local modo = 0.01 
local score = 0 
local screenScore = 0 
local tick 
local idleTime 
local multTime 
local driftTime 
local Yellow = tocolor(255,232,25) 
local Red = tocolor(234,0,3) 
local TempCol = Yellow 
local mult = 1 
local tablamult = {350,1400,4200,11200} 
local anterior = 0 
local mejor = 0 
local total = 0 
font = "X7GR0XDL.ttf" 
  
local global_mejor = 0 
local global_nombre = "N/A" 
  
local screenWidth, screenHeight = guiGetScreenSize() 
local x1,y1,x2,y2 = screenWidth*0.2,screenHeight*0.1,screenWidth*0.8,screenHeight*0.8 
  
addEventHandler("onClientResourceStart", thisRoot, 
    function() 
        addEventHandler("onClientRender", rootElem, showText) 
        outputChatBox("Waiting for server drift data...") 
        triggerServerEvent("driftClienteListo", rootElem, player) 
    end 
) 
  
addEventHandler("onClientResourceStop", thisRoot, 
    function() 
        removeEventHandler("onClientRender", rootElem, showText) 
    end 
) 
  
function isValidVehicle() 
    local temp = getPedOccupiedVehicle(player) 
     
    if not temp or getVehicleOccupant(temp,0) ~= player or getVehicleType(temp) ~= "Automobile" then 
        return false 
    end 
     
    local vehID = getElementModel(temp) 
    for k,v in ipairs(BannedIDs) do if vehID == v then return false end end 
     
    return temp 
end 
  
function showText() 
    dxDrawText(string.format("Лучший заезд: %s - %d",global_nombre,global_mejor),44,screenHeight-43,screenWidth,screenHeight,Yellow,1,"bankgothic") 
     
    vehicle = isValidVehicle() 
    if not vehicle then return end 
     
    if size > 1.3 then  
        modo = -0.01  
    elseif size < 1.2 then  
        modo = 0.01  
    end 
    size = size + modo 
     
    tick = getTickCount() 
    local angulo,velocidad = angle() 
     
    local tempBool = tick - (idleTime or 0) < 750 
    if not tempBool and score ~= 0 then 
        anterior = score 
        setElementData(player, "Последний др.", anterior) 
        total = total+anterior 
        setElementData(player, "Всего др.", total) 
        if score > mejor then 
            mejor = score 
            setElementData(player, "Лучший др.", mejor) 
        end 
        triggerEvent("onVehicleDriftEnd", rootElem, tick-driftTime-750) 
        score = 0 
    end 
     
    if angulo ~= 0 then 
        if score == 0 then  
            triggerEvent("onVehicleDriftStart", rootElem) 
            driftTime = tick 
        end 
        if tempBool then 
            score = score + math.floor(angulo*velocidad)*mult 
        else 
            score = math.floor(angulo*velocidad)*mult 
        end 
        if TempCol == Red then 
            TempCol = Yellow 
        end 
        screenScore = score 
        idleTime = tick 
    end 
     
     
    if velocidad <= 0.3 and mult ~= 1 then 
        dxDrawText("\n\nToo Slow!", 20,155,screenWidth,screenHeight, Yellow, 1.2, font,"left","top", false,true,false) 
    end 
     
    if tick - (idleTime or 0) < 3000 then 
        local temp = "DRIFT" 
        if score >= 100000 then 
            temp = "DRIFT\n\nDrift King!" 
        elseif score >= 50000 then 
            temp = "DRIFT\n\nInsane Drift!" 
        elseif score >= 20000 then 
            temp = "DRIFT\n\nOutrageous!" 
        elseif score >= 15000 then 
            temp = "DRIFT\n\nColossal!" 
        elseif score >= 7000 then 
            temp = "DRIFT\n\nSuberb!" 
        elseif score >= 3000 then 
            temp = "DRIFT\n\nGreat Drift!" 
        elseif score >= 1000 then 
            temp = "DRIFT\n\nGood Drift!" 
        end 
       dxDrawText(temp, x1,y1,x2,y2, TempCol, 2.2, font,"center","top", false,true,false) 
        dxDrawText(string.format("\n%d",screenScore),  x1,y1-10,x2,y2, TempCol, size, font,"center","top", false,true,false) 
    end 
end 
  
function angle() 
    local vx,vy,vz = getElementVelocity(vehicle) 
    local modV = math.sqrt(vx*vx + vy*vy) 
     
    if not isVehicleOnGround(vehicle) then return 0,modV end 
     
    local rx,ry,rz = getElementRotation(vehicle) 
    local sn,cs = -math.sin(math.rad(rz)), math.cos(math.rad(rz)) 
     
    local deltaT = tick - (multTime or 0) 
    if mult~= 1 and modV <= 0.3 and deltaT > 750 then 
        mult = mult-1 
        multTime = tick 
    elseif deltaT > 1500 then 
        local temp = 1 
        if score >= 11200 then 
            temp = 5 
        elseif score >= 4200 then 
            temp = 4 
        elseif score >= 1400 then 
            temp = 3 
        elseif score >= 350 then 
            temp = 2 
        end 
        if temp>mult then 
            mult = temp 
            multTime = tick 
        end 
    end 
     
    if modV <= 0.2 then return 0,modV end --speed over 40 km/h 
     
    local cosX = (sn*vx + cs*vy)/modV 
    if cosX > 0.966 or cosX < 0 then return 0,modV end --angle between 15 and 90 degrees 
    return math.deg(math.acos(cosX))*0.5, modV 
end 
  
addEvent("driftCarCrashed", true) 
addEventHandler("driftCarCrashed", rootElem,  
    function() 
        if score ~= 0 then 
            score = 0 
            mult = 1 
            TempCol = Red 
            triggerEvent("onVehicleDriftEnd", rootElem, 0) 
        end 
    end 
) 
  
addEvent("driftActualizarRecord", true) 
addEventHandler("driftActualizarRecord", rootElem, 
    function(score, name) 
        global_mejor = score 
        global_nombre = name 
    end 
) 
function resetScore() 
    anterior,mejor,total = 0,0,0 
    setElementData(player, "Последний др.", anterior) 
    setElementData(player, "Всего др.", total) 
    setElementData(player, "Лучший др.", mejor) 
end 
addEvent("driftResetAllScores", true) 
addEventHandler("driftResetAllScores", rootElem, resetScore) 
addCommandHandler("resetdrift", resetScore) 
  
function checkPuntaje() 
    if total > global_mejor then 
        triggerServerEvent("driftNuevoRecord", rootElem, total, getPlayerName(player)) 
    end 
end 
addEventHandler("onClientPlayerFinish", rootElem, checkPuntaje) 
addEventHandler("onClientPlayerOutOfTime", rootElem, checkPuntaje) 

Link to comment
...

Теперь я окончательно запутался... Сделал все как написано под спойлером. Теперь сначала скрипт работает вроде бы нормально но только у одного человека, потом через какое-то время начинает работать у всех но при этом не выключается ни при нажатии кнопки ни при выходе из машины..

Лови

Client:

function onEnterVehicle () 
     bindKey ( "k", "down", startLights ) 
     setElementData ( localPlayer, "on", 0 ) 
end 
addEventHandler ( "onClientPlayerVehicleEnter", getRootElement(), onEnterVehicle ) 
  
function startLights ( ) 
     local state = getElementData ( localPlayer, "on" ) 
     if ( state == 0 ) then 
          setElementData ( localPlayer, "on", 1 ) 
          triggerServerEvent ( "addVehicleToTable", localPlayer ) 
      else 
          setElementData ( localPlayer, "on", 0 ) 
          triggerServerEvent ( "removeVehicleFromTable", localPlayer, getPedOccupiedVehicle ( localPlayer ) ) 
     end 
end 
  
function Exit ( vehicle ) 
     unbindKey ( "k", "down", create ) 
     setElementData ( localPlayer, "on", 0 ) 
     triggerServerEvent ( "removeVehicleFromTable", localPlayer, vehicle ) 
end 
addEventHandler ( "onClientPlayerVehicleExit", getRootElement(), Exit ) 
  
function Explode ( ) 
     unbindKey ( "k", "down", create ) 
     setElementData ( localPlayer, "on", 0 ) 
     triggerServerEvent ( "removeVehicleFromTable", localPlayer, source ) 
end 
addEventHandler ( "onClientVehicleExplode", getRootElement(), Explode ) 
  
function Destroy () 
   if ( getElementType(source) == "vehicle" ) then 
        unbindKey ( "k", "down", create ) 
        setElementData ( localPlayer, "on", 0 ) 
        triggerServerEvent ( "removeVehicleFromTable", localPlayer, source ) 
   end 
end 
addEventHandler ("onClientElementDestroy", getRootElement(), Destroy ) 

Server:

local vehicles = { }; 
  
addEvent ( "addVehicleToTable", true ) 
addEventHandler ( "addVehicleToTable", getRootElement(), function ( ) 
     local vehicle = getPedOccupiedVehicle ( source ) 
     table.insert ( vehicles, vehicle ) 
end ) 
  
addEvent ( "removeVehicleFromTable", true ) 
addEventHandler ( "removeVehicleFromTable", getRootElement(), function ( veh ) 
     table.removevalue(vehicles, veh) 
end ) 
  
function startLights ( ) 
     for i, v in ipairs ( vehicles ) do 
          setVehicleLightState ( v, 0,  0 ) 
     end 
     setTimer( function ( )  
          for i, v in ipairs ( vehicles ) do 
               setVehicleLightState ( v, 0,  1 ) 
          end  
     end, 50, 1 )  
end 
setTimer ( startLights, 500, 0 ) 
  
addEventHandler("onPlayerQuit", root, 
    function() 
            local veh = getPedOccupiedVehicle ( source ) 
            table.removevalue(vehicles, veh) 
end) 
  
function table.removevalue(t, val) 
    for i,v in ipairs(t) do 
        if v == val then 
            table.remove(t, i) 
            return i 
        end 
    end 
    return false 
end 

Link to comment
А по точней есть ли такая функция или нет?

getElementPosition?

Вроде понятно написал. Эта функция возвращает координаты машины, а мне нужна, которая возвращала бы координаты "переда" машины, т.е. там где находятся фары ( примерно ).

Link to comment
function setCar() 
car = createVehicle ( 402, -2405, -598, 132.6484375 ) 
setVehicleColor( car, 255, 255, 0 ) 
setVehicleDamageProof(car, true) 
setVehicleLocked ( car, true ) 
end 
addEventHandler ( "onResourceStart", getRootElement(), setCar ) 
  
function privatCar(thePlayer, seat, jacked) 
local name = getAccountName ( thePlayer ) 
  if name == "[CCCR]Fox" then 
  setVehicleLocked ( car, false ) 
    if isVehicleLocked ( car ) then 
     outputChatBox ( "Автомобиль закрыт", thePlayer) 
     end 
   end 
end 
addEventHandler ( "onVehicleStartEnter", getRootElement(), privatCar )   
  

Машина постоянно закрыта, в чём ошибка?

Link to comment
  • Other Languages Moderators
function setCar() 
car = createVehicle ( 402, -2405, -598, 132.6484375 ) 
setVehicleColor( car, 255, 255, 0 ) 
setVehicleDamageProof(car, true) 
setVehicleLocked ( car, true ) 
end 
addEventHandler ( "onResourceStart", getRootElement(), setCar ) 
  
function privatCar(thePlayer, seat, jacked) 
local name = getAccountName ( thePlayer ) 
  if name == "[CCCR]Fox" then 
  setVehicleLocked ( car, false ) 
    if isVehicleLocked ( car ) then 
     outputChatBox ( "Автомобиль закрыт", thePlayer) 
     end 
   end 
end 
addEventHandler ( "onVehicleStartEnter", getRootElement(), privatCar )   
  

Машина постоянно закрыта, в чём ошибка?

Дебаг пробовал смотреть? getAccountName принимает первым аккаунт а не игрока

Link to comment
function setCar() 
car = createVehicle ( 402, -2405, -598, 132.6484375 ) 
setVehicleColor( car, 255, 255, 0 ) 
setVehicleDamageProof(car, true) 
setVehicleLocked ( car, true ) 
end 
addEventHandler ( "onResourceStart", getRootElement(), setCar ) 
  
function privatCar(thePlayer, seat, jacked) 
local name = getAccountName ( thePlayer ) 
  if name == "[CCCR]Fox" then 
  setVehicleLocked ( car, false ) 
    if isVehicleLocked ( car ) then 
     outputChatBox ( "Автомобиль закрыт", thePlayer) 
     end 
   end 
end 
addEventHandler ( "onVehicleStartEnter", getRootElement(), privatCar )   
  

Машина постоянно закрыта, в чём ошибка?

Дебаг пробовал смотреть? getAccountName принимает первым аккаунт а не игрока

Уже разобрался и убрал ошибку и вообще там можно было более проще написать...

Link to comment
как можно сделать огнемет на машину

https://wiki.multitheftauto.com/wiki/CreateWeapon

и приаттачить к машине.

Нельзя, его там нет.

Как вариант применять createEffect и сделать кулшейп вокруг машины, если игрок вошел в него, то применяем setPedOnFire.

https://wiki.multitheftauto.com/wiki/CreateEffect

https://wiki.multitheftauto.com/wiki/CreateColSphere

https://wiki.multitheftauto.com/wiki/SetPedOnFire

Link to comment
...

Лови

Спсибо большое за помощь! Но к сожалению оно так нормально и не работает.

Первую минуту вроде все хорошо, потом оно перестает выключаться с кнопки. У других игроков включается через раз и тоже не выключается с кнопки... В плюс к этому получаю целую кучу ошибок в логах "Bad vehicle pointer"..

Link to comment
...

Лови

Спсибо большое за помощь! Но к сожалению оно так нормально и не работает.

Первую минуту вроде все хорошо, потом оно перестает выключаться с кнопки. У других игроков включается через раз и тоже не выключается с кнопки... В плюс к этому получаю целую кучу ошибок в логах "Bad vehicle pointer"..

Ошибки, скорее всего, вообще не из-за этого(либо вы там что-то совсем уж намудрили). Скиньте код, поможем.

Link to comment
Ошибки, скорее всего, вообще не из-за этого(либо вы там что-то совсем уж намудрили). Скиньте код, поможем.

Так это и есть весь код

Лови

Client:

function onEnterVehicle () 
     bindKey ( "k", "down", startLights ) 
     setElementData ( localPlayer, "on", 0 ) 
end 
addEventHandler ( "onClientPlayerVehicleEnter", getRootElement(), onEnterVehicle ) 
  
function startLights ( ) 
     local state = getElementData ( localPlayer, "on" ) 
     if ( state == 0 ) then 
          setElementData ( localPlayer, "on", 1 ) 
          triggerServerEvent ( "addVehicleToTable", localPlayer ) 
      else 
          setElementData ( localPlayer, "on", 0 ) 
          triggerServerEvent ( "removeVehicleFromTable", localPlayer, getPedOccupiedVehicle ( localPlayer ) ) 
     end 
end 
  
function Exit ( vehicle ) 
     unbindKey ( "k", "down", create ) 
     setElementData ( localPlayer, "on", 0 ) 
     triggerServerEvent ( "removeVehicleFromTable", localPlayer, vehicle ) 
end 
addEventHandler ( "onClientPlayerVehicleExit", getRootElement(), Exit ) 
  
function Explode ( ) 
     unbindKey ( "k", "down", create ) 
     setElementData ( localPlayer, "on", 0 ) 
     triggerServerEvent ( "removeVehicleFromTable", localPlayer, source ) 
end 
addEventHandler ( "onClientVehicleExplode", getRootElement(), Explode ) 
  
function Destroy () 
   if ( getElementType(source) == "vehicle" ) then 
        unbindKey ( "k", "down", create ) 
        setElementData ( localPlayer, "on", 0 ) 
        triggerServerEvent ( "removeVehicleFromTable", localPlayer, source ) 
   end 
end 
addEventHandler ("onClientElementDestroy", getRootElement(), Destroy ) 

Server:

local vehicles = { }; 
  
addEvent ( "addVehicleToTable", true ) 
addEventHandler ( "addVehicleToTable", getRootElement(), function ( ) 
     local vehicle = getPedOccupiedVehicle ( source ) 
     table.insert ( vehicles, vehicle ) 
end ) 
  
addEvent ( "removeVehicleFromTable", true ) 
addEventHandler ( "removeVehicleFromTable", getRootElement(), function ( veh ) 
     table.removevalue(vehicles, veh) 
end ) 
  
function startLights ( ) 
     for i, v in ipairs ( vehicles ) do 
          setVehicleLightState ( v, 0,  0 ) 
     end 
     setTimer( function ( )  
          for i, v in ipairs ( vehicles ) do 
               setVehicleLightState ( v, 0,  1 ) 
          end  
     end, 50, 1 )  
end 
setTimer ( startLights, 500, 0 ) 
  
addEventHandler("onPlayerQuit", root, 
    function() 
            local veh = getPedOccupiedVehicle ( source ) 
            table.removevalue(vehicles, veh) 
end) 
  
function table.removevalue(t, val) 
    for i,v in ipairs(t) do 
        if v == val then 
            table.remove(t, i) 
            return i 
        end 
    end 
    return false 
end 

я меняю только время в таймерах, или добавляю еще таймеры. Но даже код в чистом виде как написал господин Memory имеет эти проблемы.

Link to comment
Не знаю, у меня всё прекрасно и без всяких проблем работало.

Хронология событий такая:

Включаю скрипт, нажимаю бинд - включается. Нажимаю еще раз - выключается. Все хорошо.

Включаю у себя.

Прошу другого игрока включить - не включается. Через несколько секунд включается само. И перестает выключаться с кнопки. И у меня и у игрока.

Мистика какая-то.

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