Welcome to U.A.C. [O.S.A.]
login / register
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
Тема для новичков. Вопросы по маппингу/моддингу - любые!-2 Пред.  1, 2, 3 ... 9, 10, 11 ... 61, 62, 63  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!-2Ответить
АвторСообщение
FoxPlays
= Sergeant Major =
Next rank: UAC Sergeant Major after 36 points
644

Doom Rate: 2.14

Posts quality: +367
Ссылка на пост №181 Отправлено: 31.07.19 19:22:12
1. Можно ли временно сделать чтобы игрок не мог возрождаться? Есть что-то по типу SetPlayerProperty?
Нужно для ACS кода

2. Как сделать чтобы Handler в ZScript срабатывал только один раз после начала уровня?

3. Можно ли string использовать между ACS и ZScript? Например получил нужное содержание для string и с ним потом производить манипуляции в Zscript, и после готовый результат вывести в ACS?

Ещё пример:


ACS:

str playerweapon;

while (PlayerNumber() >= 0)
{
SetActivatorToTarget(new_tid);
playerweapon = GetWeapon();
Delay(1);
}

Zscript:

str playerweapon_t;

playerweapon _t = GetTag(playerweapon);

ACS:

HudMessage( s:playerweapon_t );


( вот так я и пытаюсь получить в ACS тег из оружия :ha: )

Рейтинг сообщения: +1, отметил(и): YURA_111
1 1 1
YURA_111
UAC Sergeant Major
Next rank: Chief Petty Officer after 86 points
764

Doom Rate: 1.98

Posts quality: +136
Ссылка на пост №182 Отправлено: 31.07.19 20:38:13
FoxPlays пишет:
Можно ли временно сделать чтобы игрок не мог возрождаться?


Ох как надо и очень желательно на Zscript
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +807
Ссылка на пост №183 Отправлено: 01.08.19 01:08:32
YURA_111 пишет:
FoxPlays пишет:
Можно ли временно сделать чтобы игрок не мог возрождаться?

Ох как надо и очень желательно на Zscript
FoxPlays, YURA_111, ребят за АЦС\ЗСкрипт не скажу, но есть один забавный трюк по безвозвратному уничтожению игрока без возможности юзать команду "resurrect"... на декоре. :D Вероятно это не то что вам нужно, но вдруг пригодится, да и адаптировать механизм под скрипты думаю будет несложно. Дайте игроку вот эту штуку:
Actor SelfFreezer : CustomInventory
{
+INVENTORY.ALWAYSPICKUP
Inventory.MaxAmount 0
States
{
Pickup:
TNT1 A 0 A_Die //Убиваем игрока. Опционально, главное чтобы в момент смерти он немедленно выполнил следующие действия:
TNT1 A 0 Thing_Stop(0) //или A_Stop //Обязательно прерываем импульс - это важное условие для уничтожения тела во избежание появления призрака игрока! 
TNT1 A 0 A_FreezeDeathChunks //А теперь вызываем эту функцию которая мгновенно уничтожит труп игрока, точнее превратит его в единственный АйсЧанк. Команда resurrect не сработает если нет трупа!
Stop
}
}
//Такой вот ракетой например
Actor FreezerRocket : Rocket replaces Rocket
{
States
{
Death:
TNT1 A 0 A_RadiusGive("SelfFreezer",256,RGF_PLAYERS|RGF_MONSTERS)
//TNT1 A 0 A_GiveToTarget("SelfFreezer")
Goto Super::Death
}
}

=============
Выручайте, господа. Стоило только взяться за АЦС как опять заблудился в трёх соснах. :(

Этот скрипт вызывается в пэйн стэйте неопределённого актора с 3к хп. Проблема в том что он всё время печатает зелёным цветом вместо того чтобы выводить цвета в зависимости от текущих хп:
Script "USSRShieldHealth" (void)
{
int CurrentHp = GetActorProperty(0,APROP_Health);
int SpawnHp = GetActorProperty(0,APROP_SpawnHealth);

If(CurrentHp<GetActorProperty(0,APROP_SpawnHealth*0.1))
{Log(s:"\cg", d:CurrentHp);} //КРАСНЫЙ

Else If(CurrentHp<GetActorProperty(0,APROP_SpawnHealth*0.25)&&CurrentHp>=GetActorProperty(0,APROP_SpawnHealth*0.1))
{Log(s:"\cx", d:CurrentHp);} //ОГНЕННЫЙ

Else If(CurrentHp<GetActorProperty(0,APROP_SpawnHealth*0.33)&&CurrentHp>=GetActorProperty(0,APROP_SpawnHealth*0.25))
{Log(s:"\ci", d:CurrentHp);} //ОРАНЖЕВЫЙ

Else If(CurrentHp<GetActorProperty(0,APROP_SpawnHealth*0.5)&&CurrentHp>=GetActorProperty(0,APROP_SpawnHealth*0.33))
{Log(s:"\cz", d:CurrentHp);} //ТЕАЛ

Else If(CurrentHp<GetActorProperty(0,APROP_SpawnHealth*0.75)&&CurrentHp>=GetActorProperty(0,APROP_SpawnHealth*0.5))
{Log(s:"\cq", d:CurrentHp);} //ТЁМНО-ЗЕЛЁНЫЙ

Else //If(CurrentHp<GetActorProperty(0,APROP_SpawnHealth)&&CurrentHp>=GetActorProperty(0,APROP_SpawnHealth*0.75))
{Log(s:"\cd", d:CurrentHp);} //ЗЕЛЁНЫЙ
}
Пробовал выстраивать конструкцию по этому образцу но без толку. Ещё пытался выстроить через case но тупо не компилится.

И ещё одна странность: если вынести множитель за скобку ИЗ функции

If(CurrentHp<GetActorProperty(0,APROP_SpawnHealth)*0.1)
то наоборот печатает всегда красным. х_х
1 9 1
YURA_111
UAC Sergeant Major
Next rank: Chief Petty Officer after 86 points
764

Doom Rate: 1.98

Posts quality: +136
Ссылка на пост №184 Отправлено: 01.08.19 06:52:13
Void Weaver пишет:
Команда resurrect не сработает если нет трупа!


Вот скажи мне - кто тебя так жестоко обманул??? :ogo: Отсутствие трупа никак не связано с перерождением (респавном).
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +807
Ссылка на пост №185 Отправлено: 01.08.19 06:58:20
Простите, но речь шла о команде ресуррект (о чём есть пруф от разрабов), у меня всё работает как часы. Против естественного респа по команде use это конечно не спасает. Поэтому заранее оговорил:
Void Weaver пишет:
Вероятно это не то что вам нужно


Лучше бы с лог-скриптом подсказал.

Добавлено спустя 23 минуты 26 секунд:

Кстати вот так Мэтт предлагал отключать респаун в мульте:
override void DeathThink()
    {
        if(player)player.cmd.buttons&=~BT_USE;
        super.DeathThink();
    } 
1 9 1
MyNameIs
= 1st Lieutenant =
Next rank: - Captain - after 64 points
2026

Doom Rate: 2.05

Posts quality: +876
Ссылка на пост №186 Отправлено: 01.08.19 08:42:26
YURA_111 пишет:
Отсутствие трупа никак не связано с перерождением (респавном).

но в вики пишет, что связано

Note - cannot be used when the player is "broken apart" e.g. shattered to pieces after being frozen.
1 1 1
YURA_111
UAC Sergeant Major
Next rank: Chief Petty Officer after 86 points
764

Doom Rate: 1.98

Posts quality: +136
Ссылка на пост №187 Отправлено: 01.08.19 09:34:59
MyNameIs пишет:
но в вики пишет, что связано


Я делаю мод ориентированный на мультиплеер. Единственное что действительно нельзя - так это ВОСКРЕСИТЬ игрока другим игроком, - что собственно логично если отсутствует труп. Но если вы просто хотите респавниться - то ничего и НИКОГДА не мешало...
Да и это легко проверяется - я просто на работе, иначе давно бы видео запилил...
FoxPlays
= Sergeant Major =
Next rank: UAC Sergeant Major after 36 points
644

Doom Rate: 2.14

Posts quality: +367
Ссылка на пост №188 Отправлено: 01.08.19 11:24:24
Void Weaver пишет:
Против естественного респа по команде use это конечно не спасает.


Прочитал это после многократных попыток :x
Мне нужно было чтобы отключилось возрождение на один уровень, на карте после смерти начинает идти катсцена. Ладно, попробую как-нибудь сделать без этой функции :)

Что-ж, у меня осталось два не решённых вопроса -

1. Как сделать чтобы Handler в ZScript срабатывал только один раз после начала уровня?
Скрипт -


class MultiplayerMonstersHandler: EventHandler
{
override void WorldThingSpawned( WorldEvent e )
{
CVar mmonsters = CVar.FindCVar("scpack_nommonsters");
if ( multiplayer && e.Thing != NULL && e.Thing.bIsMonster && !( e.Thing.SpawnFlags & MTF_Single ) && mmonsters) {
if(mmonsters.GetInt())
{
e.Thing.ClearCounters();
e.Thing.Destroy();
}
}
}
}


2. Можно ли string использовать между ACS и ZScript? Например получил нужное содержание для string и с ним потом производить манипуляции в Zscript, и после готовый результат вывести в ACS?

Ещё пример:


ACS:

str playerweapon;

while (PlayerNumber() >= 0)
{
SetActivatorToTarget(new_tid);
playerweapon = GetWeapon();
Delay(1);
}

Zscript:

str playerweapon_t;

playerweapon _t = GetTag(playerweapon);

ACS:

HudMessage( s:playerweapon_t );

( вот так я и пытаюсь получить в ACS тег из оружия :ha: )
1 1 1
JSO x
= Warrant Officer =
Next rank: - 2nd Lieutenant - after 10 points
1280

Doom Rate: 2.29

Posts quality: +669
Ссылка на пост №189 Отправлено: 01.08.19 13:54:48
FoxPlays пишет:
1. Как сделать чтобы Handler в ZScript срабатывал только один раз после начала уровня?

Несколько вариантов, в зависимости от того, что тебе нужно. Как понимаю, следующее: чтобы мультиплеерные монстры не спаунились только при загрузке уровня, то есть если они должны появляться каким-нибудь "Thing_Spawn", то они бы появлялись. Если это, то либо используй метод "WorldLoaded( WorldEvent e ) {}" и внутри перебирай всех акторов, либо, что здесь гораздо проще, в "WorldThingSpawned( WorldEvent e ) {}" припиши ещё проверку на "level.time == 0":
if ( multiplayer && !level.time && e.Thing && e.Thing.bIsMonster && !( e.Thing.SpawnFlags & MTF_Single ) ) {}

FoxPlays пишет:
Можно ли string использовать между ACS и ZScript? Например получил нужное содержание для string и с ним потом производить манипуляции в Zscript, и после готовый результат вывести в ACS?

Напрямую невозможно: ACS_Execute() и все его производные, которые можно вызвать через ZScript, понимают в качестве параметров только числовые значения. "CallScript()", который можно использовать для обращения из ACS к ZScript/Decorate, также принимает только числовые значения. Как это обойти: во-первых, можно присваивать некую уже существующую строку типа тега сначала в одной среде, потом, встроенной функцией, брать в другой. Во-вторых, можно использовать только ZScript (там есть аж две-три разных функции вывода на экран: через StatusBar и через RenderOver-/Underlay. Правда, разбираться со взаимодействием сфер влияния (которые play, UI, data) будет долгим процессом, несмотря на явную простоту. В-третьих, на крайний и самый извращённый случай, можно разбивать на одной стороне символы на ASCII-код, посылать каждый по-отдельности, на другой -- собирать обратно в одно слово.

Рейтинг сообщения: +2, отметил(и): Void Weaver, FoxPlays
2 7 1
FoxPlays
= Sergeant Major =
Next rank: UAC Sergeant Major after 36 points
644

Doom Rate: 2.14

Posts quality: +367
Ссылка на пост №190 Отправлено: 01.08.19 14:49:46
JSO x, спасибо!

Ещё вопрос - можно ли использовать FadeTo наоборот?
1 1 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +807
Ссылка на пост №191 Отправлено: 01.08.19 16:58:00
Во-первых, предлагаю РДЦ либо определить точные значения русских вариантов процессов respawn, resurrect, и внешний resurrect\revive, либо же тупо печатать оригинальное название процесса дабы пресечь любые возможные непонятки и затупы в терминологии между "возрождаться", "перерождаться", "воскрешаться" и "респауниться". :)

Во-вторых, таки совет Мэтта оказывается не решение а подсказка в какую сторону копать, но походу это самый верный способ ограничить respawn на зскрипте (отсюда и далее):

You can override PlayerPawn's DeathThink method and code in your custom death/revival game mechanics there.
Ссыль на соус активации respawn по команде use.
-------
Вопрос с АЦС уже подсказали - оказывается результат каждого выражения надо было делить на 65536 (>>16).

Рейтинг сообщения: +2, отметил(и): JSO x, FoxPlays
1 9 1
YURA_111
UAC Sergeant Major
Next rank: Chief Petty Officer after 86 points
764

Doom Rate: 1.98

Posts quality: +136
Ссылка на пост №192 Отправлено: 01.08.19 17:25:07
Void Weaver пишет:
Во-первых, предлагаю РДЦ либо определить точные значения русских вариантов процессов respawn, resurrect, и внешний resurrect\revive, либо же тупо печатать оригинальное название процесса дабы пресечь любые возможные непонятки и затупы в терминологии между "возрождаться", "перерождаться", "воскрешаться" и "респауниться".


А что тут определяться то - с самого начала в Дум респавн\респоун\RESPAWN\перерождение означал перерождение в точке старта, будь то монстр или игрок с потерей всего набранного\накопленного в уровне и возвращение всех статов и инвентори по default...

