Zitat
- case 0:
- {//Accountdaten: Allgemein
- {
Du öffnest auch 2 Klammern hintereinander. Siehe Zeile 9 und 10 in deinem Code.
Zitat
- case 0:
- {//Accountdaten: Allgemein
- {
Du öffnest auch 2 Klammern hintereinander. Siehe Zeile 9 und 10 in deinem Code.
Sorry natürlich auch möglich ich hab mir den Code nicht so genau angsehen
Dann hast du irgendwo ne Klammer zu viel zu gemacht. Zumindest laut der Fehlermeldung steht die Zeile "case 1" nicht mehr in der switch Schleife.
Auf welche Zeile(n) bezieht sich denn der Fehler?
uuuuunnnd...FEIERABEND
Gute Arbeiter können dann auch mal Montag Mittag schon schluss machen
Hat aber etwas länger als 3 Stunden gedauert
Hi.
Ich hab da gerade ein Problem beim einzahlen von Steuern.
public class StaatControl : Script
{
public StaatControl()
{
}
public static void PaySteuern(int Amount)
{
string sql = "SELECT staatskasse FROM allgemein WHERE id='1'";
DataTable rst = API.shared.exported.database.executeQueryWithResult(sql);
int Kasse = (int)rst.Rows[0]["staatskasse"];
Kasse += Amount;
sql = "UPDATE allgemein SET staatskasse='" + Kasse + "' WHERE id='1'";
API.shared.exported.database.executeQuery(sql);
API.shared.consoleOutput("Es wurden $" + Amount + " Steuern gezahlt.");
}
}
Alles anzeigen
Jedes mal wenn "PaySteuern" aufgerufen wird bekomme ich folgenden Fehler:
ZitatSystem.InvalidCastException: Specified cast is not valid.
at LRP.StaatControl.PaySteuern (System.Int32 Amount) [0x0010f] in <86ddced5389d470b80088194682fbbb6>:0
Edit: Sorry Leute hab den Fehler gefunden. Hatte das Feld in der Datenbank auf Float gestellt und immer nur den (int) oder (double) cast probiert. Ziemlich bescheuert wenn man bedenkt das ich das Problem seit gestern irgendwann habe xD
Ich weiß leider nicht die Lösung für dein Problem aber ich kann dir sagen das es ziemlich sicher nicht an dem "conn.Open();" liegt. Ich habe das gleiche Tutorial verwendet und bei mir funktioniert die Verbindung einwandfrei.
Also bei mir sieht die JavaScript datei jetzt so aus:
var res = API.getScreenResolution();
cefBank = API.createCefBrowser(res.Width, res.Height);
API.waitUntilCefBrowserInit(cefBank);
API.setCefBrowserPosition(cefBank, 0, 0);
API.loadPageCefBrowser(cefBank, "Client/html/bank_main.html");
API.showCursor(true);
API.setCanOpenChat(false);
API.sleep(600);
var kto = API.getEntitySyncedData(API.getLocalPlayer(), "BankMoney");
cefBank.call("setKtoStand", kto);
das "API.sleep" hab ich hinzugefügt nachdem der erste versuch nicht geklappt hat.
Die HTML Datei beinhaltet folgendes:
<script>
function setKtoStand(kto)
{
document.getElementById("ktostand").innerHTML = kto;
}
</script>
<!-- .... -->
<h3>Bank</h3>
<br />
Kontostand: $<i id='ktostand'>Ladefehler!</i>
<!-- .... -->
Alles anzeigen
Ich bekomm leider immer noch nur "Ladefehler" angezeigt.
Du kannst auch einen CylinderColShape erzeugen und dann bekommst du eine eigene Funktion wenn ein Spieler den Betritt.
Siehe: https://wiki.gtanet.work/index…le=createCylinderColShape
Oder wenn du einen Command nur in nem bestimmten umkreis verwenden möchtest kannst du das zb so machen:
Vector3 Position = new Vector3(); // Die Position an der der Spieler stehen muss
bool is_in_position = false;
foreach(var client in API.getPlayersInRadiusOfPosition(5f, Position))
{
if(client != player) continue;
is_in_position = true;
break;
}
if(!is_in_position)
{
API.sendChatMessageToPlayer(player, "~r~Du bist nicht an der Position.");
return;
}
// Spieler ist an der Position
Alles anzeigen
Du könntest aber auch die Distanz vom Spieler zur Position abfragen und je nachdem wie Hoch die dann ist den Befehl erlauben oder nicht:
Also ich hab´s jetzt mit dem Dictionary gemacht.
Hauptsächlich aus dem Grund weil ich dann folgendes machen kann:
@TutNichts Wieso ich speziell ne Liste gemacht hab oder warum ich das überhaupt irgndwo speichern möchte?
Der ursprüngliche Hauptgrund für die Liste war das ich dann die TextLabels und Marker gut löschen kann wenn das Haus aktualisiert wird. Des weiteren habe ich angenommen das es eventuell etwas schneller geht als wenn der jedes mal wenn ich irgendwas mit dem Haus mache das alles von der Datenbank abfragen muss.
Also ca so:
Wie spreche ich dann beim hinzufügen von einem neuen Haus die Objekte in der "House" Klasse an?
Aktuell funktionierts ja so:
// Edit: Ok habs
Danke das Dictionary ist wirklich praktischer
Hey
Ich hab eine Liste gemacht in der beim Serverstart alle Häuser geladen werden.
Die Klasse "House" sieht wie folgt aus:
public class House
{
public int dbid;
public string Name;
public int Besitzer;
public bool Rentable;
public int Rent;
public int Rent_People;
public TextLabel label;
public Marker marker;
public Vector3 Position;
public int Preis;
}
Alles anzeigen
Wenn ich nun das Haus update und es daher neu Laden möchte hab ich momentan folgendes gemacht um das "alte" Haus zu löschen:
foreach (var hous in Haeuser)
{
if (hous.dbid == id)
{
API.shared.deleteEntity(hous.label);
API.shared.deleteEntity(hous.marker);
Haeuser.Remove(hous);
}
}
Gibt es nun irgend eine "einfachere" Möglichkeit das Item aus der Liste zu bekommen ohne das ich mit foreach alle Häuser durchlaufen muss? Das ich vielleicht speziell nach der "dbid" suchen kann oderso?
Herzlichen Dank
Funktioniert denn das "resourceCall" auch so wie ich es hier verwende nämlich vom Client (.js) zum Browser (.html)? Bzw wie müsste ich das sonst machen?
Hi
Ich möchte eine Spielervariable in Javascript abrufen.
Ich hab da jetzt folgendes stehen:
API.onServerEventTrigger.connect(function (name, args) {
if(name == "show_bank") {
// Cef anzeigen...
var kto = API.getEntitySyncedData("BankMoney");
resourceCall("setKtoStand", kto);
}
});
mir Fehlt jetzt nur bei "getEntitySyncedData" der Spieler.
Hm Okay, wenn man um diese Methode nich rum kommt habe das hier geschrieben:
Code[Command("adminabfrage")] public void onlyadmin(Client sender) { string selectadmin = "SELECT * FROM admin WHERE name = '" + sender.name + "'"; DataTable result = API.exported.database.executeQueryWithResult(selectadmin); if (result.Rows.Count != 0) { API.sendChatMessageToPlayer(sender, result.Rows[0]["admin"].ToString()); } }
Normalerweise sollte er bei dem Befehl das Admin level ausgeben kommen allerdings errors, was hab ich falsch gemacht?
Code[14:28:21] Starting auslesen [14:28:21] Error/warning while compiling script! [14:28:21] Error (CS1518) at 23: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet. [14:28:21] Error (CS1001) at 30: Bezeichner erwartet [14:28:21] Error (CS1001) at 30: Bezeichner erwartet [14:28:21] Error (CS1022) at 31: Typ- oder Namespacedefinition oder Dateiende erwartet. [14:28:22] Error (CS1514) at 11: { erwartet. [14:28:22] Error (CS1513) at 11: } erwartet. [14:28:22] ERROR STARTING RESOURCE auslesen
Du musst "SELECT admin FROM spieler ...." oder heißt deine Tabelle "admin" ?
Und was bringt dir das, wenn es heftige Bugs gibt, die nicht durch Updates behoben werden?
Also gibt es heftige Bugs die nicht behoben werden?
Mir persönlich ist noch keiner untergekommen weder im Client noch in der Entwicklung.
er programmiert aber für GTA:Network
Ich weiss nicht genau, aber versuch doch einfach nochmal das h zu verwenden. Ein Versuch ist es wert.
Werd ich dann mal probieren
Bei SA-MP war es so, dass bei einem weiteren ~h~ die Farbe noch heller wird.
Naja noch viel fetter kann die Schrift in dem Fall nicht werden
Man kann mit "~h~" eine fette Schrift erzeugen. Siehe: https://wiki.gtanet.work/index.php?title=Fonts
Jedoch fehlt mir jetzt der Befehl um den Text nicht mehr Fett zu machen.
fängt num rows ab 0 oder 1 an zu zählen?
Für gewöhnlich gibt es die Anzahl an Rows aus die betroffen sind. Sprich wenn es keinen Account findet müsste num_rows = 0 sein. In seinem Fall sollte es dann eigentlich 1 sein.