Всем привет!
Я полнейший чайник что касается кода, прошу помощи.
Делаю мод для игры, в нем необходимо прописать скрипт в результате которого, при нажимании кнопки завершения хода, вылазит окошко с запросом на подтверждение этого действия. Если игрок подтверждает, то начинается следующий ход. Если нет, то возврат к текущему ходу.
Есть готовый код, отвечающий за всплытие окна с кнопками "ДА" или "НЕТ" при нажатии на кнопку перезарядки оружия, если обойма в ней не до конца разряжена. Если разряжена то окошко не вылазит.
Всего есть три файла.
Как я понял в первом шаблон, в котором указаны текстовые параметры окна
Код:
[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;
}
Мне необходимо переделать эти коды на действие, описанное мною выше - завершение хода.
Либо, если этот код не подходит к моим запросам, создать новый.
Может кто помочь?