Add CONTAINER_FLESH container subtype
This is used to match the other_arch property of items attempting to be put into a container. These other_arch values are checked against the container's "race" string. Example: * flesh sack -> race -> "hill_giant,beholder" * "hill giant's head" will match if other_arch is "hill_giant" * "beholder's tongue" will match if other_arch is "beholder" It also might be good to match by name instead, but we'll see.master
parent
198f3e83b1
commit
4ea30c22d0
|
@ -403,4 +403,9 @@ extern int nroffreeobjects;
|
||||||
#define ARCH_DEPLETION "depletion" /**< Archetype for depletion. */
|
#define ARCH_DEPLETION "depletion" /**< Archetype for depletion. */
|
||||||
#define ARCH_SYMPTOM "symptom" /**< Archetype for disease symptom. */
|
#define ARCH_SYMPTOM "symptom" /**< Archetype for disease symptom. */
|
||||||
|
|
||||||
|
/* This isn't the right place for this, but we need a container subtype for
|
||||||
|
* special "flesh sack" bonus handling. -kts
|
||||||
|
*/
|
||||||
|
#define CONTAINER_NORMAL 0
|
||||||
|
#define CONTAINER_FLESH 1
|
||||||
#endif /* OBJECT_H */
|
#endif /* OBJECT_H */
|
||||||
|
|
|
@ -297,7 +297,16 @@ int sack_can_hold(const object *pl, const object *sack, const object *op, uint32
|
||||||
name);
|
name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (sack->race
|
/* Special handling for "flesh bags" --kts */
|
||||||
|
if (sack->subtype == CONTAINER_FLESH
|
||||||
|
&& (!op->other_arch || (op->other_arch && sack->race && strstr(sack->race, op->other_arch->name) == NULL)) ) {
|
||||||
|
draw_ext_info_format(NDI_UNIQUE, 0, pl, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_ERROR,
|
||||||
|
"You can only put %s parts into the %s.",
|
||||||
|
"You can only put %s parts into the %s.",
|
||||||
|
sack->race, sack->name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (sack->race && sack->subtype != CONTAINER_FLESH
|
||||||
&& (sack->race != op->race || op->type == CONTAINER || (sack->stats.food && sack->stats.food != op->type))) {
|
&& (sack->race != op->race || op->type == CONTAINER || (sack->stats.food && sack->stats.food != op->type))) {
|
||||||
draw_ext_info_format(NDI_UNIQUE, 0, pl, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_ERROR,
|
draw_ext_info_format(NDI_UNIQUE, 0, pl, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_ERROR,
|
||||||
"You can put only %s into the %s.",
|
"You can put only %s into the %s.",
|
||||||
|
@ -574,14 +583,15 @@ void pick_up(object *op, object *alt) {
|
||||||
|
|
||||||
/* startequip items are not allowed to be put into containers
|
/* startequip items are not allowed to be put into containers
|
||||||
* Not sure why we have this limitation
|
* Not sure why we have this limitation
|
||||||
|
* @@ BE LIMITED NO LONGER !!!!
|
||||||
*/
|
*/
|
||||||
if (op->type == PLAYER
|
/*if (op->type == PLAYER
|
||||||
&& alt->type == CONTAINER
|
&& alt->type == CONTAINER
|
||||||
&& QUERY_FLAG(tmp, FLAG_STARTEQUIP)) {
|
&& QUERY_FLAG(tmp, FLAG_STARTEQUIP)) {
|
||||||
draw_ext_info(NDI_UNIQUE, 0, op, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_ERROR,
|
draw_ext_info(NDI_UNIQUE, 0, op, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_ERROR,
|
||||||
"This object cannot be put into containers!", NULL);
|
"This object cannot be put into containers!", NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
tag = tmp->count;
|
tag = tmp->count;
|
||||||
pick_up_object(op, alt, tmp, count);
|
pick_up_object(op, alt, tmp, count);
|
||||||
|
@ -712,7 +722,8 @@ void put_object_in_sack(object *op, object *sack, object *tmp, uint32 nrof) {
|
||||||
name_sack);
|
name_sack);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (QUERY_FLAG(tmp, FLAG_STARTEQUIP)) {
|
/* Changed to allow god-given materials to be placed into a cauldron -kts */
|
||||||
|
if (QUERY_FLAG(tmp, FLAG_STARTEQUIP) && !QUERY_FLAG(tmp, FLAG_IS_CAULDRON)) {
|
||||||
query_name(tmp, name_tmp, MAX_BUF);
|
query_name(tmp, name_tmp, MAX_BUF);
|
||||||
draw_ext_info_format(NDI_UNIQUE, 0, op, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_ERROR,
|
draw_ext_info_format(NDI_UNIQUE, 0, op, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_ERROR,
|
||||||
"You cannot put the %s in the %s.",
|
"You cannot put the %s in the %s.",
|
||||||
|
|
Loading…
Reference in New Issue