Jump to content

Rolo

Members
  • Posts

    79
  • Credits

  • Joined

  • Last visited

  • Days Won

    6
  • Feedback

    0%

Posts posted by Rolo

  1. 25 minutes ago, KabLe21 said:

    i spawn npc on this place 🙂 and when spawn NPC flying 😄

    some on other side when spawn NPC dusk, is stuck in geodata 🙂

    Still think it's the geodata, I've changed mine and there's no problem with flying NPS. )
    YKUKz3aN4xM.jpg?size=1036x585&quality=96
     

     

    41 minutes ago, Irrelevant said:

    this version of giran is shared over 4 years i think 😕
     https://imgur.com/a/7CDurpF i mean without lions and fountain

    It's not the same version, the standard Giran textures are used here and in your screenshot they've been changed. Also in this version my co-author wanted to place a tent in the square. Also, in my version there are trees on the square and in yours there are none. 

    8AdkW7B8jfU.jpg?size=1025x787&quality=96

     

  2. Hey guys! I am publishing this manual by your many requests. But all code will be available to VIP Members only. 

    Spoiler

    If you have published many useful topics, but do not have vip status, write me a private message.

     

     

    In the end, it will look like this: 

    image.png.873cce40811f1668d8675a4d437d3d8f.png

     

    First of all, in the interface we open the class 

    This is the hidden content, please
    , and find the
    This is the hidden content, please
     function there. At the very top, add a new variable: 

    local EItemType eItemType;

     

    Then, after all the local variables, we need to set our new variable:

    eItemType = EItemType(info.ItemType);

     

    Now we will have two options to choose from. In the first one, you will not see the enchantment level displayed if it is zero. In the second one, all items that can be enchanted will show an enchantment level of +0-35. Go down to the bottom of the function and add one of the code options.

     

     

    First option (+0 is not displayed ) :

    This is the hidden content, please

     

    Second option (+0 displayed  ) :

    This is the hidden content, please

     

    Note the "Info.Enchanted <= 35" part of the code; the number "35" is the last enchantment level to be displayed. If you add your icons where the enchantment level will be greater than 35, change that number in your code!

     

    If you have enough +0-35 icons, you can download them here: 

    https://maxcheaters.com/topic/239445-pack-of-icons-for-enchanting-levels-0-35/

     

    • Like 3
    • Upvote 2
  3. 1614621549122-png.31033

    1614621569057.png

     

    download: https://drive.google.com/file/d/15msPZfz5uq8W3NhsEHWPMTdB-glZHA5_/view?usp=sharing

    password: 

    This is the hidden content, please

     

    HtmlWnd_BTN01
    HtmlWnd_BTN01.down
    HtmlWnd_BTN01.over

    HtmlWnd_BTN01High
    HtmlWnd_BTN01High.down
    HtmlWnd_BTN01High.over

    HtmlWnd_BTN02
    HtmlWnd_BTN02.down
    HtmlWnd_BTN02.over

    HtmlWnd_BTN02High
    HtmlWnd_BTN02High.down
    HtmlWnd_BTN02High.over

    • Like 1
    • Upvote 1
  4. 27 minutes ago, lolpwnz89 said:

    but i must in code write nickname or can use party window 1,2,3,4 etc? how it work on Interlude?

     

    No, you don't need to enter character nicknames in the code.    You need the index of the group member, in default it looks like this:

     rectWnd = m_wndTop.GetRect();
        if (X > rectWnd.nX + 13 && X < rectWnd.nX + rectWnd.nWidth -10)
        {
            if (GetPlayerInfo(userinfo))
            {
                idx = (Y-rectWnd.nY) / NPARTYSTATUS_HEIGHT;
                RequestAssist(m_arrID[idx], userinfo.Loc);
            }
        }


    As you can see, the position of the mouse and the index of the window by which the assist is taken are calculated. Accordingly, you can always set an assist by the party leader (as an example), or by a group member with an index of 1-8 (also, for example, you can add a form for entering the index of a group member for which the assist will be made). 

  5. On 1/5/2021 at 11:47 AM, Ehoq said:

    @sacrifice yeah. i got same problem. grade mark works fine. but when i enchant weapon M.atk goes to - 21473712713.  ( if i makes s80 grade (grade7)

    If the question is still relevant to you, I have an answer. Sorry in advance for broken English, I use google translator. You need to introduce a local variable: 
     

     local int     CrystalChap;

    In the ITEM_WEAPON block, we define it:
     

    CrystalChap = Item.CrystalType;
                if (Item.CrystalType > 5) 
                {
                    CrystalChap = 5;
                }

    In tooltips for physical and magical attacks, replace Item.CrystalType with CrystalChap, you get something like this:
     

    //Physical Damage
                AddTooltipItemOption(94, String(GetPhysicalDamage(Item.WeaponType, Item.SlotBitType, CrystalChap, Item.Enchanted, Item.PhysicalDamage)), true, true, false);
                
                //Masical Damage
                AddTooltipItemOption(98, String(GetMagicalDamage(Item.WeaponType, Item.SlotBitType, CrystalChap, Item.Enchanted, Item.MagicalDamage)), true, true, false);

    There will be no more problems with displaying enchants level. 😉

    • Upvote 1
  6. The information is more relevant for Interlude, but will work for the chronicles above as well. According to this example, you can bind any function (from calling the window for inserting a LAN, to your unique bypass, or some function like "target loss protection") to any hotkey or key combination.

    First of all, go to xdat, Interface \ Shortcuts \ GamingStateShortcut and select a key / key combination, for example like this:
     

    <ShortcutItem Key="IK_Space" SubKey1="IK_Alt">SelfTarget</ShortcutItem>

    Now for target self you need to hold down the viola and click the space bar.
    The key codes are sometimes obvious (IK_F1, IK_B, IK_Enter), and sometimes not very, just in case:

    Spoiler

    IK_None = 0
    IK_LeftMouse = 1
    IK_RightMouse = 2
    IK_Cancel = 3
    IK_MiddleMouse = 4
    IK_Unknown05 = 5
    IK_Unknown06 = 6
    IK_Unknown07 = 7
    IK_Backspace = 8
    IK_Tab = 9
    IK_Unknown0A = 10
    IK_Unknown0B = 11
    IK_Unknown0C = 12
    IK_Enter = 13
    IK_Unknown0E = 14
    IK_Unknown0F = 15
    IK_Shift = 16
    IK_Ctrl = 17
    IK_Alt = 18
    IK_Pause = 19
    IK_CapsLock = 20
    IK_Unknown15 = 21
    IK_Unknown16 = 22
    IK_Unknown17 = 23
    IK_Unknown18 = 24
    IK_Unknown19 = 25
    IK_Unknown1A = 26
    IK_Escape = 27
    IK_Unknown1C = 28
    IK_Unknown1D = 29
    IK_Unknown1E = 30
    IK_Unknown1F = 31
    IK_Space = 32
    IK_PageUp = 33
    IK_PageDown = 34
    IK_End = 35
    IK_Home = 36
    IK_Left = 37
    IK_Up = 38
    IK_Right = 39
    IK_Down = 40
    IK_Select = 41
    IK_Print = 42
    IK_Execute = 43
    IK_PrintScrn = 44
    IK_Insert = 45
    IK_Delete = 46
    IK_Help = 47
    IK_0 = 48
    IK_1 = 49
    IK_2 = 50
    IK_3 = 51
    IK_4 = 52
    IK_5 = 53
    IK_6 = 54
    IK_7 = 55
    IK_8 = 56
    IK_9 = 57
    IK_Unknown3A = 58
    IK_Unknown3B = 59
    IK_Unknown3C = 60
    IK_Unknown3D = 61
    IK_Unknown3E = 62
    IK_Unknown3F = 63
    IK_Unknown40 = 64
    IK_A = 65
    IK_B = 66
    IK_C = 67
    IK_D = 68
    IK_E = 69
    IK_F = 70
    IK_G = 71
    IK_H = 72
    IK_I = 73
    IK_J = 74
    IK_K = 75
    IK_L = 76
    IK_M = 77
    IK_N = 78
    IK_O = 79
    IK_P = 80
    IK_Q = 81
    IK_R = 82
    IK_S = 83
    IK_T = 84
    IK_U = 85
    IK_V = 86
    IK_W = 87
    IK_X = 88
    IK_Y = 89
    IK_Z = 90
    IK_Unknown5B = 91
    IK_Unknown5C = 92
    IK_Unknown5D = 93
    IK_Unknown5E = 94
    IK_Unknown5F = 95
    IK_NumPad0 = 96
    IK_NumPad1 = 97
    IK_NumPad2 = 98
    IK_NumPad3 = 99
    IK_NumPad4 = 100
    IK_NumPad5 = 101
    IK_NumPad6 = 102
    IK_NumPad7 = 103
    IK_NumPad8 = 104
    IK_NumPad9 = 105
    IK_GreyStar = 106
    IK_GreyPlus = 107
    IK_Separator = 108
    IK_GreyMinus = 109
    IK_NumPadPeriod = 110
    IK_GreySlash = 111
    IK_F1 = 112
    IK_F2 = 113
    IK_F3 = 114
    IK_F4 = 115
    IK_F5 = 116
    IK_F6 = 117
    IK_F7 = 118
    IK_F8 = 119
    IK_F9 = 120
    IK_F10 = 121
    IK_F11 = 122
    IK_F12 = 123
    IK_F13 = 124
    IK_F14 = 125
    IK_F15 = 126
    IK_F16 = 127
    IK_F17 = 128
    IK_F18 = 129
    IK_F19 = 130
    IK_F20 = 131
    IK_F21 = 132
    IK_F22 = 133
    IK_F23 = 134
    IK_F24 = 135
    IK_Unknown88 = 136
    IK_Unknown89 = 137
    IK_Unknown8A = 138
    IK_Unknown8B = 139
    IK_Unknown8C = 140
    IK_Unknown8D = 141
    IK_Unknown8E = 142
    IK_Unknown8F = 143
    IK_NumLock = 144
    IK_ScrollLock = 145
    IK_TRACKIR_PITCHUP = 146
    IK_TRACKIR_PITCHDOWN = 147
    IK_TRACKIR_YAWRIGHT = 148
    IK_TRACKIR_YAWLEFT = 149
    IK_TRACKIR_ROLLRIGHT = 150
    IK_TRACKIR_ROLLLEFT = 151
    IK_TRACKIR_MOVEUP = 152
    IK_TRACKIR_MOVEDOWN = 153
    IK_TRACKIR_MOVELEFT = 154
    IK_TRACKIR_MOVERIGHT = 155
    IK_TRACKIR_MOVEFORWARD = 156
    IK_TRACKIR_MOVEBACKWARD = 157
    IK_Unknown9E = 158
    IK_Unknown9F = 159
    IK_LShift = 160
    IK_RShift = 161
    IK_LControl = 162
    IK_RControl = 163
    IK_UnknownA4 = 164
    IK_UnknownA5 = 165
    IK_UnknownA6 = 166
    IK_UnknownA7 = 167
    IK_UnknownA8 = 168
    IK_UnknownA9 = 169
    IK_UnknownAA = 170
    IK_UnknownAB = 171
    IK_UnknownAC = 172
    IK_UnknownAD = 173
    IK_UnknownAE = 174
    IK_UnknownAF = 175
    IK_UnknownB0 = 176
    IK_UnknownB1 = 177
    IK_UnknownB2 = 178
    IK_UnknownB3 = 179
    IK_UnknownB4 = 180
    IK_UnknownB5 = 181
    IK_UnknownB6 = 182
    IK_UnknownB7 = 183
    IK_UnknownB8 = 184
    IK_Unicode = 185
    IK_Semicolon = 186
    IK_Equals = 187
    IK_Comma = 188
    IK_Minus = 189
    IK_Period = 190
    IK_Slash = 191
    IK_Tilde = 192
    IK_Mouse4 = 193
    IK_Mouse5 = 194
    IK_Mouse6 = 195
    IK_Mouse7 = 196
    IK_Mouse8 = 197
    IK_UnknownC6 = 198
    IK_UnknownC7 = 199
    IK_Joy1 = 200
    IK_Joy2 = 201
    IK_Joy3 = 202
    IK_Joy4 = 203
    IK_Joy5 = 204
    IK_Joy6 = 205
    IK_Joy7 = 206
    IK_Joy8 = 207
    IK_Joy9 = 208
    IK_Joy10 = 209
    IK_Joy11 = 210
    IK_Joy12 = 211
    IK_Joy13 = 212
    IK_Joy14 = 213
    IK_Joy15 = 214
    IK_Joy16 = 215
    IK_UnknownD8 = 216
    IK_UnknownD9 = 217
    IK_UnknownDA = 218
    IK_LeftBracket = 219
    IK_Backslash = 220
    IK_RightBracket = 221
    IK_SingleQuote = 222
    IK_UnknownDF = 223
    IK_UnknownE0 = 224
    IK_UnknownE1 = 225
    IK_UnknownE2 = 226
    IK_UnknownE3 = 227
    IK_MouseX = 228
    IK_MouseY = 229
    IK_MouseZ = 230
    IK_MouseW = 231
    IK_JoyU = 232
    IK_JoyV = 233
    IK_JoySlider1 = 234
    IK_JoySlider2 = 235
    IK_MouseWheelUp = 236
    IK_MouseWheelDown = 237
    IK_Unknown10E = 238
    UK_Unknown10F = 239
    IK_JoyX = 240
    IK_JoyY = 241
    IK_JoyZ = 242
    IK_JoyR = 243
    IK_UnknownF4 = 244
    IK_UnknownF5 = 245
    IK_Attn = 246
    IK_CrSel = 247
    IK_ExSel = 248
    IK_ErEof = 249
    IK_Play = 250
    IK_Zoom = 251
    IK_NoName = 252


    Next, you need to describe the "SelfTarget" command itself. The easiest option is to go into the Interface \ Classes \ Shortcut scripts and find function HandleShortcutCommand (String a_Param) there and add:
     

     case "SelfTarget":
                RequestSelfTarget();
                break;


    But, of course, you can insert a command into any class, but then you will have to create in it:

    function OnEvent( int a_EventID, String a_Param )
    {
        switch( a_EventID )
        {
        case EV_ShortcutCommand:
            HandleShortcutCommand( a_Param );
            break;
        }
    }

    as well as the Handler itself :

    function HandleShortcutCommand( String a_Param )
    {
        local String Command;
       
        if( ParseString( a_Param, "Command", Command ) )
        {
            switch( Command )
            {
            case "SelfTarget":
                RequestSelfTarget();
                break;
            }
        }
    }


    That's all, with the help of these examples, you can call any function, in any class, to any key combination you need. Please note that if you call two different functions with one key, from different classes, but with the same name, they will be called simultaneously. It is convenient to use, for example, to simultaneously enable auto-buff and skill-spam panels from different classes. 

    • Thanks 1
    • Upvote 2
  7. lAoKhxAwtX8.jpgBQcMU-SH988.jpg

    To teach the Interlude client to see LANs where they shouldn't be, you need to make a few changes in the Interface.U scripts.
    Using the example of Jewelry and Hats: first, look in Interface \ Classes \ ToolTip:


     

     // 3. ACCESSARY
            case ITEM_ACCESSARY:
                bLargeWidth = true;
               
                //Slot Type
                if (Len(SlotString)>0)
                    AddTooltipItemOption(0, SlotString, false, true, false);
               
                //Masical Defense
                AddTooltipItemOption(99, String(GetMagicalDefense(Item.CrystalType, Item.Enchanted, Item.MagicalDefense)), true, true, false);
               
                //Weight
                AddTooltipItemOption(52, String(Item.Weight), true, true, false);
            break;

     

    Here we need to draw a LAN output, similar to ITEM_WEAPON, we get something like this:
     

     // 3. ACCESSARY
            case ITEM_ACCESSARY:
                bLargeWidth = true;
               
                if (Item.RefineryOp1 != 0 || Item.RefineryOp2 != 0)
                {
                    AddTooltipItemBlank(12);
                   
                    AddTooltipItemOption(1490, "", true, false, false);
                    SetTooltipItemColor(255, 255, 255, 0);
                   
                    if (Item.RefineryOp2 != 0)
                    {
                        Quality = class'UIDATA_REFINERYOPTION'.static.GetQuality( Item.RefineryOp2 );
                        GetRefineryColor(Quality, ColorR, ColorG, ColorB);
                    }
                   
                    if (Item.RefineryOp1 != 0)
                    {
                        strDesc1 = "";
                        strDesc2 = "";
                        strDesc3 = "";
                        if (class'UIDATA_REFINERYOPTION'.static.GetOptionDescription( Item.RefineryOp1, strDesc1, strDesc2, strDesc3 ))
                        {  
                            if (Len(strDesc1)>0)
                            {
                                AddTooltipItemOption(0, strDesc1, false, true, false);
                                SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
                            }
                            if (Len(strDesc2)>0)
                                AddTooltipItemOption(0, strDesc2, false, true, false);
                            if (Len(strDesc3)>0)
                            {
                                AddTooltipItemOption(0, strDesc3, false, true, false);
                                SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
                            }
                        }
                    }  
                   
                    if (Item.RefineryOp2 != 0)
                    {
                        strDesc1 = "";
                        strDesc2 = "";
                        strDesc3 = "";
                        if (class'UIDATA_REFINERYOPTION'.static.GetOptionDescription( Item.RefineryOp2, strDesc1, strDesc2, strDesc3 ))
                        {
                            if (Len(strDesc1)>0)
                                AddTooltipItemOption(0, strDesc1, false, true, false);
                               
                            if (Len(strDesc2)>0)
                                AddTooltipItemOption(0, strDesc2, false, true, false);
                                SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
                            }
                            if (Len(strDesc3)>0)
                            {
                                AddTooltipItemOption(0, strDesc3, false, true, false);
                        }
                    }
                   
                    AddTooltipItemOption(1491, "", true, false, false);
                    SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
                   
                    if (Len(Item.Description)>0)
                    {
                        AddTooltipItemBlank(12);
                }
                if (Len(SlotString)>0)
                    AddTooltipItemOption(0, SlotString, false, true, false);
               
                AddTooltipItemOption(99, String(GetMagicalDefense(Item.CrystalType, Item.Enchanted, Item.MagicalDefense)), true, true, false);
               
                AddTooltipItemOption(52, String(Item.Weight), true, true, false);
            break;


     

    After these changes, the client will begin to see IDs in jewelry and accessories, the same can be done for ITEM_ARMOR, so that IDs are displayed in armor.

     

    From the server side, first of all, you need to allow augmentation of not only weapons. Using the example of my assembly, this is done here:
    src \ net \ sf \ l2j \ gameserver \ model \ L2ItemInstance
    We are looking for public boolean canBeAugmented () and replace it with the condition we need, using the example of the possibility of inserting drugs into jewelry and accessories, for example, like this:
     

     if (getItem().getItemGrade() < L2Item.CRYSTAL_C || (getItem().getType2() != L2Item.TYPE2_WEAPON && getItem().getType2() != L2Item.TYPE2_ACCESSORY)) {
                return false;
          }


    Likewise with armor, you can enable / disable insertion into certain parts of the armor, for example, only into the breastplate.
    Of course, then you will need to configure which LANs and where they are inserted, under what conditions for inserting and removing LANs, etc., but this is a completely different story, the goal was to indicate where this is done in the client, because on the server side everything depends on the assembly.

    • Thanks 2
    • Upvote 2
  8. First of all, we need to get the "frames" of our animation, because by itself it is a series of quickly (or not so) scrolling textures. When the textures are ready, load them into UE2 (it is assumed that you can do this, since you set out to make your own animated logo).

     

    Important notes:

    Name textures with numbering, this will greatly simplify your life when assembling textures into animation.
    Note that the UE will supply a file called texture_11 rather than texture_2.
    In other words, it sorts by matching characters, and does not read your numbering.
    The 1 comes before the 2, so even if there are at least 100 million, the texture will be in front of the 2 texture.

     

    Open our first texture with the right button, click Properties, open the Animation block in the pop-up window, and look:
    1267920190__2021-02-22_183915.thumb.png.3f1f6444b68517bc460d5719aeaec085.png

     

    1 is the next texture in our animation.
    2 - number of frames per second (animation scrolling speed).
    3 - the total number of textures in the animation.
     

    Important notes:

    Strictly follow the order of adding animations.
    Your goal is in the line AnimNext (now it will be unexpected) to specify the next texture in the animation.
    Thus, the Properties of the first AnimNext texture contains the second texture;
    The Properties of the second AnimNext texture contains the third texture;
    The Properties of the third AnimNext texture contains the first texture;

    There is no need to specify the number and speed of texture playback in each texture, this is done only in the first texture!
    All subsequent ones should contain only a link to the next texture.

     

    There is a small nuance of adding the next texture, copying the name of the next texture into the line is an obvious, but not correct move. This is done as follows: Select the texture, open its Properties, now move the pop-up window, click on the next texture, and in the Properties of the first texture, in the AnimNext line, click use. This is how we add all the textures to the animation chain.

    1614624399397-png.31043

     

     

    When we loop the last texture on the first one, and go to the Properties of the first texture, we will see the animation itself, if it is not there, something jerks / disappears - most likely, you missed some texture, or poorly composed a number of textures, or not followed order, or you have invented a new way to screw everything up with which I congratulate you and sympathize with you at the same time. And that's all, then save it as a regular texture, the name of the very first texture is inserted into HTML, where the number and frequency of frame refresh are set.

    • Like 1
    • Thanks 1
    • Upvote 1
×
×
  • Create New...