Welcome to U.A.C. [O.S.A.]
login / register 
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
[Done]Инвентарь с мышкой в (G)ZDoom & GLOOME 1, 2  След.
   Список разделов - Местечко мапперов и моддеров - [Done]Инвентарь с мышкой в (G)ZDoom & GLOOMEОтветить
АвторСообщение
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №1 Отправлено: 31.07.15 08:02:03
[Последнее редактирование: 28/08/2015]
И так, я наконец закончил работать над инвентарем, начал его делать около месяца назад..
Скачать AlekvInventoryForDoom.pk3

Подключите его к iwad doom2, то есть как простой мод!!! Что бы включить инвентарь настройте гор. клавиши, и подберите его с пола(наверное сделал одну из самых крутых итемов в гоззе хД) =) (посоветуйте пож. куда можно выложить на долго? Может тут как-то можно?) Я особо не старался сделать мод для Doom2, это скорее простая демонстрация инвентаря..
Тестировал на GZDoom 1.8.7, GZDoom 2x, GLOOME. Если кто попробует на Zandronum, отпишитесь, я не проверял..
Скрины:
Скрытый текст:



Теперь попытаюсь объяснить как им пользоваться.
Что надо для того что бы добавить инвентарь в свой проект?
Скрытый текст:


1)Папка Graphics, в ней должны лежать картинки слотов, вещей, задник инвентаря, картинки кнопок и т.д., хотите
анимированные картинки вещей, тогда их ложим в папку Sprites, и в Lump ANIMDEFS прописываем анимацию.

2)Файл Decorate, в нем прописываем таких вот акторов(имена менять не надо..):
Actor Inv_On : Inventory //Даётся игроку когда он подбирает AlekvInventory, если вы хотите что бы инвентарь у игрока был уже со старта, удаляем этого актора и убираем комменты в DoomPlayer1..
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}

//-----------------------Empty actor, need for acs array.
Actor SlotEmpty{}// Актор пустышка... По моему его уже можно удалить, но лучше не надо.
//-----------------------

Actor Slot1 : Inventory //Изначально у игрока все 12 слотов, что значит ни пусты, если Slot1 забрать, значит в слоте 1 что-то лежит.
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}
Actor Slot2 : Inventory
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}
Actor Slot3 : Inventory
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}
Actor Slot4 : Inventory
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}
Actor Slot5 : Inventory
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}
Actor Slot6 : Inventory
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}
Actor Slot7 : Inventory
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}
Actor Slot8 : Inventory
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}
Actor Slot9 : Inventory
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}
Actor Slot10 : Inventory
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}
Actor Slot11 : Inventory
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}
Actor Slot12 : Inventory
{Inventory.MaxAmount 1 Inventory.Amount 1 Inventory.InterHubAmount 1 +HUBPOWER}

В принципе ^^^ этих акторов можно заменить переменными, но мне было так удобнее, если кому надо можете заменить на переменные..

Если вам надо что бы у игрока был AlekvInventory со старта, прописываем нового игрока который должен иметь при старте 12 акторов Slot1-Slot12 (если это заменить на переменные, то игрока прописывать не надо =))
Вот пример:
Actor DoomPlayer1 : DoomPlayer Replaces PlayerPawn //Заменил стандартного игрока своим DoomPlayer1
{//От оригинала отличается лишь тем что при старте игры получает акторов slot1 - slot12.
Player.StartItem "Slot1"
Player.StartItem "Slot2"
Player.StartItem "Slot3"
Player.StartItem "Slot4"
Player.StartItem "Slot5"
Player.StartItem "Slot6"
Player.StartItem "Slot7"
Player.StartItem "Slot8"
Player.StartItem "Slot9"
Player.StartItem "Slot10"
Player.StartItem "Slot11"
Player.StartItem "Slot12"
}


Если вам надо что бы AlekvInventory можно было подбирать как простую аптечку в оригинальном Doom2, пишем так:
Actor DoomPlayer1 : DoomPlayer Replaces PlayerPawn
{
States{//Это будет выполняться 1 раз на новом уровне
	Spawn:
		TNT1 A 1
		TNT1 A 1 A_SpawnItemEx("AlekvInventory",128,0,20) //Спавнит инвентарь около игрока 1 раз, и переходит к стандартному коду игрока
		Goto "Super::Spawn"
		}
}

Если вам не надо что бы инвентарь спавнился, то и не прописываем спавн =)

Как прописывать в Decorate вещи, что бы те ложились в инвентарь? Вот пример простой аптечки(MEDIKIT):
//Такой SlotMedikit доп. актор должен быть у каждой вещи!!!
Actor SlotMedikit : Inventory //Что бы вы не путались, лучше давать имя SlotMedikit, SlotClip и т.д.
{
Inventory.MaxAmount 999
Inventory.Amount 1
Inventory.InterHubAmount 999 
+HUBPOWER
}

Actor MediKit1 : CustomInventory replaces medikit // Тут я заменил стандартную аптечку(вы же можете делать вещь с 0, т.е. без замены оригинальных..)
{//Тут прописываем проперти актора в принципе любые возможные, но кроме флажка +INVBAR, его писать не надо, будут баги.
+HUBPOWER-AUTOACTIVATE
Inventory.InterHubAmount 5
Inventory.MaxAmount 5
Inventory.Amount 1 
States
	{
	Spawn://Тут все как обычно... Картинка вещи когда она на полу..
		MEDI A -1
		Stop
	PickUp:
		TNT1 A 1 A_JumpIfInventory("MediKit1",1,"PickUpContinue")//Если вещь уже есть в инвентаре, добавится в слот который уже занимает, перепрыгивая вычисления ниже.
		TNT1 A 1 A_JumpIf(CallACS("IfFullInventory")==True,"InventoryFull")//Если инвентарь забит, прыгнет в стейт InventoryFull и не подберётся с пола т.к. в том стейте нет функции типа A_RailWait
		TNT1 A 1 A_GiveInventory("SlotMedikit",CallACS("CheckEmptySlot"))//Даёт доп. актора SlotMedikit, в кол. равному слоту в который вещь положилась, т.е. если вещь в 4 слоте, то доп. актор SlotMedikit будет равен 4.
	PickUpContinue://Если вещь уже есть, перепрыгнет все вычисления и попадёт сюда
		TNT1 A 1 A_RailWait //Эту функцию не трогаем, она нужна для поднятия вещи
		Stop
	Use:
		TNT1 A 1 A_GiveInventory("MediKit",1)//Все что будет делать вещь прописываем тут!!! до A_RailWait, тик лучше пусть будет 1.. оно все равно не реагирует, хоть 9999 напишите, выполнится за 0 тик..
		TNT1 A 1 A_RailWait//Лучше не трогаем.
		Stop
	InventoryFull://Сюда прыгаем если инвентарь забит!!
		TNT1 A 1 A_PrintBold("Inventory full!")//Тут уже вы пишите чё хотите.
		Stop
	}
}

С этим надеюсь понятно, а что делать если вам надо что бы вещь которая лежит в инвентаре не могла использоваться? Например игрок подобрал ключ, ключ естественно не должен использоваться из инвентаря, он должен применяться только когда жмешь на закрытую дверь! Что для этого надо? Всё пишем как и в предыдущем примере, только в стейте USE пишем так:
Use:
	TNT1 A 1 ACS_NamedExecute("ItemNotUse",0)//запустит скрипт в котором изменится переменная и вещь не пропадет из инвентаря.
	TNT1 A 1 A_JumpIf(Health>0,"Print")//если игрок жив, по любому прыгнем в стейт NoUse
NoUse:
	TNT1 A 1 A_PrintBold("This need for open door, dont eat this xD")//тут уже можете писать свое..
	FAIL

Зачем я использовал A_JumpIf? А затем что класс CustomInventory после прыжка в стейте Use или PickUp возвращает false гоззе, что значит использование или поднятие вещи не произойдет, но стейты и все функции которые мы пропишем выполнятся.. Если в стейте NoUse прописать функцию A_RailWait, тогда вещь используется! Функции подобные A_RailWait как бы говорят что стейт use успешно выполнен и надо использовать вещь.
Вместо Health>0 можете написать свое условие прыжка, но оно должно быть 100% т.к. вещь обязательно должна попасть в стейт NoUse с помощью прыжка!!!
В общем такая вещь ведет себя как и все, но когда мы пытаемся ее использовать из инвентаря или hotSlota как бы ничего не произойдет(Ну можете вывести сообщение о том что эта вещь квестовая и ее использовать нельзя...)
Примечание: Если делать Replaces оригинального ключа например RedCard1 : CustomInventory replaces RedCard, то тут уже не воспользоваться способом описанным выше, потому что Doom2 проверяет у игрока ключ RedCard, а не RedCard1(не смотря на replaces), такого ключа у игрока не будет т.к. вы подобрали RedCard1(то есть тот что унаследован от CustomInventory, а не от RedCard) в этом и загвоздка... Выход, дверь должна проверять у игрока наличие ключа RedCard1, а не RedCard. Возможно есть еще решения, но я не задумывался.
Вот по такому принципу и добавляем вещи в decorate, еще конечно надо дописать их в ACS, но там ничего сложного:
В ACS надо дописать:
В константу Item_Number 3 //Количество вещей которые могут ложиться в инвентарь.
В массив имя вещи Item_Name[Item_Number] = {"Пустышку не трогаем","MEDIKIT1","HealthBonus1"}; //Если Item_Number 3, прописываем в кавычках 3 актора.
В массив имя доп. актора вещи Item_SlotName[Item_Number] = {"Пустышку не трогаем","SlotMedikit","SlotHealthBonus"};//Дописываем имена ваших акторов доп. акторов вещи, SlotYourItemName..
В массив имя картинки вещи Item_IconName[Item_Number] = {"Пустышку не трогаем","MEDIA0","BON2A0"};//Картинка может лежать и в папке Graphics, т.е. не обязательно брать спрайт.
В массив информация о вещи Item_Info[Item_Number] = {"Пустышку не трогаем","Это аптечка, лечит ХХ Оз.", "Дает +1 к оз игрока."};

Пустышку не трогайте, во всех массивах 1 значение должна быть пустышка, а после нее прописываем свои вещи. Кол. вещей в константе Item_Number, так же учитываем пустышку, т.е. у вас прописаны 2 вещи, в константе кол. должно быть 3 т.к. 1 вещь это пустышка(это не моя прихоть, там был баг какой-то и пустышка способ его избежать)
Еще важно во всех массивах последовательность вещей должна быть одинакова, то есть писать так нельзя:
Item_Name[Item_Number] = {"Empty","MediKit1", "HealthBonus1"};
Item_SlotName[Item_Number] = {"Empty","HealthBonus1", "MediKit1"};//Так не правильно!!! Medikit1 должен быть вторым по счету т.к. в первом массиве Item_Name) он второй.


В KEYCONF должно быть прописано:
ClearPlayerClasses //Очищаем всех персов
AddPlayerClass DoomPlayer1 //Добавляем своего (Если акторов Slot1-Slot12 сделать переменными, тогда очищать, добавлять новых игроков не надо.)

AddKeySection "AlekvInventory" AlekvInventory //В кавычках пишем что хочется, это будет видно в настройках управления (G)ZDoom.
AddMenuKey "Inventory On\Off" Inv //Это кнопка вкл\выкл. инвентарь, мне такая система по душе, не нравится делаем своё.
alias Inv "PukeName \"Inventory_On_Off\"; +user1"//user1 в принципе можно удалить.. Это так для примера оставил)
DefaultBind I Inv //По стандарту инвентарь будет открываться кнопкой I

AddMenuKey "Hot key for HotSlot1" HotSlot1
alias HotSlot1 "PukeName \"UseHotSlot1\""
DefaultBind F1 HotSlot1

AddMenuKey "Hot key for HotSlot2" HotSlot2
alias HotSlot2 "PukeName \"UseHotSlot2\""
DefaultBind F2 HotSlot2

В порте GLOOME есть какой-то странный баг, инвентарь открывается по нажатию 2 раза клавиши I!! Я даже не пробовал это исправить, так просто на заметку.

Ну и конечно сам скрипт должен быть скомпилирован, т.е. делаем Lump LOADACS в корне архива PK3\PK7, в нем пишем AlekvInventory, что значит будет грузить скрипт с таким именем. И папку ACS, туда копируем скомпилированный скрипт с именем AlekvInventory.acs
Если вы хотите плотно связать инвентарь с вашим проектом, то думаю сразу компилировать нет смысла, куда быстрее копировать скрипт в карту т.е. открываем GZDB, жмем F10, туда копируем скрипт и делаем что вам надо..Постоянно компилировать нудно ИМХО..



Так, теперь что по поводу настройки инвентаря, то есть его координаты, кол. ячеек, где будет выводиться информация о вещи.. Я пытался комментировать почти каждую строку, почитайте комменты, возможно так поймете что да как делать, если возникнут какие либо вопросы или найдете какой-то баг, пишите в эту тему, попробую помочь.
Настройки:
Скрытый текст:


Настройка инфы о вещи :
//************************************************************************************************************
Если вам не нравится что информация о вещи выводится в координатах мыши, то в функции SetItemInfo (пишем свои координаты X и Y), что бы не искать в ручную где использована эта функция, пользуемся поиском!
/**Когда мышь наведена на слоты!!!Если надо больше слотов, тут дописываем*/ Ищем поиском эту строку, там работает SetItemInfo, и там меняем координаты. Таким образом можно сделать фиксированную область в которой будет инфа о вещи, по своему интересно.
Если вам НРАВИТСЯ что инфа в координатах мыши, но вы хотите что бы был задний фон.. Тогда прямо в конце функции SetItemInfo можете прописать так:
DrawPicture(Str Name, Int x, Int y, Int SpecId, Int Time);
1arg str name == "имя картинки заднего фона",
2arg int x == координатам в которых покажется картинка, если надо что бы показывалась там где мышь, пишем MouseX
3arg int y == Y координата картинки (MouseY)
4arg int SpecId == ID для картинки, число должно быть меньше чем ID слотов, вещей, но больше ID курсора мыши.
5arg int Time == как долго картинка будет на экране, пишите 0.1 или 0.5... т.к. она должна пропадать когда курсор не на ячейках..
Так же можно менять цвет инфо текста прописав его в константе которая в начале скрипта ///Info (пользуемся поиском если что.)

