コード例 #1
0
        public void AddCrimeBot(Client sender, string name)
        {
            if (!sender.HasRank(ServerRank.AdministratorRozgrywki3))
            {
                sender.SendWarning("Nie posiadasz uprawnień do tworzenia bota przestępczego.");
                return;
            }

            sender.SendInfo("Ustaw się w wybranej pozycji, a następnie wpisz \"tu\" użyj ctrl + alt + shift + d aby poznać swoją obecną pozycję.");

            FullPosition  botPosition = null;
            VehicleEntity botVehicle  = null;

            void Handler(Client o, string message)
            {
                if (o == sender && message == "tu" && botPosition == null)
                {
                    botPosition = new FullPosition
                    {
                        Position = new Vector3
                        {
                            X = sender.Position.X,
                            Y = sender.Position.Y,
                            Z = sender.Position.Z
                        },

                        Rotation = new Vector3
                        {
                            X = sender.Rotation.X,
                            Y = sender.Rotation.Y,
                            Z = sender.Rotation.Z
                        },

                        Direction = new Vector3(0f, 0f, 0f)
                    };

                    NAPI.ClientEvent.TriggerClientEvent(sender,
                                                        "DrawAddingCrimeBotComponents",
                                                        new Vector3(botPosition.Position.X, botPosition.Position.Y, botPosition.Position.Z - 1));

                    sender.SendInfo("Ustaw pojazd w wybranej pozycji następnie wpisz \"tu\".");

                    botVehicle = VehicleEntity.Create(
                        new FullPosition(new Vector3(
                                             sender.Position.X + 2,
                                             sender.Position.Y + 2,
                                             sender.Position.Z), sender.Rotation),
                        VehicleHash.Sentinel, name, 0, sender.GetAccountEntity().DbModel.Id, new Color(0, 0, 0), new Color(0, 0, 0));

                    NAPI.Player.SetPlayerIntoVehicle(sender, botVehicle.GameVehicle, -1);
                }
                else if (o == sender && message == "tu" && botPosition != null && botVehicle != null)
                {
                    FullPosition botVehiclePosition = new FullPosition
                    {
                        Position = new Vector3
                        {
                            X = botVehicle.GameVehicle.Position.X,
                            Y = botVehicle.GameVehicle.Position.Y,
                            Z = botVehicle.GameVehicle.Position.Z
                        },

                        Rotation = new Vector3
                        {
                            X = botVehicle.GameVehicle.Rotation.X,
                            Y = botVehicle.GameVehicle.Rotation.Y,
                            Z = botVehicle.GameVehicle.Rotation.Z
                        },

                        Direction = new Vector3(0f, 0f, 0f)
                    };

                    NAPI.ClientEvent.TriggerClientEvent(sender, "DisposeAddingCrimeBotComponents");

                    XmlHelper.AddXmlObject(new CrimeBotPosition
                    {
                        CreatorForumName = o.GetAccountEntity().DbModel.Name,
                        Name             = name,
                        BotPosition      = botPosition,
                        VehiclePosition  = botVehiclePosition
                    }, Path.Combine(Utils.XmlDirectory, "CrimeBotPositions"));

                    sender.SendInfo("Dodawanie pozycji bota zakończyło się pomyślnie!");
                    NAPI.Player.WarpPlayerOutOfVehicle(sender);
                    botVehicle.Dispose();
                }
            };
        }
コード例 #2
0
 public static void RemovePassager(this VehicleEntity vehicle, PlayerEntity player)
 {
     vehicle.UnseatPlayer(player);
 }
コード例 #3
0
        public static int FindPreferedSeat(this VehicleEntity vehicle, PlayerEntity player)
        {
            var position = player.RootGo().transform.position;

            return(vehicle.FindPreferedSeat(position));
        }
コード例 #4
0
 public static bool IsVehicleDriver(this VehicleEntity vehicle, int seat)
 {
     return(IsVehicleDriver(seat));
 }
コード例 #5
0
 public static void SeatPlayer(this VehicleEntity vehicle, PlayerEntity player, int newSeat)
 {
     player.controlledVehicle.Role = newSeat;
     vehicle.SetSeatOccupied(newSeat, player);
 }
コード例 #6
0
 private static void AddVehicleObjectCollision(this VehicleEntity vehicle, PlayerContext context)
 {
     vehicle.gameObject.UnityObject.AsGameObject.AddComponent <VehicleObjectCollision>();
 }
コード例 #7
0
 public static int GetTypeValue(this VehicleEntity vehicle)
 {
     return((int)vehicle.vehicleType.VType);
 }
コード例 #8
0
 public static void SetTimer(this VehicleEntity vehicle, VehicleTimer timer)
 {
     VehicleCommonUtility.SetTimer(vehicle, timer);
 }
コード例 #9
0
        public static bool GetRideOffPosition(PlayerEntity playerEntity, VehicleEntity vehicleEntity, Vector3 direction, out Vector3 resolvedPosition, float liftHeight = 0.01f, float displacement = 0.05f)
        {
            var         character     = playerEntity.RootGo();
            const float sweepDistance = 5.0f;

            direction = -direction;
            var p = character.transform.position - direction * sweepDistance;

            Vector3 p1, p2;
            float   radius;

            PlayerEntityUtility.GetCapsule(playerEntity, p, out p1, out p2, out radius);

            vehicleEntity.SetLayer(UnityLayerManager.GetLayerIndex(EUnityLayerName.User));

            resolvedPosition = character.transform.position;
            var hit     = new RaycastHit();
            var hitDist = 2.0f;

            var lowOffset = new Vector3(0, -0.5f, 0);

            if (Physics.CapsuleCast(p1, p2, radius, direction, out hit, sweepDistance, UnityLayerManager.GetLayerMask(EUnityLayerName.User)) ||
                //the seat position may be higher than the vehicle's height, then low the position to get collided position
                Physics.CapsuleCast(p1 + lowOffset, p2 + lowOffset, radius, direction, out hit, sweepDistance, UnityLayerManager.GetLayerMask(EUnityLayerName.User)))
            {
                hitDist = hit.distance;
            }


            {
                var distance = (hitDist - displacement) * direction;

                var colliders = Physics.OverlapCapsule(p1 + distance, p2 + distance, radius);
                if (colliders.Length > 0)
                {
                    vehicleEntity.SetLayer(UnityLayerManager.GetLayerIndex(EUnityLayerName.Vehicle));
                    return(false);
                }


                var disp     = direction * (hitDist - displacement - sweepDistance);
                var position = resolvedPosition;
                position += disp;

                if (liftHeight > 0.0f)
                {
                    RaycastHit upHit;;
                    Physics.CapsuleCast(p1 + disp, p2 + disp, radius, Vector3.up, out upHit, liftHeight);
                    position += upHit.distance * Vector3.up;
                }

                var dist    = resolvedPosition - position;
                var rayDir  = dist.normalized;
                var rayDist = distance.magnitude;

                if (Physics.Raycast(position, rayDir, rayDist, UnityLayers.AllCollidableLayerMask) ||
                    Physics.Raycast(resolvedPosition, -rayDir, rayDist, UnityLayers.AllCollidableLayerMask))
                {
                    vehicleEntity.SetLayer(UnityLayerManager.GetLayerIndex(EUnityLayerName.Vehicle));
                    return(false);
                }

                resolvedPosition = position;
            }

            vehicleEntity.SetLayer(UnityLayerManager.GetLayerIndex(EUnityLayerName.Vehicle));
            return(true);
        }
コード例 #10
0
 public static Vector3 GetPrevLinearVelocity(this VehicleEntity vehicle)
 {
     return(EntityAPI[vehicle.GetTypeValue()].GetPrevLinearVelocity(vehicle));
 }
コード例 #11
0
 public static void AddImpulseAtPosition(this VehicleEntity vehicle, Vector3 impulse, Vector3 position)
 {
     EntityAPI[vehicle.GetTypeValue()].AddImpulseAtPosition(vehicle, impulse, position);
 }
コード例 #12
0
 public static float GetUiPresentSpeed(this VehicleEntity vehicle)
 {
     return(EntityAPI[vehicle.GetTypeValue()].GetUiPresentSpeed(vehicle));
 }
