#include <mudlib.h> #include <ships.h> #include <daemons.h> inherit ROOM; // Variables string local_port; string *asPorts; object moShip; // Predefined Functions int find_in_port(string sShipName); // Code void reset(int arg) { ::reset(arg); if (arg) return; asPorts = ({ }); } void init() { ::init(); add_action("read_func","read"); } void set_local_port(string str) { local_port = str; return; } void add_port(string str) { asPorts += ({ str }); return; } int purchase_func(string sArg) { int iAmount; string sWhat, sShipName; if (!sArg) { write("Purchase what?\n"); write("|YKOThe format for making a purchase is:\n\ Purchase X WHAT for SHIPNAME.\n\ You can purchase " + english_list(m_indices(PROVISIONS)) + " here.\n"); return 1; } if (sscanf(sArg, "%d %s for %s", iAmount, sWhat, sShipName) != 3) { write("|YKOThe format for making a purchase is:\n\ Purchase X WHAT for SHIPNAME.\n\ You can purchase " + english_list(m_indices(PROVISIONS)) + " here.\n"); return 1; } if (sWhat == "crew") { write("|YKOWouldn't it be nicer to recruit crew, instead of purchase them?\n"); return 1; } if (member_array(sWhat, m_indices(PROVISIONS)) == -1) { write("|YKOYou cannot purchase any " + sWhat + " here.\n"); return 1; } if (this_player()->query_money() < (iAmount * PROVISIONS[sWhat, PROV_COST])) { write("|YKOYou don't have enough money to purchase any " + sWhat + " here.\n"); return 1; } // Can this person purchase for this ship? if (find_in_port(lower_case(sShipName)) == 0) { write("|YK0" + sprintf("You are not authorized to purchase supplies for the ship %s.\n", capitalize(sShipName))); return 1; } if ((call_other(moShip, "query_" + sWhat) + iAmount) <= (call_other(moShip, "query_max_" + sWhat))) { call_other(moShip, PROVISIONS[sWhat, PROV_FUNC], iAmount); this_player()->add_money((iAmount * -PROVISIONS[sWhat, PROV_COST])); write("|YKO" + wrap(sprintf("You have purchased %d units of %s for your ship(%s).\n", iAmount, sWhat, capitalize(sShipName)))); } else { write("|YKO" + wrap(sprintf("\ You don't have enough room to purchase %d units of %s for your ship (%s).\n\n", iAmount, sWhat, capitalize(sShipName)))); write("|YKO" + sprintf("%s has room for %d units of %s.\n", capitalize(sShipName), (call_other(moShip, "query_max_" + sWhat) - call_other(moShip, "query_" + sWhat)), sWhat)); } return 1; } int recruit_func(string sArg) { int iAmount, iCrewCost; int iCrewBattle, iCrewSail; string sShipName; if (!sArg) { write("|YKORecruit what?\n"); write("|YKOThe format for recruiting crew is: Recruit X for SHIPNAME.\n"); return 1; } if (sscanf(sArg, "%d for %s", iAmount, sShipName) != 2) { write("|YKOThe format for recruiting crew is: Recruit X for SHIPNAME.\n"); return 1; } // Can this person recruit for this ship? if (find_in_port(lower_case(sShipName)) == 0) { write("|YK0" + sprintf("You are not authorized to purchase supplies for the ship %s.\n", capitalize(sShipName))); return 1; } if (iAmount <= 0) { write("|RKOYou must recruit someone!\n"); return 1; } if ((moShip->query_crew() + iAmount) <= moShip->query_max_crew()) { iCrewBattle = moShip->query_crew_battle(); iCrewSail = moShip->query_crew_sailing(); iCrewCost = 0; if(iCrewBattle == 20) iCrewCost = iAmount * 150; if(iCrewBattle == 40) iCrewCost = iAmount * 450; if(iCrewBattle == 60) iCrewCost = iAmount * 900; if(iCrewBattle == 80) iCrewCost = iAmount * 1500; if(iCrewBattle == 100) iCrewCost = iAmount * 2200; if(iCrewSail == 20) iCrewCost += iAmount * 125; if(iCrewSail == 40) iCrewCost += iAmount * 375; if(iCrewSail == 60) iCrewCost += iAmount * 725; if(iCrewSail == 80) iCrewCost += iAmount * 1200; if(iCrewSail == 100) iCrewCost += iAmount * 1800; iCrewCost += iAmount*1000; if(this_player()->query_money() < iCrewCost) { write("|GKO"+ wrap(sprintf("\ %d sailors stand up, they ask for %d gold as pay. Noticing that you are not able to pay, \ they go about their business.\n", iAmount, iCrewCost))); return 1; } moShip->restore_crew(iAmount); this_player()->add_money(-iCrewCost); moShip->set_wc(); moShip->save_ship(); write("|YKO" + wrap(sprintf("You have recruited %d sailors for your ship (%s).\n", iAmount, capitalize(sShipName)))); } else { write("|YKO" + wrap(sprintf("You don't have room to recruit %d sailors for your ship (%s).\n\n", iAmount, capitalize(sShipName)))); write("|YKO" + wrap(sprintf("%s has room for %d additional sailors.\n", capitalize(sShipName), iAmount))); } return 1; } int read_func(string str) { int i, siz; string *stuff; if (!str) return (0); if (str != "list") return (0); stuff = SHIP_D->query_pub_items(); siz = sizeof(stuff); write("|YKOHere in the pub you can <PURCHASE> things for you ships,\n\ provided they are in the port. You can buy:\n"); for (i = 0; i < siz; i++) write("|YKO"+stuff[i]); write("|GKO\n\You may also <RECRUIT> sailors for your ships,\n\ provided they are in the port.\n"); write("|GKOEach sailor will cost between 1,000 and 5,000 to hire\n\ depending on the training of your current crew.\n"); return 1; } int manifest_func(string sShipName) { if (!sShipName) { write("List the manifest of what ship?\n"); return 1; } // Can this person list the manifest of this ship? if (find_in_port(lower_case(sShipName)) == 0) { write("|YK0" + sprintf("You are not authorized to see this ship's (%s) manifest.\n", capitalize(sShipName))); return 1; } write(capitalize(sShipName) + "'s manifest:\n"); printf("Crew: %d/%d\n", moShip->query_crew(), moShip->query_max_crew()); printf("Provisisons: %d/%d\n", moShip->query_provisions(), moShip->query_max_provisions()); printf("Wood: %d/%d\n", moShip->query_wood(), moShip->query_max_wood()); printf("Rope: %d/%d\n", moShip->query_rope(), moShip->query_max_rope()); printf("Rocks: %d/%d\n", moShip->query_rocks(), moShip->query_max_rocks()); printf("Bolts: %d/%d\n", moShip->query_bolts(), moShip->query_max_bolts()); return 1; } // Returns 1 if ship is there, and this player may "modify" it. // Returns 0 if its there, but the player can't modify it. // Returns -1 if its not there at all. int find_in_port(string sShipName) { int iIndex; moShip = 0; iIndex = sizeof(asPorts); while(iIndex--) { if(find_object(asPorts[iIndex])) moShip = present(sShipName, find_object(asPorts[iIndex])); if (moShip) break; } if (!moShip) { write("|YKOThe ship (" + capitalize(sShipName) + ") isn't in the port!\n"); return -1; } else if (!moShip->query_captains(this_player()->query_real_name())) return 0; else return 1; } int stock_func(string sArg) { int iCost, iAmount; string sShipName, sWhat; if (!sArg) { write("|YKOThe format for stocking a ship is:\n\ Stock WHAT for SHIPNAME.\n\ You can stock " + english_list(m_indices(PROVISIONS)) + " here.\n"); return 1; } if (sscanf(sArg, "%s for %s", sWhat, sShipName) != 2) { write("|YKOThe format for stocking a ship is:\n\ Stock WHAT for SHIPNAME.\n\ You can stock " + english_list(m_indices(PROVISIONS)) + " here.\n"); return 1; } if (find_in_port(lower_case(sShipName)) == 0) { write("|YK0" + sprintf("You are not authorized to stock this ship's (%s).\n", capitalize(sShipName))); return 1; } iAmount = call_other(moShip, "query_max_" + sWhat) - call_other(moShip, "query_" + sWhat); if (!iAmount) { write("|YKOYour ship doesn't need any " + sWhat + ".\n"); return 1; } if (this_player()->query_money() < (PROVISIONS[sWhat, PROV_COST] * iAmount)) { write("|YKOYou don't have enough money to purchase any " + sWhat + " here.\n"); return 1; } call_other(moShip, PROVISIONS[sWhat, PROV_FUNC], iAmount); this_player()->add_money(-(PROVISIONS[sWhat, PROV_COST] * iAmount)); write("|YKO" + wrap(sprintf("You have purchased %d units of %s for your ship (%s).\n", iAmount, sWhat, capitalize(sShipName)))); return 1; }