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

Doom Rate: 2.26

Posts quality: +250
Ссылка на пост №41 Отправлено: 30.06.19 08:32:52
Void Weaver пишет:
Конфиг PickActor в студию плиз.


Оу, мне понадобилось чуть-чуть подольше разобраться в скрипте и я уже нашёл решение самостоятельно :x

Но остался ещё вопрос, как вывести никнейм игрока?
1 1 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +785
Ссылка на пост №42 Отправлено: 30.06.19 08:45:09
GetUserCVarString(<playernumber>,"name")

ЕЯПП, номер игрока можно получить через PlayerNumber()

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

Либо можно через Print(n:PlayerNumber())
1 9 1
FoxPlays
= Master Sergeant =
Next rank: - Sergeant Major - after 4 points
526

Doom Rate: 2.26

Posts quality: +250
Ссылка на пост №43 Отправлено: 30.06.19 09:14:43
Проверил через GetUserCvarString, не выводит :(
Также я проверил через Print, но он выводит никнейм игрока за которого играешь


#library "loadacs"
#include "zcommon.acs"

str playername;
int playermaxhealth;
int playerhealthn;

script "playerinfo" ENTER
{
while(TRUE)
{
int old_tid = PickActor(0, GetActorAngle(0), GetActorPitch(0), 2048.0, 0);
int new_tid = UniqueTID();

if (PickActor(0, GetActorAngle(0), GetActorPitch(0), 2048.0, new_tid, MF_FRIENDLY))
{
playername = GetUserCVarString(new_tid,"name");
playermaxhealth = GetActorProperty(new_tid, APROP_SpawnHealth);
playerhealthn = GetActorProperty(new_tid, APROP_HEALTH);

HudMessage( s:playername, s:"\n", d:playerhealthn, s:" / ", d:playermaxhealth; HUDMSG_FADEOUT, 112223, CR_WHITE, 0.5, 0.8, 0.2, 0.1);
}
Thing_ChangeTID(new_tid, old_tid);
Delay(1);
}
}
1 1 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +785
Ссылка на пост №44 Отправлено: 30.06.19 09:29:08
FoxPlays пишет:
script "playerinfo" ENTER
Опять ENTER...

FoxPlays пишет:
playername = GetUserCVarString(new_tid,"name");
Тут используется НЕ тид а целое число, означающее номер игрока. Полагаю что правильнее GetUserCVarString(PlayerNumber(),"name"), но это сработает если активатором скрипта будет актор который был выбран самой PickActor.
Если что, я хз как менять активатор по тиду не выходя за пределы скрипта. Мб. надо где-то вклинить что-то типа SetActivator или SetActivatorToTarget.

Рейтинг сообщения: +1, отметил(и): FoxPlays
1 9 1
Invisible Warrior
= Lance Corporal =
Next rank: - Master Corporal - after 36 points
164

Doom Rate: 1.95

Posts quality: +76
Ссылка на пост №45 Отправлено: 30.06.19 09:56:10
У меня есть предложение, может все-таки разделить тему на две: тему для "реально действительно новичков", с вопросами в духе "Как правильно сделать ловушку - телепорт монстров" или "как импортировать монстров из одной игры в другую", и тему, в которой обсуждаются вышенаписанные вещи, которые требуют большого опыта и к новичкам не относятся вообще никак?

Это бы помогло ориентироваться в информации и заодно из-за гораздо меньшего размера "новичковой" темы, служило бы также своего рода FAQ'ом. Ну а профи вопросы обсуждались бы в другой теме совершенно свободно.
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +785
Ссылка на пост №46 Отправлено: 30.06.19 16:17:18
Необходимо ответить в этой теме, чтобы увидеть скрытый текст.

1 9 1
svl
Recruit
Next rank: Marine after 6 points
14

Doom Rate: 2

Ссылка на пост №47 Отправлено: 01.07.19 11:00:15
Товарищи, а может кто-нибудь сказать, откуда на картах берутся лишние вертексы? Например, открываю карту в Doom builder, там их 784, ту же карту открываю в слэйде - их уже 914
Invisible Warrior
= Lance Corporal =
Next rank: - Master Corporal - after 36 points
164

Doom Rate: 1.95

Posts quality: +76
Ссылка на пост №48 Отправлено: 01.07.19 11:34:09
svl
это как-то связано с тем, как node builder разбивает карту (в процессе этого создаются дополнительные вертексы - технические и не доступные для манипуляций маппером). Возможно в слейде они доступны. А может быть недоступны, но считаются в счетчике, я точно не знаю.


подробности тут: https://doomwiki.org/wiki/Vertex и здесь https://doomwiki.org/wiki/Node_builder

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

Рейтинг сообщения: +2, отметил(и): Mostcus, svl
svl
Recruit
Next rank: Marine after 6 points
14

Doom Rate: 2

Ссылка на пост №49 Отправлено: 01.07.19 12:43:40
Как-то практика не совсем сходится с теорией. Размер лампа соответствует количеству отображаемых в списке слэйда вертексов. Удалил эти "лишние" вертексы, размер лампа уменьшился, но опять же соответствует. Карта остается вполне играбельной. Т.е., никаких дополнительных вертексов автоматом не создается.
Может, эти вертексы были созданы в каком-то редакторе, потом в процессе редактирования карты были удалены, но информация о них осталась?
Да, карта для Еретика, если это важно
ZZYZX
= Commissar =
Next rank: - UAC Commissar - after 356 pointsМодератор форума
5444

Doom Rate: 1.72

Posts quality: +1597
Ссылка на пост №50 Отправлено: 01.07.19 13:24:35
Возможно есть дублирующиеся вертексы которые билдер затирает при загрузке (потому что они на одинаковых координатах). Попробуй сохранить карту билдером, скорее всего количество сведётся к одинаковому в обоих редакторах.
2 2 1
svl
Recruit
Next rank: Marine after 6 points
14

Doom Rate: 2

Ссылка на пост №51 Отправлено: 01.07.19 15:51:07
Сохранять я пробовал, остается то же самое. Координаты у этих лишних оригинальные (т.е. не дубли), попадают где-нибудь на линии. Подумалось еще вот что: возможно, карта делалась в редакторе, который действительно добавлял свои вертексы, а более современные этого уже не делают, т.к. ресурсы компов выросли, и необходимость в этом отпала
Invisible Warrior
= Lance Corporal =
Next rank: - Master Corporal - after 36 points
164

Doom Rate: 1.95

Posts quality: +76
Ссылка на пост №52 Отправлено: 01.07.19 21:10:57
Если попадают на линии, то да, это и есть скорее всего те дополнительные вертексы от Нод билдера, они именно так и получаются, разбиение лайндфов на "сеги"
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +785
Ссылка на пост №53 Отправлено: 02.07.19 08:31:32
Вероятно всем насрать, но тем не менее.
Наткнулся на один из своих первых реквестов в моддинге, и вопрос был о том как работает A_CheckBlock, и почему она не работала в моём случае. Тогда вопрос так и не был решён, только сейчас допёр:
Скрытый текст:

A_CheckBlock сначала учитывает THRU-флаги если таковые имеются, а затем проверяет находится ли ТОЧКА ВЫЗОВА* функции в состоянии коллизии при которой дальнейшее перемещение с помощью A_Chase или подобной ф-ции будет невозможно. Если это так то совершает джамп в указанный стэйт.

Теперь подводные камни или почему работал код Юры и не работал мой(A_CheckBlock("Charge2")):
YURA_111 пишет:
Вот один из многочисленных примеров в моем коде:
Missile:
MNTR X 0 A_FaceTarget
MNTR X 0 A_PlaySound("minotaur/sight")
MNTR X 0 A_CheckBlock("MissileA", CBF_DROPOFF, AAPTR_TARGET, 512, 0, 110)
Goto PreCharge
Все работает - отчего ж у тебя трабла - сча гляну...

Add: не понимаю почему у тебя не работает
1. *Дело в том что эта проверка ТОЧЕЧНАЯ (проверяется НЕ весь актор а только ТОЧКА в определённых координатах) и по умолчанию (при 0 x-офсете) выполняется непосредственно в центре актора-коллера, т. е. монстр уткнувшийся во что\кого-либо при нулевом х-офсете никогда не удостоверится что его что-то блочит. Иными словами значение х-офсета ф-ции должно быть больше значения радиуса актора-коллера!
2. По умолчанию ф-ция использует AAPTR_TARGET, тогда как для корректной проверки самого себя нужно использовать AAPTR_DEFAULT поинтер!
Вывод: для регулярного монстра наиболее оптимальная форма записи функции для чарджа (векторного движения НЕ-Чейс подобными функциями) будет вида:

A_CheckBlock("Стэйт",<флаги>, AAPTR_DEFAULT,Radius+frandom(1,5))


Actor CBLImp : DoomImp replaces DoomImp //Бухие импо-бычары, будут биться со всеми об кого шарахнутся башкой
{
const int CBF_MYFLAGSET = CBF_SETTARGET|CBF_DROPOFF;
States
{
Melee:
Missile:
TNT1 A 0 A_Jump(128,"ChargeAPSTENU")
Goto Super::Melee

ChargeAPSTENU:
/* //Обычная форма записи
TROO A 2 A_FaceTarget
TROO A 0 A_Recoil(-2.0)
TROO A 0 A_CheckBlock("Pain",CBF_MYFLAGSET,AAPTR_DEFAULT,Radius+frandom(MeleeRange*0.1,MeleeRange*0.2)+1)
TROO A 2 A_FaceTarget
TROO A 0 A_Recoil(-2.0)
TROO A 0 A_CheckBlock("Pain",CBF_MYFLAGSET,AAPTR_DEFAULT,Radius+frandom(MeleeRange*0.1,MeleeRange*0.2)+1)
TROO B 2 A_FaceTarget
TROO B 0 A_Recoil(-2.0)
TROO B 0 A_CheckBlock("Pain",CBF_MYFLAGSET,AAPTR_DEFAULT,Radius+frandom(MeleeRange*0.1,MeleeRange*0.2)+1)
TROO B 2 A_FaceTarget
TROO B 0 A_Recoil(-2.0)
TROO B 0 A_CheckBlock("Pain",CBF_MYFLAGSET,AAPTR_DEFAULT,Radius+frandom(MeleeRange*0.1,MeleeRange*0.2)+1)
TROO C 2 A_FaceTarget
TROO C 0 A_Recoil(-2.0)
TROO C 0 A_CheckBlock("Pain",CBF_MYFLAGSET,AAPTR_DEFAULT,Radius+frandom(MeleeRange*0.1,MeleeRange*0.2)+1)
TROO C 2 A_FaceTarget
TROO C 0 A_Recoil(-2.0)
TROO C 0 A_CheckBlock("Pain",CBF_MYFLAGSET,AAPTR_DEFAULT,Radius+frandom(MeleeRange*0.1,MeleeRange*0.2)+1)
TROO D 2 A_FaceTarget
TROO D 0 A_Recoil(-2.0)
TROO D 0 A_CheckBlock("Pain",CBF_MYFLAGSET,AAPTR_DEFAULT,Radius+frandom(MeleeRange*0.1,MeleeRange*0.2)+1)
TROO D 2 A_FaceTarget
TROO D 0 A_Recoil(-2.0)
TROO D 0 A_CheckBlock("Pain",CBF_MYFLAGSET,AAPTR_DEFAULT,Radius+frandom(MeleeRange*0.1,MeleeRange*0.2)+1)
Loop
*/

TROO AABBCCDD 2 //Форма записи в анон-"упаковке"
{
A_FaceTarget;
A_Recoil(-2.0);
If(A_CheckBlock("Pain",CBF_MYFLAGSET,AAPTR_DEFAULT,Radius+frandom(MeleeRange*0.1,MeleeRange*0.2)+1,0,0))
	{
		Return state("Pain");
	}
Else
	{
		Return state("");
	}
}
Loop
}
}


Рейтинг сообщения: +3, отметил(и): Zeberpal_98, Mostcus, YURA_111
1 9 1
Zeberpal_98
UAC Sergeant Major
Next rank: UAC Sergeant Major after 13 points
747

Doom Rate: 2

Posts quality: +115
Ссылка на пост №54 Отправлено: 02.07.19 13:32:08
По крайней мере, теперь я знаю, что можно джампить монстра, если он заблокирован, и если что-то пойдет не так, то загляну в этот пост.
1 1
FoxPlays
= Master Sergeant =
Next rank: - Sergeant Major - after 4 points
526

Doom Rate: 2.26

Posts quality: +250
Ссылка на пост №55 Отправлено: 02.07.19 16:50:33
Void Weaver

Что-то задержался с ответом :)

