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

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

panzyuza

Не стОит данный код распространять на все "случаи жизни" и тем более не задумываясь а почему именно так сделано. Да и каждый раз все же условия меняются.

 

Например, твоя попытка использовать (self.timer_atacks or 0) < time вполне бы сгодилась, но тогда нет смысла задавать self.timer_atacks при инициализации класса.

А вот подавление "дребезга" при входе-выходе из зоны стОит может быть усложнить, чтобы эффект все же сразу включался.

 

И собственно это не таймер, строго говоря, а по сути включаемый расширенный апдейтер с заданным периодом.

 

В общем пиши код по мере потребностей в конкретном контексте, а не копипасть не задумавшись даже сам у себя. ;-)

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Если детектор удалить\выбросить из инвентаря актора(ГГ), а затем получить его(подобрать или взять из нычки\купить\получить в награду за квест) - он автоматом "запрыгнет" в свой родной слот. Вопрос - можно-ли как-то задисэйблить слот, т.е. сделать так, что-бы он не принимал детектор при появлении его в инвентаре актора ?

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

7.9

Об этом я конечно подумал, но хотел все-же уточнить насчет других, более "прямых" (на мой взгляд) вариантов.

 

Во-первых, не нужно цитировать предыдущие посты, достаточно вписать ник-нейм.

Во-вторых, что значит "прямых", да ещё и на твой взгляд, вариантов?

ColR_iT

 

Добавлено через 182 мин.:

ColR_iT

Ну к примеру какая-то функция движка, позволяющая блокировать слот, или предмет от попадания в прописанный ему слот ?

Изменено пользователем ColR_iT
Ссылка на комментарий
Artos, в твоем случае эффект не удалялься.И даже если актор не внутри зоны, все равно каждые 18 секунд появлялись фантомы и звуки.Просто в схеме установлен радиус действия 10.Тогда нет смысла проверять актора внутри зоны.Даже если шейп рестриктора выставить 50,все равно по схеме он равен 10.Поэтому я немного подретушировал код и все теперь работает,как надо.Это из поста 4142.
Ссылка на комментарий

panzyuza

Ну раз исправил и получил желаемое - это ж хорошо!

Не имеет смысла говорить о кодах, которые только у тебя ... Для других это бесполезная информация.

А в моем примере была ошибка (писал "на коленке" и не проверял), строка:

if self.actor_inside = self.object:inside(db.actor:position()) then --/ актор в зоне?

должна быть такой:

if self.object:inside(db.actor:position()) then --/ актор в зоне?

Если же у тебя рестриктор не отрабатывает вхождение в зону - то конечно же бессмысленно применять проверки на вхождение.

 

Однако, постоянно проверять позицию актора на каждом апдейте достаточно расточительно, т.к. у тебя вероятно схема активна постоянно если твой рестриктор на локации ... СтОит подумать о вводе доп.таймера периода, зависимого от дистанции до рестриктора. Т.е. если актор далеко - проверять дистанцию пореже ... Или же манипулировать секциями логики рестриктора, активируя нужную в нужное время, а не по дефолту.

Для одиночной правки подобная заморочка может и не нужна, но если в моде немало подобного - эконимия ресурсов никогда не вредна.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Artos, хотя для новичков, вроде меня, подобные бесполезные коды могут научить правильно писать скрипты.И по вопросу.Можно конечно переключать логику рестриктора примерно так Изменено пользователем panzyuza
Ссылка на комментарий

panzyuza, под "бесполезностью" в данном контесте подразумеваю именно то, что многие (в основном новички) говоря о каких-то кодах и даже порою выкладывая кусочки из них не задумываются, что без связки всех относящихся к вопосу кодов - часто именно бессмысленно гадать или давать какие-либо ответы/советы.

"Правильность" - понятие относительно и то, что "правильно" в какой-то ситуации/случае, запросто может быть ошибочным в другой, дажеесли это "другое" очень схоже с первым.

(но это уже пошел оффтопик ... заканчиваем)

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Добрый вечер! Подскажите пожалуйста как исправить данную ошибку?

FATAL ERROR

[error]Expression    : assertion failed
[error]Function      : CUIXmlInit::InitText
[error]File          : D:\prog_repository\sources\trunk\xrGame\ui\UIXmlInit.cpp
[error]Line          : 315
[error]Description   : pTmpFont


stack trace:

 

class "selection_of_groups_ui" (CUIScriptWnd)

function selection_of_groups_ui:__init() super()
    self:InitControls()
    self:InitCallBacks()
end

function selection_of_groups_ui:__finalize() 
end

function selection_of_groups_ui:InitControls()
    self:SetWndRect(Frect():set(50,50,1024,768))

    local xml = CScriptXmlInit()
    xml:ParseFile("selection_of_groups_ui.xml")

    self:Register(xml:Init3tButton("caption", self),"caption")
    self:Register(xml:Init3tButton("btn_1", self),"btn_1")
    self:Register(xml:Init3tButton("btn_2", self),"btn_2") 
    self:Register(xml:Init3tButton("btn_3", self),"btn_3")
    self:Register(xml:Init3tButton("btn_4", self),"btn_4")
end

function selection_of_groups_ui:InitCallBacks()
    self:AddCallback("btn_1", ui_events.BUTTON_CLICKED, self.function_ui_1, self)
    self:AddCallback("btn_2", ui_events.BUTTON_CLICKED, self.function_ui_2, self)
    self:AddCallback("btn_3", ui_events.BUTTON_CLICKED, self.function_ui_3, self)
    self:AddCallback("btn_4", ui_events.BUTTON_CLICKED, self.function_ui_4, self)
end

function selection_of_groups_ui:function_ui_1()
     if db.actor:character_community() ~= "(stalker)" then
db.actor:set_character_community("stalker", 0, 0)
end
end

function selection_of_groups_ui:function_ui_2()
       if db.actor:character_community() ~= "(bandit)" then
db.actor:set_character_community("bandit", 0, 0)
end
end

function selection_of_groups_ui:function_ui_3()
      if db.actor:character_community() ~= "(dolg)" then
db.actor:set_character_community("dolg", 0, 0)
end
end

function selection_of_groups_ui:function_ui_4()
       if db.actor:character_community() ~= "(freedom)" then
db.actor:set_character_community("freedom", 0, 0)
end
end

 

Без указания версии игры и используемого шаблона selection_of_groups_ui.xml гадай самостоятельно или на пару с кашнировским. --/Artos

[x]

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

такая вот проблема возникла...когда попытался вывести окно после использования предмета. Делал на моде Lost World Trops of Doom 2.4

в bind_stalker создаю два колбека

self.object:set_callback(callback.host, nil)

и

self.object:set_callback(callback.host, self.use_mps_big, self)

 

потом пишу функцию

function actor_binder:on_item_drop (obj)
    level_tasks.proceed(self.object)
    terrorizm.li(obj)        
    lwc_inventory.ItemDrop(obj)
end
-----МОЯ_ФУНКЦИЯ-----
function actor_binder:use_mps_big(obj)
  main_map_use.main_map_use_2(obj)
end

 

в main_map_use вот это

function main_map_use_2(obj)
   if obj ~= nil then
      if obj:section() == "map_big" then
       local hud = map_big_ui(get_hud())
         level.start_stop_menu(hud, true)
    end
    end
end
class "map_big_ui" (CUIScriptWnd)
function map_big_ui:__init(owner) super()
    self.owner = owner
    self:InitControls()
    self:InitCallBacks()
end
function map_big_ui:InitControls()
    self:Init(50,50,550,450)
    local xml = CScriptXmlInit()
    xml:ParseFile("ui_map_self.xml")
    xml:InitStatic("background", self)
    self:Register(xml:Init3tButton("caption", self),"caption")
    self:Register(xml:Init3tButton("btn_quit", self),"btn_quit") 
end
functionmap_big_ui:InitCallBacks()
    self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.on_quit, self)
end
functionmap_big_ui:OnKeyboard(dik, keyboard_action)
    CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
    if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
    end
    return true
end
function map_big_ui:check_game() -- проверка запущена ли игра
    local check = false
    if level.present() and (db.actor ~= nil) and db.actor:alive() then
        check = true
    end
    return check
