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

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

serega-gamer

Ну раз про отслеживание слотов речь идет, посмотри например в Магазинном питании оружия от Кирага. Там это очень просто и удобно сделано, в своем моде юзаю его код уже далеко не только для собственно магазинов.

 

Вообще говоря - слоты в данном случае есть часть инвентаря. Функции итерации инвентаря считают и то что в слотах.

 

AutoGnom Из массы способов самое простое что приходит в голову - записывай в нет-пакет взятых артефактов какое-нибудь безобидное изменение. И соотв-но у новых взятых проверяй, а не несут ли они в себе уже этого изменения. Например можно менять им condition если у тебя артефакты не теряют его при других обстоятельствах (это вроде бы нечасто делается...) Или что-нибудь другое.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

serega-gamer, посоветую тебе начать не с довольно 'глобальной' проверки, а с подпроверок по частям. Так и не надорвешься и свое любопытство удовлетворишь.

Поставь себе вначале конкретную задачу, а не 'типа вот такое оружие'. Если имеешь ввиду активное оружие, то и не заморачивайся с частными типами оружия (например АК) и со слотами. Если же интересует именно конкретное - то и писать код потребуется именно под твою конкретику.

Составь вначале алгоритм того, что хочешь сделать, а уж потом воплощай в коды/функции.

Твое "начало" уже говорит о том, что у тебя пока или каша в голове или маловато опыта в написании кодов (точнее даже в постановке задачи для себя "что-же писать и что должно получиться").

Я так понимаю тебе требуется что-то типа:

1. Определить имеется ли в руках ГГ чего-либо?. Если <Да> то:

2. В руках ГГ держит оружие? Если <Да> то:

3. В оружии имеются патроны? Если <Нет> то:

4.1. Читаем строку конфига оружия в руках и определяем секции используемых им патронов.

4.2. Пробегаемся по рюкзаку ГГ и проверяем, имеются ли используемые оружием секции патронов в рюкзаке. Если <Нет> то:

5. Если еще не проигрывался - Играем звук "Ахтунг-ахтунг! Макароны закончились, пора сбегать на кухню"

6. Взвести метку о том, что звук уже проигрывался, дабы не пиликало всю игру ...

 

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

 

Если же тебе потребно что-то иное - ну так и оговаривай то, что имеешь ввиду, а не общую похачушку про все и вся ...

 

 

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

serega-gamer,

количество патронов в инвентаре для оружия получаешь так же, как и в своем коде выше, только используешь функцию get_ammo_total вместо get_ammo_in_magazine

 

Дельный совет!!! --/ Artos

Изменено пользователем Artos
Ссылка на комментарий

Всем спасибо за помощ! Artos ты прав в том что я не совсем правильно изложил свой ход мыслей точнее не правильно обяснил что именно я хочу! А хочу я как раз сделать глобальную проверку патронов к обсолютно всем стволам а не к некоторым.Дело то в том что у меня действительно очень мало опыта для написания кодов в lua я даже не знаю как использовать флаги точнее как построить функцию проверки на то что, выполнилось ли уже какое либо действие или нет а код что я выложил это только так набросок проверки.Вот если бы кто нибудь хоть разок подробно обяснил как использовать все функции и классы в луа и какой класс или функция что значит либо за что отвечает. Конечно я понимаю что не кто не станет станет тратить на меня своё время и обьяснять мне все нюансы языка луа я так же понимаю что большинство людей ни кто ни чему не учил что они сами научились так сказать методом тыка но хоть кто то бы подумал о том что бы создать тему по языку луа так сказать для чайников или что то подобное. Но я всё таки буду пытаться писать коды набирать опыт и тогда я думаю всё получится тут веть главно сильно захотеть и всё будет :ny_ph34r_1:

 

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

Например, в шапке темы, есть ссылка на "Справочное руководство по языку Lua 5.1". На той же Wiki есть ссылки на различные ресурсы, как на русском, так и на английском языках по языку Lua, именно по языку, не по скриптовой части STALKERa.

Про Lua также есть тема и здесь, на форуме, называется она: "Язык Lua. Общие вопросы программирования".

По поводу функций и классов, также есть хорошая, я бы даже сказал - отличная тема: "Справочник по функциям и классам", на нашем форуме, там расписано много основных классов и их методов, которые используют модостроители.

Ну и наконец, есть еще один ресурс, который есть у каждого, у кого установлен STALKER - это оригинальные скрипты GSC!!! Почему многие ими пренебрегают - лично мне не понятно.

Проблема в том, что многие просто-напросто не хотят читать уже написанное, причин много, но основная всё же - это лень! Всем подавай готовенькое! Это не правильно хотя бы по отношению к другим пользователям - почему одни должны читать и познавать, а другие требуют чтобы им сделали!?

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

