Пример #1
0
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;
}
Пример #2
0
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());
}
Пример #3
0
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;
}