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

[SoC] Ковыряемся в файлах


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

elfog

Простой alife():create тут не спасет, надо в нет-пакете в момент спавна поковыряться.

Например вот так: (взято из старой темы давным-давно, автора к сожалению не помню, не со всеми аномалиями работает 100% корректно, но с какими именно - тоже не помню)

function an_spawn(anom_name,plosh,position,level_vertex_id,game_vertex_id,powers_a,time_d

angeros)

local con = get_console()

local obj = alife():create(anom_name,position,level_vertex_id,game_vertex_id)

local pac = net_packet()

obj:STATE_Write(pac)

local game_vertex_id = pac:r_u16()

local distance = pac:r_float()

local direction = pac:r_u32()

local level_vertex_id = pac:r_u32()

local object_flags = pac:r_s32()

local custom_data = pac:r_stringZ()

local story_id = pac:r_s32()

local spawn_story_id = pac:r_s32()

local shape_count = pac:r_u8()

for i=1,shape_count do

local shape_type = pac:r_u8()

if shape_type == 0 then

local center = pac:r_vec3()

local plosh = pac:r_float()

else

local box = pac:r_matrix()

end

end

local restrikror_type = pac:r_u8()

local powers = pac:r_float()

local owner_id = pac:r_s32()

local on_off_mode_enabled_time = pac:r_u32()

local on_off_mode_disabled_time = pac:r_u32()

local on_off_mode_shift_time = pac:r_u32()

local offline_interactive_radius = pac:r_float()

local artefact_spawn_places_count = pac:r_u16()

local artefact_position_offset = pac:r_s32()

local last_spawn_time_present = pac:r_u8()

if pac:r_elapsed()~= 0 then

-- abort("left=%d",pac:r_elapsed())

end

pac:w_begin(game_vertex_id)

pac:w_float(distance)

pac:w_u32(direction)

pac:w_u32(level_vertex_id)

pac:w_u32(object_flags)

pac:w_stringZ(custom_data)

pac:w_s32(story_id)

pac:w_s32(spawn_story_id)

pac:w_u8(1)

pac:w_u8(0)

local sphere_center = vector()

sphere_center:set(0,0,0)

pac:w_vec3(sphere_center)

pac:w_float(plosh)

pac:w_u8(restrikror_type)

if powers_a ~= nil then

powers = powers_a

end

pac:w_float(powers)

if time_dangeros == nil then

owner_id = bit_not(0)

else

owner_id = time_dangeros

end

pac:w_u32(owner_id)

pac:w_u32(on_off_mode_enabled_time)

pac:w_u32(on_off_mode_disabled_time)

pac:w_u32(on_off_mode_shift_time)

pac:w_float(offline_interactive_radius)

pac:w_u16(artefact_spawn_places_count)

pac:w_u32(artefact_position_offset)

pac:w_u8(last_spawn_time_present)

pac:r_seek(0)

obj:STATE_Read(pac,pac:w_tell())

return obj

end

 

 

 

Ирбис

Содержимое ящиков, из которых выпадает стабильно одно и то же, зашито в алл.спавне, в секциях самих этих ящиков.

Нестабильные ящики редактируются в config\misc\ph_box_....ltx (4 файла, аналогичные death_....ltx), но подробно не вникал.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Братья Сталкеры!!!

Уж простите что задаю сей вопрос не проситав всю тему (может подобный вопрос уже был), но просто на работе нет возможности прочитать её всю.

Вопрос:

Каким образом неписям можно присвоить свои имена? Тоисть, насколько я понимаю в файлах character_desc_.....xml прописаны сами неписи, а вот где находяться их имена и как их можно заменить на свои?

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

Буду примного благодарен за подробную инструкцию!!!

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

crezyhohol, лучше менять имена только для тех сталкеров, которые спавнятся в одном экземпляре.

Описания есть в папке /config/text/rus. Там как для не уникальных есть специальный генератор имен (большое количество

сталкеров имеют однотипный конфиг). Поэтому если ты не хочешь иметь кучу "Васек Резаных" лучше

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

уже пишешь его уникальное имя.

Изменено пользователем AK-103

Intel Centrino Mobile (Dual-core) T2700 2,328 GHz, Intel GMA 945GM, 2x1024 MB DDR2-667, WD Scorpio 1200BEVS

Microsoft Windows 7 Professional N + Novell Linux 11.2 (OpenSUSE) Dual boot

S.T.A.L.K.E.R. SHOC 1.0004 + AMK 1.4.1 + NS3 + NLC3 + Arsenal + Arsenal beta +New weapons

 

Опытный американский дробовик XM1014 =O

Хозяйке на заметку: Не спешите выбрасывать чеку от использованной гранаты Ф-1 или РГД-5 - с её помощью можно легко и удобно прикрепить игрушечного пингвинчика к своему рюкзаку. © not me

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

Вот наконец-то руки дошли

 

-- инициализация

class "spawner" (CUIScriptWnd)

 

-- инициализируем элементы интерфейса и каллбаки

function spawner:__init(owner) super()

self.owner = owner

self:InitControls()

self:InitCallBacks()

end

 

function spawner:__finalize()

 

end

 

function spawner:InitControls()

self:SetWndRect (Frect():set(0,0,1000,1000))

 

-- файл-описатель наших элементов

local xml = CScriptXmlInit()

xml:ParseFile("ui_anomalii_menu.xml")

 

-- видео на заднем плане

xml:InitStatic("back_video", self)

 

-- рамка

xml:InitStatic("background", self)

 

-- кнопки

self:Register(xml:Init3tButton("btn_zone_mincer_weak", self),"btn_zone_mincer_weak")

 

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

-- кнопка выхода

self:Register(xml:Init3tButton("btn_quit", self),"btn_quit")

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

 

xml:InitStatic("Info", self)

 

 

end

 

function spawner:InitCallBacks()

 

 

self:AddCallback("btn_zone_mincer_weak", ui_events.BUTTON_CLICKED, self.spawn_zone_mincer_weak, self)

 

self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.on_quit, self)

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

self:AddCallback("btn_back", ui_events.BUTTON_CLICKED, self.on_back, self)

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

 

end

 

-- сразу создадим ф-ию для выхода

function spawner:on_quit()

-- убираем наше окно, показываем предыдущее (или возвращаемся в игру)

local console = get_console()

self:GetHolder():start_stop_menu (self.owner, true)

self:GetHolder():start_stop_menu (self,true)

self.owner:Show (true)

-- скрытие главного меню только если запущена игра

if self:check_game() then

console:execute("main_menu off")

end

end

 

-- spawn_item - необходимый предмет

-- dist - радиус появления (случайно)

function spawner:spawn_item(spawn_item, dist)

-- спавним только в игре

if self:check_game() then

-- self:on_quit()

local pos = db.actor:position()

local dir = db.actor:direction()

pos = pos:add(dir:mul(dist))

alife():create(spawn_item, pos, 1, db.actor:game_vertex_id())

end

end

 

function spawner:spawn_item_inv(spawn_item)

-- спавним только в игре

if self:check_game() then

-- self:on_quit()

alife():create (spawn_item, db.actor:position(), db.actor:level_vertex_id(),

db.actor:game_vertex_id(), db.actor:id())

end

end

 

function spawner:check_game()

-- возвращает true если запущена игра

local check = false

if level.present() and (db.actor ~= nil) and db.actor:alive() then

check = true

end

return check

end

 

function spawner:spawn_zone_mincer_weak()

 

self:spawn_item("zone_mincer_weak", 3)

end

 

---------------------Back------------------

function spawner:on_back()

-- если еще ни разу не вызывали, то обозначим наш новый скрипт

if self.ui_spawnerdlg == nil then

self.ui_spawner_dlg = ui_spawner.spawner()

self.ui_spawner_dlg.owner = self

 

 

end

-- останавливаем родительский элемент, запускаем свой, но родителя показываем.

self:GetHolder():start_stop_menu(self.ui_spawner_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

 

Что здесь не так?

 

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

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

morda. cod4 player

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

elfog

Как уже было сказано, спавнить через create аномалию без правки пакетов нельзя. Спавни через функцию, которую выложил Kirag, с передачей параметров.

Если непонятно, что передавать, то поясню -

anom_name - название аномалии

plosh - радиус аномалии

position - позиция по x y z, передавать вот так - vector():set(x, y, z)

level_vertex_id - левел вертекс

game_vertex_id - гейм вертекс

powers_a - мощность аномалии

time_dangeros - это передавать необязательно, пользы от него я не заметил.

 

Вот пример такого вызова:

anoms.an_spawn("zone_witches_galantine", 4, vector():set(100, -20, 50) , 16437, 16, 1)

 

Собсно, тоже самое я писал в теме КоП на предпоследней странице.

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

Я спавню через спавн меню, которое вызывается походу игры через F1. Мне надо чтобы аномалия спавнилась в нескольких метрах от ГГ. Значит position не подходит - аномалия будет спавнится каждый раз в одном и том-же месте.

 

За радиус появления предмета (аномалии), наверное отвечают эти строки

 

-- spawn_item - необходимый предмет

-- dist - радиус появления (случайно)

function spawner:spawn_item(spawn_item, dist)

-- спавним только в игре

if self:check_game() then

-- self:on_quit()

local pos = db.actor:position()

local dir = db.actor:direction()

pos = pos:add(dir:mul(dist))

alife():create(spawn_item, pos, 1, db.actor:game_vertex_id())

end

end

 

function spawner:spawn_item_inv(spawn_item)

-- спавним только в игре

if self:check_game() then

-- self:on_quit()

alife():create (spawn_item, db.actor:position(), db.actor:level_vertex_id(),

db.actor:game_vertex_id(), db.actor:id())

end

end

 

function spawner:check_game()

-- возвращает true если запущена игра

local check = false

if level.present() and (db.actor ~= nil) and db.actor:alive() then

check = true

end

return check

end

 

 

И ссылку на теорию по вертексам можно?

morda. cod4 player

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

Сталкеры, подскажите, пожалуйста, как сделать так, чтобы после каждого выброса в определенных мною местах, спаунилось определенное колличество каких-нибудь монстров?

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

elfog

 

Ну, приступим. Не знаю, что за спавн-мод у тебя стоит, но не важно, работаем с тем, что есть :)

 

