Clear out experimental .35 files
Clear out experimental .35 files
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -1,42 +0,0 @@
|
||||
; NWNX2 configuration file
|
||||
; These are the default values for NWNX2. Values specified on the command
|
||||
; line take precedence.
|
||||
|
||||
[NWNX]
|
||||
ServerPort = 5121
|
||||
ModuleName = ""
|
||||
WatchdogProcess = yes
|
||||
UpdateIntervalProcess = 5
|
||||
WatchdogGamespy = no
|
||||
UpdateIntervalGamespy = 20
|
||||
GamespyRetries = 5
|
||||
OldGamespyProtocol = no
|
||||
RestartDelay = 5
|
||||
|
||||
[ODBC2]
|
||||
; Log file
|
||||
MaxLogSize = 512 ; in KByte
|
||||
LogLevel = 2 ; 0=nothing, 1=only errors, 2=everything
|
||||
|
||||
; Use these two settings for the SQLite internal database
|
||||
source = sqlite
|
||||
file = sqlite.db
|
||||
|
||||
; Use these two settings for ODBC connections
|
||||
;source = odbc
|
||||
;dsn = nwn
|
||||
|
||||
; Use these five settings for MySQL connections
|
||||
;source = mysql
|
||||
;server = localhost
|
||||
;user = nwn
|
||||
;pwd = password
|
||||
;db = nwn
|
||||
|
||||
; Set hookscorco to false if you want to disable hooking of
|
||||
; StoreCampaignObject and RetrieveCampaignObject entirely
|
||||
hookscorco = true
|
||||
|
||||
[PROFILER]
|
||||
MaxLogSize = 512 ; in KByte
|
||||
LogLevel = 1 ; 1=overall statistics, 2=full script callstack
|
Binary file not shown.
@@ -1,332 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title> NWNX Documentation </title>
|
||||
</head>
|
||||
|
||||
<body style="font-family:Arial,Verdana,sans-serif;">
|
||||
<h2>Neverwinter Nights Extender 2</h2>
|
||||
|
||||
<h4>This documentation is © by the Avlis Team. Version 2.6.1 of 14.01.2005.</h4>
|
||||
|
||||
<b>Visit us... </b>
|
||||
<table border=1>
|
||||
<tr>
|
||||
<td> NWNX homepage</td>
|
||||
<td> <a href="http://www.nwnx.org"> http://www.nwnx.org</a> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> The Avlis homepage</td>
|
||||
<td> <a href="http://www.avlis.org"> http://www.avlis.org</a> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> Sourceforge project page </td>
|
||||
<td> <a href="http://sourceforge.net/projects/apsnwnx/"> http://sourceforge.net/projects/apsnwnx/ </a> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> NWNX2 page on NWVault </td>
|
||||
<td> <a href="http://nwvault.ign.com/Files/other/data/1046636009723.shtml"> http://nwvault.ign.com/Files/other/data/1046636009723.shtml </a> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h3>Table of Contents:</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td> <a href="#I">I.</a></td>
|
||||
<td> <a href="#I">Introduction to NWNX</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <a href="#II">II.</a></td>
|
||||
<td> <a href="#II">NWNX plugins</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <a href="#III">III.</a></td>
|
||||
<td> <a href="#III">Available plugins </a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <a href="#IV">IV.</a></td>
|
||||
<td> <a href="#IV">Installing NWNX</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<a name="I"></a>
|
||||
<h3>I. Introduction to NWNX</h3>
|
||||
|
||||
<p>The Neverwinter Nights Extender (NWNX) is a program that has the power to
|
||||
push the limits on what you can do with NWN and its integrated script language.
|
||||
|
||||
<p>While NWN and the toolkit are complex and powerful tools, we at Avlis often
|
||||
felt that some things are just too limited, in order to successfully run a large
|
||||
persistent world. The first incarnation of NWNX brought the community realtime
|
||||
database access over ODBC, giving advanced scripters access to every conceivable
|
||||
DB they might want to use. During the time since the first release in February
|
||||
2003, I tried out various new ideas like linking servervaults with the help of
|
||||
NWNX, creating advanced data structures like hashmaps and linked lists, and played
|
||||
around with some debugging and profiling code.
|
||||
|
||||
<p>NWNX actually consists of two parts: The executable, which displays the NWNX
|
||||
window and runs the process and gamespy watchdogs, and a dynamically linked
|
||||
library (DLL in the Windows version, .so in the linux version), which runs
|
||||
inside the NWN server.
|
||||
|
||||
<p>In order to establish communication between scripts and the outside world,
|
||||
NWNX intercepts calls to the NWScript function SetLocalString() and examines the
|
||||
variable name that is passed to this function. If it begins with the string
|
||||
"NWNX!", NWNX parses the request and stores any resulting data into the value of
|
||||
that variable, which in turn can be read by a script with GetLocalString().
|
||||
Easy, huh ?
|
||||
|
||||
<p>After NWNX2 has loaded the server and rotated the log files, it takes over
|
||||
responsibility for restarting the server should it crash. It does not depend on
|
||||
a specific version of the server (1.65 as of this writing) and thus should work
|
||||
with upcoming releases, too. The current version supports all known versions of
|
||||
Microsoft Windows.
|
||||
|
||||
<p><b>Licence</b><br> NWNX is distributed unter the terms of the GNU
|
||||
GENERAL PUBLIC LICENSE included in <a href="licence.txt">licence.txt</a>. NWNX
|
||||
uses Mathias Rauen's excellent library <a
|
||||
href="http://www.madshi.net">"madCHook"</a> which is licensed under the
|
||||
terms included in <a href="licence.txt">licence.txt</a>
|
||||
|
||||
|
||||
<a name="II"></a>
|
||||
<h3>II. NWNX plugins</h3>
|
||||
|
||||
<p>NWNX plugins are a new concept introduced in version 2.5. Because it soon became
|
||||
apparent that the wide variety of possible uses for NWNX would lead to bloated
|
||||
and unreadable code, if all that functionality would be in a single library,
|
||||
Avlis team member Jeroen created a "plugin framework" around the original NWNX.
|
||||
Every NWNX plugin is contained in a single library (DLL), which name begins with
|
||||
"nwnx_", e.g. "nwnx_odbc.dll" for the ODBC interface.
|
||||
|
||||
<p>One of the advantages of this approach is that you can choose which
|
||||
functionality you want to have available, and then just make use of a subset of
|
||||
the existing plugins. Say for example, you want to have database connectivity
|
||||
and a linked list implementation. Then you would just copy the two files
|
||||
"nwnx_odbc.dll" and "nwnx_llist.dll" into your NWN directory. NWNX dynamically
|
||||
loads these plugins on startup, enabling the functionality contained in these
|
||||
plugins.
|
||||
|
||||
<p>Another important advantage is that now third party developers can easily
|
||||
extend NWNX with their own ideas and make their plugin available to others in a
|
||||
unified way. So instead of having many different, incompatible versions of NWNX
|
||||
floating around, you always have one NWN executable, one NWN main library, and
|
||||
as many NWNX plugins as you like.
|
||||
|
||||
<p>Starting with version 2.5.4, the plugins are available as <i>separate downloads</i>
|
||||
and no longer included in the main distribution package. This will make it
|
||||
easier for us and our users to stay up to date with the latest releases of NWNX
|
||||
and the various plugins.
|
||||
|
||||
<a name="III"></a>
|
||||
<h3>III. Available plugins</h3>
|
||||
|
||||
<p>To give an overview of what is possible with NWNX, we list of some of the
|
||||
available plugins here. Get the latest versions of those plugins on <a
|
||||
href="http://www.nwnx.org"> nwnx.org</a>. The plugins come complete with
|
||||
documentation and a small demo module that demonstrates their usage.
|
||||
|
||||
<h4>A. ODBC </h4>
|
||||
|
||||
<p>The historically most important plugin is the ODBC interface for Neverwinter
|
||||
Nights. Not so long ago, there wasn't any realtime database solution for NWN,
|
||||
when the Avlis team released the first version of NWNX, which suddenly opened a
|
||||
whole new world for owners of persistent worlds. This plugin and the accompanying
|
||||
APS (Avlis Persistence System) script is what made NWNX known in the community.
|
||||
|
||||
<h4>B. PROFILER </h4>
|
||||
|
||||
<p>The "Profiler" is a NWNX plugin that spits out statistics about running scripts.
|
||||
It shows how often a script has been called, how much time it took to complete,
|
||||
and gives some overall statistics. It also shows how much time CPU NPCs need for
|
||||
pathfinding.
|
||||
|
||||
<h4>C. HASHSET </h4>
|
||||
|
||||
<p>This plugin implements an advanced data structure, combining a hashmap and a
|
||||
set. This means you can set up associations between key - value pairs (hashmap),
|
||||
and also cycle through all stored data (set). You can even use this like an
|
||||
array, although it has much more to offer than just that.
|
||||
|
||||
<h4>D. FUNCTIONS </h4>
|
||||
|
||||
<p>This is an experimental plugin that gives access to some new functions to use
|
||||
with items. It's main purpose is to demonstrate how to modify the server's
|
||||
memory in order to change various properties on items.
|
||||
|
||||
<h4>E. TIME </h4>
|
||||
|
||||
<p>This plugin implements a simple, yet highly accurate timer. Perfect for
|
||||
knowing how long your functions really take to execute.
|
||||
|
||||
|
||||
<a name="IV"></a>
|
||||
<h3>IV. Installing NWNX</h3>
|
||||
|
||||
<p>NWNX2 has been extensively tested on MS Windows 2000 and XP. Windows 9x has
|
||||
also been tested and we encountered no problems with NWNX2.
|
||||
|
||||
<p>Installing NWNX2 is super easy. Download the file and unzip it. Take the
|
||||
files "NWNX2.exe", "NWNX.INI", "nwnx-module.dll", and "madCHook.dll" and place
|
||||
them in the directory where your NWN installation resides (usually
|
||||
C:\Neverwinternights\NWN). Done! If you want to change the default configuration
|
||||
parameters of NWNX, edit the section [NWNX] in NWNX.INI accordingly.
|
||||
|
||||
<p>If you have a previous version of NWNX installed, remove the files
|
||||
nwnx.dll and madCodeHookLib.dll.
|
||||
|
||||
<p><b>Now copy the NWNX plugins you want to use into the NWN directory.</b>
|
||||
|
||||
|
||||
<a name="V"></a>
|
||||
<h3>V. Running NWNX</h3>
|
||||
|
||||
<p>Go to the directory where you installed Neverwinter Nights and double-click
|
||||
on "NWNX2.exe". You will see the small window of NWNX2 and shortly after that
|
||||
the NWN server starts. The NWNX2 window contains some statistics and checkboxes
|
||||
that control the watchdogs, i.e. the functionality which restarts the server
|
||||
after a crash. (you need to add the "-module" option so NWNX2 knows what module
|
||||
it should load after a crash). If you don't need the watchdogs, simply close
|
||||
NWNX2 after it started the server.
|
||||
|
||||
<p>Right before NWNX2 loads the server, it rotates it's own and the server's log files. You
|
||||
will find directories named "1"..."9" below your "logs.0" directory. The
|
||||
directory "1" always contains the newest logs, and "9" contains the oldest logs.
|
||||
All log files older than those in "9" are deleted to preserve disk space.
|
||||
|
||||
<p>All activity is logged to a file called "nwnx.txt". This file is created
|
||||
in your "logs.0" (or .1, .2, etc.) directory and looks like this:
|
||||
|
||||
<pre>
|
||||
NWN Extender V.2.6.1.0
|
||||
(c) 2004 by Ingmar Stieger (Papillon) and Jeroen Broekhuizen
|
||||
visit us at http://www.nwnx.org
|
||||
|
||||
* Loading plugins...
|
||||
* Plugin functions is loaded.
|
||||
* Plugin odbc is loaded.
|
||||
* NWNX2 activated.
|
||||
</pre>
|
||||
|
||||
<p>The NWN Extender will make sure your server is restarted should the module
|
||||
crash. You can specify any commandline options Bioware's dedicated server
|
||||
understands, e.g. you can automatically load a module on startup (or restart
|
||||
after a crash) with: "NWNX2.exe" -module MODULENAME,
|
||||
|
||||
<h4>NWNX command line options</h4>
|
||||
|
||||
These options are understood by NWNX2. All other (i.e. unknown to NWNX2) options
|
||||
are passed to the server. <br>
|
||||
Example command line:
|
||||
|
||||
<pre>
|
||||
C:\Neverwinter Nights\NWN\NWNX2.EXE -module "My Module" -publicserver 1 -gamespywatchdog 1
|
||||
</pre>
|
||||
|
||||
<table border=1 cellpadding="5" width="80%">
|
||||
<tr>
|
||||
<th>Option</th>
|
||||
<th>Default value</th>
|
||||
<th>Description</th>
|
||||
<th>Example</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <nobr>-processwatchdog [0|1]</td>
|
||||
<td> <center>1 </td>
|
||||
<td> Set to 0 to disable the process type of watchdog, 1 to enable it.</td>
|
||||
<td> <nobr>-processwatchdog 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <nobr>-processinterval 1..n </td>
|
||||
<td> <center>5 </td>
|
||||
<td> In seconds. How often the process watchdog will check if the NWNights server process is still there.</td>
|
||||
<td> <nobr>-processinterval 7</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <nobr>-gamespywatchdog [0|1]</td>
|
||||
<td> <center>0 </td>
|
||||
<td> Set to 0 to disable the gamespy type of watchdog, 1 to enable it.</td>
|
||||
<td> <nobr>-gamespywatchdog 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <nobr>-gamespyinterval 1..n</td>
|
||||
<td> <center>20 </td>
|
||||
<td> In seconds. How often the gamespy watchdog will check if the NWNights server process is still there and still responding to clients.</td>
|
||||
<td> <nobr>-gamespyinterval 60</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <nobr>-gamespyretries 1..n</td>
|
||||
<td> <center>5 </td>
|
||||
<td> How many chances the gamespy watchdog will give the server to answer. If it got no answer after this many tries, the server process is killed and restarted. </td>
|
||||
<td> <nobr>-gamespyretries 3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <nobr>-oldgamespyprotocol [0|1]</td>
|
||||
<td> <center>0 </td>
|
||||
<td> Set to 1 if you have a pre 1.32 server and make use of the gamespy watchdog.</td>
|
||||
<td> <nobr>-oldgamespyprotocol 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <nobr>-restartdelay 1..n</td>
|
||||
<td> <center>5 </td>
|
||||
<td> In seconds. How long NWNX will wait before it restarts the server.</td>
|
||||
<td> <nobr>-restartdelay 5</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h4>NWNX.INI file</h4>
|
||||
|
||||
In adddition to the command line options, you can also set configuration
|
||||
parameters in the [NWNX] section of the NWNX.INI file, which should be in the
|
||||
same directory as NWNX2.EXE is. The following parameters are understood by the
|
||||
main program:
|
||||
|
||||
<pre>
|
||||
ServerPort = 5121
|
||||
ModuleName = "aps_demo"
|
||||
WatchdogProcess = yes
|
||||
UpdateIntervalProcess = 5
|
||||
WatchdogGamespy = no
|
||||
UpdateIntervalGamespy = 20
|
||||
GamespyRetries = 5
|
||||
OldGamespyProtocol = no
|
||||
RestartDelay = 5
|
||||
</pre>
|
||||
|
||||
(the values shown here are the default values).
|
||||
|
||||
<p>These values can be overriden by command line parameters, so you could put
|
||||
most of your default options into the INI file, and specify special options
|
||||
(e.g. -port) on the command line.
|
||||
|
||||
<a name="VI"></a>
|
||||
<h3>VI. FAQ & Troubleshooting </h3>
|
||||
|
||||
<p><b>Q. What is NWNX?</b><br>
|
||||
|
||||
A. NWNX2 is a program that loads the NWN server and injects the functionality
|
||||
contained in the various NWNX plugins into the server. Setting special string
|
||||
variables using NWScript triggers the NWNX requests. The resulting data can
|
||||
be read with the usual string functions.
|
||||
|
||||
<p><b>Q.What are the system Requirements for NWNX?</b><br>
|
||||
A. NWNX currently works with all Windows operating systems. If your system
|
||||
processor can handle running Neverwinter Nights, it can more than handle NWNX.
|
||||
|
||||
<p><b>Q. Will there be a LINUX port?</b><br>
|
||||
A. We have a version of NWNX2 for Linux available. Refer to
|
||||
<a href="http://sourceforge.net/projects/apsnwnx/"> our sourceforge page</a>.
|
||||
|
||||
<p><b>Q. Since NWNX is running the server as a child process, does the parent also have crash monitoring so it can
|
||||
auto-reboot the server if it crashes?</b><br>
|
||||
A. If the child process crashes or becomes unresponsive to network traffic, NWNX will reboot it.
|
||||
|
||||
<p><b>Q. Will I still be able to start my server up with firedaemon(or any other server crash utility)?</b><br>
|
||||
A. NWNX will restart the server if needed. Firedaemon may possibly be able to restart NWNX instead of
|
||||
the server, but we have not looked into this at all.
|
||||
|
||||
<p><b>Q. Any chance the source code will be open sourced?</b><br>
|
||||
A. Shortly after the initial release, the complete source code was released as part of the distribution of APS/NWNX2.
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1,108 +0,0 @@
|
||||
Changelog for APS/NWNX
|
||||
|
||||
NWNX Core 2.7-beta4
|
||||
|
||||
Changelog:
|
||||
2.7-beta4 (07.05.2008)
|
||||
- [Linux/Win32] Fixed compatibility problems with Hashset plugin
|
||||
|
||||
2.7-beta3 (28.01.2008)
|
||||
---
|
||||
- [Linux] Fixed a bug in CNWNXBase::Log function.
|
||||
|
||||
2.7-beta2 (15.04.2007)
|
||||
- [Linux/Win32] Added dynamic allocation for results (= no more need for spacers)
|
||||
- [Linux] Improved the INI parser
|
||||
- [Win32] Added debuglevel, confKey variables to NWNXBase (the main plugin class)
|
||||
- [Linux/Win32] Added OBJECT_INVALID constant
|
||||
|
||||
2.7-beta1 (10.03.2007)
|
||||
- [Linux/Win32] Hooked GetLocalObject, added OnRequestObject to NWNXBase
|
||||
|
||||
|
||||
Previous Version Notes
|
||||
* 14.01.2005: v.2.6.1
|
||||
- Added RestartDelay parameter
|
||||
|
||||
* 11.01.2005: v.2.6.0
|
||||
- Added INI File support to main program and plugins
|
||||
|
||||
* 07.12.2004: v2.5.4
|
||||
- Split NWNX main program and plugins into separately downloadable packages
|
||||
- Upgrade to MadCodeHookLib version 2.1a
|
||||
- NWNX module loading stage won't be aborted if a module fails to load
|
||||
|
||||
* 31.12.2003: v2.5.3
|
||||
- NWNX_PROFILER: The timeing measurement should be more accurate now. (v1.2)
|
||||
- NWNX_PROFILER: Updated for NWN 1.61, now hooking a single function in the server instead of two
|
||||
- NWNX_FUNCTIONS: SetStolenFlag_() removed, since it is now a standard function
|
||||
- APS: Changed names of location and vector functions in aps_include to avoid duplicate function names
|
||||
- NWNX: Fixed a rare crash bug (%-signs in query strings)
|
||||
- NWNX: Fixed a bug where NWNX would crash with huge query strings (>1024 bytes)
|
||||
- NWNX_HASHSET: New module that offers an advanced data structure (v1.0)
|
||||
|
||||
* 16.10.2003: v2.5.2
|
||||
- NWNX_PROFILER: Now logs even nested scripts and got some performance optimizations (v1.1)
|
||||
- NWNX_PROFILER: Functions called directly with DelayCommand() are now logged too (v1.1)
|
||||
|
||||
* 29.09.2003: v2.5.1
|
||||
- NWNX2: Updated gamespy watchdog to work with NWN version 1.32
|
||||
- NWNX2: New command line switch -oldgamespyprotocol for pre-1.32 servers
|
||||
- NWNX2: Fixed command line switch -gamespyretries which actually did not work
|
||||
|
||||
* 12.09.2003: v2.5.0.1
|
||||
- NWNX2: Fixed a small problem that might prevent NWNX from restarting the server
|
||||
|
||||
* 05.09.2003: v2.5
|
||||
- NWNX2: Introduced new design by Jeroen: NWNX plugins
|
||||
- NWNX2: Fixed a problem where server name was not set correctly
|
||||
- NWNX2: Fixed unusual handling of quotation marks in the command line
|
||||
- NWNX_FUNCTIONS: New module that offers some new functions for NWScript (v0.1)
|
||||
- NWNX_PROFILER: New module that helps profiling scripts (v1.0)
|
||||
- Released v2.5 to the public
|
||||
|
||||
* 18.06.2003: v2.03
|
||||
- NWNX2: Added NWNX specific command line options
|
||||
- NWNX2: New watchdog type "Gamespy"
|
||||
|
||||
* 16.03.2003: v2.02
|
||||
- NWNX2: Source code released, as usual licensed under the GPL
|
||||
|
||||
* 04.03.2003: v2.01
|
||||
- Fixed a potential crash in NWNX2
|
||||
|
||||
* 01.03.2003: v2.00
|
||||
- First release of NWNX2
|
||||
- Updated APS to support new functionality of NWNX2
|
||||
|
||||
* 17.02.2003: v1.23
|
||||
- NWNX: licensed under the GPL, source code is included now.
|
||||
- NWNX: NWNX can attach to the nwnserver instead of starting it in debug mode
|
||||
|
||||
* 07.02.2003: v1.22
|
||||
- APS: Fixed SetPersistentString (quotes around expiration parameter removed)
|
||||
- NWNX: Added some statistics (counters for requests and sql errors)
|
||||
- NWNX: SQL error messages are printed on the NWNX console now
|
||||
- NWNX: Added support for italian version of NWN
|
||||
- NWNX: Code cleanup
|
||||
|
||||
* 04.02.2003: v1.21
|
||||
- Added code to APS and NWNX that prevents potential startup problems
|
||||
- Fixed a problem in NWNX that may cause problems after a server crashed
|
||||
|
||||
* 31.01.2003: v1.12
|
||||
- Fixed a potential problem in the Extender that may cause problems after the
|
||||
server crashed
|
||||
|
||||
* 30.01.2003: v1.11
|
||||
- Added MySQL create table statement to persistent container demo
|
||||
- Modified MySQL create table statement in aps_demo slightly (column expire)
|
||||
- Made some minor modifications to the documentation
|
||||
|
||||
* 29.01.2003: v1.1
|
||||
- APS: Fixed SetPersistent* iExpiration parameter to default 0
|
||||
- NWNX: Added support for non-english languages (Spanish, German, French)
|
||||
- Made some minor modifications to the documentation
|
||||
|
||||
* 28.01.2003: v1.0
|
||||
- initial release
|
@@ -1,216 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
|
||||
<head>
|
||||
<title>PRC Server Pack 1.8.3</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<h1>PRC Server Pack Install</h1>
|
||||
|
||||
<p>The server pack contains many useful utilities for running a server with the PRC. It is available as a Windows installer or a rar archive for manual installation. This covers manually installing the server pack and what to do with the components. While it is designed for a server running on Windows, the server pack is still useful for Linux servers because it contains the precacher.</p>
|
||||
|
||||
<p>The current version of the server pack is 1.8.3.</p>
|
||||
|
||||
<!--more-->
|
||||
|
||||
<h2>Why Do a Manual Install?</h2>
|
||||
|
||||
<ul>
|
||||
<li>The Windows installer only works on a PC running Windows and that has NWN installed, so is no use for:
|
||||
<ul>
|
||||
<li>Other operating systems</li>
|
||||
<li>PCs without NWN installed</li>
|
||||
<li>The standalone server (it looks for registry entries the server doesn't create)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>It includes utilities you either don't need or use already</li>
|
||||
<li>It makes its own registry entries</li>
|
||||
</ul>
|
||||
|
||||
<h2>Installing the Server Pack - File List</h2>
|
||||
|
||||
<p>If you have a previous version of the server pack, uninstall that first. Download and unpack the rar file. It should contain the following:
|
||||
|
||||
<ul>
|
||||
<li>NWNX 2.6.1</li>
|
||||
<li>NWNX core 2.7-beta4</li>
|
||||
<li>NWNX-ODBC 0.9.2.5</li>
|
||||
<li>NWNX-Letoscript 03+build 24</li>
|
||||
<li>NWNX-Profiler 1.62</li>
|
||||
<li>SQLite 3.7.10</li>
|
||||
<li>Precacher (prc.jar, erf.exe, batch files to run it)</li>
|
||||
<li>documentation</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</p>
|
||||
|
||||
<h2>Installing the Server Pack - NWNx</h2>
|
||||
|
||||
<p>The server pack contains NWNx, various NWNx plugins and the NWNx documentation. Further information and the Linux binaries can be found on the <a href="http://www.nwnx.org" title="NWNx">NWNx site</a>. To install the NWNx core, put the following files in your NWN directory:
|
||||
|
||||
<ul>
|
||||
<li>nwnx2.exe</li>
|
||||
<li>nwnx.ini</li>
|
||||
<li>madCHook.dll</li>
|
||||
<li>nwnx-module.dll</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>That's it - installed. Look at nwnx.ini to configure it. The default .ini is usually fine, all you need to do is add the name of the module to load in the right place <strong>leaving out the .mod extension</strong> eg. <br />
|
||||
<code>Module = "MyModule"</code></p>
|
||||
|
||||
<p>The most common NWNx plugins are included in the server pack. While they are optional, the Conversation Character Creator <em>requires</em> the ODBC (database) and Letoscript plugins to work. </p>
|
||||
|
||||
<h3>ODBC Plugin (nwnx_odbc.dll)</h3>
|
||||
|
||||
<p>This provides the database connectivity. The <a href="http://www.nwnx.org/index.php?id=doc_odbc2" title="nwnx odbc plugin docs">online documentation</a> for the plugin covers pretty much everything. There's a copy of it in the server pack (nwnx_odbc2.html). The PRC scripts include the APS functions in inc_2dacache.nss and the initialisation function is already in the PRC's module load event script. Therefore there is no need to import the APS erf.</p>
|
||||
|
||||
<p>To use MySQL with the ODBC plugin, you need to download it from the <a href="http://dev.mysql.com/downloads/mysql/5.1.html#downloads" title="MySQL downloads page">MySQL website</a>. Follow their install instructions. If using their Windows installer, the defaults are generally ok, but check the option to add mySQL to the PATH variable. You'll only have to add it later otherwise. Also see Appendix A: Creating a NWN user and database.</p>
|
||||
|
||||
<h3>LetoScript Plugin (LetoScript.dll, nwnx_leto.dll)</h3>
|
||||
|
||||
<p>The server pack comes with LetoScript version 3+24, which uses the Unicorn syntax. For the LetoScript functions to work, the server needs to be using servervault characters - strangely enough Letoscript can't edit files on a remote computer. Also be aware that LetoScript works out the bic filename by using the first 16 characters of the PC's first name + last name.</p>
|
||||
|
||||
<h3>Profiler Plugin (nwnx_profiler.dll)</h3>
|
||||
|
||||
<p>The plugin profiles running scripts, logging how often a script has been called and how much time it took to complete. The <a href="http://www.nwnx.org/index.php?id=doc_profiler" title="nwnx profiler plugin docs">online documentation</a> explains how it can be used. There's also a copy of it in the server pack (nwnx_profiler.html). It's not required for any PRC functions, but it's very useful.</p>
|
||||
|
||||
<h2>Installing the Server Pack - The Precacher</h2>
|
||||
|
||||
<h3>Why Bother?</h3>
|
||||
|
||||
<p>Using the NWNx database as the 2da cache is <em>required</em> for the Conversation Character Creator to work.</p>
|
||||
|
||||
<p>In a single player game, the PRC scripts read 2da data from the Bioware database (that's what the PRC_DATA.xxx files are for). For the Conversation Character Creator, the Bioware one isn't really fast enough, so the 2das for character creation are stored in the database used by NWNx. The precacher reads the PRC and some Bioware 2das into the database as doing this while playing causes the game to become unresponsive.</p>
|
||||
|
||||
<h3>Running the precacher on Windows</h3>
|
||||
|
||||
<p>First, install the PRC, then put the following files in the main NWN install directory:
|
||||
<ul>
|
||||
<li>7za.exe</li>
|
||||
<li>erf.exe</li>
|
||||
<li>bioware2das.7z</li>
|
||||
<li>prc.jar (the precacher)</li>
|
||||
<li>Either precacher sqlite prc.bat or precacher mysql.bat, depending on which database you are using with NWNx</li>
|
||||
<li>sqlite.exe if using sqlite</li>
|
||||
</ul>
|
||||
|
||||
<p>Double click on the appropriate batch file (precacher sqlite prc.bat for sqlite, precacher mysql.bat for mySQL).</p>
|
||||
|
||||
<h3>Running the precacher on Linux</h3>
|
||||
|
||||
<p>First, in the directory where you extracted prc.jar, create a directory called precacher2das. Add the following files to the precacher2das directory:
|
||||
|
||||
<ul>
|
||||
<li>extract Bioware 2da files from bioware2das.7z</li>
|
||||
<li>extract the 2da files from prc_2das.hak and prc_race.hak, overwriting any duplicates</li>
|
||||
</ul>
|
||||
|
||||
<p>Using the command line, go to the directory prc.jar is in and enter: <code>java -Xmx100m -jar prc.jar 2datosql precacher2das MySQL</code></p>
|
||||
|
||||
<p>Note: this method will also work for Windows if you don't want to use the batch file.</p>
|
||||
|
||||
<h3>Note for modules using custom content</h3>
|
||||
|
||||
<p>If you are using custom content that modifies 2das used by the conversation character creator, then those 2das will need to be used by the precacher. If the default ones are used, the custom content will not show up in the ConvoCC (e.g. to get custom appearances to show up as options, you would need to precache using your custom appearance.2da instead of the default Bioware one).</p>
|
||||
|
||||
<p>The convoCC uses the following 2das:
|
||||
<ul>
|
||||
<li>appearance.2da</li>
|
||||
<li>classes.2da</li>
|
||||
<li>cls_atk_*.2da</li>
|
||||
<li>cls_bfeat_*.2da</li>
|
||||
<li>cls_feat_*.2da</li>
|
||||
<li>cls_pres_*.2da</li>
|
||||
<li>cls_savthr_*.2da</li>
|
||||
<li>cls_skill_*.2da</li>
|
||||
<li>cls_spgn_*.2da</li>
|
||||
<li>cls_spkn_*.2da</li>
|
||||
<li>colours.2da (for the palette colour names)</li>
|
||||
<li>domains.2da</li>
|
||||
<li>feat.2da</li>
|
||||
<li>hen_companion.2da</li>
|
||||
<li>hen_familiar.2da</li>
|
||||
<li>portraits.2da</li>
|
||||
<li>racialappearance.2da (optional, used to restrict appearance choices in the convocc)</li>
|
||||
<li>racialtypes.2da</li>
|
||||
<li>race_feat_*.2da</li>
|
||||
<li>skills.2da</li>
|
||||
<li>soundset.2da</li>
|
||||
<li>spells.2da</li>
|
||||
<li>tailmodel.2da</li>
|
||||
<li>wingmodel.2da</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<h2>Installing the Server Pack - Making the 2DA Cache Database</h2>
|
||||
|
||||
<h3>Using sqlite</h3>
|
||||
|
||||
<p>After the precacher has finished, a file called sqlite.db will have been created. This is the database and it just needs moving to the NWN install directory on the server.</p>
|
||||
|
||||
<h3>Using mySQL</h3>
|
||||
|
||||
<p>This assumes mySQL is in the PATH for Windows. The precacher creates a file called out.sql, which needs moving to the server where the mySQL database is going to be created.</p>
|
||||
|
||||
<ol>
|
||||
<li>open a command prompt</li>
|
||||
<li>go to the directory you put out.sql in</li>
|
||||
<li>type: <code>mysql -u user -p databasename < out.sql > out.log</code> (replace the user and databasename with whatever it should be)</li>
|
||||
<li>enter the password when prompted</li>
|
||||
</ol>
|
||||
|
||||
<p>For Linux, the command line is:<br />
|
||||
<code>cat out.sql| mysql -u user -p databasename</code></p>
|
||||
|
||||
<p>There are several arguments that mysql takes, eg -u username and –user=username are equivalent, see the <a href="http://dev.mysql.com/doc/refman/5.1/en/mysql-command-options.html" title="MySQL 5.1 Reference Manual :: 8.6.1 mysql Options">MySQL manual</a>.</p>
|
||||
|
||||
<p>The log file will be empty, but it stops mySQL echoing a confirmation after every line of the sql file (it has a lot of lines) and it stops if it encounters an error.</p>
|
||||
|
||||
<p>Note: the Linux version of NWNx only has MySQL support, also there is no Linux version of sqlite.</p>
|
||||
|
||||
<h2>That's It</h2>
|
||||
|
||||
<p>Suggestions please, particularly if something's missing or incorrect.</p>
|
||||
|
||||
<h3>Except for the mini FAQ</h3>
|
||||
|
||||
<p>Q1. I don't know how to run an installer/open a command prompt/change directory etc. Why didn't you include that in the instructions?</p>
|
||||
<p>A. If the instructions covered every detail, they would be huge. Try the NWNx and MySQL documentation or the PRC forums to get help for anything not covered here.</p>
|
||||
|
||||
<h2>Appendix A: Creating a NWN user and database</h2>
|
||||
|
||||
<p>To use the NWNx database plugin with MySQL, you need to create:
|
||||
<ul>
|
||||
<li>a user for the NWN server/NWNx to access the database with</li>
|
||||
<li>a database</li>
|
||||
</ul></p>
|
||||
|
||||
<p>There is an example setup file (newMySQLinstall.sql) to to this for you. It will create a database and a user that has rights
|
||||
to read and modify that database. You should edit the file to change the example password to something sensible ("password" is not a
|
||||
sensible password!). The username and database name are fine to be left as is for most setups.</p>
|
||||
|
||||
<p>To get the MySQL server to read newMySQLinstall.sql file, you should do the following:
|
||||
<ol>
|
||||
<li>open a command prompt</li>
|
||||
<li>go to the directory you put newMySQLinstall.sql in</li>
|
||||
<li>type: <code>mysql -u root -p < newMySQLinstall.sql</code></li>
|
||||
<li>enter the password when prompted</li>
|
||||
</ol>
|
||||
</p>
|
||||
|
||||
<p>You usually need to log in as root to create a user and a database. On Windows, you need to add MySQL's bin directory to the PATH variable unless you did that already.</p>
|
||||
|
||||
<h2>Credits</h2>
|
||||
|
||||
<p>The ODBC and profiler plugins are from <a href="http://www.nwnx.org/index.php?id=nwnx2" title="plugin download page">nwnx.org</a> and virusman's site (see <a href="http://www.nwnx.org/phpBB2/viewtopic.php?t=1141" title="Windows NWNX2 Plugins list">this NWNx forum thread</a>)
|
||||
, the LetoScript plugin from <a href="http://sourceforge.net/projects/leto/">Project Leto's sourceforge site</a>. SQLite is avaliable from <a href="www.sqlite.org">www.sqlite.org</a>. The Precacher is based on a version made for the PRC by Yuritch, but rewritten into java by the PRC.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1,39 +0,0 @@
|
||||
PRC Server Pack v1.8
|
||||
|
||||
This is an server package for the PRC, avalibale in self-install and manual-install editions. This should only be installed after the main PRC packages. To make full use of this you should be using PRC 3.2 or higher.
|
||||
|
||||
More detailed install information in server_pack_install.html, mostly useful if doing a manual install.
|
||||
|
||||
This package includes:
|
||||
|
||||
NWNX 2.6.1
|
||||
NWNX-core 2.7-beta4 (this is the dll)
|
||||
NWNX-ODBC 0.9.2.5
|
||||
NWNX-Letoscript 03+build 24
|
||||
NWNX-Profiler 1.62
|
||||
SQLite 3.7.10
|
||||
Precacher part of prc.jar
|
||||
|
||||
You do not need to download anything else, but for reference:
|
||||
NWNX is avaliable from www.nwnx.org.
|
||||
NWNX core, NWNX profiler and NWNX-ODBC are available from Virusman's site (see http://www.nwnx.org/phpBB2/viewtopic.php?t=1141)
|
||||
NWNX-Letoscript is avaliable from http://sourceforge.net/projects/leto
|
||||
Source code for NWNX and its plugins is available from the above sites.
|
||||
SQLite is avaliable from www.sqlite.org.
|
||||
The Precacher is based on a version made for the PRC by Yuritch, but rewritten into java by the PRC. As a .jar file its source code and the source code for sqlite are included in the .jar.
|
||||
|
||||
For full instructions, see the PRC Web site http://www.nwn2prc.com/index.php?location=manual . In particular see the PRC Server Pack installation instructions (PRC_ServerPack_Install.html) and http://www.nwn2prc.com/index.php?location=manual&lang=en§ion=installation&page=prc_server_pg01 (these are a little out of date but may be useful).
|
||||
|
||||
Changelog
|
||||
v1.8.3 Updated Changelog files. Updated PRC.JAR precacher file to be compatible with latest version of SQLite; Provided latest versions of sqlite.exe and nwnx-odbc.dll. Updated batch scripting and installation files.
|
||||
v1.8 Removed NWNX-InvFixpl as no longer needed. Removed linux nwnx as there's now a precompiled binary (see http://www.nwnx.org/phpBB2/viewtopic.php?t=1038).
|
||||
v1.7 Installation instructions added, plus precacher is now much faster
|
||||
v1.6 Removed a few unneeded bioware 2das, updated rest to NWN 1.68, added NWNx for Linux to the manual-install version
|
||||
v1.3 New version to go with PRC 3.0c & NWN 1.67
|
||||
v1.2 Replaced Yuriched precacher with a java version
|
||||
Removed many bioware 2das because they arent needed and dont meet biowares specifications
|
||||
v1.1 Fixed issue with incorect version of SQLite
|
||||
Added SSed step to filter output from precacher to be SQLite compatible
|
||||
Added bioware 2das to the cacher
|
||||
Added override\directory.2da creation
|
||||
v1.0 Initial Release
|
@@ -1,37 +0,0 @@
|
||||
rd /s /q precacher2das
|
||||
mkdir precacher2das
|
||||
7za x bioware2das.7z -oprecacher2das
|
||||
erf -x hak\prc_2das.hak
|
||||
erf -x hak\prc_race.hak
|
||||
copy cls_feat*.2da precacher2das\*.2da
|
||||
copy cls_skill*.2da precacher2das\*.2da
|
||||
copy race_feat*.2da precacher2das\*.2da
|
||||
copy spells.2da precacher2das\*.2da
|
||||
copy racialappear.2da precacher2das\*.2da
|
||||
copy racialtypes.2da precacher2das\*.2da
|
||||
copy classes.2da precacher2das\*.2da
|
||||
copy feat.2da precacher2das\*.2da
|
||||
copy domains.2da precacher2das\*.2da
|
||||
copy appearance.2da precacher2das\*.2da
|
||||
copy portraits.2da precacher2das\*.2da
|
||||
copy soundset.2da precacher2das\*.2da
|
||||
copy wingmodel.2da precacher2das\*.2da
|
||||
copy tailmodel.2da precacher2das\*.2da
|
||||
copy gender.2da precacher2das\*.2da
|
||||
copy hen_companion.2da precacher2das\*.2da
|
||||
copy hen_familiar.2da precacher2das\*.2da
|
||||
copy custom2das\*.2da precacher2das\*.2da
|
||||
del *.2da
|
||||
del *.nss
|
||||
del *.ncs
|
||||
java -Xmx100m -jar prc.jar 2datosql precacher2das MySQL
|
||||
rd /s /q precacher2das
|
||||
@pause
|
||||
|
||||
rem del 7za.exe
|
||||
rem del erf.exe
|
||||
rem del bioware2das.7z
|
||||
rem del prc.jar
|
||||
rem del sqlite.exe
|
||||
rem del Precacher_SQLite.bat
|
||||
rem del Precacher_MySQL.bat
|
@@ -1,31 +0,0 @@
|
||||
rd /s /q precacher2das
|
||||
mkdir precacher2das
|
||||
7za x bioware2das.7z -oprecacher2das
|
||||
erf -x hak\prc_2das.hak
|
||||
erf -x hak\prc_race.hak
|
||||
copy cls_feat*.2da precacher2das\*.2da
|
||||
copy cls_skill*.2da precacher2das\*.2da
|
||||
copy race_feat*.2da precacher2das\*.2da
|
||||
copy spells.2da precacher2das\*.2da
|
||||
copy racialappear.2da precacher2das\*.2da
|
||||
copy racialtypes.2da precacher2das\*.2da
|
||||
copy classes.2da precacher2das\*.2da
|
||||
copy feat.2da precacher2das\*.2da
|
||||
copy domains.2da precacher2das\*.2da
|
||||
copy appearance.2da precacher2das\*.2da
|
||||
copy portraits.2da precacher2das\*.2da
|
||||
copy soundset.2da precacher2das\*.2da
|
||||
copy wingmodel.2da precacher2das\*.2da
|
||||
copy tailmodel.2da precacher2das\*.2da
|
||||
copy gender.2da precacher2das\*.2da
|
||||
copy hen_companion.2da precacher2das\*.2da
|
||||
copy hen_familiar.2da precacher2das\*.2da
|
||||
copy custom2das\*.2da precacher2das\*.2da
|
||||
del *.2da
|
||||
del *.nss
|
||||
del *.ncs
|
||||
java -Xmx100m -jar prc.jar 2datosql precacher2das sqlite
|
||||
sqlite sqlite.db ".read out.sql"
|
||||
del out.sql
|
||||
rd /s /q precacher2das
|
||||
@pause
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,265 +0,0 @@
|
||||
; Script generated with the Venis Install Wizard
|
||||
|
||||
!ifndef PRCSPVERSION
|
||||
!define PRCSPVERSION "183"
|
||||
!endif
|
||||
|
||||
!ifndef PRCSPINSTALLVERSION
|
||||
!define PRCSPINSTALLVERSION "1.8.3"
|
||||
!endif
|
||||
|
||||
; Define your application name
|
||||
!define APPNAME "PRC Server Pack"
|
||||
!define APPNAMEANDVERSION "PRC Server Pack ${PRCSPINSTALLVERSION}"
|
||||
|
||||
; Enable LZMA compression for the smallest EXE.
|
||||
SetCompressor lzma
|
||||
|
||||
; Main Install settings
|
||||
Name "${APPNAMEANDVERSION}"
|
||||
InstallDir "$PROGRAMFILES\PRC Server Pack"
|
||||
InstallDirRegKey HKLM "Software\${APPNAME}" ""
|
||||
OutFile "Setup PRC Server ${PRCSPINSTALLVERSION}.exe"
|
||||
Var NWNVERSION
|
||||
Var NWNPATH
|
||||
Var NWNPRCPATH
|
||||
Var NWNMINVERSION
|
||||
|
||||
; Modern interface settings
|
||||
!include "MUI.nsh"
|
||||
|
||||
!define MUI_ABORTWARNING
|
||||
!define MUI_FINISHPAGE_TEXT "The PRC Server Pack is now installed. You can now run NWNX2 to start a server."
|
||||
|
||||
!define MUI_WELCOMEPAGE_TEXT "The PRC Server Pack will now be installed into your installation of Neverwinter Nights.\r\n\r\n\r\nNeverwinter Nights version $NWNVERSION is currently installed at $NWNPATH."
|
||||
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
!insertmacro MUI_UNPAGE_CONFIRM
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
|
||||
; Set languages (first is default language)
|
||||
!insertmacro MUI_LANGUAGE "English"
|
||||
!insertmacro MUI_RESERVEFILE_LANGDLL
|
||||
|
||||
Section "PRC Pack" Section1
|
||||
|
||||
; Set Section properties
|
||||
SetOverwrite on
|
||||
|
||||
; Set Section Files and Shortcuts
|
||||
SetOutPath "$NWNPATH\"
|
||||
File "LetoScript.dll"
|
||||
File "licence.txt"
|
||||
File "madCHook.dll"
|
||||
File "NWNX.ini"
|
||||
File "NWNX2.exe"
|
||||
File "NWNX2.html"
|
||||
File "NWNX2_Changelog.txt"
|
||||
File "nwnx_core_readme.txt"
|
||||
File "nwnx_funcs.dll"
|
||||
File "nwnx_funcs_readme.txt"
|
||||
File "nwnx_leto.dll"
|
||||
File "nwnx_odbc2.html"
|
||||
File "nwnx_odbc.dll"
|
||||
File "nwnx_odbc2_changelog.txt"
|
||||
File "nwnx-module.dll"
|
||||
File "nwnx_profiler.dll"
|
||||
File "nwnx_profiler.html"
|
||||
File "PRC_ServerPack_Install.html"
|
||||
File "PRC_ServerPack_ReadMe.txt"
|
||||
|
||||
;Precacher specifics
|
||||
File "Precacher_SQLite.bat"
|
||||
File "Precacher_MySQL.bat"
|
||||
File "sqlite.exe"
|
||||
File "7za.exe"
|
||||
File "bioware2das.7z"
|
||||
File "..\prc.jar"
|
||||
File "newMySQLinstall.sql"
|
||||
|
||||
;erf for manipulating hak/erf erc
|
||||
File "..\erf.exe"
|
||||
|
||||
CreateShortCut "$DESKTOP\NWNX2.lnk" "$NWNPATH\NWNX2.exe"
|
||||
CreateDirectory "$SMPROGRAMS\PRC Pack"
|
||||
CreateShortCut "$SMPROGRAMS\PRC Pack\NWNX2.lnk" "$NWNPATH\NWNX2.exe"
|
||||
CreateShortCut "$SMPROGRAMS\PRC Pack\Server Uninstall.lnk" "$NWNPRCPATH\PRCPack\Server Uninstall.exe"
|
||||
|
||||
; Now try to output the dir to a 2da file
|
||||
FileOpen $0 $NWNPATH\override\directory.2da w
|
||||
FileWrite $0 "2DA V2.0$\n"
|
||||
FileWrite $0 "$\n"
|
||||
FileWrite $0 " Dir$\n"
|
||||
FileWrite $0 "0 $\"$NWNPATH$\"$\n"
|
||||
FileClose $0
|
||||
|
||||
SectionEnd
|
||||
|
||||
Section -FinishSection
|
||||
|
||||
WriteRegStr HKLM "Software\${APPNAME}" "" "$NWNPRCPATH\PRCPack"
|
||||
WriteRegStr HKLM "Software\${APPNAME}" "PRCPath" "$NWNPRCPATH"
|
||||
WriteRegStr HKLM "Software\${APPNAME}" "NWNPath" "$NWNPATH"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME}"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$NWNPRCPATH\PRCPack\Server Uninstall.exe"
|
||||
WriteUninstaller "$NWNPRCPATH\PRCPack\Server Uninstall.exe"
|
||||
|
||||
SectionEnd
|
||||
|
||||
; Modern install component descriptions
|
||||
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
||||
!insertmacro MUI_DESCRIPTION_TEXT ${Section1} ""
|
||||
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
||||
|
||||
;Uninstall section
|
||||
Section Uninstall
|
||||
; Read the install paths from the registry. Then delete them.
|
||||
ReadRegStr $NWNPRCPATH HKLM "Software\${APPNAME}" "PRCPath"
|
||||
ReadRegStr $NWNPATH HKLM "Software\${APPNAME}" "NWNPath"
|
||||
|
||||
;Remove from registry...
|
||||
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}"
|
||||
DeleteRegKey HKLM "SOFTWARE\${APPNAME}"
|
||||
|
||||
; Delete self
|
||||
Delete "$NWNPRCPATH\PRCPack\Server Uninstall.exe"
|
||||
|
||||
; Delete Shortcuts
|
||||
Delete "$SMPROGRAMS\PRC Pack\NWNX2.lnk.lnk"
|
||||
Delete "$SMPROGRAMS\PRC Pack\Server Uninstall.lnk"
|
||||
Delete "$DESKTOP\NWNX2.lnk"
|
||||
|
||||
; Clean up PRC Pack
|
||||
Delete "$NWNPATH\LetoScript.dll"
|
||||
Delete "$NWNPATH\licence.txt"
|
||||
Delete "$NWNPATH\madCHook.dll"
|
||||
Delete "$NWNPATH\NWNX2.exe"
|
||||
Delete "$NWNPATH\NWNX2_Changelog.txt"
|
||||
Delete "$NWNPATH\NWNX2.html"
|
||||
Delete "$NWNPATH\NWNX.ini"
|
||||
Delete "$NWNPATH\nwnx_core_readme.txt"
|
||||
Delete "$NWNPATH\nwnx_funcs.dll"
|
||||
Delete "$NWNPATH\nwnx_funcs_readme.txt"
|
||||
Delete "$NWNPATH\nwnx_leto.dll"
|
||||
Delete "$NWNPATH\nwnx_odbc2.html"
|
||||
Delete "$NWNPATH\nwnx_odbc.dll"
|
||||
Delete "$NWNPATH\nwnx-module.dll"
|
||||
Delete "$NWNPATH\nwnx_odbc2_changelog.txt"
|
||||
Delete "$NWNPATH\nwnx_profiler.dll"
|
||||
Delete "$NWNPATH\nwnx_profiler.html"
|
||||
Delete "$NWNPATH\PRC_ServerPack_Install.html"
|
||||
Delete "$NWNPATH\PRC_ServerPack_ReadMe.txt"
|
||||
|
||||
|
||||
;Precacher specifics
|
||||
Delete "$NWNPATH\Precacher_SQLite.bat"
|
||||
Delete "$NWNPATH\Precacher_MySQL.bat"
|
||||
Delete "$NWNPATH\sqlite.exe"
|
||||
Delete "$NWNPATH\7za.exe"
|
||||
Delete "$NWNPATH\bioware2das.7z"
|
||||
Delete "$NWNPATH\prc.jar"
|
||||
Delete "newMySQLinstall.sql"
|
||||
|
||||
;erf for manipulating hak/erf erc
|
||||
Delete "$NWNPATH\erf.exe"
|
||||
|
||||
; Remove remaining directories
|
||||
RMDir "$SMPROGRAMS\PRC Pack"
|
||||
RMDir "$NWNPRCPATH\PRCPack\"
|
||||
|
||||
SectionEnd
|
||||
|
||||
; This function loads the NWN installed version and path from the registry
|
||||
; aborting the install if they are not there.
|
||||
Function .onInit
|
||||
; Minimum version of NWN that the installer requires, just set
|
||||
; the string to the part after the 1., i.e. for 1.62 set the
|
||||
; string to "62"
|
||||
StrCpy $NWNMINVERSION "69"
|
||||
|
||||
; Read the NWN intall path and installed version from the registry. If we get any
|
||||
; errors assume NWN is not installed correctly.
|
||||
ReadRegStr $NWNVERSION HKEY_LOCAL_MACHINE "SOFTWARE\BioWare\NWN\Neverwinter" "Version"
|
||||
ReadRegStr $NWNPATH HKEY_LOCAL_MACHINE "SOFTWARE\BioWare\NWN\Neverwinter" "Location"
|
||||
IfErrors noNWN
|
||||
|
||||
; Validate that NWNMINVERSION or later of NWN is installed.
|
||||
Push $0
|
||||
StrCpy $0 $NWNVERSION 2 2
|
||||
IntCmp $0 $NWNMINVERSION okNWN badNWN
|
||||
Pop $0
|
||||
|
||||
okNWN:
|
||||
; Validate that XP1 and XP2 are installed
|
||||
Push $0
|
||||
ClearErrors
|
||||
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\BioWare\NWN\Undrentide" "GUID"
|
||||
IfErrors noXP
|
||||
ClearErrors
|
||||
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\BioWare\NWN\Underdark" "GUID"
|
||||
IfErrors noXP
|
||||
Pop $0
|
||||
|
||||
; Get the parent directory of the $NWNPATH to use for the prc pack, since
|
||||
; the NWN install path always has the nwn\ folder which contains the game,
|
||||
; we want the PRC installer EXE and readme's to be parallel to that.
|
||||
Push $NWNPATH
|
||||
Call GetParent
|
||||
Pop $NWNPRCPATH
|
||||
|
||||
Return
|
||||
|
||||
badNWN:
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION "The PRC pack requires at least version 1.69 of NWN and HotU. You must upgrade NWN before installing the PRC pack."
|
||||
Abort
|
||||
|
||||
noXP:
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION "The PRC pack requires Shadows of Undrentide and Hordes of the Underdark to be installed. You must upgrade NWN before installing the PRC pack. If you installed the expansions by copying the files directly and did not install them using Bioware's setup applications, then you must reinstall using Bioware's setup applications."
|
||||
Abort
|
||||
|
||||
noNWN:
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION "Neverwinter Nights is not installed on your PC. The PRC pack cannot be installed until Neverwinter Nights is installed."
|
||||
Abort
|
||||
FunctionEnd
|
||||
|
||||
; GetParent
|
||||
; input, top of stack (e.g. C:\Program Files\Poop)
|
||||
; output, top of stack (replaces, with e.g. C:\Program Files)
|
||||
; modifies no other variables.
|
||||
;
|
||||
; Usage:
|
||||
; Push "C:\Program Files\Directory\Whatever"
|
||||
; Call GetParent
|
||||
; Pop $R0
|
||||
; ; at this point $R0 will equal "C:\Program Files\Directory"
|
||||
|
||||
Function GetParent
|
||||
|
||||
Exch $R0
|
||||
Push $R1
|
||||
Push $R2
|
||||
Push $R3
|
||||
|
||||
StrCpy $R1 0
|
||||
StrLen $R2 $R0
|
||||
|
||||
loop:
|
||||
IntOp $R1 $R1 + 1
|
||||
IntCmp $R1 $R2 get 0 get
|
||||
StrCpy $R3 $R0 1 -$R1
|
||||
StrCmp $R3 "\" get
|
||||
Goto loop
|
||||
|
||||
get:
|
||||
StrCpy $R0 $R0 -$R1
|
||||
|
||||
Pop $R3
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Exch $R0
|
||||
|
||||
FunctionEnd
|
||||
; eof
|
@@ -1,305 +0,0 @@
|
||||
; Script generated with the Venis Install Wizard
|
||||
|
||||
!ifndef PRCVERSION
|
||||
!define PRCVERSION ""
|
||||
!endif
|
||||
|
||||
!ifndef PRCINSTALLVERSION
|
||||
!define PRCINSTALLVERSION ""
|
||||
!endif
|
||||
|
||||
; Define your application name
|
||||
!define APPNAME "PRC Server Pack"
|
||||
!define APPNAMEANDVERSION "PRC Server Pack ${PRCINSTALLVERSION}"
|
||||
|
||||
; Enable LZMA compression for the smallest EXE.
|
||||
SetCompressor lzma
|
||||
|
||||
; Main Install settings
|
||||
Name "${APPNAMEANDVERSION}"
|
||||
InstallDir "$PROGRAMFILES\PRC Server Pack"
|
||||
InstallDirRegKey HKLM "Software\${APPNAME}" ""
|
||||
OutFile "Setup PRC Server ${PRCVERSION}.exe"
|
||||
Var NWNVERSION
|
||||
Var NWNPATH
|
||||
Var NWNPRCPATH
|
||||
Var NWNMINVERSION
|
||||
|
||||
; Modern interface settings
|
||||
!include "MUI.nsh"
|
||||
|
||||
!define MUI_ABORTWARNING
|
||||
!define MUI_FINISHPAGE_TEXT "The PRC Server Pack is now installed. You can now run NWNX2 to start a server."
|
||||
|
||||
!define MUI_WELCOMEPAGE_TEXT "The PRC Server Pack will now be installed into your installation of Neverwinter Nights.\r\n\r\n\r\nNeverwinter Nights version $NWNVERSION is currently installed at $NWNPATH."
|
||||
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
!insertmacro MUI_UNPAGE_CONFIRM
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
|
||||
; Set languages (first is default language)
|
||||
!insertmacro MUI_LANGUAGE "English"
|
||||
!insertmacro MUI_RESERVEFILE_LANGDLL
|
||||
|
||||
Section "PRC Pack" Section1
|
||||
|
||||
; Set Section properties
|
||||
SetOverwrite on
|
||||
|
||||
; Set Section Files and Shortcuts
|
||||
SetOutPath "$NWNPATH\"
|
||||
File "LetoScript.dll"
|
||||
File "licence.txt"
|
||||
File "madCHook.dll"
|
||||
File "NWNX2.exe"
|
||||
File "nwnx changelog.txt"
|
||||
File "NWNX.html"
|
||||
File "NWNX.ini"
|
||||
File "nwnx_leto.dll"
|
||||
File "nwnx_odbc2.html"
|
||||
File "nwnx_odbc.dll"
|
||||
File "nwnx-module.dll"
|
||||
File "nwnxsrc.exe"
|
||||
File "odbc2 changelog.txt"
|
||||
File "odbc2src.exe"
|
||||
File "erf.exe"
|
||||
|
||||
CreateShortCut "$DESKTOP\NWNX2.lnk" "$NWNPATH\NWNX2.exe"
|
||||
CreateDirectory "$SMPROGRAMS\PRC Pack"
|
||||
CreateShortCut "$SMPROGRAMS\PRC Pack\NWNX2.lnk" "$NWNPATH\NWNX2.exe"
|
||||
CreateShortCut "$SMPROGRAMS\PRC Pack\Server Uninstall.lnk" "$NWNPRCPATH\PRCPack\Server Uninstall.exe"
|
||||
|
||||
; Now try to output the dir to a 2da file
|
||||
FileOpen $0 $NWNPATH\override\directory.2da w
|
||||
FileWrite $0 "2DA V2.0$\n"
|
||||
FileWrite $0 "$\n"
|
||||
FileWrite $0 " Dir$\n"
|
||||
FileWrite $0 "0 $\"$NWNPATH$\"$\n"
|
||||
FileClose $0
|
||||
|
||||
SectionEnd
|
||||
|
||||
Section -FinishSection
|
||||
|
||||
WriteRegStr HKLM "Software\${APPNAME}" "" "$NWNPRCPATH\PRCPack"
|
||||
WriteRegStr HKLM "Software\${APPNAME}" "PRCPath" "$NWNPRCPATH"
|
||||
WriteRegStr HKLM "Software\${APPNAME}" "NWNPath" "$NWNPATH"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME}"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$NWNPRCPATH\PRCPack\Server Uninstall.exe"
|
||||
WriteUninstaller "$NWNPRCPATH\PRCPack\Server Uninstall.exe"
|
||||
|
||||
SectionEnd
|
||||
|
||||
; Modern install component descriptions
|
||||
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
||||
!insertmacro MUI_DESCRIPTION_TEXT ${Section1} ""
|
||||
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
||||
|
||||
;Uninstall section
|
||||
Section Uninstall
|
||||
; Read the install paths from the registry. Then delete them.
|
||||
ReadRegStr $NWNPRCPATH HKLM "Software\${APPNAME}" "PRCPath"
|
||||
ReadRegStr $NWNPATH HKLM "Software\${APPNAME}" "NWNPath"
|
||||
|
||||
;Remove from registry...
|
||||
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}"
|
||||
DeleteRegKey HKLM "SOFTWARE\${APPNAME}"
|
||||
|
||||
; Delete self
|
||||
Delete "$NWNPRCPATH\PRCPack\Server Uninstall.exe"
|
||||
|
||||
; Delete Shortcuts
|
||||
Delete "$SMPROGRAMS\PRC Pack\NWNX2.lnk.lnk"
|
||||
Delete "$SMPROGRAMS\PRC Pack\Server Uninstall.lnk"
|
||||
Delete "$DESKTOP\NWNX2.lnk"
|
||||
|
||||
; Clean up PRC Pack
|
||||
Delete "$NWNPATH\LetoScript.dll"
|
||||
Delete "$NWNPATH\licence.txt"
|
||||
Delete "$NWNPATH\madCHook.dll"
|
||||
Delete "$NWNPATH\NWNX2.exe"
|
||||
Delete "$NWNPATH\nwnx changelog.txt"
|
||||
Delete "$NWNPATH\NWNX.html"
|
||||
Delete "$NWNPATH\NWNX.ini"
|
||||
Delete "$NWNPATH\nwnx_leto.dll"
|
||||
Delete "$NWNPATH\nwnx_odbc2.html"
|
||||
Delete "$NWNPATH\nwnx.odbc.dll"
|
||||
Delete "$NWNPATH\nwnx-module.dll"
|
||||
Delete "$NWNPATH\nwnxsrc.exe"
|
||||
Delete "$NWNPATH\odbc2 changelog.txt"
|
||||
Delete "$NWNPATH\odbc2src.exe"
|
||||
Delete "$NWNPATH\erf.exe"
|
||||
Delete "$NWNPATH\Override\directory.2da"
|
||||
|
||||
|
||||
; Remove remaining directories
|
||||
RMDir "$SMPROGRAMS\PRC Pack"
|
||||
RMDir "$NWNPRCPATH\PRCPack\"
|
||||
|
||||
SectionEnd
|
||||
|
||||
; This function loads the NWN installed version and path from the registry
|
||||
; aborting the install if they are not there.
|
||||
Function .onInit
|
||||
; Minimum version of NWN that the installer requires, just set
|
||||
; the string to the part after the 1., i.e. for 1.62 set the
|
||||
; string to "62"
|
||||
StrCpy $NWNMINVERSION "66"
|
||||
|
||||
; Read the NWN intall path and installed version from the registry. If we get any
|
||||
; errors assume NWN is not installed correctly.
|
||||
ReadRegStr $NWNVERSION HKEY_LOCAL_MACHINE "SOFTWARE\BioWare\NWN\Neverwinter" "Version"
|
||||
ReadRegStr $NWNPATH HKEY_LOCAL_MACHINE "SOFTWARE\BioWare\NWN\Neverwinter" "Location"
|
||||
IfErrors noNWN
|
||||
|
||||
; Validate that NWNMINVERSION or later of NWN is installed.
|
||||
Push $0
|
||||
StrCpy $0 $NWNVERSION 2 2
|
||||
IntCmp $0 $NWNMINVERSION okNWN badNWN
|
||||
Pop $0
|
||||
|
||||
okNWN:
|
||||
; Validate that XP1 and XP2 are installed
|
||||
Push $0
|
||||
ClearErrors
|
||||
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\BioWare\NWN\Undrentide" "GUID"
|
||||
IfErrors noXP
|
||||
ClearErrors
|
||||
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\BioWare\NWN\Underdark" "GUID"
|
||||
IfErrors noXP
|
||||
Pop $0
|
||||
|
||||
; Get the parent directory of the $NWNPATH to use for the prc pack, since
|
||||
; the NWN install path always has the nwn\ folder which contains the game,
|
||||
; we want the PRC installer EXE and readme's to be parallel to that.
|
||||
Push $NWNPATH
|
||||
Call GetParent
|
||||
Pop $NWNPRCPATH
|
||||
|
||||
; Make sure that 1.1 or later of the .NET framework is installed.
|
||||
Call IsDotNETInstalled
|
||||
Pop $0
|
||||
StrCmp $0 1 foundNETFramework noNETFramework
|
||||
|
||||
foundNETFramework:
|
||||
Return
|
||||
|
||||
noNETFramework:
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION "The .NET Framework 1.1 is not installed on your PC. The PRC pack cannot be installed until the .NET Framwwork 1.1 is installed. Use Windows Update to install the .NET Framework 1.1 or later, or download it from the following web page."
|
||||
ExecShell open "http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&DisplayLang=en"
|
||||
Abort
|
||||
|
||||
badNWN:
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION "The PRC pack requires at least version 1.66 of NWN and HotU. You must upgrade NWN before installing the PRC pack."
|
||||
Abort
|
||||
|
||||
noXP:
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION "The PRC pack requires Shadows of Undrentide and Hordes of the Underdark to be installed. You must upgrade NWN before installing the PRC pack. If you installed the expansions by copying the files directly and did not install them using Bioware's setup applications, then you must reinstall using Bioware's setup applications."
|
||||
Abort
|
||||
|
||||
noNWN:
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION "Neverwinter Nights is not installed on your PC. The PRC pack cannot be installed until Neverwinter Nights is installed."
|
||||
Abort
|
||||
FunctionEnd
|
||||
|
||||
; GetParent
|
||||
; input, top of stack (e.g. C:\Program Files\Poop)
|
||||
; output, top of stack (replaces, with e.g. C:\Program Files)
|
||||
; modifies no other variables.
|
||||
;
|
||||
; Usage:
|
||||
; Push "C:\Program Files\Directory\Whatever"
|
||||
; Call GetParent
|
||||
; Pop $R0
|
||||
; ; at this point $R0 will equal "C:\Program Files\Directory"
|
||||
|
||||
Function GetParent
|
||||
|
||||
Exch $R0
|
||||
Push $R1
|
||||
Push $R2
|
||||
Push $R3
|
||||
|
||||
StrCpy $R1 0
|
||||
StrLen $R2 $R0
|
||||
|
||||
loop:
|
||||
IntOp $R1 $R1 + 1
|
||||
IntCmp $R1 $R2 get 0 get
|
||||
StrCpy $R3 $R0 1 -$R1
|
||||
StrCmp $R3 "\" get
|
||||
Goto loop
|
||||
|
||||
get:
|
||||
StrCpy $R0 $R0 -$R1
|
||||
|
||||
Pop $R3
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Exch $R0
|
||||
|
||||
FunctionEnd
|
||||
|
||||
; IsDotNETInstalled
|
||||
;
|
||||
; Usage:
|
||||
; Call IsDotNETInstalled
|
||||
; Pop $0
|
||||
; StrCmp $0 1 found.NETFramework no.NETFramework
|
||||
|
||||
Function IsDotNETInstalled
|
||||
Push $0
|
||||
Push $1
|
||||
Push $2
|
||||
Push $3
|
||||
Push $4
|
||||
|
||||
ReadRegStr $4 HKEY_LOCAL_MACHINE \
|
||||
"Software\Microsoft\.NETFramework" "InstallRoot"
|
||||
# remove trailing back slash
|
||||
Push $4
|
||||
Exch $EXEDIR
|
||||
Exch $EXEDIR
|
||||
Pop $4
|
||||
# if the root directory doesn't exist .NET is not installed
|
||||
IfFileExists $4 0 noDotNET
|
||||
|
||||
StrCpy $0 0
|
||||
|
||||
EnumStart:
|
||||
|
||||
EnumRegKey $2 HKEY_LOCAL_MACHINE \
|
||||
"Software\Microsoft\.NETFramework\Policy" $0
|
||||
IntOp $0 $0 + 1
|
||||
StrCmp $2 "" noDotNET
|
||||
StrCmp $2 "v1.0" EnumStart
|
||||
|
||||
StrCpy $1 0
|
||||
|
||||
EnumPolicy:
|
||||
|
||||
EnumRegValue $3 HKEY_LOCAL_MACHINE \
|
||||
"Software\Microsoft\.NETFramework\Policy\$2" $1
|
||||
IntOp $1 $1 + 1
|
||||
StrCmp $3 "" EnumStart
|
||||
IfFileExists "$4\$2.$3" foundDotNET EnumPolicy
|
||||
|
||||
noDotNET:
|
||||
StrCpy $0 0
|
||||
Goto done
|
||||
|
||||
foundDotNET:
|
||||
StrCpy $0 1
|
||||
|
||||
done:
|
||||
Pop $4
|
||||
Pop $3
|
||||
Pop $2
|
||||
Pop $1
|
||||
Exch $0
|
||||
FunctionEnd
|
||||
|
||||
; eof
|
@@ -1,443 +0,0 @@
|
||||
================================================
|
||||
Avlis Persistence System (APS) and NWNX2 Licence
|
||||
================================================
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
||||
|
||||
|
||||
======================================
|
||||
madCodeHookLibLight
|
||||
======================================
|
||||
|
||||
-------------------
|
||||
Freeware for non-commercial use
|
||||
Copyright (C) 1999 - 2000 Mathias Rauen, www.madshi.net, All Rights Reserved
|
||||
----------------------------------------------------------------------------
|
||||
This light version of madCodeHookLib has exactly the same features as the full
|
||||
version, but does not contain any sources. Furthermore the first instance of
|
||||
madCodeHookLibLight, that gets loaded at the same time, pops up a little info
|
||||
window for 1 second. If you don't like that, you can ask me for a modified
|
||||
madCodeHookLibLight version, which doesn't show that box. Please use "noBox.htm"
|
||||
for this purpose.
|
||||
-----------------
|
||||
|
||||
|
||||
SOFTWARE LICENSE AGREEMENT
|
||||
--------------------------
|
||||
You should carefully read the following terms and conditions before using this
|
||||
software. Unless you have a different license agreement signed by Mathias Rauen,
|
||||
your use of this software indicates your acceptance of this license agreement
|
||||
and warranty.
|
||||
-------------
|
||||
|
||||
|
||||
FREEWARE USE
|
||||
------------
|
||||
The madCodeHookLibLight package is freeware for non-commercial use and may be
|
||||
used freely, without bying a license, provided that:
|
||||
(1) I'm given proper credit for my work.
|
||||
(2) You do not claim that the library is written by you.
|
||||
(3) You do not use the library in commercial software (including shareware).
|
||||
(4) madCodeHookLibLight must not be transferred to any third party unless
|
||||
such third party receives a copy of this agreement and agrees to be bound
|
||||
by all of its terms and conditions.
|
||||
-----------------------------------------
|
||||
|
||||
|
||||
COMMERCIAL USE
|
||||
--------------
|
||||
Commercial use of madCodeHookLibLight is not allowed. If you want to use
|
||||
madCodeHookLib for commercial purposes you have to order the full madCodeHookLib
|
||||
package here:
|
||||
http://shareit1.element5.com/programs.html?productid=138883
|
||||
-----------------------------------------------------------
|
||||
|
||||
|
||||
RESTRICTIONS
|
||||
------------
|
||||
You must not use madCodeHookLibLight in any other product that directly or
|
||||
indirectly competes with madCodeHookLibLight. Specifically, you must not include
|
||||
madCodeHookLibLight as part of any code library, as source code or in compiled
|
||||
form. You must not provide any means by which your users could create, modify,
|
||||
or incorporate any part of this library into their own products.
|
||||
----------------------------------------------------------------
|
||||
|
||||
|
||||
DISCLAIMER
|
||||
----------
|
||||
This product and the accompanying files and documentation are distributes/sold
|
||||
"as is" and without warranties as to performance or merchantability or any other
|
||||
warranties whether expressed or implied. The user and/or licensee assume the
|
||||
entire risk as to the use of this product. The Author does not assume liability
|
||||
for the use of this product beyond the original purchase price (if applicable).
|
||||
In no event will the author be liable for additional direct or indirect damages
|
||||
including any lost profits, lost savings, or other incidental or consequential
|
||||
damages arising from any defects, or the use or inability to use this product,
|
||||
even if the Author has been advised of the possibility of such damages.
|
||||
-----------------------------------------------------------------------
|
||||
|
||||
|
||||
TITLE
|
||||
-----
|
||||
Title, ownership rights, and intellectual property rights in and to the software
|
||||
shall remain in the author. The software is protected by the copyright laws of
|
||||
Germany and international copyright treaties.
|
||||
---------------------------------------------
|
||||
|
||||
|
||||
CONTENT
|
||||
-------
|
||||
Title, ownership rights, and intellectual property rights in and to the content
|
||||
accessed through the software is the property of the applicable content owner
|
||||
and may be protected by applicable copyright or other law. This license gives
|
||||
you no rights to such content.
|
||||
------------------------------
|
||||
|
||||
|
||||
TERMINATION
|
||||
-----------
|
||||
This Agreement shall automatically terminate upon failure by you to comply with
|
||||
its terms, in which case you shall immediately discontinue the use of the
|
||||
software and shall within ten (10) days destroy all copies of the software.
|
||||
You may also terminate this Agreement at any time by destroying the software
|
||||
and all copies thereof.
|
||||
-----------------------
|
Binary file not shown.
@@ -1,11 +0,0 @@
|
||||
-- You only need this if you have a new mySQL install
|
||||
-- nwn server user
|
||||
-- assumes mysql is running on same computer as nwn server
|
||||
CREATE USER 'nwn'@'localhost';
|
||||
-- set the password
|
||||
-- see for why it is done like this http://dev.mysql.com/doc/refman/5.1/en/old-client.html )
|
||||
SET PASSWORD FOR 'nwn'@'localhost' = OLD_PASSWORD('password'); -- change this to a better password!!!
|
||||
-- make the database
|
||||
CREATE DATABASE nwn;
|
||||
-- let the nwn server read and modify it
|
||||
GRANT ALL ON nwn.* TO 'nwn'@'localhost';
|
Binary file not shown.
@@ -1,18 +0,0 @@
|
||||
NWNX Core 2.7-beta4
|
||||
|
||||
Changelog:
|
||||
2.7-beta4 (07.05.2008)
|
||||
- [Linux/Win32] Fixed compatibility problems with Hashset plugin
|
||||
|
||||
2.7-beta3 (28.01.2008)
|
||||
---
|
||||
- [Linux] Fixed a bug in CNWNXBase::Log function.
|
||||
|
||||
2.7-beta2 (15.04.2007)
|
||||
- [Linux/Win32] Added dynamic allocation for results (= no more need for spacers)
|
||||
- [Linux] Improved the INI parser
|
||||
- [Win32] Added debuglevel, confKey variables to NWNXBase (the main plugin class)
|
||||
- [Linux/Win32] Added OBJECT_INVALID constant
|
||||
|
||||
2.7-beta1 (10.03.2007)
|
||||
- [Linux/Win32] Hooked GetLocalObject, added OnRequestObject to NWNXBase
|
Binary file not shown.
@@ -1,25 +0,0 @@
|
||||
INSTALLATION INSTRUCTIONS
|
||||
|
||||
- Copy nwnx_funcs.dll into your main Neverwinter Nights folder (e.g.: "C:\Program Files\Neverwinter Nights\"
|
||||
|
||||
- Add nwnx_funcs.nss to your module (or include directory)
|
||||
|
||||
- Add the following lines to your nwnx.ini
|
||||
[FUNCS]
|
||||
;Number_of_Skills, the amount of skills from skills.2da (last row+1)
|
||||
Number_of_Skills=28
|
||||
|
||||
;debugLevel: 1 should only show basic information, 2 should include errors and 3 should log pretty much everything
|
||||
debugLevel=0
|
||||
|
||||
;Set this to 1 to use the CustomTrapGeometry functions
|
||||
HOOK_CustomTrapGeometry=1
|
||||
|
||||
;Hook for a new OnPlayerLeave event which runs before OnClientLeave
|
||||
;Makes it possible to retrieve information about the player object as usual (GetName, GetArea, etc)
|
||||
;In the onplayerleaving script, OBJECT_SELF is the player object about to leave
|
||||
HOOK_OnPlayerLeaving=1
|
||||
OnPlayerLeavingScript=onplayerleaving
|
||||
|
||||
|
||||
Dll compiled with Visual C++ 2008 Express
|
Binary file not shown.
@@ -1,107 +0,0 @@
|
||||
<P>
|
||||
<B>About NWNX-Leto</b>
|
||||
|
||||
<P>
|
||||
NWNX-Leto is a module (plugin) for NWNX2, allowing you to run LetoScript from NWScript. NWNX2 was developed by Ingmar Stieger (Papillon), papillon@blackdagger.com. You will need NWNX2 for NWNX-Leto to be of much use to you. NWNX now has its own <A href="http://www.nwnx.org">site</a>, including forums. (The majority of discussion on NWNX-Leto in particular is on the Leto <A href="http://weathersong.infopop.cc">forums</a>.)
|
||||
|
||||
<P>
|
||||
This is <B>build 03</b> of the plugin, with LetoScript support compiled in from <B>build 4.0.24</b> of the LetoScript engine. There has been some confusion about the difference between these two numbers / versions / DLLs. The difference between them is in fact quite simple:
|
||||
|
||||
<P>
|
||||
<B>nwnx_leto.dll/so</b> is bridge code that is written in C++ (MSVC on Windows, ANSI C on Linux) and accomodates the differences between NWNX's C++ code, and LetoScript's Delphi code. These differences are prototypical, and don't change from release to release - they may never change, for that matter. The code has nothing to do with the LetoScript engine itself, so you don't need a different version for Phoenix or Unicorn. Instead, you need a different LetoScript lib:
|
||||
|
||||
<P>
|
||||
<B>LetoScript.dll/so</b> is the entire LetoScript engine (the equivalent of Moneo) in a library. This is what the "+24" in the name means - this version of the library is the same code as for Moneo 4.0.24. (And <I>exactly</i> the same code, with but a wrapper around it so that NWNX!LETO commands can reach it.) If your code uses Phoenix syntax, you need build 18 of this library, instead, which is no longer supported or available on SourceForge (to clear up much confusion). If you need this library, <A href="mailto:dragon@weathersong.net">e-mail</a> me and I can send it to you, along with full source code.
|
||||
|
||||
<P>
|
||||
To summarize, each platform consists of two library files: DLLs for Windows, and SOs for Linux. If you aren't a developer, all you need to worry about is copying the files files for your platform into your NWN directory (where you have NWNX2 installed) in order to get it to "work".
|
||||
|
||||
<P>
|
||||
For the Windows platform, the files you need are nwnx_leto.dll, and LetoScript.dll.
|
||||
|
||||
<P>
|
||||
For the Linux platform, the files you need are nwnx_leto.so, and LetoScript.so. Note that nwnx_leto.so was compiled around the new features in beta 5 pre 2, so if you want to recompile it, you will need that source or better. <B>You will also need to initialize NWNX2 with "NWNX!INIT" "1" in your OnModuleLoad event.</b>
|
||||
|
||||
<P>
|
||||
NWNX-Leto will create a logfile, nwnx-leto.txt, which can provide you with clues in the event that the plugin does not start.
|
||||
|
||||
<P>
|
||||
The namespace for the plugin is LETO. The functions it currently supports are:
|
||||
|
||||
<P>
|
||||
<LI> <B>SCRIPT</b>, taking a LetoScript script as a parameter. Example:
|
||||
|
||||
<P>
|
||||
<PRE>
|
||||
void main()
|
||||
{
|
||||
SendMessageToAllDMs("Firing LetoScript test...");
|
||||
|
||||
string LetoTest;
|
||||
SetLocalString(GetModule(), "NWNX!LETO!SCRIPT", "<file:open BOB 'g:/nwn/localvault/bob.bic'><FirstName> <LastName>");
|
||||
LetoTest = GetLocalString(GetModule(), "NWNX!LETO!SCRIPT");
|
||||
|
||||
SendMessageToAllDMs("Result: #" + LetoTest + "#");
|
||||
}
|
||||
</pre>
|
||||
|
||||
<P>
|
||||
<LI> <B>SPAWN</b>, taking a LetoScript script as a parameter. Unlike SCRIPT, this creates a new thread that runs (simultaneously) in the background while your server goes on doing its business. Running a SCRIPT that takes 10 seconds to complete means your server will hang for 10 seconds while it waits for the script to complete. Running the same script as a SPAWN means the server doesn't hang at all, but the script runs "in the background" instead (and still takes 10 seconds to complete). The result you get back from SPAWN is the ThreadId created for your script. Record it! Unless you POLL for that ThreadId, the thread will hang around indefinitely, costing system resources, until NWNX is shut down. Note that SPAWN does not share the state that SCRIPT maintains. That is, you cannot operate on a handle that you have previously opened in a SCRIPT. (In fact, allowing SPAWN and QFORGET to share state with SCRIPT could have disastrous consequences, and force scripters using NWNX-Leto to write "thread safe" LetoScript!)
|
||||
|
||||
<P>
|
||||
<LI> <B>POLL</b>, taking a ThreadId as a parameter. The result will tell you whether this thread is still working, or has completed. You will get one of three results: "Error: ### not done." (### is your ThreadId) if the thread is still working, "Error: ..." for some other error (... is the exact error), or you will not get "Error:" at the beginning of the string, and instead you will get the result of your script. ZombieBench provides a very good example of how to use POLL correctly.
|
||||
|
||||
<P>
|
||||
<LI> <B>QFORGET</b>, taking a LetoScript script as a parameter. This is a "Queue and Forget" version of SPAWN. Like SPAWN, the script is queued (it will not run until all previous SPAWN and QFORGET scripts have completed), but you cannot POLL for a QFORGET thread, and upon completion the thread is automatically terminated. You would use QFORGET when you want to multithread a script, but you don't care what the results are, and you don't need to wait for it to complete to do something else (such as RCO). There is no result from QFORGET (just an empty string).
|
||||
|
||||
<P>
|
||||
<LI> <B>FFORGET</b>, taking a LetoScript script as a parameter. This is the "Fire and Forget" version of SPAWN, but unlike QFORGET, the thread is created and the script run <I>immediately</i>, rather than being put at the end of the queue. Although this sounds like a tempting alternative to QFORGET for a script you want completed quickly, <B>EXTREME CAUTION</b> must be exercised when using FFORGET. It is unstable and prone to cause exceptions in the script it runs. There should be no danger to NWNX itself - although even that isn't a guarantee.
|
||||
|
||||
<P>
|
||||
There are a lot of additional details on these mutli-threading functions. Please refer to the documentation for a much more in-depth explanation, and some examples. (If you prefer to learn by practical application, take a look at "zb_queue" in ZombieBench.)
|
||||
|
||||
<P>
|
||||
<LI> <B>LOG</b>, which takes a few parameters of its own, to control NWNX-Leto logging. Logging is disabled by default, because the current logging mechanism is hell on the NWN server, and can cause severe lag. Its use is suggested only for debugging. Turn it off for a live server!
|
||||
|
||||
<P>
|
||||
There are three params you can give to LOG, which are <I>Enable</i>, <I>Dir</i>, and <I>File</i>. Setting <I>Enable</i> to "true" or 1 will turn on logging. Likewise, "false" or 0 turns it off again. <I>Dir</i> and <I>File</i> tell NWNX-Leto where you want your logfile. You should probably specify at least a directory, though the filename is optional (defaults to letoscript_log.txt).
|
||||
|
||||
<P>
|
||||
Logging examples:
|
||||
|
||||
<P>
|
||||
<PRE>
|
||||
// Turn logging on:
|
||||
SetLocalString(GetModule(), "NWNX!LETO!LOG", "Enable=1, Dir=g:/nwn/leto/logs");
|
||||
// You can change the dir or file while logging is on:
|
||||
SetLocalString(GetModule(), "NWNX!LETO!LOG", "File=letoscript.log2.txt");
|
||||
// And this shuts it down:
|
||||
SetLocalString(GetModule(), "NWNX!LETO!LOG", "Enable=0");
|
||||
</pre>
|
||||
|
||||
<P>
|
||||
Remember that logging comes at a penalty. It involves some rather heavy file I/O, and should only be used for debugging cranky scripts (which is when you put those scripts in Moneo to effectively troubleshoot them). Leave it off for a production server.
|
||||
|
||||
<P>
|
||||
<B>Known limitations</b>
|
||||
|
||||
<P>
|
||||
<LI> The use of NWNX!LETO!SCRIPT is blocking. If your script takes 10 seconds to run, the entire server will seem "locked up" for those 10 seconds, same as with any other NWScript you run that takes 10 seconds to complete. Your players will think the server is lagging, of course. You can get around that with SPAWN / QFORGET, but...
|
||||
|
||||
<P>
|
||||
<LI> All of the multi-threading functions (SPAWN, QFORGET, FFORGET) are still pretty beta. In early tests, they were prone to cause exceptions in the script (that is, you will get an [EXCEPTION] result), and in such a random pattern that it was difficult to isolate and fix whatever the underlying problem was. This ESPECIALLY applies to FFORGET, which runs the extra risk of thread collision. Although some time has passed since early tests, it is difficult to say how many servers actually use multi-threaded LetoScript. Use with caution - and if you have experiences good or bad, I'd be interested in hearing about them.
|
||||
|
||||
<P>
|
||||
<B>Technical details</b>
|
||||
|
||||
<P>
|
||||
(These notes are old, and probably need updating.)
|
||||
|
||||
<P>
|
||||
There are two libraries (DLLs / SOs) involved because Leto and LetoScript are written in Delphi, whereas NWNX is written in C. This requires a bridge DLL be compiled in the native environment (MSVC on Windows), which is nwnx_leto.dll/so. The bridge DLL talks to the Delphi DLL, LetoScript.dll. Since I don't own a copy of MSVC, I wrote all of the source for nwnx_leto in Notepad, had a volunteer on the APS/NWNX Guild compile it for me (thanks Taryn Winterblade!) and then designed the LetoScriptDll library to talk to it. For Linux, I scoured Google for sufficient examples and then re-wrote the source to compile with gcc. There are still two libraries involved to keep it more aligned with the Windows release, and because a bridge design pattern is actually useful in terms of de-coupled development of each component.
|
||||
|
||||
<P>
|
||||
Note how the name of the Delphi library is "LetoScriptDll". This is so there is no confusion with the language, LetoScript, by calling it just "LetoScript". This means that compiling LetoScriptDll.dpr will give you LetoScriptDll.dll / libLetoScriptDll.so, however, and you MUST rename it to LetoScript.dll / LetoScript.so. nwnx_leto.dll/so is very specific about this, it wants a library named LetoScript.dll (on Windows) or LetoScript.so (on Linux).
|
||||
|
||||
<P>
|
||||
To recompile nwnx_leto.so and LetoScript.so, you will need the Linux NWNX source. Stick the files in your nwnx-leto-so-linux directory into a subdirectory of nwnx2 such as "letoscript", then edit configure.ac as necessary. Then run autoconf && ./configure && make && make install. If you need help or more information on this, please make a post on the weathersong forums.
|
Binary file not shown.
@@ -1,660 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title> APS/NWNX_ODBC Documentation </title>
|
||||
</head>
|
||||
|
||||
<body style="font-family:Arial,Verdana,sans-serif;">
|
||||
<h2>Avlis Persistence System</h2>
|
||||
|
||||
<h3>Table of Contents:</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td> <a href="#I">I.</a></td>
|
||||
<td> <a href="#I">Introduction - What does APS do?</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#II">II.</a></td>
|
||||
<td><a href="#II">Installing and updating APS</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#III">III.</a></td>
|
||||
<td><a href="#III">Setting up a database</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#IV">IV.</a></td>
|
||||
<td><a href="#IV">Customization</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#V">V.</a></td>
|
||||
<td><a href="#V">Speed comparison</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#VI">VI.</a></td>
|
||||
<td><a href="#VI">Troubleshooting</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<a name="I"></a>
|
||||
<h3>I. Introduction - What does APS/NWNX ODBC2 do?</h3>
|
||||
|
||||
<p>APS is a set of scripts written for Neverwinter Nights that work with NWNX2 to
|
||||
produce reliable persistence in a module. At the heart of the APS is
|
||||
an include file that lists a number of custom made functions for governing
|
||||
persistence. These functions can be used as is in your module or changed to
|
||||
suit your needs.
|
||||
|
||||
<p>Whenever a script work with persistent data, it calls our APS functions
|
||||
and the Extender pulls the query out of the memory of the NWN server. It then
|
||||
passes it to the database, and writes the result of the query back into the
|
||||
memory of the server. The database has been tested with MySQL, MS-SQL,
|
||||
PostgresSQL, Microsoft Access, and the internal SQL database engine so far. Conceivably, any database with a
|
||||
decent ODBC driver will work.
|
||||
|
||||
<p>We have included a demo module that illustrates how to use APS/NWNX ODBC2 and makes
|
||||
creating the database tables easy, and a second module demonstrating how
|
||||
persistent containers could be implemented.
|
||||
|
||||
<p><b>Licence</b><br> APS and NWNX2 ODBC2 are distributed unter the terms of the GNU
|
||||
GENERAL PUBLIC LICENSE included in <a href="../licence.txt">licence.txt</a>.
|
||||
|
||||
<a name="II"></a>
|
||||
<h3>II. Installing and updating APS</h3>
|
||||
|
||||
<h4>A. Installing the plugin</h4>
|
||||
|
||||
<p>Copy the file nwnx_odbc.dll to you NWN folder, and aps_demo.mod
|
||||
to your NWN module folder.
|
||||
|
||||
<h4>B. Importing the erf</h4>
|
||||
|
||||
<p>In order to be able to use the APS functions, you will need to import
|
||||
the aps_include file into your module.
|
||||
|
||||
<ol>
|
||||
<li>Place the file "aps2.erf" into the C:\Neverwinternights\NWN\erf directory.
|
||||
<li>In the toolset, open up the module into which you wish to install the
|
||||
scripts.
|
||||
<li>Under the File Menu, click Import. A window will pop up.
|
||||
<li>Make sure the contents of the C:\Neverwinternights\NWN\erf directory are
|
||||
showing in the window
|
||||
<li>Select "aps2.erf" from the list
|
||||
<li>Click Import and ignore any messages about missing resources (click Yes).
|
||||
</ol>
|
||||
|
||||
<p>The following scripts should now be imported: aps_onload, aps_include.
|
||||
|
||||
<h4>C. Updating from previous versions</h4>
|
||||
|
||||
<ul>
|
||||
<li>from ODBC v2.5 to ODBC2: Copy the new DLL into your NWN folder.
|
||||
Edit the database connection parameters in your nwnx.ini file (check the
|
||||
supplied example INI file what parameters can be used). Import the updated
|
||||
aps_include file (from ap2.erf) into your module.
|
||||
</ul>
|
||||
|
||||
<a name="III"></a>
|
||||
<h3>Setting up a database</h3>
|
||||
|
||||
<p>The first choice you have to make is what database you are going to use.
|
||||
We strongly suggest starting out with the internal SQL database (SQLite), which
|
||||
is one of the fastest and easiest options. It also comes with a prepared datase
|
||||
that is ready to go. Read the section "Configuration for the internal database" on
|
||||
how to set this up.
|
||||
|
||||
<p>If you are using MySQL, go to the section "Configuration for MySQL
|
||||
database". If you are using any other database with an ODBC driver, go
|
||||
to the section "Configuration for ODBC database".
|
||||
|
||||
<h4>3.a. Configuration for the internal database</h4>
|
||||
|
||||
The internal NWNX ODBC2 database is based on SQLite v3, which is a fast SQL
|
||||
compliant database that developers can package with their applications - and
|
||||
that is what we did ! The main benefits of SQLite for NWN users are twofold:
|
||||
|
||||
<ol>
|
||||
<li>It is fast.
|
||||
<li>It is easy to setup (zero configuration).
|
||||
</ol>
|
||||
|
||||
<p>Note: We recommend this type of database for single instance servers,
|
||||
meaning setups where only one NWN server is accessing the database.
|
||||
We recommend against using it in setups where multiple computers access
|
||||
the database simultaneously.
|
||||
|
||||
<p>Edit the nwnx.ini file and set the source= parameter to SQLite, and
|
||||
the file= parameter to the path and file where you want your database file:
|
||||
|
||||
<pre>
|
||||
[ODBC2]
|
||||
source = sqlite
|
||||
file = sqlite.db
|
||||
</pre>
|
||||
|
||||
<p>Note: Omitting the path like in the example above will put the database
|
||||
file into your NWN folder. If you want it somewhere else, set the file
|
||||
parameter to e.g. c:\temp\nwn.db.
|
||||
|
||||
<p>Hint: One of the tools for working with the internal database is
|
||||
<a href="http://home.student.uu.se/frax0795/">SQLiteCC</a>. It is not
|
||||
needed to follow the setup instructions in this document, but will come in
|
||||
handy later.
|
||||
|
||||
<p>Advanced note: After opening the database file, an implicit transaction
|
||||
is started automatically, since SQLite is significantly faster when access to
|
||||
the database is happening inside a transaction. If you want to access the
|
||||
database concurrently, or if you want to handle transactions yourself, issue
|
||||
a COMMIT right after the call to SQLInit to commit the implicit transaction.
|
||||
|
||||
<h4>3.b. Configuration for MySQL database</h4>
|
||||
|
||||
<p>Below the various parameters are listed which are required in the
|
||||
configuration file nwnx.ini:
|
||||
|
||||
<ul>
|
||||
<li>Server: Either the name or IP address of the database system which you are
|
||||
using. Most of the time this will be your local machine: 'localhost'.
|
||||
<li>User/pwd: This is the username and password of the user which will be
|
||||
used to connect to the database. For security reasons it is best to
|
||||
create a special user which has only access to the nwn database.
|
||||
<li>DB: The database name.
|
||||
</ul>
|
||||
|
||||
<p>An example configuration file is displayed below. In this configuration you
|
||||
tell the plugin to use the direct mysql connection to the database nwn.
|
||||
This database resides on the localhost (same machine as NWN runs)
|
||||
and should be connected with user 'your_user' and password 'your_pwd'.
|
||||
|
||||
<pre>
|
||||
[ODBC2]
|
||||
source = mysql
|
||||
server = localhost
|
||||
user = your_user
|
||||
pwd = your_pwd
|
||||
db = nwn
|
||||
</pre>
|
||||
|
||||
<p>Note: If your MySQL installation is not on the same machine you are
|
||||
installing this plugin too, you will need to copy the library libmysql.dll to
|
||||
your NWN folder as well, or ODBC2 will complain about a missing module.
|
||||
|
||||
<h4>3.c. Configuration for ODBC database</h4>
|
||||
|
||||
<p>If you have a different database system than MySQL you will use
|
||||
the ODBC connection method. In this section we will describe
|
||||
the steps needed to setup your system correctly. In the description
|
||||
below we asume that you are using Windows XP or a similar system.
|
||||
|
||||
<ul>
|
||||
<li>Make sure your database system (including ODBC support) is installed
|
||||
and running correctly on your machine (with a remote database system you
|
||||
only need the ODBC drivers on your machine).
|
||||
<li>Create an ODBC datasource: in the Control Panel select
|
||||
Administrative Tools and then Data Sources (ODBC). In the System Tab
|
||||
click on Add, and fill in the required fields. When finished the
|
||||
datasource should appear in the list (if not, consult your database
|
||||
system manual).
|
||||
</ul>
|
||||
|
||||
Edit the nwnx.ini file and set the dsn= parameter to the name you
|
||||
have just entered, e.g.:
|
||||
|
||||
<pre>
|
||||
[ODBC2]
|
||||
source = odbc
|
||||
dsn = nwn
|
||||
</pre>
|
||||
|
||||
<h4>3.c. Creating the database tables</h4>
|
||||
|
||||
<p>Note: As there is an almost unlimited amount of different databases
|
||||
out there, we can not give detailed instructions for all of them. If you want
|
||||
to use a database server like MSSQL or PostgresSQL, try to follow the steps
|
||||
described below accordingly. If you are using the internal database, all tables have already been
|
||||
created for you (in the file sqlite.db).
|
||||
|
||||
<p>Make sure your database is up and running and that you have a
|
||||
database that is accessible to the ODBC2 plugin. In order to store data in it,
|
||||
you have to create some tables in the database. The included module
|
||||
"aps_demo.mod" makes this easy for the internal database and MySQL.
|
||||
By default, it creates tables for the internal database. If you want to use
|
||||
MySQL instead, open the module with the toolset and edit the scripts
|
||||
"demo_createtable" and "demo_obj_create" accordingly.
|
||||
|
||||
<p>Next connect to your server with the Neverwinter Nights client.
|
||||
On the left side, you will see several different signs in front of you:
|
||||
|
||||
<ul>
|
||||
<li>Create table: Issues a database command that creates a table
|
||||
in the database
|
||||
<li>Store variable in database: Tries to save a test variable named
|
||||
"demoName" with the value "testValue" in the database
|
||||
<li>Load variable from database: Tries to retrieve the variable
|
||||
"demoName" from the database and prints the results in the
|
||||
server message window.
|
||||
</ul>
|
||||
|
||||
<p>Now click every sign once, starting with the one on the
|
||||
left (Create Tables).
|
||||
|
||||
<p>If the last sign sends you the message "Retrieved variable from
|
||||
database: testValue" your setup is ok and you're ready to start using APS.
|
||||
Note: This is the most basic setup. We encourage you to use more
|
||||
sophisticated databases and data structures if you feel confident
|
||||
to do so (see below).
|
||||
|
||||
<p> On the right side, you will see several different signs that do almost
|
||||
the same as the other signs, but they are dealing with object instead
|
||||
of strings storage.
|
||||
|
||||
<p> If the variable is not retrieved correctly, check out the log file
|
||||
nwnx_odbc.txt for errors. Also check your database if the table really
|
||||
has been created. The SQL statement that is executed by default is suitable for MySQL. If you use a
|
||||
different database server, you should adjust that statement accordingly:
|
||||
|
||||
<p>Create a table "pwdata" with the following fields
|
||||
player, tag, name, val, expire, last. Here is an example for MySQL
|
||||
(taken from aps_demo.mod, script demo_createtable):
|
||||
|
||||
<pre>
|
||||
SQLExecDirect("CREATE TABLE pwdata (" +
|
||||
"player varchar(64) default NULL," +
|
||||
"tag varchar(64) default NULL," +
|
||||
"name varchar(64) default NULL," +
|
||||
"val text," +
|
||||
"expire int(11) default NULL," +
|
||||
"last timestamp(14) NOT NULL," +
|
||||
"KEY idx (player,tag,name)" +
|
||||
")" );
|
||||
|
||||
</pre>
|
||||
|
||||
<h4>E. Using the persistence functions in your module</h4>
|
||||
|
||||
<ol>
|
||||
<li>After installing according to the instructions above, go to Module
|
||||
Properties under the Edit menu.
|
||||
<li> Select aps_onload for your module OnModuleLoad event.<br>
|
||||
OR<br>
|
||||
Open aps_onload in the script editor and paste the contents of it into your
|
||||
pre-existing module's OnModuleLoad script. We only recommend doing this if you
|
||||
are familiar with NWScript.
|
||||
</ol>
|
||||
|
||||
The functions below are now implemented. Here is a lexicon containing
|
||||
information on their purpose and use:
|
||||
|
||||
<p><b>void SQLInit()</b>
|
||||
<p>Setup placeholders for ODBC requests and responses. This functions reserves memory APS and NWNX
|
||||
use for communication. Call this function <b>once</b> in the module load event.
|
||||
|
||||
<p><b>SetPersistentString(object oObject, string sVarName, string sValue,
|
||||
int iExpiration=0, string sTable="pwdata")</b>
|
||||
|
||||
<p>This sets a persistent string on an object. The object can be
|
||||
any valid object in the game. The command works the same way the usual
|
||||
SetLocalString function works, except you can optionally add a little more
|
||||
information:
|
||||
|
||||
<ul>
|
||||
<li>object oObject - The object which you wish to set the persistent variable
|
||||
upon.
|
||||
<li>string sVarName - The name of the persistent variable. Ex: "Quest Flag 1"
|
||||
or "QuestCompleted_True_False"
|
||||
<li>string sValue - The string you want to store.
|
||||
<li>int Expiration - (optional) The number of days after which the variable should
|
||||
expire, i.e. be deleted from the database. If you don't specify this parameter
|
||||
or pass 0 here, the variable will never be purged from the database.
|
||||
<li>string sTable - (optional) You can specify in which database table the value
|
||||
should be stored. This parameter defaults to "pwdata".
|
||||
</ul>
|
||||
|
||||
<p><b>SetPersistentInt(object oObject, string sVarName, int iValue,
|
||||
int iExpiration=0, string sTable="pwdata")</b>
|
||||
|
||||
<p>This sets a persistent integer value on an object. The object can be
|
||||
any valid object in the game. The command works the same way the usual
|
||||
SetLocalInt function works, except you can optionally add a little more
|
||||
information:
|
||||
|
||||
<ul>
|
||||
<li>object oObject - The object which you wish to set the persistent variable
|
||||
upon.
|
||||
<li>string sVarName - The name of the persistent variable. Ex: "Quest Flag 1"
|
||||
or "QuestCompleted_True_False"
|
||||
<li>int iValue - The integer value of the variable. 1, 2, 3... etc.
|
||||
<li>int Expiration - (optional) The number of days after which the variable should
|
||||
expire, i.e. be deleted from the database. If you don't specify this parameter
|
||||
or pass 0 here, the variable will never be purged from the database.
|
||||
<li>string sTable - (optional) You can specify in which database table the value
|
||||
should be stored. This parameter defaults to "pwdata".
|
||||
</ul>
|
||||
|
||||
<p><b>SetPersistentFloat(object oObject, string sVarName, float fValue,
|
||||
int iExpiration=0, string sTable="pwdata")</b>
|
||||
|
||||
<p>This sets a persistent float value on an object. The object can be
|
||||
any valid object in the game. The command works the same way the usual
|
||||
|
||||
SetLocalFloat function works, except you can optionally add a little more
|
||||
information:
|
||||
|
||||
<ul>
|
||||
<li>object oObject - The object which you wish to set the persistent variable
|
||||
upon.
|
||||
<li>string sVarName - The name of the persistent variable. Ex: "Quest Flag 1"
|
||||
or "QuestCompleted_True_False"
|
||||
<li>float fValue - The float value of the variable. 1.6, 2.542, 3.0989... etc.
|
||||
<li>int Expiration - (optional) The number of days after which the variable should
|
||||
expire, i.e. be deleted from the database. If you don't specify this parameter
|
||||
or pass 0 here, the variable will never be purged from the database.
|
||||
<li>string sTable - (optional) You can specify in which database table the value
|
||||
should be stored. This parameter defaults to "pwdata".
|
||||
</ul>
|
||||
|
||||
<p><b>SetPersistentLocation(object oObject, string sVarName, location lLocation,
|
||||
int iExpiration=0, string sTable="pwdata")</b>
|
||||
|
||||
<p>This sets a persistent location on an object. The object can be
|
||||
any valid object in the game. The command works the same way the usual
|
||||
SetLocalLocation function works, except you can optionally add a little more
|
||||
information:
|
||||
|
||||
<ul>
|
||||
<li>object oObject - The object which you wish to set the persistent variable
|
||||
upon.
|
||||
<li>string sVarName - The name of the persistent variable. Ex: "Quest Flag 1"
|
||||
or "QuestCompleted_True_False"
|
||||
<li>location lLocation - The location you want to store.
|
||||
<li>int Expiration - (optional) The number of days after which the variable should
|
||||
expire, i.e. be deleted from the database. If you don't specify this parameter
|
||||
or pass 0 here, the variable will never be purged from the database.
|
||||
<li>string sTable - (optional) You can specify in which database table the value
|
||||
should be stored. This parameter defaults to "pwdata".
|
||||
</ul>
|
||||
|
||||
<p><b>SetPersistentVector(object oObject, string sVarName, vector vVector,
|
||||
int iExpiration=0, string sTable="pwdata")</b>
|
||||
|
||||
<p>This sets a persistent vector on an object. The object can be
|
||||
any valid object in the game. The command works the same way the usual
|
||||
Set local variable functions work, except you can optionally add a little more
|
||||
information:
|
||||
|
||||
<ul>
|
||||
<li>object oObject - The object which you wish to set the persistent variable
|
||||
upon.
|
||||
<li>string sVarName - The name of the persistent variable. Ex: "Quest Flag 1"
|
||||
or "QuestCompleted_True_False"
|
||||
<li>vector vVector - The vector you want to store.
|
||||
<li>int Expiration - (optional) The number of days after which the variable should
|
||||
expire, i.e. be deleted from the database. If you don't specify this parameter
|
||||
or pass 0 here, the variable will never be purged from the database.
|
||||
<li>string sTable - (optional) You can specify in which database table the value
|
||||
should be stored. This parameter defaults to "pwdata".
|
||||
</ul>
|
||||
|
||||
<p><b>GetPersistentString(object oObject, string sVarName, string sTable="pwdata")</b>
|
||||
|
||||
<p>This function works in the same manner as GetLocalString. It gets the
|
||||
persistent string from object oObject.
|
||||
|
||||
<ul>
|
||||
<li>object oObject - This is the object from which you are retrieving the
|
||||
value of the variable.
|
||||
<li>string sVarName - This is the name of the variable that will be retrieved
|
||||
off of oObject. Ex: "Quest Flag 1"
|
||||
<li>string sTable - (optional) You can specify in which database table the value
|
||||
can be found. This parameter defaults to "pwdata".
|
||||
</ul>
|
||||
|
||||
<p><b>GetPersistentInt(object oObject, string sVarName, string sTable="pwdata")</b>
|
||||
|
||||
<p>This function works in the same manner as GetLocalInt. It gets the
|
||||
persistent integer value from object oObject.
|
||||
|
||||
<ul>
|
||||
<li>object oObject - This is the object from which you are retrieving the
|
||||
value of the variable.
|
||||
|
||||
<li>string sVarName - This is the name of the variable that will be retrieved
|
||||
off of oObject. Ex: "Quest Flag 1"
|
||||
<li>string sTable - (optional) You can specify in which database table the value
|
||||
can be found. This parameter defaults to "pwdata".
|
||||
</ul>
|
||||
|
||||
<p><b>GetPersistentFloat(object oObject, string sVarName, string sTable="pwdata")</b>
|
||||
|
||||
<p>This function works in the same manner as GetLocalFloat. It gets the
|
||||
persistent float value from object oObject.
|
||||
|
||||
<ul>
|
||||
<li>object oObject - This is the object from which you are retrieving the
|
||||
value of the variable.
|
||||
<li>string sVarName - This is the name of the variable that will be retrieved
|
||||
off of oObject. Ex: "Quest Flag 1"
|
||||
<li>string sTable - (optional) You can specify in which database table the value
|
||||
can be found. This parameter defaults to "pwdata".
|
||||
</ul>
|
||||
|
||||
<p><b>GetPersistentLocation(object oObject, string sVarName, string sTable="pwdata")</b>
|
||||
|
||||
<p>This function works in the same manner as GetLocalLocation. It gets the
|
||||
persistent location value from object oObject.
|
||||
|
||||
<ul>
|
||||
<li>object oObject - This is the object from which you are retrieving the
|
||||
value of the variable.
|
||||
<li>string sVarName - This is the name of the variable that will be retrieved
|
||||
off of oObject. Ex: "Quest Flag 1"
|
||||
<li>string sTable - (optional) You can specify in which database table the value
|
||||
can be found. This parameter defaults to "pwdata".
|
||||
</ul>
|
||||
|
||||
<p><b>GetPersistentVector(object oObject, string sVarName, string sTable="pwdata")</b>
|
||||
|
||||
<p>This function works in the same manner as the other get local variable functions. It gets the
|
||||
persistent vector value from object oObject.
|
||||
|
||||
<ul>
|
||||
<li>object oObject - This is the object from which you are retrieving the
|
||||
value of the variable.
|
||||
<li>string sVarName - This is the name of the variable that will be retrieved
|
||||
off of oObject. Ex: "Quest Flag 1"
|
||||
<li>string sTable - (optional) You can specify in which database table the value
|
||||
can be found. This parameter defaults to "pwdata".
|
||||
</ul>
|
||||
|
||||
<p><b>void DeletePersistentVariable(object oObject, string sVarName, string sTable="pwdata")</b>
|
||||
|
||||
<p>This function deletes a variable from the database.
|
||||
|
||||
<ul>
|
||||
<li>object oObject - This is the object on which the variable has been stored.
|
||||
<li>string sVarName - This is the name of the variable that will be deleted.
|
||||
<li>string sTable - (optional) You can specify in which database table the value
|
||||
can be found. This parameter defaults to "pwdata".
|
||||
</ul>
|
||||
|
||||
<p><b>void SQLExecDirect(string sSQL)</b>
|
||||
<p> Executes a SQL statement. If the statement returns a result set, you can read the data
|
||||
with the next two functions.
|
||||
|
||||
<p><b>int SQLFetch()</b>
|
||||
<p> Position cursor on next row of the resultset. Call this function before using SQLGetData().<br>
|
||||
Returns
|
||||
<ul>
|
||||
<li>SQL_SUCCESS if there is a row
|
||||
<li>SQL_ERROR if there are no more rows
|
||||
</ul>
|
||||
|
||||
<p><b>int SQLFirstRow() (*deprecated*)</b>
|
||||
<p> Function is deprecated but still there for backward compability. Simply calls SQLFetch().
|
||||
|
||||
<p><b>int SQLNextRow() (*deprecated*)</b>
|
||||
<p> Function is deprecated but still there for backward compability. Simply calls SQLFetch().
|
||||
|
||||
<p><b>string SQLGetData(int iCol)</b>
|
||||
<p> Return value of column iCol in the current row of result set sResultSetName.
|
||||
|
||||
<p><b>Comments</b>
|
||||
|
||||
<ul>
|
||||
<li>Make sure you include aps_include in every script where you want to use these functions,
|
||||
i.e. add the line
|
||||
<pre>
|
||||
#include "aps_include"
|
||||
</pre>
|
||||
at the top of your script.
|
||||
</ul>
|
||||
|
||||
<a name="IV"></a>
|
||||
<h3>IV. Customization</h3>
|
||||
|
||||
<p>The APS is merely a set of custom functions that were originally used for the Avlis
|
||||
persistent world. The names of the functions and their parameters can be set to whatever
|
||||
is convenient for your module. Below is a hypothetical example of how customization can be done.
|
||||
|
||||
<p>The "PowerG I33t" persistent world maintains their persistence with the Joe Bloe Persistence
|
||||
system (JBPS). In that system, a persistent string is set with the following JBPS function:
|
||||
|
||||
<p>SetStickySring(string sVariableName, string sVariableValue, object oTarget)
|
||||
|
||||
<p>All 5000 scripts in PowerG's elite world are written with the SetStickyString function, and they
|
||||
wish to retrofit their world to use NWNX. They would follow these steps:
|
||||
|
||||
<ol>
|
||||
<li>Open up the file aps_include in the script editor.
|
||||
<li>Change the name of the APS function called SetPersistentString to SetStickyString.
|
||||
<li>Rearrange the parameters of:
|
||||
|
||||
<p>SetPersistentString(object oObject, string sVarName, string sVarValue, int iExpiration, string sTable = "pwdata")<br>
|
||||
to:<br>
|
||||
SetStickyString(string VarName, string VarValue, object oObject, int iExpiration = 0, string sTable = "pwdata")<br>
|
||||
|
||||
<li>Build the module, i.e. recompile all scripts.
|
||||
|
||||
</ol>
|
||||
|
||||
<p>Once the module is restarted, all of PowerG I33t's old persistent string scripts should be running the
|
||||
new persistence system. All it took was changing one script.
|
||||
|
||||
<p>The above example is a simplified one, and the rest of the functions in the JBPS would need to be changed
|
||||
in the same manner. In cases where the function parameters were completely not equivalent to those used
|
||||
by the APS, they may have to be changed throughout every script in the module. Many but not all of the
|
||||
persistence systems out there should be convertible by the above method. We encourage further modification
|
||||
of aps_include to tailor the variable handling to your needs.
|
||||
|
||||
<p>For persistence systems that use tokens, conversion will not be as easy. In these systems, token items
|
||||
are used to represent information on a player character. These tokens are not lost because they are
|
||||
actually in the inventory of the character. Because these systems work with tokens and not actual variables
|
||||
it will be hard to convert them into a database format. The module will most likely have to be completely
|
||||
re-fitted.
|
||||
|
||||
<p>On possible idea to do this scriptomatically would be to write a module OnEnter script that strips the
|
||||
character of their tokens and issues SetPersistent variable commands into the database before destroying
|
||||
them. That would preserve the information that is there, but handling the actual scripts throughout the
|
||||
module will have to be done separately.
|
||||
|
||||
<p>Alternatively, you can have a look at the GetPersistentString() function in
|
||||
"aps_include". There are some comments in this functions that should give you
|
||||
ideas on how to convert persistent data from your current system to APS.
|
||||
|
||||
<a name="V"></a>
|
||||
<h3>V. Speed comparison </h3>
|
||||
|
||||
<p>To give you an idea what to expect from the various database options, we
|
||||
conducted a small test involving 500 writes and reads. Note that this test is
|
||||
very artificial, since many aspects like table fragmentation, concurrent access,
|
||||
database size, and more realistic queries are not factored in. All tests were
|
||||
done on a Athlon 64 3200+ with database server, NWServer, and NWClient
|
||||
running local (NWClient with reduced process priority).
|
||||
|
||||
<p>Writes were done with the following code:
|
||||
<pre>
|
||||
for (i = 0; i < 500; i++)
|
||||
{
|
||||
SQLExecDirect("INSERT INTO pwdata (player, tag, name,val) values " +
|
||||
"('~', '~', 'iter_" + IntToString(i) + "', 'value')");
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>Reads were done with the following code:
|
||||
<pre>
|
||||
SQLExecDirect("SELECT * from pwdata");
|
||||
while (SQLFetch() == SQL_SUCCESS) {}
|
||||
</pre>
|
||||
|
||||
<p>Bioware DB reads and write were done with the following code:
|
||||
<pre>
|
||||
for (i = 0; i < 500; i++)
|
||||
{
|
||||
SetCampaignString("test", "iter_" + IntToString(i), "value");
|
||||
-- respecively --
|
||||
s = GetCampaignString("test", "iter_" + IntToString(i));
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>Results:
|
||||
<table border="1" width="300" style="margin-left:2em;">
|
||||
<tr>
|
||||
<td>Database</td>
|
||||
<td>Write</td>
|
||||
<td>Read</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SQLite (1)</td>
|
||||
<td>30 ms</td>
|
||||
<td>20 ms</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SQLite (2)</td>
|
||||
<td>36 ms</td>
|
||||
<td>20 ms</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SQLite (3)</td>
|
||||
<td>2800 ms</td>
|
||||
<td>20 ms</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>MySQL via ODBC</td>
|
||||
<td>71 ms</td>
|
||||
<td>38 ms</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>MySQL direct</td>
|
||||
<td>68 ms</td>
|
||||
<td>22 ms</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bioware DB (4)</td>
|
||||
<td>856 ms</td>
|
||||
<td>10 ms</td>
|
||||
</tr>
|
||||
<table>
|
||||
|
||||
<p>Comments:
|
||||
<ul>
|
||||
<li>SQLITE (1): Using a transaction. No commit after the for loop.
|
||||
<li>SQLITE (2): Using a transaction. Commit after the for loop.
|
||||
<li>SQLITE (3): Not using a transaction. Terribly slow ! Note that
|
||||
NWNX ODBC2 starts an implicit transaction automatically. If you want
|
||||
to handle transactions yourself, issue a COMMIT right after SQLInit()
|
||||
to end the implicit transaction.
|
||||
<li>Bioware DB (4): This comparison is a bit unfair, since the call to the
|
||||
Bioware database is significantly simpler and less flexible than its ODBC2
|
||||
counterpart. Real world examples utilizing e.g. SQL resultsets would probably
|
||||
favor ODBC2.
|
||||
</ul>
|
||||
|
||||
<a name="VI"></a>
|
||||
<h3>VI. Troubleshooting </h3>
|
||||
|
||||
<p> Starting out with NWNX ODBC2 can be a bit daunting at first, especially
|
||||
if you are on your own. We highly encourage you to visit us at
|
||||
<a href="http://www.nwnx.org">www.nwnx.org</a> to ask question and get
|
||||
help with setting this system up.
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1,31 +0,0 @@
|
||||
Changelog for APS/NWNX ODBC2
|
||||
|
||||
* 24.03.2011: v.0.9.2.5
|
||||
- Updated to be compatible with latest version of SQLite3.
|
||||
- Any additional notes that need to go in here.
|
||||
|
||||
* 02.02.2005: v.0.9.2.4
|
||||
- Fixed a crash that would occur with the MySQL connection when the connection could not be established
|
||||
- Modified table create statement for MySQL to make it compatible with version 4.0
|
||||
- ReceiveCampaign returns the correct object size to NWServer now.
|
||||
- Removed last remnants of dynamic memory allocation for SCORCO
|
||||
|
||||
* 23.01.2005: v.0.9.2.3
|
||||
- Static memory allocation for improved stability on older operating systems
|
||||
- Implicit transaction for SQLite connection is commited now. Ouch.
|
||||
|
||||
* 18.01.2005: v.0.9.2.2
|
||||
- Implicit transaction for SQLite connection type resulting in better performance
|
||||
|
||||
* 16.01.2005: v.0.9.2.1
|
||||
- Removed dependency on the libmysql.dll file.
|
||||
|
||||
* 15.01.2005: v.0.9.2
|
||||
- New database option: internal database SQLite
|
||||
|
||||
* 07.01.2005: v0.9.0
|
||||
- Hooks for StoreCampaignObject and ReceiveCampaign Object added
|
||||
- aps_include updated to support the new functions
|
||||
|
||||
* 01.01.2005: v0.8.8
|
||||
- Initial release of the plugin
|
Binary file not shown.
@@ -1,177 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title> Profiler Module Documentation </title>
|
||||
</head>
|
||||
|
||||
<body style="font-family:Arial,Verdana,sans-serif;">
|
||||
<h2>Profiler Module Documentation</h2>
|
||||
|
||||
<h4>Documentation and program are © by Ingmar Stieger (Papillon). Version 1.6 of 13.01.2005.</h4>
|
||||
|
||||
<h3>Table of Contents:</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td> <a href="#I">I.</a></td>
|
||||
<td> <a href="#I">What does this module do?</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#II">II.</a></td>
|
||||
<td><a href="#II">Using the module</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<a name="I">
|
||||
<h3>I. What does this module do?</h3>
|
||||
|
||||
<h4>A. General introduction</h4>
|
||||
|
||||
<p> The "Profiler" is a NWNX module that spits out statistics about running
|
||||
scripts. It shows how often a script has been called, how much time it took to
|
||||
complete, and gives some overall statistics. This is especially useful if you
|
||||
want to identify scripts with performance problems, or want to determine which
|
||||
scripts should be put in the script cache.
|
||||
|
||||
<p>You do not need to put any special code in your scripts.... just copy the
|
||||
nwnx_profile.dll in your NWN directory, load up a module, and check the
|
||||
<b>logs.0</b> directory for <b>nwnx_profile.txt</b>. Every 10 seconds, this module will
|
||||
append the current statistics into this file, so remember to re-open it once in
|
||||
a while to get updated statistics.
|
||||
|
||||
<p><b>Licence</b><br> This module is distributed unter the terms of the GNU
|
||||
GENERAL PUBLIC LICENSE included in <a href="licence.txt">licence.txt</a>.
|
||||
|
||||
<h4>B. Changelog v1.1</h4>
|
||||
|
||||
<p>The original version 1.0 overlooked some scripts. First of all, nested scripts
|
||||
weren't correctly logged. A script which called another script with ExecuteScript()
|
||||
wasn't accounted at all. Props go out to FastFrench for pointing this out.
|
||||
|
||||
<p>Also, there was another script constellation that also went wrong in the previous
|
||||
version. When you call a function directly with ExecuteScript(1.0f,
|
||||
MyFunction()), not the whole script, but only a "part" of the script is
|
||||
executed, namely just that function. Version 1.1 takes this special case into
|
||||
consideration, too. "Partly" executed scripts are denoted with a '>' sign before the
|
||||
script name.
|
||||
|
||||
<h4>C. Changelog v1.2</h4>
|
||||
|
||||
<p>The timeing measurement should be more accurate now. Previous versions took
|
||||
the time it took for a script to be loaded by the server into memory into
|
||||
account (either from disk or from the disk cache), but since NWN can cache
|
||||
scripts now, the profiler only measures the real execution time. This means you
|
||||
will get somewhat lower accumulative times compared to previous versions.
|
||||
|
||||
<p>Note that scripts called via DelayCommand (e.g. DelayCommand(1.0f,
|
||||
ExecuteScript("myscript", OBJECT_SELF))) are counted twice, one time as a normal
|
||||
script call, and a second time as a "partly" called script. Thus when the line
|
||||
above is executed ten times, you will get two entries for this script: 10 times
|
||||
"myscript" and 10 times ">myscript". This is due to the way the NWN engine works
|
||||
and I currently do not know of a way to code around it.
|
||||
|
||||
<h4>D. Changelog v1.5</h4>
|
||||
|
||||
<p>Logfiles have a fixed size limit now, which can be set at compile time. In
|
||||
the binary distribution, a hard limit of 512 KByte has been chosen. If the log
|
||||
file exceeds this limit, it will be emptied and the profiler starts again with a
|
||||
clean file.
|
||||
|
||||
<p>During my tests, I found that pathfinding can be a big performance hog in
|
||||
NWN, especially under circumstances where creatures are blocked in a somewhat
|
||||
narrow space or where they are repeatedly trying to pathfind across several
|
||||
areas. Therefore, this updated version supports profiling the two pathfinding
|
||||
routines in NWN (that's a bit of a oversimplification, but that's how you can
|
||||
think of it).
|
||||
|
||||
<p>There are two types of NPC pathfinding in NWN:
|
||||
<ul>
|
||||
<li>finding a path within an area (called <i>Tile pathfinding</i>)
|
||||
<li>finding a path to another area (called <i>Cross area pathfinding</i>)
|
||||
</ul>
|
||||
|
||||
<p>Pathfinding can't be totally avoided of course, but you should be able to
|
||||
considerably reduce CPU cycles wasted by useless pathfinding in your module.
|
||||
Useless pathfinding can happen for example, when you place a NPC inside a small
|
||||
confined space, e.g. four fence placeables laid out as a square. It can also
|
||||
happen if a NPC does waypoint walking and tries to reach a waypoint that exists
|
||||
in the module, but is not reachable on foot. You will see excessive pathfinding
|
||||
events in the log file in these cases.
|
||||
|
||||
<p>For tile pathfinding events, the name of the area where the pathfinding is
|
||||
happening is written to the log file and marked with a dollar ($) symbol. For
|
||||
cross area pathfinding, it's the tag of the creature marked with an at (@) symbol.
|
||||
|
||||
<p>Another new feature: Updated entries are marked with a star (*) symbol.
|
||||
Previously, it was very hard to find out what scripts caused the delta in
|
||||
runtime between two logging events. Now it's easy to see which scripts eat up
|
||||
your valuable CPU cycles.
|
||||
|
||||
<h4>E. Changelog v1.6</h4>
|
||||
|
||||
<p>Support for NWNX.INI file has been added. There are two options that can be
|
||||
configured:
|
||||
|
||||
<pre>
|
||||
[PROFILER]
|
||||
MaxLogSize = 512 ; in KByte
|
||||
LogLevel = 1 ; 1=overall statistics, 2=full script callstack
|
||||
</pre>
|
||||
|
||||
<p>LogLevel 2 produces LOTS of output, be careful. Its main purpose is to help with
|
||||
identifying possible causes for server crashes.
|
||||
|
||||
<a name="II">
|
||||
<h3>II. Using the module</h3>
|
||||
|
||||
<h4>A. Running the NWNX Profiler on your module</h4>
|
||||
|
||||
<p>The nice thing about this NWNX module is that you don't need to modify anything.
|
||||
Just drop the .dll in the NWN directory.
|
||||
|
||||
<h4>B. The statistics</h4>
|
||||
|
||||
<p>The Profiler generates statistics that look like this:
|
||||
|
||||
<pre>
|
||||
Current statistics
|
||||
-----------------------------------------------------------------------------------------------
|
||||
NW_G0_Conversat 0 msec 1 calls | m1q0bstud_2 0 msec 36 calls |
|
||||
nw_all_feedback7 0 msec 1 calls | m1q0caribeth_1 0 msec 7 calls *|
|
||||
nw_ch_ac1 0 msec 7 calls *| area_m1q0e_1 0 msec 5 calls |
|
||||
>m1q0bmagic_d 0 msec 5 calls | >m1q0bmagicb_2 0 msec 1 calls |
|
||||
m1q0bmagic_2 0 msec 1 calls | m1_initdlg_9 0 msec 2 calls |
|
||||
>m1q0atrig_2 0 msec 4 calls | m1q0bdendy_4 0 msec 7 calls *|
|
||||
m1q0bpatient_9 0 msec 1 calls | >nw_od_feedback8 0 msec 1 calls |
|
||||
m1q0brogue_d 1 msec 14 calls *| m1q0bclericb_2 0 msec 8 calls |
|
||||
m1q0cstud_9 1 msec 7 calls | nw_ch_ac2 0 msec 4 calls |
|
||||
m1q0apaveend 0 msec 1 calls | m1q0dpavel_9 0 msec 1 calls |
|
||||
nw_all_feedback8 0 msec 1 calls | nw_c2_default1 0 msec 77 calls *|
|
||||
>m1q0ddeadgob_9 0 msec 18 calls | m0q01a01pavesck1 0 msec 1 calls |
|
||||
m0q00plot 0 msec 1 calls | m1q0bmagicb_2 0 msec 1 calls |
|
||||
nw_c2_j_assvict1 0 msec 1 calls | m1q0dgeld_1 0 msec 7 calls *|
|
||||
m1q0d_area_1 0 msec 13 calls | m1q0bmagic_d 0 msec 7 calls |
|
||||
nw_od_feedback8 64 msec 1 calls | area_m1q0_1 0 msec 3 calls |
|
||||
m1q0apavel_1 1 msec 36 calls *| >nw_c2_default9 8 msec 116 calls *|
|
||||
area_m1q0b_1 0 msec 33 calls | m1q0bcleric_2 0 msec 8 calls |
|
||||
m1q0atrig_3 0 msec 1 calls | m1q0apavel_2 0 msec 20 calls |
|
||||
nw_c2_default2 0 msec 128 calls | nw_all_feedback1 0 msec 1 calls |
|
||||
nw_c2_default9 1 msec 3 calls | m1q0atrig_2 0 msec 2 calls |
|
||||
m1q0ddeadgob_9 0 msec 9 calls |
|
||||
-----------------------------------------------------------------------------------------------
|
||||
Elapsed time : 3175 msec
|
||||
Runtime delta : 0 msec
|
||||
Total cumulative runtime : 76 msec
|
||||
Total number of scriptcalls : 602
|
||||
</pre>
|
||||
|
||||
(this is from the official "Prelude" module, running one minute).
|
||||
|
||||
<ul>
|
||||
<li>The first column is the scriptname, e.g. "m1q0bstud_2". If the first
|
||||
character is a '>' sign, a function within the script was called with an
|
||||
ExecuteScript call (e.g. ExecuteScript(1.0f, MyFunction()))
|
||||
<li>The second column contains the amount of time this script has used up (accumulated).
|
||||
<li>The third column contains the number of times this script has been called.
|
||||
<li>The footer contains some overall information about the scripts.
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
Binary file not shown.
Reference in New Issue
Block a user