Vielleicht...zeigst du bzw erklärst du uns kurz, was du machen magst? ![]()
Meinst du sowas: https://jsfiddle.net/pn5d836j/
Vielleicht...zeigst du bzw erklärst du uns kurz, was du machen magst? ![]()
Meinst du sowas: https://jsfiddle.net/pn5d836j/
Die..Tür passt irgendwie 0 ![]()
Einfach so eine Küchentür xD
Eventuell eine schöne Holztür o.ä. ![]()
Das ist nur so mit den Bäumen, einfach die Z-Achse von denen ein wenig verringern ![]()
He?
Da ist nirgens ein Lösch button..wo drückst n auf löschen? xD
Mal ein paar Hinweise...
An sich...finde ich sowas als Include nicht gerade sehr sinnvoll, da man so oder so..die Texte in der Include anpassen muss...und naja...man ist an das Design gebunden..usw...
Dennoch nett, dass du dein Design veröffentlichst ![]()
Noch ein Optionaler Punkt:
"Dieser Name ist ~g~nicht~w~ in Verwendung.~n~Du kannst dich jetzt ~g~registrieren."
Alle deine Texte sind statisch, das ist sehr gut
Dadurch kannst du sie packen
Setz am Anfang ein ! davor:
Zum Beispiel:
LoginTextDraw[playerid][29] = CreatePlayerTextDraw(playerid,346.000000, 162.000000, !"Dieser Name ist ~g~nicht~w~ in Verwendung.~n~Du kannst dich jetzt ~g~registrieren.");
Der eine Satz (das kannst du überall machen) besteht aus 82 Zeichen.
Normalerweise brauch jede Cell 4 Bytes. Also 82 * 4 Bytes = 328 Bytes
Wenn du es aber packst, brauch jede Cell nur 1 Byte, also 82 * 1 Byte = 82 Bytes ![]()
Kannst hier also 25% Speicher sparen
Und das summiert sich ja..da du viele Texte hast :3
Ehh keine Ahnung, was du meinst..poste am besten mal deinen Code ![]()
....den stock hast du unten im Skript..und die Nutzung in einem Callback / einer Funktion? ![]()
Stats0 = CreatePlayerTextDraw(playerid,222.000000, 158.000000, "_");
Überall wo du Stats0 verwendest...musst du eigentlich: Stats0[playerid] verwenden ![]()
Aber als Tipp: [SAMMELTHREAD] Kleine Scripting Fragen
Ouhh...ehh
Wie hast du das denn alles deklariert? ![]()
Du lädst das falsch..dass muss so aussehen:
cache_get_field_content(0, "IP", sInfo[playerid][sIP]);
sInfo[playerid][sBargeld] = cache_get_field_content_int(0, "Bargeld");
sInfo[playerid][sLevel] = cache_get_field_content_int(0, "Level");
sInfo[playerid][sGeschlecht] = cache_get_field_content_int(0, "Geschlecht");
sInfo[playerid][sSkin] = cache_get_field_content_int(0, "Skin");
Es gab keinen Fehler, weil man optional das connection Handle da angeben kann ![]()
Es würde auch sowas reichen:
stock GetRandomPlayer()
{
new list[MAX_PLAYERS],idx;
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
list[idx++] = i;
}
return (!idx) ? INVALID_PLAYER_ID : list[random(idx)];
}
//Nutzung:
new id = GetRandomPlayer();
if(id == INVALID_PLAYER_ID) return 1; //Hier ist kein Spieler online!
SetContract(id, 1000); //Beispiel Code
Alles anzeigen
Schreibweise etwas kompliziert
Makros sind nice ![]()
//Hier paar Makros:
#define LoopTextDraws(%0,%1,%2) new __@tmp=_:(%2);for(new %0=_:(%1); (%0) < __@tmp; (%0)++)
//Und zur Deklaration:
new PlayerText:x = CreatePlayerTextDraw(..); //Es reicht hier nur x zu nutzen
//Unter das erste TextDraw:
LoginTextDraw[playerid][0] = x;
//Unter das letzte TextDraw:
LoginTextDraw[playerid][1] = x;
//Loop:
LoopTextDraws(textid, LoginTextDraw[playerid][0], LoginTextDraw[playerid][1])
{
PlayerTextDrawHide(playerid, PlayerText:textid);
}
//Oder mit PVars:
#define LoopTextDraws(%0,%1,%2,%3) new __@tmp=GetPVarInt(%0,%3);for(new %1=GetPVarInt(%0,%2); (%1) < __@tmp; (%1)++)
#define SetPointer(%0,%1,%2) SetPVarInt(%0,%1,_:(%2))
#define DeletePointer(%0,%1) DeletePVar(%0,%1)
//zur Deklaration:
new PlayerText:x = CreatePlayerTextDraw(..); //Es reicht hier nur x zu nutzen
//Unter das erste TextDraw:
SetPointer(playerid, "Start", x);
//Unter das letzte TextDraw:
SetPointer(playerid, "Ende", x);
LoopTextDraws(playerid, textid, "Start", "Ende")
{
PlayerTextDrawHide(playerid, PlayerText:textid);
PlayerTextDrawDestroy(playerid, PlayerText:textid);
}
DeletePointer(playerid, "Start");
DeletePointer(playerid, "Ende");
Alles anzeigen
Hahah xD
Aber ist okay, dein Skript ![]()
So:
for(new i; i <sizeof(LoginTextDraw[]); i++)
Wenn du einen kleinen Performanz hinweis magst:
Weißt du, du erstellst (deklarierst) hier ein global Array.
Das wird im Heap reserviert.
[MAX_PLAYERS][33];
Mal angenommen MAX_PLAYERS sind 500.
Dann würdest du hier 500*33*4 Bytes = 66000 Bytes = 64.45KiloBytes
in der .amx reservieren nur um ein paar TextDraw ids zu speichern.
Also ich fände das nicht gerade sehr schön xD
Besonders wenn du noch mehr TextDraws hast..reservierst du da hunderte KiloBytes an speicher...für nix xD
Ein trick wäre...die Nutzung von "Pointers".
1. Möglichkeit:
new PlayerText:LoginTextDraw[MAX_PLAYERS][2]; //Sind 4000 Bytes..aber besser als 66000 xD
new PlayerText:x = LoginTextDraw[playerid][0] = CreatePlayerTextDraw(...); //Hier beim ersten
TextDrawPlayerTextDrawSetXX(x, true); //Nutzen dann hier mit x
x = CreatePlayerTextDraw(...); //Hier einfach auf x zuweisen und die ID nutzen (bei allen)
PlayerTextDrawSetXX(x, true); //Nutzen dann hier mit x
//und ganz zum schluss:
LoginTextDraw[playerid][1] = x; //Jetzt weißt du..wo es anfängt und aufhört
//Loop würde z.B. so aussehen:
new len = _:LoginTextDraw[playerid][1]+1;
for(new textid=_:LoginTextDraw[playerid][0]; textid<len; textid++)
{
PlayerTextDrawHide(playerid, PlayerText:textid);
}
Alles anzeigen
2. Möglichkeit:
Nutzung von 2 PVars.
Sieht genau gleich aus..nur mit Set & Get nutzen.
Dann kann man auch, z.B. wenn es nur um den Login geht...DeletePVar & PlayerTextDrawDestroy machen und verbrauchst nun so 0 Speicher ![]()
Fazit:
Würdest du Möglichkeit 1 nutzen, dann würdest du bei 100000 Iterationen...dir ca 2ms sparen. Allerdings würdest du immernoch jede Menge Speicher reservieren. Allerdings kannst du nun abwegen ob dir 2ms CPU wichtiger sind...oder ein Speicherverbrauch von 0 Bytes
Dann klammer mal die header Zeile aus..und printe dir mal, was er dir so ausgibt..als namen...als query..und und und ![]()
Kann man mit Count nicht die Zeile auslesen?
Nein..hast du meinen Code dir mal angeschaut? ![]()
Habe doch das Query und die Abfrage mit dem rowCount angepasst ![]()
...kannst mal n Bild von deiner Tabellenstruktur machen? ![]()
Oh, du hattest Auhority geschrieben..muss aber Authority heißen ![]()
Die Funktion kannste vereinfachen:
public settime(playerid)
{
new string[16];
gettime(string[0], string[1], string[2]);
format(string,sizeof(string),"%02d:%02d:%02d",string[0],string[1],string[2]);
TextDrawSetString(Time, string);
}
Für jeden Spieler das einzeln zu setzen macht btw keinen Sinn...kannst das direkt nur für das TextDraw setzen, das wird dann für die einzelnen Spieler automatisch angezeigt ![]()
Zudem wenn er zu langsam zählt, liegt das an dem Timer-Interval, ders zu groß ![]()
Heißt dein Feld in der Datenbank wirklich [Name] oder doch eher nur Name ? ![]()
$lsu_username = $_SESSION['User'];
$stmt = $conn->prepare("SELECT * FROM $db_Account WHERE `Name` = :name");
$stmt->execute(array(':name' => $lsu_username));
$row = $stmt->fetch();
if ($stmt->rowCount() == 1)
{
$AdminLevel = $row['Auhority'];// <- AdminLevel
}
else
{
session_destroy();
header("Location: index.php");
}
Alles anzeigen