예제 #1
0
        public static string ParseCommand(string cmd, TSPlayer plr)
        {
            var replacements = new Dictionary <string, object>()
            {
                { "NAME", plr.Name },
                { "INDEX", plr.Index },
                { "IP", plr.IP },
                { "GROUP", plr.Group.Name },
                { "RANK", plr.GetRank() == null ? "None" : plr.GetRank().name }
            };

            string parsed = cmd;

            foreach (var word in replacements)
            {
                parsed = parsed.Replace(String.Format("%PLAYER_{0}%", word.Key), word.Value.ToString());
            }
            return(parsed);
        }
예제 #2
0
        async void BankTransferCompleted(object sender, BankTransferEventArgs e)
        {
            // Null check the instance - Thanks Wolfje
            if (SEconomyPlugin.Instance == null)
            {
                return;
            }

            // The world account does not have a rank
            if (e.ReceiverAccount == null ||
                !e.ReceiverAccount.IsAccountEnabled ||
                e.ReceiverAccount.IsSystemAccount ||
                SEconomyPlugin.Instance.WorldAccount == null)
            {
                return;
            }

            // Stop chain transfers
            if (e.TransactionMessage.StartsWith("AutoRank"))
            {
                return;
            }

            TSPlayer ply = TShock.Players.FirstOrDefault(p => p != null && p.Active && p.IsLoggedIn &&
                                                         p.User.Name == e.ReceiverAccount.UserAccountName);

            if (ply == null)
            {
                return;
            }

            var rank = ply.GetRank();

            if (rank != null)
            {
                var ranks = rank.FindNextRanks(e.ReceiverAccount.Balance);
                if (ranks != null && ranks.Count > 0)
                {
                    //Money cost = 0L;
                    //foreach (Rank rk in ranks)
                    //{
                    //	cost += rk.Cost();
                    //}

                    //Money balance = e.ReceiverAccount.Balance;
                    //var task = await e.ReceiverAccount.TransferToAsync(SEconomyPlugin.Instance.WorldAccount, cost,
                    //	BankAccountTransferOptions.SuppressDefaultAnnounceMessages, "",
                    //	String.Format("{0} paid {1} to rank up with AutoRank.", ply.Name, cost.ToString()));
                    //if (!task.TransferSucceeded)
                    //{
                    //	if (task.Exception != null)
                    //	{
                    //		Log.ConsoleError("SEconomy Exception: {0}\nCheck logs for details.", task.Exception.Message);
                    //		Log.Error(task.Exception.ToString());
                    //	}

                    //	// Returning the money; This transaction may fail, but I see no other way.
                    //	await SEconomyPlugin.Instance.WorldAccount.TransferToAsync(e.ReceiverAccount,
                    //		balance - e.ReceiverAccount.Balance, BankAccountTransferOptions.SuppressDefaultAnnounceMessages,
                    //		"", "");
                    //	ply.SendErrorMessage(
                    //		"Your transaction could not be completed. Start a new transaction to retry.");
                    //}
                    //else

                    await ply.RankUpAsync(ranks);

                    //Task.Factory.StartNew(await args.ReceiverAccount.TransferToAsync(SEconomyPlugin.Instance.WorldAccount, cost,
                    //	BankAccountTransferOptions.None, String.Empty,
                    //	String.Format("{0} paid {1} to rank up with AutoRank.", ply.Name,
                    //	cost.ToString())) }); .ContinueWith((task) =>
                    //		{
                    //			if (!task.Result.TransferSucceeded)
                    //			{
                    //				ply.SendErrorMessage(
                    //					"Your transaction could not be completed. Start a new transaction to retry.");
                    //				return;
                    //			}
                    //			ply.RankUpAsync(ranks);
                    //		});
                }
            }
        }