366 lines
No EOL
17 KiB
C#
366 lines
No EOL
17 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using GrandTheftMultiplayer.Server;
|
|
using GrandTheftMultiplayer.Shared;
|
|
using GrandTheftMultiplayer.Server.API;
|
|
using GrandTheftMultiplayer.Shared.Math;
|
|
using GrandTheftMultiplayer.Server.Elements;
|
|
using GrandTheftMultiplayer.Server.Constant;
|
|
using GrandTheftMultiplayer.Server.Managers;
|
|
using MySql.Data.MySqlClient;
|
|
using System.Data;
|
|
|
|
|
|
namespace Roleplay.Environment
|
|
{
|
|
class Weedplantage : 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 Weedplantage()
|
|
{
|
|
loadweed();
|
|
weedtimer();
|
|
API.onEntityEnterColShape += onCol;
|
|
API.onEntityExitColShape += onColEx;
|
|
API.onClientEventTrigger += onCallBack;
|
|
createWeedShop();
|
|
}
|
|
|
|
public int weedsamenprice = new Random().Next(1000,3000);
|
|
public int weedsellprice = new Random().Next(500,1000);
|
|
public const float wachstumsfaktor = 0.020F;
|
|
public void createWeedShop()
|
|
{
|
|
RAPI.Marker.createMarker(0,new Vector3(2482.446,3722.299,43.92),1,255,255,255,"weedshop",0,150,"",0);
|
|
API.createPed(PedHash.OmegaCutscene,new Vector3(-2078,2602.221,2.032635),20,0);
|
|
RAPI.Marker.createMarker(0,new Vector3(-2078.19,2602.665,1),1,0,155,0,"weedkauf",0,185,"",0);
|
|
}
|
|
|
|
public void weedtimer()
|
|
{
|
|
API.delay(60000*2,false,() => { // jede 2 Minuten
|
|
List<NetHandle> objects = API.getAllObjects();
|
|
foreach(NetHandle nh in objects){
|
|
if(nh != null){
|
|
GrandTheftMultiplayer.Server.Elements.Object obj = API.getEntityFromHandle<GrandTheftMultiplayer.Server.Elements.Object>(nh);
|
|
if(obj != null && API.hasEntityData(obj,"weedpercentage") == true){
|
|
int current = API.getEntityData(obj,"weedpercentage");
|
|
if(current != 100){
|
|
int percentage = API.getEntityData(obj,"weedpercentage") + 1;
|
|
int weedid = API.getEntityData(obj,"ID");
|
|
API.setEntityData(obj,"weedpercentage",percentage);
|
|
float x = obj.getData("x");
|
|
float y = obj.getData("y");
|
|
float z = obj.getData("z");
|
|
API.moveEntityPosition(obj,new Vector3(x,y,z).Add(new Vector3(0,0,(float)(percentage * wachstumsfaktor))),1000);
|
|
TextLabel tx = obj.getData("textlabel");
|
|
tx.text = "Fortschritt: ~y~" + percentage + "%";
|
|
updateWeed(weedid,percentage);
|
|
} else { // ~n~ ~y~/ernten ~w~zum abernten!
|
|
int percentage = API.getEntityData(obj,"weedpercentage");
|
|
float x = obj.getData("x");
|
|
float y = obj.getData("y");
|
|
float z = obj.getData("z");
|
|
TextLabel tx = obj.getData("textlabel");
|
|
API.moveEntityPosition(obj,new Vector3(x,y,z).Add(new Vector3(0,0,(float)(percentage * wachstumsfaktor))),1000);
|
|
tx.text = "Fortschritt: ~y~" + percentage + "% ~n~ ~y~/ernten ~w~zum abernten!";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
public static void updateWeed(int id, int percentage)
|
|
{
|
|
connection = new MySqlConnection(myConnectionString);
|
|
command = connection.CreateCommand();
|
|
command.CommandText = "UPDATE `weed` SET weedpercentage = " + percentage + " WHERE ID = " + id;
|
|
connection.Open();
|
|
command.ExecuteNonQuery();
|
|
connection.Close();
|
|
}
|
|
|
|
public const int CALLBACK = 894561852;
|
|
public void onCol(ColShape col, NetHandle nh )
|
|
{
|
|
if(col != null && nh != null){
|
|
if(col.hasData("weed") == true){
|
|
GrandTheftMultiplayer.Server.Elements.Object weed = col.getData("weed");
|
|
|
|
Client player = API.getPlayerFromHandle(nh);
|
|
if(weed != null && player != null){
|
|
player.setData("weed",weed);
|
|
if(Fraktionen.Fraktionsmanager.getFraktion(player) == 1){
|
|
API.sendChatMessageToPlayer(player,"Du musst das Weed verbrennen da du Polizist bist! /verbrennen");
|
|
}
|
|
}
|
|
} else if(col.hasData("weedshop") == true && col.getData("weedshop") == true){
|
|
Client player = API.getPlayerFromHandle(nh);
|
|
object[] argumentList = new object[14];
|
|
argumentList[0] = CALLBACK;
|
|
argumentList[1] = "Weedshop";
|
|
argumentList[2] = "Produkte:";
|
|
argumentList[3] = false;
|
|
int itemlength = 2;
|
|
argumentList[4] = itemlength;
|
|
argumentList[5] = "Schliessen";
|
|
argumentList[6] = "Samen kaufen";
|
|
argumentList[7] = "";
|
|
argumentList[8] = "Verkaufspreis: ~b~" + weedsamenprice;
|
|
API.triggerClientEvent(player, "menu_handler_create_menu", argumentList);
|
|
} else if(col.hasData("weedkauf") == true && col.getData("weedkauf") == true){
|
|
Client player = API.getPlayerFromHandle(nh);
|
|
object[] argumentList = new object[14];
|
|
argumentList[0] = CALLBACK + 98;
|
|
argumentList[1] = "Weedverkauf";
|
|
argumentList[2] = "Produkte:";
|
|
argumentList[3] = false;
|
|
int itemlength = 2;
|
|
argumentList[4] = itemlength;
|
|
argumentList[5] = "Schliessen";
|
|
argumentList[6] = "1 Joint verkaufen";
|
|
argumentList[7] = "";
|
|
argumentList[8] = "Verkaufspreis: ~b~$" + weedsellprice;
|
|
API.triggerClientEvent(player, "menu_handler_create_menu3", argumentList);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void onCallBack(Client sender, string eventName, object[] args)
|
|
{
|
|
if(eventName == "menu_handler_select_item"){
|
|
int callback = (int) args[0];
|
|
int index = (int) args[1];
|
|
if(callback == CALLBACK){
|
|
if(index == 1){
|
|
if(Environment.MONEY.Money.hasBarMoney(sender,weedsamenprice) == true){
|
|
Environment.MONEY.Money.giveBarMoney(sender,-weedsamenprice,API);
|
|
Items.InventoryHolder invh = API.getEntityData(sender,"InventoryHolder");
|
|
invh.AddItemToInventory(Items.ItemByID(Items.ITEM_ID_WEED_SAMEN));
|
|
} else {
|
|
API.sendNotificationToPlayer(sender,"Du verschwendest meine Zeit! Verschwinde!!!");
|
|
}
|
|
}
|
|
} else if(callback == CALLBACK + 98){
|
|
if(index == 1){
|
|
Items.InventoryHolder invh = API.getEntityData(sender,"InventoryHolder");
|
|
if(invh.hasItemInInventory(Items.ItemByID(Items.ITEM_ID_WEED)) == true){
|
|
API.playPlayerScenario(sender,"WORLD_HUMAN_DRUG_DEALER");
|
|
API.sleep(1000*5);
|
|
invh.RemoveItemFromInventory(Items.ItemByID(Items.ITEM_ID_WEED));
|
|
API.stopPlayerAnimation(sender);
|
|
Environment.MONEY.Money.giveBarMoney(sender,weedsellprice,API,"");
|
|
} else {
|
|
API.sendNotificationToPlayer(sender,"Du hast keinen Joint in deinem Inventar!");
|
|
}
|
|
} else if(index == 0){
|
|
API.triggerClientEvent(sender,"menu_handler_close_menu");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public void onColEx(ColShape col, NetHandle nh )
|
|
{
|
|
if(col != null && nh != null){
|
|
if(col.hasData("weed")){
|
|
Client player = API.getPlayerFromHandle(nh);
|
|
if(player != null){
|
|
API.resetEntityData(player,"weed");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
[Command("ernten")]
|
|
public void ernten(Client player)
|
|
{
|
|
if(player.hasData("weed") == true){
|
|
GrandTheftMultiplayer.Server.Elements.Object weed = player.getData("weed");
|
|
int percentage = API.getEntityData(weed,"weedpercentage");
|
|
if(percentage == 100){
|
|
API.shared.playPlayerScenario(player, "WORLD_HUMAN_GARDENER_PLANT");
|
|
API.sleep(1000*10);
|
|
API.shared.stopPlayerAnimation(player);
|
|
int id = weed.getData("ID");
|
|
string owner = weed.getData("owner");
|
|
ColShape col = weed.getData("collision");
|
|
API.deleteColShape(col);
|
|
TextLabel tx = weed.getData("textlabel");
|
|
tx.delete();
|
|
removeWeed(owner,id);
|
|
weed.delete();
|
|
|
|
Items.InventoryHolder ivh = API.getEntityData(player,"InventoryHolder");
|
|
ivh.AddItemToInventory(Items.ItemByID(Items.ITEM_ID_WEED));
|
|
ivh.AddItemToInventory(Items.ItemByID(Items.ITEM_ID_WEED));
|
|
ivh.AddItemToInventory(Items.ItemByID(Items.ITEM_ID_WEED));
|
|
} else {
|
|
API.sendNotificationToPlayer(player,"Die Hanfplanze ist noch nicht Fertig!");
|
|
}
|
|
} else {
|
|
API.sendNotificationToPlayer(player,"Es ist keine Hanfplanze in der nähe!");
|
|
}
|
|
}
|
|
|
|
[Command("verbrennen")]
|
|
public void verbrennen(Client player)
|
|
{
|
|
if(player.hasData("weed") == true){
|
|
GrandTheftMultiplayer.Server.Elements.Object weed = player.getData("weed");
|
|
int percentage = API.getEntityData(weed,"weedpercentage");
|
|
int id = weed.getData("ID");
|
|
ColShape col = weed.getData("collision");
|
|
API.deleteColShape(col);
|
|
TextLabel tx = weed.getData("textlabel");
|
|
String owner = weed.getData("owner");
|
|
tx.delete();
|
|
weed.delete();
|
|
|
|
removeWeed(owner,id);
|
|
API.sleep(1000*3);
|
|
API.sendNativeToAllPlayers(Hash.START_SCRIPT_FIRE,weed.position.X,weed.position.Y,weed.position.Z,25,false); // not working somehow
|
|
API.sendNativeToAllPlayers(Hash.START_ENTITY_FIRE,weed); // not working somehow
|
|
}
|
|
}
|
|
|
|
[Command("resolveweed")]
|
|
public void resolveweed(Client player){
|
|
if(Admin.admin_cmds.isAdmin(player,3) == true){
|
|
if(player.hasData("weed") == true){
|
|
GrandTheftMultiplayer.Server.Elements.Object weed = player.getData("weed");
|
|
API.sendNotificationToPlayer(player,"Weed Planter: " + weed.getData("owner"));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public static void removeWeed(String player, int id)
|
|
{
|
|
connection = new MySqlConnection(myConnectionString);
|
|
command = connection.CreateCommand();
|
|
command.CommandText = "DELETE FROM `weed` WHERE owner = '" + player + "' AND ID = " + id;
|
|
connection.Open();
|
|
command.ExecuteNonQuery();
|
|
connection.Close();
|
|
}
|
|
|
|
public static int getWeedAnzahl(String playername)
|
|
{
|
|
connection = new MySqlConnection(myConnectionString);
|
|
command = connection.CreateCommand();
|
|
command.CommandText = "SELECT * FROM `weed` WHERE owner = '" + playername + "'";
|
|
connection.Open();
|
|
reader = command.ExecuteReader();
|
|
DataTable results = new DataTable();
|
|
results.Load(reader);
|
|
int i = 0;
|
|
foreach (DataRow dr in results.Rows)
|
|
{
|
|
i++;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
|
|
public static void insertWeed(Client player)
|
|
{
|
|
connection = new MySqlConnection(myConnectionString);
|
|
command = connection.CreateCommand();
|
|
Vector3 weedpos = player.position.Subtract(new Vector3(0,0,3));
|
|
command.CommandText = "INSERT INTO `weed`(`owner`,`x`,`y`,`z`,`weedpercentage`) VALUES ('" + player.name + "', " + Convert.ToInt32(weedpos.X) + ", " + Convert.ToInt32(weedpos.Y) + ", " + Convert.ToInt32(weedpos.Z) + ", " + 0 + ")";
|
|
connection.Open();
|
|
command.ExecuteNonQuery();
|
|
connection.Close();
|
|
command.CommandText = "SELECT * FROM `weed` WHERE owner = '" + player.name + "'";
|
|
connection.Open();
|
|
reader = command.ExecuteReader();
|
|
int id = 0;
|
|
while(reader.Read())
|
|
{
|
|
id = reader.GetInt32("ID");
|
|
}
|
|
connection.Close();
|
|
API.shared.consoleOutput("Inserted Weed in Database!");
|
|
GrandTheftMultiplayer.Server.Elements.Object weed = API.shared.createObject(452618762, weedpos,new Vector3(0,0,0),0);
|
|
API.shared.setEntityData(weed,"weedpercentage",0);
|
|
API.shared.setEntityData(weed,"owner",player.name);
|
|
API.shared.setEntityData(weed,"ID",id);
|
|
API.shared.setEntityData(weed,"x",weedpos.X);
|
|
API.shared.setEntityData(weed,"y",weedpos.Y);
|
|
API.shared.setEntityData(weed,"z",weedpos.Z);
|
|
ColShape col = API.shared.createCylinderColShape(weedpos,4,10);
|
|
TextLabel tx = API.shared.createTextLabel("Fortschritt: ~y~" + 0 + "% ", weedpos.Add(new Vector3(0,0,3)),10,1,true,0);
|
|
API.shared.setEntityData(weed,"textlabel",tx);
|
|
API.shared.setEntityData(weed,"collision",col);
|
|
col.setData("weed",weed);
|
|
RAPI.Marker.textes.Add(tx);
|
|
}
|
|
|
|
public void loadweed()
|
|
{
|
|
connection = new MySqlConnection(myConnectionString);
|
|
command = connection.CreateCommand();
|
|
command.CommandText = "SELECT * FROM weed";
|
|
|
|
connection.Open();
|
|
reader = command.ExecuteReader();
|
|
DataTable results = new DataTable();
|
|
results.Load(reader);
|
|
|
|
foreach (DataRow dr in results.Rows)
|
|
{
|
|
int id = Convert.ToInt32(dr["ID"]);
|
|
string owner = Convert.ToString(dr["owner"]);
|
|
int x = Convert.ToInt32(dr["x"]);
|
|
int y = Convert.ToInt32(dr["y"]);
|
|
int z = Convert.ToInt32(dr["z"]);
|
|
int weedpercentage = Convert.ToInt32(dr["weedpercentage"]);
|
|
GrandTheftMultiplayer.Server.Elements.Object weed = API.createObject(452618762, new Vector3(x,y,z),new Vector3(0,0,0),0);
|
|
API.setEntityData(weed,"ID",id);
|
|
API.setEntityData(weed,"owner",owner);
|
|
API.setEntityData(weed,"x",x);
|
|
API.setEntityData(weed,"y",x);
|
|
API.setEntityData(weed,"z",x);
|
|
API.setEntityData(weed,"weedpercentage",weedpercentage);
|
|
weed.position = new Vector3(x,y,z).Add(new Vector3(0,0,(weedpercentage * wachstumsfaktor)));
|
|
ColShape col = API.createCylinderColShape(new Vector3(x,y,z),4,10);
|
|
TextLabel tx = API.createTextLabel("Fortschritt: ~y~" + weedpercentage + "%", weed.position.Add(new Vector3(0,0,3)),10,1,true,0);
|
|
API.shared.setEntityData(weed,"textlabel",tx);
|
|
API.shared.setEntityData(weed,"collision",col);
|
|
col.setData("weed",weed);
|
|
RAPI.Marker.textes.Add(tx);
|
|
}
|
|
connection.Close();
|
|
}
|
|
|
|
public static void plantWeed(Client owner)
|
|
{
|
|
if(getWeedAnzahl(owner.name) < 5){
|
|
Client player = owner;
|
|
API.shared.playPlayerScenario(player, "WORLD_HUMAN_GARDENER_PLANT");
|
|
API.shared.sleep(1000*10);
|
|
API.shared.stopPlayerAnimation(owner);
|
|
insertWeed(player);
|
|
} else {
|
|
API.shared.sendNotificationToPlayer(owner,"Du kannst nicht mehr als 5 Pflanzen pflanzen.");
|
|
Items.InventoryHolder invh = API.shared.getEntityData(owner,"InventoryHolder");
|
|
invh.AddItemToInventory(Items.ItemByID(Items.ITEM_ID_WEED_SAMEN)); // ADDING THE ITEM BACK TO THE INVENTORY
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
} |