public static void GuildDonate(CharData ch, string[] str) { if( ch == null ) return; Coins coin = new Coins(); int coinage; bool success = false; if (ch.IsNPC()) { return; } Guild guild = ((PC)ch).GuildMembership; if (guild == null) { ch.SendText("You're not in a guild!\r\n"); return; } if (str.Length == 0) { ch.SendText("Deposit what?\r\n"); return; } if (!coin.FillFromString(str, ch)) { ch.SendText("&+LSyntax: &+RSoc deposit &n&+r<&+L# of coins&n&+r> <&+Lcoin type&n&+r>&n\r\n"); return; } if (coin.Copper == 0 && coin.Silver == 0 && coin.Gold == 0 && coin.Platinum == 0) { ch.SendText("You have none of that type of &+Lcoin&n yet.\r\n"); return; } for (coinage = 0; coinage < 4; coinage++) { switch (coinage) { case 0: //copper if (coin.Copper < 0) { ch.SendText("You can't deposit a debt!\r\n"); continue; } if (coin.Copper > ch.GetCopper()) { ch.SendText("You don't have that much &+ycopper&n coin!\r\n"); continue; } if (coin.Copper == 0) continue; ch.SpendCopper(coin.Copper); success = true; break; case 1: //silver if (coin.Silver < 0) { ch.SendText("You can't deposit a debt!\r\n"); continue; } if (coin.Silver > ch.GetSilver()) { ch.SendText("You don't have that much &+wsilver&n coin!\r\n"); continue; } if (coin.Silver == 0) continue; ch.SpendSilver(coin.Silver); success = true; break; case 2: //gold if (coin.Gold < 0) { ch.SendText("You can't deposit a debt!\r\n"); continue; } if (coin.Gold > ch.GetGold()) { ch.SendText("You don't have that much &+Ygold&n coin!\r\n"); continue; } if (coin.Gold == 0) continue; ch.SpendGold(coin.Gold); success = true; break; case 3: //platinum if (coin.Platinum < 0) { ch.SendText("You can't deposit a debt!\r\n"); continue; } if (coin.Platinum > ch.GetPlatinum()) { ch.SendText("You don't have that much &+Wplatinum&n coin!\r\n"); continue; } if (coin.Platinum == 0) continue; ch.SpendPlatinum(coin.Platinum); success = true; break; } //end switch } //end for if (success) { int value = coin.Copper + 10 * coin.Silver + 100 * coin.Gold + 1000 * coin.Platinum; int count; for (count = 0; count < Limits.MAX_GUILD_MEMBERS; ++count) { if (!MUDString.StringsNotEqual(guild.Members[count].Name, ch.Name)) { guild.Members[count].Fine -= value; if (guild.Members[count].Fine < 0) { guild.Members[count].Fine = 0; ch.SendText("&+WThank you for the donation!&n\r\n"); } else { ch.SendText("You reduce your fine.\r\n"); } } } guild.GuildBankAccount.Copper += coin.Copper; guild.GuildBankAccount.Silver += coin.Silver; guild.GuildBankAccount.Gold += coin.Gold; guild.GuildBankAccount.Platinum += coin.Platinum; guild.Save(); CharData.SavePlayer(ch); } else { ch.SendText("&+LSyntax: &+RSoc deposit &n&+r<&+L# of coins&n&+r> <&+Lcoin type&n&+r>&n\r\n"); } return; }
/// <summary> /// Take money out of your bank account. /// </summary> /// <param name="ch"></param> /// <param name="str"></param> public static void Withdraw(CharData ch, string[] str) { if( ch == null ) return; int coinage; bool success = false; Coins coin = new Coins(); if (ch.IsNPC()) { return; } if (!ch.InRoom || !ch.InRoom.HasFlag(RoomTemplate.ROOM_BANK)) { ch.SendText("You're not in a bank!\r\n"); return; } if (str.Length == 0) { ch.SendText("Withdraw what?\r\n"); return; } if (!coin.FillFromString(str, ch)) { ch.SendText("&+LSyntax: &+RWithdraw &n&+r<&+L# of coins&n&+r> <&+Lcoin type&n&+r>&n\r\n"); return; } if (coin.Copper == 0 && coin.Silver == 0 && coin.Gold == 0 && coin.Platinum == 0) { ch.SendText("The bank has none of that type of &+Lcoin&n yet.\r\n"); return; } for (coinage = 0; coinage < 4; coinage++) { switch (coinage) { case 0: //copper if (coin.Copper < 0) { ch.SendText("You can't liquidate a debt!\r\n"); continue; } if (coin.Copper > ((PC)ch).Bank.Copper) { ch.SendText("You haven't saved that much &+ycopper&n coin!\r\n"); continue; } if (coin.Copper == 0) continue; ch.ReceiveCopper(coin.Copper); ((PC)ch).Bank.Copper -= coin.Copper; success = true; break; case 1: //silver if (coin.Silver < 0) { ch.SendText("You can't liquidate a debt!\r\n"); continue; } if (coin.Silver > ((PC)ch).Bank.Silver) { ch.SendText("You haven't saved that much &+wsilver&n coin!\r\n"); continue; } if (coin.Silver == 0) continue; ch.ReceiveSilver(coin.Silver); ((PC)ch).Bank.Silver -= coin.Silver; success = true; break; case 2: //gold if (coin.Gold < 0) { ch.SendText("You can't liquidate a debt!\r\n"); continue; } if (coin.Gold > ((PC)ch).Bank.Gold) { ch.SendText("You haven't saved that much &+Ygold&n coin!\r\n"); continue; } if (coin.Gold == 0) continue; ch.ReceiveGold(coin.Gold); ((PC)ch).Bank.Gold -= coin.Gold; success = true; break; case 3: //platinum if (coin.Platinum < 0) { ch.SendText("You can't liquidate a debt!\r\n"); continue; } if (coin.Platinum > ((PC)ch).Bank.Platinum) { ch.SendText("You haven't saved that much &+Wplatinum&n coin!\r\n"); continue; } if (coin.Platinum == 0) continue; ch.ReceivePlatinum(coin.Platinum); ((PC)ch).Bank.Platinum -= coin.Platinum; success = true; break; } //end switch } //end for if (success) { ch.SendText("You make a withdrawal.\r\n"); SocketConnection.Act("$n&n makes a transaction.", ch, null, null, SocketConnection.MessageTarget.room); } else { ch.SendText("&+LSyntax: &+RDeposit &n&+r<&+L# of coins&n&+r> <&+Lcoin type&n&+r>&n\r\n"); } return; }
/// <summary> /// Put coins into a bank account. /// </summary> /// <param name="ch"></param> /// <param name="str"></param> public static void Deposit(CharData ch, string[] str) { if( ch == null ) return; int coinage; bool success = false; Coins coin = new Coins(); if (ch.IsNPC()) { ch.SendText("NPCs do not have bank accounts!\r\n"); return; } if (!ch.InRoom || !ch.InRoom.HasFlag(RoomTemplate.ROOM_BANK)) { ch.SendText("You're not in a bank!\r\n"); return; } if (str.Length == 0) { ch.SendText("Deposit what?\r\n"); return; } if (!coin.FillFromString(str, ch)) { ch.SendText("&+LSyntax: &+RDeposit &n&+r<&+L# of coins&n&+r> <&+Lcoin type&n&+r>&n\r\n"); return; } if (coin.Copper == 0 && coin.Silver == 0 && coin.Gold == 0 && coin.Platinum == 0) { ch.SendText("You have none of that type of &+Lcoin&n yet.\r\n"); return; } for (coinage = 0; coinage < 4; coinage++) { switch (coinage) { case 0: //copper if (coin.Copper < 0) { ch.SendText("You can't deposit a debt!\r\n"); continue; } if (coin.Copper > ch.GetCopper()) { ch.SendText("You don't have that much &+ycopper&n coin!\r\n"); continue; } if (coin.Copper == 0) continue; ch.SpendCopper(coin.Copper); ((PC)ch).Bank.Copper += coin.Copper; success = true; break; case 1: //silver if (coin.Silver < 0) { ch.SendText("You can't deposit a debt!\r\n"); continue; } if (coin.Silver > ch.GetSilver()) { ch.SendText("You don't have that much &+wsilver&n coin!\r\n"); continue; } if (coin.Silver == 0) continue; ch.SpendSilver(coin.Silver); ((PC)ch).Bank.Silver += coin.Silver; success = true; break; case 2: //gold if (coin.Gold < 0) { ch.SendText("You can't deposit a debt!\r\n"); continue; } if (coin.Gold > ch.GetGold()) { ch.SendText("You don't have that much &+Ygold&n coin!\r\n"); continue; } if (coin.Gold == 0) continue; ch.SpendGold(coin.Gold); ((PC)ch).Bank.Gold += coin.Gold; success = true; break; case 3: //platinum if (coin.Platinum < 0) { ch.SendText("You can't deposit a debt!\r\n"); continue; } if (coin.Platinum > ch.GetPlatinum()) { ch.SendText("You don't have that much &+Wplatinum&n coin!\r\n"); continue; } if (coin.Platinum == 0) continue; ch.SpendPlatinum(coin.Platinum); ((PC)ch).Bank.Platinum += coin.Platinum; success = true; break; } //end switch } //end for if (success) { ch.SendText("You make your deposit.\r\n"); SocketConnection.Act("$n&n makes a transaction.", ch, null, null, SocketConnection.MessageTarget.room); } else { ch.SendText("&+LSyntax: &+RDeposit &n&+r<&+L# of coins&n&+r> <&+Lcoin type&n&+r>&n\r\n"); } return; }
/// <summary> /// This modified version for the 4-type coin system by Xangis /// </summary> /// <param name="ch"></param> /// <param name="str"></param> public static void Split(CharData ch, string[] str) { if( ch == null ) return; int members = 0; int coinage; bool success = false; Coins coin = new Coins(); if (!ch.GroupLeader) { ch.SendText("Split with yourself? How generous!\r\n"); return; } if (str.Length == 0) { ch.SendText("Split how much?\r\n"); return; } if (!coin.FillFromString(str, ch)) { ch.SendText("Try 'split <number/all> <coin type>' or 'split all.coins' \r\n"); return; } if (coin.Copper == 0 && coin.Silver == 0 && coin.Gold == 0 && coin.Platinum == 0) { ch.SendText("Try sharing some actual coins!\r\n"); return; } foreach (CharData groupChar in ch.InRoom.People) { if (groupChar.IsSameGroup(ch)) { members++; } } if (members < 2) { ch.SendText("Just keep it all.\r\n"); Log.Error("Commandsplit: managed to find a group of 1 person\r\n", 0); return; } for (coinage = 0; coinage < 4; coinage++) { switch (coinage) { case 0: //copper if (coin.Copper <= 0) continue; //quietly ignore errors int share; int extra; string buf; if (coin.Copper <= ch.GetCopper()) { share = coin.Copper / members; extra = coin.Copper % members; if (share == 0) continue; ch.SpendCopper(coin.Copper); buf = String.Format( "You split {0} &+ycopper&n. Your share is {1} coins.\r\n", coin.Copper, share + extra); ch.SendText(buf); buf = String.Format("$n splits some &+ycopper&n. Your share is {0} coins.", share); foreach (CharData groupChar in ch.InRoom.People) { if (groupChar != ch && groupChar.IsSameGroup(ch)) { SocketConnection.Act(buf, ch, null, groupChar, SocketConnection.MessageTarget.victim); groupChar.ReceiveCopper(share); } else if (groupChar == ch) groupChar.ReceiveCopper(share + extra); } success = true; continue; } ch.SendText("You don't have that much &+ycopper&n coin!\r\n"); break; case 1: //silver if (coin.Silver <= 0) continue; //quietly ignore errors if (coin.Silver <= ch.GetSilver()) { share = coin.Silver / members; extra = coin.Silver % members; if (share == 0) continue; ch.SpendSilver(coin.Silver); buf = String.Format( "You split {0} &+wsilver&n. Your share is {1} coins.\r\n", coin.Silver, share + extra); ch.SendText(buf); buf = String.Format("$n splits some &+wsilver&n. Your share is {0} coins.", share); foreach (CharData groupChar in ch.InRoom.People) { if (groupChar != ch && groupChar.IsSameGroup(ch)) { SocketConnection.Act(buf, ch, null, groupChar, SocketConnection.MessageTarget.victim); groupChar.ReceiveSilver(share); } else if (groupChar == ch) { groupChar.ReceiveSilver(share + extra); } } success = true; continue; } else ch.SendText("You don't have that much &+wsilver&n coin!\r\n"); break; case 2: //gold if (coin.Gold <= 0) continue; //quietly ignore errors if (coin.Gold <= ch.GetGold()) { share = coin.Gold / members; extra = coin.Gold % members; if (share == 0) continue; ch.SpendGold(coin.Gold); buf = String.Format("You split {0} &+Ygold&n. Your share is {1} coins.\r\n", coin.Gold, share + extra); ch.SendText(buf); buf = String.Format("$n splits some &+Ygold&n. Your share is {0} coins.", share); foreach (CharData groupChar in ch.InRoom.People) { if (groupChar != ch && groupChar.IsSameGroup(ch)) { SocketConnection.Act(buf, ch, null, groupChar, SocketConnection.MessageTarget.victim); groupChar.ReceiveGold(share); } else if (groupChar == ch) { groupChar.ReceiveGold(share + extra); } } success = true; continue; } else { ch.SendText("You don't have that much &+Ygold&n coin!\r\n"); } break; case 3: //platinum if (coin.Platinum <= 0) continue; //quietly ignore errors if (coin.Platinum <= ch.GetPlatinum()) { share = coin.Platinum / members; extra = coin.Platinum % members; if (share == 0) continue; ch.SpendPlatinum(coin.Platinum); buf = String.Format("You split {0} &+Wplatinum&n. Your share is {1} coins.\r\n", coin.Platinum, share + extra); ch.SendText(buf); buf = String.Format("$n splits some &+Wplatinum&n. Your share is {0} coins.", share); foreach (CharData groupChar in ch.InRoom.People) { if (groupChar != ch && groupChar.IsSameGroup(ch)) { SocketConnection.Act(buf, ch, null, groupChar, SocketConnection.MessageTarget.victim); groupChar.ReceivePlatinum(share); } else if (groupChar == ch) { groupChar.ReceivePlatinum(share + extra); } } success = true; continue; } ch.SendText("You don't have that much &+Wplatinum&n coin!\r\n"); break; } //end switch } //end for if (!success) { ch.SendText("You didn't seem to split anything.\r\n"); } return; }