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

Скриптование


Svoboда

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

Вот смотрите, есть функция:

local stope = false
function testych()
    local npc = level.object_by_id(id)
    local PosActor = db.actor:position()
     if npc and IsStalker(npc) and npc:alive() and npc.health > 0.1 then
         if npc:position():distance_to(PosActor) < 4 then 
             if not stope then 
                 news_manager.send_tip(db.actor, "Эй, чоё встал!?.", 0, "stalker", 7000) 
              stope = true 
                end 
             else 
          stope = false 
        end
    end
end

 

Тоесть, если расстояние НПС'а до ГГ меньше 4 метров, то должно сработать действие.Это действие срабатывает, но только при загрузке игры, а правильно функция работать не хочет(ни чего не происходит, если к НПС подойти) ...Не подскажете, где я мог допустить ошибку?

Изменено пользователем Stalk15

Поделиться этим сообщением


Ссылка на сообщение

_Призрак_

Функция работает один раз, но только тогда, когда игра только загрузилась, то есть идет Кlиент:Синхроризация, и как только игра загрузилась - сразу действие срабатывает.А если к неписям подходить, то ни чоё не происходит.

На счет твоего кода:Зачем второй раз восстанавливать флаг?Ведь у меня в функции уже это есть:

local stope = false
local npc = level.object_by_id(id)
function testych()
    local PosActor = db.actor:position()
     if npc and IsStalker(npc) and npc:alive() and npc.health > 0.1 then
         if npc:position():distance_to(PosActor) < 4 then 
             if not stope then 
                 news_manager.send_tip(db.actor, "Эй, чоё встал!?.", 0, "stalker", 7000) 
              stope = true --флаг-триггер(чтоб действие выполнилось только 1 раз)
                end 
             else 
          stope = false --восстановления флага, чтоб при каждом подходе к НПС срабатывало действие
        end
    end
end

 

 

Ни кто не знает, в чем проблема? :unsure:

 

max_max_08

Функцию ставлю на апдейт в actor_binder:update(delta).А вот почему функция срабатывает при запуске - не пойму, очень странно :blink:

Изменено пользователем Stalk15

Поделиться этим сообщением


Ссылка на сообщение

Byurrer

А что не понятного?Если надо заменить описание итема, например, ак-74, просто удали его и сразу же заспавни такой же, но с другим своим описанием, зарание создав второй ак-74 с новым описанием. ;)

Изменено пользователем Stalk15

Поделиться этим сообщением


Ссылка на сообщение

Вот я вывожу надпись в верхней части экрана через скрипт.Подскажите, как можно эту надпись сделать мигающей?

Поделиться этим сообщением


Ссылка на сообщение

Подскажите, как в эту функцию:

local start_timer_hud = false
local TimerHud
function testim()
local  hud = get_hud()
local wpn = db.actor:active_item()
local function timer_hud(seconds)
   TimerHud = time_global() + 1000*seconds
end 
      if isWeapon(wpn) then 
        if wpn:get_ammo_in_magazine() <= 5 then
          if not start_timer_hud then
            timer_hud(7)  -- взводим таймер паузы перед показом надписи на 1 секунду
           start_timer_hud = true
           end
      if TimerHud and TimerHud<time_global() then 
        hud:AddCustomStatic("testsss", true)
         hud:GetCustomStatic("testsss"):wnd():SetTextST("st_malo_patons")
           hud:GetCustomStatic("testsss").m_endTime = time_global()/1000 + 1  -- убираем статик на  худе через 3 секунды -в том случае, если ствол был перезаряжен.
            end 
          else
start_timer_hud = false
TimerHud = nil 
end
end
end

 

Добавить это:

        if wpn:get_ammo_in_magazine() > 5 then
      hud:RemoveCustomStatic("testsss")
            end
end

 

Пробовал так:

local start_timer_hud = false
local TimerHud
function testim()
local  hud = get_hud()
local wpn = db.actor:active_item()
local function timer_hud(seconds)
   TimerHud = time_global() + 1000*seconds
end 
      if isWeapon(wpn) then 
        if wpn:get_ammo_in_magazine() <= 5 then
          if not start_timer_hud then
            timer_hud(7)  -- взводим таймер паузы перед показом надписи на 1 секунду
           start_timer_hud = true
           end
      if TimerHud and TimerHud<time_global() then 
        hud:AddCustomStatic("testsss", true)
         hud:GetCustomStatic("testsss"):wnd():SetTextST("st_malo_patons")
            end 
          else
