_Vincent_ Posted September 1, 2011 Share Posted September 1, 2011 Спросил у одного паренька со средним компом, как играется на 3019. До этого фпс садился до 20, теперь стабильные 38-44 (при лимите 45). отбой. Только вот загвоздочка - у меня и как минимум у еще одного человека на 3019 "перекосило" killmessages, иконки стали более вытянутыми. У меня такое было как-то раз, примерно два года назад, решилось простым обновлением всего (сервер, ресурсы). Link to comment
MX_Master Posted September 2, 2011 Share Posted September 2, 2011 потому что dxDrawImage был слегка оптимизирован )))) http://bugs.mtasa.com/view.php?id=6464 Link to comment
Lex128 Posted September 3, 2011 Share Posted September 3, 2011 Я с самого начала хотел сделать как ты говоришь. Но если у одно ФПС 23 у другого 45? Разное время получится. У одного секунды 4, у другого 8. Для этого можно использовать событие onClientPreRender, в котором есть параметр, показывающий сколько прошло тиков после предыдущего кадра. Тут и фпс не нужно будет считать. Если отнимать каждый раз значение этого параметра от, например, 10000, то за 10 секунд число уменьшится до 0 у любого onClientPlayerDamage. У игрока ХП не снимаются, event говорит что ты попал. Событие onClientPlayerDamage срабатывает, когда у тебя на экране кто-то попал в кого-то, но оно не обязательно совпадает с серверным событием onPlayerDamage, поэтому по onClientPlayerDamage нельзя считать что попадание было на сервере, поэтому же и хп не отнимется. Link to comment
StUNt71 Posted September 3, 2011 Share Posted September 3, 2011 onClientPedDamage? То же самое? Link to comment
Kenix Posted September 3, 2011 Share Posted September 3, 2011 onClientPedDamage? То же самое? Нет. Link to comment
AHTOXA Posted September 4, 2011 Share Posted September 4, 2011 Я пока что новичёк раньше кодерил в самп почему это не работает function test(attacker) outputChatBox( "Йа вызвался") local x,y,z = getElementPosition (attacker) setPedControlState ( source, "aim_weapon", true ) setPedAimTarget ( source, x, y, z) setPedControlState ( source, "fire", true ) end Персонаж стоит как и был но "луч" выстрела попадает в меня как правильно установить SetElementRotation Link to comment
StUNt71 Posted September 4, 2011 Share Posted September 4, 2011 Я пока что новичёк раньше кодерил в самппочему это не работает function test(attacker) outputChatBox( "Йа вызвался") local x,y,z = getElementPosition (attacker) setPedControlState ( source, "aim_weapon", true ) setPedAimTarget ( source, x, y, z) setPedControlState ( source, "fire", true ) end Персонаж стоит как и был но "луч" выстрела попадает в меня как правильно установить SetElementRotation function test(attacker) outputChatBox( "Йа вызвался") local x, y, z = getElementPosition(attacker) local px, py, _ = getElementPosition(source) local rot = (360 - math.deg(math.atan2((x - px), (y - py)))) % 360 setPedRotation(source, rot) setPedControlState(source, "aim_weapon", true) setPedAimTarget(source, x, y, z) setPedControlState(source, "fire", true) end Link to comment
StUNt71 Posted September 4, 2011 Share Posted September 4, 2011 Как выбрать рандомный элемент? -------- Мне нужен не игрок, а например элемент написаный в map.map. Link to comment
MX_Master Posted September 4, 2011 Share Posted September 4, 2011 у созданных элементов разве есть привязка к файлу карты, из которого он был создан? Можно разве что выбрать из элементов, созданных каким-то ресурсом. Link to comment
StUNt71 Posted September 4, 2011 Share Posted September 4, 2011 в мап файл пишу for _, sp in ipairs(getElementsByType("spawn_point")) do outputChatBox("Spawn X: " .. getElementData(sp, "posX")) end -------------------- Гг. Сделал так: local random_spawn = getElementByIndex("spawn_point", math.random(1, 3)) setElementPosition(source, getElementData(random_spawn, "posX"), getElementData(random_spawn, "posY"), getElementData(random_spawn, "posZ")) Link to comment
MX_Master Posted September 4, 2011 Share Posted September 4, 2011 индекс начинается с 0, поэтому math.random(0,2) Link to comment
lil Toady Posted September 4, 2011 Author Share Posted September 4, 2011 Да, каждый .map файл в ресурсе имеет своего map root предка, поэтому можно выбрать рандомный элемент лишь из одной карты. А элементы созданные через скрипты принадлежат к dynamic root. Link to comment
MX_Master Posted September 4, 2011 Share Posted September 4, 2011 Интересненько (: откуда взять этот map root? Хочу все знать. getElementParent ? Link to comment
lil Toady Posted September 5, 2011 Author Share Posted September 5, 2011 getResourceMapRootElement - Елемент карты по её имени пetResourceDynamicElementRoot - Динамичный элемент (Сюда попадают все элементы созданные через скрипты) Вообще, очень полезно правильно использовать древо элементов, можно очень сильно оптимизировать свои ресурсы. Например если вы работаете над каким-нибудь РПГ. Например, в своё время я делал систему покупки зданий. На каждое домик должен были быть маркеры входа/выхода, маркер холодильника и маркер гардероба. Помимо этого, поверх каждого маркера входа я рисовал владельца и цену через dx функции. Но мой map файл был предельно прост: <propertyRoot> <houseRoot> <property posX="..." posY="..." posZ="..." interior="CH02" world="10000" price="1000000" /> </houseRoot> <businessRoot> <property posX="..." posY="..." posZ="..." interior="MC01" world="10000" price="1000000" /> </businessRoot> </propertyRoot> Получается на каждое здание я передавал клиенту не 4 элемента, а всего 1, потом на стороне клиента в зависимости от того к какому предку пренадлежит строение (house или business), ставил маркеры, расшифровывал свой interior и ставил маркеры там в определенном мире. А для прорисовки цен и т.п. делал getElementsByType ( "marker", propertyRoot ) - и функция искала нужные мне маркеры не через всё древо элементов на сервере, а лишь там где хранятся мои здания. В итоге: При заходе на сервер клиенту меньше качать, и мои дополнительные скрипты в каждом фрейме работают быстрее. Link to comment
MX_Master Posted September 5, 2011 Share Posted September 5, 2011 Очень полезная информация. Я не знал. Наверное, потому что примера даже нет на вики, трудно сообразить о реальном предназначении.... добавил пример для getResourceMapRootElement и getResourceDynamicElementRoot Link to comment
StUNt71 Posted September 5, 2011 Share Posted September 5, 2011 Как узнать кол-во слотов у клиента? Или нужны переменные? Link to comment
MX_Master Posted September 5, 2011 Share Posted September 5, 2011 Кол-во слотов сервера клиентской функцией? Только триггером и серверной getMaxPlayers Link to comment
StUNt71 Posted September 5, 2011 Share Posted September 5, 2011 Уже решил проблему по-другому. Без кол-ва слотов. Но всё равно спс. Link to comment
AHTOXA Posted September 5, 2011 Share Posted September 5, 2011 что можно использовать заместо двухмерхных массивов? таблици же? как ими пользоваться? Link to comment
StUNt71 Posted September 5, 2011 Share Posted September 5, 2011 Что именно ты хочешь сделать? local gui = {window = {scoreboard = nil, admin = nil}} gui.window.scoreboard = guiCreateWindow(...) gui.window.admin = guiCreateWindow(...) Link to comment
AHTOXA Posted September 5, 2011 Share Posted September 5, 2011 ммм что ты привёл этим примером) я думаю сделать временное хранение инофрмации о игроке(пока он онлайн) что б не делать запросы прямо в БД Link to comment
StUNt71 Posted September 5, 2011 Share Posted September 5, 2011 setElementData к примеру. Очень полезная вещь. Как я понял, подобная в samp'e PVar'ам, только можно туда писать что душе угодно, без указания типа и не только игрокам. Наоборот только, PVar'ы её копия. Link to comment
AHTOXA Posted September 5, 2011 Share Posted September 5, 2011 попробую правда я енумом и двумерным массивом пользовался спасибо учу МТА мне нравиться) Link to comment
RusRambo Posted September 7, 2011 Share Posted September 7, 2011 Скажите пожалуйста, а можно сделать так, чтобы персонаж "прилипал" к транспортному средству только тогда, когда он "присел" [c]? И только к определённым видам транспорта. Зачем: для упрощённой и надёжной перевозки пассажиров на воде. Я это... ну... не шарю, так сказать. Намекните, если сообразите как это сделать. Я поколдую... 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