Example #1
0
 public void AddCreatureEntity(creature creature)
 {
     var guid = new ObjectGUID((ulong)creature.guid, TypeID.TYPEID_UNIT);
     var creatureEntity = new CreatureEntity(guid, creature, vanillaWorld);
     CreatureEntities.Add(creatureEntity);
     creatureEntity.Setup();
 }
Example #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CombatantCreature"/> class.
        /// </summary>
        /// <param name="creationMetadata">The metadata for this player.</param>
        /// <param name="preselectedId">Optional. A pre-selected id to use for the combatant. Picks a new id if none (or 0) is specified.</param>
        /// <param name="baseAttackSpeed">
        /// Optional. The base attack speed for this creature.
        /// Bounded between [<see cref="CombatConstants.MinimumCombatSpeedFactor"/>, <see cref="CombatConstants.MaximumCombatSpeedFactor"/>] inclusive.
        /// Defaults to <see cref="CombatConstants.DefaultAttackSpeedFactor"/>.
        /// </param>
        /// <param name="baseDefenseSpeed">
        /// Optional. The base defense speed for this creature.
        /// Bounded between [<see cref="CombatConstants.MinimumCombatSpeedFactor"/>, <see cref="CombatConstants.MaximumCombatSpeedFactor"/>] inclusive.
        /// Defaults to <see cref="CombatConstants.DefaultDefenseSpeedFactor"/>.
        /// </param>
        protected CombatantCreature(
            CreatureEntity creationMetadata,
            uint preselectedId       = 0,
            decimal baseAttackSpeed  = CombatConstants.DefaultAttackSpeedFactor,
            decimal baseDefenseSpeed = CombatConstants.DefaultDefenseSpeedFactor)
            : base(creationMetadata, preselectedId)
        {
            // Normalize combat speeds.
            this.baseAttackSpeed  = Math.Min(CombatConstants.MaximumCombatSpeedFactor, Math.Max(CombatConstants.MinimumCombatSpeedFactor, baseAttackSpeed));
            this.baseDefenseSpeed = Math.Min(CombatConstants.MaximumCombatSpeedFactor, Math.Max(CombatConstants.MinimumCombatSpeedFactor, baseDefenseSpeed));

            this.combatSessionDamageTakenMap = new ConcurrentDictionary <uint, uint>();
            this.combatSessionAttackedBy     = new HashSet <ICombatant>();

            this.creatureAwarenessMap = new Dictionary <ICreature, AwarenessLevel>();

            this.Skills = new Dictionary <SkillType, ISkill>();

            this.Stats.Add(CreatureStat.AttackPoints, new Stat(CreatureStat.AttackPoints, 1, CombatConstants.DefaultMaximumAttackCredits));
            this.Stats[CreatureStat.AttackPoints].ValueChanged += this.RaiseStatChange;

            this.Stats.Add(CreatureStat.DefensePoints, new Stat(CreatureStat.DefensePoints, 2, CombatConstants.DefaultMaximumDefenseCredits));
            this.Stats[CreatureStat.DefensePoints].ValueChanged += this.RaiseStatChange;

            this.StatChanged += (ICreature creature, IStat statThatChanged, uint previousValue, byte previousPercent) =>
            {
                if (statThatChanged.Type == CreatureStat.HitPoints && statThatChanged.Current == 0)
                {
                    this.Death?.Invoke(this);
                }
            };
        }
Example #3
0
        public TopicEntry GetTopic(CreatureEntity collocutor, int conversationIndex, TopicEntry parentTopic, string phrase)
        {
            TopicEntry result = null;

            DialogEntry       dlg        = Dialog;
            ConversationEntry curConvers = dlg.GetConversation(conversationIndex);

            if (parentTopic == null)
            {
                result = curConvers.GetTopic(0);
            }
            else
            {
                for (int i = 0; i < parentTopic.TopicsCount; i++)
                {
                    TopicEntry subTopic = parentTopic.GetTopic(i);
                    if ((subTopic.Phrase == phrase))
                    {
                        result = subTopic;
                        break;
                    }
                }
            }

            return(result);
        }
Example #4
0
        public void ApplyEffects(CreatureEntity target, InvokeMode invokeMode, EffectExt extData)
        {
            try {
                ItemEntry.EffectEntry[] effects = fEntry.Effects;
                if (effects == null)
                {
                    return;
                }

                int num = effects.Length;
                for (int i = 0; i < num; i++)
                {
                    ItemEntry.EffectEntry eff = fEntry.Effects[i];

                    EffectExt ext;
                    if (invokeMode < InvokeMode.im_UseBegin || invokeMode >= InvokeMode.im_ItSelf)
                    {
                        ext = extData;
                    }
                    else
                    {
                        ext = new EffectExt();
                        ext.SetParam(EffectParams.ep_ItemExt, eff.ExtData);
                    }

                    ((NWCreature)target).UseEffect(eff.EffID, this, invokeMode, ext);
                }
            } catch (Exception ex) {
                Logger.Write("Item.applyEffects(): " + ex.Message);
            }
        }
Example #5
0
    void OnTriggerEnter2D(Collider2D coll)
    {
        layer = coll.gameObject.layer;

        if (layer == ENEMY_WEAPON)
        {
            enemyWeapon = coll.GetComponent <Weapon>();

            if (!enemyWeapon.alreadyCollided && !levelCompleted && !dead)
            {
                if (enemyWeapon.weaponType == Weapon.WeaponType.Hammer ||
                    enemyWeapon.weaponType == Weapon.WeaponType.Dagger ||
                    enemyWeapon.weaponType == Weapon.WeaponType.MagicProjectile)
                {
                    enemyWeapon.alreadyCollided = true;

                    SendMessageUpwards("TakesHit", hit.Args(gameObject, coll));
                }
            }
        }
        else if (layer == ENEMY_COLLIDER)
        {
            enemy = coll.GetComponent <CreatureEntity>();

            if (!enemy.alreadyCollided && !levelCompleted && !dead)
            {
                if (enemy.entityType == CreatureEntity.EntityType.Enemy)
                {
                    enemy.alreadyCollided = true;

                    // player.TouchesEnemy("touch", enemy, coll, hitFrom);
                }
            }
        }
    }
	void OnTriggerEnter2D(Collider2D coll)
	{
		layer = coll.gameObject.layer;

		if (layer == ENEMY_WEAPON)
		{
			enemyWeapon = coll.GetComponent<Weapon>();

			if (!enemyWeapon.alreadyCollided && !levelCompleted && !dead)
			{
				if (enemyWeapon.weaponType == Weapon.WeaponType.Hammer ||
						enemyWeapon.weaponType == Weapon.WeaponType.Dagger ||
						enemyWeapon.weaponType == Weapon.WeaponType.MagicProjectile)
				{
					enemyWeapon.alreadyCollided = true;

					SendMessageUpwards("TakesHit", hit.Args(gameObject, coll));
				}
			}
		}
		else if (layer == ENEMY_COLLIDER)
		{
			enemy = coll.GetComponent<CreatureEntity>();

			if (!enemy.alreadyCollided && !levelCompleted && !dead)
			{
				if (enemy.entityType == CreatureEntity.EntityType.Enemy)
				{
					enemy.alreadyCollided = true;

					// player.TouchesEnemy("touch", enemy, coll, hitFrom);
				}
			}
		}
	}
        private void AddNewCreature(string selectedHerd, CreatureBuffer newCreature)
        {
            var newEntity = new CreatureEntity
            {
                Id                     = CreatureEntity.GenerateNewCreatureId(context),
                Name                   = newCreature.Name,
                Herd                   = selectedHerd,
                Age                    = newCreature.Age,
                TakenCareOfBy          = newCreature.CaredBy,
                BrandedFor             = newCreature.BrandedBy,
                FatherName             = newCreature.FatherName,
                MotherName             = newCreature.MotherName,
                Traits                 = newCreature.Traits,
                TraitsInspectedAtSkill = newCreature.InspectSkill,
                IsMale                 = newCreature.IsMale,
                PregnantUntil          = newCreature.PregnantUntil,
                SecondaryInfoTagSetter = newCreature.SecondaryInfo,
                ServerName             = newCreature.Server != null ? newCreature.Server.ServerName.Original : string.Empty,
                SmilexamineLastDate    = DateTime.Now,
                CreatureColorId        = newCreature.HasColorWurmLogText
                    ? creatureColorDefinitions.GetColorIdByWurmLogText(newCreature.ColorWurmLogText)
                    : CreatureColor.GetDefaultColor().CreatureColorId
            };

            newEntity.EpicCurve = newCreature.Server != null &&
                                  newCreature.Server.ServerGroup.ServerGroupId == ServerGroup.EpicId;

            context.InsertCreature(newEntity);
            debugLogger.Log("successfully inserted creature to db");
            trayPopups.Schedule(String.Format("Added new creature to herd {0}: {1}", selectedHerd, newEntity), "CREATURE ADDED");
        }
