On Thu, 10 Jan 2002, Bejhan Jetha wrote: >ACMD(do_recall) >{ > extern sh_int r_mortal_start_room; > > if (IS_NPC(ch)) { > send_to_char("Monsters can't recall!!\r\n", ch); > return; > } > if (GET_LEVEL(ch) <= 10) { > send_to_char("Recalling for FREE, courtesy of Newbie >Transportation...\r\n", ch); > act("$n concentrates and disappears.", TRUE, ch, 0, 0, TO_ROOM); > char_from_room(ch); > char_to_room(ch, r_mortal_start_room); > act("$n appears suddenly.", TRUE, ch, 0, 0, TO_ROOM); > look_at_room(ch, 0); > return; > } > else if (GET_LEVEL(ch) >== 91) { > send_to_char("Recalling for FREE, courtesy of Immortal >Transportation...\r\n", ch); > act("$n concentrates and disappears.", TRUE, ch, 0, 0, TO_ROOM); > char_from_room(ch); > char_to_room(ch, r_immortal_start_room); > act("$n appears suddenly.", TRUE, ch, 0, 0, TO_ROOM); > look_at_room(ch, 0); > return; > } > else if (GET_LEVEL(ch) == 99) { > send_to_char("Recalling for FREE, courtesy of Chaos...\r\n", ch); > act("$n concentrates and disappears.", TRUE, ch, 0, 0, TO_ROOM); > char_from_room(ch); > char_to_room(ch, r_chaos_start_room); > act("$n appears suddenly.", TRUE, ch, 0, 0, TO_ROOM); > look_at_room(ch, 0); > return; > } > else { > send_to_char("Recalling for 200 gold per level...\r\n", ch); > if (GET_GOLD(ch) < (GET_LEVEL(ch) * 200)) >{ > send_to_char("You don't have enough gold!\r\n", ch); > act("$n tries to recall, but fails\r\n", FALSE, ch, 0, 0, TO_ROOM); > return; > } > else { > GET_GOLD(ch) -= (GET_LEVEL(ch) * 200); > act("$n concentrates and disappears.", TRUE, ch, 0, 0, TO_ROOM); > char_from_room(ch); > char_to_room(ch, r_mortal_start_room); > act("$n appears suddenly.", TRUE, ch, 0, 0, TO_ROOM); > look_at_room(ch, 0); > return; > } > } >} Lots of duplication. Try: ACMD(do_recall) { int lk, cost; struct { int low; int high; int costperlevel; room_rnum target; const char *message; } recallinfo[] = { { 1, 10, 0, r_mortal_start_room, "Recalling for FREE, courtesy of Newbie Transportation...\r\n" }, { 11, 90, 200, r_mortal_start_room, "Recalling for 200 gold per level...\r\n" }, { 91, 91, 0, r_chaos_start_room, "Recalling for FREE, courtesy of Chaos...\r\n" }, { 92, 100, 0, r_immortal_start_room, "Recalling for FREE, courtesy of Immortal Transportation...\r\n" }, { -1, -1, -1, 0, NULL }, }; for (lk = 0; recallinfo[lk].low >= 0; lk++) if (GET_LEVEL(ch) >= recallinfo[lk].low && GET_LEVEL(ch) <= recallinfo[lk].high) break; if (IS_NPC(ch) || recallinfo[lk].low < 0) { send_to_char("Sorry, you can't do that.\r\n", ch); return; } cost = recallinfo[lk].costperlevel * GET_LEVEL(ch); if (cost > GET_GOLD(ch)) { send_to_char("You don't have enough gold.\r\n", ch); act("$n tries to recall, but fails.\r\n", FALSE, ch, 0, 0, TO_ROOM); return; } GET_GOLD(ch) -= cost; send_to_char(recallinfo[lk].message, ch); act("$n concentrates and disappears.", TRUE, ch, 0, 0, TO_ROOM); char_from_room(ch); char_to_room(ch, recallinfo[lk].target); act("$n appears suddenly.", TRUE, ch, 0, 0, TO_ROOM); look_at_room(ch, 0); } MailerCode(tm) -- George Greer greerga@circlemud.org -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | | Newbie List: http://groups.yahoo.com/group/circle-newbies/ | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT