Перейти к контенту

Nazgool

Жители
  • Число публикаций

    618
  • Регистрация

  • Последнее посещение

  • Дней в топе

    1
  • AMKoin

    37 [Подарить AMKoin]

Весь контент пользователя Nazgool

  1. А разве не это требовалось? while IsMouseButtonPressed(1) do как раз и проверяет на каждом новом круге "нажата ли кнопка?"Ну если хочется с break-ом, то можно переписать так : local delay = 54 -- задержка между выстрелами local x, y = 0, 50 function OnEvent(event, arg) if (event == "MOUSE_BUTTON_PRESSED" and arg == 1) then while true do Sleep(delay) MoveMouseRelative(x, y) if not IsMouseButtonPressed(1) then break end end end end забыл. Почему-то не могу редактировать. Глючит что-то. Вот: local delay = 54 -- задержка между выстрелами local x, y = 0, 50 function OnEvent(event, arg) if (event == "MOUSE_BUTTON_PRESSED" and arg == 1) then while true do Sleep(delay) MoveMouseRelative(x, y) if not IsMouseButtonPressed(1) then break end end end end
  2. @Solomon753, Скрипт, который ты тестировал (как мы уже выяснили) не годится. Попробуй мой вариант чуть выше. И поиграйся со временем задержки в Sleep(30) -- тут нужно подобрать оптимальное время задержки
  3. @Solomon753, Ну тогда попробуй ещё такое. local delay = 54 -- задержка между выстрелами local x, y = 0, 50 function OnEvent(event, arg) if (event == "MOUSE_BUTTON_PRESSED" and arg == 1) then Sleep(30) -- тут нужно подобрать оптимальное время задержки (как можно меньшее) while IsMouseButtonPressed(1) do Sleep(delay) MoveMouseRelative(x, y) end end end Вот же вроде написано для PressKey, что при нажатии есть задержка в несколько миллисекунд Думаю это распространяется и на кнопки мыши.
  4. Глянул по ссылкам. Тоже начал было на coroutin-ах делать. Но вроде тот же хрен, только в профиль. Хотя можно попробовать. Подскажи пожалуйста ссылку на API
  5. , Я тоже на этом споткнулся. Возможно в while is_pressed do цикл получается бесконечеый. Не известно как работает OnEvent . У неё независимый поток? Будет ли обрабатывать кнопки во время цикла? Никто тут пока не знает. У меня был вариант: function OnEvent(event, arg) local mouse_down = (event == "MOUSE_BUTTON_PRESSED" and arg == 1) while mouse_down do Sleep(delay) MoveMouseRelative(x, y) end end Вероятно проверка IsMouseButtonPressed(1) ещё не определяется на этом цикле апдейта. При отпускании (через несколько циклов???) она уже есть, а ( IsMouseButtonReleased???) нет . Вот и срабатывает "прошлая" - на нажатие. Нужно больше информации. Есть ли метод типа OnUpdate, или события удержания клавиши.
  6. Всяко бывает . У самого не раз казусы бывали. Так что ты прав. Лучше сформулировать так - использовать тот, что 100% воспроизводится каким-то слышимым звуком в других схемах.. Плохо, дружище, другое. В наше время достаточно было просто намёка. Остальное делали сами.
  7. Для проверки новой логики можно прописать какой-то стандартный звук. И тогда покажет кто "виноват" - звук или логика.
  8. Nazgool

    Скриптование

    dc Наверняка человек мало что понял. Меня самого выражение ( ( ( n1:id() ~= 0 ) and n1 ) or n2 ) несколько смутило. В том смысле, что необходимо некоторое время, чтобы сопоставить - кто такой n1 и n2 по отношению к first и second speaker-ам. Да и столько скобок, что ... ну на любителя конечно. Наверное просто стоило сказать что speaker-ы поменялись местами, и чтобы далее не заморачиваться на эту тему, нужно написать дополнительную функцию, которая сама будет ставить first_speaker-ом actor-а. Типа : function normalize_speakers(first_speaker, second_speaker) local is_actor = first_speaker:id() == 0 return is_actor and first_speaker or second_speaker, is_actor and second_speaker or first_speaker end function give_kolbasa(first_speaker, second_speaker) first_speaker, second_speaker = normalize_speakers(first_speaker, second_speaker) -- ну и далее по тексту end ........ dc 10000. Ну а как по-другому контролировать speaker-ов? Вызовы из логики ещё можно поправить в xr_logic. А из xml и скриптов как?
  9. Nazgool

    Скриптование

    @Barmolini, weathers[level.get_weather()], судя по твоей таблице, может возвратить только два типа значения. Либо 'nil', либо 'number' Возвратит 'number' - замечательно. Возвратит 'nil' - не беда. На этот случай и сработает or и get_float. ...and weathers[level.get_weather()... совсем лишнее.
  10. @Zander_driver, А как ты хочешь использовать эту строку? Если как идентификатор, то сохрани её в переменной, а потом используй как хочешь : var = 'ключ' _G[var] = 555
  11. Вроде тут всё уже и сказано, но для новичка, по сути, трудно разобраться. В принципе проверка if "что-то" then - это булева проверка. И это "что-то" расценивается как булево значение. Для наглядности лучше переформулировать так : if value then.... Это означает следующее, - "Если (if) значение (value) существует, и оно есть истинна (т.е. по правилам Lua не false и не nil), то данная проверка сработает (then). Что значит - "существует" значение? В Lua есть 8 типов значений. Не попадающее ни под одно из них и будет "не существующим". Пример тебе уже показал Charsi - это возврат из функции без аргументов. Но...В lua определено одно из восьми значений (обзывается оно - nil), которое указывает на то, что у некой Lua переменной значение "вроде бы и задано", но его пока нет. Типа разметили территорию, а что тут будем строить - разберёмся позже. Но всё же это уже Lua значение, которое указывает на "не существование" значения. Оно тоже попадает под определение "не существующего" значения. Итак, мы например определились, что Lua значение существует. Т.е. оно (как уже выяснили) реально есть и не nil. Т.е. в контексте проверки if "что-то" then - это уже почти "true". Почему почти? Потому что эта проверка булева. Поэтому остаётся проверить, что "что-то" не является булевым значением "false". Ну а проверки типа if value == "что-то" then.... - это проверки строго на определённый (из 8-ми существующих) тип Lua значений. Т.е. те типы значений, которые сможет определить функция type(var_type)
  12. Это лишнее движение. По оси Y просто поставь, скажем, на метр ниже physic_object-а
  13. @lsclon, Ну а я про что? Естественно не внутрь. Это же и есть пересечение координат.
  14. Nazgool

    Скриптование

    Если стоит x-ray extensions, то есть метод level.get_target_obj().
  15. @lsclon, Так можно делать при условии, что никого не будет бесить ящик, сквозь который можно проходить, даже не споткнувшись. А полноценный вариант получиться только с использованием двух объектов. Дык, было дело. Наступал уже на эти грабли
  16. @AndrewMor, Расположи объект inventory_box ящика где-то по координатам, не совпадающим с координатами physic_object-а ящика. Рядом, над, под - не важно. Всё равно он не видим. Там какая-то коллизия возникает при пересечении координат, и наблюдается перемещение physic_object-а.
  17. Nazgool

    Скриптование

    ПЫСовское описание параметров team, squad и group : изначально group использовалась для синхронизации передвижения НПС по путям, синхронизация производилась при помощи флага n в точках движения walk, а так же при условии нахождения НПС в одной группе. Ещё описание : Так что делай выводы.
  18. Lanta87. там ещё нужно дописать : в функцию function actor_binder:net_destroy() : self.object:set_callback(callback.use_object, nil) в функцию actor_binder:reinit(): self.object:set_callback(callback.use_object, self.use_object, self)
  19. , если все они в одном гулаге, то : function название() local actor = db.actor if actor and actor:alive() then xr_gulag.setGulagEnemy("имя_гулага", actor) end end если нет, то : function название() local t = {sid_1, ... , sid_N} -- story_id каждого НПС local actor = db.actor if actor and actor:alive() then for i = 1, #t do local npc = level_object_by_sid(t[i]) if npc and npc:alive() then npc:set_relation(game_object.enemy, actor) end end end end
  20. Nazgool

    Скриптование

    А чего там составлять? Заменить в коде elseif #key>0 then if clsid[key] then t[#t+1] = key end на elseif #key>0 then local k = clsid[key] if k then t[key] = k t[k] = key end и получиться таблица вида : { строка = число, число = строка, ... } и так будет для каждого поля из clsid. Т.е. обращаться к ней можно будет и по строке и по номеру. Насколько я понял по условию, никакой динамики и не нужно. Просто необходим список и всё. Читать его один раз при загрузке - много времени не займёт. Вроде так?
  21. Nazgool

    Скриптование

    Andrey07071977 А почему я это написал? Я думаю составить таблицы соответствия из уже имеющегося списка ключей абсолютно не сложно. Если я ещё и это сделаю, то что останется вопрошающему? И ещё. Я никого не заставляю пользоваться этим. Одному это жесть, другому извращения. Это одна из техник!
  22. Nazgool

    Скриптование

    Desertir Наверное существует и x-ray extensions, в котором время от времени что-то меняется? Или нет? Речь шла о способе "вытаскивания" ключей clsid из userdata! Свои, добавленные, можно "запомнить" и стандартными средствами lua. А "на кой ..." меня не интересует. Надо человеку, значит надо. Более интересно само решение поставленной задачи. Просто академический интерес.
  23. Nazgool

    Скриптование

    Desertir Смещение отличается в разных версиях xrGame. Zander_driver Не знаю что дальше хочешь делать, но вот тебе массив t с ключами из clsid, а дальше уже просто. (сделано топором, зато быстро и главное работает. оптимизируешь сам) local xrgame_path = getFS():update_path("$fs_root$", "bin\\xrGame.dll") local f = io.open(xrgame_path, 'rb') local s = f:read('*a') local _,start = s:find('CCharacterInfo>::InitInternal') local limit = s:find('CObjectItemClientServerSingleMp') start = start + 10 local p = f:seek("set", start) local t = {} local key = '' while p < limit do local w = f:read(1) if w:byte()~=0 then key = key..w elseif #key>0 then if clsid[key] then t[#t+1] = key end key = '' end p = p+1 end
  24. Nazgool

    Скриптование

    IO для того и создана, чтобы читать файлы. Особенно если разрабы предусмотрели модификатор 'b' для функции io.open. Собственно свой предыдущий пост я и писал, потому что уже получилось. Иначе сидел бы молча.
  25. Nazgool

    Скриптование

    Стандартных способов не знаю, а альтернативный придумал: ) Нужно пространство имён IO, посредством которого читать xrGame.dll. Если подойдёт, то часика через полтора покажу. Сейчас нет возможности.

AMK-Team.ru

×
×
  • Создать...