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

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

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

Как сделать и можно ли что бы НПС(стоящий на одном и том же месте и днем иночью..) сидел на корточках ?

---

Как непися развернуть, а то он спаунится и смотрит на стену, я в здание захожу а он мордой не туда смотрит(нужно что бы на меня смотрел)..

FANAT.gif

Мой канал на ютабчике... / Недельки из жизни фаната STALKER'a / Клуб 'Фанат Отчуждения'

Я нет-нет, а думаю, может я неправильно жил, надо ж брать деньги у богатых и давать их бедным, а таким как ты давать по морде, шоб у мире была красота и гармония.(с)Ликвидация

Всё в порядке, всё нормально, я беру тебя с собой, я беру тебя с собой. В тёмный омут головой.(с)Смысловые Галлюцинации

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

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

 

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

Все, понял в каком, но все равно НПС стоит лицом к стене, а когда к нему подходишь, он поворачивается, можно как нибудь сделать что бы он сначала уже стоял спиной к стене..как Волк к примеру..

FANAT.gif

Мой канал на ютабчике... / Недельки из жизни фаната STALKER'a / Клуб 'Фанат Отчуждения'

Я нет-нет, а думаю, может я неправильно жил, надо ж брать деньги у богатых и давать их бедным, а таким как ты давать по морде, шоб у мире была красота и гармония.(с)Ликвидация

Всё в порядке, всё нормально, я беру тебя с собой, я беру тебя с собой. В тёмный омут головой.(с)Смысловые Галлюцинации

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

Ulman, чисто из интереса попробуй так сделать:

local snd  = xr_sound.get_safe_sound_object([[папка_звука\звук]])
function update()
    local snd_satiety = 0.2
    if snd_satiety>db.actor.satiety then
        if not snd:playing() then snd:play_at_pos(db.actor, vector ():set (0, 0, 0), 0, sound_object.s2d) end
    else
        if snd:playing() then snd:stop() end
    end
    snd_satiety = db.actor.satiety
end

Если значение сытости ГГ меньше 0.2, то будет повторятся звук... Всё это дело на апдейт вешай.

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

Shadows, дополню: ты пытаешься сравнить 0.2 с ниллом следовательно последует вылет.

 

local snd = xr_sound.get_safe_sound_object([[папка_звука\звук]])

function update()

local snd_satiety = 0.2

local satiety = db.actor.satiety

if satiety == nil then

satiety = 0

elseif snd_satiety>db.actor.satiety then

if not snd:playing() then snd:play_at_pos(db.actor, vector ():set (0, 0, 0), 0, sound_object.s2d) end

else

if snd:playing() then snd:stop() end

end

snd_satiety = db.actor.satiety

end

 

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

  ▲

▲ ▲

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

Вот нашел схему сидящего НПС(не на корточках)

[kamp]

center_point = kamp_center - а как это имя узнать, или если костра нету, то как сделатьчто бы НПС смотрел типа на костер, но там его не было, что бы никакого предмета там не было..?

*radius = 2

*def_state_moving = run

 

 

FANAT.gif

Мой канал на ютабчике... / Недельки из жизни фаната STALKER'a / Клуб 'Фанат Отчуждения'

Я нет-нет, а думаю, может я неправильно жил, надо ж брать деньги у богатых и давать их бедным, а таким как ты давать по морде, шоб у мире была красота и гармония.(с)Ликвидация

Всё в порядке, всё нормально, я беру тебя с собой, я беру тебя с собой. В тёмный омут головой.(с)Смысловые Галлюцинации

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

local snd = xr_sound.get_safe_sound_object([[папка_звука\звук]])
function update()
local snd_satiety = 0.2
local satiety = db.actor.satiety
if satiety == nil then
satiety = 0
elseif snd_satiety>db.actor.satiety then
if not snd:playing() then snd:play_at_pos(db.actor, vector ():set (0, 0, 0), 0, sound_object.s2d) end
else
if snd:playing() then snd:stop() end
end
snd_satiety = db.actor.satiety
end

dragunof а сам? Ты переменной присваиваешь значение ноль но всё равно сравниваешь с голодом

Тогда уж:

local snd = xr_sound.get_safe_sound_object([[папка_звука\звук]])
function update()
local snd_satiety = 0.2
local satiety = db.actor.satiety
if satiety == nil then satiety = 0 end 
if snd_satiety>satiety then
if not snd:playing() then snd:play_at_pos(db.actor, vector ():set (0, 0, 0), 0, sound_object.s2d) end
else
if snd:playing() then snd:stop() end
end
snd_satiety = db.actor.satiety -- непонимаю, зачем?
end

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

Народ, помогите, кто разбирается. Сделал простой диалог - заготова для квеста:

