Jump to content

peardox

Members
  • Posts

    564
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by peardox

  1. This is for a specific purpose

     

    Instant chat / delayed chat (TimeZones)

     

    Any dev is eligible if you want in

     

    The URL is https://poe2.slack.com/

     

    At the present this is invite only

     

    This is in response to a Q one of my friends asked - how do we chat?

     

    This, I consider, a good idea as Slack gives us both live chat, delayed chat and PM chat

     

    The BAD news is that to OK you I need your email - if you wanna get into that group PM (here) me your email with a MOD the you've done (simply which one) and I'll set you up - Slack's rules not mine

     

    It there's sufficient interest I'll open it up to reqs as well (no auth required)

    • Like 2
  2. Everything is fully explained in https://forums.obsidian.net/topic/103148-important-info-for-all-modders-adding-unique-items-to-the-game-via-vendors/ - I thought @ZapGunForHire's post made a better place for that explain (this one is also confusing)

     

    Yes, I speak English (Mancunian style) - that means I am born and bread in the UK

     

    I welcome any comments any thing I say that confuses people pointing out - kindly PM with the bit you don't understand.

     

    I will edit my posts and fix the content if you have a valid point

     

    You must remember that simply as you don't understand a point doesn't mean I'm wrong and if you pick up a mistake I'll happily fix the post.

     

    I do write a lot of stuff daily, obviously I'm not perfect so some things will slip through

     

    If you knew exactly what I'm doing... Only a few people do...

  3. Actually I don't believe this to be anything to be doing with ReStock (the text don't appear anywhere)

     

    If you've got TT1's Uniques installed REMOVE IT (put it back later, of course)

     

    Take a save game from anywhere that ain't Neketaka, if you've not got one of those sail ANYWHERE [this is important ONLY if you have TT1's Uniques]

     

    Save game, Quit to Desktop (!IMPORTANT)

     

    Install TT1 Uniques and load you load your <Somewhere else / no TT1> save and go Back to Neketeka -> Wild Mare or load your TT1-less version

     

    Go to Wild Mare

     

    Look - Dead Parrot - gotbuy one, it vanishes from the list as it's a 1 sale unique

     

    Save game, Quit to Desktop (!IMPORTANT)

     

    [This step is only important if checking your own mods and you've not using a somewhere else save]

    -------------------------------------------------------------------------------------------------------

    Sail to Port Maje (travelling time is long - this is good)

     

    Get off the ship @ PM Harbour

     

    Rest for 26 hours

     

    Get back on ship and go Back to Neketeka -> Wild Mare

    -------------------------------------------------------------------------------------------------------

    Go buy another Dead Parrot

     

    Rest for 26 hours 

     

    Go buy another Dead Parrot

     
    This is a known issue I've PMed Devs on
     
    @TT1 noted the 26 hour for stock to refill on Uniques, the biggest problem is, however...
     
    If you install a mod that affects a vendor that vendor's list appears to be cached
     
    The ONLY solution I've found is to sail to a completely diffo Island and sailing back again.
     
    With my "The Red Hand and friends" I pointed this out to the guy who couldn't get it working (Fair Trade actually removes the price barrier - oops)
     
    I've only seen this happen a few times so far, specifically when I was doing item mods
     
    I did another mod that altered a character's options but as override don't work there yet had to modify exported/design - this is something I believe OK as long as you don't publish for experimentation
     
    Basically the trick is to sail somewhere else then save and 
     

    Save game, Quit to Desktop (!IMPORTANT)

     
    Reload and go back then wait for 26 hours if you want another
     
    I've not done this fully to find out what works and don't
     
    I can tell you, for a fact, that say you're in Neketeka with no Dead Parrots with the MOD installed and take a trip to other areas when you go back to Wild Mare there are STILL no Dead Parrots owing to what I believe to be Cacheing
     

    Rest for 26 hours 

     

    Go buy another Dead Parrot

     
    For you're own MODs you'll wanna do the sail away stuff or use a save from somewhere else
  4. In the documentation, I noticed that some functions are using Guid like:

    Boolean IsClassAccruedResourceCount(Guid, Guid, Operator, Int32)
    

    But previously, I have seen the same function being used as:

    Boolean IsClassAccruedResourceCount(Guid, CharacterClass, Operator, Int32)
    

    Which makes me want to ask: When can we use enums to replace guids? (If it is still supported.)

     

    Classically an ENUM is 1,2,3,4 etc for various types

     

    A SET is 1,2,4,8 (each time doubling the previous value)

     

    We therefore use DEFINE's to replace the one with the other

     

    I noticed that lot in the DOCs - easy enough to automatically process but NOT to use in exported etc

     

    This may sound pointless but it's not as it you pre-process a MOD you can replace the defines.

     

    I have a process in mind that would auto-build most of the skeleton of a MOD

  5. Cut + Paste clarification from Nexus - knew my math was right! :)

     

    At the end of every month, the money Nexus Mods has decided to donate into the Donation Points pool will be converted into its DP equivalent. For example, a total donation money pool of $10,000 is the equivalent of 10,000,000 DP. 

    A script will then sum up the total unique downloads that each file page has received in that month, from mod authors who have opted into this scheme, and divide the total available DP amount by the total unique download amount for that month. 

    For example, if the total donation money pool is $10,000 (which is 10,000,000 DP) and the total unique download count is 5,000,000 then that means each unique download would be worth 2 DP. Ergo, a mod author who receives 25,000 unique downloads that month will receive 50,000 DP, which is the equivalent of $50 to redeem in our storefront, share with other users or donate to charity.

  6. I'm gonna download every mod on Nexus

     

    I have the ability to check for clashes - vendor clashes is my immediate target as they're the most likely ones.

     

    I'll eventually be able to sanity check Mods (a friend made a slip the other day regarding a UUID I quickly spotted by hand for example) - the system I plan will basically remove that possibility.

     

    This will be made public when I'm happy with it - you'll be able to check a new mod against everything else so see if someone's unwittingly treading on someone else's Mod

  7. Hey, don't worry

     

    Breaking things is how we learn what NOT to do :)

     

    My job doesn't actually require me to do anything (apart from today and I'm doing it in the background for the moment - switching a server to a new box so backing up first)

     

    I started modding POE2 about 2 1/2 weeks ago and just like you I was clueless at the start. Owing to my job being somewhat undemanding (I get paid whether I do anything or not) I've been able to spend all my time dissecting POE2 (apart from today when I have to do something I get paid for)

     

    I've released six (6) mods so far and helped out on a Mod. Nothing major but useful stuff.

     

    Stick with it and you'll be an ace in no time. The more you do this the more you understand.

     

    I promised my next Howto would be about adding a conversation option to an NPC - this allows us to attach a sorta shop to any boring named NPC (I spent nearly a week trying to add a real shop - not possible)

     

    After I've done that one I'll write up a basic howto create an item

  8. Mind, if it's not possible to make an entirely new store/inn/whatever via a mod on our end quite yet, that's be good to know as well, Obsidian. :)  

     

    I'll write up my unreleased Waenglith Mod - with luck I'll get to do it today

     

    The reason it's not released if I'm waiting for design/conversations to be moddable

     

    What I can show is how to add an option to her that does something

     

    Come to think of it I'll do FishMonger in Port Maje again as it don't matter much if you screw her up

     

    The current issue is that as we have no way to mod conversations in override you HAVE to mod the main exported branch

     

    You can't create a new shop but you CAN give people things (I had loads of Dead Parrot's before I managed to delete the data directory)

     

    I've got a script file that makes it simple for me to build most of it with multi-lingual translations (I just pinched some text from other vendor stringtables)

     

    I won't release a Mod based on these experiments but they are useful for local tests. As far as I'm concerned anything out of override is not a Mod (it's a hack)

     

    When they fix convo modding exactly the same concept will apply to the modded convos so it's worth educating people in the methodology before they fix it.

     

    Something I plan is the Chest Of Consumables - I'll stick it on a useless NPC (Captain Darmo in PM) not heard of him - see completely forgettable

     

    There are prob 500 - 1,000 equally useless NPCs in POE2 that are worthy of doing useful things so when we get override this becomes a useful technique

  9. Sorry, I know what I'm talking about so often forget that not everyone has the same skill set

     

    That grep stuff after 'minute' means - in plain English

     

    Find me every file in POE2 (I'm in a copy of the game on my server) that contains the text EntryCount but exclude anything that results in anything in exported (as there will be a huge number of them)

     

    I did Backer stuff and chose GOG - that's why I have Galaxy*.* files (not seen a Steam version so unsure how it changes)

     

    There are five (5) what appear to be game files that include EntryCount so even though it looks pointless it is in Obsidian's code somewhere by the look of it.

     

    This is why I say that even if they ain't required stick them in and make them consistent anyway.

     

    *.conversationbundle are a noteworty case as they're already a little screwed up so better safe than sorry

  10. I'd stick NextEntry and EntryCount back in to be on the safe side

     

    [8 minute grep time - sheesh]

     

    grep -lr EntryCount | grep -v exported
    GalaxyPeer64.dll
    GalaxyCSharpGlue.dll
    PillarsOfEternityII_Data/Managed/OEIFormats.dll
    PillarsOfEternityII_Data/Managed/Assembly-CSharp.dll
    PillarsOfEternityII_Data/Managed/System.dll
    PillarsOfEternityII_Data/Managed/Assembly-CSharp-firstpass.dll
    PillarsOfEternityII_Data/Managed/GalaxyCSharp.dll
    PillarsOfEternityII_Data/Plugins/GalaxyPeer64.dll
    PillarsOfEternityII_Data/Plugins/GalaxyCSharpGlue.dll
    PillarsOfEternityII_Data/Plugins/Galaxy64.dll
    PillarsOfEternityII_Data/Plugins/GalaxyPeer.dll
    Galaxy64.dll
  11. Thought I'd point this out as we're near deadline for this stuff

     

    If you've released a Mod on Nexus they've got a reward scheme in place whereby @ the end of month they tally up your unique downloads then give you something back in the way of something they call DP (Donation Points?)

     

    Anyway

     

    Have a look at https://www.nexusmods.com/modrewards#/wallet/all/1 (it's linked from the main menu icon looks a bit like folders - it's the one between Settings and Inbox TRHS)

     

    This will say 0DP for EVERYONE ATM as this only started earlier this month

     

    Now go look at https://www.nexusmods.com/modrewards#/store/all/1 (it's linked from the DP page marked Visit Store)

     

    That's what you get for your DP

     

    The thing is that it looks like a load of Modders have completely missed this fact as some people I know here haven't marked themselves wanting any DP

     

    Nexus Mods have pledged $6-10k PCM with a targeted $100k this year as payback to the Mod community. They also have a Patreon fund (not much in it yet) for donations from Mod junkies to donate to as well.

     

    The rewards system is REALLY easy to overlook

     

    Right at the bottom of the page in the middle you'll see a link called "Manage my mod rewards"

     

    Click that then opt in all your mods

     

    As there's no big pointers about this you've most likely missed this stuff as will have many other Modders from other games (this is actually good for us)

     

    The pot of cash they have will be split amongst everyone who opts in. I understand it's split based on unique downloads in any given month (so do this ASAP to get included for the June payout)

     

    The $10 Paypal credit for 10k DP seems quite a possibility now.

     

    Their terms specifically say that Opted In Mods only qualify for a share.

     

    So - in the unlikely event that I'm the only person who Opted In I'll get $6-10k this month (a huge number of DPs)

     

    Taking myself as an example I've got six (6) mods with a current total downloads of 332

     

    Let's be pessemistic and imagine the big Skyrim mods and everything else total 1,000,000 downloads I still get DP for my 332 which means I get 3,320 DP towards my 10,000 DP $10 PayPal credit (the math here is dependant on the cash set aside, the opt in numbers and their unique downloads - it'll change monthly)

     

    So, my Modding friends, go opt in - you may get enough DP to pay for the expansion pack DLCs due end of next month (already pre-ordered mine)

  12. OK

     

    @ZapGunForHire found the right keys to alter the economy.

     

    I've just done a mod (yet to publish it) that sets the economy flat so e.g. a Spyglass both buys and sells for 1,000 cp

     

    As mentioned above different people want it balancing differently so I'll branch the version I have a few times.

     

    I did a test where everything was free (that really sucked)

     

    Normally Spyglass has a 1,000 sell and a 5,000 buy

     

    Setting the multipliers to 2.0 got me a 10,000 Spyglass buy price

     

    Got a little juggling to do but think I'll do flat (0.2), double (0.4 at a guess) and 10x (2.0) versions

     

    The base economy is set for 5x

    • Like 1
  13. Turns out that setting all the multipliers to 0.2 yields a flat economy.

     

    Baked in there's a 5x multiplier so 0.2 results in an 80% discount resulting in full value for sale or purchase of anything.

     

    This solves an old req for a mod so I may as well publish it.

     

    I'll credit you in the Mod (your 15 mins of fame has begun :))

     

    I did a version where the Multipliers were 0.0 but that looked really sucky - everything cost and sold for 0cp :(

    • Like 1
  14. Oh - that one

     

    Been there, done it - it's not hard (just messy)

     

    This crap requires a convo logic manipulation - you can't do a store but you can give items away with ease

     

    Sadly this involves major hacks to the *conversationbundles and conversations/[language]/.../.../*stringtables

     

    I had the same goal and this was the only surefire way to resolve it

     

    I took Waenglith (Port Maje) and altered her so something silly - "Give me a kipper"

     

    After numerous rounds I got her to give me something (anything)

     

    I then extracted the translations of "Show me what you have" and did localised versions I assume to be correct.

     

    At that point I was helping TT1 solve an issue with Dead Parrot so I hacked that down to level 1 and eventually solved his issue

     

    After this I went back to Waenglith (near the square in Port Maje where you get Xoti) on a do or die sorta misson

     

    I didn't die :)

     

    Owing to a screw up I've lost the code but know how to do it

     

    The problem is that ATM I have to write outside override - something I don't wanna do

     

    I can show you a Waenglith mod that provides any item

     

    I have SO many dead parrots now...

  15. Yeah

     

    I'm not gonna get through factions tonite anyway

     

    As requed I wrote a howto [insert anything here] - actually, didn't you ask for this one?

     

    Dunno, just know it was a good req worthy of an expain

     

    BMac's just opened up the docs (I was at the end of the vendor doc at the time) - better go read them

  16. First off I'd go grab my exported + fixed from [https://poe2.peardox.com/exported/]

     

    These fix a load if bugs in exported

     

    Now open up json/items.gamebundle.json

     

    You'll see a load of JSON

     

    Now - grab the bit you want - it's the LootList

     

    I'm using the Fishmonger near the ship in Port Maje as an example so search for her DebugName or ID so you can pinch it

     

    We are given this...

            {
                "$type": "Game.GameData.LootListGameData, Assembly-CSharp",
                "DebugName": "Store_09_PM_Fishmonger",
                "ID": "101d4c38-674b-415d-bb1e-bd68846ef033",
                "Components": [
                    {
                        "$type": "Game.GameData.LootListComponent, Assembly-CSharp",
                        "Conditional": {
                            "Operator": 0,
                            "Components": []
                        },
                        "OutputChance": 1,
                        "OutputMode": "All",
                        "Items": [
                            {
                                "Conditional": {
                                    "Operator": 0,
                                    "Components": []
                                },
                                "OutputChance": 1,
                                "MinCount": 3,
                                "MaxCount": 4,
                                "Weight": 1,
                                "ItemID": "c9b3ab6f-4eec-4cab-aab7-2fd8d9770c4d",
                                "LootListID": "00000000-0000-0000-0000-000000000000",
                                "LockedVisible": "false"
    						}, {
    							"Conditional": {
    								"Operator": 0,
    								"Components": []
    							},
    							"OutputChance": 1,
    							"MinCount": 1,
    							"MaxCount": 1,
    							"Weight": 1,
    							"ItemID": "c2caa441-4723-4573-9e62-8c6529142261",
    							"LootListID": "00000000-0000-0000-0000-000000000000",
    							"LockedVisible": "false"
    						}, {
                                "Conditional": {
                                    "Operator": 0,
                                    "Components": []
                                },
                                "OutputChance": 1,
                                "MinCount": 6,
                                "MaxCount": 8,
                                "Weight": 1,
                                "ItemID": "e253a1c6-5e1c-409a-8666-e27243f3b703",
                                "LootListID": "00000000-0000-0000-0000-000000000000",
                                "LockedVisible": "false"
                            }
                        ]
                    }
                ]
            },
    
    

    Copy that lot into a decent text editor (Notepad++ if windows, TextWrangler if Mac and just about anything on Linux - I side on vim from console)

     

    If you look carefully at the extract you'll notice there's a comma at the end - we don't want that, it will cause our Mod to fail so get rid of it (exactly the same file without the trailing comma is valid JSON, with it it's junk (don't blame me - I'm just telling you how this works(

     

    Right, we've got her in place. We now need to pad her out so POE2 can see her

     

    This is an extremely simple process...

     

    At the VERY BEGINNING of the file add this ...

     {
        "GameDataObjects": [
    

    Now add this to the VERY END of the file ...

    	]
    }
    

    Congrats, you just created your first shop mod

     

    Save it in overrides/testmod/design/gamedata/testmod.gamedatabundle

     

    Assuming you've followed the instuctions accurately go see the fishmonger

     

    Nothing has changed (we basically just copied her default)

     

    Let's make this interesting and give her something else to sell ...

     

    Go back to you testmod.gamedatabundle and modify it

     

    WARNING - this is the easiest place to mess it all up

     

    At the end of the file directly after LockedVisible: "false" }

     

    It's that closing brace we're looking for

     

    Add this, directly after the closing brace

    , {
                                "Conditional": {
                                    "Operator": 0,
                                    "Components": []
                                },
                                "OutputChance": 1,
                                "MinCount": 6,
                                "MaxCount": 8,
                                "Weight": 1,
                                "ItemID": "e253a1c6-5e1c-409a-8666-e27243f3b703",
                                "LootListID": "00000000-0000-0000-0000-000000000000",
                                "LockedVisible": "false"
                            }
    

    Save your mod again and load the game again (you need to be completely out of game in order to test) - full reload is a must (bit of a pain I know)

     

    Reload done?

     

    Go to PM's fishwife and ask her what she's got

     

    Attached you should see Defiant Apparel in her list if you did this correctly

     

    Here's the complete mod in case you messed it up somewhere

     {
        "GameDataObjects": [
            {
                "$type": "Game.GameData.LootListGameData, Assembly-CSharp",
                "DebugName": "Store_09_PM_Fishmonger",
                "ID": "101d4c38-674b-415d-bb1e-bd68846ef033",
                "Components": [
                    {
                        "$type": "Game.GameData.LootListComponent, Assembly-CSharp",
                        "Conditional": {
                            "Operator": 0,
                            "Components": []
                        },
                        "OutputChance": 1,
                        "OutputMode": "All",
                        "Items": [
                            {
                                "Conditional": {
                                    "Operator": 0,
                                    "Components": []
                                },
                                "OutputChance": 1,
                                "MinCount": 3,
                                "MaxCount": 4,
                                "Weight": 1,
                                "ItemID": "c9b3ab6f-4eec-4cab-aab7-2fd8d9770c4d",
                                "LootListID": "00000000-0000-0000-0000-000000000000",
                                "LockedVisible": "false"
    						}, {
    							"Conditional": {
    								"Operator": 0,
    								"Components": []
    							},
    							"OutputChance": 1,
    							"MinCount": 1,
    							"MaxCount": 1,
    							"Weight": 1,
    							"ItemID": "c2caa441-4723-4573-9e62-8c6529142261",
    							"LootListID": "00000000-0000-0000-0000-000000000000",
    							"LockedVisible": "false"
    						}, {
                                "Conditional": {
                                    "Operator": 0,
                                    "Components": []
                                },
                                "OutputChance": 1,
                                "MinCount": 6,
                                "MaxCount": 8,
                                "Weight": 1,
                                "ItemID": "e253a1c6-5e1c-409a-8666-e27243f3b703",
                                "LootListID": "00000000-0000-0000-0000-000000000000",
                                "LockedVisible": "false"
                            }
                        ]
                    }
                ]
            }
        ]
    }
    
    

    Please note that the entire file needs to be JSON-friendly

     

    The comma I mentioned above is ABSOLUTELY REQUIRED for any sub-items but MUST NOT appear after the final one - this is bad JSON and your MOD won't load as a result.

     

    OK - reload a game, go see the vendor - ooh, she's got something useful

     

    I urge you to not use the vendor I use in this example - try to find another i.e. change 

                "DebugName": "Store_09_PM_Fishmonger",
                "ID": "101d4c38-674b-415d-bb1e-bd68846ef033",
    

    To someone else - ideally use a STORE or VD DebugName as they're almost certain to work

     

    So, for example

                "$type": "Game.GameData.LootListGameData, Assembly-CSharp",
                "DebugName": "Store_04_PD_Unas_Luxuries",
     

    I know that one works, Unas is a vendor in Serpent Crown near the south entrypoint

     

    Don't be lazy - go find your own!

     

    Personally I'm using Eofania and know TT1 is using Wild Mare

     

    If we clash over vendors everyone loses

     

    Righto

    • Like 2
  17. This is a non-specific count list of everything in POE2

     

    It identifies specific things

     

    Everything in POE2 has a UUID

     

    The purpose of this is to connect things

     

    If xcnt > 0 then it's something you can change in the game

    if xcnt = 0 you're out of luck

     

    The same applies to gcnt but in a diffo way

     

    if gcnt = 0 it's an orphan

    if gcnt > 0 && xcnt > 0 it's something you can buy or negotiate for

     

    There are rare occasions where gcnt = 0 + xcnt = 1

     

    This signifies something worth looking deeper into and attaching to a shop somewhere as I did yesterday with "The Red Hand and Friends" (wish I'd ran this one up first in hindsight)

     

    There are many upsides to what this makes available to the Mod dev if you know how to use it.

     

    A simple example is we can use it to detect Mod clashes (must have posted that one in another thread)

     

    By the same methods I use to grab UUIDs I can extract them from Mods so if a Peardox Mod interferes with a TT1 Mod (love the Dead Parrot) I can find out instantly - there's more I can do with all this stuff but need to finish extracting exported 

    • Like 1
×
×
  • Create New...