(function($) {
Es ist komisch, dass du Dropbox direkt aufrufst.
Normalerweise musst du das dem $.fn Objekt hinzufügen.
In deinem Fall am Ende (der (function($) { Funktion) folgendes tun:
$.fn.Dropbox = Dropbox;
Und dann das wie folgt aufrufen:
(function($) {
Es ist komisch, dass du Dropbox direkt aufrufst.
Normalerweise musst du das dem $.fn Objekt hinzufügen.
In deinem Fall am Ende (der (function($) { Funktion) folgendes tun:
$.fn.Dropbox = Dropbox;
Und dann das wie folgt aufrufen:
Ich bin mir nicht ganz sicher (da ich das nicht mehr aktiv verfolge), aaaaber ich meine gelesen zu haben, dass OMP GTA Trilogy schon supported?
Aber vielleicht weiß myu mehr ![]()
nur wird das nur auf eine Seite angezeigt und nicht auf beiden Seiten
Das liegt an der Reihenfolge, wie du die Dinge aufrufst.
Du musst natürlich erst das eine Objekt erstellen und anheften und dann das Andere.
Nicht beides versuchen parallel zu mixxen.
Ich empfehle dir btw das in eine Funktion auszulagern (da du das sicherlich noch öfters nutzen wirst) und zum Anderen einen Streamer zu verwenden, denn wenn du da (nur als extremes Beispiel) 500 Fahrzeuge hast, könntest du keine anderen Objekte mehr auf dem Server streamen 😅 Deshalb nie CreateObject verwenden, sondern immer CreateDynamicObject.
Sähe dann z.B. so aus:
stock AddWingDingsToVehicle(vehicleid)
{
new obj = CreateDynamicObject(19477, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
SetDynamicObjectMaterialText(obj, 0, !"-", OBJECT_MATERIAL_SIZE_128x64,!"Wingdings", 75, 1, 0xFFFFFFFF, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
AttachDynamicObjectToVehicle(obj, vehicleid,1.24, -1.0, 1.2, 0.0, 0.0, 0.0);
obj = CreateDynamicObject(19477, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
SetDynamicObjectMaterialText(obj, 0, !"-", OBJECT_MATERIAL_SIZE_128x64,!"Wingdings", 75, 1, 0xFFFFFFFF, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
AttachDynamicObjectToVehicle(obj, vehicleid,-1.24, -1.0, 1.2, 0.0, 0.0, 0.0);
}
//Nutzung:
Postwagen[0] = CreateVehicleEx(609,989.9643,-1525.2175,13.7328,180.3481,1,1,14400);
AddWingDingsToVehicle(Postwagen[0]);
Alles anzeigen
Habe es eben getestet, also mit den Daten stimmt alles.
(Bekommst du da nicht mega viele compile Fehler?)
Wie Maho schon gesagt hat, es reicht quasi:
Postwagen[0]=CreateVehicleEx(609,989.9643,-1525.2175,13.7328,180.3481,1,1,120,false);
new postobj = CreateObject(19477, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
SetObjectMaterialText(postobj, "-", 0, OBJECT_MATERIAL_SIZE_128x64,"Wingdings", 75, 1, 0xFFFFFFFF, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
AttachObjectToVehicle(postobj, Postwagen[0],1.24, -1.0, 1.2, 0.0, 0.0, 0.0);
Es ist nur die Interiorid, welche da eine Rolle spielt.
Diese wird wohl nicht gesetzt, wenn du zurück gehst.
Mit dem Standard Befehl /interior kannst das prüfen, in welchem Interior du dich befindest.
#Handy
So, das sieht doch schon einmal ganz anders aus.
Laut Log handelt es sich hier um einen OutOfMemory Fehler der GPU.
Da gibt es jetzt 3 Möglichkeiten:
Viel Erfolg ![]()
Ich liebe es ja Log Einträge als Screenshots zu erhalten...vor Allem, wenn es nur n kleiner Teil der Logs ist.
Auch gut, dass die Screens in unterschiedlicher Zeitlicher Abfolge gepostet wurden...
Am Besten wäre ja ein Video, wie du die Logs ganz schnell durchscrollst, kappa xD
Wieso nicht einfach den gesamten Log mal hier posten? Ist das so schwer? Oder hänge ihn an...
Was hat das in der Sektion Fehler / Vorschläge / Kritik / Lob zum Forum zu suchen? Also die Zeit hätte man sich nehmen können...
Kennt wer Games mit weniger als 50 Usern?^^
Jo, jeder Deutsche SA:MP Server ![]()
Ich helfe doch gerne.
tag mismatch ist immer die hp = 15.0;
Ah, sry, schreib es so:
if (strcmp(cmd, "/drink", true) == 0)
{
if (!IsPlayerInRangeOfPoint(playerid, 3.0, 499.9694, -20.5940, 1000.6797)) return SendClientMessage(playerid, COLOR_GREY, "Es ist kein Barkeeper in der Nähe!");
new local = PlayerInfo[playerid][pLocal];
if(local < 99) return SendClientMessage(playerid,-1,"Hier ist kein Ort zum Trinken!");
if(local-99 >= sizeof(BizzInfo)) return SendClientMessage(playerid,-1,"Das Unternehmen wurde nicht richtig erstellt.");
new x_nr[256];
x_nr = strtok(cmdtext, idx);
if (!x_nr[0])
{
SendClientMessage(playerid, COLOR_WHITE, "|__________________ Bar __________________|");
SendClientMessage(playerid, COLOR_WHITE, "Benutzung: /drink [Drink]");
SendClientMessage(playerid, COLOR_GREY, "Verfügbare Drinks: Bier ($60), Vodka ($100), V+Energy ($100), Wasser ($20), Soda ($10)");
SendClientMessage(playerid, COLOR_GREY, "Verfügbare Drinks: Mixery ($20), Grapefruit ($20), Cola ($10), Fanta ($10)");
SendClientMessage(playerid, COLOR_WHITE, "|________________________________________________|");
return 1;
}
new cost, drunkLevel, Float:hp, till, Float:health;
if (strcmp(x_nr, "Bier", true) == 0)
{
cost = 60;
drunkLevel = 1;
hp = 15.0;
till = 60;
}
else if (strcmp(x_nr, "Mixery", true) == 0)
{
cost = 10;
drunkLevel = 2;
hp = 25.0;
till = 10;
}
else if (strcmp(x_nr, "Grapefruit", true) == 0)
{
cost = 20;
drunkLevel = 2;
hp = 25.0;
till = 20;
}
else if (strcmp(x_nr, "Cola", true) == 0)
{
cost = 10;
drunkLevel = 2;
till = 10;
hp = 25.0;
}
else if (strcmp(x_nr, "Fanta", true) == 0)
{
cost = 20;
drunkLevel = 2;
till = 20;
hp = 25.0;
}
else if (strcmp(x_nr, "Vodka", true) == 0)
{
cost = 10;
drunkLevel = 2;
till = 100;
hp = 25.0;
}
else if (strcmp(x_nr, "V+Energy", true) == 0)
{
cost = 100;
drunkLevel = 3;
till = 100;
hp = 27.0;
}
else if (strcmp(x_nr, "Wasser", true) == 0)
{
cost = 20;
till = 20;
hp = 5.0;
}
else if (strcmp(x_nr, "Soda", true) == 0)
{
cost = 10;
till = 10;
hp = 5.0;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "Barkeeper: Sorry, ich kenne dieses Getränk nicht.");
return 1;
}
if (PlayerDrunk[playerid] >= 10) return SendClientMessage(playerid, COLOR_GREY, "Du kannst nicht mehr trinken, sonst musst du brechen!");
GivePlayerMoney(playerid, -cost);
BizzInfo[local - 99][bProducts] -= 1;
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER);
PlayerDrunk[playerid] += drunkLevel;
if (PlayerDrunk[playerid] >= 5)
{
GameTextForPlayer(playerid, "~w~Du bist~n~~p~betrunken", 3500, 1);
BizzInfo[local - 99][bTill] += till;
}
SetPlayerTime(playerid, 22, 10);
SetPlayerDrunkLevel(playerid, 50000);
SetPlayerWeather(playerid, -66);
PlayerStoned[playerid] += 1;
if (GetPlayerHealth(playerid, health) < 100)
{
if (PlayerInfo[playerid][pAlcoholPerk] > 0)
{
PlayerDrunk[playerid] += 1;
hp = 2 * PlayerInfo[playerid][pAlcoholPerk] + hp;
}
SetPlayerHealth(playerid, health + hp);
}
new tName[MAX_PLAYER_NAME + 1];
GetPlayerName(playerid, tName, sizeof(tName));
format(string, sizeof(string), "* %s trinkt %s.", tName, x_nr);
ProxDetector(30.0, playerid, string, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
return 1;
}
Alles anzeigen
Hast du meinen Befehl mal probiert?
Wie ist denn BizzInfo deklariert worden?
Oder versuchs mal so:
if (strcmp(cmd, "/drink", true) == 0)
{
if (!IsPlayerInRangeOfPoint(playerid, 3.0, 499.9694, -20.5940, 1000.6797)) return SendClientMessage(playerid, COLOR_GREY, "Es ist kein Barkeeper in der Nähe!");
new local = PlayerInfo[playerid][pLocal];
if(local < 99) return SendClientMessage(playerid,-1,"Hier ist kein Ort zum Trinken!");
new Float:health;
new x_nr[256];
x_nr = strtok(cmdtext, idx);
if (!x_nr[0])
{
SendClientMessage(playerid, COLOR_WHITE, "|__________________ Bar __________________|");
SendClientMessage(playerid, COLOR_WHITE, "Benutzung: /drink [Drink]");
SendClientMessage(playerid, COLOR_GREY, "Verfügbare Drinks: Bier ($60), Vodka ($100), V+Energy ($100), Wasser ($20), Soda ($10)");
SendClientMessage(playerid, COLOR_GREY, "Verfügbare Drinks: Mixery ($20), Grapefruit ($20), Cola ($10), Fanta ($10)");
SendClientMessage(playerid, COLOR_WHITE, "|________________________________________________|");
return 1;
}
new cost, drunkLevel, hp, till;
if (strcmp(x_nr, "Bier", true) == 0)
{
cost = 60;
drunkLevel = 1;
hp = 15.0;
till = 60;
}
else if (strcmp(x_nr, "Mixery", true) == 0)
{
cost = 10;
drunkLevel = 2;
hp = 25.0;
till = 10;
}
else if (strcmp(x_nr, "Grapefruit", true) == 0)
{
cost = 20;
drunkLevel = 2;
hp = 25.0;
till = 20;
}
else if (strcmp(x_nr, "Cola", true) == 0)
{
cost = 10;
drunkLevel = 2;
till = 10;
hp = 25.0;
}
else if (strcmp(x_nr, "Fanta", true) == 0)
{
cost = 20;
drunkLevel = 2;
till = 20;
hp = 25.0;
}
else if (strcmp(x_nr, "Vodka", true) == 0)
{
cost = 10;
drunkLevel = 2;
till = 100;
hp = 25.0;
}
else if (strcmp(x_nr, "V+Energy", true) == 0)
{
cost = 100;
drunkLevel = 3;
till = 100;
hp = 27.0;
}
else if (strcmp(x_nr, "Wasser", true) == 0)
{
cost = 20;
till = 20;
hp = 5.0;
}
else if (strcmp(x_nr, "Soda", true) == 0)
{
cost = 10;
till = 10;
hp = 5.0;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "Barkeeper: Sorry, ich kenne dieses Getränk nicht.");
return 1;
}
if (PlayerDrunk[playerid] >= 10) return SendClientMessage(playerid, COLOR_GREY, "Du kannst nicht mehr trinken, sonst musst du brechen!");
GivePlayerMoney(playerid, -cost);
BizzInfo[local - 99][bProducts] -= 1;
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER);
PlayerDrunk[playerid] += drunkLevel;
if (PlayerDrunk[playerid] >= 5)
{
GameTextForPlayer(playerid, "~w~Du bist~n~~p~betrunken", 3500, 1);
BizzInfo[local - 99][bTill] += till;
}
SetPlayerTime(playerid, 22, 10);
SetPlayerDrunkLevel(playerid, 50000);
SetPlayerWeather(playerid, -66);
PlayerStoned[playerid] += 1;
if (GetPlayerHealth(playerid, health) < 100)
{
if (PlayerInfo[playerid][pAlcoholPerk] > 0)
{
PlayerDrunk[playerid] += 1;
hp = 2 * PlayerInfo[playerid][pAlcoholPerk] + hp;
}
SetPlayerHealth(playerid, health + hp);
}
new sendername[MAX_PLAYER_NAME + 1];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* %s trinkt %s.", sendername, x_nr);
ProxDetector(30.0, playerid, string, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
return 1;
}
Alles anzeigen
Lade mal crashdetect und zeig den server.log anschließend ![]()
In Pawn, kannst du nicht einfach unterschiedliche Typen in ein Array quetschen ![]()
Da die Sprache C-Ähnlich ist, unterliegt sie einer strengen Typisierung.
Mehr Infos dazu: https://de.wikipedia.org/wiki/Typisierung_(Informatik)
Im Gegensatz zu z.B. Javascript/Python, wo das Problemlos möglich wäre, muss hier angegeben werden, um was für einen Typ es sich handelt. Also String (Array) oder int, bool, float o.ä.
Sonst kann der Compiler das nicht verarbeiten.
Also das "enum" sorgt in diesem Fall dafür, dass der Compiler weiß, welche Typen im Array sind und es hat den netten Nebeneffekt, dass du die Variablen im Array gleich benennen kannst und es so übersichtlicher auch für dich wird ![]()
Alternativ könntest du auch mehrere Arrays erstellen:
new VPNames[][] =
{
"Ronald",
"Donald",
"Gonald"
};
new VPBools[sizeof(VPNames)] = {true, true, false};
Das sizeof(VPNames) gibt in diesem Fall vor, dass das Array, genauso groß sein muss, wie VPNames.
Aber es ist denke ich schöner alles in einem zu haben und auch direkt mit einem Namen ansprechen zu können.
Hier hätte man mehrere Stellen, die immer zu berücksichtigen sind, das kann schnell unübersichtlich werden.
Falls es sich hier übrigens um Konstanten handelt, also ein Array, wo der Wert zur Laufzeit nicht mehr geändert wird, dann kannst du anstatt
new
stock const verwenden.
stock sagt aus (egal ob vor globalen Variablen oder Funktionen), dass wenn die Variable (oder die Funktion) nicht im Code benutzt wird, der Compiler es ignorieren kann und so wird kein Speicher reserviert in der .amx Datei.
Das const sorgt dafür, dass die Nutzung optimiert wird und du nicht (evtl. ausversehen) irgendwelche Werte mehr darin nachträglich ändern kannst.
Oder kann ich einfach irgendwie
Ja, fast, kannst es so machen:
enum e_VPNames
{
v_Name[32],
bool:v_Bool
};
new VPNames[][e_VPNames] = //Hier kannst es [] lassen, der Compiler zählt für dich, wie viele Einträge im Array sind ;)
{
{"Ronald", true},
{"Donald", true},
{"Gonald", false} //<< wichtig, hier kein Komma am Ende, da der letzte Eintrag :D
};
//Zum Wert ändern:
VPNames[0][v_Bool] = false; //Ändert den Ronald (index 0) zu false
Alles anzeigen
Finde es gut, dass du pogressbar, statt progressbar geschrieben hast ![]()
local ox = exports['ox_base']
local progressBar = ox.bar
progressBar:drawBar(currentArea.collectingTime * 1000, Translation[Config.Locale]['pre_collect'] .. currentArea.items[1].label .. Translation[Config.Locale]['collect']) -- 8000
if currentArea.animation ~= nil then
if currentArea.animation.type == 'scenario' then
TaskStartScenarioInPlace(PlayerPedId(), currentArea.animation.anim, 0, true)
Citizen.Wait(currentArea.collectingTime * 1000)
ClearPedTasksImmediately(PlayerPedId())
else
RequestAnimDict(currentArea.animation.dict)
while not HasAnimDictLoaded(currentArea.animation.dict) do
Citizen.Wait(10)
end
TaskPlayAnim(player, currentArea.animation.dict, currentArea.animation.anim, 1.0, -1.0, 5000, 0, 1, true, true, true)
Citizen.Wait(currentArea.collectingTime * 1000)
end
else
Citizen.Wait(currentArea.collectingTime * 1000)
end
Alles anzeigen
Laut ChatGPT könnte dir das helfen.
Da so wenig Infos zur Verfügung stehen, ist das doch schon einmal ein guter guess.
Nächstes mal doch einfach selbst ChatGPT nutzen.
Kann ich Informationen für Filterscript wie zB ein #define oder Variable aus dem Gamemode abrufen?!
Tatsächlich kann man das auch direkt.
PVars sind ja eher Spieler bezogen, wenn es um globale Variablen geht, könntest du folgendes tun:
//Im GameMode:
#define GLOBAL_VAR 5
forward GetGlobalVar(); //Kannst du nennen wie du magst
public GetGlobalVar()
{
return GLOBAL_VAR;
}
//Im Filterscript:
new GLOBAL_VAR;
public OnFilterScriptInit()
{
GLOBAL_VAR = CallRemoteFunction("GetGlobalVar", "");
return 1;
}
Aber am Einfachsten wäre es ein Include zu schreiben, statt einem Filterscript ![]()
Ich habe noch ein anderes Problem, vielleicht kannst du mir da auch helfen
![]()
Wenn ich sccanf2 einbinde (aktuelle version) zerschießt das so halb meinen script. Die Spieler Auswahl ist nicht mehr sichtbar bzw code in OnPlayerRequestClass ist tot (spawnen funktioniert aber noch) undmanche commands (OnPlayerCOmmandText -> /gmx) gehen nicht mehr.
(Der Compiler sagt es ist alles tutti. (sscanf plugin im Ordner und .cfg, ocmd.inc (2013 neuste?) und sscanf2.inc in pawno)
Lade mal das crashdetect Plugin und prüf den Server.log) ![]()
Hört sich zumindest sinnvoll an xD?
Ja, das klingt gut ![]()
Kannst du eventuell eine MariaDB-Bibliothek empfehlen?
Der MariaDB Connector soll - soweit ich das zumindest lesen konnte - ziemlich schlecht sein.
Habe bisher mit C++ nur mit PostgreSQL gearbeitet und damit mit libpqxx
Aber der MariaDB Connector, ist wohl auch eine Alternative: https://github.com/mariadb-corporation/mariadb-connector-cpp
Viel Erfolg 👍🏼