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

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий

Ну, собственно, и tips и custom_static'и вполне годятся. В принципе же - старый бобрый "биорадарчик". Текст масштабировать смысла не вижу.

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

@Dennis_Chikin, ну да, только в трехмерном пространстве. Ничего сложного по сути. Прошлое видео удалил. Сделал два типа меток, различие меток по цветам в зависимости от отношения сталкера/монстра к ГГ. Улучшил алгоритмы вычисления позиции на экране для проецирования метки, так же написал алгоритм увеличения/уменьшения метки в зависимости от дальности. Все работает вполне нормально. Смотрите в 1080.

 

 

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

Народ подскажите мне пожалуйста как заспавнить НПС сидящим(через скрипт)

Железо: MS Windows 7 Профессиональная 32-bit SP1, AMD Athlon 64 X2 Dual Core Processor 5000+ 2.60 GHz, 3.0 GB RAM, nVidia GeForce GT440 Palit PCI-E 1024

d77f0c977eec.jpg

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

"Заспавнить сидящим" - ни как. Только назначить логику kamp@, или написать что-то свое, принудительно отключающее любые другие схемы, и устанавливающее state_mgr.set_state( npc, "sit_ass" )

 

http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9B%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0_NPC

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

Вопрос, есть ли какие-то подводные камни с онлайном/оффлайном аномалий...

Собственно что происходит: вначале имеем некоторый набор (16 штук) аномалий, заспавненных скриптово на текущей локации. Со своими партиклами, звуками, шейпами настроенными через нетпакет, все как полагается.

Перебирая эти 16, делаем следующее

        local obj = level.object_by_id(a)
        if obj and IsAnomaly(obj) then
            alife():set_switch_online(a, false)
            alife():set_switch_offline(a, true)
            anoms_onoff_buffer[a] = true
        end

аномалии уходят в оффлайн, тут все норм.

Через энное время их надо вернуть в онлайн. Там имеет место быть такой страшненький код

    while a < 65535 do
        if anoms_onoff_buffer[a] then
        log(string.format("key %i exist...", a))
        local obj = alife():object(a)
        if obj then
        log("object found...")
        if IsAnomaly(obj) then
        log("switch anomaly!")
            alife():set_switch_online(a, true)
            alife():set_switch_offline(a, false)
        end end end
    a = a + 1
    end   

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

key 6417 exist...
object found...
switch anomaly!
key 6422 exist...
object found...
switch anomaly!

и так далее, пересчитал - ровно 16 аномалий. Все четко, только в игре, в онлайне, эти аномалии больше не наблюдаются. Что я делаю не так?

 

 

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

while a < 65535 do

if anoms_onoff_buffer[a] then

А если просто по этой таблице итерироваться, зачем while? Насколько я понял, в таблице лежат айдишники аномалий, который ушли в оффлайн - вот только их и надо переводить обратно. Хотя, конечно вопрос был не в этом и вопрос интересный... Попробуй посмотреть, как сделано управление кострами в последнем OGSE - там совершенно точно они прямо перед ГГ разжигались.
Ссылка на комментарий

Попробуй посмотреть, как сделано управление кострами в последнем OGSE - там совершенно точно они прямо перед ГГ разжигались.

Там костры онлайн/оффлайн не переключаются специально, только включается/выключается аномалия.
Ссылка на комментарий

 

 

while a < 65535 do

if anoms_onoff_buffer[a] then

Это побочный продут многоразовой переделки кода наспех, а что касается собственно основного вопроса - меньше надо заниматься писаниной кода всю ночь до утра, мне :) сам виноват, забыл что в другой функции у меня эти аномалии перед уводом в оффлайн дисаблятся. Ну и видимо сохраняют неактивное состояние после возврата в онлайн. Включил их обратно и все нормально стало. Так что abramcumner причину верно угадал.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

