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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

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

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
Только что, Muzafir сказал:

написал название локации неправильно. Никаких вылетов. 

Дык он "написанное" сравнивает с тем, что возвращает level.name(). В "написанном" что угодно может быть, вылета от этого не будет. Ты все же проверь так как я тебе написал.

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

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

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

Ссылка на комментарий
1 минуту назад, Muzafir сказал:

Выходит это условие не проверяется

Проверяется, но здесь вылета не получишь. Запроси выдачу ложного поршня после проверки локи и поймёшь.

Здесь могла быть ваша реклама.

Ссылка на комментарий
2 минуты назад, Zander_driver сказал:

Дык он "написанное" сравнивает с тем, что возвращает level.name(). В "написанном" что угодно может быть, вылета от этого не будет. Ты все же проверь так как я тебе написал.

ок, сейчас догнал

Если поставить выше деф-менеджера вылет такой:

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...a.l.k.e.r. soc\gamedata\scripts\death_manager.script:135: bad argument #1 to 'pairs' (table expected, got nil)

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

Вот теперь интересно, а что у него в 135 строке.

И нынешний код в net_spawn покажи)

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

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

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

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

Нынешний код:

function actor_binder:net_spawn(data)
    printf("actor net spawn")        

    level.show_indicators()

    self.bCheckStart = true
    self.weapon_hide = false -- спрятано или нет оружие при разговоре.
    weapon_hide = false -- устанавливаем глобальный дефолтовый флаг.

    if object_binder.net_spawn(self,data) == false then
        return false
    end

    db.add_actor(self.object)
    
    if self.st.disable_input_time == nil then
        level.enable_input()
    end

    self.weather_manager:reset()
--    game_stats.initialize ()

    if(actor_stats.add_to_ranking~=nil)then
        actor_stats.add_to_ranking(self.object:id())
    end

    if (level.name() == "simeiz") and 
        not has_alife_info("keep_base_defend_started") then
        self.object:give_info_portion("keep_base_defend_started")
    end

    --' Загружаем настройки дропа
    death_manager.init_drop_settings()
    
    

    return true
end

 

 

 

death_manager - стандартный. Я только в конце одной строки дописал новую группировку. На количество строк это не повлияло 

135 строка - это  for k,v in pairs(spawn_items) do

 

  --' Доспавниваем необходимое количество итемов:
    --' Необходимо составить список объектов которые могут быть заспавнены для персонажа

    local spawn_items = item_by_community[self.npc:character_community()]    
    for k,v in pairs(spawn_items) do
        --' По каждому объекту необходимо получить зависимости    
        if check_item_dependence(self.npc, k) == true then
            --' По каждому объекту необходимо получить количество
            local number = math.ceil(math.random(count_by_level[k].min, count_by_level[k].max))
            --' Необходимо заспавнить нужное количество.
            create_items(self.npc, k, number, v)
        end
    end
end

Изменено пользователем Muzafir
для наглядности
Ссылка на комментарий
7 минут назад, Zander_driver сказал:

а что у него в 135 строке

Подозреваю, что у него в конфигах что-то не так по итемам на этой локации

Здесь могла быть ваша реклама.

Ссылка на комментарий
Только что, Muzafir сказал:

дописал новую группировку.

 

Только что, Muzafir сказал:

local spawn_items = item_by_community[self.npc:character_community()]

А в настройки дропа эту группировку занес?

Или заноси, или перед for добавляй проверку if spawn_items and type(spawn_items) == 'table' then

Он же пытается получить настройки дропа для группировки... а потом их перебрать.

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

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

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

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

Вносил, точно помню. Сейчас перепроверю, может накосячил там где-то

На всякий, настройки дропа - это death_items_by_communities.ltx?

Проверил, как ты сказал - и название локации и инфопорция точно правильны

Ссылка на комментарий
Только что, Zander_driver сказал:

if spawn_items and type(spawn_items) == 'table' then

Проверку добавь тогда.

  • Спасибо 1

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

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

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

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

Здрасьте.

 

Проблема при определении ячейки карты для спавна предмета. Читаю текущие координаты и позицию ячейки вот таким скриптом:

Spoiler

function sms(text)
	news_manager.send_tip(db.actor, text)
end

function coords(cell)
	local act = db.actor

	local pos = act:position()
	pos.x = math.modf(pos.x)
	pos.y = math.modf(pos.y)
	pos.z = math.modf(pos.z)

	sms("xyz = " .. pos.x .. ", " .. pos.y .. ", " .. pos.z)

	if cell then
		local lvid = act:level_vertex_id()
		local gvid = act:game_vertex_id()
		sms("lvid, gvid = " .. lvid .. ", " .. gvid)
	end
end

 

 

ТЧ, Кордон, крыша вагона над Кузнецовым: lvid = 359827, gvid = 97. Объект с такими параметрами ячейки спавнится в указанном месте.

ЧН, Кордон, крыша элеватора: lvid = 310050, gvid = 571. Объект с такими параметрами ячейки обнаруживается на сервере, но остается невидимым. Если задать lvid = 25 и gvid = 472, как в секции [all.spawn] для Кордона, объект отспавнится правильно.

Что изменилось в расчете позиций ячеек в ЧН и как получить действующие значения lvid и gvid?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Здравствуйте.
Я опять насчёт меток на ящиках.
Способ по визуалу работает, но частично. В Кордоне например, метки не ставятся, в лог пишет "alife():object(id) ! invalid id specified". Но в Баре всё работает, в лог выводится:

box object [physic_destroyable_object:1063] detected. visual=dynamics\box\box_metall_01

С способом по логике drop_box получше. Отображаются везде, но есть две мини-проблемы:
1) Если нажать ЛКМ или подвигаться, то метки пропадают.
2) После уничтожения ящика, метка всё еще остается. Исчезают после перезагрузки сейва.

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

Что-то не едут у меня лыжи... Есть у меня скрипт на проверку статика заклинивания оружия:

function jamupdate()
    local snd = sound_object([[actor\wpn_jammed\stalker_1]])
        if get_hud():GetCustomStatic("weapon_jammed_static") and not snd:playing() then
        snd:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
    end
end

Который должен воспроизводить звук ГГ при заклинивании ствола... Куда его вешать на апдейт, чтобы статик отлавливался, в биндер актора? P.S. функция в _g.script:

function on_actor_weapon_jammed()
  if has_alife_info("esc_trader_newbie") then
    game.start_tutorial("part_9_weapon")
  end
  if not has_alife_info("encyclopedy_tutorial_weapon") then
    db.actor:give_info_portion("encyclopedy_tutorial_weapon")
  end
end

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

  • Нравится 1
Ссылка на комментарий

@Капрал Хикс, а на каком движке эти движенья делаются?

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

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

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

Ссылка на комментарий
Только что, Капрал Хикс сказал:

X-ray extentions

На нем, если надобно отловить заклинивание ствола, делается это примерно так:

-- вешать на апдейт
local act_item = db.actor:active_item()
if act_item then
	local wpn_state = act_item:get_wpn_int(nil, 652)
	if wpn_state == 7 then
		-- тут воспроизводить звуки. Состояние 7 - это заклинившее оружие.
	end
end

 

  • Спасибо 1
  • Полезно 3

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

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

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

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

@Zander_driver, отлично всё работает, благодарствую, сейчас буду модифицировать под звуки в костюме с противогазом. А вот вопрос посложнее - как сию фишку с руганью реализовать для ЧН? OGSM CE 1.8, если что.

Ссылка на комментарий
19 минут назад, Капрал Хикс сказал:

буду модифицировать под звуки в костюме с противогазом

Как сделаешь, выложи пожалуйста: давненько сам подумывал о такой полезной фиче. Кстати, что думаешь на счет озвучки необходимости перезарядки оружия, когда закончились патроны в магазине?

Изменено пользователем aromatizer
  • Согласен 1

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

Здравствуйте.

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

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

Здрасьте.

 

Можно ли прочитать параметры из секции конфига в том порядке, в котором они указаны, или результат перебора for i = 0, ini:line_count(section) -1 всегда выдается в случайном порядке?

Задача в том, чтобы вывести полную специализацию механика в заданном порядке (оружие общее, оружие частное, броня): https://drive.google.com/file/d/15OmIOK-H2J2ryp60PAOSUT77FR9fxBmd/view?usp=sharing

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

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

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

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

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

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

Войти

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

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

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