Merge pull request #201 from jastice/econfix

Handle EconomyResponse objects from Vault on all transactions.
This commit is contained in:
Brett Flannigan 2013-01-04 07:48:10 -08:00
commit 04d808e54d

View File

@ -17,6 +17,7 @@ import com.massivecraft.factions.struct.FPerm;
import com.massivecraft.factions.util.RelationUtil; import com.massivecraft.factions.util.RelationUtil;
import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.economy.EconomyResponse;
public class Econ public class Econ
@ -142,14 +143,25 @@ public class Econ
} }
// Transfer money // Transfer money
econ.withdrawPlayer(from.getAccountId(), amount); EconomyResponse erw = econ.withdrawPlayer(from.getAccountId(), amount);
econ.depositPlayer(to.getAccountId(), amount);
// Inform if (erw.transactionSuccess()) {
EconomyResponse erd = econ.depositPlayer(to.getAccountId(), amount);
if (erd.transactionSuccess()) {
if (notify) sendTransferInfo(invoker, from, to, amount);
return true;
} else {
// transaction failed, refund account
econ.depositPlayer(from.getAccountId(), amount);
}
}
// if we get here something with the transaction failed
if (notify) if (notify)
sendTransferInfo(invoker, from, to, amount); invoker.msg("Unable to transfer %s<b> to <h>%s<b> from <h>%s<b>.", moneyString(amount), to.describeTo(invoker), from.describeTo(invoker, true));
return true; return false;
} }
public static Set<FPlayer> getFplayers(EconomyParticipator ep) public static Set<FPlayer> getFplayers(EconomyParticipator ep)
@ -239,22 +251,29 @@ public class Econ
if (delta > 0) if (delta > 0)
{ {
// The player should gain money // The player should gain money
// There is no risk of failure // The account might not have enough space
econ.depositPlayer(acc, delta); EconomyResponse er = econ.depositPlayer(acc, delta);
modifyUniverseMoney(-delta); if (er.transactionSuccess()) {
if (forDoingThis != null && !forDoingThis.isEmpty()) modifyUniverseMoney(-delta);
ep.msg("<h>%s<i> gained <h>%s<i> %s.", You, moneyString(delta), forDoingThis); if (forDoingThis != null && !forDoingThis.isEmpty())
return true; ep.msg("<h>%s<i> gained <h>%s<i> %s.", You, moneyString(delta), forDoingThis);
return true;
} else {
// transfer to account failed
if (forDoingThis != null && !forDoingThis.isEmpty())
ep.msg("<h>%s<i> would have gained <h>%s<i> %s, but the deposit failed.", You, moneyString(delta), forDoingThis);
return false;
}
} }
else else
{ {
// The player should loose money // The player should loose money
// The player might not have enough. // The player might not have enough.
if (econ.has(acc, -delta)) if (econ.has(acc, -delta) && econ.withdrawPlayer(acc, -delta).transactionSuccess())
{ {
// There is enough money to pay // There is enough money to pay
econ.withdrawPlayer(acc, -delta);
modifyUniverseMoney(-delta); modifyUniverseMoney(-delta);
if (forDoingThis != null && !forDoingThis.isEmpty()) if (forDoingThis != null && !forDoingThis.isEmpty())
ep.msg("<h>%s<i> lost <h>%s<i> %s.", You, moneyString(-delta), forDoingThis); ep.msg("<h>%s<i> lost <h>%s<i> %s.", You, moneyString(-delta), forDoingThis);