Files
dsrc/sku.0/sys.server/compiled/game/script/terminal/bank.script
T

302 lines
8.0 KiB
Plaintext

/**
* Copyright (c)2000-2002 Sony Online Entertainment Inc.
* All Rights Reserved
*
* Title: bank.script
* Description: script for bank menu options; to be attached to bank terminals
* @author $Author:$
* @version $Revision:$
*/
/***** INCLUDES ********************************************************/
include library.city;
include library.utils;
include library.money;
include library.sui;
/***** INHERITS ********************************************************/
inherits terminal.base.base_terminal;
/***** CONSTANTS *******************************************************/
const string SCRIPTVAR_BANK = "bank";
const string_id SID_BANK_OPTIONS = new string_id("sui", "mnu_bank");
const string_id SID_BANK_CREDITS = new string_id("sui", "bank_credits"); //sub1
const string_id SID_BANK_ITEMS = new string_id("sui", "bank_items"); //sub2
const string_id SID_BANK_DEPOSITALL = new string_id("sui", "bank_depositall"); //sub3
const string_id SID_BANK_WITHDRAWALL = new string_id("sui", "bank_withdrawall"); //sub4
const string_id SID_BANK_JOIN = new string_id("sui", "bank_join"); //sub5
const string_id SID_BANK_QUIT = new string_id("sui", "bank_quit"); //sub6
const string_id SID_CITY_BANK_BANNED = new string_id("city/city","bank_banned");
const string_id SID_ON_MOUNT = new string_id("error_message","survey_on_mount");
const string_id SID_BANK_MENU_OPEN = new string_id("error_message", "bank_menu_open");
const string_id SID_GALACTIC_RESERVE = new string_id("sui", "bank_galactic_reserve");
const string_id SID_GALACTIC_RESERVE_DEPOSIT = new string_id("sui", "bank_galactic_reserve_deposit");
const string_id SID_GALACTIC_RESERVE_WITHDRAW = new string_id("sui", "bank_galactic_reserve_withdraw");
/***** TRIGGERS ********************************************************/
trigger OnInitialize()
{
setObjVar(self, "banking_bankid", getCurrentSceneName());
return SCRIPT_CONTINUE;
}
trigger OnObjectMenuRequest(obj_id player, menu_info mi)
{
setObjVar(player, "banking_bankid", getCurrentSceneName());
menu_info_data mid = mi.getMenuItemByType(menu_info_types.ITEM_USE);
if ( mid == null )
{
return SCRIPT_CONTINUE;
}
int mnu = mid.getId();
int subBankCredits = mi.addSubMenu (mnu, menu_info_types.SERVER_MENU1, SID_BANK_CREDITS);
obj_id bankTerminal = self;
int subBankItems = mi.addSubMenu (mnu, menu_info_types.SERVER_MENU2, SID_BANK_ITEMS);
int cash = getCashBalance(player);
if ( cash > 0 )
{
int subBankDepositAll = mi.addSubMenu (mnu, menu_info_types.SERVER_MENU3, SID_BANK_DEPOSITALL);
}
int bank = getBankBalance(player);
if ( bank > 0 )
{
int subBankWithdrawAll = mi.addSubMenu (mnu, menu_info_types.SERVER_MENU4, SID_BANK_WITHDRAWALL);
}
// must be at a bank terminal in Mos Eisley, Theed, or Coronet to access the Galactic Reserve
if (canAccessGalacticReserve(player))
{
int galactic_reserve = mi.addRootMenu (menu_info_types.SERVER_MENU50, SID_GALACTIC_RESERVE);
mi.addSubMenu(galactic_reserve, menu_info_types.SERVER_MENU49, SID_GALACTIC_RESERVE_DEPOSIT);
mi.addSubMenu(galactic_reserve, menu_info_types.SERVER_MENU48, SID_GALACTIC_RESERVE_WITHDRAW);
}
return SCRIPT_CONTINUE;
}
trigger OnObjectMenuSelect(obj_id player, int item)
{
setObjVar(player, "banking_bankid", getCurrentSceneName());
obj_id bankTerminal = self;
int city_id = getCityAtLocation( getLocation(self), 0 );
if ( (city_id>0) && city.isCityBanned( player, city_id ) )
{
sendSystemMessage( player, SID_CITY_BANK_BANNED );
return SCRIPT_CONTINUE;
}
if ( item == menu_info_types.ITEM_USE )
{
openBankMenu(player);
}
else if ( item == menu_info_types.SERVER_MENU1 )
{
openBankMenu(player);
}
else if ( item == menu_info_types.SERVER_MENU2 )
{
openBankContainer(bankTerminal, player);
obj_id inv = utils.getInventoryContainer(player);
if ( isIdValid(inv) )
{
utils.requestContainerOpen(player, inv);
}
}
else if ( item == menu_info_types.SERVER_MENU3 )
{
int amt = getCashBalance(player);
if ( amt == 0 )
{
money.nullTransactionError(player);
}
if ( !money.deposit(player, amt) )
{
debugSpeakMsg(player, "transaction request aborted by system...");
}
else
{
closeBankTransferSui(self, player);
}
}
else if ( item == menu_info_types.SERVER_MENU4 )
{
int amt = getBankBalance(player);
if ( amt == 0 )
{
money.nullTransactionError(player);
}
if ( !money.withdraw(player, amt) )
{
debugSpeakMsg(player, "transaction request aborted by system...");
}
else
{
closeBankTransferSui(self, player);
}
}
else if ( item == menu_info_types.SERVER_MENU49 )
{
depositToGalacticReserve(player);
}
else if ( item == menu_info_types.SERVER_MENU48 )
{
withdrawFromGalacticReserve(player);
}
return SCRIPT_CONTINUE;
}
/***** FUNCTIONS *******************************************************/
boolean openBankMenu(obj_id player)
{
obj_id self = getSelf();
if ( !isIdValid(player) )
{
return false;
}
string scriptvar = SCRIPTVAR_BANK + "." + player;
if ( utils.hasScriptVar(self, scriptvar) )
{
int oldPid = utils.getIntScriptVar(self, scriptvar);
sui.closeSUI(player, oldPid);
utils.removeScriptVar(self, scriptvar);
}
else
{
if ( utils.hasScriptVar(player, SCRIPTVAR_BANK + ".terminal") )
{
obj_id other = utils.getObjIdScriptVar(player, SCRIPTVAR_BANK + ".terminal");
if ( isIdValid(other) && (other != self) )
{
dictionary closer = new dictionary();
closer.put("player", player);
messageTo(other, "forceCloseBankSui", closer, 0f, false);
}
}
}
int pid = sui.bank(player);
if ( pid > -1 )
{
utils.setScriptVar(player, SCRIPTVAR_BANK + ".terminal", self);
utils.setScriptVar(self, scriptvar, pid);
dictionary d = new dictionary();
d.put("player" , player);
messageTo(self, "forceCloseBankSui", d, 30f, false);
return true;
}
return false;
}
messageHandler forceCloseBankSui()
{
obj_id player = params.getObjId("player");
if ( isIdValid(player) )
{
closeBankTransferSui(self, player);
obj_id current = utils.getObjIdScriptVar(player, SCRIPTVAR_BANK + ".terminal");
if ( isIdValid(current) && (current == self) )
utils.removeScriptVar(player, SCRIPTVAR_BANK + ".terminal");
}
return SCRIPT_CONTINUE;
}
void closeBankTransferSui(obj_id self, obj_id player)
{
string scriptvar = SCRIPTVAR_BANK + "." + player;
if ( utils.hasScriptVar(self, scriptvar) )
{
int pid = utils.getIntScriptVar(self, scriptvar);
sui.closeSUI(player, pid);
utils.removeScriptVar(self, scriptvar);
}
}
/***** MESSAGEHANDLERS *************************************************/
messageHandler handleBankSuccess()
{
if ( params == null || params.isEmpty() )
return SCRIPT_CONTINUE;
obj_id player = params.getObjId(money.DICT_PLAYER_ID);
if ( isIdValid(player) )
{
utils.removeScriptVar(self, SCRIPTVAR_BANK + "." + player);
messageTo(player, money.HANDLER_BANK_SUCCESS, params, 0, true);
}
return SCRIPT_CONTINUE;
}
messageHandler handleBankUnknownError()
{
if ( params == null || params.isEmpty() )
return SCRIPT_CONTINUE;
obj_id player = params.getObjId(money.DICT_PLAYER_ID);
if ( isIdValid(player) )
{
utils.removeScriptVar(self, SCRIPTVAR_BANK + "." + player);
messageTo(player, money.HANDLER_BANK_UNKNOWN_ERROR, params, 0, true);
}
return SCRIPT_CONTINUE;
}
messageHandler handleBankDepositError()
{
if ( params == null || params.isEmpty() )
return SCRIPT_CONTINUE;
obj_id player = params.getObjId(money.DICT_PLAYER_ID);
if ( isIdValid(player) )
{
utils.removeScriptVar(self, SCRIPTVAR_BANK + "." + player);
messageTo(player, money.HANDLER_BANK_DEPOSIT_ERROR, params, 0, true);
}
return SCRIPT_CONTINUE;
}
messageHandler handleBankWithdrawError()
{
if ( params == null || params.isEmpty() )
return SCRIPT_CONTINUE;
obj_id player = params.getObjId(money.DICT_PLAYER_ID);
if ( isIdValid(player) )
{
utils.removeScriptVar(self, SCRIPTVAR_BANK + "." + player);
messageTo(player, money.HANDLER_BANK_WITHDRAW_ERROR, params, 0, true);
}
return SCRIPT_CONTINUE;
}