Skip to content

[MOD] EEex (v0.10.2-alpha)

2456749

Comments

  • switswit Member, Translator (NDA) Posts: 495
    edited August 2018
    btw. to make BAF code with Bubb_LUA easy to read/edit I've prepared new weidu function: https://github.com/K4thos/IE-code-repository/blob/master/compile_bubb.tpa
    It's a COMPILE weidu command equivalent supporting multi-line Lua code.
  • kjeronkjeron Member Posts: 2,368
    swit said:

    Let's say I'd like to match 75% of player1 XP for party members XP adjustment. With the above posted Bubb_LUA example code it would be a matter of adding:


    Player1XP = Player1XP * 0.75
    Doing the same with opcodes would be another riddle.
    Not really:
    COPY_EXISTING	~MATCHXP.SPL~	~override/MATCH75.spl~
     LPF ADD_SPELL_EFFECT
      INT_VAR insert_point = 0 opcode = 104 target = 9 parameter1 = 75 parameter2 = 2
     END
    But one thing Bubb's scripts would likely have exclusive access to is Dual-Class XP detection - knowing how much went to the original class.
  • GreenerGreener Member Posts: 430
    Would it be possible to have a characters total critical hit chance be displayed on the character record?

    For example: If a character placed two stars in two-handed weapon proficiency and wielded the Sword of Ruin (SoD) there critical hit chance should be +2 or 18-20? Currently only the +1 from two-handed weapon proficiency is displayed

    Lefreut suggests the bonus from the Sword of Ruin is not exposed to the UI so it can't be displayed right now.

    I've created an Issue 35645 but it's a low priority.
  • GrammarsaladGrammarsalad Member Posts: 2,582
    Oh, that is awesome!
  • The user and all related content has been deleted.
  • BubbBubb Member Posts: 1,005

    Now you've got my attention.
    I'm not sure if this is true. Admittedly I haven't looked at scripts (I don't even know if there is a script action affecting spell slots) but in my experience giving "bonus" spell slots to someone only works if their number of spell slots is already nonzero.

    Hmm, you are correct. I thought opcodes 42 / 62 would work to give the memorization slots, but you are correct that they don't grant any slots if the character has zero to begin with. I guess I'll have to make my own opcode / scripting action that doesn't care about having zero slots.

    Now you've got my attention.
    And of course, to cast a divine spell you need the "cast spell" UI function, so this only helps wizards and wizard multiclasses.

    I guess I'll have a look at action bar customization, then. ;)
  • AquadrizztAquadrizzt Member Posts: 1,069
    This looks rather favorable for implementing thief skills for anyone... any idea if that is possible.
    Bubb said:

    I guess I'll have a look at action bar customization, then. ;)

    Please do. Action bar customization (especially thief skills and spell book accessibility) would enable a LOT of new class designs. A fighter that could pick locks, or a cleric that has a Song instead of Turn Undead, etc...

  • kjeronkjeron Member Posts: 2,368
    Bubb said:

    Hmm, you are correct. I thought opcodes 42 / 62 would work to give the memorization slots, but you are correct that they don't grant any slots if the character has zero to begin with. I guess I'll have to make my own opcode / scripting action that doesn't care about having zero slots.

    It also does not grant an actual caster level - all such spell are still cast at level 1.
    Similarly, opcode 191 (casting level bonus) also does not apply if they do not already possess a caster level of the appropriate type (priest/wizard).
  • switswit Member, Translator (NDA) Posts: 495
    edited August 2018
    Similarly, opcode 191 (casting level bonus) also does not apply if they do not already possess a caster level of the appropriate type (priest/wizard).

    The fact that this opcode exists in the first place with distinction for Wizard and Cleric levels is very promising, maybe Bubb will be able to change its functionality as he is planning to do with opcodes 42 / 62.

    Except, hmm. I don't mean to sound like a downer - really! - but I'm not sure what that adds. I mean, we can easily give Imoen the mage/thief a wizard spell that clones Bless or uses 146 to cast the real Bless. I guess this wouldn't use up her arcane spell slots, but then we could always give her Bless as an innate rather than an arcane spell.

    Since it was me who requested this feature, let me explain what I need it for. If both mentioned problems would be resolved (access to cleric spell scroll and casting spells on a level of our choice), it should be possible to bypass the hardcoded level progression and multi-classing entirely (whole level up functionality could be moved into UI.MENU and in-game scripts, using Bub_LUA to communicate between them. Vanilla Level-up menu button leading to our custom window for the characters that follow this system).

    I'm planning to implement a mix of Advanced Dungeons & Dragons 2nd Edition progression rules (AC, THAC0, XP, spell selection) and D&D 3rd Edition rules introduced in IWD2 (loosened item, race and multi-classing restrictions, progressing ability scores starting at fixed number, skills available for all classes, new skills, feat system replacing proficiency slots) for the mod I'm working on. To be more precise:

    – May use all kinds of weapons, armor and shields.
    – Race and multi/dual-class restriction rules don't apply to to this class. On each level, character may start progressing in another class, if prerequisites ability scores for choosing the class are met. The character gets all features of all classes chosen but must also suffer the consequences of all special restrictions of those classes.
    – Starts with 16 points to allocate across the six ability scores. Extra ability points can be assigned every four character levels, regardless of individual class level.
    – At each level receives skill points used for buying skills. A 1st-level character gets four times this number. Buying a skill that belongs to class that the character specializes in, grants 1 rank for each skill point. Buying other classes' skills (cross-class skills), half rank per skill point is acquired. The maximum rank in a class skill is the character's level plus 3. The maximum rank in a cross-class skill is half of this number.
    – Starts with proficiency feats in a number of weapons dependent on the class specialization and can choose one additional feat. At 3rd level and every three levels thereafter another feat is granted. Some feats have prerequisites, requiring the listed ability score, feat, skill, base attack bonus, or any number of other requirements in order to select or use that feat. There are also Special Feats available only for characters following specified class paths.
    – Depending on the class levels and race, character might or might not suffer an XP penalty. If any of the classes are two or more levels apart, the strain of developing and maintaining different skills at different levels takes its toll - for each class that is not within one level of the most experienced class, character needs to gain 20% more XP in order to advance into the next level.
    – No access to high-level abilities.
    – Hit Die: variable, depends on class specialization.

    All of this while still maintaining full compatibility with tweak and kit mods - IWD2 progression system is meant to be implemented as a fake class (let's call it "All-rounder" or whatever). The class would be added to vanilla UI.MENU class selection table and assign F/M/T if chosen - used only to enable all important GUI buttons and loosen item restrictions, character is NOT forced to level up all classes at the same time or follow F/M/T progression. The character starts with a single class specialization of your choice instead (all IWD2 classes available, with a bit different advantages to normal BG2 classes since we're using Feat system) and the mod controls how the progression goes.

    Player would be able to select normal class and classic AD&D kits instead or enjoy the new, optional system in the same game.
    Post edited by swit on
  • MyragMyrag Member Posts: 328
    @bubb hey! great work!

    I plan to learn myself some BG modding soon. I already know Lua.

    Do you know if with what you found out it is possible to get spell buffs duration? I wanted to make UI mod which shows buffs expiration but visually instead of chat like in jimfix. What are your thoughts on this?
  • BubbBubb Member Posts: 1,005
    @Myrag: I think it's a great idea! Off the top of my head, the vanilla game doesn't expose buff times to the LUA environment, but I'm sure that can be externalized with what I am doing. I'll look into it :)
  • RaduzielRaduziel Member Posts: 4,714
    Myrag said:

    @bubb hey! great work!

    I plan to learn myself some BG modding soon. I already know Lua.

    Do you know if with what you found out it is possible to get spell buffs duration? I wanted to make UI mod which shows buffs expiration but visually instead of chat like in jimfix. What are your thoughts on this?

    Bubb said:

    @Myrag: I think it's a great idea! Off the top of my head, the vanilla game doesn't expose buff times to the LUA environment, but I'm sure that can be externalized with what I am doing. I'll look into it :)

    I love you guys.
  • The user and all related content has been deleted.
  • kjeronkjeron Member Posts: 2,368
    edited August 2018
    Bubb said:

    So, if anyone didn't get the memo it's pretty easy to externalize what buttons appear in the action bar. Every class-specific button seems to work exactly as it should in other classes, except for Turn Undead. It is greyed out for non-default classes - I'm sure I can fix that, though.

    It's automatically greyed out if the characters Turn Undead level is 0. This is how Paladin's have it greyed out until they reach level 3. Same happens if you drop a cleric to level 0, the button becomes greyed out.
  • GreenerGreener Member Posts: 430
    edited August 2018
    Very interesting work...

    Out of curiosity how would I go about using your hard work to give a bard song button to a cleric or thieving abilities to a fighter?
  • AquadrizztAquadrizzt Member Posts: 1,069
    edited August 2018
    I'm nearly certain that the Shape Change button showed up in some early demo of the Shaman. I remember that sheep from something.

    On another note, is there a way to control class/kit/whatever wise which buttons appear on the hot bar? Alternatively, could one ditch the hot bar all together and construct unique class/kit/character interfaces? '

    Oh also, is it possible to change the Bards "Pick Pockets Disguised as Thievery" button to a pure "Thievery" button. What about defining other unique buttons (such as a Fast Movement toggle)?
    Post edited by Aquadrizzt on
  • kjeronkjeron Member Posts: 2,368

    I'm nearly certain that the Shape Change button showed up in some early demo of the Shaman. I remember that sheep from something.

    It long predates the Shaman, it was present in the original BG1 game files.
  • AquadrizztAquadrizzt Member Posts: 1,069
    Oh wow.... that's pretty neat. Wonder why they made shapechange an innate but kept Turn Undead and Bard Song...
  • GrammarsaladGrammarsalad Member Posts: 2,582
    Bubb said:


    ...
    Hmm... that action bar looks quite weird for a Cleric / Mage! ;)

    :neutral::open_mouth::smiley:
  • BubbBubb Member Posts: 1,005
    edited August 2018
    kjeron said:

    Bubb said:

    So, if anyone didn't get the memo it's pretty easy to externalize what buttons appear in the action bar. Every class-specific button seems to work exactly as it should in other classes, except for Turn Undead. It is greyed out for non-default classes - I'm sure I can fix that, though.

    It's automatically greyed out if the characters Turn Undead level is 0. This is how Paladin's have it greyed out until they reach level 3. Same happens if you drop a cleric to level 0, the button becomes greyed out.


    @kjeron: Thanks for the clarification!
    Greener said:

    Very interesting work...

    Out of curiosity how would I go about using your hard work to give a bard song button to a cleric or thieving abilities to a fighter?

    @Greener: It would all be externalized to a LUA function in either UI.MENU or a M_*.LUA file. Every time the engine wants to know what actionbar buttons to show it would, for example, call setActionbarType(creID, slotNum) and use its return value. The following would be the LUA code... wall of text incoming!

    actionbarButtons = {
        ["BARD_SONG"] = 2,
        ["CAST_SPELL"] = 3,
        ["FIND_TRAPS"] = 4,
        ["TALK"] = 5,
        ["GUARD"] = 7,
        ["ATTACK"] = 8,
        ["SPECIAL_ABILITIES"] = 10,
        ["STEALTH"] = 11,
        ["THIEVING"] = 12,
        ["TURN_UNDEAD"] = 13,
        ["USE_ITEM"] = 14,
        ["STOP"] = 15,
        ["QUICK_ITEM_1"] = 21,
        ["QUICK_ITEM_2"] = 22,
        ["QUICK_ITEM_3"] = 23,
        ["QUICK_SPELL_1"] = 24,
        ["QUICK_SPELL_2"] = 25,
        ["QUICK_SPELL_3"] = 26,
        ["QUICK_WEAPON_1"] = 27,
        ["QUICK_WEAPON_2"] = 28,
        ["QUICK_WEAPON_3"] = 29,
        ["QUICK_WEAPON_4"] = 30,
        ["NONE"] = 100,
    }
    
    actionbarConfigurations = {
        [1] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.QUICK_SPELL_1,
            [5] = actionbarButtons.QUICK_SPELL_2,
            [6] = actionbarButtons.QUICK_SPELL_3,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [2] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.QUICK_WEAPON_3,
            [5] = actionbarButtons.QUICK_WEAPON_4,
            [6] = actionbarButtons.GUARD,
            [7] = actionbarButtons.NONE,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [3] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.TURN_UNDEAD,
            [5] = actionbarButtons.QUICK_SPELL_1,
            [6] = actionbarButtons.QUICK_SPELL_2,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [4] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.FIND_TRAPS,
            [5] = actionbarButtons.THIEVING,
            [6] = actionbarButtons.STEALTH,
            [7] = actionbarButtons.NONE,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [5] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.BARD_SONG,
            [5] = actionbarButtons.THIEVING,
            [6] = actionbarButtons.QUICK_SPELL_1,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [6] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.QUICK_WEAPON_3,
            [5] = actionbarButtons.GUARD,
            [6] = actionbarButtons.TURN_UNDEAD,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [7] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.QUICK_SPELL_1,
            [5] = actionbarButtons.QUICK_SPELL_2,
            [6] = actionbarButtons.QUICK_SPELL_3,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [8] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.TURN_UNDEAD,
            [5] = actionbarButtons.QUICK_SPELL_1,
            [6] = actionbarButtons.QUICK_SPELL_2,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [9] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.FIND_TRAPS,
            [5] = actionbarButtons.THIEVING,
            [6] = actionbarButtons.STEALTH,
            [7] = actionbarButtons.NONE,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [10] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.FIND_TRAPS,
            [5] = actionbarButtons.THIEVING,
            [6] = actionbarButtons.STEALTH,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [11] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.QUICK_SPELL_1,
            [5] = actionbarButtons.QUICK_SPELL_2,
            [6] = actionbarButtons.QUICK_SPELL_3,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [12] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.QUICK_WEAPON_3,
            [5] = actionbarButtons.GUARD,
            [6] = actionbarButtons.STEALTH,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [13] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.FIND_TRAPS,
            [5] = actionbarButtons.THIEVING,
            [6] = actionbarButtons.STEALTH,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [14] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.TURN_UNDEAD,
            [5] = actionbarButtons.QUICK_SPELL_1,
            [6] = actionbarButtons.QUICK_SPELL_2,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [15] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.FIND_TRAPS,
            [5] = actionbarButtons.TURN_UNDEAD,
            [6] = actionbarButtons.STEALTH,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [16] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.QUICK_SPELL_1,
            [5] = actionbarButtons.QUICK_SPELL_2,
            [6] = actionbarButtons.QUICK_SPELL_3,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [17] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.TURN_UNDEAD,
            [5] = actionbarButtons.QUICK_SPELL_1,
            [6] = actionbarButtons.QUICK_SPELL_2,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [18] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.TURN_UNDEAD,
            [5] = actionbarButtons.STEALTH,
            [6] = actionbarButtons.QUICK_SPELL_1,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [20] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.QUICK_WEAPON_3,
            [5] = actionbarButtons.GUARD,
            [6] = actionbarButtons.FIND_TRAPS,
            [7] = actionbarButtons.STEALTH,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
        [21] = {
            [1] = actionbarButtons.TALK,
            [2] = actionbarButtons.QUICK_WEAPON_1,
            [3] = actionbarButtons.QUICK_WEAPON_2,
            [4] = actionbarButtons.BARD_SONG,
            [5] = actionbarButtons.FIND_TRAPS,
            [6] = actionbarButtons.QUICK_SPELL_1,
            [7] = actionbarButtons.CAST_SPELL,
            [8] = actionbarButtons.USE_ITEM,
            [9] = actionbarButtons.QUICK_ITEM_1,
            [10] = actionbarButtons.QUICK_ITEM_2,
            [11] = actionbarButtons.QUICK_ITEM_3,
            [12] = actionbarButtons.SPECIAL_ABILITIES,
        },
    }
    
    function setActionbarType(creID, slotNum)
        local class = Infinity_GetClass(creID)
        local kit = Infinity_GetKit(creID) -- Unused in vanilla
        return actionbarConfigurations[class][slotNum]
    end


    That is, once I release my modifications, you would append the actionbarConfigurations table using an M_*.LUA file.

    @Aquadrizzt:

    On another note, is there a way to control class/kit/whatever wise which buttons appear on the hot bar?

    Using the LUA system I defined earlier, it would be possible to use any information source available to the LUA environment to determine the buttons shown. So, that is a yes.

    Alternatively, could one ditch the hot bar all together and construct unique class/kit/character interfaces? '

    I have already tested and proven that it is possible to call the functions which preform the actionbar button's actions directly. So, yes, it will be possible to not even need to use the hardcoded hotbar with my solution.

    Oh also, is it possible to change the Bards "Pick Pockets Disguised as Thievery" button to a pure "Thievery" button.

    The button's actions are hardcoded. I could externalize the conditions that determine which behavior they follow; I believe that would do as you wish?

    What about defining other unique buttons (such as a Fast Movement toggle)?

    While a workaround, you could set an actionbar button to NONE, then use a custom button element to simulate a custom actionbar button.
  • GrammarsaladGrammarsalad Member Posts: 2,582
    edited August 2018
    ...The button's actions are hardcoded. I could externalize the conditions that determine which behavior they follow; I believe that would do as you wish?


    That sounds like what would be needed. The button only performs pick pocket, but does nothing when (e.g.) hovered over a door. If it could preform the open lock when hovered over a door and disarm trap when hovered over a detected trap, that would be super
  • The user and all related content has been deleted.
  • kjeronkjeron Member Posts: 2,368

    I have several kits that only have known spells - they have no spell slots and so cannot actually memorize anything. And I don't think there's any in-game way to add memorization slots and fill them with spells, so I can't fudge it with some automated tomfoolery. Now, if there was a way to fill a sequencer with spells from your known spells instead of your memorized spells...

    This is already doable with normal UI modding. You would still need a way to decrement the spells per day though.
Sign In or Register to comment.