Jump to content

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


Recommended Posts

Чем можно хорошо сделать ИИ, в котором через определенный промежуток времени будет происходить "смена действия". Таймерами не очень хорошо получается. Нету ли каких-нибуть интересных статей/книг по подобному ИИ(не обязательно на Lua) ? Всего ИИ будет у 350(+- 50) "существ". Причем их существование будет направлено на определенных игроков, но "направление" может изменятся во время их существования.

Чем можно делать замеры нагрузки на ЦП от определенных действий ? Как сильно существование элементов нагружает ЦП ? Отсчет таймеров ? Если будет 300 таймеров - какая нагрузка ?

Статей по ИИ полно на хабре.

Касательно нагрузки - причём тут таймеры? Или вы пришли из мира "разработчиков" сампа, где думают, что таймеры создают сильную нагрузку? Можно создать 1000 таймеров которые будут делать "i = i + 1", а можно одним таймером весь CPU забить. Зависит от того что вы там будете делать. Тоже самое касается элементов, но в дополнение изучите дерево элементов, ибо неправильная работа (которая замечается почти у всех) с деревом будет вызывать лишние расчёты в CPU

Link to comment
Чем можно хорошо сделать ИИ, в котором через определенный промежуток времени будет происходить "смена действия". Таймерами не очень хорошо получается. Нету ли каких-нибуть интересных статей/книг по подобному ИИ(не обязательно на Lua) ? Всего ИИ будет у 350(+- 50) "существ". Причем их существование будет направлено на определенных игроков, но "направление" может изменятся во время их существования.

Чем можно делать замеры нагрузки на ЦП от определенных действий ? Как сильно существование элементов нагружает ЦП ? Отсчет таймеров ? Если будет 300 таймеров - какая нагрузка ?

Статей по ИИ полно на хабре.

Касательно нагрузки - причём тут таймеры? Или вы пришли из мира "разработчиков" сампа, где думают, что таймеры создают сильную нагрузку? Можно создать 1000 таймеров которые будут делать "i = i + 1", а можно одним таймером весь CPU забить. Зависит от того что вы там будете делать. Тоже самое касается элементов, но в дополнение изучите дерево элементов, ибо неправильная работа (которая замечается почти у всех) с деревом будет вызывать лишние расчёты в CPU

Нет, из сампа я не приходил. Я не знал о том, как это реализовано в МТА(да-да, можно было посмотреть в исходном коде, но я очень плохо знаю С++ и вряд ли бы вообще там эту функцию нашел). Были предположения, что сам отсчет дает нагрузку, отсюда и вопрос такой. Нагрузка от того, что таймер будет выполнять что-то понятна.

Не могли бы вы мне более конкретно ответить на остальные вопросы ( замеры, и элементы). Про элементы, я так понял, у вас говорться в "Тоже самое касается элементов", они тоже сами по себе не несут большой нагрузки ? Она настолько мала, чтобы не проявляться при количестве элементов в 20к ?

Link to comment
Не могли бы вы мне более конкретно ответить на остальные вопросы ( замеры, и элементы). Про элементы, я так понял, у вас говорться в "Тоже самое касается элементов", они тоже сами по себе не несут большой нагрузки ? Она настолько мала, чтобы не проявляться при количестве элементов в 20к ?

От многово зависит..

Если ты создал кучу элементов и под завязку присвоил очень много данных (элемент дата), то будет забиваться ОЗУ.

Link to comment
Не могли бы вы мне более конкретно ответить на остальные вопросы ( замеры, и элементы). Про элементы, я так понял, у вас говорться в "Тоже самое касается элементов", они тоже сами по себе не несут большой нагрузки ? Она настолько мала, чтобы не проявляться при количестве элементов в 20к ?

От многово зависит..

Если ты создал кучу элементов и под завязку присвоил очень много данных (элемент дата), то будет забиваться ОЗУ.

От любых переменных ОЗУ будет забиваться. Это я и так знаю. Я про другое спрашивал.

Link to comment

Привет всем, скажите в чём проблема?

mta_screen_2014_03_24_23_53_15.jpg

x_window 
ywindow 
x1_window 
y1_window 

Меня удивило это, серв перезагружал, перекодировал файл, удалял строчку он к последующим прикапывается с той же ошибкой. Главное с первой норм. В чём проблема?

Link to comment

Есть ли возможность получить указатель на функцию внутри самой функции? Что-то типа:

  
addEventHandler("onPlayerQuit", root,  
    function() 
        removeEventHandler("onPlayerQuit", root, --[[данная функция]]) 
    end 
) 
  

