On 8/10/98 8:59 PM, Phillip A. Ames (kirk47@JUNO.COM) stated: >Hey everybody... Upon downloading Chris Jacobson's vehicle code, and >with some help from him, I've gotten it working. However, now I'd like >to expand it to include checks for whether or not it's a space vehicle or >ground vehicle. I've gotten it to 99% work, but still have one problem >that's bugging me. Space vehicles can drive into space and ground rooms, >and ground vehicles can only drive into ground rooms, so they work... >Below is the system of checks I use to determine if the vehicle can go >that direction or not. If anyone can tell why this problem is occuring, >I'd be grateful, and if you want the code I've added to this to get it >this far, just send me a private e-mail. Thanks in advance! I supported terrain types in my current incarnation of the vehicles (which is far advanced beyond the old patch, but relies heavily on my own MUD's design so I can't make a patch), using a bitvector in a value field. I also do vehicle size, so large vehicles cannot go inside small ones (we had people driving a capital class ship, Motava, inside dropships, then flying the dropships to the planet... and the Motava is deep-space and orbit only). Anyways, I used a bitvector, thus allowing more configurable vehicles, rather than using many vehicle types which end up adding a lot of extra code. Heres a sample: } else if ((dir = search_block(arg1, dirs, FALSE)) >= 0) { // Drive in a direction... /* Ok we found the direction! */ if (!ch || (dir < 0) || (dir >= NUM_OF_DIRS) || (IN_ROOM(vehicle) == NOWHERE)) /* But something is invalid */ send_to_char("Sorry, an internal error has occurred.\r\n", ch); else if (!CAN_GO(vehicle, dir)) // But there is no exit that way */ send_to_char("Alas, you cannot go that way...\r\n", ch); else if (EXIT_FLAGGED(EXIT(vehicle, dir), EX_CLOSED)) { // But the door is closed if (EXIT(vehicle, dir)->GetKeyword()) act("The $F seems to be closed.", FALSE, ch, 0, const_cast<char *>(EXIT(vehicle, dir)->GetKeyword()), TO_CHAR); else act("It seems to be closed.", FALSE, ch, 0, 0, TO_CHAR); } else if (!ROOM_FLAGGED(EXIT(vehicle, dir)->to_room, ROOM_VEHICLE) || EXIT_FLAGGED(EXIT(vehicle, dir), EX_NOVEHICLES)) // But the vehicle can't go that way */ send_to_char("The vehicle can't manage that terrain.\r\n", ch); else if (ROOM_SECT(EXIT(vehicle, dir)->to_room) == SECT_FLYING && !VEHICLE_FLAGGED(vehicle, VEHICLE_AIR)) { /* This vehicle isn't a flying vehicle */ if (ROOM_SECT(IN_ROOM(vehicle)) == SECT_SPACE) act("The $o can't enter the atmosphere.", FALSE, ch, vehicle, 0, TO_CHAR); else act("The $o can't fly.", FALSE, ch, vehicle, 0, TO_CHAR); } else if ((ROOM_SECT(EXIT(vehicle, dir)->to_room) == SECT_WATER_NOSWIM) && !VEHICLE_FLAGGED(vehicle, VEHICLE_WATER | VEHICLE_SUBMERGE)) /* This vehicle isn't a water vehicle */ act("The $o can't go in such deep water!", FALSE, ch, vehicle, 0, TO_CHAR); else if ((ROOM_SECT(EXIT(vehicle, dir)->to_room) == SECT_UNDERWATER) && !VEHICLE_FLAGGED(vehicle, VEHICLE_SUBMERGE)) act("The $o can't go underwater!", FALSE, ch, vehicle, 0, TO_CHAR); else if (ROOM_SECT(EXIT(vehicle, dir)->to_room) == SECT_DEEPSPACE && !VEHICLE_FLAGGED(vehicle, VEHICLE_INTERSTELLAR)) /* This vehicle isn't a space vehicle */ act("The $o can't go into space!", FALSE, ch, vehicle, 0, TO_CHAR); else if (ROOM_SECT(EXIT(vehicle, dir)->to_room) == SECT_SPACE && !VEHICLE_FLAGGED(vehicle, VEHICLE_SPACE)) act("The $o cannot handle space travel.", FALSE, ch, vehicle, 0, TO_CHAR); else if ((ROOM_SECT(EXIT(vehicle, dir)->to_room) > SECT_FIELD) && (ROOM_SECT(EXIT(vehicle, dir)->to_room) <= SECT_MOUNTAIN) && !VEHICLE_FLAGGED(vehicle, VEHICLE_GROUND)) act("The $o cannot land on that terrain.", FALSE, ch, vehicle, 0, TO_CHAR); else { // But nothing! Let's go that way! - Chris Jacobson +------------------------------------------------------------+ | 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