/*************************************************************************** * Port of ROM 2.4b6 to Windows by TAKA * * * * I call this "NEW ROM" Ghost since it has changed extensively. * * This version runs as a native console application * * windows NT 4 service patch 3, Windows 95 software version release 2 * * and windows 98. * * * * Ghost to my knowledge is the first ROM port to windows to be 100% * * stable. * * * * I compiled it using MS Vissual C++ 5.0 * * THE FOLLOWING MODULES WERE MODIFIED TO ALLOW STABLE WINDOWS OPERATION * * - merc.h * * - comm.c * * - db.c * * BE SURE TO INCLUDE IN THE LINK LIST * * - wsock32.lib * * * * Other source files are straight from the ROM24b6 distribution. * * * * ALL I ASK FOR MY WORK: * * 1) Is that you do not remove or modify this comment block. * * 2) You must state on the entry screen that this is GHOST a ROM code * * base designed and ported to windows by TAKA . * * 3) The latest version number from you source listing must be must be * * in the help file as well as my name TAKA * * and my email a_ghost_dancer@excite.com * * < < Simplist way is to leave my help entry supplied > > * * 4) You must abid by all other ROM and MERC licences * * 5) Finally any improvements or snippets you make please forward them * * to me so we can imcorperate them into the latest version. I will * * post all snippets with the authors named and credited. * * * * Last thank you to all the ROM amd MERC folks for this wounderful code * * base know as ROM. * * * * TAKA * * a_ghost_dancer@excite.com * * * *************************************************************************** * * TAKA banking/investment system. * modled in part after maniacs code. * */ #if defined(macintosh) #include <types.h> #include <time.h> #else #include <sys/types.h> #include <sys/time.h> #endif #include <stdio.h> #include <string.h> #include <stdlib.h> #include "merc.h" DECLARE_DO_FUN (do_say); DECLARE_DO_FUN (do_save); void do_bank (CHAR_DATA * ch, char *argument) { /* * based on: * Simple banking system. by -- Stephen -- * */ CHAR_DATA *mob; char buf[MAX_STRING_LENGTH]; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; if (IS_NPC (ch)) { send_to_char ("{RBanking Services are only available to players!{x\n\r", ch); return; } /* Check for mob with act->banker */ for (mob = ch->in_room->people; mob; mob = mob->next_in_room) { if ((IS_NPC (mob) && IS_SET (mob->act, ACT_BANKER)) || (IS_NPC (mob) && IS_SET (mob->act, ACT_ATM))) break; } if (mob == NULL) { send_to_char ("{RYou can't do that here.{x\n\r", ch); return; } if ((!IS_SET (mob->act, ACT_ATM)) || (BANK_ALLOW_ATM != 1)) { if ((time_info.hour < 9) || (time_info.hour > 17)) { send_to_char ("{RThe bank is closed, it is open from {W9am {Rto {W5pm{R.{x\n\r", ch); return; } } if (argument[0] == '\0') { send_to_char ("{GBanking system by {WTAKA {Goptions:{x\n\r\n\r", ch); send_to_char ("{GBank balance {M: {WDisplays your balance.{x\n\r", ch); send_to_char ("{GBank deposit {M: {WDeposit gold into your account.{x\n\r", ch); send_to_char ("{GBank withdraw {M: {WWithdraw gold from your account.{x\n\r", ch); if (BANK_DEPOSIT_SILVER == 1) { send_to_char ("{GBank swithdraw {M: {WWithdraw silver from your account.{x\n\r", ch); send_to_char ("{GBank sdeposit {M: {WDeposit silver into your account.{x\n\r", ch); } if (BANK_CONVERT_SILVER == 1) send_to_char ("{GBank convert {M: {WConverts {D100 silver {Wto {y1 gold{W.{x\n\r", ch); #if defined BANK_TRANSFER if (IS_SET (mob->act, ACT_BANKER)) { send_to_char ("{GBank transfer : {M: {WTransfer gold to account.{x\n\r", ch); send_to_char ("{GBank buy1 # {M: {WBuy # shares in type I stocks.{x\n\r", ch); send_to_char ("{GBank buy2 # {M: {WBuy # shares in type II stocks.{x\n\r", ch); send_to_char ("{GBank buy3 # {M: {WBuy # shares in type III stocks.{x\n\r", ch); send_to_char ("{GBank buy4 # {M: {WBuy # shares in type IV stocks.{x\n\r", ch); send_to_char ("{GBank sell1 # {M: {WSell # shares of type I stocks.{x\n\r", ch); send_to_char ("{GBank sell2 # {M: {WSell # shares of type II stocks.{x\n\r", ch); send_to_char ("{GBank sell3 # {M: {WSell # shares of type III stocks.{x\n\r", ch); send_to_char ("{GBank sell4 # {M: {WSell # shares of type IV stocks.{x\n\r", ch); send_to_char ("{GBank check {M: {WCheck the current rates of the shares.{x \n\r", ch); } #endif return; } argument = one_argument (argument, arg1); argument = one_argument (argument, arg2); /* Now work out what to do... */ if (!str_prefix (arg1, "balance")) { if (BANK_DEPOSIT_SILVER != 1) sprintf (buf, "{GYour current balance is: {y%ld GP{G.{x\n\r", ch->pcdata->balance); else sprintf (buf, "{GYour current balance is: {y%ld GP {Gand {D%ld SP{G.{x\n\r", ch->pcdata->balance, ch->pcdata->sbalance); do_say (mob, buf); return; } if (!str_prefix (arg1, "deposit")) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if (amount > ch->gold) { sprintf (buf, "{RHow can you deposit {y%d GP {Rwhen you only have {y%ld{R?{x\n\r", amount, ch->gold); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{ROnly positive amounts allowed...{x"); return; } ch->gold -= amount; ch->pcdata->balance += amount; sprintf (buf, "{GYou deposit {y%d GP{G. Your new balance is {y%ld GP{G.{x\n\r", amount, ch->pcdata->balance); send_to_char (buf, ch); do_save (ch, ""); return; } } if ((!str_prefix (arg1, "sdeposit")) && (BANK_DEPOSIT_SILVER == 1)) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if (amount > ch->silver) { sprintf (buf, "{RHow can you deposit {D%d SP {Rwhen you only have {D%ld{R?{x\n\r", amount, ch->silver); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{ROnly positive amounts allowed...{x"); return; } ch->silver -= amount; ch->pcdata->sbalance += amount; sprintf (buf, "{GYou deposit {D%d SP{G. Your new balance is {D%ld SP{G.{x\n\r", amount, ch->pcdata->sbalance); send_to_char (buf, ch); do_save (ch, ""); return; } } /* We only allow transfers if this is true... so define it... */ #if defined BANK_TRANSFER if (!str_prefix (arg1, "transfer")) { int amount; CHAR_DATA *victim; if (is_number (arg2)) { amount = atoi (arg2); if (amount > ch->pcdata->balance) { sprintf (buf, "{RHow can you transfer {y%d GP {Gwhen your balance is {y%ld{R?{x\n\r", amount, ch->pcdata->balance); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{ROnly positive amounts allowed...{x"); return; } if (!(victim = get_char_world (ch, argument))) { sprintf (buf, "{W%s {Rdoesn't have a bank account.{x\n\r", argument); do_say (mob, buf); return; } if (IS_NPC (victim)) { do_say (mob, "{RYou can only transfer money to players.{x"); return; } ch->pcdata->balance -= amount; victim->pcdata->balance += amount; sprintf (buf, "{GYou transfer {y%d GP{G. Your new balance is {y%ld GP{G.{x\n\r", amount, ch->pcdata->balance); send_to_char (buf, ch); sprintf (buf, "{C[{WBANK{C] {W%s {Ghas transferred {y%d gold pieces {Gto your account.{x\n\r", ch->name, amount); send_to_char (buf, victim); do_save (ch, ""); do_save (victim, ""); return; } } #endif if (!str_prefix (arg1, "withdraw")) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if (amount > ch->pcdata->balance) { sprintf (buf, "{RHow can you withdraw {y%d GP {Rwhen your balance is {y%ld{R?{x\n\r", amount, ch->pcdata->balance); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{ROnly positive amounts allowed...{x"); return; } if (IS_SET (mob->act, ACT_ATM)) { if ((amount >= (BANK_ALLOW_ATM_MAX + 1)) || ((ch->pcdata->dailylimit + amount) >= (BANK_ALLOW_ATM_MAX + 1))) { sprintf (buf, "{RYou can only withdraw {y%d GP {Rfrom an ATM daily.{x\n\r", BANK_ALLOW_ATM_MAX); do_say (mob, buf); return; } else ch->pcdata->dailylimit += amount; } ch->pcdata->balance -= amount; ch->gold += amount; sprintf (buf, "{GYou withdraw {y%d GP{G. Your new balance is {y%ld GP{G.{x\n\r", amount, ch->pcdata->balance); send_to_char (buf, ch); do_save (ch, ""); return; } } if ((!str_prefix (arg1, "swithdraw")) && (BANK_DEPOSIT_SILVER == 1)) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if (amount > ch->pcdata->sbalance) { sprintf (buf, "{RHow can you withdraw {D%d SP {Rwhen your balance is {D%ld{R?{x\n\r", amount, ch->pcdata->sbalance); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{ROnly positive amounts allowed...{x"); return; } if (IS_SET (mob->act, ACT_ATM)) { if ((amount >= ((BANK_ALLOW_ATM_MAX * 100) + 1)) || (((ch->pcdata->dailylimit * 100) + amount) >= ((BANK_ALLOW_ATM_MAX * 100) + 1))) { sprintf (buf, "{RYou can only withdraw {D%d SP{R from an ATM daily.{x\n\r", (BANK_ALLOW_ATM_MAX * 100)); do_say (mob, buf); return; } else ch->pcdata->dailylimit += (amount / 100); } ch->pcdata->sbalance -= amount; ch->silver += amount; sprintf (buf, "{GYou withdraw {D%d SP{G. Your new balance is {D%ld SP{G.{x\n\r", amount, ch->pcdata->sbalance); send_to_char (buf, ch); do_save (ch, ""); return; } } if ((!str_prefix (arg1, "convert")) && (BANK_CONVERT_SILVER == 1)) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if (amount > ch->pcdata->sbalance) { sprintf (buf, "{RHow can you convert {D%d SP {Rwhen your balance is {D%ld{R?{x\n\r", amount, ch->pcdata->sbalance); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{ROnly positive amounts allowed...{x"); return; } if ((amount % 100) != 0) { do_say (mob, "{RYou can only convert silver in increaments of {D100{R....{x"); return; } ch->pcdata->sbalance -= amount; ch->pcdata->balance += (amount / 100); sprintf (buf, "{GYou convert {D%d SP {Gto {y%d GP{G. Your new balance is {y%ld GP{G.{x\n\r", amount, (amount / 100), ch->pcdata->balance); send_to_char (buf, ch); do_save (ch, ""); return; } } /* If you want to have an invest option... define BANK_INVEST */ #if defined BANK_INVEST if ((time_info.hour < 9) || (time_info.hour > 17)) { send_to_char ("{RThe stock market is closed, it is open from {W9am {Rto {W5pm{R.{x\n\r", ch); return; } if (!str_prefix (arg1, "buy1")) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if ((amount * share_value1) > ch->pcdata->balance) { sprintf (buf, "{W%d {Rtype I shares will cost you {y%d{R, get more money.{x\n\r", amount, (amount * share_value1)); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{RIf you want to sell shares you have to say so...{x"); return; } ch->pcdata->balance -= (amount * share_value1); ch->pcdata->shares1 += amount; sprintf (buf, "{GYou buy {W%d {Gtype I shares for {y%d GP{G, you now have {W%d {Gtype I shares.{x\n\r", amount, (amount * share_value1), ch->pcdata->shares1); do_say (mob, buf); do_save (ch, ""); return; } } if (!str_prefix (arg1, "buy2")) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if ((amount * share_value2) > ch->pcdata->balance) { sprintf (buf, "{W%d {Rtype II shares will cost you {y%d{R, get more money.{x\n\r", amount, (amount * share_value2)); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{RIf you want to sell shares you have to say so...{x"); return; } ch->pcdata->balance -= (amount * share_value2); ch->pcdata->shares2 += amount; sprintf (buf, "{GYou buy {W%d {Gtype II shares for {y%d GP{G, you now have {W%d {Gtype II shares.{x\n\r", amount, (amount * share_value2), ch->pcdata->shares2); do_say (mob, buf); do_save (ch, ""); return; } } if (!str_prefix (arg1, "buy3")) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if ((amount * share_value3) > ch->pcdata->balance) { sprintf (buf, "{W%d {Rtype III shares will cost you {y%d{R, get more money.{x\n\r", amount, (amount * share_value3)); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{RIf you want to sell shares you have to say so...{x"); return; } ch->pcdata->balance -= (amount * share_value3); ch->pcdata->shares3 += amount; sprintf (buf, "{GYou buy {W%d {Gtype III shares for {y%d GP{G, you now have {W%d {Gtype III shares.{x\n\r", amount, (amount * share_value3), ch->pcdata->shares3); do_say (mob, buf); do_save (ch, ""); return; } } if (!str_prefix (arg1, "buy4")) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if ((amount * share_value4) > ch->pcdata->balance) { sprintf (buf, "{W%d {Rtype IV shares will cost you {y%d{R, get more money.{x\n\r", amount, (amount * share_value4)); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{RIf you want to sell shares you have to say so...{x"); return; } ch->pcdata->balance -= (amount * share_value4); ch->pcdata->shares4 += amount; sprintf (buf, "{GYou buy {W%d {Gtype IV shares for {y%d GP{G, you now have {W%d {Gtype IV shares.{x\n\r", amount, (amount * share_value4), ch->pcdata->shares4); do_say (mob, buf); do_save (ch, ""); return; } } if (!str_prefix (arg1, "sell1")) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if (amount > ch->pcdata->shares1) { sprintf (buf, "{RYou only have {W%d {Rtype I shares.{x\n\r", ch->pcdata->shares1); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{RIf you want to buy shares you have to say so...{x"); return; } ch->pcdata->balance += (amount * share_value1); ch->pcdata->shares1 -= amount; sprintf (buf, "{GYou sell {W%d {Gtype I shares for {y%d GP{G, you now have {W%d {Gtype I shares.{x\n\r", amount, (amount * share_value1), ch->pcdata->shares1); do_say (mob, buf); do_save (ch, ""); return; } } if (!str_prefix (arg1, "sell2")) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if (amount > ch->pcdata->shares2) { sprintf (buf, "{RYou only have {W%d {Rtype II shares.{x\n\r", ch->pcdata->shares2); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{RIf you want to buy shares you have to say so...{x"); return; } ch->pcdata->balance += (amount * share_value2); ch->pcdata->shares2 -= amount; sprintf (buf, "{GYou sell {W%d {Gtype II shares for {y%d GP{G, you now have {W%d {Gtype II shares.{x\n\r", amount, (amount * share_value2), ch->pcdata->shares2); do_say (mob, buf); do_save (ch, ""); return; } } if (!str_prefix (arg1, "sell3")) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if (amount > ch->pcdata->shares3) { sprintf (buf, "{RYou only have {W%d {Rtype III shares.{x\n\r", ch->pcdata->shares3); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{RIf you want to buy shares you have to say so...{x"); return; } ch->pcdata->balance += (amount * share_value3); ch->pcdata->shares3 -= amount; sprintf (buf, "{GYou sell {W%d {Gtype III shares for {y%d GP{G, you now have {W%d {Gtype III shares.{x\n\r", amount, (amount * share_value3), ch->pcdata->shares3); do_say (mob, buf); do_save (ch, ""); return; } } if (!str_prefix (arg1, "sell4")) { int amount; if (is_number (arg2)) { amount = atoi (arg2); if (amount > ch->pcdata->shares4) { sprintf (buf, "{RYou only have {W%d {Rtype IV shares.{x\n\r", ch->pcdata->shares4); do_say (mob, buf); return; } if (amount < 0) { do_say (mob, "{RIf you want to buy shares you have to say so...{x"); return; } ch->pcdata->balance += (amount * share_value4); ch->pcdata->shares4 -= amount; sprintf (buf, "{GYou sell {W%d {Gtype IV shares for {y%d GP{G, you now have {W%d {Gtype IV shares.{x\n\r", amount, (amount * share_value4), ch->pcdata->shares4); do_say (mob, buf); do_save (ch, ""); return; } } if (!str_prefix (arg1, "check")) { sprintf (buf, "{GThe current shareprice for type {WI {Gshares is {y%d GP{G.{x\n\r", share_value1); do_say (mob, buf); sprintf (buf, "{GThe current shareprice for type {WII {Gshares is {y%d GP{G.{x\n\r", share_value2); do_say (mob, buf); sprintf (buf, "{GThe current shareprice for type {WIII {Gshares is {y%d GP{G.{x\n\r", share_value3); do_say (mob, buf); sprintf (buf, "{GThe current shareprice for type {WIV {Gshares is {y%d GP{G.{x\n\r", share_value4); do_say (mob, buf); if ((ch->pcdata->shares1) || (ch->pcdata->shares2) || (ch->pcdata->shares3) || (ch->pcdata->shares4)) { sprintf (buf, "{GYou currently have {W%d {Gtype I shares, {C({W%d {Ga share{C) {Gworth a total of {y%d gold{G.{x\n\r", ch->pcdata->shares1, share_value1, (ch->pcdata->shares1 * share_value1)); do_say (mob, buf); sprintf (buf, "{GYou currently have {W%d {Gtype II shares, {C({W%d {Ga share{C) {Gworth a total of {y%d gold{G.{x\n\r", ch->pcdata->shares2, share_value2, (ch->pcdata->shares2 * share_value2)); do_say (mob, buf); sprintf (buf, "{GYou currently have {W%d {Gtype III shares, {C({W%d {Ga share{C) {Gworth a total of {y%d gold{G.{x\n\r", ch->pcdata->shares3, share_value4, (ch->pcdata->shares3 * share_value3)); do_say (mob, buf); sprintf (buf, "{GYou currently have {W%d {Gtype IV shares, {C({W%d {Ga share{C) {Gworth a total of {y%d gold{G.{x\n\r", ch->pcdata->shares4, share_value4, (ch->pcdata->shares4 * share_value4)); do_say (mob, buf); } return; } #endif do_say (mob, "{RI don't know what you mean{x"); do_bank (ch, ""); /* Generate Instructions */ return; }