void WeaponObjectImplementation::decay(CreatureObject* user) { if (_this.getReferenceUnsafeStaticCast() == user->getSlottedObject("default_weapon") || user->isAiAgent() || hasAntiDecayKit()) { return; } int roll = System::random(100); int chance = 5; if (hasPowerup()) chance += 10; if (roll < chance) { if (isJediWeapon()) { ManagedReference<SceneObject*> saberInv = getSlottedObject("saber_inv"); // TODO: is this supposed to be every crystal, or random crystal(s)? for (int i = 0; i < saberInv->getContainerObjectsSize(); i++) { ManagedReference<LightsaberCrystalComponent*> crystal = saberInv->getContainerObject(i).castTo<LightsaberCrystalComponent*>(); if (crystal != NULL) { crystal->inflictDamage(crystal, 0, 1, true, true); } } } else { inflictDamage(_this.getReferenceUnsafeStaticCast(), 0, 1, true, true); if (((float)conditionDamage - 1 / (float)maxCondition < 0.75) && ((float)conditionDamage / (float)maxCondition > 0.75)) user->sendSystemMessage("@combat_effects:weapon_quarter"); if (((float)conditionDamage - 1 / (float)maxCondition < 0.50) && ((float)conditionDamage / (float)maxCondition > 0.50)) user->sendSystemMessage("@combat_effects:weapon_half"); } } }
void LoLEngine::timerSpecialCharacterUpdate(int timerNum) { int v = 0; for (int i = 0; i < 4; i++) { if (!(_characters[i].flags & 1)) continue; for (int ii = 0; ii < 5; ii++) { if (!(_characters[i].characterUpdateEvents[ii])) continue; if (--_characters[i].characterUpdateDelay[ii] > 0) { if (_characters[i].characterUpdateDelay[ii] > v) v = _characters[i].characterUpdateDelay[ii]; continue; } switch (_characters[i].characterUpdateEvents[ii] - 1) { case 0: if (_characters[i].weaponHit) { _characters[i].weaponHit = 0; _characters[i].characterUpdateDelay[ii] = calcMonsterSkillLevel(i, 6); if (_characters[i].characterUpdateDelay[ii] > v) v = _characters[i].characterUpdateDelay[ii]; } else { _characters[i].flags &= 0xfffb; } gui_drawCharPortraitWithStats(i); break; case 1: _characters[i].damageSuffered = 0; gui_drawCharPortraitWithStats(i); break; case 2: _characters[i].flags &= 0xffbf; gui_drawCharPortraitWithStats(i); break; case 3: v = rollDice(1, 2); if (inflictDamage(i, v, 0x8000, 0, 0x80)) { _txt->printMessage(2, getLangString(0x4022), _characters[i].name); _characters[i].characterUpdateDelay[ii] = 10; if (_characters[i].characterUpdateDelay[ii] > v) v = _characters[i].characterUpdateDelay[ii]; } break; case 4: _characters[i].flags &= 0xfeff; _txt->printMessage(0, getLangString(0x4027), _characters[i].name); gui_drawCharPortraitWithStats(i); break; case 5: setTemporaryFaceFrame(i, 0, 0, 1); break; case 6: _characters[i].flags &= 0xefff; gui_drawCharPortraitWithStats(i); break; case 7: restoreSwampPalette(); break; default: break; } if (_characters[i].characterUpdateDelay[ii] <= 0) _characters[i].characterUpdateEvents[ii] = 0; } } if (v) { _timer->enable(3); _timer3Para = v * 15; } else { _timer->disable(3); } }