Перейти к публикации
Планета Deus Ex

Предметы в инвентаре и их размер (GMDX)


Рекомендованные сообщения

С Наступившим 2019-м всех, кто прочтет!

 

Есть вопрос по редактированию GMDX. Заметил, что некоторые предметы занимают в инвентаре иное количество слотов, чем в оригинале (тяжелое оружие). Пытался в UnrealEd прописывать другие размеры иконкам оружия, но сам такого эффекта получить не смог. Хотелось бы знать, как менять "размер" предметов (количество занимаемых слотов, форму) в инвентаре.

 

Второй вопрос - возможно ли прописать предметы-трофеи с тел убитых\оглушенных врагов? Заданные списком определенные предметы, с заданным шансом на появление.

 

Извиняюсь, если такие вопросы не совсем подходят к этой теме.

Ссылка на комментарий

Количество занимаемых ячеек в инвентаре определяется переменными InvSlotsX и InvSlotsY. Их нужно изменить в defaultproperties нужного класса и пересобрать пакет.

 

Можно, у ScriptedPawn есть массив

var(Inventory) InventoryItem InitialInventory[8];  // Initial inventory items carried by the pawn

Труп получает содержимое инвентаря от ScriptedPawn через функцию AddInventory().

Ссылка на комментарий

Благодарю за оперативные ответы!

Ранее я пробовал экспортировать только класс нужного предмета, редактировать его (те самые строки) и затем подключать как свой package, но в игре эффекта не было...

Пересобрать пакет, (ucc make) к сожалению, почему-то получилось с оригинальными файлами, - спасибо, в игре сработало! - и не получается с модификацией - в окошке cmd операция прерывается из-за каких-то ошибок.

В конце есть строки:

 

Compiling DeusExPlayer

...DeusExPlayer.uc <12656> : Error, can't find Sound 'bouncemetal'

Failed due to errors.

 

