diff --git a/scripts/commands/tip.py b/scripts/commands/tip.py new file mode 100644 index 00000000..b0b4331c --- /dev/null +++ b/scripts/commands/tip.py @@ -0,0 +1,132 @@ +from resources.objects.creature import CreatureObject +from java.util import Date +from engine.resources.objects import SWGObject +from services.chat import ChatService +from services.chat import Mail +from services.sui import SUIWindow +from services.sui import SUIService +from services.sui.SUIWindow import Trigger +from services.sui.SUIService import MessageBoxType +from java.util import Vector +import sys + +# initialize global vars (happens at compile time) +commandArgs = "" +commandLength = 0 +actorID = long(0) +targetID = long(0) +tipAmount = 0 +tipAmountBank = 0 +bankSurcharge = 0 + + +def setup(): + return + +def run(core, actor, target, commandString): + + # set the global variables + global actorID + global targetID + global commandArgs + global commandLength + global tipAmount + global tipAmountBank + global bankSurcharge + + actorID = actor.getObjectID() + targetID = target.getObjectID() + commandArgs = commandString.split(" ") + commandLength = len(commandArgs) + tipAmount = commandArgs[0] + tipAmountBank = commandArgs[0] + bankSurcharge = int(0.05) * int(tipAmountBank) + + + #/tip int || /tip target int + if commandLength == 1: + + tipAmount = commandArgs[0] + actorFunds = actor.getCashCredits() + currentTarget = core.objectService.getObject(target.getObjectId()) + + if (actor.inRange(target.getPosition(), 100)): # 100 = 10m + if int(tipAmount) > 0 and int(tipAmount) <= 1000000: + if actorFunds >= int(tipAmount): + currentTarget.setCashCredits(int(tipAmount)) + actor.setCashCredits(actorFunds - int(tipAmount)) + + currentTarget.sendSystemMessage(actor.getCustomName() + ' tips you ' + tipAmount + ' credits.', 0) + actor.sendSystemMessage('You successfully tip ' + tipAmount + ' credits to ' + currentTarget.getCustomName() + '.', 0) + return + actor.sendSystemMessage('You lack the cash funds to tip ' + tipAmount + ' credits to ' + currentTarget.getCustomName() + '.', 0) + return + actor.sendSystemMessage('Invalid tip amount, set amount between 1 and 1,000,000 credits', 0) + return + actor.sendSystemMessage('Target is too far away. Try a wire bank transfer instead.', 0) + return + + #/tip target 30000000 bank + if commandLength == 2: + suiSvc = core.suiService + suiWindow = suiSvc.createMessageBox(MessageBoxType.MESSAGE_BOX_YES_NO, "@base_player:tip_wire_title", "@base_player:tip_wire_prompt", actor, actor, 10) + + returnParams = Vector() + returnParams.add('btnOk:Text') + returnParams.add('btnCancel:Text') + suiWindow.addHandler(0, '', Trigger.TRIGGER_OK, returnParams, handleBankTip) + suiWindow.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnParams, handleBankTip) + + suiSvc.openSUIWindow(suiWindow) + return + return + +def handleBankTip(core, owner, eventType, returnList): + chatSvc = core.chatService + actorGlobal = core.objectService.getObject(actorID) + targetGlobal = core.objectService.getObject(targetID) + actorFunds = actorGlobal.getBankCredits() + totalLost = int(tipAmountBank) + bankSurcharge + + if eventType == 0: + if int(totalLost) > actorFunds: + actorGlobal.sendSystemMessage('You do not have ' + str(totalLost) + ' credits (surcharge included) to tip the desired amount to ' + targetGlobal.getCustomName() + '.', 0) + return + if int(tipAmount) > 0 and int(actorFunds) >= int(totalLost): + date = Date() + targetName = targetGlobal.getCustomName() + + targetMail = Mail() + targetMail.setMailId(chatSvc.generateMailId()) + targetMail.setTimeStamp((int) (date.getTime() / 1000)) + targetMail.setRecieverId(targetID) + targetMail.setStatus(Mail.NEW) + targetMail.setMessage(tipAmount + ' credits from ' + actorGlobal.getCustomName() + ' have been successfully delivered from escrow to your bank account') + targetMail.setSubject('@base_player:wire_mail_subject') + targetMail.setSenderName('bank') + + actorMail = Mail() + actorMail.setMailId(chatSvc.generateMailId()) + actorMail.setRecieverId(actorID) + actorMail.setStatus(Mail.NEW) + actorMail.setTimeStamp((int) (date.getTime() / 1000)) + actorMail.setMessage('An amount of ' + tipAmount + ' credits have been transfered from your bank to escrow. It will be delivered to ' + + targetGlobal.getCustomName() + ' as soon as possible.') + actorMail.setSubject('@base_player:wire_mail_subject') + actorMail.setSenderName('bank') + + targetGlobal.setBankCredits(int(tipAmount)) + actorGlobal.setBankCredits(int(actorFunds) - int(totalLost)) + actorGlobal.sendSystemMessage('You have successfully sent ' + tipAmount + ' bank credits to ' + targetGlobal.getCustomName(), 0) + targetGlobal.sendSystemMessage('You have successfully received ' + tipAmount + ' bank credits from ' + actorGlobal.getCustomName(), 0) + + chatSvc.storePersistentMessage(actorMail) + chatSvc.storePersistentMessage(targetMail) + chatSvc.sendPersistentMessageHeader(actorGlobal.getClient(), actorMail) + chatSvc.sendPersistentMessageHeader(targetGlobal.getClient(), targetMail) + return + + else: + actorGlobal.sendSystemMessage('You lack the bank funds to wire ' + tipAmount + ' bank funds to ' + targetGlobal.getCustomName() + '.', 0) + return + return diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index e47f5bf1..b0da63bf 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -111,6 +111,7 @@ public class SimulationService implements INetworkDispatch { core.commandService.registerCommand("getattributesbatch"); core.commandService.registerCommand("pvp"); core.commandService.registerCommand("setcurrentskilltitle"); + core.commandService.registerCommand("tip"); }