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

[SoC] Ковыряемся в файлах


Halford

Рекомендуемые сообщения

Цикл так и должен прыгать по строкам? Тогда если можно пояcните по какому принципу это происходит.
Так и должно быть. При перечислении пар в хеш-таблице порядок не определён, и это документированное поведение. Для того, чтобы иметь определённый порядок, заведи массиво-подобную таблицу:

t = {a,b,c,d}

и перебирай циклом со счётчиком

for i= 1,#t do
    ...
end

мда это не Рио-де-Жанейро. В смысле это не С++ блин, где все так просто и знакомо. кошмар!

Вообще-то там ещё STL есть. На мой взгляд Lua с его одной-единственной стандартной структурой данных - это просто верх простоты по сравнению с С++ с его шаблонами и generic programming.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение
Первый: можно ли вывести над показателем здоровья часы в реальном времени (не в игровом, а в реальном времени)? Второй: можно ли сделать часы и в игровом и в реальном времени стрелочными (например как командирские часы)?
В ЧН можно и то и другое. Создай на худе окно и делай с ним что хочешь. Можно цифрами время вывести, можно текстуру со стрелкой вращать. В ЗП вращение текстур убрали, так что только цифрами.

 

в скриптах круглый ноль.
Жалко, без скриптов там никак не выйдет.

 

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение
А имеет смысл конвертация строк в числовые коды ASCII?

может ли тут быть выигрыш по уменьшению размера данных?

Нет смысла. В лучшем случае, если таблица оптимизирована как массив, то займёт столько же места. И вообще, строка - это и есть последовательность ASCII кодов. Зачем её ещё куда-то переводить?

 

Кстати, если надо перевести строку в массив, то это можно сделать более элегантно и без цикла:

