-----Original Message----- From: Mike Sulmicki [SMTP:mikesul@CapAccess.org] Sent: Friday, January 31, 1997 3:25 PM To: Circle List Subject: [newbie] leveling How would I go about changing the auto-leveling system to where you'd have to type level in your guild to level.. If someone could give me a walkthrough, all the beter :) Thanks in advance, Mike ---- First you'll need to add a 'gain' command. Then you'll have to remove the automatic gaining process in the code. Look for advance_level in the code.. probably fight.c Here's my do_gain function.. with a couple caveats. 1) Don't use the method I'm using to calculate experience required. (we are currently finishing up the final world balancing... at which point I'll substitue a real method of calculating exp needed to level :-) ) 2) I have a mud school players start in.. at level 0.. that's the first part of the code.. where it checks for level = 0 .. if you have none-such, you'll not want to use that portion. 3) This is set up for 100 levels.. modify to suit. 4) I have a global info message sent to everyone whenever someone levels.. Snip that if you dislike that sort of thing. 5) To restrict gaining to a certain room, add the following: if (world[ch->in_room].number != MY_GUILD_VNUM) { send_to_char("Do you see your guildmaster around here anywhere?!? I thought not.\r\n",ch); return; } or you could loop through the mobs in the room looking for your guild master... like so: struct char_data *vict, *next_v; int got_one=0; for (vict = world[ch->in_room].people; vict; vict = next_v) { next_v = vict->next_in_room; if (IS_NPC(vict)) if (GET_MOB_VNUM(vict) == MY_GUILD_MASTER_VNUM) { got_one=1; break; } } if (!gotone) { send_to_char("Do you see your guildmaster around here anywhere?!? I thought not.\r\n",ch); return; } ACMD(do_gain) { struct descriptor_data *i; if (GET_LEVEL(ch) == 0) { GET_LEVEL(ch) =1; char_from_room(ch); char_to_room(ch, real_room(mortal_start_room)); look_at_room(ch, ch->in_room); mob_script_ENTR_TGR(ch); return; } if (GET_LEVEL(ch) >= 100) { send_to_char("You are maxed out.. You can't gain any more.",ch); return; } if (IS_NPC(ch)) { send_to_char("You are a mob.. Get out of here!",ch); return; } if (GET_EXP(ch) < (GET_LEVEL(ch)+1)*10000) { send_to_char("You don't have enough experience to gain a level at this time.",ch); return; } send_to_char("You gain a level!\r\n", ch); GET_EXP(ch) -= (GET_LEVEL(ch)+1)*10000; GET_LEVEL(ch) += 1; advance_level(ch); sprintf(buf,"%s[INFO] %s has gained level %d!%s", CCGRN(ch, C_NRM),GET_NAME(ch),GET_LEVEL(ch), CCNRM(ch, C_NRM)); for (i = descriptor_list; i; i = i->next) { if (!i->connected && i->character && !PRF_FLAGGED(i->character, PRF_NOINFO) && !PLR_FLAGGED(i->character, PLR_WRITING)) { act(buf, FALSE, ch, 0, i->character, TO_VICT | TO_SLEEP); } } } --Mallory +-----------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://cspo.queensu.ca/~fletcher/Circle/list_faq.html | +-----------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/18/00 PST