#if defined(macintosh) #include <types.h> #else #include <sys/types.h> #include <sys/time.h> #endif #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #include "merc.h" #include "interp.h" #include "recycle.h" #include "tables.h" #include "thri_look.h" #include "thri_monsters.h" #include "thri_forage.h" /* Forage idea: 'dig' to find an herb based on room->herb_type */ /* Herb List: Parsley Basil Garlic Red Clover Rosemary Sage Thyme Pennywort Spider Silk Feverfew Fennel Blood Moss Vervain Ginsing Foxglove Henbane Mugwort Mandrake Sulfer ash Monkshood Wormwood Hemlock Nightshade Black Pearl */ const struct herbs_type herbs_table[] = { /* 0*/{"Green Clover", VERY_COMMON, ECOSYSTEM_GRASS}, /* 1*/{"Parsley", VERY_COMMON, ECOSYSTEM_FOREST}, /* 2*/{"Basil", VERY_COMMON, ECOSYSTEM_GRASS}, /* 3*/{"Garlic", VERY_COMMON, ECOSYSTEM_MOUNTIANS}, /* 4*/{"Red Clover", VERY_COMMON, ECOSYSTEM_ARID}, /* 5*/{"Rosemary", VERY_COMMON, ECOSYSTEM_FOREST}, /* 6*/{"Sage", VERY_COMMON, ECOSYSTEM_HILLS}, /* 7*/{"Thyme", COMMON, ECOSYSTEM_FOREST}, /* 8*/{"Pennywort", COMMON, ECOSYSTEM_CITY}, /* 9*/{"Spider Silk", COMMON, ECOSYSTEM_MOUNTIANS}, /*10*/{"Feverfew", COMMON, ECOSYSTEM_GRASS}, /*11*/{"Fennel", COMMON, ECOSYSTEM_SWAMP}, /*12*/{"Blood Moss", COMMON, ECOSYSTEM_SWAMP}, /*13*/{"Vervain", COMMON, ECOSYSTEM_ARID}, /*14*/{"Ginsing", COMMON, ECOSYSTEM_HILLS}, /*15*/{"Foxglove", COMMON, ECOSYSTEM_FOREST}, /*16*/{"Henbane", UNCOMMON, ECOSYSTEM_FOREST}, /*17*/{"Mugwort", UNCOMMON, ECOSYSTEM_FOREST}, /*18*/{"Mandrake", RARE, ECOSYSTEM_FOREST}, /*19*/{"Sulfer Ash", UNCOMMON, ECOSYSTEM_ARID}, /*20*/{"Monkshood", RARE, ECOSYSTEM_FOREST}, /*21*/{"Wormwood", RARE, ECOSYSTEM_GRASS}, /*22*/{"Hemlock", RARE, ECOSYSTEM_FOREST}, /*23*/{"Nightshade", VERY_RARE, ECOSYSTEM_FOREST}, /*24*/{"Black Pearl", VERY_RARE, ECOSYSTEM_OCEAN}, /*25*/{"Abhaya Wood", VERY_RARE, ECOSYSTEM_ARID}, /*26*/{"Adriel Bark", COMMON, ECOSYSTEM_ARID}, /*27*/{"Anete Fiber", VERY_RARE, ECOSYSTEM_SWAMP}, /*28*/{"Becker's Bark", VERY_COMMON, ECOSYSTEM_DESERT}, /*29*/{"Beng Amber", COMMON, ECOSYSTEM_HILLS}, /*30*/{"Big Shell", VERY_RARE, ECOSYSTEM_MOUNTIANS}, /*31*/{"Buo Fiber", COMMON, ECOSYSTEM_GRASS}, /*32*/{"Caprice Seed", UNCOMMON, ECOSYSTEM_MOUNTIANS}, /*33*/{"Cuty Shell", UNCOMMON, ECOSYSTEM_FOREST}, /*34*/{"Dante Sap", RARE, ECOSYSTEM_SWAMP}, /*35*/{"Dung Resin", UNCOMMON, ECOSYSTEM_MOUNTIANS}, /*36*/{"Dzao Fiber", UNCOMMON, ECOSYSTEM_HILLS}, /*37*/{"Enola Sap", UNCOMMON, ECOSYSTEM_GRASS}, /*38*/{"Fung Resin", COMMON, ECOSYSTEM_SNOW}, /*39*/{"Glue Resin", VERY_RARE, ECOSYSTEM_SWAMP}, /*40*/{"Gulatch Oil", VERY_COMMON, ECOSYSTEM_MOUNTIANS}, /*41*/{"Hash Amber", VERY_RARE, ECOSYSTEM_SWAMP}, /*42*/{"Horny Shell", RARE, ECOSYSTEM_SNOW}, /*43*/{"Kachine Wood", UNCOMMON, ECOSYSTEM_SWAMP}, /*44*/{"Moon Resin", COMMON, ECOSYSTEM_CITY}, /*45*/{"Motega Wood", COMMON, ECOSYSTEM_ARID}, /*46*/{"Nita Wood Node", VERY_RARE, ECOSYSTEM_SWAMP}, /*47*/{"Oath Bark", COMMON, ECOSYSTEM_DESERT}, /*48*/{"Patee Wood Node", UNCOMMON, ECOSYSTEM_FOREST}, /*49*/{"Pha Amber", RARE, ECOSYSTEM_SWAMP}, /*50*/{"Pilan Oil", VERY_COMMON, ECOSYSTEM_GRASS}, /*51*/{"Sarina Seed", VERY_COMMON, ECOSYSTEM_FOREST}, /*52*/{"Saurona Seed", UNCOMMON, ECOSYSTEM_CITY}, /*53*/{"Scarth Wood Node", VERY_COMMON, ECOSYSTEM_SNOW}, /*54*/{"Sha Amber", COMMON, ECOSYSTEM_MOUNTIANS}, /*55*/{"Silverweed sap", COMMON, ECOSYSTEM_SWAMP}, /*56*/{"Silvio Seed", UNCOMMON, ECOSYSTEM_MOUNTIANS}, /*57*/{"Smart Shell", VERY_COMMON, ECOSYSTEM_ARID}, /*58*/{"Soo Amber", VERY_RARE, ECOSYSTEM_DESERT}, /*59*/{"Splinter Shell", UNCOMMON, ECOSYSTEM_HILLS}, /*60*/{"Tama Wood", RARE, ECOSYSTEM_OCEAN}, /*61*/{"Tansy Wood Node", VERY_COMMON, ECOSYSTEM_ARID}, /*62*/{"Visc Sap", VERY_COMMON, ECOSYSTEM_DESERT}, /*63*/{"Yana Wood Node", VERY_COMMON, ECOSYSTEM_DESERT}, /*64*/{"Zun Amber", UNCOMMON, ECOSYSTEM_FOREST}, }; const struct ecosystem_type ecosystem_table[] = { /* 0 Forest: 1*/{HERB_NIGHTSHADE, {HERB_THYME, HERB_FOXGLOVE}, {HERB_HENBANE, HERB_MUGWORT, HERB_CUTY_SHELL, HERB_SARINA_SEED}, "Forest Type I"}, /* 1 Forest: 2*/{HERB_MONKSHOOD, {HERB_ZUN_AMBER, HERB_PATEE_WOOD_NODE}, {HERB_PARSLEY, HERB_ROSEMARY, HERB_SARINA_SEED, HERB_HENBANE}, "Forest Type II"}, /* 2 Forest: 3*/{HERB_HEMLOCK, {HERB_THYME, HERB_MUGWORT}, {HERB_HENBANE, HERB_ROSEMARY, HERB_SARINA_SEED, HERB_CUTY_SHELL}, "Forest Type III"}, /* 3 Forest: 4*/{HERB_MANDRAKE, {HERB_ZUN_AMBER, HERB_MUGWORT}, {HERB_PARSLEY, HERB_ROSEMARY, HERB_SARINA_SEED, HERB_CUTY_SHELL}, "Forest Type IV"}, }; /* Prospect Command: Currently an Immortal utlity that tells you the exact life of each vein of herbs. */ void do_prospect (CHAR_DATA * ch, char *argument) { char buf[MSL]; sprintf(buf, "Current Ecosystem: %s\n\r", ecosystem_table[ch->in_room->ecosystem].name); stc(buf, ch); send_to_char("Type Life Name\n\r", ch); send_to_char("------- Life Name\n\r", ch); sprintf(buf, "Rare Herb: %-3d %-10s\n\r", ch->in_room->herb_life[2], herbs_table[ecosystem_table[ch->in_room->ecosystem].level_1].name); stc(buf, ch); sprintf(buf, "Medium Herb: %-3d %-10s %-10s\n\r", ch->in_room->herb_life[1], herbs_table[ecosystem_table[ch->in_room->ecosystem].level_2[0]].name, herbs_table[ecosystem_table[ch->in_room->ecosystem].level_2[1]].name); stc(buf, ch); sprintf(buf, "Common Herb: %-3d %-10s %-10s %-10s %-10s\n\r", ch->in_room->herb_life[0], herbs_table[ecosystem_table[ch->in_room->ecosystem].level_3[0]].name, herbs_table[ecosystem_table[ch->in_room->ecosystem].level_3[1]].name, herbs_table[ecosystem_table[ch->in_room->ecosystem].level_3[2]].name, herbs_table[ecosystem_table[ch->in_room->ecosystem].level_3[3]].name); stc(buf, ch); } /* Primary Forage command, Uses: forage <no argument> Forages blindly forage for <specific> Attempts to forage for a Specific herb forage info <herb> Displays information on a given herb forage ecosystem <ecosystem> Displays Information on possible herbs in given ecosystem forage commonality <num> Displays all herbs in common with given commonality */ void do_forage (CHAR_DATA * ch, char *argument) { char buf[MSL]; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; argument = one_argument (argument, arg1); argument = one_argument (argument, arg2); if (arg1[0] == '\0') { OBJ_DATA * obj; send_to_char("You forage a little..\n\r", ch); int chance = number_range(1, 100); int herb; if (chance >= 0 && chance <= 75) { if (ch->in_room->herb_life[0] == 0) { stc("You cannot find an herb here.\n\r", ch); return; } herb = ecosystem_table[ch->in_room->ecosystem].level_3[number_range(0, 3)]; ch->in_room->herb_life[0]--; } else if (chance >= 76 && chance <= 95) { if (ch->in_room->herb_life[1] == 0) { stc("You cannot find an herb here.\n\r", ch); } herb = ecosystem_table[ch->in_room->ecosystem].level_2[number_range(0, 1)]; ch->in_room->herb_life[1]--; } else { if (ch->in_room->herb_life[2] == 0) { stc("You cannot find an herb here.\n\r", ch); } herb = ecosystem_table[ch->in_room->ecosystem].level_1; ch->in_room->herb_life[2]--; } obj = create_herb_object(herb); obj_to_char (obj, ch); sprintf(buf, "You have found a %s!\n\r", herbs_table[herb].name); stc(buf, ch); return; } if (!str_prefix (arg1, "info")) { int herb = return_herb_number(arg2); sprintf(buf, "Herb: %s\n\r", herbs_table[herb].name); stc(buf, ch); sprintf(buf, "Ecosystem: %s\n\r", return_ecosystem(herbs_table[herb].ecosystem)); stc(buf, ch); sprintf(buf, "Commonality: %s\n\r", return_commonality(herbs_table[herb].commonality)); stc(buf, ch); return; } if (!str_prefix (arg1, "ecosystem")) { int value; int temp = 0; if (!is_number (arg2)) { stc("Number must be Numeric\n\r", ch); return; } value = atoi (arg2); while (temp != MAX_HERBS) { int temp_herb = herbs_table[temp].ecosystem; if (temp_herb == value) { sprintf(buf, "%-15s %s\n\r", herbs_table[temp].name, return_commonality(herbs_table[temp].commonality)); stc(buf, ch); } temp++; } return; } if (!str_prefix (arg1, "common")) { int value; int temp = 0; if (!is_number (arg2)) { stc("Number must be Numeric\n\r", ch); return; } value = atoi (arg2); while (temp != MAX_HERBS) { int temp_herb = herbs_table[temp].commonality; if (temp_herb == value) { sprintf(buf, "%-15s\n\r", herbs_table[temp].name); stc(buf, ch); } temp++; } return; } else { stc("Error\n\r", ch); return; } return; } /* * returns the number of given Herb */ int return_herb_number(const char *name) { int i; for (i = 0; i < MAX_HERBS; i++) { if (herbs_table[i].name == NULL) break; if (LOWER (name[0]) == LOWER (herbs_table[i].name[0]) && !str_prefix (name, herbs_table[i].name)) return i; } return -1; } /* * Displays commonality of given herb number */ char *return_commonality(int x) { switch(x) { default: case 1: return "very common"; break; case 2: return "common"; break; case 3: return "uncommon"; break; case 4: return "rare"; break; case 5: return "very rare"; break; } return "Error"; } /* * Returns ecosystem name of given herb number */ char *return_ecosystem(int x) { switch(x) { default: case 1: return "arid"; break; case 2: return "forest"; break; case 3: return "desert"; break; case 4: return "ocean/water"; break; case 5: return "mountians"; break; case 6: return "hills"; break; case 7: return "swamp"; break; case 8: return "city/devloped"; break; case 9: return "snow/cold"; break; case 10: return "grasslands"; break; } return "Error"; } /* * Creates the base Material item. * current item_type = HERB */ OBJ_DATA *create_herb_object (int herb) { OBJ_DATA *obj; char name_set[MSL]; char shor_set[MSL]; char long_set[MSL]; obj = create_object (get_obj_index (OBJ_VNUM_HERB), 0); obj->wear_flags = ITEM_TAKE; obj->wear_flags += ITEM_HOLD; sprintf(name_set, "herb material %s", herbs_table[herb].name); sprintf(shor_set, "a %s", herbs_table[herb].name); sprintf(long_set, "a small herb is on the ground here."); obj->name = str_dup (name_set); obj->short_descr = str_dup (shor_set); obj->description = str_dup (long_set); obj->value[1] = herb; return obj; } /* * Called from reset_area, attempts to reset herb life/Values */ void reset_herbs (ROOM_INDEX_DATA * pRoom) { int rare_total = number_range(2, 4); int medium_total = number_range(6, 12); int common_total = number_range(15, 30); pRoom->herb_life[0] = common_total; pRoom->herb_life[1] = medium_total; pRoom->herb_life[2] = rare_total; }