UFO: Alien Invasion
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
cp_market.cpp File Reference

Single player market stuff. More...

#include "../../cl_shared.h"
#include "cp_campaign.h"
#include "cp_market.h"
#include "cp_popup.h"
#include "save/save_market.h"

Go to the source code of this file.

Macros

#define BID_FACTOR   0.9
 
#define BS_GetMarket()   (&ccs.eMarket)
 

Functions

bool BS_IsOnMarket (const objDef_t *item)
 Check if an item is on market. More...
 
int BS_GetItemOnMarket (const objDef_t *od)
 Get the number of items of the given type on the market. More...
 
void BS_AddItemToMarket (const objDef_t *od, int amount)
 Internal function to add items to the market. More...
 
static void BS_RemoveItemFromMarket (const objDef_t *od, int amount)
 Internal function to remove items from the market. More...
 
int BS_GetItemSellingPrice (const objDef_t *od)
 Get the price for an item that you want to sell on the market. More...
 
int BS_GetItemBuyingPrice (const objDef_t *od)
 Get the price for an item that you want to buy on the market. More...
 
bool BS_AircraftIsOnMarket (const aircraft_t *aircraft)
 Checks whether a given aircraft should appear on the market. More...
 
int BS_GetAircraftOnMarket (const aircraft_t *aircraft)
 Get the number of aircraft of the given type on the market. More...
 
static void BS_AddAircraftToMarket (const aircraft_t *aircraft, int amount)
 Internal function to add aircraft to the market. More...
 
static void BS_RemoveAircraftFromMarket (const aircraft_t *aircraft, int amount)
 Internal function to remove aircraft from the market. More...
 
int BS_GetAircraftSellingPrice (const aircraft_t *aircraft)
 Get the price for an aircraft that you want to sell on the market. More...
 
int BS_GetAircraftBuyingPrice (const aircraft_t *aircraft)
 Get the price for an aircraft that you want to buy on the market. More...
 
static void BS_ProcessCraftItemSale (const objDef_t *craftitem, const int numItems)
 Update storage, the market, and the player's credits. More...
 
bool BS_BuyAircraft (const aircraft_t *aircraftTemplate, base_t *base)
 Buys an aircraft. More...
 
bool BS_SellAircraft (aircraft_t *aircraft)
 Sells the given aircraft with all the equipment. More...
 
bool BS_BuyUGV (const ugv_t *ugv, base_t *base)
 Buys the given UGV. More...
 
bool BS_SellUGV (Employee *robot)
 Sells the given UGV with all the equipment. More...
 
bool BS_BuyItem (const objDef_t *od, base_t *base, int count)
 Buys items from the market. More...
 
bool BS_SellItem (const objDef_t *od, base_t *base, int count)
 Sells items from the market. More...
 
bool BS_SaveXML (xmlNode_t *parent)
 Save callback for savegames. More...
 
bool BS_LoadXML (xmlNode_t *parent)
 Load callback for savegames. More...
 
void BS_InitMarket (const campaign_t *campaign)
 sets market prices at start of the game More...
 
void CP_CampaignRunMarket (campaign_t *campaign)
 make number of items change every day. More...
 
bool BS_BuySellAllowed (const base_t *base)
 Returns true if you can buy or sell equipment. More...
 

Detailed Description

Single player market stuff.

Note
Buy/Sell functions prefix: BS_

Definition in file cp_market.cpp.

Macro Definition Documentation

#define BID_FACTOR   0.9

Definition at line 32 of file cp_market.cpp.

Referenced by BS_InitMarket().

Function Documentation

static void BS_AddAircraftToMarket ( const aircraft_t aircraft,
int  amount 
)
static

Internal function to add aircraft to the market.

Parameters
[in]aircraftAircraft template definition
[in]amountNon-negative number of aircraft to add

Definition at line 139 of file cp_market.cpp.

References AIR_IsUFO, BS_GetMarket, cgi, aircraft_s::id, market_s::numAircraft, and type.

Referenced by BS_SellAircraft(), and CP_CampaignRunMarket().

void BS_AddItemToMarket ( const objDef_t od,
int  amount 
)

Internal function to add items to the market.

Parameters
[in]odObject definition (the item itself)
[in]amountNon-negative number of items to add

Definition at line 63 of file cp_market.cpp.

References BS_GetMarket, objDef_s::idx, and market_s::numItems.

Referenced by BS_ProcessCraftItemSale(), BS_SellItem(), BS_SellUGV(), and CP_CampaignRunMarket().

bool BS_AircraftIsOnMarket ( const aircraft_t aircraft)

Checks whether a given aircraft should appear on the market.

Parameters
aircraftThe aircraft to check
Returns
true if the aircraft should appear on the market

Definition at line 111 of file cp_market.cpp.

References AIR_IsUFO, and aircraft_s::price.

Referenced by BS_FillMarket_f(), and BS_GetAircraftOnMarket().

bool BS_BuyAircraft ( const aircraft_t aircraftTemplate,
base_t base 
)

Buys an aircraft.

Parameters
[in]aircraftTemplateThe aircraft template to buy
[out]baseBase to buy at
Returns
true if the aircraft could get bought, false otherwise

Definition at line 236 of file cp_market.cpp.

References AIR_NewAircraft(), BS_GetAircraftBuyingPrice(), BS_GetAircraftOnMarket(), BS_RemoveAircraftFromMarket(), ccs, cgi, CP_UpdateCredits(), ccs_s::credits, and ERR_DROP.

Referenced by BS_Buy_f().

bool BS_BuyItem ( const objDef_t od,
base_t base,
int  count 
)

Buys items from the market.

Parameters
[in]odpointer to the item (Object Definition record)
[out]baseBase to buy at
[in]countNumber of items to buy
Returns
true if the ugv could get bought, false otherwise

Definition at line 381 of file cp_market.cpp.

References B_AddToStorage(), BS_GetItemBuyingPrice(), BS_GetItemOnMarket(), BS_IsOnMarket(), BS_RemoveItemFromMarket(), CAP_GetFreeCapacity(), CAP_ITEMS, ccs, cgi, CP_UpdateCredits(), ccs_s::credits, ERR_DROP, and objDef_s::size.

Referenced by BS_Buy_f().

bool BS_BuySellAllowed ( const base_t base)

Returns true if you can buy or sell equipment.

Parameters
[in]basePointer to base to check on
See also
B_BaseInit_f

Definition at line 655 of file cp_market.cpp.

References B_GetBuildingStatus(), B_IsUnderAttack, and B_STORAGE.

Referenced by B_BaseInit_f(), and B_BuildingOpenAfterClick_f().

bool BS_BuyUGV ( const ugv_t ugv,
base_t base 
)

Buys the given UGV.

Parameters
[in]ugvThe ugv template of the UGV to buy
[out]baseBase to buy at
Returns
true if the ugv could get bought, false otherwise
Todo:
Implement this correctly once we have UGV

Definition at line 307 of file cp_market.cpp.

References B_AddToStorage(), BS_GetItemOnMarket(), BS_RemoveItemFromMarket(), CAP_GetFreeCapacity(), CAP_ITEMS, ccs, cgi, CP_UpdateCredits(), ccs_s::credits, E_CountUnhiredRobotsByType(), E_HireRobot(), ERR_DROP, ugv_s::id, INVSH_GetItemByID(), ugv_s::price, objDef_s::size, UGV_SIZE, and ugv_s::weapon.

Referenced by BS_Buy_f().

int BS_GetAircraftBuyingPrice ( const aircraft_t aircraft)

Get the price for an aircraft that you want to buy on the market.

Parameters
[in]aircraftThe aircraft to buy
Returns
The price of the aircraft

Definition at line 210 of file cp_market.cpp.

References AIR_IsUFO, market_s::askAircraft, BS_GetMarket, cgi, aircraft_s::id, and type.

Referenced by BS_Buy_f(), BS_BuyAircraft(), and BS_FillMarket_f().

int BS_GetAircraftOnMarket ( const aircraft_t aircraft)

Get the number of aircraft of the given type on the market.

Parameters
[in]aircraftThe aircraft to search the market for
Returns
The amount of aircraft for the given type

Definition at line 126 of file cp_market.cpp.

References BS_AircraftIsOnMarket(), BS_GetMarket, cgi, aircraft_s::id, market_s::numAircraft, and type.

Referenced by BS_BuyAircraft(), and BS_FillMarket_f().

int BS_GetAircraftSellingPrice ( const aircraft_t aircraft)

Get the price for an aircraft that you want to sell on the market.

Parameters
[in]aircraftThe aircraft to sell
Returns
The price of the aircraft

Definition at line 169 of file cp_market.cpp.

References AIR_IsUFO, AIR_STATS_DAMAGE, aircraftSlot_s::ammo, market_s::bidAircraft, BS_GetItemSellingPrice(), BS_GetMarket, cgi, aircraft_s::damage, aircraft_s::electronics, i, aircraft_s::id, aircraftSlot_s::item, aircraft_s::maxElectronics, aircraft_s::maxWeapons, aircraft_s::shield, aircraft_s::stats, aircraft_s::tpl, type, and aircraft_s::weapons.

Referenced by BS_FillMarket_f(), and BS_SellAircraft().

int BS_GetItemBuyingPrice ( const objDef_t od)

Get the price for an item that you want to buy on the market.

Parameters
[in]odThe item to buy
Returns
The price of the item

Definition at line 100 of file cp_market.cpp.

References market_s::askItems, BS_GetMarket, and objDef_s::idx.

Referenced by BS_Buy_f(), BS_BuyItem(), and BS_FillMarket_f().

int BS_GetItemOnMarket ( const objDef_t od)

Get the number of items of the given type on the market.

Parameters
[in]odthe item (objDef) to search the market for
Returns
The amount of items for the given type

Definition at line 52 of file cp_market.cpp.

References BS_GetMarket, BS_IsOnMarket(), objDef_s::idx, and market_s::numItems.

Referenced by BS_Buy_f(), BS_BuyItem(), BS_BuyUGV(), and BS_FillMarket_f().

int BS_GetItemSellingPrice ( const objDef_t od)

Get the price for an item that you want to sell on the market.

Parameters
[in]odThe item to sell
Returns
The price of the item

Definition at line 89 of file cp_market.cpp.

References market_s::bidItems, BS_GetMarket, and objDef_s::idx.

Referenced by B_SellOrAddItems(), BS_FillMarket_f(), BS_GetAircraftSellingPrice(), BS_ProcessCraftItemSale(), and BS_SellItem().

bool BS_IsOnMarket ( const objDef_t item)

Check if an item is on market.

Parameters
[in]itemPointer to the item to check
Note
this function doesn't check if the item is available on market (buyable > 0)

Definition at line 41 of file cp_market.cpp.

References objDef_s::isVirtual, and objDef_s::notOnMarket.

Referenced by BS_Buy_f(), BS_BuyItem(), BS_FillMarket_f(), BS_GetItemOnMarket(), BS_SaveXML(), BS_SellItem(), BS_ShowInfo_f(), and CP_ItemsSanityCheck().

static void BS_ProcessCraftItemSale ( const objDef_t craftitem,
const int  numItems 
)
static

Update storage, the market, and the player's credits.

Note
Don't update capacity here because we can sell items directly from aircraft (already removed from storage).

Definition at line 222 of file cp_market.cpp.

References BS_AddItemToMarket(), BS_GetItemSellingPrice(), ccs, CP_UpdateCredits(), and ccs_s::credits.

Referenced by BS_SellAircraft().

static void BS_RemoveAircraftFromMarket ( const aircraft_t aircraft,
int  amount 
)
static

Internal function to remove aircraft from the market.

Parameters
[in]aircraftAircraft template definition
[in]amountNon-negative number of aircraft to remove

Definition at line 153 of file cp_market.cpp.

References AIR_IsUFO, BS_GetMarket, cgi, aircraft_s::id, market_s::numAircraft, and type.

Referenced by BS_BuyAircraft(), and CP_CampaignRunMarket().

static void BS_RemoveItemFromMarket ( const objDef_t od,
int  amount 
)
static

Internal function to remove items from the market.

Parameters
[in]odObject definition (the item itself)
[in]amountNon-negative number of items to remove

Definition at line 75 of file cp_market.cpp.

References BS_GetMarket, objDef_s::idx, and market_s::numItems.

Referenced by BS_BuyItem(), BS_BuyUGV(), and CP_CampaignRunMarket().

bool BS_SellAircraft ( aircraft_t aircraft)

Sells the given aircraft with all the equipment.

Parameters
aircraftThe aircraft to sell
Returns
true if the aircraft could get sold, false otherwise

Definition at line 264 of file cp_market.cpp.

References AIR_DeleteAircraft(), AIR_GetTeamSize(), AIR_IsAircraftInBase(), aircraftSlot_s::ammo, BS_AddAircraftToMarket(), BS_GetAircraftSellingPrice(), BS_ProcessCraftItemSale(), ccs, CP_UpdateCredits(), ccs_s::credits, aircraft_s::electronics, aircraftSlot_s::item, aircraft_s::maxElectronics, aircraft_s::maxWeapons, aircraft_s::shield, and aircraft_s::weapons.

Referenced by BS_Buy_f().

bool BS_SellItem ( const objDef_t od,
base_t base,
int  count 
)

Sells items from the market.

Parameters
[in]odpointer to the item (Object Definition record)
[out]baseBase to sell at
[in]countNumber of items to sell
Returns
true if the ugv could get sold, false otherwise

Definition at line 413 of file cp_market.cpp.

References B_AddToStorage(), B_ItemInBase(), BS_AddItemToMarket(), BS_GetItemSellingPrice(), BS_IsOnMarket(), ccs, cgi, CP_UpdateCredits(), ccs_s::credits, and ERR_DROP.

Referenced by B_SellOrAddItems(), and BS_Buy_f().

bool BS_SellUGV ( Employee robot)

Sells the given UGV with all the equipment.

Parameters
robotThe employee record of the UGV to sell
Returns
true if the ugv could get sold, false otherwise
Todo:
Implement this correctly once we have UGV
Todo:
message - Couldn't fire employee.

Definition at line 343 of file cp_market.cpp.

References B_AddToStorage(), Employee::baseHired, BS_AddItemToMarket(), ccs, cgi, Employee::chr, CP_UpdateCredits(), ccs_s::credits, DEBUG_CLIENT, ERR_DROP, Employee::getUGV(), ugv_s::id, INVSH_GetItemByID(), ugv_s::price, character_s::ucn, Employee::unhire(), and ugv_s::weapon.

Referenced by BS_Buy_f().

void CP_CampaignRunMarket ( campaign_t campaign)

make number of items change every day.

See also
CP_CampaignRun
daily called
Note
This function makes items number on market slowly reach the asymptotic number of items defined in equipment.ufo If an item has just been researched, it's not available on market until RESEARCH_LIMIT_DELAY days is reached.

< Number of days to reach the asymptotic number of items

< Numbers of days after end of research to wait in order to have items added on market

Definition at line 578 of file cp_market.cpp.

References AIR_GetAircraft(), campaign_s::asymptoticMarketDef, BS_AddAircraftToMarket(), BS_AddItemToMarket(), BS_GetMarket, BS_RemoveAircraftFromMarket(), BS_RemoveItemFromMarket(), ccs, cgi, cgame_import_s::Com_DropShipTypeToShortName(), cgame_import_s::csi, market_s::currentEvolutionAircraft, market_s::currentEvolutionItems, ccs_s::date, date_s::day, i, int(), INVSH_GetItemByIDX(), campaign_s::marketDef, market_s::numAircraft, equipDef_s::numAircraft, market_s::numItems, equipDef_s::numItems, csi_s::numODs, technology_s::researchedDate, RS_GetTechForItem(), RS_IsResearched_ptr(), aircraft_s::tech, and type.

Referenced by CP_CampaignRun(), and TEST_F().