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

Внимание. На форуме проводятся технические работы с боковым меню.

_Val_ _Val_

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


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

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

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

У тебя функция спавна называется spawn_zone_mincer_weak(), а ты вызываешь некую ui_anomalii_menu.spawner().

ui_spawner_script - описатель самих меню, а не их содержимого.

Либо я тебя не понял, либо меня не поняли. :huh:

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

Люди, подскажите, как сделать так, чтобы сразу на локации ЧАЭС 2 можно было внизу ходить, т.е как убрать от туда радиацию?

elfog

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

 

Смотри: сама функция выглядит так:

function имя_функции(аргументы_функции)
    последовательность действий
end

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

 

Вызов функции находится в другой функции и выглядит так, если вызываемая функция в том же файле, что и та функция, ИЗ которой происходит вызов:

   ...
   имя_функции(аргументы_функции)
   ...

либо так, если вызываемая функция находится в другом файле:

   ...
   имя_файла.имя_функции(аргументы_функции)
   ...

 

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

Например, есть функция fun с одним аргументом. Пусть надо ее вызвать с аргументом, равном 2. Вызов

fun(2)

и конструкция

local x = 2
fun(x)

эквивалентны.

Во втором случае агрументом является переменная Х: сначала определяется переменная Х, ей присваивается значение 2, и затем функция fun вызывается с аргументом, равным 2, как и в первом случае, когда аргументом является число. Писать

local x = 2
fun(2)

просто бессмысленно, хотя ошибки и не возникнет.

 

 

Для спавна аномалий тебе нужно из функции spawner:spawn_zone_mincer_weak() вызвать функцию an_spawn с правильными аргументами. То есть функции должно быть как минимум две ;) Попробуй еще раз с новой информацией.

Мои работы:

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

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

Soul Cube

 

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

Кто-нибудь знает как включить бампы на статике уж очень надо, очень.

Сообщение от модератора n6260
"Ковырнуть" движок :)

ЯДиск папка с крутым схроном!

Kirag, И снова я по поводу спавна аномалий...

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

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

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

morda. cod4 player

elfog

Если хочется научиться основам, то советую настроить Scite с Lua, как это сделать можно прочитать тут - http://www.lua.ru/forum/posts/list/21.page (3 пост, заголовок Настройка компилятора Lua в Scite можно опустить). Когда установишь, там будет оф. справка по языку.

Так же советую скачать тутор от хорошего человека Gun12, он не завершён (пока), но читать его легче будет, чем официальный, и инфы больше. Качать отсюда - http://ifolder.ru/17766560

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

На счёт слова "ПОКА".

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

Так же массу времени отнимает оформление. Так что пока слово "пока" останется в силе (намеренная тавтология :) ).

Да и вообще делал в принципе для себя как шпаргалку.

Так что есть комментарии, рассуждения и неточности, которые обнаружились уже позже (с опытом так сказать)

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

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

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

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

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

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

Войти

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

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

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