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

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

AndreySol, именно БУДУ придираться к словам в вопросах заданным подобным образом.

Если ты считаешь, что отвечающий все должен переварить, понять и ответить, то я и не считаю так и, как куратор, против лишних погадалок/споров в топике о том, что и не спрашивается.

Ответ не "по делу" от Капрал Хикс, тому пример ...

 

1. Коллбэки выполняются в отдельных потоках и никак не связаны с апдейтом актора.

2. Если заспавнишь предметы в одном вызове некоей функции или трансфер-функции, то и сработает коллбэк на появление у актора этих объектов для КАЖДОГО объекта в отдельности и конечно же разнесенными по времени (которым можно пренебречь в твоем случае).

Причем порядок спавна объектов не обязательно повторяется в порядке срабатывания коллбэка на эти предметы.

3. Если будешь ловить эти коллбэки - то вероятность, что они будут в одном цикле апдейта актора довольно высока, т.е. по сути 100%.

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

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

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

Доброго времени суток.

Подскажите, пожалуйста, что не так в этом скрипте:

function change_item_loc()
    for a=1,65534 do
        local obj = alife():object(a)
        if obj then
            if obj:section_name()=="bread" then
                local pos=obj:position()
                local gv=obj:game_vertex_id()
                local lv=obj:level_vertex_id()
                alife():release(obj, true)
                alife():create("kolbasa",pos,gv,lv)
                break 
            end 
        end 
    end
end

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

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: No such operator defined

 

Если это важно - скрипт пытался активировать из диалога с НПС...

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

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

Карусель-карусель - это радость для нас, прокатись на нашей ка-ру-се-ли!
-=Krovosos Mod=- 4.0 Final для S.T.A.L.K.E.R. SHoC 1.0004 (336 Мб): Мод

Финальный патч для -=Krovosos Mod=- (1 Мб): Патч

Адаптация -=Krovosos Mod=- под S.T.A.L.K.E.R. SHoC 1.0006 (1 Мб): Адаптация

Ссылка на комментарий
-=Krovosos=-: скрипт пытался активировать из диалога с НПС...

Скорее всего очередная "придирка" к словам будет ключем к ответу:

1. Почему функцию ты называешь скриптом? Что значит "из диалога активирую скрипт"?

2. Если эта функция и есть все, что имеется в некоем my_script.script. то неплохо бы было и это упомянуть ...

3. Если из диалога вызываешь типа так: <action>my_script.change_item_loc</action> и ранее этот твой скрипт (my_script) не был где-либо в кодах инициализирован, т.е. не включен в глобальную метатаблицу _G, то удивляться вылету не стОит.

 

Варианты лечения:

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

б) перед диалогом или даже в начале игры просто инициализируй свой скрипт типа: if my_script then return end , что занесет твой скрипт-файл вместе с функцией в глобальную таблицу _G ифункция станет доступной из диалогов.

 

P.S. Ниже KD87 дал как минимум еще одну причину твоей ошибки.

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

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

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

-=Krovosos=-, с помощью alife():object(a) ты получаешь серверный объект энтити. А методы position(), game_vertex_id(), level_vertex_id() - это методы клиентских объектов, к серверным они не могут быть применены. Получить соответствующие параметры серверного объекта можно через его свойства, то есть примерно так:

                local pos=obj.position
                local gv=obj.m_game_vertex_id
                local lv=obj.m_level_vertex_id

В общем, всегда сверяйся с lua_help.script.

Опять же, не претендую на объяснение вылета. Но тем не менее, описанная ошибка имеет место быть.

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

Народ!!!!

Нужна помощь гуру!

Сам в скриптах полный ноль, и поэтому прошу помощи у вас.

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

Как мне сделать запуск анимации?

Это сдвигающаяся каменная стена, мне нужно чтоб анимация отработала по команде например с кодового устройства, или допустим при попадании непися в спейс рестриктор.

Платформа ЗП.

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

Пару страниц назад писал о вылете при удалении аномалий в ЧН:

001B:067D486E xrGame.dll
001B:067D49D9 xrGame.dll
001B:0682EEE1 xrGame.dll

 

Пока смог обнаружить что вылет происходит тока при удалении какой то из грави-аномалий (ещё не определился какой\каких)

Решил проверить теорию, что вылет происходит из за рестрикторов. Удалил все трупы на локации (животных\монстров)

Но вылет остался.

Пошёл дальше - удалил всё живое на локации.

Вылет пропал.

 

Сам я в рестрикторы НПС ничего не добавляю, есть ли у кого нить идеи из за чего это может быть ещё?

 

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

 

И как вообще определить что аномалия у кого то прописана в рестриктор? Я так понял, судя по нет-пакетам, у НПС одновременно тока 1 in и 1 out может быть?

