Упрощеный способ выдачи предмета — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Упрощеный способ выдачи предмета — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
Строка 1: Строка 1:
В этой статье не оче хочеться объяснять новичкам как все работает поэтому все будет коротко и понятно(Хотя бы для тех кто умеет давать предметы ГГ)
+
Итак многие знают что есть длинная функций на выдавание предмета(Забыл просто как она пишеться полностью) так же есть длинная
Итак.Создаем любой скрипт.Либо вставляем.Кому как удобнее.Лично я его назвал give_item.scripts.Вобщем с этим разобрались.Итак добавляем в скрипт вот такие строчки
+
функция на выдачу предмета в диалоге:
 +
<pre>
 +
(first_speaker, second_speaker)  
 +
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета")
 +
end
 +
</pre>
 +
<lua>
 +
Сейчас расскажу как можно упростить.Создаем любой скрипт.Например test.script.Пишем туда вот такую функцию
 
<pre>
 
<pre>
 
function actor_add_item(section)
 
function actor_add_item(section)
Строка 9: Строка 16:
 
db.actor:id())
 
db.actor:id())
 
end
 
end
 +
</lua>
 
</pre>
 
</pre>
Окей.А как же их вызывать из игры.Ну например создали вы Васю пупкина.У него диалог...Все уже готово.<action> уже есть а что надо писать в функцию скрипта для "более упращеной выдачи".А вот что
+
Написали?Хорошо!Создадим теперь ту самую упрощеную функцию.Пишеться она так
 
<pre>
 
<pre>
give_item(ну или название вашего скрипта).actor_add_item("название предмета")
+
название_скрипта.actor_add_item("название предмета")
 
</pre>
 
</pre>
 
Ну например:
 
Ну например:
 
<pre>
 
<pre>
 +
<lua>
 +
function give_equip()
 
   give_item.actor_add_item("wpn_pm")
 
   give_item.actor_add_item("wpn_pm")
 
   give_item.actor_add_item("wpn_ak74")
 
   give_item.actor_add_item("wpn_ak74")
Строка 34: Строка 44:
 
   give_item.actor_add_item("ammo_9x18_fmj")
 
   give_item.actor_add_item("ammo_9x18_fmj")
 
   give_item.actor_add_item("stalker_outfit")
 
   give_item.actor_add_item("stalker_outfit")
 +
end
 +
</lua>
 +
</pre>
 +
Итак сделали?Супер!Лезем теперь в config/gameplay/info_l01escape.xml и после строчки:
 +
<text>
 +
<info_portion id="esc_kill_gunslinger">
 +
<task>storyline_eliminate_gunslinger</task>
 +
</text>
 +
Пишем:
 +
<action>test.give_equip</action>
 +
Там где test это название скрипта.give_equip название функции
 +
В итоге должно получиться вот так:
 +
<pre>
 +
<info_portion id="esc_kill_gunslinger">
 +
<task>storyline_eliminate_gunslinger</task>
 +
<action>test.give_equip</action>
 +
<article>about_enciclopedia</article>
 +
<article>sl_beginning</article>
 +
</info_portion>
 +
</pre>
 +
Теперь при начале новой игры будет выдаваться экипировка!
 +
Итак.Многие кто хоть немного разбираються в скриптах уже догадались что функция стремная.Нету такой упрощеной штуки как выдавание сразу нескольких предметов за один вызов.Но ничего.И тут мы выкрутимся.Будем пользоваться функцией for i do.Привожу пример:
 +
<pre>
 +
function give_equip()
 +
give_item.actor_add_item("wpn_pm")
 +
give_item.actor_add_item("wpn_ak74")
 +
give_item.actor_add_item("medkit")
 +
for i=1, 3 do this.actor_give_item("bandage")
 +
end
 +
for i=1, 10 do this.actor_give_item("ammo_5.45x39_fmj")
 +
end
 +
for i=1, 3 do this.actor_give_item("ammo_9x18_fmj")
 +
end
 +
end
 
</pre>
 
