Автор | Сообщение |
Android128[SDC] - Lance Corporal -
 | 132 |
 Doom Rate: 1.43
|
Отправлено: 26.03.08 14:16:47 | | | Спасибо Guest  | |
|
| |
dukenator UAC Sergeant Major
 | 726 |
 Doom Rate: 2.06 Posts quality: +102 |
Отправлено: 27.03.08 11:42:26 | | | Android128 Ну правильно не получается, перед комментами // ставить надо, или удали их нафиг из кода. | |
|
| |
Guest = 2nd Lieutenant =
 | 1473 |
 Doom Rate: 2.5 Posts quality: +182 |
Отправлено: 14.04.08 22:00:35 | | | zer0: | Если создал несколько классов игрока, как сделать для них разное оружие? |
Что-то я не туда нажал, и оно упало во флуд. Но, собственно, мораль в том, что есть тема для Декорейта, и все равно пишут куда попало.
По сабжу: в стартовый инвентарь добавляется некий инвентори (причем каждому классу свое количество - по сути "номер" класса), а дальше этот "номер" используется в теле описания акторов, свойства которые должны различаться для разных классов. | |
|
3 |
1 |
 |
|
| |
dukenator UAC Sergeant Major
 | 726 |
 Doom Rate: 2.06 Posts quality: +102 |
Отправлено: 15.04.08 03:46:41 | | | Guest Объясни мне плиз, как эта система с инвентори и классами игроков работает - и еще: как сделать, чтобы игрок мог подбирать оружие, предназначенное только для его класса? А то я в этом как-то не разбираюсь  | |
|
| |
zer0 = Sergeant Major =
 | 655 |
Doom Rate: 2.13 Posts quality: +56 |
Отправлено: 15.04.08 07:55:12 | | | Guest я же не спрашивал, как делать разные типы инвентори. Меня интересует, как сделать, чтобы для акторов было вообще разное оружие. Чтобы у одного класса какое-то оружие было, а у другого - нет. Причем мне интересно, можно ли так, чтобы у одного класса его оружие лежало в одних местах на мапе, а у другого этого оружия там не было, а его оружие лежало в других местах.
Хотя, возвращаясь к сказанному тобой, если вставить проверку инвентаря в spawn стейт нужного итема, эта проверка будет чекать инвентарь игрока? | |
|
2 |
1 |
2 |
 |
|
| |
Guest = 2nd Lieutenant =
 | 1473 |
 Doom Rate: 2.5 Posts quality: +182 |
Отправлено: 15.04.08 10:06:26 | | | zer0: | я же не спрашивал, как делать разные типы инвентори |
А я тебе этого и не объяснял. По твоему вопросу не было понятно, нужно именно разное оружие, или чтоб оружие в руках разных акторов вело себя по-разному, а потому обрисовал подход в целом, ибо в обоих случаях классы нумеруются с помощью инвенторя.
zer0: | Причем мне интересно, можно ли так, чтобы у одного класса его оружие лежало в одних местах на мапе, а у другого этого оружия там не было, а его оружие лежало в других местах. |
Делаешь спавнер, который в зависимости от класса игрока спавнит то или иное оружие, или не спавнит ничего.
zer0: | если вставить проверку инвентаря в spawn стейт нужного итема, эта проверка будет чекать инвентарь игрока? |
A_JumpIfInventory проверяет "карманы" актора, в теле описания которого данная функция вызывается. Инвентарь есть у любого актора, даже неодушевленного, поэтому если ты при описании спавнера используешь A_JumpIfInventory, то "карманы" спавнера она и будет шарить, а не "карманы" игрока. Исключение составляет актор, который является инвентарем, уже лежащем в чьем-то "кармане", в этом случае A_JumpIfInventory проверяет не "карманы" инвенторя, а "карманы" хозяина. Хорошим примером в этом смысле является оружие - в Spawn-стейте A_JumpIfInventory проверяет "карманы" самого оружия, во всех остальных - уже "карманы" игрока.
В свете вышесказанного, для того, чтобы спавнер работал, как задумано, ему сначала (в зависимости от текущего класса игрока) нужно положить в "кармашек" инвентори, который он будет чекать. Делается это скриптом вида:
Script 111 ( void )
{
int ClassChecker = CheckActorInventory(1111, "ClassChecker");
switch (ClassChecker)
{
case 0:
break;
case 1:
GiveInventory("ClassChecker", 1);
break;
case 2:
GiveInventory("ClassChecker", 2);
break;
case 3:
GiveInventory("ClassChecker", 3);
break;
}
}
Данный пример предполагает, что классов у нас 4; ну и придется сначала игроку дать TID - в примере 1111. | |
|
3 |
1 |
 |
|
| |
zer0 = Sergeant Major =
 | 655 |
Doom Rate: 2.13 Posts quality: +56 |
Отправлено: 15.04.08 14:31:36 | | | Меня интересовало, можно ли это реализовать чистым декорейтом. Раз нужны скрипты, тут мне уже все понятнее.
Я вот сейчас пытаюсь понять смысл флага +AMMO_OPTIONAL. В вики просто написано, что он обозначает оружие, не расходующее патронов. Однако он явно делает не просто это, потому что без него некоторые образцы нового оружия ведут себя некорректно (например, при попытке стрелять с пустым магазином не прыгают в стейт перезарядки, даже если в Fire стейте прописано A_JumpIfNoAmmo("Reload")). | |
|
2 |
1 |
2 |
 |
|
| |
nprotect - 2nd Lieutenant -
 | 1343 |
 Doom Rate: 2.45
|
Отправлено: 15.04.08 14:36:44 | | | zer0: | Я вот сейчас пытаюсь понять смысл флага +AMMO_OPTIONAL. |
ну а зачем, можно ведь просто прописать ammouse 0, разве нет | |
|
1 |
2 |
1 |
 |
|
| |
zer0 = Sergeant Major =
 | 655 |
Doom Rate: 2.13 Posts quality: +56 |
Отправлено: 15.04.08 14:52:02 | | | nprotect я и говорю. Но этот флаг есть в коде нового оружия во многих модах. Я сам его использовал. А когда решил убрать, обнаружил, что оружие при попытке стрелять с пустым магазином не прыгает в стейт перезарядки, даже если в Fire стейте прописано A_JumpIfNoAmmo("Reload"), а вместо этого выбирает другое оружие, будто в нем кончились патроны.
Слушайте, еще, почему при взятии ствола дается в два раза больше патронов, чем прописано в weapon.ammogive? | |
|
2 |
1 |
2 |
 |
|
| |
Nil = 2nd Lieutenant =
 | 1513 |
 Doom Rate: 2.31 Posts quality: +64 |
Отправлено: 15.04.08 15:02:10 | | | zer0, easy или Nightmare и думать нечего. только в них в 2 раза больше патронов даётся  | |
|
1 |
2 |
1 |
 |
|
| |
zer0 = Sergeant Major =
 | 655 |
Doom Rate: 2.13 Posts quality: +56 |
Отправлено: 22.04.08 19:39:30 | | | Народ, я вот голову уже ломаю, ломаю... совсем уже почти разломал, но никак не могу придумать, как бы мне через декорейт создать такую вещь, которая будет отнимать хелсы (в данном случае идет речь об оружии игрока, которое работает за его хелсы), причем не через какой-нибудь thing_damage, а именно отнимать, четко установленное количество хелсов, игнорируя броню игрока и наличие или отсутствие у него бессмертия. Как? Хелс - не итем, через A_takeinventory хелсы не отнимаются, их только через консоль можно отнять... | |
|
2 |
1 |
2 |
 |
|
| |
dukenator UAC Sergeant Major
 | 726 |
 Doom Rate: 2.06 Posts quality: +102 |
Отправлено: 23.04.08 14:27:59 | | | zer0 А чем тебя Thing_Damage не устраивает?Универсальная ведь штука  | |
|
| |
zer0 = Sergeant Major =
 | 655 |
