public SkillExecutor GetExecutor() { if (!mCachedExecutors.ContainsKey(data.Id)) { mCachedExecutors.Add(data.Id, SkillExecutor.Factory(data.Id)()); } return(mCachedExecutors[data.Id]); // return SkillExecutor.Executor(data.Id); }
public ActiveSkill(string id, string name, int amount, string executorTypeName) { _id = id; _name = name; _amount = amount; Type executorType = Type.GetType(executorTypeName); _executor = (SkillExecutor)Activator.CreateInstance(executorType ?? throw new Exception()); }
public override void Start() { base.Start(); mWeapon = RequireComponent <BaseWeapon>(); mMessage = RequireComponent <MmoMessageComponent>(); mCharacter = RequireComponent <CharacterObject>(); mTarget = RequireComponent <PlayerTarget>(); mMovable = GetComponent <MovableObject>(); m_Skills = GetComponent <PlayerSkills>(); m_Bonuses = GetComponent <PlayerBonuses>(); mChestLiveDuration = nebulaObject.world.Resource().ServerInputs.GetValue <float>("chest_life"); //log.InfoFormat("chest life = {0}", mChestLiveDuration); mShotTimer = m_ShotCooldown; mDead = false; combatAIType = aiType as CombatAIType; if (combatAIType == null) { log.Error("CombatBasseAI must have CombatAIType, but not simple AIType"); } mShipWeapon = GetComponent <ShipWeapon>(); if (Rand.Int() % 2 == 0) { mMovNearTargetType = MovingNearTarget.Circle; } else { mMovNearTargetType = MovingNearTarget.LIne; } mStartPosition = nebulaObject.transform.position; #if USE_SKILLS //--------------------------TESTING------------------------------------ var ship = GetComponent <BaseShip>(); if (ship) { string sSkill = skills[Rand.Int(skills.Count - 1)]; ship.shipModel.Slot(ShipModelSlotType.CB).Module.SetSkill(SkillExecutor.SkilIDFromHexString(sSkill)); mSkills = GetComponent <PlayerSkills>(); mSkills.UpdateSkills(ship.shipModel); } //-------------------------------------------------------------------- #endif mBotObject = GetComponent <BotObject>(); SetupSkills(); }
public override void Load(IController hud) { base.Load(hud); settings = new Settings(Hud); skillExecutor = new SkillExecutor(settings); settingsThread = new Thread(() => { settings.ShowDialog(); }); settingsThread.SetApartmentState(ApartmentState.STA); settingsThread.Start(); watermark = Hud.Render.CreateFont("tahoma", 8, 255, 255, 0, 0, true, false, false); }
//message handler on critical hit public void OnCriticalHit() { // log.InfoFormat("Message: OnCriticalHit yellow"); if (HasSkill(SkillExecutor.SkilIDFromHexString(INCREASE_MAX_HP_FOR_CRIT_ID))) { var skill = GetSkillById(SkillExecutor.SkilIDFromHexString(INCREASE_MAX_HP_FOR_CRIT_ID)); if (skill != null) { if (skill.isOn) { float hpPc = skill.GetDataInput <float>("hp_pc", 0f); float hpTime = skill.GetDataInput <float>("hp_time", 0f); int stackCount = skill.GetDataInput <int>("stack_count", 0); int buffCount = bonuses.GetBuffCountWithTag(BonusType.increase_max_hp_on_pc, INCREASE_MAX_HP_FOR_CRIT_BUFF_TAG); if (buffCount < stackCount) { // log.InfoFormat("set buff to max hp green"); Buff buff = new Buff(Guid.NewGuid().ToString(), null, BonusType.increase_max_hp_on_pc, hpTime, hpPc); buff.SetTag(INCREASE_MAX_HP_FOR_CRIT_BUFF_TAG); bonuses.SetBuff(buff, buff.owner); } } } } if (HasSkill(m456ID)) { var skill = GetSkillById(m456ID); if (skill.isOn) { float dmgPc = skill.GetFloatInput("dmg_pc"); float enCostPc = skill.GetFloatInput("en_pc"); float time = skill.GetFloatInput("time"); Buff dmgBuff = new Buff(skill.id, null, BonusType.increase_damage_on_pc, time, dmgPc); Buff energyCostBuff = new Buff(skill.id, null, BonusType.decrease_energy_cost_on_pc, time, enCostPc); bonuses.SetBuff(dmgBuff, dmgBuff.owner); bonuses.SetBuff(energyCostBuff, energyCostBuff.owner); } } }
public override void Start() { if (!m_StartCalled) { m_StartCalled = true; mPlayerShip = GetComponent <BaseShip>(); bonuses = GetComponent <PlayerBonuses>(); mDamagable = GetComponent <DamagableObject>(); message = GetComponent <MmoMessageComponent>(); energy = GetComponent <ShipEnergyBlock>(); m439ID = SkillExecutor.SkilIDFromHexString("00000439"); m43AID = SkillExecutor.SkilIDFromHexString("0000043A"); m451ID = SkillExecutor.SkilIDFromHexString("00000451"); m456ID = SkillExecutor.SkilIDFromHexString("00000456"); m45CID = SkillExecutor.SkilIDFromHexString("0000045C"); } SetBlockedProperty(false); started = true; }
public override void Load(IController hud) { base.Load(hud); settings = new Settings(Hud); skillExecutor = new SkillExecutor(settings); settingsThread = new Thread(() => { settings.ShowDialog(); }); settingsThread.SetApartmentState(ApartmentState.STA); settingsThread.Start(); watermarkEnabled = Hud.Render.CreateFont("tahoma", 8, 255, 0, 170, 0, true, false, false); watermarkDisabled = Hud.Render.CreateFont("tahoma", 8, 255, 170, 0, 0, true, false, false); version = Hud.Render.CreateFont("tahoma", 8, 255, 227, 227, 0, false, false, false); activeSkillBrush = settings.Hud.Render.CreateBrush(255, 0, 170, 0, 3.14f); inactiveSkillBrush = settings.Hud.Render.CreateBrush(255, 170, 0, 0, 3.14f); }
public void OnCriticalHeal(float critHeal) { if (bonuses != null) { float buffVal = bonuses.Value(BonusType.buff_41c); if (Mathf.NotEqual(buffVal, 0.0f)) { int sid = SkillExecutor.SkilIDFromHexString("0000041C"); if (HasSkill(sid)) { var skill = GetSkillById(sid); (skill.GetExecutor() as Skill_0000041C).Make(nebulaObject, skill, buffVal); } } } //if(m41C.active) { // var skill = GetSkillById(SkillExecutor.SkilIDFromHexString(SKILL_0000041C)); // if(skill != null ) { // (skill.GetExecutor() as Skill_0000041C).Make(nebulaObject, skill, m41C.value); // } //} }
//Check for skill "000003F9" - when give chance regenerate health when object killed, check before sending OnWasKilled public bool RespawnBySkill() { //log.InfoFormat("PlayerSkills.RespwanBySkill(): check blue"); //only for players if (nebulaObject.IsPlayer()) { int skillID = SkillExecutor.SkilIDFromHexString(RESPAWN_SKILL_ID); //we must have this skill and this skill is on if (HasSkill(skillID)) { var skill = GetSkillById(skillID); if (skill.isPersistentAndActive || skill.isPassive) { float respawnProb = skill.data.Inputs.GetValue <float>("resurrect_pc", 0f); float regeneratedHp = skill.data.Inputs.GetValue <float>("hp_regen_pc", 0f); float randomNumber = Rand.Float01(); //log.InfoFormat("Respawn by skill check, respawn prob = {0:F1}, random number = {1:F1} blue", respawnProb, randomNumber); if (randomNumber < respawnProb) { var damagable = nebulaObject.Damagable(); damagable.ForceSetHealth(damagable.maximumHealth * regeneratedHp); nebulaObject.MmoMessage().SendResurrect(); return(true); } } } int skill417ID = SkillExecutor.SkilIDFromHexString(SKILL_00000417); if (HasSkill(skill417ID)) { var skill = GetSkillById(skill417ID); if (skill.isPersistentAndActive || skill.isPassive) { float respawnProb = skill.GetFloatInput("resurrect_pc"); float regeneratedHp = skill.GetFloatInput("hp_regen_pc"); float randomNumber = Rand.Float01(); //log.InfoFormat("respawn by skill test need: {0} real: {1}", respawnProb, randomNumber); if (randomNumber < respawnProb) { // log.InfoFormat("object was success respawned by skill 00000417 [green]"); var damagable = nebulaObject.Damagable(); damagable.ForceSetHealth(damagable.maximumHealth * regeneratedHp); nebulaObject.MmoMessage().SendResurrect(); return(true); } } } int s435 = SkillExecutor.SkilIDFromHexString(SKILL_00000435); if (HasSkill(s435)) { var skill = GetSkillById(s435); if (skill.isPersistentAndActive || skill.isPassive) { var resurrectProb = skill.GetFloatInput("resurrect_pc"); var hpPc = skill.GetFloatInput("hp_regen_pc"); if (Rand.Float01() < resurrectProb) { var damagable = nebulaObject.Damagable(); damagable.ForceSetHealth(damagable.maximumHealth * hpPc); nebulaObject.MmoMessage().SendResurrect(); return(true); } } } int s453 = SkillExecutor.SkilIDFromHexString(SKILL_00000453); if (HasSkill(s453)) { var skill = GetSkillById(s453); if (skill.isPersistentAndActive || skill.isPassive) { var resurrectProb = skill.GetFloatInput("resurrect_pc"); var hpPc = skill.GetFloatInput("hp_regen_pc"); if (Rand.Float01() < resurrectProb) { var damagable = nebulaObject.Damagable(); damagable.ForceSetHealth(damagable.maximumHealth * hpPc); nebulaObject.MmoMessage().SendResurrect(); return(true); } } } } return(false); }
/// <summary> /// Called when my health restored /// </summary> /// <param name="sourceObject">Object which restore health to me</param> /// <param name="hp">Number of hp restored</param> public void OnHealthRestored(NebulaObject sourceObject, float hp) { ConcurrentBag <string> removedKeys = new ConcurrentBag <string>(); float time = Time.curtime(); foreach (var pair in mDamageHealReceivers) { if (time > pair.Value.expireTime || (!pair.Value.target)) { removedKeys.Add(pair.Key); } } if (removedKeys.Count > 0) { foreach (var id in removedKeys) { DamageReceiver old; mDamageHealReceivers.TryRemove(id, out old); } } var character = GetComponent <CharacterObject>(); var race = GetComponent <RaceableObject>(); foreach (var pair in mDamageHealReceivers) { float damage = hp * pair.Value.damagePercent; //pair.Value.target.ReceiveDamage(nebulaObject.Type, nebulaObject.Id, damage, character.workshop, character.level, race.race); if (pair.Value.target) { WeaponHitInfo hit; var shot = nebulaObject.Weapon().Fire(pair.Value.target.nebulaObject, out hit, SkillExecutor.SkilIDFromHexString("000007D5"), damage, true, true); nebulaObject.MmoMessage().SendShot(EventReceiver.OwnerAndSubscriber, shot); } } if (sourceObject.Id != nebulaObject.Id) { if (HasSkill(m451ID)) { var skill = GetSkillById(m451ID); if (skill.isOn) { float resistPc = skill.GetFloatInput("resist_pc"); float resistTime = skill.GetFloatInput("resist_time"); int stackCount = skill.GetIntInput("stack_count"); if (bonuses.GetBuffCountWithTag(BonusType.increase_resist_on_pc, m451ID) < stackCount) { Buff buff = new Buff(Guid.NewGuid().ToString(), null, BonusType.increase_resist_on_pc, resistTime, resistPc); buff.SetTag(m451ID); bonuses.SetBuff(BonusType.increase_resist_on_pc, buff, buff.owner); } } } } }