>Now, I'll let my newbieness (to CircleMUD and this list) show.. I looked >on the FTP site, but I couldn't find your water currents code. Checked >incoming.. Is there a special "snippets" site or something? (Nevermind >if it's in the FAQ for this list.. I'm going to scan that for keyword:snippets >next.. It's not your "newbieness" don't worry. It's my lack of time. I haven't been able to put it in until now. Here's the actuall HOW-TO SNIPPET for the currents. If anyone knows how to make this really random (and not just when someone types in a command), please tell me because it's really pissing me off :) Oh yeah, another thing I'm going to be adding to this is another field in the current_info struct for how many times the current will move you in a certain direction. But until then . . . STEP 1 ------ Add this somewhere in structs.h: struct current_info { int room_vnum; int direction; int percent; }; STEP 2 ------ Add this somewhere in act.movement.c (this seemed appropriate): /* Add new rooms above the { -1, -1, -1 } line. That must always be last. */ struct current_info current[] = { /* Room Direction Percent ------------------------- */ { 3001, SOUTH, 34 }, { -1, -1, -1 } }; STEP 3 ------ This checks the percentage to get swept away evertime somene in the room types a command. If you want to change that, it's no prob. Add this in spec_procs.c: SPECIAL(current_proc) { extern const char *dirs[]; extern struct current_info current[]; int i, found, perm_num, new_room; found = FALSE; perm_num = 0; if(!cmd) return FALSE; for(i=0; current[i].room_vnum != -1;i++) if(ch->in_room == real_room(current[i].room_vnum)) { perm_num = i; found = TRUE; break; } if(found) if(number(0,100) < current[perm_num].percent) { sprintf(buf, "The strong current carries you %s!\r\n", dirs[current[perm_num].direction]); send_to_char(buf, ch); sprintf(buf, "$n is taken %s by the rough current!", dirs[current[perm_num].direction]); act(buf, FALSE, ch, 0, 0, TO_NOTVICT); /* You can use your favorite way to record errors here. */ if(!EXIT(ch, current[perm_num].direction)) { send_to_char("Error in this room. Please report this! ERROR 1\r\n", ch); return FALSE; } if(EXIT(ch, current[perm_num].direction)->to_room == NOWHERE) { send_to_char("Error in this room. Please report this! ERROR 2\r\n", ch); return FALSE; } /* Here we want to use char_from_room / char_to_room instead of a do_simple_move because the current should take them no matter if they have a boat, no movement points left, etc. */ new_room = EXIT(ch, current[perm_num].direction)->to_room; char_from_room(ch); char_to_room(ch, new_room); act("$n is swept into the room by the rough current!", FALSE, ch, 0, 0, TO_NOTVICT); } return FALSE; } STEP 4 ------ Add a prototype of the current_proc in spec_assign.c right below other prototypes like so: SPECIAL(current_proc); STEP 5 ------ Add all current rooms in spec_assign.c like so: ASSIGNROOM(<vnum>, current_proc); That Should be it. "Jesus saves . . . . he passes to Moses. Moses shoots, HE SCORES!" +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST