вопрос о редактировании .uc

DarkEmpire

誰もいない
Местный
Стальной Визионер
Неукротимое пламя
За заслуги перед форумом
За веру и верность форуму
Сообщения
610
Розыгрыши
0
Репутация
302
Реакции
441
Баллы
1 553
Мне нужно чтоб тут шло перечисление нескольких ID предметов, а не 1.
Как это правильно сделать?

Код:
function int GetSoulShotID(int weapGrade)
{
    switch (GetGradeByIndex(weapGrade))
    {
        case 'NOGRADE':
            return 1835;
        break;
        case 'D':
            return 1463;
        break;
        case 'C':
            return 1464;
        break;
        case 'B':
            return 1465;
        break;
        case 'A':
            return 1466;
        break;
        case 'S':
            return 1467;
        break;
    }
}
 

Вложения

  • 157795635312_kiss.webp
    157795635312_kiss.webp
    15,1 КБ · Просмотры: 34
Блин. Я вам код скинул вы к нему прикрутили что-то и теперь не работает.
Итак смотрим и что мы имеем?
вот это зачем?
local int int1, int2;
local string string1;

если у вас идет возврат сразу в параметр предмета т.е. его ClassID сразу возвращается куда надо.
Идем дальше.
GetSoulShotID(weapGrade, SoulShotID.ClassID, Atss);
И раскладываем на составляющие.
GetSoulShotID(
weapGrade, <- входящее значение.
SoulShotID.ClassID, <- возвращает наш первый int.
а где 2 int???, <- тут у нас ничего не приходит- в итоге вы его пропустили, без объявления
Atss); <- и только тут приходит ваша строка.
А теперь сравниваем с самой функцией.
function GetSoulShotID(
int weapGrade,, <- входящее значение.
optional out int int1, <- возвращает наш первый int.
optional out int int2, <- тут у нас ничего не приходит- в итоге вы его пропустили, без объявления
optional out string string1) <- и только тут приходит ваша строка.
А я вот это для кого написал?
Java:
GetSoulShotID(weapGrade, SoulShotID.ClassID, , тут приходит ваша строка);


А теперь мы получаем вот так всю нашу функцию.
Java:
function FindAllShotsByWeapGrade(int weapGrade)
{
    GetSoulShotID(weapGrade, SoulShotID.ClassID, , Atss);
    GetSpiritShotID(weapGrade, SpiritShotID.ClassID, , Atss);
    
    soulIndex = InvItem.FindItem( SoulShotID );
    spiritIndex = InvItem.FindItem( SpiritShotID );
}
Atss - сразу передаст сюда вашу строку.
 

забей, автор походу дела хочет чтобы за него все сделали, даже не удосужится посмотреть какие аргументы принимает та или иная функция, вангую скорое появление "конкурента" :loltt0:
я для себя вообще то делаю, и само собой мало что понимаю иначе бы не делал тему
 
Не стебайся. Человек учится. Все так начинали.
Удачи вам. Все разложено по полочкам. Нужна теперь только внимательность.
я не стебусь, я маркетингом занимаюсь в тихую :pandaredlol: а вдруг клиентом захочет стать :loltt0:
 
Java:
function FindAllShotsByWeapGrade(int weapGrade)
{
    local ItemID SoulShotID;
    local ItemID SpiritShotID;
    
    GetSoulShotID(weapGrade, SoulShotID.ClassID, , Atss);
    GetSpiritShotID(weapGrade, SpiritShotID.ClassID, , Atss);
    
    soulIndex = InvItem.FindItem( SoulShotID );
    spiritIndex = InvItem.FindItem( SpiritShotID );
}
Вот ваша первоначальная функция.
Ато вы потом убрали
Код:
local ItemID SoulShotID;
local ItemID SpiritShotID;
 
ну это другой разговор :) а купить у нас например? :D
цена как раз таки меня дала мотивацию покопаться в сурсах самому :D
по сути в сурсах дедза есть весь нужный функционал, разобраться в этом, довести до ума и можно юзать у себя на проекте вполне, я думаю
 