Если я переберу всех НПС и проверю их in\out рестрикторы на совпадение с аномалией (я так понял там хранится id аномалии\рестриктора же?), то теоретически я могу определить из за какого\каких НПС происходит вылет?

 

ЗЫ: Ради интереса, вчера убил несколько сталкеров в электре (грави не проверил), чтобы их трупы остались там, удалил потом аномалию, загрузился - вылета небыло.... хотя по идее НПС-у должен был присвоится in-рестриктор если верить Artos-у и при удалении аномалии - вызвать вылет без лога, если я ничего не путаю конечно.

 

ЗЫЫ: Ещё пробовал не удалять сразу аномалии, а просто их выключать, а удалять уже при последующей загрузке игры - аналогичный вылет.

 

Дополнение:

Протестировал сейчас все 3 грави аномалии. Убил в них и сталкера и монстра, удалил аномалию, сделал сохранение, загрузился - всё пучком, всё работает -_-

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

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

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

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

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

 

Я старался, чтобы написать script здесь

 

он будет работать

 

PS Я не русский так извините за мой плохой язык

local npc = {

mar_clear_sky_respawn_1 = mar_clear_sky_respawn_1_counter

mar_clear_sky_respawn_2 = mar_clear_sky_respawn_2_counter

mar_clear_sky_respawn_3 = mar_clear_sky_respawn_3_counter

}

local npc_spawn_data = {

mar_clear_sky_respawn_1 = -61.996055603027, 0.92057931423187, 293.67742919922, game_vertex_id = 3402, level_vertex_id = 106182

mar_clear_sky_respawn_2 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134

mar_clear_sky_respawn_3 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134

}

local npc_respawn_counter = {

mar_clear_sky_respawn_1_counter = 3

mar_ clear_sky_respawn_2_counter = 5

mar_clear_sky_respawn_3_counter = 2

}







local npc_spawn = Respawn_NPC()

function start()

    npc_spawn:LoadConfig()

end



class "Respawn_NPC"



function Respawn_NPC:__init()

    self.init_done = false



    self.respawn_npc_tabel = nil

    self.respawn_counter = nil

    self.respawn_counter_name = nil

    self.respawn_npc = nil

    self.respawn_npc_point = nil



    self.respawn_timer = 0

    if level.name() ~= "marsh" then

        self.enabled = false

    else

        self.enabled = true

        self:LoadConfig()

    end

    self.init_done = true

end



function Respawn_NPC:__finalize()

    self.init_done = nil

    self.enabled = nil

    self.respawn_counter = nil

    self.respawn_npc_tabel = nil

    self.respawn_counter_name = nil

    self.respawn_npc = nil

    self.respawn_npc_point = nil

end



function Respawn_NPC:LoadConfig()

        self.respawn_npc .. "_" .. count = 0

        local npc_1 = npc

        local npc_respawn_counter_1 = npc_respawn_counter

        local npc_spawn_data_1 = npc_spawn_data



        self.respawn_counter = {}

        self.respawn_counter_name = {}

        self.respawn_npc = {}

        self.respawn_npc_point = {}



        for k,v in pairs ("npc_1")do

            self.respawn_npc(k)

            self.respawn_counter_name(v)

        end

        for k,v in pairs("npc_respawn_counter_1") do 

                if k == respawn_counter_name then

                self.respawn_counter(v)

            end            

        end

        for k,v in pairs("npc_spawn_data_1") do 

            if k == respawn_npc then

                if respawn_npc .. "_" .. count < respawn_counter then

                self.respawn_npc_point(v)

                else 

                return

                end                    

            end

        end

end



function Respawn_NPC:Timer()

    if respawn_timer == false then 

    if respawn_timer == 0 then 

              respawn_timer = level.get_time_hours() + math.random(3, 4) 

              if respawn_timer > 23 then respawn_timer = respawn_timer - 24 end

        end

    if db.actor:alive() then

            if level.get_time_hours() > respawn_timer then

                respawn_timer = 0

        respawn_timer_a = true

        end

    end

end



function Respawn_NPC:Spawn_NPC(respawn_counter_ltx, respawn_npc_point)

    if respawn_timer_a == true then

    if respawn_timer == 0 then

    if not respawn_counter and not respawn_npc_point then

        return false

        end

    end

    self.respawn_npc_tabel = {}

    if npc_respawn_counter < respawn_counter then

    self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point)

    respawn_npc_tabel[spwan.id] = true

    end

end





function Respawn_NPC:Counter(respawn_npc_tabel)

if not respawn_npc_tabel then

    return false

end



local obj,count,tbl_cnt = nil,0,#respawn_npc_tabel 

for k,v in pairs(respawn_npc_tabel) do

obj = alife():object(k)

if obj == nil then

