Beispiel #1
0
bool SLGMRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
    {
    switch(FieldID)
        {
        case 1: //flags1
            SetHeaderFlagMask(*(UINT32 *)FieldValue);
            break;
        case 3: //flags2
            SetHeaderUnknownFlagMask(*(UINT32 *)FieldValue);
            break;
        case 4: //eid
            EDID.Copy((STRING)FieldValue);
            break;
        case 5: //full
            FULL.Copy((STRING)FieldValue);
            break;
        case 6: //modPath
            MODL.Load();
            MODL->MODL.Copy((STRING)FieldValue);
            break;
        case 7: //modb
            MODL.Load();
            MODL->MODB.value = *(FLOAT32 *)FieldValue;
            break;
        case 8: //modt_p
            MODL.Load();
            MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize);
            break;
        case 9: //iconPath
            ICON.Copy((STRING)FieldValue);
            break;
        case 10: //script
            SCRI.value = *(FORMID *)FieldValue;
            return true;
        case 11: //value
            DATA.value.value = *(UINT32 *)FieldValue;
            break;
        case 12: //weight
            DATA.value.weight = *(FLOAT32 *)FieldValue;
            break;
        case 13: //soulType
            SetSoul(*(UINT8 *)FieldValue);
            break;
        case 14: //capacity
            SetCapacity(*(UINT8 *)FieldValue);
            break;
        default:
            break;
        }
    return false;
    }
Beispiel #2
0
bool REFRRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize)
{
    Data.Load();
    switch(FieldID)
    {
    case 1: //flags1
        SetHeaderFlagMask(*(uint32_t *)FieldValue);
        break;
    case 3: //flags2
        SetHeaderUnknownFlagMask(*(uint32_t *)FieldValue);
        break;
    case 4: //eid
        Data->EDID.Copy((char *)FieldValue);
        break;
    case 5: //base
        Data->NAME.value = *(FORMID *)FieldValue;
        return true;
    case 6: //destination
        Data->XTEL.Load();
        Data->XTEL->destinationFid = *(FORMID *)FieldValue;
        return true;
    case 7: //destinationPosX
        Data->XTEL.Load();
        Data->XTEL->destination.posX = *(float *)FieldValue;
        break;
    case 8: //destinationPosY
        Data->XTEL.Load();
        Data->XTEL->destination.posY = *(float *)FieldValue;
        break;
    case 9: //destinationPosZ
        Data->XTEL.Load();
        Data->XTEL->destination.posZ = *(float *)FieldValue;
        break;
    case 10: //destinationRotX
        Data->XTEL.Load();
        Data->XTEL->destination.rotX = *(float *)FieldValue;
        break;
    case 11: //destinationRotY
        Data->XTEL.Load();
        Data->XTEL->destination.rotY = *(float *)FieldValue;
        break;
    case 12: //destinationRotZ
        Data->XTEL.Load();
        Data->XTEL->destination.rotZ = *(float *)FieldValue;
        break;
    case 13: //lockLevel
        Data->XLOC.Load();
        Data->XLOC->level = *(uint8_t *)FieldValue;
        break;
    case 14: //unused1
        if(ArraySize != 3)
            break;
        Data->XLOC.Load();
        Data->XLOC->unused1[0] = ((UINT8ARRAY)FieldValue)[0];
        Data->XLOC->unused1[1] = ((UINT8ARRAY)FieldValue)[1];
        Data->XLOC->unused1[2] = ((UINT8ARRAY)FieldValue)[2];
        break;
    case 15: //lockKey
        Data->XLOC.Load();
        Data->XLOC->key = *(FORMID *)FieldValue;
        return true;
    case 16: //unused2
        if(ArraySize != 4)
            break;
        Data->XLOC.Load();
        Data->XLOC->unused2[0] = ((UINT8ARRAY)FieldValue)[0];
        Data->XLOC->unused2[1] = ((UINT8ARRAY)FieldValue)[1];
        Data->XLOC->unused2[2] = ((UINT8ARRAY)FieldValue)[2];
        Data->XLOC->unused2[3] = ((UINT8ARRAY)FieldValue)[3];
        break;
    case 17: //lockFlags
        SetLockFlagMask(*(uint8_t *)FieldValue);
        break;
    case 18: //unused3
        if(ArraySize != 3)
            break;
        Data->XLOC.Load();
        Data->XLOC->unused3[0] = ((UINT8ARRAY)FieldValue)[0];
        Data->XLOC->unused3[1] = ((UINT8ARRAY)FieldValue)[1];
        Data->XLOC->unused3[2] = ((UINT8ARRAY)FieldValue)[2];
        break;
    case 19: //owner
        Data->Ownership.Load();
        Data->Ownership->XOWN.value = *(FORMID *)FieldValue;
        return true;
    case 20: //rank
        Data->Ownership.Load();
        Data->Ownership->XRNK.Load();
        *Data->Ownership->XRNK.value = *(int32_t *)FieldValue;
        break;
    case 21: //globalVariable
        Data->Ownership.Load();
        Data->Ownership->XGLB.value = *(FORMID *)FieldValue;
        return true;
    case 22: //parent
        Data->XESP.Load();
        Data->XESP->parent = *(FORMID *)FieldValue;
        return true;
    case 23: //parentFlags
        SetParentFlagMask(*(uint8_t *)FieldValue);
        break;
    case 24: //unused4
        if(ArraySize != 3)
            break;
        Data->XESP.Load();
        Data->XESP->unused1[0] = ((UINT8ARRAY)FieldValue)[0];
        Data->XESP->unused1[1] = ((UINT8ARRAY)FieldValue)[1];
        Data->XESP->unused1[2] = ((UINT8ARRAY)FieldValue)[2];
        break;
    case 25: //target
        Data->XTRG.value = *(FORMID *)FieldValue;
        return true;
    case 26: //seed
        Data->XSED.Load();
        //Borrowing ArraySize to flag if the new value is an offset
        if(ArraySize)
        {
            Data->XSED->isOffset = true;
            Data->XSED->offset = *(uint8_t *)FieldValue;
        }
        else
        {
            Data->XSED->isOffset = false;
            Data->XSED->seed = *(uint32_t *)FieldValue;
        }
        break;
    case 27: //lod1
        Data->XLOD.Load();
        Data->XLOD->lod1 = *(float *)FieldValue;
        break;
    case 28: //lod2
        Data->XLOD.Load();
        Data->XLOD->lod2 = *(float *)FieldValue;
        break;
    case 29: //lod3
        Data->XLOD.Load();
        Data->XLOD->lod3 = *(float *)FieldValue;
        break;
    case 30: //charge
        Data->XCHG.value = *(float *)FieldValue;
        break;
    case 31: //health
        Data->XHLT.value = *(int32_t *)FieldValue;
        break;
    case 32: //unknownXPCIFormID
        Data->XPCI.Load();
        Data->XPCI->XPCI.value = *(FORMID *)FieldValue;
        return true;
    case 33: //unknownXPCIString
        Data->XPCI.Load();
        Data->XPCI->FULL.Copy((char *)FieldValue);
        break;
    case 34: //levelMod
        Data->XLCM.value = *(int32_t *)FieldValue;
        break;
    case 35: //unknownXRTMFormID
        Data->XRTM.value = *(FORMID *)FieldValue;
        return true;
    case 36: //actionFlags
        SetActionFlagMask(*(uint32_t *)FieldValue);
        break;
    case 37: //count
        Data->XCNT.value = *(int32_t *)FieldValue;
        break;
    case 38: //markerFlags
        SetMapFlagMask(*(uint8_t *)FieldValue);
        break;
    case 39: //markerName
        Data->Marker.Load();
        Data->Marker->FULL.Copy((char *)FieldValue);
        break;
    case 40: //markerType
        SetMarkerType(*(uint8_t *)FieldValue);
        break;
    case 41: //markerUnused
        if(ArraySize != 1)
            break;
        Data->Marker.Load();
        Data->Marker->TNAM.value.unused1 = ((UINT8ARRAY)FieldValue)[0];
        break;
    case 42: //scale
        Data->XSCL.Load();
        Data->XSCL.value = *(float *)FieldValue;
        break;
    case 43: //soulType
        SetSoul(*(uint8_t *)FieldValue);
        break;
    case 44: //posX
        Data->DATA.value.posX = *(float *)FieldValue;
        break;
    case 45: //posY
        Data->DATA.value.posY = *(float *)FieldValue;
        break;
    case 46: //posZ
        Data->DATA.value.posZ = *(float *)FieldValue;
        break;
    case 47: //rotX
        Data->DATA.value.rotX = *(float *)FieldValue;
        break;
    case 48: //rotY
        Data->DATA.value.rotY = *(float *)FieldValue;
        break;
    case 49: //rotZ
        Data->DATA.value.rotZ = *(float *)FieldValue;
        break;
    default:
        break;
    }
    return false;
}