<dialog id="task_pda_dialog">
<dont_has_info>task_pda_dialog</dont_has_info>
       <phrase_list>
           <phrase id="0">
       <text>task_pda_dialog_0</text>
       <next>1</next>
           </phrase>
           <phrase id="1">
               <text>task_pda_dialog_1</text>
       <next>2</next>
       <next>3</next>
           </phrase>
           <phrase id="2">
               <text>task_pda_dialog_2</text>
           </phrase>
		 <phrase id="21">
               <text>task_pda_dialog_21</text>
			<next>211</next>
           </phrase>
           <phrase id="3">
               <text>task_pda_dialog_3</text>
			<give_info>task_pda_dialog</give_info>
           </phrase>
		<phrase id="211">
               <text>task_pda_dialog_211</text>
           </phrase>
       </phrase_list>
   </dialog>

 

но после <phrase id="2">, должна следовать <phrase id="21">(Меченый согласился и НПС ему поясняеть суть задания). Однако этого нет - диалог обрывается на вопросе "Что нужно сделать" Вот текст диалога. для большей понятливости:

	<string id="task_pda_dialog_0">
       <text>Чего звал?</text>
   </string>
   <string id="task_pda_dialog_1">
       <text>Меченый, хочешь подзаработать? Работа непыльная, плачу сразу.</text>
   </string>
   <string id="task_pda_dialog_2">
       <text>Что нужно сделать?</text>
   </string>
   <string id="task_pda_dialog_3">
       <text>Нет, не хочу.</text>
   </string>
<string id="task_pda_dialog_21">
       <text>Тут у одного новичка видел отличный ПДА. Будь добр, принеси мне его.</text>
   </string>
    <string id="task_pda_dialog_211">
       <text>Хорошо, постараюсь найти и принести.</text>
   </string>

 

Самый некомпетентный на форуме.

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

Shadows, TRAMP14:

 

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: ...s.t.a.l.k.e.r - lwr\gamedata\scripts\xr_logic.script:1465: attempt to index field 'actor' (a nil value)

Откуда появился ума не приложу, проверял обе функции, одинаковый вылет.

  ▲

▲ ▲

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

dragunof, кстати, у меня такое было, я про это рассказывал, а игра сама запускается, или вылет при самой загрузке?

И на счёт того скрипта, звук играется, но всегда, то есть независимо от голода...но всё же не пойму почему встречается переменная "satiety" в других скриптах.

И ещё, от каких скриптов может быть такое, что сейвы не загружаются? Просто на синхронизации зависает игра и всё, только процесс выключать надо. И кстати, существуют ли на ТЧ вообще какие то отладочные скрипты?

 

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

Народ, а почему закомментированы часть динамических новостей в файлах АМК 1.4.1? (например в amk_modders.script и других)

Самый некомпетентный на форуме.

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

dragunof, у меня такое было, когда в bind_stalker, скорее не туда куда надо, я вписывал функцию, но у меня было по другому, у меня работали только жизненно важные скрипты, всегда было время 00.00, и при попытке вызова функции связанной с "actor" проходил именно такой вылет.

Я тут написал скрипт и как всегда из-за него не загружались сейвы, что с ним не так, кто знает?

function spawn_parts(obj)
   local section = obj:section()

   if section=="m_fracture_e" then
         amk.spawn_item_in_inv("anom_remover",obj)
      end
   if section=="m_boar_e" then
         amk.spawn_item_in_inv("mutant_boar_leg",obj)
         amk.spawn_item_in_inv("mutant_boar_leg",obj)
         amk.spawn_item_in_inv("mutant_boar_leg",obj)
      end
   if section=="boar_weak" then
         amk.spawn_item_in_inv("mutant_boar_leg",obj)
         amk.spawn_item_in_inv("mutant_boar_leg",obj)
         amk.spawn_item_in_inv("mutant_boar_leg",obj)
      end
   if section=="boar_normal" then
         amk.spawn_item_in_inv("mutant_boar_leg",obj)
         amk.spawn_item_in_inv("mutant_boar_leg",obj)
         amk.spawn_item_in_inv("mutant_boar_leg",obj)
      end
   if section=="boar_strong" then
         amk.spawn_item_in_inv("mutant_boar_leg",obj)
         amk.spawn_item_in_inv("mutant_boar_leg",obj)
         amk.spawn_item_in_inv("mutant_boar_leg",obj)
      end
   if section=="m_burer_e" then
         amk.spawn_item_in_inv("mutant_burer_hand",obj)
      end
   if section=="burer_weak" then
         amk.spawn_item_in_inv("mutant_burer_hand",obj)
      end
   if section=="burer_normal" then
         amk.spawn_item_in_inv("mutant_burer_hand",obj)
      end
   if section=="burer_strong" then
         amk.spawn_item_in_inv("mutant_burer_hand",obj)
      end
   if section=="m_chimera_e" then
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
      end
   if section=="chimera_weak" then
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
      end
   if section=="chimera_normal" then
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
      end
   if section=="chimera_strong" then
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
      end
   if section=="electro_chimera" then
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
         amk.spawn_item_in_inv("mutant_chimera_kogot",obj)
      end
   if section=="m_gigant_e" then
         amk.spawn_item_in_inv("mutant_psevdogigant_hand",obj)
      end
   if section=="m_gigant_normal" then
         amk.spawn_item_in_inv("mutant_psevdogigant_hand",obj)
      end
   if section=="gigant_normal" then
         amk.spawn_item_in_inv("mutant_psevdogigant_hand",obj)
      end
   if section=="gigant_strong" then
         amk.spawn_item_in_inv("mutant_psevdogigant_hand",obj)
      end
   if section=="m_poltergeist_e" then
         amk.spawn_item_in_inv("mutant_poltergeist_glas",obj)
      end
   if section=="m_poltergeist_normal" then
         amk.spawn_item_in_inv("mutant_poltergeist_glas",obj)
      end
   if section=="m_poltergeist_normal_tele" then
         amk.spawn_item_in_inv("mutant_poltergeist_glas",obj)
      end
   if section=="m_poltergeist_tele_outdoor" then
         amk.spawn_item_in_inv("mutant_poltergeist_glas",obj)
      end
   if section=="m_poltergeist_normal_flame" then
         amk.spawn_item_in_inv("mutant_poltergeist_glas",obj)
      end
   if section=="m_poltergeist_strong_flame" then
         amk.spawn_item_in_inv("mutant_poltergeist_glas",obj)
      end
   if section=="m_snork_e" then
         amk.spawn_item_in_inv("mutant_snork_leg",obj)
      end
   if section=="snork_weak" then
         amk.spawn_item_in_inv("mutant_snork_leg",obj)
      end
   if section=="snork_normal" then
         amk.spawn_item_in_inv("mutant_snork_leg",obj)
      end
   if section=="snork_strong" then
         amk.spawn_item_in_inv("mutant_snork_leg",obj)
      end
   if section=="aes_snork" then
         amk.spawn_item_in_inv("mutant_snork_leg",obj)
      end
   if section=="snork_arena" then
         amk.spawn_item_in_inv("mutant_snork_leg",obj)
      end
   if section=="snork_indoor" then
         amk.spawn_item_in_inv("mutant_snork_leg",obj)
      end
   if section=="snork_outdoor" then
         amk.spawn_item_in_inv("mutant_snork_leg",obj)
      end
   if section=="snork_jumper" then
         amk.spawn_item_in_inv("mutant_snork_leg",obj)
      end
   if section=="m_zombie_e" then
         amk.spawn_item_in_inv("mutant_zombie_hand",obj)
      end
   if section=="zombie_weak" then
         amk.spawn_item_in_inv("mutant_zombie_hand",obj)
      end
   if section=="zombie_normal" then
         amk.spawn_item_in_inv("mutant_zombie_hand",obj)
      end
   if section=="zombie_strong" then
         amk.spawn_item_in_inv("mutant_zombie_hand",obj)
      end
   if section=="zombie_trup" then
         amk.spawn_item_in_inv("mutant_zombie_hand",obj)
      end
   if section=="zombie_trup2" then
         amk.spawn_item_in_inv("mutant_zombie_hand",obj)
      end
   if section=="zombie_blow" then
         amk.spawn_item_in_inv("mutant_zombie_hand",obj)
      end
   if section=="zombie_beee" then
         amk.spawn_item_in_inv("mutant_zombie_hand",obj)
      end
   if section=="zombie_immortal" then
         amk.spawn_item_in_inv("mutant_zombie_hand",obj)
      end
   end

 

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

_Призрак_, вызываю из bind_monster так

function generic_object_binder:death_callback(victim, who)
        ulman_monster_parts.spawn_parts(victim)

Теперь уже не уверен, но вот как то что бы из за этого сейвы не загружались, как то странно.

Да и вообще за основу немного брал ARC_diary, там в контроллёров так спавнилось:

function monster_killed(obj,who)
  local obj_sect = obj:section()
  if obj_sect=="controller_tubeman" then
    amk.spawn_item_in_inv("sgus",obj)
    if not has_alife_info("kontroler_diary_info_17") then
       amk.spawn_item_in_inv("arc_diary_17", obj)
    end

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

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

Expression : no_assert

Function : CIni_IdToIndex<1,struct COMMUNITY_DATA,class shared_str,int,class CHARACTER_COMMUNITY>::GetById

File : e:\stalker\patch_1_0004\xr_3da\xrgame\ini_id_loader.h

Line : 134

Description : item not found, id

Arguments : trader

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

Meine Ehre heißt Treue (Моя честь называется верность)

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

Такой вопрос. Допустим у игрока в руках в данный момент оружие из 3-го слота. Как скриптом сменить на 2-й? Или если в руках ничего нет, то 2-й.

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

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

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

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

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

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

Войти

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

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

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