Также сейчас перехватывается часть кнопок (вперёд, назад, стрейф влево и поворот направо); сама BT_JUMP, которая, теоретически, и должна проверяться, не проверяется.
Возможно ли для класса 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'е), но это взаимосвязано с обоими предыдущими вопросами. Надеюсь, сам смогу выводы сделать и реализовать такую схему.
К слову о скриптах.
В версиях 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.
Вообще очень странный конфликт дехакида и декорейта. Но если по сути, возьми тогда "проблемного" монстра, удали его модификацию из DEH и просто смодифицируй его в декорейте.
Вообще очень странный конфликт дехакида и декорейта. Но если по сути, возьми тогда "проблемного" монстра, удали его модификацию из DEH и просто смодифицируй его в декорейте.
думал о таком, но хочется быть на 100% уверенным в механике оригинала
Кстати, если я пишу PK3 патч для чужого вадника, и в моем патче есть dehacked без того монстра, то гздум (при gzdoom.exe -file маппак.wad мой_патч.pk3) поймет что того монстра надо удалить, или же возьмет его код из маппак.wad ?
Не поймет конечно, кусок кода из Wad относящего к тому монстру он и загрузит из первого вадника, т.к. во втором ваднике (ну т.е. PK3) этого куска не будет и не будет ничего другого что укажет на иное...
Такой вопрос. Как через Keyсonf сделать допустим на кнопке V определённую команду? Предположим чтобы при нажатии на эту клавишу оружие переходило в стэйт twofire , как такое сделать?
Такой вопрос. Как через Keyсonf сделать допустим на кнопке V определённую команду? Предположим чтобы при нажатии на эту клавишу оружие переходило в стэйт twofire , как такое сделать?
Можно так:
AddMenuKey "twofire_namecomand" +twofire
Alias +twofire "Pukename \"ChangeState\";
Alias -twofire "";
DefaultBind v +twofire
2 - ты про то, которое опции управления? должно быть оно
3 - Pukename вызывает именованый скрипт, а название скрипта должно быть в кавычках
кейконф же пытается понять эти кавычки и сделать из открывающей закрывающую, поэтому их надо маскировать символом \
4 - минус отвечает за отпускание кнопки. пусто, чтобы происходило ничего при отпускании
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 в этом случае.
Спасибо!
Зскрипт в данном случае как-то слишком громоздко смотрится по сравнению с выше-предложенным вариантом на АЦС
BT_USER1 - это ты имеешь ввиду стейты USER которые сейчас как RELOAD и ZOOM добавлены по умолчанию? Если да - то нет у меня возможности, т.к., не поверишь - уже ВСЕ юзаю!
В общем трупоед на декоре взлетел
, но есть 2 проблемы:
а) не жрёт утопленные трупы (при waterlevel>0 трупы монстров почему-то не чекаются);
б) всякий раз когда эти мрази берут труп на прицел, они упорно застревают во всём подряд - в объектах, мобах, друг друге, стенах, мостах и проч.
Вот, все трое заблудились в трёх соснах и не схавали трупы мумий в воде:
Как можно пофиксить? Какие флаги в б) убрать\добавить?
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:
Извиняюсь за полное нубство - я давно делал релоад - но потом его ввели по умолчанию. Сейчас не могу понять ничего...
У меня точно так же.. Я ничего толком не помню, все это помню только потому что сделал у себя в игре.
По хорошему надо нормальные доки писать на русском про гздум, он уже необъятный, а доков толком нет по сей день.
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?