Jump to content

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


Recommended Posts

А как эти 2 функции объединить в один скрипт :?:

Думаю что стоит попробовать сделать вот так:

local startPos = { -2405, -598, 132.6 } 
local endPos = { -2412.8, -602.2, 132.5 } 
  
local object = createObject ( 1491, startPos [ 1 ], startPos [ 2 ], startPos [ 3 ] ) 
  
local scrollbar = guiCreateScrollBar ( 400, 400, 100, 10, true, false ) 
addEventHandler ( "onClientGUIScroll", scrollbar, 
    function ( scrolled ) 
        local progress = guiScrollBarGetScrollPosition ( scrolled ) / 100 
  
        local x, y, z = interpolateBetween ( startPos [ 1 ], startPos [ 2 ], startPos [ 3 ], endPos [ 1 ], endPos [ 2 ], endPos [ 3 ], progress, "Linear" ) 
        moveObject ( object, 1000, x, y, z ) 
    end 
, false ) 
  

Клиентская сторона. Я бы не стал управлять таким образом серверным объектом.

Link to comment

уже всю голову сломал.

WARNING: [gameplay]\vehicle\vehicle.lua:1: Bad argument @ 'getPedOccupiedVehicle' 

vehicle.lua

theVehicle=getPedOccupiedVehicle(source) 
  
function switchEngine() 
    if theVehicle and getVehicleController(theVehicle)==source then 
        if getVehicleEngineState(theVehicle) then 
            setVehicleEngineState(theVehicle,false) 
        else 
            setVehicleEngineState(theVehicle,true) 
        end 
    end 
end 
  
function switchLight() 
    if theVehicle and getVehicleController(theVehicle)==source then 
        if getVehicleOverrideLights(theVehicle)==2 then 
            setVehicleOverrideLights(theVehicle,1) 
        else 
            setVehicleOverrideLights(theVehicle,2) 
        end 
    end 
end 
  
function switchLock() 
    if getElementID(theVehicle)==getPlayerName(source) then 
        if isVehicleLocked(theVehicle) then 
            setVehicleLocked(theVehicle,false) 
        else 
            setVehicleLocked(theVehicle,true) 
        end 
    end 
end 
  
addEvent("onVehicleChangeEngine",true) 
addEvent("onVehicleChangeLight",true) 
addEvent("onVehicleChangeLock",true) 
addCommandHandler("engine",switchEngine) 
addCommandHandler("lights",switchLight) 
addCommandHandler("lock",switchLock) 
  
function bindKeys() 
    for key,playerSource in ipairs(getElementsByType("player")) do 
        bindKey(playerSource,"2","down",switchEngine) 
        bindKey(playerSource,"1","down",switchLight) 
    end 
end 
  
addEventHandler("onReplayerStart",getRootElement(),bindKeys) 
addEventHandler("onPlayerSpawn",getRootElement(),bindKeys) 
addEventHandler("onVehicleChangeEngine",getRootElement(),switchEngine) 
addEventHandler("onVehicleChangeLight",getRootElement(),switchLight) 
addEventHandler("onVehicleChangeLock",getRootElement(),switchLock) 

vehicle_c.lua

addEvent("onVehicleChangeEngine",true) 
addEvent("onVehicleChangeLight",true) 
addEvent("onVehicleChangeLock",true) 
addCommandHandler("LockChange", 
    function() 
        triggerServerEvent("onVehicleChangeLock",getLocalPlayer()) 
    end 
) 
addCommandHandler("EngineChange", 
    function() 
        triggerServerEvent("onVehicleChangeEngine",getLocalPlayer()) 
    end 
) 
addCommandHandler("LightChange", 
    function() 
        triggerServerEvent("onVehicleChangeLight",getLocalPlayer()) 
    end 
) 
bindKey("2","down","EngineChange") 
bindKey("1","down","LightChange") 

Также читал, что лучше использовать вместо source client, но у меня дебаг везде ошибки выдает.

Link to comment
theVehicle=getPedOccupiedVehicle(source) 
  