Ну а воскрешение\RESURRECT появилось уже наверное со входом ZSCRIPT (если не считать чит Resurrect в консоли и ARCH-Vile-овские возможности)


Void Weaver пишет:
Кстати вот так Мэтт предлагал отключать респаун в мульте:
override void DeathThink()
{
if(player)player.cmd.buttons&=~BT_USE;
super.DeathThink();
}


А можно к этому как то прикрутить инвентори итем, дабы в зависимости от количества этого самого итема можно было делать RESPAWN, т.е. например если игрок погибал на уровне уже 5 раз, то RESPAWN не срабатывал бы, но чтобы было допустимо воскрешение?
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +807
Ссылка на пост №193 Отправлено: 01.08.19 17:43:40
YURA_111
Ок, буду придерживаться твоей терминологии. :)

FoxPlays пишет:
Ещё вопрос - можно ли использовать FadeTo наоборот?
Это простите как "наоборот"? о_0
1 9 1
FoxPlays
= Sergeant Major =
Next rank: UAC Sergeant Major after 36 points
644

Doom Rate: 2.14

Posts quality: +367
Ссылка на пост №194 Отправлено: 01.08.19 17:48:54
Void Weaver пишет:
Это простите как "наоборот"? о_0


Обычно FadeTo работает так - FadeTo (0, 0, 0, 0.5, 2.0) = затемнение экрана.

Как сделать чтобы от затемнённого экрана он светлел?


Уже решил! Просто не заметил существование - FadeRange :x


FadeRange(0,0,0,1.0,0,0,0,0,4.0);
1 1 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +807
Ссылка на пост №195 Отправлено: 01.08.19 17:52:53
255*3, не?
-----
Ну тоже вариант.

Рейтинг сообщения: +1, отметил(и): FoxPlays
1 9 1
MyNameIs
= 1st Lieutenant =
Next rank: - Captain - after 64 points
2026

Doom Rate: 2.05

Posts quality: +876
Ссылка на пост №196 Отправлено: 01.08.19 18:25:19
у FadeTo же есть amount. ставишь 0 - будет переход в прозрачно.


FadeTo (0, 0, 0, 0.0, 2.0);

Рейтинг сообщения: +1, отметил(и): FoxPlays
1 1 1
FoxPlays
= Sergeant Major =
Next rank: UAC Sergeant Major after 36 points
644

Doom Rate: 2.14

Posts quality: +367
Ссылка на пост №197 Отправлено: 01.08.19 18:36:26
MyNameIs, спасибо, но к сожалению это так не работает! :o
1 1 1
MyNameIs
= 1st Lieutenant =
Next rank: - Captain - after 64 points
2026

Doom Rate: 2.05

Posts quality: +876
Ссылка на пост №198 Отправлено: 01.08.19 19:07:50
FoxPlays
ты что пытаешься высветлить? черный экран, залитый FadeTo?
или сразу пытаешься сделать переход в прозрачно, когда все и так прозрачно?

потому что вот это должно работать
script 666 ENTER
{
FadeTo (0, 0, 0, 1.0, 0.0);
Delay(20);
FadeTo (0, 0, 0, 0.0, 1.0);
}

Рейтинг сообщения: +2, отметил(и): Void Weaver, FoxPlays
1 1 1
FoxPlays
= Sergeant Major =
Next rank: UAC Sergeant Major after 36 points
644

Doom Rate: 2.14

Posts quality: +367
Ссылка на пост №199 Отправлено: 01.08.19 19:11:04
MyNameIs
Да, это работает, спасибо, но пожалуй воспользуюсь FadeRange(0,0,0,1.0,0,0,0,0,4.0) для большей компактности :o
1 1 1
JSO x
= Warrant Officer =
Next rank: - 2nd Lieutenant - after 10 points
1280

Doom Rate: 2.29

Posts quality: +669
Ссылка на пост №200 Отправлено: 01.08.19 20:28:46
YURA_111 пишет:
А можно к этому как то прикрутить инвентори итем, дабы в зависимости от количества этого самого итема можно было делать RESPAWN, т.е. например если игрок погибал на уровне уже 5 раз, то RESPAWN не срабатывал бы, но чтобы было допустимо воскрешение?

override void DeathThink() {
    PlayerPawn playerActor = PlayerPawn( self );

    if ( playerActor.player && multiplayer && ( playerActor.CountInv( "DeathItem" ) >= 5 ) )
        playerActor.player.cmd.buttons &= ~BT_USE;

    Super.DeathThink();
} 

Рейтинг сообщения: +3, отметил(и): VladGuardian, YURA_111, Void Weaver
2 7 1
Страница 10 из 63Перейти наверх Пред.  1, 2, 3 ... 9, 10, 11 ... 61, 62, 63  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!-2