View previous topic :: View next topic |
Author |
Message |
Senalaya
Joined: 29 Dec 2004 Posts: 82 Location: Germany
|
Posted: Mon Apr 23, 2007 19:42 Post subject: 10 questions for the OEI developers |
|
|
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 |
|
|
virusman
Joined: 30 Jan 2005 Posts: 1020 Location: Russia
|
Posted: Tue Apr 24, 2007 7:07 Post subject: |
|
|
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 |
|
|
Senalaya
Joined: 29 Dec 2004 Posts: 82 Location: Germany
|
Posted: Tue Apr 24, 2007 8:03 Post subject: |
|
|
"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 |
|
|
Senalaya
Joined: 29 Dec 2004 Posts: 82 Location: Germany
|
Posted: Tue Apr 24, 2007 13:36 Post subject: |
|
|
"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 |
|
|
Papillon x-man
Joined: 28 Dec 2004 Posts: 1060 Location: Germany
|
Posted: Tue Apr 24, 2007 15:56 Post subject: |
|
|
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 |
|
|
Senalaya
Joined: 29 Dec 2004 Posts: 82 Location: Germany
|
Posted: Thu Apr 26, 2007 0:07 Post subject: |
|
|
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 |
|
|
Grinning Fool
Joined: 12 Feb 2005 Posts: 264
|
Posted: Thu Apr 26, 2007 4:49 Post subject: |
|
|
(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 |
|
|
virusman
Joined: 30 Jan 2005 Posts: 1020 Location: Russia
|
Posted: Thu Apr 26, 2007 12:58 Post subject: |
|
|
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 |
|
|
Senalaya
Joined: 29 Dec 2004 Posts: 82 Location: Germany
|
Posted: Thu Apr 26, 2007 13:10 Post subject: |
|
|
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 |
|
|
virusman
Joined: 30 Jan 2005 Posts: 1020 Location: Russia
|
Posted: Thu Apr 26, 2007 13:34 Post subject: |
|
|
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. |
|
Back to top |
|
|
Papillon x-man
Joined: 28 Dec 2004 Posts: 1060 Location: Germany
|
Posted: Thu Apr 26, 2007 15:20 Post subject: |
|
|
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 |
|
|
Grinning Fool
Joined: 12 Feb 2005 Posts: 264
|
Posted: Thu Apr 26, 2007 16:29 Post subject: |
|
|
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 |
|
|
Papillon x-man
Joined: 28 Dec 2004 Posts: 1060 Location: Germany
|
Posted: Thu Apr 26, 2007 16:59 Post subject: |
|
|
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 |
|
|
Senalaya
Joined: 29 Dec 2004 Posts: 82 Location: Germany
|
Posted: Thu Apr 26, 2007 17:14 Post subject: |
|
|
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 |
|
|
Grinning Fool
Joined: 12 Feb 2005 Posts: 264
|
Posted: Thu Apr 26, 2007 17:18 Post subject: |
|
|
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 |
|
|
|
|
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
|