mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
Flexible merchant updates
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@3404 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -35,40 +35,41 @@ UINT8 gubLastSpecialItemAddedAtElement = 255;
|
|||||||
|
|
||||||
// THIS STRUCTURE HAS UNCHANGING INFO THAT DOESN'T GET SAVED/RESTORED/RESET
|
// THIS STRUCTURE HAS UNCHANGING INFO THAT DOESN'T GET SAVED/RESTORED/RESET
|
||||||
// TODO: externalize
|
// TODO: externalize
|
||||||
ARMS_DEALER_INFO ArmsDealerInfo[ NUM_ARMS_DEALERS ] =
|
const ARMS_DEALER_INFO DefaultarmsDealerInfo[ NUM_ARMS_DEALERS ] =
|
||||||
{
|
{
|
||||||
//Buying Selling Merc ID# Type Initial Flags
|
//Buying Selling Merc ID# Type Initial Flags
|
||||||
//Price Price Of Cash
|
//Price Price Of Cash
|
||||||
//Modifier Modifier Dealer
|
//Modifier Modifier Dealer
|
||||||
|
|
||||||
/* Tony */ { 0.75f, 1.25f, TONY, ARMS_DEALER_BUYS_SELLS, 15000, ARMS_DEALER_SOME_USED_ITEMS | ARMS_DEALER_GIVES_CHANGE },
|
/* Tony */ { 0.75f, 1.25f, TONY, ARMS_DEALER_BUYS_SELLS, 15000, ARMS_DEALER_SOME_USED_ITEMS | ARMS_DEALER_GIVES_CHANGE, 15000, 15000, 0, 1, 10, 1, 10, 2, 3, false, false },
|
||||||
/* Franz Hinkle */ { 1.0f, 1.5f, FRANZ, ARMS_DEALER_BUYS_SELLS, 5000, ARMS_DEALER_SOME_USED_ITEMS | ARMS_DEALER_GIVES_CHANGE },
|
/* Franz Hinkle */ { 1.0f, 1.5f, FRANZ, ARMS_DEALER_BUYS_SELLS, 5000, ARMS_DEALER_SOME_USED_ITEMS | ARMS_DEALER_GIVES_CHANGE, 5000, 5000, 0, 1, 10, 0, 100, 1, 2, false, true },
|
||||||
/* Keith Hemps */ { 0.75f, 1.0f, KEITH, ARMS_DEALER_BUYS_SELLS, 1500, ARMS_DEALER_ONLY_USED_ITEMS | ARMS_DEALER_GIVES_CHANGE },
|
/* Keith Hemps */ { 0.75f, 1.0f, KEITH, ARMS_DEALER_BUYS_SELLS, 1500, ARMS_DEALER_ONLY_USED_ITEMS | ARMS_DEALER_GIVES_CHANGE, 1500, 1500, 0, 1, 10, 0, 100, 1, 2, false, true },
|
||||||
/* Jake Cameron */ { 0.8f, 1.1f, JAKE, ARMS_DEALER_BUYS_SELLS, 2500, ARMS_DEALER_ONLY_USED_ITEMS | ARMS_DEALER_GIVES_CHANGE },
|
/* Jake Cameron */ { 0.8f, 1.1f, JAKE, ARMS_DEALER_BUYS_SELLS, 2500, ARMS_DEALER_ONLY_USED_ITEMS | ARMS_DEALER_GIVES_CHANGE, 2500, 2500, 0, 1, 10, 0, 100, 1, 2, false, true },
|
||||||
/* Gabby Mulnick*/ { 1.0f, 1.0f, GABBY, ARMS_DEALER_BUYS_SELLS, 3000, ARMS_DEALER_GIVES_CHANGE },
|
/* Gabby Mulnick*/ { 1.0f, 1.0f, GABBY, ARMS_DEALER_BUYS_SELLS, 3000, ARMS_DEALER_GIVES_CHANGE , 3000, 3000, 0, 1, 10, 0, 100, 1, 2, false, true },
|
||||||
|
|
||||||
/* Devin Connell*/ { 0.75f, 1.25f, DEVIN, ARMS_DEALER_SELLS_ONLY, 5000, ARMS_DEALER_GIVES_CHANGE },
|
/* Devin Connell*/ { 0.75f, 1.25f, DEVIN, ARMS_DEALER_SELLS_ONLY, 5000, ARMS_DEALER_GIVES_CHANGE , 5000, 5000, 0, 3, 10, 0, 10, 2, 3, false, false },
|
||||||
/* Howard Filmore*/ { 1.0f, 1.0f, HOWARD, ARMS_DEALER_SELLS_ONLY, 3000, ARMS_DEALER_GIVES_CHANGE },
|
/* Howard Filmore*/ { 1.0f, 1.0f, HOWARD, ARMS_DEALER_SELLS_ONLY, 3000, ARMS_DEALER_GIVES_CHANGE , 3000, 3000, 0, 1, 10, 0, 100, 1, 2, false, true },
|
||||||
/* Sam Rozen */ { 1.0f, 1.0f, SAM, ARMS_DEALER_SELLS_ONLY, 3000, ARMS_DEALER_GIVES_CHANGE },
|
/* Sam Rozen */ { 1.0f, 1.0f, SAM, ARMS_DEALER_SELLS_ONLY, 3000, ARMS_DEALER_GIVES_CHANGE , 3000, 3000, 0, 1, 10, 0, 100, 1, 2, false, true },
|
||||||
/* Frank */ { 1.0f, 1.0f, FRANK, ARMS_DEALER_SELLS_ONLY, 500, ARMS_DEALER_ACCEPTS_GIFTS },
|
/* Frank */ { 1.0f, 1.0f, FRANK, ARMS_DEALER_SELLS_ONLY, 500, ARMS_DEALER_ACCEPTS_GIFTS , 500, 500, 0, 1, 10, 0, 100, 1, 2, false, true },
|
||||||
|
|
||||||
/* Bar Bro 1 */ { 1.0f, 1.0f, HERVE, ARMS_DEALER_SELLS_ONLY, 250, ARMS_DEALER_ACCEPTS_GIFTS },
|
/* Bar Bro 1 */ { 1.0f, 1.0f, HERVE, ARMS_DEALER_SELLS_ONLY, 250, ARMS_DEALER_ACCEPTS_GIFTS , 250, 250, 0, 1, 10, 0, 100, 1, 2, false, true },
|
||||||
/* Bar Bro 2 */ { 1.0f, 1.0f, PETER, ARMS_DEALER_SELLS_ONLY, 250, ARMS_DEALER_ACCEPTS_GIFTS },
|
/* Bar Bro 2 */ { 1.0f, 1.0f, PETER, ARMS_DEALER_SELLS_ONLY, 250, ARMS_DEALER_ACCEPTS_GIFTS , 250, 250, 0, 1, 10, 0, 100, 1, 2, false, true },
|
||||||
/* Bar Bro 3 */ { 1.0f, 1.0f, ALBERTO, ARMS_DEALER_SELLS_ONLY, 250, ARMS_DEALER_ACCEPTS_GIFTS },
|
/* Bar Bro 3 */ { 1.0f, 1.0f, ALBERTO, ARMS_DEALER_SELLS_ONLY, 250, ARMS_DEALER_ACCEPTS_GIFTS , 250, 250, 0, 1, 10, 0, 100, 1, 2, false, true },
|
||||||
/* Bar Bro 4 */ { 1.0f, 1.0f, CARLO, ARMS_DEALER_SELLS_ONLY, 250, ARMS_DEALER_ACCEPTS_GIFTS },
|
/* Bar Bro 4 */ { 1.0f, 1.0f, CARLO, ARMS_DEALER_SELLS_ONLY, 250, ARMS_DEALER_ACCEPTS_GIFTS , 250, 250, 0, 1, 10, 0, 100, 1, 2, false, true },
|
||||||
|
|
||||||
/* Micky O'Brien*/ { 1.0f, 1.4f, MICKY, ARMS_DEALER_BUYS_ONLY, 10000, ARMS_DEALER_HAS_NO_INVENTORY | ARMS_DEALER_GIVES_CHANGE },
|
/* Micky O'Brien*/ { 1.0f, 1.4f, MICKY, ARMS_DEALER_BUYS_ONLY, 10000, ARMS_DEALER_HAS_NO_INVENTORY | ARMS_DEALER_GIVES_CHANGE, 10000, 10000, 0, 1, 10, 1, 10, 1, 2, false, true },
|
||||||
|
|
||||||
//Repair Repair
|
//Repair Repair
|
||||||
//Speed Cost
|
//Speed Cost
|
||||||
/* Arnie Brunzwell*/{ 0.1f, 0.8f, ARNIE, ARMS_DEALER_REPAIRS, 1500, ARMS_DEALER_HAS_NO_INVENTORY | ARMS_DEALER_GIVES_CHANGE },
|
/* Arnie Brunzwell*/{ 0.1f, 0.8f, ARNIE, ARMS_DEALER_REPAIRS, 1500, ARMS_DEALER_HAS_NO_INVENTORY | ARMS_DEALER_GIVES_CHANGE, 1500, 1500, 0, 1, 10, 1, 10, 1, 2, false, true },
|
||||||
/* Fredo */ { 0.6f, 0.6f, FREDO, ARMS_DEALER_REPAIRS, 1000, ARMS_DEALER_HAS_NO_INVENTORY | ARMS_DEALER_GIVES_CHANGE },
|
/* Fredo */ { 0.6f, 0.6f, FREDO, ARMS_DEALER_REPAIRS, 1000, ARMS_DEALER_HAS_NO_INVENTORY | ARMS_DEALER_GIVES_CHANGE, 1000, 1000, 0, 1, 10, 1, 10, 1, 2, false, true },
|
||||||
/* Perko */ { 1.0f, 0.4f, PERKO, ARMS_DEALER_REPAIRS, 1000, ARMS_DEALER_HAS_NO_INVENTORY | ARMS_DEALER_GIVES_CHANGE },
|
/* Perko */ { 1.0f, 0.4f, PERKO, ARMS_DEALER_REPAIRS, 1000, ARMS_DEALER_HAS_NO_INVENTORY | ARMS_DEALER_GIVES_CHANGE, 1000, 1000, 0, 1, 10, 1, 10, 1, 2, false, true },
|
||||||
|
|
||||||
/* Elgin */ { 1.0f, 1.0f, DRUGGIST, ARMS_DEALER_SELLS_ONLY, 500, ARMS_DEALER_ACCEPTS_GIFTS },
|
/* Elgin */ { 1.0f, 1.0f, DRUGGIST, ARMS_DEALER_SELLS_ONLY, 500, ARMS_DEALER_ACCEPTS_GIFTS , 500, 500, 0, 1, 10, 1, 10, 1, 2, false, true },
|
||||||
/* Manny */ { 1.0f, 1.0f, MANNY, ARMS_DEALER_SELLS_ONLY, 500, ARMS_DEALER_ACCEPTS_GIFTS },
|
/* Manny */ { 1.0f, 1.0f, MANNY, ARMS_DEALER_SELLS_ONLY, 500, ARMS_DEALER_ACCEPTS_GIFTS , 500, 500, 0, 1, 10, 1, 10, 1, 2, false, true },
|
||||||
|
|
||||||
};
|
};
|
||||||
|
std::vector<ARMS_DEALER_INFO> armsDealerInfo (NUM_ARMS_DEALERS);
|
||||||
|
|
||||||
|
|
||||||
// THESE GET SAVED/RESTORED/RESET
|
// THESE GET SAVED/RESTORED/RESET
|
||||||
@@ -146,6 +147,7 @@ void InitAllArmsDealers()
|
|||||||
UINT8 ubArmsDealer;
|
UINT8 ubArmsDealer;
|
||||||
|
|
||||||
ShutDownArmsDealers();
|
ShutDownArmsDealers();
|
||||||
|
|
||||||
//Initialize the initial status & inventory for each of the arms dealers
|
//Initialize the initial status & inventory for each of the arms dealers
|
||||||
for( ubArmsDealer = 0; ubArmsDealer < NUM_ARMS_DEALERS; ubArmsDealer++ )
|
for( ubArmsDealer = 0; ubArmsDealer < NUM_ARMS_DEALERS; ubArmsDealer++ )
|
||||||
{
|
{
|
||||||
@@ -167,10 +169,10 @@ void InitializeOneArmsDealer( UINT8 ubArmsDealer )
|
|||||||
gArmsDealersInventory.resize(gArmsDealersInventory.size() + 1);
|
gArmsDealersInventory.resize(gArmsDealersInventory.size() + 1);
|
||||||
|
|
||||||
//Reset the arms dealers cash on hand to the default initial value
|
//Reset the arms dealers cash on hand to the default initial value
|
||||||
gArmsDealerStatus[ ubArmsDealer ].uiArmsDealersCash = ArmsDealerInfo[ ubArmsDealer ].iInitialCash;
|
gArmsDealerStatus[ ubArmsDealer ].uiArmsDealersCash = armsDealerInfo[ ubArmsDealer ].iInitialCash;
|
||||||
|
|
||||||
//if the arms dealer isn't supposed to have any items (includes all repairmen)
|
//if the arms dealer isn't supposed to have any items (includes all repairmen)
|
||||||
if( ArmsDealerInfo[ ubArmsDealer ].uiFlags & ARMS_DEALER_HAS_NO_INVENTORY )
|
if( armsDealerInfo[ ubArmsDealer ].uiFlags & ARMS_DEALER_HAS_NO_INVENTORY )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -305,7 +307,7 @@ void SimulateArmsDealerCustomer()
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
//if the arms dealer isn't supposed to have any items (includes all repairmen)
|
//if the arms dealer isn't supposed to have any items (includes all repairmen)
|
||||||
if( ArmsDealerInfo[ ubArmsDealer ].uiFlags & ARMS_DEALER_HAS_NO_INVENTORY )
|
if( armsDealerInfo[ ubArmsDealer ].uiFlags & ARMS_DEALER_HAS_NO_INVENTORY )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
memset (&numPerfectItems, 0, sizeof(numPerfectItems));
|
memset (&numPerfectItems, 0, sizeof(numPerfectItems));
|
||||||
@@ -380,10 +382,13 @@ void DailyCheckOnItemQuantities()
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
//Reset the arms dealers cash on hand to the default initial value
|
//Reset the arms dealers cash on hand to the default initial value
|
||||||
gArmsDealerStatus[ ubArmsDealer ].uiArmsDealersCash = ArmsDealerInfo[ ubArmsDealer ].iInitialCash;
|
gArmsDealerStatus[ ubArmsDealer ].uiArmsDealersCash = gArmsDealerStatus[ ubArmsDealer ].uiArmsDealersCash * armsDealerInfo[ ubArmsDealer ].dailyRetained / 100 +
|
||||||
|
armsDealerInfo[ ubArmsDealer ].dailyIncrement;
|
||||||
|
if (gArmsDealerStatus[ ubArmsDealer ].uiArmsDealersCash > armsDealerInfo[ ubArmsDealer ].dailyMaximum)
|
||||||
|
gArmsDealerStatus[ ubArmsDealer ].uiArmsDealersCash = armsDealerInfo[ ubArmsDealer ].dailyMaximum;
|
||||||
|
|
||||||
//if the arms dealer isn't supposed to have any items (includes all repairmen)
|
//if the arms dealer isn't supposed to have any items (includes all repairmen)
|
||||||
if( ArmsDealerInfo[ ubArmsDealer ].uiFlags & ARMS_DEALER_HAS_NO_INVENTORY )
|
if( armsDealerInfo[ ubArmsDealer ].uiFlags & ARMS_DEALER_HAS_NO_INVENTORY )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int numTotalItems[MAXITEMS] = { 0 };
|
int numTotalItems[MAXITEMS] = { 0 };
|
||||||
@@ -437,15 +442,7 @@ void DailyCheckOnItemQuantities()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( ( ubArmsDealer == ARMS_DEALER_TONY ) || ( ubArmsDealer == ARMS_DEALER_DEVIN ) )
|
ubReorderDays = ( UINT8) ( armsDealerInfo[ ubArmsDealer ].daysDelayMin + Random( armsDealerInfo[ ubArmsDealer ].daysDelayMax - armsDealerInfo[ ubArmsDealer ].daysDelayMin ) );
|
||||||
{
|
|
||||||
// the stuff Tony and Devin sell is imported, so it takes longer to arrive (for game balance)
|
|
||||||
ubReorderDays = ( UINT8) ( 2 + Random( 2 ) ); // 2-3 days
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ubReorderDays = ( UINT8) ( 1 + Random( 2 ) ); // 1-2 days
|
|
||||||
}
|
|
||||||
|
|
||||||
//Determine when the inventory should arrive
|
//Determine when the inventory should arrive
|
||||||
uiArrivalDay = GetWorldDay() + ubReorderDays; // consider changing this to minutes
|
uiArrivalDay = GetWorldDay() + ubReorderDays; // consider changing this to minutes
|
||||||
@@ -1018,7 +1015,7 @@ BOOLEAN IsMercADealer( UINT8 ubMercID )
|
|||||||
//loop through the list of arms dealers
|
//loop through the list of arms dealers
|
||||||
for( cnt=0; cnt<NUM_ARMS_DEALERS; cnt++ )
|
for( cnt=0; cnt<NUM_ARMS_DEALERS; cnt++ )
|
||||||
{
|
{
|
||||||
if( ArmsDealerInfo[ cnt ].ubShopKeeperID == ubMercID )
|
if( armsDealerInfo[ cnt ].ubShopKeeperID == ubMercID )
|
||||||
return( TRUE );
|
return( TRUE );
|
||||||
}
|
}
|
||||||
return( FALSE );
|
return( FALSE );
|
||||||
@@ -1033,7 +1030,7 @@ INT8 GetArmsDealerIDFromMercID( UINT8 ubMercID )
|
|||||||
//loop through the list of arms dealers
|
//loop through the list of arms dealers
|
||||||
for( cnt=0; cnt<NUM_ARMS_DEALERS; cnt++ )
|
for( cnt=0; cnt<NUM_ARMS_DEALERS; cnt++ )
|
||||||
{
|
{
|
||||||
if( ArmsDealerInfo[ cnt ].ubShopKeeperID == ubMercID )
|
if( armsDealerInfo[ cnt ].ubShopKeeperID == ubMercID )
|
||||||
return( cnt );
|
return( cnt );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1044,13 +1041,13 @@ INT8 GetArmsDealerIDFromMercID( UINT8 ubMercID )
|
|||||||
|
|
||||||
UINT8 GetTypeOfArmsDealer( UINT8 ubDealerID )
|
UINT8 GetTypeOfArmsDealer( UINT8 ubDealerID )
|
||||||
{
|
{
|
||||||
return( ArmsDealerInfo[ ubDealerID ].ubTypeOfArmsDealer );
|
return( armsDealerInfo[ ubDealerID ].ubTypeOfArmsDealer );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOLEAN DoesDealerDoRepairs( UINT8 ubArmsDealer )
|
BOOLEAN DoesDealerDoRepairs( UINT8 ubArmsDealer )
|
||||||
{
|
{
|
||||||
if( ArmsDealerInfo[ ubArmsDealer ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ ubArmsDealer ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
return( TRUE );
|
return( TRUE );
|
||||||
else
|
else
|
||||||
return( FALSE );
|
return( FALSE );
|
||||||
@@ -1099,7 +1096,7 @@ BOOLEAN RepairmanIsFixingItemsButNoneAreDoneYet( UINT8 ubProfileID )
|
|||||||
|
|
||||||
BOOLEAN CanDealerTransactItem( UINT8 ubArmsDealer, UINT16 usItemIndex, BOOLEAN fPurchaseFromPlayer )
|
BOOLEAN CanDealerTransactItem( UINT8 ubArmsDealer, UINT16 usItemIndex, BOOLEAN fPurchaseFromPlayer )
|
||||||
{
|
{
|
||||||
switch ( ArmsDealerInfo[ ubArmsDealer ].ubTypeOfArmsDealer )
|
switch ( armsDealerInfo[ ubArmsDealer ].ubTypeOfArmsDealer )
|
||||||
{
|
{
|
||||||
case ARMS_DEALER_SELLS_ONLY:
|
case ARMS_DEALER_SELLS_ONLY:
|
||||||
if ( fPurchaseFromPlayer )
|
if ( fPurchaseFromPlayer )
|
||||||
@@ -1143,7 +1140,7 @@ BOOLEAN CanDealerTransactItem( UINT8 ubArmsDealer, UINT16 usItemIndex, BOOLEAN f
|
|||||||
return( CanDealerRepairItem( ubArmsDealer, usItemIndex ) );
|
return( CanDealerRepairItem( ubArmsDealer, usItemIndex ) );
|
||||||
|
|
||||||
default:
|
default:
|
||||||
AssertMsg( FALSE, String( "CanDealerTransactItem(), type of dealer %d. AM 0.", ArmsDealerInfo[ ubArmsDealer ].ubTypeOfArmsDealer ) );
|
AssertMsg( FALSE, String( "CanDealerTransactItem(), type of dealer %d. AM 0.", armsDealerInfo[ ubArmsDealer ].ubTypeOfArmsDealer ) );
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1237,8 +1234,8 @@ UINT8 DetermineDealerItemCondition( UINT8 ubArmsDealer, UINT16 usItemIndex )
|
|||||||
if ( ( Item[ usItemIndex ].damageable ) && !ItemContainsLiquid( usItemIndex ) )
|
if ( ( Item[ usItemIndex ].damageable ) && !ItemContainsLiquid( usItemIndex ) )
|
||||||
{
|
{
|
||||||
// if he ONLY has used items, or 50% of the time if he carries both used & new items
|
// if he ONLY has used items, or 50% of the time if he carries both used & new items
|
||||||
if ( ( ArmsDealerInfo[ ubArmsDealer ].uiFlags & ARMS_DEALER_ONLY_USED_ITEMS ) ||
|
if ( ( armsDealerInfo[ ubArmsDealer ].uiFlags & ARMS_DEALER_ONLY_USED_ITEMS ) ||
|
||||||
( ( ArmsDealerInfo[ ubArmsDealer ].uiFlags & ARMS_DEALER_SOME_USED_ITEMS ) && ( Random( 100 ) < 50 ) ) )
|
( ( armsDealerInfo[ ubArmsDealer ].uiFlags & ARMS_DEALER_SOME_USED_ITEMS ) && ( Random( 100 ) < 50 ) ) )
|
||||||
{
|
{
|
||||||
// make the item a used one
|
// make the item a used one
|
||||||
ubCondition = (UINT8)(20 + Random( 60 ));
|
ubCondition = (UINT8)(20 + Random( 60 ));
|
||||||
@@ -1861,7 +1858,7 @@ UINT32 CalculateSimpleItemRepairTime( UINT8 ubArmsDealer, UINT16 usItemIndex, IN
|
|||||||
// For a repairman, his BUY modifier controls his REPAIR SPEED (1.0 means minutes to repair = price in $)
|
// For a repairman, his BUY modifier controls his REPAIR SPEED (1.0 means minutes to repair = price in $)
|
||||||
// with a REPAIR SPEED of 1.0, typical gun price of $2000, and a REPAIR COST of 0.5 this works out to 16.6 hrs
|
// with a REPAIR SPEED of 1.0, typical gun price of $2000, and a REPAIR COST of 0.5 this works out to 16.6 hrs
|
||||||
// for a full 100% status repair... Not bad.
|
// for a full 100% status repair... Not bad.
|
||||||
uiTimeToRepair = (UINT32)( uiRepairCost * ArmsDealerInfo[ ubArmsDealer ].dRepairSpeed );
|
uiTimeToRepair = (UINT32)( uiRepairCost * armsDealerInfo[ ubArmsDealer ].dRepairSpeed );
|
||||||
|
|
||||||
// repairs on electronic items take twice as long if the guy doesn't have the skill
|
// repairs on electronic items take twice as long if the guy doesn't have the skill
|
||||||
// for dealers, this means anyone but Fredo the Electronics guy takes twice as long (but doesn't charge double)
|
// for dealers, this means anyone but Fredo the Electronics guy takes twice as long (but doesn't charge double)
|
||||||
@@ -1913,7 +1910,7 @@ UINT32 CalculateSimpleItemRepairCost( UINT8 ubArmsDealer, UINT16 usItemIndex, IN
|
|||||||
|
|
||||||
// figure out the full value of the item, modified by this dealer's personal Sell (i.e. repair cost) modifier
|
// figure out the full value of the item, modified by this dealer's personal Sell (i.e. repair cost) modifier
|
||||||
// don't use CalcShopKeeperItemPrice - we want FULL value!!!
|
// don't use CalcShopKeeperItemPrice - we want FULL value!!!
|
||||||
uiItemCost = (UINT32)(( Item[ usItemIndex ].usPrice * ArmsDealerInfo[ ubArmsDealer ].dRepairCost ) );
|
uiItemCost = (UINT32)(( Item[ usItemIndex ].usPrice * armsDealerInfo[ ubArmsDealer ].dRepairCost ) );
|
||||||
|
|
||||||
// get item's repair ease, for each + point is 10% easier, each - point is 10% harder to repair
|
// get item's repair ease, for each + point is 10% easier, each - point is 10% harder to repair
|
||||||
sRepairCostAdj = 100 - ( 10 * Item[ usItemIndex ].bRepairEase );
|
sRepairCostAdj = 100 - ( 10 * Item[ usItemIndex ].bRepairEase );
|
||||||
@@ -2132,7 +2129,7 @@ BOOLEAN GetArmsDealerShopHours( UINT8 ubArmsDealer, UINT32 *puiOpeningTime, UINT
|
|||||||
{
|
{
|
||||||
SOLDIERTYPE *pSoldier;
|
SOLDIERTYPE *pSoldier;
|
||||||
|
|
||||||
pSoldier = FindSoldierByProfileID( ArmsDealerInfo[ ubArmsDealer ].ubShopKeeperID, FALSE );
|
pSoldier = FindSoldierByProfileID( armsDealerInfo[ ubArmsDealer ].ubShopKeeperID, FALSE );
|
||||||
if ( pSoldier == NULL )
|
if ( pSoldier == NULL )
|
||||||
{
|
{
|
||||||
return( FALSE );
|
return( FALSE );
|
||||||
|
|||||||
@@ -145,6 +145,18 @@ typedef struct
|
|||||||
UINT8 ubTypeOfArmsDealer; // Whether he buys/sells, sells, buys, or repairs
|
UINT8 ubTypeOfArmsDealer; // Whether he buys/sells, sells, buys, or repairs
|
||||||
INT32 iInitialCash; // How much cash dealer starts with (we now reset to this amount once / day)
|
INT32 iInitialCash; // How much cash dealer starts with (we now reset to this amount once / day)
|
||||||
UINT32 uiFlags; // various flags which control the dealer's operations
|
UINT32 uiFlags; // various flags which control the dealer's operations
|
||||||
|
|
||||||
|
UINT32 dailyIncrement;
|
||||||
|
UINT32 dailyMaximum;
|
||||||
|
UINT32 dailyRetained; // %
|
||||||
|
UINT32 minCoolness; // 0-10
|
||||||
|
UINT32 maxCoolness; // 0-10
|
||||||
|
UINT32 addToCoolness; // 0-10
|
||||||
|
UINT32 coolnessProgressRate; // %
|
||||||
|
UINT32 daysDelayMin; // 1-10
|
||||||
|
UINT32 daysDelayMax; // 1-10
|
||||||
|
bool useBRSetting;
|
||||||
|
bool allInventoryAlwaysAvailable;
|
||||||
} ARMS_DEALER_INFO;
|
} ARMS_DEALER_INFO;
|
||||||
|
|
||||||
|
|
||||||
@@ -287,7 +299,8 @@ typedef std::list<DEALER_SPECIAL_ITEM> DealerItemList;
|
|||||||
extern std::vector<DealerItemList> gArmsDealersInventory;
|
extern std::vector<DealerItemList> gArmsDealersInventory;
|
||||||
void OrderDealerItems(int armsDealer, int usItem, int numItems, int arrivalDay);
|
void OrderDealerItems(int armsDealer, int usItem, int numItems, int arrivalDay);
|
||||||
|
|
||||||
extern ARMS_DEALER_INFO ArmsDealerInfo[ NUM_ARMS_DEALERS ];
|
extern const ARMS_DEALER_INFO DefaultarmsDealerInfo[ NUM_ARMS_DEALERS ];
|
||||||
|
extern std::vector<ARMS_DEALER_INFO> armsDealerInfo;
|
||||||
extern ARMS_DEALER_STATUS gArmsDealerStatus[ NUM_ARMS_DEALERS ];
|
extern ARMS_DEALER_STATUS gArmsDealerStatus[ NUM_ARMS_DEALERS ];
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -885,8 +885,10 @@ DEALER_POSSIBLE_INV *GetPointerToDealersPossibleInventory( UINT8 ubArmsDealerID
|
|||||||
//Madd: added boolean fUsed
|
//Madd: added boolean fUsed
|
||||||
UINT8 GetCurrentSuitabilityForItem( INT8 bArmsDealer, UINT16 usItemIndex, BOOLEAN fUsed )
|
UINT8 GetCurrentSuitabilityForItem( INT8 bArmsDealer, UINT16 usItemIndex, BOOLEAN fUsed )
|
||||||
{
|
{
|
||||||
UINT8 ubItemCoolness;
|
unsigned ubItemCoolness;
|
||||||
UINT8 ubMinCoolness, ubMaxCoolness;
|
unsigned ubMinCoolness, ubMaxCoolness;
|
||||||
|
|
||||||
|
const int bobbyRaysID = -1;
|
||||||
|
|
||||||
|
|
||||||
// item suitability varies with the player's maximum progress through the game. The farther he gets, the better items
|
// item suitability varies with the player's maximum progress through the game. The farther he gets, the better items
|
||||||
@@ -899,7 +901,6 @@ UINT8 GetCurrentSuitabilityForItem( INT8 bArmsDealer, UINT16 usItemIndex, BOOLEA
|
|||||||
}
|
}
|
||||||
|
|
||||||
// items normally not sold at shops are unsuitable
|
// items normally not sold at shops are unsuitable
|
||||||
// if ( Item[ usItemIndex ].fFlags & ITEM_NOT_BUYABLE )
|
|
||||||
if ( Item[ usItemIndex ].notbuyable )
|
if ( Item[ usItemIndex ].notbuyable )
|
||||||
{
|
{
|
||||||
return(ITEM_SUITABILITY_NONE);
|
return(ITEM_SUITABILITY_NONE);
|
||||||
@@ -915,25 +916,12 @@ UINT8 GetCurrentSuitabilityForItem( INT8 bArmsDealer, UINT16 usItemIndex, BOOLEA
|
|||||||
}
|
}
|
||||||
|
|
||||||
// the following staple items are always deemed highly suitable regardless of player's progress:
|
// the following staple items are always deemed highly suitable regardless of player's progress:
|
||||||
//switch (usItemIndex)
|
|
||||||
//{
|
|
||||||
// case FIRSTAIDKIT:
|
|
||||||
// case MEDICKIT:
|
|
||||||
// case TOOLKIT:
|
|
||||||
// case LOCKSMITHKIT:
|
|
||||||
|
|
||||||
// case CANTEEN:
|
|
||||||
// case CROWBAR:
|
|
||||||
// case JAR:
|
|
||||||
// case JAR_ELIXIR:
|
|
||||||
// case JAR_CREATURE_BLOOD:
|
|
||||||
if ( Item[usItemIndex].medical || Item[usItemIndex].canteen || Item[usItemIndex].medicalkit || Item[usItemIndex].locksmithkit || Item[usItemIndex].toolkit || Item[usItemIndex].crowbar || Item[usItemIndex].jar )
|
if ( Item[usItemIndex].medical || Item[usItemIndex].canteen || Item[usItemIndex].medicalkit || Item[usItemIndex].locksmithkit || Item[usItemIndex].toolkit || Item[usItemIndex].crowbar || Item[usItemIndex].jar )
|
||||||
return(ITEM_SUITABILITY_ALWAYS);
|
return(ITEM_SUITABILITY_ALWAYS);
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
// If it's not BobbyRay, Tony, or Devin
|
// If it's not BobbyRay, Tony, or Devin
|
||||||
if ((bArmsDealer != -1) && (bArmsDealer != ARMS_DEALER_TONY) && (bArmsDealer != ARMS_DEALER_DEVIN))
|
if (bArmsDealer != bobbyRaysID && armsDealerInfo[bArmsDealer].allInventoryAlwaysAvailable)
|
||||||
{
|
{
|
||||||
// all the other dealers have very limited inventories, so their suitability remains constant at all times in game
|
// all the other dealers have very limited inventories, so their suitability remains constant at all times in game
|
||||||
return(ITEM_SUITABILITY_HIGH);
|
return(ITEM_SUITABILITY_HIGH);
|
||||||
@@ -942,14 +930,15 @@ UINT8 GetCurrentSuitabilityForItem( INT8 bArmsDealer, UINT16 usItemIndex, BOOLEA
|
|||||||
|
|
||||||
// figure out the appropriate range of coolness based on player's maximum progress so far
|
// figure out the appropriate range of coolness based on player's maximum progress so far
|
||||||
|
|
||||||
ubMinCoolness = HighestPlayerProgressPercentage() / 10;
|
|
||||||
ubMaxCoolness = ( HighestPlayerProgressPercentage() / 10 ) + 1;
|
|
||||||
|
|
||||||
if ( bArmsDealer == -1 )
|
if ( bArmsDealer == bobbyRaysID )
|
||||||
ubMinCoolness = 1;
|
ubMinCoolness = 1;
|
||||||
|
else
|
||||||
|
ubMinCoolness = HighestPlayerProgressPercentage() * armsDealerInfo[bArmsDealer].coolnessProgressRate / 100;
|
||||||
|
ubMaxCoolness = ubMinCoolness + 1;
|
||||||
|
|
||||||
//Madd: Bobby Ray's will sell higher coolness stuff if it's used, and may also have a better selection at the start of the game, depending on selection
|
//Madd: Bobby Ray's will sell higher coolness stuff if it's used, and may also have a better selection at the start of the game, depending on selection
|
||||||
if ( bArmsDealer == -1 && gGameOptions.ubBobbyRay > BR_GOOD )
|
if ( (bArmsDealer == bobbyRaysID || armsDealerInfo[bArmsDealer].useBRSetting) && gGameOptions.ubBobbyRay > BR_GOOD )
|
||||||
{
|
{
|
||||||
ubMaxCoolness += gGameOptions.ubBobbyRay - 1;
|
ubMaxCoolness += gGameOptions.ubBobbyRay - 1;
|
||||||
if (fUsed )
|
if (fUsed )
|
||||||
@@ -960,6 +949,13 @@ UINT8 GetCurrentSuitabilityForItem( INT8 bArmsDealer, UINT16 usItemIndex, BOOLEA
|
|||||||
|
|
||||||
// WDS - Improve Tony's and Devin's inventory like BR's
|
// WDS - Improve Tony's and Devin's inventory like BR's
|
||||||
// Tony has the better stuff sooner (than Bobby R's)
|
// Tony has the better stuff sooner (than Bobby R's)
|
||||||
|
if (bArmsDealer >= 0) {
|
||||||
|
ubMinCoolness += armsDealerInfo[bArmsDealer].addToCoolness;
|
||||||
|
ubMaxCoolness += armsDealerInfo[bArmsDealer].addToCoolness;
|
||||||
|
ubMinCoolness = max( armsDealerInfo[bArmsDealer].minCoolness, min( 9, ubMinCoolness ) );
|
||||||
|
ubMaxCoolness = max( 2, min( armsDealerInfo[bArmsDealer].maxCoolness, ubMaxCoolness ) );
|
||||||
|
}
|
||||||
|
/*
|
||||||
if (bArmsDealer == ARMS_DEALER_TONY)
|
if (bArmsDealer == ARMS_DEALER_TONY)
|
||||||
{
|
{
|
||||||
ubMinCoolness += 1;
|
ubMinCoolness += 1;
|
||||||
@@ -984,12 +980,12 @@ UINT8 GetCurrentSuitabilityForItem( INT8 bArmsDealer, UINT16 usItemIndex, BOOLEA
|
|||||||
ubMaxCoolness += gGameOptions.ubBobbyRay;
|
ubMaxCoolness += gGameOptions.ubBobbyRay;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
ubMinCoolness = max( 1, min( 9, ubMinCoolness ) );
|
ubMinCoolness = max( 1, min( 9, ubMinCoolness ) );
|
||||||
ubMaxCoolness = max( 2, min( 10, ubMaxCoolness ) );
|
ubMaxCoolness = max( 2, min( 10, ubMaxCoolness ) );
|
||||||
|
|
||||||
if ( bArmsDealer == -1 )
|
if ( bArmsDealer == bobbyRaysID )
|
||||||
{
|
{
|
||||||
//Madd: BR's always sells ammo for its guns
|
//Madd: BR's always sells ammo for its guns
|
||||||
if (Item[usItemIndex].usItemClass == IC_AMMO && ubItemCoolness <= ubMaxCoolness )
|
if (Item[usItemIndex].usItemClass == IC_AMMO && ubItemCoolness <= ubMaxCoolness )
|
||||||
|
|||||||
@@ -861,7 +861,7 @@ BOOLEAN EnterShopKeeperInterface()
|
|||||||
//but if we are physically too far away, we don't have extended arms!
|
//but if we are physically too far away, we don't have extended arms!
|
||||||
|
|
||||||
SOLDIERTYPE* pSoldier = MercPtrs[ gusSelectedSoldier ];
|
SOLDIERTYPE* pSoldier = MercPtrs[ gusSelectedSoldier ];
|
||||||
SOLDIERTYPE* pShopkeeper = FindSoldierByProfileID( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID, FALSE );
|
SOLDIERTYPE* pShopkeeper = FindSoldierByProfileID( armsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID, FALSE );
|
||||||
if ( GetRangeFromGridNoDiff( pSoldier->sGridNo, pShopkeeper->sGridNo ) > NPC_TALK_RADIUS )
|
if ( GetRangeFromGridNoDiff( pSoldier->sGridNo, pShopkeeper->sGridNo ) > NPC_TALK_RADIUS )
|
||||||
{
|
{
|
||||||
//so now we know we are too far away to trade, so instead of just quitting,
|
//so now we know we are too far away to trade, so instead of just quitting,
|
||||||
@@ -1069,7 +1069,7 @@ ATM:
|
|||||||
SpecifyDisabledButtonStyle( guiSKI_TransactionButton, DISABLED_STYLE_HATCHED );
|
SpecifyDisabledButtonStyle( guiSKI_TransactionButton, DISABLED_STYLE_HATCHED );
|
||||||
|
|
||||||
//if the dealer repairs, use the repair fast help text for the transaction button
|
//if the dealer repairs, use the repair fast help text for the transaction button
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
SetButtonFastHelpText( guiSKI_TransactionButton, SkiMessageBoxText[ SKI_REPAIR_TRANSACTION_BUTTON_HELP_TEXT ] );
|
SetButtonFastHelpText( guiSKI_TransactionButton, SkiMessageBoxText[ SKI_REPAIR_TRANSACTION_BUTTON_HELP_TEXT ] );
|
||||||
else
|
else
|
||||||
SetButtonFastHelpText( guiSKI_TransactionButton, SkiMessageBoxText[ SKI_TRANSACTION_BUTTON_HELP_TEXT ] );
|
SetButtonFastHelpText( guiSKI_TransactionButton, SkiMessageBoxText[ SKI_TRANSACTION_BUTTON_HELP_TEXT ] );
|
||||||
@@ -1132,7 +1132,7 @@ ATM:
|
|||||||
PlayersOfferArea[x].initialize();
|
PlayersOfferArea[x].initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
HandlePossibleRepairDelays();
|
HandlePossibleRepairDelays();
|
||||||
}
|
}
|
||||||
@@ -1152,7 +1152,7 @@ ATM:
|
|||||||
memset( &gfCommonQuoteUsedThisSession, FALSE, sizeof( gfCommonQuoteUsedThisSession ) );
|
memset( &gfCommonQuoteUsedThisSession, FALSE, sizeof( gfCommonQuoteUsedThisSession ) );
|
||||||
|
|
||||||
//Init the shopkeepers face
|
//Init the shopkeepers face
|
||||||
InitShopKeepersFace( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID );
|
InitShopKeepersFace( armsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID );
|
||||||
|
|
||||||
gfDoneBusinessThisSession = FALSE;
|
gfDoneBusinessThisSession = FALSE;
|
||||||
|
|
||||||
@@ -1180,7 +1180,7 @@ ATM:
|
|||||||
bool fAddedOK = false;
|
bool fAddedOK = false;
|
||||||
//if this is NOT a repair dealer or he is is but there is enough space in the player's offer area
|
//if this is NOT a repair dealer or he is is but there is enough space in the player's offer area
|
||||||
// (you can't be out of space if it isn't a repairman, only they can fill it up with repaired items!)
|
// (you can't be out of space if it isn't a repairman, only they can fill it up with repaired items!)
|
||||||
if( ( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS ) ||
|
if( ( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS ) ||
|
||||||
( CountNumberOfItemsInThePlayersOfferArea( ) < SKI_NUM_ARMS_DEALERS_INV_SLOTS ) )
|
( CountNumberOfItemsInThePlayersOfferArea( ) < SKI_NUM_ARMS_DEALERS_INV_SLOTS ) )
|
||||||
{
|
{
|
||||||
if ( OfferObjectToDealer( &(gItemToAdd.ItemObject), gpSMCurrentMerc->ubProfile, NO_SLOT ) )
|
if ( OfferObjectToDealer( &(gItemToAdd.ItemObject), gpSMCurrentMerc->ubProfile, NO_SLOT ) )
|
||||||
@@ -1232,7 +1232,7 @@ ATM:
|
|||||||
|
|
||||||
BOOLEAN InitShopKeepersFace( UINT8 ubMercID )
|
BOOLEAN InitShopKeepersFace( UINT8 ubMercID )
|
||||||
{
|
{
|
||||||
SOLDIERTYPE *pSoldier = FindSoldierByProfileID( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID, FALSE );
|
SOLDIERTYPE *pSoldier = FindSoldierByProfileID( armsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID, FALSE );
|
||||||
|
|
||||||
if( pSoldier == NULL )
|
if( pSoldier == NULL )
|
||||||
{
|
{
|
||||||
@@ -1505,7 +1505,7 @@ BOOLEAN RenderShopKeeperInterface()
|
|||||||
DrawTextToScreen( SKI_Text[ SKI_TEXT_MERCHADISE_IN_STOCK ], SKI_MAIN_TITLE_X, SKI_MAIN_TITLE_Y, SKI_MAIN_TITLE_WIDTH, SKI_TITLE_FONT, SKI_TITLE_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
|
DrawTextToScreen( SKI_Text[ SKI_TEXT_MERCHADISE_IN_STOCK ], SKI_MAIN_TITLE_X, SKI_MAIN_TITLE_Y, SKI_MAIN_TITLE_WIDTH, SKI_TITLE_FONT, SKI_TITLE_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
//Display the Repair cost text
|
//Display the Repair cost text
|
||||||
DisplayWrappedString( SKI_TOTAL_COST_X, SKI_TOTAL_COST_Y, SKI_TOTAL_COST_WIDTH, 2, SKI_LABEL_FONT, SKI_TITLE_COLOR, SKI_Text[ SKI_TEXT_REPAIR_COST ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED);
|
DisplayWrappedString( SKI_TOTAL_COST_X, SKI_TOTAL_COST_Y, SKI_TOTAL_COST_WIDTH, 2, SKI_LABEL_FONT, SKI_TITLE_COLOR, SKI_Text[ SKI_TEXT_REPAIR_COST ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED);
|
||||||
@@ -1735,7 +1735,7 @@ void DisplayAllDealersCash()
|
|||||||
for( bArmsDealer=0; bArmsDealer<NUM_ARMS_DEALERS; bArmsDealer++ )
|
for( bArmsDealer=0; bArmsDealer<NUM_ARMS_DEALERS; bArmsDealer++ )
|
||||||
{
|
{
|
||||||
//Display the shopkeeper's name
|
//Display the shopkeeper's name
|
||||||
DrawTextToScreen( gMercProfiles[ ArmsDealerInfo[ bArmsDealer ].ubShopKeeperID ].zNickname, SCREEN_X_OFFSET + 540, SCREEN_Y_OFFSET + usPosY, 0, FONT10ARIAL, SKI_TITLE_COLOR, FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED );
|
DrawTextToScreen( gMercProfiles[ armsDealerInfo[ bArmsDealer ].ubShopKeeperID ].zNickname, SCREEN_X_OFFSET + 540, SCREEN_Y_OFFSET + usPosY, 0, FONT10ARIAL, SKI_TITLE_COLOR, FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED );
|
||||||
|
|
||||||
//Display the arms dealer cash on hand
|
//Display the arms dealer cash on hand
|
||||||
swprintf( zTemp, L"%d", gArmsDealerStatus[ bArmsDealer ].uiArmsDealersCash );
|
swprintf( zTemp, L"%d", gArmsDealerStatus[ bArmsDealer ].uiArmsDealersCash );
|
||||||
@@ -1876,7 +1876,7 @@ void CreateSkiInventorySlotMouseRegions( )
|
|||||||
MSYS_SetRegionUserData( &gDealersInventoryMouseRegions[ ubCnt ], 1, ARMS_DEALER_INVENTORY );
|
MSYS_SetRegionUserData( &gDealersInventoryMouseRegions[ ubCnt ], 1, ARMS_DEALER_INVENTORY );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
//Small Faces
|
//Small Faces
|
||||||
MSYS_DefineRegion( &gRepairmanInventorySmallFaceMouseRegions[ ubCnt ], (UINT16)(usPosX+SKI_SMALL_FACE_OFFSET_X), (UINT16)(usPosY), (INT16)(usPosX + SKI_SMALL_FACE_OFFSET_X + SKI_SMALL_FACE_WIDTH), (INT16)(usPosY+ SKI_SMALL_FACE_HEIGHT), MSYS_PRIORITY_HIGH+1,
|
MSYS_DefineRegion( &gRepairmanInventorySmallFaceMouseRegions[ ubCnt ], (UINT16)(usPosX+SKI_SMALL_FACE_OFFSET_X), (UINT16)(usPosY), (INT16)(usPosX + SKI_SMALL_FACE_OFFSET_X + SKI_SMALL_FACE_WIDTH), (INT16)(usPosY+ SKI_SMALL_FACE_HEIGHT), MSYS_PRIORITY_HIGH+1,
|
||||||
@@ -1908,7 +1908,7 @@ void CreateSkiInventorySlotMouseRegions( )
|
|||||||
|
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
//Small Faces
|
//Small Faces
|
||||||
MSYS_DefineRegion( &gDealersOfferSlotsSmallFaceMouseRegions[ ubCnt ], (UINT16)(usPosX+SKI_SMALL_FACE_OFFSET_X), (UINT16)(usPosY), (INT16)(usPosX + SKI_SMALL_FACE_OFFSET_X + SKI_SMALL_FACE_WIDTH), (INT16)(usPosY+ SKI_SMALL_FACE_HEIGHT), MSYS_PRIORITY_HIGH+1,
|
MSYS_DefineRegion( &gDealersOfferSlotsSmallFaceMouseRegions[ ubCnt ], (UINT16)(usPosX+SKI_SMALL_FACE_OFFSET_X), (UINT16)(usPosY), (INT16)(usPosX + SKI_SMALL_FACE_OFFSET_X + SKI_SMALL_FACE_WIDTH), (INT16)(usPosY+ SKI_SMALL_FACE_HEIGHT), MSYS_PRIORITY_HIGH+1,
|
||||||
@@ -1941,7 +1941,7 @@ void CreateSkiInventorySlotMouseRegions( )
|
|||||||
MSYS_SetRegionUserData( &gPlayersOfferSlotsMouseRegions[ ubCnt ], 0, ubCnt);
|
MSYS_SetRegionUserData( &gPlayersOfferSlotsMouseRegions[ ubCnt ], 0, ubCnt);
|
||||||
/*
|
/*
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
MSYS_SetRegionUserData( &gPlayersOfferSlotsSmallFaceMouseRegions[ ubCnt ], 1, PLAYERS_OFFER_AREA );
|
MSYS_SetRegionUserData( &gPlayersOfferSlotsSmallFaceMouseRegions[ ubCnt ], 1, PLAYERS_OFFER_AREA );
|
||||||
}
|
}
|
||||||
@@ -1972,7 +1972,7 @@ void DestroySkiInventorySlotMouseRegions( )
|
|||||||
MSYS_RemoveRegion( &gDealersInventoryMouseRegions[ i ] );
|
MSYS_RemoveRegion( &gDealersInventoryMouseRegions[ i ] );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
MSYS_RemoveRegion( &gRepairmanInventorySmallFaceMouseRegions[ i ] );
|
MSYS_RemoveRegion( &gRepairmanInventorySmallFaceMouseRegions[ i ] );
|
||||||
}
|
}
|
||||||
@@ -1983,7 +1983,7 @@ void DestroySkiInventorySlotMouseRegions( )
|
|||||||
MSYS_RemoveRegion( &gDealersOfferSlotsMouseRegions[ i ] );
|
MSYS_RemoveRegion( &gDealersOfferSlotsMouseRegions[ i ] );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
MSYS_RemoveRegion( &gDealersOfferSlotsSmallFaceMouseRegions[ i ] );
|
MSYS_RemoveRegion( &gDealersOfferSlotsSmallFaceMouseRegions[ i ] );
|
||||||
}
|
}
|
||||||
@@ -2022,7 +2022,7 @@ void SelectDealersInventoryRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason
|
|||||||
if( !( gpTempDealersInventory[ ubSelectedInvSlot ].uiFlags & ARMS_INV_ITEM_SELECTED ) )
|
if( !( gpTempDealersInventory[ ubSelectedInvSlot ].uiFlags & ARMS_INV_ITEM_SELECTED ) )
|
||||||
{
|
{
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
// ignore left clicks on items under repair. Fully repaired items are moved out to player's slots automatically
|
// ignore left clicks on items under repair. Fully repaired items are moved out to player's slots automatically
|
||||||
}
|
}
|
||||||
@@ -2238,7 +2238,7 @@ void SelectDealersOfferSlotsRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason
|
|||||||
if( ArmsDealerOfferArea[ ubSelectedInvSlot ].fActive )
|
if( ArmsDealerOfferArea[ ubSelectedInvSlot ].fActive )
|
||||||
{
|
{
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
// return item to player
|
// return item to player
|
||||||
RemoveRepairItemFromDealersOfferArea( ubSelectedInvSlot );
|
RemoveRepairItemFromDealersOfferArea( ubSelectedInvSlot );
|
||||||
@@ -2269,13 +2269,13 @@ void SelectDealersOfferSlotsRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason
|
|||||||
if( ArmsDealerOfferArea[ ubSelectedInvSlot ].fActive )
|
if( ArmsDealerOfferArea[ ubSelectedInvSlot ].fActive )
|
||||||
{
|
{
|
||||||
//if this is a repair dealer
|
//if this is a repair dealer
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
//if we don't have an item, pick one up
|
//if we don't have an item, pick one up
|
||||||
if( gMoveingItem.sItemIndex == 0 )
|
if( gMoveingItem.sItemIndex == 0 )
|
||||||
{
|
{
|
||||||
//if the dealer is a repair dealer, allow the player to pick up the item
|
//if the dealer is a repair dealer, allow the player to pick up the item
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
BeginSkiItemPointer( ARMS_DEALER_OFFER_AREA, ubSelectedInvSlot, FALSE );
|
BeginSkiItemPointer( ARMS_DEALER_OFFER_AREA, ubSelectedInvSlot, FALSE );
|
||||||
}
|
}
|
||||||
@@ -2331,7 +2331,7 @@ void SelectDealersOfferSlotsRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason
|
|||||||
if( gMoveingItem.sItemIndex > 0 )
|
if( gMoveingItem.sItemIndex > 0 )
|
||||||
{
|
{
|
||||||
// we'd better talking to a repairman, cursor is locked out of this area while full for non-repairmen!
|
// we'd better talking to a repairman, cursor is locked out of this area while full for non-repairmen!
|
||||||
Assert( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS );
|
Assert( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS );
|
||||||
|
|
||||||
//Drop the item into the current slot
|
//Drop the item into the current slot
|
||||||
AddInventoryToSkiLocation( &gMoveingItem, ubSelectedInvSlot, ARMS_DEALER_OFFER_AREA );
|
AddInventoryToSkiLocation( &gMoveingItem, ubSelectedInvSlot, ARMS_DEALER_OFFER_AREA );
|
||||||
@@ -2610,10 +2610,10 @@ void DisplayArmsDealerCurrentInventoryPage( )
|
|||||||
fDisplayHatchOnItem = TRUE;
|
fDisplayHatchOnItem = TRUE;
|
||||||
}
|
}
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
else if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
else if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
//if the item is damaged
|
//if the item is damaged
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].uiFlags & ARMS_INV_ITEM_NOT_REPAIRED_YET )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].uiFlags & ARMS_INV_ITEM_NOT_REPAIRED_YET )
|
||||||
fDisplayHatchOnItem = TRUE;
|
fDisplayHatchOnItem = TRUE;
|
||||||
else
|
else
|
||||||
fDisplayHatchOnItem = FALSE;
|
fDisplayHatchOnItem = FALSE;
|
||||||
@@ -2644,7 +2644,7 @@ void DisplayArmsDealerCurrentInventoryPage( )
|
|||||||
SetSkiRegionHelpText( &gpTempDealersInventory[ usCnt ], &gDealersInventoryMouseRegions[sItemCount], ARMS_DEALER_INVENTORY );
|
SetSkiRegionHelpText( &gpTempDealersInventory[ usCnt ], &gDealersInventoryMouseRegions[sItemCount], ARMS_DEALER_INVENTORY );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
SetSkiFaceRegionHelpText( &gpTempDealersInventory[ usCnt ], &gRepairmanInventorySmallFaceMouseRegions[sItemCount], ARMS_DEALER_INVENTORY );
|
SetSkiFaceRegionHelpText( &gpTempDealersInventory[ usCnt ], &gRepairmanInventorySmallFaceMouseRegions[sItemCount], ARMS_DEALER_INVENTORY );
|
||||||
}
|
}
|
||||||
@@ -2672,7 +2672,7 @@ void DisplayArmsDealerCurrentInventoryPage( )
|
|||||||
SetSkiRegionHelpText( NULL, &gDealersInventoryMouseRegions[ sItemCount ], ARMS_DEALER_INVENTORY );
|
SetSkiRegionHelpText( NULL, &gDealersInventoryMouseRegions[ sItemCount ], ARMS_DEALER_INVENTORY );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
SetSkiFaceRegionHelpText( NULL, &gRepairmanInventorySmallFaceMouseRegions[ sItemCount ], ARMS_DEALER_INVENTORY );
|
SetSkiFaceRegionHelpText( NULL, &gRepairmanInventorySmallFaceMouseRegions[ sItemCount ], ARMS_DEALER_INVENTORY );
|
||||||
}
|
}
|
||||||
@@ -2774,7 +2774,7 @@ UINT32 DisplayInvSlot( UINT8 ubSlotNum, UINT16 usItemIndex, UINT16 usPosX, UINT1
|
|||||||
}
|
}
|
||||||
else if( ubItemArea == ARMS_DEALER_INVENTORY )
|
else if( ubItemArea == ARMS_DEALER_INVENTORY )
|
||||||
{
|
{
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
if( fHatchedOut && pItemObject->exists() == false )
|
if( fHatchedOut && pItemObject->exists() == false )
|
||||||
{
|
{
|
||||||
@@ -2783,7 +2783,7 @@ UINT32 DisplayInvSlot( UINT8 ubSlotNum, UINT16 usItemIndex, UINT16 usPosX, UINT1
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// show the UNIT price, not the total value of all if stacked
|
// show the UNIT price, not the total value of all if stacked
|
||||||
uiItemCost = CalcShopKeeperItemPrice( DEALER_SELLING, TRUE, usItemIndex, ArmsDealerInfo[ gbSelectedArmsDealerID ].dSellModifier, pItemObject );
|
uiItemCost = CalcShopKeeperItemPrice( DEALER_SELLING, TRUE, usItemIndex, armsDealerInfo[ gbSelectedArmsDealerID ].dSellModifier, pItemObject );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // UNDER REPAIR
|
else // UNDER REPAIR
|
||||||
@@ -2806,7 +2806,7 @@ UINT32 DisplayInvSlot( UINT8 ubSlotNum, UINT16 usItemIndex, UINT16 usPosX, UINT1
|
|||||||
}
|
}
|
||||||
else // DEALER'S OFFER AREA
|
else // DEALER'S OFFER AREA
|
||||||
{
|
{
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
//if the dealer repairs, there is an item here, therefore display the items owner's face
|
//if the dealer repairs, there is an item here, therefore display the items owner's face
|
||||||
fDisplayMercFace = TRUE;
|
fDisplayMercFace = TRUE;
|
||||||
@@ -2815,7 +2815,7 @@ UINT32 DisplayInvSlot( UINT8 ubSlotNum, UINT16 usItemIndex, UINT16 usPosX, UINT1
|
|||||||
uiItemCost = CalculateObjectItemRepairCost( gbSelectedArmsDealerID, pItemObject );
|
uiItemCost = CalculateObjectItemRepairCost( gbSelectedArmsDealerID, pItemObject );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
uiItemCost = CalcShopKeeperItemPrice( DEALER_SELLING, FALSE, usItemIndex, ArmsDealerInfo[ gbSelectedArmsDealerID ].dSellModifier, pItemObject );
|
uiItemCost = CalcShopKeeperItemPrice( DEALER_SELLING, FALSE, usItemIndex, armsDealerInfo[ gbSelectedArmsDealerID ].dSellModifier, pItemObject );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2951,7 +2951,7 @@ BOOLEAN DetermineArmsDealersSellingInventory( )
|
|||||||
if ( fAddSpecialItem == true )
|
if ( fAddSpecialItem == true )
|
||||||
{
|
{
|
||||||
UINT8 ubOwner;
|
UINT8 ubOwner;
|
||||||
if ( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS )
|
if ( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
// no merc is the owner
|
// no merc is the owner
|
||||||
ubOwner = NO_PROFILE;
|
ubOwner = NO_PROFILE;
|
||||||
@@ -2980,7 +2980,7 @@ BOOLEAN DetermineArmsDealersSellingInventory( )
|
|||||||
|
|
||||||
// repairmen sort differently from merchants
|
// repairmen sort differently from merchants
|
||||||
// sort this list by object category, and by ascending price within each category
|
// sort this list by object category, and by ascending price within each category
|
||||||
if ( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if ( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
std::sort(gpTempDealersInventory.begin(), gpTempDealersInventory.end(), RepairmanItemQsortCompare);//RepairmanItemQsortCompare
|
std::sort(gpTempDealersInventory.begin(), gpTempDealersInventory.end(), RepairmanItemQsortCompare);//RepairmanItemQsortCompare
|
||||||
}
|
}
|
||||||
@@ -3608,7 +3608,7 @@ void DisplayPlayersOfferArea()
|
|||||||
else // not money
|
else // not money
|
||||||
{
|
{
|
||||||
//if non-repairman
|
//if non-repairman
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
// don't evaluate anything he wouldn't buy!
|
// don't evaluate anything he wouldn't buy!
|
||||||
if( WillShopKeeperRejectObjectsFromPlayer( gbSelectedArmsDealerID, ( INT8 ) sCnt ) == FALSE )
|
if( WillShopKeeperRejectObjectsFromPlayer( gbSelectedArmsDealerID, ( INT8 ) sCnt ) == FALSE )
|
||||||
@@ -3718,10 +3718,10 @@ UINT32 CalculateTotalArmsDealerCost()
|
|||||||
if( ArmsDealerOfferArea[ uiCnt ].fActive )
|
if( ArmsDealerOfferArea[ uiCnt ].fActive )
|
||||||
{
|
{
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
uiTotal += CalculateObjectItemRepairCost( gbSelectedArmsDealerID, &( ArmsDealerOfferArea[ uiCnt ].ItemObject ) );
|
uiTotal += CalculateObjectItemRepairCost( gbSelectedArmsDealerID, &( ArmsDealerOfferArea[ uiCnt ].ItemObject ) );
|
||||||
else
|
else
|
||||||
uiTotal += CalcShopKeeperItemPrice( DEALER_SELLING, FALSE, ArmsDealerOfferArea[ uiCnt ].sItemIndex, ArmsDealerInfo[ gbSelectedArmsDealerID ].dSellModifier, &ArmsDealerOfferArea[uiCnt].ItemObject );
|
uiTotal += CalcShopKeeperItemPrice( DEALER_SELLING, FALSE, ArmsDealerOfferArea[ uiCnt ].sItemIndex, armsDealerInfo[ gbSelectedArmsDealerID ].dSellModifier, &ArmsDealerOfferArea[uiCnt].ItemObject );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return( uiTotal );
|
return( uiTotal );
|
||||||
@@ -3770,18 +3770,18 @@ void PerformTransaction( UINT32 uiMoneyFromPlayersAccount )
|
|||||||
StartShopKeeperTalking( SK_QUOTES_DEALER_OFFERED_MONEY_AS_A_GIFT );
|
StartShopKeeperTalking( SK_QUOTES_DEALER_OFFERED_MONEY_AS_A_GIFT );
|
||||||
|
|
||||||
// if the arms dealer is the kind of person who accepts gifts
|
// if the arms dealer is the kind of person who accepts gifts
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].uiFlags & ARMS_DEALER_ACCEPTS_GIFTS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].uiFlags & ARMS_DEALER_ACCEPTS_GIFTS )
|
||||||
{
|
{
|
||||||
//Move all the players evaluated items to the dealer (also adds it to dealer's cash)
|
//Move all the players evaluated items to the dealer (also adds it to dealer's cash)
|
||||||
MovePlayerOfferedItemsOfValueToArmsDealersInventory();
|
MovePlayerOfferedItemsOfValueToArmsDealersInventory();
|
||||||
|
|
||||||
DealerGetsBribed( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID, uiMoneyInPlayersOfferArea );
|
DealerGetsBribed( armsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID, uiMoneyInPlayersOfferArea );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // not a bribe
|
else // not a bribe
|
||||||
{
|
{
|
||||||
//if the dealer is not a repairman
|
//if the dealer is not a repairman
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
uiAvailablePlayerOfferSlots = ( SKI_NUM_TRADING_INV_SLOTS - CountNumberOfValuelessItemsInThePlayersOfferArea( ) );
|
uiAvailablePlayerOfferSlots = ( SKI_NUM_TRADING_INV_SLOTS - CountNumberOfValuelessItemsInThePlayersOfferArea( ) );
|
||||||
|
|
||||||
@@ -3842,7 +3842,7 @@ void PerformTransaction( UINT32 uiMoneyFromPlayersAccount )
|
|||||||
|
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
//Make sure there is enough money in the Player's offer area to cover the repair charge
|
//Make sure there is enough money in the Player's offer area to cover the repair charge
|
||||||
if( ( uiMoneyFromPlayersAccount + uiMoneyInPlayersOfferArea ) >= uiArmsDealersItemsCost )
|
if( ( uiMoneyFromPlayersAccount + uiMoneyInPlayersOfferArea ) >= uiArmsDealersItemsCost )
|
||||||
@@ -3851,7 +3851,7 @@ void PerformTransaction( UINT32 uiMoneyFromPlayersAccount )
|
|||||||
MovePlayerOfferedItemsOfValueToArmsDealersInventory();
|
MovePlayerOfferedItemsOfValueToArmsDealersInventory();
|
||||||
|
|
||||||
//if the arms dealer is the type of person to give change
|
//if the arms dealer is the type of person to give change
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].uiFlags & ARMS_DEALER_GIVES_CHANGE )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].uiFlags & ARMS_DEALER_GIVES_CHANGE )
|
||||||
{
|
{
|
||||||
//determine the amount of change to give
|
//determine the amount of change to give
|
||||||
iChangeToGiveToPlayer = ( uiMoneyFromPlayersAccount + uiMoneyInPlayersOfferArea ) - uiArmsDealersItemsCost;
|
iChangeToGiveToPlayer = ( uiMoneyFromPlayersAccount + uiMoneyInPlayersOfferArea ) - uiArmsDealersItemsCost;
|
||||||
@@ -3889,8 +3889,8 @@ void PerformTransaction( UINT32 uiMoneyFromPlayersAccount )
|
|||||||
|
|
||||||
|
|
||||||
//if the arms dealer buys stuff
|
//if the arms dealer buys stuff
|
||||||
if( ( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_BUYS_ONLY ) ||
|
if( ( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_BUYS_ONLY ) ||
|
||||||
( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_BUYS_SELLS ) )
|
( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_BUYS_SELLS ) )
|
||||||
{
|
{
|
||||||
// but the dealer can't afford this transaction
|
// but the dealer can't afford this transaction
|
||||||
if( iChangeToGiveToPlayer > ( INT32 ) gArmsDealerStatus[ gbSelectedArmsDealerID ].uiArmsDealersCash )
|
if( iChangeToGiveToPlayer > ( INT32 ) gArmsDealerStatus[ gbSelectedArmsDealerID ].uiArmsDealersCash )
|
||||||
@@ -3916,7 +3916,7 @@ void PerformTransaction( UINT32 uiMoneyFromPlayersAccount )
|
|||||||
|
|
||||||
|
|
||||||
//if the arms dealer is the type of person to give change
|
//if the arms dealer is the type of person to give change
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].uiFlags & ARMS_DEALER_GIVES_CHANGE )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].uiFlags & ARMS_DEALER_GIVES_CHANGE )
|
||||||
{
|
{
|
||||||
if( iChangeToGiveToPlayer > 0 )
|
if( iChangeToGiveToPlayer > 0 )
|
||||||
{
|
{
|
||||||
@@ -4064,7 +4064,7 @@ void MovePlayerOfferedItemsOfValueToArmsDealersInventory()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
//if the dealer doesn't strictly buy items from the player, give the item to the dealer
|
//if the dealer doesn't strictly buy items from the player, give the item to the dealer
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_BUYS_ONLY )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_BUYS_ONLY )
|
||||||
{
|
{
|
||||||
// item cease to be merc-owned during this operation
|
// item cease to be merc-owned during this operation
|
||||||
AddObjectToArmsDealerInventory( gbSelectedArmsDealerID, &( PlayersOfferArea[ uiCnt ].ItemObject ) );
|
AddObjectToArmsDealerInventory( gbSelectedArmsDealerID, &( PlayersOfferArea[ uiCnt ].ItemObject ) );
|
||||||
@@ -4335,7 +4335,7 @@ void SetSkiCursor( UINT16 usCursor )
|
|||||||
MSYS_ChangeRegionCursor( &gDealersOfferSlotsMouseRegions[ ubCnt], usCursor );
|
MSYS_ChangeRegionCursor( &gDealersOfferSlotsMouseRegions[ ubCnt], usCursor );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
MSYS_ChangeRegionCursor( &gDealersOfferSlotsSmallFaceMouseRegions[ ubCnt], usCursor );
|
MSYS_ChangeRegionCursor( &gDealersOfferSlotsSmallFaceMouseRegions[ ubCnt], usCursor );
|
||||||
}
|
}
|
||||||
@@ -4378,7 +4378,7 @@ void SetSkiCursor( UINT16 usCursor )
|
|||||||
MSYS_ChangeRegionCursor( &gDealersOfferSlotsMouseRegions[ ubCnt ], usCursor );
|
MSYS_ChangeRegionCursor( &gDealersOfferSlotsMouseRegions[ ubCnt ], usCursor );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
MSYS_ChangeRegionCursor( &gDealersOfferSlotsSmallFaceMouseRegions[ ubCnt ], usCursor );
|
MSYS_ChangeRegionCursor( &gDealersOfferSlotsSmallFaceMouseRegions[ ubCnt ], usCursor );
|
||||||
}
|
}
|
||||||
@@ -4615,7 +4615,7 @@ void HandleShopKeeperDialog( UINT8 ubInit )
|
|||||||
// first check if one of the situation warrants one of the more precise quotes
|
// first check if one of the situation warrants one of the more precise quotes
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
// if there are items in the arms dealer's offer area (must be awaiting repairs)
|
// if there are items in the arms dealer's offer area (must be awaiting repairs)
|
||||||
if ( CountNumberOfItemsInTheArmsDealersOfferArea() > 0)
|
if ( CountNumberOfItemsInTheArmsDealersOfferArea() > 0)
|
||||||
@@ -4684,7 +4684,7 @@ BOOLEAN StartShopKeeperTalking( UINT16 usQuoteNum )
|
|||||||
SpecialCharacterDialogueEvent( DIALOGUE_SPECIAL_EVENT_SHOPKEEPER, 3, usQuoteNum, 0, giShopKeeperFaceIndex, DIALOGUE_SHOPKEEPER_UI );
|
SpecialCharacterDialogueEvent( DIALOGUE_SPECIAL_EVENT_SHOPKEEPER, 3, usQuoteNum, 0, giShopKeeperFaceIndex, DIALOGUE_SHOPKEEPER_UI );
|
||||||
|
|
||||||
// post quote dialogue
|
// post quote dialogue
|
||||||
fSuccess = CharacterDialogue( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID, usQuoteNum, giShopKeeperFaceIndex, DIALOGUE_SHOPKEEPER_UI, FALSE, FALSE );
|
fSuccess = CharacterDialogue( armsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID, usQuoteNum, giShopKeeperFaceIndex, DIALOGUE_SHOPKEEPER_UI, FALSE, FALSE );
|
||||||
|
|
||||||
// post event to mark shopkeeper dialogue as ended
|
// post event to mark shopkeeper dialogue as ended
|
||||||
SpecialCharacterDialogueEvent( DIALOGUE_SPECIAL_EVENT_SHOPKEEPER, 4, usQuoteNum, 0, giShopKeeperFaceIndex, DIALOGUE_SHOPKEEPER_UI );
|
SpecialCharacterDialogueEvent( DIALOGUE_SPECIAL_EVENT_SHOPKEEPER, 4, usQuoteNum, 0, giShopKeeperFaceIndex, DIALOGUE_SHOPKEEPER_UI );
|
||||||
@@ -5570,13 +5570,13 @@ void EnableDisableEvaluateAndTransactionButtons()
|
|||||||
fItemEvaluated = TRUE;
|
fItemEvaluated = TRUE;
|
||||||
|
|
||||||
//else if it is not a repair dealer, and the item is money
|
//else if it is not a repair dealer, and the item is money
|
||||||
else if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS && Item[ PlayersOfferArea[ ubCnt ].sItemIndex ].usItemClass == IC_MONEY )
|
else if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS && Item[ PlayersOfferArea[ ubCnt ].sItemIndex ].usItemClass == IC_MONEY )
|
||||||
fItemEvaluated = TRUE;
|
fItemEvaluated = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//if the dealer is a repair dealer
|
//if the dealer is a repair dealer
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
//if there is an item here, the item has to have been evaluated
|
//if there is an item here, the item has to have been evaluated
|
||||||
if( ArmsDealerOfferArea[ ubCnt ].fActive )
|
if( ArmsDealerOfferArea[ ubCnt ].fActive )
|
||||||
@@ -5616,7 +5616,7 @@ void EnableDisableEvaluateAndTransactionButtons()
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//If its a repair dealer, and there is no items in the Dealer Offer area,
|
//If its a repair dealer, and there is no items in the Dealer Offer area,
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS &&
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS &&
|
||||||
CountNumberOfItemsInTheArmsDealersOfferArea( ) == 0 &&
|
CountNumberOfItemsInTheArmsDealersOfferArea( ) == 0 &&
|
||||||
uiPlayersOfferAreaTotalMoney < uiArmsDealerTotalCost
|
uiPlayersOfferAreaTotalMoney < uiArmsDealerTotalCost
|
||||||
)
|
)
|
||||||
@@ -5665,7 +5665,7 @@ void EnableDisableEvaluateAndTransactionButtons()
|
|||||||
|
|
||||||
//ARM: Always permit trying bribes, even if they don't work on a given dealer!
|
//ARM: Always permit trying bribes, even if they don't work on a given dealer!
|
||||||
// if the arms dealer is the kind of person who accepts gifts, and there is stuff to take
|
// if the arms dealer is the kind of person who accepts gifts, and there is stuff to take
|
||||||
// if( ArmsDealerInfo[ gbSelectedArmsDealerID ].uiFlags & ARMS_DEALER_ACCEPTS_GIFTS )
|
// if( armsDealerInfo[ gbSelectedArmsDealerID ].uiFlags & ARMS_DEALER_ACCEPTS_GIFTS )
|
||||||
{
|
{
|
||||||
//if the player is giving the dealer money, without buying anything
|
//if the player is giving the dealer money, without buying anything
|
||||||
if( IsMoneyTheOnlyItemInThePlayersOfferArea( ) && CountNumberOfItemsInTheArmsDealersOfferArea( ) == 0 )
|
if( IsMoneyTheOnlyItemInThePlayersOfferArea( ) && CountNumberOfItemsInTheArmsDealersOfferArea( ) == 0 )
|
||||||
@@ -5850,7 +5850,7 @@ void ClearArmsDealerOfferSlot( INT32 ubSlotToClear )
|
|||||||
SetRegionFastHelpText( &gDealersOfferSlotsMouseRegions[ ubSlotToClear ], L"" );
|
SetRegionFastHelpText( &gDealersOfferSlotsMouseRegions[ ubSlotToClear ], L"" );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
SetRegionFastHelpText( &gDealersOfferSlotsSmallFaceMouseRegions[ ubSlotToClear ], L"" );
|
SetRegionFastHelpText( &gDealersOfferSlotsSmallFaceMouseRegions[ ubSlotToClear ], L"" );
|
||||||
}
|
}
|
||||||
@@ -5906,7 +5906,7 @@ void EvaluateItemAddedToPlayersOfferArea( INT8 bSlotID, BOOLEAN fFirstOne )
|
|||||||
if( WillShopKeeperRejectObjectsFromPlayer( gbSelectedArmsDealerID, bSlotID ) == FALSE )
|
if( WillShopKeeperRejectObjectsFromPlayer( gbSelectedArmsDealerID, bSlotID ) == FALSE )
|
||||||
{
|
{
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
UINT32 uiNumberOfItemsInForRepairs = CountTotalItemsRepairDealerHasInForRepairs( gbSelectedArmsDealerID );
|
UINT32 uiNumberOfItemsInForRepairs = CountTotalItemsRepairDealerHasInForRepairs( gbSelectedArmsDealerID );
|
||||||
UINT32 uiNumberOfItemsAlreadyEvaluated = CountNumberOfItemsInTheArmsDealersOfferArea();
|
UINT32 uiNumberOfItemsAlreadyEvaluated = CountNumberOfItemsInTheArmsDealersOfferArea();
|
||||||
@@ -5997,7 +5997,7 @@ void EvaluateItemAddedToPlayersOfferArea( INT8 bSlotID, BOOLEAN fFirstOne )
|
|||||||
}
|
}
|
||||||
else // dealer doesn't handle this type of object
|
else // dealer doesn't handle this type of object
|
||||||
{
|
{
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
// only otherwise repairable items count as actual rejections
|
// only otherwise repairable items count as actual rejections
|
||||||
// if ( Item[ PlayersOfferArea[ bSlotID ].sItemIndex ].fFlags & ITEM_REPAIRABLE )
|
// if ( Item[ PlayersOfferArea[ bSlotID ].sItemIndex ].fFlags & ITEM_REPAIRABLE )
|
||||||
@@ -6032,7 +6032,7 @@ void EvaluateItemAddedToPlayersOfferArea( INT8 bSlotID, BOOLEAN fFirstOne )
|
|||||||
switch ( uiEvalResult )
|
switch ( uiEvalResult )
|
||||||
{
|
{
|
||||||
case EVAL_RESULT_DONT_HANDLE:
|
case EVAL_RESULT_DONT_HANDLE:
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_SELLS_ONLY )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_SELLS_ONLY )
|
||||||
{
|
{
|
||||||
// then he doesn't have quotes 17, 19, or 20, always use 4. Devin doesn't have 18 either,
|
// then he doesn't have quotes 17, 19, or 20, always use 4. Devin doesn't have 18 either,
|
||||||
// while the text of 18 seems wrong for Sam & Howard if offered something they should consider valuable.
|
// while the text of 18 seems wrong for Sam & Howard if offered something they should consider valuable.
|
||||||
@@ -6162,7 +6162,7 @@ void ConfirmToDeductMoneyFromPlayersAccountMessageBoxCallBack( UINT8 bExitValue
|
|||||||
//Perform the transaction with the extra money from the players account
|
//Perform the transaction with the extra money from the players account
|
||||||
PerformTransaction( iMoneyToDeduct );
|
PerformTransaction( iMoneyToDeduct );
|
||||||
|
|
||||||
AddTransactionToPlayersBook( PURCHASED_ITEM_FROM_DEALER, ArmsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID, GetWorldTotalMin(), -iMoneyToDeduct );
|
AddTransactionToPlayersBook( PURCHASED_ITEM_FROM_DEALER, armsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID, GetWorldTotalMin(), -iMoneyToDeduct );
|
||||||
}
|
}
|
||||||
|
|
||||||
// done, re-enable calls to PerformTransaction()
|
// done, re-enable calls to PerformTransaction()
|
||||||
@@ -6545,7 +6545,7 @@ BOOLEAN OfferObjectToDealer( OBJECTTYPE *pComplexObject, UINT8 ubOwnerProfileId,
|
|||||||
BOOLEAN fSuccess = FALSE;
|
BOOLEAN fSuccess = FALSE;
|
||||||
|
|
||||||
|
|
||||||
if ( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS )
|
if ( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer != ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
// if not actually doing repairs, there's no need to split objects up at all
|
// if not actually doing repairs, there's no need to split objects up at all
|
||||||
if ( !AddObjectForEvaluation( pComplexObject, ubOwnerProfileId, bOwnerSlotId, TRUE ) )
|
if ( !AddObjectForEvaluation( pComplexObject, ubOwnerProfileId, bOwnerSlotId, TRUE ) )
|
||||||
@@ -6973,7 +6973,7 @@ BOOLEAN CanMercInteractWithSelectedShopkeeper( SOLDIERTYPE *pSoldier )
|
|||||||
Assert( pSoldier!= NULL );
|
Assert( pSoldier!= NULL );
|
||||||
Assert( gbSelectedArmsDealerID != -1 );
|
Assert( gbSelectedArmsDealerID != -1 );
|
||||||
|
|
||||||
pShopkeeper = FindSoldierByProfileID( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID, FALSE );
|
pShopkeeper = FindSoldierByProfileID( armsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID, FALSE );
|
||||||
Assert( pShopkeeper != NULL );
|
Assert( pShopkeeper != NULL );
|
||||||
Assert( pShopkeeper->bActive );
|
Assert( pShopkeeper->bActive );
|
||||||
Assert( pShopkeeper->bInSector );
|
Assert( pShopkeeper->bInSector );
|
||||||
@@ -7051,7 +7051,7 @@ void ExitSKIRequested()
|
|||||||
fPlayerOwnedStuffOnTable = TRUE;
|
fPlayerOwnedStuffOnTable = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS ) &&
|
if( ( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS ) &&
|
||||||
AreThereItemsInTheArmsDealersOfferArea( ) )
|
AreThereItemsInTheArmsDealersOfferArea( ) )
|
||||||
{
|
{
|
||||||
fPlayerOwnedStuffOnTable = TRUE;
|
fPlayerOwnedStuffOnTable = TRUE;
|
||||||
@@ -7148,7 +7148,7 @@ void DealWithItemsStillOnTheTable()
|
|||||||
|
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
//loop through the arms dealers' offer area and return any items there to the player
|
//loop through the arms dealers' offer area and return any items there to the player
|
||||||
for( ubCnt = 0; ubCnt < SKI_NUM_TRADING_INV_SLOTS; ubCnt++)
|
for( ubCnt = 0; ubCnt < SKI_NUM_TRADING_INV_SLOTS; ubCnt++)
|
||||||
@@ -7462,21 +7462,21 @@ UINT32 EvaluateInvSlot( INVENTORY_IN_SLOT *pInvSlot )
|
|||||||
if( gbSelectedArmsDealerID == ARMS_DEALER_MICKY )
|
if( gbSelectedArmsDealerID == ARMS_DEALER_MICKY )
|
||||||
{
|
{
|
||||||
INT16 sSoldierID;
|
INT16 sSoldierID;
|
||||||
sSoldierID = GetSoldierIDFromMercID( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID );
|
sSoldierID = GetSoldierIDFromMercID( armsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID );
|
||||||
if( ( sSoldierID != -1 ) && ( GetDrunkLevel( &Menptr[ sSoldierID ] ) == DRUNK ) )
|
if( ( sSoldierID != -1 ) && ( GetDrunkLevel( &Menptr[ sSoldierID ] ) == DRUNK ) )
|
||||||
{
|
{
|
||||||
//Micky is DRUNK, pays more!
|
//Micky is DRUNK, pays more!
|
||||||
dPriceModifier = ArmsDealerInfo[ gbSelectedArmsDealerID ].dSellModifier;
|
dPriceModifier = armsDealerInfo[ gbSelectedArmsDealerID ].dSellModifier;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Micky isn't drunk, charge regular price
|
// Micky isn't drunk, charge regular price
|
||||||
dPriceModifier = ArmsDealerInfo[ gbSelectedArmsDealerID ].dBuyModifier;
|
dPriceModifier = armsDealerInfo[ gbSelectedArmsDealerID ].dBuyModifier;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dPriceModifier = ArmsDealerInfo[ gbSelectedArmsDealerID ].dBuyModifier;
|
dPriceModifier = armsDealerInfo[ gbSelectedArmsDealerID ].dBuyModifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -7629,7 +7629,7 @@ void BuildItemHelpTextString( CHAR16 sString[], INVENTORY_IN_SLOT *pInv, UINT8 u
|
|||||||
|
|
||||||
// add repair time for items in a repairman's offer area
|
// add repair time for items in a repairman's offer area
|
||||||
if ( ( ubScreenArea == ARMS_DEALER_OFFER_AREA ) &&
|
if ( ( ubScreenArea == ARMS_DEALER_OFFER_AREA ) &&
|
||||||
( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS ) )
|
( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS ) )
|
||||||
{
|
{
|
||||||
BuildRepairTimeString( zRepairTime, CalculateObjectItemRepairTime( gbSelectedArmsDealerID, &( pInv->ItemObject ) ) );
|
BuildRepairTimeString( zRepairTime, CalculateObjectItemRepairTime( gbSelectedArmsDealerID, &( pInv->ItemObject ) ) );
|
||||||
swprintf( sString, L"%s\n(%s: %s)", zHelpText, gzLateLocalizedString[ 44 ], zRepairTime );
|
swprintf( sString, L"%s\n(%s: %s)", zHelpText, gzLateLocalizedString[ 44 ], zRepairTime );
|
||||||
@@ -7656,7 +7656,7 @@ void DisableAllDealersInventorySlots( void )
|
|||||||
MSYS_DisableRegion( &gDealersInventoryMouseRegions[ iCnt ] );
|
MSYS_DisableRegion( &gDealersInventoryMouseRegions[ iCnt ] );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
MSYS_DisableRegion( &gRepairmanInventorySmallFaceMouseRegions[ iCnt ] );
|
MSYS_DisableRegion( &gRepairmanInventorySmallFaceMouseRegions[ iCnt ] );
|
||||||
}
|
}
|
||||||
@@ -7673,7 +7673,7 @@ void EnableAllDealersInventorySlots( void )
|
|||||||
MSYS_EnableRegion( &gDealersInventoryMouseRegions[ iCnt ] );
|
MSYS_EnableRegion( &gDealersInventoryMouseRegions[ iCnt ] );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
MSYS_EnableRegion( &gRepairmanInventorySmallFaceMouseRegions[ iCnt ] );
|
MSYS_EnableRegion( &gRepairmanInventorySmallFaceMouseRegions[ iCnt ] );
|
||||||
}
|
}
|
||||||
@@ -7691,7 +7691,7 @@ void DisableAllDealersOfferSlots( void )
|
|||||||
MSYS_DisableRegion( &gDealersOfferSlotsMouseRegions[ iCnt ] );
|
MSYS_DisableRegion( &gDealersOfferSlotsMouseRegions[ iCnt ] );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
MSYS_DisableRegion( &gDealersOfferSlotsSmallFaceMouseRegions[ iCnt ] );
|
MSYS_DisableRegion( &gDealersOfferSlotsSmallFaceMouseRegions[ iCnt ] );
|
||||||
}
|
}
|
||||||
@@ -7708,7 +7708,7 @@ void EnableAllDealersOfferSlots( void )
|
|||||||
MSYS_EnableRegion( &gDealersOfferSlotsMouseRegions[ iCnt ] );
|
MSYS_EnableRegion( &gDealersOfferSlotsMouseRegions[ iCnt ] );
|
||||||
|
|
||||||
//if the dealer repairs
|
//if the dealer repairs
|
||||||
if( ArmsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
if( armsDealerInfo[ gbSelectedArmsDealerID ].ubTypeOfArmsDealer == ARMS_DEALER_REPAIRS )
|
||||||
{
|
{
|
||||||
MSYS_EnableRegion( &gDealersOfferSlotsSmallFaceMouseRegions[ iCnt ] );
|
MSYS_EnableRegion( &gDealersOfferSlotsSmallFaceMouseRegions[ iCnt ] );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,14 @@ enum
|
|||||||
ELEMENT_LIST,
|
ELEMENT_LIST,
|
||||||
ELEMENT,
|
ELEMENT,
|
||||||
ELEMENT_PROPERTY,
|
ELEMENT_PROPERTY,
|
||||||
|
|
||||||
|
// For new merchant inventory
|
||||||
|
MERCHANT_CONTROL,
|
||||||
|
MERCHANT_CASH,
|
||||||
|
MERCHANT_CASH_DAILY,
|
||||||
|
MERCHANT_COOLNESS,
|
||||||
|
MERCHANT_FLAGS,
|
||||||
|
MERCHANT_REORDER
|
||||||
}
|
}
|
||||||
typedef PARSE_STAGE;
|
typedef PARSE_STAGE;
|
||||||
|
|
||||||
|
|||||||
+566
-65
@@ -7,6 +7,10 @@
|
|||||||
#include "Debug Control.h"
|
#include "Debug Control.h"
|
||||||
#include "expat.h"
|
#include "expat.h"
|
||||||
#include "XML.h"
|
#include "XML.h"
|
||||||
|
#include "Arms Dealer Init.h"
|
||||||
|
#include "Font Control.h"
|
||||||
|
#include "WordWrap.h"
|
||||||
|
#include "soldier profile type.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct
|
struct
|
||||||
@@ -16,6 +20,24 @@ struct
|
|||||||
CHAR8 szCharData[MAX_CHAR_DATA_LENGTH+1];
|
CHAR8 szCharData[MAX_CHAR_DATA_LENGTH+1];
|
||||||
DEALER_POSSIBLE_INV curInventory;
|
DEALER_POSSIBLE_INV curInventory;
|
||||||
DEALER_POSSIBLE_INV * curArray;
|
DEALER_POSSIBLE_INV * curArray;
|
||||||
|
int armsDealerIndex;
|
||||||
|
unsigned shopKeeperID;
|
||||||
|
float buyCostModifier;
|
||||||
|
float sellCostModifier;
|
||||||
|
float repairSpeed;
|
||||||
|
float repairCost;
|
||||||
|
unsigned initialCash;
|
||||||
|
unsigned dailyIncrement;
|
||||||
|
unsigned dailyMaximum;
|
||||||
|
unsigned dailyRetained;
|
||||||
|
unsigned minCoolness;
|
||||||
|
unsigned maxCoolness;
|
||||||
|
unsigned addToCoolness;
|
||||||
|
unsigned coolnessProgressRate;
|
||||||
|
unsigned dealerFlags;
|
||||||
|
unsigned daysDelayMin;
|
||||||
|
unsigned daysDelayMax;
|
||||||
|
|
||||||
UINT32 maxArraySize;
|
UINT32 maxArraySize;
|
||||||
|
|
||||||
UINT32 currentDepth;
|
UINT32 currentDepth;
|
||||||
@@ -23,99 +45,580 @@ struct
|
|||||||
}
|
}
|
||||||
typedef inventoryParseData;
|
typedef inventoryParseData;
|
||||||
|
|
||||||
|
// For error messages
|
||||||
|
XML_Parser parser = 0;
|
||||||
|
STR gFileName = 0;
|
||||||
|
bool errorInData = false;
|
||||||
|
static const int NOARMSDEALERID = -1;
|
||||||
|
bool firstUIFlagEncountered = true;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Nesting for inventory:
|
||||||
|
* -->> ELEMENT_NONE
|
||||||
|
* <INVENTORYLIST> -->> ELEMENT_LIST
|
||||||
|
* <CONTROL> -->> MERCHANT_CONTROL
|
||||||
|
* <ARMSDEALERINDEX>...
|
||||||
|
* <SHOPKEEPERID>...
|
||||||
|
* <BUYCOSTMODIFIER>...
|
||||||
|
* <SELLCOSTMODIFIER>...
|
||||||
|
* <REPAIRSPEED>...
|
||||||
|
* <REPAIRCOST>...
|
||||||
|
* <REORDERDAYSDELAY> -->> MERCHANT_REORDER
|
||||||
|
* <REORDERMINIMUM>...
|
||||||
|
* <REORDERMAXIMUM>...
|
||||||
|
* </REORDERDAYSDELAY> <<-- MERCHANT_CONTROL
|
||||||
|
* <CASH> -->> MERCHANT_CASH
|
||||||
|
* <INITIAL>...
|
||||||
|
* <DAILY> -->> MERCHANT_CASH_DAILY
|
||||||
|
* <INCREMENT>...
|
||||||
|
* <CASHMAXIMUM>...
|
||||||
|
* <DRAINPERCENT>...
|
||||||
|
* </DAILY> <<-- MERCHANT_CASH
|
||||||
|
* </CASH> <<-- MERCHANT_CONTROL
|
||||||
|
* <COOLNESS> -->> MERCHANT_COOLNESS
|
||||||
|
* <COOLMINIMUM>...
|
||||||
|
* <COOLMAXIMUM>...
|
||||||
|
* <COOLADD>...
|
||||||
|
* <PROGRESSRATE>...
|
||||||
|
* </COOLNESS> <<-- MERCHANT_CONTROL
|
||||||
|
* <BASICDEALERFLAGS> -->> MERCHANT_FLAGS
|
||||||
|
* <ARMS_DEALER_.../>
|
||||||
|
* </BASICDEALERFLAGS>
|
||||||
|
* </CONTROL> <<-- ELEMENT_LIST
|
||||||
|
* <INVENTORY> -->> ELEMENT
|
||||||
|
* ...
|
||||||
|
* </INVENTORY>
|
||||||
|
* </INVENTORYLIST>
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Move this to common file */
|
||||||
|
int y = 20; // Where to start showing errors on the screen
|
||||||
|
int errorsLeftBeforeGivingUp = 5; // This many then we stop reporting them
|
||||||
|
|
||||||
|
static void DisplayAndLogParserError (const char *err, const XML_Char *name) {
|
||||||
|
if (errorsLeftBeforeGivingUp-- == 0)
|
||||||
|
return;
|
||||||
|
CHAR8 errorBuf[511];
|
||||||
|
sprintf(errorBuf, "XML Parser Error at line %d in file %s: %s %s", XML_GetCurrentLineNumber(parser), gFileName, err, name);
|
||||||
|
LiveMessage(errorBuf);
|
||||||
|
CHAR16 str[511];
|
||||||
|
swprintf( str, L"%S", errorBuf );
|
||||||
|
DisplayWrappedString( 10, y+=28, 630, 2, FONT12ARIAL, FONT_RED, str, FONT_BLACK, TRUE, LEFT_JUSTIFIED );
|
||||||
|
errorInData = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define NameIs(a) (strcmp(name, a) == 0)
|
||||||
|
|
||||||
|
|
||||||
static void XMLCALL
|
static void XMLCALL
|
||||||
inventoryStartElementHandle(void *userData, const XML_Char *name, const XML_Char **atts)
|
inventoryStartElementHandle(void *userData, const XML_Char *name, const XML_Char **atts)
|
||||||
{
|
{
|
||||||
inventoryParseData * pData = (inventoryParseData *)userData;
|
AssertNotNIL(userData);
|
||||||
|
AssertNotNIL(name);
|
||||||
|
inventoryParseData & pData = *((inventoryParseData *)userData);
|
||||||
|
|
||||||
if(pData->currentDepth <= pData->maxReadDepth) //are we reading this element?
|
if(pData.currentDepth <= pData.maxReadDepth) //are we reading this element?
|
||||||
{
|
{
|
||||||
if(strcmp(name, "INVENTORYLIST") == 0 && pData->curElement == ELEMENT_NONE)
|
if (NameIs("INVENTORYLIST") && pData.curElement == ELEMENT_NONE)
|
||||||
{
|
{
|
||||||
pData->curElement = ELEMENT_LIST;
|
pData.curElement = ELEMENT_LIST;
|
||||||
|
memset(pData.curArray,0,sizeof(DEALER_POSSIBLE_INV)*pData.maxArraySize);
|
||||||
memset(pData->curArray,0,sizeof(DEALER_POSSIBLE_INV)*pData->maxArraySize);
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
|
||||||
pData->maxReadDepth++; //we are not skipping this element
|
|
||||||
}
|
}
|
||||||
else if(strcmp(name, "INVENTORY") == 0 && pData->curElement == ELEMENT_LIST)
|
else if (NameIs("INVENTORY") && pData.curElement == ELEMENT_LIST)
|
||||||
{
|
{
|
||||||
pData->curElement = ELEMENT;
|
pData.curElement = ELEMENT;
|
||||||
|
memset(&pData.curInventory,0,sizeof(DEALER_POSSIBLE_INV));
|
||||||
memset(&pData->curInventory,0,sizeof(DEALER_POSSIBLE_INV));
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
|
||||||
pData->maxReadDepth++; //we are not skipping this element
|
|
||||||
}
|
}
|
||||||
else if(pData->curElement == ELEMENT &&
|
else if(pData.curElement == ELEMENT &&
|
||||||
(strcmp(name, "uiIndex") == 0 ||
|
(NameIs("uiIndex") ||
|
||||||
strcmp(name, "sItemIndex") == 0 ||
|
NameIs("sItemIndex") ||
|
||||||
strcmp(name, "ubOptimalNumber") == 0 ))
|
NameIs("ubOptimalNumber") ))
|
||||||
{
|
{
|
||||||
pData->curElement = ELEMENT_PROPERTY;
|
pData.curElement = ELEMENT_PROPERTY;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
pData->maxReadDepth++; //we are not skipping this element
|
|
||||||
}
|
}
|
||||||
|
else if (NameIs("CONTROL") && pData.curElement == ELEMENT_LIST)
|
||||||
pData->szCharData[0] = '\0';
|
{
|
||||||
|
pData.curElement = MERCHANT_CONTROL;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else if (pData.curElement == MERCHANT_CONTROL &&
|
||||||
|
(NameIs("BUYCOSTMODIFIER") ||
|
||||||
|
NameIs("SELLCOSTMODIFIER") ||
|
||||||
|
NameIs("REPAIRSPEED") ||
|
||||||
|
NameIs("REPAIRCOST") ||
|
||||||
|
NameIs("SHOPKEEPERID") ||
|
||||||
|
NameIs("ARMSDEALERINDEX") ))
|
||||||
|
{
|
||||||
|
pData.curElement = ELEMENT_PROPERTY;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else if (NameIs("REORDERDAYSDELAY") && pData.curElement == MERCHANT_CONTROL)
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_REORDER;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else if (pData.curElement == MERCHANT_REORDER &&
|
||||||
|
(NameIs("REORDERMINIMUM") ||
|
||||||
|
NameIs("REORDERMAXIMUM")))
|
||||||
|
{
|
||||||
|
pData.curElement = ELEMENT_PROPERTY;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else if (NameIs("CASH") && pData.curElement == MERCHANT_CONTROL)
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CASH;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else if (pData.curElement == MERCHANT_CASH &&
|
||||||
|
(NameIs("INITIAL")))
|
||||||
|
{
|
||||||
|
pData.curElement = ELEMENT_PROPERTY;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else if (NameIs("DAILY") && pData.curElement == MERCHANT_CASH)
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CASH_DAILY;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else if (pData.curElement == MERCHANT_CASH_DAILY &&
|
||||||
|
(NameIs("INCREMENT") ||
|
||||||
|
NameIs("CASHMAXIMUM") ||
|
||||||
|
NameIs("RETAINED") ))
|
||||||
|
{
|
||||||
|
pData.curElement = ELEMENT_PROPERTY;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else if (NameIs("COOLNESS") && pData.curElement == MERCHANT_CONTROL)
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_COOLNESS;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else if (pData.curElement == MERCHANT_COOLNESS &&
|
||||||
|
(NameIs("COOLMINIMUM") ||
|
||||||
|
NameIs("COOLMAXIMUM") ||
|
||||||
|
NameIs("COOLADD") ||
|
||||||
|
NameIs("PROGRESSRATE") ))
|
||||||
|
{
|
||||||
|
pData.curElement = ELEMENT_PROPERTY;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else if (pData.curElement == MERCHANT_COOLNESS &&
|
||||||
|
(NameIs("USEBOBBYRAYSETTING") ||
|
||||||
|
NameIs("ALLINVENTORYALWAYSAVAILBLE")))
|
||||||
|
{
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else if (NameIs("BASICDEALERFLAGS") && pData.curElement == MERCHANT_CONTROL)
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_FLAGS;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else if (pData.curElement == MERCHANT_FLAGS &&
|
||||||
|
(NameIs("ARMS_DEALER_HANDGUNCLASS") ||
|
||||||
|
NameIs("ARMS_DEALER_SMGCLASS") ||
|
||||||
|
NameIs("ARMS_DEALER_RIFLECLASS") ||
|
||||||
|
NameIs("ARMS_DEALER_MGCLASS") ||
|
||||||
|
NameIs("ARMS_DEALER_SHOTGUNCLASS") ||
|
||||||
|
NameIs("ARMS_DEALER_KNIFECLASS") ||
|
||||||
|
NameIs("ARMS_DEALER_BLADE") ||
|
||||||
|
NameIs("ARMS_DEALER_LAUNCHER") ||
|
||||||
|
NameIs("ARMS_DEALER_ARMOUR") ||
|
||||||
|
NameIs("ARMS_DEALER_MEDKIT") ||
|
||||||
|
NameIs("ARMS_DEALER_MISC") ||
|
||||||
|
NameIs("ARMS_DEALER_AMMO") ||
|
||||||
|
NameIs("ARMS_DEALER_GRENADE") ||
|
||||||
|
NameIs("ARMS_DEALER_BOMB") ||
|
||||||
|
NameIs("ARMS_DEALER_EXPLOSV") ||
|
||||||
|
NameIs("ARMS_DEALER_KIT") ||
|
||||||
|
NameIs("ARMS_DEALER_FACE") ||
|
||||||
|
NameIs("ARMS_DEALER_DETONATORS") ||
|
||||||
|
NameIs("ARMS_DEALER_ATTACHMENTS") ||
|
||||||
|
NameIs("ARMS_DEALER_ALCOHOL") ||
|
||||||
|
NameIs("ARMS_DEALER_ELECTRONICS") ||
|
||||||
|
NameIs("ARMS_DEALER_HARDWARE") ||
|
||||||
|
NameIs("ARMS_DEALER_MEDICAL") ||
|
||||||
|
NameIs("ARMS_DEALER_CREATURE_PARTS") ||
|
||||||
|
NameIs("ARMS_DEALER_ROCKET_RIFLE") ||
|
||||||
|
NameIs("ARMS_DEALER_ONLY_USED_ITEMS") ||
|
||||||
|
NameIs("ARMS_DEALER_GIVES_CHANGE") ||
|
||||||
|
NameIs("ARMS_DEALER_ACCEPTS_GIFTS") ||
|
||||||
|
NameIs("ARMS_DEALER_SOME_USED_ITEMS") ||
|
||||||
|
NameIs("ARMS_DEALER_HAS_NO_INVENTORY") ||
|
||||||
|
NameIs("ARMS_DEALER_ALL_GUNS") ||
|
||||||
|
NameIs("ARMS_DEALER_BIG_GUNS") ||
|
||||||
|
NameIs("ARMS_DEALER_ALL_WEAPONS")))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_FLAGS;
|
||||||
|
pData.maxReadDepth++; //we are not skipping this element
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Something unexpected, error!
|
||||||
|
DisplayAndLogParserError ("unknown/unexpected start element", name);
|
||||||
|
}
|
||||||
|
pData.szCharData[0] = '\0';
|
||||||
}
|
}
|
||||||
|
pData.currentDepth++;
|
||||||
pData->currentDepth++;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void XMLCALL
|
static void XMLCALL
|
||||||
inventoryCharacterDataHandle(void *userData, const XML_Char *str, int len)
|
inventoryCharacterDataHandle(void *userData, const XML_Char *str, int len)
|
||||||
{
|
{
|
||||||
inventoryParseData * pData = (inventoryParseData *)userData;
|
AssertNotNIL(userData);
|
||||||
|
AssertNotNIL(str);
|
||||||
|
inventoryParseData & pData = *((inventoryParseData *)userData);
|
||||||
|
|
||||||
if( (pData->currentDepth <= pData->maxReadDepth) &&
|
if( (pData.currentDepth <= pData.maxReadDepth) &&
|
||||||
(strlen(pData->szCharData) < MAX_CHAR_DATA_LENGTH)
|
(strlen(pData.szCharData) < MAX_CHAR_DATA_LENGTH)
|
||||||
){
|
){
|
||||||
strncat(pData->szCharData,str,__min((unsigned int)len,MAX_CHAR_DATA_LENGTH-strlen(pData->szCharData)));
|
strncat(pData.szCharData,str,__min((unsigned int)len,MAX_CHAR_DATA_LENGTH-strlen(pData.szCharData)));
|
||||||
|
} else {
|
||||||
|
DisplayAndLogParserError ("string too long", str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool CheckArmsDealerIndex(inventoryParseData &pData) {
|
||||||
|
if (pData.armsDealerIndex == NOARMSDEALERID) {
|
||||||
|
DisplayAndLogParserError("No ARMSDEALERINDEX yet", "");
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool HandleUIFlag(inventoryParseData & pData, const XML_Char *name, const char*str, unsigned flag) {
|
||||||
|
if (pData.curElement == MERCHANT_FLAGS && NameIs(str)) {
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
if (firstUIFlagEncountered) {
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].uiFlags = flag;
|
||||||
|
firstUIFlagEncountered = false;
|
||||||
|
} else {
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].uiFlags |= flag;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void XMLCALL
|
static void XMLCALL
|
||||||
inventoryEndElementHandle(void *userData, const XML_Char *name)
|
inventoryEndElementHandle(void *userData, const XML_Char *name)
|
||||||
{
|
{
|
||||||
inventoryParseData * pData = (inventoryParseData *)userData;
|
AssertNotNIL(userData);
|
||||||
|
AssertNotNIL(name);
|
||||||
|
inventoryParseData & pData = *((inventoryParseData *)userData);
|
||||||
|
|
||||||
if(pData->currentDepth <= pData->maxReadDepth) //we're at the end of an element that we've been reading
|
if(pData.currentDepth <= pData.maxReadDepth) //we're at the end of an element that we've been reading
|
||||||
{
|
{
|
||||||
if(strcmp(name, "INVENTORYLIST") == 0)
|
if (NameIs("INVENTORYLIST"))
|
||||||
{
|
{
|
||||||
pData->curElement = ELEMENT_NONE;
|
pData.curElement = ELEMENT_NONE;
|
||||||
}
|
}
|
||||||
else if(strcmp(name, "INVENTORY") == 0)
|
else if (NameIs("INVENTORY"))
|
||||||
{
|
{
|
||||||
pData->curElement = ELEMENT_LIST;
|
pData.curElement = ELEMENT_LIST;
|
||||||
|
|
||||||
if(pData->curInventory.uiIndex < pData->maxArraySize)
|
if(pData.curInventory.uiIndex < pData.maxArraySize)
|
||||||
{
|
{
|
||||||
pData->curArray[pData->curInventory.uiIndex] = pData->curInventory; //write the inventory into the table
|
pData.curArray[pData.curInventory.uiIndex] = pData.curInventory; //write the inventory into the table
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(strcmp(name, "uiIndex") == 0)
|
else if (NameIs("uiIndex"))
|
||||||
{
|
{
|
||||||
pData->curElement = ELEMENT;
|
pData.curElement = ELEMENT;
|
||||||
pData->curInventory.uiIndex = (UINT32) atol(pData->szCharData);
|
pData.curInventory.uiIndex = (UINT32) atol(pData.szCharData);
|
||||||
}
|
}
|
||||||
else if(strcmp(name, "sItemIndex") == 0)
|
else if (NameIs("sItemIndex"))
|
||||||
{
|
{
|
||||||
pData->curElement = ELEMENT;
|
pData.curElement = ELEMENT;
|
||||||
pData->curInventory.sItemIndex = (INT16) atol(pData->szCharData);
|
pData.curInventory.sItemIndex = (INT16) atol(pData.szCharData);
|
||||||
}
|
}
|
||||||
else if(strcmp(name, "ubOptimalNumber") == 0)
|
else if (NameIs("ubOptimalNumber"))
|
||||||
{
|
{
|
||||||
pData->curElement = ELEMENT;
|
pData.curElement = ELEMENT;
|
||||||
pData->curInventory.ubOptimalNumber = (UINT8) atol(pData->szCharData);
|
pData.curInventory.ubOptimalNumber = (UINT8) atol(pData.szCharData);
|
||||||
|
}
|
||||||
|
else if (NameIs("CONTROL"))
|
||||||
|
{
|
||||||
|
pData.curElement = ELEMENT_LIST;
|
||||||
|
}
|
||||||
|
else if (NameIs("ARMSDEALERINDEX"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CONTROL;
|
||||||
|
pData.armsDealerIndex = (unsigned) atol(pData.szCharData);
|
||||||
|
if (pData.armsDealerIndex >= 0 && pData.armsDealerIndex < NUM_ARMS_DEALERS)
|
||||||
|
; // ok
|
||||||
|
else {
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range) for", "ARMSDEALERINDEX");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("SHOPKEEPERID"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CONTROL;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.shopKeeperID = (unsigned) atol(pData.szCharData);
|
||||||
|
if (pData.shopKeeperID >= 0 && pData.shopKeeperID < NUM_PROFILES)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].ubShopKeeperID = pData.shopKeeperID;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range) for", "SHOPKEEPERID");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("BUYCOSTMODIFIER"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CONTROL;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.buyCostModifier = (float) atof(pData.szCharData);
|
||||||
|
if (pData.buyCostModifier >= 0 && pData.buyCostModifier < 5.0)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].dBuyModifier = pData.buyCostModifier;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range) for", "BUYCOSTMODIFIER");
|
||||||
|
if (pData.repairSpeed != 0 || pData.repairCost != 0)
|
||||||
|
DisplayAndLogParserError("Shopkeepers may not both be buyers/sells and repairers", "BUYCOSTMODIFIER");
|
||||||
|
else
|
||||||
|
; // Set buy/sell/repair flags
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("SELLCOSTMODIFIER"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CONTROL;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.sellCostModifier = (float) atof(pData.szCharData);
|
||||||
|
if (pData.sellCostModifier >= 0 && pData.sellCostModifier < 5.0)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].dSellModifier = pData.sellCostModifier;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range) for", "SELLCOSTMODIFIER");
|
||||||
|
if (pData.repairSpeed != 0 || pData.repairCost != 0)
|
||||||
|
DisplayAndLogParserError("Shopkeepers may not both be buyers/sells and repairers", "SELLCOSTMODIFIER");
|
||||||
|
else
|
||||||
|
; // Set buy/sell/repair flags
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("REPAIRSPEED"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CONTROL;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.repairSpeed = (float) atof(pData.szCharData);
|
||||||
|
if (pData.repairSpeed >= 0 && pData.repairSpeed < 5.0)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].dRepairSpeed = pData.repairSpeed;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range) for", "REPAIRSPEED");
|
||||||
|
if (pData.buyCostModifier != 0 || pData.sellCostModifier != 0)
|
||||||
|
DisplayAndLogParserError("Shopkeepers may not both be buyers/sells and repairers", "BUYCOSTMODIFIER");
|
||||||
|
else
|
||||||
|
; // Set buy/sell/repair flags
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("REPAIRCOST"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CONTROL;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.repairCost = (float) atof(pData.szCharData);
|
||||||
|
if (pData.repairCost >= 0 && pData.repairCost < 5.0)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].dRepairCost = pData.repairCost;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range) for", "REPAIRCOST");
|
||||||
|
if (pData.buyCostModifier != 0 || pData.sellCostModifier != 0)
|
||||||
|
DisplayAndLogParserError("Shopkeepers may not both be buyers/sells and repairers", "REPAIRCOST");
|
||||||
|
else
|
||||||
|
; // Set buy/sell/repair flags
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("REORDERDAYSDELAY"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CONTROL;
|
||||||
|
}
|
||||||
|
else if (NameIs("REORDERMINIMUM"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_REORDER;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.daysDelayMin = (unsigned) atol(pData.szCharData);
|
||||||
|
if (pData.daysDelayMin >= 1 && pData.daysDelayMin <= 10)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].daysDelayMin = pData.daysDelayMin;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range of 1..10) for", "REORDERMINIMUM");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("REORDERMAXIMUM"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_REORDER;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.daysDelayMax = (unsigned) atol(pData.szCharData);
|
||||||
|
if (pData.daysDelayMax >= 1 && pData.daysDelayMax <= 10)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].daysDelayMax = pData.daysDelayMax;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range of 1..10) for", "REORDERMAXIMUM");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("CASH"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CONTROL;
|
||||||
|
}
|
||||||
|
else if (NameIs("INITIAL"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CASH;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.initialCash = (unsigned) atol(pData.szCharData);
|
||||||
|
if (pData.initialCash >= 0 && pData.initialCash <= 1000000)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].iInitialCash = pData.initialCash;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range) for", "INITIAL");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("DAILY"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CASH;
|
||||||
|
}
|
||||||
|
else if (NameIs("INCREMENT"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CASH_DAILY;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.dailyIncrement = (unsigned) atol(pData.szCharData);
|
||||||
|
if (pData.dailyIncrement >= 0 && pData.dailyIncrement <= 1000000)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].dailyIncrement = pData.dailyIncrement;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range) for", "INCREMENT");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("CASHMAXIMUM"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CASH_DAILY;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.dailyMaximum = (unsigned) atol(pData.szCharData);
|
||||||
|
if (pData.dailyMaximum >= 0 && pData.dailyMaximum <= 1000000)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].dailyMaximum = pData.dailyMaximum;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range) for", "CASHMAXIMUM");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("RETAINED"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CASH_DAILY;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.dailyRetained = (unsigned) atol(pData.szCharData);
|
||||||
|
if (pData.dailyRetained >= 0 && pData.dailyRetained <= 100)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].dailyRetained = pData.dailyRetained;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range of 0..100) for", "RETAINED");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("COOLNESS"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CONTROL;
|
||||||
|
}
|
||||||
|
else if (NameIs("COOLMINIMUM"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_COOLNESS;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.minCoolness = (unsigned) atol(pData.szCharData);
|
||||||
|
if (pData.minCoolness >= 0 && pData.minCoolness <= 10)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].minCoolness = pData.minCoolness;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range of 0..10) for", "COOLMINIMUM");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("COOLMAXIMUM"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_COOLNESS;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.maxCoolness = (unsigned) atol(pData.szCharData);
|
||||||
|
if (pData.maxCoolness >= 0 && pData.maxCoolness <= 10)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].maxCoolness = pData.maxCoolness;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range of 0..10) for", "COOLMAXIMUM");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("COOLADD"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_COOLNESS;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.addToCoolness = (unsigned) atol(pData.szCharData);
|
||||||
|
if (pData.addToCoolness >= 0 && pData.addToCoolness <= 10)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].addToCoolness = pData.addToCoolness;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range of 0..10) for", "COOLADD");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("PROGRESSRATE"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_COOLNESS;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
pData.coolnessProgressRate = (unsigned) atol(pData.szCharData);
|
||||||
|
if (pData.coolnessProgressRate >= 0 && pData.coolnessProgressRate <= 100)
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].coolnessProgressRate = pData.coolnessProgressRate;
|
||||||
|
else
|
||||||
|
DisplayAndLogParserError("Invalid value (outside valid range of 0..100) for", "PROGRESSRATE");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("USEBOBBYRAYSETTING"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_COOLNESS;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
//pData.useBRSetting = true;
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].useBRSetting = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("ALLINVENTORYALWAYSAVAILBLE"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_COOLNESS;
|
||||||
|
if (CheckArmsDealerIndex(pData)) {
|
||||||
|
//pData.useBRSetting = true;
|
||||||
|
armsDealerInfo[pData.armsDealerIndex].allInventoryAlwaysAvailable = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NameIs("BASICDEALERFLAGS"))
|
||||||
|
{
|
||||||
|
pData.curElement = MERCHANT_CONTROL;
|
||||||
|
}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_HANDGUNCLASS", ARMS_DEALER_HANDGUNCLASS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_SMGCLASS", ARMS_DEALER_SMGCLASS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_RIFLECLASS", ARMS_DEALER_RIFLECLASS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_MGCLASS", ARMS_DEALER_MGCLASS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_SHOTGUNCLASS", ARMS_DEALER_SHOTGUNCLASS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_KNIFECLASS", ARMS_DEALER_KNIFECLASS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_BLADE", ARMS_DEALER_BLADE)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_LAUNCHER", ARMS_DEALER_LAUNCHER)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_ARMOUR", ARMS_DEALER_ARMOUR)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_MEDKIT", ARMS_DEALER_MEDKIT)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_MISC", ARMS_DEALER_MISC)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_AMMO", ARMS_DEALER_AMMO)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_GRENADE", ARMS_DEALER_GRENADE)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_BOMB", ARMS_DEALER_BOMB)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_EXPLOSV", ARMS_DEALER_EXPLOSV)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_KIT", ARMS_DEALER_KIT)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_FACE", ARMS_DEALER_FACE)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_DETONATORS", ARMS_DEALER_DETONATORS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_ATTACHMENTS", ARMS_DEALER_ATTACHMENTS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_ALCOHOL", ARMS_DEALER_ALCOHOL)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_ELECTRONICS", ARMS_DEALER_ELECTRONICS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_HARDWARE", ARMS_DEALER_HARDWARE)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_MEDICAL", ARMS_DEALER_MEDICAL)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_CREATURE_PARTS", ARMS_DEALER_CREATURE_PARTS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_ROCKET_RIFLE", ARMS_DEALER_ROCKET_RIFLE)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_ONLY_USED_ITEMS", ARMS_DEALER_ONLY_USED_ITEMS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_GIVES_CHANGE", ARMS_DEALER_GIVES_CHANGE)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_ACCEPTS_GIFTS", ARMS_DEALER_ACCEPTS_GIFTS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_SOME_USED_ITEMS", ARMS_DEALER_SOME_USED_ITEMS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_HAS_NO_INVENTORY", ARMS_DEALER_HAS_NO_INVENTORY)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_ALL_GUNS", ARMS_DEALER_ALL_GUNS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_BIG_GUNS", ARMS_DEALER_BIG_GUNS)) {}
|
||||||
|
else if (HandleUIFlag(pData, name, "ARMS_DEALER_ALL_WEAPONS", ARMS_DEALER_ALL_WEAPONS)) {}
|
||||||
|
else {
|
||||||
|
// Something unexpected, error!
|
||||||
|
DisplayAndLogParserError ("unknown/unexpected end element", name);
|
||||||
}
|
}
|
||||||
|
|
||||||
pData->maxReadDepth--;
|
pData.maxReadDepth--;
|
||||||
}
|
}
|
||||||
|
|
||||||
pData->currentDepth--;
|
pData.currentDepth--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -127,7 +630,8 @@ BOOLEAN ReadInInventoryStats(DEALER_POSSIBLE_INV *pInv, STR fileName)
|
|||||||
UINT32 uiBytesRead;
|
UINT32 uiBytesRead;
|
||||||
UINT32 uiFSize;
|
UINT32 uiFSize;
|
||||||
CHAR8 * lpcBuffer;
|
CHAR8 * lpcBuffer;
|
||||||
XML_Parser parser = XML_ParserCreate(NULL);
|
parser = XML_ParserCreate(NULL);
|
||||||
|
gFileName = fileName;
|
||||||
|
|
||||||
inventoryParseData pData;
|
inventoryParseData pData;
|
||||||
|
|
||||||
@@ -149,40 +653,37 @@ BOOLEAN ReadInInventoryStats(DEALER_POSSIBLE_INV *pInv, STR fileName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
lpcBuffer[uiFSize] = 0; //add a null terminator
|
lpcBuffer[uiFSize] = 0; //add a null terminator
|
||||||
|
|
||||||
FileClose( hFile );
|
FileClose( hFile );
|
||||||
|
|
||||||
|
|
||||||
XML_SetElementHandler(parser, inventoryStartElementHandle, inventoryEndElementHandle);
|
XML_SetElementHandler(parser, inventoryStartElementHandle, inventoryEndElementHandle);
|
||||||
XML_SetCharacterDataHandler(parser, inventoryCharacterDataHandle);
|
XML_SetCharacterDataHandler(parser, inventoryCharacterDataHandle);
|
||||||
|
|
||||||
|
// Set the default values
|
||||||
memset(&pData,0,sizeof(pData));
|
memset(&pData,0,sizeof(pData));
|
||||||
|
pData.armsDealerIndex = NOARMSDEALERID;
|
||||||
|
|
||||||
pData.curArray = pInv;
|
pData.curArray = pInv;
|
||||||
pData.maxArraySize = MAXITEMS;
|
pData.maxArraySize = MAXITEMS;
|
||||||
|
|
||||||
XML_SetUserData(parser, &pData);
|
XML_SetUserData(parser, &pData);
|
||||||
|
|
||||||
|
|
||||||
if(!XML_Parse(parser, lpcBuffer, uiFSize, TRUE))
|
if(!XML_Parse(parser, lpcBuffer, uiFSize, TRUE))
|
||||||
{
|
{
|
||||||
CHAR8 errorBuf[511];
|
DisplayAndLogParserError (XML_ErrorString(XML_GetErrorCode(parser)), "");
|
||||||
|
errorInData = true;
|
||||||
sprintf(errorBuf, "XML Parser Error in Inventory.xml: %s at line %d", XML_ErrorString(XML_GetErrorCode(parser)), XML_GetCurrentLineNumber(parser));
|
|
||||||
LiveMessage(errorBuf);
|
|
||||||
|
|
||||||
MemFree(lpcBuffer);
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MemFree(lpcBuffer);
|
MemFree(lpcBuffer);
|
||||||
|
|
||||||
|
|
||||||
XML_ParserFree(parser);
|
XML_ParserFree(parser);
|
||||||
|
|
||||||
|
if (errorInData)
|
||||||
return( TRUE );
|
// Assume message already generated
|
||||||
|
return FALSE;
|
||||||
|
else
|
||||||
|
return( TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOLEAN WriteInventoryStats(DEALER_POSSIBLE_INV *pInv, STR fileName)
|
BOOLEAN WriteInventoryStats(DEALER_POSSIBLE_INV *pInv, STR fileName)
|
||||||
{
|
{
|
||||||
//DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"writeinventorystats");
|
//DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"writeinventorystats");
|
||||||
|
|||||||
Reference in New Issue
Block a user