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

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

В 22.06.2018 в 06:15, Egor4ikModMaker сказал:

А можно полную ф-цию , я в скриптах не шарю , так что прошу помощи у вас.

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

 

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

Вот такую функцию добавь в конец xr_effects.script,


function add_spot_to_npc(actor, npc, p)
	if p[1] == nil then
		abort("Invalid parameter in function 'add_spot_to_npc', enter the profile_name!")
	end
	if p[2] == nil then
		abort("Invalid parameter in function 'add_spot_to_npc', enter the mapspot from map_spots.xml!")
	end
	if p[3] == nil then
		abort("Invalid parameter in function 'add_spot_to_npc', enter the hint!")
	end
	for a=1,65535,1 do
		local obj = alife():object(a)
		if obj and IsStalker(obj) and obj:profile_name() == p[1] then
			level.map_add_object_spot(obj.id, p[2], tostring(p[3]))
		end
	end
end

Потом её можно будет вызвать из любого другого скрипта:


function my()
	...
	xr_effects.add_spot_to_npc(nil, nil, {"bar_ecolog_professor", "blue_location", "ros_kruglov_name"})
	...
end

bar_ecolog_professor - профиль из \gameplay\character_desc_.xml
blue_location - вид метки из \ui\map_spots.xml
ros_kruglov_name - имя (если есть, но не используем при GENERATE_NAME_) из \gameplay\character_desc_.xml. Можно свой текст (типа kruglov_4udila_pret_v_anomaluu), но так игнорируются пробелы, так что, если длинная подсказка, то делаем в \text\rus\string_table_mapspots_.xml свою и используем её ид.

 

Также можно вызвать из любого файла логики (нпс, объекты):


логика рестриктора,

[logic]
active = sr_idle@start

[sr_idle@start]
on_info = {+bar_rescue_research_start} sr_idle@end %=add_spot_to_npc(bar_ecolog_professor:blue_location:ros_kruglov_name)%

[sr_idle@end]

Но всё это фигня, лучше скачай себе acdc (поставишь сид), сможешь нормально ставить метки. Ещё и сдк установи, а то сегодня метки, завтра локи править понадобиться.

 

Ссылка на комментарий
58 минут назад, h0N0r сказал:

for a=1,65535,1 do local obj = alife():object(a) if obj and IsStalker(obj) and obj:profile_name() == p[1]

И получаем метки на ВСЕХ неписях с таким профилем.

Кстати, как раз случай, где ссылку на alife() можно получить до for ...

И, кстати, 65535 - это земля.

 

Второе - если мы получили что-то для какого-то i. и это то, что нам нужно, то level.map_add_object_spot( i, ...)

И, наконец, if obj and obj:profile_name and obj:profile_name()  == p[1] then

 

Но я все равно не понимаю, как можно знать сид и профиль, не зная просто имя. Какая-то странная телепатия...

Ссылка на комментарий
2 часа назад, WinCap сказал:

function andrew_at_map() local obj = alife():object("es_andrew") if obj then level.map_add_object_spot(obj.id, "green_location", "Андрюха") end end

Попробую это.

Добавляю в свой скриптовый файл, и вызываю через диалог <action>название файла.название функции</action> , игра хотя бы запускается. 

Добавлю эту ф-цию , в level_tasks.script , как указано в уроке хикса, ловлю вылет на загрузке такого характера

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...- Èñòèííûé ïóòü\gamedata\scripts\bind_stalker.script:194: attempt to index global 'level_tasks' (a nil value)

 

Теперь убрав даже строку вызова ф-ции из диалога, при попытке разговора с нпс

 ловлю безлогий вылет. обидно. 

Изменено пользователем Egor4ikModMaker
дополнение

[Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // 

 "Burn the rich // eat the rich"

О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист.

Egor4ikModMaker.gif

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

Осталось выяснить, зачем добавлять ее в level_tasks.

И какая конечная цель всех манипуляций.

Ссылка на комментарий
Только что, Dennis_Chikin сказал:

Осталось выяснить, зачем добавлять ее в level_tasks.

И какая конечная цель всех манипуляций.

1)Добавление этой ф-ции собственно было описано в вышеуказанном уроке от Хикса

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

[Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // 

 "Burn the rich // eat the rich"

О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист.

Egor4ikModMaker.gif

Ссылка на комментарий
1 час назад, Dennis_Chikin сказал:

Но я все равно не понимаю, как можно знать сид и профиль, не зная просто имя. Какая-то странная телепатия...

"как можно знать сид" - ну к примеру, через сет в game_story_ids.ltx. Или не реально ?

 

45 минут назад, Egor4ikModMaker сказал:

attempt to index global 'level_tasks' (a nil value)

Это явно простая синтаксическая ошибка. Проверь синтаксис добавленного кода.

Ссылка на комментарий
10 минут назад, AndreySol сказал:

"как можно знать сид" - ну к примеру, через сет в game_story_ids.ltx. Или не реально ?

 

Это явно простая синтаксическая ошибка. Проверь синтаксис добавленного кода.

Собственно это странно, потому что bind_stalker я не трогал вообще! 

Т.е файл оригинальный, и до этого все работало без подобного вылета.

 

upd: Не понимаю ничего , т.е если я в game_story_ids напишу например 12000 = esc_vova(имя перса из профиля)

он типа вообще это игнорирует?

Потому что я до этого пытался поставить на него метку. Т.е по аналогии как и с сидором , при выдаче квеста , там следущим образом построен квест

 


<objective>
<text>Принести Артефакт Андрею</text>
<infoportion_complete>ses_done</infoportion_complete>
<map_location_type hint="esc_andrew">blue_location</map_location_type>
<object_story_id>esc_andrew</object_story_id>    
</objective>

 

Изменено пользователем Egor4ikModMaker
  • Смешно 1

[Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // 

 "Burn the rich // eat the rich"

О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист.

Egor4ikModMaker.gif

Ссылка на комментарий
13 минут назад, Egor4ikModMaker сказал:

принеси-подай

Как вообще берутся ? В диалоге с этим неписем ? Через редактирование task_manager.ltx + task_manager.script ?

Через local task = CGameTask();   task:load( ... ) и т.д. ?

 

@AndreySol, а в game_story_ids они щучьим велением прописываются ?

Ссылка на комментарий
1 минуту назад, Dennis_Chikin сказал:

Как вообще берутся ? В диалоге с этим неписем ?

Спокойно. Через диалог с нпс + game_tasks.xml 

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

game_story_ids они щучьим велением прописываются ?

Нет , в ручную прописал 12.000 = "esc_andrew" ( из профиля нпс ) как было ранее указано в уроках . 

[Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // 

 "Burn the rich // eat the rich"

О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист.

Egor4ikModMaker.gif

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

Непись с диалогом тот же самый, на которого надо метку ?

 

<<в ручную прописал 12.000 = "esc_andrew" >> - поздравляю. Удивительно, что запускается.

 

P.S. представляю, как сейчас Хикс ржет  улыбается.

Ссылка на комментарий
Только что, Dennis_Chikin сказал:

Непись с диалогом тот же самый, на которого надо метку ?

 

<<в ручную прописал 12.000 = "esc_andrew" >> - поздравляю. Удивительно, что запускается.

Да

[Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // 

 "Burn the rich // eat the rich"

О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист.

Egor4ikModMaker.gif

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

Прописываем в диалоге <action>куда.надо</action>  (если уже есть, то не прописываем, а добавляем)

куда.script:

function надо( n1, n2 )

if n1:id() == 0 then n1 = n2 end

level.map_add_object_spot_ser( n1:id(), "кракозябра", "надпись" )

что-там еще было

end

 

Об чем и говорилось с самого начала.

Ссылка на комментарий
8 минут назад, Dennis_Chikin сказал:

 

level.map_add_object_spot_ser( n1:id(), "кракозябра", "надпись" )

Вызывает вопрос только что должно быть под "кракозяброй"?

Upd:

Поставил одно из ранее указанных значений вместо кракозябры

- green_location , ловлю безлогий вылет.

Такой же результат если поставить "primary_object".

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

[Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // 

 "Burn the rich // eat the rich"

О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист.

Egor4ikModMaker.gif

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

"green_location" или green_location  ?

В ui\map_spots.xml вообще есть такая ?

 

Скрипт через lua.exe вообще собирается ?

Диалог правильно написан ?

Ссылка на комментарий
2 минуты назад, Dennis_Chikin сказал:

"green_location" или green_location  ?

В ui\map_spots.xml вообще есть такая ?

Да есть . специально проверил , и primary_object 

 

Скрипт через lua.exe вообще собирается ?

Диалог правильно написан ?

- не мне судить насколько правильно он собирается, но до этого работал.

Не знаю , может я дурной и на последнюю фразу диалога лепить нельзя .но вот диалог

        <dialog id="find_art1">
<dont_has_info>ses_done</dont_has_info>
<dont_has_info>ses_have</dont_has_info>
<phrase_list>
   <phrase id="0">
   <text>Привет, есть работенка какая?</text>
   <next>1</next>
    </phrase>    
<phrase id="1">
   <text>Здрав буди, да имеются для тебя, мелкие поручения, извини но пока я тебе серьезную не доверю, ты уж не обижайся.</text>
   <next>2</next>
    </phrase>     
<phrase id="2">
   <text>Все нормально , так что у тебя там за поручения?</text>
    <next>3</next>
    </phrase>
<phrase id="3">
   <text>Тебе нужно поискать артефакт "Медуза", как найдешь приходи, в замен получишь хороший ствол и пару пачек патронов.
   Искать его стоит севернее бункера сидора. Там есть небольшой участок с аномалиями, будь осторожен. Удачи.</text>
   <next>4</next>
    </phrase>
<phrase id="4">
   <text>Спасибо за наводку. Сейчас схожу посмотрю.</text>
    <action>sesok.mapspot</action> -- вот именно это и вызывает функцию проблемную. 
<give_info>ses_have</give_info>
    </phrase>
    </phrase_list>
</dialog>

[Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // 

 "Burn the rich // eat the rich"

О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист.

Egor4ikModMaker.gif

Ссылка на комментарий
3 минуты назад, Dennis_Chikin сказал:

sesok.script на обменник, и ссылку в студию.

Держи http://rgho.st/8p5J5cXqs

[Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // 

 "Burn the rich // eat the rich"

О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист.

Egor4ikModMaker.gif

Ссылка на комментарий
Только что, Dennis_Chikin сказал:

в map_spots.xml слово primary_object вообще существует ?

существует

 

 и существует вот так

 

<primary_object>
    <level_map spot="primary_object_spot"    pointer="quest_pointer"/>
</primary_object>
<primary_object_spot  x="0" y="0" width="15" height="15" alignment="c" scale="1" scale_min="1" scale_max="6" stretch="1">
   <texture x="858" y="392" width="62" height="62">ui\ui_common</texture>
</primary_object_spot>

[Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // 

 "Burn the rich // eat the rich"

О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист.

Egor4ikModMaker.gif

Ссылка на комментарий
1 час назад, Egor4ikModMaker сказал:
1 час назад, AndreySol сказал:

"как можно знать сид" - ну к примеру, через сет в game_story_ids.ltx. Или не реально ?

 

Это явно простая синтаксическая ошибка. Проверь синтаксис добавленного кода.

Собственно это странно, потому что bind_stalker я не трогал вообще! 

Т.е файл оригинальный, и до этого все работало без подобного вылета.

Да не в bind_stalker ошибка, а в level_tasks. Попробуй перевести на русский:

Цитата

attempt to index global 'level_tasks' (a nil value)

это означает "попытка проиндексировать глобальный объект 'level_tasks' (значение nil)".

То есть ты из bind_stalker пытаешься вызвать какую-то функцию в level_tasks, но так как level_tasks имеет значение nil - получаешь ошибку.
А быть равным nil какой-то скрипт может в том случае, если внутри имеется какая-то синтаксическая ошибка, и движок просто не может скрипт загрузить.

Проверяй, что делал не так в level_tasks.

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

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

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

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

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

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

Войти

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

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

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