/** * This handler deals with all the nomic rules for councils. * @author Pinkfish * @started Fri Jun 23 19:51:04 PDT 2000 */ #include <nomic_system.h> private mapping _rules; void save_me(); void create() { _rules = ([ ]); } /* create() */ /** * This method adds a nomic rule into the system. * @param area the area the rule is added in * @param type the type of rule to add * @param creator the person that created the rule * @param text the text associated with the rule * @return the new number of the rule, NOMIC_ERROR on fai;l */ int add_nomic_rule(string area, int type, string creator, string text) { int bing; class nomic_rule nomic_rule; if (!_rules[area]) { return NOMIC_ERROR; } if (type < 0 || type >= sizeof(_rules[area]->new_type_num)) { return NOMIC_ERROR; } nomic_rule = new(class nomic_rule); bing = _rules[area]->new_type_num[type]; nomic_rule->id = bing; nomic_rule->creator = creator; nomic_rule->text = text; nomic_rule->date_created = time(); _rules[area]->rules += ({ nomic_rule }); _rules[area]->new_type_num[type] = bing + 1; save_me(); } /* add_nomic_rule() */ /** * This method removes a nomic rule from the system. * @param area the area the rule is removed in * @param id the id of the rule to remove * @return the status of the removal, NOMIC_ERROR on fai;l */ int remove_nomic_rule(string area, int id) { class nomic_rule nomic_rule; if (!_rules[area]) { return NOMIC_ERROR; } foreach (nomic_rule in _rules[area]->rules) { if (nomic_rule->id == id) { _rules[area]->rules -= ({ nomic_rule }); save_me(); return 1; } } return 0; } /* remove_nomic_rule() */ /** * This method returns a nomic rule for the specified area. * @param area the area to get the rule in * @param id the id of the rule to match * @return 0 if failed, the class if succeeded */ class nomic_rule query_nomic_rule(string area, int id) { class nomic_rule nomic_rule; if (!_rules[area]) { return 0; } foreach (nomic_rule in _rules[area]->rules) { if (nomic_rule->id == id) { return copy(nomic_rule); } } return 0; } /* query_nomic_rule() */ /** * This method returns all the nomic rules for the area. * @param area the area to get the rule sin * @return all the rules */ class nomic_rule* query_all_nomic_rules(string area) { if (!_rules[area]) { return ({ }); } return copy(_rules[area]->rules); } /* query_all_nomic_rules() */ /** * This method creates an new nomic area. * @param area the new nomic area name * @return 1 on success, 0 on failure */ int create_area(string area) { class nomic_area new_area; if (_rules[area]) { return 0; } new_area = new(class nomic_area); new_area->new_type_num = NOMIC_DEFAULT_TYPE_NUMS; new_area->rules = ({ }); _rules[area] = new_area; return 1; } /* create_area() */