You could apply a description to a set item you give the player, perhaps with a scroll icon, and give it a UNIQUE TAG.
Let's get to your first issue.
void main()
{
//After declaring objects etc.
string sDesc = GetDescription(oSword);
SetDescription(oSword, sDesc + " Enchanted by the blacksmith.");
Try flipping your SetDescription() around. I assume you've declared oSword somewhere in your script.
string sDesc = GetDescription(oSword);
sDesc += "Enchanted by the blacksmith.";
SetDescription(oSword, sDesc);
You might need to set up a CustomToken for carriage RETURN for descriptions. If so, you can then use "\n \n" in descriptions for hard returns to space out descriptions. Just place the CustomToken in your OnModuleLoad event.
SetCustomToken(1111, "\n"); //carriage return
An example:
sDesc +="\n \nEnchanted by the blacksmith.";
This would dump two hard carriage returns after the sword's normal description, followed by Enchanged by the blacksmith.
Whenever you want to append text to a description, you must always get that description first. Store it, then add to it, then store it again.
string sDesc = GetDescription(oSword);
sDesc += "\n \nUpgraded by the Swamp Hag.";
SetDescription(oSword, sDesc);
Thus, after the above examples, the description would be:
"Longsword given by your father longtime ago bla bla bla"
"Enchanted by the blacksmith."
"Upgraded by the Swamp Hag."
For your second request, you'll need to have something that we can tell the script, "Hey! They picked a Unicorn!". Setting a variable would be easy enough. Then, in the script we set the description to the item, we'd use a variable check.
if (GetLocalInt(GetFirstPC(), "birthsign") == 1) // 1 equals UNICORN; 2 equals SPIDER; 3 equals BEAR ... etc
{
string sDescription = GetDescription(oBirthSign); // oBirthSign would need to be declared.
sDescription += "Your Birthsign is that of the majestic and peace dwelling Unicorn.";
SetDescription(oBirthSign, sDescription);
}
if (GetLocalInt(GetFirstPC(), "birthsign") == 2) // 1 equals UNICORN; 2 equals SPIDER; 3 equals BEAR ... etc
{
string sDescription = GetDescription(oBirthSign); // oBirthSign would need to be declared.
sDescription += "Your Birthsign is that of a lurking and web spinning arachnid.";
SetDescription(oBirthSign, sDescription);
}
FP!