Полезное

Мы Вконтакте

Discord канал

#
Аватара пользователя
Пользователь
Сообщения: 1
Всем привет!
Я полнейший чайник что касается кода, прошу помощи.

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

Есть готовый код, отвечающий за всплытие окна с кнопками "ДА" или "НЕТ" при нажатии на кнопку перезарядки оружия, если обойма в ней не до конца разряжена. Если разряжена то окошко не вылазит.
Всего есть три файла.

Как я понял в первом шаблон, в котором указаны текстовые параметры окна
Код:
[X2TargetingMethod_ConfirmFreeReload]
PopupTitle=Wasting free reload
PopupBody=You have ammo remaining.  Are you sure you want to use your free reload?
AcceptMessage=Reload
CancelMessage=Cancel


Есть еще два файла в которых прописаны скрипты:
Код:
class X2DownloadableContentInfo_ConfirmFreeReload extends X2DownloadableContentInfo;

static event OnPostTemplatesCreated()
{
    local X2AbilityTemplateManager abilityManager;
    local X2AbilityTemplate reloadTemplate;
   
    abilityManager = class'X2AbilityTemplateManager'.static.GetAbilityTemplateManager();

    reloadTemplate = abilityManager.FindAbilityTemplate('Reload');
    reloadTemplate.TargetingMethod = class'X2TargetingMethod_ConfirmFreeReload';
}


и

Код:
class X2TargetingMethod_ConfirmFreeReload extends X2TargetingMethod;

var localized string PopupTitle;
var localized string PopupBody;
var localized string AcceptMessage;
var localized string CancelMessage;

var bool IsConfirmed;
var XComGameState_Ability AbilityState;

function Init(AvailableAction InAction)
{
    super.Init(InAction);
    IsConfirmed = false;
    AbilityState = XComGameState_Ability(`XCOMHISTORY.GetGameStateForObjectID(InAction.AbilityObjectRef.ObjectID));
}

function bool VerifyTargetableFromIndividualMethod(delegate<ConfirmAbilityCallback> callback)
{
    if (!IsConfirmed && HasAmmo() && IsLimitedFreeReload())
    {
        ShowFreeReloadPopup(callback);
        return false;
    }

    return true;
}

private function ShowFreeReloadPopup(delegate<ConfirmAbilityCallback> callback)
{
    local TDialogueBoxData dialog;
    local XComPresentationLayerBase presentationLayer;

    m_fnConfirmAbilityCallback = callback;
    presentationLayer = XComPlayerController(class'WorldInfo'.static.GetWorldInfo().GetALocalPlayerController()).Pres;

    dialog.eType = eDialog_Warning;
    dialog.strTitle = PopupTitle;
    dialog.strText = PopupBody;
    dialog.strAccept = AcceptMessage;
    dialog.strCancel = CancelMessage;
    dialog.fnCallback = DialogCallback;

    presentationLayer.UIRaiseDialog(dialog);
}

simulated private function DialogCallback(eUIAction eAction)
{
    if (eAction == eUIAction_Accept)
    {
        IsConfirmed = true;
        m_fnConfirmAbilityCallback();
    }
}

private function bool IsLimitedFreeReload()
{
    local XComGameState_Item weaponState;
    local array<X2WeaponUpgradeTemplate> weaponUpgrades;
    local UnitValue numFreeReloadsUsed;
    local int numFreeReloadsRemaining, i;

    weaponState = AbilityState.GetSourceWeapon();
    weaponUpgrades = weaponState.GetMyWeaponUpgradeTemplates();
    UnitState.GetUnitValue('FreeReload', numFreeReloadsUsed);

    for (i = 0; i < weaponUpgrades.Length; i++)
    {
        if(weaponUpgrades[i].NumFreeReloads > 0)
        {
            numFreeReloadsRemaining = int(weaponUpgrades[i].NumFreeReloads - numFreeReloadsUsed.fValue);
            if(numFreeReloadsRemaining > 0 && numFreeReloadsRemaining < 10) //Check it's a small number to support mods that have "infinite" free reloads
            {
                return true;
            }
        }
    }
    return false;
}

private function bool HasAmmo()
{
    return AbilityState.GetSourceWeapon().Ammo > 0;
}

// Necessary to prevent red-screens, for some reason
function int GetTargetIndex()
{
    return 0;
}

Мне необходимо переделать эти коды на действие, описанное мною выше - завершение хода.
Либо, если этот код не подходит к моим запросам, создать новый.
Может кто помочь?
Аватара пользователя
Пользователь
Сообщения: 26
Ты форумом не ошибся случаем, это что С#? Может тебе лучше пойти на Unity
Аватара пользователя
Пользователь
Сообщения: 183
andre писал(а):
Ты форумом не ошибся случаем, это что С#? Может тебе лучше пойти на Unity

Не, это не Шарп, синтаксис чуток отличается.


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница