Торговля в игре — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Торговля в игре — различия между версиями

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

Перейти к: навигация, поиск
(Секция [trader_after_***_sell])
 
(не показаны 7 промежуточные версии 5 участников)
Строка 14: Строка 14:
 
== Структура файла ==
 
== Структура файла ==
  
=== Секция [trader_generic_buy] ===
+
Файл должен содержать:
Эта секция описывает какие товары торговец будет покупать.
+
главную(и обязательную) секцию '''[trader]''', в которой прописывается три тега:
<pre>Название предмета = минимальная цена покупки, максимальная цена покупки</pre>
+
<code>buy_condition = .... - то, что торговец будет покупать
'''''Например:'''''
+
sell_condition = ... - за какую цену торговец будет продавать
 +
buy_supplies = ....  - то, что торговец будет продавать</code>Рассмотрим конфиг торговли для Сидоровича ''trade_trader.ltx'':
 +
=== Тег "'''buy_condition'''" ===
 +
Этот тег содержит список секций с описанием покупаемых торговцем товаров.
 +
В оригинале содержит одну секцию - '''trader_generic_buy''', однако допускает список секций в виде:
 +
<code>buy_condition = {+инфо_порция_1} trader_buy_1, {+инфо_порция_2} trader_buy_2, trader_generic_buy</code>
 +
где: ''инфо_порция_1'' и ''инфо_порция_2'' - инфо-порции, по которым будет менятся ассортимент покупки, который будет соответственно описан в секциях ''trader_buy_1'' и ''trader_buy_2'' и секция ''trader_generic_buy'', которая должна идти последней в списке (или единственной, как указано выше) и описывает стартовый ассортимент покупки(по умолчанию).
 +
 
 +
'''Примечание''': секции подключаемые по условию не дополняют ассортимент стартовой, т.е. каждая секция должна содержать полный ассортимент предметов. Если предмет отсутствует в текущей секции, то торговец будет покупать его обязательно и по 100% цене !
 +
 
 +
Формат секции:
 +
<code>[trader_generic_buy]
 +
Название предмета = минимальная цена покупки, максимальная цена покупки
 +
Название предмета = минимальная цена покупки, максимальная цена покупки
 +
..........
 +
;строка комментария - движком не читается, применяется скриптером для заметок</code>
 +
и так до следующей секции.
 +
 
 +
'''''Пример:'''''
 
<pre>wpn_vintorez = 0.5, 0.7</pre>
 
<pre>wpn_vintorez = 0.5, 0.7</pre>
 
Это значит что торговец купит оружие от 50% полной его стоимости до 70%, т.е. если Винторез стоит 1000, то торговец купит его в диапазоне от 500 до 700 рублей.
 
Это значит что торговец купит оружие от 50% полной его стоимости до 70%, т.е. если Винторез стоит 1000, то торговец купит его в диапазоне от 500 до 700 рублей.
Строка 29: Строка 47:
 
Это значит что у торговеца всегда будут 5 бинтов, с 100 процентной вероятностью появления в магазине.
 
Это значит что у торговеца всегда будут 5 бинтов, с 100 процентной вероятностью появления в магазине.
 
<pre>bandage = 5, 0.6</pre>
 
<pre>bandage = 5, 0.6</pre>
А тут уже вероятность появления 60%. Т.е. бинты не всегда будут.
+
А тут уже вероятность появления 60%. Т.е. у торговца будет в продаже до 3-х бинтов (60% от 5 -> 3).
  
 
=== Секция [supplies_after_***]  ===
 
=== Секция [supplies_after_***]  ===
Тоже самое, что в секции [supplies_start], но после выполнения квестов торговца.
+
Тоже самое, что в секции [supplies_start], но после выполнения квестов торговца.
  
 
=== Секция [trader_start_sell] ===
 
=== Секция [trader_start_sell] ===
Строка 48: Строка 66:
 
