Jump to content

Welcome to Obsidian Forum Community
Register now to gain access to all of our features. Once registered and logged in, you will be able to create topics, post replies to existing threads, give reputation to your fellow members, get your own private messenger, post status updates, manage your profile and so much more. If you already have an account, login here - otherwise create an account for free today!
Photo

First Mod (spoilers)


  • Please log in to reply
67 replies to this topic

#1
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer
I promised to throw a beginners guide to Modding up - this does almost nothing but is a valid Mod
 
This is the slimmest mod I could imagine
 
If you haven't got one create an override directory in "Pillars of Eternity II Deadfire\PillarsOfEternityII_Data" 
 
Create a new directory called first_mod
 
Now create a sub-sirectory called design and one below that called gamedata
 
In that directory create a file called first_mod.gamedatabundle (no .txt) and stick the following in it
{
    "GameDataObjects": [
 		{
            "$type": "Game.GameData.WeaponGameData, Assembly-CSharp",
            "DebugName": "Great_Sword",
            "ID": "3530e7a2-ec4f-4d5f-a436-53e26ed3e075",
            "Components": [
                {
                    "$type": "Game.GameData.ItemComponent, Assembly-CSharp",
                    "DisplayName": 11,
                    "DescriptionText": 262,
                    "FilterType": "Weapons",
                    "InventoryAudioEventListID": "d9ef8ec9-f1fb-4d0b-88b7-49d7c0310019",
                    "IsQuestItem": "false",
                    "IsIngredient": "false",
                    "IsCurrency": "false",
                    "IsAdventuringItem": "false",
                    "CanSellForFullValue": "false",
                    "MaxStackSize": 1,
                    "NeverDropAsLoot": "false",
                    "CanBePickpocketed": "true",
                    "IsUnique": "false",
                    "Value": 50,
                    "IconTextureSmall": "gui\/icons\/items\/weapons\/great_sword\/great_sword_s.png",
                    "IconTextureLarge": "gui\/icons\/items\/weapons\/great_sword\/great_sword_l.png",
                    "PencilSketchTexture": "",
                    "InspectOnUseButton": [],
                    "IsPlaceholder": "false"
                },
                {
                    "$type": "Game.GameData.EquippableComponent, Assembly-CSharp",
                    "EquipmentType": "GreatSword",
                    "EquipmentSlot": "BothPrimaryAndSecondary",
                    "AppearancePiece": {
                        "ModelVisualDataPath": "prefabs\/items\/appearance\/weapons\/great_sword\/great_sword01.asset"
                    },
                    "ItemModsIDs": [],
                    "OnEquipVisualEffects": [],
                    "RestrictedToClassIDs": [],
                    "RestrictedToPlayer": "false",
                    "ProficientAbilityID": "0b5fe616-3d6d-460d-a02d-28a1b4217796",
                    "CannotUnequip": "false",
                    "ItemRendererPrefab": "prefabs\/itemrenderers\/genericitemrenderer.prefab",
                    "ItemModel": "art\/character\/weapons\/great_sword\/great_sword01\/w_gs01.fbx",
                    "AnimationController": "",
                    "PaperdollOverrideRenderer": "",
                    "AttackSummonID": "00000000-0000-0000-0000-000000000000",
                    "CannotSheathe": "false",
                    "PropVisualEffects": []
                },
                {
                    "$type": "Game.GameData.WeaponComponent, Assembly-CSharp",
                    "Stance": "TwoHandedClosedGrip",
                    "AnimationStanceID": "2bfb014c-53e1-44d0-82c8-3c3ff7a6741e",
                    "StatusEffectsOnLaunchIDs": [],
                    "IsDisplayedWhenAlternate": "true",
                    "IsUniversalType": "false",
                    "AttackID": "1d10eee8-c68a-4593-8075-7a2e19db6602",
                    "NoiseLevelID": "15743f94-1026-40b0-8e13-a667b3f66f63",
                    "ForceBackScabbard": "true",
                    "ScabbardAppearancePiece": {
                        "ModelVisualDataPath": "prefabs\/items\/appearance\/weapons\/great_sword\/a_great_sword01_scabbard.asset"
                    },
                    "ScabbardRendererPrefab": "prefabs\/itemrenderers\/genericitemrenderer.prefab",
                    "ScabbardModel": "",
                    "AudioEventListID": "00000000-0000-0000-0000-000000000000"
                }
            ]
        }
	]
}
Everything in POE2 is identified using a GUID - all we've done so far is clone an existing item
 
