Welcome to U.A.C. [O.S.A.]
login / register 
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
Вопрос по GZDB+ZScript
   Список разделов - Местечко мапперов и моддеров - Вопрос по GZDB+ZScriptОтветить
АвторСообщение
axredneck
= Sergeant =
Next rank: - Master Sergeant - after 6 points
394

Doom Rate: 1.91

Posts quality: +145
Ссылка на пост №1 Отправлено: 19.07.18 03:28:14
Допустим, создаю я на Decorate actor'а, чтобы вставить его на свою мапу:
actor Stul 9573  // Число взял с потолка
{
...
}

Отныне GZDB будет идентифицировать сей actor по этому вот волшебному числу. Но вот, например, хочу я "модно-молодежно" переписать свой мод на ZScript:
class Stul
{
...
}

(Ну или не переписать, а новый мод создать целиком на ZScript.) Ага, и теперь я не могу в GZDB добавить мой Stul на мапу.
Вопрос: как правильно сделать, чтобы actor, определенный в ZScript, можно было использовать в GZDB ?
1
Печенька
= Sergeant =
Next rank: - Master Sergeant - after 21 points
379

Doom Rate: 2.33

Posts quality: +52
Ссылка на пост №2 Отправлено: 19.07.18 04:11:57
В лампе MAPINFO пишется:
DoomEdNums
{
9573 = Stul
}

Рейтинг сообщения: +3, отметил(и): JSO x, Void Weaver, axredneck
1
axredneck
= Sergeant =
Next rank: - Master Sergeant - after 6 points
394

Doom Rate: 1.91

Posts quality: +145
Ссылка на пост №3 Отправлено: 19.07.18 14:06:38
Печенька, спасибо, учту.
1
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1630
Ссылка на пост №4 Отправлено: 19.07.18 15:24:33
class Stul : Actor


А то так-то гздб игнорит классы, иерархия которых не утыкается в актора.

Рейтинг сообщения: +4, отметил(и): RastaManGames, JSO x, Void Weaver, axredneck
2 2 1
axredneck
= Sergeant =
Next rank: - Master Sergeant - after 6 points
394

Doom Rate: 1.91

Posts quality: +145
Ссылка на пост №5 Отправлено: 19.07.18 18:52:07
ZZYZX:
class Stul : Actor

Еще большее спасибо! Попозже попробую.
1
axredneck
= Sergeant =
Next rank: - Master Sergeant - after 6 points
394

Doom Rate: 1.91

Posts quality: +145
Ссылка на пост №6 Отправлено: 07.08.18 23:43:43
Не прокатывает :(
Вот мой mapinfo.txt:
DoomEdNums
{
	5279 = TheVoice
}

Вот мой zscript.txt:
//#include "scripts/thevoice.txt" // временно убрал для чистоты эксперимента

// Голоса

class TheVoice : Demon
{ 
	//$Category DELIRIOOM
	default
	{
		speed 3;
	}
}

В GZDB-Bugfix в категории "DELIRIOOM" нету моего TheVoice. При этом GZDoom ни на что не ругается.
1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8389

Doom Rate: 2.08

Posts quality: +1986
Ссылка на пост №7 Отправлено: 08.08.18 00:20:59
axredneck
Могу предположить, что зскрипт не воспринимает напрямую наследование от декорэйтных объектов, у тебя же там прописано наследование от демона.
1 7 2
axredneck
= Sergeant =
Next rank: - Master Sergeant - after 6 points
394

Doom Rate: 1.91

Posts quality: +145
Ссылка на пост №8 Отправлено: 08.08.18 00:34:40
Все, нашел решение вот тут! Надо было просто добавить gzdoom.pk3 в качестве ресурса.

Рейтинг сообщения: +1, отметил(и): RastaManGames
1
Hizenfort
- UAC Gunner -
Next rank: = UAC Gunner = after 20 points
40

Doom Rate: 2

Posts quality: +37
Ссылка на пост №9 Отправлено: 18.07.21 14:18:54
Решил переписать функцию A_Chase под себя, так как оригинальная совсем не подходит. Нашел тему, где выложили портированную версию chase на zscript. Решил опробовать её без изменений, но она не работает. Либо же я неверно обращаюсь к методу. Делал это через указатель (надеюсь не ошибся с термином) таким образом:
   
 See:
	  TROO AABBCCDD 2 
	  {
		let ptrimp = PortedActor(target);

		ptrimp.A_PortedChase();


	  }
	  Loop;

в итоге выдает ошибку tried to read from adress zero. Судя по всему неверно инициализаровал указатель. Может обращаться к методам класса нужно как то по другому?

UPD:
А может есть способ не использовать zscript для написания кастомной функции?

UPD2:
Попробовал вызвать метод класса по другому:
   
 See:
	  TROO AABBCCDD 2 
	  {
		class<Actor> cls = "PortedActor";
		cls.A_PortedChase();
	  }
	  Loop;

но выдает ошибку при вызове: Invalid expression on left hand side of A_PortedChase
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1630
Ссылка на пост №10 Отправлено: 18.07.21 16:08:37
tried to read from address zero значит, что target не является экземпляром PortedActor.

Вызывать метод класса по другому не получится в принципе. Нужно наследоваться от него или переделывать либу чтобы использовались миксины.

Суть в том что вызывать чейс нужно не от таргета вообще. А от self.
2 2 1
Hizenfort
- UAC Gunner -
Next rank: = UAC Gunner = after 20 points
40

Doom Rate: 2

Posts quality: +37
Ссылка на пост №11 Отправлено: 18.07.21 17:18:03
ZZYZX, спасибо, понял. Значит придется придумывать что то со стандартной функцией
JSO x
- 2nd Lieutenant -
Next rank: = 2nd Lieutenant = after 106 points
1334

Doom Rate: 2.26

Posts quality: +726
Ссылка на пост №12 Отправлено: 19.07.21 15:44:17
ZZYZX пишет:
tried to read from address zero значит, что target не является экземпляром PortedActor.

Это следствие, а не сразу "значит". Такое сообщение появляется, когда пытаешься вызвать метод или обратиться к полю несуществующего объекта. В данном случае такой получился, так как "target" у данного актора оказался не класса "PortedActor" -- а ZScript при невозможности явно привести тип объекта превращает переменную, которой мы пытаемся так что-то присвоить, в NULL.

Hizenfort пишет:
		class<Actor> cls = "PortedActor";
		cls.A_PortedChase();

Класс -- это статика, трафарет в единственном экземпляре, по которому во время исполнения программы уже штампуются "живые" объекты. А "A_PortedChase()" работает с движением какого-то конкретно объекта -- ну и попытка вызова его для трафарета вполне законно обрывается.

Так что тебе надо-то в итоге сделать -- какую задачу, с которой обычный "A_Chase" не справляется?
2 7 1
Hizenfort
- UAC Gunner -
Next rank: = UAC Gunner = after 20 points
40

Doom Rate: 2

Posts quality: +37
Ссылка на пост №13 Отправлено: 20.07.21 12:15:41
JSO x пишет:
Так что тебе надо-то в итоге сделать -- какую задачу, с которой обычный "A_Chase" не справляется?

Монстры, когда преследуют, двигаются при этом из стороны в сторону. Я попытался сгладить их движения, добавив chase к пустому кадру с 0 временем показа, и также добавил A_Recoil(-2). Но это все равно выглядит малость неуклюже.
Есть еще проблема с застреванием в стенах почему то (не может зайти за угол, либо очень долго через него протискивается). Это я попытался исправить с помощью функции A_CheckBlock, но выглядит это совсем плохо и иногда монстр просто разворачивается и уходит обратно

Собственно, нужно чтобы монстр четко следовал за игроком
Страница 1 из 1Перейти наверх
   Список разделов - Местечко мапперов и моддеров - Вопрос по GZDB+ZScript