Jemand nen Deutsches Tutorial? xDD
An welcher Stelle genau scheiterst du denn?
Ich meine...da sind Bildchen und Copy&Paste Stuff...ich weiß nicht...inwiefern dir Deutsch helfen würde?
Stell am Besten dein Visual Studio auf Englisch um hahaha xD
Jemand nen Deutsches Tutorial? xDD
An welcher Stelle genau scheiterst du denn?
Ich meine...da sind Bildchen und Copy&Paste Stuff...ich weiß nicht...inwiefern dir Deutsch helfen würde?
Stell am Besten dein Visual Studio auf Englisch um hahaha xD
aber beim alten funktioniert es nach meiner Art und Weise oder?
Nach älterem C-Standard nutzt man scanf
Dort kann man den Buffer quasi als token mitgeben:
"%50[^\n]" Hier hätten wir einen Buffer von 50 Zeichen.
Aber, da man auch direkt %s nutzen kann, wäre das natürlich unsicherer, als scanf_s, wo sichergestellt wird, dass ein Buffer mitgegeben wird, um eben einen Buffer-Overflow zu vermeiden.
Eine Alternative wäre fgets, wo auch ein Buffer das alles sichert
Aber bei scanf_s muss immer ein Buffer mitgegeben werden (bei Strings).
Ich glaub, du kannst es sogar so schreiben:
scanf_s("%49s", pers[i].vorname, (unsigned)_countof(pers[i].vorname)); //Ich glaube den & Pointer musst du hier nicht verwenden
//oder eben
scanf_s("%49s", pers[i].vorname, 50);
Die %49s lassen Platz für den null-Charakter.
Kannst ja mal ein wenig ausprobieren oder dich in die Dokus einlesen
Kurze Frage; weiß jemand wie ich das hinbekomme in Microsoft Visual Studio Code zu compilen? Bin zu blöd dafür..
Ahh du nutzt also n neuen C-Standard.
Dann musst du natürlich alle Parameter für scanf_s nutzen.
Schreib es mal:
scanf_s("%s", &pers[i].vorname, 50);
Musst quasi immer den Buffer angeben
Wieso scanf_s?
Machs doch einfach:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Personen 100
//void AllePersonen(Person *pers, int anzahl);
struct geburtstag
{
int tag;
int monat;
int jahr;
};
typedef struct geburtstag Geburtstag;
struct person
{
char vorname[50];
char nachname[50];
int vorhanden;
Geburtstag geb;
};
typedef struct person Person;
void PersonEinlesen(Person pers[], int anzahl);
void main(void)
{
Person p[Personen];
int menu = 0;
do
{
printf("1. Person eingeben\n");
printf("2. Person auslesen\n");
printf("3. Alle Personen\n");
printf("4. Person entfernen\n");
printf("5. Menue verlassen\n");
scanf("%i", &menu);
switch (menu)
{
case 1:
{
PersonEinlesen(p, Personen);
break;
}
}
} while (menu != 5);
}
void PersonEinlesen(Person pers[],int anzahl)
{
int i;
for (i = 0; i < anzahl; i++)
{
if(pers[i].vorhanden == 0)
{
printf("Geben Sie einen Vornamen an: ");
scanf("%s", &pers[i].vorname);
printf("Vorname: %s\n",pers[i].vorname); //Nur als Test!
printf("Geben Sie einen Nachnamen an: ");
scanf("%s", &pers[i].vorname);
printf("Geben Sie Ihr Geburtsdatum an: ");
scanf("%i.%i.%i", &pers[i].geb.tag, &pers[i].geb.monat, &pers[i].geb.jahr);
break;
}
}
}
Alles anzeigen
Funzt einwandfrrei :o
Okay, ist eine eigene Color Include.
Durchsuche halt mal all deine Includes nach CreateVehicle.
Vielleicht findest du ja irgendwo was, wo die Funktion gehookt wird.
#include <colors>
Naaa, was haben wir denn hier?
Eventuell ist das die Color Include von der ich gesprochen habe hahaha xD
Wie soll das include den heißen?
Liste mal all deine Includes auf
@Dr. Frauenarzt einige Includes verändern ihre Parameter.
Absolut korrekt
Sehr gut geschlussfolgert mein junger Padawan!
Und zwar rate ich mal ins Blaue und sage du verwendest die color Include von Ryder
Dort wird die Funktion nämlich gehookt und diese musst du anpassen
Wie kann ich, nachdem ich ein Spieler teleportiere ihn und sein Fahrzeug freezen
Einfach den Fahrer Freezen
Bei dem Code unten verwendest du immer i, obwohl du eigentlich d verwenden musst, da das die Variable in der Schleife ist
Musst dich schon auf eins festlegen
for(new i=1, j=MAX_HOUSES; i<=j; i++)
Nur mal kurz was fundamentales, was mich daran stört.
Von der Geschwindigkeit her, wäre es hier besser direkt MAX_HOUSES in der Bedingung zu verwenden, da das eine Konstante ist.
Du packt es in eine Variable, das macht es langsamer. Das würde nur Sinn machen, wenn MAX_HOUSES eine Funktion wäre xD
Und davon abgesehen, solltest du bei 0 starten und nicht bei 1
Zudem musst du die ID auch zurückgeben und nicht nur 1
Und wichtig ist auch, dass es kleiner als MAX_HOUSES ist und nicht kleiner gleich
Und die 0 wäre kein invalider Index hahaha xD
Also die ganze Funktion mal so schreiben:
stock getFreeHouseID()
{
for(new i; i<MAX_HOUSES; i++)
{
if(!hInfo[i][hID]) return i;
}
return -1;
}
stock createHouse(playerid, Float:X, Float:Y, Float:Z)
{
new query[256],fid=getFreeHouseID();
if(fid == -1) return 0; //Hier wären alle Häuser voll!
mysql_format(handle, query, sizeof(query), "INSERT INTO houses (h_id, h_x, h_y, h_z) VALUES ('%d','%f', '%f', '%f')",
fid, X, Y, Z);
mysql_pquery(handle, query, "OnHouseCreated", "ddfff", playerid, fid, X, Y, Z);
return 1;
}
Die Beschreibung wird nicht gesetzt, da du bei dem einen insID und bei dem Anderen houseid verwendest...
Sind diese Werte identisch? Was genau machst du da xD
Ist es möglich zu prüfen ob die params bei OCMD null sind? Oder ist das ganze nichtmal nötig?
Kommt darauf an, was du vor hast
sscanf prüft das Ganze schon automatisch
Ansonsten kannst du es aber auch manuell prüfen mit:
if(IsNull(params))
{
//Hier ist die Eingabe leer
}
Falls nicht vorhanden:
#define IsNull(%0) (%0[0] == '\0' || %0[0] == '\1')
Mach das Query mal größer und schreib das Statement so:
"INSERT INTO `garage` (`X`, `Y`, `Z`, `ID`, `Kaufpreis`, `InteriorType`, `existiert`, `Lock`) VALUES"
Und das andere so:
"%s ('%f','%f','%f',%d,%d,%d,%d,%d)"
Dein Code ist: %d
Musst %s verwenden (und mit val)
oder einfach direkt %04d ohne val.
Einfach so:
new tmp[PCarEnum];
PCar[playerid][slot] = tmp; //Slot = eben der slot :)
Ist es möglich, alle Werte auf 0 zu setzten oder irgendwas invalides wie -1 ?
Leider geht das nicht, das musst du manuell ein nacheinander machen.
Actually, gibt es da einen Trick.
Natürlich kann man es mit einer Schleife machen oooder mit einer temporären Variable:
new tmp[MAX_PCARS][PCarEnum]; //Temporäre Variable setzt alle Werte auf 0
PCar[playerid] = tmp; //Resettet alle Variablen für den Spieler
Ist sogar schneller, als über eine Schleife
Aber der Server läuft ja noch?!
Weil du das WHERE vergessen hast..
Musst doch angeben, für wen es gesetzt werden soll
inwiefern falscher Pfard wen ich die console öffne schließt die sich wegen den scriptfile.
...dann lass doch mal crashdetect laufen...
was wird denn gesagt?
Falscher Pfad im Sinne von vllt versucht er auf eine Datei zuzugreifen mit fread die nicht existiert, das verursacht einen Server-Crash.
was kann ich tun?
Das vorherige listitem in einem PVar ([wiki]SetPVarInt[/wiki]) zwischenspeichern.
auf die scriptfiles vehicles nicht zugreifen
Entweder falscher Pfad, oder keine Rechte
Naja, steht denn noch etwas über der Zeile?
Wie ist denn IsPlayerPause definiert?