Пример #1
0
        private void ProcessTags(RdlTagCollection tags)
        {
            // AuthKey tags
            this.UpdateAuthKeys(tags.Where(t => t.TagName == "AUTH").Select(t => t as RdlAuthKey));

            // Place Types
            var placeTypes = tags.Where(t => t.TagName == "PLACETYPE" && t.TypeName == "PLACETYPE");

            if (placeTypes.Count() > 0)
            {
                List <string> types = new List <string>();
                foreach (var pt in placeTypes)
                {
                    types.Add(pt.GetArg <string>(0));
                }
                ddlPlaceTypes.ItemsSource = types;
            }

            // Properties
            if (this.Player != null)
            {
                var properties = tags.GetProperties(_playerId);
                if (properties != null && properties.Count > 0)
                {
                    // Location
                    Point3 location = new Point3(this.Player.X, this.Player.Y, this.Player.Z);

                    // Loop through all of the properties.
                    foreach (var item in properties)
                    {
                        // All other properties.
                        this.Player.Properties.SetValue(item.Name, item.Value);
                    }

                    Point3 playerLoc = new Point3(this.Player.X, this.Player.Y, this.Player.Z);
                    if (location != playerLoc)
                    {
                        ctlMap.SetView(playerLoc);
                    }
                }
            }

            int count = tags.GetObjects <RdlPlace>().Count;

            if (count == 1)
            {
                // Place
                RdlPlace place = tags.GetObjects <RdlPlace>().FirstOrDefault();
                if (place != null)
                {
                    _placeId                   = place.ID;
                    _currentLocation           = new Point3(place.X, place.Y, place.Z);
                    txtPlaceName.Text          = place.Name;
                    txtPlaceDesc.Text          = place.Properties.GetValue <string>("Description") ?? String.Empty;
                    ddlPlaceTypes.SelectedItem = place.Properties.GetValue <string>("RuntimeType");
                    ddlTerrain.SelectedItem    = Game.Terrain.Where(t => t.ID == place.Properties.GetValue <int>("Terrain")).FirstOrDefault();
                    ctlMap.Tiles.Add(new Tile(place));
                    ctlMap.SetView(new Point3(this.Player.X, this.Player.Y, this.Player.Z));
                    ctlMap.HideLoading();
                }
                List <RdlActor> actors = tags.GetActors();
                if (actors.Count > 0)
                {
                    lstActors.ItemsSource = actors;
                }
            }
            else if (count > 1)
            {
                // Map
                ctlMap.LoadMap(tags);
                ctlMap.SetView(new Point3(this.Player.X, this.Player.Y, this.Player.Z));
                ctlMap.HideLoading();
            }

            // Chat Messages
            ctlChat.WriteMessages(tags);
        }