Created
January 13, 2022 16:39
-
-
Save Seregamil/015f1869b23852ad69cc6e02f0a07098 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using GM.Client; | |
using GM.Client.Friends; | |
using GM.Global; | |
using GM.Property.Businesses.RefuelStations; | |
using GM.Property.Businesses.Shops.ClothShop; | |
using GM.Property.Businesses.Shops.ProductShop; | |
using GM.Property.Businesses.Showrooms; | |
using GM.Property.Houses; | |
using GM.Property.Vehicle; | |
using GM.World.Atm; | |
using GTANetworkAPI; | |
namespace GM.InteractionSystem | |
{ | |
public class InteractHandler : Script | |
{ | |
/// <summary> | |
/// | |
/// </summary> | |
/// <param name="target">Принимает соглашение цель события, так что target</param> | |
[RemoteEvent("Interaction:Accept")] | |
public void InteractionAccept(Player target) | |
{ | |
var interact = target.GetInteractModel(); | |
target.StopInteract(); | |
if(interact == null) | |
return; | |
var player = interact.Source; | |
if (player == null || !NAPI.Player.IsPlayerConnected(player)) | |
{ | |
target.ShowNotify(Notify.MessageType.Alert, "Инициатор события покинул сервер"); | |
return; | |
} | |
player.StopInteract(); | |
var playerProfile = player.GetProfile(); | |
var targetProfile = target.GetProfile(); | |
if (playerProfile == null || targetProfile == null) | |
{ | |
target.ShowNotify(Notify.MessageType.Alert, "Какая-то ошибка, сброс данных x3"); | |
return; | |
} | |
bool result; | |
switch (interact.InteractType) | |
{ | |
case InteractType.MoneyTransfer: | |
break; | |
case InteractType.AddFriend: | |
result = FriendsHandler.AddFriend(playerProfile, targetProfile); | |
if (!result) | |
{ | |
player.ShowNotify(Notify.MessageType.Alert, $"Не удалось подружиться с игроком {target.Name}!"); | |
target.ShowNotify(Notify.MessageType.Alert, $"Не удалось подружиться с игроком {player.Name}!"); | |
} | |
else | |
{ | |
player.ShowNotify(Notify.MessageType.Success, $"Вы подружились с игроком {target.Name}!"); | |
target.ShowNotify(Notify.MessageType.Success, $"Вы подружились с игроком {player.Name}!"); | |
player.TriggerEvent("Player:Friends", playerProfile.FriendProfiles | |
.Select(x => x.TargetId) | |
.ToList()); | |
target.TriggerEvent("Player:Friends", targetProfile.FriendProfiles | |
.Select(x => x.TargetId) | |
.ToList()); | |
} | |
break; | |
case InteractType.MateInvite: { | |
var house = player.GetInHouse(); | |
if (house == null) | |
{ | |
player.ShowNotify(Notify.MessageType.Alert, "Вы должны быть внутри дома"); | |
return; | |
} | |
if (!house.DoesOwner(playerProfile.Id)) | |
{ | |
player.ShowNotify(Notify.MessageType.Alert, "Вы не являетесь владельцем дома"); | |
return; | |
} | |
if (house.MatesCapacity == house.GetMates().Count) | |
{ | |
player.ShowNotify(Notify.MessageType.Alert, "Невозможно подселить нового игрока, все места заняты"); | |
return; | |
} | |
if (house.DoesMate(targetProfile) || house.DoesOwner(targetProfile.Id)) | |
{ | |
player.ShowNotify(Notify.MessageType.Alert, "Игрок уже является сожителем данного дома"); | |
return; | |
} | |
var targetHouse = target.GetInHouse(); | |
if (targetHouse == null || targetHouse.Id != house.Id) | |
{ | |
player.ShowNotify(Notify.MessageType.Alert, "Игрок должен быть внутри дома"); | |
return; | |
} | |
result = house.TryMateInvite(targetProfile); | |
if (!result) | |
{ | |
player.ShowNotify(Notify.MessageType.Success, "Ошибка добавления игрока в список сожителей"); | |
target.ShowNotify(Notify.MessageType.Success, "Ошибка добавления игрока в список сожителей"); | |
} | |
else | |
{ | |
player.ShowNotify(Notify.MessageType.Success, $"Игрок {target.Name} теперь является сожителем данного дома"); | |
target.ShowNotify(Notify.MessageType.Success, $"Вы являетесь сожителем дома {house.Id}. Владелец дома: {player.Name}"); | |
house.UpdateMenuView(target); | |
} | |
break; | |
} | |
default: | |
throw new ArgumentOutOfRangeException(); | |
} | |
} | |
[RemoteEvent("Interaction:Decline")] | |
public void InteractionDecline(Player target) | |
{ | |
var interact = target.GetInteractModel(); | |
target.StopInteract(); | |
if(interact == null) | |
return; | |
var player = interact.Source; | |
if (player == null || !NAPI.Player.IsPlayerConnected(player)) | |
{ | |
target.ShowNotify(Notify.MessageType.Alert, "Инициатор события покинул сервер"); | |
return; | |
} | |
player.StopInteract(); | |
target.ShowNotify(Notify.MessageType.Success, $"Вы отклонили запрос на взаимодействие с игроком {player.Name}"); | |
player.ShowNotify(Notify.MessageType.Error, $"Игрок {target.Name} не принял запрос на взаимодействие с вами"); | |
} | |
[RemoteEvent("Interaction:NonAcceptInteract")] | |
public void NonAcceptInteract(Player player, int keyCode) | |
{ | |
var key = (InteractKeys) keyCode; | |
player.StopNonAccept(); | |
var profile = player.GetProfile(); | |
if(profile == null) | |
return; | |
var nearAtm = player.GetNearAtm(); | |
if (nearAtm != null) | |
{ | |
// player.ShowNotify(Notify.MessageType.Success, $"Вы ткнули кнопку действия возле банкомата {nearAtm.Id}"); | |
if (!player.DoesHaveDebitCards()) | |
{ | |
player.ShowNotify(Notify.MessageType.Error, "У вас нет банковской карточки!"); | |
return; | |
} | |
nearAtm.ToggleMenu(player); | |
return; | |
} | |
var nearProductShop = player.GetNearProductShop(); | |
if (nearProductShop != null) | |
{ | |
nearProductShop.SyncClientData(player); | |
} | |
var nearClothesShop = player.GetNearClothesShop(); | |
if (nearClothesShop != null) | |
{ | |
nearClothesShop.SyncClientData(player); | |
} | |
var nearColumn = player.GetNearRefuelColumn(); | |
if (nearColumn != null) | |
{ | |
var station = nearColumn.Station; | |
if(station == null) | |
return; | |
var vehicle = nearColumn.GetVehicleNearColumnNearestPlayer(player); | |
if(vehicle == null) | |
return; | |
if(vehicle.GetInfo() == null || vehicle.DoesTemporary()) | |
return; | |
station.SyncClientData(player, vehicle.GetInfo(), nearColumn.ColumnType == (int) ColumnType.Electric); | |
} | |
var nearHouse = player.GetNearHouse(); | |
var house = nearHouse ?? player.GetInHouse(); | |
if (house != null) | |
{ | |
switch (key) | |
{ | |
case InteractKeys.E: | |
{ | |
if(nearHouse == null) | |
house.TryExit(player); | |
else | |
house.TryEnter(player, true); | |
break; | |
} | |
case InteractKeys.G: | |
house.ToggleMenu(player); | |
break; | |
default: | |
return; | |
} | |
return; | |
} | |
var nearGarage = player.GetNearGarage(); | |
if (nearGarage != null) | |
{ | |
if (nearGarage.House == null) | |
throw new Exception($"GARAGE DOESNT HAVE LINKED HOUSE"); | |
if(!nearGarage.House.DoesOwner(profile.Id) | |
&& !nearGarage.House.DoesMate(profile)) | |
return; | |
if (player.IsInVehicle && player.VehicleSeat == 0) | |
{ | |
if(nearGarage.Capacity >= nearGarage.GetTotalVehiclesIn() + 1) | |
{ | |
// TODO: поставить в гараж | |
var vehicle = player.Vehicle; | |
nearGarage.Put(vehicle); | |
nearGarage.House.ToggleMenu(player, false); | |
player.ShowNotify(Notify.MessageType.Success, | |
$"Вы успешно поставили свой {vehicle.DisplayName} в гараж {nearGarage.Id} дома №{nearGarage.House.Id}"); | |
} | |
} | |
else | |
{ | |
if (nearGarage.GetTotalVehiclesIn() > 0) | |
{ | |
nearGarage.House.ToggleGarageMenu(player); | |
} | |
} | |
} | |
var nearShowroom = player.GetNearShowroom(); | |
var showroom = nearShowroom ?? player.GetInShowroom(); | |
if (showroom != null) | |
{ | |
if (nearShowroom == null) | |
showroom.TurnOffMenu(player); | |
else | |
showroom.TurnOnMenu(player); | |
} | |
} | |
[RemoteEvent("Interact:Refresh")] | |
public void RefreshInteract(Player player) | |
{ | |
if(player.GetProfile() == null) | |
return; | |
if(player.Dead) | |
return; | |
var nearAtm = player.GetNearAtm(); | |
if (nearAtm != null) | |
{ | |
player.SetInteractKey(new List<int> | |
{ | |
(int) InteractKeys.E | |
}); | |
return; | |
} | |
var nearColumn = player.GetNearRefuelColumn(); | |
if (nearColumn != null) | |
{ | |
player.SetInteractKey(new List<int> | |
{ | |
(int) InteractKeys.E | |
}); | |
return; | |
} | |
var house = player.GetNearHouse() ?? player.GetInHouse(); | |
if (house != null) | |
{ | |
player.SetInteractKey(new List<int> | |
{ | |
(int) InteractKeys.E, | |
(int) InteractKeys.G, | |
}); | |
return; | |
} | |
var showroom = player.GetNearShowroom() ?? player.GetInShowroom(); | |
if (showroom != null) | |
{ | |
player.SetInteractKey(new List<int>() | |
{ | |
(int) InteractKeys.E | |
}); | |
return; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment