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(); } }; }
public static void RemovePassager(this VehicleEntity vehicle, PlayerEntity player) { vehicle.UnseatPlayer(player); }
public static int FindPreferedSeat(this VehicleEntity vehicle, PlayerEntity player) { var position = player.RootGo().transform.position; return(vehicle.FindPreferedSeat(position)); }
public static bool IsVehicleDriver(this VehicleEntity vehicle, int seat) { return(IsVehicleDriver(seat)); }
public static void SeatPlayer(this VehicleEntity vehicle, PlayerEntity player, int newSeat) { player.controlledVehicle.Role = newSeat; vehicle.SetSeatOccupied(newSeat, player); }
private static void AddVehicleObjectCollision(this VehicleEntity vehicle, PlayerContext context) { vehicle.gameObject.UnityObject.AsGameObject.AddComponent <VehicleObjectCollision>(); }
public static int GetTypeValue(this VehicleEntity vehicle) { return((int)vehicle.vehicleType.VType); }
public static void SetTimer(this VehicleEntity vehicle, VehicleTimer timer) { VehicleCommonUtility.SetTimer(vehicle, timer); }
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); }
public static Vector3 GetPrevLinearVelocity(this VehicleEntity vehicle) { return(EntityAPI[vehicle.GetTypeValue()].GetPrevLinearVelocity(vehicle)); }
public static void AddImpulseAtPosition(this VehicleEntity vehicle, Vector3 impulse, Vector3 position) { EntityAPI[vehicle.GetTypeValue()].AddImpulseAtPosition(vehicle, impulse, position); }
public static float GetUiPresentSpeed(this VehicleEntity vehicle) { return(EntityAPI[vehicle.GetTypeValue()].GetUiPresentSpeed(vehicle)); }
/// <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); }
public VehicleEntityTag(VehicleEntity ent) { Internal = ent; }
private static void AddVehicleAllGameData(this VehicleEntity vehicle) { EntityAPI[vehicle.GetTypeValue()].AddVehicleAllGameData(vehicle); }
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; }
private static void AddHitBoxComponent(this VehicleEntity vehicle) { EntityAPI[vehicle.GetTypeValue()].AddHitBox(vehicle); }
public static void Notify(this VehicleEntity vehicle, GameEvent evt) { vehicle.vehicleGameEvent.Enque(evt); }
public static EVehicleType GetType(this VehicleEntity vehicle) { return(vehicle.vehicleType.VType); }
public static bool CompareAndStore <T>(this VehicleEntity vehicle, string name, T val) where T : struct { return(vehicle.vehicleGameEvent.CompareAndStore <T>(name, val)); }
public static bool HasAnyPassager(this VehicleEntity vehicle) { var seats = vehicle.vehicleSeat; return(seats.IsAnyOccupied()); }
public static void Reset(this VehicleEntity vehicle, bool isActiveAfterReset = false) { var controller = GetController(vehicle); controller.ResetGameObject(typeof(VehicleMaterialLoader), isActiveAfterReset); }
public static bool IsVehicleDriver(this VehicleEntity vehicle, PlayerEntity player) { return(player.IsVehicleDriver() && vehicle.entityKey.Value == player.controlledVehicle.EntityKey); }
private static VehicleCommonController GetController(VehicleEntity vehicle) { return(vehicle.gameObject.Controller); }
public static void SetSeatOccupied(this VehicleEntity vehicle, int seat, PlayerEntity player) { var seats = vehicle.vehicleSeat; seats.SetOccupation(seat, player.entityKey.Value, IsVehicleDriver(seat)); }
public static void AddGameEvent(this VehicleEntity vehicle, GameEvent evt) { var gameEventList = vehicle.vehicleGameEvent; gameEventList.Enque(evt); }
public static void UnseatPlayer(this VehicleEntity vehicle, PlayerEntity player) { var seat = GetVehicleSeat(player); vehicle.UnseatPlayer(player, seat); }
private static void AddDynamicAndEffectDataPostInit(this VehicleEntity vehicle) { EntityAPI[vehicle.GetTypeValue()].AddDynamicAndEffectDataPostInit(vehicle); }
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); }
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); } }