Да, я всё сделал через SetActivatorToTarget.
Пришлось делать доп. скрипт :x


script "playerinfo2" ENTER
{
while (PlayerNumber() >= 0)
{
SetActivatorToTarget(new_tid);
playername = GetUserCVarString(PlayerNumber(),"name");
Delay(1);
}
}


Кстати, а как взять информацию о броне и оружии в руках? :o

UPD: С оружием в руках решил с помощью GetWeapon() :)

И как взять тег из актора не в ZScript, а в ACS?

См. тут

Рейтинг сообщения: +1, отметил(и): Void Weaver
1 1 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +785
Ссылка на пост №56 Отправлено: 02.07.19 17:13:42
Zeberpal_98
Вообще-то, в аналогичный чек умеет более сложная и гибкая A_CheckLOF и последние года я использовал именно её в качестве инструмента проверки на блок движения.
Но для проверки блока "изнутри" актора A_CheckBlock просто незаменима, плюс в рядовых случаях разумеется лучше использовать надлежащую функцию вместо A_CheckLOF в качестве её громоздкого суррогата.

FoxPlays
Грац, растёшь как на дрожжах. :)

GetArmorInfo - вернёт инфу о типе армора и степени защиты;
CheckInventory("BasicArmor") - вернёт текущее количество очков брони.