Example #8
0
        public PSCreatureQueryResponse(uint entry, CreatureEntity entity)
            : base(WorldOpcodes.SMSG_CREATURE_QUERY_RESPONSE)
        {
            this.Write(entry);
            this.WriteCString(entity.Name);
            this.WriteNullByte(3); // Name2,3,4

            if (entity.Template.SubName == "\\N")
            {
                this.WriteNullByte(1);
            }
            else
            {
                this.WriteCString(entity.Template.SubName);
            }

            this.Write((UInt32)entity.Template.CreatureTypeFlags);
            this.Write((UInt32)entity.Template.CreatureType);
            this.Write((UInt32)entity.Template.Family);
            this.Write((UInt32)entity.Template.Rank);
            this.WriteNullUInt(1);

            this.Write((UInt32)entity.Template.PetSpellDataId);
            this.Write((UInt32)entity.Creature.modelid);
            this.Write((UInt16)entity.Template.Civilian);
        }
        public PSCreatureQueryResponse(uint entry, CreatureEntity entity)
            : base(WorldOpcodes.SMSG_CREATURE_QUERY_RESPONSE)
        {
            this.Write(entry);
            this.WriteCString(entity.Name);
            this.WriteNullByte(3); // Name2,3,4

            if (entity.Template.SubName == "\\N")
            {
                this.WriteNullByte(1);
            }
            else
            {
                this.WriteCString(entity.Template.SubName);
            }

            this.Write((UInt32)entity.Template.CreatureTypeFlags);
            this.Write((UInt32)entity.Template.CreatureType);
            this.Write((UInt32)entity.Template.Family);
            this.Write((UInt32)entity.Template.Rank);
            this.WriteNullUInt(1);

            this.Write((UInt32)entity.Template.PetSpellDataId);
            this.Write((UInt32)entity.Creature.modelid);
            this.Write((UInt16)entity.Template.Civilian);
        }
        public void SetEscortGoal(CreatureEntity leader, bool isParty)
        {
            EscortGoal goal = (EscortGoal)CreateGoal(GoalKind.gk_Escort);

            goal.Leader   = leader;
            goal.NotParty = !isParty;
        }
Example #11
0
        public void AddCreatureEntity(creature creature)
        {
            var guid           = new ObjectGUID((ulong)creature.guid, TypeID.TYPEID_UNIT);
            var creatureEntity = new CreatureEntity(guid, creature, vanillaWorld);

            CreatureEntities.Add(creatureEntity);
            creatureEntity.Setup();
        }
Example #12
0
        IEnumerable <XElement> GetTraitListXML(CreatureEntity creatureEntity)
        {
            var result = new List <XElement>();

            foreach (var trait in creatureEntity.Traits)
            {
                result.Add(new XElement("Trait", new XAttribute("TraitId", (int)trait.CreatureTraitId), trait.ToString()));
            }
            return(result);
        }
Example #13
0
        public bool AddMember(CreatureEntity member)
        {
            bool result = false;

            if (member != null && fList.Count < 10 && IndexOfMember(member) < 0)
            {
                fList.Add(member);
                result = true;
            }
            return(result);
        }
Example #14
0
 string GetGender(CreatureEntity creatureEntity)
 {
     if (creatureEntity.IsMale == null)
     {
         return(string.Empty);
     }
     else
     {
         return(creatureEntity.IsMale.Value ? "male" : "female");
     }
 }
Example #15
0
        public bool RemoveMember(CreatureEntity member)
        {
            bool result = false;

            if (member != null)
            {
                fList.Remove(member);
                result = true;
            }
            return(result);
        }
        protected virtual void PrepareChase(CreatureEntity enemy, AttackRisk risk, bool canMove)
        {
            EnemyChaseGoal chaseGoal = (EnemyChaseGoal)FindGoalByKind(GoalKind.gk_EnemyChase);

            if (chaseGoal == null || !chaseGoal.Enemy.Equals(enemy))
            {
                chaseGoal         = ((EnemyChaseGoal)CreateGoal(GoalKind.gk_EnemyChase));
                chaseGoal.Enemy   = enemy;
                chaseGoal.Risk    = risk;
                chaseGoal.CanMove = canMove;
            }
        }
        protected virtual void PrepareEvade(CreatureEntity enemy, AttackRisk risk, bool canMove)
        {
            EnemyEvadeGoal evadeGoal = (EnemyEvadeGoal)FindGoalByKind(GoalKind.gk_EnemyEvade);

            if (evadeGoal == null || !evadeGoal.Enemy.Equals(enemy))
            {
                evadeGoal         = ((EnemyEvadeGoal)CreateGoal(GoalKind.gk_EnemyEvade));
                evadeGoal.Enemy   = enemy;
                evadeGoal.Risk    = risk;
                evadeGoal.CanMove = canMove;
            }
        }
Example #18
0
        public void ClearMercenaries()
        {
            if (fBrain is LeaderBrain)
            {
                LeaderBrain leader = ((LeaderBrain)fBrain);

                for (int i = leader.Members.Count - 1; i >= 1; i--)
                {
                    CreatureEntity member = leader.Members[i];
                    ((NWCreature)member).IsMercenary = false;
                }
            }
        }
Example #19
0
        public LeaderBrain(CreatureEntity owner)
            : base(owner)
        {
            fDir      = Directions.DtNone;
            fList     = new ExtList <CreatureEntity>();
            Formation = PartyFormation.pfWedge;
            AddMember(owner);

            fOffsets = new PMPos[PartyMax + 1];
            for (int i = 0; i <= PartyMax; i++)
            {
                fOffsets[i] = new PMPos();
            }
        }
    public void TouchesEnemy(string weaponType, CreatureEntity enemy, Collider2D coll, int hitFrom)
    {
        player.HP -= (int)(enemy.touchDamage * diffDamageModifier);

        EventKit.Broadcast <int>("reduce hp", player.HP);

        if (player.HP > 0)
        {
            MFX.FadeToColorAndBack(spriteRenderer, MCLR.bloodRed, 0f, .2f);
        }
        else
        {
            EventKit.Broadcast <int, Weapon.WeaponType>("player dead", hitFrom, Weapon.WeaponType.Struckdown);
        }
    }
	public void TouchesEnemy(string weaponType, CreatureEntity enemy, Collider2D coll, int hitFrom)
	{
		player.HP -= (int)(enemy.touchDamage * game.dDamageMod);

		EventKit.Broadcast<int>("reduce hp", player.HP);

		if (player.HP > 0)
		{
			MFX.FadeToColorAndBack(spriteRenderer, MCLR.bloodRed, 0f, .2f);
		}
		else
		{
			EventKit.Broadcast<int, Weapon.WeaponType>("player dead", hitFrom, Weapon.WeaponType.Struckdown);
		}
	}
Example #22
0
 public Creature(
     FormGrangerMain mainForm,
     CreatureEntity entity,
     GrangerContext context,
     [NotNull] CreatureColorDefinitions creatureColorDefinitions)
 {
     if (creatureColorDefinitions == null)
     {
         throw new ArgumentNullException(nameof(creatureColorDefinitions));
     }
     BreedHintColor = null;
     this.mainForm  = mainForm;
     Entity         = entity;
     this.context   = context;
     this.creatureColorDefinitions = creatureColorDefinitions;
 }
    public void TouchesEnemy(string weaponType, CreatureEntity enemy, Collider2D coll, int hitFrom)
    {
        // calculate damage
        player.HP -= (int)(enemy.touchDamage * DIFFICULTY_DAMAGE_MODIFIER);

        // produce effects
        Messenger.Broadcast<int>("reduce hp", player.HP);

        if (player.HP > 0)
        {
            MFX.FadeToColorAndBack(spriteRenderer, MCLR.bloodRed, 0f, .2f);
        }
        else
        {
            Messenger.Broadcast<string, Collider2D, int>("player dead", "struckdown", coll, hitFrom);
        }
    }
    void OnTriggerExit2D(Collider2D coll)
    {
        layer = coll.gameObject.layer;

        if (layer == ENEMY_WEAPON)
        {
            enemyWeapon = coll.GetComponent<Weapon>();

            enemyWeapon.alreadyCollided = false;
        }
        else if (layer == ENEMY_COLLIDER)
        {
            enemy = coll.GetComponent<CreatureEntity>();

            enemy.alreadyCollided = false;
        }
    }
    void OnTriggerExit2D(Collider2D coll)
    {
        layer = coll.gameObject.layer;

        if (layer == ENEMY_WEAPON_COLLIDER)
        {
            enemyWeapon = coll.GetComponent <Weapon>() ?? coll.GetComponentInParent <ProjectileContainer>().weapon;

            enemyWeapon.alreadyCollided = false;
        }
        else if (layer == ENEMY_BODY_COLLIDER)
        {
            enemy = coll.GetComponent <CreatureEntity>();

            enemy.alreadyCollided = false;
        }
    }
Example #26
0
        public AiBrain(CreatureEntity entity)
        {
            this.entity = entity;

            var moveTemplates = CreatureMovementTemplates.Where(ways => ways.entry == entity.Template.Entry).ToList();
            if (moveTemplates.Count != 0)
            {
                moveTemplates.ForEach(way => waypoints.Add(new Waypoint() { PointIndex = way.point, Point = new Vector3(way.position_x, way.position_y, way.position_z) }));
            }
            else
            {
                var creatureMovements = CreatureMovements.Where(ways => ways.id == entity.Creature.id).ToList();
                creatureMovements.ForEach(way => waypoints.Add(new Waypoint() { PointIndex = way.point, Point = new Vector3(way.position_x, way.position_y, way.position_z) }));
            }

            SetNextWaypoint();
        }
Example #27
0
    void OnTriggerExit2D(Collider2D coll)
    {
        layer = coll.gameObject.layer;

        if (layer == ENEMY_WEAPON)
        {
            enemyWeapon = coll.GetComponent <Weapon>();

            enemyWeapon.alreadyCollided = false;
        }
        else if (layer == ENEMY_COLLIDER)
        {
            enemy = coll.GetComponent <CreatureEntity>();

            enemy.alreadyCollided = false;
        }
    }
Example #28
0
    public void TouchesEnemy(string weaponType, CreatureEntity enemy, Collider2D coll, int hitFrom)
    {
        // calculate damage
        player.HP -= (int)(enemy.touchDamage * DIFFICULTY_DAMAGE_MODIFIER);

        // produce effects
        Messenger.Broadcast <int>("reduce hp", player.HP);

        if (player.HP > 0)
        {
            MFX.FadeToColorAndBack(spriteRenderer, MCLR.bloodRed, 0f, .2f);
        }
        else
        {
            Messenger.Broadcast <string, Collider2D, int>("player dead", "struckdown", coll, hitFrom);
        }
    }
    void OnTriggerExit2D(Collider2D coll)
    {
        // check for layer instead of name — it's much quicker
        layer = coll.gameObject.layer;

        if (layer == ENEMY_WEAPON)
        {
            enemyWeapon = coll.GetComponent<Weapon>();

            enemyWeapon.alreadyCollided = false;
        }
        else if (layer == ENEMY_COLLIDER)
        {
            enemy = coll.GetComponent<CreatureEntity>();

            enemy.alreadyCollided = false;

        }
    }
        public override float GetPathTileCost(CreatureEntity creature, int tx, int ty, BaseTile tile)
        {
            bool barrier;

            if (creature == null)
            {
                barrier = IsBarrier(tx, ty);
            }
            else
            {
                barrier = !creature.CanMove(this, tx, ty);
                if (!barrier && creature.IsSeen(tx, ty, false))
                {
                    barrier = (FindCreature(tx, ty) != null);
                }
            }

            return(barrier ? PathSearch.BARRIER_COST : 1.0f);
        }
Example #31
0
 public PSMonsterMove(CreatureEntity target, List<Vector3> path)
     : base(WorldOpcodes.SMSG_MONSTER_MOVE)
 {
     this.WritePackedUInt64(target.ObjectGUID.RawGUID);
     this.Write(target.Location.X);
     this.Write(target.Location.Y);
     this.Write(target.Location.Z);
     this.Write((UInt32)Environment.TickCount);
     this.Write((byte)0); // SPLINETYPE_NORMAL
     this.Write(0); // sPLINE FLAG
     var time = this.GetDistanceForPath(target.Location.Position, path) / UnitSpeed.UNIT_NORMAL_RUN_SPEED * 1000;
     this.Write((int)time); // TIME
     this.Write(path.Count);//count
     for (int i = 0; i < path.Count; i++)
     {
         this.Write(path[i].X);
         this.Write(path[i].Y);
         this.Write(path[i].Z);
     }
 }
Example #32
0
        public PSMonsterMove(CreatureEntity target, List <Vector3> path)
            : base(WorldOpcodes.SMSG_MONSTER_MOVE)
        {
            this.WritePackedUInt64(target.ObjectGUID.RawGUID);
            this.Write(target.Location.X);
            this.Write(target.Location.Y);
            this.Write(target.Location.Z);
            this.Write((UInt32)Environment.TickCount);
            this.Write((byte)0); // SPLINETYPE_NORMAL
            this.Write(0);       // sPLINE FLAG
            var time = this.GetDistanceForPath(target.Location.Position, path) / UnitSpeed.UNIT_NORMAL_RUN_SPEED * 1000;

            this.Write((int)time);  // TIME
            this.Write(path.Count); //count
            for (int i = 0; i < path.Count; i++)
            {
                this.Write(path[i].X);
                this.Write(path[i].Y);
                this.Write(path[i].Z);
            }
        }
Example #33
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Creature"/> class.
        /// </summary>
        /// <param name="creationMetadata">The metadata for this player.</param>
        protected Creature(CreatureEntity creationMetadata)
        {
            creationMetadata.ThrowIfNull(nameof(creationMetadata));
            creationMetadata.Name.ThrowIfNullOrWhiteSpace(nameof(creationMetadata.Name));

            if (creationMetadata.MaxHitpoints == 0)
            {
                throw new ArgumentException($"{nameof(creationMetadata.MaxHitpoints)} must be positive.", nameof(creationMetadata.MaxHitpoints));
            }

            lock (Creature.IdLock)
            {
                this.Id = idCounter++;
            }

            this.Name         = creationMetadata.Name;
            this.Article      = creationMetadata.Article;
            this.CorpseTypeId = creationMetadata.Corpse;

            this.LastMovementCostModifier = 1;

            this.Outfit = new Outfit
            {
                Id = 0,
                ItemIdLookAlike = 0,
            };

            this.Stats = new Dictionary <CreatureStat, IStat>();

            this.creatureAwarenessMap = new Dictionary <ICreature, AwarenessLevel>();

            this.Stats.Add(CreatureStat.HitPoints, new Stat(CreatureStat.HitPoints, creationMetadata.CurrentHitpoints == default ? creationMetadata.MaxHitpoints : creationMetadata.CurrentHitpoints, creationMetadata.MaxHitpoints));
            this.Stats[CreatureStat.HitPoints].Changed += this.RaiseStatChange;

            this.Stats.Add(CreatureStat.CarryStrength, new Stat(CreatureStat.CarryStrength, 150, CreatureConstants.MaxCreatureCarryStrength));
            this.Stats[CreatureStat.CarryStrength].Changed += this.RaiseStatChange;

            this.Stats.Add(CreatureStat.BaseSpeed, new Stat(CreatureStat.BaseSpeed, 70, CreatureConstants.MaxCreatureSpeed));
            this.Stats[CreatureStat.BaseSpeed].Changed += this.RaiseStatChange;
        }
    void OnTriggerEnter2D(Collider2D coll)
    {
        // check for layer instead of name — it's much quicker
        layer = coll.gameObject.layer;

        if (layer == ENEMY_WEAPON)
        {
            enemyWeapon = coll.GetComponent<Weapon>();

            if (!enemyWeapon.alreadyCollided && !game.LevelLoading && !state.Dead)
            {
                hitFrom = MLib.HorizSideThatWasHit(gameObject, coll);

                if (enemyWeapon.weaponType == Weapon.WeaponType.Hammer ||
                    enemyWeapon.weaponType == Weapon.WeaponType.Dagger ||
                    enemyWeapon.weaponType == Weapon.WeaponType.MagicProjectile)
                {
                    enemyWeapon.alreadyCollided = true;

                    player.TakesHit("projectile", enemyWeapon, coll, hitFrom);
                }
            }
        }
        else if (layer == ENEMY_COLLIDER)
        {
            enemy = coll.GetComponent<CreatureEntity>();

            if (!enemy.alreadyCollided && !game.LevelLoading && !state.Dead)
            {
                hitFrom = MLib.HorizSideThatWasHit(gameObject, coll);

                if (enemy.entityType == CreatureEntity.EntityType.Enemy)
                {
                    enemy.alreadyCollided = true;

                    player.TouchesEnemy("touch", enemy, coll, hitFrom);
                }
            }
        }
    }
Example #35
0
    void OnTriggerEnter2D(Collider2D coll)
    {
        layer = coll.gameObject.layer;

        if (layer == ENEMY_WEAPON)
        {
            enemyWeapon = coll.GetComponent <Weapon>();

            if (!enemyWeapon.alreadyCollided && !game.LevelLoading && !state.Dead)
            {
                hitFrom = M.HorizSideThatWasHit(gameObject, coll);

                if (enemyWeapon.weaponType == Weapon.WeaponType.Hammer ||
                    enemyWeapon.weaponType == Weapon.WeaponType.Dagger ||
                    enemyWeapon.weaponType == Weapon.WeaponType.MagicProjectile)
                {
                    enemyWeapon.alreadyCollided = true;

                    player.TakesHit("projectile", enemyWeapon, coll, hitFrom);
                }
            }
        }
        else if (layer == ENEMY_COLLIDER)
        {
            enemy = coll.GetComponent <CreatureEntity>();

            if (!enemy.alreadyCollided && !game.LevelLoading && !state.Dead)
            {
                hitFrom = M.HorizSideThatWasHit(gameObject, coll);

                if (enemy.entityType == CreatureEntity.EntityType.Enemy)
                {
                    enemy.alreadyCollided = true;

                    // player.TouchesEnemy("touch", enemy, coll, hitFrom);
                }
            }
        }
    }
        private void PrepareFlock()
        {
            try {
                IsLeader = true;
                Kinsfolks.Clear();

                NWCreature self = (NWCreature)fSelf;
                NWField    fld  = self.CurrentField;

                fNearKinsfolk     = null;
                fNearKinsfolkDist = AuxUtils.MaxInt;

                int num = fld.Creatures.Count;
                for (int i = 0; i < num; i++)
                {
                    NWCreature cr   = fld.Creatures.GetItem(i);
                    int        dist = MathHelper.Distance(cr.Location, self.Location);
                    if (!cr.Equals(self) && dist <= self.Survey && cr.CLSID == self.CLSID && fld.LineOfSight(self.PosX, self.PosY, cr.PosX, cr.PosY))
                    {
                        Kinsfolks.Add(cr);
                        if (fNearKinsfolkDist > dist)
                        {
                            fNearKinsfolkDist = dist;
                            fNearKinsfolk     = cr;
                        }
                        IsLeader = (IsLeader && self.Leadership > cr.Leadership);
                    }
                }

                if (FindGoalByKind(GoalKind.gk_Flock) == null)
                {
                    GoalEntity goal = CreateGoal(GoalKind.gk_Flock);
                    goal.Duration = 25;
                }
            } catch (Exception ex) {
                Logger.Write("BeastBrain.prepareFlock(): " + ex.Message);
            }
        }
 private void ExtractBreedingPairCreature(string fixedName, CreatureEntity[] creatures)
 {
     if (creatures.Length == 1)
     {
         CreatureEntity creature = creatures[0];
         if (creature.IsMale ?? false)
         {
             lastBreedingMale = creature;
         }
         else
         {
             lastBreedingFemale = creature;
         }
     }
     else
     {
         string title   = null;
         string message = null;
         if (creatures.Length > 1)
         {
             message = (SearchEntireDb ? "Database has" : "Selected herds have")
                       + " more than one creature named: " + fixedName;
         }
         else if (creatures.Length == 0)
         {
             message = "Not a creature or " + (SearchEntireDb ? "" : "selected")
                       + " herds don't have a creature named: " + fixedName;
         }
         if (message != null)
         {
             ScheduleTrayPopup(message,
                               title ?? "BREED UPDATE PROBLEM",
                               6000,
                               forceShow: true);
         }
     }
 }
Example #38
0
        public override void LoadFromStream(BinaryReader stream, FileVersion version)
        {
            try {
                fID  = (BuildingID)StreamUtils.ReadInt(stream);
                Area = StreamUtils.ReadRect(stream);

                Doors.Clear();
                sbyte count = (sbyte)StreamUtils.ReadByte(stream);
                for (int i = 0; i < count; i++)
                {
                    int       dx  = StreamUtils.ReadInt(stream);
                    int       dy  = StreamUtils.ReadInt(stream);
                    int       dir = StreamUtils.ReadByte(stream);
                    DoorState st  = (DoorState)StreamUtils.ReadByte(stream);
                    AddDoor(dx, dy, dir, st);
                }

                int idx = StreamUtils.ReadInt(stream);
                Holder = ((idx == -1) ? null : (CreatureEntity)((NWField)Owner).Creatures.GetItem(idx));
            } catch (Exception ex) {
                Logger.Write("Building.loadFromStream(): " + ex.Message);
                throw ex;
            }
        }
Example #39
0
        public int GetTradePrice(CreatureEntity aBuyer, CreatureEntity aSeller)
        {
            int result = Price;

            NWCreature buyer  = (NWCreature)((aBuyer is NWCreature) ? aBuyer : null);
            NWCreature seller = (NWCreature)((aSeller is NWCreature) ? aSeller : null);

            if (buyer != null && seller != null)
            {
                if (seller.IsTrader)
                {
                    result = (int)Math.Round((result * 1.2));
                }
                else
                {
                    if (buyer.IsTrader)
                    {
                        result = (int)((int)((uint)result >> 1));
                    }
                }
            }

            return(result);
        }
Example #40
0
 public CreaturePacketBuilder(CreatureEntity entity)
 {
     this.entity = entity;
 }
Example #41
0
 public TraderBrain(CreatureEntity owner)
     : base(owner)
 {
 }