Minor update to login and moved credits

This commit is contained in:
kinther 2025-12-24 13:48:43 -08:00
parent d4bda3ad4a
commit 7c23a93b7a
8 changed files with 137 additions and 133 deletions

View file

@ -1,7 +1,15 @@
T B A M U D
2 0 2 5
You are descending into...
Based on CircleMUD by Jeremy Elson and DikuMUD by Hans-Henrik Staerfeldt,
Katja Nyboe, Tom Madsen, Michael Seifert, and Sebastian Hammer
___ ____ _ _
| \/ (_) | | | |
| . . |_ _ __ __ _ _ __ | |_| |__ __ _ ___
| |\/| | | '__/ _` | '_ \| __| '_ \ / _` / __|
| | | | | | | (_| | | | | |_| | | | (_| \__ \
\_| |_/_|_| \__,_|_| |_|\__|_| |_|\__,_|___/
By what name do you wish to be known?
Select an option:
[C] Connect to the game
[X] Disconnect from the game
Enter choice:

View file

@ -7069,14 +7069,14 @@ questions, you may want to ask someone whose level is at least 32. Of course,
everyone is encouraged to help everyone else, but know that those who are not
at least level 32 may have relatively little experience.
Level 31 (Immortal) Anyone who is new to TBA and is working on their trial
Level 2 (Immortal) Anyone who is new to TBA and is working on their trial
vnum or zone.
Level 32 (God) An experienced builder with proven knowledge that is
Level 3 (God) An experienced builder with proven knowledge that is
willing to teach others. Immortals of level 32 and above
are considered staff.
Level 33 (Greater God) An experienced builder that has contributed significantly
Level 4 (Greater God) An experienced builder that has contributed significantly
to TBA.
Level 34 (Implementor) Current developers: Welcor, Wyld, and Opie.
Level 5 (Implementor) Current developers: Welcor, Wyld, and Opie.
Please do not bother asking to be advanced. If your goal is merely to rise in
the ranks, you are wasting your time. The Gods here are dedicated to helping

View file

@ -1,11 +1,7 @@
(lib/text/imotd)
Welcome to tbaMUD!
This is the immortal MOTD -- the file that immortals will see when they
log in to the game. You should change it to something more interesting
when you get a chance (as well as most of the other files in lib/text.)
If you need help, find a bug, or wish to contribute please stop by
The Builder Academy at: tbamud.com 9091 or @Chttp://tbamud.com@n.
+-----------------------------------------------------------------------------+
| |
| Based on tbaMUD by Rumble, CircleMUD by Jeremy Elson, and DikuMUD by |
| Hans-Henrik Staerfeldt, Katja Nyboe, Tom Madsen, Michael Seifert, |
| and Sebastian Hammer. |
| |
+-----------------------------------------------------------------------------+

View file

@ -1,4 +1,7 @@
Welcome to
T B A M U D
D E V E L O P M E N T P O R T
Please be brutal with the bug, idea, and typo commands. -- Rumble
+-----------------------------------------------------------------------------+
| |
| Based on tbaMUD by Rumble, CircleMUD by Jeremy Elson, and DikuMUD by |
| Hans-Henrik Staerfeldt, Katja Nyboe, Tom Madsen, Michael Seifert, |
| and Sebastian Hammer. |
| |
+-----------------------------------------------------------------------------+

View file

@ -1449,7 +1449,7 @@ static void init_descriptor (struct descriptor_data *newd, int desc)
*newd->output = '\0';
newd->bufptr = 0;
newd->has_prompt = 1; /* prompt is part of greetings */
STATE(newd) = CONFIG_PROTOCOL_NEGOTIATION ? CON_GET_PROTOCOL : CON_GET_NAME;
STATE(newd) = CONFIG_PROTOCOL_NEGOTIATION ? CON_GET_PROTOCOL : CON_GET_CONNECT;
CREATE(newd->history, char *, HISTORY_SIZE);
if (++last_desc == 1000)
last_desc = 1;
@ -2135,7 +2135,7 @@ static void check_idle_passwords(void)
for (d = descriptor_list; d; d = next_d) {
next_d = d->next;
if (STATE(d) != CON_PASSWORD && STATE(d) != CON_GET_NAME)
if (STATE(d) != CON_PASSWORD && STATE(d) != CON_GET_NAME && STATE(d) != CON_GET_CONNECT)
continue;
if (!d->idle_tics) {
d->idle_tics++;

View file

@ -1321,7 +1321,7 @@ EVENTFUNC(get_protocols)
write_to_output(d, buf, 0);
write_to_output(d, GREETINGS, 0);
STATE(d) = CON_GET_NAME;
STATE(d) = CON_GET_CONNECT;
return 0;
}
@ -1366,6 +1366,26 @@ void nanny(struct descriptor_data *d, char *arg)
case CON_GET_PROTOCOL:
write_to_output(d, "Collecting Protocol Information... Please Wait.\r\n");
return;
case CON_GET_CONNECT:
if (!*arg) {
write_to_output(d, GREETINGS, 0);
return;
}
switch (UPPER(*arg)) {
case 'C':
write_to_output(d, "By what name do you wish to be known? ");
STATE(d) = CON_GET_NAME;
return;
case 'X':
write_to_output(d, "Goodbye.\r\n");
STATE(d) = CON_CLOSE;
return;
default:
write_to_output(d,
"That is an invalid selection.\r\n");
write_to_output(d, GREETINGS, 0);
return;
}
case CON_GET_NAME: /* wait for input of name */
if (d->character == NULL) {
CREATE(d->character, struct char_data, 1);
@ -1437,7 +1457,7 @@ void nanny(struct descriptor_data *d, char *arg)
/* Check for multiple creations of a character. */
if (!valid_name(tmp_name)) {
write_to_output(d, "Invalid name, please try another.\r\nName: ");
write_to_output(d, "Invalid name, please try another.\r\nBy what name do you wish to be known? ");
return;
}
CREATE(d->character->player.name, char, strlen(tmp_name) + 1);
@ -1468,7 +1488,7 @@ void nanny(struct descriptor_data *d, char *arg)
echo_off(d);
STATE(d) = CON_NEWPASSWD;
} else if (*arg == 'n' || *arg == 'N') {
write_to_output(d, "Okay, what IS it, then? ");
write_to_output(d, "Okay, what IS it, then?\r\nBy what name do you wish to be known? ");
free(d->character->player.name);
d->character->player.name = NULL;
STATE(d) = CON_GET_NAME;
@ -1721,42 +1741,44 @@ case CON_QCLASS:
}
case CON_PLR_DESC:
/* If the player canceled or has no description, prompt again */
if (!d->character->player.description || !*d->character->player.description) {
/* Description accepted — save and continue */
save_char(d->character);
if (!GET_BACKGROUND(d->character) || !*GET_BACKGROUND(d->character)) {
write_to_output(d,
"\r\nYou must provide a description before entering the world.\r\n"
"Please try again. Type '/s' on a blank line when finished.\r\n\r\n");
"\r\nBefore stepping into Miranthas, share a bit of your character's background.\r\n"
"Guideline: aim for at least four lines that hint at where they came from,\r\n"
"who shaped them, and why they now walk the Tyr region. Touch on things like:\r\n"
" - The city-state, tribe, or caravan that claimed them.\r\n"
" - Mentors, slavers, or patrons who left a mark.\r\n"
" - A defining hardship, triumph, oath, or secret.\r\n"
" - The goal, vengeance, or hope that drives them back into the wastes.\r\n"
"\r\nExample 1:\r\n"
" Raised beneath the ziggurat of Tyr, I learned to barter gossip between\r\n"
" templars and gladiators just to stay alive. Freedom came when Kalak fell,\r\n"
" but the slave-scar on my shoulder still aches. I now search the desert\r\n"
" for the relic my clutch mates died protecting, hoping to buy their kin peace.\r\n"
"\r\nExample 2:\r\n"
" I rode caravan outrider routes from Balic until giants shattered our train.\r\n"
" Two nights buried in silt taught me to whisper with the wind and trust only\r\n"
" my erdlu. I hunt the warlord who sold us out, yet coin and company on the\r\n"
" road must come first.\r\n"
"\r\nExample 3:\r\n"
" Born outside Raam, I was tempered by obsidian shards and psionic murmurs.\r\n"
" A defiler ruined our oasis, so I swore to hound such spell-scars wherever\r\n"
" they bloom. Rumor of a hidden well near Tyr is the lone hope that guides me.\r\n"
"\r\nType your background now. Use '/s' on a blank line when you finish.\r\n"
"If you'd rather keep it secret, just save immediately and we'll note the mystery.\r\n\r\n");
d->backstr = NULL;
d->str = &d->character->player.description;
if (GET_BACKGROUND(d->character) && *GET_BACKGROUND(d->character))
d->backstr = strdup(GET_BACKGROUND(d->character));
d->str = &d->character->player.background;
d->max_str = PLR_DESC_LENGTH;
STATE(d) = CON_PLR_BACKGROUND;
send_editor_help(d);
return;
}
/* Count lines */
{
int line_count = 0;
for (char *p = d->character->player.description; *p; p++)
if (*p == '\n')
line_count++;
if (line_count < 4) {
write_to_output(d,
"\r\nYour description must be at least four lines long.\r\n"
"Please expand on your appearance and try again.\r\n");
free(d->character->player.description);
d->character->player.description = NULL;
d->backstr = NULL;
d->str = &d->character->player.description;
d->max_str = PLR_DESC_LENGTH;
send_editor_help(d);
return;
}
}
/* Description accepted — save and continue */
save_char(d->character);
write_to_output(d, "%s\r\n*** PRESS RETURN: ", motd);
STATE(d) = CON_RMOTD;
@ -1781,72 +1803,6 @@ case CON_QCLASS:
break;
case '1':
/* Require a description before entering the world */
if (!d->character->player.description || !*d->character->player.description) {
write_to_output(d,
"\r\nBefore entering the world, you must describe your character.\r\n"
"Focus on what others can immediately see — height, build, complexion,\r\n"
"facial structure, hair, eyes, and other physical traits.\r\n"
"When done, type '/s' on a blank line.\r\n\r\n");
d->backstr = NULL;
d->str = &d->character->player.description;
d->max_str = PLR_DESC_LENGTH;
STATE(d) = CON_PLR_DESC;
send_editor_help(d);
return;
} else {
int line_count = 0;
for (char *p = d->character->player.description; *p; p++)
if (*p == '\n')
line_count++;
if (line_count < 4) {
write_to_output(d,
"\r\nYour description must be at least four lines long.\r\n"
"Please expand it before entering the world.\r\n\r\n");
d->backstr = NULL;
d->str = &d->character->player.description;
d->max_str = PLR_DESC_LENGTH;
STATE(d) = CON_PLR_DESC;
send_editor_help(d);
return;
}
}
if (!GET_BACKGROUND(d->character) || !*GET_BACKGROUND(d->character)) {
write_to_output(d,
"\r\nBefore stepping into Athas, share a bit of your character's background.\r\n"
"Guideline: aim for at least four lines that hint at where they came from,\r\n"
"who shaped them, and why they now walk the Tyr region. Touch on things like:\r\n"
" - The city-state, tribe, or caravan that claimed them.\r\n"
" - Mentors, slavers, or patrons who left a mark.\r\n"
" - A defining hardship, triumph, oath, or secret.\r\n"
" - The goal, vengeance, or hope that drives them back into the wastes.\r\n"
"\r\nExample 1:\r\n"
" Raised beneath the ziggurat of Tyr, I learned to barter gossip between\r\n"
" templars and gladiators just to stay alive. Freedom came when Kalak fell,\r\n"
" but the slave-scar on my shoulder still aches. I now search the desert\r\n"
" for the relic my clutch mates died protecting, hoping to buy their kin peace.\r\n"
"\r\nExample 2:\r\n"
" I rode caravan outrider routes from Balic until giants shattered our train.\r\n"
" Two nights buried in silt taught me to whisper with the wind and trust only\r\n"
" my erdlu. I hunt the warlord who sold us out, yet coin and company on the\r\n"
" road must come first.\r\n"
"\r\nExample 3:\r\n"
" Born outside Raam, I was tempered by obsidian shards and psionic murmurs.\r\n"
" A defiler ruined our oasis, so I swore to hound such spell-scars wherever\r\n"
" they bloom. Rumor of a hidden well near Tyr is the lone hope that guides me.\r\n"
"\r\nType your background now. Use '/s' on a blank line when you finish.\r\n"
"If you'd rather keep it secret, just save immediately and we'll note the mystery.\r\n\r\n");
d->backstr = NULL;
if (GET_BACKGROUND(d->character) && *GET_BACKGROUND(d->character))
d->backstr = strdup(GET_BACKGROUND(d->character));
d->str = &d->character->player.background;
d->max_str = PLR_DESC_LENGTH;
STATE(d) = CON_PLR_BACKGROUND;
send_editor_help(d);
return;
}
/* Proceed into the world */
load_result = enter_player_game(d);
send_to_char(d->character, "%s", CONFIG_WELC_MESSG);

View file

@ -125,6 +125,7 @@ void string_write(struct descriptor_data *d, char **writeto, size_t len, long ma
void string_add(struct descriptor_data *d, char *str)
{
int action;
char **orig_str = d->str;
/* Determine if this is the terminal string, and truncate if so. Changed to
* only accept '\t' at the beginning of line. - JE */
@ -207,6 +208,7 @@ void string_add(struct descriptor_data *d, char *str)
/* Ok, now final cleanup. */
if (action == STRINGADD_SAVE || action == STRINGADD_ABORT) {
int i;
int chain_write;
struct {
int mode;
void (*func)(struct descriptor_data *d, int action);
@ -231,15 +233,18 @@ void string_add(struct descriptor_data *d, char *str)
(*cleanup_modes[i].func)(d, action);
/* Common post cleanup code. */
d->str = NULL;
d->mail_to = 0;
d->max_str = 0;
if (d->character && !IS_NPC(d->character)) {
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_BUG);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_IDEA);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_TYPO);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_MAILING);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_WRITING);
chain_write = (d->str && d->str != orig_str);
if (!chain_write) {
d->str = NULL;
d->mail_to = 0;
d->max_str = 0;
if (d->character && !IS_NPC(d->character)) {
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_BUG);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_IDEA);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_TYPO);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_MAILING);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_WRITING);
}
}
} else if (action != STRINGADD_ACTION && strlen(*d->str) + 3 <= d->max_str) /* 3 = \r\n\0 */
strcat(*d->str, "\r\n");
@ -300,6 +305,41 @@ static void exdesc_string_cleanup(struct descriptor_data *d, int action)
if (action == STRINGADD_ABORT)
write_to_output(d, "Description aborted.\r\n");
if (d->character && (!GET_BACKGROUND(d->character) || !*GET_BACKGROUND(d->character))) {
write_to_output(d,
"\r\nBefore stepping into Miranthas, share a bit of your character's background.\r\n"
"Guideline: aim for at least four lines that hint at where they came from,\r\n"
"who shaped them, and why they now walk the Tyr region. Touch on things like:\r\n"
" - The city-state, tribe, or caravan that claimed them.\r\n"
" - Mentors, slavers, or patrons who left a mark.\r\n"
" - A defining hardship, triumph, oath, or secret.\r\n"
" - The goal, vengeance, or hope that drives them back into the wastes.\r\n"
"\r\nExample 1:\r\n"
" Raised beneath the ziggurat of Tyr, I learned to barter gossip between\r\n"
" templars and gladiators just to stay alive. Freedom came when Kalak fell,\r\n"
" but the slave-scar on my shoulder still aches. I now search the desert\r\n"
" for the relic my clutch mates died protecting, hoping to buy their kin peace.\r\n"
"\r\nExample 2:\r\n"
" I rode caravan outrider routes from Balic until giants shattered our train.\r\n"
" Two nights buried in silt taught me to whisper with the wind and trust only\r\n"
" my erdlu. I hunt the warlord who sold us out, yet coin and company on the\r\n"
" road must come first.\r\n"
"\r\nExample 3:\r\n"
" Born outside Raam, I was tempered by obsidian shards and psionic murmurs.\r\n"
" A defiler ruined our oasis, so I swore to hound such spell-scars wherever\r\n"
" they bloom. Rumor of a hidden well near Tyr is the lone hope that guides me.\r\n"
"\r\nType your background now. Use '/s' on a blank line when you finish.\r\n"
"If you'd rather keep it secret, just save immediately and we'll note the mystery.\r\n\r\n");
d->backstr = NULL;
if (GET_BACKGROUND(d->character) && *GET_BACKGROUND(d->character))
d->backstr = strdup(GET_BACKGROUND(d->character));
d->str = &d->character->player.background;
d->max_str = PLR_DESC_LENGTH;
STATE(d) = CON_PLR_BACKGROUND;
send_editor_help(d);
return;
}
write_to_output(d, "%s", CONFIG_MENU);
STATE(d) = CON_MENU;
}

View file

@ -340,6 +340,7 @@
#define CON_MSGEDIT 32 /**< OLC mode - message editor */
#define CON_PLR_BACKGROUND 33 /**< Entering a new character background */
#define CON_GET_PROTOCOL 33 /**< Used at log-in while attempting to get protocols > */
#define CON_GET_CONNECT 34 /**< Login connect/disconnect menu */
/* OLC States range - used by IS_IN_OLC and IS_PLAYING */
#define FIRST_OLC_STATE CON_OEDIT /**< The first CON_ state that is an OLC */