Release: Dllfix16

Discussion in 'General Modification' started by Spellslinger, Nov 3, 2006.

Remove all ads!
  1. Spellslinger

    Spellslinger Established Member

    Joined:
    Jul 14, 2006
    Messages:
    158
    Likes Received:
    0
    It requires just what it says it does. The newest CMF. I used the CMF 5.0.3 dll as base for this fix because it has all the feat changes (why did I ever release the FeatActivator?! ;) ) incorporated. Also, the 5.0.3 CMF already has the scripts from v16 included. So, install 5.0.3, install the v16.0.1 and you are ready to go.

    If you do not use 5.0.3 yet, you might try to install 16.0.1 over any other installation that is updated to v16, should work, but no guarantees.
     
  2. Jesse Heinig

    Jesse Heinig Established Member

    Joined:
    Jun 26, 2005
    Messages:
    126
    Likes Received:
    0
    'slinger, could you provide some brief documentation on use of the persistency feature from dllfix 16? I'd like to see how to use it in spells, items, and quests, but right now I don't have any examples, so I'm not sure how to call upon it.
     
  3. Shiningted

    Shiningted I want my goat back Administrator

    Joined:
    Oct 23, 2004
    Messages:
    12,651
    Likes Received:
    350
    Spellfiddler gave me a complete tutorial on how this works - of course, like a clown I closed the window before copying it :yawn: I hope he won't mind me pointing out, though, that the relevant docs are in

    data.Co8-5.0.0\scr\co8Util

    and it is used in game for the Enlarge spell (#152).
     
  4. Spellslinger

    Spellslinger Established Member

    Joined:
    Jul 14, 2006
    Messages:
    158
    Likes Received:
    0
    Let me quote myself here: ;)

    So I would suggest you look at the Enlarge or Righteous Might spell first, they use both of the features mentioned above.

    A short summary:
    Basically the PD wraps a python dict that is stringized and saved/loaded everytime you use the save/load function of the game itself (via dll hack). The data is saved in the savegame folder with the rest of the savegame files as slotxx.co8. The contents are clear text, so you can easily debug what's happening there.

    As client coder you need 3 functions: Co8PersistentData.setData, Co8PersistentData.getData, Co8PersistentData.removeData. They are documented via python doc strings. As it is based on a dict, you need to choose a unique key (always a string in this case) for the data you want to store, setting new data with an exisiting key will overwrite the present data. If enough people use PD and the need arises, I can add a safeguard functionality to it that requires registering your key, so that no key duplicity problems arise. I don't think that is necessary yet, as long as people choose meaningful and long enough keys (e.g. "Sp152_Enlarge_Activelist"). If you getData and there is no entry with that key, None is returned. You can check for None with the isNone() helper function included in PD (I had some problems checking for it in ToEE the way I do in newer python versions).

    The data you store is stringized for saving. Thus the return type when you get the data is str when you saved numbers. The upside: Lists, dicts, tuples are returned as the original type, so it's quite powerful, since you can save complete and comprehensive sequence types under one key.

    There are 2 general ways for using PD:
    1. Like I did in the reach spells: Killing the entry alltogether when it's empty. I didn't want to have an empty activelist entry for all spells that use PD hanging around when actually there is no active spell.
    2. You have data that has to be always present or you don't want to add/remove the whole entry everytime it's empty/needed. Then you can use the init() function in _co8init.py to initialize your data, and just never remove it again, just get, change and set again. For this to work, you have to add a call to this init() function in the pcstart.py (this is called every new game start IIRC). Shame on me, since I didn't use the 2nd way, I forgot to include this little call. So it's up to the one who needs this first. ;)

    I hope that referencing PyObjHandles over load/game changes is self-explanatory via the spell scripts, if not, or if there are any other questions, shoot.


    Ok, that wasn't a really short summary at all now... :p

    *EDIT*
    Good for our click-happy, shining clown that he can reread it here for all time to come now. ;)
     
    Last edited: Dec 20, 2006
  5. Spellslinger

    Spellslinger Established Member

    Joined:
    Jul 14, 2006
    Messages:
    158
    Likes Received:
    0
    Updated first post: Dllfix16.0.2
     
  6. maggit

    maggit Zombie RipTorn Wonka

    Joined:
    Oct 20, 2005
    Messages:
    1,945
    Likes Received:
    0
    Downloading. :D
     
  7. ShadowDragoon

    ShadowDragoon Advocate of Vengence

    Joined:
    Dec 25, 2004
    Messages:
    579
    Likes Received:
    0
    O . O You fixed the anarchic weapons?!

    XD W00T!!

    EDIT: Will the new dllfix work with KotB?
     
    Last edited: Jan 13, 2007
  8. Spellslinger

    Spellslinger Established Member

    Joined:
    Jul 14, 2006
    Messages:
    158
    Likes Received:
    0
    I think so. For a definite answer, seek out your local Shining One.
     
  9. ShadowDragoon

    ShadowDragoon Advocate of Vengence

    Joined:
    Dec 25, 2004
    Messages:
    579
    Likes Received:
    0
    Ah. Gotcha.
     
  10. maggit

    maggit Zombie RipTorn Wonka

    Joined:
    Oct 20, 2005
    Messages:
    1,945
    Likes Received:
    0
    Spellslinger, I know I may be asking for too much, but
    could you check barbarian entries in the .dll? AFAIK all
    the entries regarding classes are there, right? They get
    the armor proficiencies they should (that is medium and
    light) however they can use heavy armor. o_O

    --------------------------------------------------------------
    Am I the only one who has problems with barbarians
    wearing heavy armor?
     
    Last edited: Jan 18, 2007
  11. Spellslinger

    Spellslinger Established Member

    Joined:
    Jul 14, 2006
    Messages:
    158
    Likes Received:
    0
    Actually this problem wasn't limited to barbarians. Everyone with medium armor proficiency could use heavy armor since the game checked for the medium feat instead of the heavy feat when checking against heavy armor.

    First post updated with 16.0.3.
     
  12. maggit

    maggit Zombie RipTorn Wonka

    Joined:
    Oct 20, 2005
    Messages:
    1,945
    Likes Received:
    0
    Thanks I thought I was paranoid about that thing. ;)
     
Our Host!