Stalk15 27 Опубликовано 2 Июля 2010 (изменено) Вот смотрите, есть функция: 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 метров, то должно сработать действие.Это действие срабатывает, но только при загрузке игры, а правильно функция работать не хочет(ни чего не происходит, если к НПС подойти) ...Не подскажете, где я мог допустить ошибку? Изменено 2 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 2 Июля 2010 (изменено) _Призрак_ Функция работает один раз, но только тогда, когда игра только загрузилась, то есть идет К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 Ни кто не знает, в чем проблема? max_max_08 Функцию ставлю на апдейт в actor_binder:update(delta).А вот почему функция срабатывает при запуске - не пойму, очень странно Изменено 3 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 4 Июля 2010 (изменено) Byurrer А что не понятного?Если надо заменить описание итема, например, ак-74, просто удали его и сразу же заспавни такой же, но с другим своим описанием, зарание создав второй ак-74 с новым описанием. Изменено 4 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 5 Июля 2010 Вот я вывожу надпись в верхней части экрана через скрипт.Подскажите, как можно эту надпись сделать мигающей? Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 7 Июля 2010 (изменено) Подскажите, как в эту функцию: 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 Второй енд так, от балды поставил Так тоже вылетает. Изменено 7 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 13 Июля 2010 (изменено) А в функциях вывода сообщения: function bery_batareyku() news_manager.send_tip(db.actor, " ", 0, "trader", 20000) end можно писать не сам текст, а просто ссылку на него, типа, как в диалогах?Если да, то где сам текст нужно будет писать? ---------------------------------------------------------------------------------------------------------------------------- Vano_Santuri Понятно, спасибо. Изменено 13 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 13 Июля 2010 (изменено) Только один момент не совсем понял:В 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 Изменено 13 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 13 Июля 2010 Все, понял, спасибо.Когда текст отдельно - удобней Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 23 Июля 2010 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 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 23 Июля 2010 (изменено) Darien, Министр Ладно, обойдусь длинной строчкой Другой вопрос: if npc:position():distance_to(db.actor:position()) < 3 then Это проверка дистанции от nps до ГГ.Как сделать, чтоб проверялась дистанция, например, от первого nps до другого? Такой вариант возможен?: if npc:position():distance_to(nps2:position()) < 3 then Естественно, два НПСа будут определены. --------------------------------------------------------------------------------- Darien Спасибо.Так легче будет. Изменено 23 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 23 Июля 2010 (изменено) Unnamed Black Wolf Как, если не секрет? --------------------------------------------------------------------------- Подскажите, как с помощью метода get_current_outfit() определить, какой костюм одет на НПС?Id этого НПС известен. Изменено 23 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 24 Июля 2010 Я хотел сделать такое:Если на Волке одет костюм 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.Не подскажете, в чем дело? Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 24 Июля 2010 (изменено) Министр А как узнать визуал непися? Есть метод get_current_outfit(), но я не знаю, как его правильно применить ... Изменено 24 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 24 Июля 2010 Скажите, правильно ли я проверяю группировку любого НПС?: local npc_stalker = level.object_by_id(id) if npc_stalker:character_community() == "stalker" then А то если я добавлю эту проверку в свой скрипт, то действие перестает срабатывать ...Подскажите, как правильно нужно? Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 26 Июля 2010 Knight Я функцию ставлю на апдейт.Думаю, постоянный перебор айди очень напрягает игру... Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 26 Июля 2010 DimOriN Спасибо, надо попробовать... ----------------------------- Я изпользую строку for k, v in pairs (db.storage) do в функции.Функция стоит на апдейте.Скажите, эта строка напрягает игру, или все "нейтрально"? Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 26 Июля 2010 (изменено) Я ничайно сообщение удалил ...Вот оно: 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 При разговоре с НПС дейсвие срабатывает, но только один раз.Хотя флаг должен восстановится, если разговора нет.Не подскажете, в чем дело? Изменено 26 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 26 Июля 2010 (изменено) Министр Спасибо за функцию, но на ней тоже флаг не восстанавливается, действие срабатывает только один раз: 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 Флаги всегда вроде работали, но в этой функции не понимаю, почему не работает. Изменено 26 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 27 Июля 2010 Министр ты вставляешь свою проверку в усл-ие которые выполняется только когда актор разговаривает. Вот за это спасибо .Поставил вместо одного энда три - все заработало ...А теперь у меня возник вопрос:почему в этой функции после 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 Поделиться этим сообщением Ссылка на сообщение
Stalk15 27 Опубликовано 27 Июля 2010 (изменено) Как правильно проверить ранг ГГ.Не "цифровой" ранг, а, например, Мастер или Опытный или Новичок? Пробовал так: if db.actor:character_rank() == "novice" then ... И так тоже пробовал: if db.actor:rank() == "novice" then ... Но не работает. Изменено 27 Июля 2010 пользователем Stalk15 Поделиться этим сообщением Ссылка на сообщение