Reply  
Avatar

Tarshana

Moderator Trainee
Moderator Trainee

Joined: Mon Aug 01, 2016 6:25 pm
Souls: 3,036.00
Bank: 0.00
Posts: 614
Reputation: 67
Wiki Edits: 103
#1
written by weriKK on the BSN Legacy I am copying this for sake of information hoarding


Custom Player Items In Single Player - UPDATED
Posted: 2009-11-06 - 208 comment(s) - 0 trackback(s)
Category: Addins
I've updated this tutorial to meet some higher quality standards and added some extra information to it as well.

During this step-by-step tutorial I will show you how to create and add two custom items to the inventory of your Single Player character, namely a longsword and a shield, very much like the various pre-order Bonus DLC packs do. For this tutorial you will need a genuine copy of Dragon Age: Origins in order to be able to download the Dragon Age Toolset. While the concept of this tutorial seems simple on paper, you will soon realize that it is a rather complicated task to add a custom item to the game, especially if you are new to modding.

The source codes, a Builder-Builder-Load package and the finished addon will all be available at the end of this blog post.

That being said, let's jump into the deep water!

Creating a new module

Before anything else, we will have to create a new modul in the Toolset that we can later load from the game:
Click File -> Manage Modules, create a New... module and watch the Object Inspector pop up

In the Name field, type in the desired name of your module: "My Custom Items Addin". This is the name that will show up on the DLC list.

In the UID field, put in a unique identifier that will refer to your module, for example: "my_custom_items". This will also serve as the directory name of your addin inside the Addins directory of the game.

From the Extended Module dropdown, select Single Player, since we want to add extended content to the Single Player campaign.

Click OK and close this window.

Open the module.

Go back to the Manage Modules window. Select our new module, click Hierarchy..., put a tick next to Single Player. Then click OK.

Go back into the Properties of the module.

Find the Script field, click on the ... and wait for the Resource Open/Save dialog to appear.

Click on the New button and in the Resource Name field type in the name of the script you will use for handling all the events sent to this module. Let's call this script "my_event_handler".

In the Folder field, we can set up a custom folder for our module. By default everything goes into the root of the resource palette window which can get messy after a while. In order to prevent this, type in "\MyCustomItems\" into this field and click OK.

Open the module again.


Image

Image

It is important to use an UID that no other module uses. This is the name you will refer to your module later on in the Toolset and also the name your module's directory will be called.

It is EXTREMELY important that you create your own event handling script. Omitting this step can cause major bugs in the game, and brake other mods that would otherwise function properly as well. The only exception to this rule is when you do not wish to handle any kind of events, in which case you can select (None) from the list.

Adding our custom items to the module

Once we have created our module, we can start creating our custom items. Most of the objects that we can create with the Toolset have an already pre-defined template. All we have to do is change the properties of these templates to create our unique items.
In order to create an item using a template, we have to look for the Palette Window. If you can not find it, you can open it through View -> Palette.

Click on the "ALL" icon on the top of the Palette Window. This will show every asset available to you.

Find the MyCustomItems directory you created earlier. Right click on it and select New -> Item. The Create New Resource pop up should pop up :P

In the Resource Name field, type in an identifier for your item. I used "my_custom_weapon".

Because we want to create an item that can be used by the player later on, we have to make sure that it is part of the core game resources; from the Module dropdown, select Core Game Resources.

The Owner Modul should be the name of our module, in my case: My Custom Items Addin.

We are done here, click OK, close this window and see the magic happen.


Image

If everything went according the plan ( and why should it not... ) you should stare at the properties window of our newly created item.
Let us go through the more important fields on this list and create a nice Longsword.

Base Item Type: This field defines the type of the item we will have. We want a longword, from the dropdown menu select Weapon - Longsword.

Description: You can set here the in game description of the item. (This is what you will see whenever you inspect it.) For example: "Mighty Longsword of my right hand!"

Icon: Click on ... to open up a file open dialog and look for a nice icon for your item. I used ico_longsword.dds. (All icons start with ico_ prefix!

Inventory Subgroup: Set this to 205000. This value defines the position of our item on the inventory list. All longswords use this number in the game.

Item Variation: In this dropdown you can select from the available variations of the models used for longswords. I went with Longsword 5, but you can choose any of them you like.

MaterialProgression & Material Type: In addition to base item type, material type grants significant bonuses to an item (Rune slots, damage, critical hit chance, armor penetration, missile deflection, armor and so on) and mainly define the end quality and Tier of your items. Tier 7 is Dragonbone, Tier 6 would be Silverite. The rest is up to you to figure out! MaterialProgression is mainly used to determine how items scale. I am not sure whether this is relevant for player items, to be safe, I choose Weapon, Dragonbone for both.

Name: This is the actual name you will see in game, like "Unstoppable Force".

Tag: This field will be used later on to refer to our item. I use the exact same thing I used for the resource name which can be found in the field just above this one: "my_custom_weapon".

Cost: This is the price of the item in copper. 100 is one silver, etc

Item Properties: This is where you can add different special attributes to your items.

OnHit Effect & OnHit Power: Similarly to the previous, they are used to add another special ability to your weapon that is used when you hit with the sword. For example, +10 extra damage vs. darkspawn.


If you want to know more about material types and how they affect the outcome of your item, or simply want to be able to calculate the item stats without loading your mod in game, look no further: The Secret Behind Item Statistics

If you want to know more about the rest of the statistics, the easiest way to learn is to simply browse the Palette Window an and View the resources.

Image

Image

All right! We are done setting up our sword. We won't have to touch this anymore. On the palette window, right click on your item and select check in. This will load it into the database.

Now repeat this exact same process and create yourself a shield:
Resource Name: "my_custom_shield"

Base Item Type: Shield - Large Round

Icon: ico_shield_largeroundmetal.dds

Inventory Subgroup: 342000

Item Variation: Large Darkspawn Shield

MaterialProgression: Shield, Dragonbone

MaterialType: Shield, Dragonbone

Name: "Immovable Object"

Tag: "my_custom_shield"


Once you are done with the shield, check this in too.

Adding the items to the player's inventory

Now comes the hard part. Even though we have our custom items in our module, we have to tell the game to give them to our player somehow. This is where scripts come into play.

We have created our event handler script earlier when we set up our module properties. It is time to write the script. On the Palette Window, look for our script called my_event_handler.nss. Double click on it to open it. If you can see a read bar on top of the script editor, right click on the script and check it out. Now we can start editing it.

The programming language that the Dragon Age Toolset uses is very similar to the C programming language, which is (surprise, surprise) not the easiest language to start with for beginners. In this tutorial we will barely scratch the surface, but we will get to a point where we can comfortably add custom items through a script.

While we will go through the script, you will notice that a lot of the lines are beginning with two forward slashes ( "//" ). These lines are comments. They are not part of the actual script, they can be used to put notes into the code. I will use these extensively to explain various parts of the script.

Every time a script is called, the very first thing that game will look for is the main() function. No matter how many functions are in a script file, the very first funtion that will be executed is always the main function. Because of this, it is fitting that we start here too:


void main()
{
}


Dragon Age: Origins has an event driven scripting system. Every time something happens within the game that concerns the modules, the game sends notifications to them. The modules will receive these event notifications and call their event handler script to process the information. Logically, the first thing we have to do is retrieve this information:


void main()
{
event ev = GetCurrentEvent();
int nEventType = GetEventType(ev);
}


Once we have successfully retrieved the event, we have to check whether it is the event we are actually looking for. We want to give our items to our hero character when the module loads the first time, so we are looking for an event called EVENT_TYPE_MODULE_LOAD.


void main()
{
event ev = GetCurrentEvent();
int nEventType = GetEventType(ev);

// We will watch for every event type and if the one we need
// appears we will handle it as a special case. We will ignore the rest
// of the events
switch ( nEventType )
{
// This event happenes every time the module loads
// This usually happenes when creating a new game
// or loading a savegame
case EVENT_TYPE_MODULE_LOAD:
{

// We have dealt with the event we were waiting for.
// At this point we can stop looking for other events
break;
}
default:
break;
}
}


Now we can catch the Module Load event with our script, but it does not do anything interesting yet.
Now we have to tell the script to add our items to the player inventory when the module loads.

There is a specific utility function that adds a set amount of a resource to the player's inventory. This function is called UT_AddItemToInventory, and in it's simplest form it takes 2 parameters: the resource to add to the inventory and the amount we would like to add.

But before we could use this function, we have to tell the Toolset where can it find it. This is fairly simple, the function is inside another script file called "utility_h". All we have to do is add an extra line before our main funtion:


-->-->-->--> "utility_h"

void main()
{
...


After this, we can extend our script:


// ---- SCRIPT STARTS HERE ----

-->-->-->--> "utility_h"

void main()
{
event ev = GetCurrentEvent();
int nEventType = GetEventType(ev);

// We will watch for every event type and if the one we need
// appears we will handle it as a special case. We will ignore the rest
// of the events
switch ( nEventType )
{
// This event happenes every time the module loads
// This usually happenes when creating a new game
// or loading a savegame
case EVENT_TYPE_MODULE_LOAD:
{
// The UT_AddItemToInventory function adds various resources to a
// creature's inventory. Here we add one weapon and one shield.
UT_AddItemToInventory(R"my_custom_weapon.uti", 1);
UT_AddItemToInventory(R"my_custom_shield.uti", 1);

// We have dealt with the event we were waiting for.
// At this point we can stop looking for other events
break;
}
default:
break;
}
}
// ---- SCRIPT ENDS HERE ----


Not bad, we are getting there. But we still have a problem. Even though this script would work at this point and give our character the desired items, it would do so every time we load our save game. After a while we would stockpile a massive amount of armaments :)

What can we do to avoid this? We have to find a way to keep track whether we gave the items to the player already or not. There are various ways for doing this, we will use Plot flags now, mostly so you can get some insight of this too and to take a very short brake from scripting before your brains melt :)

We will come back to this script later, but for now, make sure it is saved, and move your attention toward the Palette Window for a last time and just like before, right click and add a new plot.

Type "my_custom_plot" into the Resource Name field and click OK.

Once the plot editor opened, right click anywhere and Insert -> Main Flag.

Double click on the name of the flag (most probably it will be FLAG_0 or something similar) and rename it to MY_ITEM_CHECK_FLAG.

Make sure that the Default Value column says Not Set.

Save the file and Check it in. We are done with this.


Image

Head back to our script file! Before we could access our newly created item check plot flag, we have to let the Toolset know how to find it. We will have to add another line before the main function:


-->-->-->--> "utility_h"
-->-->-->--> "plt_my_custom_plot"

void main()
{
...


Notice the "plt_" prefix before the plot file's name! It is very important. This is how you tell the Toolset that this is not another script file, but a plot file.

Only two more things left to add to our script before we are done, we have to check whether the item was already added to our player and we have to set the plot flag when we add the item to the character.

Without further ado, here is the completed script:


// ---- SCRIPT STARTS HERE ----

// Later on in this script, we will use the UT_AddItemToInventory()
// function to add an item to the player's inventory.
// But before we could use it, we have to tell the toolset where
// to look for it. The function is in the "utility_h" script file
// under _Core Includes, we will include this file at the top of
// our script file, above the main function.

-->-->-->--> "utility_h"
-->-->-->--> "plt_my_custom_plot"

void main()
{
// If our plot flag is set to TRUE, that means we have already
// given the items to the player, there is no need to continue
// running this script.
if ( WR_GetPlotFlag( PLT_MY_CUSTOM_PLOT, MY_ITEM_CHECK_FLAG ) == TRUE )
return;

event ev = GetCurrentEvent();
int nEventType = GetEventType(ev);

// We will watch for every event type and if the one we need
// appears we will handle it as a special case. We will ignore the rest
// of the events
switch ( nEventType )
{
// This event happenes every time the module loads
// This usually happenes when creating a new game
// or loading a savegame
case EVENT_TYPE_MODULE_LOAD:
{
// The UT_AddItemToInventory function adds various resources to a
// creature's inventory. Here we add one weapon and one shield.
UT_AddItemToInventory(R"my_custom_weapon.uti", 1);
UT_AddItemToInventory(R"my_custom_shield.uti", 1);

// Set our plot flag to TRUE, so the next time this script tries
// to run it will not add extra items to the player's inventory
WR_SetPlotFlag( PLT_MY_CUSTOM_PLOT, MY_ITEM_CHECK_FLAG, TRUE );

// We have dealt with the event we were waiting for.
// At this point we can stop looking for other events
break;
}
default:
break;
}
}
// ---- SCRIPT ENDS HERE ----



After this is done, you can check this in too. We are almost done. The only thing that's left is exporting our module into Dragon Age: Origins.

Find the MyCustomItems folder that contains all your files and right click on it.

From the popup menu select Export->Export without dependent resources. We can do this because we only used resources that were already part of the core package.

Repeat the above steps for,Generate Module XML & Generate Manifest XML.

Unfortunately there is one additional step, due to a bug in the Toolset. Even though we explicitly said to export out stuff without dependent resources, it seems the Toolset still export some files. If these files are not dealt with they can cause serious harm to your game. To remove these files, navigate to "MyDocuments\Bioware\Dragon Age\packages\core\override\toolsetexport\" and delete every single file from this directory. MAKE SURE YOU ARE IN THE RIGHT DIRECTORY!


At this point, if you boot up Dragon Age: Origins, you should see your modules in the downloadable content section and upon starting the game, your custom longsword and shield should show up in your inventory.

If you want to distribute your module among other people, it might worth to build a package from it. You can do this very easily:

From the toolbar, Tools->Builder->Builder To Player Package. It will ask for your manufest file. In this example, it should be at: Documents\BioWare\Dragon Age\AddIns\my_custom_items\module\override

After this a huge window opens with a tree view. You can untick the whole section starting from packages. All we need is the my_custom_items tree and everything under it.

Click OK and save your very first Dragon Age: Origins Package file.

Drink a beer and celebrate!


Image

You can download the finished addon and take a look at it yourself. You can also download a Builder-To-Load version of the whole addin that can be loaded directly into the Toolset or a simple zip file of the complete exported addin directory.

PLEASE USE THIS DISCUSSION BOARD FOR ANY KIND OF QUESTIONS IN REGARDS TO THE ADDON, the blog comment section is not too good to keep the conversation organized. Also keep in mind that this is the updated version of the guide, previous discussions might not be valid anymore. Thanks!

Update: The whole guide went through a major overhaul on 11/18/2009. If you had problems making things work earlier, it definately worth a second try!

As a sneak peak, here is a screenshot of the mod from the game:
Shop Icon
Avatar

Tarshana

Moderator Trainee
Moderator Trainee

Joined: Mon Aug 01, 2016 6:25 pm
Souls: 3,036.00
Bank: 0.00
Posts: 614
Reputation: 67
Wiki Edits: 103
#2
If it's helpful to anyone, I modified weriKK's script to more easily give myself the custom items I create. His steps work perfectly for me when followed carefully. When creating items other than greatswords I just look to existing items to get the "Inventory Subgroup" field. If there was a way to convert back and forth between strings and resources (which there may be I don't know) this script could be even simpler :)
weriKK: I changed your logic a little bit; the way you had the code, if the EVENT_TYPE_MODULE_LOAD was not the first event we received, we would never execute the code to add the items. Which is actually probably fine, but I went ahead and changed it so that we look at all events until we see EVENT_TYPE_MODULE_LOAD.

// Includes for utility functions and event definitons
-->-->-->--> "utility_h"
-->-->-->--> "wrappers_h"
-->-->-->--> "events_h"

void MaybeAddItem(string tag, resource r, int numToAdd = 1)
{
int nExisting = CountItemsByTag(GetHero(), tag);
int i;

for (i = 0; i < numToAdd - nExisting; i++)
{
UT_AddItemToInventory(r);
}
}

void main()
{
int nDoOnce = GetLocalInt(OBJECT_SELF, "QUEENS_MIGHT_LOOT_GIVEN");

// If we have not run the script yet:
if ( nDoOnce != 1 )
{
event ev = GetCurrentEvent();

switch(GetEventType(ev))
{
// If our modul just loaded - which happenessomewhere during
// the loading of a savegame or resuming an old game -
// we add the sword to the player during the loading screen
case EVENT_TYPE_MODULE_LOAD:
{
MaybeAddItem("my_armor_chest_magesbane", R"my_armor_chest_magesbane.uti");
MaybeAddItem("my_armor_boots_speed", R"my_armor_boots_speed.uti");
MaybeAddItem("my_armor_chest_cloth", R"my_armor_chest_cloth.uti");
MaybeAddItem("my_weapon_dagger_keen", R"my_weapon_dagger_keen.uti", 2);

SetLocalInt(OBJECT_SELF,"QUEENS_MIGHT_LOOT_GIVEN", 1);

break;
}
}
}
}


@valynon: I think I know what's the reason of this. And I can't think of any other reason the Toolset does this than being a bug. Either way:

Check your "DocumentsBioWareDragon Agepackagescoreoverride oolsetexport" folder. If it's full with crazy files, just delete them all and your problems should go away.

It seems you have to do this every time you export your mod.


@grayvisions: Here some more infos on how I do:

Basically you do all what this nice tutorial says BUT you have to do this:

Open File -> Manage Modules
Select our module, in my case "Might of Queen Velvet". and click on Properties...
Look for the Script field and change it to (none)

Create a new plot with the palette (the same way you do for items, or scripts...).
Let's call it "prcsrc_velvet_doonce"
Add a flag in it (right click - INSERT MAIN FLAG), name it what you want, it does not matter.
You don't have to change any of the other default properties of the flag.

Then instead of using the script of the tutorial, just use the following one:

void main()
{
object oPC = GetHero();

if ( GetPartyPlotFlag( GetParty(oPC), GetPlotGUID("prcsrc_velvet_doonce"), 0) == FALSE )
{
// You can uncomment the line below if you are updating from a previous version of your script not using the plot method (to avoid getting twice the item), else there is no need of it:

// if ( CountItemsByTag( oPC, "wep_mel_gsw_velvet") == 0 )

CreateItemOnObject( R"wep_mel_gsw_velvet.uti", oPC);

SetPartyPlotFlag( GetParty(oPC), GetPlotGUID("prcsrc_velvet_doonce"), 0, TRUE);
}
}

Then you have to create a prcscr_werikk_velvet.xls file.
XLS files replace 2DA in Dragon Age (in opposite to 2DA in NWN)

ID AreaListName Script
int string string
756000 any velvet_additemonload

ATTENTION: the 756000 number is just arbitrary (random i choose for this example) and must be unique. That means no other prcscr_ GDA from any other modules must use the same number. That's where conflict comes from between modules, and it works the same for all GDA files
For information bioware official DLC use low number such as 74, 75.... for their own prcscr_ GDA.

Then convert that XLS to GDA using the Bioware converter ( http://social.bioware.com/wiki/datoolset/index.php/2DA )

Place the prcscr_werikk_velvet.gda file into My documents/BioWare/Dragon Age/AddIns/mdu_velvet/core/override/toolsetexport/

Then build the player package as instructed in the tutorial, just verify than

prcsrc_velvet_doonce.plo
&
prcscr_werikk_velvet.gda

are listed in the file to be included in the player package.

PS: You have to use this GDA approach to get your script to be run correctly. Using the module script property to run the script won't work when creating new character, because the items won't be in the inventory once you get control of it.
The method I use is the same used by bioware bonus item DLC.



I have found this script for multi additemonload:

// ---------- Script Starts Here ----------

// Includes for utility functions and event definitons
-->-->-->--> "utility_h"
-->-->-->--> "wrappers_h"
-->-->-->--> "events_h"

void main()
{
// We need to retrieve the event that called our script
// and only act if it is the one we are waiting for
event ev = GetCurrentEvent();
int nEventType = GetEventType(ev);

// We also need the object representing the player's main character.
object oPC = GetHero();

// We use the SPELLBLADE_GS_GIVEN variable to check whether we already run the
// script in this play session and gave the sword to the player!
int nDoOnce = GetLocalInt(OBJECT_SELF, "SPELLBLADE_GS_GIVEN");

// If we have not run the script yet:
if ( nDoOnce != 1 )
{
// We look for the even that we need
switch(nEventType)
{
// If our modul just loaded - which happenessomewhere during
// the loading of a savegame or resuming an old game -
// we add the sword to the player during the loading screen
case EVENT_TYPE_MODULE_LOAD:
{
// First we make sure that we don't have the item yet
// fro manother gameplay session!
int nHas1 = CountItemsByTag(oPC, "wep_spellblade");
int nHas2 = CountItemsByTag(oPC, "wep_spelldagger");
int nHas3 = CountItemsByTag(oPC, "spellweaver_mk2");
int nHas4 = CountItemsByTag(oPC, "gen_im_arm_bot_med_elv");
int nHas5 = CountItemsByTag(oPC, "gen_im_arm_cht_med_elv");
int nHas6 = CountItemsByTag(oPC, "gen_im_arm_glv_med_elv");
int nHas7 = CountItemsByTag(oPC, "gen_im_arm_hel_med_elv");

// If we do not, then we add it to the inventory
if ( nHas1 == 0 )
UT_AddItemToInventory(R"wep_spellblade.uti");
if ( nHas2 == 0 )
UT_AddItemToInventory(R"wep_spelldagger.uti");
if ( nHas3 == 0 )
UT_AddItemToInventory(R"spellweaver_mk2.uti");
if ( nHas4 == 0 )
UT_AddItemToInventory(R"gen_im_arm_bot_med_elv.uti");
if ( nHas5 == 0 )
UT_AddItemToInventory(R"gen_im_arm_cht_med_elv.uti");
if ( nHas6 == 0 )
UT_AddItemToInventory(R"gen_im_arm_glv_med_elv.uti");
//else ( nHas7 == 0 ) // Will never be called since all of the above are true.
if ( nHas7 == 0 )
UT_AddItemToInventory(R"gen_im_arm_hel_med_elv");
break;
}
}

// We update our SPELLBLADE_GS_GIVEN variable to signal that the script
// finished properly and does not have to run again during this session.
SetLocalInt(OBJECT_SELF,"SPELLBLADE_GS_GIVEN", 1);
}

// Once we are done with all our stuff, we pass the stuff back to the
// original script, so it can deal with the rest of the core functions.
HandleEvent(ev, RESOURCE_SCRIPT_MODULE_CORE);
}
// ---------- Script Ends Here ----------
Shop Icon
Avatar

Tarshana

Moderator Trainee
Moderator Trainee

Joined: Mon Aug 01, 2016 6:25 pm
Souls: 3,036.00
Bank: 0.00
Posts: 614
Reputation: 67
Wiki Edits: 103
#3
BTW: Is it possible to run the script needed to load the weapon from console?
Report this comment

weriKK
2009-11-17 06:12 PM
It is possible to write "A" script that gives you predefines items when you call it from console, but this script will not work because it checks for EVENT_TYPE_MODULE_LOAD event which is only fired when you load the game.

__________________________
Any idea how to assign items to a set? i found an ITEM_SET integer, but dont really understand how to use it.
Report this comment

weriKK
2009-11-19 04:06 AM
To create an item set, you have to set the ITEM_SET variable of the items' variable table to the same number, and create a custom override for the itemsets 2da file where you can define the actual set bonuses. This is quite out of the scope of this guide though.
Shop Icon

MerAnne

Obsessed
Commander

Joined: Sun Aug 07, 2016 1:53 am
Souls: 190.00
Posts: 429
Reputation: 2
#4
For information hoarding, Sunjammer is working on relocating the toolset wiki - I think.

Yes, I know how to add an itemset bonus and will be happy to share when the wiki has a new home Although I think the information is already on the wiki

MerAnne

Obsessed
Commander

Joined: Sun Aug 07, 2016 1:53 am
Souls: 190.00
Posts: 429
Reputation: 2
#5
Oh, and this was written in 2009. My preference is to add a storage chest and add items to it. You can either create new storage as you create items or you can add to the storage chest you previously created.
Avatar

Tarshana

Moderator Trainee
Moderator Trainee

Joined: Mon Aug 01, 2016 6:25 pm
Souls: 3,036.00
Bank: 0.00
Posts: 614
Reputation: 67
Wiki Edits: 103
#6
lol yes it is old. Good primer, I think? And glad to hear that about Sunjammer, he was one of the beta testers and I think he wrote it. Let him know I have a full and downloaded copy of the toolset if he wants it, since I think it is sorta his anyway :P We would all be lost without him.
Shop Icon

MerAnne

Obsessed
Commander

Joined: Sun Aug 07, 2016 1:53 am
Souls: 190.00
Posts: 429
Reputation: 2
#7
http://www.nexusmods.com/dragonage/mods/4442/?

Download and test mer_location. All it does is cause the location to appear over the GW's head.

this (what you copied) is a good primer for those who are serious about modding and always striving to do better - they'll learn from it and then try to find a better solution. For those who just want to do things the easy way, they will end up with lag. Lots and lots of lag depending on how many pieces of equipment they decide to write separate mods for. I had to delete a lot the early equipment mods that I installed because there was so much LAG. The better way to do this is with prcscr files so that it isn't running so often. mer_location will give you an idea of how often this mod runs since it will run (put the coordinates over the GW's head) every time there is anything that is considered an 'event' by the game engine. The code that you copied appears to give you the equipment once (probably), but continues to check to see if it should run again every time there is an event.

I ended up creating custom equipment and giving it to my GWs in their Origin and Ostagar. Because of the locations the code ran rarely so it didn't create any lag that I could detect.

Rak72

Joined: Sat Jan 06, 2018 8:33 pm
Souls: 55.00
Posts: 1
Reputation: 0
#9
Thank you, this blog was invaluable!