function switchEngine() 
    if theVehicle and getVehicleController(theVehicle)==source then 
        if getVehicleEngineState(theVehicle) then 
            setVehicleEngineState(theVehicle,false) 
        else 
            setVehicleEngineState(theVehicle,true) 
        end 
    end 
end 
  
function switchLight() 
    if theVehicle and getVehicleController(theVehicle)==source then 
        if getVehicleOverrideLights(theVehicle)==2 then 
            setVehicleOverrideLights(theVehicle,1) 
        else 
            setVehicleOverrideLights(theVehicle,2) 
        end 
    end 
end 
  
function switchLock() 
    if getElementID(theVehicle)==getPlayerName(source) then 
        if isVehicleLocked(theVehicle) then 
            setVehicleLocked(theVehicle,false) 
        else 
            setVehicleLocked(theVehicle,true) 
        end 
    end 
end 
  
addEvent("onVehicleChangeEngine",true) 
addEvent("onVehicleChangeLight",true) 
addEvent("onVehicleChangeLock",true) 
addCommandHandler("engine",switchEngine) 
addCommandHandler("lights",switchLight) 
addCommandHandler("lock",switchLock) 
  
function bindKeys() 
    for key,playerSource in ipairs(getElementsByType("player")) do 
        bindKey(playerSource,"2","down",switchEngine) 
        bindKey(playerSource,"1","down",switchLight) 
    end 
end 
  
addEventHandler("onReplayerStart",getRootElement(),bindKeys) 
addEventHandler("onPlayerSpawn",getRootElement(),bindKeys) 
addEventHandler("onVehicleChangeEngine",getRootElement(),switchEngine) 
addEventHandler("onVehicleChangeLight",getRootElement(),switchLight) 
addEventHandler("onVehicleChangeLock",getRootElement(),switchLock) 

theVehicle=getPedOccupiedVehicle(source) 

source - это скрытая переменная в функции-обработчике события, она может содержать в себе элемент (корень всех элементов( root ), игрока, объект, ... ). Тебе нужно использовать именно там, а не вне функции-обработчика события.

Команды тоже не будут работать.

addCommandHandler("engine",switchEngine) 
addCommandHandler("lights",switchLight) 
addCommandHandler("lock",switchLock) 

Так будет правильнее

local source = source or pPlayer 

и

addEventHandler("onPlayerSpawn",getRootElement(),bindKeys) 

При каждом спавне игрока будут биндится все кнопки для всех игроков.

и при старте любого ресурса тоже будут биндится все кнопки для всех игроков.

addEventHandler("onReplayerStart",getRootElement(),bindKeys) 

Это

if getVehicleEngineState( pVehicle ) then 
            setVehicleEngineState( pVehicle, false ) 
        else 
            setVehicleEngineState( pVehicle, true ) 
        end 

можно заменить этим

setVehicleEngineState( pVehicle, not getVehicleEngineState( pVehicle ) ) 

Тоже самое

if isVehicleLocked( pVehicle ) then 
            setVehicleLocked( pVehicle, false ) 
        else 
            setVehicleLocked( pVehicle, true ) 
        end 

setVehicleLocked( pVehicle, not isVehicleLocked( pVehicle ) ) 

и

if getVehicleOverrideLights( pVehicle ) == 2 then 
            setVehicleOverrideLights( pVehicle, 1 ) 
        else 
            setVehicleOverrideLights( pVehicle, 2 ) 
        end 

setVehicleOverrideLights( pVehicle, getVehicleOverrideLights( pVehicle ) == 2 and 1 or 2 ) 

Правильный код.

addEvent( 'onVehicleChangeEngine', true ) 
addEvent( 'onVehicleChangeLight', true ) 
addEvent( 'onVehicleChangeLock', true ) 
  
function SwitchEngine( pPlayer ) 
    local source = source or pPlayer 
    if isPedInVehicle( source ) then 
        local pVehicle = getPedOccupiedVehicle( source ) 
        if pVehicle and getVehicleController( pVehicle ) == source then 
            setVehicleEngineState( pVehicle, not getVehicleEngineState( pVehicle ) ) 
        end 
    end 
end 
  
