/// <summary> /// Обработчик выхода игрока /// </summary> public void OnPlayerDisconnect(Client player, string reason) { if (player.hasData(ClanMission.BOOTY_OBJECT)) { ClanMissionManager.DetachBooty(player); } var playerInfo = _playerInfoManager.GetInfo(player); if (playerInfo == null) { return; } if (player.hasData(PlayerData.ON_RACE) || player.hasSyncedData(PlayerData.IS_REGISTERED)) { ProcessRacer(player); } SyncWork(player); SyncPrisoner(player); SyncJail(player, playerInfo); SyncWeaponAmmo(player, playerInfo); SyncClanMissionVote(player, playerInfo); playerInfo.LastPosition = PositionConverter.VectorToString(player.position); _accountsProvider.UpdateTotalTime(playerInfo.AccountId); _playersProvider.UpdatePlayersInfos(new List <PlayerInfo> { playerInfo }); _vehiclesProvider.Update(playerInfo.Vehicles.Values); _playerInfoManager.Remove(player); }
/// <summary> /// Создает лидера клана /// </summary> private void CreateLeader(ClanInfo clanInfo) { var ped = _pointCreator.CreatePed( clanInfo.LeaderHash, clanInfo.LeaderName, clanInfo.LeaderPosition, clanInfo.LeaderRotation, clanInfo.LeaderMarker, Colors.VividCyan ); if (clanInfo.ClanId == 3) { var bitches = API.createPed(PedHash.Tanisha, new Vector3(-124.01, -642.23, 168.82), 0); API.setEntityRotation(bitches, new Vector3(0.00, 0.00, 41.92)); } ped.ColShape.onEntityEnterColShape += (shape, entity) => { PlayerHelper.ProcessAction(entity, player => { if (!HasRight(player, clanInfo.ClanId, ClanRank.Lowest)) { return; } API.triggerClientEvent( player, ServerEvent.SHOW_CLAN_LEADER_MENU, (int)clanInfo.ClanId, ClanMissionManager.GetMissionVotes(clanInfo.ClanId), ClanManager.GetAuthority(clanInfo.ClanId) ); }); }; ped.ColShape.onEntityExitColShape += (shape, entity) => { var player = API.getPlayerFromHandle(entity); API.triggerClientEvent(player, ServerEvent.HIDE_CLAN_LEADER_MENU); }; }
/// <summary> /// Обработчик маркера гаража фургонов /// </summary> private void OnEnterVansGarage(ColShape shape, NetHandle entity, Vector3 spawnPosition, Vector3 spawnRotation) { var player = API.getPlayerFromHandle(entity); var clanId = (long)shape.getData(CLAN_ID_KEY); if (!(PlayerHelper.PlayerCorrect(player) && ClanMissionManager.HasActiveMission() && PlayersClanCorrect(player, clanId))) { return; } API.triggerClientEvent(player, ServerEvent.SHOW_CLAN_VANS_MENU, spawnPosition, spawnRotation); }
/// <summary> /// Обработчик смерти игрока /// </summary> public void OnPlayerDeath(Client player, NetHandle handle, int weapon) { if (player.hasData(PlayerData.ON_EVENT) || player.hasData(PlayerData.ON_RACE) || player.hasData(PlayerData.FIGHTER)) { return; } if (player.hasData(ClanMission.BOOTY_OBJECT)) { ClanMissionManager.DetachBooty(player); } var playerInfo = _playerInfoManager.GetInfo(player); _inventoryManager.RefreshAmmo(player, playerInfo); ProcessKiller(player, handle, playerInfo); ProcessPoliceman(player); SetDeathPenalty(player, playerInfo); }
/// <summary> /// Обработчик входа в точку сдачи добычи /// </summary> private void OnEnterEndPoint(ColShape shape, NetHandle entity) { var player = API.getPlayerFromHandle(entity); var clanId = (long)shape.getData(CLAN_ID_KEY); if (!(PlayerHelper.PlayerCorrect(player, true) && ClanMissionManager.HasActiveMission() && PlayersClanCorrect(player, clanId))) { return; } var vehicle = API.getEntityFromHandle <Vehicle>(API.getPlayerVehicle(player)); var missionBootyCount = GetMissionBooty(vehicle); if (missionBootyCount == 0) { API.sendNotificationToPlayer(player, "~r~У вас отсутствует добыча", true); return; } SetReward(player, clanId, missionBootyCount); vehicle.setData(MISSION_BOOTY, 0); ((List <Object>)vehicle.getData(BOOTY_IN_TRUNK)).ForEach(e => API.deleteEntity(e)); vehicle.setData(BOOTY_IN_TRUNK, new List <Object>()); }