//unsubscribe from old and subscribe to new target with sending messages to target private void SubscribeToTarget(NebulaObject newTargetObject) { UnsubscribeFromTarget(); targetObject = newTargetObject; if (targetObject) { targetObject.SendMessage(ComponentMessages.OnTargetSubscribeMe, nebulaObject); } }
/// <summary> /// Add new damager item to damagers collection list /// </summary> /// <param name="damagerID">ID of damager</param> /// <param name="damagerType">Type of damager item</param> /// <param name="damage">Damage value</param> /// <param name="workshop">Workshop of damager if has workshop</param> /// <param name="level">Level of damager if has level</param> /// <param name="race">Race of damager if has race</param> /// <param name="source">Source damager object (may be null)</param> public void AddDamager(string damagerID, byte damagerType, float damage, byte workshop, int level, byte race, NebulaObject source) { //send message to damager when he is start attacking if (source != null && source) { if (!m_Damagers.Has(source.Id)) { source.SendMessage(ComponentMessages.OnStartAttack, nebulaObject); } } var damageInfo = m_Damagers.Add(damagerID, damagerType, damage, workshop, level, race); if (damageInfo != null) { //send message to self object when receive new damage nebulaObject.SendMessage(ComponentMessages.OnNewDamage, damageInfo); } }
private void GiveExpAndPvpPointsToPlayer(NebulaObject playerObject, NebulaObject owner, float difficulty, float npcLevel, float npcMaxHealth) { int baseExp = 20; float playerLevel = GetLevel(playerObject); float levelRat = npcLevel / playerLevel; float bexp = (difficulty * levelRat * (baseExp)); float hpExp = difficulty * Mathf.ClampLess(npcMaxHealth - 1000, 0f) * 0.01f; if (levelRat < 1.0f) { hpExp *= levelRat; } int exp = (int)Math.Round(bexp + hpExp); s_Log.InfoFormat("sended exp = {0} for bot difficulty = {1}, hp exp bonus = {2}", exp, difficulty, (int)(difficulty * Mathf.ClampLess(npcMaxHealth - 1000, 0f) * 0.01f)); playerObject.GetComponent <PlayerCharacterObject>().AddExp(exp); playerObject.SendMessage(ComponentMessages.OnEnemyDeath, owner); GivePvpPoints(playerObject, owner, npcLevel, (int)playerLevel); }