function SwitchLight( pPlayer ) 
    local source = source or pPlayer 
    if isPedInVehicle( source ) then 
        local pVehicle = getPedOccupiedVehicle( source ) 
        if pVehicle and getVehicleController( pVehicle ) == source then 
            setVehicleOverrideLights( pVehicle, getVehicleOverrideLights( pVehicle ) == 2 and 1 or 2 ) 
        end 
    end 
end 
  
function SwitchLock( pPlayer ) 
    local source = source or pPlayer 
    if isPedInVehicle( source ) then 
        local pVehicle = getPedOccupiedVehicle( source ) 
        if getElementID( pVehicle ) == getPlayerName( source ) then 
            setVehicleLocked( pVehicle, not isVehicleLocked( pVehicle ) ) 
        end 
    end 
end 
  
function BindKeys( ) 
    if eventName == 'onPlayerJoin' then 
        bindKey( source, '2', 'down', SwitchEngine ) 
        bindKey( source, '1', 'down', SwitchLight ) 
    else 
        for _, pPlayer in ipairs( getElementsByType 'player' ) do 
            bindKey( pPlayer, '2', 'down', SwitchEngine ) 
            bindKey( pPlayer, '1', 'down', SwitchLight ) 
        end 
    end 
end 
  
addCommandHandler( 'engine', SwitchEngine ) 
addCommandHandler( 'lights', SwitchLight ) 
addCommandHandler( 'lock', SwitchLock ) 
  
addEventHandler( 'onReplayerStart', resourceRoot, BindKeys ) 
addEventHandler( 'onPlayerJoin', root, BindKeys ) 
addEventHandler( 'onVehicleChangeEngine', root, SwitchEngine ) 
addEventHandler( 'onVehicleChangeLight', root, SwitchLight ) 
addEventHandler( 'onVehicleChangeLock', root, SwitchLock ) 

Link to comment

Ого, так много всего я неправильно писал. Спасибо, но есть несколько вопросов:

addEventHandler( 'onReplayerStart', resourceRoot, BindKeys ) 

Разве есть такое событие onReplayerStart? Может onResourceStart?

-Читал вики, но толком не понял что дают root, resourceRoot и т.д.

local source = source or pPlayer 

Можно поподробнее насчет этого?

Link to comment

У тебя в коде было написано 'onReplayerStart', я не обратил внимание на это. Должно быть onResourceStart.

-Читал вики, но толком не понял что дают root, resourceRoot и т.д.

root - корень всех элементов, resourceRoot - корень всех элементов текущего ресурса.

Дерево элементов

local source = source or pPlayer 

Можно поподробнее насчет этого?

Если источник( source ) nil, то будет использоваться переменная pPlayer. Т.к в функции-обработчике команды нет источника, приходится делать это.

Link to comment

задам еще вопрос: есть событие onVehicleStartEnter. Он передает параметры

player enteringPlayer, int seat, player jacked, int door 

как их использовать в функции? Также там сказано, что source это машина, в которую enteringPlayer садится. Будет ли source изменен на машину полностью? т.е. в скрипте я не смогу использовать source как player? Просто хочу, чтобы при заходе в машину двигатель не включался, если он включен. У меня это получилось, но он вырубает двигатель если он был включен.

Link to comment
задам еще вопрос: есть событие onVehicleStartEnter. Он передает параметры
player enteringPlayer, int seat, player jacked, int door 

как их использовать в функции? Также там сказано, что source это машина, в которую enteringPlayer садится. Будет ли source изменен на машину полностью? т.е. в скрипте я не смогу использовать source как player? Просто хочу, чтобы при заходе в машину двигатель не включался, если он включен. У меня это получилось, но он вырубает двигатель если он был включен.

Да ты скидывай код сразу) Глянем, исправим)

Вобще в каждой функции свой source, и лучше не заменять его значение.

Тоесть "enteringPlayer" это просто первый аргумент, который ты можешь назвать например thePlayer итд...

И потом использовать его в функции...

Примерно так:

Аргументы функции:

function enterVehicle ( player enteringPlayer, int seat, player jacked, int door) 

