lfnetwork.com mark read register faq members calendar

Thread: The power of ExecuteScript (How to Inject a Script)
Thread Tools Display Modes
Post a new thread. Add a reply to this thread. Indicate all threads in this forum as read. Subscribe to this forum. RSS feed: this forum RSS feed: all forums
Old 10-01-2004, 03:49 PM   #1
beancounter
Rookie
 
Join Date: Jul 2004
Posts: 169
Scripting Tip: the power of ExecuteScript command

Using the ExecuteScript command I have found that you can easily modify almost any script, regardless if there is any source script available. Now, this will not let you directly modify the main script but you can adjust the script indirectly. This is especially useful when you want to add your own scripts to the original ones without changing the original script.

To demonstrate how it is done I will change one of my favorite mods: Redhawke's awesome Weebul's Jawa shop. In the original mod the jawa and sign post are created when you talk to the Czerka mechanic. A cool idea, but I thought it did not flow smoothly - the shop just appeared out of nowhere. Now Redhawke could have just changed the .mod file, but there are a number of issues with this, so adding a custom NPC is best done by script. However, I want this mod to be in effect as soon as I enter the area. I do not want to have to talk to someone to create it.

For the purpose of this walk through I am assuming you have already downloaded and installed Redhawke's Mod. Once you have installed the mod you should delete the Czerka Mechanic dialog file(tat17_05mecha_01.dlg) from your overrides, because it will no longer be necessary.

Every module has a script that runs every time you enter a area. It is called the On Enter script. It is how Bioware spawns in the various messengers in the game, such as Xor, Bandon and Calo Nord. In the case of Redhawke's Mod the On Enter script is k_ptat17_enter.ncs. Unfortunately, their is no uncompiled script(the nss file) available and it is a big file so modifying it directly is just about impossible. Or is it? I am going to show just how easy it is to add Redhawke's shop using the On Enter script while keeping the original Bioware script intact.

The first thing you have to do is rename the original script ncs file. Using Kotor Tool you need to extract k_ptat17_enter.ncs to your overrides directory and then rename it using Windows Explorer. I choose to use the name k_ptat17_enter2.ncs, but you could call it whatever you want just make sure it ends in .ncs. Now go create your own script - one that spawns a new NPC, waypoint, door or whatever you want to do. Since I am using Redhawke's mod this part is already done - he used the script rhshopspawn.ncs to add the shop. Next, you need to create one more script to tie your custom script in with the original one. Here is the script I am going to use(make sure you pay attention to the comments!):

Code:
void main()
{
     
     // make sure the PC is the only one who can trigger this script
     // otherwise if you spawn a creature the system will get in a infinite loop
     // of creating new creatures!
     object oEntering = GetEnteringObject();
     object JawaTest = GetObjectByTag("rh_jawa_69");

     if (GetIsPC(oEntering))
     {


          //  Check if the Jawa Guard exists - if he does not then create him
          if (GetIsObjectValid(JawaTest) == FALSE)
          {
               ExecuteScript("rhshopspawn", OBJECT_SELF);
          }     
     }
     
     // Now we need to launch the original script
     
     ExecuteScript("k_ptat17_enter2", OBJECT_SELF);
}
Save this script as the On Enter script - k_ptat17_enter.nss in your override directory. Next compile all of your scripts and you are done! When you enter the area the script will check and see if the Jawa exists - if he does the script will just run the standard Bioware script, if he does not then the script will run the rhspawn script and then run the standard Bioware script.

To improve compatability the k_ptat17_enter script should only contain the two ExecuteScript commands, and you should do the checks in the "rhspawn" script. This way if you wanted to merge your mod with another mod that uses the same On Enter script all you would have to do is copy over the Execute Script command from the other mod into yours.

You could also run a standard Bioware script first and then execute your own script - this way your own script could modify the effect of the original script. I think this is a pretty easy way to mod those scripts where there is no source code available. I just wanted to share this handy command with everyone because I think there are a number of places this would be very useful.

Original thread

Last edited by Darth333; 06-27-2006 at 11:36 AM.
beancounter is offline   you may: quote & reply,
Post a new thread. Add a reply to this thread. Indicate all threads in this forum as read. Subscribe to this forum. RSS feed: this forum RSS feed: all forums
Go Back   LucasForums > Network > Knights of the Old Republic > Editing / Modding > Holowan Laboratories > Tutorials: Scripting > The power of ExecuteScript (How to Inject a Script)

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 04:00 PM.

LFNetwork, LLC ©2002-2011 - All rights reserved.
Powered by vBulletin®
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.