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

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

@_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
Ссылка на комментарий

@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

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

Подскажите, есть такая функция:

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

	local item_in_slot_9 = db.actor:item_in_slot(9)
	if item_in_slot_9 then
		local t = item_in_slot_9:condition()
		item_in_slot_9:set_condition(t - 0.0001)
		if item_in_slot_9:condition() <0.01 then
			alife():release(alife():object(item_in_slot_9:id()))
		end
	end

 

Если повесить её на апдейт, то предмет в соответствующем слоте со временем будет изменять состояние. Проверил, всё работает, только после загрузки сейва состояние сбрасывается.

Как сохранить состояние этого предмета после загрузки?

Заранее благодарю!

Важнейшая задача цивилизации - научить человека мыслить.

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

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

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

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

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

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

Войти

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

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

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