Будет ли эта тема полезной/жизнеспособной? |
Ответ если Вы программист: [Да! Буду просматривать заказы и размещать скрипты] | | 20% | [ 8 ] |
Ответ если Вы программист: [Нет! Эта тема бред] | | 5% | [ 2 ] |
Ответ если Вы программист: [Буду иногда размещать скрипты, но заказы.. лень] | | 32% | [ 13 ] |
Ответ если Вы заказчик: [Да!] | | 42% | [ 17 ] |
Ответ если Вы заказчик: [Нет!] | | 0% | [ 0 ] |
| Проголосовало думеров : 28 | Всего оставлено голосов : 40 | | Голосование без ограничения по времени |
|
Автор | Сообщение |
Infernal_KoT - Sergeant -
| 308 |
Doom Rate: 2 Posts quality: +86 |
Отправлено: 25.09.17 11:49:52 | | | ZZYZX: | Ткни меня носом где так написано. Нужно определить что игрок открыл какую-то область и открыть её же у всех остальных. |
Ну, видимо, не так выразился. Как открыть эту область у остальных игроков? Впрочем, если считать в радиусе, то как это будет на обширных локациях, или же наоборот, в очень маленьких - сквозь стены не будет просвечивать? | |
|
| |
ZZYZX - UAC Commissar -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
Отправлено: 25.09.17 12:28:40 | | | Infernal_KoT: | Впрочем, если считать в радиусе, то как это будет на обширных локациях, или же наоборот, в очень маленьких - сквозь стены не будет просвечивать? |
Будет, но это малая цена за саму возможность. | |
|
2 |
2 |
1 |
|
|
| |
Infernal_KoT - Sergeant -
| 308 |
Doom Rate: 2 Posts quality: +86 |
Отправлено: 25.09.17 12:38:36 | | | ZZYZX
Хитсканом можно отследить "убитую" стену? | |
|
| |
MyNameIs = 1st Lieutenant =
| 2054 |
Doom Rate: 2.04 Posts quality: +893 |
Отправлено: 25.09.17 13:09:09 | | | Вроде.. Можно же ацсом переключать скайбоксы? Я просто протестить сейчас не могу.
Скайбокс ведь рисует стены, можно через него
А если скайбокс через скайбокс может рисовать, тогда просто пол изменять в секторе основного, пол виден редко | |
|
| |
Kragoth762 = Master Sergeant =
| 474 |
Doom Rate: 1.93 Posts quality: +47 |
|
| |
YURA_111 UAC Sergeant Major
| 768 |
Doom Rate: 1.98 Posts quality: +136 |
Отправлено: 21.10.17 09:42:08 | | | Заказ на скрипт от: Yura111
Подробно что должен делать скрипт: Полный аналог "PowerRegeneration" (с учетом "Powerup.Strength"), только для брони.
Тип скрипта: ZScript (не ACS)
Под какой порт: GZDOOM | |
|
| |
Герр Смертоносец - Warrant Officer -
| 1043 |
Doom Rate: 1.38 Posts quality: +854 |
Отправлено: 14.11.17 05:24:29 | | | По ZScript шарит кто?
Вот есть две фичи: MonsterMove() и TryWalk(), которые заставляют монстра перемещаться строго по прямой вдоль мировой координаты X. Никаких аргументов эти функции не имеют, никакими перепробованными колдунствами не удалось заставить монстра изменить это направление. Несколько часов гугления убедили меня в том, что ни на официальном форуме, ни в вики инфы по этой теме просто нет.
Собственно, вопрос№1: каким образом заставить эти фичи работать в других направлениях?
Далее, единственная вменяемая фича, с которой можно заставить монстра двигаться в произвольном направлении - TryMove(). Но она, блэт, принципиально не открывает двери. (Зато их замечательно открывает MonsterMove).
Собственно, вопрос№2: каким образом можно заставить монстра открыть произвольную дверь в обход вшитых механизмов A_Chase?
Грубые и громоздкие решения у меня есть, но интересуют более-менее изящные. Внутри ещё теплится надежда, что Graf Zahl не настолько поехал, чтобы встраивать в релиз заведомо неработающие фичи. | |
|
5 |
|
|
| |
ZZYZX - UAC Commissar -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
Отправлено: 14.11.17 07:47:02 | | | Я подозреваю что эти функции двигают монстра строго вперёд. Перёд ему менять не пробовал?
//
// P_Move
// Move in the current direction,
// returns false if the move is blocked.
//
bool P_Move (AActor *actor)
DEFINE_ACTION_FUNCTION(AActor, MonsterMove)
{
PARAM_SELF_PROLOGUE(AActor);
ACTION_RETURN_BOOL(P_Move(self));
}
Заставить монстра открыть дверь можно легко и непринуждённо — найти эту дверь при помощи того же BlockLinesIterator, проверить что она перед монстром и на вменяемой высоте, после чего заюзать дверь в ручном режиме (активировать спешиал). Только имей в виду что если на двери стоит "player presses use", то ацс может неадекватно отреагировать на открытие такой двери монстром. Хотя это в принципе возможно по идее. | |
|
2 |
2 |
1 |
|
|
| |
Герр Смертоносец - Warrant Officer -
| 1043 |
Doom Rate: 1.38 Posts quality: +854 |
Отправлено: 14.11.17 14:34:56 | | | ZZYZX: | Я подозреваю что эти функции двигают монстра строго вперёд. Перёд ему менять не пробовал? |
Ммм, а теперь ещё раз. Что такое P_Move, где, как и чем его менять? Как он вообще задаёт перёд, являясь булевой переменной? И откуда дровишки? В вики ничего подобного нет. Какие-то глубокие внутренности движка?
ZZYZX: | Заставить монстра открыть дверь можно легко и непринуждённо — найти эту дверь при помощи того же BlockLinesIterator |
А это что за зверь, это зскрипт или acs, и какими аргументами оно питается?
Возникает ощущение, что где-то есть какая-то другая более подробная документация. | |
|
5 |
|
|
| |
ZZYZX - UAC Commissar -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
Отправлено: 14.11.17 15:37:34 | | | P_Move это внутренняя функция которая вызывается.
MonsterMove = P_Move
Двигает согласно комментарию в текущем направлении. Текущее — это куда морда повёрнута. Следовательно поворачивай в правильную сторону, и тогда будет не только вдоль оси X.
Герр Смертоносец: | А это что за зверь, это зскрипт или acs, и какими аргументами оно питается? |
Это зскрипт.
Герр Смертоносец: | Возникает ощущение, что где-то есть какая-то другая более подробная документация. |
В исходнике гздума
https://github.com/coelckers/gzdoom/blob/master/wadsrc/static/zscript/base.txt#L450
В связи с тем, что зскрипт по принципу работы практически дословно повторяет C++, то можно лазить в гздум и смотреть как там сделано. И пытаться делать так же.
Документации как таковой... не. Врать не буду. Она есть. Но у меня в голове из-за опыта с исходником гздума документация раза в 4 подробнее чем можно найти в текстовом виде.
В связи с чем я всем советую зскрипт и даже иногда на вопросы отвечаю >_> | |
|
2 |
2 |
1 |
|
|
| |
Герр Смертоносец - Warrant Officer -
| 1043 |
Doom Rate: 1.38 Posts quality: +854 |
Отправлено: 14.11.17 16:19:55 | | | ZZYZX: | P_Move это внутренняя функция которая вызывается.
MonsterMove = P_Move
Двигает согласно комментарию в текущем направлении. Текущее — это куда морда повёрнута. Следовательно поворачивай в правильную сторону, и тогда будет не только вдоль оси X. |
Я понял, что внутри движка есть свои функции с очень продвинутым функционалом, но как оперировать ими в Zscript lump с точки зрения синтаксиса? Нужны какие-то примеры работоспособного кода. Тупо непонятно, что писать, в каком формате, и с какой стороны к этому вообще подступиться. Метод тыка не работает.
P_Move = Vec2Angle(speed,angle);
Это, например, выдаёт ошибку Unknown identifier 'P_Move'. Все прочие попытки манипулировать этим из Зскрипта тоже выдают ошибку.
Если же монстру просто повернуть морду через A_SetAngle или A_FaceTarget, то ничего не меняется - он продолжает двигаться вдоль оси Х независимо от того, как он визуально развёрнут. Либо это баг, либо разрабы забыли сделать доступный из Zscript способ изменить внутреннюю функцию, без которого внешние бесполезны. Либо я чего-то фундаментально не понимаю.
И по BlockLinesIterator вопрос.
Парсер внезапно сожрал BlockLinesIterator(self). Но попытки посмотреть логику его работы через старый добрый A_PrintBold(BlockLinesIterator(self)) выдали "Cannot convert to string". Спрашивается, что за загадочный формат переменной оно выдаёт, и куда его можно вставить, чтобы снять с него инфу о линии? И чем эту линию потом исследовать? В списке функций ничего подобного нет. Опять же, нужны какие-то примеры рабочего кода в Zscript.
Вообще это жуть и пагубность, конечно. При Рэнди такой хуйни не было. Порт, давший расцвет модостроению за счёт своей прекрасной документированности, развивается в сторону "чёрного ящика", который можно полноценно использовать только если лично перелопачивать весь исходный код. |
Рейтинг сообщения: +1, отметил(и): JSO x |
|
5 |
|
|
| |
ZZYZX - UAC Commissar -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
Отправлено: 14.11.17 17:03:08 | | | ёмаё да забудь ты про P_Move. Это цитата из кода гздума была.
Вертишь актора в нужную сторону. А потом MonsterMove юзаешь.
Методом тыка зскрипт НЕ РАБОТАЕТ. Примеры читать в gzdoom.pk3 папке zscript.
BlockLinesIterator(self) это дичь. Парсер хавает потому что это динамическое преобразование типов, которое возвращает null.
Отдельно про направление. Судя по всему используется переменная actor->movedir. В нашем случае self.movedir, я так понимаю byte angle.
Герр Смертоносец: | Порт, давший расцвет модостроению за счёт своей прекрасной документированности, развивается в сторону "чёрного ящика", который можно полноценно использовать только если лично перелопачивать весь исходный код. |
Я тебя умоляю, не смеши мои тапки, пяткам щекотно. По-твоему документация по ацс и декору всегда была полноценной? Зскрипт появился полгода назад.
Единственная проблема с зскриптом в том, что осваивать его методом тыка примерно то же самое, что и осваивать С++ методом тыка. Можно, но нерационально.
И таки да. Раньше многие вещи были бы невозможны вообще от слова совсем ) А сейчас всего-то нужно применить глаза и почитать код.
А ранди вообще последние несколько лет задерживал(а)(о) развитие порта, из-за чего ничего принципиально нового не появлялось, DoomScript стал байкой, а выражение "для ввода фичи она должна пройти через здум" отбивало у контрибьюторов всё желание что-то делать. Видимо, проблемы с гендерной самоидентификацией важнее ввода новых фич. |
Рейтинг сообщения: +1, отметил(и): JSO x |
|
2 |
2 |
1 |
|
|
| |
Герр Смертоносец - Warrant Officer -
| 1043 |
Doom Rate: 1.38 Posts quality: +854 |
Отправлено: 14.11.17 17:25:49 | | | ZZYZX: | Вертишь актора в нужную сторону. А потом MonsterMove юзаешь. |
void A_testchase()
{
A_SetAngle(5+angle); //верчу актора в нужную сторону
MonsterMove();
}
Сделал. Монстр должен ровненько ходить по кругу. А он движется по прямой, вращаясь. В чём ошибка?
ZZYZX: | По-твоему документация по ацс и декору всегда была полноценной? |
Возможно, самых бородатых времён я не застал, но по крайней мере в последние годы к выходу свежей версии всё очень оперативно прописывалось.
upd:
ZZYZX: | Отдельно про направление. Судя по всему используется переменная actor->movedir. В нашем случае self.movedir, я так понимаю byte angle. |
Значит "перёд" определяет всё-таки не angle. Сейчас буду с этим пробовать.
upd2: Так, прогресс! Направление действительно задаётся через self.movedir, но это явно не byte angle, не градусы и не fixed, а какой-то другой формат. Всего доступно 8 значений: (0,1,2,3,4,5,6,7), которые задают направления с шагом в 45 градусов. При попытке подставить отрицательное число или 8 и больше монстр просто стоит на месте и не двигается. При попытке задать дробное значение оно принудительно округляется. При попытке задать вектор парсер выдаёт ошибку.
void A_testchase()
{
A_SetAngle(angle+5);
self.movedir = (8*angle/360);
MonsterMove();
}
С этим кодом монстр вместо круга обходит правильный восьмиугольник, после чего почему-то встаёт намертво и вертится на месте.
Уже что-то, но по-прежнему загадочно. | |
|
5 |
|
|
| |
ZZYZX - UAC Commissar -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
Отправлено: 14.11.17 21:39:54 | | | А у тебя просто англе бывает выше 360. Напиши %8 в конце. | |
|
2 |
2 |
1 |
|
|
| |
Герр Смертоносец - Warrant Officer -
| 1043 |
Doom Rate: 1.38 Posts quality: +854 |
Отправлено: 15.11.17 04:00:48 | | | Англ вообще по-дефолту выдаёт значения от 0 до 180, а потом резко перескакивает на -179 и дальше идёт по отрицательным числам, поэтому его в любом случае пришлось шлифануть дополнительной проверочкой. Но в итоге movedir действительно жрёт странный формат угла, в котором всего 8 значений. Возможно, это какие-то особенности работы pathfinding из оригинального doom, фиг знает.
Пока сделал громоздкое подобие A_Chase, в котором MonsterMove с выбором одного из 8 направлений задействуется исключительно при застревании. В принципе они уже более-менее ходят и открывают двери. | |
|
5 |
|
|
| |
alekv - Colonel -
| | 4168 |
Doom Rate: 1.87 Posts quality: +949 |
Отправлено: 07.12.17 13:42:37 | | | Подробно что должен делать скрипт:
Мне нужна функция или что-то в этом духе на zscript, которая может определить нажатие клавиши ESC и передать acs скрипту..!
Что бы в acs мог потом использовать как-то так, если это вообще возможно:
script "myScript" (void)
{
if(GetEscButton() == true)//Если игрок нажал клавишу Esc
{do some..}
}
Надеюсь с помощью такой функции смогу проверять не только нажатие кнопки ESC, но и понять открыто меню игры или нет..
Буду несказанно рад, если функция сможет проверять не только esc но и все клавиши
Под какой порт: GZDOOM 3.2+ | |
|
1 |
3 |
1 |
|
|
| |
ZZYZX - UAC Commissar -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
Отправлено: 07.12.17 13:54:14 | | | Советую писать сразу на зскрипте, т.к. при открытом меню ацс работать не будет в принципе.
Привязка класса зскрипта к конкретной карте (если нужно) возможна через MAPINFO EventHandlers. (документировано как ни странно)
Наличие открытого меню в зскрипте проверяется через Menu.GetCurrentMenu() - возвращает объект или null.
Вызов зскрипта из ацс возможен через https://zdoom.org/wiki/ScriptCall | |
|
2 |
2 |
1 |
|
|
| |
alekv - Colonel -
| | 4168 |
Doom Rate: 1.87 Posts quality: +949 |
Отправлено: 07.12.17 14:14:25 | | | ZZYZX: | при открытом меню ацс работать не будет в принципе. |
Совсем про это забыл.. печалька =(
ZZYZX: | Привязка класса зскрипта к конкретной карте (если нужно) возможна через MAPINFO EventHandlers. (документировано как ни странно)
Наличие открытого меню в зскрипте проверяется через Menu.GetCurrentMenu() - возвращает объект или null. |
увы, ни хрена не понял =(
мне понятно только вот это:
Зачем привязка зскрипта к карте?
if(Menu.GetCurrentMenu() != 0)//если меню открыто?
Мне это надо вот для такой задачи:
Если игрок открыв кастомное UI на acs в игре, мог нажать на ESC и это кастомное UI закрылось игнорируя открытие меню игры!,
На деле получается просто открывается menu.. И это явно плохо и не нормально.. Кнопка ESC должна закрыть любое открытое кастомное UI и только потом открыть menu игры.
По этому я хз как это сделать что бы acs проверял нажатие esc т.к. все менюхи у меня acsные, а зскрипт блокировал открытие меню пока не закрыты acs менюшки. | |
|
1 |
3 |
1 |
|
|
| |
ZZYZX - UAC Commissar -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
Отправлено: 07.12.17 17:58:51 | | | alekv: | Зачем привязка зскрипта к карте? |
Чтобы отпилить ацс насовсем.
alekv: | if(Menu.GetCurrentMenu() != 0)//если меню открыто? |
0 и null это разные вещи.
alekv: | Если игрок открыв кастомное UI на acs в игре, мог нажать на ESC и это кастомное UI закрылось игнорируя открытие меню игры!, |
Напиши своё кастомное меню на зскрипте.
https://forum.zdoom.org/viewtopic.php?p=988297#p988297 пример. Пожалуйста, не говори "я не понимаю" и попробуй прочитать что там написано сначала. И изучить.
alekv: | увы, ни хрена не понял =( |
Погуглить не пробовал? http://zdoom.org/wiki/Events_and_handlers / https://zdoom.org/wiki/MAPINFO/Map_definition
Но учитывая то что ты дальше написал, не рекомендую это делать. Вместо этого рекомендую идти переделывать гуй на зскрипте. В связи с тем, что гуй на ацс это извращение и пережиток прошлого, а в зскрипте нормальная модель событий ввода сделана как в JS, Qt, C# и так далее. | |
|
2 |
2 |
1 |
|
|
| |
alekv - Colonel -
| | 4168 |
Doom Rate: 1.87 Posts quality: +949 |
Отправлено: 07.12.17 20:32:07 | | | ZZYZX: | Вместо этого рекомендую идти переделывать гуй на зскрипте. |
Ну не целесообразно.. Меня на 100% устраивает acs интерфейс, проблема только в клавише ESC, и из-за нее переписывать ВСЕ UI в игре которого не мало, да еще и на языке который я вообще не знаю и знать не хочу т.к. он мне не пригодится т.к. кроль последнее что сделаю на этом гздуме.. ну так себе идея.
ZZYZX: | 0 и null это разные вещи. |
я не программист.. откуда мне знать
Добавлено спустя 1 день 23 часа 3 минуты 51 секунду:
ZZYZX
Решил попробовать разобраться в зскриптовом меню и нашел баг
Это происходит когда в оконном режиме вкл. меню и нажал на развернуть окно.
А еще заметил что там у тебя только обычное меню, а настройки это дефолтное гоззы?
Из-за нового шрифта мне придется писать меню на зскрипте т.к. дефолтное гоззо меню говно. | |
|
1 |
3 |
1 |
|
|
| |