Делаем своего ГГ побогаче, подробное описание для новичков.
Есть один очень простой способ добавления денег.
Открываете блокнотом файл
character_desc_escape.xml (gamedata/config/gameplay)
и ищете строку:
спускаетесь чуть ниже и увидите строчку:
Копируете эту строчку и открываете файл
character_desc_general.xml:
(в той же папке):
и ищите:
спускайтесь чуть ниже к строчке:
0 в конце этой строчки жмёте Enter (сделайте пустую строчку между 0 и actors\hero\stalker_novice)
и просто вставьте строчку
Теперь у вас столько же денег сколько и у Сидрыча, то есть бесконечно.
Мародёрствуем! Съём денег с трупов.
Нам понадобится файл
'treasure_manager.script'
В этом файле находим такие строки:
--' Юзание инициатора (возможность выдать тайник)
function CTreasure:use(npc)
printf("TREASURE USE")
После строки --printf("TREASURE USE")-- пишем
if (npc and db.actor) then
lootmoney.lootmoney(npc)
end
У нас должно выйти
--' Юзание инициатора (возможность выдать тайник)
function CTreasure:use(npc)
printf("TREASURE USE")
if (npc and db.actor) then
lootmoney.lootmoney(npc)
end
Теперь создаём файл lootmoney.script и в нём пишем
function lootmoney(npc)
if npc ~= nil and not string.find(npc:section(),"arena") and npc:character_community()~="arena_enemy" then
local money = npc:money()
if money ~= nil and money ~=0 then
local deadmoney = money
local npc_rank
npc_rank = ranks.get_obj_rank_name(npc)
if npc_rank ~= nil then
if npc_rank == "novice" and deadmoney >=400 then deadmoney=math.random(25,400)
elseif npc_rank == "experienced" and deadmoney >=500 then deadmoney=math.random(50,500)
elseif npc_rank == "veteran" and deadmoney >=600 then deadmoney=math.random(100,600)
elseif npc_rank == "master" and deadmoney >=700 then deadmoney=math.random(200,700)
end
end
local news_texti = "\\n%c[255,255,0,0]Мёртвый сталкер: %c[default]"..npc:character_name().."\\n%c[255,255,0,0]Обнаружено денег: %c[default]"..game.translate_string(tostring(deadmoney).."руб.")
db.actor:give_game_news(news_texti, "ui\\ui_iconsTotal", Frect():set(0,0,83,47), 1, 4000)
db.actor:give_money(deadmoney)
game_stats.money_quest_update(deadmoney)
npc:give_money(-money)
game_stats.money_quest_update(-money)
end
end
end
Спавним ГГ в другом месте Зоны
Чтобы заспавнить ГГ на другой локации нам понадобится распакованный all.spawn.
После того как распаковали all.spawn, находим файл
alife_l01_ecape.ltx
И открываем его с помощью блокнота. В этом файле ищем вот такие строки:
[63]
; cse_abstract properties
section_name = actor
name = level_prefix_actor_0001
position = -246.726303100586,-24.7932605743408,-134.433868408203
direction = 0.00431653670966625,-1.39625442028046,-0.00068671052576974
s_flags = 0x29
; cse_alife_object properties
game_vertex_id = 4
distance = 0.699999988079071
level_vertex_id = 11713
object_flags = 0xffffffbf
custom_data = <
[dont_spawn_character_supplies]
[spawn]
wpn_binoc
device_torch
END
; cse_visual properties
visual_name = actors\hero\stalker_novice
; cse_alife_creature_abstract properties
g_team = 0
g_squad = 0
g_group = 0
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =
upd:health = 1
upd:timestamp = 0x75732029
upd:creature_flags = 0x70
upd:position = -246.726303100586,-24.7932605743408,-134.433868408203
upd:o_model = 0
upd:o_torso = -1.39625442028046,0.00431653670966625,0
upd:g_team = 0
upd:g_squad = 0
upd:g_group = 0
; cse_alife_trader_abstract properties
money = 40
trader_flags = 0
character_profile = actor
; cse_ph_skeleton properties
; cse_alife_creature_actor properties
upd:actor_state = 0xd20
upd:actor_accel_header = 0
upd:actor_accel_data = 0
upd:actor_velocity_header = 0
upd:actor_velocity_data = 0
upd:actor_radiation = 0
upd:actor_weapon = 110
upd:num_items = 0
Для спавна ГГ на другой локации нам надо удалить эти строки из
alife_l01_ecape.ltx
И поместить в файл того уровня, в который необходимо.
Теперь нам нужно прописать новые координаты не только в строках:
position
Квест по поиску и возвращению предмета.
Создадим квест по поиску АК74У.
Для начала нужно создать диалог, сделаем его у Волка:
Заходим в
gamedata\config\gameplay\dialogs_escape.xml
И в самом конце до строчки пишем:
esc_kill_bandits_quest_done
escape_volk_ak74u_start
escape_volk_ak74u_quest_0
1
escape_volk_ak74u_quest_1
2
3
escape_volk_ak74u_quest_2
escape_volk_ak74u_start
new_life.spawn_ak74u
escape_volk_ak74u_quest_3
dialogs.break_dialog
new_life.escape_volk_ak74u_have
escape_volk_ak74u_have
escape_volk_ак74u_done
escape_volk_ak74u_quest_completed_0
1
escape_volk_ak74u_quest_completed_1
2
escape_volk_ak74u_quest_completed_2
escape_volk_ak74u_done
new_life.give_volk_ak74u
3
escape_volk_ak74u_quest_completed_3
new_life.complete_volk_quest
Теперь нужно прописать эти диалоги Волку, для этого заходим в
gamedata\config\gameplay\character_desc_escape.xml
И находим профиль Волка(он называется esc_wolf), перед строкой пишем:
escape_volk_ak74u_quest
escape_volk_ak74u_quest_completed
Нам понадобятся два диалога: 1 для получения квеста, 2 для передачи автомата.
- Это название диалога
esc_kill_bandits_quest_done - эта строка означает что квест появится только если получен инфопоршень esc_kill_bandits_quest_done
escape_volk_ak74u_start - эта строка означает что если получен инфопоршень escape_volk_ak74u_start , то этот диалог больше не появится.
escape_volk_ak74u_quest_0 - это ссылка на текст фразы меченого
1 - это ссылка на текст с id= 1 , а id= 1 это escape_volk_ak74u_quest_1 (ссылка на текст Волка)
2
3 - эти две строчки означают что идет разветвление диалога
escape_volk_ak74u_start - выдача инфопоршня, после которого начинается квест
new_life.spawn_ak74u - функция вызываемая из скрипта new_life, в данном случае спаунится предмет AK74У
dialogs.break_dialog - функция отвечающая за выход из диалога
Во втором диалоге есть строка new_life.escape_volk_ak74u_have - она отвечает за появление диалога если выполняется функция
escape_volk_ak74u_have
Теперь нужно сделать текст диалога на русском языке, для этого заходим в gamedata\config\tex\rus\stable_dialogs_escape.xml и в нём пишем следующее(в конце перед ):
Здорова Волк, для меня есть какая-нибудь работа?
Да, есть одно дело: вобщем шёл сюда в лагерь к Сидырычу, решил пройти через тоннель чтоб воякам денег не платить, а там собак было штук десять. Ну я начал отстреливаться, где-то шестерых убил и патроны кончились, пришлось АКСУ выкинуть, чтоб от стаи собак убежать. Таки лежит там наверно АКСУ. \nНу как, возьмёшься? Только осторожней там, после последнего выброса появились в тоннеле перещающиеся аномалии электра.
Да, я как раз буду рядом проходить, конечно принесу...
Нет, Волк, сам туда иди...
Привет, Волк, ну как оно?...
Сидор водку не даёт, хе хе, а так всё хорошо.
Вот, нашел я твой АКСУ.
Эх спасибо тебе Меченый, вот держи, может на что-нибудь хватит.
Итак, диалог готов, теперь нужно сделать сам квест, для этого заходим в gamedata\config\gameplay\tasks_escape.xml и в самом конце пишем:
Найти потерянный АКСУ
Найти потерянный АКСУ
ui_iconsTotal_weapons
escape_volk_ak74u_done
tex_escape_volk_ak74u
Найти АКСУ
new_life.escape_volk_ak74u_have
escape_volk_ak74u_have
Принести АКСУ Волку
blue_location
Escape_novice_lager_volk
escape_volk_ak74u_done
- id квеста
Найти потерянный АКСУ - название квеста
Найти потерянный АКСУ - тоже название квеста))
ui_iconsTotal_weapons - иконка задания
escape_volk_ak74u_done - квест будет выполнен, если был получен инфопоршень escape_volk_ak74u_done
tex_escape_volk_ak74u - ссылка на текстовый файл с описанием задания
Найти АКСУ - название подзадачи
new_life.escape_volk_ak74u_have - проверка на наличие предмета
escape_volk_ak74u_have если функция new_life.escape_volk_ak74u_have выполнилась, то выдаётся инфопоршень escape_volk_ak74u_have и выполняется подзадача
Принести АКСУ Волку - название второй подзадачи
blue_location - указатель на Волка
Escape_novice_lager_volk - id Волка в Файле gamedata\config\game_story_ids.ltx
escape_volk_ak74u_done - если будет получен этот инфопоршень, то выполнится подзадача и соответственно сам квест
Нужно сделать инфопоршни, заходим в gamedata\config\gameplay\info_l01escape.xml и в нём в конце до строчки пишем:
escape_volk_ak74u
Теперь нужно сделать описание квеста, заходим в gamedata\config\gameplay\storyline_info_escape.xml и пишем в конце:
ui\ui_icon_equipment
tex_escape_volk_ak74u
Сделаем описание на русском, заходим в stable_dialogs_escape.xml и в конце до строки пишем:
Волк попросил принести потерянный в туннеле АКСУ
Теперь создадим скриптовый файл new_life в gamedata\scripts\new_life.script и пишем:
function spawn_ak74u()
amk.spawn_item("wpn_ak74u",vector():set(-78.85,-1.29,154.74),163,189935) -- спавн ak74u в тоннеле на кордоне
end
function escape_volk_ak74u_have()
return sak.have_item_namber("wpn_ak74u",1) ~= false -- проверка на нахождение предмета в рюкзаке
end
function give_volk_ak74u(first_speaker, second_speaker) -- передача предмета
sak.out_item_namber("wpn_ak74u", 1)
end
function complete_volk_quest(first_speaker, second_speaker) -- получение награды
dialogs.relocate_money(second_speaker, 1500, "in")
end
Чтобы эти скрипты заработали, нужно создать файлы amk.script и sak.script, в аmk.script пишем
function spawn_item(spawn_item, pos, gv,lv)
if gv==nil then gv=db.actor:game_vertex_id() end
if lv==nil then lv=db.actor:level_vertex_id() end
return alife():create(spawn_item, pos, lv, gv)
end
function remove_item_from_inventory(remove_item,npc)
if npc==nil then npc=db.actor end
if remove_item~=nil then
-- npc:mark_item_dropped(remove_item)
alife():release(alife():object(remove_item:id()), true)
return true
end
return false
end
В sak.script пишем
local items_count=0
local itemin=nil
function have_item_namber(itm,need_namber)
local actor=db.actor
items_count=0
itemin=itm
actor:iterate_inventory(cheking_item,actor)
if items_count>=need_namber then
return true
else
return false
end
end
function cheking_item(actor,item)
local items=item:section()
if items==itemin then
items_count=items_count+1
end
end
function create_items(npc,section,number)
for i=1,number do
alife():create(section,
npc:position(),
npc:level_vertex_id(),
npc:game_vertex_id(),
npc:id())
end
end
local reloc_params={}
local stalk
function out_item_namber(itm_section,need_number)
reloc_params.itm_section=itm_section
reloc_params.itm_cnt=need_number
reloc_params.itm_cnt_found =0
db.actor:iterate_inventory(checkout_items_count,db.actor)
reloc_params.itm_cnt_found=0
if reloc_params.itm_cnt_found<=reloc_params.itm_cnt then
db.actor:iterate_inventory(out_items_count,db.actor)
end
news_manager.relocate_item(db.actor, "out", itm_section)
reloc_params={}
end
function relocate_item_namber(stalker,itm_section,need_number)
stalk=stalker
reloc_params.itm_section=itm_section
reloc_params.itm_cnt=need_number
reloc_params.itm_cnt_found=0
db.actor:iterate_inventory(checkout_items_count,db.actor)
reloc_params.itm_cnt_found=0
if reloc_params.itm_cnt_found<=reloc_params.itm_cnt then
db.actor:iterate_inventory(reloc_items_count,db.actor)
end
news_manager.relocate_item(db.actor, "out", itm_section)
reloc_params={}
end
function checkout_items_count(actor,item)
if item.section and item:section()==reloc_params.itm_section then
reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1
end
end
function reloc_items_count(actor,item)
if item.section and item:section()==reloc_params.itm_section and reloc_params.itm_cnt_found
То, что отображается в игре (название)
То, что отображается в игре (описание)
3. Находим в папке gamedata/meshes/actors/soldier файл stalker_military_black.ogf делаем его
копию и переназываем её как хочется.
Например в stalker_military_white.ogf
Открываем её блокнотом и находим это:
act\act_stalker_military_1.
Меняем на любой текст, но главное чтобы символов было столько же, иначе модель не будет работать. Меняем например на это:
_ct_stalker_military
4.Делаем тоже самое с stalker_comander_suit.ogf(gamedata/meshes/equipments).
Получаем stalker_comander_suit_white.ogf
5.Создаём текстуру с названием _ct_stalker_military.dds (можно взять готовую из любого текстурного мода и переназвать как надо.
6.Прописываем в продажу торговцу и радуемся.