public void SwapWeapon(int swapIndex, int nowIndex) { EquipValue equipValue = equipValues[nowIndex]; equipValues[nowIndex] = equipValues[swapIndex]; equipValues[swapIndex] = equipValue; dirtyFlag = eDirtyState.Dirty; }
public void SetEquipItem(CharaInfo.EquipItem item, int index) { if (object.ReferenceEquals(item, null)) { if (index != -1) { equipValues[index] = null; dirtyFlag = eDirtyState.Dirty; } } else { EquipItemTable.EquipItemData equipItemData = Singleton <EquipItemTable> .I.GetEquipItemData((uint)item.eId); if (!object.ReferenceEquals(equipItemData, null)) { if (index == -1) { switch (equipItemData.type) { default: return; case EQUIPMENT_TYPE.ONE_HAND_SWORD: case EQUIPMENT_TYPE.TWO_HAND_SWORD: case EQUIPMENT_TYPE.SPEAR: case EQUIPMENT_TYPE.PAIR_SWORDS: case EQUIPMENT_TYPE.ARROW: index = 0 + setWeaponIndex; setWeaponIndex++; break; case EQUIPMENT_TYPE.ARMOR: index = 3; break; case EQUIPMENT_TYPE.HELM: index = 4; break; case EQUIPMENT_TYPE.ARM: index = 5; break; case EQUIPMENT_TYPE.LEG: index = 6; break; } } EquipValue equipValue = new EquipValue(); equipValue.Parse(item, equipItemData); equipValues[index] = equipValue; dirtyFlag = eDirtyState.Dirty; } } }
public StatusFactor GetStatusFactor(int weaponIndex) { if (weaponIndex < 0 || weaponIndex >= 3) { return(null); } if (weaponIndex == cachedWeaponIndex && dirtyFlag >= eDirtyState.CalcFactor) { return(cachedFactor); } cachedFactor.Reset(); EQUIPMENT_TYPE weaponType = EQUIPMENT_TYPE.NONE; SP_ATTACK_TYPE spAttackType = SP_ATTACK_TYPE.NONE; for (int i = 0; i < 7; i++) { if (!object.ReferenceEquals(equipValues[i], null)) { EquipValue equipValue = equipValues[i]; if (i < 3) { if (i != weaponIndex) { continue; } weaponType = equipValue.type; spAttackType = equipValue.spAttackType; } cachedFactor.baseStatus.hp += equipValue.baseStatus.hp; cachedFactor.constHp += equipValue.constHp; for (int j = 0; j < 7; j++) { cachedFactor.baseStatus.attacks[j] += equipValue.baseStatus.attacks[j]; cachedFactor.constAtks[j] += equipValue.constAtks[j]; } cachedFactor.baseStatus.defences[0] += equipValue.baseStatus.defences[0]; cachedFactor.constDefs[0] += equipValue.constDefs[0]; for (int k = 0; k < 6; k++) { cachedFactor.baseStatus.tolerances[k] += equipValue.baseStatus.tolerances[k]; cachedFactor.constTols[k] += equipValue.constTols[k]; } _GetEnableSkillSupport(weaponType, spAttackType, equipValue); } } for (int l = 0; l < 6; l++) { cachedFactor.baseStatus.defences[l + 1] += cachedFactor.baseStatus.defences[0]; } cachedFactor.CheckMinusRate(); cachedWeaponIndex = weaponIndex; dirtyFlag = eDirtyState.CalcFactor; return(cachedFactor); }
private void _Reset() { for (int i = 0; i < 7; i++) { equipValues[i] = null; } cachedFinal.Reset(); cachedFactor.Reset(); cachedWeaponIndex = -1; cachedHp = 0; cachedAtk = 0; cachedDef = 0; dirtyFlag = eDirtyState.Dirty; setWeaponIndex = 0; }
public SimpleStatus GetFinalStatus(int weaponIndex, int userHp, int userAtk, int userDef) { if (weaponIndex == cachedWeaponIndex && userHp == cachedHp && userAtk == cachedAtk && userDef == cachedDef && dirtyFlag == eDirtyState.CalcFinal) { return(cachedFinal); } GetStatusFactor(weaponIndex); cachedFinal.Reset(); cachedFinal.hp = (int)((float)(userHp + cachedFactor.baseStatus.hp) * cachedFactor.hpRate + (float)cachedFactor.constHp); if (cachedFinal.hp < 1) { cachedFinal.hp = 1; } for (int i = 0; i < 7; i++) { if (i == 0) { cachedFinal.attacks[i] = (int)((float)(userAtk + cachedFactor.baseStatus.attacks[i]) * cachedFactor.atkRate[i] + (float)cachedFactor.constAtks[i]); } else { cachedFinal.attacks[i] = (int)((float)cachedFactor.baseStatus.attacks[i] * cachedFactor.atkRate[i] + (float)cachedFactor.constAtks[i]); } if (cachedFinal.attacks[i] < 0) { cachedFinal.attacks[i] = 0; } cachedFinal.defences[i] = (int)((float)(userDef + cachedFactor.baseStatus.defences[i]) * cachedFactor.defRate[i] + (float)cachedFactor.constDefs[i]); if (cachedFinal.defences[i] < 0) { cachedFinal.defences[i] = 0; } } for (int j = 0; j < 6; j++) { cachedFinal.tolerances[j] = (int)((float)cachedFactor.baseStatus.tolerances[j] * cachedFactor.tolRate[j] + (float)cachedFactor.constTols[j]); } cachedHp = userHp; cachedAtk = userAtk; cachedDef = userDef; dirtyFlag = eDirtyState.CalcFinal; return(cachedFinal); }