mirror of
https://github.com/tbamud/tbamud.git
synced 2025-12-22 10:10:13 +01:00
New house system, ASCII hcontrol file and hsedit house OLC
This commit is contained in:
parent
74c3d208b6
commit
3fa8ebe048
16 changed files with 2647 additions and 681 deletions
11
changelog
11
changelog
|
|
@ -35,12 +35,21 @@ export (QQ's a zone into a tarball)
|
|||
Xlist (mlist, olist, rlist, zlist, slist, tlist, qlist)
|
||||
(lots of major bugfixes too)
|
||||
@
|
||||
[Nov 30 2010] - Jamdog
|
||||
Bug-Fix: Fixed incorrect rnum showing on stat room <vnum> (Thanks Kam)
|
||||
Added hsedit House Editor OLC
|
||||
[Nov 28 2010] - Jamdog
|
||||
Converted houses (lib/etc/hcontrol file) to ASCII file format
|
||||
Added hcontrol file converter (hstoascii.c) to src/utils folder
|
||||
Converted houses to work as linked lists, not wasteful fixed-size arrays
|
||||
Added GOD houses and player-owned shops as house types
|
||||
Added 'receptionist' and 'player-shopkeeper' type spec-procs for houses
|
||||
[Nov 26 2010] - Jamdog
|
||||
Bug-Fix: set level now allows GRGOD or higher to set to any mortal level
|
||||
Advance command changed to work for both mortal and admin levels
|
||||
Added increase_gold and increase_bank functions to prevent cash overflows
|
||||
Added dupe check for new characters in char creation (thanks Mirad)
|
||||
Bug-Fix: Since admin update, real mortals didn't show on who list
|
||||
Bug-Fix: Since admin update, real mortals didn't show on who list (thanks Rhade)
|
||||
[Nov 25 2010] - Jamdog
|
||||
Added diagonal directions with cedit toggle (default to 'off')
|
||||
Bug-Fix: admin <player> default now targets the victim player
|
||||
|
|
|
|||
|
|
@ -510,9 +510,7 @@ void look_at_room(struct char_data *ch, int ignore_brief)
|
|||
if(!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOMAP) && can_see_map(ch))
|
||||
{
|
||||
str_and_map(world[target_room].description, ch, target_room);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
send_to_char(ch, "%s", world[IN_ROOM(ch)].description);
|
||||
}
|
||||
}
|
||||
|
|
@ -555,13 +553,13 @@ static void look_in_obj(struct char_data *ch, char *arg)
|
|||
send_to_char(ch, "There doesn't seem to be %s %s here.\r\n", AN(arg), arg);
|
||||
} else if ((GET_OBJ_TYPE(obj) != ITEM_DRINKCON) &&
|
||||
(GET_OBJ_TYPE(obj) != ITEM_FOUNTAIN) &&
|
||||
(GET_OBJ_TYPE(obj) != ITEM_CONTAINER))
|
||||
(GET_OBJ_TYPE(obj) != ITEM_CONTAINER)) {
|
||||
send_to_char(ch, "There's nothing inside that!\r\n");
|
||||
else {
|
||||
} else {
|
||||
if (GET_OBJ_TYPE(obj) == ITEM_CONTAINER) {
|
||||
if (OBJVAL_FLAGGED(obj, CONT_CLOSED) && (!IS_ADMIN(ch, ADMLVL_IMMORT) || !PRF_FLAGGED(ch, PRF_NOHASSLE)))
|
||||
if (OBJVAL_FLAGGED(obj, CONT_CLOSED) && (!IS_ADMIN(ch, ADMLVL_IMMORT) || !PRF_FLAGGED(ch, PRF_NOHASSLE))) {
|
||||
send_to_char(ch, "It is closed.\r\n");
|
||||
else {
|
||||
} else {
|
||||
send_to_char(ch, "%s", fname(obj->name));
|
||||
switch (bits) {
|
||||
case FIND_OBJ_INV:
|
||||
|
|
@ -585,10 +583,9 @@ static void look_in_obj(struct char_data *ch, char *arg)
|
|||
char buf2[MAX_STRING_LENGTH];
|
||||
sprinttype(GET_OBJ_VAL(obj, 2), color_liquid, buf2, sizeof(buf2));
|
||||
send_to_char(ch, "It's full of a %s liquid.\r\n", buf2);
|
||||
}
|
||||
else if (GET_OBJ_VAL(obj,1)>GET_OBJ_VAL(obj,0))
|
||||
} else if (GET_OBJ_VAL(obj,1)>GET_OBJ_VAL(obj,0)) {
|
||||
send_to_char(ch, "Its contents seem somewhat murky.\r\n"); /* BUG */
|
||||
else {
|
||||
} else {
|
||||
char buf2[MAX_STRING_LENGTH];
|
||||
amt = (GET_OBJ_VAL(obj, 1) * 3) / GET_OBJ_VAL(obj, 0);
|
||||
sprinttype(GET_OBJ_VAL(obj, 2), color_liquid, buf2, sizeof(buf2));
|
||||
|
|
@ -656,41 +653,47 @@ static void look_at_target(struct char_data *ch, char *arg)
|
|||
}
|
||||
|
||||
/* Does the argument match an extra desc in the char's equipment? */
|
||||
for (j = 0; j < NUM_WEARS && !found; j++)
|
||||
if (GET_EQ(ch, j) && CAN_SEE_OBJ(ch, GET_EQ(ch, j)))
|
||||
for (j = 0; j < NUM_WEARS && !found; j++) {
|
||||
if (GET_EQ(ch, j) && CAN_SEE_OBJ(ch, GET_EQ(ch, j))) {
|
||||
if ((desc = find_exdesc(arg, GET_EQ(ch, j)->ex_description)) != NULL && ++i == fnum) {
|
||||
send_to_char(ch, "%s", desc);
|
||||
found = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Does the argument match an extra desc in the char's inventory? */
|
||||
for (obj = ch->carrying; obj && !found; obj = obj->next_content) {
|
||||
if (CAN_SEE_OBJ(ch, obj))
|
||||
if (CAN_SEE_OBJ(ch, obj)) {
|
||||
if ((desc = find_exdesc(arg, obj->ex_description)) != NULL && ++i == fnum) {
|
||||
send_to_char(ch, "%s", desc);
|
||||
found = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Does the argument match an extra desc of an object in the room? */
|
||||
for (obj = world[IN_ROOM(ch)].contents; obj && !found; obj = obj->next_content)
|
||||
if (CAN_SEE_OBJ(ch, obj))
|
||||
for (obj = world[IN_ROOM(ch)].contents; obj && !found; obj = obj->next_content) {
|
||||
if (CAN_SEE_OBJ(ch, obj)) {
|
||||
if ((desc = find_exdesc(arg, obj->ex_description)) != NULL && ++i == fnum) {
|
||||
send_to_char(ch, "%s", desc);
|
||||
found = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* If an object was found back in generic_find */
|
||||
if (bits) {
|
||||
if (!found)
|
||||
if (!found) {
|
||||
show_obj_to_char(found_obj, ch, SHOW_OBJ_ACTION);
|
||||
else {
|
||||
} else {
|
||||
show_obj_modifiers(found_obj, ch);
|
||||
send_to_char(ch, "\r\n");
|
||||
}
|
||||
} else if (!found)
|
||||
} else if (!found) {
|
||||
send_to_char(ch, "You do not see that here.\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
ACMD(do_look)
|
||||
{
|
||||
|
|
@ -971,14 +974,13 @@ ACMD(do_equipment)
|
|||
send_to_char(ch, "You are using:\r\n");
|
||||
for (i = 0; i < NUM_WEARS; i++) {
|
||||
if (GET_EQ(ch, i)) {
|
||||
found = TRUE;
|
||||
if (CAN_SEE_OBJ(ch, GET_EQ(ch, i))) {
|
||||
send_to_char(ch, "%s", wear_where[i]);
|
||||
show_obj_to_char(GET_EQ(ch, i), ch, SHOW_OBJ_SHORT);
|
||||
found = TRUE;
|
||||
} else {
|
||||
send_to_char(ch, "%s", wear_where[i]);
|
||||
send_to_char(ch, "Something.\r\n");
|
||||
found = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1303,7 +1305,7 @@ ACMD(do_who)
|
|||
if (showleader && (!tch->followers || !AFF_FLAGGED(tch, AFF_GROUP)))
|
||||
continue;
|
||||
|
||||
sprintf(admlev, "%11s", admin_level_names[(GET_ADMLEVEL(tch))]);
|
||||
sprintf(admlev, "%-11s", admin_level_names[(GET_ADMLEVEL(tch))]);
|
||||
if (short_list) {
|
||||
send_to_char(ch, "%s[%2d %s] %-12.12s%s%s",
|
||||
(IS_ADMIN(tch, ADMLVL_IMMORT) ? CCYEL(ch, C_SPR) : ""),
|
||||
|
|
@ -2404,8 +2406,7 @@ void add_history(struct char_data *ch, char *str, int type)
|
|||
if (!tmp) {
|
||||
CREATE(GET_HISTORY(ch, type), struct txt_block, 1);
|
||||
GET_HISTORY(ch, type)->text = strdup(buf);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
while (tmp->next)
|
||||
tmp = tmp->next;
|
||||
CREATE(tmp->next, struct txt_block, 1);
|
||||
|
|
@ -2477,25 +2478,17 @@ ACMD(do_whois)
|
|||
send_to_char(ch, "Last Logon: They're playing now! (Idle %d Minutes)",
|
||||
victim->char_specials.timer * SECS_PER_MUD_HOUR / SECS_PER_REAL_MIN);
|
||||
|
||||
if (!victim->desc)
|
||||
{
|
||||
if (!victim->desc) {
|
||||
send_to_char(ch, " (Linkless)\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
send_to_char(ch, "\r\n");
|
||||
}
|
||||
if (PRF_FLAGGED(victim, PRF_AFK))
|
||||
{
|
||||
if (PRF_FLAGGED(victim, PRF_AFK)) {
|
||||
send_to_char(ch, "%s%s is afk right now, so %s may not respond to communication.%s\r\n", CBGRN(ch, C_NRM), GET_NAME(victim), GET_SEX(victim) == SEX_NEUTRAL ? "it" : (GET_SEX(victim) == SEX_MALE ? "he" : "she"), CCNRM(ch, C_NRM));
|
||||
}
|
||||
}
|
||||
else if (hours > 0)
|
||||
{
|
||||
} else if (hours > 0) {
|
||||
send_to_char(ch, "Last Logon: %s (%d days & %d hours ago.)\r\n", buf, hours/24, hours%24);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
send_to_char(ch, "Last Logon: %s (0 hours & %d minutes ago.)\r\n",
|
||||
buf, (int)(time(0) - victim->player.time.logon)/60);
|
||||
}
|
||||
|
|
@ -2638,14 +2631,14 @@ distance, int door)
|
|||
/* this loop is a quick, easy way to help make a grammatical sentence
|
||||
(i.e., "You see x, x, y, and z." with commas, "and", etc.) */
|
||||
|
||||
for (i = list; i; i = i->next_in_room)
|
||||
for (i = list; i; i = i->next_in_room) {
|
||||
|
||||
/* put any other conditions for scanning someone in this if statement -
|
||||
i.e., if (CAN_SEE(ch, i) && condition2 && condition3) or whatever */
|
||||
|
||||
if (CAN_SEE(ch, i))
|
||||
count++;
|
||||
|
||||
}
|
||||
if (!count)
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -248,9 +248,9 @@ void get_from_container(struct char_data *ch, struct obj_data *cont,
|
|||
}
|
||||
}
|
||||
if (!found) {
|
||||
if (obj_dotmode == FIND_ALL)
|
||||
if (obj_dotmode == FIND_ALL) {
|
||||
act("$p seems to be empty.", FALSE, ch, cont, 0, TO_CHAR);
|
||||
else {
|
||||
} else {
|
||||
char buf[MAX_STRING_LENGTH];
|
||||
|
||||
snprintf(buf, sizeof(buf), "You can't seem to find any %ss in $p.", arg);
|
||||
|
|
@ -352,7 +352,7 @@ ACMD(do_get)
|
|||
send_to_char(ch, "Get from all of what?\r\n");
|
||||
return;
|
||||
}
|
||||
for (cont = ch->carrying; cont; cont = cont->next_content)
|
||||
for (cont = ch->carrying; cont; cont = cont->next_content) {
|
||||
if (CAN_SEE_OBJ(ch, cont) &&
|
||||
(cont_dotmode == FIND_ALL || isname(arg2, cont->name))) {
|
||||
if (GET_OBJ_TYPE(cont) == ITEM_CONTAINER) {
|
||||
|
|
@ -363,7 +363,8 @@ ACMD(do_get)
|
|||
act("$p is not a container.", FALSE, ch, cont, 0, TO_CHAR);
|
||||
}
|
||||
}
|
||||
for (cont = world[IN_ROOM(ch)].contents; cont; cont = cont->next_content)
|
||||
}
|
||||
for (cont = world[IN_ROOM(ch)].contents; cont; cont = cont->next_content) {
|
||||
if (CAN_SEE_OBJ(ch, cont) &&
|
||||
(cont_dotmode == FIND_ALL || isname(arg2, cont->name))) {
|
||||
if (GET_OBJ_TYPE(cont) == ITEM_CONTAINER) {
|
||||
|
|
@ -374,6 +375,7 @@ ACMD(do_get)
|
|||
found = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
if (cont_dotmode == FIND_ALL)
|
||||
send_to_char(ch, "You can't seem to find any containers.\r\n");
|
||||
|
|
@ -559,13 +561,14 @@ ACMD(do_drop)
|
|||
return;
|
||||
}
|
||||
if (dotmode == FIND_ALL) {
|
||||
if (!ch->carrying)
|
||||
if (!ch->carrying) {
|
||||
send_to_char(ch, "You don't seem to be carrying anything.\r\n");
|
||||
else
|
||||
} else {
|
||||
for (obj = ch->carrying; obj; obj = next_obj) {
|
||||
next_obj = obj->next_content;
|
||||
amount += perform_drop(ch, obj, mode, sname, RDR);
|
||||
}
|
||||
}
|
||||
} else if (dotmode == FIND_ALLDOT) {
|
||||
if (!*arg) {
|
||||
send_to_char(ch, "What do you want to %s all of?\r\n", sname);
|
||||
|
|
@ -718,9 +721,9 @@ ACMD(do_give)
|
|||
send_to_char(ch, "All of what?\r\n");
|
||||
return;
|
||||
}
|
||||
if (!ch->carrying)
|
||||
if (!ch->carrying) {
|
||||
send_to_char(ch, "You don't seem to be holding anything.\r\n");
|
||||
else
|
||||
} else {
|
||||
for (obj = ch->carrying; obj; obj = next_obj) {
|
||||
next_obj = obj->next_content;
|
||||
if (CAN_SEE_OBJ(ch, obj) &&
|
||||
|
|
@ -730,6 +733,7 @@ ACMD(do_give)
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void weight_change_object(struct obj_data *obj, int weight)
|
||||
{
|
||||
|
|
@ -851,9 +855,10 @@ ACMD(do_drink)
|
|||
if (!(temp = get_obj_in_list_vis(ch, arg, NULL, world[IN_ROOM(ch)].contents))) {
|
||||
send_to_char(ch, "You can't find it!\r\n");
|
||||
return;
|
||||
} else
|
||||
} else {
|
||||
on_ground = 1;
|
||||
}
|
||||
}
|
||||
if ((GET_OBJ_TYPE(temp) != ITEM_DRINKCON) &&
|
||||
(GET_OBJ_TYPE(temp) != ITEM_FOUNTAIN)) {
|
||||
send_to_char(ch, "You can't drink from that!\r\n");
|
||||
|
|
@ -1148,8 +1153,7 @@ ACMD(do_pour)
|
|||
amount = GET_OBJ_VAL(to_obj, 0);
|
||||
}
|
||||
/* Poisoned? */
|
||||
GET_OBJ_VAL(to_obj, 3) = (GET_OBJ_VAL(to_obj, 3) || GET_OBJ_VAL(from_obj, 3))
|
||||
;
|
||||
GET_OBJ_VAL(to_obj, 3) = (GET_OBJ_VAL(to_obj, 3) || GET_OBJ_VAL(from_obj, 3));
|
||||
/* Weight change, except for unlimited. */
|
||||
if (GET_OBJ_VAL(from_obj, 0) > 0) {
|
||||
weight_change_object(from_obj, -amount);
|
||||
|
|
@ -1367,7 +1371,7 @@ ACMD(do_wear)
|
|||
send_to_char(ch, "You don't seem to have any %ss.\r\n", arg1);
|
||||
else if (GET_LEVEL(ch) < GET_OBJ_LEVEL(obj))
|
||||
send_to_char(ch, "You are not experienced enough to use that.\r\n");
|
||||
else
|
||||
else {
|
||||
while (obj) {
|
||||
next_obj = get_obj_in_list_vis(ch, arg1, NULL, obj->next_content);
|
||||
if ((where = find_eq_pos(ch, obj, 0)) >= 0)
|
||||
|
|
@ -1376,6 +1380,7 @@ ACMD(do_wear)
|
|||
act("You can't wear $p.", FALSE, ch, obj, 0, TO_CHAR);
|
||||
obj = next_obj;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!(obj = get_obj_in_list_vis(ch, arg1, NULL, ch->carrying)))
|
||||
send_to_char(ch, "You don't seem to have %s %s.\r\n", AN(arg1), arg1);
|
||||
|
|
@ -1477,11 +1482,12 @@ ACMD(do_remove)
|
|||
|
||||
if (dotmode == FIND_ALL) {
|
||||
found = 0;
|
||||
for (i = 0; i < NUM_WEARS; i++)
|
||||
for (i = 0; i < NUM_WEARS; i++) {
|
||||
if (GET_EQ(ch, i)) {
|
||||
perform_remove(ch, i);
|
||||
found = 1;
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
send_to_char(ch, "You're not using anything.\r\n");
|
||||
} else if (dotmode == FIND_ALLDOT) {
|
||||
|
|
@ -1489,12 +1495,13 @@ ACMD(do_remove)
|
|||
send_to_char(ch, "Remove all of what?\r\n");
|
||||
else {
|
||||
found = 0;
|
||||
for (i = 0; i < NUM_WEARS; i++)
|
||||
for (i = 0; i < NUM_WEARS; i++) {
|
||||
if (GET_EQ(ch, i) && CAN_SEE_OBJ(ch, GET_EQ(ch, i)) &&
|
||||
isname(arg, GET_EQ(ch, i)->name)) {
|
||||
perform_remove(ch, i);
|
||||
found = 1;
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
send_to_char(ch, "You don't seem to be using any %ss.\r\n", arg);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -696,9 +696,9 @@ ACMD(do_enter)
|
|||
return;
|
||||
}
|
||||
send_to_char(ch, "There is no %s here.\r\n", buf);
|
||||
} else if (ROOM_FLAGGED(IN_ROOM(ch), ROOM_INDOORS))
|
||||
} else if (ROOM_FLAGGED(IN_ROOM(ch), ROOM_INDOORS)) {
|
||||
send_to_char(ch, "You are already indoors.\r\n");
|
||||
else {
|
||||
} else {
|
||||
/* try to locate an entrance */
|
||||
for (door = 0; door < DIR_COUNT; door++)
|
||||
if (EXIT(ch, door))
|
||||
|
|
|
|||
|
|
@ -522,7 +522,7 @@ static void do_stat_room(struct char_data *ch, struct room_data *rm)
|
|||
sprinttype(rm->sector_type, sector_types, buf2, sizeof(buf2));
|
||||
send_to_char(ch, "Zone: [%3d], VNum: [%s%5d%s], RNum: [%5d], IDNum: [%5ld], Type: %s\r\n",
|
||||
zone_table[rm->zone].number, CCGRN(ch, C_NRM), rm->number,
|
||||
CCNRM(ch, C_NRM), IN_ROOM(ch), (long) rm->number + ROOM_ID_BASE, buf2);
|
||||
CCNRM(ch, C_NRM), real_room(rm->number), (long) rm->number + ROOM_ID_BASE, buf2);
|
||||
|
||||
sprintbitarray(rm->room_flags, room_bits, RF_ARRAY_MAX, buf2);
|
||||
send_to_char(ch, "SpecProc: %s, Flags: %s\r\n", rm->func == NULL ? "None" : get_spec_func_name(rm->func), buf2);
|
||||
|
|
@ -1785,7 +1785,7 @@ ACMD(do_advance)
|
|||
}
|
||||
oldlevel = GET_LEVEL(victim);
|
||||
if (newlevel < GET_LEVEL(victim)) {
|
||||
do_start(victim);
|
||||
do_start(victim); /* Send 'em back to level 1, then advance */
|
||||
GET_LEVEL(victim) = newlevel;
|
||||
send_to_char(victim, "You are momentarily enveloped by darkness!\r\nYou feel somewhat diminished.\r\n");
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -715,7 +715,7 @@ static void cedit_disp_admin_levels(struct descriptor_data *d)
|
|||
|
||||
write_to_output(d, "\r\n\r\n");
|
||||
for (i=ADMLVL_IMMORT; i<=ADMLVL_IMPL; i++) {
|
||||
write_to_output(d, "%sd%s) %s%s%s\r\n", grn, nrm, cyn, admin_level_names[i], nrm);
|
||||
write_to_output(d, "%s%d%s) %s%s%s\r\n", grn, i, nrm, cyn, admin_level_names[i], nrm);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1440,6 +1440,7 @@ void roll_real_abils(struct char_data *ch)
|
|||
void do_start(struct char_data *ch)
|
||||
{
|
||||
GET_LEVEL(ch) = 1;
|
||||
GET_ADMLEVEL(ch) = ADMLVL_MORTAL;
|
||||
GET_EXP(ch) = 1;
|
||||
|
||||
set_title(ch, NULL);
|
||||
|
|
|
|||
|
|
@ -569,6 +569,31 @@ const char *container_bits[] = {
|
|||
"\n",
|
||||
};
|
||||
|
||||
/** Flag descriptions for HOUSE_ flags
|
||||
* @pre Must be in the same order as the defines.
|
||||
* Must end array with a single newline. */
|
||||
const char *house_bits[] = {
|
||||
"NO_GUEST",
|
||||
"FREE",
|
||||
"NO_IMM",
|
||||
"IMP_ONLY",
|
||||
"RENTFREE",
|
||||
"SAVE_!RENT",
|
||||
"NO_SAVE",
|
||||
"NO_SPEC",
|
||||
"\n"
|
||||
};
|
||||
|
||||
/** House mode types for HOUSE_ mode values
|
||||
* @pre Must be in the same order as the defines.
|
||||
* Must end array with a single newline. */
|
||||
const char *house_types[] = {
|
||||
"PLAYER_OWNED",
|
||||
"IMM_OWNED",
|
||||
"CLAN_OWNED",
|
||||
"\n"
|
||||
};
|
||||
|
||||
/** Describes the liquid description.
|
||||
* @pre Must be in the same order as the defines.
|
||||
* Must end array with a single newline. */
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ extern const char *wear_bits[];
|
|||
extern const char *extra_bits[];
|
||||
extern const char *apply_types[];
|
||||
extern const char *container_bits[];
|
||||
extern const char *house_bits[];
|
||||
extern const char *house_types[];
|
||||
extern const char *drinks[];
|
||||
extern const char *drinknames[];
|
||||
extern const char *color_liquid[];
|
||||
|
|
|
|||
956
src/house.c
956
src/house.c
File diff suppressed because it is too large
Load diff
96
src/house.h
96
src/house.h
|
|
@ -12,29 +12,61 @@
|
|||
#ifndef _HOUSE_H_
|
||||
#define _HOUSE_H_
|
||||
|
||||
#define MAX_HOUSES 100
|
||||
#define MAX_GUESTS 10
|
||||
#define MAX_HOUSES 100 /* Maximum number of houses in the MUD */
|
||||
#define MAX_GUESTS 10 /* Maximum number of guests per house */
|
||||
|
||||
#define HOUSE_PRIVATE 0
|
||||
/* House modes/types */
|
||||
#define HOUSE_PRIVATE 0 /* A Normal Player-Owned House */
|
||||
#define HOUSE_GOD 1 /* Imm owned house */
|
||||
#define HOUSE_SHOP 2 /* Player-Owned Shop */
|
||||
|
||||
struct house_control_rec {
|
||||
room_vnum vnum; /* vnum of this house */
|
||||
room_vnum atrium; /* vnum of atrium */
|
||||
sh_int exit_num; /* direction of house's exit */
|
||||
time_t built_on; /* date this house was built */
|
||||
int mode; /* mode of ownership */
|
||||
long owner; /* idnum of house's owner */
|
||||
int num_of_guests; /* how many guests for house */
|
||||
long guests[MAX_GUESTS]; /* idnums of house's guests */
|
||||
time_t last_payment; /* date of last house payment */
|
||||
long spare0;
|
||||
long spare1;
|
||||
long spare2;
|
||||
long spare3;
|
||||
long spare4;
|
||||
long spare5;
|
||||
long spare6;
|
||||
long spare7;
|
||||
#define NUM_HOUSE_TYPES 3
|
||||
|
||||
/* House Flags - also see string constants, in constants.c */
|
||||
#define HOUSE_NOGUESTS 0 /* Owner cannot add guests */
|
||||
#define HOUSE_FREE 1 /* House does not require payments */
|
||||
#define HOUSE_NOIMMS 2 /* Imms below level 2 cannot enter */
|
||||
#define HOUSE_IMPONLY 3 /* Imms below level 4 cannot enter */
|
||||
#define HOUSE_RENTFREE 4 /* No rent is charged on items left here */
|
||||
#define HOUSE_SAVENORENT 5 /* NORENT items are crashsaved too */
|
||||
#define HOUSE_NOSAVE 6 /* Do not crash save this room - private only */
|
||||
#define HOUSE_NOSPEC 7 /* Don't use 'standard' spec proc for house type */
|
||||
|
||||
#define HOUSE_NUM_FLAGS 8
|
||||
|
||||
/** House flags.
|
||||
* @param loc The house_control_data structure. */
|
||||
#define HOUSE_FLAGS(loc) ((loc)->house_flags)
|
||||
|
||||
/** House flagged.
|
||||
* @param loc The house_control_data structure. *
|
||||
* flag The house flag (see above) */
|
||||
#define HOUSE_FLAGGED(loc, flag) ((loc) && IS_SET_AR(HOUSE_FLAGS(loc), (flag)))
|
||||
|
||||
|
||||
#define TOROOM(room, dir) (world[room].dir_option[dir] ? \
|
||||
world[room].dir_option[dir]->to_room : NOWHERE)
|
||||
|
||||
/* List structure for house guests */
|
||||
struct guest_data {
|
||||
long id; /**< The ID number of this guest */
|
||||
struct guest_data *next; /**< pointer to next guest in list */
|
||||
};
|
||||
|
||||
/* List structure for houses */
|
||||
struct house_control_data {
|
||||
room_vnum vnum; /**< vnum of this house */
|
||||
room_vnum atrium; /**< vnum of atrium */
|
||||
sh_int exit_num; /**< direction of house's exit */
|
||||
time_t built_on; /**< date this house was built */
|
||||
long built_by; /**< The ID of the builder (hsedit) */
|
||||
long owner; /**< idnum of house's owner */
|
||||
int mode; /**< mode of ownership */
|
||||
struct guest_data *guests; /**< idnums of house's guests */
|
||||
time_t last_payment; /**< date of last house payment */
|
||||
int house_flags[HS_ARRAY_MAX]; /**< House Flags (hsedit) */
|
||||
mob_vnum receptionist; /**< The Receptionist/Shopkeeper */
|
||||
struct house_control_data *next; /**< pointer to next house in list */
|
||||
};
|
||||
|
||||
#define TOROOM(room, dir) (world[room].dir_option[dir] ? \
|
||||
|
|
@ -46,12 +78,32 @@ void House_boot(void);
|
|||
void House_save_all(void);
|
||||
int House_can_enter(struct char_data *ch, room_vnum house);
|
||||
void House_crashsave(room_vnum vnum);
|
||||
void House_list_guests(struct char_data *ch, int i, int quiet);
|
||||
void House_list_guests(struct char_data *ch, struct house_control_data *h, int quiet);
|
||||
int House_save(struct obj_data *obj, FILE *fp);
|
||||
void House_save_control(void);
|
||||
void House_delete_file(room_vnum vnum);
|
||||
void hcontrol_list_houses(struct char_data *ch, char *arg);
|
||||
void set_house(struct house_control_data *h);
|
||||
void free_house_guests(struct house_control_data *h);
|
||||
void clear_house_control_data(struct house_control_data *h);
|
||||
void add_house_guest(struct house_control_data *h_data, long guest_id);
|
||||
int count_house_guests(struct house_control_data *h);
|
||||
bool is_house_guest(struct house_control_data *h, long id_num);
|
||||
bool remove_house_guest(struct house_control_data *h, long id_num);
|
||||
int count_houses(void);
|
||||
void free_house(struct house_control_data *h);
|
||||
void free_house_list(void);
|
||||
bool delete_house_control(struct house_control_data *to_del);
|
||||
struct house_control_data *new_house(void);
|
||||
struct house_control_data *add_house(struct house_control_data *h_data);
|
||||
struct house_control_data *find_house(room_vnum vnum);
|
||||
|
||||
/* In game Commands */
|
||||
ACMD(do_hcontrol);
|
||||
ACMD(do_house);
|
||||
|
||||
/* Spec-procs in house.c */
|
||||
SPECIAL(house_shopkeeper);
|
||||
SPECIAL(house_receptionist);
|
||||
|
||||
#endif /* _HOUSE_H_ */
|
||||
|
|
|
|||
1134
src/hsedit.c
Executable file
1134
src/hsedit.c
Executable file
File diff suppressed because it is too large
Load diff
|
|
@ -195,6 +195,7 @@ cpp_extern const struct command_info cmd_info[] = {
|
|||
{ "holler" , "holler" , POS_RESTING , do_gen_comm , 1, ADMLVL_MORTAL, ADM_NONE, SCMD_HOLLER },
|
||||
{ "holylight", "holy" , POS_DEAD , do_gen_tog , 0, ADMLVL_IMMORT, ADM_NONE, SCMD_HOLYLIGHT },
|
||||
{ "house" , "house" , POS_RESTING , do_house , 0, ADMLVL_MORTAL, ADM_NONE, 0 },
|
||||
{ "hsedit" , "hsedit" , POS_DEAD , do_oasis_hsedit,0,ADMLVL_GOD, ADM_ADVBUILD, 0 },
|
||||
|
||||
{ "inventory", "i" , POS_DEAD , do_inventory , 0, ADMLVL_MORTAL, ADM_NONE, 0 },
|
||||
{ "identify" , "id" , POS_STANDING, do_not_here , 1, ADMLVL_MORTAL, ADM_NONE, 0 },
|
||||
|
|
@ -1320,6 +1321,7 @@ void nanny(struct descriptor_data *d, char *arg)
|
|||
{ CON_QEDIT, qedit_parse },
|
||||
{ CON_PREFEDIT, prefedit_parse },
|
||||
{ CON_IBTEDIT, ibtedit_parse },
|
||||
{ CON_HSEDIT, hsedit_parse },
|
||||
{ -1, NULL }
|
||||
};
|
||||
|
||||
|
|
|
|||
34
src/oasis.h
34
src/oasis.h
|
|
@ -97,6 +97,7 @@ struct oasis_olc_data {
|
|||
struct trig_data *trig;
|
||||
struct prefs_data *prefs; /* used for 'prefedit' */
|
||||
struct ibt_data *ibt; /* used for 'ibtedit' */
|
||||
struct house_control_data *house; /* used for 'hsedit' */
|
||||
int script_mode;
|
||||
int trigger_position;
|
||||
int item_type;
|
||||
|
|
@ -129,6 +130,7 @@ extern const char *nrm, *grn, *cyn, *yel;
|
|||
#define OLC_HELP(d) (OLC(d)->help) /**< Hedit structure */
|
||||
#define OLC_PREFS(d) (OLC(d)->prefs) /**< Preferences structure */
|
||||
#define OLC_IBT(d) (OLC(d)->ibt) /**< IBT (idea/bug/typo) structure */
|
||||
#define OLC_HOUSE(d) (OLC(d)->house) /**< Player-Owned House/Shop structure */
|
||||
/* Other macros. */
|
||||
#define OLC_EXIT(d) (OLC_ROOM(d)->dir_option[OLC_VAL(d)])
|
||||
|
||||
|
|
@ -381,6 +383,32 @@ extern const char *nrm, *grn, *cyn, *yel;
|
|||
#define HEDIT_KEYWORDS 5
|
||||
#define HEDIT_MIN_LEVEL 6
|
||||
|
||||
/*. House editor - Submodes of HSEDIT connectedness. */
|
||||
#define HSEDIT_MAIN_MENU 0
|
||||
#define HSEDIT_CONFIRM_SAVESTRING 1
|
||||
#define HSEDIT_OWNER_MENU 2
|
||||
#define HSEDIT_OWNER_NAME 3
|
||||
#define HSEDIT_OWNER_ID 4
|
||||
#define HSEDIT_ROOM 5
|
||||
#define HSEDIT_ATRIUM 6
|
||||
#define HSEDIT_DIR_MENU 7
|
||||
#define HSEDIT_GUEST_MENU 8
|
||||
#define HSEDIT_GUEST_ADD 9
|
||||
#define HSEDIT_GUEST_DELETE 10
|
||||
#define HSEDIT_GUEST_CLEAR 11
|
||||
#define HSEDIT_FLAGS 12
|
||||
#define HSEDIT_BUILD_DATE 13
|
||||
#define HSEDIT_PAYMENT 14
|
||||
#define HSEDIT_TYPE 15
|
||||
#define HSEDIT_DELETE 16
|
||||
#define HSEDIT_VALUE_0 17
|
||||
#define HSEDIT_VALUE_1 18
|
||||
#define HSEDIT_VALUE_2 19
|
||||
#define HSEDIT_VALUE_3 20
|
||||
#define HSEDIT_NOVNUM 21
|
||||
#define HSEDIT_BUILDER 22
|
||||
#define HSEDIT_RECEP 23
|
||||
|
||||
int save_config( IDXTYPE nowhere );
|
||||
|
||||
/* Prototypes to keep. */
|
||||
|
|
@ -450,6 +478,12 @@ ACMD(do_tedit);
|
|||
/* public functions from qedit.c */
|
||||
ACMD(do_oasis_qedit);
|
||||
|
||||
/* public functions from hsedit.c */
|
||||
void hsedit_parse(struct descriptor_data * d, char *arg);
|
||||
void hsedit_string_cleanup(struct descriptor_data *d, int terminator);
|
||||
ACMD(do_oasis_hsedit);
|
||||
|
||||
|
||||
/* public functions from oasis_copy.c */
|
||||
int buildwalk(struct char_data *ch, int dir);
|
||||
ACMD(do_dig);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include "ban.h" /* for SPECIAL(gen_board) */
|
||||
#include "boards.h"
|
||||
#include "mail.h"
|
||||
#include "house.h"
|
||||
|
||||
SPECIAL(questmaster);
|
||||
SPECIAL(shop_keeper);
|
||||
|
|
@ -191,6 +192,8 @@ struct spec_func_data spec_func_list[] = {
|
|||
{"Guild Guard", guild_guard },
|
||||
{"Questmaster", questmaster },
|
||||
{"Shopkeeper", shop_keeper },
|
||||
{"House-Receptionist", house_receptionist },
|
||||
{"House-Shopkeeper", house_shopkeeper },
|
||||
{"\n", NULL}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -357,10 +357,11 @@
|
|||
#define CON_QEDIT 28 /**< OLC mode - quest edit */
|
||||
#define CON_PREFEDIT 29 /**< OLC mode - preference edit */
|
||||
#define CON_IBTEDIT 30 /**< OLC mode - idea/bug/typo edit */
|
||||
#define CON_HSEDIT 31 /**< OLC mode - house editor */
|
||||
|
||||
/* OLC States range - used by IS_IN_OLC and IS_PLAYING */
|
||||
#define FIRST_OLC_STATE CON_OEDIT /**< The first CON_ state that is an OLC */
|
||||
#define LAST_OLC_STATE CON_IBTEDIT /**< The last CON_ state that is an OLC */
|
||||
#define LAST_OLC_STATE CON_HSEDIT /**< The last CON_ state that is an OLC */
|
||||
|
||||
/* Character equipment positions: used as index for char_data.equipment[] */
|
||||
/* NOTE: Don't confuse these constants with the ITEM_ bitvectors
|
||||
|
|
@ -551,6 +552,7 @@
|
|||
#define EF_ARRAY_MAX 4 /**< # Bytes in Bit vector - Obj Extra Flags */
|
||||
#define ZN_ARRAY_MAX 4 /**< # Bytes in Bit vector - Zone Flags */
|
||||
#define AD_ARRAY_MAX 4 /**< # Bytes in Bit vector - Admin Priv Flags */
|
||||
#define HS_ARRAY_MAX 4 /**< # Bytes in Bit vector - House Flags */
|
||||
|
||||
/* other #defined constants */
|
||||
/* **DO**NOT** blindly change the number of levels in your MUD merely by
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue