Aller au contenu

Photo

Killer's Town Crier Help


  • Veuillez vous connecter pour répondre
4 réponses à ce sujet

#1
WoC_Builder

WoC_Builder
  • Members
  • 225 messages
Hello all.  I am running into an issue while trying to utilize Killer Town Crier v1.0 by Axe

It has a persistent version, which is fine, but all the Town Criers use the same database.  My attempt to rename it to a local variable failed, so I thought I would ask here to see if my logic is off.

Here is the default code, where it sets the DB name.
// Town Crier Library Script
//:://///////////////////////////////////////////////////
// _town_crier_inc
//:://///////////////////////////////////////////////////
// Contains several functions which can be used to change the Town
// Criers behavior from a script during play.
//:://///////////////////////////////////////////////////
const string DEFAULT_TOWN_CRIER_DATABASE_NAME = "TownCrier";


//:://///////////////////////////////////////////////////////////////
// GetTownCrierDatabaseName()
//    Returns the database name used by the persistent system to store
//    the town crier's persistent information.
//:://///////////////////////////////////////////////////////////////
string GetTownCrierDatabaseName()
{ return (DEFAULT_TOWN_CRIER_DATABASE_NAME +"_" +GetModuleName());
}

string TOWN_CRIER_DATABASE_NAME = GetTownCrierDatabaseName();

And here are my edits.  Where i placed my localstring is on the individual TownCriers that i had placed in my test mod; three in total, each with a different localstring for the name of each town in which we need to place them.

string GetTownCrierDatabaseName()
{ return (DEFAULT_TOWN_CRIER_DATABASE_NAME +"_" +GetLocalString(OBJECT_SELF,"TownName"));
}

string TOWN_CRIER_DATABASE_NAME = GetTownCrierDatabaseName();

What I ended up with in my data folder was named "TOWNCRIER_ORIGINAL-BLANK", and each Town Crier cries news placed on other criers.

All I can figure is is that since the GetLocalString is called in an include file, perhaps the include is not really "on" the crier, and so it cannot read a local string placed on the crier?

Any ideas?

Everything else about this system works wonderfully, and I really hope we can work around the single DB for the criers.  :)

Thanks all, Russ :D

#2
WoC_Builder

WoC_Builder
  • Members
  • 225 messages
LOL

And found a fix on the vault, looking at comments from the original post. A link was posted to the old boards, suggesting a fix here.

#3
WoC_Builder

WoC_Builder
  • Members
  • 225 messages
Well heck. somehow it got broke, but now, thanks to the old boards being down, I cannot find the OP.

Does anyone have a working copy of that script, so we can get our individual criers back?

Please?

#4
Fester Pot

Fester Pot
  • Members
  • 1 394 messages

By Axe Murderer on 09/14/09 20:45
Yeah you can do that but there's gonna be a little busy work to do...

1. Edit _town_crier_inc script and up near the top you see this bit:

NWScript:
//::///////////////////////////////////////////////////////////////////
GetTownCrierDatabaseName()
// Returns the database name used by the persistent system to store
// the town crier's persistent information.
//:://///////////////////////////////////////////////////////////////

string GetTownCrierDatabaseName()
{
return (DEFAULT_TOWN_CRIER_DATABASE_NAME +"_" +GetModuleName());
}

string TOWN_CRIER_DATABASE_NAME = GetTownCrierDatabaseName();

Change it to look like this:

NWScript:

//::///////////////////////////////////////////////////////////////////
GetTownCrierDatabaseName( string sTownCrier = "")
// string sTownCrier - the tag of the town crier to get the database name for.
// Returns the database name used by the persistent system to store
// the town crier's persistent information.
//:://///////////////////////////////////////////////////////////////

string GetTownCrierDatabaseName( string sTownCrierTag == "")
{

if( sTownCrierTag == "") return

(DEFAULT_TOWN_CRIER_DATABASE_NAME +"_" +GetModuleName());

return (DEFAULT_TOWN_CRIER_DATABASE_NAME +"_" +sTownCrierTag);

}

string TOWN_CRIER_DATABASE_NAME = GetTownCrierDatabaseName();

2. Go thru the rest of the script and everywhere you see the constant

TOWN_CRIER_DATABASE_NAME

change it to say

GetTownCrierDatabaseName( GetTag( oTownCrier))

except for in the last function called SetPCNewsworthy, leave that one as it is.

3. Next edit all the scripts that start with crier_at1a1 (there are 8 of them a-h). Everywhere in those where you see the constant

TOWN_CRIER_DATABASE_NAME

change it to say

GetTownCrierDatabaseName( GetTag( OBJECT_SELF))

4. Edit crier_at1c1a, crier_at1d1a, crier_at1e1a, crier_at1e1b, crier_at1e1c, crier_heartbeat, and crier_spawn. Do the same thing...

TOWN_CRIER_DATABASE_NAME

change it to say

GetTownCrierDatabaseName( GetTag( OBJECT_SELF))

5. Edit crier_taw1a and do the same thing

TOWN_CRIER_DATABASE_NAME

change it to say

GetTownCrierDatabaseName( GetTag( OBJECT_SELF))

except in this one only change the one for the "Crying" variable. There are two in there, one for the PC called "TownCrierNewsworthy" and one for the NPC called "Crying"...just change the "Crying" one only. Leave the PC one alone.

Repeat this step for the script named crier_taw1b.

6. Rebuild the module make sure you get no errors.

That should do it. Now each crier will store his stuff in a different database named based on his TAG. If you give two of them the same TAG they will share the same database, give them different TAGs and they will use different databases. Note that setting a PC to be newsworthy will allow him to give news to any town crier, you won't be able to control that per area.
Didn't test this at all...


FP!

#5
WoC_Builder

WoC_Builder
  • Members
  • 225 messages
You, Sir, are very much appreciated!