Получить значение собственного тид можно просто использовав кейворд "tid", для получения тидов таргета, трэйсера или мастера используй GetActorProperty(<tid>,APROP_TargetTID), APROP_TracerTID или APROP_MasterTID соответственно.
1 9 1
FoxPlays
= Master Sergeant =
Next rank: - Sergeant Major - after 4 points
526

Doom Rate: 2.26

Posts quality: +250
Ссылка на пост №57 Отправлено: 02.07.19 17:40:04
Void Weaver пишет:
Получить значение собственного тид можно просто использовав кейворд "tid", для получения тидов трэйсера или таргета используй GetActorProperty(<tid>,APROP_TargetTID) или APROP_TracerTID соответственно.


Хмм... интересно, интересно...

Void Weaver пишет:
Грац, растёшь как на дрожжах. :)


Спасибо :ha:

Void Weaver пишет:
GetArmorInfo - вернёт инфу о типе армора и степени защиты;
CheckInventory("BasicArmor") - вернёт текущее количество очков брони.


Спасибо, сделал через CheckInventory :)

И всё таки...

FoxPlays пишет:
И как взять тег из актора не в ZScript, а в ACS?


Хотел взять тег из оружия которое взято при помощи GetWeapon()

И можно ли как нибудь ещё вытащить информацию о кол-ве патрон которые использует игрок в данный момент?
1 1 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +785
Ссылка на пост №58 Отправлено: 02.07.19 17:44:17
FoxPlays пишет:
Спасибо, сделал через CheckInventory :)
Ну в принципе ничто не мешает вызвать в скрипте "лестничное" инфо:
GetArmorInfo(Армортайп)
GetArmorInfo(АрморСэйв%)
CheckInventory("BasicArmor")
Получится весьма детально. ;)

FoxPlays пишет:
И можно ли как нибудь ещё вытащить информацию о кол-ве патрон которые использует игрок в данный момент?
CheckInventory же.

Void Weaver пишет:
Хотел взять тег из оружия которое взято при помощи GetWeapon()
А зачем, если не секрет?
1 9 1
FoxPlays
= Master Sergeant =
Next rank: - Sergeant Major - after 4 points
526

Doom Rate: 2.26

Posts quality: +250
Ссылка на пост №59 Отправлено: 02.07.19 18:16:32
Void Weaver пишет:

Void Weaver пишет:
Хотел взять тег из оружия которое взято при помощи GetWeapon()
А зачем, если не секрет?


Просто выводит название актора, а хотелось прямо его имя (тег).
Будет лучше (с пробелами и т.д.) + название оружия будет переведено :)

Например тег рокетлаунчера:


Tag "$TAG_ROCKETLAUNCHER"

Название актора: RocketLauncher
Тег актора: Ракетница


Добавлено спустя 12 минут 9 секунд:

Void Weaver пишет:
CheckInventory же.


Нет, именно те патроны которые использует оружие которое в руках у игрока.

Можно привести в пример - Ammo1 из SBARINFO
1 1 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +785
Ссылка на пост №60 Отправлено: 02.07.19 20:26:35
FoxPlays пишет:
Нет, именно те патроны которые использует оружие которое в руках у игрока.
С 2009 года этот вопрос и его производные поднимались на z-форуме как минимум 5 раз и каждый раз ответ был 2*нет: "нет" - на ацс нельзя, и "нет" - такие фичи запиливать не планируется.
Предлагаются либо решения через SBARINFO (типа такого), либо же прописывать чеки на вручную преопределённые аммотайпы (типа так).

А вот для решения на зскипте и ходить далеко не надо:
Ammo, Ammo, int, int GetCurrentAmmo () const
	{
		Ammo ammo1, ammo2;
		if (CPlayer.ReadyWeapon != NULL)
		{
			ammo1 = CPlayer.ReadyWeapon.Ammo1;
			ammo2 = CPlayer.ReadyWeapon.Ammo2;
			if (ammo1 == NULL)
			{
				ammo1 = ammo2;
				ammo2 = NULL;
			}
		}
		else
		{
			ammo1 = ammo2 = NULL;
		}
		let ammocount1 = ammo1 != NULL ? ammo1.Amount : 0;
		let ammocount2 = ammo2 != NULL ? ammo2.Amount : 0;
		return ammo1, ammo2, ammocount1, ammocount2;
	}


Кстати забыл упомянуть важный способ получения тида по самому активатору: ActivatorTID.
1 9 1
Страница 3 из 20Перейти наверх Пред.  1, 2, 3, 4 ... 18, 19, 20  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!-2