Guten Abend sehr geehrte Damen & Herren,
ich bin derzeit daran, mir das Programmieren in C# und JS für den RageMP Clienten beizubringen.
Nun habe ich versucht, ein eigenes Haus System zu erstellen. Hierfür habe ich in der Datenbank eine neue Tabelle angelegt & mir einen InGame Befehl gebaut, um Häuser zu erstellen.
Funktioniert derzeit auch, Marker wird erstellt, TextLabel wird erstellt, wird alles angezeigt, wenn man InGame geht.
Aber in der Theorie ist mir aufgefallen, dass dem Haus ja irgendwie eine eindeutige Klasse zuweisen muss, damit ich Sie differenzieren kann.
Kann ich mir eine "IHaus" Klasse bauen, inder ich den Marker etc irgendwie zuweisen kann oder so?
Da stelle ich mir dann folgende Fragen:
1. Wie gehe ich da am besten vor?
2. Wie mache ich das Haus mit einem Interior betretbar?
Was ich bereits habe:
HausData.cs Klass
using System;
using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using MySql.Data.MySqlClient;
namespace RageMPServer.Database
{
class HausData : Script
{
public static void CreateHaus(Player player, string hausName, int hausPreis)
{
using (MySqlConnection connection = new MySqlConnection(Settings.Server_Settings.GetConnectionString()))
{
try
{
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.CommandText = "INSERT INTO houses (preis,posx,posy,posz,name) VALUES (@preis, @posx, @posy, @posz, @name)";
command.Parameters.AddWithValue("@preis", hausPreis);
command.Parameters.AddWithValue("@posx", player.Position.X);
command.Parameters.AddWithValue("@posy", player.Position.Y);
command.Parameters.AddWithValue("@posz", player.Position.Z);
command.Parameters.AddWithValue("@name", hausName);
NAPI.Marker.CreateMarker(30, player.Position, new Vector3(), new Vector3(), 1f, new Color(255,255,255));
NAPI.TextLabel.CreateTextLabel($"~w~Haus: ~b~{hausName}~w~\nBesitzer: ~b~Niemand~w~\nPreis: ~b~{hausPreis}", player.Position, 4f, 4f, 4, new Color(0,0,125));
command.ExecuteNonQuery();
connection.Close();
}
catch(Exception e)
{
NAPI.Util.ConsoleOutput($"[SERVER-ERROR] CreateHaus: {e.Message}");
NAPI.Util.ConsoleOutput($"[SERVER-ERROR] CreateHaus: {e.StackTrace}");
}
}
}
public static void LoadHaus()
{
using (MySqlConnection connection = new MySqlConnection(Settings.Server_Settings.GetConnectionString()))
{
try
{
int countedRows = 0;
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT * FROM houses";
using (MySqlDataReader reader = command.ExecuteReader())
{
if(!reader.HasRows)
{
NAPI.Util.ConsoleOutput($"[SERVER] LoadHaus hat keine Häuser in der Datenbank gefunden.");
return;
}
while (reader.Read())
{
countedRows++;
NAPI.Marker.CreateMarker(30, new Vector3(reader.GetFloat("posx"), reader.GetFloat("posy"), reader.GetFloat("posz")), new Vector3(), new Vector3(), 1f, new Color(255, 255, 255));
NAPI.TextLabel.CreateTextLabel($"~w~Haus: ~b~{reader.GetString("name")}~w~\nBesitzer: ~b~{reader.GetString("besitzer")}~w~\nPreis: ~b~{reader.GetString("preis")}", new Vector3(reader.GetFloat("posx"), reader.GetFloat("posy"), reader.GetFloat("posz")), 4f, 4f, 4, new Color(0, 0, 125));
}
NAPI.Util.ConsoleOutput($"[SERVER] Es wurden {countedRows} Häuser geladen.");
}
}
catch(Exception e)
{
NAPI.Util.ConsoleOutput($"[SERVER-ERROR] LoadHaus: {e.Message}");
NAPI.Util.ConsoleOutput($"[SERVER-ERROR] LoadHaus: {e.StackTrace}");
}
}
}
}
}
Alles anzeigen
Befehl zum Haus erstellen:
[Command("createhaus", "Nutze: /createhaus [Hausname] [Preis]")]
public void CMD_CreateHaus(Player player, string hausName, int hausPreis)
{
if (!IPlayer.IsPlayerLoggedIn(player)) return;
IPlayer iplayer = player.GetData<IPlayer>("PlayerData");
if (!iplayer.HasAdminLevel((int)AdminRanks.Admin)) return;
//CreateHaus Struktur
HausData.CreateHaus(player, hausName, hausPreis);
player.SendNotification($"Das Haus ~g~{hausName}~w~ wurde erfolgreich erstellt. Preis: ~g~${hausPreis}");
}
Alles anzeigen
Häuser laden: