Автор | Сообщение |
axredneck = Sergeant =
| 394 |
Doom Rate: 1.91 Posts quality: +145 |
Отправлено: 19.07.18 03:28:14 | | | Допустим, создаю я на Decorate actor'а, чтобы вставить его на свою мапу:
actor Stul 9573 // Число взял с потолка
{
...
}
Отныне GZDB будет идентифицировать сей actor по этому вот волшебному числу. Но вот, например, хочу я "модно-молодежно" переписать свой мод на ZScript:
class Stul
{
...
}
(Ну или не переписать, а новый мод создать целиком на ZScript.) Ага, и теперь я не могу в GZDB добавить мой Stul на мапу.
Вопрос: как правильно сделать, чтобы actor, определенный в ZScript, можно было использовать в GZDB ? | |
|
| |
Печенька = Sergeant =
| 379 |
Doom Rate: 2.33 Posts quality: +52 |
Отправлено: 19.07.18 04:11:57 | | | В лампе MAPINFO пишется:
DoomEdNums
{
9573 = Stul
} |
|
|
| |
axredneck = Sergeant =
| 394 |
Doom Rate: 1.91 Posts quality: +145 |
Отправлено: 19.07.18 14:06:38 | | | Печенька, спасибо, учту. | |
|
| |
ZZYZX - UAC Commissar -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
Отправлено: 19.07.18 15:24:33 | | | class Stul : Actor
А то так-то гздб игнорит классы, иерархия которых не утыкается в актора. |
|
|
2 |
2 |
1 |
|
|
| |
axredneck = Sergeant =
| 394 |
Doom Rate: 1.91 Posts quality: +145 |
Отправлено: 19.07.18 18:52:07 | | | ZZYZX: | class Stul : Actor |
Еще большее спасибо! Попозже попробую. | |
|
| |
axredneck = Sergeant =
| 394 |
Doom Rate: 1.91 Posts quality: +145 |
Отправлено: 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 ни на что не ругается. | |
|
| |
Shadowman UAC General
| 8389 |
Doom Rate: 2.08 Posts quality: +1986 |
Отправлено: 08.08.18 00:20:59 | | | axredneck
Могу предположить, что зскрипт не воспринимает напрямую наследование от декорэйтных объектов, у тебя же там прописано наследование от демона. | |
|
1 |
7 |
2 |
|
|
| |
axredneck = Sergeant =
| 394 |
Doom Rate: 1.91 Posts quality: +145 |
Отправлено: 08.08.18 00:34:40 | | | Все, нашел решение вот тут! Надо было просто добавить gzdoom.pk3 в качестве ресурса. |
|
|
| |
Hizenfort - UAC Gunner -
| 40 |
Doom Rate: 2 Posts quality: +37 |
Отправлено: 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 -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
Отправлено: 18.07.21 16:08:37 | | | tried to read from address zero значит, что target не является экземпляром PortedActor.
Вызывать метод класса по другому не получится в принципе. Нужно наследоваться от него или переделывать либу чтобы использовались миксины.
Суть в том что вызывать чейс нужно не от таргета вообще. А от self. | |
|
2 |
2 |
1 |
|
|
| |
Hizenfort - UAC Gunner -
| 40 |
Doom Rate: 2 Posts quality: +37 |
Отправлено: 18.07.21 17:18:03 | | | ZZYZX, спасибо, понял. Значит придется придумывать что то со стандартной функцией | |
|
| |
JSO x - 2nd Lieutenant -
| 1334 |
Doom Rate: 2.26 Posts quality: +726 |
Отправлено: 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 -
| 40 |
Doom Rate: 2 Posts quality: +37 |
Отправлено: 20.07.21 12:15:41 | | | JSO x пишет: | Так что тебе надо-то в итоге сделать -- какую задачу, с которой обычный "A_Chase" не справляется? |
Монстры, когда преследуют, двигаются при этом из стороны в сторону. Я попытался сгладить их движения, добавив chase к пустому кадру с 0 временем показа, и также добавил A_Recoil(-2). Но это все равно выглядит малость неуклюже.
Есть еще проблема с застреванием в стенах почему то (не может зайти за угол, либо очень долго через него протискивается). Это я попытался исправить с помощью функции A_CheckBlock, но выглядит это совсем плохо и иногда монстр просто разворачивается и уходит обратно
Собственно, нужно чтобы монстр четко следовал за игроком | |
|
| |