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

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

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

Помогите новичку. Хочу выдать задание ГГ сразу после появления на локации. Вот так выглядит у  меня ф-ия actor_binder:net_spawn(data)

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
	
	--' Загружаем настройки дропа
	death_manager.init_drop_settings()
	
	if (level.name() == "simeiz") and
		not has_alife_info("keep_base_defend_started") then
		self.object:give_info_portion("keep_base_defend_started")
    end

	return true
end

Как видно, свой код я вставил перед return'ом, но ничего не происходит. Задание не выдается. Название инфопорции и локации перепроверил - все верно

16 минут назад, Muzafir сказал:

function actor_binder:net_spawn(data)

В ф-ию actor_binder:update(delta) что-то типа

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

 

if not has_alife_info("garbage_start_info") and (level.name()=="l02_garbage") then
     self.object:give_info_portion("garbage_start_info")    

end

 

 

  • Не нравится 1

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

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

В ф-ию actor_binder:update

Нет. Вход на локацию детектится через нет_спавн. А не через апдейт.

  • Согласен 2

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

7 минут назад, UriZzz сказал:

@Muzafir, а что за локация "simeiz"?

Локация моя. Недавно допилил графику. Хочу немного "оживить" перед релизом. Чтобы интереснее было изучать, если кто-то захочет глянуть.

Кстати, все заработало через функцию delta. Обычного звука получения задания нет, но задание в ПДА появляется. Через нет_спавн почему-то не получалось. 

Изменено пользователем Muzafir
  • Спасибо 1
39 minutes ago, Muzafir said:

self.object:give_info_portion("keep_base_defend_started")

task добавил в этот поршень?

 

39 minutes ago, Muzafir said:

Название инфопорции и локации перепроверил - все верно

А выдачу поршня проверил? Первое же дело, посмотреть после этого, что возвращает db.actor:has_info(). И внутрь if-а еще вывод в лог поставить, что бы уж окончательно убедиться.

 

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

таск в поршень добавлен. Не знаю, как с помощью скриптов проверить, что возвращает db.actor:has_info(), но таск создан. Это первое, что я проверил

5 минут назад, Zander_driver сказал:

через нет_спавн

Конечно же! Я тут себе обновление вешал и по запарке копирнул ему апдейт дельта:dash2:

15 минут назад, Muzafir сказал:

Пробовал только что. Получаю вылет без лога

Я не то тебе посоветовал, ты правильно вешаешь, на нет_спаун

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

Ок. Попробую еще раз. Я тоже где-то читал, что так правильно, так и Zander_driver сказал, но почему-то не работало. Если не лень, гляньте выше, где я выложил целиком нет-спаун. Может куда-то не туда засовываю?

6 минут назад, Muzafir сказал:

Попробую еще раз

Намерено попробуй выдать несуществующий инфопоршень, получишь вылет "итем нот фаунд...", что бы для себя убедиться, что правильно делаешь. Тут что то с заданием вероятно...

  • Спасибо 1

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

Да, если при несуществующем инфопоршне получаю именно такой вылет

Если вешаю на нет_спаун, выше, строчек 

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

Как только в перестрелке кого-либо убивают, получаю вылет с руганью на этот death_manager. script

Если после него просто ничего не происходит.

 

Если вешаю на update. Задание появляется в ПДА, но беззвучно и не засчитывается при убийстве группы нападающих (как должно). Тут, вероятно, что-то уже с заданием.

Изменено пользователем Muzafir
Только что, Muzafir сказал:

Может куда-то не туда засовываю?

По твоему коду net_spawn все правильно и должно работать как часы.

Попробуй разбить на два условия. Проверяй, какое не срабатывает.
 

if level.name() == "simeiz" then
	-- попробуй тут выдать несуществующий поршень. Может таки в названии локации ошибка?
 	if not has_alife_info("твой_поршень") then
     	-- Если первое условие работает, попробуй тут выдать несуществующий, проверь.
    else
    	-- И обратное условие тоже проверь. Может ты где-то случайно уже этот поршень актору выдал.
    end
end

Если все условия срабатывают, то сам поршень смотри - вписан ли туда task, и правильно ли. Про это уже dsh сказал.

  • Спасибо 1

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

2 минуты назад, Zander_driver сказал:

Если все условия срабатывают, то сам поршень смотри - вписан ли туда task, и правильно ли.

Все очень логично, что ты предлагаешь. Но почему этот же код при копи-пасте в delta-update работает?

Эх, Сталкер - ни шага без боли!!!

1 минуту назад, Muzafir сказал:

delta-update работает

Таки будет работать, и не только там. Только процессор нагружает.

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

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

Если вешаю на нет_спаун, выше, строчек 

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

Как только в перестрелке кого-либо убивают, получаю вылет с руганью на этот death_manager. script

Если после него просто ничего не происходит.

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

Маловероятно, но сия дичь все бы объяснила.

А таки попробуй свой код поставить выше death_manager-a. Ничего ему от этого сделаться не должно, если у него все нормально. А как вылетит - лог вылета в студию, т.е. сюда.

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

 

3 минуты назад, mole venomous сказал:

Только процессор нагружает.

Я это понимаю, поэтому и хочу сделать по-человечески. 

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

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

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

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

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

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

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)

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

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

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

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

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

Войти

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

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

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