484 lines
15 KiB
Plaintext
484 lines
15 KiB
Plaintext
// Modified by Zunath
|
|
|
|
#include "rhs_include"
|
|
#include "zzdlg_main_inc"
|
|
|
|
const string RESPONSE_PAGE = "rhs_buy_menu_responses";
|
|
|
|
const string PAGE_MAIN = "main_page";
|
|
const string PAGE_PREVIEW_HOUSE = "preview_house_page";
|
|
const string PAGE_PREVIEW_HOUSE_CONFIRM = "preview_house_confirm_page";
|
|
const string PAGE_RENT_HOUSE = "rent_house_page";
|
|
const string PAGE_RENT_HOUSE_CONFIRM = "rent_house_confirm_page";
|
|
const string PAGE_SELL_ALL_FURNITURE = "sell_all_furniture_page";
|
|
const string PAGE_SELL_ALL_FURNITURE_CONFIRM = "sell_all_furniture_confirm_page";
|
|
const string PAGE_MOVE_OUT = "move_out_page";
|
|
const string PAGE_MOVE_OUT_CONFIRM = "move_out_confirm_page";
|
|
|
|
/////////////////////////
|
|
// TEMPORARY VARIABLES //
|
|
/////////////////////////
|
|
|
|
// Tracks the name of the house selected for previewing
|
|
const string RHS_TEMP_PAGE_HOUSE_TYPE_SELECTED = "RHS_TEMP_PAGE_HOUSE_TYPE_SELECTED";
|
|
// Tracks the resref of the house selected for previewing
|
|
const string RHS_TEMP_PAGE_HOUSE_TYPE_RESREF = "RHS_TEMP_PAGE_HOUSE_TYPE_RESREF";
|
|
// Tracks the rent cost of the house selected for renting
|
|
const string RHS_TEMP_PAGE_HOUSE_TYPE_RENT_COST = "RHS_TEMP_PAGE_HOUSE_TYPE_RENT_COST";
|
|
// Tracks the amount of money player will receive for selling all of his/her furniture
|
|
const string RHS_TEMP_PAGE_FURNITURE_SALE_AMOUNT = "RHS_TEMP_PAGE_FURNITURE_SALE_AMOUNT";
|
|
|
|
void ClearTemporaryVariables()
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
|
|
DeleteLocalString(oPC, RHS_TEMP_PAGE_HOUSE_TYPE_SELECTED);
|
|
DeleteLocalString(oPC, RHS_TEMP_PAGE_HOUSE_TYPE_RESREF);
|
|
DeleteLocalInt(oPC, RHS_TEMP_PAGE_HOUSE_TYPE_RENT_COST);
|
|
DeleteLocalInt(oPC, RHS_TEMP_PAGE_FURNITURE_SALE_AMOUNT);
|
|
}
|
|
|
|
// Creates the response choices for all house types the landlord is authorized to rent out.
|
|
void CreateHouseSelections();
|
|
void CreateHouseSelections()
|
|
{
|
|
object oNPC = OBJECT_SELF;
|
|
string sSQL;
|
|
int iIndex = 1;
|
|
int iCurrentHouse = GetLocalArrayInt(oNPC, RHS_LANDLORD_HOUSES_AVAILABLE_ARRAY, iIndex);
|
|
string sHouses = IntToString(iCurrentHouse);
|
|
int bFoundHouse = FALSE;
|
|
|
|
while(iCurrentHouse > 0)
|
|
{
|
|
bFoundHouse = TRUE;
|
|
sHouses += " OR ID=" + IntToString(iCurrentHouse);
|
|
|
|
iIndex++;
|
|
iCurrentHouse = GetLocalArrayInt(oNPC, RHS_LANDLORD_HOUSES_AVAILABLE_ARRAY, iIndex);
|
|
}
|
|
|
|
if(bFoundHouse)
|
|
{
|
|
sSQL = "SELECT Name FROM " + RHS_SCHEMA + "." + RHS_TABLE_HOUSE_TYPES + " WHERE ID=" + sHouses + ";";
|
|
SQLExecDirect(sSQL);
|
|
|
|
while(SQLFetch() == SQL_SUCCESS)
|
|
{
|
|
dlgAddResponseAction(RESPONSE_PAGE, SQLDecodeSpecialChars(SQLGetData(1)));
|
|
}
|
|
}
|
|
}
|
|
|
|
// Creates the header for the 'Preview House' and 'Rent House' events.
|
|
// Returns the rent price.
|
|
int CreatePreviewHeader();
|
|
int CreatePreviewHeader()
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
string sHouseType = GetLocalString(oPC, RHS_TEMP_PAGE_HOUSE_TYPE_SELECTED);
|
|
string sMessage = ColorTokenGreen() + RHS_HOUSE_TERM_PROPER + " Menu\n\n" + ColorTokenEnd();
|
|
string sResref;
|
|
int iRent;
|
|
|
|
// Grab rent and resref information from database
|
|
string sSQL = "SELECT Resref, Rent FROM " + RHS_SCHEMA + "." + RHS_TABLE_HOUSE_TYPES + " WHERE Name='" + SQLEncodeSpecialChars(sHouseType) + "';";
|
|
SQLExecDirect(sSQL);
|
|
|
|
while(SQLFetch() == SQL_SUCCESS)
|
|
{
|
|
sResref = SQLGetData(1);
|
|
iRent = StringToInt(SQLGetData(2));
|
|
}
|
|
|
|
sMessage += ColorTokenGreen() + "House Type: " + ColorTokenEnd() + sHouseType + "\n";
|
|
sMessage += ColorTokenGreen() + "Rent: " + ColorTokenEnd() + IntToString(iRent) + " GP due every " + IntToString(RHS_RENT_LENGTH) + " days\n";
|
|
|
|
dlgSetPrompt(sMessage);
|
|
|
|
// Store resref for later use
|
|
SetLocalString(oPC, RHS_TEMP_PAGE_HOUSE_TYPE_RESREF, sResref);
|
|
|
|
return iRent;
|
|
}
|
|
|
|
// Prototypes
|
|
void MainPageInit();
|
|
void MainPageSelect();
|
|
void PreviewHouseInit();
|
|
void PreviewHouseSelect();
|
|
void RentHouseInit();
|
|
void RentHouseSelect();
|
|
void SellAllFurnitureInit();
|
|
void SellAllFurnitureSelect();
|
|
void MoveOutInit();
|
|
void MoveOutSelect();
|
|
void PreviewHouseConfirmInit();
|
|
void PreviewHouseConfirmSelect();
|
|
void RentHouseConfirmInit();
|
|
void RentHouseConfirmSelect();
|
|
void SellAllFurnitureConfirmInit();
|
|
void SellAllFurnitureConfirmSelect();
|
|
void MoveOutConfirmInit();
|
|
void MoveOutConfirmSelect();
|
|
|
|
void OnInit()
|
|
{
|
|
dlgChangeLabelNext("Next page");
|
|
dlgChangeLabelPrevious("Previous page");
|
|
dlgChangePage(PAGE_MAIN);
|
|
dlgActivatePreservePageNumberOnSelection();
|
|
dlgActivateResetResponse();
|
|
}
|
|
|
|
// Create the page
|
|
void OnPageInit( string sPage )
|
|
{
|
|
DeleteList( RESPONSE_PAGE, dlgGetSpeakingPC() );
|
|
|
|
if( sPage == PAGE_MAIN ) MainPageInit( );
|
|
else if(sPage == PAGE_PREVIEW_HOUSE) PreviewHouseInit();
|
|
else if(sPage == PAGE_RENT_HOUSE) RentHouseInit();
|
|
else if(sPage == PAGE_SELL_ALL_FURNITURE) SellAllFurnitureInit();
|
|
else if(sPage == PAGE_MOVE_OUT) MoveOutInit();
|
|
else if(sPage == PAGE_PREVIEW_HOUSE_CONFIRM) PreviewHouseConfirmInit();
|
|
else if(sPage == PAGE_RENT_HOUSE_CONFIRM) RentHouseConfirmInit();
|
|
else if(sPage == PAGE_SELL_ALL_FURNITURE_CONFIRM) SellAllFurnitureConfirmInit();
|
|
else if(sPage == PAGE_MOVE_OUT_CONFIRM) MoveOutConfirmInit();
|
|
|
|
dlgSetActiveResponseList( RESPONSE_PAGE );
|
|
}
|
|
|
|
// Handles any selection.
|
|
void OnSelection( string sPage )
|
|
{
|
|
if ( sPage == PAGE_MAIN ) MainPageSelect( );
|
|
else if(sPage == PAGE_PREVIEW_HOUSE) PreviewHouseSelect();
|
|
else if(sPage == PAGE_RENT_HOUSE) RentHouseSelect();
|
|
else if(sPage == PAGE_SELL_ALL_FURNITURE) SellAllFurnitureSelect();
|
|
else if(sPage == PAGE_MOVE_OUT) MoveOutSelect();
|
|
else if(sPage == PAGE_PREVIEW_HOUSE_CONFIRM) PreviewHouseConfirmSelect();
|
|
else if(sPage == PAGE_RENT_HOUSE_CONFIRM) RentHouseConfirmSelect();
|
|
else if(sPage == PAGE_SELL_ALL_FURNITURE_CONFIRM) SellAllFurnitureConfirmSelect();
|
|
else if(sPage == PAGE_MOVE_OUT_CONFIRM) MoveOutConfirmSelect();
|
|
}
|
|
|
|
void OnReset( string sPage )
|
|
{
|
|
ClearTemporaryVariables();
|
|
|
|
dlgChangePage( PAGE_MAIN );
|
|
dlgResetPageNumber( );
|
|
}
|
|
|
|
void OnAbort( string sPage )
|
|
{
|
|
ClearTemporaryVariables();
|
|
|
|
DeleteList( RESPONSE_PAGE, dlgGetSpeakingPC() );
|
|
}
|
|
void OnEnd( string sPage )
|
|
{
|
|
ClearTemporaryVariables();
|
|
|
|
DeleteList( RESPONSE_PAGE, dlgGetSpeakingPC() );
|
|
}
|
|
|
|
void OnContinue( string sPage, int iContinuePage )
|
|
{
|
|
}
|
|
|
|
// Message handler
|
|
void main()
|
|
{
|
|
dlgOnMessage();
|
|
}
|
|
|
|
// Specific scripting starts here
|
|
|
|
// MAIN PAGE START
|
|
void MainPageInit( )
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
|
|
object oDatabase = GetItemPossessedBy(oPC, PC_DATABASE);
|
|
int iPCID = GetLocalInt(oDatabase, PC_ID_NUMBER);
|
|
int bHouseRented = GetLocalInt(oDatabase, RHS_PLAYER_HOUSE_RENTED);
|
|
string sPrompt = ColorTokenGreen() + RHS_HOUSE_TERM_PROPER + " Menu\n\n" + ColorTokenEnd();
|
|
|
|
// PC doesn't have a house currently
|
|
if(!bHouseRented)
|
|
{
|
|
sPrompt += "You do not currently have a " + RHS_HOUSE_TERM_LOWER + " rented.";
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Preview " + RHS_HOUSE_TERM_PROPER);
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Rent " + RHS_HOUSE_TERM_PROPER);
|
|
}
|
|
|
|
else
|
|
{
|
|
sPrompt += "What would you like to do?";
|
|
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Preview " + RHS_HOUSE_TERM_PROPER);
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Sell All Furniture");
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Move Out");
|
|
}
|
|
|
|
dlgSetPrompt(sPrompt);
|
|
|
|
dlgDeactivateResetResponse();
|
|
dlgActivateEndResponse( "End" );
|
|
}
|
|
|
|
void MainPageSelect( )
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
object oDatabase = GetItemPossessedBy(oPC, PC_DATABASE);
|
|
|
|
if(dlgIsSelectionEqualToName("Sell All Furniture"))
|
|
{
|
|
dlgChangePage(PAGE_SELL_ALL_FURNITURE);
|
|
}
|
|
else if(dlgIsSelectionEqualToName("Move Out"))
|
|
{
|
|
dlgChangePage(PAGE_MOVE_OUT);
|
|
}
|
|
else if(dlgIsSelectionEqualToName("Preview " + RHS_HOUSE_TERM_PROPER))
|
|
{
|
|
dlgChangePage(PAGE_PREVIEW_HOUSE);
|
|
}
|
|
else if(dlgIsSelectionEqualToName("Rent " + RHS_HOUSE_TERM_PROPER))
|
|
{
|
|
dlgChangePage(PAGE_RENT_HOUSE);
|
|
}
|
|
}
|
|
|
|
void PreviewHouseInit()
|
|
{
|
|
string sMessage = ColorTokenGreen() + RHS_HOUSE_TERM_PROPER + " Menu\n\n" + ColorTokenEnd();
|
|
sMessage += "You can preview the layout of a " + RHS_HOUSE_TERM_LOWER + " before you decide to rent it.\n\n";
|
|
sMessage += "Please select a " + RHS_HOUSE_TERM_LOWER + " layout to preview.\n";
|
|
|
|
dlgSetPrompt(sMessage);
|
|
CreateHouseSelections();
|
|
|
|
dlgActivateResetResponse("Back", ColorTokenBlue());
|
|
}
|
|
|
|
void PreviewHouseSelect()
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
string sHouseTypeSelected = dlgGetSelectionName();
|
|
|
|
SetLocalString(oPC, RHS_TEMP_PAGE_HOUSE_TYPE_SELECTED, sHouseTypeSelected);
|
|
dlgChangePage(PAGE_PREVIEW_HOUSE_CONFIRM);
|
|
}
|
|
|
|
void RentHouseInit()
|
|
{
|
|
string sMessage = ColorTokenGreen() + RHS_HOUSE_TERM_PROPER + " Menu\n\n" + ColorTokenEnd();
|
|
sMessage += "Which " + RHS_HOUSE_TERM_LOWER + " would you like to start renting?\n";
|
|
|
|
dlgSetPrompt(sMessage);
|
|
CreateHouseSelections();
|
|
|
|
dlgActivateResetResponse("Back", ColorTokenBlue());
|
|
}
|
|
|
|
void RentHouseSelect()
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
string sHouseTypeSelected = dlgGetSelectionName();
|
|
|
|
SetLocalString(oPC, RHS_TEMP_PAGE_HOUSE_TYPE_SELECTED, sHouseTypeSelected);
|
|
dlgChangePage(PAGE_RENT_HOUSE_CONFIRM);
|
|
}
|
|
|
|
void SellAllFurnitureInit()
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
float fPercentage = RHS_FURNITURE_SELL_BACK_PERCENTAGE * 100.0;
|
|
int iSellBackAmount = RHS_CalculateTotalFurnitureValue(oPC);
|
|
string sMessage = ColorTokenGreen() + RHS_HOUSE_TERM_PROPER + " Menu\n\n" + ColorTokenEnd();
|
|
sMessage += "Furniture can be sold back at " + FloatToString(fPercentage, 3, 2) + "% of retail value.\n\n";
|
|
sMessage += "You will receive " + IntToString(iSellBackAmount) + " GP if you sell all of the furniture in your " + RHS_HOUSE_TERM_LOWER + " back to the store.\n\n";
|
|
sMessage += ColorTokenRed() + "Warning:" + ColorTokenEnd() + " This action cannot be be undone! Are you sure you want to sell all of the furniture in your " + RHS_HOUSE_TERM_LOWER + "?\n";
|
|
dlgSetPrompt(sMessage);
|
|
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Sell All Furniture");
|
|
|
|
dlgActivateResetResponse("Back", ColorTokenBlue());
|
|
}
|
|
|
|
void SellAllFurnitureSelect()
|
|
{
|
|
if(dlgIsSelectionEqualToName("Sell All Furniture"))
|
|
{
|
|
dlgChangePage(PAGE_SELL_ALL_FURNITURE_CONFIRM);
|
|
}
|
|
}
|
|
|
|
void MoveOutInit()
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
// Convert sell back price to percentage
|
|
float fPercentage = RHS_FURNITURE_SELL_BACK_PERCENTAGE * 100.0;
|
|
// Calculate sell back amount
|
|
int iSellBackAmount = RHS_CalculateTotalFurnitureValue(oPC);
|
|
|
|
// Store the sell back amount for later use
|
|
SetLocalInt(oPC, RHS_TEMP_PAGE_FURNITURE_SALE_AMOUNT, iSellBackAmount);
|
|
|
|
string sMessage = ColorTokenGreen() + RHS_HOUSE_TERM_PROPER + " Menu\n\n" + ColorTokenEnd();
|
|
sMessage += "You can move out of your " + RHS_HOUSE_TERM_LOWER + " here. If you choose to move out, all of the furniture in your " + RHS_HOUSE_TERM_LOWER + " will be sold at " + FloatToString(fPercentage, 3, 2) + "% of retail price.\n\n";
|
|
sMessage += "If you choose to move out you will receive a total of " + IntToString(iSellBackAmount) + " GP.\n\n";
|
|
sMessage += ColorTokenRed() + "Warning: " + ColorTokenEnd() + "Your list of friends, trustees and lease will also be reset!\n";
|
|
|
|
dlgSetPrompt(sMessage);
|
|
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Move out of my " + RHS_HOUSE_TERM_LOWER);
|
|
|
|
dlgActivateResetResponse("Back", ColorTokenBlue());
|
|
}
|
|
|
|
void MoveOutSelect()
|
|
{
|
|
if(dlgIsSelectionEqualToName("Move out of my " + RHS_HOUSE_TERM_LOWER))
|
|
{
|
|
dlgChangePage(PAGE_MOVE_OUT_CONFIRM);
|
|
}
|
|
}
|
|
|
|
// Preview House Confirmation Page
|
|
void PreviewHouseConfirmInit()
|
|
{
|
|
CreatePreviewHeader();
|
|
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Preview " + RHS_HOUSE_TERM_PROPER);
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Back", ColorTokenBlue());
|
|
|
|
dlgDeactivateResetResponse();
|
|
}
|
|
|
|
void PreviewHouseConfirmSelect()
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
string sHouseName = GetLocalString(oPC, RHS_TEMP_PAGE_HOUSE_TYPE_SELECTED);
|
|
|
|
if(dlgIsSelectionEqualToName("Back"))
|
|
{
|
|
ClearTemporaryVariables();
|
|
dlgChangePage(PAGE_PREVIEW_HOUSE);
|
|
}
|
|
else if(dlgIsSelectionEqualToName("Preview " + RHS_HOUSE_TERM_PROPER))
|
|
{
|
|
int iHouseType = StringToInt(GetMySQLDataKeyString(RHS_TABLE_HOUSE_TYPES, "ID", sHouseName, "Name", RHS_SCHEMA));
|
|
sHouseName = "(PREVIEW) " + sHouseName;
|
|
RHS_PreviewHouse(oPC, iHouseType, sHouseName);
|
|
}
|
|
}
|
|
|
|
// Rent House Confirmation Page
|
|
void RentHouseConfirmInit()
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
int iRent = CreatePreviewHeader();
|
|
int iGold = GetGold(oPC);
|
|
|
|
// Only display if PC has enough money to rent the place
|
|
if(iGold >= iRent)
|
|
{
|
|
SetLocalInt(oPC, RHS_TEMP_PAGE_HOUSE_TYPE_RENT_COST, iRent);
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Rent " + RHS_HOUSE_TERM_PROPER + " (" + IntToString(iRent) + " GP)");
|
|
}
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Back", ColorTokenBlue());
|
|
|
|
dlgDeactivateResetResponse();
|
|
}
|
|
|
|
void RentHouseConfirmSelect()
|
|
{
|
|
// Return to house type selection menu
|
|
if(dlgIsSelectionEqualToName("Back"))
|
|
{
|
|
ClearTemporaryVariables();
|
|
dlgChangePage(PAGE_MAIN);
|
|
}
|
|
// Chose to rent the house - set PC up with all necessary variables and add database tables
|
|
else
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
object oDatabase = GetItemPossessedBy(oPC, PC_DATABASE);
|
|
int iGold = GetGold(oPC);
|
|
int iRent = GetLocalInt(oPC, RHS_TEMP_PAGE_HOUSE_TYPE_RENT_COST);
|
|
string sHouseType = GetLocalString(oPC, RHS_TEMP_PAGE_HOUSE_TYPE_SELECTED);
|
|
|
|
// Not enough cash
|
|
if(iRent > iGold)
|
|
{
|
|
FloatingTextStringOnCreature(ColorTokenRed() + "You do not have enough money to make that purchase." + ColorTokenEnd(), oPC, FALSE);
|
|
return;
|
|
}
|
|
|
|
// Remove money
|
|
AssignCommand(oPC, TakeGoldFromCreature(iRent, oPC, TRUE));
|
|
|
|
int iHouseType = StringToInt(GetMySQLDataKeyString(RHS_TABLE_HOUSE_TYPES, "ID", sHouseType, "Name", RHS_SCHEMA));
|
|
|
|
// Add tables to database and set PC up to use the house
|
|
RHS_SetPlayerHouse(oPC, iHouseType);
|
|
// Return to main menu
|
|
dlgChangePage(PAGE_MAIN);
|
|
}
|
|
}
|
|
|
|
// Sell All Furniture Confirmation Page
|
|
void SellAllFurnitureConfirmInit()
|
|
{
|
|
dlgAddResponseAction(RESPONSE_PAGE, "CONFIRM SELL ALL FURNITURE");
|
|
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Back", ColorTokenBlue());
|
|
dlgDeactivateResetResponse();
|
|
}
|
|
|
|
void SellAllFurnitureConfirmSelect()
|
|
{
|
|
if(dlgIsSelectionEqualToName("Back"))
|
|
{
|
|
ClearTemporaryVariables();
|
|
dlgChangePage(PAGE_MAIN);
|
|
}
|
|
else if(dlgIsSelectionEqualToName("CONFIRM SELL ALL FURNITURE"))
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
RHS_SellAllFurniture(oPC);
|
|
ClearTemporaryVariables();
|
|
dlgChangePage(PAGE_MAIN);
|
|
}
|
|
}
|
|
|
|
// Move Out Confirmation Page
|
|
void MoveOutConfirmInit()
|
|
{
|
|
dlgAddResponseAction(RESPONSE_PAGE, "CONFIRM MOVE OUT");
|
|
|
|
dlgAddResponseAction(RESPONSE_PAGE, "Back", ColorTokenBlue());
|
|
dlgDeactivateResetResponse();
|
|
}
|
|
|
|
void MoveOutConfirmSelect()
|
|
{
|
|
object oPC = dlgGetSpeakingPC();
|
|
|
|
if(dlgIsSelectionEqualToName("Back"))
|
|
{
|
|
ClearTemporaryVariables();
|
|
dlgChangePage(PAGE_PREVIEW_HOUSE);
|
|
}
|
|
else if(dlgIsSelectionEqualToName("CONFIRM MOVE OUT"))
|
|
{
|
|
int iFurnitureMoney = GetLocalInt(oPC, RHS_TEMP_PAGE_FURNITURE_SALE_AMOUNT);
|
|
RHS_RemovePlayerHouse(oPC, iFurnitureMoney);
|
|
dlgChangePage(PAGE_MAIN);
|
|
}
|
|
}
|