local t = {string.byte(s,1,#s)}

 

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение
Ой,не по теме,но ты не знаешь на паскале аналогичный способ без цикла?Ато как раз понадобилось :)

Увы, не знаю. В Lua эта возможность завязана на списки значений. В C++ я бы покрутил с STL и её алгоритмами. А в Паскале не знаю =(

 

Перекидываю следующий код в тест.луа

db.actor:transfer_money(num, db.actor)

Деньги не уходят.

Ты ж сам себе передаёшь. Конечно не уходят.

 

А потом игроку приперло нажать "разрядить оружие", как обычный автомат. И что получим в результате? Обрыв последовательности действий.

Патроны из инвентаря тут же удалить, ствол скриптом перезарядить.

Чтобы мельтешение патронов не бросалось в глаза, либо удалить статик с индикатором (если можно), либо прикрыть его своим

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение

Ray,

Посмотри внимательней. Тоже сам себе передаёшь.

 

function relocate_money(victim, num, type)

...

db.actor:transfer_money(num, victim)

...

end

 

dialogs.relocate_money(actor, item_repair_cost, "out")

 

 

ЗЫ: вредно ночами сидеть =)

Изменено пользователем malandrinus
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение
а какой прок тогда вообще от этой функции - string.byte() ?
Здесь - мало проку. Я полагаю, что нужна она при чтении/записи строк в бинарный файл

 

 

Ray,

поставь отладочный вывод в консоль и проверь, кто такой actor.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение
тут то вся загвоздка.как поймать левел вертекс на 10 метров от ГГ по данному вектору?

Вот это как раз не проблема. Есть функция

level.vertex_in_direction(int <от какого вертекса>, vector <направление>, float <расстояние>)

Только не перепутайте. В game_object есть такая же, но она не работает.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение

Не сохранился ли у кого старый вариант АМК? Ещё тот, что был с апдейтом из интернета и лежал на другом сайте. Если есть, выложите плиз.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение

Monnoroch,

Если бы я знал точно... Скорее всего та, что предшествовала переезду на этот сайт. Там ещё был апдейтер из интернета. Но если есть и более ранние, то тоже было бы неплохо.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение

Monnoroch,

давно было, помню очень смутно. Но у меня такое воспоминание, что я там как-то включал некий режим отладки. Это был совершенно мой первый опыт. Я пошарился по скриптам, увидел там нечто вроде debug = false (не обязательно так, но нечто в этом роде). Переключил на что-то другое и после этого в игре была видна всякая фигня: в том числе смарты на карте (как я сейчас понимаю) и пр. в этом роде.

В последней версии ничего такого найти не могу.

 

Добавлено через 34 мин.:

Нашёл 1.3.1, но она без интернет апдейтера. Значит, это не та версия, что я помню. Какие там были?

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение

Monnoroch,

Вот ещё вспомнил. В той версии часть файлов была "зашифрована", т.е. скрипты были без комментариев и переносов строк. Помню, получил незабываемое "удовольствие", пытаясь их понять. Неужели никто не помнит, что это за версия была?

 

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение
ну неет,я то хочу свою схему написать,мне надо скриптом.

Что-то мне сдаётся, что это и есть скриптовая схема mob_jump. В кастомдата просто лежат данные для её инициализации. Так что можно в mob_jump.script заглянуть и посмотреть, как там сделан прыжок. А может можно просто схему использовать.

 

И как сделать так что-бы после получшения инфопоршня с трупа запускалась функция?
2. Проверку на инфопоршень

К конкретному инфопоршену можно прицепить колбек. Тег action

Изменено пользователем malandrinus
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение

Garry_Galler,

а как делаешь? Я бы обшаривал область с помощью vertex_in_direction и искал бы дырки в сетке. Но это требует некоторых затрат

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение

Garry_Galler,

ну так и проверяй дополнительно на попадание в конус взгляда. Или я не понимаю проблемы?

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение

Garry_Galler,

для всего описанного ещё со времён ТЧ в модуле _G есть готовые функции (примерно тоже самое, что ты написал):

yaw_degree3d(v1, v2) - выдаёт угод в градусах между двумя векторами (чистый конус)

yaw_degree(v1, v2) - выдаёт угод в градусах между проекциями двух векторов на горизонтальную плоскость (полагаю в данном случае даже более полезно)

yaw(v1, v2) - аналогично предыдущей, но в радианах

Кстати, эти функции наглядно показывают, что авторы оригинальных скриптов на момент их написания не знали, как пользоваться классом vector. С использованием методов класса vector эти функции можно переписать короче и работать будут раза в три быстрее.

 

device().cam_dir:magnitude()
длина этого вектора и так единица. magnitude можно не использовать

 

 

Направление камеры по любому точнее, чем направление актора.

Изменено пользователем malandrinus
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение

Garry_Galler,

здесь вопрос не неточности, а скорее что хотим получить. Если измерять угол от точки взгляда, то это истинный конус взгляда выходит. Но при этом в него могут не попасть объекты рядом с ГГ и в упор не будет виден кто-либо, стоящий прямо перед ГГ (поскольку его координаты - это положение на земле). Поэтому более осмысленной будет функция yaw_degree, которая игнорирует координату y.

Между прочим, всё равно будет проблема с объектами слева и справа от "полупространства взгляда", поскольку ближе к ГГ оно сужается. Поэтому имеет смысл ближе определённого расстояния проверять на больший угол видимости. Или вообще-то стоит просто использовать угол обзора, полученный из разрешения монитора и fov камеры.

 

Значит при моем способе - использующем методы класса вектор все быстрее работает? :ny_wink:

А ты проверь. Возьми класс profile_timer и замеряй время.

 

Там упоминался метод основанный на октодереве - интересно а в сталкере какой алгоритм реализован...

Для физики не знаю, а при движении по AI сетке - никакой. Ну может только проверяется, что узел сетки кем-то занят и то не всегда. Известно же, что неписи ГГ зачастую игнорируют и сквозь стенки ходят и по воздуху гуляют.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение

Garry_Galler,

все расстояния в метрах и ни в чём другом. В приведённом фрагменте есть ошибка, связанная с побочным эффектом в этой строке

local v3 =v1:sub(v2)

результат также пишется в v1, что влияет на дальнейшие вычисления. Надо было так:

local v3 =vector():sub(v1, v2)

=) А ещё лучше не умничать и написать:

local len = v1:distance_to(v2)

 

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение

SCRIPT,

никак

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение
только как ее скачать - непонятно. я заходил на тот аглицкий сайт - долго ковырялся, но ссылку на скачку так и не получил.

...

на SP один чел тоже такую пишет

Скачивается без проблем. Но если совсем никак, то вот он же на iFilder

Кроме того, вот ссылка на офф.форум

http://www.gsc-game.ru/index.php?t=community&s=forums&s_game_type=xr&thm_page=1&thm_id=13441&sec_id=14

(скопируйте руками и вставьте)

Об этой альтернативе идёт речь? Суть обеих программ одинакова - опрос в цикле состояния клавиш и запись в ltx и т.д.

 

врядле, там два варианта либо глобальный хук на клаву, либо перехват директиксных функций по обработке клавы :grin2:

Хук работать не будет, поскольку очереди сообщений нет. Если ткнёшь пальцем, где описано, как перехватывать ввод через DirеctX, буду признателен.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение
+ главная сложность не в том, чтобы отловить клавишу (это можно делать глобально: функция GetAssyhcKeyState() - читаем MSDN)

Главный недостаток этого способа - надо опрашивать клавиатуру в цикле. Именно нажатие не отловить.

 

, а в том, чтобы клавишу нажать в DXInput, видел наработки для других игр, но сорцов нигде нет

 

единственный путь, что я знаю - писать драйвер, иначе с клавиатурным буфером работать не получается

Я видел на codeproject пример с перехватом интерфейса directinput. Но что-то на моей x64 он не работает.

 

 

Вот ссылка на всякий случай.

Изменено пользователем malandrinus
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...