Народ, как стартануть таймер в АМК моде, после окончания времени которого выдается инфопоршень? В амк.скрипт че то писать надо... Помогите плиз!

Ранее был известен под ником BoBaH_671.

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

Народ, как стартануть таймер в АМК моде, после окончания времени которого выдается инфопоршень? В амк.скрипт че то писать надо... Помогите плиз!

function имя_твоей_функции()

 amk.g_start_timer("идентификатор",0, 0, 3) -- в кавычках - уникальный буквенный идентификатор, дальше - время. Последняя цифра - кол-во игровых минут.

end

 

В amk.script:

 

после строк

function __do_timer_action(select_string,params_string)

 local a

 

пишешь:

 if select_string=="твой буквенный идентификатор" then

...делай все, что хочешь, в том числе и выдавай нужный поршень

 end

BoBaH_671, а вообще-то все это легко высматривается в самом amk.script

Сталкер - наше всё!

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

@Карлан, а можно полный вариант функция (пример)?

 

dialogs.script посмотреть - не ?

 

 

local actor, sim = db.actor, alife()

function relocate_item_section( who, sect, d, n )	-- todo: составить таблицы, потом перемещать
	local r = 0
	if d == "in" then
		for i = 1, n or 1 do
			if who and t_quest[sect] and i == 1 then	-- квестовые предметы перемещаем
				local item = who:object( sect )
				if item then who:transfer_item( item, actor )
				else sim:create( sect, vector(), 0, 0, 0 )
				end
				r = r + 1
			else sim:create( sect, vector(), 0, 0, 0 ); r = r + 1
		end	end
	elseif who and d == "out" then
		for i = 1, n or 1 do
			local item = actor:object( sect )
			if item then
				actor:transfer_item( item, who )
				r = r + 1
	end	end	end
	if r ~= 0 then news_relocate_item( actor, d, sect, r ) end
	return r
end

dc

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

svarog2741.gif

 

НС - шлак, солянки - шлак.

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

А не может ли кто-нибудь либо кинуть ссылко на статеечку, либо написать собственно эту самую статеечку про схемы

вот

 

На это ссылка была уже. Там многобуквенно, но многовато воды. А основная "черная магия" не улавливается. Выше - лучше. dc

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

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

А скорость чтения какова?) Если мне нужно будет например из колбека на взятие предмета прочитать из кастом даты данные, это нормально? =)

И где можно посмотреть пример использования?)

P.S данные типа строка = значение

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

На взятие - почему нет ? (Единственно что, надо иметь в виду, что при загрузке взятие отрабатывается для ВСЕХ предметов, и если их много - тогда будет ой.)

 

С брониками и стволами нет, но есть, например, телепорты.

При создании:

            tt = get_anomaly_data( obj )
            cd = parse_custom_data( tt.custom )
            cd.cd = { ["id"] = v }
            tt.custom = gen_custom_data( cd )
            set_anomaly_data( tt, obj )

При входе в онлайн:

    local ini = self.object:spawn_ini()
    local n = ( ini and ini:section_exist( "cd" ) and ini:r_string( "cd", "id" ) )
        or abort( "(%s):reload, invalid section [cd]", self.object:name() )
    local id = self.object:id()
    self.teleport = n    -- идентификатор для чтения параметров
    t_ids[n], t_spawn[id] = id, n

 

В принципе, можно проще. Здесь сразу предполагается странное, поэтому еще добавлено разбор кастомдаты и ее преобразование обратно в строку. Если не нужно - можно сразу строкой и записать. Функции брать традиционно из амк, (ну или альтернативные ;)).

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

Добрый день. Меня мучает один вопрос: как узнать координаты ГГ на мультиплеерной карте? 

Ранее был известен под ником BoBaH_671.

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

А возможно ли технически при ранге ГГ скажем, более 5000, в окне разговора показывать его не мастером, а скажем, легендой?

Сталкер - наше всё!

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

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

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

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

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

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

Войти

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

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

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