mirror of
https://github.com/tbamud/tbamud.git
synced 2026-03-19 18:56:33 +01:00
Patch rsave to save rooms in zone correctly
This commit is contained in:
parent
b23927580a
commit
c4f99fb2de
4 changed files with 52 additions and 19 deletions
|
|
@ -382,6 +382,6 @@ rope. Pieces of hide have been tied down, providing a soft yet supportive place
|
|||
for someone to rest upon.
|
||||
~
|
||||
6 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2 0 0 0
|
||||
1 0 0 0
|
||||
10 100 0 0 0
|
||||
$~
|
||||
|
|
|
|||
|
|
@ -89,3 +89,22 @@ V 5 0
|
|||
V 6 0
|
||||
V 7 0
|
||||
.
|
||||
#R 200 1759522672
|
||||
O 143 0 10 100 0
|
||||
X 0 0
|
||||
X 1 0
|
||||
X 2 0
|
||||
X 3 0
|
||||
W 0 0
|
||||
W 1 0
|
||||
W 2 0
|
||||
W 3 0
|
||||
V 0 1
|
||||
V 1 0
|
||||
V 2 0
|
||||
V 3 0
|
||||
V 4 0
|
||||
V 5 0
|
||||
V 6 0
|
||||
V 7 0
|
||||
.
|
||||
|
|
|
|||
|
|
@ -5840,39 +5840,52 @@ ACMD(do_msave)
|
|||
|
||||
ACMD(do_rsave)
|
||||
{
|
||||
room_rnum rnum = IN_ROOM(ch);
|
||||
room_rnum rnum;
|
||||
zone_rnum znum;
|
||||
int ok;
|
||||
|
||||
if (IS_NPC(ch)) {
|
||||
send_to_char(ch, "Mobiles can’t use this.\r\n");
|
||||
return;
|
||||
}
|
||||
if (rnum == NOWHERE || rnum < 0 || rnum >= top_of_world) {
|
||||
|
||||
/* IN_ROOM(ch) is already a room_rnum (index into world[]). Do NOT pass it to real_room(). */
|
||||
rnum = IN_ROOM(ch);
|
||||
|
||||
if (rnum == NOWHERE || rnum < 0 || rnum > top_of_world) {
|
||||
send_to_char(ch, "You are not in a valid room.\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
zone_rnum znum = world[rnum].zone;
|
||||
znum = world[rnum].zone;
|
||||
if (znum < 0 || znum > top_of_zone_table) {
|
||||
send_to_char(ch, "This room is not attached to a valid zone.\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Builder permission: reuse your standard zone edit check */
|
||||
/* Optional: permission check */
|
||||
if (!can_edit_zone(ch, znum)) {
|
||||
send_to_char(ch, "You don’t have permission to modify zone %d.\r\n",
|
||||
zone_table[znum].number);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Save immediately, regardless of ROOM_SAVE flag */
|
||||
if (RoomSave_now(rnum)) {
|
||||
send_to_char(ch, "rsave: room %d saved to roomsave file for zone %d.\r\n",
|
||||
GET_ROOM_VNUM(rnum), zone_table[znum].number);
|
||||
mudlog(CMP, GET_LEVEL(ch), TRUE, "RSAVE OK: %s saved room %d (zone %d).",
|
||||
GET_NAME(ch), GET_ROOM_VNUM(rnum), zone_table[znum].number);
|
||||
} else {
|
||||
send_to_char(ch, "rsave: failed to save room %d.\r\n", GET_ROOM_VNUM(rnum));
|
||||
mudlog(BRF, GET_LEVEL(ch), TRUE, "RSAVE FAIL: %s room %d (zone %d).",
|
||||
GET_NAME(ch), GET_ROOM_VNUM(rnum), zone_table[znum].number);
|
||||
/* Save just this room into the correct zone’s .rsv file */
|
||||
ok = RoomSave_now(rnum);
|
||||
|
||||
if (!ok) {
|
||||
send_to_char(ch, "rsave: failed.\r\n");
|
||||
mudlog(BRF, GET_LEVEL(ch), TRUE,
|
||||
"RSAVE FAIL: %s room %d (rnum=%d) zone %d (znum=%d)",
|
||||
GET_NAME(ch), GET_ROOM_VNUM(rnum), rnum,
|
||||
zone_table[znum].number, znum);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
send_to_char(ch, "rsave: room %d saved to roomsave file for zone %d.\r\n",
|
||||
GET_ROOM_VNUM(rnum), zone_table[znum].number);
|
||||
|
||||
mudlog(CMP, GET_LEVEL(ch), TRUE,
|
||||
"RSAVE OK: %s room %d (rnum=%d) -> world/rsv/%d.rsv",
|
||||
GET_NAME(ch), GET_ROOM_VNUM(rnum), rnum, zone_table[znum].number);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -213,9 +213,10 @@ static void ensure_dir_exists(const char *path) {
|
|||
|
||||
/* zone vnum for a given room rnum (e.g., 134 -> zone 1) */
|
||||
static int roomsave_zone_for_rnum(room_rnum rnum) {
|
||||
if (rnum == NOWHERE) return -1;
|
||||
if (world[rnum].zone < 0 || world[rnum].zone > top_of_zone_table) return -1;
|
||||
return zone_table[ world[rnum].zone ].number; /* zone virtual number (e.g., 1) */
|
||||
if (rnum == NOWHERE || rnum < 0 || rnum > top_of_world) return 0;
|
||||
zone_rnum znum = world[rnum].zone;
|
||||
if (znum < 0 || znum > top_of_zone_table) return 0;
|
||||
return zone_table[znum].number; /* e.g., 1 for rooms 100–199, 2 for 200–299, etc. */
|
||||
}
|
||||
|
||||
/* lib/world/rsv/<zone>.rsv */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue