Welcome to U.A.C. [O.S.A.]
login / register 
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
Тема для новичков. Вопросы по маппингу/моддингу - любые! Пред.  1, 2, 3 ... 164, 165, 166 ... 198, 199, 200  След.
   Список разделов - Флуд и устаревшие темы - Тема для новичков. Вопросы по маппингу/моддингу - любые!Ответить
АвторСообщение
DOOMFOREVER
Marine
Next rank: Marine 1st class after 2 points
28

Doom Rate: 0.97

Posts quality: +6
Ссылка на пост №3281 Отправлено: 07.06.18 17:23:09
YURA_111:
Это в лумп "Textures"
ок, пасиб
JSO x
- 2nd Lieutenant -
Next rank: = 2nd Lieutenant = after 104 points
1336

Doom Rate: 2.26

Posts quality: +726
Ссылка на пост №3282 Отправлено: 08.06.18 00:06:41
Сразу сделаю оговорку, что в ZScript и вообще объектно-ориентированных языках я слаб.


Итак; ZScript, EventHadler (не StaticEventHandler):

    Override bool InputProcess( InputEvent e ) {

        if ( e.Type == InputEvent.Type_KeyDown && ( e.KeyChar & BT_JUMP ) ) {

            FLineTraceData RemoteRay;
            Console.PrintF( "Intercepted BT_JUMP pressing." );
            
            Players[ e.Player ].mo.LineTrace( Angle, 128, Pitch );
            if ( RemoteRay.HitType == TRACE_HitActor ) {
                if ( RemoteRay.HitActor == "Zombieman" ) {
                    Console.Printf( "Zombieman checked." );
                }
            } // of if ( RemoteRay.HitType == TRACE_HitActor )
            return True;
        } // of if ( e.Type == InputEvent.Type_KeyDown && e.KeyChar == 32 )
                
        return False;
        
    } // of Override bool InputProcess( InputEvent e )


В этом коде целых три ошибки: две критических и одна просто странная.

"Players [e.Player] .mo.LineTrace (Angle, 128, Pitch)": "Unknown identifier 'player'";
"if (RemoteRay.HitActor == "Zombieman") {": "Incompatible operands for == comparison";

Также сейчас перехватывается часть кнопок (вперёд, назад, стрейф влево и поворот направо); сама BT_JUMP, которая, теоретически, и должна проверяться, не проверяется.


* * *


Когда-то писал вопрос об инвентаре:

Скрытый текст:

JSO_x:
Возможно ли для класса DECORATE "Inventory"/"CustomInventory" сделать при переполнении (достижения лимита "Inventory.MaxAmount") переход итема в следующий слот, например, как в Minecraft'е? Или только костылями -- типа такого ужаса:
Actor StoneBlockItem_Stack1: CustomInventory
{
    Inventory.MaxAmount 64
    States
    {
    <...>
    Pickup:
        TNT1 A 0 A_JumpIfInventory( "StoneBlockItem_Stack2", 0, 4 )
        TNT1 A 0 A_JumpIfInventory( "StoneBlockItem_Stack1", 0, 2 )
        TNT1 A 0 A_GiveInventory( "StoneBlockItem_Stack1" )
        TNT1 A 0 A_GiveInventory( "StoneBlockItem_Stack2" )
        TNT1 A 0 A_GiveInventory( "StoneBlockItem_Stack3" )
    }
}
Actor StoneBlockItem_Stack2: Actor StoneBlockItem_Stack1
{ }


А также: возможно ли штатными методами DECORATE'а ограничить вместимость инвентаря игрока? Или тоже придётся делать итем, который считает количество разных типов вещей в инвентаре?



Там в конце приписка была:
JSO_x:
P. S.: "ZScript" не предлагать! ACS можно, но нежелательно.

Так вот, теперь просьба прямо противоположная: помочь сделать это же, но силами ZScript. Ещё -- переход на клетку инвентаря при нажатии на цифру (как в том же самом Minecraft'е), но это взаимосвязано с обоими предыдущими вопросами. Надеюсь, сам смогу выводы сделать и реализовать такую схему.
2 7 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №3283 Отправлено: 08.06.18 01:39:18
К слову о скриптах.
В версиях GZDoom старше 2.2.0 начала вылезать фаталэррор "Insufficient arguments in call to isFriend" например на такую строку:
TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(WOC_DECORATE,STATS,ISFRIEND,ACTIVATOR) == 0, "Healing"),
внутри скрипта ISFRIEND определён как:
if(option == ISFRIEND)
SetResultValue(IsFriendly(0)); //Не знаю важно это или нет, но в этой строке "IsFriendly" Слэйдом пишется чёрным шрифтом а не оранжевым.
Вот исходник "IsFriendly":
Скрытый текст:

function int IsFriendly( int tid )
{
	int value;
	if(tid == 0)
	{
		If(CheckInventory("ImAFighter")==1 || CheckInventory("ImACleric")==1 || CheckInventory("ImAMage")==1 || CheckInventory("ImAHunter")==1 || CheckInventory("ImAWarlock")==1 || CheckInventory("ImAPet")==1)
			value = TRUE;
		else If(CheckInventory("EnemyInDisguise")==0 && CheckActorProperty(0, APROP_Friendly, 0) || CheckInventory("FriendlyInDisguise")>0 )
			value = FALSE;
		else If(CheckActorProperty(0, APROP_Friendly, 1) || CheckInventory("EnemyInDisguise")>0)
			value = TRUE;
	}
	else if(tid != 0)
	{
		If(CheckActorInventory(tid, "ImAFighter")==1 || CheckActorInventory(tid, "ImACleric")==1 || CheckActorInventory(tid, "ImAMage")==1 || CheckActorInventory(tid, "ImAHunter")==1 || CheckActorInventory(tid, "ImAWarlock")==1 || CheckActorInventory(tid, "ImAPet")==1)
			value = TRUE;
		else If(CheckActorInventory(tid, "EnemyInDisguise")==0 && CheckActorProperty(tid, APROP_Friendly, 0) || CheckActorInventory(tid, "FriendlyInDisguise")>0 )
			value = FALSE;
		else If(CheckActorProperty(tid, APROP_Friendly, 1) || CheckActorInventory(tid, "EnemyInDisguise")>0)
			value = TRUE;
	}
	return value;
}

Если кто может поставить диагноз "на глаз" то прошу доходчиво (по возможности) объяснить что значит сия ошибка (ну то что самсинг вронг с аргументом ISFRIEND это понятно) и в какую сторону стОит копать чтобы это пофиксить. На вас последняя надежда.
Скрытый текст:

До кучи аналогичная байда происходит с аргументом TARGET, определённым как:
if(suboption == TARGET)
SetActivatorToTarget(0);
но это вылечилось (?) в своё время прямой заменой аргумента на указатель AAPTR_TARGET.

Код чужой если что, просто автор исчез.
1 9 1
YURA_111
UAC Sergeant Major
Next rank: Chief Petty Officer after 82 points
768

Doom Rate: 1.98

Posts quality: +136
Ссылка на пост №3284 Отправлено: 08.06.18 17:43:00
theleo_ua:
попробовал на свежевышедшем 3.4.0, та же проблема


Вообще очень странный конфликт дехакида и декорейта. Но если по сути, возьми тогда "проблемного" монстра, удали его модификацию из DEH и просто смодифицируй его в декорейте.
theleo_ua
= Colonel =
Next rank: - Commissar - after 88 points
4802

Doom Rate: 1.8

Posts quality: +1032
Ссылка на пост №3285 Отправлено: 08.06.18 19:10:26
YURA_111:
Вообще очень странный конфликт дехакида и декорейта. Но если по сути, возьми тогда "проблемного" монстра, удали его модификацию из DEH и просто смодифицируй его в декорейте.


думал о таком, но хочется быть на 100% уверенным в механике оригинала

Кстати, если я пишу PK3 патч для чужого вадника, и в моем патче есть dehacked без того монстра, то гздум (при gzdoom.exe -file маппак.wad мой_патч.pk3) поймет что того монстра надо удалить, или же возьмет его код из маппак.wad ?
3 1
YURA_111
UAC Sergeant Major
Next rank: Chief Petty Officer after 82 points
768

Doom Rate: 1.98

Posts quality: +136
Ссылка на пост №3286 Отправлено: 08.06.18 20:30:28
theleo_ua:
поймет что того монстра надо удалить


Не поймет конечно, кусок кода из Wad относящего к тому монстру он и загрузит из первого вадника, т.к. во втором ваднике (ну т.е. PK3) этого куска не будет и не будет ничего другого что укажет на иное...
DOOMFOREVER
Marine
Next rank: Marine 1st class after 2 points
28

Doom Rate: 0.97

Posts quality: +6
Ссылка на пост №3287 Отправлено: 09.06.18 01:10:34
Такой вопрос. Как через Keyсonf сделать допустим на кнопке V определённую команду? Предположим чтобы при нажатии на эту клавишу оружие переходило в стэйт twofire , как такое сделать?
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №3288 Отправлено: 09.06.18 01:52:01
DOOMFOREVER:
Такой вопрос. Как через Keyсonf сделать допустим на кнопке V определённую команду? Предположим чтобы при нажатии на эту клавишу оружие переходило в стэйт twofire , как такое сделать?


Можно так:
AddMenuKey "twofire_namecomand" +twofire
Alias +twofire "Pukename \"ChangeState\";
Alias -twofire "";
DefaultBind v +twofire



Script "ChangeState" (void)
{
SetActorState(0, "twofire");
}

Рейтинг сообщения: +3, отметил(и): YURA_111, Void Weaver, DOOMFOREVER
1 3 1
DOOMFOREVER
Marine
Next rank: Marine 1st class after 2 points
28

Doom Rate: 0.97

Posts quality: +6
Ссылка на пост №3289 Отправлено: 09.06.18 13:35:28
alekv:
Можно так:

Спасибо
YURA_111
UAC Sergeant Major
Next rank: Chief Petty Officer after 82 points
768

Doom Rate: 1.98

Posts quality: +136
Ссылка на пост №3290 Отправлено: 09.06.18 16:19:50
alekv

Позвольте уточнения:

1) Script я так понимаю ACS ? - а нельзя ли тоже-самое на Zscript ? (ацс меня раздражает)

2) addmenukey "twofire_namecomand" - что за имя команды? - которое отражается в меню?

3) Alias +twofire "Pukename \"ChangeState\"; - тут вообще не понял

4) Alias -twofire ""; - почему тут ничего ?

Извиняюсь за полное нубство - я давно делал релоад - но потом его ввели по умолчанию. Сейчас не могу понять ничего...
MyNameIs
= 1st Lieutenant =
Next rank: - Captain - after 36 points
2054

Doom Rate: 2.04

Posts quality: +893
Ссылка на пост №3291 Отправлено: 09.06.18 16:57:19
YURA_111

2 - ты про то, которое опции управления? должно быть оно

3 - Pukename вызывает именованый скрипт, а название скрипта должно быть в кавычках
кейконф же пытается понять эти кавычки и сделать из открывающей закрывающую, поэтому их надо маскировать символом \

4 - минус отвечает за отпускание кнопки. пусто, чтобы происходило ничего при отпускании

Рейтинг сообщения: +2, отметил(и): YURA_111, JSO x
1 1 1
JSO x
- 2nd Lieutenant -
Next rank: = 2nd Lieutenant = after 104 points
1336

Doom Rate: 2.26

Posts quality: +726
Ссылка на пост №3292 Отправлено: 09.06.18 17:12:04
YURA_111, могу предположить такой вариант насчёт первого пункта: вместо "Pukename \"ChangeState\"" отправлять "netevent ChangeState", затем, в EventHandler, через "Override void NetworkProcess(ConsoleEvent e)" делать "Return ResolveState( "AdditiveFireState" )" или "SetState( "AdditiveFireState" )".

Должно быть что-то типа такого:
class TestHandler: EventHandler {

    Override void NetworkProcess(ConsoleEvent e) {
        if ( e.Name == "ChangeState" && PlayerInGame[ e.PlayerNumber ] && Player[ e.PlayerNumber ].mo.FindInventory( <actor_weapon_class> ) ) {
            Return ResolveState( "AdditionalFire" );
        } // of if ( e.Name == "ChangeState" )

    } // of Override void NetworkProcess(ConsoleEvent e)

} // of class TestHandler: EventHandler


P. S.: единственное что -- не уверен, будет ли врать e.IsManual в этом случае.

P. P. S.: не проще ли через BT_USER1 сделать?

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

Doom Rate: 1.98

Posts quality: +136
Ссылка на пост №3293 Отправлено: 09.06.18 22:37:15
Спасибо!
Зскрипт в данном случае как-то слишком громоздко смотрится по сравнению с выше-предложенным вариантом на АЦС

BT_USER1 - это ты имеешь ввиду стейты USER которые сейчас как RELOAD и ZOOM добавлены по умолчанию? Если да - то нет у меня возможности, т.к., не поверишь - уже ВСЕ юзаю!
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №3294 Отправлено: 10.06.18 00:57:27
В общем трупоед на декоре взлетел

, но есть 2 проблемы:
а) не жрёт утопленные трупы (при waterlevel>0 трупы монстров почему-то не чекаются);
б) всякий раз когда эти мрази берут труп на прицел, они упорно застревают во всём подряд - в объектах, мобах, друг друге, стенах, мостах и проч.
Вот, все трое заблудились в трёх соснах и не схавали трупы мумий в воде:

Как можно пофиксить? Какие флаги в б) убрать\добавить?

Чек на поиск трупа:
Скрытый текст:

A_CheckLOF ("CorpseCheck", CLOFF_FROMBASE|CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPNONHOSTILE|CLOFF_SKIPTARGET|CLOFF_BEYONDTARGET|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL|CLOFF_SETTRACER, 2048, 0, user_CLOFangle, -180, 0, 0, AAPTR_NULL, 0)


Чек на обход препятствий:
Скрытый текст:

A_CheckLOF ("CorpseChaseW", CLOFF_FROMBASE|CLOFF_JUMPOBJECT|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_SKIPTARGET/*|CLOFF_ALLOWNULL|CLOFF_NOAIM*/, 80, 0, 0, 0, 0, 0, AAPTR_TRACER, 0)

"CorpseChaseW" - цикл A_Wander с возвратом к циклу чекЛОФа.
1 9 1
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №3295 Отправлено: 10.06.18 01:23:44
YURA_111:
1) Script я так понимаю ACS ? - а нельзя ли тоже-самое на Zscript ? (ацс меня раздражает)

Не знал, не знаю и не буду знать зскрипт. Честно я вообще удивляюсь почему декорейт получил такой апгрейд, а не ацс, ну да ладно.

YURA_111:
2) addmenukey "twofire_namecomand" - что за имя команды? - которое отражается в меню?

Просто имя которое отображается в настройках управления.

YURA_111:
3) Alias +twofire "Pukename \"ChangeState\"; - тут вообще не понял

+twofire это как бы твоя созданная команда, означает что игрок нажал кнопку, после этого в кавычках выполняем какие либо действия, в этом случае запуск скрипта с именем. т.к. нельзя внутри кавычек " " писать еще одни кавычки " "some text" " придумали костыль в виде "\"somename\"";

YURA_111:
4) Alias -twofire ""; - почему тут ничего ?

Не знаю.. Тут каждый по желанию может вызвать какое либо действие. Такое действие сработает когда кнопка была отпущена.

YURA_111:
Извиняюсь за полное нубство - я давно делал релоад - но потом его ввели по умолчанию. Сейчас не могу понять ничего...

У меня точно так же.. Я ничего толком не помню, все это помню только потому что сделал у себя в игре.
По хорошему надо нормальные доки писать на русском про гздум, он уже необъятный, а доков толком нет по сей день.

Рейтинг сообщения: +1, отметил(и): YURA_111
1 3 1
mutator
- Sergeant Major -
Next rank: = Sergeant Major = after 68 points
532

Doom Rate: 1.76

Posts quality: -74
Ссылка на пост №3296 Отправлено: 10.06.18 01:26:33
I dont understand russian but is this place kind of like a tutor page that help people understand scripting?
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №3297 Отправлено: 10.06.18 01:33:58
mutator:
I dont understand russian but is this place kind of like a tutor page that help people understand scripting?

This group where you can ask a question about the modification of doom and get an answer.
1 3 1
mutator
- Sergeant Major -
Next rank: = Sergeant Major = after 68 points
532

Doom Rate: 1.76

Posts quality: -74
Ссылка на пост №3298 Отправлено: 10.06.18 01:52:08
alekv
I am really bad at scripting is it hard?
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №3299 Отправлено: 10.06.18 13:04:53
mutator:
I am really bad at scripting is it hard?

To say yes or no is like saying nothing to such a question. :)
it's like asking Google:
ok google
I think, yes, it's hard.

mutator
why u dont use this zdoom forum if u do not understand rus.?
https://forum.zdoom.org/index.php?sid=6cade29baa78c547f2a267d8e3ac9aa7
1 3 1
mutator
- Sergeant Major -
Next rank: = Sergeant Major = after 68 points
532

Doom Rate: 1.76

Posts quality: -74
Ссылка на пост №3300 Отправлено: 10.06.18 13:07:34
alekv
I use this site specifically because I like it here more than other doom communities, I only use zdoom forums to grab my favorite mods and talk to few mod makers. Yes it's hard to script I am only good at how to add custom textures, flats, sprites like custom trees and such..are you good at scripts?
Страница 165 из 200Перейти наверх Пред.  1, 2, 3 ... 164, 165, 166 ... 198, 199, 200  След.
   Список разделов - Флуд и устаревшие темы - Тема для новичков. Вопросы по маппингу/моддингу - любые!