-
Число публикаций
618 -
Регистрация
-
Последнее посещение
-
Дней в топе
1 -
AMKoin
37 [Подарить AMKoin]
Весь контент пользователя Nazgool
-
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
А разве не это требовалось? 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 -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@Solomon753, Скрипт, который ты тестировал (как мы уже выяснили) не годится. Попробуй мой вариант чуть выше. И поиграйся со временем задержки в Sleep(30) -- тут нужно подобрать оптимальное время задержки -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@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, что при нажатии есть задержка в несколько миллисекунд Думаю это распространяется и на кнопки мыши. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Глянул по ссылкам. Тоже начал было на coroutin-ах делать. Но вроде тот же хрен, только в профиль. Хотя можно попробовать. Подскажи пожалуйста ссылку на API -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
, Я тоже на этом споткнулся. Возможно в 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, или события удержания клавиши. -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
Всяко бывает . У самого не раз казусы бывали. Так что ты прав. Лучше сформулировать так - использовать тот, что 100% воспроизводится каким-то слышимым звуком в других схемах.. Плохо, дружище, другое. В наше время достаточно было просто намёка. Остальное делали сами. -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
Для проверки новой логики можно прописать какой-то стандартный звук. И тогда покажет кто "виноват" - звук или логика. -
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 и скриптов как?
-
@Barmolini, weathers[level.get_weather()], судя по твоей таблице, может возвратить только два типа значения. Либо 'nil', либо 'number' Возвратит 'number' - замечательно. Возвратит 'nil' - не беда. На этот случай и сработает or и get_float. ...and weathers[level.get_weather()... совсем лишнее.
-
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@Zander_driver, А как ты хочешь использовать эту строку? Если как идентификатор, то сохрани её в переменной, а потом используй как хочешь : var = 'ключ' _G[var] = 555 -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Вроде тут всё уже и сказано, но для новичка, по сути, трудно разобраться. В принципе проверка 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) -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
Это лишнее движение. По оси Y просто поставь, скажем, на метр ниже physic_object-а -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
@lsclon, Ну а я про что? Естественно не внутрь. Это же и есть пересечение координат. -
Если стоит x-ray extensions, то есть метод level.get_target_obj().
-
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
@lsclon, Так можно делать при условии, что никого не будет бесить ящик, сквозь который можно проходить, даже не споткнувшись. А полноценный вариант получиться только с использованием двух объектов. Дык, было дело. Наступал уже на эти грабли -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
@AndrewMor, Расположи объект inventory_box ящика где-то по координатам, не совпадающим с координатами physic_object-а ящика. Рядом, над, под - не важно. Всё равно он не видим. Там какая-то коллизия возникает при пересечении координат, и наблюдается перемещение physic_object-а. -
ПЫСовское описание параметров team, squad и group : изначально group использовалась для синхронизации передвижения НПС по путям, синхронизация производилась при помощи флага n в точках движения walk, а так же при условии нахождения НПС в одной группе. Ещё описание : Так что делай выводы.
-
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
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) -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
, если все они в одном гулаге, то : 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 -
А чего там составлять? Заменить в коде 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. Т.е. обращаться к ней можно будет и по строке и по номеру. Насколько я понял по условию, никакой динамики и не нужно. Просто необходим список и всё. Читать его один раз при загрузке - много времени не займёт. Вроде так?
-
Andrey07071977 А почему я это написал? Я думаю составить таблицы соответствия из уже имеющегося списка ключей абсолютно не сложно. Если я ещё и это сделаю, то что останется вопрошающему? И ещё. Я никого не заставляю пользоваться этим. Одному это жесть, другому извращения. Это одна из техник!
-
Desertir Наверное существует и x-ray extensions, в котором время от времени что-то меняется? Или нет? Речь шла о способе "вытаскивания" ключей clsid из userdata! Свои, добавленные, можно "запомнить" и стандартными средствами lua. А "на кой ..." меня не интересует. Надо человеку, значит надо. Более интересно само решение поставленной задачи. Просто академический интерес.
-
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
-
IO для того и создана, чтобы читать файлы. Особенно если разрабы предусмотрели модификатор 'b' для функции io.open. Собственно свой предыдущий пост я и писал, потому что уже получилось. Иначе сидел бы молча.
-
Стандартных способов не знаю, а альтернативный придумал: ) Нужно пространство имён IO, посредством которого читать xrGame.dll. Если подойдёт, то часика через полтора покажу. Сейчас нет возможности.
- [ЧН] OGSM CS 1.8 CE Fixes
- [ЧН] HARDWARMOD 3.2
- [ЗП] The Long Road
- [ЧН] New vision of War
- [ЧН] Old Good Stalker Mod - Clear Sky
- [ЗП] Unofficial Patch
- [ЗП] Смерти вопреки
- [ЗП] Контракт на хорошую жизнь
- [ЗП] Shoker Weapon Mod 2.1
- [ЗП] Hardcore pack for SGM 2.2
- [ЗП] Контракт Синдиката
- [ЗП] Клондайк 2.0
- ...и другие моды