public void SpawnPlayerAtProperty(Session.Session session, string propertyId) { PropertyModel property; if ((property = GetProperty(propertyId)) == null) { return; } Log.Verbose($"Spawning {session.PlayerName} at property {property.Address} ({propertyId})"); session.SetPlayerPosition(property.EntranceLocation); }
public void OnPlayerDisconnect(Session.Session playerSession, string reason) { var playerBank = GetBank(playerSession.GetGlobalData <int>("Character.CharID")); if (playerBank == null) { return; } saveBankAccount(playerBank); currentAccounts.Remove(playerBank); Log.Verbose($"Removed {playerSession.PlayerName}'s bank account ({playerBank.AccountID}) due to them disconnecting"); }
public string GetTwitterHandle(Session.Session playerSession) { var playerSettings = playerSession./*GetCharacterSettings()*/ CharacterSettings; var hasTwitterHandle = playerSettings.ContainsKey("TwitterHandle"); var twitterHandle = $"{playerSession.GetGlobalData("Character.FirstName", "")}_{playerSession.GetGlobalData("Character.LastName", "")}"; if (hasTwitterHandle) { twitterHandle = playerSettings["TwitterHandle"]; } return("@" + twitterHandle); }
private void desyncStorage(Session.Session session) { if (this.StorageLocation != default) { Log.Verbose($"Desyncing storage for {session.PlayerName} for property {PropertyId}"); var storages = session.AccessablePropertyStorages; storages.Remove(StorageLocation); session.AccessablePropertyStorages = storages; session.RemoveMarker($"property:storage:{PropertyId}"); } }
public void FreeSession(Session.Session session) { if (session != null) { if (session.IsUsing) { session.dispose(); } m_SessionPool.Free((T)session); session = null; } }
public void NotOnCharacterLoaded(Session.Session playerSession) { var playerSettings = playerSession./*GetPlayerSettings()*/ PlayerSettings; if (!playerSettings.ContainsKey("Interaction.Menu.X") || !playerSettings.ContainsKey("Interaction.Menu.Y")) { playerSettings["Interaction.Menu.X"] = 1010; playerSettings["Interaction.Menu.Y"] = 13; playerSession./*SetPlayerSettings()*/ PlayerSettings = playerSettings; } playerSession.TriggerEvent("UI.UpdateInteractionMenuLocation", playerSettings["Interaction.Menu.X"], playerSettings["Interaction.Menu.Y"]); }
private async void StartRobberyThread(Session.Session robberSession, Session.Session victimSession) { var robberyCash = victimSession.GetGlobalData("Character.Cash", 0); if (robberyCash == 0) { Log.ToClient("[Robbery]", "You found no cash", ConstantColours.Blue, robberSession.Source); Log.ToClient("[Robbery]", "The robber found no cash on you", ConstantColours.Blue, victimSession.Source); victimSession.SetLocalData("Character.IsBeingRobbed", false); return; } var robberyWaitTimer = CitizenFX.Core.Native.API.GetConvarInt("mg_playerRobbingTime", 6); while (robberyWaitTimer > 0) { var robberPos = robberSession.GetPlayerPosition(); var victimPos = victimSession.GetPlayerPosition(); Log.Debug($"Robbery between {robberSession.PlayerName} and {victimSession.PlayerName} distance = {robberPos.DistanceToSquared(victimPos)}"); if (robberPos.DistanceToSquared(victimPos) > 4.0f) { Log.ToClient("[Robbery]", "You moved to far away to finish the robbery", ConstantColours.Blue, robberSession.Source); Log.ToClient("[Robbery]", "You moved away and are no longer being robbed", ConstantColours.Blue, victimSession.Source); victimSession.SetLocalData("Character.IsBeingRobbed", false); return; } if (!victimSession.GetGlobalData("Character.HasHandsUp", false) && !victimSession.GetGlobalData("Character.HasHandsOverHead", false) && /*Server.Get<ArrestHandler>().GetCuffState(victimSession)*/ victimSession.CuffState == CuffState.None && /*Server.Get<DeathHandler>().GetDeathState(victimSession)*/ victimSession.DeathState == DeathState.Alive) { Log.ToClient("[Robbery]", "The person you are robbing put their hands down", ConstantColours.Blue, robberSession.Source); Log.ToClient("[Robbery]", "You put your hands down", ConstantColours.Blue, victimSession.Source); victimSession.SetLocalData("Character.IsBeingRobbed", false); return; } await BaseScript.Delay(1000); robberyWaitTimer--; } var payHandler = Server.Get <PaymentHandler>(); payHandler.UpdatePlayerCash(robberSession, robberyCash, $"robbing {victimSession.PlayerName}"); payHandler.UpdatePlayerCash(victimSession, -robberyCash, $"being robbed by {robberSession.PlayerName}"); Log.ToClient("[Robbery]", $"You just robbed this person for ${robberyCash}", ConstantColours.Blue, robberSession.Source); Log.ToClient("[Robbery]", $"You just got robbed for ${robberyCash}", ConstantColours.Blue, victimSession.Source); }
public static void SendProximityMessage(Session.Session sourceSession, string prefix, string message, Color prefixColour, float distance = 6.0f, bool showForSource = true) { var sourcePos = sourceSession.GetPlayerPosition(); Server.Instance.Get <SessionManager>().ForAllClients(o => { var playerPos = o.Position; if (sourcePos.DistanceToSquared(playerPos) <= distance && (showForSource || sourceSession != o)) { Log.ToClient(prefix, message, prefixColour, o.Source); } }); }
public void SendRadioMessage(Session.Session sourceSession, int radioChannel, string radioMessage) { Sessions.ForAllClients(o => { var otherRadioChannel = GetPlayerRadioChannel(o); if (radioChannel == otherRadioChannel) { Log.ToClient($"[Radio Channel {radioChannel}]", radioMessage, ConstantColours.Radio, o.Source); } }); Messages.SendProximityMessage(sourceSession, "[On Radio]", radioMessage, ConstantColours.Radio, 25.0f, false); sourceSession.TriggerEvent("Player.PlayRadioAnim"); }
public void OnCharacterLoaded(Session.Session playerSession) { var properties = Server.Get <PropertyManager>().Properties.Where(o => o.IsPropertyTenant(playerSession.CharId)); foreach (var property in properties) { var daysUntilPay = getDaysUntilNextPayment(property); if (daysUntilPay == 0) { playerSession.Message("[Property]", $"Payment for {property.Address} is due today (${GetPropertyNextPaymentPrice(property)})"); } } }
public byte[] Handle(string query, Session.Session session) { string id = null; var data = new JArray(); var response = new Response(session); var pos = query.IndexOf("#"); if (pos != -1) { id = query.Substring(0, pos); query = query.Substring(pos + 1); var gqlQuery = ParseQueries(query, response); if (!response.Errors.HasValues) { foreach (var value in gqlQuery) { if (value.TargetType is GqlQuery q) { var errorsCount = response.Errors.Count; var answer = q.Resolve(value, response); if (errorsCount == response.Errors.Count) { data.Add(answer); } } else { response.AddError(value.ToString(), "Запрашиваемый метод не найден"); } } } } else { response.AddError(query, "Идентификатор не указан"); } var result = new JObject { new JProperty("data", data.HasValues ? data : null) }; if (id != null) { result.Add(new JProperty("id", id)); } if (response.Errors.HasValues) { result.Add(new JProperty("errors", response.Errors)); } return(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(result))); }
private void Event_AsyncAccept(object sender, SocketAsyncEventArgs args) { if (args.SocketError != SocketError.Success) { args.AcceptSocket.Close(); args.AcceptSocket.Dispose(); args.AcceptSocket = null; return; } Session.Session session = this.AllocSession(); if (session == null) { args.AcceptSocket.Close(); args.AcceptSocket.Dispose(); Error(-1, "[Error] : alloc session is null."); } else { if (session.FreeSessionCaller == null || !session.FreeSessionCaller.Equals(new Base.FreeSessionMethodCaller(FreeSessionCaller))) { session.FreeSessionCaller += new Base.FreeSessionMethodCaller(FreeSessionCaller); } if (!session.initialize(args.AcceptSocket, (IPEndPoint)m_Socket.LocalEndPoint, (IPEndPoint)args.AcceptSocket.RemoteEndPoint)) { this.FreeSession((T)session); args.AcceptSocket.Close(); args.AcceptSocket.Dispose(); Error(-1, "[Error] : session(" + session.Index + ") : initialize fail."); } else { if (!this.ProcessAccept(session)) { session.close(true); this.FreeSession((T)session); } } } //C# 存在隐藏的指针,Are you kidding me? //如果定义成数组,这里是指针哦! args.AcceptSocket = null; }
private SocketEventProvider(Session.Session session) { Sending = false; ReceiveEvent = socketEventPool.Pop(); ReceiveEvent.UserToken = session; ReceiveEvent.Completed += ReceiveSocketEvent_Completed; // TODO: Memory Manager ReceiveEvent.SetBuffer(new byte[MaxBufferSize]); SendEvent = socketEventPool.Pop(); SendEvent.UserToken = session; SendEvent.Completed += SendSocketEvnet_Completed; }
public async Task Add(INetworkClient client) { var session = new Session.Session(client); lock (m_Lock) { Sessions.Add(session); } session.DependencyManager = m_DependencyManager.CreateChildContainer(); await OnSessionCreated(session); //await Invoke(new ConnectedEvent(), client.Id, m_Empty); }
private void OnDataRequest([FromSource] Player source, int vehId) { Session.Session playerSession = Sessions.GetPlayer(source); if (playerSession == null) { return; } Log.Verbose($"Attempting to load vehicle ({vehId}) for {source.Name} (CharID: {playerSession.GetGlobalData<int>("Character.CharID")})"); MySQL.execute("SELECT * FROM vehicle_data WHERE VehID = @id", new Dictionary <string, dynamic> { ["@id"] = vehId }, new Action <List <dynamic> >(data => { if (data[0].Impounded) { RetrieveImpoundVehicle(playerSession, data[0]); return; } //VehicleDataModel modData = JsonConvert.DeserializeObject<VehicleDataModel>(data[0].Mods); var didParse = ((string)data[0].Mods).TryParseJson(out VehicleDataModel modData); if (!didParse) { modData = new VehicleDataModel(); } try { modData.Model = CitizenFX.Core.Native.API.GetHashKey(VehicleStoreItems.StoreMenus.FirstOrDefault(o => o.Value.FirstOrDefault(b => b.displayName == data[0].VehicleName) != null).Value.FirstOrDefault(o => o.displayName == data[0].VehicleName)?.modelName); } catch (Exception e) { Log.Error(e); } source.TriggerEvent("Vehicle.SpawnGarageVehicle", data[0].Plate, data[0].VehID, /*data[0].Mods*/ JsonConvert.SerializeObject(modData)); currentVehicles.Add(new Models.Vehicle(data[0], playerSession)); AddPlayerOwnedVehicle(playerSession, data[0].VehID); MySQL.execute("UPDATE vehicle_data SET OutGarage = true WHERE VehID = @id", new Dictionary <string, dynamic> { ["@id"] = vehId }); Log.Verbose($"Loaded vehicle ({vehId}) for {source.Name} (CharID: {playerSession.GetGlobalData<int>("Character.CharID")})"); })); }
// Gets all impounded vehicles of a players current character private void GetImpoundVehicles(Session.Session playerSession) { Log.Verbose($"Requesting impounded vehicle data for {playerSession.PlayerName} (CharID: {playerSession.GetGlobalData<int>("Character.CharID")})"); MySQL.execute("SELECT * FROM vehicle_data WHERE CharID = @char AND Impounded = true", new Dictionary <string, dynamic> { ["@char"] = playerSession.GetGlobalData <int>("Character.CharID"), }, new Action <List <dynamic> >(data => { data.ForEach(o => { ((IDictionary <string, dynamic>)o)["ImpoundPrice"] = o.VehiclePrice * 0.1f; }); playerSession.TriggerEvent("Vehicle.RecieveGarageVehicles", data, true); Log.Verbose($"Got impounded vehicle data for player {playerSession.PlayerName} (CharID: {playerSession.GetGlobalData<int>("Character.CharID")})"); })); }
public void UpdateJailState(Session.Session session) { var jailTime = session.GetGlobalData("Character.JailTime", 0); if (jailTime > 0 && !session.GetLocalData("Jail.IsInJail", false)) { session.SetServerData("Jail.LastJailReduction", DateTime.Now); session.SetLocalData("Jail.IsInJail", true); session.TriggerEvent("Jail.SetJailState", true); } else if (jailTime <= 0 && session.GetLocalData("Jail.IsInJail", false)) { session.TriggerEvent("Jail.SetJailState", false); session.SetLocalData("Jail.IsInJail", false); } }
public async void OnCharacterLoaded(Session.Session playerSession) { if (string.IsNullOrEmpty(playerSession.GetGlobalData("Character.SkinData", ""))) { Log.Debug($"{playerSession.PlayerName} is starting initial creation of a character"); await playerSession.Transition(600, 1500, 600); playerSession.SetGlobalData("Character.Instance", playerSession.ServerID); playerSession.SetServerData("Character.Skin.PreviousLocation", playerSession.GetPlayerPosition()); playerSession.SetPlayerPosition(skinCreationLocation); playerSession.SetPlayerHeading(331.0f); playerSession.TriggerEvent("Skin.StartCharacterCreation"); playerSession.SetFreezeStatus(true); } }
private void AddPolyPoint(Session.Session playerSession) { if (playerSession.GetServerData("Dev.IsDrawingPoly", false)) { var playerPos = playerSession.GetPlayerPosition(); var polyPos = new[] { playerPos.X, playerPos.Y }; Log.Debug($"Adding a position of X: {polyPos[0]} Y: {polyPos[1]} for {playerSession.PlayerName} current poly"); Log.ToClient("[Dev]", $"Adding position X: {polyPos[0]} Y: {polyPos[1]}", ConstantColours.Admin, playerSession.Source); var currentPolys = playerSession.GetServerData("Dev.PolyPoints", new List <float[]>()); currentPolys.Add(polyPos); playerSession.SetServerData("Dev.PolyPoints", currentPolys); playerSession.TriggerEvent("Dev.Poly.AddDrawingPoint", polyPos); } }
public JobType GetPlayerJob(Session.Session playerSession) { if (playerSession == null) { return(JobType.Civillian); } var tempJob = playerSession.GetGlobalData("Character.Temp.Job", "-1"); if (tempJob != "-1") { return(stringToJob(tempJob)); } return(stringToJob(playerSession.GetGlobalData("Character.Job", "Civillian"))); }
public void OnCharacterLoaded(Session.Session playerSession) { var characterSettings = playerSession./*GetCharacterSettings()*/ CharacterSettings; if (characterSettings.ContainsKey("SpawnLocation")) { string location = characterSettings["SpawnLocation"]; if (!location.Contains("home")) // TODO make this less hard-codey { playerSession.SetPlayerPosition(spawnLocations[location]); return; } Server.Get <PropertyManager>().SpawnPlayerAtProperty(playerSession, location.Split('-')[1]); } }
/// <summary> /// Lists all permissions the player currently has. Splitting them up by their respective branches /// </summary> /// <param name="playerSession"></param> public static void ListPermissions(this Session.Session playerSession) { var perms = playerSession.Permissions; var playerPermTrees = PermissionTree.CreateTrees(perms); foreach (var tree in playerPermTrees) { Log.Info($"Permission tree - {tree.Name} start"); foreach (var perm in tree.Permissions) { Log.Info(perm); } Log.Info($"Permission tree - {tree.Name} end"); } }
public int GetPlayerRadioChannel(Session.Session playerSession) { var radioItem = playerSession./*GetInventory()*/ Inventory.GetItem("Radio"); if (radioItem != null) { if (radioItem.metaData != "") { return(Convert.ToInt32(radioItem.metaData)); } return(1); } return(-1); }
private void syncMarkers(Session.Session session) { if (this.EntranceLocation != default) { session.AddMarker(this.EntranceLocation, new MarkerOptions { ColorArray = ConstantColours.Yellow.ToArray(), MarkerId = $"property:entrance:{PropertyId}" }); } if (IsPropertyTenant(session.CharId)) { session.AddGarage(getPropertyGarage()); // only sync garage if they are an actual tenant } }
public void ResyncPropertyForPlayer(Session.Session playerSession, bool skipChecks = true) { if (playerSession == null || !skipChecks && !IsPropertyTenant(playerSession.CharId)) { return; } Log.Debug($"Syncing property {PropertyId} for {playerSession.PlayerName}"); syncMarkers(playerSession); if (playerSession.PropertyCurrentlyInside != null && playerSession.PropertyCurrentlyInside == this) { syncStorage(playerSession); } }
public int GetPaymentTypeBalance(Session.Session playerSession) { var paymentType = GetPaymentType(playerSession); if (paymentType == PaymentType.Cash) { return(playerSession.GetGlobalData("Character.Cash", 0)); } if (paymentType == PaymentType.Debit) { return(Server.Get <BankHandler>().GetBank(playerSession.GetGlobalData <int>("Character.CharID")).Balance); } return(0); }
private async void beginDrugInteraction(Session.Session playerSession, Drug drugData, Vector3 closeVector, bool isHarvest) { var drugName = isHarvest ? drugData.HarvestDrugName : drugData.ProcessDrugName; var interactionTime = GetPoliceMult(isHarvest ? drugData.HarvestTime : drugData.ProcessTime, 1.5f); var remainingTime = interactionTime; while (true) { await BaseScript.Delay(250); remainingTime -= 250; if (remainingTime <= 0) { var playerInv = playerSession./*GetInventory()*/ Inventory; if (isHarvest && playerInv.CanStoreItem(drugName, 1) || !isHarvest && playerInv.HasItem(drugData.HarvestDrugName)) { Log.ToClient("[Drugs]", $"You just got 1 {drugName}", ConstantColours.Criminal, playerSession.Source); if (!isHarvest) { playerInv.AddItem(drugData.HarvestDrugName, -1); } playerInv.AddItem(drugName, 1); } else { Log.ToClient("[Drugs]", $"You cannot hold anymore {drugName}", ConstantColours.Criminal, playerSession.Source); playerSession.SetServerData("Drug.IsInteracting", false); return; } remainingTime = interactionTime; } else { var playerPos = playerSession.GetPlayerPosition(); if (playerPos.DistanceToSquared(closeVector) > 15.0f || playerSession.IsInVehicle()) { Log.ToClient("[Drugs]", "You moved to far away from the drug area", ConstantColours.Criminal, playerSession.Source); playerSession.SetServerData("Drug.IsInteracting", false); return; } } } }
public void OnCharacterLoaded(Session.Session playerSession) { playerSession.AddBlip("Fish seller", fishSellLocations, new BlipOptions { Sprite = 356 }); playerSession.AddMarker(fishSellLocations, new MarkerOptions { ScaleFloat = 2.0f, ColorArray = ConstantColours.Yellow.ToArray() }); playerSession.AddBlip("Fishing pier", fishingLocations, new BlipOptions { Sprite = 316 }); }
private void UpdateDragState(Session.Session playerSession, DragState dragState, int ownerId) { playerSession.SetGlobalData(new Dictionary <string, dynamic> { ["Character.DragState"] = dragState.ToString(), ["Drag.CurrentDragOwner"] = ownerId }); if (dragState == DragState.None || ownerId == -1) { playerSession.TriggerEvent("Drag.EndDrag"); } else if (dragState == DragState.Dragged) { playerSession.TriggerEvent("Drag.DoDrag", ownerId); } }
public Vehicle(IDictionary <string, dynamic> data, Session.Session vehOwner) { var vehType = GetType(); foreach (var kvp in data) { try { var field = vehType.GetProperty(kvp.Key); //Log.Debug($"Currently doing stuff for {kvp.Key}"); if (field != null) { //Log.Debug($"{kvp.Key} exists in this object!"); if (kvp.Key == "Mods") { if (kvp.Value.Contains("{")) { field.SetValue(this, JsonConvert.DeserializeObject <VehicleDataModel>(kvp.Value)); } else { field.SetValue(this, new VehicleDataModel()); } Log.Debug($"Settings mods"); } else if (kvp.Key == "Inventory") { field.SetValue(this, new VehicleInventory(kvp.Value, this)); Log.Debug($"Setting inventory with an inv string of {kvp.Value}"); } else { field.SetValue(this, kvp.Value); Log.Debug($"Setting generic value of {kvp.Key}"); } } } catch (Exception e) { Log.Error(e); } } VehicleOwner = vehOwner; KeyAccessCharacters.Add(vehOwner.GetGlobalData <int>("Character.CharID")); }