Скриптование - Страница 465 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/

 

13 часов назад, dsh сказал:

А что делает? Насколько я вижу - это локальная переменная в функции start. 

И ф-ция старт её возвращает, после закрытия окна эта переменная не нил.

 

13 часов назад, dsh сказал:

Это вопрос? Перехват чего и что он должен был дать? 

Я надеялся что ф-ция __финализ вызовется когда окно "убирается"

1 hour ago, Graff46 said:

 И ф-ция старт её возвращает, после закрытия окна эта переменная не нил

Почему она должна стать nil? Есть код, который присваивает nil той переменной, которой было присвоено возвращенное значение? 

 

1 hour ago, Graff46 said:

 Я надеялся что ф-ция __финализ вызовется когда окно "убирается"

finalize вызывается, когда уборщик мусора удаляет этот объект. А удаляет он его, когда на него больше никто не ссылается. 

  • Согласен 2

А вот скажите, создание переходов через скрипт в ЗП, чем-то отличается от ТЧовского метода? Надо знать какие-то нюансы? Просто мне надо переход, открывающийся в N-ный момент, после диалога и выполнения скрипта. 

Оц тоц перевертоц, бабушка здорова,
Оц тоц перевертоц кушает компот.
Оц тоц перевертоц и мечтает снова
Оц тоц перевертоц пережить налет!

@Shennondoah, структура нетпакета у перехода в зп такая же, как и в тч, так что практически ничем не отличается.

  • Спасибо 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Я хотел написать ф-цию что бы ГГ "толкал" автомобиль (если тот перевернётся или застрянет где нибудь), направление "толчка" должно быть от ГГ к авто, но что-то пошло не так,в игре ГГ "толкает" машину в разные стороны, только не туда куда надо. Может кто-то подскажет в чем ошибка. 

Скрытый текст

local a = level.get_target_obj() -- получаем клиентский объект на который смотрим или nil
			if a and a.is_car and a:is_car() and distance_between_safe(db.actor, a) < 3 then
				local dir = db.actor:position():sub(a:position()):getH()
				a:get_physics_shell():apply_force( 100000 * math.sin(dir), 111991, 100000 * math.cos(dir) )
			end

 

 

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

@Graff46, Братишка, а не проще сделать класс обычной машины, с коротенькой логикой и путями, толкнул и та до места прет? Зачем так извращаться? Твое конечно дело, но проще всё же... 

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

Оц тоц перевертоц, бабушка здорова,
Оц тоц перевертоц кушает компот.
Оц тоц перевертоц и мечтает снова
Оц тоц перевертоц пережить налет!

Товарищи! Помогите, нужна функция проверки при снятии костюма и функция при попадании в рюкзак. Не в целом к ГГ а именно в рюкзак. 

@karavan, снимать костюмы, вроде только гг умеет, нпс максимум, что визуал меняют.

22 часа назад, karavan сказал:

при снятии костюма и функция при попадании в рюкзак.

при попадании в рюкзак - кэллбэк on_item_take в биндере актера или мотиваторе НПСов. Для снятия костюма кэллбэк не предусмотрен(в чистой ТЧ), по этому только костыли с отслеживанием на апдейте содержимого в соответствующем слоте.

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

Ребятки, помогите советом! Имеется наработка обмена с НПС. Работает так: скриптовый диалог, где НПС предлагает рандомный итем из таблицы в скрипте. То есть по факту НПС предмет не имеет. Он просто передастся нам через скрипт. Так вот, хочу спросить у вас (поиск не дал результатов), как проверить инвентарь НПС? Например в диалоге буду спрашивать - есть аптечка? Будет выполнена проверка инвентаря НПС на наличие аптечки. Если такая есть, то НПС ответит - есть, хочу за нее (рандомный итем из моего рюкзака). Вот нужно узнать как именно проверить есть ли определенный итем у НПС. Есть идеи? 

@_Sk8_AsTeR_, потому что советы надо применять с умом, а не тупо копируя. Если у тебя из диалога вызывается функция, например, такого вида:

function my_func(fs, ss, dn, pi)
  -- какие-то действия
end

где fs и ss - это первый и второй собеседники, а ты внутри функции пишешь, ничего не меняя, npc:object("medkit)", ежу понятно, что переменной npc неоткуда взяться, а искомый персонаж содержится в одной из переменных fs и ss.

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

  • Согласен 2

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

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

17 часов назад, _Sk8_AsTeR_ сказал:

где НПС предлагает рандомный итем из таблицы в скрипте. То есть по факту НПС предмет не имеет.

 

17 часов назад, _Sk8_AsTeR_ сказал:

Будет выполнена проверка инвентаря НПС на наличие аптечки. Если такая есть, то НПС ответит - есть

Чет у меня не сростается - так предмет должен быть у непися али нет ?

 

@AndreySol, по задумке предмет, который мы хотим получить от НПС должен быть у самого НПС, иначе он скажет - извини, брат, аптечек лишних нету.
@Kirgudu, прошу прощения, да. Имеем диалог (фрагмент): 

Скрытый текст



function init_exchanging_items_dialog(dlg)
   local intro_phrase = exchanging_items_intro_phrase[math.random(1, table.getn(exchanging_items_intro_phrase))]   --рандомная фраза из таблицы с приветствиями
    phr0 = dlg:AddPhrase(intro_phrase, "0", "", -10000)  --фраза 1
	phr1 = dlg:AddPhrase(exchanging_items_phr_1, "1", "0", -10000) -- фраза 2, вызывающая ниже написанную функцию
	    phr1:GetPhraseScript():AddAction("exchanging_items.give_message_proposed_items")  --вызывается функция по нашему диалогу в ответах (второй спойлер внизу)
									...продолжение диалогов...
end

 

Готовая функция, вызываемая из диалога (фрагмент): 

Скрытый текст



function give_message_proposed_items(first_speaker, second_speaker)	
 local Art, Item, Outfit, Wpn, TxtArt, TxtItm, TxtOutfit, TxtWpn   --переменные итемов
 local npc_rank = ranks.get_obj_rank_name(first_speaker)    -- переменные рангов (в этом фрагменте кода пример с новичком)
    if npc_rank == "novice" then		
        Art = GetRndItemFromTable(arts_table_novice)  --переменной Art присваевается случайный арт из заранее прописанной таблицы
		Outfit = GetRndItemFromTable(outfits_table_novice) --тоже самое с бронёй
		Item = GetRndItemFromTable(items_table_novice)  --тоже самое с предметами
		Wpn = GetRndItemFromTable(weapons_table_novice) --тоже самое с оружием

	    ProposedArtRank = Get_Number_Item(Art, arts_table_novice)    --если не ошибаюсь, то в диалоге предлагается (отображается) выбранный артефакт
        ProposedOutfRank = Get_Number_Item(Outfit, outfits_table_novice)    --тоже самое с бронёй
        ProposedItmRank = Get_Number_Item(Item, items_table_novice)   --тоже самое с предметами
        ProposedWpnRank = Get_Number_Item(Wpn, weapons_table_novice)   --тоже самое с оружием
    end
  TxtArt = game.translate_string(get_inv_name(Art))
		TxtOutfit = game.translate_string(get_inv_name(Outfit))
	    TxtItm = game.translate_string(get_inv_name(Item))
		TxtWpn = game.translate_string(get_inv_name(Wpn))
		
		InArt = Art
		InOutf = Outfit
		InItm = Item
		InWpn = Wpn
	  db.actor:give_talk_message("%c[255,250,194,87]Артефакт:%c[255,87,250,240] "..TxtArt, "ui\\ui_iconstotal", Frect():set(0,188,83,47), "iconed_answer_item")
	  db.actor:give_talk_message("%c[255,250,194,87]Костюм:%c[255,87,250,240] "..TxtOutfit, "ui\\ui_iconstotal", Frect():set(0,329,83,47), "iconed_answer_item")
	  db.actor:give_talk_message("%c[255,250,194,87]Предмет:%c[255,87,250,240] "..TxtItm, "ui\\ui_iconstotal", Frect():set(0,423,83,47), "iconed_answer_item")
	  db.actor:give_talk_message("%c[255,250,194,87]Оружие:%c[255,87,250,240] "..TxtWpn, "ui\\ui_iconstotal", Frect():set(0,517,83,47), "iconed_answer_item")
  end --конец функции

 

В последней функции для реализации моей идеи почти все лишнее. В этой функции, вызываемой из скриптового диалога, как-то нужно реализовать проверку НПС на нужный итем (medkit). Если true, то НПС даст диалог: поделюсь аптечкой. Если False, то, мол: Извини брат, нет лишних аптечек.

Подскажите, мил-люди, как сделать проверку НПС на определенный предмет? Своих мозгов не хватает :(

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

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

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

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

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

Войти

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

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

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