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

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

Oxygenium, а где сама функция?

function give_weapon_to_actor (trader, actor)
   dialogs.relocate_item_section(trader, "wpn_pm", "in")
   dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in")
   dialogs.relocate_item_section(trader, "wpn_addon_silencer", "in")
   dialogs.relocate_item_section(trader, "wpn_knife", "in") 

   dialogs.relocate_item_section(trader, "wpn_hk53", "in")
       dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
       dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
       dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
             dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
       dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
       dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
   dialogs.relocate_item_section(trader, "wpn_aug_a3", "in")
         dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
       dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
       dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
       dialogs.relocate_item_section(trader, "wpn_sig552", "in")
         dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
       dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
       dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
dialogs.relocate_item_section(trader, "sigaret", "in")
dialogs.relocate_item_section(trader, "sigaret", "in")
dialogs.relocate_item_section(trader, "sigaret", "in")
dialogs.relocate_item_section(trader, "sigaret", "in")
dialogs.relocate_item_section(trader, "sigaret", "in")
dialogs.relocate_item_section(trader, "sigaret", "in")
end

забыто и уничтожено.
Ссылка на комментарий

Oxygenium, в логе сказано, что ошибка произошла из-за сравнения какого-то числа с nil. Так что по идее, передача вещей не причем.

 

lexer125, название аргументов (или как там их) ничего не меняет. Тем более в оригинале (trader, actor).

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

попробуй

if npc_stalker:is_talking()==false

 

p.s.

if npc_stalker:is_talking() then
   --тут код, если мы общаемся
else
   --тут если не общаемся
end

 

блин, не красиво удалять сообщения ^_^

Как будто написал "вникуда"

 

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

Untitled-1.png

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

там может ошибка в написание какого-нить предмета или отсутствия .... Так-что проверяй.

Ещё странно, если это ТЧ, а это ТЧ, т.к. функция говорит об этом. То откуда в диалог менджере 393 строка ? Хотелось на нее взглянуть....

В оригинале там кажись 370 строк кажись, и чуть поболее...

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

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

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

Stalk15,

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

function ololo()
    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
                news_manager.send_tip(db.actor, "Говорим "..coms_text[npc_stalker:character_community()], 0, "freedom", 5000)
            end
        end
    end
end

 

Ф-ию использовать в апдейте бинд_сталкера. Работает нормально, кроме одного но - при разговоре сообщение присылается постоянно, но это исправить легко, можно сделать тот же флаг. Думаю ты разберешься.

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

Народ подсобите пожайлуста :russian_ru: . Нужно заспавненого скриптом персонажа в зове припяти увести в офлайн после получения определённого инфо_пошня. Как это осуществить, ума не приложу (опыта не хватат). Методами теней чернобыля не получается. Секция spawner в логике нцп вообще отказалась на чо либо влиять. На сталкер вики смотрел но это мне не помогло :wacko2: .

Заранее спасибо.


Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу.

 

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

Министр

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

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

Stalk15,

Во-первых: ты делаешь проверку на то, что актор не разговаривает в данный момент и если она проходит, то присваиваешь переменной stope false, все бы нормально, если не опять одно "но" - ты вставляешь свою проверку в усл-ие которые выполняется только когда актор разговаривает. И поэтому ничего удивительного, что вся конструкция у тебя выполняется только один раз.

 

Во-вторых: не надо делать без особой надобности усл-ия в усл-ях, например, тот же код:

if IsStalker(npc) and npc:is_talking() and coms_text[npc:character_community()] ~= nil then
  if not stope then...

Можно представить в виде одной строки:

if IsStalker(npc) and npc:is_talking() and not stope and coms_text[npc:character_community()] ~= nil  then...

 

По-моему так более читабельно, хотя решать тебе, это всего-лишь совет. :)

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

Министр

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

Вот за это спасибо :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
Ссылка на комментарий

Stalk15,попробуй

if ranks.get_obj_rank_name(db.actor)=="novice" then ...

 

Проверку коммьюнити нпс, с которым разговариваешь, можно попробовать повесить на выдачу инфопорции ui_talk.

Выдается при открытии диалогового окна.

 

Биндер актора зависает?

А если попробовать инициализацию звуковых объектов по функциям распихать.

local tbl={путь1,путь2,путь3,..,путь8}

function lyayawwe()
local j=math.random(1,4)
local snd_obj = xr_sound.get_safe_sound_object(tbl[j])
snd_obj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
--или одной строкой
--xr_sound.get_safe_sound_object(tbl[math.random(1,4)]):play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
end

function lyayawwewew()
local j=math.random(5,8)
local snd_obj = xr_sound.get_safe_sound_object(tbl[j])
snd_obj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
end

 

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

Charsi

Спасибо, работает.

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

У меня вопрос:

Тут давали функцию для определения визуала НПС:

function egegege()
local se_obj = alife():object(id) -- , где id айдишник непися
local t = amk.read_stalker_params(se_obj)
if t ~= nil then
    local vis = t.visual
    vis = amk.str_explode("\\",vis)
    vis = vis[3] -- теперь vis есть визуал объекта
get_console():execute(vis)
end
end

Я вызываю эту функцию через диалог, но ни чего не происходит и в логе ни чего не появляется, хотя должно.Что я делаю не так?

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

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

P.s. Министр, я надеюсь, что ты не будешь опять меня минусить, ведь я учусь скриптингу и спрашиваю знающих людей, а мне за это репу портят, и прям обидно как-то стало.

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

SkyLoader,

Каждая непись и так эксклюзивна, и пока она жива - никто не займёт её место, даже имея выше приоритет в списках работ. Мой вам совет - делайте нормальные, а не скриптовые гулаги. Потом споткнётесь, но падать будете долго и мучительно. Да и не зачем напрягать память игры тем, что можно сделать так, чтобы её вообще не использовать.

Еще 10 лет таких цен, зарплат и пенсий, и вместо переписи населения будет перекличка

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

Arhara, мне надо хотя бы назначить его на любой гулаг. Я получал название гулага по функции get_npc_gulag(obj) (если еще .name дописать). Пробовал addobject(obj) - он стал нилить работу гулага, пробовал в get_npc_gulag имя сменить - я думал, что если для непися сменить имя гулага, то он на другой пойдет :), не вышло.

В лагере новичков эксклюзивными являются Волк и Фанат, а остальные - обычные. Разве не так?

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

В лагере новичков Волк и Фанат кроме того что эксклюзивные занимают работу предназначенную только для них

А остальные просто эксклюзивные т.к у них в алл спавне прописанно выделенное

 

[137]

; cse_abstract properties

section_name = stalker

name = esc_lager1

position = -209.067367553711,-19.7512016296387,-132.083114624023

direction = 0.062321275472641,0.00316426996141672,0.0140644172206521

 

; cse_alife_trader_abstract properties

money = 5000

character_profile = esc_stalker_novice

 

; cse_alife_object properties

game_vertex_id = 61

distance = 9.80000019073486

level_vertex_id = 43968

object_flags = 0xffffffbf

custom_data = <<END

[smart_terrains]

esc_lager = true

[spawn]

conserva

END

 

; cse_visual properties

visual_name = actors\novice\green_stalker_2

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 1

g_group = 5

health = 1

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 1

upd:timestamp = 0x617a6b75

upd:creature_flags = 0x6b

upd:position = -209.067367553711,-19.7512016296387,-132.083114624023

upd:o_model = 0

upd:o_torso = 0.00316426996141672,0.062321275472641,0

upd:g_team = 0

upd:g_squad = 1

upd:g_group = 5

 

; cse_alife_monster_abstract properties

 

upd:next_game_vertex_id = 65535

upd:prev_game_vertex_id = 65535

upd:distance_from_point = 0

upd:distance_to_point = 0

 

; cse_alife_human_abstract properties

predicate5 = 2,2,0,1,1

predicate4 = 0,2,0,2

 

; cse_ph_skeleton properties

 

upd:start_dialog =

 

; se_stalker properties

 

 

 

ЗЫ Я удалял выделенное в алл спавне и неписи прекрасно занимают работы только гулаг уже не является для них эксклюзивным

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

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

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

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

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

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

Войти

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

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

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