Ты создал функцию

function spawner:spawn_zone_mincer_weak()
    self:spawn_item("zone_mincer_weak", 3)
end

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

Обрати внимание, что параметры спавна - секция объекта и расстояние перед носом актора, на котором появится объект - задаются прямо здесь. Вот здесь же и зададим все остальные нужные аномалии параметры. Первым делом убираем из нее строку self:spawn_item("zone_mincer_weak", 3) - спавнить будем другой функцией: an_spawn(anom_name,plosh,position,level_vertex_id,game_vertex_id,powers_a,time_d

angeros)

 

Пойдем по пунктам:

anom_name - секция аномалии, в данном случае "zone_mincer_weak"

plosh - радиус аномалии - поставь метра 4, больше не стоит, меньше бессмысленно - "карусель" толком не сработает.

position - ты хочешь спавнить в N метрах перед носом. Значит,

position = vector():mad(db.actor:position(),db.actor:direction(),N)

Само собой, ставить N меньше радиуса аномалии неразумно.

level_vertex_id - левел вертекс. Ставим от актора: level_vertex_id = db.actor:level_vertex_id()

game_vertex_id - гейм вертекс. Ставим от актора: game_vertex_id = db.actor:game_vertex_id()

powers_a - сила аномалии. Для гарантированного летального исхода (как по описанию) ставь 500.

time_dangeros - хрен его знает, зачем оно. Ставь nil и не заморачивайся.

 

 

Теперь собираем все вместе, и заодно проверяем, что игра запущена:

function spawner:spawn_zone_mincer_weak()
    if self:check_game() then
        local anom_name = "zone_mincer_weak"
        local plosh = 4
        local distance = plosh + 4 -- расстояние до границы аномалии
        local position = vector():mad(db.actor:position(),db.actor:direction(),distance)
        local level_vertex_id = db.actor:level_vertex_id()
        local game_vertex_id = db.actor:game_vertex_id()
        local powers_a = 500
        an_spawn(anom_name,plosh,position,level_vertex_id,game_vertex_id,powers_a,time_danger
os)
    end
end

 

 

И в самом конце файла впиши функцию спавна, что я давал. Должно заработать.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Kirag

Небольшая поправочка. Аномалии zone_mincer_weak в ЗП нету. Я проверил все файлы аномалии, вот такая табличка существующих у меня вышла:

local zones_mine = {
    "zone_mine_acidic", -- зелёный пар с кислотой
    "zone_buzz", -- тоже кислота
    "zone_mine_electric", -- электра, только видно хуже (как в 'Железном лесу')
    "zone_witches_galantine", -- электра из тч
    "zone_mine_gravitational_strong", -- ну тут понятно
    "zone_mine_thermal", -- жарка
    "zone_zharka_static" -- тоже самое
}

Также есть ещё и поля (4 вида), не атакуют, но придают эффект при приближении.

 

Vano_Santuri

Всё это конечно хорошо, только смысла от этих weak, average и strong в этом случае нету. Ведь сила аномалии и радиус и так указываются скриптом.

 

Тфу блин, тема то по ТЧ. Kirag извиняюсь за ложную поправку.

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

Может мою табличку посмотришь?

 

local anomalies = {"zone_mine_acidic_weak","zone_mine_acidic_average","zone_mine_acidic_strong",
"zone_mine_acidic_big","zone_mine_chemical_weak","zone_mine_chemical_average","zone_mine_chemical_strong",
"zone_buzz_weak","zone_buzz_average","zone_buzz_strong","zone_mine_electric_weak","zone_mine_electric_average",
"zone_mine_electric_strong","zone_witches_galantine_weak","zone_witches_galantine_average","zone_witches_galantine_strong",
"zone_mine_gravitational_average","zone_mine_gravitational_weak","zone_mine_gravitational_big","zone_gravi_zone",
"zone_mine_thermal_weak","zone_mine_thermal_average","zone_mine_thermal_strong","zone_mine_steam_weak",
"zone_mine_steam_average","zone_mine_steam_strong","zone_zharka_static_weak","zone_zharka_static_average",
"zone_zharka_static_strong"}

Ну как?

Что-то кончается, что-то начинается...

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

Я походу уже всех утомил, но что писать в an_spawn. Просто у меня снова встал вопрос с position.

Можете привести конкретный пример для zone_mincer_weak значениями, а не

an_spawn(anom_name,plosh,position,level_vertex_id,game_vertex_id,powers_a,time_danger
os)

 

 

Ворос № 2, что делать со строкой

self:AddCallback("btn_zone_mincer_weak", ui_events.BUTTON_CLICKED, self.spawn_zone_mincer_weak, self)

morda. cod4 player

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

Darien В ЗП, возможно, аномалии другие, я в нем не копался, но тема ж про ТЧ! По умолчанию, и вопрос считаем про ТЧ.

 

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

В переводе на русский, с моими цифрами, результат выполнения функции "spawner:spawn_zone_mincer_weak()

" будет следующий: "заспавнить аномалию "zone_mincer_weak" радиусом 4 метра и мощностью 500 у.е. перед носом актора так, чтобы ближайший край аномалии был от него на расстоянии 4 метра" Если хочешь все то же самое, но в одну строчку, это будет выглядеть так:

an_spawn("zone_mincer_weak",4,vector():mad(db.actor:position(),db.actor:direction(),8),db.actor:level_vertex_id(),db.actor:game_vertex_id(),500,nil)

 

 

По второму вопросу - хоть я и плохо понимаю в создании меню, но по-моему тут все нормально, оставь ее как есть. Эта строка гласит "при нажатии на кнопку "btn_zone_mincer_weak" выполнить функцию "spawner:spawn_zone_mincer_weak()

" "

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Kirag, Сделал, вроде, всё как надо

function spawner:spawn_zone_mincer_weak()
    if self:check_game() then
        local anom_name = "zone_mincer_weak"
        local plosh = 4
        local distance = plosh = 4 -- расстояние до границы аномалии
        local position = vector():mad(db.actor:position(),db.actor:direction(),8)
        local level_vertex_id = db.actor:level_vertex_id()
        local game_vertex_id = db.actor:game_vertex_id()
        local powers_a = 500
        an_spawn("zone_mincer_weak",4,vector():mad(db.actor:position(),db.actor:direction(),8),db.actor:level_vertex_id(),db.actor:game_vertex_id(),500,nil)
    end
end

 

 

Но,увы, при нажатии на вкладку "аномалии" происходит вылет с логом

 

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...adow of chernobyl\gamedata\scripts\ui_spawner.script:419: attempt to index global 'ui_anomalii_menu' (a nil value)

 

Где ui_spawner.script - описатель всех меню, хотя там всё правильно т.к. до новой функции меню работало нормально.

Судя по логу ошибка в 419 строке

 

function spawner:OnButton_anomalii_menu()
                           if self.ui_anomalii_menu_dlg == nil then
        self.ui_anomalii_menu_dlg = ui_anomalii_menu.spawner()          ---  419 строка
        self.ui_anomalii_menu_dlg.owner = self

                end
    self:GetHolder():start_stop_menu(self.ui_anomalii_menu_dlg, true)
    self:GetHolder():start_stop_menu(self, true)
    self:Show(false)

end

 

Что я накосячил либо не учёл?

 

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

 

Кстати стоит ли выкладывать адаптированное под АМК 1.4.1. спавн меню, если да то надо ли создавать для этого отдельную тему в мастерской ТЧ? (Если заработает то даже с аномалиями)

 

atom mod (spwnermod) + FIX для AMK 1.4.1.

 

Кроме того что оно просто адаптировано лля АМК, я ещё и ввёл изменения ------>>>

 

Оружие:

Изменил названия на те что в АМК

Добавил Огнемёт

Исправил спавн Грозы (кнопка была, но не более)

 

AMK:

Спальный мешок

Рюкзак

GPS метка

Элитный детектор аномалий

Канистра

Баллон

 

Еда:

Добавил пиво :)

 

Разное:

Добавил гитару и гармошку

 

Монстры:

 

Исправил спавн собаки (вместо нее спавнилась защита от пси воздействия)

Кот

Излом

Тушкан

Полтергейст

Химера

Зомби

Ворона

Бюрер

Электро Химера

Огненный Полтергейст

Пси Собака

 

Костюмы:

Заменил старые(нерабочие) костюмы на нормальные.

Добавил Скат-10

 

Добавил уникльную броню и оружие.

 

Добавил все артефакты из амк.

 

Добавил спавн всех предметов в радиусе 1-5 метров от ГГ.

 

 

 

Остальное осталось тем же (оружие, медикаменты, боеприпасы, НПС, автомобили...)

 

ВНИМАНИЕ!!! Мод затрагивает ui_main_menu.script, system.ltx и добавляет автомобили.

 

 

 

 

 

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

morda. cod4 player

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

elfog

Если вот эта строка у тебя должна вызывать спавн аномалии, то замени её

self.ui_anomalii_menu_dlg = ui_anomalii_menu.spawner()

На вот эту

self.ui_anomalii_menu_dlg = ui_anomalii_menu.spawn_zone_mincer_weak()

 

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

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

Darien, Скоро совсем запутаюсь. Итак...

 

в ui_spawner могут быть интересны строки: конец строк self:register.... ,конец строк self:addcallback... и самый почти самый конец, где фигурирует функция function spawner:OnButton_anomalii_menu()...

 

Извеняюсь что очень много

 

function spawner:OnButton_anomalii_menu()

 

-- Atom mod: micromod (Сборка 1)

 

-- инициализация

class "spawner" (CUIScriptWnd)

 

-- инициализируем элементы интерфейса и каллбаки

function spawner:__init(owner) super()

self.owner = owner

self:InitControls()

self:InitCallBacks()

end

 

function spawner:__finalize()

 

end

 

function spawner:InitControls()

self:SetWndRect (Frect():set(50,50,1000,1000))

 

-- файл-описатель наших элементов

local xml = CScriptXmlInit()

xml:ParseFile("ui_atom_mod.xml")

 

-- видео на заднем плане

xml:InitStatic("back_video", self)

 

-- рамка

xml:InitStatic("background", self)

 

xml:InitStatic("Info", self)

 

-- кнопки

self:Register(xml:Init3tButton("btn_ammo_menu", self),"btn_ammo_menu")

self:Register(xml:Init3tButton("btn_art_menu", self),"btn_art_menu")

self:Register(xml:Init3tButton("btn_eat_menu", self),"btn_eat_menu")

self:Register(xml:Init3tButton("btn_medic_menu", self),"btn_medic_menu")

self:Register(xml:Init3tButton("btn_misc_menu", self),"btn_misc_menu")

self:Register(xml:Init3tButton("btn_monster_menu", self),"btn_monster_menu")

self:Register(xml:Init3tButton("btn_outfit_menu", self),"btn_outfit_menu")

self:Register(xml:Init3tButton("btn_people_menu", self),"btn_people_menu")

self:Register(xml:Init3tButton("btn_vehicles_menu", self),"btn_vehicles_menu")

self:Register(xml:Init3tButton("btn_weapon_menu", self),"btn_weapon_menu")

self:Register(xml:Init3tButton("btn_amk_menu", self),"btn_amk_menu")

self:Register(xml:Init3tButton("btn_amkart_menu", self),"btn_amkart_menu")

self:Register(xml:Init3tButton("btn_unique_menu", self),"btn_unique_menu")

 

self:Register(xml:Init3tButton("btn_ammo_menu_out", self),"btn_ammo_menu_out")

self:Register(xml:Init3tButton("btn_art_menu_out", self),"btn_art_menu_out")

self:Register(xml:Init3tButton("btn_eat_menu_out", self),"btn_eat_menu_out")

self:Register(xml:Init3tButton("btn_medic_menu_out", self),"btn_medic_menu_out")

self:Register(xml:Init3tButton("btn_misc_menu_out", self),"btn_misc_menu_out")

self:Register(xml:Init3tButton("btn_outfit_menu_out", self),"btn_outfit_menu_out")

self:Register(xml:Init3tButton("btn_weapon_menu_out", self),"btn_weapon_menu_out")

self:Register(xml:Init3tButton("btn_amk_menu_out", self),"btn_amk_menu_out")

self:Register(xml:Init3tButton("btn_amkart_menu_out", self),"btn_amkart_menu_out")

self:Register(xml:Init3tButton("btn_unique_menu_out", self),"btn_unique_menu_out")

self:Register(xml:Init3tButton("btn_anomalii_menu", self),"btn_anomalii_menu")

 

self:Register(xml:Init3tButton("btn_quit", self),"btn_quit")

end

 

function spawner:InitCallBacks()

-- тут интерактивные элементы, при определенном действии выполняется заданная ф-ия

self:AddCallback("btn_ammo_menu", ui_events.BUTTON_CLICKED, self.OnButton_ammo_menu, self)

self:AddCallback("btn_art_menu", ui_events.BUTTON_CLICKED, self.OnButton_art_menu, self)

self:AddCallback("btn_eat_menu", ui_events.BUTTON_CLICKED, self.OnButton_eat_menu, self)

self:AddCallback("btn_medic_menu", ui_events.BUTTON_CLICKED, self.OnButton_medic_menu, self)

self:AddCallback("btn_misc_menu", ui_events.BUTTON_CLICKED, self.OnButton_misc_menu, self)

self:AddCallback("btn_monster_menu", ui_events.BUTTON_CLICKED, self.OnButton_monster_menu, self)

self:AddCallback("btn_outfit_menu", ui_events.BUTTON_CLICKED, self.OnButton_outfit_menu, self)

self:AddCallback("btn_people_menu", ui_events.BUTTON_CLICKED, self.OnButton_people_menu, self)

self:AddCallback("btn_vehicles_menu", ui_events.BUTTON_CLICKED, self.OnButton_vehicles_menu, self)

self:AddCallback("btn_weapon_menu", ui_events.BUTTON_CLICKED, self.OnButton_weapon_menu, self)

self:AddCallback("btn_amk_menu", ui_events.BUTTON_CLICKED, self.OnButton_amk_menu, self)

self:AddCallback("btn_amkart_menu", ui_events.BUTTON_CLICKED, self.OnButton_amkart_menu, self)

