/** * This room will handle craft shop like things, where you sell stuff to * the store and it will sell it onto other players after taking * a margin. This can be used for potions, pottery, swords, anything! * @author Pinkfish * @started Thu Feb 5 15:39:57 CST 1998 */ #include <money.h> #include <shops/craft_shop.h> inherit "/std/shops/inherit/craft_shop_category"; private nosave int _minimum_age_to_vote; private nosave int _minimum_age_to_nominate; private nosave int _minimum_number_nominated; private nosave int _minimum_number_voted; private nosave int _percentage_needed_creation; private nosave int _percentage_needed_deletion; private nosave int _nomination_time; private nosave int _election_time; private nosave int _deletion_time; #define DAY (24 * 60 * 60) // // Predefinitions. // protected void setup_category(function func, int value, string name, object* sellables); protected void choose_category(string category, function func, int value, string name, object* sellables, string* categories); void create() { if (!_minimum_age_to_vote) { _minimum_age_to_vote = 2 * DAY; } if (!_minimum_age_to_nominate) { _minimum_age_to_nominate = 10 * DAY; } if (!_minimum_number_nominated) { _minimum_number_nominated = 4; } if (!_nomination_time) { _nomination_time = 7 * DAY; } if (!_election_time) { _election_time = 7 * DAY; } if (!_deletion_time) { _deletion_time = 7 * DAY; } if (!_minimum_number_voted) { _minimum_number_voted = 20; } if (!_percentage_needed_creation) { _percentage_needed_creation = 75; } if (!_percentage_needed_deletion) { _percentage_needed_deletion = 75; } ::create(); } /* create() */ /** * This is the function used as a call back from the controller to deal with * category based stuff. * @param name the name of the category being processed * @param state the state the category is currently in * @param voted the number of people who voted * @param yes the number who voted yes * @param no the number who voted no * @param abstain the number who abstained * @return 0 on error, timeout of the next stage */ protected int category_function(string name, int state, string* voted, int yes, int no, int abstain) { switch (state) { case CRAFT_CATEGORY_STATE_NOMINATING : if (sizeof(voted) > _minimum_number_nominated) { return _election_time; } break; case CRAFT_CATEGORY_STATE_VOTING : if (sizeof(voted) > _minimum_number_voted) { if (yes * 100 / (no + yes) >= _percentage_needed_creation) { return 1; } } break; case CRAFT_CATEGORY_STATE_DELETEING : if (sizeof(voted) > _minimum_number_voted) { if (yes * 100 / (no + yes) >= _percentage_needed_deletion) { return 1; } } } return 0; } /* category_function() */ /** * This method sets the minimum age you need to be to vote in category * elections. * @param age the minimum age to vote */ void set_minimum_age_to_vote(int age) { _minimum_age_to_vote = age; } /* set_minimum_age_to_vote() */ /** * This method sets the minimum age you need to be to nominate a new * category. * @param age the minimum age to nominate */ void set_minimum_age_to_nominate(int age) { _minimum_age_to_nominate = age; } /* set_minimum_age_to_nominate() */ /* * This method sets the minimum number of people you need before a * nomination is successful. * @param num the minimum number of people to nominate */ void set_minimum_nomination_number(int num) { _minimum_number_nominated = num; } /* set_minimum_nomination_number() */ /** * This method sets the amount of time it takes for a category nomination * to go through the process. * @param time the nomination time */ void set_nomination_time(int tim) { _nomination_time = tim; } /* set_nomination_time() */ /** * This method sets the amount of time it takes for a category election * to go through the process. * @param time the election time */ void set_election_time(int tim) { _election_time = tim; } /* set_election_time() */ /** * This method sets the amount of time it takes for a category deletion * to go through the process. * @param time the deletion time */ void set_deletion_time(int tim) { _deletion_time = tim; } /* set_deletion_time() */