Как объявляют функцию:

function enterVehicle ( thePlayer, seat , jacked_player, door) 

где:

thePlayer это игрок который садится в машину

seat это место на которое thePlayer садится

jacked_player это игрок который будет выкинут из машины

door это дверь в которую садится thePlayer

Главное в определенном порядке все объявлять

Link to comment

Так как пишу свой небольшой модик,пожалуйста,подскажите...

Как запилить объект (Пикап),а когда его подбираешь он аттачится к тебе в руку(Речь идёт о очках,Я щас,как раз ищу модель очков)

Link to comment
Так как пишу свой небольшой модик,пожалуйста,подскажите...

Как запилить объект (Пикап),а когда его подбираешь он аттачится к тебе в руку(Речь идёт о очках,Я щас,как раз ищу модель очков)

https://wiki.multitheftauto.com/wiki/CreateMarker

https://wiki.multitheftauto.com/wiki/OnClientMarkerHit

https://wiki.multitheftauto.com/wiki/AttachElements

Link to comment
Так как пишу свой небольшой модик,пожалуйста,подскажите...

Как запилить объект (Пикап),а когда его подбираешь он аттачится к тебе в руку(Речь идёт о очках,Я щас,как раз ищу модель очков)

https://wiki.multitheftauto.com/wiki/CreateMarker

https://wiki.multitheftauto.com/wiki/OnClientMarkerHit

https://wiki.multitheftauto.com/wiki/AttachElements

Чувак.

Я же говорю про пикап,а не про Маркер.

Link to comment

Kenix у тебя есть скайп? просто это очень важно для меня !!! Я бы хотел стобой переговарить по этому поводу!

у меня просто очень хорошоя идея а воплотить я её немогу :(

Link to comment

вот я создал выдор тиам но чтото не пашет вчём проблема ?

Window = {} 
Button = {} 
Label = {} 
Image = {} 
  
  
addEventHandler("onClientResourceStart",resourceRoot, 
    function() 
  
        window = guiCreateWindow(167,254,478,332,"Select Team",false) 
        Team1but = guiCreateButton(33,84,158,50,"Select to \nCounter-Terrorist",false,window) 
        Team2but = guiCreateButton(289,82,158,50,"Select to \n Terrorist",false,window) 
        Counterterrprimg = guiCreateStaticImage(9,3,207,117,"counter-terror.png",false,window) 
        Terrorimg = guiCreateStaticImage(272,9,186,112,"terror.png",false,window) 
        Label = guiCreateLabel(114,171,293,48,"Добро пожаловать на Counter Strike server \n \n Welcome to Counter Strike server",false,window) 
        guiLabelSetColor(Label,255,255,0) 
        guiSetFont(Label,"clear-normal") 
        Label2 = guiCreateLabel(127,246,246,45,"Чтобы сменить команду нажмите F3 \n \n To change the command, press F3",false,window) 
        guiLabelSetColor(Label2,255,255,0) 
        guiSetFont(Label2,"clear-normal") 
        addEventHandler ( "onClientGUIClick", Team1but, TeamSelected) 
        addEventHandler ( "onClientGUIClick", Team2but, TeamSelected2) 
    end 
) 
  
  
  
function showUserPanel () 
getVisible = guiGetVisible (window) 
playerName = getPlayerName ( getLocalPlayer() ) 
if (getVisible == true) then 
    guiSetVisible (window, false) 
    showCursor (false) 
end 
if (getVisible == false) then 
    guiSetVisible (window, true) 
    showCursor (true) 
    end 
end 
  
addEventHandler("onPlayerLogin", getResourceRootElement(getThisResource()), showUserPanel) 
addEventHandler("onClientRender", getResourceRootElement(getThisResource()), showUserPanel) 
  
  
  
  
  
function TeamSelected() 
  
 triggerServerEvent ( "joinTeam1", getLocalPlayer() )    
 destroyElement ( window ) 
     
end 
  
function TeamSelected2() 
  
 triggerServerEvent ( "joinTeam2", getLocalPlayer() )    
 destroyElement ( window ) 
     
end 

Edited by Guest
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...