цена как раз таки меня дала мотивацию покопаться в сурсах самому :D
по сути в сурсах дедза есть весь нужный функционал, разобраться в этом, довести до ума и можно юзать у себя на проекте вполне, я думаю
Чтобы копаться и править сурсы Дедза нужно понимание Unreal Script.
Потому что он уже плотно занимался ими и там есть очень серьезные перебросы и серьезный код. Ну а там есть многие моменты которые не учтены- в итоге будут ошибки. Лучше учиться не с таких сурсах. Это сразу будет наскоком не взять) Лучше что-то попроще брать.
Все хорошего и с Новым Годом.
 
цена как раз таки меня дала мотивацию покопаться в сурсах самому :D
по сути в сурсах дедза есть весь нужный функционал, разобраться в этом, довести до ума и можно юзать у себя на проекте вполне, я думаю
имхо,его сорц хорошо подойдёт как шпаргалка,но вот разбирать его,прямо скажем,для новичка будет накладно

в целом там система-то система: находишь нужные соски в инвентаре согласно грейду того,что у тебя в rhand, после гетаешь их с инвентаря в отдельные слоты над панелькой - 50% автососок готово

остальное это подвязать их автоюз к двум пакетам EV_ReceiveMagicSkillUse и EV_ReceiveAttack,сравниваете ИД из этого пакета со своим ИД и юзаете соску если совпадает (значит,что это вы ударили или кастанули), ну и откалибровать их использование по задержкам и т.п.
 
Последнее редактирование:
для новичка будет накладно
да я уже понял, с работой отображения дебафов (нубл итд) разобрался и спокойно и добавил новые иды умений
по мелочи исправил автозаточку и автоточку скилов, в целом проблем не возникло пока не взялся за эти автососки

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

Вложения

  • 157799751508_kiss.webp
    157799751508_kiss.webp
    87,6 КБ · Просмотры: 22
да я уже понял, с работой отображения дебафов (нубл итд) разобрался и спокойно и добавил новые иды умений
по мелочи исправил автозаточку и автоточку скилов, в целом проблем не возникло пока не взялся за эти автососки

даже сейчас когда все раписали как нужно сделать, я просто не могу победить компилятор, все написал правильно а он мне выдает ошибку скобки в строке где все правильно, похоже тонкий намек пока выпилить эти автососки из патча
screenshot-1294.webp
 
Вы наверное опять забыли пропустить свой 2 инт.
Лучше его уберите из функции тогда, и там где дергаете функцию тоже убери. Должны остаться 3 параметра.
приписка optional намекает на то что эти значения можно не прописывать. Но т.к. у тебя функции должна вернуть эти значения- то убери optional и смотри по ошибкам.) А вообще нормальные автососки на UC - тут столько нужно будет учесть.
Пример- соски есть но не хватает для использования. Нужно 6 а у тебя 3 в итоге постоянно клиент будет отправлять на использование и пытаться дернуть соску.
И если используете optional то проверяйте, то чтобы прийти к последнему значению- нужно объявить все предыдущие значения даже если они не нужны.
 
Вы наверное опять забыли пропустить свой 2 инт.
Лучше его уберите из функции тогда, и там где дергаете функцию тоже убери. Должны остаться 3 параметра.
приписка optional намекает на то что эти значения можно не прописывать. Но т.к. у тебя функции должна вернуть эти значения- то убери optional и смотри по ошибкам.) А вообще нормальные автососки на UC - тут столько нужно будет учесть.
Пример- соски есть но не хватает для использования. Нужно 6 а у тебя 3 в итоге постоянно клиент будет отправлять на использование и пытаться дернуть соску.
И если используете optional то проверяйте, то чтобы прийти к последнему значению- нужно объявить все предыдущие значения даже если они не нужны.
убрал 2 int, оставил 3 параметра в 552 строке, с optional точно такая же ошибка в этой строке на скобку, если убрать optional то уже другая ошибка - Error, Call to 'GetSoulShotID': bad or missing parameter 3
 
Код:
var string Atss;// <- Т.к. она не прописана локально. В самый верх файла.

function FindAllShotsByWeapGrade(int weapGrade)
{
    local ItemID SoulShotID;
    local ItemID SpiritShotID;
  
    SoulShotID.ClassID = SoulShotIDClassID;
    SpiritShotID.ClassID = SpiritShotIDClassID;
  
    GetSoulShotID(weapGrade, SoulShotIDClassID, Atss);
    GetSpiritShotID(weapGrade, SpiritShotIDClassID, Atss);
  
    soulIndex = InvItem.FindItemByClassID( SoulShotID );
    spiritIndex = InvItem.FindItemByClassID( SpiritShotID );
}


function GetSpiritShotID(int weapGrade, out int int1, out string string1)

{
    switch (GetGradeByIndex(weapGrade))
    {
        case 'NOGRADE':
            int1 = 3947;
            string1 = "NOGRADE";
        break;
        case 'D':
            int1 = 3948;
            string1 = "D";
        break;
        case 'C':
            int1 = 3949;
            string1 = "C";
        break;
        case 'B':
            int1 = 3950;
            string1 = "B";
        break;
        case 'A':
            int1 = 3951;
            string1 = "A";
        break;
        case 'S':
            int1 = 3952;
            string1 = "S";
//           int2 = 22076;
        break;
    }
}
Раз.
Код:
var string Atss;// <- Т.к. она не прописана локально. В самый верх файла.

function FindAllShotsByWeapGrade(int weapGrade)
{
    local int SoulShotID;
    local int SpiritShotID;
   
    GetSoulShotID(weapGrade, SoulShotID, Atss);
    GetSpiritShotID(weapGrade, SpiritShotID, Atss);
   
    soulIndex = InvItem.FindItemByClassID( GetItemID(SoulShotID) );
    spiritIndex = InvItem.FindItemByClassID( GetItemID(SpiritShotID) );
}

function ItemID GetItemID(int ID)
{
    local ItemID cID;
    cID.ClassID = ID;
    return cID;
}

function GetSpiritShotID(int weapGrade, out int int1, out string string1)

{
    switch (GetGradeByIndex(weapGrade))
    {
        case 'NOGRADE':
            int1 = 3947;
            string1 = "NOGRADE";
        break;
        case 'D':
            int1 = 3948;
            string1 = "D";
        break;
        case 'C':
            int1 = 3949;
            string1 = "C";
        break;
        case 'B':
            int1 = 3950;
            string1 = "B";
        break;
        case 'A':
            int1 = 3951;
            string1 = "A";
        break;
        case 'S':
            int1 = 3952;
            string1 = "S";
//           int2 = 22076;
        break;
    }
}
Два.
Выбрать вариант который нравится заменить у себя- скомпилить - пользоваться.

Не посмотрел- вы же с классайди берете- а тут поиск предметов идет другой функцией.
 
Последнее редактирование:
Код:
[CODE]var string Atss;// <- Т.к. она не прописана локально. В самый верх файла.


function FindAllShotsByWeapGrade(int weapGrade)

{

    local ItemID SoulShotID;

    local ItemID SpiritShotID;

    local int SoulShotIDClassID, SpiritShotIDClassID;


   GetSoulShotID(weapGrade, SoulShotIDClassID, Atss);

   GetSpiritShotID(weapGrade, SpiritShotIDClassID, Atss);


    SoulShotID.ClassID = SoulShotIDClassID;

    SpiritShotID.ClassID = SpiritShotIDClassID;

 

   soulIndex = InvItem.FindItemByClassID( SoulShotID );

    spiritIndex = InvItem.FindItemByClassID( SpiritShotID );

}



function GetSpiritShotID(int weapGrade, out int int1, out string string1)


{

    switch (GetGradeByIndex(weapGrade))

    {

        case 'NOGRADE':

            int1 = 3947;

            string1 = "NOGRADE";

        break;

        case 'D':

            int1 = 3948;

            string1 = "D";

        break;

        case 'C':

            int1 = 3949;

            string1 = "C";

        break;

        case 'B':

            int1 = 3950;

            string1 = "B";

        break;

        case 'A':

            int1 = 3951;

            string1 = "A";

        break;

        case 'S':

            int1 = 3952;

            string1 = "S";

//           int2 = 22076;

        break;

    }

}
Раз.
Забыл определения прописать.
 
немного полезного для uicommonapi, что бы не заниматься суходрочкой с поисками, получением, а после вставкой
этот кусок сам найдёт где, что, а после ещё и вставит куда надо
опциональный clear и выгрузка iteminfo

C#:
function GetSetEx(string a_ItemWindow, string a_SetItemWindow, ItemID ID, optional int clear, optional iteminfo out_iteminfo)
{
    local int IndexTmp;
    local iteminfo InfoTmp;
    IndexTmp = class'UIAPI_ITEMWINDOW'.static.FindItem( a_ItemWindow, ID);
    if(class'UIAPI_ITEMWINDOW'.static.GetItem( a_ItemWindow, IndexTmp, InfoTmp))
    {
        if(clear==1)
            class'UIAPI_ITEMWINDOW'.static.Clear(a_SetItemWindow);
      
        class'UIAPI_ITEMWINDOW'.static.AddItem( a_SetItemWindow, InfoTmp );
        out_iteminfo = InfoTmp;
    }
}

пример - GetSetEx("InventoryWnd.InventoryItem", "YourWnd.YourItemWnd", ItemID);

у деадза кстати полно такого, что можно значительно укоротить ,но он зачем-то лепил в каждом классе одно и тоже,в итоге всё это выливается в какую-то вакханалию, которую фиг распутаешь
 
@BadStealth, с вашими двумя вариантами все компилируется но только стоит добавить int2 как вы писали раньше, опять при компиляции идут ошибки на ту строку
но зато теперь появился второй вариант и он работает
:pandaredlol:

157800114159_kiss.webp
 
@BadStealth, с вашими двумя вариантами все компилируется но только стоит добавить int2 как вы писали раньше, опять при компиляции идут ошибки на ту строку
но зато теперь появился второй вариант и он работает
:pandaredlol:

Посмотреть вложение 28692
этот вариант не будет работать так как ты хочешь, у тебя int1 никогда не вернется равным 3952, он всегда будет равен 22076, по сабжу, напиши в скайп, помогу с этой проблемой
 
этот вариант не будет работать так как ты хочешь, у тебя int1 никогда не вернется равным 3952, он всегда будет равен 22076, по сабжу, напиши в скайп, помогу с этой проблемой
да похоже я рано радовался ибо в инвентаре было сразу 2 типа сосок и юзался последний
 
также на основе дедза))) кривой код для сосок на петов))))
C++:
class AutoBSS extends UICommonAPI;

const LOOP_COUNT = 1;
var WindowHandle Me;
var ItemWindowHandle Shot3;
var ItemWindowHandle Shot4;
var ItemWindowHandle InvItem;
var AnimTextureHandle Animation3;
var AnimTextureHandle Animation4;
var TextureHandle texBG3;
var ItemInfo BeastSoulShot;
var ItemInfo BeastSpiritShot;
var int BeastsoulIndex;
var int BeastspiritIndex;
var bool isUsedBeastSoul;
var bool isUsedBeastSpirit;
var bool isExistBeastSoul;
var bool isExistBeastSpirit;
var bool isAttacking;
var SkillInfo UsedSkill;

function OnLoad()
{
    Me = GetWindowHandle("AutoBSS");
    Shot3 = GetItemWindowHandle("AutoBSS.Item3");
    Shot4 = GetItemWindowHandle("AutoBSS.Item4");
    texBG3 = GetTextureHandle("AutoBSS.BGBeastSpirit");
    Animation3 = GetAnimTextureHandle("AutoBSS.Anim3");
    Animation4 = GetAnimTextureHandle("AutoBSS.Anim4");
    InvItem = GetItemWindowHandle("InventoryWnd.InventoryItem");
}                 
function OnRegisterEvent()
{
       RegisterEvent(EV_GamingStateEnter);
    RegisterEvent(EV_UpdateUserInfo);
    RegisterEvent(EV_ReceiveMagicSkillUse);
    RegisterEvent(EV_ReceiveAttack);
    RegisterEvent(EV_PetStatusShow);
    RegisterEvent(EV_SummonedStatusShow);
    RegisterEvent(EV_PetSummonedStatusClose);
}

