Merge pull request #1260 from RobCubed/master

Fixed: Tips working (minus line of sight issues)
This commit is contained in:
Undercova
2015-03-30 11:50:07 +02:00

View File

@@ -1,4 +1,6 @@
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
@@ -8,125 +10,159 @@ from services.sui.SUIService import MessageBoxType
from java.util import Vector
from main import NGECore
import sys
# initialize global vars (happens at compile time)
commandArgs = ""
commandLength = 0
actorID = long(0)
targetID = long(0)
tipAmount = 0
tipAmountBank = 0
bankSurcharge = 0
import math
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()
processTip = {0: failure,
1: tipTarget,
2: tipTargetBank,
3: tipName,
4: tipNameBank}
commandArgs = commandString.split(" ")
commandLength = len(commandArgs)
tipAmount = commandArgs[0]
tipAmountBank = commandArgs[0]
bankSurcharge = int(0.05) * int(tipAmountBank)
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)
#/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
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)
#/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(owner, window, eventType, returnList):
core = NGECore.getInstance()
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) + int(targetGlobal.getBankCredits()))
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
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:
actorGlobal.sendSystemMessage('You lack the bank funds to wire ' + tipAmount + ' bank funds to ' + targetGlobal.getCustomName() + '.', 0)
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