Jump to content

Лимит спавна автомобилей [РЕШЕНО]


Recommended Posts

Ребята, подскажите как поставить лимит на спавн автомобилей, пожалуйста!

Сделал небольшой скрипт. Идея его заключается в том, что игрок заходит на маркер, отрывается окно с кнопкой, при нажатии на которую на определенных координатах появляется автомобиль. Как поставить лимит на спавн автомобиля, что бы при повторном нажатии на кнопку заспавненый ранее автомобиль удалялся и появлялся новый ( как в ресурсе freeroam.) Подскажите пожалуйста.

Вот код моего скрипта:

сервер:

  
function destroyVehicle(vehicle) 
    local check=false 
    for i,player in ipairs(getElementsByType("player")) do 
        if getPlayerOccupiedVehicle(player)==vehicle then 
            check=true 
        end 
    end 
    if check==false then 
        destroyElement(vehicle) 
    end 
end 
  
function exitVehicle(vehicle) 
    setTimer(destroyVehicle,300000,1,vehicle) 
end 
addEventHandler("onPlayerVehicleExit",getRootElement(),exitVehicle) 
  
function vehexplode ()  
destroyElement(source)  
end 
addEventHandler("onVehicleExplode",root, vehexplode) 
  
function taxiSp ( ) 
createVehicle ( 420, 1629.91, -1107.53, 27, 0, 0, 90 ) 
end 
addEvent( "taxiSpawn", true ) 

