public void CreateMonster(int[] spawnPointIds, bool arg2, int arg3)
        {
            foreach (int spawnPointId in spawnPointIds)
            {
                MapEventNpcSpawnPoint spawnPoint = MapEntityStorage.GetMapEventNpcSpawnPoint(Field.MapId, spawnPointId);
                if (spawnPoint == null)
                {
                    continue;
                }
                for (int i = 0; i < spawnPoint.Count; i++)
                {
                    foreach (string npcId in spawnPoint.NpcIds)
                    {
                        if (int.TryParse(npcId, out int id))
                        {
                            Mob mob = new Mob(id);
                            if (mob.Friendly != 2)
                            {
                                IFieldObject <Mob> fieldMob = Field.RequestFieldObject(mob);
                                fieldMob.Coord    = spawnPoint.Position;
                                fieldMob.Rotation = spawnPoint.Rotation;
                                Field.AddMob(fieldMob);
                                continue;
                            }

                            IFieldObject <Npc> fieldNpc = Field.RequestFieldObject(new Npc(mob.Id));
                            fieldNpc.Coord    = spawnPoint.Position;
                            fieldNpc.Rotation = spawnPoint.Rotation;
                            Field.AddNpc(fieldNpc);
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
    public bool MonsterDead(int[] spawnPointIds, bool arg2)
    {
        // TODO: Needs a better check for multiple mob spawns
        foreach (int spawnPointId in spawnPointIds)
        {
            MapEventNpcSpawnPoint spawnPoint = MapEntityMetadataStorage.GetMapEventNpcSpawnPoint(Field.MapId, spawnPointId);
            if (spawnPoint == null)
            {
                continue;
            }

            foreach (string npcId in spawnPoint.NpcIds)
            {
                if (!int.TryParse(npcId, out int id))
                {
                    continue;
                }

                if (Field.State.Mobs.Values.Any(x => x.Value.Id == id && !x.IsDead))
                {
                    return(false);
                }
            }
        }

        return(true);
    }
Ejemplo n.º 3
0
    public void DestroyMonster(int[] rangeId, bool arg2)
    {
        foreach (int spawnPointId in rangeId)
        {
            MapEventNpcSpawnPoint spawnPoint = MapEntityStorage.GetMapEventNpcSpawnPoint(Field.MapId, spawnPointId);
            if (spawnPoint is null)
            {
                continue;
            }

            foreach (string npcId in spawnPoint.NpcIds)
            {
                if (!int.TryParse(npcId, out int id))
                {
                    continue;
                }

                IFieldActor <NpcMetadata> fieldNpc = Field.State.Npcs.Values.FirstOrDefault(x => x.Value.Id == id);
                if (fieldNpc is null)
                {
                    continue;
                }

                Field.RemoveNpc(fieldNpc);
            }
        }
    }
Ejemplo n.º 4
0
    public void MoveNpc(int spawnTriggerId, string patrolDataName)
    {
        (PatrolData, List <WayPoint>)patrolData = MapEntityStorage.GetPatrolData(Field.MapId, patrolDataName);

        MapEventNpcSpawnPoint spawnPoint = MapEntityStorage.GetMapEventNpcSpawnPoint(Field.MapId, spawnTriggerId);

        if (spawnPoint is null)
        {
            return;
        }

        foreach (string npcId in spawnPoint.NpcIds)
        {
            if (!int.TryParse(npcId, out int id))
            {
                continue;
            }

            IFieldActor <NpcMetadata> fieldNpc = Field.State.Npcs.Values.FirstOrDefault(x => x.Value.Id == id);
            if (fieldNpc is null)
            {
                continue;
            }

            // Just setting the coord as the last waypoint for now, replace with moveTo later
            // fieldNpc.MoveTo(patrolData.Item2.Last().Position);
            fieldNpc.Coord = patrolData.Item2.Last().Position.ToFloat();
        }
    }
Ejemplo n.º 5
0
    public void CreateMonster(int[] spawnPointIds, bool spawnAnimation, int arg3)
    {
        foreach (int spawnPointId in spawnPointIds)
        {
            MapEventNpcSpawnPoint spawnPoint = MapEntityMetadataStorage.GetMapEventNpcSpawnPoint(Field.MapId, spawnPointId);
            if (spawnPoint is null)
            {
                continue;
            }

            for (int i = 0; i < spawnPoint.Count; i++)
            {
                foreach (string npcId in spawnPoint.NpcIds)
                {
                    if (!int.TryParse(npcId, out int id))
                    {
                        continue;
                    }

                    short animation = -1;
                    if (spawnAnimation)
                    {
                        NpcMetadata npcMetadata = NpcMetadataStorage.GetNpcMetadata(id);
                        if (npcMetadata is null || !npcMetadata.StateActions.TryGetValue(NpcState.Normal, out (string, NpcAction, short)[] stateAction))
                        {
                            continue;
                        }

                        if (stateAction.Length == 0)
                        {
                            continue;
                        }

                        animation = AnimationStorage.GetSequenceIdBySequenceName(npcMetadata.NpcMetadataModel.Model, stateAction[0].Item1);
                    }

                    Npc npc = Field.RequestNpc(id, spawnPoint.Position, spawnPoint.Rotation, animation);
                    npc.SpawnPointId = spawnPointId;
                }
            }
        }
    }
Ejemplo n.º 6
0
    public void SpawnNpcRange(int[] rangeId, bool isAutoTargeting, byte randomPickCount, int score)
    {
        foreach (int spawnPointId in rangeId)
        {
            MapEventNpcSpawnPoint spawnPoint = MapEntityStorage.GetMapEventNpcSpawnPoint(Field.MapId, spawnPointId);
            if (spawnPoint == null)
            {
                continue;
            }

            foreach (string npcId in spawnPoint.NpcIds)
            {
                if (!int.TryParse(npcId, out int id))
                {
                    continue;
                }

                Field.RequestNpc(id, spawnPoint.Position, spawnPoint.Rotation);
            }
        }
    }
Ejemplo n.º 7
0
    public void CreateMonster(int[] spawnPointIds, bool arg2, int arg3)
    {
        foreach (int spawnPointId in spawnPointIds)
        {
            MapEventNpcSpawnPoint spawnPoint = MapEntityStorage.GetMapEventNpcSpawnPoint(Field.MapId, spawnPointId);
            if (spawnPoint == null)
            {
                continue;
            }

            for (int i = 0; i < spawnPoint.Count; i++)
            {
                foreach (string npcId in spawnPoint.NpcIds)
                {
                    if (int.TryParse(npcId, out int id))
                    {
                        Field.RequestNpc(id, spawnPoint.Position, spawnPoint.Rotation);
                    }
                }
            }
        }
    }
Ejemplo n.º 8
0
    public void FaceEmotion(int spawnPointId, string emotionName)
    {
        if (spawnPointId == 0)
        {
            IFieldActor <Player> firstPlayer = Field.State.Players.FirstOrDefault().Value;
            Field.BroadcastPacket(TriggerPacket.SetFaceEmotion(firstPlayer.ObjectId, emotionName));
            return;
        }

        MapEventNpcSpawnPoint spawnPoint = MapEntityMetadataStorage.GetMapEventNpcSpawnPoint(Field.MapId, spawnPointId);

        if (spawnPoint is null)
        {
            return;
        }

        foreach (string npcId in spawnPoint.NpcIds)
        {
            if (!int.TryParse(npcId, out int id))
            {
                continue;
            }

            if (Field.State.Npcs.TryGetValue(id, out Npc npc))
            {
                Field.BroadcastPacket(TriggerPacket.SetFaceEmotion(npc.ObjectId, emotionName));
                return;
            }

            if (Field.State.Mobs.TryGetValue(id, out Npc mob))
            {
                Field.BroadcastPacket(TriggerPacket.SetFaceEmotion(mob.ObjectId, emotionName));
                return;
            }
        }
    }