Hast du eine mehrzeilige Meldung mit vielen Zahlen im Compiler?
Beiträge von Jeffry
-
-
Nein, das stimmt so nicht. Das ganze strcmp Zeug fehlt. Das muss da hin, sonst gibt es keinen Sinn.
-
1.)
if(!strcmp(SpielerName(playerid), hInfo[i][Mieter1]) || !strcmp(SpielerName(playerid), hInfo[i][Mieter2]) || !strcmp(SpielerName(playerid), hInfo[i][Mieter3]) || !strcmp(SpielerName(playerid), hInfo[i][Besitzer]))
{
return SendClientMessage(playerid, 0xFF0000FF, "Error: Du bist bereits Mieter oder Besitzer dieses Hauses.");
}2.)
Eine Schleife durch alle Häuser und nach gleichen Prinzip wie bei 1.) das Geld abziehen. -
Das wäre auch eine Möglichkeit, ja. Mit http://wiki.sa-mp.com/wiki/SetPlayerArmedWeapon.
EDIT: (Post unten)
@Kontrax: Ok, alles klar. So kannst du es auch machen, ich denke das sieht auch gut aus. Setze bitte den Thread auf erledigt, wenn alle deine Fragen zu dem Thema beantwortet sind. Danke!
-
Du könntest versuchen das ganze entweder über die Taste oder über die Animation die der Spieler ausführt, bei OnPlayerUpdate abzufragen, falls das passt, dann den Spieler kurz zu freezen und wieder zu entfreezen und dazu return 0 zu machen, damit der Schuss nicht synchronisiert wird.
Wäre ein Versuch wert.
-
Ok!
Mache die 10 zu 10.0.
Und h_label muss im enum den Text3D Tag haben. -
Setze mal nach den beiden:
mysql_pquery(Handle,query);
jeweils ein:
printf("query = %s", query);
hin, und poste dann was im Log steht. -
Bergabfuhr_Stationen[berg_Checkpoint][B_fX]
Hier (und bei allen bei denen das noch so ist) muss anstatt berg_Checkpoint die Anzahl der vom Spieler gesammelten Checkpoints rein. berg_Checkpoint ist immer 1 (siehe in deinem enum), daher zeigt es dir den 2. Checkpoint an. -
Nicht den MySQL Log, den Server Log.
Aber soweit ich das sehe, passen die Koordinaten doch, oder? -
Das letzte hat den Typ 0, da stimmt was nicht.
Hast du die Tabelle zuvor geleert?Leere die Tabelle nochmal, lege drei Häuser an und poste dann den Log dazu, der ist wichtig, damit nachvollzogen werden kann, was passiert.
-
Möglicherweise hast du schon was drin stehen.
Was steht im Log, wenn du es so schreibst?
ocmd:mieten(playerid, params[])
{
for(new i=0; i<MAX_HOUSE; i++)
{
if(hInfo[i][Gekauft] != 1) return SendClientMessage(playerid, error, "Dieses Haus kannst du nicht Mieten!");
{
if(IsPlayerInRangeOfPoint(playerid, 3.0, hInfo[i][PosX],hInfo[i][PosY],hInfo[i][PosZ]))
{
printf("'%s' | '%s' | '%s'", hInfo[i][Mieter1], hInfo[i][Mieter2], hInfo[i][Mieter3]);
printf("'%d' | '%d' | '%d'", strlen(hInfo[i][Mieter1]), strlen(hInfo[i][Mieter2]), strlen(hInfo[i][Mieter3]));
if(!strlen(hInfo[i][Mieter1])) return format(hInfo[i][Mieter1], 34, "%s",SpielerName(playerid)), SendClientMessage(playerid, erfolg, "Mieter 1");
else if(!strlen(hInfo[i][Mieter2])) return format(hInfo[i][Mieter2], 34, "%s",SpielerName(playerid)), SendClientMessage(playerid, erfolg, "Mieter 2");
else if(!strlen(hInfo[i][Mieter3])) return format(hInfo[i][Mieter3], 34, "%s",SpielerName(playerid)), SendClientMessage(playerid, erfolg, "Mieter 3");
else
{
SendClientMessage(playerid, error, "Du kannst hier nicht Mieten! Dieses Haus ist voll.");
return 1;
}
}
}
} -
Du könntest http://wiki.sa-mp.com/wiki/OnPlayerWeaponShot mit 0 returnen, und entsprechend eine Nachricht ausgeben, wenn die Zeit noch nicht vorbei ist.
-
Oooh, böser Fehler von mir. Habe das tmp++ eine Ebene versetzt eingefügt.
So passt es:
new count, tmp;
for(new j=0; j<sizeof(HouseInfo); j++) if(HouseInfo[j][h_int] == inter && HouseInfo[j][h_type] == type) count++;
printf("count: %d", count);
for(new j=0; j<sizeof(InteriorInfo); j++)
{
printf("%d == %d | %d == %d", InteriorInfo[j][int_ID], inter, InteriorInfo[j][int_type], type);
if(InteriorInfo[j][int_ID] == inter && InteriorInfo[j][int_type] == type)
{
printf("%d == %d", tmp, count);
if(tmp == count)
{
printf("Nutze InteriorInfo %d", j);
HouseInfo[i][h_exitX] = InteriorInfo[j][int_exitX];
HouseInfo[i][h_exitY] = InteriorInfo[j][int_exitY];
HouseInfo[i][h_exitZ] = InteriorInfo[j][int_exitZ];
}
tmp++;
}
} -
if(!strlen(/*Mieter1*/)) //Mieter 1 setzen
else if(!strlen(/*Mieter2*/)) //Mieter 2 setzen
else if(!strlen(/*Mieter3*/)) //Mieter 3 setzen
else //alle voll -
Debugge es mal so:
new count, tmp;
for(new j=0; j<sizeof(HouseInfo); j++) if(HouseInfo[j][h_int] == inter && HouseInfo[j][h_type] == type) count++;
printf("count: %d", count);
for(new j=0; j<sizeof(InteriorInfo); j++)
{
printf("%d == %d | %d == %d", InteriorInfo[j][int_ID], inter, InteriorInfo[j][int_type], type);
if(InteriorInfo[j][int_ID] == inter && InteriorInfo[j][int_type] == type)
{
printf("%d == %d", tmp, count);
if(tmp == count)
{
printf("Nutze InteriorInfo %d", j);
HouseInfo[i][h_exitX] = InteriorInfo[j][int_exitX];
HouseInfo[i][h_exitY] = InteriorInfo[j][int_exitY];
HouseInfo[i][h_exitZ] = InteriorInfo[j][int_exitZ];
}
}
tmp++;
}Was steht im Log, wenn du die Häuser erstellst? Und was steht in der Datenbank?
Nicht vergessen die Datenbank vorher zu leeren. -
Öh, ja. Man sieht auch immer wieder neue Dinge.
Versuch mal das: http://praxistipps.chip.de/ntd…reparieren-so-gehts_32270Falls das nicht geht, erstelle eine "pawn.cfg" im /pawno/ Ordner und schreibe "-d3" rein, dann kompiliere deinen Code neu und poste den Log.
-
Lösche die Daten aus der Datenbank und erstelle die 3 Häuser nochmal.
Dann zeig nochmal den Screenshot aus der Datenbank. -
Wenn du nur 3 Mieter hast, dann mach einfach in deine andere Tabelle die Spalten "Mieter1", "Mieter2" und "Mieter3" rein, das passt dann. Ist zwar nicht mehr in der Normalform einer Datenbank dann, aber für die Anwendung reicht es allemal.
Und dann kannst du es wie den Owner laden, eben Mieter1 bis 3. -
Beim Erstellen:
HouseInfo[i][h_exitX] = InteriorInfo[i][int_exitX];
HouseInfo[i][h_exitY] = InteriorInfo[i][int_exitY];
HouseInfo[i][h_exitZ] = InteriorInfo[i][int_exitZ];new count, tmp;
for(new j=0; j<sizeof(HouseInfo); j++) if(HouseInfo[j][h_int] == inter && HouseInfo[j][h_type] == type) count++;
for(new j=0; j<sizeof(InteriorInfo); j++)
{
if(InteriorInfo[j][int_ID] == inter && InteriorInfo[j][int_type] == type)
{
if(tmp == count)
{
HouseInfo[i][h_exitX] = InteriorInfo[j][int_exitX];
HouseInfo[i][h_exitY] = InteriorInfo[j][int_exitY];
HouseInfo[i][h_exitZ] = InteriorInfo[j][int_exitZ];
}
}
tmp++;
}Das dürfte sein was du willst.
-
Wenn du unbegrenzt viele Mieter pro Haus haben willst, dann musst du ohne Variablen arbeiten, und bei einer Mieter-Abfrage direkt die Datenbank ansprechen, mit einem SELECT auf die Mietertabelle.
Wenn du eine begrenzte Anzahl hast, musst du diese natürlich aus der Datenbank laden und vorher den Speicher als multidimensionales Array (Mieter[MAX_HAUS][MAX_MIETER][34]) reservieren.