Ich gehe stark davon aus, dass rInfo[fID][fRang] den Fehler verursacht, dort könnte eventuell das Array gesprengt werden.
Wie ist denn das rInfo deklariert?
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Ich gehe stark davon aus, dass rInfo[fID][fRang] den Fehler verursacht, dort könnte eventuell das Array gesprengt werden.
Wie ist denn das rInfo deklariert?Hey hab das alles mal geändert.
Das Enum:
enum frakrangEnum{
r_fid,
r_frang,
r_frang_name[128]
}
new rInfo[][frakrangEnum];der Befehl:
ocmd@2:f,familie(playerid,params[])
{
if(isPlayerInFrakt(playerid, 0))return SCM(playerid, ERROR_FARBE, ERROR_FRAKTION);
new string[256];
if(sscanf(params, "s", string))return SCM(playerid, -1, "Tippe: /f [nachricht]");
new fID = PlayerInfo[playerid][pF_id];
new fRang = PlayerInfo[playerid][pF_rank];
format(string,sizeof(string),"**((%s %s: %s ))**",rInfo[fID][fRang],NamePlayer(playerid), string);// 683
for(new i=0; i<MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i))continue;
if(!isPlayerInFrakt(i, fID))continue;
SCM(i, BABYBLAU, string);
}
return 1;
}forward LoadFractionsRangNames_Data();
public LoadFractionsRangNames_Data()
{
new rows, i;
rows = cache_num_rows();
for(i=0; i < rows; i++)
{
cache_get_value_name_int(i, "fid", rInfo[i][r_fid]);
cache_get_value_name_int(i, "f_rang", rInfo[i][r_frang]);
cache_get_value_name(i, "f_rang_name", fInfo[i][r_frang_name], 128); //1066
}
printf("[FRAKTION-RANGS] %d/%d geladen.", i, rows);
return 1;
}leider bekomme ich zwei Warnings:
C:\Users\Patrick\Desktop\Server\gamemodes\server.pwn(683) : warning 213: tag mismatch
C:\Users\Patrick\Desktop\Server\gamemodes\server.pwn(1066) : warning 213: tag mismatch--
Ich brauche doch zwei Werte für meine Abfrage einmal die Fraktion und einmal den Rang. hast du ne Idee? -
Ich brauche doch zwei Werte für meine Abfrage einmal die Fraktion und einmal den Rang. hast du ne Idee?
Das enum brauchst du nicht, mache es so:
new rName[MAX_FRAKS][MAX_RANKS][32];Und dann der Zugriff so:
rName[fID][fRang]Sprich beim Laden dann so:
forward LoadFractionsRangNames_Data();
public LoadFractionsRangNames_Data()
{
new rows, i, fID, fRang;
rows = cache_num_rows();
for(i=0; i < rows; i++)
{
cache_get_value_name_int(i, "fid", fID);
cache_get_value_name_int(i, "f_rang", fRang);
cache_get_value_name(i, "f_rang_name", rName[fID][fRang], 128); //1066
}
printf("[FRAKTION-RANGS] %d/%d geladen.", i, rows);
return 1;
} -
Das enum brauchst du nicht, mache es so:new rName[MAX_FRAKS][MAX_RANKS][32];
Und dann der Zugriff so:
rName[fID][fRang]Sprich beim Laden dann so:
forward LoadFractionsRangNames_Data();public LoadFractionsRangNames_Data(){ new rows, i, fID, fRang; rows = cache_num_rows(); for(i=0; i < rows; i++) { cache_get_value_name_int(i, "fid", fID); cache_get_value_name_int(i, "f_rang", fRang); cache_get_value_name(i, "f_rang_name", fInfo[fID][fRang], 128); //1066 } printf("[FRAKTION-RANGS] %d/%d geladen.", i, rows); return 1;}Mein Compiler Stürzt ab. Ich habe anstatt des Enums das: new rName[MAX_FRAKS][MAX_RANKS][32];
Der Befehl ist so:
ocmd@2:f,familie(playerid,params[])
{
if(isPlayerInFrakt(playerid, 0))return SCM(playerid, ERROR_FARBE, ERROR_FRAKTION);
new string[256];
if(sscanf(params, "s", string))return SCM(playerid, -1, "Tippe: /f [nachricht]");
new fID = PlayerInfo[playerid][pF_id];
new fRang = PlayerInfo[playerid][pF_rank];
format(string,sizeof(string),"**((%s %s: %s ))**",rName[fID][fRang],NamePlayer(playerid), string);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i))continue;
if(!isPlayerInFrakt(i, fID))continue;
SCM(i, BABYBLAU, string);
}
return 1;
}und das laden so:
forward LoadFractionsRangNames_Data();
public LoadFractionsRangNames_Data()
{
new rows, i, fID, fRang;
rows = cache_num_rows();
for(i=0; i < rows; i++)
{
cache_get_value_name_int(i, "fid", fID);
cache_get_value_name_int(i, "f_rang", fRang);
cache_get_value_name(i, "f_rang_name", fInfo[fID][fRang], 128); //1066
}
printf("[FRAKTION-RANGS] %d/%d geladen.", i, rows);
return 1;
} -
Hast du MAX_FRAKS und MAX_RANKS auch definiert?
#define MAX_FRAKS 10
#define MAX_RANKS 510 und 5 natürlich an deine Werte anpassen.
Hast du die rInfo Variable komplett entfernt?
-
Hast du MAX_FRAKS und MAX_RANKS auch definiert?
#define MAX_FRAKS 10#define MAX_RANKS 510 und 5 natürlich an deine Werte anpassen.
Hast du die rInfo Variable komplett entfernt?
Ups, hab das #define unter der Anwendung gemacht. Jetzt gehts.
Hatte ein Warning hab dann fInfo zu rName geändert und dann war der warning weg. War meine Handlung richtig?
forward LoadFractionsRangNames_Data();
public LoadFractionsRangNames_Data()
{
new rows, i, fID, fRang;
rows = cache_num_rows();
for(i=0; i < rows; i++)
{
cache_get_value_name_int(i, "fid", fID);
cache_get_value_name_int(i, "f_rang", fRang);
cache_get_value_name(i, "f_rang_name", rName[fID][fRang], 128); //rName war früher fInfo
}
printf("[FRAKTION-RANGS] %d/%d geladen.", i, rows);
return 1;
} -
-
Hey warum funktioniert meine Abfrage nicht?
stock isPlayerInStaatFrakt(playerid){
if(fInfo[PlayerInfo[playerid][pF_id]][f_typ]==1)return 1;
return 0;
}
Enum dazu:
enum fraktEnum{
fid,
f_name[256],
f_shortname[64],
Float:f_x,
Float:f_y,
Float:f_z,
Float:f_r,
f_inter,
f_world,
f_typ,
f_cop,
f_leaderskin,
f_kasse,
f_mats,
f_drogen,
f_color[64]
}
new fInfo[MAX_FRAC][fraktEnum]; -
printe doch den wert von playerinfo und dann den von f_ftype