self:AddCallback("btn_unique_menu", ui_events.BUTTON_CLICKED, self.OnButton_unique_menu, self)

 

self:AddCallback("btn_ammo_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_ammo_menu_out, self)

self:AddCallback("btn_art_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_art_menu_out, self)

self:AddCallback("btn_eat_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_eat_menu_out, self)

self:AddCallback("btn_medic_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_medic_menu_out, self)

self:AddCallback("btn_misc_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_misc_menu_out, self)

self:AddCallback("btn_outfit_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_outfit_menu_out, self)

self:AddCallback("btn_weapon_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_weapon_menu_out, self)

self:AddCallback("btn_amk_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_amk_menu_out, self)

self:AddCallback("btn_amkart_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_amkart_menu_out, self)

self:AddCallback("btn_unique_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_unique_menu_out, self)

self:AddCallback("btn_anomalii_menu", ui_events.BUTTON_CLICKED, self.OnButton_anomalii_menu, self)

 

 

 

---quit---

self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.on_quit, self)

 

end

 

-- сразу создадим ф-ию для выхода

function spawner:on_quit()

-- убираем наше окно, показываем предыдущее (или возвращаемся в игру)

local console = get_console()

self:GetHolder():start_stop_menu (self.owner, true)

self:GetHolder():start_stop_menu (self,true)

self.owner:Show (true)

-- скрытие главного меню только если запущена игра

if self:check_game() then

console:execute("main_menu off")

end

end

 

-- spawn_item - необходимый предмет

-- dist - радиус появления (случайно)

function spawner:spawn_item(spawn_item, dist)

-- спавним только в игре

if self:check_game() then

-- self:on_quit()

alife():create (spawn_item, db.actor:position(), db.actor:level_vertex_id(),

db.actor:game_vertex_id(), db.actor:id())

end

end

 

function spawner:spawn_item_inv(spawn_item)

-- спавним только в игре

if self:check_game() then

-- self:on_quit()

local pos = db.actor:position()

local dir = db.actor:direction()

pos = pos:add(dir:mul(dist))

alife():create(spawn_item, pos, 1, db.actor:game_vertex_id())

end

end

 

function spawner:check_game()

-- возвращает true если запущена игра

local check = false

if level.present() and (db.actor ~= nil) and db.actor:alive() then

check = true

end

return check

end

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

function spawner:OnButton_weapon_menu()

if self.ui_weapon_menu_dlg == nil then

self.ui_weapon_menu_dlg = ui_weapon_menu.spawner()

self.ui_weapon_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_weapon_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_ammo_menu()

if self.ui_ammo_menu_dlg == nil then

self.ui_ammo_menu_dlg = ui_ammo_menu.spawner()

self.ui_ammo_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_ammo_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_eat_menu()

if self.ui_eat_menu_dlg == nil then

self.ui_eat_menu_dlg = ui_eat_menu.spawner()

self.ui_eat_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_eat_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_art_menu()

if self.ui_art_menu_dlg == nil then

self.ui_art_menu_dlg = ui_art_menu.spawner()

self.ui_art_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_art_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

function spawner:OnButton_medic_menu()

if self.ui_medic_menu_dlg == nil then

self.ui_medic_menu_dlg = ui_medic_menu.spawner()

self.ui_medic_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_medic_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_people_menu()

if self.ui_people_menu_dlg == nil then

self.ui_people_menu_dlg = ui_people_menu.spawner()

self.ui_people_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_people_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_monster_menu()

if self.ui_monster_menu_dlg == nil then

self.ui_monster_menu_dlg = ui_monster_menu.spawner()

self.ui_monster_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_monster_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_vehicles_menu()

if self.ui_vehicles_menu_dlg == nil then

self.ui_vehicles_menu_dlg = ui_vehicles_menu.spawner()

self.ui_vehicles_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_vehicles_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_outfit_menu()

if self.ui_outfit_menu_dlg == nil then

self.ui_outfit_menu_dlg = ui_outfit_menu.spawner()

self.ui_outfit_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_outfit_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_misc_menu()

if self.ui_misc_menu_dlg == nil then

self.ui_misc_menu_dlg = ui_misc_menu.spawner()

self.ui_misc_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_misc_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_amk_menu()

if self.ui_amk_menu_dlg == nil then

self.ui_amk_menu_dlg = ui_amk_menu.spawner()

self.ui_amk_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_amk_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_amkart_menu()

if self.ui_amkart_menu_dlg == nil then

self.ui_amkart_menu_dlg = ui_amkart_menu.spawner()

self.ui_amkart_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_amkart_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_unique_menu()

if self.ui_unique_menu_dlg == nil then

self.ui_unique_menu_dlg = ui_unique_menu.spawner()

self.ui_unique_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_unique_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

 

 

function spawner:OnButton_weapon_menu_out()

if self.ui_weapon_menu_out_dlg == nil then

self.ui_weapon_menu_out_dlg = ui_weapon_menu_out.spawner()

self.ui_weapon_menu_out_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_weapon_menu_out_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_ammo_menu_out()

if self.ui_ammo_menu_out_dlg == nil then

self.ui_ammo_menu_out_dlg = ui_ammo_menu_out.spawner()

self.ui_ammo_menu_out_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_ammo_menu_out_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_eat_menu_out()

if self.ui_eat_menu_out_dlg == nil then

self.ui_eat_menu_out_dlg = ui_eat_menu_out.spawner()

self.ui_eat_menu_out_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_eat_menu_out_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_art_menu_out()

if self.ui_art_menu_out_dlg == nil then

self.ui_art_menu_out_dlg = ui_art_menu_out.spawner()

self.ui_art_menu_out_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_art_menu_out_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

function spawner:OnButton_medic_menu_out()

if self.ui_medic_menu_out_dlg == nil then

self.ui_medic_menu_out_dlg = ui_medic_menu_out.spawner()

self.ui_medic_menu_out_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_medic_menu_out_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_outfit_menu_out()

if self.ui_outfit_menu_out_dlg == nil then

self.ui_outfit_menu_out_dlg = ui_outfit_menu_out.spawner()

self.ui_outfit_menu_out_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_outfit_menu_out_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_misc_menu_out()

if self.ui_misc_menu_dlg == nil then

self.ui_misc_menu_out_dlg = ui_misc_menu_out.spawner()

self.ui_misc_menu_out_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_misc_menu_out_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_amk_menu_out()

if self.ui_amk_menu_out_dlg == nil then

self.ui_amk_menu_out_dlg = ui_amk_menu_out.spawner()

self.ui_amk_menu_out_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_amk_menu_out_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_amkart_menu_out()

if self.ui_amkart_menu_out_dlg == nil then

self.ui_amkart_menu_out_dlg = ui_amkart_menu_out.spawner()

self.ui_amkart_menu_out_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_amkart_menu_out_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_unique_menu_out()

if self.ui_unique_menu_out_dlg == nil then

self.ui_unique_menu_out_dlg = ui_unique_menu_out.spawner()

self.ui_unique_menu_out_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_unique_menu_out_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

function spawner:OnButton_anomalii_menu()

if self.ui_anomalii_menu_dlg == nil then

self.ui_anomalii_menu_dlg = ui_anomalii_menu.spawner()

self.ui_anomalii_menu_dlg.owner = self

 

end

self:GetHolder():start_stop_menu(self.ui_anomalii_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

 

 

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

function spawner:OnButton_next_menu()

-- если еще ни разу не вызывали, то обозначим наш новый скрипт

if self.ui_spawner_menu_dlg == nil then

self.ui_spawner_menu_dlg = ui_spawner_menu.spawner()

self.ui_spawner_menu_dlg.owner = self

 

 

end

-- останавливаем родительский элемент, запускаем свой, но родителя показываем.

self:GetHolder():start_stop_menu(self.ui_spawner_menu_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

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

 

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

 

 

 

А так же ui_anomalii_menu.script, если у кого-то будет желание разгребать...

 

-- Atom mod: micromod (Сборка 1)

 

-- инициализация

class "spawner" (CUIScriptWnd)

 

-- инициализируем элементы интерфейса и каллбаки

function spawner:__init(owner) super()

self.owner = owner

self:InitControls()

self:InitCallBacks()

end

 

function spawner:__finalize()

 

end

 

function spawner:InitControls()

self:SetWndRect (Frect():set(0,0,1000,1000))

 

-- файл-описатель наших элементов

local xml = CScriptXmlInit()

xml:ParseFile("ui_anomalii_menu.xml")

 

-- видео на заднем плане

xml:InitStatic("back_video", self)

 

-- рамка

xml:InitStatic("background", self)

 

-- кнопки

self:Register(xml:Init3tButton("btn_zone_mincer_weak", self),"btn_zone_mincer_weak")

 

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

-- кнопка выхода

self:Register(xml:Init3tButton("btn_quit", self),"btn_quit")

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

 

xml:InitStatic("Info", self)

 

 

end

 

function spawner:InitCallBacks()

 

 

self:AddCallback("btn_zone_mincer_weak", ui_events.BUTTON_CLICKED, self.spawn_zone_mincer_weak, self)

 

self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.on_quit, self)

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

self:AddCallback("btn_back", ui_events.BUTTON_CLICKED, self.on_back, self)

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

 

end

 

-- сразу создадим ф-ию для выхода

function spawner:on_quit()

-- убираем наше окно, показываем предыдущее (или возвращаемся в игру)

local console = get_console()

self:GetHolder():start_stop_menu (self.owner, true)

self:GetHolder():start_stop_menu (self,true)

self.owner:Show (true)

-- скрытие главного меню только если запущена игра

if self:check_game() then

console:execute("main_menu off")

end

end

 

-- spawn_item - необходимый предмет

-- dist - радиус появления (случайно)

function spawner:spawn_item(spawn_item, dist)

-- спавним только в игре

if self:check_game() then

-- self:on_quit()

local pos = db.actor:position()

local dir = db.actor:direction()

pos = pos:add(dir:mul(dist))

alife():create(spawn_item, pos, 1, db.actor:game_vertex_id())

end

end

 

function spawner:spawn_item_inv(spawn_item)

-- спавним только в игре

if self:check_game() then

-- self:on_quit()

alife():create (spawn_item, db.actor:position(), db.actor:level_vertex_id(),

db.actor:game_vertex_id(), db.actor:id())

end

end

 

function spawner:check_game()

-- возвращает true если запущена игра

local check = false

if level.present() and (db.actor ~= nil) and db.actor:alive() then

check = true

end

return check

end

 

function spawner:spawn_zone_mincer_weak()

if self:check_game() then

local anom_name = "zone_mincer_weak"

local plosh = 4

local distance = plosh = 4 -- расстояние до границы аномалии

local position = vector():mad(db.actor:position(),db.actor:direction(),8)

local level_vertex_id = db.actor:level_vertex_id()

local game_vertex_id = db.actor:game_vertex_id()

local powers_a = 500

an_spawn("zone_mincer_weak",4,vector():mad(db.actor:position(),db.actor:direction(),8),db.actor:level_

vertex_id(),db.actor:game_vertex_id(),500,nil)

end

end

 

---------------------Back------------------

function spawner:on_back()

-- если еще ни разу не вызывали, то обозначим наш новый скрипт

if self.ui_spawnerdlg == nil then

self.ui_spawner_dlg = ui_spawner.spawner()

self.ui_spawner_dlg.owner = self

 

 

end

-- останавливаем родительский элемент, запускаем свой, но родителя показываем.

self:GetHolder():start_stop_menu(self.ui_spawner_dlg, true)

self:GetHolder():start_stop_menu(self, true)

self:Show(false)

 

end

 

 

morda. cod4 player

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

elfog, да-а-а... Прикольнулся ты знатно в функции spawner:spawn_zone_mincer_weak() :) Либо не нужны все local, либо не нужно те же значения задавать в вызове функции an_spawn. Впрочем, плевать, работать будет и в таком виде.

 

Но, посмотрел файл ui_anomali_menu.script, а где же сама функция an_spawn? Ты пытаешься вызвать несуществующую функцию, как результат - должно послать, правда, не уверен, что именно в той форме, что послало тебя. Но функцию допиши обязательно, без нее работать 100% не будет.

 

Лог переводится (на понятный, а не дословно на русский!) так, что какая-то лажа с файлом ui_anomalii_menu, из-за которой файл не воспринимается. Внимательно проверь, все ли скобки правильно закрыты, end-ы проставлены, везде ли стоит then после if, не перепутал ли операторы сравнения и присваивания. Может еще какой вариант найдется...

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Так?

 

function: an_spawn ("zone_mincer_weak",4,vector():mad(db.actor:position(),db.actor:direction(),8),db.actor:level_
vertex_id(),db.actor:game_vertex_id(),500,nil)
if self:check_game() then
local anom_name = "zone_mincer_weak"
local plosh = 4
local distance = plosh = 4 -- расстояние до границы аномалии
local position = vector():mad(db.actor:position(),db.actor:direction(),8)
local level_vertex_id = db.actor:level_vertex_id()
local game_vertex_id = db.actor:game_vertex_id()
local powers_a = 500
end
end

 

 

 

----------

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

 

----------

Стоит ли выкладывать адаптированное под АМК 1.4.1. спавн меню, если да то надо ли создавать для этого отдельную тему в мастерской ТЧ? (Если заработает то даже с аномалиями)

atom mod (spwnermod) + FIX для AMK 1.4.1.

 

Кроме того что оно просто адаптировано лля АМК, я ещё и ввёл изменения ------>>>

 

Оружие:

Изменил названия на те что в АМК

Добавил Огнемёт

Исправил спавн Грозы (кнопка была, но не более)

 

AMK:

Спальный мешок

Рюкзак

GPS метка

Элитный детектор аномалий

Канистра

Баллон

 

Еда:

Добавил пиво smile.gif

 

Разное:

Добавил гитару и гармошку

 

Монстры:

 

Исправил спавн собаки (вместо нее спавнилась защита от пси воздействия)

Кот

Излом

Тушкан

Полтергейст

Химера

Зомби

Ворона

Бюрер

Электро Химера

Огненный Полтергейст

Пси Собака

 

Костюмы:

Заменил старые(нерабочие) костюмы на нормальные.

Добавил Скат-10

 

Добавил уникльную броню и оружие.

 

Добавил все артефакты из амк.

 

Добавил спавн всех предметов в радиусе 1-5 метров от ГГ.

 

 

 

Остальное осталось тем же (оружие, медикаменты, боеприпасы, НПС, автомобили...)

 

ВНИМАНИЕ!!! Мод затрагивает ui_main_menu.script, system.ltx и добавляет автомобили.

 

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

morda. cod4 player

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

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

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

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

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

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

Войти

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

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

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