Hey,
ich habe mir eine Skinauswahl gemacht!
jedoch werden die daten aus dem array nicht richtig gelesen
Hier ist der Array:
new skins[][] = {
{280,281,282,284,283,288}
};
und hier der aufruf
if(GetPlayerFraktion(pid) == 1){SetPlayerSkin(pid,skins[0][0]);}
//edit okey es liegt nicht dran sondern daran:
//OnPlayerText
if(Skinauswahl[playerid] == 1)
{
new idx;
new tmp[256];
tmp = strtok(text, idx);
if ((strcmp("weiter", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("weiter")))
{
if(GetPlayerFraktion(playerid) == 1)
{
if(CheckLeader(playerid))
{
if(GetPlayerSkin(playerid) == skins[0][4]){SetPlayerSkin(playerid,skins[0][5]);}
if(GetPlayerSkin(playerid) == skins[0][5]){SetPlayerSkin(playerid,skins[0][4]);}
return 0;
}
else if(CheckMember(playerid))
{
if(GetPlayerSkin(playerid) == skins[0][0]){SetPlayerSkin(playerid,skins[0][1]);}
if(GetPlayerSkin(playerid) == skins[0][1]){SetPlayerSkin(playerid,skins[0][2]);}
if(GetPlayerSkin(playerid) == skins[0][2]){SetPlayerSkin(playerid,skins[0][3]);}
if(GetPlayerSkin(playerid) == skins[0][3]){SetPlayerSkin(playerid,skins[0][0]);}
return 0;
}
}
}
else if ((strcmp("fertig", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("fertig")))
{
SetPlayerInt(playerid,"Skin",GetPlayerSkin(playerid));
OnPlayerSpawn(playerid);
SetCameraBehindPlayer(playerid);
return 0;
}
}
Also, er erkennt die Wörter stezt aber nicht das was darin ist um, und macht dannach noch den normalen realen chat O.o
mfg
-
-
Versuch mal so:
new skins[6][1] = {
{280}, {281}, {282}, {284}, {283}, {288}
};Und dann einfach per skins[0], skins[1] usw abrufen.
-
Was macht ihr denn da
?
EvilToastBrot,
Ne,so würde er immernoch folgendes machen müssen:
skins[INDEX][0]So ist es doch am einfachsten:
new
skins[] = {
280,
281,
282,
284,
283,
288
};Dann machst du
skins[ INDEX ]
anstatt
skins[0][ INDEX ]
// bzw
skins[ INDEX ][0]Würde dann so aussehen:
//OnPlayerText
if(Skinauswahl[playerid] == 1)
{
new idx;
new tmp[256];
tmp = strtok(text, idx);
if ((strcmp("weiter", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("weiter")))
{
if(GetPlayerFraktion(playerid) == 1)
{
if(CheckLeader(playerid))
{
if(GetPlayerSkin(playerid) == skins[4]){SetPlayerSkin(playerid,skins[5]);}
if(GetPlayerSkin(playerid) == skins[5]){SetPlayerSkin(playerid,skins[4]);}
return 0;
}
else if(CheckMember(playerid))
{
if(GetPlayerSkin(playerid) == skins[0]){SetPlayerSkin(playerid,skins[1]);}
if(GetPlayerSkin(playerid) == skins[1]){SetPlayerSkin(playerid,skins[2]);}
if(GetPlayerSkin(playerid) == skins[2]){SetPlayerSkin(playerid,skins[3]);}
if(GetPlayerSkin(playerid) == skins[3]){SetPlayerSkin(playerid,skins[0]);}
return 0;
}
}
}
else if ((strcmp("fertig", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("fertig")))
{
SetPlayerInt(playerid,"Skin",GetPlayerSkin(playerid));
OnPlayerSpawn(playerid);
SetCameraBehindPlayer(playerid);
return 0;
}
}
// Replace-Funktion von PAWNO benutzt -
das liegt nicht mehr an dem array sondern an dem "weiter" bzw "fertig"
wenn ich weiter tippe spawne ich legendlich neu und habe keinen anderen skin und es gibt immer der normale chat!
dann kommt bei "fertig" auch immer der normale chat und ich werde dann einfach gespawnt( was ja auch richtig ist) -
Ist ja auch normal.
Du müsstest dann per http://wiki.sa-mp.com/wiki/SetSpawnInfo den Skin des Spielers ändern. Dazu müsstest du aber auch wieder alle Daten wie Spawn-Pos usw wissen.Nicht die beste Lösung.Eine Andere Möglichkeit wäre,so mach Ich es zB, eine Variable zu haben und daran festlegen,ob der Skin geändert werden muss.
#define INVALID_PLAYERSKIN -1
new
iPlayerSkin[MAX_PLAYERS];//OnPlayerConnect
iPlayerSkin[playerid] = INVALID_PLAYERSKIN;
// bei "fertig" mit SkinChange
iPlayerSkin[playerid] = GetPlayerSkin(playerid);//OnPlayerSpawn
if( iPlayerSkin[playerid] != INVALID_PLAYERSKIN) {
SetPlayerSkin(playerid,iPlayerSkin[playerid]);
} -
Ist ja auch normal.
Du müsstest dann per http://wiki.sa-mp.com/wiki/SetSpawnInfo den Skin des Spielers ändern. Dazu müsstest du aber auch wieder alle Daten wie Spawn-Pos usw wissen.Nicht die beste Lösung.Eine Andere Möglichkeit wäre,so mach Ich es zB, eine Variable zu haben und daran festlegen,ob der Skin geändert werden muss.
#define INVALID_PLAYERSKIN -1
new
iPlayerSkin[MAX_PLAYERS];//OnPlayerConnect
iPlayerSkin[playerid] = INVALID_PLAYERSKIN;
// bei "fertig" mit SkinChange
iPlayerSkin[playerid] = GetPlayerSkin(playerid);//OnPlayerSpawn
if( iPlayerSkin[playerid] != INVALID_PLAYERSKIN) {
SetPlayerSkin(playerid,iPlayerSkin[playerid]);
}das geht ja auch soweit
nur bei weiter bzw fertig kapiert der das net das ich das getippt habe -
new idx;
new tmp[256];
tmp = strtok(text, idx);Haste ausm GF oder?
Wiso eigentlich tmp = strtok(cmdtext, idx);
Kann man da nicht einfach if(!strcmp(text, "weiter", true)) machen? Weil 'text' ist ja dann 'weiter'. -
new idx;
new tmp[256];
tmp = strtok(text, idx);Haste ausm GF oder?
Wiso eigentlich tmp = strtok(cmdtext, idx);
Kann man da nicht einfach if(!strcmp(text, "weiter", true)) machen? Weil 'text' ist ja dann 'weiter'.
hatte ich erst aber funktioniert auch nicht//edit: Push
-
Zeig mal den Abschnitt direkt unter OnPlayerText der mit "Weiter" bzw "fertig" zusammen hängt.
public OnPlayerText(playerid, text[])
{
if( !strcmp(text,"weiter") ) {
}
return 1;
}
So wie EvilToastBrot schon sagte,würde es so auch klappen.Bist du dir denn sicher,dass die if Abfrage mit if(Skinauswahl[playerid] == 1) nicht scheitert ? Füg einfach mal Debug-Notes ein über der if Abfrage:
printf("Skinauswahl[%d] = %d",playerid,Skinauswahl[playerid]);
if(Skinauswahl[playerid] == 1){
printf("text = '%s'",text);
} -
Zeig mal den Abschnitt direkt unter OnPlayerText der mit "Weiter" bzw "fertig" zusammen hängt.
public OnPlayerText(playerid, text[])
{
if( !strcmp(text,"weiter") ) {
}
return 1;
}
So wie EvilToastBrot schon sagte,würde es so auch klappen.Bist du dir denn sicher,dass die if Abfrage mit if(Skinauswahl[playerid] == 1) nicht scheitert ? Füg einfach mal Debug-Notes ein über der if Abfrage:
printf("Skinauswahl[%d] = %d",playerid,Skinauswahl[playerid]);
if(Skinauswahl[playerid] == 1){
printf("text = '%s'",text);
}
okey du hast recht! Es liegt an der CheckLeader Funktion!
stock CheckLeader(id)
{
new Query[128];
format(Query, sizeof(Query), "SELECT * FROM leader WHERE SpielerID = '%d'", id);
mysql_query(Query);
mysql_store_result();
return mysql_num_rows();
}
Der Mysqleintrag ist jedoch vorhanden!
//edit
genauso wie bei CheckMember!
stock CheckMember(id)
{
new Query[128];
format(Query, sizeof(Query), "SELECT * FROM members WHERE SpielerID = '%d'", id);
mysql_query(Query);
mysql_store_result();
return mysql_num_rows();
}//edit jedoch funktionieren beiede Funktionen bei der Abfrage von Befehlen!
-
-
Wieso machst du das denn überhaupt mit MYSQL ? Auch gut wäre zu wissen,welches MYSQL Plugin du benutzt. Du solltest nämlich auch mal mysql_free_result() benutzen, sonst kommt es irgendwann zu Fehlern ( Falls Ich es noch richtig in Erinnerung habe )
Ich erkenn ehrlich gesagt nicht den Sinn hinter den Funktionen. Wieso willst du denn Anhand der ID überprüfen,ob ein Spieler Leader ist oder Member,wobei du bei Member nirgendwo sagst Member von was. Seh Ich jedenfalls nicht. Macht sowas nicht mehr Sinn,anhand des Spielernamens ? ( ID ist natürlich auch möglich, sofern es pro Spieler eine einzigartige ID gibt. So wie USERID's hier im Forum ).Zeig mal wie du CheckLeader bzw CheckMember aufrufst.
-
breadfish.de
Hat das Thema geschlossen.