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

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

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


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

  Информация (Показать)

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

 

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

  Читать рекомендуется. (Показать)

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


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
  FonSwong писал(а):
Спасибо за развёрнутый коммент

Хочу кое-что добавить

  Показать

 

Изменено пользователем Nazgool
  • Согласен 1
  • Полезно 1
Ссылка на комментарий

 

 

  Nazgool писал(а):
Хочу кое-что добавить

Спасибо, что Вы заметили эту проблему. А это именно проблема, т.к. в «Сталкере» строковые типы являются по сути основными (вспомните все идентификаторы, секции, просто текстовые строки, xml и т.д. и т.п) и самыми «перекидываемыми» между всеми другими методами данными. Но, вот внимания к ним, «подумаешь строка», прослеживается явно пренебрежительное. Напрасно. Я не собирал статистики, но просматривая сообщения на разных форумах, увидел, что доля вылетов в различных модах - так или иначе связаны с некорректной работой именно с данными типа “string”. Лично я в своих поделках использую тип, который для себя называю «суперстрока» - “sstring”. Это разумеется никакое не «супер», а просто некоторые расширения базового типа и много - много разных проверок. Лишние затраты ресурсов есть? Обязательно. Выгоды есть? Мне кажется да. Небольшую часть из этого типа я привёл в своём сообщении и то только в качестве примеров подхода, а не конечной реализации. Из этого надо и исходить.

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

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

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

То есть я изменяю значение так: relation_registry.set_community_goodwill ("stalker", db.actor:id (), 5000)

К примеру как должна работать правильно проверка?:

 

  Показать

 

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

if relation_registry.community_goodwill("stalker", db.actor:id()) > 2000 then

-- действие

end

  • Спасибо 1

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

@Kirgudu, Спасибо большое))).

Если разбираешь подскажи ещё как тоже узнать личное отношение персонажа?

И вообще есть общая функция, в которую уже все входит, чтобы определить суммарное отношение(личное отношение, отношение группировки, и т.п.) к актеру?

Ссылка на комментарий
npc:goodwill(db.actor) -- результат - число
npc:relation(db.actor) -- результат - одно из значений game_object.enemy | game_object.neutral | game_object.friend

Примеры использования можно найти в оригинальных скриптах игры.

Вообще, поиск по файлам с помощью, например, TC, может дать много интересной и полезной информации.

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

 

 

  Kirgudu писал(а):
Примеры использования можно найти в оригинальных скриптах игры. Вообще, поиск по файлам с помощью, например, TC, может дать много интересной и полезной информации.

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

 

Сорри за флуд, не мог пройти мимо.

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

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

 

 

  kmsk писал(а):
подскажи ещё как тоже узнать личное отношение персонажа? И вообще есть общая функция, в которую уже все входит, чтобы определить суммарное отношение(личное отношение, отношение группировки, и т.п.) к актеру?

goodwill

general_goodwill

relation_registry.community_goodwill

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

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

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

function hud_bread()
local act_it = db.actor:active_item()
if act_it and act_it:section() == "bread" then
Ссылка на комментарий

 

 

  Mododel15 писал(а):
а функции использования предмета неправильная.

в таком виде она не может быть правильной. Метод active_item() возвращает клиентский объект в активном слоте.

Правда, я ни разу не пробовал стрельнуть из "батона", но что-то мне подсказывает, что такое вряд-ли возможно и позтому act_it:section() == "bread" всегда будет false.

Но, я могу и ошибаться.

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

Вопрос к знающим.

Модуль se_stor на ЗП периодически, на переходе между локами, не сохраняет статистику ГГ, либо же не может её считать из сохранения.

В ЗП переход осуществляется же посредством проводников, и сохранения делаются дважды - первое на старой локе, возле проводника, именное, а второе - автосейв при переходе на локу, как в остальных играх серии. Так вот, иногда при переходе автосейв бъётся. Вылет с руганью, что se_stor не может прочитать статистику из чанка. При этом, если загрузиться с предыдущего сохранения, которое именное ("... - переход с ... на ...), и опять перейти, то уже переход осуществляется нормально, и статистика сохраняется и считывается. И в дальнейшем можно играть без проблем довольно продолжительное время, и переходить с локи на локу без каких-либо проблем, до момента Х, когда при очередном переходе не сохраняется, либо не считывается опять статистика.

При сохранении в чанки тоже стоит предохранительный выкид из игры, если вдруг какие-то данные для сохранения будут неверные/пустые. Но он никогда не срабатывал. Только при загрузке.

Просто хотелось бы понять, в сторону чего копать: железо, сам se_stor, движок?

Скрипты статистики я не трогал, сразу говорю...

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

Шаман - СисАдмин

Всяко-разно: для ЧН

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

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

-- Записываем переменную
function save_variable(variable_name, value)
	xr_logic.pstor_store(db.actor, variable_name, value)
end

-- Загружаем переменную
function load_variable(variable_name, value_if_not_found)
	return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found)
end

-- Удаляем переменную
function del_variable(variable_name)
	if db.storage[db.actor:id()].pstor[variable_name] then
		db.storage[db.actor:id()].pstor[variable_name] = nil
	end
end

читая в xr_logic , понял, что таким образом сохраняются переменные в пакеты. Но был бы не против, что бы мне разжевали эту тему по самые самые. Есть ли подводные камни, или ограничения? Смогу ли я допустим туда целый текст запихнуть? или что то в этом духе. Или , скажем, на каждую аномалию записывать на неё какие то уникальные значения, которые можно будет использовать? Где вообще найти какой Faq про сохранение переменных или текста в игре, что бы всё яснопонятно?

... А наше дело маленькое - с ружьём да по болотам. (с)

Ссылка на комментарий
  Romz писал(а):

Модуль se_stor на ЗП периодически, на переходе между локами, не сохраняет статистику ГГ, либо же не может её считать из сохранения.

Проблема нами с автором вопроса решена, исправленный модуль se_stor выложен в теме «Сборочный цех».

 

Что касается обещанных мной подробностей.

Как известно, при создании нового net-пакета в ЗП и ЧН позиция записи может не быть автоматически установлена на начало, и чтобы запись в пакет происходила как положено, позиция записи должна быть изменена принудительно методом packet:w_begin(0). Об этом уже неоднократно писалось, например здесь.

Однако было обойдено вниманием (или, по крайней мере, я не нашёл на форуме соответствующей информации) то, что для «чистого» net-пакета может не быть нулём также и позиция чтения. При этом packet:r_tell() для этого пакета возвращает, например, 263.

Такая ситуация встречается как минимум в ЗП, вероятно и в ЧН тоже.

@Artos не учёл это в модуле se_stor, либо просто забыл исправить, что и привело к вышеописанным вылетам. Теперь данной ошибки модуль лишён.

 

А решение простое - после создания нового net-пакета следует принудительно выставлять как позицию записи, так и позицию чтения:

local packet = net_packet()
packet:w_begin(0) --/ установка позиции записи в начало net-пакета (+2 технологических байта)
packet:r_seek(0) --/ установка позиции чтения с начала net-пакета

@Max_Raf, указанным тобой способом данные сохраняются в pstor игрока, а значит имеют ограниченный общий объём, не превышающий размера net-пакета для соотв. платформы (около 8 КБ для ТЧ и 16 КБ для ЧН/ЗП). «Войну и мир» ты в них не запихнёшь, так как переполнение гарантированно приведёт к порче сохранений.

Если есть необходимость сохранять что угодно и сколько угодно, лучше посмотреть в сторону так называемых универсальных хранилищ. Что это такое - неоднократно тут объяснялось и обсуждалось, с примерами, инструкциями и т. п. Информацию легко найти; достаточно сделать поиск по форуму или, для начала, заглянуть в тему «Сборочный цех».

Изменено пользователем Kirgudu
  • Спасибо 1
  • Полезно 1

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

 

 

  Serge! писал(а):
в таком виде она не может быть правильной
А как быть тогда? Может быть так?
function use_bread_oz(obj)
    if obj ~= nil then
        if obj:section() == "bread" then
            for i = 1, 1 do --Совершаем спавн 1 раз
           alife():create(:"Любой предмет", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
       end
end
    end
end
Ссылка на комментарий

 

 

  Mododel15 писал(а):
Может быть так?

Можно и так, но лучше немного причесать.

Но, главное здесь, на мой взгляд, "не как"?, а для чего это надо и отсюда вытекает, где это событие надо отлавливать и реализовывать. Если Вы хотите, чтобы вместо "закусить" ГГ получил ещё бутылёк - это одна цель. Или же при покупке  батона у торговца за 20 р., он плучал вместо этого "Вал" - то это другая. Могут быть ещё и масса других.

А сама процедура спавна или замены одного объекта другим тривиальна и очень подробно описана во многих местах.

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

Возник вопрос - как запустить определенный код (речь о Lua)  после начала новой игры в CoP (т.е. оно должно отработать 1 раз).

Найти чего-то подходящего именно к такому случаю - я не смог, запихнуть в actor_proxy:net_spawn - вариант, но в случае CoP - срабатывает оно ещё до полной загрузки, а в update - как-то не айс запихивать сюда одноразовое событие же.

Ссылка на комментарий
  11.11.2015 в 23:06, Карлан сказал:

@alex4321, другого не дано, только апдейт, заюзай системы событий, подпишешь - отпишешь.

Спасибо, пытаюсь приюзать xs_sandbox. Вроде как устройство вполне прозрачное, но вызвать обработчик пока не получается.

В _g.script инициализация добавлена.

  xs_sandbox_binds.script (Показать)
Изменено пользователем Kirgudu
Добавлено Kirgudu,

Портянки прячем под спойлер!

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

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

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

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

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

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

Войти

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

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

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