Login
User Name:

Password:



Register

Forgot your password?
 I3 and IMC
Dec 26, 2024 3:27 am
By GatewaySysop
Hi - Clean SmaugFuss map/description issue..
Dec 15, 2024 7:29 pm
By Samson
AFKMud 2.2.4
Dec 10, 2024 4:09 pm
By Samson
Ubuntu 22.04.5 LTS
Dec 5, 2024 5:10 pm
By Remcon
SmaugFUSS 1.8/1.9
Nov 29, 2024 11:46 am
By Remcon
LOP 1.6
Author: Remcon
Submitted by: Remcon
SWFOTEFUSS 1.5.1
Author: Various
Submitted by: Samson
SWRFUSS 1.4.1
Author: Various
Submitted by: Samson
SmaugFUSS 1.9.5
Author: Various
Submitted by: Samson
AFKMud 2.2.4
Author: AFKMud Team
Submitted by: Samson
Users Online
Bing

Members: 0
Guests: 65
Stats
Files
Topics
Posts
Members
Newest Member
496
3,808
19,708
594
MaisieMacl

Today's Birthdays
There are no member birthdays today.
» SmaugMuds » Codebases » LoP Codebase » Account system ideas
Forum Rules | Mark all | Recent Posts

Account system ideas
< Newer Topic :: Older Topic >

Pages:<< prev 1, 2 next >>
Post is unread #1 Sep 29, 2013 1:18 pm   
Go to the top of the page
Go to the bottom of the page

dbna2

GroupMembers
Posts600
JoinedDec 3, 2008

 
Alright sorry its taken me so long to make this thread Remcon but here are some ideas from the account system...

Is the account system going to replace the current logon??? if so

A menu to delete/create new chars...
On this menu being able to change account passswords,
adding an account email.
The ability to choose what char you log into - A given....
Maybe certain information that can be added to accounts:
Email
Gamer Tags
Age
Birthday(this could be cool to have the mud do something cool for birthdays later down the road)
Forums account name(if mud has forums)

For immortals:
Being able to see what chars are connected with what accounts... (able to find alts).
Being able to edit accounts- (high level imm) incase something goes wrong.
Having access to account information so they are able to get email information.


Things to look out for....
Pfile Pruging will have to be updated to delete accounts instead of player files.

Post is unread #2 Sep 29, 2013 1:20 pm   
Go to the top of the page
Go to the bottom of the page

dbna2

GroupMembers
Posts600
JoinedDec 3, 2008

 
Linking playerfiles with accounts

Post is unread #3 Oct 8, 2013 9:51 pm   
Go to the top of the page
Go to the bottom of the page

dbna2

GroupMembers
Posts600
JoinedDec 3, 2008

 
Wondering on thoughts/ progress of this.

Post is unread #4 Oct 8, 2013 10:28 pm   
Go to the top of the page
Go to the bottom of the page

Remcon

GroupAdministrators
Posts1,946
JoinedJul 26, 2005

 
been busy, do have a little of it done

Post is unread #5 Oct 9, 2013 9:20 am   
Go to the top of the page
Go to the bottom of the page

ayuri

GroupMembers
Posts239
JoinedJun 13, 2008

 
I have something like this setup for my 'new game' I've been trying to port things over. Its actually part of the account system found on mudbites with a few touches. If you want Remcon, I'll fire up the game and let you poke about with it.

ayuri

Post is unread #6 Oct 9, 2013 10:41 am   
Go to the top of the page
Go to the bottom of the page

Remcon

GroupAdministrators
Posts1,946
JoinedJul 26, 2005

 
thanks if you want just do a copy paste of all it does at the menu for me for some ideas of what I might add as well as the display :)

Post is unread #7 Oct 9, 2013 12:04 pm   
Go to the top of the page
Go to the bottom of the page

ayuri

GroupMembers
Posts239
JoinedJun 13, 2008

 
Main account screen when you log in:
|Account: Ayuri| ============================================== [SW:TBD]
This Account has |625| RPP points!

New    - Create a new character for this account
Add    - Add a current character to this account
Who    - See who is online
List   - List characters who are associated with this account
Quit   - Log off the MUD
Play   - Play the character chosen (Note: Type play  to play that
character!)

Character       In Clan                 Quit In Room
Ayuri           None                 Immortal Complex Shits

This account may multiplay.
This account has immortal status.


This is from within the game typing 'account'
[Account: Ayuri   |===========================]
| Points: 625                 Immortal: Yes   |
| Multiplay: Yes                              |
|--------------|Characters|-------------------|
|  Ayuri                                      |
|======================================[SW:TBD]


Granted I don't have quest givers that give out quest points or anything like that. All could be easily rolled into it. I"ve not gone much beyond that however as well, last time I really touched it was back in 2011 or early 2012. Trying to figure out what direction I want to take, and then where to start ha.

ayuri

Post is unread #8 Oct 9, 2013 7:59 pm   Last edited Oct 9, 2013 8:19 pm by Amras
Go to the top of the page
Go to the bottom of the page

Amras

GroupMembers
Posts18
JoinedAug 11, 2008

 
First I think it should be mentioned that the account code that "Kaz Ro" released was "stolen" from the Rebellion in the Stars MUD which was done by Ewerta. Not that it entirely matters but I hate seeing people release code and claim all credit to it.

I have also installed the account code on my MUD (all headers left in place that Ewerta added) and I have modified it quite a bit. When I log in, I am presented with this account menu:

Welcome back Michael

Last logged in from: sydnns0109w-142176103007.pppoe-dynamic.High-Speed.ns.bellaliant.net
Last character played: Diablo

Email Address:  michael@themudhost.net
Account Status: Verified

Create - creates a character to add to account
Add    - adds an existing character to account
Menu   - displays this list
Who    - see who is on the game
Help   - displays a helpfile about accounts
List   - lists character attributes for each character in account
Quit   - terminates connection to the MUD
Play   - plays designated character

Account>


From within the MUD, I made an account command that displays the following:

Account Details:                     (Verified)
--------------------------------------------------------------------
First Name    : Michael              Last Name   : Francis
Account Name  : Michael              Account Type: Immortal Account
Character     : Diablo               Multiplay   : Yes
Account Points: 0                    Email       : michael@themudhost.net
--------------------------------------------------------------------
Other Characters:
Amras           The Empire           100        A Cheap Hotel


I was asking about Xerves send_email snippet earlier so I could send verification emails to accounts which just provides a 5 digit number. I have everything functioning properly with it. Account Points are used for changing your Rank and your Prename Title. You also need account points to use some of the more popular race choices on an SWR MUD. Also, if your account is not verified, you are limited to 1 character linked to your account. I made verification necessary for a bunch of things but what I mentioned was what I can remember.

Post is unread #9 Oct 9, 2013 8:54 pm   
Go to the top of the page
Go to the bottom of the page

dbna2

GroupMembers
Posts600
JoinedDec 3, 2008

 
need a delete option that ask for passwords.

Post is unread #10 Oct 9, 2013 9:34 pm   
Go to the top of the page
Go to the bottom of the page

Quixadhal

GroupMembers
Posts398
JoinedMar 8, 2005

 
It's a bit hard to tell, but I would highly recommend listing all the characters of the account directly at the account menu (if it doesn't already), rather than forcing the user to type "list".

Most MMO's show you your characters (or at least as many as will fit on a screen) so you can quickly and easily choose which one to play or delete, as well as making a new one.

Post is unread #11 Oct 9, 2013 10:26 pm   Last edited Oct 9, 2013 10:30 pm by ayuri
Go to the top of the page
Go to the bottom of the page

ayuri

GroupMembers
Posts239
JoinedJun 13, 2008

 
Amras said:

First I think it should be mentioned that the account code that "Kaz Ro" released was "stolen" from the Rebellion in the Stars MUD which was done by Ewerta. Not that it entirely matters but I hate seeing people release code and claim all credit to it.


Hrm, didn't know it was stolen. Sorry, I don't exactly follow whats going on all that much ha.

Bout the only thing extra mine does is add the rpp to the account file. Makes it handy, I think I had a post on here on looping though everyone or reloading the account file when a change was made to it. If someone is interested I can post the code I came up with looking at 'do_reward' as a template in fote.

I was going to get around to cleaning it up but first I was working on getting the basics working for what I wanted it to do, which was handle the rewards across all characters, so you could earn points on char A and spend them on char B.

Quixadhal,
Yes it does show you right at the start when you first login. Just at the time it was only me. I went and made a new 'test' char here:
Holonet Login: ayuri
Enter account password:
Last logged in from: localhost.localdomain
Last character played: Ayuri

|Account: Ayuri| ============================================== [SW:TBD]
This Account has |625| RPP points!

New    - Create a new character for this account
Add    - Add a current character to this account
Who    - See who is online
List   - List characters who are associated with this account
Quit   - Log off the MUD
Play   - Play the character chosen (Note: Type play  to play that
character!)

Character       In Clan                 Quit In Room
Ayuri           None                 Immortal Complex Shits
Test            None                 On a bunk

This account may multiplay.
This account has immortal status.


ayuri

Post is unread #12 Oct 10, 2013 8:52 am   
Go to the top of the page
Go to the bottom of the page

Amras

GroupMembers
Posts18
JoinedAug 11, 2008

 
No worries ayuri. Ewerta didn't seem to care too much when I brought it to his attention years ago that his code was available for download. Only thing I didn't like was KazRo put his name all over it.

I've also added dbna2's suggestion for a delete command. It deletes the account as well as all attached characters. You must also provide your password to do so. If you are interested in having a copy of that part of the code I'd be more then willing to share.

Post is unread #13 Oct 10, 2013 9:58 am   
Go to the top of the page
Go to the bottom of the page

ayuri

GroupMembers
Posts239
JoinedJun 13, 2008

 
Amras said:

No worries ayuri. Ewerta didn't seem to care too much when I brought it to his attention years ago that his code was available for download. Only thing I didn't like was KazRo put his name all over it.

I've also added dbna2's suggestion for a delete command. It deletes the account as well as all attached characters. You must also provide your password to do so. If you are interested in having a copy of that part of the code I'd be more then willing to share.


That's a nifty idea. I've always told the players to just use the suicide command and I'd give them a random weapon to do it.

My RPP loop if anyone wants to take a stab at it. I think it's fairly 'safe' but yeah...be warned not exactly a great code monkey and haven't touched this in years. My biggest concern was/is in the save_account( victim->desc->account ) parts. I think got the kinks ironed out there but not 100% on that.
CMDF( do_reward )
{
   //ACCOUNT_DATA *account;
   char_data *victim;
   char arg[MSL];
   int value;

   argument = one_argument( argument, arg );

   if( arg[0] == '\0' )
   {
      send_to_char("&wreward  \r\n", ch);
      send_to_char("This command is logged in a seperate file.\r\n", ch );
      return;
   }

   if( ( victim = get_char_world( ch, arg ) ) == nullptr )
   {
      send_to_char( "They aren't here.\r\n", ch );
      return;
   }
   if( victim->is_npc() )
   {
      send_to_char( "Not on NPC's.\r\n", ch );
      return;
   }
   if( argument[0] == '\0' )
   {
      send_to_char("&wreward  \r\n", ch);
      send_to_char("This command is logged in a seperate file.\r\n", ch );
      return;
   }
   value = atoi( argument );
   if( value < -500 || value > 1000 )
   {
      send_to_char("&wInvalid range. Try -500 to 1000.\r\n", ch );
      return;
   }
   if( value == 0 )
   {
      send_to_char("&wWhat is the use in that?\r\n", ch );
      return;
   }

   if( victim->desc == nullptr)
   {
      victim->rppoints += value;
      sprintf (log_buf, "%s rewarded to pfile.", victim->name);
      log_string( log_buf );
   }
   else
   {
      if( value > 0 )
      {
         ch_printf(victim, "&GYou've been rewarded with %d points.\r\n", value );
         ch_printf(ch, "&GYou've rewarded %s (%s) with %d points.\r\n", victim->name, victim->desc->account->name, value );
      }
      else
      {
         ch_printf(victim, "&GYou've been penalized by %d points.\r\n", value );
         ch_printf(ch, "&GYou've deducted %d points from %s.\r\n", value, victim->name);
      }
      victim->desc->account->points += value;
      save_account( victim->desc->account );
   }
}

Then for the player 'spending the rpp'
CMDF( do_rpconvert )
{
   char buf[MAX_STRING_LENGTH];
   if( ch->is_npc() )
      return;

   if( argument[0] == '\0' )
   {
      send_to_char( "&w&WSpend your RP points on what? The various options are:\r\n", ch );
      send_to_char( "&G+----------------------------------------------------+\r\n", ch );
      send_to_char( "&G| &W0&G | &WPersonal Capital Ship            &G|&W     150 RPP &G|&d\r\n", ch );
      send_to_char( "&G| &W1&G | &WForce on your current character  &G|&W     100 RPP &G|&d\r\n", ch );
      send_to_char( "&G| &W2&G | &WBonus Level to any Class         &G|&W      15 RPP &G|&d\r\n", ch );
      send_to_char( "&G| &W3&G | &WClone                            &G|&W       6 RPP &G|&d\r\n", ch );
      send_to_char( "&G| &W4&G | &W1 language point                 &G|&W       4 RPP &G|&d\r\n", ch );
      send_to_char( "&G| &W5&G | &W25,000 credits                   &G|&W       2 RPP &G|&d\r\n", ch );
      send_to_char( "&G| &W6&G | &W5% to any skill(max 100%)        &G|&W       1 RPP &G|&d\r\n", ch );
      send_to_char( "&G+----------------------------------------------------+&d\r\n\r\n\r\n", ch );

      send_to_char( "&WFor more information on any bonus, type 'help rpconvert'\r\n", ch );
      send_to_char( "&WTo buy your bonus, type 'rpconvert  [extra arguments]'\r\n", ch );
      send_to_char( "&rException&p: &WFor cloning, type 'clone' at the cloning center or 'backup' if you're a droid.\r\n", ch );
      send_to_char( "&rException&p: &WFor your Personal Capital Ship, please contact a member of the Immortal Staff.&d\r\n", ch);
      return;
   }
   if(atoi ( argument ) == 0)
   {
      send_to_char( "&GPlease contact a member of the Immortal Staff for this bonus.\r\n", ch);
      return;
   }

   if( atoi( argument ) == 1 )
   {

      if( ch->desc->account->points < 100 )
      {
         send_to_char("Force requires 100 RPP!\r\n", ch);
         return;
      }
      send_to_char("\r\n&WForce has been set on your current character!\r\n", ch);
      ch->force_chance = 1;
      if(ch->force_identified == -1 && ch->force_identified != 1)
         ch->force_identified = 0;

      ch->desc->account->points -= 100;
      save_account( ch->desc->account );
      save_char_obj( ch );
      send_to_char("This character now has the FORCE!\r\n", ch);

      snprintf(buf, MAX_STRING_LENGTH, "&WAccount &p%s &Whas purchased the FORCE on character %s\r\n", ch->desc->account->name, ch->name);
      log_string ( buf );
      return;
   }
   if( atoi( argument ) == 2 )
   {
      char arg1[MAX_STRING_LENGTH];
      int iClass;
      argument = one_argument( argument, arg1 );

      if( argument[0] == '\0' || !argument )
      {
         send_to_char( "&RSyntax: rpconvert 1 \r\n", ch );
         return;
      }

      if( ch->desc->account->points < 15 )
      {
         send_to_char( "&RThis bonus costs 15 RP points. You don't have enough.\r\n", ch );
         return;
      }


      for( iClass = 0; iClass < MAX_ABILITY; iClass++ )
      {

         if( UPPER( argument[0] ) == UPPER( ability_name[iClass][0] )
            && !str_prefix( argument, ability_name[iClass] ) && str_prefix( argument, "force" )
            && (max_level(ch, iClass) < 50) )
         {
            ch->bonus[iClass] += 1;
            ch_printf( ch, "&GYour ability in %s has been increased by 1!\r\n", ability_name[iClass] );
            ch_printf( ch, "%s increased class %s with rpconvert.", ch->name, ability_name[iClass] );
            ch->desc->account->points -= 15;
            save_account(ch->desc->account);
            save_char_obj( ch );
            snprintf(buf, MAX_STRING_LENGTH, "&WAccount &p%s &Whas purchased a level on character %s\r\n", ch->desc->account->name, ch->name);
            log_string ( buf );


            break;
         }
      }

      if( iClass == MAX_ABILITY )
      {
         send_to_char( "No such class.\r\n", ch );
         return;
      }

      return;
   }

   if( atoi( argument ) == 3 )
   {
      send_to_char( "&RJust type 'clone' or 'backup' at a cloning facility!\r\n", ch );
      return;
   }
   if( atoi( argument ) ==4 )
   {
      if(ch->desc->account->points <4)
      {
         send_to_char("&RThis bonus costs 2 RPP.\r\n", ch);
         return;
      }
      ch->desc->account->points -= 4;
      save_account(ch->desc->account);
      save_char_obj( ch );

      snprintf(buf, MAX_STRING_LENGTH, "&WAccount &p%s &Whas purchased a language point on character %s\r\n", ch->desc->account->name, ch->name);
      log_string ( buf );
      ch->pcdata->lang_lesson += 1;
      save_char_obj( ch );
      send_to_char( "&WYou've converted 4 RPP's for 1 language point!\r\n", ch);
      return;
   }

   if( atoi( argument ) ==5 )
   {
      if(ch->desc->account->points <2)
      {
         send_to_char("&RThis bonus costs 2 RPP.\r\n", ch);
         return;
      }
      ch->gold += 25000;
      ch->desc->account->points -= 2;
      save_account(ch->desc->account);
      save_char_obj( ch );

      snprintf(buf, MAX_STRING_LENGTH, "&WAccount &p%s &Whas purchased 25,000 credits on character %s\r\n", ch->desc->account->name, ch->name);
      log_string ( buf );


      send_to_char( "&WYou've converted 2 RPP's for 25,000 credits!\r\n", ch);
      return;
   }

   if( atoi( argument ) == 6 )
   {
      char arg1[MAX_STRING_LENGTH];
      int sn;
      argument = one_argument( argument, arg1 );

      if( argument[0] == '\0' || !argument )
      {
         send_to_char( "&RSyntax: rpconvert 5 \r\n", ch );
         return;
      }


      if( ch->desc->account->points < 1 )
      {
         send_to_char( "&RThis bonus costs 1 RP point. You don't have enough.\r\n", ch );
         return;
      }

      sn = skill_lookup( argument );

      if( !sn || sn < 1 )
      {
         send_to_char( "&RNo such skill.\r\n", ch );
         return;
      }

      if( ch->pcdata->learned[sn] < 1 )
      {
         send_to_char( "&RYou must have at least practiced the skill to increase its percentage!\r\n", ch );
         return;
      }

      if( ch->pcdata->learned[sn] >= 100 )
      {
         send_to_char( "&RYou already have this skill adepted!\r\n", ch );
         return;
      }

      ch->pcdata->learned[sn] = UMIN( ch->pcdata->learned[sn] + 5, 100 );
      ch->desc->account->points -= 1;
      save_account(ch->desc->account);
      save_char_obj( ch );

      ch_printf( ch, "&GYou have spent 1 RPP to increase %s by 5%!\r\n", skill_table[sn]->name );
      sprintf( buf, "%s increased %s by 5%% with rpconvert.\r\n", ch->name, skill_table[sn]->name );
      log_string( buf );

      return;
   }

   do_rpconvert( ch, "" );
}

Post is unread #14 Oct 10, 2013 3:10 pm   
Go to the top of the page
Go to the bottom of the page

Amras

GroupMembers
Posts18
JoinedAug 11, 2008

 
I just PMed you the remove code ayuri.

Post is unread #15 Oct 10, 2013 8:19 pm   
Go to the top of the page
Go to the bottom of the page

dbna2

GroupMembers
Posts600
JoinedDec 3, 2008

 
That sounds like just what I been looking for... Excited to see what Remcon comes up with.

Post is unread #16 Oct 13, 2013 7:29 am   
Go to the top of the page
Go to the bottom of the page

Quixadhal

GroupMembers
Posts398
JoinedMar 8, 2005

 
An account system seems like a useful enough thing to warrant making it either included in SmaugFUSS (toggle via #ifdefs perhaps), or at least set up as a directly installable thing against stock code (diff + directions).

WIth a bit of polish, it would actually be quite useful. You could move some security privs to the account, so (for example) nobody can cheat their way to gaining wizard powers by finding a bug to level themselves up.

Post is unread #17 Oct 16, 2013 3:34 pm   
Go to the top of the page
Go to the bottom of the page

dbna2

GroupMembers
Posts600
JoinedDec 3, 2008

 
agreed

Post is unread #18 Oct 16, 2013 5:18 pm   
Go to the top of the page
Go to the bottom of the page

ayuri

GroupMembers
Posts239
JoinedJun 13, 2008

 
Something else may be interesting to keep track of in the account along with the pfile: Mkills and Pkills.
In the name of big data, see who likes to kill the most NPC's and PC's.

Over all I just liked the idea of having quest points, roll play points, whatever tracked in one spot so if you were willing could let players purchase perks for their other characters.

ayuri

Post is unread #19 Oct 18, 2013 8:21 pm   
Go to the top of the page
Go to the bottom of the page

Remcon

GroupAdministrators
Posts1,946
JoinedJul 26, 2005

 

Quixadhal said:

An account system seems like a useful enough thing to warrant making it either included in SmaugFUSS (toggle via #ifdefs perhaps), or at least set up as a directly installable thing against stock code (diff + directions).





WIth a bit of polish, it would actually be quite useful. You could move some security privs to the account, so (for example) nobody can cheat their way to gaining wizard powers by finding a bug to level themselves up.



In lop I actually added in permissions long ago to avoid people doing that lol. Not a bad idea though over all.

Post is unread #20 Nov 10, 2013 11:03 am   
Go to the top of the page
Go to the bottom of the page

Remcon

GroupAdministrators
Posts1,946
JoinedJul 26, 2005

 
Enter your character's name, or type new: 
remcon
Password: 
Account: Remcon
Last logged on Remcon at 11/10/2013 from 127.0.0.1.

Characters linked to this account:
Remcon

Auto logging in Remcon
Last connected from: 127.0.0.1

Thats what it shows when logging in with autologin set on character Remcon for account Remcon

relog
Your surroundings begin to fade as a mystical swirling vortex of colors
envelops your body... When you come to, things aren't as they were.

A strange voice says, 'We await your return, Remcon...'

You are currently logged on account Remcon.
Type 0 or quit to quit.
Type 1 or password to change your account password.
Type 2 or delete to delete your account.
Type 3 or login to pick a character to log in the game.

Characters:
Remcon
If the character you want to log in isn't listed you can still log on it if you know it's password

If you use relog command it takes you to the normal part where you can pick another character etc...

relog
Your surroundings begin to fade as a mystical swirling vortex of colors
envelops your body... When you come to, things aren't as they were.

A strange voice says, 'We await your return, Remcon...'

You are currently logged on account Remcon.
Type 0 or quit to quit.
Type 1 or password to change your account password.
Type 2 or delete to delete your account.
Type 3 or login to pick a character to log in the game.

Characters:
Remcon
If the character you want to log in isn't listed you can still log on it if you know it's password


accounts
   Account | Characters
---------- | ----------- ----------- ----------- ----------- ----------- -----------
    Remcon | *    Remcon 
---------- | Last on: Remcon at 11/10/2013 from 127.0.0.1.

The * means that is the character it will autologin (they set it by being on the character and typing autoconnect)

accounts remcon
Account: Remcon
Max Characters: 5
Last on: Remcon at 11/10/2013 from 127.0.0.1.
Character: Remcon
   Autologin: Yes


Thats it so far on it lol, haven't had a lot of time and still loads I want to get done with it. Ideas are welcome of course.

Pages:<< prev 1, 2 next >>