public void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var x = request.Data.GetOrDefault(k.x, (double)-1);
                var y = request.Data.GetOrDefault(k.y, (double)-1);

                var character = request.Session.Character;
                var player    = request.Zone.GetPlayerOrThrow(character);
                if (x < 0 || y < 0)
                {
                    x = player.CurrentPosition.intX + 0.5;
                    y = player.CurrentPosition.intY + 0.5;
                }

                //optionals
                var definition = request.Data.GetOrDefault <int>(k.definition);
                if (definition == 0)
                {
                    definition = request.Zone.Configuration.TeleportColumn.Definition;
                }

                var position = request.Zone.FixZ(new Position(x, y).Center);
                position.IsValid(request.Zone.Size).ThrowIfFalse(ErrorCodes.IllegalPosition);

                var eid         = (long)request.Data.GetOrDefault <int>(k.eid); //user comfort
                var idGenerator = eid == 0 ? EntityIDGenerator.Random : EntityIDGenerator.Fix(eid);

                var teleportColumn = (TeleportColumn)Entity.Factory.Create(definition, idGenerator);

                var container = SystemContainer.GetByName(k.es_teleport_column);
                teleportColumn.Parent = container.Eid;

                var name = request.Data.GetOrDefault <string>(k.name);
                if (name.IsNullOrEmpty())
                {
                    var tpAmountOnZone = request.Zone.Units.OfType <TeleportColumn>().Count();
                    name = "tp_zone_" + request.Zone.Id + "_" + (tpAmountOnZone + 1);
                }

                teleportColumn.Name = name;
                teleportColumn.Save();

                request.Zone.UnitService.AddDefaultUnit(teleportColumn, position, "tpc", false);
                teleportColumn.AddToZone(request.Zone, position);

                var result = request.Zone.GetBuildingsDictionaryForCharacter(character);

                Transaction.Current.OnCommited(() =>
                {
                    Logger.Info("");
                    Logger.Info("NEW TELEPORT COLUMN EID:" + teleportColumn.Eid);
                    Logger.Info("");
                    Message.Builder.SetCommand(Commands.ZoneGetBuildings).WithData(result).ToClient(request.Session).Send();
                });

                scope.Complete();
            }
        }
示例#2
0
        protected Unit CreateUnit(IDataRecord record)
        {
            var eid = record.GetValue <long>("eid");

            try
            {
                Unit unit;
                var  runtime = record.GetValueOrDefault <bool>("runtime");
                if (runtime)
                {
                    var definition = record.GetValue <int?>("definition") ?? 0;
                    if (definition == 0)
                    {
                        Logger.Error("ZoneUnitReader: definition is null! eid = " + eid);
                        return(null);
                    }
                    unit       = _unitHelper.CreateUnit(definition, EntityIDGenerator.Fix(eid));
                    unit.Owner = record.GetValue <long?>("owner") ?? 0L;
                    unit.Name  = record.GetValue <string>("ename");
                }
                else
                {
                    unit = _unitHelper.LoadUnit(eid);
                }

                var orientation = record.GetValue <byte>("orientation");
                unit.Orientation = (double)orientation / byte.MaxValue;
                return(unit);
            }
            catch (Exception ex)
            {
                Logger.Error("ZoneUnitReader: CreateUnit error. eid = " + eid);
                Logger.Exception(ex);
            }

            return(null);
        }
        protected static Alliance Create(EntityDefault entityDefault, SystemContainer container, AllianceDescription allianceDescription, EntityIDGenerator generator)
        {
            var alliance = Factory.Create(entityDefault, generator);

            alliance.Parent = container.Eid;
            Repository.Insert(alliance);

            Db.Query().CommandText("insert into alliances (allianceEID, name, nick, defaultAlliance) values (@eid, @name, @nick, @defaultAlliance)")
            .SetParameter("@eid", alliance.Eid)
            .SetParameter("@name", allianceDescription.name)
            .SetParameter("@nick", allianceDescription.nick)
            .SetParameter("@defaultAlliance", allianceDescription.isDefault)
            .ExecuteNonQuery().ThrowIfEqual(0, ErrorCodes.SQLInsertError);

            return((Alliance)alliance);
        }
示例#4
0
 public Item CreateItem(int definition, EntityIDGenerator idGenerator)
 {
     return((Item)_entityServices.Factory.Create(definition, idGenerator));
 }
示例#5
0
 public Item CreateItem(EntityDefault entityDefault, EntityIDGenerator idGenerator)
 {
     return((Item)_entityServices.Factory.Create(entityDefault, idGenerator));
 }
        protected static Corporation Create(EntityDefault entityDefault, SystemContainer container, CorporationDescription corporationDescription, EntityIDGenerator generator)
        {
            var corporation = Factory.Create(entityDefault, generator);

            corporation.Parent = container.Eid;
            corporation.Save();

            const string insertCommandText = @"insert into corporations (eid, name, nick, wallet, taxrate, publicProfile, privateProfile,defaultcorp, founder) 
                                                                 values (@eid, @name, @nick, @wallet, @taxrate, @publicProfile, @privateProfile,@defaultcorp,@founder)";

            Db.Query().CommandText(insertCommandText)
            .SetParameter("@eid", corporation.Eid)
            .SetParameter("@name", corporationDescription.name)
            .SetParameter("@nick", corporationDescription.nick)
            .SetParameter("@wallet", 0)
            .SetParameter("@taxrate", corporationDescription.taxRate)
            .SetParameter("@publicProfile", GenxyConverter.Serialize((Dictionary <string, object>)corporationDescription.publicProfile))
            .SetParameter("@privateProfile", GenxyConverter.Serialize((Dictionary <string, object>)corporationDescription.privateProfile))
            .SetParameter("@defaultCorp", corporationDescription.isDefault).SetParameter("@founder", corporationDescription.founder)
            .ExecuteNonQuery().ThrowIfEqual(0, ErrorCodes.SQLInsertError);

            return((Corporation)corporation);
        }
 public Unit CreateUnit(int definition, EntityIDGenerator idGenerator)
 {
     return((Unit)_itemHelper.CreateItem(definition, idGenerator));
 }
 public Unit CreateUnit(EntityDefault entityDefault, EntityIDGenerator idGenerator)
 {
     return((Unit)_itemHelper.CreateItem(entityDefault, idGenerator));
 }