function название функции(first_speaker, second_speaker) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "vodka", "out",2) end
Код
function название функции() local obj = alife():create("vodka", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end
IP-адрес: Страна: Российская Федерация Город: Москва Дата регистрации: 25.10.2014
function название функции(first_speaker, second_speaker) return first_speaker:object("название предмета") ~= nil end
Код
function название функции(first_speaker, second_speaker) return first_speaker:object("название предмета") ~= nil or first_speaker:object("название предмета") ~= nil or first_speaker:object("название предмета") ~= nil end
описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора.
Дата: Понедельник, 01.06.2015, 13:11 | Сообщение # 4
Агро-Разработчик
[ Легенда Зоны ]
Код
function spawn_vintar() alife():create("vodka",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210) end
Код
function название_функции(npc, actor) npc:kill(actor) end
Код
function название функции(first_speaker, second_speaker) local item_sections = {"Предмет"} local needed = количество одинаковых предметов, ставится цифра без знаков local count = 0 local item_section local function calc(temp, item) if item:section() == item_section then count = count + 1 end end for k,v in pairs(item_sections) do item_section = v get_story_object("actor"):iterate_inventory(calc, actor) end return count >= needed end
IP-адрес: Страна: Российская Федерация Город: Москва Дата регистрации: 25.10.2014
Дата: Понедельник, 01.06.2015, 13:14 | Сообщение # 6
Агро-Разработчик
[ Легенда Зоны ]
Код
function gop_stop_actor(actor, npc) local actor = db.actor all_money_actor = actor:money() if actor and npc then dialogs.relocate_money(npc, all_money_actor, "out") end end
Чтобы ГГ после диалога телепортировался в нужную точку, то можно воспользоваться функцией:
Код
function teleport_actor(actor, npc, p) local point = patrol(p[1]) local look = patrol(p[2])
db.actor:set_actor_position(point:point(0)) local dir = look:point(0):sub(point:point(0)) db.actor:set_actor_direction(-dir:getH()) end
По всей видимости можно вместо фигурных скобочек указывать нужные координаты класса вектор.
А можно просто воспользоваться функцие set_actor_position и set_actor_direction по отдельности. Первую - для установки позиции, вторая - для установки взгляда. Здесь вызов идет вот-так:
Эти функции работают ТОЛЬКО в пределах уровня на котором находиться ГГ!!!
Код
function название_функции(actor, npc) local actor = db.actor all_money_actor = actor:money() if actor and npc then dialogs.relocate_money(npc, Количество, "out") end end
IP-адрес: Страна: Российская Федерация Город: Москва Дата регистрации: 25.10.2014
Дата: Понедельник, 01.06.2015, 13:15 | Сообщение # 7
Агро-Разработчик
[ Легенда Зоны ]
Код
local idMyNPC = nil --/ тут будем хранить ID заспавненного непися! function spawnych() local soObj = alife():create("esc_kvest_killer1",vector():set(-232,-19,-115),22645,8) if soObj then --/ перепроверка для безопасности idMyNPC = soObj.id --/ запоминаем!!! end end
Код
function Delete_ak74u_from_Actor() local oItem = db.actor:object("предмет") --/ определяем предмет у ГГ if oItem then --/ у ГГ есть предмет db.actor:drop_item(oItem) --/ выбрасываем предмет (опционально) alife():release(alife():object(oItem:id()), true) --/ удаляем из игры end end
Код
function Release_3_Kalash() local cnt = db.actor:object_count() local ch=0 for i=0, cnt-1 do local item = db.actor:object(i) if item:section() == "предмет" then local sobj = alife():object(item:id()) if sobj then alife():release(sobj,true) ch = ch+1 if ch ==кол-во_предметов then break end end end end end
IP-адрес: Страна: Российская Федерация Город: Москва Дата регистрации: 25.10.2014
Дата: Понедельник, 01.06.2015, 13:18 | Сообщение # 8
Агро-Разработчик
[ Легенда Зоны ]
Внимание! Для работы метода необходимы функции АМК мода! ID будем задавать прямо в функции спавна. Пишем в своем скрипте:
Код
function npc_spawn() -- имя функции local obj = alife():create("профильное_имя_нпс",vector():set(x,y,z),level_vertex,game_vertex) -- координаты local tbl = amk.read_stalker_params(obj) tbl.sid = 97120 -- ID - любое число, но оно не должно повторятся с уже существующими (см. файл: game_story_ids в конфигах) amk.write_stalker_params(tbl, obj) end
Благодаря этому способу, можно например поставить метку на заспавненного скриптом НПС... Внимание: после спавна НПС нужно сделать сейв\лоад, чтобы ID заработал.
Внимание! Для работы метода необходимы функции АМК мода!
Код
local obj = alife():create("esc_stalker_respawn_1",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id()) local tbl = amk.read_stalker_params(obj) tbl.health = 0.1 tbl.updhealth = 0.05 amk.write_stalker_params(tbl, obj)
В результате выполнения этого кода рядом с ГГ появится раненый сталкер и будет просить аптечку.
Код
function spawn_x14() alife():create("Секция",vector():set(-7.32,-34.48,13.18),1542,2799) end
IP-адрес: Страна: Российская Федерация Город: Москва Дата регистрации: 25.10.2014
function search_weapon_complete1(actor, npc) if db.actor ~= nil then if db.actor:object("Предмет") then db.actor:give_info_portion("Поршень") return true end end return false end
Код
local t_wpn = {"Предмет1", "Предмет1", "Предмет1"} function search_ALL_weapons_complete() local gg = db.actor if gg then for i=1,#t_wpn do if not gg:object(t_wpn[i]) then return false end end gg:give_info_portion("Поршень") return true end return false end
Основная функция:
Код
function Actor_Has_ListItems(sSection,iNum) if not iNum then iNum = 1 end local oActor = db.actor local iCnt = 0 if oActor and sSection then oActor:iterate_inventory( function (dummy, oItem) if oItem:section() == sSection then iCnt = iCnt + 1 if iCnt >= iNum then return true --/> актор имеет N предметов end end end ,nil) end return iCnt >= iNum --/> имеет ли актор N предметов end
Вызов:
Код
function search_2_bumazhki_sidr_complete() return this.Actor_Has_ListItems("medkit", 10) end
IP-адрес: Страна: Российская Федерация Город: Москва Дата регистрации: 25.10.2014
Дата: Понедельник, 01.06.2015, 13:23 | Сообщение # 11
Агро-Разработчик
[ Легенда Зоны ]
Код
function malo_hp() db.actor.health = -0.3 --Минус 30% дезек end
Код
function Delete_2_bumazhki_sidora_from_Actor() local cnt = db.actor:object_count() local ch=0 for i=0, cnt-1 do local item = db.actor:object(i) if item:section() == "medkit" then local sobj = alife():object(item:id()) if sobj then alife():release(sobj,true) ch = ch+1 if ch == 7 then --7 - кол-во удаляемых аптечек break end end end end end
Код
function ReleaseRandomItem(num) local actor = db.actor local cnt = actor:object_count() if cnt<num then return end for i=1,num do local item = actor:object(math.random(0, cnt-1)) local sobj = alife():object(item:id()) if sobj then alife():release(sobj,true) cnt = actor:object_count() end end end
вызывать так:
Код
ReleaseRandomItem(5) -- 5 - число удаляемых предметов
Вызов через диалог:
Код
function RRI() имя_файла.ReleaseRandomItem(5) end
Пример:
Код
<action>имя_файла.RRI</action>
IP-адрес: Страна: Российская Федерация Город: Москва Дата регистрации: 25.10.2014
Дата: Понедельник, 01.06.2015, 13:25 | Сообщение # 12
Агро-Разработчик
[ Легенда Зоны ]
Код
function join_monolith (actor, npc) -- ставить на дельта апдейт printf ("ACTOR NOW IN имя группировки COMMUNITY") if db.actor and level_id.имя уровня then -- пример l01_escape и т.п db.actor:set_character_community ("имя группировки", 0, 0) end end
Код
function test_index() local cnt = db.actor:object_count() for i=0, cnt-1 do local item = db.actor:object(i) local sobj = alife():object(item:id()) if sobj then alife():release(sobj,true) end end end
Вариант без вывода на худ
Код
local iTimer function Start_Timer_5_minutes() --/ (пере)запуск таймера (из диалога) iTimer = time_global() + 5*1000 --/ взводим таймер на 5cek end
function Timer_N_minutes() --/ вызывается из ':update' сталкер-биндера if iTimer and iTimer < time_global() then --/ проверка текущего значения iTimer = nil --/ выключаем таймер скрипт.функция() --/ выполняем действие end end
Вариант с выводом на худ
Код
local iTimer local last function start_timer_minutes_test(seconds) if last~= nil then iTimer = time_global()+last --/ взводим таймер на остаток времени last else iTimer = time_global() + 7*1000 --/ взводим таймер например 7 сек. end end
function timer_n_minutes_test() --/ вызывается из ':update' сталкер-биндера if iTimer then last=iTimer-time_global() -- присваиваем переменной остаток времени до конца работы таймера if iTimer < time_global() then iTimer = nil --/ выключаем таймер last=nil Скрипт.Функция --/ выполняем действие end end end
-- выводим значение таймера в обратном отсчете на худ function hud_static() --/ вызывается из ':update' сталкер-биндера local hud = get_hud() local st if iTimer then st = hud:GetCustomStatic("hud_timer") if st==nil then hud:AddCustomStatic("hud_timer", true) st = hud:GetCustomStatic("hud_timer") end if last~=nil then local hours = math.floor(last/3600000) local minutes = math.floor(last/60000 - hours*60) local seconds = math.floor(last/1000 - hours*3600 - minutes*60) local text = string.format("%02d:%02d:%02d",hours,minutes,seconds) -- выводим время в формате 00:00:00 --local text=string.format("%.f",last/1000) st:wnd():SetTextST(text) end else if hud:GetCustomStatic("hud_timer")~=nil then hud:RemoveCustomStatic("hud_timer") end end end
IP-адрес: Страна: Российская Федерация Город: Москва Дата регистрации: 25.10.2014
Дата: Понедельник, 01.06.2015, 13:29 | Сообщение # 13
Агро-Разработчик
[ Легенда Зоны ]
Код
if bone_index > 0 and who then if who:id() == db.actor:id() then --/ для актора local oActiveItem = db.actor:object("wpn_svd") if oActiveItem then --/ у актера проверяемое оружие local kuda = "" if bone_index == 14 or bone_index == 15 then kuda = "Ранен в глаз" elseif bone_index == 13 then kuda = "Ранен в голову" elseif bone_index == 16 then kuda = "Ранен в челюсть" elseif bone_index == 17 then kuda = "Ранен в шею" elseif bone_index == 9 or bone_index == 10 or bone_index == 11 or bone_index == 18 then kuda = "Ранен в грудь" elseif bone_index >= 1 and bone_index <= 8 then kuda = "Ранен в ногу" elseif bone_index >= 19 and bone_index <= 42 then kuda = "Ранен в руку" end news_manager.send_tip(db.actor, kuda, nil, nil, 2000) end end end
Вставлять функцию в мотиватор в функцию hit_callbak. Например, после этого:
Код
if self.st.hit then xr_logic.issue_event(self.object, self.st.hit, "hit_callback", obj, amount, local_direction, who, bone_index) end
Код
function mochim_five_nps() if has_alife_info("первый_грохнут") and has_alife_info("второй_грохнут") and has_alife_info("третий_грохнут") and has_alife_info("четвертый_грохнут") and has_alife_info("и_пятый_наконец") then return true else return false end end
После выполнения условий функции mochim_five_nps выдается поршень esc_kvest_secret_merc_kill_poslannick и задание обновляется.
Код
local ObjId=0 function pda_killer_spawn() local obj= alife():create("pda_merc_killer_glav",vector():set(-223.700,-7.678,-129.688),17000,281) local text = "Текст метки" level.map_add_object_spot_ser(obj.id, "blue_location", text) --/blue_location - тип метки ObjId=obj.id end
Эту метку можно удалить так:
Код
function delete_spot() for a=1,65534 do --Перебор айди local obj = alife():object(a) if obj and obj:section_name() == "pda_merc_killer_glav" then --/pda_merc_killer_glav -- Секция предмета или НПС level.map_remove_object_spot(obj.id,"blue_location") break end end end
IP-адрес: Страна: Российская Федерация Город: Москва Дата регистрации: 25.10.2014
Дата: Понедельник, 01.06.2015, 13:31 | Сообщение # 14
Агро-Разработчик
[ Легенда Зоны ]
Код
local obj = alife():story_object( 6 ) -- 6 - сид Волка local obj_id = obj.id function add_spot_on_map(obj_id,type,text) if obj_id then if not text then text = "no_text" end level.map_add_object_spot_ser(obj_id, type, text) end end
Вызываем:
Код
function add_spot_on_map2(obj_id,type,text) имя_файла.add_spot_on_map(obj.id,"green_location","Текст") end
Метку можно убрать вот так:
Код
local obj = alife():story_object( 6 ) local obj_id = obj.id function remove_spot_from_map(obj_id,type) if obj_id and level.map_has_object_spot(obj_id, type) ~= 0 then level.map_remove_object_spot(obj_id, type) end end
Эту вызывать:
Код
function remove_spot() this.remove_spot_from_map(obj.id,"green_location") end
Код
function kvest_search_2_bumazhki_sidr_complete() news_manager.send_tip(db.actor, "%c[255,255,128,128]Автор сообщения\n%c[default]Текст сообщения", 0, "wolf", 17000) end
Код
local text = "Здесь текст" function test() news_manager.send_tip(db.actor, text, 0, "trader", 20000) end
IP-адрес: Страна: Российская Федерация Город: Москва Дата регистрации: 25.10.2014
Дата: Понедельник, 01.06.2015, 13:34 | Сообщение # 15
Агро-Разработчик
[ Легенда Зоны ]
Код
function do_something() local item = db.actor:object("antirad") if antirad then db.actor:eat(item) end end
Должно быть так:
Код
function do_something() local item = db.actor:object("antirad") if item then db.actor:eat(item) end end
Надет ли костюм:
Код
function check_outfit() local outfit = db.actor:item_in_slot(6) if outfit:section() == "exo_outfit" then --/Если в 6 слоте присутствует "exo_outfit" тогда return true --/"exo_outfit" одет else return false --/"exo_outfit" не одет end end
Не надет ли костюм:
Код
function check_outfit() local outfit = db.actor:item_in_slot(6) if outfit:section() == "exo_outfit" then --/Если в 6 слоте присутствует "exo_outfit" тогда return true --/"exo_outfit" не одет else return false --/"exo_outfit" одет end end
Код
function hit_nanesti() for a=1,65635,1 do local obj=level.object_by_id(a) if obj and string.find(obj:name(),"Предмет") then local h = hit (); h.power = 10000; h.direction = vector():set (0, 0, 0); h.impulse = 0; h.draftsman = obj; h.type = hit.explosion; obj:hit (h); end end end
IP-адрес: Страна: Российская Федерация Город: Москва Дата регистрации: 25.10.2014