Exemple #1
0
        private SCRequirementsSet ProcessItemOnFlag(SCPointOfInterest poi, MapObject rewardSource, Dictionary <ObjectId, SCRequirementsSet> allNpcs)
        {
            var flag = (ObjectId)poi.TalkArray[(int)TalkArrayPos.requirement_id];

            if (poi.Npc.ObjectId == ObjectId.Fairy)
            {
                return(new SCRequirementsSet(SCRequirements.Bottle));
            }
            else if (poi.Npc.ObjectId == ObjectId.Princess2)
            {
                return(allNpcs[ObjectId.Princess1]);
            }
            else if (flag == ObjectId.Unne)
            {
                return(allNpcs[ObjectId.Unne].Restrict(SCRequirements.Slab));
            }
            else if (flag == ObjectId.ElfDoc)
            {
                return(allNpcs[ObjectId.ElfDoc].Restrict(SCRequirements.Herb));
            }
            else if (flag == ObjectId.Princess1)
            {
                return(allNpcs[ObjectId.Princess1]);
            }
            else if (flag == ObjectId.Vampire)
            {
                return(allNpcs[ObjectId.Vampire]);
            }
            else if (flag == ObjectId.None)
            {
                return(new SCRequirementsSet(SCRequirements.None));
            }

            throw new NotSupportedException();
        }
Exemple #2
0
        private SCRequirementsSet GetSecondaryRequirements(SCPointOfInterest poi, MapObject rewardSource, Dictionary <ObjectId, SCRequirementsSet> allNpcs, Dictionary <Item, SCRequirementsSet> allOrbs)
        {
            if (poi.TalkRoutine == newTalkRoutines.Talk_ElfDocUnne)
            {
                if (poi.TalkArray[(int)TalkArrayPos.requirement_id] == (byte)Item.Herb)
                {
                    return(new SCRequirementsSet(SCRequirements.Herb));
                }
                else if (poi.TalkArray[(int)TalkArrayPos.requirement_id] == (byte)Item.Slab)
                {
                    return(new SCRequirementsSet(SCRequirements.Herb));
                }
            }
            else
            {
                switch (poi.TalkRoutine)
                {
                case newTalkRoutines.Talk_Bikke:
                    return(new SCRequirementsSet(SCRequirements.None));

                case newTalkRoutines.Talk_GiveItemOnFlag:
                    return(ProcessItemOnFlag(poi, rewardSource, allNpcs));

                case newTalkRoutines.Talk_Nerrick:
                case newTalkRoutines.Talk_TradeItems:
                case newTalkRoutines.Talk_GiveItemOnItem:
                case newTalkRoutines.Talk_Astos:
                    return(ProcessItemOnItem(poi, rewardSource, allNpcs, allOrbs));
                }
            }

            throw new NotSupportedException();
        }
Exemple #3
0
 private void SetPoiAccessFromNeighbors(SCPointOfInterest poi)
 {
     poi.BitFlagSet = GetPassableBitFlagSetFromTile(poi.Coords.SmLeft);
     poi.BitFlagSet.Merge(GetPassableBitFlagSetFromTile(poi.Coords.SmRight));
     poi.BitFlagSet.Merge(GetPassableBitFlagSetFromTile(poi.Coords.SmUp));
     poi.BitFlagSet.Merge(GetPassableBitFlagSetFromTile(poi.Coords.SmDown));
 }
Exemple #4
0
        private void ProcessSpecialTileProps(int x, int y, byte tileId, SCTileDef tileDef)
        {
            var poi = new SCPointOfInterest
            {
                Coords  = new SCCoords(x, y),
                TileDef = tileDef,
                TileId  = tileId
            };

            if ((tileDef.OWBitFlags & SCBitFlags.Enter) > 0)
            {
                var overworldTeleport = (OverworldTeleportIndex)(tileDef.TileProp.Byte2 & 0x3F);
                var teleDef           = enter[(int)overworldTeleport];
                var t = new SCTeleport {
                    Coords = poi.Coords, Type = SCPointOfInterestType.OwEntrance, TargetMap = teleDef.Map, TargetCoords = new SCCoords {
                        X = teleDef.X, Y = teleDef.Y
                    }, OverworldTeleport = overworldTeleport
                };
                Exits.Add(t);

                poi.Type     = SCPointOfInterestType.Tele;
                poi.Teleport = t;
                PointsOfInterest.Add(poi);
            }
            else if ((tileDef.OWBitFlags & SCBitFlags.Caravan) > 0)
            {
                poi.Type   = SCPointOfInterestType.Shop;
                poi.ShopId = 69;
                PointsOfInterest.Add(poi);
            }
        }
Exemple #5
0
        private void ProcessQuestNpc(ref NPC npc)
        {
            var routine   = npcdata.GetRoutine(npc.ObjectId);
            var talkArray = npcdata.GetTalkArray(npc.ObjectId);

            var poi = new SCPointOfInterest
            {
                Coords      = new SCCoords(npc.Coord.x, npc.Coord.y),
                Type        = SCPointOfInterestType.QuestNpc,
                Npc         = npc,
                TalkRoutine = routine,
                TalkArray   = talkArray
            };

            PointsOfInterest.Add(poi);

            //if (blocked) Tiles[poi.Coords.X, poi.Coords.Y].Tile |= SCBitFlags.Blocked;
        }
Exemple #6
0
        private SCRequirementsSet ProcessItemOnItem(SCPointOfInterest poi, MapObject rewardSource, Dictionary <ObjectId, SCRequirementsSet> allNpcs, Dictionary <Item, SCRequirementsSet> allOrbs)
        {
            if (rewardSource.AccessRequirement == AccessRequirement.EarthOrb)
            {
                return(allOrbs[Item.EarthOrb]);
            }
            else if (rewardSource.AccessRequirement == AccessRequirement.FireOrb)
            {
                return(allOrbs[Item.FireOrb]);
            }
            else if (rewardSource.AccessRequirement == AccessRequirement.WaterOrb)
            {
                return(allOrbs[Item.WaterOrb]);
            }
            else if (rewardSource.AccessRequirement == AccessRequirement.AirOrb)
            {
                return(allOrbs[Item.AirOrb]);
            }

            return(new SCRequirementsSet(rewardSource.AccessRequirement));
        }
Exemple #7
0
 private void SetPoiAccess(SCPointOfInterest poi)
 {
     poi.BitFlagSet = GetBitFlagSetFromTile(poi.Coords);
 }
Exemple #8
0
        private void ProcessSpecialTileProps(int x, int y, byte tileId, SCTileDef tileDef)
        {
            var poi = new SCPointOfInterest
            {
                Coords  = new SCCoords(x, y),
                TileDef = tileDef,
                TileId  = tileId
            };

            if (tileDef.TileProp.TilePropFunc == (TilePropFunc.TP_NOMOVE | TilePropFunc.TP_SPEC_DOOR) && tileDef.TileProp.ShopId > 0)
            {
                poi.Type   = SCPointOfInterestType.Shop;
                poi.ShopId = tileDef.TileProp.ShopId;
                PointsOfInterest.Add(poi);
            }
            else if (tileDef.SpBitFlags == SCBitFlags.Warp)
            {
                if ((CFlags & SCMapCheckFlags.NoWarp) > 0)
                {
                    return;
                }

                var t = new SCTeleport {
                    Coords = poi.Coords, Type = SCPointOfInterestType.Warp
                };
                Exits.Add(t);

                poi.Type     = SCPointOfInterestType.Warp;
                poi.Teleport = t;
                PointsOfInterest.Add(poi);
            }
            else if (tileDef.SpBitFlags == SCBitFlags.Teleport)
            {
                var teleDef = tele[tileDef.TileProp.Byte2];
                var t       = new SCTeleport {
                    Coords = poi.Coords, Type = SCPointOfInterestType.Tele, TargetMap = teleDef.Map, TargetCoords = new SCCoords {
                        X = teleDef.X, Y = teleDef.Y
                    }.SmClamp
                };
                Exits.Add(t);

                poi.Type     = SCPointOfInterestType.Tele;
                poi.Teleport = t;
                PointsOfInterest.Add(poi);
            }
            else if ((tileDef.SpBitFlags & SCBitFlags.Exit) == SCBitFlags.Exit)
            {
                var teleDef = exit[tileDef.TileProp.Byte2];
                var t       = new SCTeleport {
                    Coords = poi.Coords, Type = SCPointOfInterestType.Exit, TargetMap = teleDef.Map, TargetCoords = new SCCoords {
                        X = teleDef.X, Y = teleDef.Y
                    }
                };
                Exits.Add(t);

                poi.Type     = SCPointOfInterestType.Exit;
                poi.Teleport = t;
                PointsOfInterest.Add(poi);
            }
            else if (tileDef.SpBitFlags == SCBitFlags.Treasure)
            {
                poi.Type       = SCPointOfInterestType.Treasure;
                poi.TreasureId = tileDef.TileProp.Byte2;
                PointsOfInterest.Add(poi);

                Tiles[x, y].Tile |= SCBitFlags.Blocked;
            }
            else if (tileDef.SpBitFlags == SCBitFlags.EarthOrb)
            {
                poi.Type   = SCPointOfInterestType.Orb;
                poi.ItemId = Item.EarthOrb;
                PointsOfInterest.Add(poi);
            }
            else if (tileDef.SpBitFlags == SCBitFlags.FireOrb)
            {
                poi.Type   = SCPointOfInterestType.Orb;
                poi.ItemId = Item.FireOrb;
                PointsOfInterest.Add(poi);
            }
            else if (tileDef.SpBitFlags == SCBitFlags.WaterOrb)
            {
                poi.Type   = SCPointOfInterestType.Orb;
                poi.ItemId = Item.WaterOrb;
                PointsOfInterest.Add(poi);
            }
            else if (tileDef.SpBitFlags == SCBitFlags.AirOrb)
            {
                poi.Type   = SCPointOfInterestType.Orb;
                poi.ItemId = Item.AirOrb;
                PointsOfInterest.Add(poi);
            }
        }