Was heißt, es geht nur manchmal? Gibt es da irgendwelche Auffälligkeiten, wenn es nicht geht?
Hast du alle diese Array-Variablen mit MAX_VEHICLES deklariert?
Beiträge von Jeffry
-
-
Dann kann es eigentlich nur sein, dass du in einer Virtuellen Welt bist.
Mache dir mal einen /test Befehl, der dich in Virtual World 0 setzt:
if(!strcmp(cmdtext, "/test")) return SetPlayerVirtualWorld(playerid, 0);Siehst du das Zeug dann?
-
Aha, so langsam macht der Code mehr Sinn.
Schreibe es so:ocmd:tbaccept(playerid,params[])
{
if(pInfo[playerid][pEingeloggt] == 0)return SendClientMessage(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
if(pInfo[playerid][pFraktion] <1)return SCM(playerid,COLOR_GRAU,"Du bist in keiner Fraktion!");
if(pInfo[playerid][pFraktion] !=5)return SCM(playerid,COLOR_GRAU,"Du bist kein Trucker!");
if(pInfo[playerid][pProdukte] <60)return SCM(playerid,COLOR_GRAU,"Du hast weniger als 60 Produkte, kauf erst welche.");
if(GetPVarInt(playerid,"ta_pID") == 1)return SCM(playerid,COLOR_GRAU,"Erledige erst deinen Auftrag!");
new tmpid;
if(sscanf(params,"i",tmpid))return SCM(playerid,COLOR_GRAU,"Info: /tbaccept [bizID]");
if(tmpid <= 0)return SCM(playerid,COLOR_GRAU,"Falsche Business ID!");
new id = -1;
for(new i = 0; i < sizeof(bsInfo); i++)
{
if(bsInfo[i][db_id] == tmpid)
{
id = i;
break;
}
}
if(id == -1)return SCM(playerid,COLOR_GRAU,"Falsche Business ID!");
if(bsInfo[id][b_tauftrag] == 0)return SCM(playerid,COLOR_GRAU,"Dieses Business hat keinen Lieferanten bestellt.");
new string[145];
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && pInfo[i][pFraktion]==5)
{
format(string,sizeof(string),"Trucker %s hat den Business Auftrag (%d) erfolgreich angenommen, und wird ihn jetzt Beliefern.", SpielerName(playerid));
SCM(i,COLOR_GELB,string);
if(id == GetPVarInt(i,"b_Auftrag") && GetPVarInt(i, "b_tauftrag") == 1)
{
format(string,sizeof(string),"Trucker %s hat deinen Auftrag angenommen, und wird dich jetzt Beliefern.",SpielerName(playerid));
SCM(i,COLOR_GELB,string);
}
}
break;
}
SetPlayerCheckpoint(playerid,bsInfo[id][bx],bsInfo[id][by],bsInfo[id][bz],5);
printf("bsInfo[%i][bx],bsInfo[%i][bx],bsInfo[%i][bx]",id,id,id);
SCM(playerid,COLOR_GELB,"Dein Auftrag wurde dir auf der Karte makiert.");
bsInfo[id][b_tauftrag] = 0;
SetPVarInt(playerid,"ta_pID",1);
SetPVarFloat(playerid,"ta_X",bsInfo[id][bx]);
SetPVarFloat(playerid,"ta_Y",bsInfo[id][by]);
SetPVarFloat(playerid,"ta_Z",bsInfo[id][bz]);
return 1;
}if(dialogid == DIALOG_TRUCKERMESS)
{
if(response)
{
for(new i=0; i<sizeof(bsInfo); i++)
{
if(!bsInfo[i][db_id])continue;
if(!bsInfo[i][b_id])continue;
if(!IsPlayerInRangeOfPoint(playerid,2,bsInfo[i][bx],bsInfo[i][by],bsInfo[i][bz]))continue;
bsInfo[i][b_tauftrag] =1;
new auftragID = bsInfo[i][db_id];
SetPVarInt(playerid,"b_Auftrag",auftragID);
SetPVarInt(playerid,"b_tauftrag",bsInfo[i][b_tauftrag]);
break;
}
new string[145];
new lID = GetPVarInt(playerid,"b_Auftrag");
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && pInfo[i][pFraktion]==5)
{
format(string,sizeof(string),"Business besitzer %s braucht einen Lieferanten",SpielerName(playerid));
SendClientMessage(i,COLOR_GELB,string);
format(string,sizeof(string),"Benutze /tbaccept [%i], um diesen auftrag anzunehmen.",lID);
SCM(i,COLOR_GELB,string);
}
return 1;
}
SCM(playerid,COLOR_GELB,"Du hast einen Lieferanten bestellt, bitte haben sie Geduld bis dieser Auftrag akzeptiert wird.");
SetPVarInt(playerid,"b_AuftragOwner",playerid);
}
return 1;
} -
Wie erstellst du diese Aufträge? Vielleicht ist da der Fehler, denn dem obigen Befehl nach kann das Problem das du beschreibst nicht auftreten.
-
Hast du irgendwelche Fehlermeldungen im server_log.txt? Poste den ggf. mal.
Wenn du im SA-MP Client deinen Server anschaust, stimmt der Gamemode Text?Funktioniert der eine Skin in der Class Selection?
-
Dann rate ich dir Kontakt mit dem Support von samp4You aufzunehmen, vielleicht liegt der Fehler bei denen, oder die können dir sagen wie du dich zu verbinden hast. Das macht in diesem Fall mehr Sinn, da der Server dort gemietet ist.
Oder es meldet sich noch jemand hier, der das gleiche Problem hatte bei samp4You.
-
Schreibe es mal so:
ocmd:tbaccept(playerid,params[])
{
if(pInfo[playerid][pEingeloggt] == 0)return SendClientMessage(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
if(pInfo[playerid][pFraktion] <1)return SCM(playerid,COLOR_GRAU,"Du bist in keiner Fraktion!");
if(pInfo[playerid][pFraktion] !=5)return SCM(playerid,COLOR_GRAU,"Du bist kein Trucker!");
if(pInfo[playerid][pProdukte] <60)return SCM(playerid,COLOR_GRAU,"Du hast weniger als 60 Produkte, kauf erst welche.");
if(GetPVarInt(playerid,"ta_pID") == 1)return SCM(playerid,COLOR_GRAU,"Erledige erst deinen Auftrag!");
new id;
if(sscanf(params,"i",id))return SCM(playerid,COLOR_GRAU,"Info: /tbaccept [bizID]");
if(id <= 0 || id >= sizeof(bsInfo))return SCM(playerid,COLOR_GRAU,"Falsche Business ID!");
if(bsInfo[id][b_tauftrag] == 0)return SCM(playerid,COLOR_GRAU,"Dieses Business hat keinen Lieferanten bestellt.");
new string[145];
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && pInfo[i][pFraktion]==5)
{
format(string,sizeof(string),"Trucker %s hat den Business Auftrag (%d) erfolgreich angenommen, und wird ihn jetzt Beliefern.", SpielerName(playerid));
SCM(i,COLOR_GELB,string);
if(i == GetPVarInt(playerid,"b_AuftragOwner")) //Diese Abfrage macht dem Code nach keinen Sinn, da ich nicht weiß wofür die Variable steht.
{
format(string,sizeof(string),"Trucker %s hat deinen Auftrag angenommen, und wird dich jetzt Beliefern.",SpielerName(playerid));
SCM(i,COLOR_GELB,string);
}
}
break;
}
SetPlayerCheckpoint(playerid,bsInfo[id][bx],bsInfo[id][by],bsInfo[id][bz],5);
printf("bsInfo[%i][bx],bsInfo[%i][bx],bsInfo[%i][bx]",id,id,id);
SCM(playerid,COLOR_GELB,"Dein Auftrag wurde dir auf der Karte makiert.");
bsInfo[id][b_tauftrag] = 0;
SetPVarInt(playerid,"ta_pID",1);
SetPVarFloat(playerid,"ta_X",bsInfo[id][bx]);
SetPVarFloat(playerid,"ta_Y",bsInfo[id][by]);
SetPVarFloat(playerid,"ta_Z",bsInfo[id][bz]);
return 1;
}Wie geschrieben, die markierte Abfrage macht keinen direkten Sinn, aber teste es trotzdem mal.
-
Achso.
Dort steht einmal als Passwort "aftershak" und einmal "aftershake". Ist das nur ein Tippfehler, oder hast du das falsche Passwort angegeben? Teste beide Varianten mal als Passwort zur Verbindung.
-
Also, erstens: Unterlasse bitte diese Vollzitate, die machen keinen Sinn, vor allem wenn du den ganzen Code zitierst.
Dann zum Thema zurück.
Nein, das geht nicht. Wenn samp4You sicherheitsbedacht ist, was ich hoffe, dann haben sie eine externe Verbindung gesperrt, sprich du kannst nur von dem von dir gemieteten Server drauf zugreifen.
Dafür stehen die Daten im Control Panel von samp4You, schau da mal rein. -
Nimm den root Benutzer ohne Passwort:
#define db_host "localhost"
#define db_user "root" //USERNAME
#define db_db "Datenbank" //DATENBANK
#define db_pass ""Das ist in 99% aller Fälle standardmäßig so eingestellt.
Dein user "samp" wird nicht die richtigen Berechtigungen haben, das ist auf localhost (dein Rechner) so eingestellt, standardmäßig zumindest.
Deshalb benutze, wie ich oben geschrieben habe, den root - User ohne Passwort, der hat ALLE Berechtigungen. Dem kannst du später auch, je nach Client, ein Passwort geben. -
Eins nach dem anderen, so bringt das gar nichts.
Fangen wir mit dem Befehl an.Also, vom bloßen Draufschauen kann ich dir schon sagen, dass der falsch ist, allerdings kann ich dir nicht sagen wie er richtig sein muss, da ich nicht weiß was du vor hast.
Als Trucker gebe ich /bacccept ein, und was als bizID? Und was wird hier gespeichert: GetPVarInt(playerid,"b_Auftrag"); ?
Das überschreibst du mit sscanf wieder, also was brauchst du nun? -
Schreibe das mal so:
stock updaterang()
{
new id=0;
mysql_query("SELECT * FROM `aranks`");
mysql_store_result();
new string[256];
mysql_fetch_row_format(string);
strins(string, "|", strlen(string));
printf("string: %s", string);
new oldi=0;
new count=0;
for(new i=0; i<strlen(string); i++)
{
if(string[i]=='|')
{
count++;
new tmpstring[sizeof(string)]; tmpstring=string;
strdel(tmpstring, i, strlen(tmpstring));
strdel(tmpstring, 0, oldi+1);
switch(count)
{
case 1: format(arang1[id], 64, tmpstring);
case 2: format(arang2[id], 64, tmpstring);
case 3: format(arang3[id], 64, tmpstring);
case 4: format(arang4[id], 64, tmpstring);
case 5: format(arang5[id], 64, tmpstring);
case 6: format(arang6[id], 64, tmpstring);
}
oldi=i;
}
}
mysql_free_result();
return 1;
}Wenn es nicht geht: Was sagt der MySQL Log und was der Server Log?
-
Das geht leider nicht.
-
Poste mal die Objekte und die Koordinaten der Class Selection, dann teste ich es mal bei mir, ob es eine Möglichkeit gibt, die Objekte erscheinen zu lassen.
Hast dabei mit einem der anderen Streamer ausprobiert?
-
Ja, das unreachable Code heißt, dass du ein return vor dem Code hast und dieser Code somit niemals ausgeführt werden kann. Schau da mal nach.
Die zweite Warnung heißt, dass die Parameter nicht stimmen, poste die Zeile bitte.
-
Schreibe es so:
Spoiler anzeigen if(strcmp("/carsell", cmd, true) == 0)
{
printf("carkey: %d", CarKey[playerid]);
if(Carlist[playerid][CarKey[playerid]][Typ] != -1)
{
if(Carlist[playerid][CarKey[playerid]][Carid] != -1)
{
printf("typ: %d", Carlist[playerid][CarKey[playerid]][Typ]);
new id = -1;
for(new i=0; i<sizeof(Kaufliste); i++)
{
if(Carlist[playerid][CarKey[playerid]][Typ] == Kaufliste[i][Modelid])
{
id = i;
break;
}
}
if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Fahrzeug existiert nicht.");
new preis = (Kaufliste[id][Preis]/5)*4;
GivePlayerMoneys(playerid, preis);
printf("preis: %d", preis);
DestroyVehicleSelfmade(Carlist[playerid][CarKey[playerid]][Carid]);
Carlist[playerid][CarKey[playerid]][Typ]=-1;
Carlist[playerid][CarKey[playerid]][pos_x]=0.0;
Carlist[playerid][CarKey[playerid]][pos_y]=0.0;
Carlist[playerid][CarKey[playerid]][pos_z]=0.0;
Carlist[playerid][CarKey[playerid]][z_angle]=0.0;
Carlist[playerid][CarKey[playerid]][Status]=0;
Carlist[playerid][CarKey[playerid]][Lock]=0;
Carlist[playerid][CarKey[playerid]][Carid]=-1;
Carlist[playerid][CarKey[playerid]][Farbe1]=-1;
Carlist[playerid][CarKey[playerid]][Farbe2]=-1;
Carlist[playerid][CarKey[playerid]][mod1]=-1;
Carlist[playerid][CarKey[playerid]][mod2]=-1;
Carlist[playerid][CarKey[playerid]][mod3]=-1;
Carlist[playerid][CarKey[playerid]][mod4]=-1;
Carlist[playerid][CarKey[playerid]][mod5]=-1;
Carlist[playerid][CarKey[playerid]][mod6]=-1;
Carlist[playerid][CarKey[playerid]][mod7]=-1;
Carlist[playerid][CarKey[playerid]][mod8]=-1;
Carlist[playerid][CarKey[playerid]][mod9]=-1;
Carlist[playerid][CarKey[playerid]][mod10]=-1;
Carlist[playerid][CarKey[playerid]][mod11]=-1;
Carlist[playerid][CarKey[playerid]][mod12]=-1;
Carlist[playerid][CarKey[playerid]][mod13]=-1;
Carlist[playerid][CarKey[playerid]][mod14]=-1;
Carlist[playerid][CarKey[playerid]][mod15]=-1;
Carlist[playerid][CarKey[playerid]][mod16]=-1;
Carlist[playerid][CarKey[playerid]][mod17]=-1;
Carlist[playerid][CarKey[playerid]][Paintjob]=-1;
Carlist[playerid][CarKey[playerid]][OwnerID] = playerid;
Carlist[playerid][CarKey[playerid]][SpawnSaveX]=0.0;
Carlist[playerid][CarKey[playerid]][SpawnSaveY]=0.0;
Carlist[playerid][CarKey[playerid]][SpawnSaveZ]=0.0;
Carlist[playerid][CarKey[playerid]][SpawnSaveRot]=0.0;
Carlist[playerid][CarKey[playerid]][TankVolumen]=0;
Carlist[playerid][CarKey[playerid]][StandTime] = 0;
Carlist[playerid][CarKey[playerid]][Neon]=0;
Carlist[playerid][CarKey[playerid]][NeonType]=1;
format(string, sizeof(string), "Du hast erfolgreich dein Auto für %s$ verkauft!",GetPoint(preis));
SendClientMessage(playerid, COLOR_RED, string);
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "%s hat sein Auto verkauft!",sendername,preis);
printf(string);
}
else
{
SendClientMessage(playerid, COLOR_ERRORTEXT, " Du besitzt zur Zeit kein Auto auf dem ausgewählten Schlüssel !");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_ERRORTEXT, " Du besitzt kein Auto auf dem ausgewählten Schlüssel !");
return 1;
}
return 1;
} -
Ändere AddStaticVehicle zu AddStaticVehicleEx.
Und mach das return 1; nach dem Create3DTextLabel weg. -
Das ist doch nicht nichts, das ist doch wichtig.
Poste bitte das enum ahModell, dann stelle ich dir das kurz um. -
format(string2,sizeof(string2),"~r~Tank:~g~ %s %d", Tank, Gas[VID]);
zu:
format(string2,sizeof(string2),"~r~Tank:%s%0.1f", Tank, Gas[VID]);Das hättest du auch selbst sehen können, oder?

-
Dann mach eben ein statisches Fraktionssystem, allerdings macht das wenig Sinn, da die Daten nach dem Neustart des Servers ja wieder weg wären.
Vom Aufbau wäre es identisch, außer dass du eben nichts aus Dateien lädst, sondern alles in den Code schreibst, was ja keinen Sinn macht.