Jump to content

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


Recommended Posts

Можно как-то отключить фатальное поврежнение транспорта (падение до 0 хп) если оно перевернулось? Но при этом хотелось бы оставить остальные повреждения - тараны, удары, стрельбу.

Если я правильно тебя понял, то ты хочешь, чтобы автомобиль не терял хп, когда лежит на крыше? Если да, то вот:

  
addEventHandler("onVehicleDamage", getRootElement(),  
    function(lossHP) 
        if isVehicleOnRoof(source) then 
            setElementHealth(source, getElementHealth(source)+lossHP) 
        end 
    end 
) 
  

Вот функция isVehicleOnRoof:

function isVehicleOnRoof(vehicle) 
        local rx,ry=getElementRotation(vehicle) 
        if (rx>90 and rx<270) or (ry>90 and ry<270) then 
                return true 
        end 
        return false 
end 

Не проверял, но должно работать. По-моему ивент onVehicleDamage нельзя отменить, поэтому нужно устанавливать хп.

В данном случае, если машина лежит перевернутая, то при стрельбе и таране и всех остальных видах урона, машина не получит дамаг. (Так как он востановится)

Link to comment
В данном случае, если машина лежит перевернутая, то при стрельбе и таране и всех остальных видах урона, машина не получит дамаг. (Так как он востановится)

Только что проверил. Событие не вызывается, когда автомобиль лежит на крыше. Вызывается только при повреждениях (например, когда автомобиль катится на крыше).

Действовать нужно немного по-другому. При помощи события onVehicleDamage отслеживать весь полученный урон и сохранять его. Создать таймер, который проверял бы, лежит транспорт или нет. Если лежит, то сравниваем урон полученный через onVehicleDamage с 1000 - getElementHealth(автомобиль), и если урон транспорта больше, то ставим правильный урон, из onVehicleDamage

Link to comment

Помему просто обработаться и востановится урон не успевает!

По алгоритму то, при любом виде дамага, повреждения востанавливаются!

Действовать нужно немного по-другому. При помощи события onVehicleDamage отслеживать весь полученный урон и сохранять его. Создать таймер, который проверял бы, лежит транспорт или нет. Если лежит, то сравниваем урон полученный через onVehicleDamage с 1000 - getElementHealth(автомобиль), и если урон транспорта больше, то ставим правильный урон, из onVehicleDamage

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

Вобщем все это дело очень сильно нагружать сервер будет!

И кстати всеравно таймер не будет успевать проверить все машины... Их могут подорвать раньше чем сработает таймер!

Link to comment
Помему просто обработаться и востановится урон не успевает!

По алгоритму то, при любом виде дамага, повреждения востанавливаются!

Действовать нужно немного по-другому. При помощи события onVehicleDamage отслеживать весь полученный урон и сохранять его. Создать таймер, который проверял бы, лежит транспорт или нет. Если лежит, то сравниваем урон полученный через onVehicleDamage с 1000 - getElementHealth(автомобиль), и если урон транспорта больше, то ставим правильный урон, из onVehicleDamage

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

Вобщем все это дело очень сильно нагружать сервер будет!

И кстати всеравно таймер не будет успевать проверить все машины... Их могут подорвать раньше чем сработает таймер!

Только что проверил. Обрабатывал 5000 автомобилей, каждые 200 мс (таймером). На выполнение каждой обработки уходило 13-15 мс. Нагрузка не слишком велика.

И что значит таймер не будет успевать? Чушь. Таймер обрабатывает за 200 мс весь транспорт.

Link to comment

Незнаю незнаю... Можно конечно и так... Но лично я бы не стал бы так грузить сервак.

Но тут уж каждый сам решает, так что не буду осуждать этот вариант.

Link to comment
Возможно изменить размер приаттаченого объекта к элементу через attachElements?

Поясни... Не очень понятно что конкретно нужно...

создал объект, приаттачил его к игроку. Объект слишком большой. Его можно изменить в размерах?

Link to comment
  • Other Languages Moderators
Всем привет ))) Народ подскажите как сделать чтоб если ты в тиме например копы то тебя телепортирует якобы на базу

Проверяешь в тиме ли игрок, если игрок в тиме то тпшиш его на базу.

Link to comment
function TeamFunction () 
    local {D} = getTeamFromName ( teamName ) 
    if ( theTeam ) then 
        local players = getPlayersInTeam ( {D} ) 
  
        for playerKey, playerValue in ipairs ( players ) do 
     spawnPlayer ( playerValue, 0.0, 0.0, 5.0, 90.0, 0 ) 
        end 
    end 
end 
  
addEventHandler( "onResourseStart", TeamFunction ) 

{D} Это тиам

Link to comment
function TeamFunction () 
    local {D} = getTeamFromName ( teamName ) 
    if ( theTeam ) then 
        local players = getPlayersInTeam ( {D} ) 
  
        for playerKey, playerValue in ipairs ( players ) do 
     spawnPlayer ( playerValue, 0.0, 0.0, 5.0, 90.0, 0 ) 
        end 
    end 
end 
  
addEventHandler( "onResourseStart", TeamFunction ) 

{D} Это тиам

O____________O

Тебе надо когда игрок заспавнился за полицию, его телепортировало на базу? Так?

Link to comment
addEventHandler ( "onPlayerSpawn", root, 
    function ( posX, posY, posZ, spawnRotation, theTeam, theSkin, theInterior, theDimension ) 
        if ( getTeamName ( theTeam ) == "Police" ) then 
             setElementPosition ( source, 0, 0, 0, true ) 
        end 
    end 
) 

Link to comment

есть у меня такая идея, чтоб на сервере было два ак, один простой, а второй тактический, не спешите писать что я могу второй заменить вместо м4, так как тоже самое я хочу сделать с м4 :wink:

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

вот что у меня получилось:

клиент

function kickScreen () 
  myWeapon = getPedWeapon(getLocalPlayer()) 
  if ( myWeapon ) then 
     triggerServerEvent( "kickPl", getLocalPlayer(), "Hello World!" ) 
  end 
end 
addEventHandler ( "onClientResourceStart", getRootElement(), kickScreen ) 

сервер

function kickPlay ( kicked ) 
  myWeaponi = getPedWeapon(source) 
    setElementVisibleTo ( myWeaponi, getRootElement(), false ) 
end 
addEvent( "kickPl", true ) 
addEventHandler( "kickPl", getRootElement(), kickPlay ) 

но, это не работает... выдает ошибку WARNING: ese/ser.lua:r: Bad argument @ 'setElementVisibleTo' [Expected element at argument 1, got number '31' ]

также был такой вариант скрипта:

function kickScreen () 
  myWeapon = getPedWeapon(getLocalPlayer()) 
  setElementAlpha(myWeapon, 0) 
end 
addEventHandler ( "onClientResourceStart", getRootElement(), kickScreen ) 
  

но он тоже выдает ошибку WARNING: ese/client.lua:2: Bad argument @ 'setElementAlpha'

я так понимаю что проблема в

myWeapon = getPedWeapon(getLocalPlayer()) 

потому что это не элемент... :?:

Link to comment

Ты когда смотришь функцию, ты первым делом смотри что она возвращает.

так вот getPedWeapon возвращает id оружия:

Returns

Returns an int indicating the type of the weapon the ped has in the specified slot. If the slot is empty, it returns 0.

It should be noted that if a ped runs out of ammo for a weapon, it will still return the ID of that weapon in the slot (even if it appears as if the ped does not have a weapon at all), though getPedTotalAmmo will return 0. Therefore, getPedTotalAmmo should be used in conjunction with getPedWeapon in order to check if a ped has a weapon.

Link to comment

тогда возможно ли использовать текстуру как элемент?

function kickScreen () 
  txd = engineLoadTXD ( "data/ak.txd" ) 
  engineImportTXD ( txd, 355 ) 
  dff = engineLoadDFF ( "data/ak.dff", 355 ) 
  engineReplaceModel ( dff, 355 ) 
  setElementAlpha(txd, 0) 
end 
addEventHandler ( "onClientResourceStart", getRootElement(), kickScreen ) 

Link to comment

Объект — это элемент.

Вы можете взять любой объект, заменить его текстуру, а затем делать с ним все, что хотите.

Прикреплять (attachElements) элементы к игроку можно только этих типов, поэтому TXD, DFF вы прикрепить к игроку не сможете, как вы хотите.

  • Markers
  • Blips
  • Objects
  • Players
  • Vehicles
  • Sounds
  • Colshapes

Link to comment

Я предполагаю, что можно сделать так:

В Map Editore находишь самый ненужный объект) Заменяешь его модель и прикрепляешь к игроку как оружие...

Хотя конечно такой замененный объект может на карте оригинальной встретится

Ну это вобщем как вариант...

Link to comment
Я предполагаю, что можно сделать так:

В Map Editore находишь самый ненужный объект) Заменяешь его модель и прикрепляешь к игроку как оружие...

Хотя конечно такой замененный объект может на карте оригинальной встретится

Ну это вобщем как вариант...

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

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