コード例 #13
0
        /// <summary>
        /// 装车信息--查询所有
        /// </summary>
        /// <returns></returns>
        public List <VehicleEntity> GetCarAll()
        {
            List <VehicleEntity> list = new List <VehicleEntity>();

            try
            {
                #region 请求数据
                System.Text.StringBuilder loStr = new System.Text.StringBuilder();
                //loStr.Append("vhNo=").Append(vehicleNO);
                string jsons     = string.Empty;
                string jsonQuery = WebWork.SendRequest(jsons, WebWork.URL_GetCarAll);
                if (string.IsNullOrEmpty(jsonQuery))
                {
                    MsgBox.Warn(WebWork.RESULT_NULL);
                    //LogHelper.InfoLog(WebWork.RESULT_NULL);
                    return(list);
                }
                #endregion

                #region 正常错误处理

                JsonGetCarAll bill = JsonConvert.DeserializeObject <JsonGetCarAll>(jsonQuery);
                if (bill == null)
                {
                    MsgBox.Warn(WebWork.JSON_DATA_NULL);
                    return(list);
                }
                if (bill.flag != 0)
                {
                    MsgBox.Warn(bill.error);
                    return(list);
                }
                #endregion

                #region 赋值数据
                foreach (JsonGetCarAllResult jbr in bill.result)
                {
                    VehicleEntity asnEntity = new VehicleEntity();
                    asnEntity.ID            = Convert.ToInt32(jbr.id);
                    asnEntity.IsActive      = jbr.isActive;
                    asnEntity.RouteCode     = jbr.rtCode;
                    asnEntity.RouteName     = jbr.rtName;
                    asnEntity.UserCode      = jbr.userCode;
                    asnEntity.UserName      = jbr.userName;
                    asnEntity.UserPhone     = jbr.mobilePhone;
                    asnEntity.VehicleCode   = jbr.vhCode;
                    asnEntity.VehicleNO     = jbr.vhNo;
                    asnEntity.VehicleVolume = Convert.ToDecimal(jbr.vhVolume);
                    asnEntity.VhAttri       = jbr.vhAttri;
                    asnEntity.VhType        = jbr.vhType;
                    asnEntity.VhAttriStr    = jbr.itemDesc;
                    asnEntity.VhTypeStr     = jbr.typeDesc;
                    list.Add(asnEntity);
                }
                return(list);

                #endregion
            }
            catch (Exception ex)
            {
                MsgBox.Err(ex.Message);
            }
            return(list);
        }
コード例 #14
0
 public VehicleEntityTag(VehicleEntity ent)
 {
     Internal = ent;
 }
コード例 #15
0
 private static void AddVehicleAllGameData(this VehicleEntity vehicle)
 {
     EntityAPI[vehicle.GetTypeValue()].AddVehicleAllGameData(vehicle);
 }
コード例 #16
0
        public static void AddVehicleComponentsPostInit(this VehicleEntity vehicle, EVehicleType type, UnityObject unityObj, PlayerContext playerContext, bool isServer)
        {
            var go = unityObj.AsGameObject;

            if (!vehicle.hasGameObject)
            {
                var controller = go.GetComponent <VehicleCommonController>();
                vehicle.AddGameObject(controller, unityObj);
                controller.PutToSleep();
            }

            if (!go.activeSelf)
            {
                var controller = go.GetComponent <VehicleCommonController>();
                controller.IsActive = true;
            }

            go.transform.position = GetNewBirthPositionOnOverlap(go);

            if (vehicle.HasDynamicData())
            {
                var dydata = vehicle.GetDynamicData();
                dydata.Position = go.transform.position.ShiftedToFixedVector3();
            }

            if (!vehicle.hasVehicleType)
            {
                vehicle.AddVehicleType(type);
            }

            vehicle.AddEntityKeyIdentifier(vehicle.entityKey.Value);
            vehicle.AddVehicleObjectCollision(playerContext);

            vehicle.AddSeatComponent();
            vehicle.AddDynamicAndEffectDataPostInit();

            vehicle.AddVehicleAllGameData();
            vehicle.AddHitBoxComponent();
            vehicle.AddGameEventComponent();

            if (!vehicle.hasVehicleCmd)
            {
                vehicle.AddVehicleCmd();
            }

            if (!vehicle.hasVehicleCmdOwner)
            {
                vehicle.AddVehicleCmdOwner(new VehicleCmdOwnerAdapter(vehicle));
            }

            if (!vehicle.hasVehicleSyncEvent)
            {
                vehicle.AddVehicleSyncEvent(new Queue <IVehicleSyncEvent>());
            }

            if (!vehicle.hasVehicleCollisionDamage)
            {
                vehicle.AddVehicleCollisionDamage(new Dictionary <EntityKey, VehicleCollisionDamage>(new EntityKeyComparer()));
            }

            EntityAPI[vehicle.GetTypeValue()].InitController(vehicle, isServer, vehicle.vehicleAssetInfo.Id);

            vehicle.isFlagSyncSelf     = true;
            vehicle.isFlagSyncNonSelf  = true;
            vehicle.isFlagCompensation = true;
        }
コード例 #17
0
 private static void AddHitBoxComponent(this VehicleEntity vehicle)
 {
     EntityAPI[vehicle.GetTypeValue()].AddHitBox(vehicle);
 }
コード例 #18
0
 public static void Notify(this VehicleEntity vehicle, GameEvent evt)
 {
     vehicle.vehicleGameEvent.Enque(evt);
 }
コード例 #19
0
 public static EVehicleType GetType(this VehicleEntity vehicle)
 {
     return(vehicle.vehicleType.VType);
 }
コード例 #20
0
 public static bool CompareAndStore <T>(this VehicleEntity vehicle, string name, T val) where T : struct
 {
     return(vehicle.vehicleGameEvent.CompareAndStore <T>(name, val));
 }
コード例 #21
0
        public static bool HasAnyPassager(this VehicleEntity vehicle)
        {
            var seats = vehicle.vehicleSeat;

            return(seats.IsAnyOccupied());
        }
コード例 #22
0
        public static void Reset(this VehicleEntity vehicle, bool isActiveAfterReset = false)
        {
            var controller = GetController(vehicle);

            controller.ResetGameObject(typeof(VehicleMaterialLoader), isActiveAfterReset);
        }
コード例 #23
0
 public static bool IsVehicleDriver(this VehicleEntity vehicle, PlayerEntity player)
 {
     return(player.IsVehicleDriver() &&
            vehicle.entityKey.Value == player.controlledVehicle.EntityKey);
 }
コード例 #24
0
 private static VehicleCommonController GetController(VehicleEntity vehicle)
 {
     return(vehicle.gameObject.Controller);
 }
コード例 #25
0
        public static void SetSeatOccupied(this VehicleEntity vehicle, int seat, PlayerEntity player)
        {
            var seats = vehicle.vehicleSeat;

            seats.SetOccupation(seat, player.entityKey.Value, IsVehicleDriver(seat));
        }
コード例 #26
0
        public static void AddGameEvent(this VehicleEntity vehicle, GameEvent evt)
        {
            var gameEventList = vehicle.vehicleGameEvent;

            gameEventList.Enque(evt);
        }
コード例 #27
0
        public static void UnseatPlayer(this VehicleEntity vehicle, PlayerEntity player)
        {
            var seat = GetVehicleSeat(player);

            vehicle.UnseatPlayer(player, seat);
        }
コード例 #28
0
 private static void AddDynamicAndEffectDataPostInit(this VehicleEntity vehicle)
 {
     EntityAPI[vehicle.GetTypeValue()].AddDynamicAndEffectDataPostInit(vehicle);
 }
コード例 #29
0
        public static int FindPreferedSeat(this VehicleEntity vehicle, Vector3 position)
        {
            AssertUtility.Assert(vehicle.hasGameObject && vehicle.hasGameObject);

            var config = GetSeatConfig(vehicle);

            float distance = System.Single.MaxValue;
            int   seat     = (int)VehicleSeatIndex.None;

            var seats = vehicle.vehicleSeat;

            if (config.DriverSeat != null && !seats.IsOccupied((int)VehicleSeatIndex.Driver))
            {
                var dist = (config.DriverSeat.position - position).sqrMagnitude;
                if (dist < distance)
                {
                    distance = dist;
                    seat     = (int)VehicleSeatIndex.Driver;
                }
            }

            if (config.CodriverSeat != null && !seats.IsOccupied((int)VehicleSeatIndex.Codriver))
            {
                var dist = (config.CodriverSeat.position - position).sqrMagnitude;
                if (dist < distance)
                {
                    distance = dist;
                    seat     = (int)VehicleSeatIndex.Codriver;
                }
            }

            if (config.BackDriverSeat != null && !seats.IsOccupied((int)VehicleSeatIndex.BackDriver))
            {
                var dist = (config.BackDriverSeat.position - position).sqrMagnitude;
                if (dist < distance)
                {
                    distance = dist;
                    seat     = (int)VehicleSeatIndex.BackDriver;
                }
            }

            if (config.BackCodriverSeat != null && !seats.IsOccupied((int)VehicleSeatIndex.BackCodriver))
            {
                var dist = (config.BackCodriverSeat.position - position).sqrMagnitude;
                if (dist < distance)
                {
                    distance = dist;
                    seat     = (int)VehicleSeatIndex.BackCodriver;
                }
            }

            if (config.BackDriverSeat_1 != null && !seats.IsOccupied((int)VehicleSeatIndex.BackDriver_1))
            {
                var dist = (config.BackDriverSeat_1.position - position).sqrMagnitude;
                if (dist < distance)
                {
                    distance = dist;
                    seat     = (int)VehicleSeatIndex.BackDriver_1;
                }
            }

            if (config.BackCodriverSeat_1 != null && !seats.IsOccupied((int)VehicleSeatIndex.BackCodriver_1))
            {
                var dist = (config.BackCodriverSeat_1.position - position).sqrMagnitude;
                if (dist < distance)
                {
                    seat = (int)VehicleSeatIndex.BackCodriver_1;
                }
            }

            ObjectAllocatorHolder <VehicleSeatConfigInfo> .Free(config);

            return(seat);
        }
