⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inventory.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 2 页
字号:
			(ch == '\016') ||			(ch == '\002')) {		char until[18], buf[DCOLS];		int n;		if (ch <= '\031') {			ch += 96;			(void) strcpy(until, "until adjascent");		} else {			ch += 32;			until[0] = '\0';		}		(void) get_com_id(&n, ch);		sprintf(buf, "run %s %s", com_id_tab[n].com_desc + 8, until);		check_message();		message(buf, 0);		return(1);	} else {		return(0);	}}mix_colors(){	short i, j, k;	char *t;	for (i = 0; i <= 32; i++) {		j = get_rand(0, (POTIONS - 1));		k = get_rand(0, (POTIONS - 1));		t = id_potions[j].title;		id_potions[j].title = id_potions[k].title;		id_potions[k].title = t;	}}make_scroll_titles(){	short i, j, n;	short sylls, s;	for (i = 0; i < SCROLS; i++) {		sylls = get_rand(2, 5);		(void) strcpy(id_scrolls[i].title, "'");		for (j = 0; j < sylls; j++) {			s = get_rand(1, (MAXSYLLABLES-1));			(void) strcat(id_scrolls[i].title, syllables[s]);		}		n = strlen(id_scrolls[i].title);		(void) strcpy(id_scrolls[i].title+(n-1), "' ");	}}get_desc(obj, desc)object *obj;char *desc;{	char *item_name;	struct id *id_table;	char more_info[32];	short i;	if (obj->what_is == AMULET) {		(void) strcpy(desc, "the amulet of Yendor ");		return;	}	item_name = name_of(obj);	if (obj->what_is == GOLD) {		sprintf(desc, "%d pieces of gold", obj->quantity);		return;	}	if (obj->what_is != ARMOR) {		if (obj->quantity == 1) {			(void) strcpy(desc, "a ");		} else {			sprintf(desc, "%d ", obj->quantity);		}	}	if (obj->what_is == FOOD) {		if (obj->which_kind == RATION) {			if (obj->quantity > 1) {				sprintf(desc, "%d rations of ", obj->quantity);			} else {				(void) strcpy(desc, "some ");			}		} else {			(void) strcpy(desc, "a ");		}		(void) strcat(desc, item_name);		goto ANA;	}	id_table = get_id_table(obj);	if (wizard) {		goto ID;	}	if (obj->what_is & (WEAPON | ARMOR | WAND | RING)) {		goto CHECK;	}	switch(id_table[obj->which_kind].id_status) {	case UNIDENTIFIED:CHECK:		switch(obj->what_is) {		case SCROL:			(void) strcat(desc, item_name);			(void) strcat(desc, "entitled: ");			(void) strcat(desc, id_table[obj->which_kind].title);			break;		case POTION:			(void) strcat(desc, id_table[obj->which_kind].title);			(void) strcat(desc, item_name);			break;		case WAND:		case RING:			if (obj->identified ||			(id_table[obj->which_kind].id_status == IDENTIFIED)) {				goto ID;			}			if (id_table[obj->which_kind].id_status == CALLED) {				goto CALL;			}			(void) strcat(desc, id_table[obj->which_kind].title);			(void) strcat(desc, item_name);			break;		case ARMOR:			if (obj->identified) {				goto ID;			}			(void) strcpy(desc, id_table[obj->which_kind].title);			break;		case WEAPON:			if (obj->identified) {				goto ID;			}			(void) strcat(desc, name_of(obj));			break;		}		break;	case CALLED:CALL:	switch(obj->what_is) {		case SCROL:		case POTION:		case WAND:		case RING:			(void) strcat(desc, item_name);			(void) strcat(desc, "called ");			(void) strcat(desc, id_table[obj->which_kind].title);			break;		}		break;	case IDENTIFIED:ID:		switch(obj->what_is) {		case SCROL:		case POTION:			(void) strcat(desc, item_name);			(void) strcat(desc, id_table[obj->which_kind].real);			break;		case RING:			if (wizard || obj->identified) {				if ((obj->which_kind == DEXTERITY) ||					(obj->which_kind == ADD_STRENGTH)) {					sprintf(more_info, "%s%d ", ((obj->class > 0) ? "+" : ""),						obj->class);					(void) strcat(desc, more_info);				}			}			(void) strcat(desc, item_name);			(void) strcat(desc, id_table[obj->which_kind].real);			break;		case WAND:			(void) strcat(desc, item_name);			(void) strcat(desc, id_table[obj->which_kind].real);			if (wizard || obj->identified) {				sprintf(more_info, "[%d]", obj->class);				(void) strcat(desc, more_info);			}			break;		case ARMOR:			sprintf(desc, "%s%d ", ((obj->d_enchant >= 0) ? "+" : ""),			obj->d_enchant);			(void) strcat(desc, id_table[obj->which_kind].title);			sprintf(more_info, "[%d] ", get_armor_class(obj));			(void) strcat(desc, more_info);			break;		case WEAPON:			sprintf(desc+strlen(desc), "%s%d,%s%d ",			((obj->hit_enchant >= 0) ? "+" : ""), obj->hit_enchant,			((obj->d_enchant >= 0) ? "+" : ""), obj->d_enchant);			(void) strcat(desc, name_of(obj));			break;		}		break;	}ANA:	if (!strncmp(desc, "a ", 2)) {		if (is_vowel(desc[2])) {			for (i = strlen(desc) + 1; i > 1; i--) {				desc[i] = desc[i-1];			}			desc[1] = 'n';		}	}	if (obj->in_use_flags & BEING_WIELDED) {		(void) strcat(desc, "in hand");	} else if (obj->in_use_flags & BEING_WORN) {		(void) strcat(desc, "being worn");	} else if (obj->in_use_flags & ON_LEFT_HAND) {		(void) strcat(desc, "on left hand");	} else if (obj->in_use_flags & ON_RIGHT_HAND) {		(void) strcat(desc, "on right hand");	}}get_wand_and_ring_materials(){	short i, j;	boolean used[WAND_MATERIALS];	for (i = 0; i < WAND_MATERIALS; i++) {		used[i] = 0;	}	for (i = 0; i < WANDS; i++) {		do {			j = get_rand(0, WAND_MATERIALS-1);		} while (used[j]);		used[j] = 1;		(void) strcpy(id_wands[i].title, wand_materials[j]);		is_wood[i] = (j > MAX_METAL);	}	for (i = 0; i < GEMS; i++) {		used[i] = 0;	}	for (i = 0; i < RINGS; i++) {		do {			j = get_rand(0, GEMS-1);		} while (used[j]);		used[j] = 1;		(void) strcpy(id_rings[i].title, gems[j]);	}}single_inv(ichar)short ichar;{	short ch;	char desc[DCOLS];	object *obj;	ch = ichar ? ichar : pack_letter("inventory what?", ALL_OBJECTS);	if (ch == CANCEL) {		return;	}	if (!(obj = get_letter_object(ch))) {		message("no such item.", 0);		return;	}	desc[0] = ch;	desc[1] = ((obj->what_is & ARMOR) && obj->is_protected) ? '}' : ')';	desc[2] = ' ';	desc[3] = 0;	get_desc(obj, desc+3);	message(desc, 0);}struct id *get_id_table(obj)object *obj;{	switch(obj->what_is) {	case SCROL:		return(id_scrolls);	case POTION:		return(id_potions);	case WAND:		return(id_wands);	case RING:		return(id_rings);	case WEAPON:		return(id_weapons);	case ARMOR:		return(id_armors);	}	return((struct id *) 0);}inv_armor_weapon(is_weapon)boolean is_weapon;{	if (is_weapon) {		if (rogue.weapon) {			single_inv(rogue.weapon->ichar);		} else {			message("not wielding anything", 0);		}	} else {		if (rogue.armor) {			single_inv(rogue.armor->ichar);		} else {			message("not wearing anything", 0);		}	}}id_type(){	char *id;	int ch;	char buf[DCOLS];	message("what do you want identified?", 0);	ch = rgetchar();	if ((ch >= 'A') && (ch <= 'Z')) {		id = m_names[ch-'A'];	} else if (ch < 32) {		check_message();		return;	} else {		switch(ch) {		case '@':			id = "you";			break;		case '%':			id = "staircase";			break;		case '^':			id = "trap";			break;		case '+':			id = "door";			break;		case '-':		case '|':			id = "wall of a room";			break;		case '.':			id = "floor";			break;		case '#':			id = "passage";			break;		case ' ':			id = "solid rock";			break;		case '=':			id = "ring";			break;		case '?':			id = "scroll";			break;		case '!':			id = "potion";			break;		case '/':			id = "wand or staff";			break;		case ')':			id = "weapon";			break;		case ']':			id = "armor";			break;		case '*':			id = "gold";			break;		case ':':			id = "food";			break;		case ',':			id = "the Amulet of Yendor";			break;		default:			id = "unknown character";			break;		}	}	check_message();	sprintf(buf, "'%c': %s", ch, id);	message(buf, 0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -