Перейти к контенту

Рекомендуемые сообщения

Заглядывай по чаще в "Справочник по ф-циям и классам".

actor:transfer_item(transfer_obj, npc)

Как получить объекты актера, НПС и перемещаемого предмета разберешься сам. Или с этим то же проблемы ?

Ссылка на комментарий

@AndreySol, благодарю, сенсей! Строг ты и суров, но подсказки твои работают! Но столкнулся с проблемкой. Смотри, реализовал идею с твоей подсказкой следующим образом:

Скрытый текст

function name(npc, actor)

function item(actor)
actor:iterate_inventory(keep_item, actor)
end

function keep_item(actor, item)
if item:section() == "medkit" then
actor:transfer_item(item, npc)
end
end

item(actor)
end

 

Аптечка передается и у НПС она появляется. Только передаётся не 1 аптечка, а сразу все medkit что в рюкзаке у ГГ. Сразу 10, 20, одной передачей. Как пофиксить? Под ночь не соображу никак :( 

Вдруг еще сможешь помочь!

Ссылка на комментарий

@_Sk8_AsTeR_

function name(actor, npc)
	local objMedkt = actor:object("medkit")
    if objMedkt then
    	actor:transfer_item(objMedkt, npc)
    end
end

Для передачи нескольких предметов - тело ф-ции оберните в цикл. И когда пишите код, советую, соблюдать табуляцию.

Изменено пользователем Graff46
  • Спасибо 1
  • Согласен 1
  • Полезно 1
Ссылка на комментарий

@Graff46, сейчас попробуем-с, благодарю!

PS. ИДЕАЛЬНО! От души благодарю!

Изменено пользователем _Sk8_AsTeR_
Ссылка на комментарий

@buffy, Посмотри методы класса ini_file(), получи system.ltx (system_ini() ) у ини класса есть методы возвращающие кол-во секций и секцию по номеру, делаете конструкцию с циклом и в цикле проходите все секции из system.ltx (и его инклудов). Только в system.ltx очень много секций (погода, спавн и тд), Вам нужно будет отфильтровать не нужные секции.

Изменено пользователем Graff46
Ссылка на комментарий

Господа, еще вопросик. Выручайте пожалуйста :(

Суть в том, что задания не засчитываются после убийства групп противников. Таким образом не зачитывается задание как от Бармена например (зачистить Дикую Территорию от бандосов и наймов), а также например не срабатывает тригер после убийств наймов в Рыжем Лесу (помочь сталкерам отбить мост). Куда копать, подскажите пожалуйста?

Ссылка на комментарий
2 часа назад, Graff46 сказал:

@buffy, Посмотри методы класса ini_file(), получи system.ltx (system_ini() ) у ини класса есть методы возвращающие кол-во секций и секцию по номеру, делаете конструкцию с циклом и в цикле проходите все секции из system.ltx (и его инклудов). Только в system.ltx очень много секций (погода, спавн и тд), Вам нужно будет отфильтровать не нужные секции.

Это какие?

ÐаÑÑинки по запÑоÑÑ Ð¼ÐµÐ¼ Ñдивление

Ссылка на комментарий

@Graff46, есть впечатление что поломано что-то общее, не срабатывает общий тригер на выполнение, именно когда задание - убить группу. То есть когда задание засчитывается когда убить абсолютно всех.  

Ссылка на комментарий
В 06.10.2018 в 19:24, buffy сказал:

Вроде был модуль в Сборочной, но я не нашёл

Вот есть: https://yadi.sk/d/gWefF91-bwDevA

Я его, правда, немного правил в телефоне, так что если что-то не будет работать - пиши.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

Здрасьте.

 

Солянка 2010, биорадар, хочу отделить точки нейтралов/друзей от врагов. Пробовал добавлять проверку через фразы

obj:relation(db.actor)==game_object.enemy

или

amk.get_npc_relation(obj,db.actor)=="enemy"

– в любом варианте видны только нейтралы и трупы. Где я нарушил логику?

 

Примечание: в начальный список добавлен цвет

["enemy"]        = GetARGB(0, 255, 0, 0)

вместо цвета "unknown", который нигде не задействован.

 

Spoiler

 

Оригинал: "живой или зомби/труп"

        if IAmAStalker[obj:clsid()] then
            if obj:alive() then
                return colors["stalker"]
            else
                return colors["corpse"]
            end
        else

(дальше перебор мутантов)

 

Мой вариант: "враг или нет, если живой", иначе "зомби/труп"

        if IAmAStalker[obj:clsid()] then
            if obj:alive() then
                if obj:relation(db.actor)==game_object.enemy then
                    return colors["enemy"]
                else
                    return colors["stalker"]
                end
            else
                return colors["corpse"]
            end
        else

 

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий

@naxac, спасибо посмотрю, но я за это время уже свой примитивный парсер написал:biggrin: позаимствую часть кода у тебя)

Изменено пользователем buffy
Ссылка на комментарий

И ещё такой вопрос для чего нужны эти константы - лень проверять:blush:

    const FS_ClampExt = 4;
    const FS_RootOnly = 8;

UPD: с первым разобрался

Изменено пользователем buffy
Ссылка на комментарий

Ребят, может, кто скинуть мне ровный скрип на ремонтный комлект для ЗП?

Пробовал создать по этому. Всё заработало, прям идеально, но эффекта починки нет. Он его просто лопает.

Ссылка на комментарий

@Mr.Srears, статья написана для ТЧ и при адаптации под ЗП нужно знать, что в ЗП слоты нумеруются иначе и метод give_game_news имеет другой набор аргуметов. Кроме того, в ЗП в биндере актора для события use_object уже установлен колбек self.use_inventory_item, поэтому тело функции actor_binder:repair_outfit_start из статьи нужно добавить в actor_binder:use_inventory_item(obj).

  • Полезно 1
Ссылка на комментарий

@Charsi, Не мог бы ты подробней расписать про нумерацию слотов? Какие слоты использует оружие, и костюм?

И что мне делать с методом "give_game_news" удалять его, или заменять другим значением?

Ссылка на комментарий

В ТЧ оружие в слотах 1,2, костюм - 6. В ЗП на единицу больше, соответственно 2,3 и 7.

Поэтому нужно писать

    repair_item_in_slot(2)
    repair_item_in_slot(3)
    repair_item_in_slot(7)
    repair_item_in_slot(12) -- добавим починку шлема

Вместо

db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)

следует написать

db.actor:give_game_news("st_tip",news_text, "ui_iconsTotal_grouping", 1000, 5000)

Тут "st_tip" это заголовок сообщения, а "ui_iconsTotal_grouping" идентификатор текстуры. Их можно на свои заменить.

1000 и 5000 время до показа сообщения и длительность показа в миллисекундах.

  • Спасибо 1
  • Согласен 1
  • Полезно 1
Ссылка на комментарий

@Charsi, Пробовал сделать все, как ты сказал, все равно не работает. Дело в скрипте, скорее всего, я пропустил какие-то переменные или методы, ссылающие на актора имеют совсем другие значения на ЗП. Хотя я уверен,  что там еще чего-то не хватает, уж больно скрипт простой.
Вот посмотри код скрипта:

function action_repair()
    -- эмулируем возврат ремкомплекта в инвентарь
    alife():create("repair_kit_outfit", vector(),0,0,0)
 
    -- нет ли рядом врагов и монстров
    local apos = db.actor:position()
    for obj_id,_ in pairs (db.storage)do
        local obj = level.object_by_id(obj_id)
        if obj and (IsStalker(obj) or IsMonster(obj)) and obj:alive() 
        and obj:relation(db.actor) == game_object.enemy and obj:position():distance_to(apos)<30 then
            send_tip("Нельзя чинить костюм, когда враги слишком близко.")
            return
        end
    end

    -- пробуем чинить предмет в 
    repair_item_in_slot(7) -- седьмом слоте
end

function repair_outfit()
local item_s7 = db.actor:item_in_slot(7) --объявляем переменную (item_s7)
    if item_s7 ~= nil and item_s7:condition() >=0.60 and item_s7:condition() ~=1 then --когда костюм можно чинить (состояние больше или равно 60%)
        item_s7:set_condition(1)
        local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_detach_addon]])
        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,0,255,0]Ремонт костюма завершен."
        db.actor:give_game_news("st_tip",news_text, "ui_iconsTotal_grouping", 1000, 5000)
    elseif item_s7 == nil then --когда костюма нет 
        local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: нужно одеть коcтюм."
        db.actor:give_game_news("st_tip",news_text, "ui_iconsTotal_grouping", 1000, 5000)
        alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
    elseif item_s7:condition() <0.60 then --когда костюм нельзя чинить (состояние меньше 60%)
        local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: костюм слишком сильно повреждён."
        db.actor:give_game_news("st_tip",news_text, "ui_iconsTotal_grouping", 1000, 5000)
        alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
    elseif item_s7:condition() ==1 then --когда костюм в отличном состояние
        local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]костюм в отличном состоянии."
        db.actor:give_game_news("st_tip",news_text, "ui_iconsTotal_grouping", 1000, 5000)
        alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
    end
end

function send_tip(news_text)
    db.actor:give_game_news("st_tip",news_text, "ui_iconsTotal_grouping", 1000, 5000)
end

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...