Добавляем больше слотов :
//************************************************************************************************************
Что бы добавить больше слотов, на пример 20 слотов, вам надо дописать;
В Decorate:
Actor Slot13 : Inventory
{Inventory.Amount 1 Inventory.MaxAmount 1 Inventory.InterHubAmount 1 +HUBPOWER}
Actor Slot14 : Inventory
{Inventory.Amount 1 Inventory.MaxAmount 1 Inventory.InterHubAmount 1 +HUBPOWER}
//И так до Slot20..

Затем в ACS:
Настройки слотов : (строка для поиска в скрипте)
#Define Count_Slot 20 //Вместо 12, пишем 20.. Т.е. это кол. слотов.
Int SlotID[Count_Slot] = {};//К 12 идам, дописываем еще "712", "713", "714".. чтобы бы всего было 20.
Str Slot_Name[Count_Slot] = {};//Дописываем имена ваших акторов Slot13-Slot20..
Int ItemID[Count_Slot] = {};//Дописываем Id для вещей которые будут в этих слотах. Если слотов 20, столько и прописываем IDов.

Так же дописываем координаты слотов... Кстати тут же и задаем так сказать форму инвентаря..(т.е. 3 столбца по Х, 5 по Y и т.д.)
Int Slot_X[3] = {500.0, 580.0, 660.0}; //Позиция слотов по X координате.
Int Slot_Y[4] = {230.0, 310.0, 390.0, 470.0, 550.0}; //Позиция слотов по Y координате.

Если вам так кажется не удобно можете прописать по своему.. Вот 3 слота выстроены в 1 ряд по X(т.е. по горизонтали) например так:
Int Slot_1_XY [2] = {500.0,230.0};//Коорд. 1ого слота, число 500.0 это X, число 230.0 это Y
Int Slot_2_XY [2] = {580.0,230.0};//Коорд. 2ого слота
Int Slot_3_XY [2] = {660.0,230.0};//Коорд. 3его слота

Тогда в функции ShowSlot() да вообще где юзаются Slot_X[] Slot_Y[], надо заменить своими(не забываем про поиск и replace в Slade!! Ну можно и GZDB, хотя у меня он там часто глючит) Идем дальше;
Прописываем координаты для цифры отображающих кол. вещей.. хотя можно написать как Int Pos_Item_CountSlot_1_X = Slot_1XY;..Ну как тут прописать вам решать..
Int Pos_Item_Count_X[Count_Slot] = {520.0, 600.0, 680.0};//Те же координаты что и Slot_X\Slot_Y +20.0
Int Pos_Item_Count_Y[Count_Slot] = {260.0, 340.0, 420.0, 500.0};
Int Item_CountID[Count_Slot] = {280,281,282,283,284,285,286,287,288,289,290,291};//Тут тоже дописываем ID! кол. ID == константе Count_Slot


В функции ShowSlot() Дописываем слоты:
HudMessage(s:"A";0,SlotID[11],0,Slot_X[2],Slot_Y[3],0); //12 слот,
HudMessage(s:"A";0,SlotID[12],0,Slot_X[0],Slot_Y[4],0); //13 слот, пошёл 5 столб вниз (по Y) т.е. 3 слота по X и 5 слотов вниз по Y...


В функции ShowItem() Дописываем слоты:
If(PutSlot == 12){DrawPicture(Item_Pic,Slot_X[2]+40.0,Slot_Y[3]+80.0,ItemID[11],0.05);//12 Слот
SetFont(Item_CountFont);HudMessage(d:CheckInventory(ItemCount);0,Item_CountID[11],Count_Color,Pos_Item_Count_X[2],Pos_Item_Count_Y[3],0.05);}

If(PutSlot == 13){DrawPicture(Item_Pic,Slot_X[0]+40.0,Slot_Y[4]+80.0,ItemID[12],0.05);//13 Слот
SetFont(Item_CountFont);HudMessage(d:CheckInventory(ItemCount);0,Item_CountID[12],Count_Color,Pos_Item_Count_X[0],Pos_Item_Count_Y[4],0.05);}

То есть просто копипастим 12 слот, и подставляем там цифры 13ого слота.. ничего сложного надеюсь..
Если обозначать координаты так Int Slot_1_XY [2] = {500.0,230.0}; будет проще .., но это опять таки вам решать, мне удобно как есть.

