/* * Seven Kingdoms: Ancient Adversaries * * Copyright 1997,1998 Enlight Software Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include #include #include #include //--------- Begin of function TradeStop::pick_up_set_auto ---------// void TradeStop::pick_up_set_auto() { memset(pick_up_array, 0, sizeof(char)*MAX_PICK_UP_GOODS); pick_up_type = AUTO_PICK_UP; } //----------- End of function TradeStop::pick_up_set_auto -----------// //--------- Begin of function TradeStop::pick_up_set_none ---------// void TradeStop::pick_up_set_none() { memset(pick_up_array, 0, sizeof(char)*MAX_PICK_UP_GOODS); pick_up_type = NO_PICK_UP; } //----------- End of function TradeStop::pick_up_set_none -----------// //--------- Begin of function TradeStop::pick_up_toggle ---------// void TradeStop::pick_up_toggle(int pos) { char *posPtr = &pick_up_array[pos-1]; if(*posPtr) { *posPtr = 0; char firmId = firm_array[firm_recno]->firm_id; if(firmId==FIRM_MARKET || firmId==FIRM_HARBOR) { int i, allZero; for(i=0, allZero=1; i auto, only if more than one kind of cargo can be selected // 2) selective -> auto, only if num of goods > 1 //---------------------------------------------------------------------------// if(pick_up_type==NO_PICK_UP || num_of_pick_up_goods(enableTable)>1) { memset(pick_up_array, 0, sizeof(char)*MAX_PICK_UP_GOODS); pick_up_type = AUTO_PICK_UP; } } //----------- End of function TradeStop::mp_pick_up_set_auto -----------// //--------- Begin of function TradeStop::mp_pick_up_set_none ---------// void TradeStop::mp_pick_up_set_none(char *enableTable) { if(pick_up_type==NO_PICK_UP) return; //---------------------------------------------------------------------------// // 1) none -> none, only if more than one kind of cargo can be selected // 2) selective -> none, only if num of goods > 1 //---------------------------------------------------------------------------// if(pick_up_type==AUTO_PICK_UP || num_of_pick_up_goods(enableTable)>1) { memset(pick_up_array, 0, sizeof(char)*MAX_PICK_UP_GOODS); pick_up_type = NO_PICK_UP; } } //----------- End of function TradeStop::mp_pick_up_set_none -----------// //--------- Begin of function CaravanStop::update_pick_up ---------// // enableFlag - represent which button will be displayed // int CaravanStop::update_pick_up(char *enableFlag) { #ifdef DBEUG if(pick_up_type == AUTO_PICK_UP || pick_up_type == NO_PICK_UP) { for(int di=0; difirm_id) { case FIRM_MINE: err_when(pick_up_type==AUTO_PICK_UP); id = ((FirmMine*)firmPtr)->raw_id+PICK_UP_RAW_FIRST-1; if(id) { goodsNum = enableFlag[id] = 1; if(!pick_up_array[id-1]) pick_up_set_none(); // nothing can be taken if no cargo is matched } break; case FIRM_FACTORY: err_when(pick_up_type==AUTO_PICK_UP); id = ((FirmFactory*)firmPtr)->product_raw_id+PICK_UP_PRODUCT_FIRST-1; if(id) { goodsNum = enableFlag[id] = 1; if(!pick_up_array[id-1]) pick_up_set_none(); // nothing can be taken if no cargo is matched } break; case FIRM_MARKET: marketGoodsPtr = ((FirmMarket*) firmPtr)->market_goods_array; selectiveMode = (pick_up_type!=AUTO_PICK_UP && pick_up_type!=NO_PICK_UP); for(i=1; i<=MAX_MARKET_GOODS; i++, marketGoodsPtr++) { if((id = marketGoodsPtr->raw_id)) // 1-3 { goodsNum++; enableFlag[id] = 1; if(firstGoodsId==0) firstGoodsId = id; } else if((id = marketGoodsPtr->product_raw_id)) // 1-3 { id += MAX_RAW; // 4-6 goodsNum++; enableFlag[id] = 1; if(firstGoodsId==0) firstGoodsId = id; } } for(i=0; ifirm_id) { case FIRM_MINE: id = ((FirmMine*)firmPtr)->raw_id+PICK_UP_RAW_FIRST-1; if(id==pos) cargoExist = 1; break; case FIRM_FACTORY: id = ((FirmFactory*)firmPtr)->product_raw_id+PICK_UP_PRODUCT_FIRST-1; if(id==pos) cargoExist = 1; break; case FIRM_MARKET: marketGoodsPtr = ((FirmMarket*) firmPtr)->market_goods_array; for(i=1; i<=MAX_MARKET_GOODS; i++, marketGoodsPtr++) { if((id = marketGoodsPtr->raw_id)) // 1-3 { if(id==pos) { cargoExist = 1; break; } } else if((id = marketGoodsPtr->product_raw_id)) // 1-3 { id += MAX_PRODUCT; // 4-6 if(id==pos) { cargoExist = 1; break; } } } break; default: err_here(); break; } if(cargoExist) pick_up_toggle(pos); } //----------- End of function CaravanStop::mp_pick_up_toggle -----------//