Moin.
Heute hatte ich mir ein Script zusammgenschuster und habe es dann anschließend getestet, ob es erwartungsgemäß ausgeführt wird.
Im Script verändere ich zum reinen Testen die Textdraws random, also anzeigen, nicht anzeigen.
Und hiervor ist der fehler schon aufgetreteten.
Die Textdraw IDs werden nicht korrekt abgespeichert, obwohl das der Fall sein sollte.
Ich zeige einmal den Code:
C
#include <a_samp>
#define MAX_COL_ROWS 16
enum E_interactWithOption {
PlayerText:ptdID,
}
static interactWithOptionTitels[8][64 char] = {
"Benutzen","Anlegen","Untersuchen","Fallen lassen","Abbrechen","UNKNOWN TITEL","UNKNOWN TITEL","UNKNOWN TITEL"
};
new PlayerText:ptdCol_1[MAX_PLAYERS][MAX_COL_ROWS];
new playerUseCol_1[MAX_PLAYERS][MAX_COL_ROWS][E_interactWithOption];
ShowInteractMenu(p){
new row;
new msg[128];
for(new i = 0;i<8;i++){
if(random(3)==1){
PlayerTextDrawSetString(p,ptdCol_1[p][row],interactWithOptionTitels[i]);
playerUseCol_1[p][i][ptdID] = ptdCol_1[p][row];
PlayerTextDrawShow(p,ptdCol_1[p][row]);
row++;
} else {
format(msg,sizeof(msg),"Du kannst nicht %s auswählen.",interactWithOptionTitels[i]);
SendClientMessage(p,-1,msg);
}
}
return 1;
}
HideInteractMenu(playerid){
for(new i =0;i<8;i++){
PlayerTextDrawHide(playerid,playerUseCol_1[playerid][i][ptdID]);
}
}
GetInteractMenuActionTitel(playerid,PlayerText:playertextid){
new a[64 char] = {" "};
for(new i = 0;i<8;i++){
if(playerUseCol_1[playerid][i][ptdID] == playertextid){
return interactWithOptionTitels[i];
}
}
return a;
}
createCol_1(p){
new Float:posX = 5.0; new Float:posY= 140.0;
new Float:TextSizeH = 11.25; new Float:TextSizeW = 88.0;
new Float:LetterSizeH = 0.225; new Float:LetterSizeW = 1.5;
new bgColor = 255; new boxColor = -1933334211; new color = -1523963137;
for(new i =0;i<8;i++){
ptdCol_1[p][i] = CreatePlayerTextDraw(p,posX,posY+(20*i),"_");
PlayerTextDrawLetterSize(p,ptdCol_1[p][i],LetterSizeH,LetterSizeW);
PlayerTextDrawTextSize(p,ptdCol_1[p][i],TextSizeW,TextSizeH);
PlayerTextDrawBackgroundColor(p,ptdCol_1[p][i],bgColor);
PlayerTextDrawFont(p,ptdCol_1[p][i],1);
PlayerTextDrawSetShadow(p,ptdCol_1[p][i], 0);
PlayerTextDrawSetOutline(p,ptdCol_1[p][i], 1);
PlayerTextDrawSetProportional(p,ptdCol_1[p][i],1);
PlayerTextDrawUseBox(p,ptdCol_1[p][i], true);
PlayerTextDrawColor(p,ptdCol_1[p][i],color);
PlayerTextDrawBoxColor(p,ptdCol_1[p][i], boxColor);
PlayerTextDrawSetSelectable(p,ptdCol_1[p][i],true);
}
}
public OnPlayerConnect(playerid){
createCol_1(playerid);
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/show", cmdtext, true, 10) == 0){
ShowInteractMenu(playerid);
SelectTextDraw(playerid, 0x00FF00FF);
return 1;
}
if (strcmp("/hide", cmdtext, true, 10) == 0){
HideInteractMenu(playerid);
return 1;
}
return 0;
}
public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid){
SendClientMessage(playerid, 0xFFFFFFAA, "You clicked on a textdraw.");
HideInteractMenu(playerid);
CancelSelectTextDraw(playerid);
new msg[128];
format(msg,sizeof(msg),"PTD ID:%i Aktion:%s",PlayerText:playertextid,GetInteractMenuActionTitel(playerid,playertextid));
SendClientMessage(playerid,-1,msg);
}
Alles anzeigen
Wenn ihr beim durchlesen auch denkt, das es korrekt sein sollte, dann testet es ruhig einmal.
Zur Testzwecken habe ich das erstmal über einen Befehl aufrufbar gemacht "/show" und die Textdraws sollten ordnungsgemäß auftauchen.
Ich hoffe ihr findet meinen Fehler, denn ich erkenne diesen nicht im Script.
Gruß
Bennyy