Дальше в скрипте MOUSE там где комментарий "Когда мышь наведена на слоты!!!Если надо больше слотов, тут дописываем" (Юзайте поиск если что..)
копипастим 12ый слот и меняем циферки.
If(HUD_ClickBox(Slot_X[2],Slot_Y[3],IconSize,IconSize)==True){s1hover = 12;SetItemInfo(MouseX,MouseY);}//12 слот
If(HUD_ClickBox(Slot_X[0],Slot_Y[4],IconSize,IconSize)==True){s1hover = 13;SetItemInfo(MouseX,MouseY);}//13 слот
и т.д.


Чуть ниже еще есть Switch(s1wasclick), там надо дописать ваше Case для новых слотов.. когда кликаете мышкой на слот, все что произойдет прописывается в Case..
Пример:
Case 12://12 слот
	ClickSlot = 12;
	ShowQuestWindow();
	Break;
Case 13: //13 слот
	ClickSlot = 13;
	ShowQuestWindow();
	Break;
Case 14:
	... и т.д.

Это все что надо для новых слотов, надеюсь ничего не забыл.. Это все конечно можно было сделать циклами, что бы изменил пару переменных и добавились слоты.. но так он более кастомизированый.
//************************************************************************************************************



Функций которые надо юзать вместо TakeInventory, GiveInventory, DropInventory, UseInventory:
Скрытый текст:


TakeAlekvInventory (Str ItemName, Str Item_Slot_Name, Int Item_Amount)
В аргумент ItemName пишем имя актора в декорейте, например "MEDIKIT".
В аргумент Item_Slot_Name, надо писать SlotMedikit(см. пример ниже), такой актор должен быть у каждой вещи.
В аргумент Item_Amount пишем сколько вещей ItemName надо забрать.

GiveAlekvInventory (Str ItemName, Str Item_Slot_Name, Int Item_Amount)
Тоже что и TakeAlekvInventory, только даст вещь игроку..


DropAlekvInventory (Str ItemName, Str Item_Slot_Name, Int AmountDrop, Int TID_Drop, Int Chance_Drop)
В аргумент ItemName пишем имя актора в декорейте, например "MEDIKIT".
В аргумент Item_Slot_Name, надо писать SlotMedikit(см. пример ниже), такой актор должен быть у каждой вещи.
В аргумент Item_Amount пишем сколько вещей ItemName надо забрать.
В аргумент TID_Drop, пишем TID актора который должен выкинуть вещь.(По дефолту 0, т.е. активатор функции)
В аргумент Chance_Drop пишем число, шанс на выпадение указанной вещи где  1 очень маленький, 256 == всегда выпадет\выкинется. По дефолту шанс==256
Примечание: в функции DropAlekvInventory нельзя прописать массив или переменную вместо ItemName, обязательно должна быть строка как эта "Medikit".
Не много сомневаюсь в этой функции, она по сути бесполезна т.к. вещь дропается в координатах игрока, как только игрок тронется с места, все что он выкинул такой функцией подберётся обратно...


UseAlekvInventory (Str ItemName, Str Item_Slot_Name)
, т.е. давать игроку вещь или забирать надо только через функции  TakeAlekvInventory и GiveAlekvInventory или же положить вещь на пол, игрок подбирает её и она попадает в инвентарь. Еще написал 2 функции UseAlekvInventory и DropAlekvInventory.


Пример:
Script "Give" (Void)//К примеру вешаем запуск скрипта на линию..
{GiveAlekvInventory("Medikit1","SlotMediki1", 10);}//Такой вот простой скрипт при активации даст игроку 10 аптечек которые положатся в AlekvInventory.



Есть еще в конце всей это писанины пару мини скриптов для примера как юзать вещь из инвентаря по нажатию кнопки, или как выкинуть вещь пройдя через линию, там думаю поймете что к чему и зачем..
Если вам не нужны HotSlot (Горячие слоты), закомментируйте все что с ними связанно!(юзаем поиск по скрипту)
В общем, если что-то надо спрашивайте, все я не объясню за раз. Нашли баг, пишите, если что-то хотите видеть в мануале, тоже пишите =)

В этом инвентаре использовал скрипт мышки ZZYZX, ИМХО, но это лучшая мышь в гоззе..
Вот оригинал скрипта: -> Ссылка на скрипт Mouse ZZYZX

Еще есть вот такая библиотека libZDGUI автор cybermind.
Скрытый текст:

cybermind:
Закину свою старую библиотеку для создания графического интерфейса под здум - ее с небольшими доработками можно использовать для управления инвентарем
libZDGUI



И есть еще вот такой инвентарь(не мой):
Скрытый текст:


TheSkyBug
Один человек с ЗДум-форума делал мод с инвентарём (И успешно его бросил, как и пару десятков других). Там куча багов, но инвентарь работает более-менее нормально.
Если интересно: http://forum.zdoom.org/viewtopic.php?f=19&t...=Army+of+Darkness

P.S.: Мод под Хексен