start_timer_hud = false
TimerHud = nil 
end
        if wpn:get_ammo_in_magazine() > 5 then
      hud:RemoveCustomStatic("testsss")
            end
end
end

 

Но так вылетает.Не подскажете, как надо правильно?

 

---------------------------------------------------------------------------------------------

кровоSTALKER

Второй енд так, от балды поставил:)

Так тоже вылетает.

Изменено пользователем Stalk15

Поделиться этим сообщением


Ссылка на сообщение

А в функциях вывода сообщения:

function bery_batareyku()
    news_manager.send_tip(db.actor, "  ", 0, "trader", 20000)
end

 

можно писать не сам текст, а просто ссылку на него, типа, как в диалогах?Если да, то где сам текст нужно будет писать?

----------------------------------------------------------------------------------------------------------------------------

Vano_Santuri

Понятно, спасибо.

Изменено пользователем Stalk15

Поделиться этим сообщением


Ссылка на сообщение

Только один момент не совсем понял:В 1 скрипте написал:

function test()
local news_text = fun_kvests.rockew
news_manager.send_tip(db.actor, news_text, 0, "trader", 20000)
end

 

А в скрипте fun_kvests это:

local rockew = "Текст!"

Но что-то не срабатывает.Может что не правильно сделал?

------------------------------------------------------------------------------------------------------------------------------------------------

Darien

Я так тоже пробовал:

local news_text = fun_kvests.rockew
function test()
news_manager.send_tip(db.actor, news_text, 0, "trader", 20000)
end

 

 

Изменено пользователем Stalk15

Поделиться этим сообщением


Ссылка на сообщение

Все, понял, спасибо.Когда текст отдельно - удобней ;)

Поделиться этим сообщением


Ссылка на сообщение

if db.actor:object("item") and db.actor:object("item2") and db.actor:object("item3") and db.actor:object("item4") then

Как такое можно упростить?

Пробовал так, но без результатно:

local items = ("item", "item2", "item3", "item4")
if db.actor:object("items") then

Поделиться этим сообщением


Ссылка на сообщение

Darien, Министр

Ладно, обойдусь длинной строчкой :)

Другой вопрос:

if npc:position():distance_to(db.actor:position()) < 3 then

Это проверка дистанции от nps до ГГ.Как сделать, чтоб проверялась дистанция, например, от первого nps до другого?

 

Такой вариант возможен?:

if npc:position():distance_to(nps2:position()) < 3 then

Естественно, два НПСа будут определены.

 

---------------------------------------------------------------------------------

Darien

Спасибо.Так легче будет.

Изменено пользователем Stalk15

Поделиться этим сообщением


Ссылка на сообщение

Unnamed Black Wolf

Как, если не секрет? :)

---------------------------------------------------------------------------

 

Подскажите, как с помощью метода get_current_outfit() определить, какой костюм одет на НПС?Id этого НПС известен.

Изменено пользователем Stalk15

Поделиться этим сообщением


Ссылка на сообщение

Я хотел сделать такое:Если на Волке одет костюм stalker_outfit, то вывести сообщение:

function drhyrd()
local npc = level_object_by_sid(006)
   local outfit = npc:item_in_slot(6)
     if outfit and outfit:section() == "stalker_outfit" then 
          news_manager.send_tip(db.actor, "stalker_outfit На Волке", 0, "freedom", 10000)
        end
end

 

Функцию ставлю на апдей, запускаю игру, игра не вылетает, но и сообщение не выводится, хотя у Волка же как раз одет stalker_outfit.Не подскажете, в чем дело?

Поделиться этим сообщением


Ссылка на сообщение

Министр

А как узнать визуал непися?

Есть метод get_current_outfit(), но я не знаю, как его правильно применить ...

Изменено пользователем Stalk15

Поделиться этим сообщением


Ссылка на сообщение

Скажите, правильно ли я проверяю группировку любого НПС?:

local npc_stalker = level.object_by_id(id)
if npc_stalker:character_community() == "stalker" then

А то если я добавлю эту проверку в свой скрипт, то действие перестает срабатывать ...Подскажите, как правильно нужно?

Поделиться этим сообщением


Ссылка на сообщение

Knight

Я функцию ставлю на апдейт.Думаю, постоянный перебор айди очень напрягает игру...

Поделиться этим сообщением


Ссылка на сообщение

DimOriN

Спасибо, надо попробовать...

 

-----------------------------

Я изпользую строку

for k, v in pairs (db.storage) do

в функции.Функция стоит на апдейте.Скажите, эта строка напрягает игру, или все "нейтрально"?

Поделиться этим сообщением


Ссылка на сообщение

Я ничайно сообщение удалил ...Вот оно:

npc_stalker:is_talking() - проверяет разговариваем ли или нет.

not npc_stalker:is_talking() - проверяет, не разговариваем ли мы.

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

 

 

Попробоал оба варианта - не получилось.Значит это из-за моего скрипта:

local talking = false
function drhyrd()   
  for k, v in pairs (db.storage) do
        local npc_stalker = level.object_by_id(k)
        if npc_stalker and IsStalker(npc_stalker) and npc_stalker:is_talking() then
           local Community = npc_stalker:character_community()
            -- talking = true
              if not talking then
            if Community and Community == "stalker" then
                       news_manager.send_tip(db.actor, "Говорим со Сталкером", 0, "freedom", 5000)
                      talking = true
                        elseif Community == "freedom" then
                           news_manager.send_tip(db.actor, "Говорим со Свободовцем", 0, "freedom", 5000)
                          talking = true
                         elseif Community == "ecolog" then
                           news_manager.send_tip(db.actor, "Говорим с Экологом", 0, "freedom", 5000)
                          talking = true
                               elseif Community == "dolg" then
                           news_manager.send_tip(db.actor, "Говорим с Долговцем", 0, "freedom", 5000)
                          talking = true
                        end
                        
                        
                   if npc_stalker and IsStalker(npc_stalker) and npc_stalker:is_talking() == false then
                     if talking then
                       talking = false
     
      end
     end
end
end
end

 

При разговоре с НПС дейсвие срабатывает, но только один раз.Хотя флаг должен восстановится, если разговора нет.Не подскажете, в чем дело?

Изменено пользователем Stalk15

Поделиться этим сообщением


Ссылка на сообщение

Министр

Спасибо за функцию, но на ней тоже флаг не восстанавливается, действие срабатывает только один раз:

local coms_text = {
stalker = "со Сталкером",
freedom = "со Свободовцем",
dolg = "с Долговцем",
ecolog = "с Экологом"
}

local stope = false
function drhyrd()
    if db.actor:is_talking() then 
        for k, v in pairs (db.storage) do
            local npc = level.object_by_id(k)
            if IsStalker(npc) and npc:is_talking() and coms_text[npc:character_community()] ~= nil then
              if not stope then
                news_manager.send_tip(db.actor, "Говорим "..coms_text[npc:character_community()], 0, "freedom", 5000)
                  stope = true
            end
            if not db.actor:is_talking() then 
            if stope then
               stope = false
        end
    end
end
end 
end 
end

 

Флаги всегда вроде работали, но в этой функции не понимаю, почему не работает.

Изменено пользователем Stalk15

Поделиться этим сообщением


Ссылка на сообщение

Министр

ты вставляешь свою проверку в усл-ие которые выполняется только когда актор разговаривает.

Вот за это спасибо :rolleyes: .Поставил вместо одного энда три - все заработало ...А теперь у меня возник вопрос:почему в этой функции после stope = true нужно ставить три энда?Как это можно опредилить, что именно три надо, обьясните кто-нибудь?Ведь если поставить один энд - игра не вылетает, типа все работает :) :

local coms_text = {
stalker = "со Сталкером",
freedom = "со Свободовцем",
dolg = "с Долговцем",
ecolog = "с Экологом"
}

local stope = false
function drhyrd()
    if db.actor:is_talking() then 
        for k, v in pairs (db.storage) do
            local npc = level.object_by_id(k)
            if IsStalker(npc) and npc:is_talking() and not stope and coms_text[npc:character_community()] ~= nil  then
            --if not stope then
                news_manager.send_tip(db.actor, "Говорим "..coms_text[npc:character_community()], 0, "freedom", 5000)
                  stope = true
            end
            end  
            end
            
              if not db.actor:is_talking() then
                if stope then
                  stope = false

        end
    end
end

 

Поделиться этим сообщением


Ссылка на сообщение

Как правильно проверить ранг ГГ.Не "цифровой" ранг, а, например, Мастер или Опытный или Новичок?

Пробовал так:

if db.actor:character_rank() == "novice" then ...

И так тоже пробовал:

if db.actor:rank() == "novice" then ...

Но не работает.

Изменено пользователем Stalk15

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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