--Neo][ 15:06, 14 мая 2007 (MSD)
 
--Neo][ 15:06, 14 мая 2007 (MSD)
 
[[Категория:Конфигурационные файлы]]
 
[[Категория:Конфигурационные файлы]]
 
Нашел способ создание нового торговца.
 
Желательно конечно заспавнить в игру своего уникального персонажа и "повесить" торговлю на него,но не обязательно.Будем делать торговцем кого-нибудь из уже имеющихся...Кого,кого,кого...
 
Как обычно Волка(у меня две подопотных "крысы"-Сидорович и Волк,а так как Сид уже им является,выбор очевиден:)Ну чтож приступим.Необходимо создать "файл торговли" типа "trade_....ltx".
 
Можно прописать его самому(как это делать я объяснять не буду,т.к. и до меня все это сделано не один раз:),можно скопировать любой другой...я скопировал "trade_freedom.ltx" и переименовал его в
 
"trade_wolf" и удалил все прикондишны с информацией на разрешение торговли.Теперь нужно сослаться на его.Делается это в файле логики,тобиш в "gulag_escape.ltx"(почему в эскейп,думаю понятно,
 
наш Волк находится на нем-Кордоне:).Открываем файл и ищем строки:
 
....
 
;-------------------------------------------------------------------------------------------------
 
;-- ESCAPE LAGER
 
;-------------------------------------------------------------------------------------------------
 
; Волк
 
[logic@esc_lager_volk]
 
active = walker@esc_lager_volk_walker1
 
on_death = death@wolf
 
 
[walker@esc_lager_volk_walker1]
 
path_walk = wolf_walk
 
path_look = wolf_look
 
meet = meet@wolf
 
on_actor_dist_le = 23| {+tutorial_wounded_start -esc_kill_bandits_quest_kill} remark@esc_lager_volk1
 
on_actor_dist_le_nvis = 5| walker@esc_lager_volk_walker2
 
danger = danger_condition@shustryi
 
 
[remark@esc_lager_volk1]
 
anim = hello_wpn
 
snd = esc_wolf_say_thanks
 
target = actor
 
on_signal = sound_end| walker@esc_lager_volk_walker2
 
on_actor_dist_le_nvis = 5| walker@esc_lager_volk_walker2
 
danger = danger_condition@shustryi
 
.....
 
Теперь сошлемся на наш трад-в секцию "[logic@esc_lager_volk]" добавим строки:
 
 
trade = misc\trade_wolf.ltx
 
inv_max_weight = 10000
 
 
То есть должно получится следующее:
 
 
;-------------------------------------------------------------------------------------------------
 
;-- ESCAPE LAGER
 
;-------------------------------------------------------------------------------------------------
 
; Волк
 
[logic@esc_lager_volk]
 
active = walker@esc_lager_volk_walker1
 
on_death = death@wolf
 
trade = misc\trade_wolf.ltx
 
inv_max_weight = 10000
 
...
 
Традом мы ссылаемся на наш "торговый файл",а вот следующей строкой увеличиваем переносимый вес,поскольку он и у неписей ограничен:)
 
Осталось только дать нашему "новороженному" торговцу-Волку побольше денег...Специально для начинающих пишу-заходим в "config\gameplay\character_desc_escape.xml'' и ищем секцию Волка:
 
 
<!---------------------------------------esc_wolf----------------------------------------------------->
 
<specific_character id="esc_wolf" team_default = "1">
 
<name>esc_wolf_name</name>
 
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
 
<bio>esc_wolf_bio</bio>
 
 
<class>esc_wolf</class>
 
<community>stalker</community>  <terrain_sect>stalker_terrain</terrain_sect>
 
 
<rank>434</rank>
 
<reputation>5</reputation>
 
<money min="600" max="2000" infinitive="0"/>
 
 
<snd_config>characters_voice\human_01\stalker\</snd_config>
 
<crouch_type>-1</crouch_type>
 
 
<visual>actors\neytral\stalker_neytral_balon_1</visual>
 
<supplies>
 
[spawn] \n
 
wpn_pm \n
 
ammo_9x18_fmj = 1 \n
 
wpn_ak74u \n
 
ammo_5.45x39_fmj \n
 
device_torch \n
 
hand_radio \n
 
</supplies>
 
#include "gameplay\character_criticals_4.xml"
 
 
<start_dialog>escape_lager_volk_talk</start_dialog>
 
<start_dialog>dm_hello_dialog</start_dialog>
 
<actor_dialog>dm_cool_info_dialog</actor_dialog>
 
<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
 
<actor_dialog>tm_wolf_dialog</actor_dialog>
 
<actor_dialog>tm_wolf_reward</actor_dialog>
 
</specific_character>
 
Здесь строка "<money min="600" max="2000" infinitive="0"/>" отвечает за минимальное\максимальное кол-во денег соответственно,а если поставить infinitive="1" то денеги будут бесконечные:)
 
Я еще и удалил строку "#include "gameplay\character_criticals_4.xml"" с ограничением по весу,но правда на всякий случай,поскольку не проверял,работает ли с ним=)
 
На этом все,заходим в игру и наслаждаемся собственным творением:)
 
 
P.S.-Упс,работает,но как-то неправильно:(...у торговца оказывается нет поддержки перемещения:(Поэтому ГСЦ всех торгошей и биндят не сталкером,а монстром:)
 
Заработало только когда я в бинде сталкера прописал:
 
 
function actor_binder:reinit()
 
object_binder.reinit(self)
 
 
local npc_id = self.object:id()
 
 
db.storage[npc_id] = { }
 
 
self.st = db.storage[npc_id]
 
self.st.pstor = nil
 
 
self.next_restrictors_update_time = -10000
 
 
self.object:set_callback(callback.inventory_info, self.info_callback, self)
 
self.object:set_callback(callback.article_info, self.article_callback, self)
 
self.object:set_callback(callback.on_item_take, self.on_item_take, self)
 
self.object:set_callback(callback.on_item_drop, self.on_item_drop, self)
 
self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) -- for game stats
 
--self.object:set_callback(callback.actor_sleep, self.sleep_callback, self)
 
self.object:set_callback(callback.task_state, self.task_callback, self)
 
--self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self)
 
self.object:set_callback(callback.level_border_enter, self.level_border_enter, self)
 
self.object:set_callback(callback.level_border_exit, self.level_border_exit, self)
 
self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self)
 
;вот мои строки
 
if self.object:clsid() ~= clsid.script_trader then
 
self.object:set_patrol_extrapolate_callback(bind_monster.generic_object_binder.extrapolate_callback, self)
 
end
 
 
db.storage[self.object:id()] = { }
 
 
self.st = db.storage[self.object:id()]
 
 
self.object:set_callback(callback.patrol_path_in_point, self.waypoint_callback, self)
 
self.object:set_callback(callback.hit, self.hit_callback, self)
 
self.object:set_callback(callback.death, self.death_callback, self)
 
end
 
 
Заместо старого.Все будет работать на УРА,с одним огрехом-Волк не будет отмечатся как цель при задании поговорить с Волком перед АТП,но думаю это не столь важно:)Ну и еще без ствола будет ходить,
 
но если будет атакован,то пушка появится "из широких штанин=-)" Волка и он будет из нее пытаться вас нашпиговать свинцом:)
 
 
Пост скриптум,дубль два:)...Теоритически,если строки с калбеками из обычной секции сталкера прописать в мою,то наш традер(в данном случае Волк) будет неким гибридом,сочетающим свойства как и
 
НПС,так и уникальных торговцев,попробуйте,должно работать=-)
 
 
Автор:    Костя.н.ы.ч
 

Текущая версия на 02:36, 18 ноября 2016

Данная статья посвящена торговле в игре. Т.е. как менять цены на товары, асортимент товаров у торговца и т.д.
Благодарность за предоставленную информацию: _And_.

Файлы

Все настройки, связанные с ассортиментом торговцев в игре, находятся в файлах gamedata\config\misc\trade_***.ltx

  • Сидорович - gamedata\config\misc\trade_trader.ltx
  • Бармен - gamedata\config\misc\trade_barman.ltx
  • Учёный на Янтаре - gamedata\config\misc\trade_ecolog.ltx
  • Торговец в штабе Долга - gamedata\config\misc\trade_dolg.ltx
  • Торговец в штабе Свободы - gamedata\config\misc\trade_freedom.ltx
  • Все обычные сталкеры - gamedata\config\misc\trade_generic.ltx

Структура файла

Файл должен содержать: главную(и обязательную) секцию [trader], в которой прописывается три тега:

buy_condition = .... - то, что торговец будет покупать
sell_condition = ... - за какую цену торговец будет продавать
buy_supplies = .... - то, что торговец будет продавать
Рассмотрим конфиг торговли для Сидоровича trade_trader.ltx:

Тег "buy_condition"

Этот тег содержит список секций с описанием покупаемых торговцем товаров. В оригинале содержит одну секцию - trader_generic_buy, однако допускает список секций в виде:

buy_condition = {+инфо_порция_1} trader_buy_1, {+инфо_порция_2} trader_buy_2, trader_generic_buy

где: инфо_порция_1 и инфо_порция_2 - инфо-порции, по которым будет менятся ассортимент покупки, который будет соответственно описан в секциях trader_buy_1 и trader_buy_2 и секция trader_generic_buy, которая должна идти последней в списке (или единственной, как указано выше) и описывает стартовый ассортимент покупки(по умолчанию).

Примечание: секции подключаемые по условию не дополняют ассортимент стартовой, т.е. каждая секция должна содержать полный ассортимент предметов. Если предмет отсутствует в текущей секции, то торговец будет покупать его обязательно и по 100% цене !

Формат секции:

[trader_generic_buy]
Название предмета = минимальная цена покупки, максимальная цена покупки
Название предмета = минимальная цена покупки, максимальная цена покупки
..........
;строка комментария - движком не читается, применяется скриптером для заметок

и так до следующей секции.

Пример:

wpn_vintorez = 0.5, 0.7

Это значит что торговец купит оружие от 50% полной его стоимости до 70%, т.е. если Винторез стоит 1000, то торговец купит его в диапазоне от 500 до 700 рублей. Диапазон зависит от отношения торговца к Меченому - чем лучше, тем дороже купит

Секция [supplies_start]

Эта секция описывает какие товары у торговца будут вначале.

Название предмета = количество, вероятность появления

Например:

bandage = 5, 1

Это значит что у торговеца всегда будут 5 бинтов, с 100 процентной вероятностью появления в магазине.

bandage = 5, 0.6

А тут уже вероятность появления 60%. Т.е. у торговца будет в продаже до 3-х бинтов (60% от 5 -> 3).

Секция [supplies_after_***]

Тоже самое, что в секции [supplies_start], но после выполнения квестов торговца.

Секция [trader_start_sell]

Эта секция описывает за какую цену торговец будет продавать.

Название предмета = минимальная цена продажи, максимальная цена продажи

Например:

wpn_vintorez = 1, 2

Это значит что торговец продаст оружие от 100% полной его стоимости до 200%, т.е. если Винторез стоит 1000, то торговец продаст его в диапазоне от 1000 до 2000 рублей. Диапазон зависит от отношения торговца к Меченому - чем лучше, тем дешевле продаст

Секция [trader_after_***_sell]

Тоже самое, что в секции [trader_start_sell], но после выполнения квестов торговца.


--Neo][ 15:06, 14 мая 2007 (MSD)

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