Ragemp-roleplay-skript/Vehiclesystem/VehicleMain.cs
2019-04-16 13:59:07 +02:00

1279 lines
57 KiB
C#

using GrandTheftMultiplayer.Server;
using GrandTheftMultiplayer.Shared;
using GrandTheftMultiplayer.Server.API;
using GrandTheftMultiplayer.Shared.Math;
using GrandTheftMultiplayer.Server.Elements;
using GrandTheftMultiplayer.Server.Constant;
using MySql.Data.MySqlClient;
using System;
using System.Data;
using System.Threading.Tasks;
using GrandTheftMultiplayer.Server.Managers;
using System.Collections.Generic;
namespace Roleplay.Vehiclesystem
{
class VehicleMain : Script
{
public static string myConnectionString = "SERVER=185.223.28.49;" + "DATABASE=gtanetwork;" + "UID=fivem;" + "PASSWORD=" + Main.databasepass + ";";
public static MySqlConnection connection;
public static MySqlCommand command;
public static MySqlDataReader reader;
public static int Spoilers = 0;
public static int intFront_Bumper = 1;
public static int intRear_Bumper = 2;
public static int Side_Skirt = 3;
public static int Exhaust = 4;
public static int Frame = 5;
public static int Grille = 6;
public static int Hood = 7;
public static int Fender = 8;
public static int Right_Fender = 9;
public static int Roof = 10;
public static int Engine = 11;
public static int Brakes = 12;
public static int Transmission = 13;
public static int Horns = 14;
public static int Suspension = 15;
public static int Armor = 16;
public static int Turbo = 18;
public static int Xenon = 22;
public static int Front_Wheels = 23;
public static int Back_Wheels = 24;
public static int Plate_holders = 25;
public static int Trim_Design = 27;
public static int Ornaments = 28;
public static int Dial_Design = 30;
public static int Steering_Wheel = 33;
public static int Shift_Lever = 34;
public static int Plaques = 35;
public static int Hydraulics = 38;
public static int Livery = 48;
public static int Plate = 62;
public static int Colour_1 = 66;
public static int Colour_2 = 67;
public static int Window_Tint = 69;
public VehicleMain()
{
//EVENTS
API.onClientEventTrigger += onVehicleFunctions;
API.onVehicleDeath += onVehicleDead;
API.onClientEventTrigger += onGasStationUse;
//createDBVehicles(); causing desynces
tanktimer();
createGasStations();
API.onEntityEnterColShape += onGasStationEnter;
API.onClientEventTrigger += onMotor;
API.onUpdate += onUpdate;
}
public void tanktimer()
{
API.delay(1000*28, false, () => {
foreach (NetHandle veh in API.getAllVehicles())
{
if(API.hasEntitySyncedData(veh,"tank") == true)
{
if (API.hasEntitySyncedData(veh, "motor") && API.getEntitySyncedData(veh, "motor") == true)
{
if(API.getEntitySyncedData(veh, "tank") > 0 && API.getEntitySyncedData(veh,"tank") != null)
{
int tank = API.getEntitySyncedData(veh, "tank");
API.setEntitySyncedData(veh, "tank", tank - 1);
}
}
}
}
});
}
public void addTank(Vehicle veh, int amount)
{
API.setEntitySyncedData(veh, "tank", Convert.ToInt32(API.getEntitySyncedData(veh, "tank") + amount));
}
public void setTank(Vehicle veh, int amount)
{
API.setEntitySyncedData(veh, "tank", Convert.ToInt32(amount));
}
public int getTank(Vehicle veh)
{
int tank = 0;
if(API.hasEntitySyncedData(veh,"tank") == true)
{
tank = API.getEntitySyncedData(veh, "tank");
}
return tank;
}
public static int Tankpreis = 2; // 2$
public const int GasMenu_CALLBACK = 46153;
public void openGasMenu(Client player)
{
if (Tankpreis != 0 && GasMenu_CALLBACK != 0)
{
if (player.vehicleSeat == -1)
{
object[] argumentList = new object[11];
argumentList[0] = GasMenu_CALLBACK;
argumentList[1] = "Tankstelle";
argumentList[2] = "Optionen:";
argumentList[3] = true;
argumentList[4] = 3;
argumentList[5] = "~b~1% Tanken";
argumentList[6] = "~g~Voll Tanken";
argumentList[7] = "~r~Schliessen";
argumentList[8] = "~y~" + Tankpreis + "$";
API.triggerClientEvent(player, "menu_handler_create_menu", argumentList);
}
}
}
private void onGasStationUse(Client sender, string eventName, object[] arguments)
{
if(eventName == "menu_handler_select_item")
{
int callback = (int)arguments[0];
int index = (int)arguments[1];
if (callback == GasMenu_CALLBACK)
{
if (index == 0)
{
if (sender.isInVehicle == true)
{
if (Environment.MONEY.Money.getBarMoney(sender) >= Tankpreis)
{
if (getTank(sender.vehicle) < 100)
{
sender.vehicle.freezePosition = true;
API.delay(1000 * 5, true, () =>
{
sender.vehicle.freezePosition = false;
Environment.MONEY.Money.giveBarMoney(sender, -Tankpreis, API);
addTank(sender.vehicle, 1);
});
}
}
else
{
API.sendNotificationToPlayer(sender, "Du hast nicht genug Geld dabei!");
}
}
}
else if (index == 1)
{
if (sender.isInVehicle == true)
{
int tankfuellung = 100 - getTank(sender.vehicle);
int preis = tankfuellung * Tankpreis;
if (Environment.MONEY.Money.getBarMoney(sender) >= preis)
{
sender.vehicle.freezePosition = true;
API.delay(1000 * 5, true, () =>
{
Environment.MONEY.Money.giveBarMoney(sender, -preis, API);
setTank(sender.vehicle, 100);
sender.vehicle.freezePosition = false;
});
}
else
{
API.sendNotificationToPlayer(sender, "Du hast nicht genug Geld dabei!");
}
}
}
else if (index == 2)
{
API.triggerClientEvent(sender, "menu_handler_close_menu");
sender.vehicle.freezePosition = false;
}
}
}
}
public void createGasStations()
{
new Gas_station(new Vector3(180.4381,-1560.155,29.25));
new Gas_station(new Vector3(614.2005, 263.85, 103.0894));
new Gas_station(new Vector3(268.3035, -1268.73, 29.145));
new Gas_station(new Vector3(-77.21, -1763.109, 29.540));
new Gas_station(new Vector3(-315, -1474, 30));
new Gas_station(new Vector3(-521, -1215, 18));
new Gas_station(new Vector3(820, -1031, 26));
new Gas_station(new Vector3(-717, -932, 19));
new Gas_station(new Vector3(-2089, -313, 13));
new Gas_station(new Vector3(-2552, 2336, 33));
new Gas_station(new Vector3(176, 6604, 31));
new Gas_station(new Vector3(1698, 6420, 32));
new Gas_station(new Vector3(2000, 3774, 32));
new Gas_station(new Vector3(1788, 3330, 41));
new Gas_station(new Vector3(-1439, -269, 46));
new Gas_station(new Vector3(-1653, -3144, 13));
new Gas_station(new Vector3(263, 2609, 44));
}
public class Gas_station
{
public Vector3 Position { get; set; }
public Gas_station(Vector3 position)
{
Position = position;
ColShape col = API.shared.createSphereColShape(Position, 3);
col.setData("Gas_Station", true);
API.shared.createMarker(0, Position, new Vector3(0, 0, 0), new Vector3(0, 0, 0), new Vector3(1, 1, 1), 185, 255, 0, 0, 0);
var b = API.shared.createBlip(Position);
API.shared.setBlipSprite(b, 361);
API.shared.setBlipColor(b, 1);
b.scale = 0.5f;
b.shortRange = true;
}
}
public DateTime LastAnnounce;
private void onUpdate()
{
if (DateTime.Now.Subtract(LastAnnounce).TotalSeconds >= 30) //Checks if the time between now and the 'last announce' is more or equal than 15 minutes
{
foreach (NetHandle nh in API.getAllVehicles())
{
if (API.getEntitySyncedData(nh, "tank") == 0)
{
Vehicle veh = API.getEntityFromHandle<Vehicle>(nh);
if (API.getVehicleEngineStatus(veh) == true)
{
API.setVehicleEngineStatus(veh, false);
}
}
}
}
}
public static bool hasPrivateVehicle(Client player)
{
bool state = false;
foreach(NetHandle nh in API.shared.getAllVehicles())
{
if(nh != null)
{
Vehicle veh = API.shared.getEntityFromHandle<Vehicle>(nh);
if (veh != null)
{
if (API.shared.getEntityData(veh, "besitzer") == player.name)
{
state = true;
}
else
{
state = false;
}
}
}
}
return state;
}
public static List<Vehicle> getPrivateVehicles(Client player)
{
List<Vehicle> vehlist = new List<Vehicle>();
if(privates.ContainsKey(player) == true){
vehlist = privates.Get(player);
}
// PERFOMANCE BOOSTING
return vehlist;
}
private void onGasStationEnter(ColShape colshape, NetHandle entity)
{
if(colshape.hasData("Gas_Station") == true && colshape.getData("Gas_Station") == true)
{
if (entity != null)
{
if (API.getEntityType(entity) == EntityType.Player)
{
Client player = API.getPlayerFromHandle(entity);
if (player.isInVehicle == true)
{
openGasMenu(player);
}
}
}
}
}
private void onMotor(Client sender, string eventName, object[] arguments)
{
if (eventName == "triggerVehicleEngine")
{
int state = (int)arguments[0];
NetHandle veh = API.getPlayerVehicle(sender);
if (state == 0)
{
API.setVehicleEngineStatus(veh, false);
API.setEntitySyncedData(veh, "motor", false);
}
else
{
API.setVehicleEngineStatus(veh, true);
API.setEntitySyncedData(veh, "motor", true);
}
}
}
public static void deletePersonalVehicle(Client player){
List<NetHandle> fahrzeuge = API.shared.getAllVehicles();
foreach(NetHandle nh in fahrzeuge){
if(nh != null){
Vehicle vh = API.shared.getEntityFromHandle<Vehicle>(nh);
if(vh != null){
if(API.shared.getEntityData(vh,"besitzer") == player.name){
vh.delete();
privates.Remove(player);
}
}
}
}
}
public static Dictionary<Client,List<Vehicle>> privates = new Dictionary<Client, List<Vehicle>>();
public static void loadPrivateVehicles(Client player, API API){
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
command.CommandText = "SELECT * FROM vehicles WHERE owner = '" + player.name + "'";
connection.Open();
reader = command.ExecuteReader();
DataTable results = new DataTable();
results.Load(reader);
List<Vehicle> list = new List<Vehicle>();
foreach (DataRow dr in results.Rows)
{
string model = Convert.ToString(dr["model"]);
int spawnx = Convert.ToInt32(dr["spawnx"]);
int spawny = Convert.ToInt32(dr["spawny"]);
int spawnz = Convert.ToInt32(dr["spawnz"]);
int rotation = Convert.ToInt32(dr["rotation"]);
int garageid = Convert.ToInt32(dr["garageid"]);
int slot = Convert.ToInt32(dr["slot"]);
string owner = Convert.ToString(dr["owner"]);
int id = Convert.ToInt32(dr["ID"]);
int color = Convert.ToInt32(dr["color"]);
int color2 = Convert.ToInt32(dr["color2"]);
int tank = Convert.ToInt32(dr["tank"]);
string numberplate = Convert.ToString(dr["numberplate"]);
// TUNINGS
int spoiler = Convert.ToInt32(dr["Spoiler"]);
int frontbumper = Convert.ToInt32(dr["FrontBumper"]);
int rearbumper = Convert.ToInt32(dr["RearBumper"]);
int sideskirt = Convert.ToInt32(dr["SideSkirt"]);
int frame = Convert.ToInt32(dr["Frame"]);
int grille = Convert.ToInt32(dr["Grille"]);
int hood = Convert.ToInt32(dr["Hood"]);
int fender = Convert.ToInt32(dr["Fender"]);
int rightfender = Convert.ToInt32(dr["RightFender"]);
int roof = Convert.ToInt32(dr["Roof"]);
int engine = Convert.ToInt32(dr["Engine"]);
int brakes = Convert.ToInt32(dr["Brakes"]);
int transmission = Convert.ToInt32(dr["Transmission"]);
int horn = Convert.ToInt32(dr["Horn"]);
int suspension = Convert.ToInt32(dr["Suspension"]);
int armor = Convert.ToInt32(dr["Armor"]);
int turbo = Convert.ToInt32(dr["Turbo"]);
int xenon = Convert.ToInt32(dr["Xenon"]);
int frontwheels = Convert.ToInt32(dr["FrontWheels"]);
int backwheels = Convert.ToInt32(dr["BackWheels"]);
int plateholders = Convert.ToInt32(dr["Plateholders"]);
int trimdesign = Convert.ToInt32(dr["TrimDesign"]);
int ornaments = Convert.ToInt32(dr["Ornaments"]);
int dialdesign = Convert.ToInt32(dr["DialDesign"]);
int steeringwheel = Convert.ToInt32(dr["SteeringWheel"]);
int shiftlever = Convert.ToInt32(dr["ShiftLever"]);
int plaques = Convert.ToInt32(dr["Plaques"]);
int hydraulics = Convert.ToInt32(dr["Hydraulics"]);
int livery = Convert.ToInt32(dr["Livery"]);
int plate = Convert.ToInt32(dr["Plate"]);
int windowtint = Convert.ToInt32(dr["WindowTint"]);
int exhaust = Convert.ToInt32(dr["Exhaust"]);
//Vehicle veh = RAPI.MainAPI.createRolePlayVehicle(API.vehicleNameToModel(model),new Vector3(spawnx,spawny,spawnz+1), new Vector3(0,0,rotation),r,g,b,r2,g2,b2,owner);
Vehicle veh = RAPI.MainAPI.createRolePlayVehicleNonARGB(API.vehicleNameToModel(model), new Vector3(0, 0, 0), new Vector3(0, 0, rotation), owner);
API.setVehiclePrimaryColor(veh, color);
API.setVehicleSecondaryColor(veh, color2);
API.setEntitySyncedData(veh, "slot", slot);
API.setEntitySyncedData(veh, "tank", tank);
API.setEntityData(veh, "id", id);
// SETTING TEH MODS
API.setVehicleMod(veh, Spoilers, spoiler);
API.setVehicleMod(veh, intFront_Bumper, frontbumper);
API.setVehicleMod(veh, intRear_Bumper, rearbumper);
API.setVehicleMod(veh, Side_Skirt, sideskirt);
API.setVehicleMod(veh, Frame, frame);
API.setVehicleMod(veh, Grille, grille);
API.setVehicleMod(veh, Hood, hood);
API.setVehicleMod(veh, Fender, fender);
API.setVehicleMod(veh, Exhaust, exhaust);
API.setVehicleMod(veh, Right_Fender, rightfender);
API.setVehicleMod(veh, Roof, roof);
API.setVehicleMod(veh, Engine, engine);
API.setVehicleMod(veh, Brakes, brakes);
API.setVehicleMod(veh, Transmission, transmission);
API.setVehicleMod(veh, Horns, horn);
API.setVehicleMod(veh, Suspension, suspension);
API.setVehicleMod(veh, Armor, armor);
API.setVehicleMod(veh, Turbo, turbo);
API.setVehicleMod(veh, Xenon, xenon);
if (backwheels != 0)
{
API.setVehicleMod(veh, Back_Wheels, backwheels);
}
API.setVehicleMod(veh, Front_Wheels, frontwheels);
API.setVehicleMod(veh, Plate_holders, plateholders);
API.setVehicleMod(veh, Trim_Design, trimdesign);
API.setVehicleMod(veh, Ornaments, ornaments);
API.setVehicleMod(veh, Dial_Design, dialdesign);
API.setVehicleMod(veh, Steering_Wheel, steeringwheel);
API.setVehicleMod(veh, Shift_Lever, shiftlever);
API.setVehicleMod(veh, Plaques, plaques);
API.setVehicleMod(veh, Hydraulics, hydraulics);
API.setVehicleMod(veh, Livery, livery);
API.setVehicleMod(veh, Window_Tint, windowtint);
API.setEntityData(veh,"numberplate",numberplate);
API.setVehicleNumberPlate(veh,numberplate);
if(list.Contains(veh) != true){
list.Add(veh);
}
}
if(privates.ContainsValue(list) != true){
privates.Add(player, list);
}
API.consoleOutput("Private Vehicles loaded for " + player.name);
connection.Close();
}
private void onVehicleDead(NetHandle entity)
{
}
private void onVehicleFunctions(Client sender, string eventName, object[] arguments)
{
if(eventName == "aufabschliessen")
{
NetHandle nethandle = (NetHandle) arguments[0];
Vehicle veh = API.getEntityFromHandle<Vehicle>(nethandle);
if(API.getEntitySyncedData(veh, "locked") == false)
{
API.setEntitySyncedData(veh, "locked", true);
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_DOORS_LOCKED, veh, 2);
API.sendNotificationToPlayer(sender, "Fahrzeug ~r~ Abgeschlossen!", true);
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_LIGHTS, sender.vehicle, 3);
API.delay(1000 * 1, true, () => {
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_LIGHTS, sender.vehicle, 4);
});
ClientAPI.playMP3(sender,"sounds//carlock.mp3",false);
}
else
{
API.setEntitySyncedData(veh, "locked", false);
API.setVehicleLocked(veh, false);
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_DOORS_LOCKED, veh, 1);
API.sendNotificationToPlayer(sender, "Fahrzeug ~g~ Aufgeschlossen!", true);
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_LIGHTS, sender.vehicle, 3);
API.delay(1000 * 1, true, () => {
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_LIGHTS, sender.vehicle, 4);
});
ClientAPI.playMP3(sender,"sounds//carlock.mp3",false);
}
}
else if(eventName == "parken")
{
NetHandle nethandle = (NetHandle)arguments[0];
Vehicle vehicle = RAPI.MainAPI.getVehicleFromHandle(API, nethandle);
parkvehicle(sender, vehicle);
// VehicleHash vh = API.getEntityModel(vehicle);
//API.getEntity
//string displayName = API.getVehicleDisplayName(modelHash);
API.sendNotificationToPlayer(sender, "Fahrzeug ~g~ geparkt!", true);
}
else if(eventName == "respawnen")
{
if (Environment.MONEY.Money.hasBarMoney(sender, 500) == true)
{
NetHandle nethandle = (NetHandle)arguments[0];
Vehicle vehicle = RAPI.MainAPI.getVehicleFromHandle(API, nethandle);
respawnVehicle(sender, vehicle);
Environment.MONEY.Money.giveBankMoney(sender, -500, API);
} else
{
API.sendNotificationToPlayer(sender, "Du hast nicht genug Geld auf der Hand!");
}
} else if(eventName == "openDoor")
{
NetHandle nethandle = (NetHandle)arguments[0];
Vehicle vehicle = RAPI.MainAPI.getVehicleFromHandle(API, nethandle);
int door = (int)arguments[1];
if(door != 4)
{
API.setVehicleDoorState(vehicle, door, !API.getVehicleDoorState(vehicle, door));
}
else
{
triggerDoor(vehicle, door);
}
}
else if(eventName == "vehiclelock")
{
NetHandle ent = (NetHandle)arguments[0];
Vehicle veh = RAPI.MainAPI.getVehicleFromHandle(API, ent);
if(API.getEntityData(veh,"Fraktionsfahrzeug") == Fraktionen.Fraktionsmanager.getFraktion(sender))
{
if (API.getEntitySyncedData(veh, "locked") == false)
{
API.setEntitySyncedData(veh, "locked", true);
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_DOORS_LOCKED, veh, 2);
API.sendNotificationToPlayer(sender, "Fahrzeug ~r~ Abgeschlossen!", true);
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_LIGHTS, sender.vehicle, 3);
API.delay(1000 * 1, true, () => {
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_LIGHTS, sender.vehicle, 4);
});
ClientAPI.playMP3(sender,"sounds//carlock.mp3",false);
}
else
{
API.setEntitySyncedData(veh, "locked", false);
API.setVehicleLocked(veh, false);
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_DOORS_LOCKED, veh, 1);
API.sendNotificationToPlayer(sender, "Fahrzeug ~g~ Aufgeschlossen!", true);
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_LIGHTS, sender.vehicle, 3);
API.delay(1000 * 1, true, () => {
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_LIGHTS, sender.vehicle, 4);
});
ClientAPI.playMP3(sender,"sounds//carlock.mp3",false);
}
}
else if(API.getEntityData(veh,"besitzer") == sender.name)
{
if (API.getEntitySyncedData(veh, "locked") == false)
{
API.setEntitySyncedData(veh, "locked", true);
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_DOORS_LOCKED, veh, 2);
API.sendNotificationToPlayer(sender, "Fahrzeug ~r~ Abgeschlossen!", true);
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_LIGHTS, sender.vehicle, 3);
API.delay(1000 * 1, true, () => {
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_LIGHTS, sender.vehicle, 4);
});
ClientAPI.playMP3(sender,"sounds//carlock.mp3",false);
}
else
{
API.setEntitySyncedData(veh, "locked", false);
API.setVehicleLocked(veh, false);
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_DOORS_LOCKED, veh, 1);
API.sendNotificationToPlayer(sender, "Fahrzeug ~g~ Aufgeschlossen!", true);
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_LIGHTS, sender.vehicle, 3);
API.delay(1000 * 1, true, () => {
API.sendNativeToPlayersInDimension(0, Hash.SET_VEHICLE_LIGHTS, sender.vehicle, 4);
});
ClientAPI.playMP3(sender,"sounds//carlock.mp3",false);
}
} else
{
API.sendNotificationToPlayer(sender, "Du hast keine Rechte!");
}
}
}
public void triggerDoor(Vehicle veh, int door)
{
if(API.getEntityData(veh,"" + door) == true)
{
API.sendNativeToAllPlayers(Hash.SET_VEHICLE_DOOR_SHUT, veh, door, true);
API.setEntityData(veh, "" + door, false);
}
else
{
API.sendNativeToAllPlayers(Hash.SET_VEHICLE_DOOR_OPEN, veh, door, true, true);
API.setEntityData(veh, "" + door, true);
}
}
public void parkvehicle(Client player, Entity vehicle)
{
Vector3 position = vehicle.position;
float rotation = vehicle.rotation.Z;
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
int slot = API.getEntitySyncedData(vehicle, "slot");
command.CommandText = "UPDATE `vehicles` SET `spawnx` = " + Convert.ToInt16(position.X) + ", `spawnz` = " + Convert.ToInt16(position.Z) + ", `spawny` = " + Convert.ToInt16(position.Y) + ", `rotation` = " + Convert.ToInt16(rotation) + " WHERE owner = '" + player.name + "' AND slot = " + slot + "";
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
public static void saveTank(NetHandle vehicle)
{
int tank = API.shared.getEntitySyncedData(vehicle,"tank");
string owner = API.shared.getEntityData(vehicle, "besitzer");
int slot = API.shared.getEntitySyncedData(vehicle, "slot");
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
command.CommandText = "UPDATE `vehicles` SET `tank` = " + tank + " WHERE owner = '" + owner + "' AND slot = " + slot;
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
public void respawnVehicle(Client player,Entity vehicle)
{
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
int slot = API.getEntitySyncedData(vehicle, "slot");
command.CommandText = "SELECT * FROM `vehicles` WHERE owner = '" + player.name + "' AND slot = " + slot + "";
//SELECT * FROM `vehicles` WHERE owner = 'Sandy_Cheeks' AND slot = 1
connection.Open();
reader = command.ExecuteReader();
vehicle.delete();
while (reader.Read())
{
string model = reader.GetString("model");
int spawnx = reader.GetInt32("spawnx");
int spawny = reader.GetInt32("spawny");
int spawnz = reader.GetInt32("spawnz");
int rotation = reader.GetInt32("rotation");
string owner = reader.GetString("owner");
int color = reader.GetInt32("color");
int color2 = reader.GetInt32("color2");
int tank = reader.GetInt32("tank");
string numberplate = reader.GetString("numberplate");
// TUNINGS
int spoiler = reader.GetInt32("Spoiler");
int frontbumper = reader.GetInt32("FrontBumper");
int rearbumper = reader.GetInt32("RearBumper");
int sideskirt = reader.GetInt32("SideSkirt");
int frame = reader.GetInt32("Frame");
int grille = reader.GetInt32("Grille");
int hood = reader.GetInt32("Hood");
int fender = reader.GetInt32("Fender");
int rightfender = reader.GetInt32("RightFender");
int roof = reader.GetInt32("Roof");
int engine = reader.GetInt32("Engine");
int brakes = reader.GetInt32("Brakes");
int transmission = reader.GetInt32("Transmission");
int horn = reader.GetInt32("Horn");
int suspension = reader.GetInt32("Suspension");
int armor = reader.GetInt32("Armor");
int turbo = reader.GetInt32("Turbo");
int xenon = reader.GetInt32("Xenon");
int frontwheels = reader.GetInt32("FrontWheels");
int backwheels = reader.GetInt32("BackWheels");
int plateholders = reader.GetInt32("Plateholders");
int trimdesign = reader.GetInt32("TrimDesign");
int ornaments = reader.GetInt32("Ornaments");
int dialdesign = reader.GetInt32("DialDesign");
int steeringwheel = reader.GetInt32("SteeringWheel");
int shiftlever = reader.GetInt32("ShiftLever");
int plaques = reader.GetInt32("Plaques");
int hydraulics = reader.GetInt32("Hydraulics");
int livery = reader.GetInt32("Livery");
int plate = reader.GetInt32("Plate");
int windowtint = reader.GetInt32("WindowTint");
int exhaust = reader.GetInt32("Exhaust");
Vehicle veh = RAPI.MainAPI.createRolePlayVehicleNonARGB(API.vehicleNameToModel(model), new Vector3(spawnx, spawny, spawnz + 0.5), new Vector3(0, 0, rotation), owner);
API.setVehiclePrimaryColor(veh, color);
API.setVehicleSecondaryColor(veh, color2);
API.setEntitySyncedData(veh, "slot", slot);
API.setEntitySyncedData(veh, "tank", tank);
// SETTING TEH MODS
API.setVehicleMod(veh, Spoilers, spoiler);
API.setVehicleMod(veh, intFront_Bumper, frontbumper);
API.setVehicleMod(veh, intRear_Bumper, rearbumper);
API.setVehicleMod(veh, Side_Skirt, sideskirt);
API.setVehicleMod(veh, Frame, frame);
API.setVehicleMod(veh, Grille, grille);
API.setVehicleMod(veh, Hood, hood);
API.setVehicleMod(veh, Fender, fender);
API.setVehicleMod(veh, Right_Fender, rightfender);
API.setVehicleMod(veh, Roof, roof);
API.setVehicleMod(veh, Engine, engine);
API.setVehicleMod(veh, Brakes, brakes);
API.setVehicleMod(veh, Exhaust, exhaust);
API.setVehicleMod(veh, Transmission, transmission);
API.setVehicleMod(veh, Horns, horn);
API.setVehicleMod(veh, Suspension, suspension);
API.setVehicleMod(veh, Armor, armor);
API.setVehicleMod(veh, Turbo, turbo);
API.setVehicleMod(veh, Xenon, xenon);
if (backwheels != 0)
{
API.setVehicleMod(veh, Back_Wheels, backwheels);
}
API.setVehicleMod(veh, Front_Wheels, frontwheels);
API.setVehicleMod(veh, Plate_holders, plateholders);
API.setVehicleMod(veh, Trim_Design, trimdesign);
API.setVehicleMod(veh, Ornaments, ornaments);
API.setVehicleMod(veh, Dial_Design, dialdesign);
API.setVehicleMod(veh, Steering_Wheel, steeringwheel);
API.setVehicleMod(veh, Shift_Lever, shiftlever);
API.setVehicleMod(veh, Plaques, plaques);
API.setVehicleMod(veh, Hydraulics, hydraulics);
API.setVehicleMod(veh, Livery, livery);
API.setVehicleMod(veh, Window_Tint, windowtint);
API.setEntityData(veh,"numberplate",numberplate);
API.setVehicleNumberPlate(veh,Environment.Fahrzeuganmeldestelle.getKennzeichen(veh));
}
}
public static void deleteVehicle(Client player, int slot)
{
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
command.CommandText = "DELETE FROM `vehicles` WHERE `owner` = '" + player.name + "' AND `slot` = " + slot ;
API.shared.consoleOutput("Spieler " + player.name + " hat Fahrzeugslot " + slot + " geloescht!");
//SELECT * FROM `vehicles` WHERE owner = 'Sandy_Cheeks' AND slot = 1
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
public static bool isVehicle(Client player, int slot)
{
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
command.CommandText = "SELECT * FROM `vehicles` WHERE owner = '" + player.name + "' AND slot = " + slot + " LIMIT 1";
connection.Open();
reader = command.ExecuteReader();
while (reader.Read())
{
int slot1 = reader.GetInt32("slot");
if (slot1 == slot)
{
connection.Close();
return true;
}
}
connection.Close();
return false;
}
public void respawnVehicleWithCustomSlot(Client player, int slot)
{
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
command.CommandText = "SELECT * FROM `vehicles` WHERE owner = '" + player.name + "' AND slot = " + slot + " LIMIT 1";
//SELECT * FROM `vehicles` WHERE owner = 'Sandy_Cheeks' AND slot = 1
connection.Open();
reader = command.ExecuteReader();
bool isleer = false;
foreach(NetHandle veh in API.getAllVehicles())
{
if(API.getEntityData(veh, "besitzer") == player.name)
{
if(API.getEntitySyncedData(veh,"slot") == slot)
{
if(API.getVehicleOccupants(veh).Length == 0)
{
API.deleteEntity(veh);
isleer = true;
} else
{
API.sendNotificationToPlayer(player, "Das Fahrzeug ist nicht leer!");
}
}
}
}
if (isleer == true)
{
while (reader.Read())
{
string model = reader.GetString("model");
int spawnx = reader.GetInt32("spawnx");
int spawny = reader.GetInt32("spawny");
int spawnz = reader.GetInt32("spawnz");
int rotation = reader.GetInt32("rotation");
string owner = reader.GetString("owner");
int color = reader.GetInt32("color");
int color2 = reader.GetInt32("color2");
int tank = reader.GetInt32("tank");
string numberplate = reader.GetString("numberplate");
// TUNINGS
int spoiler = reader.GetInt32("Spoiler");
int frontbumper = reader.GetInt32("FrontBumper");
int rearbumper = reader.GetInt32("RearBumper");
int sideskirt = reader.GetInt32("SideSkirt");
int frame = reader.GetInt32("Frame");
int grille = reader.GetInt32("Grille");
int hood = reader.GetInt32("Hood");
int fender = reader.GetInt32("Fender");
int rightfender = reader.GetInt32("RightFender");
int roof = reader.GetInt32("Roof");
int engine = reader.GetInt32("Engine");
int brakes = reader.GetInt32("Brakes");
int transmission = reader.GetInt32("Transmission");
int horn = reader.GetInt32("Horn");
int suspension = reader.GetInt32("Suspension");
int armor = reader.GetInt32("Armor");
int turbo = reader.GetInt32("Turbo");
int xenon = reader.GetInt32("Xenon");
int frontwheels = reader.GetInt32("FrontWheels");
int backwheels = reader.GetInt32("BackWheels");
int plateholders = reader.GetInt32("Plateholders");
int trimdesign = reader.GetInt32("TrimDesign");
int ornaments = reader.GetInt32("Ornaments");
int dialdesign = reader.GetInt32("DialDesign");
int steeringwheel = reader.GetInt32("SteeringWheel");
int shiftlever = reader.GetInt32("ShiftLever");
int plaques = reader.GetInt32("Plaques");
int hydraulics = reader.GetInt32("Hydraulics");
int livery = reader.GetInt32("Livery");
int plate = reader.GetInt32("Plate");
int windowtint = reader.GetInt32("WindowTint");
int exhaust = reader.GetInt32("Exhaust");
Vehicle veh = RAPI.MainAPI.createRolePlayVehicleNonARGB(API.vehicleNameToModel(model), new Vector3(spawnx, spawny, spawnz + 0.5), new Vector3(0, 0, rotation), owner);
API.setVehiclePrimaryColor(veh, color);
API.setVehicleSecondaryColor(veh, color2);
API.setEntitySyncedData(veh, "slot", slot);
API.setEntitySyncedData(veh, "tank", tank);
// SETTING TEH MODS
API.setVehicleMod(veh, Spoilers, spoiler);
API.setVehicleMod(veh, intFront_Bumper, frontbumper);
API.setVehicleMod(veh, intRear_Bumper, rearbumper);
API.setVehicleMod(veh, Side_Skirt, sideskirt);
API.setVehicleMod(veh, Frame, frame);
API.setVehicleMod(veh, Grille, grille);
API.setVehicleMod(veh, Hood, hood);
API.setVehicleMod(veh, Exhaust, exhaust);
API.setVehicleMod(veh, Fender, fender);
API.setVehicleMod(veh, Right_Fender, rightfender);
API.setVehicleMod(veh, Roof, roof);
API.setVehicleMod(veh, Engine, engine);
API.setVehicleMod(veh, Brakes, brakes);
API.setVehicleMod(veh, Transmission, transmission);
API.setVehicleMod(veh, Horns, horn);
API.setVehicleMod(veh, Suspension, suspension);
API.setVehicleMod(veh, Armor, armor);
API.setVehicleMod(veh, Turbo, turbo);
API.setVehicleMod(veh, Xenon, xenon);
if (backwheels != 0)
{
API.setVehicleMod(veh, Back_Wheels, backwheels);
}
API.setVehicleMod(veh, Front_Wheels, frontwheels);
API.setVehicleMod(veh, Plate_holders, plateholders);
API.setVehicleMod(veh, Trim_Design, trimdesign);
API.setVehicleMod(veh, Ornaments, ornaments);
API.setVehicleMod(veh, Dial_Design, dialdesign);
API.setVehicleMod(veh, Steering_Wheel, steeringwheel);
API.setVehicleMod(veh, Shift_Lever, shiftlever);
API.setVehicleMod(veh, Plaques, plaques);
API.setVehicleMod(veh, Hydraulics, hydraulics);
API.setVehicleMod(veh, Livery, livery);
API.setVehicleMod(veh, Window_Tint, windowtint);
API.setEntityData(veh,"numberplate",numberplate);
API.setVehicleNumberPlate(veh,Environment.Fahrzeuganmeldestelle.getKennzeichen(veh));
}
}
}
[Command("respawn")]
public void respawnVehicleWithASlot(Client player, int slot)
{
if (isVehicle(player, slot))
{
if (Environment.MONEY.Money.hasBarMoney(player, 450))
{
respawnVehicleWithCustomSlot(player, slot);
API.sendNotificationToPlayer(player, "Du hast das Fahrzeug respawnt!");
Environment.MONEY.Money.giveBarMoney(player, -450, API);
}
} else
{
API.sendNotificationToPlayer(player, "~r~Fahrzeug existiert nicht!");
}
}
public static int getNextSlot(Client player)
{
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
command.CommandText = "SELECT * FROM vehicles WHERE owner = '" + player.name + "'";
connection.Open();
reader = command.ExecuteReader();
DataTable results = new DataTable();
results.Load(reader);
int slot = 1;
foreach (DataRow dr in results.Rows)
{
slot = slot + 1;
}
connection.Close();
return slot;
}
public static bool isNumberplate(String numberplate)
{
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
command.CommandText = "SELECT * FROM vehicles";
bool state = false;
connection.Open();
reader = command.ExecuteReader();
DataTable results = new DataTable();
results.Load(reader);
foreach (DataRow dr in results.Rows)
{
if(numberplate == Convert.ToString(dr["numberplate"]))
{
state = true;
return true;
}
}
connection.Close();
return state;
}
public static void remapTunings(Client player, Entity vehicle, API api)
{
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
int slot = api.getEntitySyncedData(vehicle, "slot");
command.CommandText = "SELECT * FROM `vehicles` WHERE owner = '" + player.name + "' AND slot = " + slot + "";
connection.Open();
reader = command.ExecuteReader();
Vehicle veh = RAPI.MainAPI.getVehicleFromHandle(api, vehicle);
while (reader.Read())
{
int color = reader.GetInt32("color");
int color2 = reader.GetInt32("color2");
// TUNINGS
int spoiler = reader.GetInt32("Spoiler");
int frontbumper = reader.GetInt32("FrontBumper");
int rearbumper = reader.GetInt32("RearBumper");
int sideskirt = reader.GetInt32("SideSkirt");
int frame = reader.GetInt32("Frame");
int grille = reader.GetInt32("Grille");
int hood = reader.GetInt32("Hood");
int fender = reader.GetInt32("Fender");
int rightfender = reader.GetInt32("RightFender");
int roof = reader.GetInt32("Roof");
int engine = reader.GetInt32("Engine");
int brakes = reader.GetInt32("Brakes");
int transmission = reader.GetInt32("Transmission");
int horn = reader.GetInt32("Horn");
int suspension = reader.GetInt32("Suspension");
int armor = reader.GetInt32("Armor");
int turbo = reader.GetInt32("Turbo");
int xenon = reader.GetInt32("Xenon");
int frontwheels = reader.GetInt32("FrontWheels");
int backwheels = reader.GetInt32("BackWheels");
int plateholders = reader.GetInt32("Plateholders");
int trimdesign = reader.GetInt32("TrimDesign");
int ornaments = reader.GetInt32("Ornaments");
int dialdesign = reader.GetInt32("DialDesign");
int steeringwheel = reader.GetInt32("SteeringWheel");
int shiftlever = reader.GetInt32("ShiftLever");
int plaques = reader.GetInt32("Plaques");
int hydraulics = reader.GetInt32("Hydraulics");
int livery = reader.GetInt32("Livery");
int plate = reader.GetInt32("Plate");
int windowtint = reader.GetInt32("WindowTint");
api.setVehiclePrimaryColor(veh, color);
api.setVehicleSecondaryColor(veh, color2);
// SETTING TEH MODS
api.setVehicleMod(veh, Spoilers, spoiler);
api.setVehicleMod(veh, intFront_Bumper, frontbumper);
api.setVehicleMod(veh, intRear_Bumper, rearbumper);
api.setVehicleMod(veh, Side_Skirt, sideskirt);
api.setVehicleMod(veh, Frame, frame);
api.setVehicleMod(veh, Grille, grille);
api.setVehicleMod(veh, Hood, hood);
api.setVehicleMod(veh, Fender, fender);
api.setVehicleMod(veh, Right_Fender, rightfender);
api.setVehicleMod(veh, Roof, roof);
api.setVehicleMod(veh, Engine, engine);
api.setVehicleMod(veh, Brakes, brakes);
api.setVehicleMod(veh, Transmission, transmission);
api.setVehicleMod(veh, Horns, horn);
api.setVehicleMod(veh, Suspension, suspension);
api.setVehicleMod(veh, Armor, armor);
api.setVehicleMod(veh, Turbo, turbo);
api.setVehicleMod(veh, Xenon, xenon);
if (backwheels != 0)
{
api.setVehicleMod(veh, Back_Wheels, backwheels);
}
api.setVehicleMod(veh, Front_Wheels, frontwheels);
api.setVehicleMod(veh, Plate_holders, plateholders);
api.setVehicleMod(veh, Trim_Design, trimdesign);
api.setVehicleMod(veh, Ornaments, ornaments);
api.setVehicleMod(veh, Dial_Design, dialdesign);
api.setVehicleMod(veh, Steering_Wheel, steeringwheel);
api.setVehicleMod(veh, Shift_Lever, shiftlever);
api.setVehicleMod(veh, Plaques, plaques);
api.setVehicleMod(veh, Hydraulics, hydraulics);
api.setVehicleMod(veh, Livery, livery);
api.setVehicleMod(veh, Window_Tint, windowtint);
api.setVehicleNumberPlate(veh,Environment.Fahrzeuganmeldestelle.getKennzeichen(veh));
}
connection.Close();
}
public static void insertDataBaseVehicle(string model, Client owner, int slot, int x, int y, int z, int rotation, string numberplate, int color)
{
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
command.CommandText = "INSERT INTO `vehicles`(`model`,`owner`,`slot`,`spawnx`,`spawny`,`spawnz`,`rotation`,`numberplate`,`color`,`color2`) VALUES ('" + model + "','" + owner.name + "'," + slot + "," + x + "," + y + "," + z + "," + rotation + ",'" + numberplate + "'," + color + "," + color + ")";
// "INSERT INTO `userdata`(`socialclub`, `password`, `nickname`, `skinid`,`moneyhand`, `money`, `fraktion`, `fraktion`) VALUES (@socialclub,@password,@nickname,@skinid,@moneyhand,@money,1,1,0,@spawnx,@spawny,@spawnz,@handynummer,0,0,0,0,0)";
connection.Open();
command.ExecuteNonQueryAsync();
Vehicle veh = RAPI.MainAPI.createRolePlayVehicleNonARGB(API.shared.vehicleNameToModel(model), new Vector3(x, y, z), new Vector3(0, 0, rotation), owner.name);
API.shared.setPlayerIntoVehicle(owner, veh, -1);
API.shared.sendChatMessageToPlayer(owner, "~r~Parke bitte dein Fahrzeug um! Sonst kann es von einem Administrator gelöscht werden! ");
API.shared.sendChatMessageToPlayer(owner, "~r~Fahrzeug ist nochnicht angemeldet, es muss umgehend angemeldet werden! ");
API.shared.setEntitySyncedData(veh, "slot", slot);
API.shared.setVehiclePrimaryColor(veh, color);
API.shared.setVehicleSecondaryColor(veh, color);
//API.shared.setEntityData(veh, "id", id);
API.shared.delay(2000, true, () =>
{
connection.Close();
});
}
public static String getTuningDatabaseName(int tuningslot)
{
if (tuningslot == 0)
{
return "Spoiler";
}
else if (tuningslot == 1)
{
return "FrontBumper";
}
else if (tuningslot == 2)
{
return "RearBumper";
}
else if (tuningslot == 3)
{
return "SideSkirt";
}
else if (tuningslot == 4)
{
return "Exhaust";
}
else if (tuningslot == 5)
{
return "Frame";
}
else if (tuningslot == 6)
{
return "Grille";
}
else if (tuningslot == 7)
{
return "Hood";
}
else if (tuningslot == 8)
{
return "Fender";
}
else if (tuningslot == 9)
{
return "RightFender";
}
else if (tuningslot == 10)
{
return "Roof";
}
else if (tuningslot == 11)
{
return "Engine";
}
else if (tuningslot == 12)
{
return "Brakes";
}
else if (tuningslot == 13)
{
return "Transmission";
}
else if (tuningslot == 14)
{
return "Horn";
}
else if (tuningslot == 15)
{
return "Suspension";
}
else if (tuningslot == 16)
{
return "Armor";
}
else if (tuningslot == 18)
{
return "Turbo";
}
else if (tuningslot == 22)
{
return "Xenon";
}
else if (tuningslot == 23)
{
return "FrontWheels";
}
else if (tuningslot == 24)
{
return "BackWheels";
}
else if (tuningslot == 25)
{
return "Plateholders";
}
else if (tuningslot == 27)
{
return "TrimDesign";
}
else if (tuningslot == 28)
{
return "Ornaments";
}
else if (tuningslot == 30)
{
return "DialDesign";
}
else if (tuningslot == 33)
{
return "SteeringWheel";
}
else if (tuningslot == 34)
{
return "ShiftLever";
}
else if (tuningslot == 35)
{
return "Plaques";
}
else if (tuningslot == 38)
{
return "Hydraulics";
}
else if (tuningslot == 48)
{
return "Livery";
}
else if (tuningslot == 62)
{
return "Plate";
}
else if (tuningslot == 69)
{
return "WindowTint";
}
else
{
API.shared.consoleOutput("ERROR OCCURED! Func: getTuningDatabaseName(int tuningslot)");
return null;
}
}
public static void setDatabaseTuning(Client player, Vehicle veh, int tuningslot, int value)
{
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
command.CommandText = "UPDATE vehicles SET `" + getTuningDatabaseName(tuningslot) + "` = " + value + " WHERE `owner` = @username AND `slot` = @slot;";
command.Parameters.AddWithValue("@username", player.name);
command.Parameters.AddWithValue("@slot", API.shared.getEntitySyncedData(veh, "slot"));
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
public static void setDatabaseVar(Client player, Vehicle veh, string row, int value)
{
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
command.CommandText = "UPDATE vehicles SET `" + row + "` = " + value + " WHERE `owner` = @username AND `slot` = @slot;";
command.Parameters.AddWithValue("@username", player.name);
command.Parameters.AddWithValue("@slot", API.shared.getEntitySyncedData(veh, "slot"));
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
public static void setDatabaseString(Client player, Vehicle veh, string row, string value)
{
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
command.CommandText = "UPDATE vehicles SET `" + row + "` = '" + value + "' WHERE `owner` = @username AND `slot` = @slot;";
command.Parameters.AddWithValue("@username", player.name);
command.Parameters.AddWithValue("@slot", API.shared.getEntitySyncedData(veh, "slot"));
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
public static String getDataBaseString(Vehicle veh, string row)
{
connection = new MySqlConnection(myConnectionString);
command = connection.CreateCommand();
command.CommandText = "SELECT * FROM vehicles WHERE `owner` = '" + API.shared.getEntityData(veh,"besitzer") + "' AND `slot` = " + API.shared.getEntitySyncedData(veh,"slot") + "";
connection.Open();
reader = command.ExecuteReader();
string result = "";
while (reader.Read())
{
result = reader.GetString(row);
}
connection.Close();
return result;
}
}
}