int farmMgr::StartFarmed(int cid, int pos, json_spirit::Object& robj) { boost::shared_ptr<CharData> cdata = GeneralDataMgr::getInstance()->GetCharData(cid); if (!cdata.get()) { return HC_ERROR; } int now_seed = cdata->queryExtraData(char_data_type_daily, char_data_farm_seed); if (now_seed >= FieldNum(cid)*2) { return HC_ERROR; } boost::shared_ptr<fieldlist> p_fl = GetCharFieldList(cid); if (p_fl.get()) { if (pos < 1 || pos > (*p_fl).size()) { return HC_ERROR; } boost::shared_ptr<field> pf = (*p_fl)[pos - 1]; INFO("check pos:" << pos << endl); if (pf.get() && pf->m_state == field_free) { pf->m_start_time = time(NULL); pf->m_end_time = pf->m_start_time + 240 * 60; pf->m_left_num = 240 / 6; pf->start(); cdata->setExtraData(char_data_type_daily, char_data_farm_seed, ++now_seed); return HC_SUCCESS; } } return HC_ERROR; }
void DBObjTable::RedefineField(DBObjTableField *field, DBObjTableField *newField) { DBInt recID, fieldID; DBObjRecord *record, *oldRecord; DBObjTableField *tmpField; newField->StartByte(field->StartByte()); if (field->Length() != newField->Length()) { RecordLengthVAR += (newField->Length() - field->Length()); for (fieldID = field->RowID() + 1; fieldID < FieldNum(); ++fieldID) { tmpField = Field(fieldID); tmpField->StartByte(tmpField->StartByte() + newField->Length() - field->Length()); } } for (recID = 0; recID < ItemNum(); recID++) { record = Item(recID); oldRecord = new DBObjRecord(*record); if (field->Length() != newField->Length()) { record->Realloc(RecordLengthVAR); if (newField->StartByte() + newField->Length() < RecordLengthVAR) memcpy(((char *) record->Data()) + newField->StartByte() + newField->Length(), ((char *) oldRecord->Data()) + field->StartByte() + field->Length(), RecordLengthVAR - (newField->StartByte() + newField->Length())); } switch (newField->Type()) { case DBTableFieldString: newField->String(record, field->String(oldRecord)); break; case DBTableFieldInt: newField->Int(record, field->Int(oldRecord)); break; case DBTableFieldFloat: newField->Float(record, field->Float(oldRecord)); break; case DBTableFieldDate: newField->Date(record, field->Date(oldRecord)); break; case DBTableFieldCoord: newField->Coordinate(record, field->Coordinate(oldRecord)); break; case DBTableFieldRegion: newField->Region(record, field->Region(oldRecord)); break; case DBTableFieldPosition: newField->Position(record, field->Position(oldRecord)); break; case DBTableFieldTableRec: case DBTableFieldDataRec: newField->Record(record, field->Record(oldRecord)); break; } delete oldRecord; } if (strcmp(field->Name(), newField->Name()) != 0) field->Name(newField->Name()); if (field->Type() != newField->Type()) field->Type(newField->Type()); if (field->FormatWidth() != newField->FormatWidth()) field->FormatWidth(newField->FormatWidth()); if ((field->Type() == DBTableFieldFloat) && (field->FormatDecimals() != field->FormatDecimals())) field->FormatDecimals(newField->FormatDecimals()); if (field->Length() != newField->Length()) field->Length(newField->Length()); }
int farmMgr::getNourishReward(int cid) { int reward = 0; int max_reward = FieldNum(cid) * 1440; boost::shared_ptr<fieldlist> fl = farmMgr::getInstance()->GetCharFieldList(cid); if (fl.get()) { for (size_t j = 0; j < (*fl).size(); ++j) { if ((*fl)[j].get()) reward += (*fl)[j]->get_nourish(); } } if (reward > max_reward) reward = max_reward; //屯田收益系数 farmRealReward(reward); return reward; }