Eventuell wurde da was nicht richtig zugewiesen

-
printe doch den wert von playerinfo und dann den von f_ftype

Eventuell wurde da was nicht richtig zugewiesen

stock isPlayerInStaatFrakt(playerid){
printf("STAAT - %d / %d", PlayerInfo[playerid][pF_id], fInfo[PlayerInfo[playerid][pF_id]][f_typ]);
if(fInfo[PlayerInfo[playerid][pF_id]][f_typ]==1)return 1;
return 0;
}
Hab es so geprintet und es ist alles richtig? -
Hab es so geprintet und es ist alles richtig?
Nun solltest du uns noch den Auszug aus der Server_Log geben, indem es ausgegeben wurde oder selbst schauen ob das ganze richtig ist und passt
-
Beitrag von The Sensei ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: neue Frage (). -
Hey, mein Haussystem spinnt. Es werden 200 Häuser erstellt(MAX_HOUSE Wert). Kann mir einer erklären warum?
@Jeffryocmd:chouse(playerid, params[])
{
new price, interior, typ;
if(!isPlayerAnAdmin(playerid,4))return SCM(playerid, ERROR_FARBE, ERROR_ADMIN);
if(sscanf(params,"ddd",price,interior,typ))return SCM(playerid, -1, "Tippe: /chouse [price] [interior] [typ]");
for(new i=0; i<MAX_HOUSE; i++)
{
if(strval(hInfo[i][house_id])) continue;
new Float:x, Float:y, Float:z, string[64], string2[MAX_PLAYER_NAME], query[512];
GetPlayerPos(playerid, x, y, z);
format(string,sizeof(string), "Zum verkauf");
format(string2,sizeof(string2), "Niemand");
hInfo[i][house_id] = i;
hInfo[i][house_owner] = string2;
hInfo[i][house_description] = string;
hInfo[i][house_price] = price;
hInfo[i][house_interior] = interior;
hInfo[i][house_typ] = typ;
hInfo[i][house_x] = x;
hInfo[i][house_y] = y;
hInfo[i][house_z] = z;
format(query, sizeof(query), "INSERT INTO houses (id, owner, description, price, interior, posx, posy, posz, typ) VALUES ('%d', '%s', '%s', '%d', '%d', '%f', '%f', '%f', '%d')",
i, hInfo[i][house_owner], hInfo[i][house_description], hInfo[i][house_price], hInfo[i][house_interior], hInfo[i][house_x], hInfo[i][house_y], hInfo[i][house_z], hInfo[i][house_typ]);
mysql_tquery(handle, query);
format(string,sizeof(string), "Du hast erfolgreich das Haus(ID: %d) erstellt.",i);
printf("%s", query);
SCM(playerid, BABYBLAU, string);
}
return 1;
} -
Weil du in der Schleife unten ein break; setzen musst...sonst hört die Schleife ja nicht auf

-
Weil du in der Schleife unten ein break; setzen musst...sonst hört die Schleife ja nicht auf

Wenn ich das break; unter SCM mache erstellt er immer nur ID 0. Mache ich es anstatt des continue; erstellt er wieder alles?
-
weil deine if abfrage irgendwie keinen Sinn ergibt, wenn ich nicht falsch bin, setz am besteln Standard mässig die house_id auf -1 und frag ab ob ein haus -1 hat, wenn ja nimm i.
-
-
CreateDynamicObject(2901,0,0,-1000,0,0,0,100);
Du solltest dir mal die Parameter angucken von CreateDynamicObject.
Der letzte Parameter den du dort angibst ist deine WorldID nicht die Drawdistance, wie bei CreateObject.Du solltest das mal so probieren
CreateDynamicObject(2901,0,0,-1000,0,0,0, .drawdistance = 100); -
-
Hi.
Man sollte in verschiedene World's keine Befehle eingeben können.
Inwiefern sollte es gehen? -