клиент:

  
taxismark=createMarker(1629.62,-1117.05,23,"cylinder",3,230,250,0,50) 
addEventHandler( "onClientMarkerHit",taxismark, 
    function( hitElement, matchingDimension ) 
    qsWindow = guiCreateWindow( 0.3584,0.2568,0.2500,0.256," ",true ) 
    -- guiCreateStaticImage( 0.05, 0.12, 1.4, 0.6, "/img/taxicon.png",true,qsWindow) 
    buttonYes = guiCreateButton( 0.05,0.45,0.9,0.3,"Спавн [Taxi]",true,qsWindow ) 
    buttonNo = guiCreateButton( 0.05,0.79,0.9,0.15,"закрыть",true,qsWindow ) 
    guiSetVisible( qsWindow,false ) 
        if (hitElement == localPlayer) and (getElementModel ( localPlayer ) == 15) then 
            showCursor( true ) 
            guiSetVisible( qsWindow,not guiGetVisible( qsWindow ) ) 
            addEventHandler ( "onClientGUIClick", buttonYes, 
                function(  ) 
                    showCursor( false ) 
                    guiSetVisible( qsWindow,false ) 
                    triggerServerEvent( "taxiSpawn", localPlayer ) 
                     
                    --outputChatBox( "`Вы захватили банк вы должны продержаться 5 минут.",255,0,0 )   
                end 
            ,false ) 
            addEventHandler ( "onClientGUIClick", buttonNo, 
                function ( ) 
                    showCursor( false ) 
                    guiSetVisible( qsWindow,false ) 
                end 
            ,false ) 
        end 
    end 

Edited by Guest
Link to comment
Умно.
 destroyElement 

Попробуй.

Это понятно, но вопрос в том как определить тот автомобиль, который был создан игроком, для того что бы потом его удалить. Создавать зону какую то типа colshape или что?

Link to comment

А,да,кстати-ты делаешь это на серверной стороне...

Можно и зоной,но по мне так-легче проверить создал ли ты уже машину или нет.

Просто заключи твою машину в переменную и проверь,создал ли ты её уже или нет.

Link to comment
А,да,кстати-ты делаешь это на серверной стороне...

Можно и зоной,но по мне так-легче проверить создал ли ты уже машину или нет.

Просто заключи твою машину в переменную и проверь,создал ли ты её уже или нет.

можешь простой примерчик показать как? а то я совсем не въеду с чего начать :(

Link to comment

Ну,к примеру вот:

  
1 = createVehicle (420, 0, 0, 3, 0, 0, 90) 
function JustExample (thePlayer) 
setElementData( thePlayer, 'example', true ) 
if getElementData( thePlayer, 'example' ) then 
  return destoryElement(1) 
end 

Как то так-проверить не могу,МТА глючит,комп перезагружать лень.

Сюда твой Event.

Cтупил,ща код дам,минуту.

Link to comment
Ну,к примеру вот:
  
1 = createVehicle (420, 0, 0, 3, 0, 0, 90) 
function JustExample (thePlayer) 
setElementData( thePlayer, 'example', true ) 
if getElementData( thePlayer, 'example' ) then 
  return destoryElement(1) 
end 

Как то так-проверить не могу,МТА глючит,комп перезагружать лень.

Сюда твой Event.

Cтупил,ща код дам,минуту.

сейчас попробую)

Link to comment
А как сделать что бы setElementData записывало момент создания автомобиля, что то не пойму?

Чо то не получается...

Да вот так:

  
function lol ( ) 
lol = createVehicle (420, 0, 0, 3 ) 
setElementData( thePlayer, 'example', true ) 
if getElementData( thePlayer, 'example' ) then 
  return outputChatBox( 'Машина уже стоит на координатах.', thePlayer ); 
end 
end 
addEventHandler("onResourceStart",getRootElement(), lol) 

Ладно,блин,щас не пойму ничего.

Вроде как то так-

Дакилла кстати писал же пример:

Либо
setElementData( thePlayer, 'house', true ) 

а проверять, создал ли через

if getElementData( thePlayer, 'house' ) then 
  return outputChatBox( 'вы уже создали дом', thePlayer ); 
end 

Link to comment

Вот переделал твой код под триггер.

function lol ( ) 
lol = createVehicle ( 420, 1629.91, -1107.53, 27, 0, 0, 90 ) 
setElementData( thePlayer, 'example', true ) 
if getElementData( thePlayer, 'example' ) then 
  return outputChatBox( 'Машина уже стоит на координатах.', thePlayer ); 
end 
end 
addEvent( "taxiSpawn", true ) 
addEventHandler( "taxiSpawn", root, lol ) 

Дебагскрипт орет:

[2012-02-17 20:21:45] WARNING: profcs\rtr.lua:3: Bad argument @ 'setElementData' [Expected element at argument 1, got nil] 
[2012-02-17 20:21:45] WARNING: profcs\rtr.lua:4: Bad argument @ 'getElementData' [Expected element at argument 1, got nil] 
[2012-02-17 20:21:51] WARNING: profcs\rtr.lua:3: Bad argument @ 'setElementData' [Expected element at argument 1, got nil] 
[2012-02-17 20:21:51] WARNING: profcs\rtr.lua:4: Bad argument @ 'getElementData' [Expected element at argument 1, got nil] 

Link to comment

thePlayer не нужен в аргументах, убрать! Вместо thePlayer в функции юзай source, потому что ты в тригере укзал source элемент как localPlayer

function lol ( ) 
  lol = createVehicle ( 420, 1629.91, -1107.53, 27, 0, 0, 90 ) 
  setElementData( source, 'example', true ) 
  if getElementData( source, 'example' ) then 
    return outputChatBox( 'Машина уже стоит на координатах.', source ); 
  end 
end 
  
addEvent( "taxiSpawn", true ) 
addEventHandler( "taxiSpawn", root, lol ) 

Link to comment

Чтобы удалить предыдущую машину, в elementData надо сохранять элемент машины, проверять на её наличие и удалять.

vehicle = getElementData(source, "myVehicle") 
  
if vehicle then 
     destroyElement(vehicle) 
end 
  
local vehicle = createVehicle(...) 
setElementData(source, "myVehicle", vehicle) 

Link to comment

MX_Master, спасибо за помощь, теперь ожил чат в который отправляется сообщение о том что 'Машина уже стоит на координатах.', но машины по прежнему спавнятся без лимита. Наверно

getElementData 

и

setElementData 

просто не срабатывают в этом скрипте (непонятно почему)

дебаг молчит.

Link to comment
function lol ( ) 
  if getElementData( source, 'example' ) then 
    return outputChatBox( 'Машина уже стоит на координатах.', source ); 
  end 
  lol = createVehicle ( 420, 1629.91, -1107.53, 27, 0, 0, 90 ) 
  setElementData( source, 'example', true ) 
end 
  
addEvent( "taxiSpawn", true ) 
addEventHandler( "taxiSpawn", root, lol ) 

Link to comment
Чтобы удалить предыдущую машину, в elementData надо сохранять элемент машины, проверять на её наличие и удалять.
vehicle = getElementData(source, "myVehicle") 
  
if vehicle then 
     destroyElement(vehicle) 
end 
  
local vehicle = createVehicle(...) 
setElementData(source, "myVehicle", vehicle) 

Спасибо за помощь) ваш совет помог)

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