P.S. Слушай - пиши по русски, а то пока разберешь-переведешь что ты там "начирикал" с пьяну, уже и забываешь чем хотел помочь.
YURA_111:
ну это в том случае, если я правильно поняло твой "китайский"
Без обид, но я правда не понимаю что тебя не устраивает в моих формулировках. Похоже что либо у тебя проблемы с восприятием текста, либо же я действительно заработал "ачивку" "грандмастер анти-красноречия" поскольку за ~10 лет форумного общения ты - первый человек который заявляешь о неудобочитаемости моих предложений. Если у тебя есть конкретные претензии к формулировкам, готов обсудить это приватно.
YURA_111:
Пример:
Obituary "%o was killed by an Sergeant."
И нет, я имел в виду совсем другое. Допустим у нас есть моб-актор "MadImp", помимо мили он умеет атаковать прожектилями "Missile1" и "Missile2" через соответствующие отдельные акторы-абилки.
И собственно вопрос: можно ли прописать чтобы смерть цели от "Missile1" актора вызывала "%o was killed with fire", тогда как смерть от актора "Missile2" вызывала "%o was screamed to death by MadImp" например? Так понятно?
YURA_111:
A_CheckFlag
Уже нашёл, похоже то что надо. Возможно туплю, но в функции же допускается проверка только одного флага; а как записать проверку двух одновременно? Через anonymous functions?
DOOMFOREVER Попробуй через A_GunFlash, которая должна вызывать Flash стэйт.
О как всё просто... А я-то думал что прыжок выполнится сразу после первой строки не доходя до проверки следующего а_чекфлага.
ЕДИТ2:
^
Какой же я тооормоз... Только сейчас допёрло... Ну правильно, если чек одного флага провалится то будет проведена проверка второго. Спасибо, Юра. ))
------------
Два флага для перестраховки против гипотетических кастомных мобов с хитрожопым кодом; ну может это и лишнее, так-то хватает и ногравити.
YURA_111:
По-моему нужно прописывать тогда обитуари самому снаряду
Собственно вопрос возник именно после неудачных попыток прописать некролог непосредственно снаряд-актору: убивает прожектилем, а выдаётся обит моб-актора. Прописывал и в LANGUAGE и в декорэйте снаряд-актора.
ЕДИТ:
YURA_111:
Вот пример:
Да я же говорю что через LANGUAGE лумп тоже пробовал:
Скрытый текст:
LANGUAGE
Скрытый текст:
[enu default]
OB_FIRESTORM = "%o was incinerated by infernal flame of the Firestorm";
Актор D вызывает актор FireStorm
Скрытый текст:
Actor D//iablo
{
Monster
Obituary "%o was blasted into scraps by the Diablo rage!"
HitObituary "%o was torn up by the Diablo"
States
{
FireStorm:
DICF I 1 bright A_CustomMissile("FStorm",0,random(-20,20),random(-22,22),0,0,CMF_AIMDIRECTION)
Goto see
}
}
Снаряд-актор FireStorm вызывает снаряд-актор FireS
Скрытый текст:
Actor FStorm
{
Projectile
Obituary "$OB_FIRESTORM" //"%o was incinerated by infernal flame of the Firestorm"
States
{
Spawn:
FLMA A 1 A_Weave(8, 0, random(1.0,5.0), 0.0)
FLMA A 1 A_SpawnItemEx("FireS",0,0,0)
FLMA B 1 A_Weave(8, 0, random(1.0,5.0), 0.0)
Loop
}
}
Снаряд-актор FireS с заданным Obituary
Скрытый текст:
Actor FireS
{
Projectile
Obituary "$OB_FIRESTORM" // "%o was incinerated by infernal flame of the Firestorm"
States
{
Spawn:
FLMA ABCDEFGHIJKLMNOPQRSTUVWXYZ 2 A_Explode(2, 128, 0)
FLMB ABCDEFGHIJK 2 A_Explode(2, 128, 0)
TNT1 A 0 A_Jump(192, "Death")
Loop
}
}
Итог одинаков: либо обит моб-актора, либо обит DamageFactor Fire - "%o was melted". Со снаряд-акторами без промежуточных акторов ситуация аналогична.
An example of a walking animation for an MD2 model (uses frame names instead of frame numbers):
Model BloodHound // Name of actor in DECORATE
{
Path "models/bloodhound" // Path to model in PK3
Model 0 "bloodhound.md2" // Model index, model file
Skin 0 "bloodhound.pcx" // Model index, texture (can be in any format supported by GZDoom)
Scale 1.0 1.0 1.0 // Scale values
Frame BHND A 0 "walk01" // The sprite lump, sprite frame, model index, name of frame
Frame BHND B 0 "walk02"
Frame BHND C 0 "walk03"
Frame BHND D 0 "walk04"
}
Бтв, буквально на предыдущей странице разбирался смежный вопрос.
Добавлено спустя 21 час 54 минуты 52 секунды:
JSO x:
Второй вопрос (скорость замороженного игрока): проще (и надёжнее) всего через скрипт ACS, с вызовом SetActorProperty. То есть ACS-код должен выглядеть как-то так:
For ( int MultiplierToNormal = 0; MultiplierToNormal < 100; MultiplierToNormal++ )
{
SetActorProperty( 0, APROP_Speed, 0.6 + 0.004 * MultiplierToNormal );
Delay( 2 ); // Для ~5 секунд постепенно спадающей заморозки нужна задержка в 1.75.
}
Умудрился заблудиться в трёх соснах... Изначальный вариант почему-то снижает скорость, но не возвращает её обратно:
3. Как задать актору перманентную "ауру", наносящую урон через равный интервал? Закрепить кольцо из TNT A кастоммиссайлей через A_Warp, а пульсацию задать тиками? Или надо иначе?
Зачитавшись вашим эпичным чэленджем от SSV про избирательных арчей, поначалу решил что A_RadiusGive будет ключевым элементом для создания "ледяной ауры", но походу этот вариант тоже не годится, поскольку аура должна:
Скрытый текст:
а) перманентно работать во всех стэйтах актора-носителя (следовательно должна являться самостоятельным актором)
б) закреплена на акторе-носителе (через A_Warp (AAPTR_MASTER), я полагаю)
б) замедлять (вызов скрипта)
в) бить ДмгФактором Ice (следовательно вариант с раздачей хелс-итема отрицательного значения через A_RadiusGive не катит)
г) избирательно мультинацеливающейся - бить ТОЛЬКО те акторы, ДЛЯ которых актор-носитель является ВРАЖДЕБНЫМ (т. е. чекать чью-либо враждебность по отношению к актору-носителю раньше него самого), при этом не снимая "прицел" с уже имеющихся целей.
С этим пунктом я даже не знаю с какой стороны подступиться... наверное только через комплексный скрипт?
д) и конечно же всё это должно срабатывать в определённом радиусе через равные тики
Не могли бы достопочтенные господа подсказать каким образом это можно прописать? Особенно интересует реализация пунктов в) и г).
Anto96WS, смотря чем ты задаёшь поломанность (переменной, предметом инвентаря или дополнительным property из-под ZScript'а). Могу предложить тебе взглянуть на мод от отечественного моддера по имени Птица Дятел, который называется "Old Good RPG mod". Найдёшь ты там, думаю, то, что тебе нужно; да и все комментарии там в исходном ACS-коде на русском. Неэтично, конечно, чужие исходники без разрешения смотреть, но коль человек их оставил, то, скорее всего, он считал, что они кому-то пригодятся.
, либо через PROP_FROZEN если запрещать только ходьбу игрока.
Перемещение с помощью Teleport или Thing_Move. Типа:
Скрытый текст:
Script 2 ENTER
{
Thing_Move(0, destid, 0); //destid - tid куда перемещать
}
Да, для мультика ещё надо tid назначать, ЕЯПП.
========
JSO x, ссыль чего-то не пашет.
Может кто подскажет хотя бы по скрипту скорости? И кстати, для скорости монстров APROP_Speed похоже не катит, они начинают ползать. Полуркал, и правда:
It's sort of why when using SetActorProperty, APROP_Speed is an integer that completely overrides the base speed for monsters while it's a fixed-point that modifies the base speed for players, I'm guessing.
О! Может тогда лучше вообще без скрипта, декором?
Actor ColdTouch
{
pROJECTILE
States
{
Death:
TNT1 A 175 A_ChangeVelocity(velx/4, vely/4, velz/4, CVF_REPLACE, AAPTR_TARGET)
TNT1 A 175 A_ScaleVelocity("x.x", AAPTR_TARGET) // вот только как рассчитать значение х.х чтобы за последующие 5 секунд возвращало ровно 75% потерянной скорости?
}
}
Умудрился заблудиться в трёх соснах... Изначальный вариант почему-то снижает скорость, но не возвращает её обратно:
кого ты хочешь замедлить? игрока при попадании? или монстра, когда он пускает проджектайл
ну, на игроке все работает. если заменить активатора на AAPTR_PLAYER1
а на монстре не очень.. мб я не понял, как ты его запускал?
энивэй, с утреца для монстра я побробовал и родил такую хрень
Скрытый текст:
ACTOR DoomImp2 : DoomImp Replaces DoomImp
{
Speed 20
scale 2
States
{
Missile:
TNT1 A 0 acs_namedexecuteAlways ("SpeedUpStop",0,0,0,0)
TROO EF 8 A_FaceTarget
TROO G 6
TNT1 A 0 acs_namedexecuteAlways ("SpeedUp",0,0,0,0)
Goto See
}
}
// вот только как рассчитать значение х.х чтобы за последующие 5 секунд возвращало ровно 75% потерянной скорости?
Чччёрт, не узнал в гриме знаменатель прогрессии. Получается 1.0079990316378238; я правильно понимаю что такое число гозза не примет?
Хочу чтобы удар замедлял ВСЕХ - И моба И игрока.
MyNameIs:
ну, на игроке все работает
Первый же скрипт после цитируемого, замедлял И моба И игрока, но скорость НЕ нормализовывалась. Ну и плюс мобы были замедлены явно не на ~66%, а значительно сильнее. А МАСТЕР как раз стоял для того чтобы принимать разные цели If(SetActivator(0, AAPTR_TARGET)) SetResultValue(SetActivator(0, AAPTR_MASTER), через миссайль с +HITMASTER.
MyNameIs:
с утреца для монстра я побробовал и родил такую хрень
Выглядит прикольно.
1) глобально объявляются zzz и zzz1
2) имп стопит цель zzz1, превращенным в 0
3) и до тех пор пока zzz меньше глобального zzz1 идёт счётчик по +0,25 APROP_SPEED
Так? Но тогда всё равно получается что после "разморозки" у всех бывших целей будет выравненная скорость. Оригинально, но не то что мне надо.