P.S. Альтернативные решения мне известны, но интересен именно такой вариант

Link to comment
  • 3 weeks later...

Всем привет :)

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

Допустим, при старте ресурса мы подключаемся к БД. При заходе игрока на сервер, мы берем из БД его данные и ставим ему через setElementData. А при его выходе с сервера, обновляем данные в БД.

Подскажите пожалуйста, будет ли безошибочно работать такой вариант:

1. При "внезапном" отключении игрока в связи с, например, проблемами с его подключением к интернету?

2. При не менее внезапном отключении сервера.

Заранее большое спасибо за помощь.

Link to comment
  • Other Languages Moderators

2) Если под внезапность подразумевать проблемы с питанием, то нет.

В огромных ЦОД стоят мощные источники бесперебойного питания, какие могут быть внезапные проблемы с питанием?

Link to comment

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

Link to comment
Еще побродив по интернету, пришел к выводу, что правильнее всего важные действия сразу отображать в БД, а мелкие раз в какое-то время. (думаю, к мелким можно отнести допустим количество патронов у игрока или количество бензина в машине)

Изменять данные в БД тогда, когда они изменяются на сервере. Например, у игрока изменилось кол-во денег - отправляем это в БД, изменился скин - отправляем в БД. Тогда, при экстренном выключении сервера, потеряются лишь второстепенные данные, такие как позиция игрока. Ведь ничего страшного в том, что его отбросит на последнее место сохранения нету, если все остальные данные в порядке.

Link to comment

Как я могу передать 'thePlayer' из функции внутрь setTimer?

      setTimer(function(source) 
        local x,y,z = getElementPosition(source) 
        setElementData(root, 'positionUsx', x) 
        setElementData(root, 'positionUsy', y) 
        setElementData(root, 'positionUsz', z) 
        triggerClientEvent(source, 'Hello', root, source ) 
      end, 10000, 1) 
  

Edited by Guest
Link to comment
Как я могу передать 'thePlayer' из функции внутрь setTimer?
      setTimer(function(source) 
        local x,y,z = getElementPosition(source) 
        setElementData(root, 'positionUsx', x) 
        setElementData(root, 'positionUsy', y) 
        setElementData(root, 'positionUsz', z) 
        triggerClientEvent(source, 'Hello', root, source ) 
      end, 10000, 1) 
  

thePlayer = thePlayer в теле функции, перед таймером.

Почему cloneElement не клонирует колшейпы ?

Link to comment
Как я могу передать 'thePlayer' из функции внутрь setTimer?

Вариант 1. Передать thePlayer в качестве агрумента:

  
local thePlayer = getRandomPlayer() 
setTimer(function(player) 
    local x,y,z = getElementPosition(player) 
    setElementData(player, 'positionUsx', x) 
    setElementData(player, 'positionUsy', y) 
    setElementData(player, 'positionUsz', z) 
    triggerClientEvent(player, 'Hello', root, player) 
end, 10000, 1, thePlayer) 
  

Вариант 2. Т.к. thePlayer находится в области видимости, то можно его и использовать:

  
local thePlayer = getRandomPlayer() 
setTimer(function() 
    local x,y,z = getElementPosition(thePlayer ) 
    setElementData(thePlayer , 'positionUsx', x) 
    setElementData(thePlayer , 'positionUsy', y) 
    setElementData(thePlayer , 'positionUsz', z) 
    triggerClientEvent(thePlayer , 'Hello', root, thePlayer ) 
end, 10000, 1) 
  

Link to comment
Как я могу передать 'thePlayer' из функции внутрь setTimer?
      setTimer(function(source) 
        local x,y,z = getElementPosition(source) 
        setElementData(root, 'positionUsx', x) 
        setElementData(root, 'positionUsy', y) 
        setElementData(root, 'positionUsz', z) 
        triggerClientEvent(source, 'Hello', root, source ) 
      end, 10000, 1, thePlayer) 
  

Link to comment

Выходной - день щедрости в русской ветке. :))

Спасибо.

---

Не получается запретить доступ к F1 (isElementFrozen - всегда false):

function toggleFRWindow() 
local currentFreezeStatus = isElementFrozen ( localPlayer ) 
if not skinsA[getElementModel(localPlayer)] then 
    if not currentFreezeStatus then 
        if isWindowOpen(wndMain) then 
            showCursor(false) 
            hideAllWindows() 
            colorPicker.closeSelect() 
        else 
            showCursor(true) 
            showAllWindows() 
        end 
    end 
end 
end 
  
addCommandHandler('fr', toggleFRWindow) 
  

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