#include <clubs.h> #include <money.h> inherit COMMAND_BASE; inherit "/std/basic/club_listing"; #include <login.h> #include <playerinfo.h> mixed family_reverse(string from, string to) { string family_from; string family_to; string *relations_to; string *relations_from; string opp; string relation; family_from = LOGIN_OB->test_family(from); family_to = LOGIN_OB->test_family(to); if (!family_from) { add_failed_mess("Sorry, " + from + " is not in a family.\n"); } if (!family_to) { add_failed_mess("Sorry, " + to + " is not in a family.\n"); } if (!family_to || !family_from) { return 0; } relations_to = CLUB_HANDLER->query_relationships_to(family_to, to, from); relations_from = CLUB_HANDLER->query_relationships_to(family_from, from, to); if (!sizeof(relations_to) || !sizeof(relations_from)) { add_failed_mess(from + " and " + to + " are not related.\n"); return 0; } foreach (relation in relations_from) { opp = CLUB_HANDLER->query_opposite_relationship(relation); if (!opp) { write("Unable to swap " + relation + ".\n"); } else { if (!CLUB_HANDLER->remove_relationship(family_from, from, family_to, to, relation)) { write("Could not remove relationship " + relation + " between " + from + " and " + to + ".\n"); } else { CLUB_HANDLER->add_relationship(family_from, from, family_to, to, opp); PLAYERINFO_HANDLER->add_entry(this_player(), from, "family", "Changed relationship with " + to + " to " + opp); PLAYERINFO_HANDLER->add_entry(this_player(), to, "family", "Changed relationship with " + from + " to " + relation); write("Swapped relationship " + relation + " between " + from + " and " + to + ".\n"); } } } return 1; } /* family_reverse() */ int family_remove(string from, string to) { string family_from; string family_to; string *relations_to; string *relations_from; string relation; family_from = LOGIN_OB->test_family(from); family_to = LOGIN_OB->test_family(to); if (!family_from) { add_failed_mess("Sorry, " + from + " is not in a family.\n"); } if (!family_to) { add_failed_mess("Sorry, " + to + " is not in a family.\n"); } if (!family_to || !family_from) { return 0; } relations_to = CLUB_HANDLER->query_relationships_to(family_to, to, from); relations_from = CLUB_HANDLER->query_relationships_to(family_from, from, to); if (!sizeof(relations_to) || !sizeof(relations_from)) { add_failed_mess(from + " and " + to + " are not related.\n"); return 0; } foreach (relation in relations_from) { if (!CLUB_HANDLER->remove_relationship(family_from, from, family_to, to, relation)) { write("Could not remove relationship " + relation + " between " + from + " and " + to + ".\n"); } else { write("Removed relationship " + relation + " between " + from + " and " + to + ".\n"); PLAYERINFO_HANDLER->add_entry(this_player(), from, "family", "Removed relationship with " + to); PLAYERINFO_HANDLER->add_entry(this_player(), to, "family", "Removed relationship with " + from); } } return 1; } /* family_remove() */ private int do_balance(string club_name) { int balance; string place; if (!CLUB_HANDLER->is_club(club_name)) { add_failed_mess("There is no family called '" + CLUB_HANDLER->query_club_name(club_name) + "'.\n"); } place = environment(this_player())->query_property("place"); if (!place) { place = "default"; } balance = CLUB_HANDLER->query_balance(club_name); write("The balance of the family '" + CLUB_HANDLER->query_club_name(club_name) + "' is " + MONEY_HAND->money_value_string(balance, place) + ".\n"); return 1; } /* do_balance() */ private int do_all_balance() { string *clubs; string club; string place; mapping bing; string ret; clubs = CLUB_HANDLER->query_clubs(); place = environment(this_player())->query_property("place"); if (!place) { place = "default"; } bing = ([ ]); foreach (club in clubs) { if (!CLUB_HANDLER->is_family(club)) { continue; } bing[club] = CLUB_HANDLER->query_balance(club); } clubs = keys(bing); clubs = sort_array(clubs, (: $3[$1] - $3[$2] :), bing); ret = ""; foreach (club in clubs) { ret += sprintf("Family '%-20s': %s\n", CLUB_HANDLER->query_club_name(club), MONEY_HAND->money_value_string(bing[club], place)); } write("$P$Club Balances$P$" + ret); return 1; } /* do_all_balance() */ mixed *query_patterns() { return ({ "info <word'family name'>", (: family_info($4[0], this_player()->query_name()) :), "reverse relationship <word'player name'> <word'player name'>", (: family_reverse($4[0], $4[1]) :), "remove relationship <word'player name'> <word'player name'>", (: family_remove($4[0], $4[1]) :), "balance <string'family name'>", (: do_balance($4[0]) :), "balance all", (: do_all_balance() :) }); } /* query_patterns() */