Способ создания фишки "Снятие денег с трупов" для S.T.A.L.K.E.R.-Тень Чернобыля.
Находим в распакованном каталоге gamedata файл по адресу GameData/Scripts/treasure_manager.script.
*Файл можно править Notepad, Wordpad, Windows OfficeWord и другими текстовыми редакторами (прост. "Блокнот")
В файле treasure_manager.script находим следующую конструкцию кода:
Quote
--' Юзание инициатора (возможность выдать тайник) function CTreasure:use(npc) printf("TREASURE USE") end
После строки "TREASURE USE" пишем следующий код:
Quote
if (npc and db.actor) then lootmoney.lootmoney(npc) end
В результате проделанной работы у нас получается в файле treasure_manager.script вот такая конструкция:
Quote
--' Юзание инициатора (возможность выдать тайник) function CTreasure:use(npc) printf("TREASURE USE")
if (npc and db.actor) then lootmoney.lootmoney(npc) end
Теперь в каталоге деректории игры по адресу gamedata/scripts создаём новый текстовый документ lootmoney.txt. Открываем файл блокнотом или другим текстовым редактором и сохраняем его как lootmoney.script c кодировкой ANSI. Можно взять готовый скрипт LUA, подчистить его и переименовать. Это значения мало имеет.
В файл gamedata/scripts/lootmoney.script пишем вот такую конструкцию:
Quote
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
Теперь всё необходимо сохранить и закрыть файлы. Способ должен работать. При обыске трупов сталкеров будет автоматически сниматься определённая сумма денег, подобно тому, как поступает информация о тайниках и статьи в энциклопедию. Приятной игры.
Структура данной фишки выдрана из LootMoney MOD. Автор статьи - RETRIX.
Сообщение отредактировал RETRIX - Понедельник, 05.03.2012, 17:00
Старая тема, а на AP-Production её почему-то нет...Эта статья тут не помешает. Я тоже не знал, как написать эту фичу. Потом разобрался, благодаря одной статье и создал статью тут.
Quote
автор скрипта вообще то АМК
автор? АМК это где-то двадцать человек. Если вы утверждаете, что эту фичу придумал скрниптер из команды АМК - назовите его.
Сообщение отредактировал RETRIX - Вторник, 06.03.2012, 12:25
Ну например представь - После диалога с каким нибудь бандитом мы можем снимать деньги с трупов! Подобный диалог: - Научи меня мародёрствовать - Не вопрос с тебя 500р - Хорошо вот (Потеря суммы получение инфопоршня) Ну и мы теперь умеем снимать деньги. (Или "программа взломщик" как SGM )
6poHR777, да Jim эту фичу уже в Paradise Lost сделал. Это по идее можно куда угодно впихнуть.
Quote
Ну например представь - После диалога с каким нибудь бандитом мы можем снимать деньги с трупов! Подобный диалог: - Научи меня мародёрствовать - Не вопрос с тебя 500р - Хорошо вот (Потеря суммы получение инфопоршня) Ну и мы теперь умеем снимать деньги. (Или "программа взломщик" как SGM )
Кстати, вроде неплохая фишка выйдет...можно было бы попробовать реализовать. Диалог можно сделать с...Осведомителем, бандитом, который навещает бар и с грабителями на свалке.
function lootmoney(npc) if db.actor:object("flash_lootmoney") then if npc:character_community() ~= "monolith" then local actor = db.actor 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_caption = "Мёртвый сталкер: "..npc:character_name() local news_text = "Обнаружено денег: %c[255,255,0,0]"..game.translate_string(deadmoney).."%c[default] руб." --xr_sound.set_sound_play(actor:id(), "pda_news") actor:give_game_news(news_caption, news_text, "ui_iconsTotal_found_money", 0, 10000) actor:give_money(deadmoney) game_stats.money_quest_update(deadmoney) npc:give_money(-money) game_stats.money_quest_update(-money) end end end
function lootmoney_effect(npc,corpse_npc) if corpse_npc:character_community() ~= "monolith" then local num=corpse_npc:money() if num and num >0 then local deadmoney = num local gi_rank gi_rank = ranks.get_obj_rank_name(corpse_npc) if gi_rank ~= nil then if gi_rank == "novice" and deadmoney >=100 then deadmoney=math.random(10,50) elseif gi_rank == "experienced" and deadmoney >=200 then deadmoney=math.random(25,100) elseif gi_rank == "veteran" and deadmoney >=300 then deadmoney=math.random(50,200) elseif gi_rank == "master" and deadmoney >=400 then deadmoney=math.random(100,400) end end npc:give_money(deadmoney) game_stats.money_quest_update(deadmoney) corpse_npc:give_money(-num) game_stats.money_quest_update(-num) end end end