Нужно не просто хотеть, нужно для этого ещё и что-то делать! Иначе твоё хотение больше будет похоже на мечты, а не на цели ...

P.S. И не забывай про уважение к языку на котором ты пишешь - пиши грамотнее!

Спасибо за понимание.

ColR_iT

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

Реклама любых модов бесплатно на моём

сайте писать в личку

Ссылка на комментарий

Привет всем! Интересует такой вопрос - Можно ли писать новые аи-схемы для монстров? Или хотя бы как-то модифицировать имеющиеся (не через логику). Спасибо.

Ссылка на комментарий

Scarabay, захотелось поболтать на общефилософские темы?

Ну так выбирай ответ по вкусу:

1. Да, писать новые можно. Бери и пиши. Иль модифицируй имеющиеся ...

 

2. О каком AI и логике гутаришь? Любая AI-схема - это в первую очередь логика и без нее никакий ни AI, ни просто схемы не получишь.

Какой еще AI у монстров? Того, которого в игре вполне достаточно, а если что не устраивает - конфиги логики правь и меняй как захотелось.

 

3. Назвал бы хоть что-то заслуживающее внимания для ковыряния с AI-схемой (не фантазии) - тогда может и есть о чем поговорить ...

 

 

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Всем ещё раз спасибо за помощ! Вот почему так - обьясните народ, не могу додуматься как построить функцию, пишу на форуме так мол и так, помогите, а через некоторое время сам додумываюсь как её построить! Всё таки, когда что то не получается - нужно пробовать ещё, теперь я это уяснил.

local flag_wpn_1
local flag_wpn_2

function ammo_controls()

local snd_obj = nil
local s1 = db.actor:item_in_slot(1)
local s2 = db.actor:item_in_slot(2)

  if not flag_wpn_1 then
  if s1 and s1:get_ammo_total() < 1 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\ammo_0]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        flag_wpn_1 = true
    end
    elseif s1 and s1:get_ammo_in_magazine() >= 1 then    
           flag_wpn_1 = nil   
    end

  if not flag_wpn_2 then
  if s2 and s2:get_ammo_total() < 1 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\ammo_0]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        flag_wpn_2 = true
    end
    elseif s2 and s2:get_ammo_in_magazine() >= 1 then    
           flag_wpn_2 = nil   
    end        
end

 

Не смейтесь, если функция построена банально - делаю как умею, что с меня взять)))) Большое спасибо abramcumner и Artos за то, что подсказали мне 2 этих параметра: get_ammo_in_magazine() и get_ammo_total() - без них я бы врятли справился!

 

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

Поправка я слегка изменил

local flag_wpn_1
local flag_wpn_2

function ammo_controls()

local snd_obj = nil
local s1 = db.actor:item_in_slot(1)
local s2 = db.actor:item_in_slot(2)
local act_slot = db.actor:active_slot()

  if not flag_wpn_1 then
  if s1 and s1:get_ammo_total() < 1 and act_slot == 1 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\ammo_0]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        flag_wpn_1 = true
    end
    elseif s1 and s1:get_ammo_in_magazine() >= 1 then    
           flag_wpn_1 = nil   
    end

  if not flag_wpn_2 then
  if s2 and s2:get_ammo_total() < 1 and act_slot == 2 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\ammo_0]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        flag_wpn_2 = true
    end
    elseif s2 and s2:get_ammo_in_magazine() >= 1 then    
           flag_wpn_2 = nil   
    end

хотелось бы сделать то же самое и с гранатами, но к сожелению я не знаю как их щитать; методы с get_ammo_in_magazine() и get_ammo_total() к ним не подходят. Подскажите пожалуйста что-нибудь!

 

Строгое предупреждение от модератора ColR_iT
Это последний раз!

Не знаешь где расставлять знаки препинания - используй проверку пунктуации, хотя бы, из того же Wordа.

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

Реклама любых модов бесплатно на моём

сайте писать в личку

Ссылка на комментарий

serega-gamer

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

Очень советую прочитать

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

RvP

Вы мне, на вопрос о том как применить координаты иконки предмета для CUIStatic, посоветовали

открываем справочник и смотрим как проинитить текстуру

Вы это имели в виду:

void Init(float x, float y, float w, float h);

void Init(string texture, float x, float y, float w, float h);

void InitTexture(string texture);

или что-то иное ? Что ? Изменено пользователем AndreySol
Ссылка на комментарий

AndreySol, а не проще, чем писать на форум, проверить самому?