Я в этом пока очень плохо разбираюсь :(

Ссылка на комментарий

Официальное руководство:

 

Setting up GMDX with the Unreal Editor

If you haven't already, install Deus Ex & GMDX. Also install the Deus Ex SDK (google it).

Alternatively instead consider using the DX EDITING PACK: https://yadi.sk/d/PVAf0wsC3NzgkX

This is handy, as in addition to the SDK it comes with various tools such as WOTGreal exporter which enables you to export assets from packages.

 

1. remove or delete the DeusEx.u file in ...\DeusEx\HDTP\System.

2. Copy and place everything from the ...\DeusEx\GMDXv9\System AND the \DeusEx\HDTP\System folders into ...\DeusEx\System.

3. In ...\DeusEx\System find the DeusEx.ini file, open it and under [Editor.EditorEngine] your EditPackages list should look this (copy-paste the below):

EditPackages=Core
EditPackages=Engine
EditPackages=Editor
EditPackages=Fire
EditPackages=IpDrv
EditPackages=UWindow
EditPackages=UBrowser
EditPackages=Extension
EditPackages=DeusExUI
EditPackages=ConSys
EditPackages=DeusExConversations
EditPackages=DeusExSounds
EditPackages=DeusExItems
EditPackages=DeusExDeco
EditPackages=DeusExCharacters
EditPackages=HDTPCharacters
EditPackages=HDTPItems
EditPackages=HDTPDecos
EditPackages=HDTPPapers
EditPackages=HDTPBookOpen
EditPackages=HDTPBookClosed
EditPackages=MPCharacters
EditPackages=DeusExText
EditPackages=IpServer
EditPackages=ShifterEX
EditPackages=GMDXSFX
EditPackages=GMDXUI
EditPackages=GameMedia
EditPackages=FOMOD
EditPackages=DeusEx
EditPackages=Models

4. Copy GameEffects.utx in DeusEx\GMDXv9\Textures AND HDTPAnim.utx in DeusEx\HDTP\Textures into DeusEx\Textures. You should now be able to open GMDX's maps and packages in the Unreal Editor.

 

Exporting DeusEx.u classes to be used for programmers

 

1. do the above, get GMDX setup in the editor. (alternatively, wait for source code release, which is not guaranteed at this time).

2. in the editor interface, navigate to the class/texture etc browser on the right. Use the drop-down menu to select 'classes' if it isn't on the classes list already.

3. Click the Export All button. Be sure you do this for actors/classes, not textures or anything else.

4. All DeusEx.u classes/scripts will now be located in ...\DeusEx\DeusEx\Classes Compiling Classes

 

Once/if you have fiddled with the classes you just exported above and added new code, you now need to compile them into a new DeusEx.u. Delete the DeusEx.u file in ...\DeusEx\System. Now pull up a command prompt (type "command prompt" in you computer's/OS's search bar) and go to your ...\DeusEx\System directory. To navigate to it use the 'cd' command. Example:

cd C:\DeusEx\System

To then start the compile, type in:

ucc make

...press enter and wait for it to do its thing. Once it is finished it will present you with a Y/N prompt. It doesn't matter what you press here. Press the any key! :)

Always delete the DeusEx.u in ...\DeusEx\System before compiling (as a new DeusEx.u in this folder is what the compiler is attempting to make) and also make sure there are no other DeusEx.u files in your Deus Ex directory that are conflicting with the compile (HDTP's DeusEx.u gave me trouble back in the day. just deleted it and the compile worked).

Ссылка на комментарий

Еще раз спасибо!

Пункт 4 я упускал - теперь получилось.

 

По предметам у НПС - прописывал в InitialInventory некоторые предметы, боеприпасы, но в игре с врагов одни боеприпасы в прописанном количестве не берутся, другие - не берутся вовсе. У коммандос MJ12 прописанные предметы берутся все, а у обычных их бойцов - только те, что были прописаны до изменений...

И, вроде бы, вероятность при всем этом не задается - предметы либо появляются стопроцентно, либо нет?

Изменено пользователем Icegriffon
Ссылка на комментарий

Посмотрите функцию DeusExCarcass > function Frob(Actor Frobber, Inventory frobWith)

В ней прописано сколько патронов и для чего выпадает.

 

 

                else if ( (item.IsA('DeusExWeapon')) )
                {
                //log("IS A DXWEAPON");
               // Any weapons have their ammo set to a random number of rounds (1-4)
               // unless it's a grenade, in which case we only want to dole out one.
               // DEUS_EX AMSD In multiplayer, give everything away.
               W = DeusExWeapon(item);

               // Grenades and LAMs always pickup 1
               if (W.IsA('WeaponShuriken') && passedImpaleCount > 0)
               {
                  if (passedImpaleCount > 4)
                      passedImpaleCount = 4;
                  w.PickupAmmoCount = passedImpaleCount;
                  if (w.PickupAmmoCount == 0)
                      w.PickupAmmoCount = 1;
                  PlaySound(Sound'DeusExSounds.Generic.FleshHit1',SLOT_None,,,,0.95 + (FRand() * 0.2));
               }
               else if (W.IsA('WeaponNanoVirusGrenade') ||
                  W.IsA('WeaponGasGrenade') ||
                  W.IsA('WeaponEMPGrenade') ||
                  W.IsA('WeaponLAM')  ||
                  W.IsA('WeaponHideAGun') && player.FindInventorySlot(item, True))  //CyberP: there we go. Now need to stop 1-4 rand for nades
                  W.PickupAmmoCount = 1;       //CyberP: I need to check if inventory is full and no nades
               else if (W.IsA('WeaponAssaultGun'))
                  W.PickupAmmoCount = Rand(5) + 1.5;
               else if (W.IsA('WeaponGepGun'))
                  W.PickupAmmoCount = 2;
               else if (!W.IsA('WeaponNanoVirusGrenade') &&
                  !W.IsA('WeaponGasGrenade') &&
                  !W.IsA('WeaponEMPGrenade') &&
                  !W.IsA('WeaponLAM') &&
                  !W.IsA('WeaponHideAGun')) //CyberP: no grenades.
                W.PickupAmmoCount = Rand(4) + 1;
                else if (W.Default.PickupAmmoCount != 0)
                W.PickupAmmoCount = 1; //CyberP: hmm
                }

 

 

 

Более подробно я не разбиралась что там и как работает.

Ссылка на комментарий

Эта цепочка сравнения почему-то напомнила индусский код...

if (bValue == true) {
    ...
}
else if (bValue == false) {
    ...
}
else {
    ...
}
А тут сначала мы проверяем все гранаты, а потом в конце проверяем, что у нас не граната)) Изменено пользователем MVV
Ссылка на комментарий