function OnEvent( int EventID, String param )
{

    switch(EventID)
    {
        
        case EV_PetSummonedStatusClose:
             Me.HideWindow();
        break;
        case EV_GamingStateEnter:
                SetBSSPosition();
        break;
        
        case EV_PetStatusShow:
                SetBSSPosition();
                EnterTheVoid2();
    
        break;
        case EV_SummonedStatusShow:
                SetBSSPosition();
                EnterTheVoid2();
                
        break;
    
        case EV_UpdateUserInfo:
            if (GetUIState() == "GAMINGSTATE"&&
                class'UIAPI_CHECKBOX'.static.IsChecked("FlexOptionWnd.enableAutoBSS"))
                //EnterTheVoid2();
        break;
        case EV_ReceiveMagicSkillUse:
            if (GetUIState() == "GAMINGSTATE"&&
                class'UIAPI_CHECKBOX'.static.IsChecked("FlexOptionWnd.enableAutoBSS"))
                BeastSkillCast(param);
        break;
        case EV_ReceiveAttack:
            if (GetUIState() == "GAMINGSTATE"&&
                class'UIAPI_CHECKBOX'.static.IsChecked("FlexOptionWnd.enableAutoBSS"))
                AttackBeast(param);
        break;
    }
}
function SetBSSPosition()
{
    local bool IsExpand1;
    local bool IsExpand2;
    local bool IsExpand3;
    local bool IsExpand4;
    local bool IsExpand5;
    
    local bool isVertical;
    
    isVertical = GetOptionBool( "Game", "IsShortcutWndVertical" );
    
    IsExpand1 = GetOptionBool( "Game", "Is1ExpandShortcutWnd" );
    IsExpand2 = GetOptionBool( "Game", "Is2ExpandShortcutWnd" );
    IsExpand3 = GetOptionBool( "Game", "Is3ExpandShortcutWnd" );
    IsExpand4 = GetOptionBool( "Game", "Is4ExpandShortcutWnd" );
    IsExpand5 = GetOptionBool( "Game", "Is5ExpandShortcutWnd" );
    
    if (class'UIAPI_WINDOW'.static.IsShowWindow("AutoSS"))
    {
        if (!isVertical)
        {
            Me.SetWindowSize(108, 24);
            Me.SetAnchor("AutoSS", "TopRight", "TopLeft", 10, 0);            ////horizont
            Animation4.SetAnchor("AutoBSS", "TopLeft", "TopLeft" , 30, 0);
            Shot4.SetAnchor("AutoBSS", "TopLeft", "TopLeft" , 29, -1);
            texBG3.SetAnchor("AutoBSS", "TopLeft", "TopLeft" , 30, 0);
            return;
        }
        else
        {
            Me.SetWindowSize(24, 108);
            Me.SetAnchor("AutoSS", "BottomLeft", "TopLeft", 0, 10);          //// vertical
            Animation4.SetAnchor("AutoBSS", "TopLeft", "TopLeft" , 0, 30);
            Shot4.SetAnchor("AutoBSS", "TopLeft", "TopLeft" , -1, 29);
            texBG3.SetAnchor("AutoBSS", "TopLeft", "TopLeft" , 0, 30);
            return;
        }
    }
    
    if (!isVertical)
    {
        Me.SetWindowSize(108, 24);
        Animation4.SetAnchor("AutoBSS", "TopLeft", "TopLeft" , 30, 0);
        Shot4.SetAnchor("AutoBSS", "TopLeft", "TopLeft" , 29, -1);
        texBG3.SetAnchor("AutoBSS", "TopLeft", "TopLeft" , 30, 0);
        if (IsExpand5)
        {
            AnchorBSS("ShortcutWnd.ShortcutWndHorizontal_5", 36, -34);
        }   
        else if (IsExpand4)
        {
            AnchorBSS("ShortcutWnd.ShortcutWndHorizontal_4", 36, -34);
        }
            
        else if (IsExpand3)
        {
            AnchorBSS("ShortcutWnd.ShortcutWndHorizontal_3", 36, -34);
        }
        else if (IsExpand2)
        {
            AnchorBSS("ShortcutWnd.ShortcutWndHorizontal_2", 36, -34);
        }
            
        else if (IsExpand1)
        {
            AnchorBSS("ShortcutWnd.ShortcutWndHorizontal_1", 36, -34);
        }
            
        else
        {
            AnchorBSS("ShortcutWnd.ShortcutWndHorizontal", 36, -34);
        }
    }
    else
    {
        Me.SetWindowSize(24, 108);
        Animation4.SetAnchor("AutoBSS", "TopLeft", "TopLeft" , 0, 30);
        Shot4.SetAnchor("AutoBSS", "TopLeft", "TopLeft" , -1, 29);
        texBG3.SetAnchor("AutoBSS", "TopLeft", "TopLeft" , 0, 30);
        
        if (IsExpand5)
        {
            AnchorBSS("ShortcutWnd.ShortcutWndVertical_5", -34, 36);
        }   
        else if (IsExpand4)
        {
            AnchorBSS("ShortcutWnd.ShortcutWndVertical_4", -34, 36);
        }
            
        else if (IsExpand3)
        {
            AnchorBSS("ShortcutWnd.ShortcutWndVertical_3", -34, 36);
        }
        else if (IsExpand2)
        {
            AnchorBSS("ShortcutWnd.ShortcutWndVertical_2", -34, 36);
        }
            
        else if (IsExpand1)
        {
            AnchorBSS("ShortcutWnd.ShortcutWndVertical_1", -34, 36);
        }
            
        else
        {
            AnchorBSS("ShortcutWnd.ShortcutWndVertical", -34, 36);
        }
    }
    
}
function BeastSkillCast (string a_Param)
{
    local int AttackerID;
    local int SkillID;
    local int SkillLevel;
    local float SkillHitTime;
    local UserInfo PetInfo;
    local UserInfo AttackerInfo;
    local int SkillHitTime_ms;

    ParseInt(a_Param,"AttackerID",AttackerID);
    ParseInt(a_Param,"SkillID",SkillID);
    ParseInt(a_Param,"SkillLevel",SkillLevel);
    ParseFloat(a_Param,"SkillHitTime",SkillHitTime);
      
    if ( SkillHitTime > 0 )
        SkillHitTime_ms = int(SkillHitTime * 1000) + 300;
    else
        SkillHitTime_ms = 100;
    
      
    GetUserInfo(AttackerID,AttackerInfo);
    GetPlayerInfo(PetInfo);
      
    GetSkillInfo( SkillID, SkillLevel, UsedSkill );
    
    isAttacking = false;

    if (PetInfo.nID == AttackerID && !isBeastSoulSkill(SkillID) && !isBeastSpiritSkill(SkillID))
    {
        Me.KillTimer(1112);
        isUsedBeastSoul = false;
        isUsedBeastSpirit = false;
        Me.SetTimer(1112, SkillHitTime_ms + 50);
    
    }
    else if (PetInfo.nID == AttackerID && isBeastSoulSkill(SkillID))
    {
        isUsedBeastSoul = true;
        Me.KillTimer(1112);
        
    }
    else if    (PetInfo.nID == AttackerID && isBeastSpiritSkill(SkillID))
    {
        isUsedBeastSpirit = true;
        Me.KillTimer(1112);
        
    }   
}
function AttackBeast (string a_Param)
{
    local int AttackerID;
    local UserInfo PetInfo;
    local UserInfo AttackerInfo;
    
    ParseInt(a_Param,"AttackerID",AttackerID);
      
    GetUserInfo(AttackerID,AttackerInfo);
    GetPlayerInfo(PetInfo);
    
    isAttacking = true;
    
    if (PetInfo.nID == AttackerID)
    {
        Me.KillTimer(1112);
        isUsedBeastSoul = false;
        isUsedBeastSpirit = false;
        Me.SetTimer(1112, 50);
    }
}
function bool isBeastSoulSkill(int skillid)
{
    switch (skillid)
    {
        case 22036:
            return true;
        default:
            return false;
        break;
    }
}
function bool isBeastSpiritSkill(int skillid)
{
    switch (skillid)
    {
        case 22037:
        case 22038:
            return true;
        default:
            return false;
        break;
    }
}
function OnTimer(int TimerID)
{
    local UserInfo check;
    local UserInfo kek;
    
    if (GetPlayerInfo(check))
    {
        if (check.nCurHP <= 0)
        {
            Me.KillTimer(1112);   
            return;
        }
    }
    
    GetTargetInfo(kek);
    
    switch (TimerID)
    {
        case 1112:
            if (!isUsedBeastSoul && isExistBeastSoul && UsedSkill.IsMagic == 0 && (UsedSkill.IsDebuff || UsedSkill.OperateType == 0) )
            {
                InvItem.GetItem(BeastsoulIndex, BeastSoulShot);
                if (BeastSoulShot.ItemNum > IntToInt64(0))
                {
                    if (kek.nID > 0)
                    {
                        //RequestTargetUser(kek.nID);
                    }
                    RequestUseItem(BeastSoulShot.ID);

                }
                else
                {
                    StopThree();
                }
                
            }   
            if (!isUsedBeastSpirit && isExistBeastSpirit && !isAttacking && UsedSkill.IsMagic == 1)
            {
                InvItem.GetItem(BeastspiritIndex, BeastSpiritShot);
                if (BeastSpiritShot.ItemNum > IntToInt64(0))
                {
                    if (kek.nID > 0)
                    {
                        //RequestTargetUser(kek.nID);
                    }

                    RequestUseItem(BeastSpiritShot.ID);
                }
                else
                {
                    StopFour();
                }
                
            }
    Me.KillTimer(1112);   
    Me.SetTimer(1112, 50);
        break;
    }
}
function StartAnimThree() 
{
    Animation3.Stop();
    Animation3.SetLoopCount(-1);
    Animation3.Play();
}
function StartAnimFour() 
{
    Animation4.Stop();
    Animation4.SetLoopCount(-1);
    Animation4.Play();
}
function StopThree()
{
    Animation3.Stop();
    Shot3.Clear();
    isExistBeastSoul = false;
}
function StopFour()
{
    Animation4.Stop();
    Shot4.Clear();
    isExistBeastSpirit = false;
}

function FindAllBeastShots()
{
    local ItemID BeastSoulShotID;
    local ItemID BeastSpiritShotID;
    
    BeastSoulShotID.ClassID = 6645;
    BeastSpiritShotID.ClassID = 6647;////6646
    
    BeastsoulIndex = InvItem.FindItem( BeastSoulShotID );
    BeastspiritIndex = InvItem.FindItem( BeastSpiritShotID );
}

function EnterTheVoid2()
{       
     FindAllBeastShots();
        if (BeastsoulIndex != -1)
            AddBeastSoulShot(BeastsoulIndex);
        else
            StopThree();
    
        if (BeastspiritIndex != -1)
            AddBeastSpiritShot(BeastspiritIndex);   
        else
            StopFour();
}

function AddBeastSoulShot(int index)   
{
    local ItemInfo soulInfo;
    
    InvItem.GetItem(index, soulInfo);
    Shot3.Clear();
    Shot3.AddItem(soulInfo);
    StartAnimThree();
    RequestAutoBeastSoulShots(index);
    isExistBeastSoul = true;
}
function AddBeastSpiritShot(int index)   
{
    local ItemInfo spiritInfo;
    
    InvItem.GetItem(index, spiritInfo);
    Shot4.Clear();
    Shot4.AddItem(spiritInfo);
    StartAnimFour();
    RequestAutoBeastSoulShots(index);
    isExistBeastSpirit = true;
}
function RequestAutoBeastSoulShots(int index)
{
    if (index == BeastsoulIndex)
    {
        InvItem.GetItem(index, BeastSoulShot);
        RequestUseItem(BeastSoulShot.ID);
    }
    else if (index == BeastspiritIndex)
    {
        InvItem.GetItem(index, BeastSpiritShot);
        RequestUseItem(BeastSpiritShot.ID);
    }
}
function AnchorBSS(string window, int x, int y)
{
    Me.SetAnchor(window, "TopLeft", "TopLeft", x, y);
}
defaultproperties
{
}
 
Назад
Сверху Снизу