end
function map_big_ui:on_quit()
    self:GetHolder():start_stop_menu(self, true)
    alife():create("sleep_bag", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end

 

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

подскажите что я сделал не так....

заранее благодарен!

 

Используй тэг спойлера для портянок кодов. --/Artos

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

Сталкер в душе - сталкер по жизни!

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

temakonkin, а с чего ты взял, что движек игры поймет придуманный тобою callback.host ?

Все коллбэки, который понимает движек игры упомянуты в lua_help.script в классе коллбэка (class callback).

Для использования (юзания) предметов предусмотрен коллбэк callback.use_object.

Как подключить и использовать такой коллбэк (use_object) - смотри хоть в кодах ЗП, хоть в модах, хоть в статьях на вики-сайтах.

 

и ... создаешь ты не два коллбэка и функцию, а добавляешь в класс биндера актора один коллбэк и две записи о нем, в которых ты его от(под)ключаешь.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos благодарю за быстрый ответ!!!

 

я только учусь, так что спасибо на счёт того что имена колбеков зарезервированы(так я понимаю?) я не знал! Если не знаешь - читай статьи и ФАКи! --/Artos

полетел дальше эксперементировать...

 

[x]

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

Сталкер в душе - сталкер по жизни!

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

selection_of_groups_ui.XML

<?xml version="1.0" encoding="windows-1251" ?>

<main>
    <background x="0" y="0" width="400" height="340" stretch="1">
        <texture x="0" y="0" width="350" height="460">ui\ui_actor_sleep_screen</texture>
    </background>

    <caption x="175" y="30" width="50" height="35">
        <text>Выберете группировку:</text>
    </caption>

    <btn_1 x="72" y="80" width="256" height="35">
    <texture_e>ui\ui_btn_mm_e</texture_e>
    <texture_t>ui\ui_btn_mm_t</texture_t>
    <texture_h>ui\ui_btn_mm_h</texture_h>
        <text>"Нейтралы"</text>
    </btn_1>

    <btn_2 x="72" y="130" width="256" height="35">
    <texture_e>ui\ui_btn_mm_e</texture_e>
    <texture_t>ui\ui_btn_mm_t</texture_t>
    <texture_h>ui\ui_btn_mm_h</texture_h>
        <text>"Бандиты"</text>
    </btn_2>

    <btn_3 x="72" y="180" width="256" height="35">
    <texture_e>ui\ui_btn_mm_e</texture_e>
    <texture_t>ui\ui_btn_mm_t</texture_t>
    <texture_h>ui\ui_btn_mm_h</texture_h>
        <text>"Долг"</text>
    </btn_3>

    <btn_4 x="72" y="230" width="256" height="35">
    <texture_e>ui\ui_btn_mm_e</texture_e>
    <texture_t>ui\ui_btn_mm_t</texture_t>
    <texture_h>ui\ui_btn_mm_h</texture_h>
        <text>"Свобода"</text>
    </btn_4>
    
</main>

selection_of_groups_ui_mod.sctipt

class "selection_of_groups_ui" (CUIScriptWnd)

function selection_of_groups_ui:__init() super()
    self:InitControls()
    self:InitCallBacks()
end

function selection_of_groups_ui:__finalize() 
end

function selection_of_groups_ui:InitControls()
    self:SetWndRect(Frect():set(50,50,1024,768))

    local xml = CScriptXmlInit()
    xml:ParseFile("selection_of_groups_ui.xml")

    xml:InitStatic("background", self) -- рамка сзади

    self:Register(xml:Init3tButton("caption", self),"caption")
    self:Register(xml:Init3tButton("btn_1", self),"btn_1")
    self:Register(xml:Init3tButton("btn_2", self),"btn_2")
    self:Register(xml:Init3tButton("btn_3", self),"btn_3")
    self:Register(xml:Init3tButton("btn_4", self),"btn_4")
end

function selection_of_groups_ui:InitCallBacks()
    self:AddCallback("btn_1", ui_events.BUTTON_CLICKED, self.function_ui_1, self)
    self:AddCallback("btn_2", ui_events.BUTTON_CLICKED, self.function_ui_2, self)
    self:AddCallback("btn_3", ui_events.BUTTON_CLICKED, self.function_ui_3, self)
    self:AddCallback("btn_4", ui_events.BUTTON_CLICKED, self.function_ui_4, self)
end

function selection_of_groups_ui:function_ui_1()
     if db.actor:character_community() ~= "(stalker)" then
db.actor:set_character_community("stalker", 0, 0)
end
end

function selection_of_groups_ui:function_ui_2()
       if db.actor:character_community() ~= "(bandit)" then
db.actor:set_character_community("bandit", 0, 0)
end
end

function selection_of_groups_ui:function_ui_3()
      if db.actor:character_community() ~= "(dolg)" then
db.actor:set_character_community("dolg", 0, 0)
end
end

function selection_of_groups_ui:function_ui_4()
       if db.actor:character_community() ~= "(freedom)" then
db.actor:set_character_community("freedom", 0, 0)
end
end

FATAL ERROR

[error]Expression    : assertion failed
[error]Function      : CUIXmlInit::InitText
[error]File          : D:\prog_repository\sources\trunk\xrGame\ui\UIXmlInit.cpp
[error]Line          : 315
[error]Description   : pTmpFont


stack trace:

 

Версия игры ЗП 1.6.00.

Изменено пользователем ColR_iT
Пишем покомпактнее, пожалуйста.
Ссылка на комментарий

Вопрос о фиксации объектов после спауна: скриптово создаю объект, ящик с динамитом, с размещением его на земле (локация Кордон) прям перед входом к Сидоровичу (для тестирования). После создания пытаюсь его фиксировать (пример кода взял здесь-же, на форуме):

if object then
    local pshell = object:get_physics_shell()
    if  pshell then 
        local element = pshell:get_element_by_order(0)
        if element then 
            element:fix()
local text = "попытка фиксации"
news_manager.send_tip(db.actor, text, nil, nil, 30000)
        end
    end
end

сообщение появляется, значит ф-ция element:fix() вроде как отрабатывает.

Но если после создания предмета сохраниться, а затем загрузиться - предмет исчезает, точнее становится невидимым. Если подойти затем к нему и посмотреть на него (зная точно место, где он должен быть), он "проявляется", т.е. визуально появляется на месте спауна. Что надо исправить, чтоб предмет спаунился нормально ?

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

Здравия желаю. Подскажите пожалуйста как при входе в рестриктор поменять погоду? Пытался сделать функцией level.set_weather("indoor"), но в логе пишет:

!Invalid weather name "indoor".

 

Пытался поменять вот так:

Логика:

[logic]
active = sr_idle@in

[sr_idle@in]
on_actor_in_zone = agr_sr_weather_indoor | sr_idle@out %=change_weather()%

[sr_idle@out]
on_actor_not_in_zone = agr_sr_weather_indoor | sr_idle@in

 

Функция:

function change_weather()
level.set_weather("indoor")
end

 

Но следует выше описанный лог. Подскажите, как можно всё-таки изменить погоду при входе в скрипт?

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

P.S.: платформа - ЗП.

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

zoidberg123456789, ну тут по логу же всё ясно. Погоды с названием indoor нету.

В ЗП название погоды соотв. названию .ltx файла с ней.

Тоесть в конфигах открой папку с погодой (только учти, их там две. Одна старая от ТЧ и не используется (для СДК видимо))

"gamedata\configs\environment\weathers\"

И глянь правильное название погоды.

___

Глянул сам, в ЗП вроде есть такая погода (indoor.ltx), но лог ругается именно на её отсутствие. Лучше перепроверь у себя файлы. Я смотрел по файлам из ЗП СДК.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

zoidberg123456789, а зачем изобретать велосипед? Не проще ли взглянуть на уже готовое(!) из исходной игры и почитав комменты от разрабов сделать по аналогии или даже просто использовать готовый рабочий код?

Смотрим в xr_effects.script:

--'-----------------------------------------------------------------------------------
--' Функции для работы с погодными эффектами
--'-----------------------------------------------------------------------------------

-- Принудительная установка погодных условий
-- =set_weather(<секция погоды>:true) - установка погоды сразу, false - через некоторое время
-- Будет использоваться на старте игры Зов Припяти и в сцене jup_b15 - утро после пьянки с Зулусом
function set_weather(actor, npc, p)
  if(p[1]) then
    if(p[2]=="true") then
      level.set_weather(p[1],true)
    else
      level.set_weather(p[1],false)
    end
  end
end

В данном случае выставляются все необходимые аргументы для вызова функции смены погоды (чего ты у себя не делаешь!).

Если у тебя погода не меняется - проверяй свой 'погодный' файл конфига.

 

И ... подбирайте все же соответствующий вопросу топик, место такому вопросу в топике по ковыряниям именно CoP.

 

Добавлено через 6 мин.:

AndreySol, вероятно следует покопаться с параметром object_flags заспавненного объекта ... раз используешь на базе инвентарного ящика.

 

Добавлено через 4 мин.:

Tris, твой простенький код и конфиг к нему полностью рабочие, а вот ошибка вероятно возникает из-за неправильного вызова окна (вызова твоего оконного класса) о чем мы можем только гадать.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos

Вызывал так:

function actor_binder:net_spawn(data)
selection_of_groups_ui_mod.get_hud_mod()

selection_of_groups_ui_mod:

function get_hud_mod()
if db.actor:alive() then 
groups_ui = this.selection_of_groups_ui()
groups_ui:ShowDialog(true)
end
end

 

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

Tris, мда-а-а ... вам бы матчасть почитать и не бездумно чего то писать в скрипты, а хотя бы понимать то, чято пишется.

 

ну и что означает(?) ваше:

function actor_binder:net_spawn(data)
  selection_of_groups_ui_mod.get_hud_mod()

На кой ... впустую создавать объект класса? И нафига это вообще при спавне актора? :shok:

 

Ну а this.selection_of_groups_ui() - говорит о том, что вы не понимаете пока разницы между классом и метатаблицей скрипта/функции.

Делайте хотя бы так, как в оригинальных кодах игры ... и посмотрите как вызываются методы из классов и что такое 'this' и когда применяется.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos

object_flags - нашел это только в Вашем модуле нет-пакетов. Подскажите как этот параметр влияет на объект. И как его правильно использовать.

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

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

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

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

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

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

Войти

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

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

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