Files
NGECore2/scripts/commands/tip.py

168 lines
8.0 KiB
Python

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
from main import NGECore
import sys
import math
def setup():
return
def run(core, actor, target, commandString):
processTip = {0: failure,
1: tipTarget,
2: tipTargetBank,
3: tipName,
4: tipNameBank}
commandArgs = commandString.split(" ")
type = tipType(core, actor, target, commandArgs)
processTip[type](core, actor, target, commandArgs)
def failure(core, actor, target, commandArgs):
sys.stdout.write("Failure\n")
def tipTarget(core, actor, target, commandArgs):
tipTo = getDirectTarget(core, actor, target)
tipAmount = int(commandArgs[0])
# Prioritize LOCKED target. ONLY IF NO LOCKED TARGET, do we transfer to the mouseover target!
transferMoneyDirect(actor, tipTo, tipAmount)
def tipTargetBank(core, actor, target, commandArgs):
tipTo = getDirectTarget(core, actor, target)
tipAmount = int(commandArgs[0])
# Prioritize LOCKED target. ONLY IF NO LOCKED TARGET, do we transfer to the mouseover target!
transferMoneyBank(actor, tipTo, tipAmount, core)
def tipName(core, actor, target, commandArgs):
tipTo = getRemoteTarget(core, commandArgs[0])
if tipTo is not None:
tipAmount = int(commandArgs[1])
transferMoneyDirect(actor, tipTo, tipAmount)
else:
return
def tipNameBank(core, actor, target, commandArgs):
tipTo = getRemoteTarget(core, commandArgs[0])
if tipTo is not None:
tipAmount = int(commandArgs[1])
transferMoneyBank(actor, tipTo, tipAmount, core)
else:
return
def transferMoneyDirect(tipFrom, tipTo, transferTotal):
actorFunds = tipFrom.getCashCredits()
if (tipFrom.inRange(tipTo.getPosition(), 100)): # 100 = 10m
if int(transferTotal) > 0 and int(transferTotal) <= 1000000:
if actorFunds >= int(transferTotal):
tipTo.addCashCredits(int(transferTotal))
tipFrom.deductCashCredits(int(transferTotal))
tipTo.sendSystemMessage(tipFrom.getCustomName() + ' tips you ' + `transferTotal` + ' credits.', 0)
tipFrom.sendSystemMessage('You successfully tip ' + `transferTotal` + ' credits to ' + tipTo.getCustomName() + '.', 0)
return
tipFrom.sendSystemMessage('You lack the cash funds to tip ' + `transferTotal` + ' credits to ' + tipTo.getCustomName() + '.', 0)
return
tipFrom.sendSystemMessage('Invalid tip amount, set amount between 1 and 1,000,000 credits', 0)
return
tipFrom.sendSystemMessage('Target is too far away. Try a wire bank transfer instead.', 0)
return
def transferMoneyBank(tipFrom, tipTo, transferTotal, core):
def handleBankTip(core, owner, eventType, returnList):
bankSurcharge = int(math.ceil(0.05 * float(transferTotal)))
core = NGECore.getInstance()
chatSvc = core.chatService
actorGlobal = tipFrom
targetGlobal = tipTo
actorFunds = actorGlobal.getBankCredits()
totalLost = int(transferTotal) + 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(transferTotal) > 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(targetGlobal.getObjectId())
targetMail.setStatus(Mail.NEW)
targetMail.setMessage(`transferTotal` + ' 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(actorGlobal.getObjectId())
actorMail.setStatus(Mail.NEW)
actorMail.setTimeStamp((int) (date.getTime() / 1000))
actorMail.setMessage('An amount of ' + `transferTotal` + ' 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.addBankCredits(int(transferTotal))
actorGlobal.deductBankCredits(int(totalLost))
actorGlobal.sendSystemMessage('You have successfully sent ' + `transferTotal` + ' bank credits to ' + targetGlobal.getCustomName(), 0)
targetGlobal.sendSystemMessage('You have successfully received ' + `transferTotal` + ' 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 ' + `transferTotal` + ' bank funds to ' + targetGlobal.getCustomName() + '.', 0)
return
return
suiSvc = core.suiService
suiWindow = suiSvc.createMessageBox(MessageBoxType.MESSAGE_BOX_YES_NO, "@base_player:tip_wire_title", "@base_player:tip_wire_prompt", tipFrom, tipFrom, 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)
def getDirectTarget(core, actor, target):
if core.objectService.getObject(actor.getTargetId()) is not None and target is None:
return core.objectService.getObject(actor.getTargetId())
else:
return target
def getRemoteTarget(core, name):
target = core.chatService.getObjectByFirstName(name)
if target is not None:
return target
return None
def tipType(core, actor, target, commandArgs):
commandLength = len(commandArgs)
if commandLength == 1 and commandArgs[0].isdigit() and (((actor.getTargetId() is not None) and (actor.getTargetId() != actor.getObjectId()) and (actor.getTargetId() != 0L)) or (target is not None)):
return 1
if commandLength == 2:
if commandArgs[0].isdigit() and isinstance(commandArgs[1], basestring) and (((actor.getTargetId() is not None) and (actor.getTargetId() != actor.getObjectId()) and (actor.getTargetId() != 0L)) or (target is not None)):
if commandArgs[1].lower() == "bank":
return 2
if isinstance(commandArgs[0], basestring) and commandArgs[1].isdigit():
if not commandArgs[0].lower() == "bank":
return 3
if commandLength == 3 and isinstance(commandArgs[0], basestring) and commandArgs[1].isdigit() and isinstance(commandArgs[2], basestring):
if commandArgs[2].lower() == "bank" and not commandArgs[0].lower() == "bank":
return 4
return 0