PainkilleR

Фан-клуб

ОПРОС

Оцените этот сайт

menuleft3
menuleft4
PainkillerClub.Ru » Старый форум » Модификации Painkiller » Мастерская » LUA - Вопросы/Ответы и всё в таком духе

LUA - Вопросы/Ответы и всё в таком духе

Вступление

Все темы в этом форуме доступны лишь некоторым доверенным лицам, и если вы смогли зайти сюда, значит вы из их числа! Постарайтесь также не шибко твердить о том, что тут есть такой форум, так как не все его видят. Спасибо за внимание :)

Задаём вопросы по LUA, что и как хочется сделать, моменты, которые вас интересуют и прочее.

И ещё, так как форум этот закрытый, то субординацию соблюдать не обязательно и модераторы за порядком здесь тоже могут не следить. ^_^
[signature]
--------------------
{signature}
[/signature]
[fast]Цитировать[/fast] Жалоба
#0
Havcom
Мастера
  • публикаций
  • комментариев
Цитата (Sviatoslav)
Возможно ли отследить, сколько монстриков было расчленено, заморожено, сожжено, поджарено электричеством и т.п.?

По этому могу ответить. Сначала необходимо определить счётчики:

[spoiler]uSpoiler3vnbzpl
3vnbzp'
3vnbzp'
3vnbzp'
3vnbzp')).val('Закрыть спойлер');$(
3vnbzp'
3vnbzp'
3vnbzp')).val('Открыть спойлер
');$(
3vnbzp'Открыть спойлер
Счётчик для расчленений (Gib Counter)

Game.lua
Game =
{
--
GibbedMonstersCounter = 0,
--
}

Classes/CActor.lua
function CActor:OnDamage(damage, obj, type, x, y, z, nx, ny, nz, he,msg)
--
if not self.NotCountable and not self._died then
Game.BodyCountTotal = Game.BodyCountTotal + 1
if gibdie then
Game.GibbedMonstersCounter = Game.GibbedMonstersCounter + 1
end

--
end

Условие gibdie будет добавлять на счётчик значения только если противник был убит и сразу же расчленён. Или же ты можешь удалить условие, оставив только Game.GibbedMonstersCounter = Game.GibbedMonstersCounter + 1, тогда будут засчитываться значения, даже если было расчленено тело уже убитого монстра.

Карта таро:
Тут всё проще некуда.
--========================
>> Порвать на британский флаг не меньше сорока монстров
function o:GetCardStatus()
local card = self._MagicCard

if Game.CardsAvailable[card.index] then return 1 end

if Game.EndOfLevelActive == true and Game.GibbedMonstersCounter < 40 then return 0 end

return -1
end

--===================================

Счётчик для заморозок (Frozen Gib Counter)
Насколько я понял, ты имел ввиду убивать замороженных врагов?

В общем проделываем выше описанные действия:

Game.lua
Game =
{
--
FrozenGibbedMonstersCounter = 0,
--
}

Classes/CActor.lua
function CActor:CreateGib(newModel)
--
if self._frozen then
Game.FrozenGibbedMonstersCounter = Game.FrozenGibbedMonstersCounter + 1
self:PlaySound("gibFrozen",nil,nil,nil,nil,x,y,z)
else
self:PlaySound("gib",nil,nil,nil,nil,x,y,z)
end
--
end
--==============================
Убито огнём, электричеством... другими видами атак...

Определяем типы атак и добавляем для них счётчики:

Game.lua
Game =
{
--
KilledByFireCounter = 0,
KilledByElectroCounter = 0,

--
}

Classes/CActor.lua
function CActor:OnDamage(damage, obj, type, x, y, z, nx, ny, nz, he,msg)
--
if not self.NotCountable and not self._died then
Game.BodyCountTotal = Game.BodyCountTotal + 1

if type == AttackTypes.Electro then
Game.KilledByElectroCounter = Game.KilledByElectroCounter + 1

elseif type == AttackTypes.FlameThrower or type == AttackTypes.Fire then
Game.KilledByFireCounter = Game.KilledByFireCounter + 1
end

--
end

Думаю, этого будет достаточно для создания новых заданий для карт.[/spoiler]

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

А блум - мой вариант немного кривой, смена происходит, но после загрузки с сохранки, блум пропадает. Его я для замедлений только использую.
Цитировать Жалоба
BlooDFloweR
Администраторы
  • публикаций
  • комментариев
Havcom, я предпологал что резкая смена будет, но для моей задумки это пойдёт, так как я в такие моменты буду использовать чёрный fade.а на счёт того как можно блум реализовать (хоть как то) расскажешь?
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Вот кривой вариант для смены блума:

function CAction:Action_Bloom(R,G,B,A,luminancethreshold,multiplier,dimScale) -- Смена Bloom ( Bloom:210,30,25,50,nil,2,nil )

if luminancethreshold == nil then luminancethreshold = 0 end
if multiplier == nil then multiplier = 0 end
if dimScale == nil then dimScale = 0 end

local b = Lev.BloomFX
Lev.BloomFX.OverlayColor = Color:New(R,G,B,A)

WORLD.BloomFXParams(Lev.BloomFX.LuminanceThreshold + luminancethreshold,Lev.BloomFX.Multiplier + multiplier,b.OverlayColor:Compose(),Lev.BloomFX.DimScale + dimScale)
end
Цитировать Жалоба
BlooDFloweR
Администраторы
  • публикаций
  • комментариев
С блумом всё получилось как надо, но такая ситуация: я захожу на один амбуш, который активирует другой блум, но если захожу в другой амбуш с другим блумом, то возможность включения первого блума пропадает. как сделать так, чтобы амбуш блума срабатывал много раз?
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Этот экшен не меняет значения настроек, а добавляет к тому, что есть. И помоему нормально работает всё, кроме настройки цвета блума. Я ж говорю, корявый вариант, лучше не использовать.
Цитировать Жалоба
Sviatoslav
Мастера
  • публикаций
  • комментариев
Havcom, большое спасибо за счётчики! Новые задания должны разнообразить геймплей. Думаю, пригодится не только мне. :)
HavcomLexaR, по поводу неба. Думаю, если совместить оба предложенных вами способа, то должно получиться очень неплохо. Правда, нужны будут несколько похожих текстур, смена которых будет имитировать постепенное потемнение и появление туч (если речь идёт о дожде). Я представляю себе это так: сначала затемняем текстуру по способу LexaR'a, затем экшеном меняем на следующую, похожую, но уже с изменениями, затем опять затемняем/меняем текстуру и так далее, то есть создаём секвенцию из десяти, предположим, текстур. Плюс к этому, нагоняем жути с помощью тумана, звуков, усиливающегося дождя. Потом, чтобы вернуться к ясной погоде, делаем всё в обратном порядке. В идеале, можно создать амбуш с целым циклом смены погоды и просто вставлять его на нужный уровень.
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Sviatoslav, тут короче нужно составить экшен, но я там буду долго разбираться, так что без помощи Дилетанта тут не обойтись. И опять же, насколько я понял, придётся делать много скайбоксов с разным тоном (читай: много разных текстур). Жаль, что нельзя как-то проще и не так обьемнее решить проблему.
Как например в Сталкере менялся тон неба? При помощи окраски текстуры или плавно на другую текстуру, не в курсе?
Цитировать Жалоба
BlooDFloweR
Администраторы
  • публикаций
  • комментариев
Кстати говоря на сколько я знаю сталкер тоже на lua написал, думаю можно там подсмотреть
Цитировать Жалоба
Sviatoslav
Мастера
  • публикаций
  • комментариев
Havcom, да, в S.T.A.L.K.E.R. текстуры накладывались одна на другую постепенно, одна появляется - другая исчезает, глазом это заметить невозможно, хотя текстуры разные. Ну, то, что я написал, это в качестве предложения, для размышлений. :)
BlooDFloweR, думаю, как в S.T.A.L.K.E.R. не прокатит - там на каждый час внутриигрового времени расписана погода, не только текстуры, но и угол движения солнца, партиклы, амбиентные звуки. Кстати, классно, на мой взгляд, сделано. :) Хотя, если бы было возможно реализовать плавное наложение и исчезновение текстур, то, в принципе, это и был бы способ такой как в S.T.A.L.K.E.R.
Цитировать Жалоба
LexaR
Мастера
  • публикаций
  • комментариев
С текстурами могу помочь,  но вот с моим способом, я не уверен что он получится,  ведь ко времени его не подвяжешь,  или придется сильно постараться. 

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

действетельно, чтобы плавно менялась текстурка, нужно кадров 30 хотябы, а это опять же вес,  пробовать и тестить только остаётся.
Цитировать Жалоба
BlooDFloweR
Администраторы
  • публикаций
  • комментариев
LexaR, кстати на счёт модели неба, ты можешь сделать такую модель как в Shadowland, только чтобы воронки были не сверху и снизу, а по бокам? вообще возможно такое осуществить?
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Лекс, к вопросу о модели неба, я как-то просил сделать многослойное стандартное небо, только со Skydome текстурами, поможешь?
Цитировать Жалоба
LexaR
Мастера
  • публикаций
  • комментариев
BlooDFloweR,  Возможно сделать. но нужно подумать как ж оно будет точно работь , и как будет двигаться текстура.
Havcom,  Ну ты спрашивал можно ли сделать ) а делать не просил ) 

Если Очень надо, тщательно обдумываем   какое небо именно надо, какие слои и прочее.
Чтоб было понятно как работает небо,  в ПК есть туториалы по небу. 
далее я выкачиваю версию программы (так как не осталось той что нужна) , делаю небо.

Добавлено (06.06.2013, 23:00)
---------------------------------------------
Вот вопрос первый,   Havcom,   На сколько низкое небо нужно ?  По линии горизонта, или ниже ?    или высокую линию? например как в тауне ?

Добавлено (06.06.2013, 23:03)
---------------------------------------------
какие слои ?  главный слой как лоу квалити,   другие слои ?  Альфаканальные Облака ? сколько слоев ?   по сфере ? на топе ?  по цилиндре ?   или какой специал слой ? типо как в дрыгве слой для леса в дали ?  например туда че хошь можно , любую текстуру.

Цитировать Жалоба
BlooDFloweR
Администраторы
  • публикаций
  • комментариев
LexaR, вообще в идеале хотелось бы такое небо (с 1:10 видно). то есть в центре воронка с молниями
Цитировать Жалоба
LexaR
Мастера
  • публикаций
  • комментариев
ладно :) , подумаю что можно сделать,  думаю  раз уж вы не совсем в тех плане представляете как работает, не  нужно вас мучать и сделать самому , чтобы было примерно как надо, и как сделать  реальней.

BlooDFloweR,  как я понимаю, нужно небо 360 ? так ? попробую сделать.
Havcom,  Жду ответа, как ответишь, сразу сделаю и вышлю.
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
А чёрт, как много вопросов.. %) Честно не задумывался об этом, можно например взять небо с дрыгвы и только основной слой переделать, чтоб он skydome использовал. А так, чтоб и облака можно было настроить и прочее.

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

Цитировать Жалоба
LexaR
Мастера
  • публикаций
  • комментариев
Havcom,  Попробуй это.  Тут все настройки с дрыгвы, только главная текстура по развертке как  лоу квалити небо.

Попробую сделать небо с воронками, что сложнее....
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
LexaR, это именно то, что нужно. Спасибо. :)

Только можно ещё немного опустить небо, а то оно довольно высоко над картой получилось.
Цитировать Жалоба
LexaR
Мастера
  • публикаций
  • комментариев
BlooDFloweR, Текстурка у тебя есть ? или нужно тоже сделать ? 
Havcom,  Ну тогда хорошо ) Рад что получилось как надо )

Добавлено (07.06.2013, 01:02)
---------------------------------------------
Havcom, Можно, но такие дела нужно либо в альфаканал, либо в цвет тумана сгонять,  имею в виду линию горизонта
чуток опущу

Цитировать Жалоба
LexaR
Мастера
  • публикаций
  • комментариев
Используй лайер 2,  с опощенным вниз альфаканалом ( возможно просто цвет фога чтоб на ней был..  Иначе ты как не опускай,  всегда будет эта полоса, небо не стоит на месте, а двигается за персонажем.
Само небо, и так значительно ниже персонажа нижним краем находится
Цитировать Жалоба
BlooDFloweR
Администраторы
  • публикаций
  • комментариев
LexaR, ну в плане текстурок я думал на одну воронку поставить текстуры молнии как в руинах (хотел из некровижна взять), ну а для другой воронки красное небо с карты аластора. если надо могу скинуть все текстуры (но если у тебя есть желание сделать свои текстуры, я не против :) )
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
LexaR, это немного не то. Вот ты же занизил второй слой почти что наполовину, а теперь нужно первый слой значительно опустить, посуте таже самая процедура, только не так низко.
Цитировать Жалоба
Sviatoslav
Мастера
  • публикаций
  • комментариев
Вот ещё назрели вопросы. Havcom, наверное, к тебе, может, dilettante ещё подключится. :) Возможно ли сделать такие экшены как EnableDraw и SetImmortal для группы объектов, как, например, существуют KillAllActors и OpenAllSlabs. Конкретно интересует для монстров и предметов.
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Можно попробовать, но скорее всего только для конкретного предмета. Например скрыть ВСЕ патроны для дробовика. Так ты хочешь?
Цитировать Жалоба
Sviatoslav
Мастера
  • публикаций
  • комментариев
Havcom, вопрос назрел в результате одной задумки с периодически исчезающими и становящимися неуязвимыми  монстрами. То есть, для одного монстра это будет выглядеть так:

EnableDraw:MonstersSpawnPoint_001_0,false
SetImmortal:MonstersSpawnPoint_001_0,true
Wait:5
EnableDraw:MonstersSpawnPoint_001_0,true
SetImmortal:MonstersSpawnPoint_001_0,false

Проблема возникает, если на уровне, предположим, 100 спаун-поинтов по 3 монстра. Угадать, какие монстры в данную секунду находятся на уровне, невозможно, следовательно, экшены нужно прописать сразу для всех, сначала 600 экшенов (300+300) на исчезание и бессмертие, потом - 600 на обратное действие. В принципе, это выполнимо, но не вызовет ли это глюков и прочего, неизвесто.
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Вот примерный вариант для мобов. С предметами пока посложнее.

Actors


[spoiler]uSpoilera2gTBWl
a2gTBW'
a2gTBW'
a2gTBW'
a2gTBW')).val('[\–] Спойлер');$(
a2gTBW'
a2gTBW'
a2gTBW')).val('[+] Спойлер');$(
a2gTBW'[+] Спойлер
CActor.lua


--=====================================
function CActor:DrawOrImmortalActor(state,immortalstate)
ENTITY.EnableDraw(self._Entity,state,alsoChildren)
self.Immortal = immortalstate
end

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

CAction.lua


--==========================================
function CAction:Action_OrDrawActors(state,immortalstate,alsoChildren)
for i,v in Actors do
if v.Health > 0 and v._AIBrain then
v:DrawOrImmortalActor(state,immortalstate)
end
end
end


----------
Этим экшеном задаётся бессмертие и "скрыть/показать" для всех мобов, что есть на карте. Управление просто.

OrDrawActors:false,true

Первый определяет как раз "скрыть/показать", т.е. false - скрыть, true - показать.
Второй - Бессмертие,т.е. true - активировать, false - деактивировать.[/spoiler]

Items


Всё тоже самое.

[spoiler]uSpoilerKzlfDal
KzlfDa'
KzlfDa'
KzlfDa'
KzlfDa')).val('[\–] Спойлер');$(
KzlfDa'
KzlfDa'
KzlfDa')).val('[+] Спойлер');$(
KzlfDa'[+] Спойлер
CItem.lua


--=====================================
function CItem:DrawItems(state)
ENTITY.EnableDraw(self._Entity,state,alsoChildren)
end


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

CAction.lua


--======================================
function CAction:Action_OrDrawItems(tmp,state,alsoChildren)
for i,v in GObjects.Elements do
if v.BaseObj == tmp..".CItem" then
v:DrawItems(state)
end
end
end

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

OrDrawItems:'AmmoShotgun',false

AmmoShotgun - Сначала необходимо указать BaseObj того типа предмета, который ты хочешь скрыть.



Ну а затем ("скрыть/показать", т.е. false - скрыть, true - показать.).
Скрываются все предметы на уровне для конкретного типа предмета.[/spoiler]

Ставь Лайк, если мой совет принес пользу! :)

Цитировать Жалоба
Sviatoslav
Мастера
  • публикаций
  • комментариев
Havcom, спасибо! Завтра всё проверю и отпишусь! :)
Не удержался, проверил сейчас. Всё работает супер! Надо будет замутить геймплей. :D
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Ты на всякий проверь, работает ли после сохранения/загрузки. Я то по быстрому сделал. Ну мало ли что.
Цитировать Жалоба
Sviatoslav
Мастера
  • публикаций
  • комментариев
Havcom, проверил - работает и после сохранения/загрузки. Всё красиво. DD
Цитировать Жалоба
Sviatoslav
Мастера
  • публикаций
  • комментариев
Никто не обращал внимание - карта DM_Chessboard находится внутри огромной незатекстурированной полусферы. Соответственно, если убрать или уменьшить туман, то её становится видно, но, самое главное - это невозможность использовать небо, так как оно находится за этой полусферой.
Цитировать Жалоба

Добавить комментарий

Автору будет очень приятно узнать обратную связь о своей новости.

Мы в ВК

***
Фан группа по игре
Большая группа по игре
Первая группа по игре
menuright2
menuright3
menuright4
Сайт работает под управлением DataLife Engine.
© PainkillerClub.ru 2011-2023 | © Design by Мария Андрюшечкина.