v = nil   

respawn_npc .. "_" .. count = respawn_npc .. "_" .. count - 1

end

end

    if respawn_npc .. "_" .. count < respawn_counter  then

        respawn_timer = false 

            respawn_timer = 0   

    end

end

 

 

If you possess the English, then write on it yet, so it will be easier for you to understand.

ColR_iT

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

Вопрос по перезарядке оружия. Для примера, имеем в руках ПМ с полной обоймой обычных патронов и в инвентаре полную пачку обычных и полную пачку бронебойных.

Добавил в 'on_item_drop' и в 'on_item_take' вывод сообщений на худ, и выявил следующее - при перезарядке с обычного боеприпаса на бронебойный приходит 1 сообщение из 'on_item_drop' о потере пачки бронебойных патронов. А при перезарядке обратно, с бронебойных на обычные - 1 сообщение из 'on_item_take' о получении пачки бронебойных патронов.

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

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

AndreySol, отчего таие странные предположения?

Неужели ты думаешь, что разработчики игры всего лишь для подзарядки оружия готовы удалять один объект и спавнить вместо него другой? Для чего такие затраты, если всего лишь берется подходящий объект - пачка патронов и из него изымаетется столько, сколько требуется для полного магазина/обоймы. Остальное остается в пачке (объекте). Вот если кол-во в пачке останется 0, то тогда и будет удален этот объект-пачка и будут браться из следующего, если для подзарядки не хватило.

Соответственно коллбэки срабатывают по появлению или исчезновению у актора пачек ...

 

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

*Shoker*, так и не хочешь читать полностью написанное и хотя бы самому проверять ...

*Shoker*: Я так понял, судя по нет-пакетам, у НПС одновременно тока 1 in и 1 out может быть?
И из чего такой вывод? Из того, что этих параметров (dynamic_in_restrictions,dynamic_out_restrictions) в нет-пакетах у неписей всего по одному? А то, что в одной строке могут быть перечислены десятки имен - недоступно для понимания? Ведь и посмотреть мог бы сам (коды были указаны) сколько же там может быть перечислено имен рестрикторов. Чаще всего далеко не одно.

*Shoker*: ... если верить Artos-у и при удалении аномалии - вызвать вылет без лога, если я ничего не путаю конечно.

Ты не путаешь, а глаголишь тебе желаемое и далекое от мною сказанного:

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

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

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

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

Всем добрый день . У меня возник такой вопрос : а можно ли как нибудь адаптировать sgm v 2.1. под повелитель зоны .

Мне чит режим В sgm конечно понравился, но в нём нельзя спаунить сталкеров и монстров .P.S. Если написал не в эту тему,то подскажите куда писать,а то я на форуме еще новичок .

 

"Как нибудь адаптировать" конечно же можно, но ...

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

Если будешь адаптировать и не будет что-то получаться - задавай вопросы,

ну а если ждешь что кто-то тебе сделает - проси, например, в "Свободное общение для мододелов и модолюбителей".

--/Artos

Изменено пользователем Artos
Ссылка на комментарий
если всего лишь берется подходящий объект - пачка патронов и из него изымаетется столько, сколько требуется для полного магазина/обоймы. Остальное остается в пачке (объекте).

Тогда откуда вообще сообщения 'on_item_drop' и 'on_item_take' если пачки полные - по 20 патронов, а в ПМ берется всего по 8 патронов ?

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

AndreySol

Когда перезаряжаешь - разряжаемые патроны спавнятся (->on_take!) пачкой (полной иль нет) в рюкзак актору.

Если кол-во патрон в пачке заряжаемых патронов меньше чем требуется для полной зарядки - опустевшая пачка удаляется (->on_drop!).

B вообще, если у тебя в рюкзаке десяток пачек по 1 (одному) патрону - то подзарядка может дать десяток срабатываний коллбэка on_drop.

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

 

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

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

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

Ссылка на комментарий
Если уверен (откуда такая уверенность?), что берется из полной пачки(20) всего 8 патронов - то никак не может быть on_drop
Не на 100%, буду еще тестить.

 

разряжаемые патроны спавнятся (on_take!) пачкой (полной иль нет) в рюкзак актору
А ведь не спавнятся ! Нет сообщения. Может движок их дополняет в подходящую неполную пачку ?
Ссылка на комментарий

Я как бы сам хотел адаптировать его , но не знаю как,поскольку никаких инструкций по адаптации нет . Вот и решил спросить .

 

Настоятельно рекомендую ознакомиться с правилами форума и соблюдать их.

Оверквотинг (чрезмерное цитирование) - наказуемы.

--/Artos

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

Макс Болт, и не может быть инструкций по адаптации для каждого иминимода под каждый сторонний мод.

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