void Init(float x, float y, float w, float h) --активирует ранее созданное окно, которое будет иметь координаты x,y и ширину,высоту w,h соответственно.
void Init(string texture, float x, float y, float w, float h) --плюс к вышенаписанному присваивает окну текстуру.
void InitTexture(string texture) --просто присваивает окну текстуру.

Так же интересны еще 3 метода

void SetTextureOffset(float x, float y) --устанавливает смещение текстуры относительно координат окна.
void SetStretchTexture(bool) --устанавливает "растягивание" текстуры: допустим у нас текстура размером 100х100, а окно 100х50, в этом случае если установить флаг true, то текстура растянется до размеров окна.
bool GetStretchTexture() --установлено ли "растягивание" текстуры?

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

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий
Строгое предупреждение от модератора ColR_iT
Потрясающе! Ты пишешь:
но всё же пиши как то понятнее почему люди должны напрягать свой мозг читая твои посты
когда к тебе самому уже неоднократно была точно такая же просьба. Читать твои посты неудобно - отсутствие пунктуации. Итого: 3 дня Read Only.
Изменено пользователем ColR_iT

Реклама любых модов бесплатно на моём

сайте писать в личку

Ссылка на комментарий

Есть вопрос. Существует ли возможность скриптом проиграть звук если не загружена игра? Когда актора и других объектов ещё нет.

ТЧ 1.0006.

 

Старлей, да.

Изменено пользователем Shadows
Ссылка на комментарий
Строгое предупреждение от модератора ColR_iT
Не нужно постить один и тот же вопрос в разных темах!
Изменено пользователем ColR_iT
Ссылка на комментарий

Desertir

я проверял, не получается то, что мне нужно. А мне нужно инвентарную иконку пачки патронов, к примеру 9х18 fmj вывести на статик. В файле weapons.ltx есть данные:

inv_grid_width = 1

inv_grid_height = 1

inv_grid_x = 11

inv_grid_y = 12

это координаты иконки в условных ячейках сетки (50х50) в файле ui_icon_equipment.dds. А вышеприведенные Вами ф-ции класса CUIStatic не умеют (если я правильно разобрался) "вырезать" требуемый фрагмент из большой текстуры. Так как это сделать ?

Ссылка на комментарий

AndreySol, можно легко догадаться, что:

а) Методы класса CUIStatic требуют указания абсолютных значений, т.к. в пикселях (от начала/конца/...)

б) Зная размерность сетки и координаты по сетке, легко перевести отнисительные координаты в абсолютные.

inv_grid_width = 1 => 1x50 => weight = 50

inv_grid_height = 1 => 1x50 => height = 50

inv_grid_x = 11 => 11x50 => x = 550

inv_grid_y = 12 => 12x50 => y = 600

 

Т.о. применяя это, можно хоть вырезать из иконки нужный фрагмент иль склеивать рядом находящиеся ...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Ой-ли ???

local x = 550
local y = 600
local width = 50
local height = 50
add_item.item_icon:Init("ui\\ui_icon_equipment",x, y, width, height)

в результате на статике изображения нет.

если-же пробую так:

local x = 0
local y = 0
local width = 50
local height = 50
add_item.item_icon:Init("ui\\ui_icon_equipment",x, y, width, height)

на статике получаю изображение всей текстуры из файла ui_icon_equipment.ltx, с размерами 50х50 точек. Из чего делаю вывод - этот метод класса рисует заданную текстуру по указанным координатам x и y (относительно самого окна статика) и с размером width и height. И уж ни как он не вырезает ничего из текстуры, переданной первым параметром. Но если первым параметром передать в метод идентификатор прописанный в каком-то из видимых движку xml-файлов, то текстура будет вырезана согласно координат в описании этого идентификатора в этом xml-файле.

Отсюда вопрос: если нет более никаких способов подсунуть статику координаты по сетке из ltx-файла, значит выход - писать свой (добавлять в существующий) xml-файл, в котором прописывать "вырезки" для всех иконок боеприпасов ?

Изменено пользователем AndreySol
Ссылка на комментарий

Существует вариант получения необходимого фрейма из текстуры: Frect():set(x,y,width,height)

Можно его попробовать в твоих кодах использовать ... Не зная их трудно чего либо предполагать.

Не уверен, что это будет полезно, т.к. не заморачивался переводом всего ui_icon_equipment во фреймы, довольствуясь именно приведенным тобою выше вариантом, создавая требуемые описатели фреймов.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Существует вариант получения необходимого фрейма из текстуры: Frect():set(x,y,width,height)
создавая требуемые описатели фреймов

Можно об этом подробнее ? Смотрел я в lua_help описание класса Frect - 6 переменных, ф-ция set инициализирует только 4. Какие из них ? Зачем две остальных. Как это использовать ?

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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

AMK-Team.ru

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