Jump to content

Antibird

Members
  • Posts

    177
  • Joined

  • Last visited

Everything posted by Antibird

  1. Да в общем-то выбор небольшой - triggerServerEvent. Дописать строку в конец файла скрипта: сработал триггер - значит скрипт загружен. Прочие навороты - по желанию =) У меня все-таки иная ситуация была, мне не нужна проверка на сервере как таковая.
  2. Не совсем точно выразился. Спрашиваю скорее из спортивного интереса, имею нездоровую склонность к минимизации кода. Что triggerServerEvent, что setElementData, все это - телодвижения, которые нужно совершить со стороны клиента. Я думал, клиент сам рапортует серверу "я загрузил скрипты и полностью готов", без дополнительных строчек кода, написанных с моей стороны. Какое-нибудь серверное событие вроде "onPlayerScriptStarted" по аналогии с "onPlayerJoin", "onPlayerConnect". А, неважно, пока писал, придумал, как сделать по другому, вопрос исчерпан. @Vladimir5: Мне он это написал.
  3. Давненько не брал в руки шашек, все вылетело из головы. Подскажите пожалуйста, когда клиент запустил клиентские скрипты, можно ли это отследить напрямую с сервера, не используя клиентский triggerServerEvent? Навскидку ничего подходящего в списке serverEvents не нашел.
  4. В "другом мультиплеере" та же картина со скиммером. (just in case)
  5. А что возвращает запрос к БД? Если таблицу - то помучай ее через pairs( ), увидишь, что за поля и какие в них значения, а там сориентируешься сам, скорее всего. P.S. Кем написан представленный тобой код?
  6. Немного не понял вопроса. Если , то любая переменная и так доступна "из любого файла со скриптом" в пределах одного ресурса. Если нужно иметь "общую" переменную для нескольких ресурсов сразу, то рекомендуют использовать call( ), например. Или в качестве такой переменной использовать elementData: setElementData( ), getElementData( ) для чтения/изменения значения переменной.
  7. Вот еще какой момент. Можно ли сделать так, чтобы debug window открывалось автоматически, без необходимости вводить команду?
  8. Вполне, благодарю! По логике - да, на деле же - local player. Да и cancelEvent( ) не работает к сожалению.
  9. Речь идет об объектах, добавляемых скриптом, не родных декорациях gta. Например, 1676 - заправочная колонка. Вполне себе взрывабельна, и не железная отнюдь, увы, MX_Master. Столбы я до кучи добавил к вопросу, в основном меня интересует эта самая колонка. setObjectStatic пробовал, не помог. Убрать col'ы - тоже не вариант, можно подорвать по другому. Единственное решение - custom модель?
  10. Подскажите пожалуйста, каким образом сделать объекты вроде бензоколонок и фонарных столбов неуничтожаемыми. А то знаете как, врежешь с ноги по заправочной станции и кирдык.
  11. Спасибо, добавление chunkname помогло. Раньше я по другому решал "проблему" со string.dump, вручную модифицируя скомпиленный скрипт, причем до 65Кб это работало. Потом один байт стал меняться, сегодня с утра на свежую голову заметил.
  12. [РЕШЕНО] Возникла интересная ситуация, вкратце опишу в чем дело. При рестарте сервера у меня автоматически компилируются скрипты, что удобно - внес изменения и перезапустил сервер, никаких лишних телодвижений. Система проста: сначала на сервере читаются клиентские скрипты и пишутся в одну строку, потом это отдается на съедение string.dump, потом уже скомпилированный скрипт попадает на клиент и там запускается (да, такой я параноик). Внезапно стали происходить чудные вещи. Если длина исходного скрипта, передаваемый на обработку функции string.dump, больше 65534 байта, то клиент перестает его загружать (через loadstirng, естественно). Уточняю, что дело не в каких-либо аспектах пересылки скрипта с сервера на клиент, и вот почему. Провел эксперимент: 1. Запустил со скриптом меньше 65 Кб и записал два файла - скомпилированный сервером (на сервере) и он же, переданный на клиент (на клиенте, очевидно). 2. Используя обычную строку-комментарий довел размер скрипта до 65535 и снова записал такие же файлы. 3. Сравнил, используя notepad++ ( есть там такой инструмент: "Compare" ) все 4 файла. Notepad клянется, что "Files match". Все, то есть. Совсем. Нет, это фантастика, ей богу. То есть скомпиленные скрипты с и без строки-комментария абсолютно идентичны, что есть логично и правильно, а вот длина исходного кода имеет значение. Где собака-то зарыта, чем они все-таки могут отличаться и как это увидеть?
  13. In case 1.1 is in use, processLineOfSight( ) has 3 nice variables to return, which are normalX, normalY, normalZ ( nothing else, but a surface normal ). To have 6 points is just enough to get angles you need, using getPointFromDistanceRotation( ) as been supposed. This basically makes it possible to cast 1 ray instead of 2.
  14. Он не светится. По моему, на него просто не влияет освещение сцены.
  15. Была у меня такая же задача, прицеплял к голове камеру. Вид от первого лица с учетом всех телодвижений игрока. В конечном итоге выглядело дико, но честно обрабатывало позицию камеры с учетом всех наклонов головы. Принцип работы заключался в том, чтобы получить позицию трех костей нужной части тела, затем в дело вступала математика и нормализованные векторы. P.S. Попробую поискать в бэкапах.
  16. The table can be converted into string using toJSON( ), which then can be saved as an account data. To recover table from the string saved so, fromJSON( ) function is to be used.
  17. Да я и не говорю, что твой =) Просто попробовал указать на ошибки автора. Извини, если треплюсь без толку, но досконально разбирать и тестировать сейчас никак. Попробуй пока что в 35 строке "source" заменить на "player". А в 37 и 38 удалить начало строк "jobmarker = "
  18. An only thing which is faster than 50 ms timer is "onClientRender"/"onClientPreRender" events. As smooth as your FPS. Not sure I understood the rest of the question thought.
  19. Будет nil в обоих случаях. lua.org
  20. jobmarker всегда в 4 измерении, а вот игрок перемещается туда на время выполнения задания. Поэтому, 35 строка сервера: if ( getElementDimension ( source ) == 4 ) then source - не игрок, а маркер, поэтому условие выполняется всегда. По логике, там должен быть не source, а player. jobmarker = givePlayerMoney ( player, 6500 ) -- Это непонятно, зачем делается jobmarker = setElementDimension ( jobmarker, 4 ) -- А вот тут появится ошибка, jobmarker уже не маркер, а true/false .... addEventHandler( "onMarkerHit", jobmarker, eindMission ) -- Ну и напоследок хэндлер накроется по той же причине.
  21. Вообще чудно там все устроено. Кто-нибудь знает, почему это условие может вдруг не выполняться? if ( math.abs(0.01500 - 0.015001999214292) < 0.0001) then ... По логике первого ресурса топливо уменьшается пропорционально пройденному расстоянию. Независимо от способа перемещения Т.С. и состояния мотора (вкл, выкл) По логике второго топливо просто утекает потихоньку, если игрок находится в Т.С. По хорошему бы надо, чтобы: 1. Топливо расходуется на холостом ходу (если мотор в работе) 2. Расход увеличивается, если игрок зажимает клавишу движения вперед/назад, уменьшается, если отпускает. 3. Расход прекращается совсем при выключении мотора 4. Когда подобная система заработает, наладить связь сервер-клиент-сервер для передачи и хранения информации о топливе и т.п., так как топливный скрипт выполняется на клиенте, а данные хранятся на сервере. В каком виде хранятся - дело, пока что, десятое. @ Loki, если новичок в скриптинге, то это прекрасный повод начать. Решишь задачу в соответствии с собственным взглядом на вещи, а по ходу дела и опыта наберешься. Не надо бояться потраченных недель, они впоследствии стократно окупаются. А мы тебе поможем советом и примером. Только по порядку.
  22. Всех благодарю. Тогда такой момент: поясните пожалуйста логику MTA в случае нескольких одинаковых эвентов. Например, onClientRender. 1. Допустим, их 10 штук и к каждой привязан вызов собственной функции. 2. Допустим, он (эвент) один, и сам вызывает все 10 функций. Будет ли второй вариант быстрее (чисто теоретически) и как вообще MTA обрабатывает событие, если имеются несколько одинаковых eventHandler'ов. Выполняются ли они по очереди, в соответствии с очередностью объявления их в коде? Или движок сваливает все в одну кучу и на уровне движка остается лишь одно событие? event1 -> function1( ) \ event2 -> function2( ) | ==> anEvent -> (func1, func2, func3) event3 -> function3( ) /
  23. Возник вот какой вопрос. Необходимо сделать так, чтобы некое событие (event) срабатывало только для нескольких типов элементов, например vehicle, player, object... Вижу 3 пути. 1. Проверять тип элемента и действовать соответственно (обрабатывать/пропускать) при условии, что к эвенту прицеплен root. 2. Создать dummy элементы по числу требуемых типов и сделать parent'ами для каждого типа по отдельности: vehicle_root, player_root и.т.д, но тогда потребуется несколько столько же одинаковых эвентов. 3. Создать единый parent для всего вышеперечисленного сразу. Тогда можно обойтись одним эвентом, но так как у элемента может быть только один родитель, этот вариант, скорее всего, не подходит, так как мало ли где еще понадобится провернуть нечто подобное для конкретного типа, а родитель охватывает не только данный тип, но и еще пару-тройку. Не пойдет. Собственно, можно не изобретать велосипед, а использовать первый вариант. Но может кто поделится какой военной хитростью, чтобы легко и изящно и безо всяких getElementType( ), if ... end, etc. ( Хотя так ведь не бывает, правда =)
×
×
  • Create New...