</pre>
Единственный недостаток как все уже поняли.Это то что нельзя заспавнить одним действием сразу несколько предметов.Но так как я плохо знаю функцию for i = do.Поэтому не могу утверждать что ею нельзя пользоваться.Попробуйте.Может и выйдет(но как я понял она повторяет всю функцию а не отдельные её моменты)
+
Итак если хотите регулировать число выдаваемых предметов то после i=1, ставим то число которое вам нужно
-----------------------------------------------------------------------------
+
Фух.Вроде все разобрали...
''Для нормального и удобного спавна любого числа самых разных объектов игры специально был написан''
+
Привел статью в полный порядок так же устранил пару недочетов:'''Fireman3000'''
[http://stalkerin.gameru.net/wiki/index.php/%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2  "Cкрипт  спавна набора объектов"] И кстати там все сделано именно через оператор цикла <lua>for do end</lua>
+
Учите lua, камрады, и будет вам счастье.
+
Добавил --[[Участник:Erlik|Erlik]] 20:36, 29 ноября 2010 (UTC)
+
 
+
Имейте ввиду, что патроны спавнить нужно не через alife():create(section, position, lvi, gvi),а с помощью специальной функции se_respawn.create_ammo(section, position, lvi, gvi, pid, num).
+

Версия 16:37, 1 декабря 2010

Итак многие знают что есть длинная функций на выдавание предмета(Забыл просто как она пишеться полностью) так же есть длинная функция на выдачу предмета в диалоге:

(first_speaker, second_speaker) 
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета")
end
 
Сейчас расскажу как можно упростить.Создаем любой скрипт.Например test.script.Пишем туда вот такую функцию
<pre>
function actor_add_item(section)
alife():create(section,	
db.actor:position(),
db.actor:level_vertex_id(),	
db.actor:game_vertex_id(),
db.actor:id())
end
 

</pre> Написали?Хорошо!Создадим теперь ту самую упрощеную функцию.Пишеться она так

название_скрипта.actor_add_item("название предмета")

Ну например:

<lua>
function give_equip()
  give_item.actor_add_item("wpn_pm")
  give_item.actor_add_item("wpn_ak74")
  give_item.actor_add_item("bandage")
  give_item.actor_add_item("bandage")
  give_item.actor_add_item("bandage")
  give_item.actor_add_item("medkit") 
  give_item.actor_add_item("ammo_5.45x39_fmj")
  give_item.actor_add_item("ammo_5.45x39_fmj")
  give_item.actor_add_item("ammo_5.45x39_fmj")
  give_item.actor_add_item("ammo_5.45x39_fmj")
  give_item.actor_add_item("ammo_5.45x39_fmj")
  give_item.actor_add_item("ammo_5.45x39_fmj")
  give_item.actor_add_item("ammo_5.45x39_fmj")
  give_item.actor_add_item("ammo_5.45x39_fmj")
  give_item.actor_add_item("ammo_9x18_fmj")
  give_item.actor_add_item("ammo_9x18_fmj")
  give_item.actor_add_item("ammo_9x18_fmj")
  give_item.actor_add_item("stalker_outfit")
end
</lua>

Итак сделали?Супер!Лезем теперь в config/gameplay/info_l01escape.xml и после строчки:

 
<info_portion id="esc_kill_gunslinger">
<task>storyline_eliminate_gunslinger</task>
 

Пишем: <action>test.give_equip</action> Там где test это название скрипта.give_equip название функции В итоге должно получиться вот так:

<info_portion id="esc_kill_gunslinger">
<task>storyline_eliminate_gunslinger</task>
<action>test.give_equip</action>
<article>about_enciclopedia</article>
<article>sl_beginning</article>
</info_portion>

Теперь при начале новой игры будет выдаваться экипировка! Итак.Многие кто хоть немного разбираються в скриптах уже догадались что функция стремная.Нету такой упрощеной штуки как выдавание сразу нескольких предметов за один вызов.Но ничего.И тут мы выкрутимся.Будем пользоваться функцией for i do.Привожу пример:

function give_equip()
give_item.actor_add_item("wpn_pm")
give_item.actor_add_item("wpn_ak74")
give_item.actor_add_item("medkit") 
for i=1, 3 do this.actor_give_item("bandage")
end
for i=1, 10 do this.actor_give_item("ammo_5.45x39_fmj")
end
for i=1, 3 do this.actor_give_item("ammo_9x18_fmj")
end
end

Итак если хотите регулировать число выдаваемых предметов то после i=1, ставим то число которое вам нужно Фух.Вроде все разобрали... Привел статью в полный порядок так же устранил пару недочетов:Fireman3000

Другие места
LANGUAGE