コード例 #30
0
        public void OfferItem(Client sender, int id, OfferType type, decimal safeMoneyCount, int index = -1)
        {
            if (id.Equals(sender.GetAccountEntity().ServerId))
            {
                sender.SendError("Nie możesz oferować przedmiotu samemu sobie.");
                return;
            }

            Offer offer = null;

            if (NAPI.Player.GetPlayersInRadiusOfPlayer(6f, sender).Any(x => x.GetAccountEntity().ServerId == id))
            {
                CharacterEntity senderCharacter = sender.GetAccountEntity().CharacterEntity;
                CharacterEntity getterCharacter = NAPI.Player.GetPlayersInRadiusOfPlayer(6f, sender)
                                                  .Find(x => x.GetAccountEntity().ServerId == id).GetAccountEntity().CharacterEntity;

                if (type == OfferType.Item && index != -1)
                {
                    List <ItemModel> items = sender.GetAccountEntity().CharacterEntity.DbModel.Items.ToList();

                    //Tutaj sprawdzamy czy gracz posiada taki numer na liście. Numerujemy od 0 więc items.Count - 1
                    if (index > items.Count - 1 || index < 0)
                    {
                        sender.SendError("Nie posiadasz przedmiotu o takim indeksie.");
                        return;
                    }

                    ItemModel item = items[index];

                    if (sender.GetAccountEntity().CharacterEntity.ItemsInUse.Any(i => i.Id == item.Id))
                    {
                        sender.SendError("Nie możesz używać przedmiotu podczas oferowania.");
                        return;
                    }

                    offer = new Offer(senderCharacter, getterCharacter, item, safeMoneyCount);
                }
                else if (type == OfferType.Vehicle)
                {
                    VehicleEntity vehicle = EntityHelper.GetVehicle(sender.Vehicle);
                    if (vehicle == null)
                    {
                        return;
                    }

                    offer = new Offer(senderCharacter, getterCharacter, vehicle.DbModel, safeMoneyCount);
                }
                else if (type == OfferType.Building)
                {
                    if (sender.GetAccountEntity().CharacterEntity.CurrentBuilding != null || sender.HasData("CurrentDoors"))
                    {
                        BuildingEntity building = sender.HasData("CurrentDoors")
                            ? sender.GetData("CurrentDoors")
                            : sender.GetAccountEntity().CharacterEntity.CurrentBuilding;

                        if (building.DbModel.Group != null)
                        {
                            sender.SendError("Nie można sprzedać budynku przepisanego pod grupę.");
                            return;
                        }

                        if (building.DbModel.Character.Id != sender.GetAccountEntity().CharacterEntity.DbModel
                            .Id)
                        {
                            sender.SendError("Nie jesteś właścicielem tego budynku.");
                            return;
                        }

                        offer = new Offer(senderCharacter, getterCharacter, building.DbModel, safeMoneyCount);
                    }
                    else
                    {
                        sender.SendError("Aby oferować budynek musisz znajdować się w markerze bądź środku budynku");
                    }
                }

                if (offer != null)
                {
                    getterCharacter.PendingOffer = offer;
                }
            }

            if (offer != null)
            {
                List <string> cefList = new List <string>
                {
                    sender.Name,
                    type.ToString(),
                    offer.Money.ToString(CultureInfo.InvariantCulture)
                };
                sender.SendInfo("Twoja oferta została wysłana.");
                offer.ShowWindow(cefList);
            }
        }