Рейтинг сообщения: +3, отметил(и): BETEPAH[iddqd], Void Weaver, camper
1 3 1
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №2 Отправлено: 18.01.16 23:55:03
Обновил старую ссылку, почистил тему.
1 3 1
[D2D]_Revenant
Banned flooder
4358

Doom Rate: 1.49

Posts quality: -23
Ссылка на пост №3 Отправлено: 19.01.16 15:22:31
Тебе бы хорошо на здум форуме эту тему запилить, может кто перевел бы.

Рейтинг сообщения: +1, отметил(и): alekv
10 2 6
Zveraboy
- Captain -
Next rank: = Captain = after 33 points
2307

Doom Rate: 1.01

Posts quality: +405
Ссылка на пост №4 Отправлено: 19.01.16 17:07:24
Спасибо за мод с инвентарем..,
Он ох как нужен порою..
Капец просто как нужен.
1 2
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №5 Отправлено: 05.02.16 19:46:54
[D2D]_Revenant:
Тебе бы хорошо на здум форуме эту тему запилить, может кто перевел бы.

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

Zveraboy:
Спасибо за мод с инвентарем..,
Он ох как нужен порою..
Капец просто как нужен.

Да он практически бесполезен для просто игры в DOOM2 это скорее для модеров кому надо тот допилит там себе всякое или кол. ячеек поменяет, стиль и т.д.
1 3 1
Zveraboy
- Captain -
Next rank: = Captain = after 33 points
2307

Doom Rate: 1.01

Posts quality: +405
Ссылка на пост №6 Отправлено: 05.02.16 19:48:14
alekv
ПОчему?
он что не запускается?
1 2
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №7 Отправлено: 05.02.16 20:07:43
Запускается, но какой в нем смысл? 2 аптечки ложить да 2 поверапа.. там по моему я сделал что бы и патроны ложились.. типа в пистолете стандартное кол. заряженных(типа в обойме), а в инвентаре доп. таскаешь, но если в пистолете или другом оружии закончились патроны, надо лезть в инвентарь кликать на патроны как бы перезаряжать оружие, и при таком раскладе меня хватило макс. до 4 ур дойти, а дальше надоело т.к. смысл потерял, ну и на найтмаре с инвентарем еще сложнее как-то =)
1 3 1
Zveraboy
- Captain -
Next rank: = Captain = after 33 points
2307

Doom Rate: 1.01

Posts quality: +405
Ссылка на пост №8 Отправлено: 05.02.16 20:53:54
alekv
просто тебе уде проще заодно уже и оружейный мод делать.
Но чтобы сократить работу, я могу тебе кое что подсказать
1 2
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1630
Ссылка на пост №9 Отправлено: 05.02.16 22:34:52
Советую всё перезалить на mediafire/yandex/pastebin.
И автор либздгуи не cybermine, а cybermind.
2 2 1
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №10 Отправлено: 05.02.16 23:09:07
ZZYZX:
И автор либздгуи не cybermine, а cybermind.

Исправил, спасибо.
ZZYZX:
Советую всё перезалить на mediafire/yandex/pastebin.

С гугла не грузит? Или просто удобнее яндекс\пастебин?
Zveraboy:
просто тебе уде проще заодно уже и оружейный мод делать.
Но чтобы сократить работу, я могу тебе кое что подсказать

Я мод делал от балды, т.е. я не собирался его где-то использовать, просто вспомнил что когда-то хотел инвентарь в гоззе.. Да и маловероятно что где-то буду использовать.
1 3 1
Zveraboy
- Captain -
Next rank: = Captain = after 33 points
2307

Doom Rate: 1.01

Posts quality: +405
Ссылка на пост №11 Отправлено: 06.02.16 10:01:18
alekv
Ну как скажешь брат, решать тебе.
Мне казалось просто, что у тебя точно получится.
И кстати не подскажешь какие строки отвечают за кол-во аптечек?

Добавлено спустя 4 минуты 31 секунду:

Скажи ещё в каком разрешении твой мод правильно работает?

Добавлено спустя 5 минут 51 секунду:

Так уже разобрался
Слушай.,
А ты можешь сделайт лайт версию своего мода?
Просто мне твой мод понравился.

И было неплохо его использовать с остальными модами.
1 2
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №12 Отправлено: 06.02.16 10:44:55
Zveraboy:
И кстати не подскажешь какие строки отвечают за кол-во аптечек?

//Такой SlotMedikit доп. актор должен быть у каждой вещи!!! 
Actor SlotMedikit : Inventory
{ 
Inventory.MaxAmount 999 //В акторе Slot_... кол. менять не надо.
Inventory.Amount 1 
Inventory.InterHubAmount 999 
+HUBPOWER 
} 

Actor MediKit1 : CustomInventory replaces medikit
{
+HUBPOWER-AUTOACTIVATE 
Inventory.InterHubAmount 5 
Inventory.MaxAmount 5  //Собс-но тут и прописывается макс. кол. аптечек которое может лежать в инветаре.
Inventory.Amount 1 
States {
         Spawn:   MEDI A -1 
                        Stop
         PickUp:   TNT1 A 1 A_JumpIfInventory("MediKit1",1,"PickUpContinue")
                        TNT1 A 1 A_JumpIf(CallACS("IfFullInventory")==True,"InventoryFull")
                        TNT1 A 1 A_GiveInventory("SlotMedikit",CallACS("CheckEmptySlot"))
PickUpContinue:
                        TNT1 A 1 A_RailWait
                        Stop 
              Use: 
                        TNT1 A 1 A_GiveInventory("MediKit",1)
                        TNT1 A 1 A_RailWait
                        Stop 
InventoryFull:
                        TNT1 A 1 A_PrintBold("Inventory full!")
                        Stop 
   }
}


Zveraboy:
Скажи ещё в каком разрешении твой мод правильно работает?

По идее должен работать во всех разрешениях.. Но я делал\тестил под 1024х768 если не изменяет память.

Zveraboy:
А ты можешь сделайт лайт версию своего мода?
Просто мне твой мод понравился.

Что за лайт версия?) По идее это и есть лайт версия, более навороченный инвентарь делать не стал, т.к. толком никому не надо и желание пропало.
Zveraboy:
И было неплохо его использовать с остальными модами.

Ну это может сделать любой кто прочитает в шапке темы это:
Что надо для того что бы добавить инвентарь в свой проект?
К сожалению что бы инвентарь работал в разных модах.. тот же брутал дум и подобные, надо в ручную прописать все вещи которые надо ложить в инвентарь в массив и декорейт т.е. как описал выше. По сути там сложного ничего нет, вписывать надо просто по шаблону+ каждой вещи что должна быть в инвентаре дописывать 1 актора Slot_NameActor : Inventory.
1 3 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1991
Ссылка на пост №13 Отправлено: 06.02.16 14:17:17
alekv
Мне не до конца понятно, как в моде реализована проверка "пустых" ячеек и порядка, в котором берутся вещи.
Например, изначально вещей нет. Подбираем первую аптечку - она попадает в слот № 1. Затем подбираем патрон - он попадает в слот № 2.
Но если бы мы подобрали сначала патрон, то он попал бы в слот № 1, а аптечка - в слот № 2.
Вот этот алгоритм "перебора соответствий слот-вещь" хотелось бы разобрать подробнее.

Для себя я уже придумывал схему инвентаря с жесткой привязкой типа вещи к определенному слоту. Например, в слот № 1 кладутся только большие аптечки, в слот № 2 - малые аптечки, в слот № 3 - патроны такие-то и т.п. Т.е. в таком случае в инвентаре:
- всегда будут пустые слоты или дырки между слотами
- нужно знать количество типов вещей и под него подогнать количество слотов инвентаря (переполнения быть не может, просто каждая вещь займет свой слот). Т.е. если изначально запланировал 20 типов вещей, а потом выяснилось, что надо добавить еще 5 типов, то придется расширять инвентарь на 5 доп. слотов и дописывать код.
Такую систему гораздо проще заскриптить, хотя описанные выше ее недостатки могут не понравиться игрокам.
1 7 2
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №14 Отправлено: 14.02.16 22:17:15
Shadowman
Дак вот в том и дело что система построена на костылях и затычках, оно там друг друга дополняет, выдрать что-то конкретное даже хз.. врятли получится. Там за каждым действием следят циклы.. что-то клацнул цикл заработал.. собсно если что-то одно вырвать, оно работать не будет.
Shadowman:
Такую систему гораздо проще заскриптить, хотя описанные выше ее недостатки могут не понравиться игрокам.

С такой системой лучше вообще тогда не делать инвентарь.. Я в середине разработки инвентаря тоже подумывал о таком, но решил все же запилить более менее нормально.. Изначально я хотел что бы инвентарь работал так:
взял вещь, ложится в 1 слот, 2ая вещь во 2ой слот.. выкинул 1ую вещь и 2ая автоматом перемещается на 1 слот..
Но я так не сделал из-за драг&дроп интерфейса.. драгндроп конеш я тоже не сделал, но чем черт не шутит может когда-то опять возьмусь за инвентарь. А так я даже не помню как я там сделал ту систему хД Помню что делалось оно все путем ошибок и на каждый недочет создавался отдельный либо цикл либо функция который фиксил это все дело.
1 3 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1991
Ссылка на пост №15 Отправлено: 14.02.16 23:08:26
alekv:
С такой системой лучше вообще тогда не делать инвентарь..

А вот почему? можешь обосновать, помимо перечисленных недостатков (пустые клетки)?
Помимо минусов есть же и плюсы - всегда будешь знать, в какой ячейке какой предмет лежит. Что-то наподобие специализированного рюкзака с карманами разных размеров под соответствующие предметы :)
Кстати, я предполагал (и уже реализовал в тестовом варианте) сделать остановку времени, пока игрок роется в инвентаре. Т.е. избавиться от вечной проблемы хексен-инвентаря, когда надо в спешке найти нужную вещь (а отосюду летят файрболлы и молнии). А если время заморожено, то перебирание пустых клеток до нужной не должно, по идее, стать критичным.
Вот как это выглядит в примере:
1. Подобрали вещи, открываем инвентарь (спец. кнопкой), можем выбрать вещь (мышь не делал, рамка перемещается курсорными клавишами, выбор - автоматически при наведении на соответствующий слот)


2. Убрали инвентарь - выбранная вещь осталась в левом нижнем углу. Можно использовать (только не дефолтной кнопкой, а кнопкой из доп. меню... Не уверен, что можно дефолтную кнопку Использования вещи перенастроить на свой скрипт)
1 7 2
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №16 Отправлено: 14.02.16 23:57:20
Shadowman:
А вот почему? можешь обосновать, помимо перечисленных недостатков (пустые клетки)?

Ну как-то не удобно это все.. чувствуется ограничение.. Лично для меня это единственное что не нравится. Так-то на вид инвентарь как инвентарь..

А почему ты не хочешь модифицировать мой инвентарь как тебе надо? Он же уже готов.. осталось только выставить нужное кол. слотов да фичу с фризом прикрутить... Последнее если память не изменяет делов на 5 мин добавить пару строк в некоторые скрипты.

Да есть же еще ссылка на другой инвентарь в шапке темы в конце.. тоже ниче такой, хотя для меня он как-то больше запутан.
1 3 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1991
Ссылка на пост №17 Отправлено: 15.02.16 00:20:22
alekv
Ты уж извини, но я привык использовать то, в чем сам полностью разбираюсь. В твоем инвентаре некоторые функции мне не до конца ясны. К тому же у твоего инвентаря есть один крупный недостаток с моей точки зрения - все завязано на скрипты, вызываемые из декорэйта. Например, это нужно для того, чтобы располагать вещи в инвентаре в зависимости от очередности их подбора (проверки со стэйта PickUp и т.п.).
При создании какого-то сложного предмета, у которого в стейте Use идут отсылки на скрипты, что-нибудь да заглючит обязательно, а выяснить, как это починить, я не смогу, если не понимаю деталей функций.
В том инвентаре, который я привел выше, вещи декорэйтятся обычным образом (только нужно не забывать выставить -INVENTORY.INVBAR, чтобы они не показывались в хексеновском обычном окошке инвентаря). А все манипуляции уже проводятся скриптами, не трогая декорэйт вообще.
Потому в моем случае не надо ломать голову над функционалом вещи - он пишется как обычно, а потом просто дается команда использовать эту вещь по скрипту.
1 7 2
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №18 Отправлено: 11.09.17 19:38:03
Мда.. Видимо играли в doom в этим инвентарем полтора человека..? Или никто дальше 1ого уровня не прошел ?

Нашел баг, если не использовать подобранный ключ(а у него не отображается иконка) тогда вещь перекрывает собой ключ и дальше происходят чудеса =)
Выход - жать I и ЛКМ нажать на ключ>USE.

Написал на заметку, возможно когда-то поправлю =)
1 3 1
Li$TeR
- Lance Corporal -
Next rank: = Lance Corporal = after 18 points
142

Doom Rate: 0.55

Posts quality: +170
Ссылка на пост №19 Отправлено: 20.05.19 13:43:12
Ну,типа, шах и мат)
P.s., поскольку есть режим ванилы, в ваниле он работает тоже, так же есть способ биндить вещь без команд, на хоткей, и возможность дропа оружек и вещей.
Скрытый текст:











Рейтинг сообщения: +2, отметил(и): Артём, Void Weaver
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №20 Отправлено: 20.05.19 14:45:29
Если ты собираешься поделиться соусом инвентаря, то лучше открыть новую тему, если же решил ограничиться лишь скринами то, полагаю, надо было выкладывать в теме "Покажи скриншот".

Инвентарь - один из лучших что я видел, хотя веапон меню существуют и круче. Орлу и Суслику - моё почтение.
Бтв, не знаю как сейчас но в ЛСД 1.5.6 веапон меню упорно не желало умещаться в 19 дюймов 4:3.
1 9 1
Страница 1 из 2Перейти наверх 1, 2  След.
   Список разделов - Местечко мапперов и моддеров - [Done]Инвентарь с мышкой в (G)ZDoom & GLOOME