Doom Rate: 2.13 Posts quality: +56 |
Отправлено: 23.04.08 15:09:33 | | | Nil аналогично. Я работаю с Декорейтом через XWE и вообще почти всегда вопросы такого рода задавал там. Впрочем, когда я только начал интересоваться декорейтом, этого топика вообще не было, так что можно списать это на привычку. Теперь буду следить.
dukenator ну ты читал вопрос, или нет? Я же говою: thing_damage - это просто как обычная атака по игроу - броня ее ослабляет, бессмертие ее полностью блокирует. А мне надо, чтобы отнималось всегда и одно и то же количество. | |
|
2 |
1 |
2 |
 |
|
| |
dukenator UAC Sergeant Major
 | 726 |
 Doom Rate: 2.06 Posts quality: +102 |
Отправлено: 23.04.08 15:14:49 | | | zer0 Попробуй тогда, чтобы при стрельбе оружие кидало невидимый актер, который взрывается на вылете - и незабудь прописать ему флаги +PIERCEARMOR и +FOILINVUL  | |
|
| |
zer0 = Sergeant Major =
 | 655 |
Doom Rate: 2.13 Posts quality: +56 |
Отправлено: 24.04.08 01:42:52 | | | dukenator в принципе, это мысль, хотя надо еще проверить, насколько стабильно оно будет работать. Минус тут в том, что такой проджектайл может задеть кого-то рядом стоящего... Или может удастся без этого. Короче, пойду попробую.
P.S. косяк правда будет в том, что отнимать заданное количетсов оно-то и не будет. В Думе ведь формула рандомизации действует. Ее можно разве что уменьшить флагом +STRIFEDAMAGE (или что-то в этом роде), но потенциальный разброс все равно будет от 1-го до 4-х раз... | |
|
2 |
1 |
2 |
 |
|
| |
dukenator UAC Sergeant Major
 | 726 |
 Doom Rate: 2.06 Posts quality: +102 |
Отправлено: 24.04.08 07:58:41 | | | zer0 А ты ему дамаг по формуле поставь:
Например:
Damage (50*1) | |
|
| |
dukenator UAC Sergeant Major
 | 726 |
 Doom Rate: 2.06 Posts quality: +102 |
Отправлено: 25.04.08 13:41:38 | | | Zero Дамаг можно вбивать не просто числом, а по формуле - например: Damage (10*(Random(1,3)+Random(1,8)) - дикий рендом
А если хочешь, чтобы дамаг был фиксированным, пиши Damage (50*1) 50 - любое число | |
|
| |
zer0 = Sergeant Major =
 | 655 |
Doom Rate: 2.13 Posts quality: +56 |
Отправлено: 25.04.08 21:08:45 | | | Так, ладно, я кажется нашел более эффективный способ и сейчас подхожу к вопросу с другого конца.
Вот мне интересно... Если не прибегать к ACS, можно ли реализовать такую штуку: мы берем некий итем (custominventory, иначе никак) и при этом получаем какой-то другой итем (до этого момента все просто) а потом ПОСЛЕ ЗАДЕРЖКИ (например 3000 тиков) этот же итем отнимается. Или вообще происходит любое другое действие, выполняется другая команда, главное - чтобы была ЗАДЕРЖКА. Потому что то, что прописано в стейте pickup (или use или любом стейте CustomInventory, кроме спаун-стейта) выполняется мгновенно, независимо от того, какая длина выставлена кадрам, к которым привязаны команды. | |
|
2 |
1 |
2 |
 |
|
| |
dukenator UAC Sergeant Major
 | 726 |
 Doom Rate: 2.06 Posts quality: +102 |
Отправлено: 26.04.08 05:12:56 | | | zer0 Тогда по идее тот новый итем, который тебе дается должен быть PowerUp'ом  | |
|
| |
nprotect - 2nd Lieutenant -
 | 1343 |
 Doom Rate: 2.45
|
Отправлено: 26.04.08 14:23:21 | | | Falcor есть же функция GetActorAngle http://www.zdoom.org/wiki/GetActorAngle
//******************************************* //ADDED
тут была мессага фалькора про "как узнать угол актора по тиду", но потом пост пропал. мой ответ пусть висит, может кому пригодится  | |
|
1 |
2 |
1 |
 |
|
| |