|
Post by Tellenger on Jan 18, 2008 1:30:22 GMT
I've been looking for a language system to implement into a persistent world I have been developing and came across SIMTools through the Vault. The capabilities of these tools look very promising although far more robust than I require. I would like to know what your recommendation for installing this would be to take advantage of the language system would be.
The current base module has been scripted using HCR 3.2 and DMFI without voice capabilities and the standard Bioware database system. I do not currently run NWNX.
I appreciate any help! Thanks.
Tellenger
|
|
|
Post by FunkySwerve on Jan 18, 2008 3:10:09 GMT
It'll be hairy if you are running DMFI, since SIMTools basically does everything it does, aside from the spawns. DMFI has languages as well, they're actually what SIMTools' were based on, though they've since borrowed some in return. If you aren't interested in a lot of what SIMTools has to offer, my first recommendation would probably be to use DMFI languages - you could add the SIMTools ones to it without too much hassle, I expect, as they use nearly identical implementation at the lower levels. If you are planning for the long term, though, and expect to want more, then I would recommend nwnx in the strongest possible terms. It just has everything to offer that bioware's doesn't. Here's a link to a 'is it worth it thread I responded to some time back, that got stickied: www.nwnx.org/phpBB2/viewtopic.php?t=478&start=0As another example, here's something I worked on today: void ListHardcoreRecords(object oPC, int nType = HCTYPE_HARDCORE) { string sSQL = "SELECT hc_name, hc_player, hc_xp, hc_logs, hc_deleted FROM hardcore WHERE hc_type = " + IntToString(nType) + " ORDER BY hc_xp DESC LIMIT 50"; SQLExecDirect(sSQL); string sName, sPlayer, sXP, sLogs, sDeleted, sReport; if (nType == 1) sReport = "<cßþ>Hardcore Hall of Fame</c>\n"; else sReport = "<cßþ>Softcore Hall of Fame</c>\n"; while (SQLFetch() != SQL_ERROR) { sName = SQLGetData(1); sPlayer = SQLGetData(2); sXP = SQLGetData(3); sLogs = SQLGetData(4); sDeleted = SQLGetData(5); if (sDeleted == "1") { if (nType == 1) sDeleted = "<c~~~>[Deceased]"; else sDeleted = "<c~~~>[Respawned]"; } else sDeleted = ""; sReport = sReport + "<cþïP>[Player: " + sPlayer + "]<c þ >[Character: " + sName + "]<cþþþ>[Exp: " + DisplayCommasInNumber(sXP) + "]<cþ>[Dead Logouts: " + sLogs + "]" + sDeleted + "</c>\n"; } SendMessageToPC(oPC, sReport); } That fires off the top 50 exp totals that players have achieved in our exp system, from highest to lowest. It would theoretically be possible to do this with the bioware database, but you'd have to pull ALL the reconds, and sort through them over and over to get highest to lowest. The cost in cpu would be rediculous, and it'd take forever to write. With nwnx-mysql, it's simple and incredibly light on cpu. If you are thinking longterm, I'd also recommend scrapping DMFI. It's an anachronism, now, though I think they moved to the speech plugin as an option once SIMTools debuted. SIMTools just offers alot more flexibility with a lot less clutter, both in the mod and in your inventory. Not to mention the ease of targeting commands with tells. My DMs hardly log in DM anymore. HCR, I know nothing about, though it shouldn't interfere with SIMTools at all, and vice versa. So, my final recommendation really rests on whether you are looking short term or long. I should also add that SIMTools is still being updated, while DMFI I don't belive is, at least not for nwn1. The readme should cover the installation basics, and I'm happy to help more if you need it, though I do ask that you read the readme thoroughly first. Funky
|
|
|
Post by Tellenger on Jan 18, 2008 4:07:41 GMT
Thanks for the reply, FunkySwerve.
What is most attractive about the language system available in SIMTools in comparision to DMFI is the OnSpeech event that is used rather than a listener object which follows the PC around. The DMFI scripts I've incorporated into my PW have been stripped down and customized quite a bit. This included removing the listener/voice functionality that I believe is required for the DMFI languages. In essence, it is a 'lite' version of DMFI, and I don't foresee a lot of overlap due to the removal of many of DMFI's functions.
In addition to the DMFI, there are several other functions which use the Bioware database (each one a uniqe database) such as persistent storage, fishing/skinning skills, etc.
Ideally, I'd like to implement SIMTools for the languages, keeping the option of utilizing more of the functions in the future. I'm hesitant to attempt a complete rework of the databases and would prefer if SIMTools can run along side of the other systems already in place. Would implementation of NWNX disrupt these databases?
Thanks again for the help, FunkySwerve.
Tellenger
|
|
|
Post by FunkySwerve on Jan 18, 2008 4:46:37 GMT
Not at all. We ran nwnx side by side with the bio db for a long time, there's no interference. We wound up making a complete switch when the bio dbs started exploding on us. You should be able to install SIMTools with no hassle at all. Be warned, though, that the plugin it uses will need updating in 1.69, we assume - untested as of yet since we are still updating our other hacks to try in beta. It shouldnt' pose too much of a problem, though, and SIMTools will still offer more features than any system that might come along based on the bioware OnSpeech event in 1.69, because it doesn't capture tells, or dm channel. Might as well install now, given everything you've said.
Funky
|
|
|
Post by Tellenger on Jan 21, 2008 10:00:46 GMT
FunkySwerve,
This is a wonderful bit of scripting. Thank you for it.
There were a few issues with merging SIMTools and HCR. It seems that the module events that HCR uses had definition overlaps of the persistency script functions (GetPersistentInt(), SetPersistentString(), etc.). Both HCR and SIMTools use these commands but define them differently which caused compiling errors. I was able to work around it by changing the SIMTools functions to SetSIMPersistentInt() since there were far fewer changes in the SIMTools scripts than HCR.
HCR's OnClientEnter default script uses the string sID which is defined differently than the corresponding sID definition in the SIMTools OnClientEnter script. Again this was easily corrected by changing the definition of the SIMTools variable to sSIMID.
Our board is currently voting on whether or not to implement the language system and a concern has been brought up regarding the displaying of text emotes as garbled text if the listening PC does not know the language being spoken by the emoting PC. Is it possible for the system to translate only spoken text and not emotive text? On our PW, emotive text is generally bound by asteriks: "Don't look at me that way, *he says with a forceful frown.* The facial expression should be able to be read by any PC regardless of language.
Thanks for any help.
Tellenger
|
|
|
Post by FunkySwerve on Jan 21, 2008 11:06:24 GMT
Text inbetween asterisks is not converted to other languages for this very reason: You should be aware, however, that if you use emotes, and enter an asterisk as the first character in a line, it will try to fire off an emote and result in an 'Invalid Emote' warning. This only appears in the combat log, and is not very obtrusive, but if you want to keep *s for ingame player emotes you can rekey the emote character to something other than the asterisk in fk_chat_config: const string EMOTE_SYMBOL = "*";//Set this to whatever single character you want players to access the emotes //with. It is recommended that you select only a normally unused symbol, because any line beginning with this //symbol will be seen by the system as an attempted emote, and suppressed accordingly (with an 'invalid emote' //warning if they aren't among the listed emotes). ONLY A SINGLE CHARACTER MAY BE USED. Do not choose the //forward slash (/), or metachannels and languages will not work. You may simply choose to use the default //asterisk symbol, if you prefer. If you select a symbol other than the asterisk, the list commands and list //emotes functions will display the correct symbol automatically, but you will have to change the descriptions //of the 2 items to reflect the change, if you plan to use them and want them to be accurate. Also be aware that should you need to send a scripted speakstring that will NOT be converted to language no matter what, there is an escape string provided you can add to any spoken string. If spoken normally, the escape string is just parsed out. But if the character is speaking a language, the escape string is parsed out and spoken string is left unconverted: const string ESCAPE_STRING = "&&";//Adding this escape string to the beginning of a SpeakString call will //prevent the speaker from translating the string if they are in 'speak another language' mode. The excape //string is automatically filtered out of what they say, whether or not they are speaking another language //at the time. It's useful for adding to the begging of strings in scripts that you don't ever want to be //translated, like loot notification messsages. You can set it to whatever string you want, of whatever //length, so long as it does not begin with your command symbol (default is !), your emote symbol //(default is *), or the forward slash channel designator (/). It should only be used for TALKVOLUME_TALK //SpeakStrings, as they are the only volume subject to translation. We use this in a number of places, for example in our OnAcquired loot notification script. Reading through the fky_chat_config script carefully will be well worth your time. Please let me know if you have any other questions. Funky
|
|
|
Post by Tellenger on Jan 21, 2008 18:14:50 GMT
Thanks, FunkySwerve. I just wanted to confirm that text between asteriks would not be processed as I didn't see mention of that in the config script.
Again, thank you for the wonderful script!
|
|