Let's go get one...
 
 
For testing we'll use fe314613-c507-4f86-86d2-dd94b09429e0
 
Now, let's change the first couple of lines to look like this
 
            "DebugName": "First_Mod_Great_Sword",
            "ID": "fe314613-c507-4f86-86d2-dd94b09429e0",
We've now got our own Great Sword, let's go name it.
 
You see DisplayName and DescriptionText, lets change those...
 
Create first_mod\localized\en\text\game and a new file called items.stringtable
 
Stick the folowing in it...
 
<?xml version="1.0" encoding="utf-8"?>
<StringTableFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>game\items</Name>
  <Entries>
    <Entry>
      <ID>12650</ID>
      <DefaultText>First Mod Great Sword</DefaultText>
      <FemaleText />
    </Entry>
    <Entry>
      <ID>12651</ID>
      <DefaultText>For Frodo!</DefaultText>
      <FemaleText />
    </Entry>
  </Entries>  
</StringTableFile>
Note the numbers - make then something weird so as not to clash > 10k is good but bear in mind another Mod authour may be using the same numbers (Mod Clash)
 
Change your gamebundle to reference the new strings
 
                    "DisplayName": 12650,
                    "DescriptionText": 12651,
Save your mod and start a game.
 
Now we're going to cheat ourselves in out new item - this is perfectly acceptable when Modding for quick tests
 
To get into the terminal hit the back-quote (`) character and type in iroll20s
Now let's get us our new sword...
Hit the back-quote (`) character and type in GiveItem fe314613-c507-4f86-86d2-dd94b09429e0
Hit the back-quote (`) character and type in iroll20s again to switch off Cheat mode
 
A zip of first_mod with far more utility folders is attached
 
All we've done so far is copy an item and make it our own - this is where the fun begins
 
Hopefully one of our Slack Team will continue this (I'm busy)
 
There in no mention of translations, changing the basic sword or whatever in this article
 
Artwork in the Zip is © Mark Millmore of https://discoveringegypt.com/ and used under license

 

Attached Files


  • AndreaColombo, tonpix, Zap Gun For Hire and 2 others like this

#2
mant2si

mant2si

    (6) Magician

  • Members
  • 680 posts

I want to start with modding but now little bit afraid. How to investigate all possible values for each property ? How to navigate between GUID's ? 

Do you know if obsidian plans to release some open source tool to help developers ? Otherwise maybe community want to develop this tool ? I think this is not big problem to put all *.gamedatabundle to Elastic/(any db that natively support JSON) and create GUI with React or VUE 


Edited by mant2si, 17 July 2018 - 04:58 AM.

  • kilay likes this

#3
kilay

kilay

    (5) Thaumaturgist

  • Members
  • 524 posts

I want to start with modding but now little bit afraid. How to investigate all possible values for each property ? How to navigate between GUID's ? 

Do you know if obsidian plans to release some open source tool to help developers ? Otherwise maybe community want to develop this tool ? I think this is not big problem to put all *.gamedatabundle to Elastic/(any db that natively support JSON) and create GUI with React or VUE 

 

about values

 

https://eternity.obs...ormats/concepts


Edited by kilay, 17 July 2018 - 05:12 AM.


#4
mant2si

mant2si

    (6) Magician

  • Members
  • 680 posts

 

I want to start with modding but now little bit afraid. How to investigate all possible values for each property ? How to navigate between GUID's ? 

Do you know if obsidian plans to release some open source tool to help developers ? Otherwise maybe community want to develop this tool ? I think this is not big problem to put all *.gamedatabundle to Elastic/(any db that natively support JSON) and create GUI with React or VUE 

 

about values

 

https://eternity.obs...ormats/concepts

 

Hmm, this is API ? But again for game developing I prefer GUI, simple because I don't like navigate by GUID with CTRL + F, I like autocomplition and live validation. So now there non exist any GUI tool ? 

Maybe something like starcraft 2 GalaxyEditor


Edited by mant2si, 17 July 2018 - 05:40 AM.


#5
kilay

kilay

    (5) Thaumaturgist

  • Members
  • 524 posts

 

 

I want to start with modding but now little bit afraid. How to investigate all possible values for each property ? How to navigate between GUID's ? 

Do you know if obsidian plans to release some open source tool to help developers ? Otherwise maybe community want to develop this tool ? I think this is not big problem to put all *.gamedatabundle to Elastic/(any db that natively support JSON) and create GUI with React or VUE 

 

about values

 

https://eternity.obs...ormats/concepts

 

Hmm, this is API ? But again for game developing I prefer GUI, simple because I don't like navigate by GUID with CTRL + F, I like autocomplition and live validation. So now there non exist any GUI tool ? 

Maybe something like starcraft 2 GalaxyEditor

 

 

https://spiritualsuccessor.net


Edited by kilay, 17 July 2018 - 05:54 AM.

  • Grape_You_In_The_Mouth likes this

#6
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer

Hey, this was a VERY basic mod piece

 

@House2fly wanted a specific example - I gave him one

 

Expanding this is dead sample is super simple

 

Rats - I'm gonna expand it, ain't I - well it's only an hour or so to make first mod into uselful kit

 

Then I have to attatch it to a shop



#7
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer

As this is now pinned

 

well -byee week off

 

I've gotta do one of these a day

 

I'll ask our Slack for some help (they're good)



#8
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer

I'm stickied now (thanks @CDiaz)

 

I'll spend a few days taking first mod to - well, higher numbers



#9
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer

Part 2

 

This one is code-light but experience heavy

OK - let's not rely on cheats. Let's go give it to a vendor.

There is a problem - well, two actually.

1) Other Modders are looking to add items to a vendor so we can get Mod Clash. If two Mods use the same vendor one wins the other loses. We have petitioned the Devs to let us convert any named NPC into a vendor, if/when we get this ability the issue becomes moot.

2) Savegames cache state. If you enter an area and talk to someone that information is saved. If you've already talked to your vendor we get the saved vendor list NOT our new version - there are ways around this but involves hacking your savegame (they're ZIPs if you want a clue)

 

Bearing in mind these to-be-resolved issues it is highly recommended to interact with NOBODY and make a bee-line for Port Maje then save before entering the town

 

This takes ages so I've prepared one for you (See attachments) - geez - I had to Zip a Zip...

 

Stick this in your Savegames directory - on Windows it'll be C:\Users\<you>\Saved Games\Pillars of Eternity II - got a Mac but someone can give us the path for that one

This character is a nothing rogue with no companions who decided to save the box (not really worth it) ignored everyone and is standing outside Port Maje (PM) - he's a good character as a base for Mod experimentation - he's called First Mod and has done everything wrong.

 

You're now in the perfect place to do some more advanced Mod development

 

Feel free to create your own Dev save - I'm simply circumventing the necessity or going thru the torturous StartGame and wasting 20 mins getting solo to PM.

 

OK - we are now standing directly outside PM and we've interacted with as few people as possible.

You can see the issues if you use this save, go talk to fishmonger THEN apply today's Mod, reload - no MOD stupid sword. Apply the Mod (we're almost there) and repeat this using the savegame - First Mod Great Sword is buyable!

Our experiments show that if you've talked to a vendor this is when the bug occurs. Without Mod installed go to fishmonger - save - chat, save. Install Mod and reload before and after.

 

We're simply trying to make your own Mod development less frustrating - took us days to work out the rules.

 

OK - let's vendor our crap sword

 

In items.gamedatabundle we can find...

 

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

We need to override her while keeping good JSON formatting

 

You'll find this....

        {
            "$type": "Game.GameData.LootListGameData, Assembly-CSharp",
            "DebugName": "Store_09_PM_Fishmonger_Rack",
            "ID": "a6696c7c-edaf-4996-be76-8978225b5930",
            "Components": [
                {
                    "$type": "Game.GameData.LootListComponent, Assembly-CSharp",
                    "Conditional": {
                        "Operator": 0,
                        "Components": []
                    },
                    "OutputChance": 1,
                    "OutputMode": "All",
                    "Items": [
                        {
                            "Conditional": {
                                "Operator": 0,
                                "Components": []
                            },
                            "OutputChance": 1,
                            "MinCount": 2,
                            "MaxCount": 3,
                            "Weight": 1,
                            "ItemID": "f2a6175c-1107-4920-9e2f-ae7d07e09167",
                            "LootListID": "00000000-0000-0000-0000-000000000000",
                            "LockedVisible": "false"
                        },
                        {
                            "Conditional": {
                                "Operator": 0,
                                "Components": []
                            },
                            "OutputChance": 1,
                            "MinCount": 3,
                            "MaxCount": 4,
                            "Weight": 1,
                            "ItemID": "859b1408-0d16-4e80-8dd6-0b35c42ee9ec",
                            "LootListID": "00000000-0000-0000-0000-000000000000",
                            "LockedVisible": "false"
                        }
                    ]
                }
            ]
        },

Note the comma at the end - lose it and we've now got a valid JSON object

Now let's add it to first_mod.gamedatabundle

As mentioned in Part 1 your mod gamedatabundle can include things in other official bundles

We're going to take the last item in Fishmonger's shop and add our rubbish sword - don't worry, we'll make it better next time. We thought you'd like to see the shop bit first.

OK - this is Part 1 with some added data for the shop

{
    "GameDataObjects": [
 		{
            "$type": "Game.GameData.WeaponGameData, Assembly-CSharp",
            "DebugName": "First_Mod_Great_Sword",
            "ID": "fe314613-c507-4f86-86d2-dd94b09429e0",
            "Components": [
                {
                    "$type": "Game.GameData.ItemComponent, Assembly-CSharp",
                    "DisplayName": 12650,
                    "DescriptionText": 12651,
                    "FilterType": "Weapons",
                    "InventoryAudioEventListID": "d9ef8ec9-f1fb-4d0b-88b7-49d7c0310019",
                    "IsQuestItem": "false",
                    "IsIngredient": "false",
                    "IsCurrency": "false",
                    "IsAdventuringItem": "false",
                    "CanSellForFullValue": "false",
                    "MaxStackSize": 1,
                    "NeverDropAsLoot": "false",
                    "CanBePickpocketed": "true",
                    "IsUnique": "false",
                    "Value": 50,
                    "IconTextureSmall": "gui\/icons\/items\/weapons\/great_sword\/great_sword_s.png",
                    "IconTextureLarge": "gui\/icons\/items\/weapons\/great_sword\/great_sword_l.png",
                    "PencilSketchTexture": "",
                    "InspectOnUseButton": [],
                    "IsPlaceholder": "false"
                },
                {
                    "$type": "Game.GameData.EquippableComponent, Assembly-CSharp",
                    "EquipmentType": "GreatSword",
                    "EquipmentSlot": "BothPrimaryAndSecondary",
                    "AppearancePiece": {
                        "ModelVisualDataPath": "prefabs\/items\/appearance\/weapons\/great_sword\/great_sword01.asset"
                    },
                    "ItemModsIDs": [],
                    "OnEquipVisualEffects": [],
                    "RestrictedToClassIDs": [],
                    "RestrictedToPlayer": "false",
                    "ProficientAbilityID": "0b5fe616-3d6d-460d-a02d-28a1b4217796",
                    "CannotUnequip": "false",
                    "ItemRendererPrefab": "prefabs\/itemrenderers\/genericitemrenderer.prefab",
                    "ItemModel": "art\/character\/weapons\/great_sword\/great_sword01\/w_gs01.fbx",
                    "AnimationController": "",
                    "PaperdollOverrideRenderer": "",
                    "AttackSummonID": "00000000-0000-0000-0000-000000000000",
                    "CannotSheathe": "false",
                    "PropVisualEffects": []
                },
                {
                    "$type": "Game.GameData.WeaponComponent, Assembly-CSharp",
                    "Stance": "TwoHandedClosedGrip",
                    "AnimationStanceID": "2bfb014c-53e1-44d0-82c8-3c3ff7a6741e",
                    "StatusEffectsOnLaunchIDs": [],
                    "IsDisplayedWhenAlternate": "true",
                    "IsUniversalType": "false",
                    "AttackID": "1d10eee8-c68a-4593-8075-7a2e19db6602",
                    "NoiseLevelID": "15743f94-1026-40b0-8e13-a667b3f66f63",
                    "ForceBackScabbard": "true",
                    "ScabbardAppearancePiece": {
                        "ModelVisualDataPath": "prefabs\/items\/appearance\/weapons\/great_sword\/a_great_sword01_scabbard.asset"
                    },
                    "ScabbardRendererPrefab": "prefabs\/itemrenderers\/genericitemrenderer.prefab",
                    "ScabbardModel": "",
                    "AudioEventListID": "00000000-0000-0000-0000-000000000000"
                }
            ]
        }, {
            "$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": 6,
                            "MaxCount": 8,
                            "Weight": 1,
                            "ItemID": "e253a1c6-5e1c-409a-8666-e27243f3b703",
                            "LootListID": "00000000-0000-0000-0000-000000000000",
                            "LockedVisible": "false"
                        },
                        {
                            "Conditional": {
                                "Operator": 0,
                                "Components": []
                            },
                            "OutputChance": 1,
                            "MinCount": 1,
                            "MaxCount": 1,
                            "Weight": 1,
                            "ItemID": "fe314613-c507-4f86-86d2-dd94b09429e0",
                            "LootListID": "00000000-0000-0000-0000-000000000000",
                            "LockedVisible": "false"
                        }
                    ]
                }
            ]
        }
	]
}

All we've done is replicated an item and changed an ID to our junky sword's ID

Go see fishmonger in PM, she's near your eventual Ship

 

first_mod_001.png

 

Go to her shop and we get this...

 

first_mod_002.png

 

Attached is an updated version of first_mod.zip - just overwrite part one with this and you've got a shop

 

Next time we'll make crap sword into good sword

 

 

Attached Files


  • kilay likes this

#10
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer

Part 3

 

Integrating your Mod into POE2

 

A cool update in 1.2.0 was the inclusion of the Mod Manager

 

There is no code in this one - this is simplifying some complex issues raised by @BMac in his starting out post

If you look in the first_mod folder, assuming you've got installed you'll find two files - manifest.json and thumb.png

The thumb.png is a 149x82 image that will show up in Mod Manager.

We got ours under license (I have to say this every time) from Mark Millmore of https://discoveringegypt.com/

 

You replace that image with your own, if omitted you'll get a stock piccie

 

Let's get to personalising it

{
    "Title" : {
		"de" : "First Mod",
        "en" : "First Mod",
		"es" : "First Mod",
		"fr" : "First Mod",
		"it" : "First Mod",
		"pl" : "First Mod",
		"pt" : "First Mod",
		"ru" : "First Mod",
		"zh" : "First Mod"
    },
    "Description" : {
		"de" : "For Frodo",
        "en" : "For Frodo",
		"es" : "For Frodo",
		"fr" : "For Frodo",
		"it" : "For Frodo",
		"pl" : "For Frodo",
		"pt" : "For Frodo",
		"ru" : "For Frodo",
		"zh" : "For Frodo"
    },
    "Author" : "Peardox",
    "ModVersion": "1.2",
    "SupportedGameVersion" : {
        "Min" : "1.1.0",
        "Max" : "1.2.0"
    }
}

The Description and Title bits allow us to define localisation so go to Google Translate and grab basic translations (we'll be coming back to this point)

The next bits are pretty self-evident - I wrote it, I've given it version 1.2 (as I'm using 1.2.0 of the game)

The SupportedGameVersion is something we need to pay attention to

We've already tried setting Max to 1.3.0 but on August 3rd we get a V2 so this mod won't, most likely, be picked up

If you're doing nothing dangerous simply set Max to 99.0.0

 

OK - translations

Most of our co-dependant Slack Group (see my sig) don't speak English as their native language but have good English skills

We've got Russian, Italian, Polish and German covered which is fairly good (Obsidian are far worse)

 

I can go to our Slack and tomorrow have a (mostly) fully translated manifest.json

The next update will include these changes

 

Sometimes we have to go "outside the box", I personally know pro translators - I hate asking them so ask us for an invite 

PM me

 

Right - translation crew...



#11
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer

I'm almost ready for the next part

If anyone can fix the translations before I write it....
 

{
    "Title" : {
"de" : "First Mod",
        "en" : "First Mod",
"es" : "First Mod",
"fr" : "First Mod",
"it" : "Prima Mod",
"pl" : "Pierwszy Mod",
"pt" : "First Mod",
"ru" : "First Mod",
"zh" : "First Mod"
    },
    "Description" : {
"de" : "Für Frodo",
        "en" : "For Frodo",
"es" : "Para Frodo",
"fr" : "Pour Frodo",
"it" : "For Frodo",
"pl" : "Dla Froda",
"pt" : "For Frodo",
"ru" : "For Frodo",
"zh" : "For Frodo"
    },
    "Author" : "Peardox",
    "ModVersion": "1.2",
    "SupportedGameVersion" : {
        "Min" : "1.1.0",
        "Max" : "1.2.0"
    }
}


#12
Xaratas

Xaratas

    (7) Enchanter

  • Members
  • 901 posts
  • Pillars of Eternity Backer
  • Kickstarter Backer
  • Deadfire Silver Backer
  • Fig Backer

I allways see the guid generator. Thats not needed at all. The rule is to only use hex digits, and then you can create numbers like this:

With a prefix for you self and an count for your mods. That way will make it more easy to track down a modded file and brings some ordering in the mods in general.

 

"$type": "Game.GameData.WeaponGameData, Assembly-CSharp",
"DebugName": "First_Mod_Great_Sword",
"ID": "AA000000-0000-0000-0000-000000000001",

  • TT1, tonpix and BMac like this

#13
BMac

BMac

    Programmer

  • Developers
  • 410 posts
  • Lords of the Eastern Reach Backer

 

I allways see the guid generator. Thats not needed at all. The rule is to only use hex digits, and then you can create numbers like this:

With a prefix for you self and an count for your mods. That way will make it more easy to track down a modded file and brings some ordering in the mods in general.

"$type": "Game.GameData.WeaponGameData, Assembly-CSharp",
"DebugName": "First_Mod_Great_Sword",
"ID": "AA000000-0000-0000-0000-000000000001",

You may want to instead generate most of the GUID randomly and use a small chunk for counting (e.g. "544a30f4-b90e-451b-bb2d-fadc88000001").  Random GUIDs are useful because they are statistically guaranteed to be unique, but the less of the GUID you generate randomly, the more likely it'll conflict with one in someone else's mod.


  • Zap Gun For Hire likes this

#14
kilay

kilay

    (5) Thaumaturgist

  • Members
  • 524 posts

 

I'm almost ready for the next part

If anyone can fix the translations before I write it....
 

{
    "Title" : {
"de" : "First Mod",
        "en" : "First Mod",
"es" : "First Mod",
"fr" : "First Mod",
"it" : "Prima Mod",
"pl" : "Pierwszy Mod",
"pt" : "First Mod",
"ru" : "First Mod",
"zh" : "First Mod"
    },
    "Description" : {
"de" : "Für Frodo",
        "en" : "For Frodo",
"es" : "Para Frodo",
"fr" : "Pour Frodo",
"it" : "For Frodo",
"pl" : "Dla Froda",
"pt" : "For Frodo",
"ru" : "For Frodo",
"zh" : "For Frodo"
    },
    "Author" : "Peardox",
    "ModVersion": "1.2",
    "SupportedGameVersion" : {
        "Min" : "1.1.0",
        "Max" : "1.2.0"
    }
}

 

 

It's "it" : "Per Frodo"


Edited by kilay, 19 July 2018 - 08:45 AM.


#15
house2fly

house2fly

    (8) Warlock

  • Members
  • 1162 posts
Q for peardox: you mention having to have a save before ever talking to the vendor, but in my save I used the temple vendor in Sacred Stair as my vendor and I've talked to her plenty before, and the items seem to show up just fine. Same for, say, TT1's items- I've chatted with the Wild Mare vendor a million times. Why do you need a "fresh" save?
  • peardox likes this

#16
kilay

kilay

    (5) Thaumaturgist

  • Members
  • 524 posts

Q for peardox: you mention having to have a save before ever talking to the vendor, but in my save I used the temple vendor in Sacred Stair as my vendor and I've talked to her plenty before, and the items seem to show up just fine. Same for, say, TT1's items- I've chatted with the Wild Mare vendor a million times. Why do you need a "fresh" save?

 

I guess that this is just related to the tutorial process , so you can avoid the waiting process for the stacks refresh and load quickly for testing.

If not you can wait 25 hours and the vendor inventory will be refreshed with the new item.



#17
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer

Q for peardox: you mention having to have a save before ever talking to the vendor, but in my save I used the temple vendor in Sacred Stair as my vendor and I've talked to her plenty before, and the items seem to show up just fine. Same for, say, TT1's items- I've chatted with the Wild Mare vendor a million times. Why do you need a "fresh" save?

 

A save - at least before 1.2.2 (not sure now) saves a bit too much data.

I have provable saves that illustrate this issue

So - go to a vendor BEFORE you activate your mod and save then again AFTER you do your mod

The result is the AFTER mod won't have your new item but your BEFORE mod will

We've made the Devs aware of this - I have a way around it but this involves hacking a savegame so hope this gets in 1.2.2 / 2.0.0

Convo Mods appear immune to this (for everyone else)



#18
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer

@house2fly

Yep - confirmed this is still broken

 

From what I can tell if you go into a new area you're safe

If you DONT talk to the vendor, see their shop + save you're still fine

Lastly TALK and see what she has

 

Install a Mod I purposely use Shatusi (or whatever) as it's easy to get to with https://www.nexusmod...rnity2/mods/125 (one of mine)

 

Two final tests - stick my (or anyone else's vendor)

 

Go back to Eofonia from PM and you get a load of extra items

 

Reload your saves - 2nd works, 3rd don't

 

We've been discussing this for over a month



#19
Kexby

Kexby

    (2) Evoker

  • Members
  • 72 posts
  • Location:Australia

This is a wonderful tutorial peardox. Even beginners like me can follow it :)

 

So I'm going to be brave and try making my own custom weapon.

 

I just have one question about the GUID. If I replace the first 3 entries with kex would that count as a unique GUID?

 

For example, your original sword's ID was: "ID": "3530e7a2-ec4f-4d5f-a436-53e26ed3e075",

 

If I changed it to: "ID": "kex0e7a2-ec4f-4d5f-a436-53e26ed3e075",

 

Would that work?



#20
kilay

kilay

    (5) Thaumaturgist

  • Members
  • 524 posts

This is a wonderful tutorial peardox. Even beginners like me can follow it :)

 

So I'm going to be brave and try making my own custom weapon.

 

I just have one question about the GUID. If I replace the first 3 entries with kex would that count as a unique GUID?

 

For example, your original sword's ID was: "ID": "3530e7a2-ec4f-4d5f-a436-53e26ed3e075",

 

If I changed it to: "ID": "kex0e7a2-ec4f-4d5f-a436-53e26ed3e075",

 

Would that work?

 

Nope

use that to create new GUID  (use 4 UUID , the one in the middle of the page)






1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users