logo logo

 Back to main page

The NWNX Community Forum

 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 
 
10 questions for the OEI developers
Goto page 1, 2  Next
 
Post new topic   Reply to topic    nwnx.org Forum Index -> Development
View previous topic :: View next topic  
Author Message
Senalaya



Joined: 29 Dec 2004
Posts: 82
Location: Germany

PostPosted: Mon Apr 23, 2007 19:42    Post subject: 10 questions for the OEI developers Reply with quote

I had a little PM discussion with Rob McGinnis (OEI) and suggested a special dev-chat for server admins about the following topics:

- Client file distribution (PWC, HAK, etc).
- Standalone Server.
- Directory structures and priorities (campaigns, modules, HAK, override, logs, MyDocs vs. Install dir, etc).
- NWNX Support.
- Performance considerations and optimization.

He checked with the devs and came back with the statement, that everyone is pretty swamped at the moment, but if I want to give him 5 questions, he will try to get those answered for me directly.

I'd like to share this opportunity with you and give you the chance to participate. I'll collect the input and I'll then post the replies here.

Since my major troubles are with the 1st topic at the moment, I'd like to put question #1 as:

"What are the current plans for the client file distribution (PWC, HAK, UI, override, etc) in regards of player notification, auto-download/sync and version control, and what would be the targeted timeframe for the implementation?"

Update:
Quote:
Sent 04/23/07 17:36 (GMT) by Rob McGinnis

If you are going to include NWNx people, go ahead and send 10 questions.

I can't promise we will answer them all, but we will do what we have time for.

_________________
NWN2 Patch Downloads
NWN2 Blog


Last edited by Senalaya on Tue Apr 24, 2007 7:48; edited 3 times in total
Back to top
View user's profile Send private message
virusman



Joined: 30 Jan 2005
Posts: 1020
Location: Russia

PostPosted: Tue Apr 24, 2007 7:07    Post subject: Reply with quote

I sent him this question couple of weeks ago, but never got an answer:
Quote:
I have a question regarding memory allocation in NWN2.
As I see, it's more complicated than in NWN1. But can I just free() existing parts of memory and replace them with new pointers (i.e. I want to set tag) or I'll have to invoke native NWN2 functions (NWN2Heap) because ordinary free() can cause a memory leak?


Last edited by virusman on Tue Apr 24, 2007 8:47; edited 1 time in total
Back to top
View user's profile Send private message Visit poster's website Yahoo Messenger
Senalaya



Joined: 29 Dec 2004
Posts: 82
Location: Germany

PostPosted: Tue Apr 24, 2007 8:03    Post subject: Reply with quote

"The current way nwn2server.exe utilizes several different directories (Install, MyDoc, Temp) for data and configuration storage is quite bothersome, when it comes to hosting multiple modules on the same server. If not prevented by mostly ugly workarounds, all instances would try to access the same log files in the %TEMP%\NWN2 dir and crash. The same goes for the .ini files, servervault and database dirs under MyDocs. Would it be possible to get a switch for the nwn.ini, that forces nwn2server.exe to stick to it's installation directory? (i.e. ForceSingleDirectory=1)"

We already have sort of a workaround for the logs/temp part, but I had to find out now with multiple NWN2 instances, that servervault, database and the nwnplayer.ini (banlist) are only maintained in MyDocs, unless you deny the access to that structure for the current user with filesystem security.
Back to top
View user's profile Send private message
Senalaya



Joined: 29 Dec 2004
Posts: 82
Location: Germany

PostPosted: Tue Apr 24, 2007 13:36    Post subject: Reply with quote

"From my point of view, there are currently 4 major hold-offs for localvault servers:

- Client file distribution.
(See question #1)

- Exploit: "Item property activation preference"
Players can create items in the toolset, that add their boni to the player stats without the need to be equipped. This jepardizes ILR and there are no script commands to detect or correct the problem. Any chance of getting script commands like Get/SetActivationPreference(oItem) to control that flag?
Further, it's a bit 'icky' when these items update the player/NPC's stats. As it seems, the stats are only updated, if the item is picked up or equipped, but not when it's created or copied into the players/NPCs inventory.

- Exploit: "Character scaling"
Players can modify the scale of their characters with ITP tools (Leto) and there are no current script functions to detect or correct that. While a 20' dwarf or a 2" half-orc might be funny once in a while, it's wearing off fast. What about a Get/SetScale(), either with vectors or floats as datatypes, for creatures and placeables?

- ActionSit()
Don't laugh, but this is quite an essential feature for online worlds. The status/action update seems to work fine, just the animation doesn't play along.
"
Back to top
View user's profile Send private message
Papillon
x-man


Joined: 28 Dec 2004
Posts: 1060
Location: Germany

PostPosted: Tue Apr 24, 2007 15:56    Post subject: Reply with quote

A couple of questions about the Neverwinter Nights Extender (NWNX).

1) OE has been very supportive and added new scripting and engine functions for NWNX, which allowed for a cleaner interface between NWN and NWNX plugins. This shows that OE cares about the persistent world (PW) crowd and actively supports the multiplayer mode of NWN. What are your plans on future support of NWNX ? With all the things you are working on, can we expect more functions and developer attention for NWNX ?

2) Currently it is difficult to pinpoint performance problems that are introduced by suboptimal scripting code or creatures that try to pathfind to impossible locations. In NWN1, there was a NWNX plugin (NWNX profiler) that gave developers the necessary information to identify these culprits, by identifiying what scripts took how long to execute, and how often creatures tried to pathfind. Is something like this planned for NWN2, and if not, would you work with the community to create a profiling tool like this ?

3) Ambitious persistent world developers often find themselves in a situation, where things external to the game world happen, that should have an effect on the world that is running inside the server. Examples for events like this include chat messages from distinct servers, character file transfer to associated game worlds, and countless other events that people would like to include in their game, to make it an even better experience for their users. Do you think you could help NWNX developers call custom scripting functions from external NWNX plugins, i.e. give us an engine function that in turn calls ExecuteScript(..) with certain parameters ?

4) One of the most importants tasks that developers requested from NWNX developers is modifying certain object properties, that are not made available by scripting functions. Past examples for NWN1 include functions like SetDescription and SetItemGoldValue. Do you think that after giving us the NWNX GetString, GetInt, and GetFloat functions, there are developments zots for NWNX GetObject and SetObject functions ? Those functions would present us with a GFF encoded object (GetObject) and then in return accept a GFF encoded replacement object (SetObject) ?

The next one is a bit off, and I am not sure if it should be included or not. Anyway, I'm a curious person, so I'll add it anway:

5) If the community would write a NWN2 server from cratch. How much information on the innner workings of the protocols, data structures, and procedures, would you be allowed (and willing) to give us, without sacrificing intellectual properties ? Do you think this would be enough to rewrite an alternative server from scratch ?
_________________
Papillon


Last edited by Papillon on Thu Apr 26, 2007 16:56; edited 8 times in total
Back to top
View user's profile Send private message Visit poster's website MSN Messenger
Senalaya



Joined: 29 Dec 2004
Posts: 82
Location: Germany

PostPosted: Thu Apr 26, 2007 0:07    Post subject: Reply with quote

For NWNX, I'd like to see additional, 'official' hooks for SCO/RCO, chat, events and most important (to me) a way to externally inject scripts or at least to externally trigger events. Where externally could mean some sort of IPC or even some localhost UDP communication to the gameport.
Back to top
View user's profile Send private message
Grinning Fool



Joined: 12 Feb 2005
Posts: 264

PostPosted: Thu Apr 26, 2007 4:49    Post subject: Reply with quote

(placeholder - when I have a bit more time tomorrow night I'll come back and post actual questions....)
_________________
Khalidine, a NWN2 persistent world

Looking for volunteers.
Back to top
View user's profile Send private message
virusman



Joined: 30 Jan 2005
Posts: 1020
Location: Russia

PostPosted: Thu Apr 26, 2007 12:58    Post subject: Reply with quote

Senalaya wrote:
For NWNX, I'd like to see additional, 'official' hooks for SCO/RCO, chat, events and most important (to me) a way to externally inject scripts or at least to externally trigger events. Where externally could mean some sort of IPC or even some localhost UDP communication to the gameport.
What is the differece of 'official' hooks?

Last edited by virusman on Thu Apr 26, 2007 13:28; edited 2 times in total
Back to top
View user's profile Send private message Visit poster's website Yahoo Messenger
Senalaya



Joined: 29 Dec 2004
Posts: 82
Location: Germany

PostPosted: Thu Apr 26, 2007 13:10    Post subject: Reply with quote

virusman wrote:
Senalaya wrote:
For NWNX, I'd like to see additional, 'official' hooks for SCO/RCO, chat, events and most important (to me) a way to externally inject scripts or at least to externally trigger events. Where externally could mean some sort of IPC or even some localhost UDP communication to the gameport.
What is the differece of 'official' hooks?


Official like the recently added hooks/symbols/placeholders for NWNXGet*. So, that there is no more need to binary scan the memory to locate those functions.
As you noticed with 1.05, there can be larger changes from patch to patch for the mem locations.
Back to top
View user's profile Send private message
virusman



Joined: 30 Jan 2005
Posts: 1020
Location: Russia

PostPosted: Thu Apr 26, 2007 13:34    Post subject: Reply with quote

Senalaya wrote:
Official like the recently added hooks/symbols/placeholders for NWNXGet*. So, that there is no more need to binary scan the memory to locate those functions.
As you noticed with 1.05, there can be larger changes from patch to patch for the mem locations.
As far as I know, the function signatures didn't change in 1.05. All I had to do is to raise the upper search boundary for RunScript.
I think that there is no point in making 'official' hooks for functions that are already hooked. OEI definitely have more important things to do.
i.e. we haven't found and hooked pathfinding functions and Obsidian's help would be more useful in this task.
//I've found approx. 5 functions that are responsible for pathfinding, but I don't know which one to hook. Smile
Back to top
View user's profile Send private message Visit poster's website Yahoo Messenger
Papillon
x-man


Joined: 28 Dec 2004
Posts: 1060
Location: Germany

PostPosted: Thu Apr 26, 2007 15:20    Post subject: Reply with quote

Regarding the last comment by virusman:

Imagine two ways to go about NWNX:

1) The NWN1 way: Hours and days of debugging and hooking functions based on a more or less empirically found binary function signature.

2) The NWN2 way: Search for a known byte signature in the NWN2 executeables (server + client), e.g. NWNX_SETSTRING. Call that function and pass it a pointer to your very own function. Next, NWN will call your function directly, without hijacking functions meant for other purposes.

It's very little effort for OE to implement (some 10 lines of code per function). The old NWN1 way is still available of course, but I wanted to have at least the most basic functions nailed down in their executable, which next to strings, also allow passing floats and integer values.

Think about it this way: We, the community, ask OE to give us access to certain areas of the game, like game objects or simple variable values. We do not ask for specific functions on these entities, because with their support, we are in the position to implement them on our own. I would say this is a substantial multiplication of OE's development capabilities.
_________________
Papillon
Back to top
View user's profile Send private message Visit poster's website MSN Messenger
Grinning Fool



Joined: 12 Feb 2005
Posts: 264

PostPosted: Thu Apr 26, 2007 16:29    Post subject: Reply with quote

My question - which really isn't NWNX, but is related to the concept:

The ideal solution for integration would have three parts:

1. A base library of functions that is exposed to developers (things like execute script, alloc/dealloc string/int/etc, creating objects, classes for 'object', 'location', 'effect', etc) via a public API.
2. A script function LoadLibrary that would allow an init script to load required/desired DLLs.
3. A script function InvokeMethod("method name", param, param, param) or something very similar; if not the ability to call 'imported' functions directly. Should support the ability to pass all data types 'natively' into/out of the functions

The question is, is there any chance of getting to that point at some time in the future? If not, what about just getting #1, accessible from within NWNX?
_________________
Khalidine, a NWN2 persistent world

Looking for volunteers.
Back to top
View user's profile Send private message
Papillon
x-man


Joined: 28 Dec 2004
Posts: 1060
Location: Germany

PostPosted: Thu Apr 26, 2007 16:59    Post subject: Reply with quote

Could you elaborate how your suggestion differs from what could be done with NWNX, if OE would provide the necessary script hooks. I'm just curious where you are heading at.
_________________
Papillon
Back to top
View user's profile Send private message Visit poster's website MSN Messenger
Senalaya



Joined: 29 Dec 2004
Posts: 82
Location: Germany

PostPosted: Thu Apr 26, 2007 17:14    Post subject: Reply with quote

Grinning Fool wrote:
My question - which really isn't NWNX, but is related to the concept:

The ideal solution for integration would have three parts:

1. A base library of functions that is exposed to developers (things like execute script, alloc/dealloc string/int/etc, creating objects, classes for 'object', 'location', 'effect', etc) via a public API.
2. A script function LoadLibrary that would allow an init script to load required/desired DLLs.
3. A script function InvokeMethod("method name", param, param, param) or something very similar; if not the ability to call 'imported' functions directly. Should support the ability to pass all data types 'natively' into/out of the functions

The question is, is there any chance of getting to that point at some time in the future? If not, what about just getting #1, accessible from within NWNX?


Your desire/question goes in the direction, what was asked from Bio and OE on their boards in the past. When it comes to providing a real API, dll or any sort of ACTIVE code for that regard, their security people go berserk.
Take your LoadLibary() for example. What would keep some moron from loading any OS DLL and to perform destructive tasks with it? And that all would happen by simply loading some NWN(2) module or trusting some scripts or hak-pack from the nwvault. No serious company would take such a risk. Right now, the worst thing a module or script can do is crashing NWN(2) itself.
It is a difference, if someone knowingly installs NWNX on his computer, in that case he knows, he's dealing with executables and potential risks.
Back to top
View user's profile Send private message
Grinning Fool



Joined: 12 Feb 2005
Posts: 264

PostPosted: Thu Apr 26, 2007 17:18    Post subject: Reply with quote

It is no different at all from what can be done, assuming at least #1 is provided. However, the hooking layer that NWNX provides would no longer be needed; it seems that this aspect of NWNX was a workaround to not having native access to this via scripting in the first place?
_________________
Khalidine, a NWN2 persistent world

Looking for volunteers.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    nwnx.org Forum Index -> Development All times are GMT + 2 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group