Для меня это скорее китайская грамота :) Так, куда там я положил тот метод научного тыка...

 

 А тут сначала мы проверяем все гранаты, а потом в конце проверяем, что у нас не граната)) 

 

Когда-то слышал еще анекдот: перед сном программист ставит рядом стакан с водой - на случай, если проснувшись, захочет пить, и пустой стакан - на случай, если не захочет.

Ссылка на комментарий

Чтобы подбирать больше патронов с трупов, поменяйте

W.PickupAmmoCount = Rand(4) + 1;

на

W.PickupAmmoCount = Rand(4) + нужное кол-во (20);

И для штурмовой винтовки:

  else if (W.IsA('WeaponAssaultGun'))
                  W.PickupAmmoCount = Rand(5) + нужное кол-во (20);

В DXR все гранаты происходят от GrenadeWeapon ))

Ссылка на комментарий

Спасибо, интересно попробовать.

Но вообще, говоря о трофеях, изначально думал о другой идее.

В оригинале, практически все полезные игровые предметы (оружие, экипировка, снаряжение, даже деньги) "приколочены гвоздями" на картах, и, не считая первых прохождений, игрок уже знает, где что он может достать, а где не может. Для меня интереснее, когда, исследуя все уголки игрового мира, имеешь маленький случайный шанс найти полезные вещи, которые там не всегда бывают, но могут найтись. Лишний стимул заглянуть в каждый уголок и перевернуть каждый камень, а не заученно пробегаться по полезным местам, игнорируя все остальное. Конечно, тут можно долго рассуждать о балансе и дисбалансе, но лично я для себя определился.

Так, в UEd я видел скрипт разрушаемых контейнеров, из которых может с заданной вероятностью выпасть лабораторная колба, и появиться крыса. Сейчас экспериментирую с появлением при разрушении других вещей. Интересно, насколько большой список разных предметов можно прописать...Правда, уже есть одна проблема - предметы спавнятся, кажется, независимо друг от друга, а желательно, чтобы спавнился только один "пункт" из списка. Но если прописать штук семь-восемь вариантов с достаточно малым шансом, то выглядит приемлемо - обычно появляется какой-то один предмет, если вообще появляется.

Но если найти в мусорном контейнере расходную отмычку, мультитул, ненужную кому-то батарейку, и даже кем-то припрятанную пачку распространенных у бандитов патронов, то снайперские винтовки и ракеты уже перебор. Потому возникла мысль, что было бы здорово иметь возможность случайно найти что-то у противников. Почему бы солдатам и бандитам не носить с собой иногда аптечку, модификатор для оружия, или даже второе оружие, или боеприпасы к нему? Но с трофеями пока не задалось.

Может быть, есть и еще способы, но иду от простейшего - у разрушаемых контейнеров уже написан рабочий (и что важно, достаточно понятный) скрипт-пример, сами они расставлены много где, можно уже экспериментировать и проверять.

Изменено пользователем Icegriffon
Ссылка на комментарий

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
×
×
  • Создать...