From: Chuck Reed Subject: Water Currents/Proficiency System/ 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(, current_proc); That Should be it.