Kernell Posted March 22, 2014 Share Posted March 22, 2014 Чем можно хорошо сделать ИИ, в котором через определенный промежуток времени будет происходить "смена действия". Таймерами не очень хорошо получается. Нету ли каких-нибуть интересных статей/книг по подобному ИИ(не обязательно на Lua) ? Всего ИИ будет у 350(+- 50) "существ". Причем их существование будет направлено на определенных игроков, но "направление" может изменятся во время их существования.Чем можно делать замеры нагрузки на ЦП от определенных действий ? Как сильно существование элементов нагружает ЦП ? Отсчет таймеров ? Если будет 300 таймеров - какая нагрузка ? Статей по ИИ полно на хабре. Касательно нагрузки - причём тут таймеры? Или вы пришли из мира "разработчиков" сампа, где думают, что таймеры создают сильную нагрузку? Можно создать 1000 таймеров которые будут делать "i = i + 1", а можно одним таймером весь CPU забить. Зависит от того что вы там будете делать. Тоже самое касается элементов, но в дополнение изучите дерево элементов, ибо неправильная работа (которая замечается почти у всех) с деревом будет вызывать лишние расчёты в CPU Link to comment
Elengar Posted March 22, 2014 Share Posted March 22, 2014 Чем можно хорошо сделать ИИ, в котором через определенный промежуток времени будет происходить "смена действия". Таймерами не очень хорошо получается. Нету ли каких-нибуть интересных статей/книг по подобному ИИ(не обязательно на Lua) ? Всего ИИ будет у 350(+- 50) "существ". Причем их существование будет направлено на определенных игроков, но "направление" может изменятся во время их существования.Чем можно делать замеры нагрузки на ЦП от определенных действий ? Как сильно существование элементов нагружает ЦП ? Отсчет таймеров ? Если будет 300 таймеров - какая нагрузка ? Статей по ИИ полно на хабре. Касательно нагрузки - причём тут таймеры? Или вы пришли из мира "разработчиков" сампа, где думают, что таймеры создают сильную нагрузку? Можно создать 1000 таймеров которые будут делать "i = i + 1", а можно одним таймером весь CPU забить. Зависит от того что вы там будете делать. Тоже самое касается элементов, но в дополнение изучите дерево элементов, ибо неправильная работа (которая замечается почти у всех) с деревом будет вызывать лишние расчёты в CPU Нет, из сампа я не приходил. Я не знал о том, как это реализовано в МТА(да-да, можно было посмотреть в исходном коде, но я очень плохо знаю С++ и вряд ли бы вообще там эту функцию нашел). Были предположения, что сам отсчет дает нагрузку, отсюда и вопрос такой. Нагрузка от того, что таймер будет выполнять что-то понятна. Не могли бы вы мне более конкретно ответить на остальные вопросы ( замеры, и элементы). Про элементы, я так понял, у вас говорться в "Тоже самое касается элементов", они тоже сами по себе не несут большой нагрузки ? Она настолько мала, чтобы не проявляться при количестве элементов в 20к ? Link to comment
Kenix Posted March 22, 2014 Share Posted March 22, 2014 Не могли бы вы мне более конкретно ответить на остальные вопросы ( замеры, и элементы). Про элементы, я так понял, у вас говорться в "Тоже самое касается элементов", они тоже сами по себе не несут большой нагрузки ? Она настолько мала, чтобы не проявляться при количестве элементов в 20к ? От многово зависит.. Если ты создал кучу элементов и под завязку присвоил очень много данных (элемент дата), то будет забиваться ОЗУ. Link to comment
Elengar Posted March 22, 2014 Share Posted March 22, 2014 Не могли бы вы мне более конкретно ответить на остальные вопросы ( замеры, и элементы). Про элементы, я так понял, у вас говорться в "Тоже самое касается элементов", они тоже сами по себе не несут большой нагрузки ? Она настолько мала, чтобы не проявляться при количестве элементов в 20к ? От многово зависит.. Если ты создал кучу элементов и под завязку присвоил очень много данных (элемент дата), то будет забиваться ОЗУ. От любых переменных ОЗУ будет забиваться. Это я и так знаю. Я про другое спрашивал. Link to comment
Memory Posted March 24, 2014 Share Posted March 24, 2014 Привет всем, скажите в чём проблема? x_window ywindow x1_window y1_window Меня удивило это, серв перезагружал, перекодировал файл, удалял строчку он к последующим прикапывается с той же ошибкой. Главное с первой норм. В чём проблема? Link to comment
CocaColaBear Posted March 27, 2014 Share Posted March 27, 2014 Есть ли возможность получить указатель на функцию внутри самой функции? Что-то типа: addEventHandler("onPlayerQuit", root, function() removeEventHandler("onPlayerQuit", root, --[[данная функция]]) end ) P.S. Альтернативные решения мне известны, но интересен именно такой вариант Link to comment
VCXZ Posted April 11, 2014 Share Posted April 11, 2014 Всем привет Читал, что грамотнее всего подключаться к базе данных при старте ресурса, а отключаться при стопе, а не многократно подключаться/отключаться во время игры. Допустим, при старте ресурса мы подключаемся к БД. При заходе игрока на сервер, мы берем из БД его данные и ставим ему через setElementData. А при его выходе с сервера, обновляем данные в БД. Подскажите пожалуйста, будет ли безошибочно работать такой вариант: 1. При "внезапном" отключении игрока в связи с, например, проблемами с его подключением к интернету? 2. При не менее внезапном отключении сервера. Заранее большое спасибо за помощь. Link to comment
TheNormalnij Posted April 11, 2014 Share Posted April 11, 2014 1) Да, будет вызван onPlayerQuit с параметром причины Time out. 2) Если под внезапность подразумевать проблемы с питанием, то нет. Link to comment
Other Languages Moderators Disinterpreter Posted April 11, 2014 Other Languages Moderators Share Posted April 11, 2014 2) Если под внезапность подразумевать проблемы с питанием, то нет. В огромных ЦОД стоят мощные источники бесперебойного питания, какие могут быть внезапные проблемы с питанием? Link to comment
TheNormalnij Posted April 11, 2014 Share Posted April 11, 2014 Ну так например, как у меня, сервер держится на обычном пк, то любой чих - смерть. Link to comment
VCXZ Posted April 12, 2014 Share Posted April 12, 2014 Еще побродив по интернету, пришел к выводу, что правильнее всего важные действия сразу отображать в БД, а мелкие раз в какое-то время. (думаю, к мелким можно отнести допустим количество патронов у игрока или количество бензина в машине) Link to comment
CocaColaBear Posted April 12, 2014 Share Posted April 12, 2014 Еще побродив по интернету, пришел к выводу, что правильнее всего важные действия сразу отображать в БД, а мелкие раз в какое-то время. (думаю, к мелким можно отнести допустим количество патронов у игрока или количество бензина в машине) Изменять данные в БД тогда, когда они изменяются на сервере. Например, у игрока изменилось кол-во денег - отправляем это в БД, изменился скин - отправляем в БД. Тогда, при экстренном выключении сервера, потеряются лишь второстепенные данные, такие как позиция игрока. Ведь ничего страшного в том, что его отбросит на последнее место сохранения нету, если все остальные данные в порядке. Link to comment
H1TM4N Posted April 13, 2014 Share Posted April 13, 2014 Какой эвент делает проверку на прицеливание в педа?(зеленый треугольник над игроком в прицеле) Link to comment
Kenix Posted April 13, 2014 Share Posted April 13, 2014 Понадобятся ещё проверки https://wiki.multitheftauto.com/wiki/On ... ayerTarget Link to comment
nikitafloy Posted April 16, 2014 Share Posted April 16, 2014 (edited) Как я могу передать '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 April 17, 2014 by Guest Link to comment
Elengar Posted April 18, 2014 Share Posted April 18, 2014 Как я могу передать '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
CocaColaBear Posted April 19, 2014 Share Posted April 19, 2014 Как я могу передать '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
TheNormalnij Posted April 19, 2014 Share Posted April 19, 2014 Как я могу передать '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
nikitafloy Posted April 19, 2014 Share Posted April 19, 2014 Выходной - день щедрости в русской ветке. ) Спасибо. --- Не получается запретить доступ к 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
Elengar Posted April 19, 2014 Share Posted April 19, 2014 Почему cloneElement не клонирует колшейпы ? Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now