Ссылки имеются и в шапке топика и в различных ФАКах по игре в инете.

 

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

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

Ну а по 100% - вот когда уверен - тогда и спрашивай, а погадалки не стОит устраивать.

Ведь проверить то просто и быстро - выкинь все патроны и заспавни (иль возьми заведомо полную) 1 (одну) пачку - и смотри, будет ли on_drop при перезарядке.

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

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

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

Сделал проверку - в инвентаре 1 пачка обычных с 18 патронами и 1 пачка бронебойных с 20 патронами, в магазине ПМ - 8 патронов. При смене типа патрона получил сообщение 'on_item_take', после чего в инвентаре оказалось две пачки обычных патронов - с 20 и с 6 патронами соответственно, и пачка бронебойных с 12 патронами. Получается движок дополнил существующую пачку до полной и создал еще пачку с остатком, а при взятии патронов из инвентаря действительно берет из подходящей пачки, пока она не кончится.

Ссылка на комментарий
3. Если из диалога вызываешь типа так: <action>my_script.change_item_loc</action> и ранее этот твой скрипт (my_script) не был где-либо в кодах инициализирован, т.е. не включен в глобальную метатаблицу _G, то удивляться вылету не стОит.

 

Варианты лечения:

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

б) перед диалогом или даже в начале игры просто инициализируй свой скрипт типа: if my_script then return end , что занесет твой скрипт-файл вместе с функцией в глобальную таблицу _G ифункция станет доступной из диалогов.

 

Эмм, или я только что узнал ранее мне неведомое, или я чего-то не понял. Разве должен быть вылет при таком обращении к функции из диалога? У меня его не происходит.

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

Если то, что вы сказали, правда, то почему у меня не происходит вылета?

Да кстати сам генератор диалога лежит в файле скрипта, первое упоминание о котором игра встречает, когда возникает надобность начать диалог с соответствующим НПС (я не в курсе когда именно происходит генерация - при нажатии "F - говорить" с НПС, или при его входе в онлайн)

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Zander_driver, у меня нет желания разжевывать сказанное. Если чего-то не понял по тому, что тэги из xml-диалогов читаются движком напрямую, а не через скрипты, и то, что обращение идет не к собственно скрипту, а к его (скрипта) таблице в метатаблице _G, которая может быть еще не подключена ... то есть ли причина тебе заморачиваться с этим если не имеешь проблем? Вот когда может быть столкнешься - вспомнишь.

 

Ну а аргументация в стиле "а у меня (не)работает" - изначально порочна применительно и к Сталкеру и к подобным играм/приложениям.

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

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

У вас нет желания разжевывать - ваше право.

Однако у меня есть желание вникать и разбираться...

 

Если я правильно понял, получается так:

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

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

Имеются в виду методы AddAction, AddPrecondition.

 

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

Верно или нет мое предположение... ?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
Zander_driver: Однако у меня есть желание вникать и разбираться...

(без желания задеть/обидеть) Заметь, что желание то ты имеешь, но ты НЕ разбираешься и не вникаешь, а именно ждешь, когда кто-то тебе растолкует до состояния, когда ты или поймешь или примешь на веру. А пока довольствуешься по сути эмперическим опытом (работает - ну и ладно).

Если же имеешь желание именно разобраться, то следует все же по чистому Lua поштудировать мануалы.

Ведь исходные данные у тебя есть:

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

- принимаем на веру (если не верится - проверяй сам), что драфт диалога из xml-конфига читается и выполняется движком напрямую (из _G), т.е. без обращения (инициализации) сторонних скриптов.

- любой скрипт-файл, просто помещенный в папку скриптов, НЕ попадает в метатаблицу _G сам по себе ...

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

Ну а чтобы "и впредь избегать" - например я, пошел по иному пути, т.е. при старте игры проверяю в папке скриптов все файлы (исключая заведомо непотребные), тем самым инициализируя их заранее (включая в _G) и исключая запуск игры с синтаксическими ошибками ... Может быть и неоптимально с точки зрения ресурсов, но позволяет не задумываться ни об ошибках в синтаксисе ни о непроинициализированных скриптах/функциях, что для постоянно изменяющегся мода достатосно весомый (ИМХО) агрумент.

 

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

P.S.

Zander_driver: Когда же диалог генерируется скриптом, и скриптом же вставляется в него экшен, то вызываемая функция в вышеописанном скрипте находиться не обязана, а может быть в любом скрипте.
Конечно же необязательно, и не только для скриптовых диалогов! Важно чтобы в созданном драфте диалога были ссылки на файлы/функции, которые при обращении по этим ссылкам были заведомо доступны через _G (о чем и разговор идет выше), т.е. этот твой "любой" файл должен быть подключен к игре. Изменено пользователем Artos

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

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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