Sobald ich TextDraw TeamTextDraw[4], TextDraw TeamTextDraw[6] und TextDraw TeamTextDraw[11] drücke, wird der Mauszeiger immer noch angezeigt, obwohl ich es ausschalte.
public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
if(_:clickedid == INVALID_TEXT_DRAW)return SelectTextDraw(playerid, 0x00FF00FF);
if(clickedid == TeamTextDraw[4])
{
if(PlayerInfo[playerid][p_Team] == 1)return SendClientMessage(playerid, COLOR_GREY, " Du gehörst schon zum Team der Gangster.");
PlayerInfo[playerid][p_Team] = 1;
SendClientMessage(playerid, COLOR_RED, " Du hast dich für den Gangster entschieden.");
CancelSelectTextDraw(playerid);
for(new i=0; i < 12; i++)TextDrawHideForPlayer(playerid, TeamTextDraw[i]);
return 1;
}
if(clickedid == TeamTextDraw[6])
{
if(PlayerInfo[playerid][p_Team] == 2)return SendClientMessage(playerid, COLOR_GREY, " Du gehörst schon zum Team der Polizsten.");
PlayerInfo[playerid][p_Team] = 2;
SendClientMessage(playerid, COLOR_BLUE, " Du hast dich für den Polizisten entschieden.");
CancelSelectTextDraw(playerid);
for(new i=0; i < 12; i++)TextDrawHideForPlayer(playerid, TeamTextDraw[i]);
return 1;
}
if(clickedid == TeamTextDraw[11])
{
for(new i=0; i < 12; i++)TextDrawHideForPlayer(playerid, TeamTextDraw[i]);
CancelSelectTextDraw(playerid);
return 1;
}
return 1;
}
Beiträge von malE
-
-
Sobald ich ein TextDraw ausgewählt habe, wird der Mauszeiger immer noch angezeigt, obwohl ich es ausschalte.
public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
if(_:clickedid == INVALID_TEXT_DRAW)return SelectTextDraw(playerid, 0x00FF00FF);
if(clickedid == TeamTextDraw[4])
{
PlayerInfo[playerid][p_Team] = 0;
SendClientMessage(playerid, COLOR_RED, " Du hast dich für den Gangster entschieden.");
CancelSelectTextDraw(playerid);
for(new i=0; i < 11; i++)TextDrawHideForPlayer(playerid, TeamTextDraw[i]);
return 1;
}
if(clickedid == TeamTextDraw[6])
{
PlayerInfo[playerid][p_Team] = 1;
SendClientMessage(playerid, COLOR_BLUE, " Du hast dich für den Polizisten entschieden.");
CancelSelectTextDraw(playerid);
for(new i=0; i < 11; i++)TextDrawHideForPlayer(playerid, TeamTextDraw[i]);
return 1;
}
return 1;
} -
Danke dir vielmals.
Wie kann ich z.B via PlayerInfo[playerid][p_ID] ( DB ID ) den Spielernamen ermitteln?C
Alles anzeigenstock GetNameEx(playerid) { new query[256]; format(query, sizeof(query), "SELECT * FROM `users` WHERE `id`='%s'", PlayerInfo[i][p_ID]); mysql_function_query(handle, query, true, "GetPlayerNameEx", "i", playerid); return 1; } public GetPlayerNameEx(playerid) { new name[MAX_PLAYER_NAME]; name = cache_get_field_content(0, "name", handle); return name; }
Irgendwie so. Bin aber leider durcheinander gekommen und jetzt bin ich verwirrt.
-
Alles klar danke dir.
Jetzt funktioniert alles einwandfrei.-
Hast du vielleicht noch eine Funktion die einen kleingeschriebenden Text in Großbuchstaben formatiert? -
Wie soll ich sonst den Server beenden?
-
Gar nichts.
Also wenn ich die server.exe schließen und im server-log.txt reinschaue steht kein Print. -
Gut danke. Die Pflanze wird jetzt auch in der Datenbank entfernt.
Aber das Problem, welches die Pflanzen nicht speichert besteht immer noch. -
Sollte so funktionieren.
C
Alles anzeigenFunction IdleKick() { for(new i = 0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue; if(PlayerInfo[i][pAdmin] > 0 && AdminDuty[i] == 1)continue; GetPlayerPos(i, PlayerPos[i][0], PlayerPos[i][1], PlayerPos[i][2]); if(PlayerPos[i][0] == PlayerPos[i][3] && PlayerPos[i][1] == PlayerPos[i][4] && PlayerPos[i][2] == PlayerPos[i][5]) { if(gPlayerLogged[i] == 1) { new string[128]; format(string, sizeof(string), "{F3FF02}[{FFFFFF}ServerSystem{F3FF02}]: %s wurdest vom System gekickt. Grund: Inaktiv", GetName(i)); SendClientMessageToAll(0xAFAFAFAA,string); FreezePlayer(i); Kick(i); } } PlayerPos[i][3] = PlayerPos[i][0]; PlayerPos[i][4] = PlayerPos[i][1]; PlayerPos[i][5] = PlayerPos[i][2]; } }
-
Okey. Soweit so gut. Es scheint jetzt zufunktionieren.
Bei dem Befehl wird die Pflanze nicht aus der Datenbank entfernt.
C
Alles anzeigenocmd:abernten(playerid, params[]) { for(new i=0; i < sizeof(DrugInfo); i++) { if(IsPlayerInRangeOfPoint(playerid, 1.5, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ])) { if(DrugInfo[i][d_Besitzer] != PlayerInfo[playerid][p_ID])return 1; if(DrugInfo[i][d_Prozent] < 90)return SendClientMessage(playerid, COLOR_GREY, "Die Pflanze ist noch nicht ausgereift."); DrugInfo[i][d_PosX] = 0; DrugInfo[i][d_PosY] = 0; DrugInfo[i][d_PosZ] = 0; DrugInfo[i][d_Wasser] = 0; DrugInfo[i][d_Zustand] = 0; DrugInfo[i][d_Prozent] = 0; DestroyObject(DrugInfo[i][d_Objekt]); Delete3DTextLabel(DrugInfo[i][d_Label]); new query[256]; format(query, sizeof(query), "DELETE FROM drugs WHERE id='%d'", DrugInfo[i][d_ID]); mysql_function_query(handle, query, false, "", ""); } } return 1; }
Außerdem funktioniert die Speicherung leider immer noch nicht.
-
Darf ich Fragen wie du den PAWN-Quellcode benutzt?
Bei mir wird das immer so abgesendet: Bild. -
C
stock UpdateDrugLabel(id) { for(new i=0; i < sizeof(DrugInfo); i++) { new label[145]; format(label, sizeof(label), "[ Zustand: %d ]\n[ Wasser: %d ]\n[ Prozent: %d ]", DrugInfo[id][d_Zustand], DrugInfo[id][d_Wasser], DrugInfo[id][d_Prozent]); Update3DTextLabelText(DrugInfo[id][d_Label], 0xFFFFFFFF, label); } }
-
Vorab es hat an jeder Pflanze funktioniert, aber nur die Pflanze ID 0 wurde auf 100 gesetzt laut 3DTextLabel.
Wie gesagt es wird im Callback OnGameModeExit() aufgerufen.
Falls die Frage auftaucht, Ja ich lasse den stock vor mysql_close() aufrufen. -
Code
Alles anzeigenforward OnPlayerDrugsLoad(); public OnPlayerDrugsLoad() { new num_fields, num_rows, count = 0; cache_get_data(num_rows, num_fields, handle); if(!num_rows)return 1; for(new i=0; i < num_rows; i++) { DrugInfo[i][d_Besitzer] = cache_get_field_content_int(i, "besitzer", handle); DrugInfo[i][d_Zustand] = cache_get_field_content_int(i, "zustand", handle); DrugInfo[i][d_Wasser] = cache_get_field_content_int(i, "wasser", handle); DrugInfo[i][d_Prozent] = cache_get_field_content_int(i, "prozent", handle); DrugInfo[i][d_PosX] = cache_get_field_content_float(i, "x", handle); DrugInfo[i][d_PosY] = cache_get_field_content_float(i, "y", handle); DrugInfo[i][d_PosZ] = cache_get_field_content_float(i, "z", handle); DrugInfo[i][d_Objekt] = CreateObject(DROGENOBJEKT, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ], 0.0, 0.0, 0.0); DrugInfo[i][d_Erstellt] = true; new str[145]; format(str, sizeof(str), "[ Zustand: %d ]\n[ Wasser: %d ]\n[ Prozent: %d ]", DrugInfo[i][d_Zustand], DrugInfo[i][d_Wasser], DrugInfo[i][d_Prozent]); Create3DTextLabel(str, COLOR_WHITE, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ], 10.0, 0, 0); count ++; } printf("[INFO] %i/%i Drogenpflanze geladen.", count, sizeof(DrugInfo)); return 1; }
Außerdem wird die Pflanze ID 3 anscheint nicht gespeichert.
OnGameModeExit:Codestock SavePlayerDrugs() { new query[256]; for(new i=0; i < sizeof(DrugInfo); i++) { mysql_format(handle, query, sizeof(query), "UPDATE drugs SET prozent='%d', wasser='%d', zustand='%d' WHERE id='%d'", DrugInfo[i][d_Prozent], DrugInfo[i][d_Wasser], DrugInfo[i][d_Zustand], DrugInfo[i][d_ID]); mysql_pquery(handle, query); print(query); } }
Es wird nichts geprintet. -
Keine schlechte Frage .
Aber es ist egal an welche Pflanze ich stehe, es wird nur die Pflanze ID 3 gepusht. -
-
Hallo
habe mir aus Testzwecken ein /pushpflanze Befehl erstellt.
Problem ist aber das der Befehl nur bei der ersten Pflanze funktioniert.C
Alles anzeigenocmd:pushpflanze(playerid, params[]) { if(PlayerInfo[playerid][p_Admin] < 6)return 1; for(new i=0; i < sizeof(DrugInfo); i++) { if(IsPlayerInRangeOfPoint(playerid, 1.5, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ])) { DrugInfo[i][d_Prozent] = 100; new str[145]; format(str, sizeof(str), " Du hast die Pflanze %i auf 100 Prozent gesetzt.", i); SendClientMessage(playerid, 0xFF5559FF, str); UpdateDrugLabel(i); } else return SendClientMessage(playerid, COLOR_GREY, "Es ist keine Drogenpflanze in deiner Nähe."); } return 1; }
-
Du hidest auch nirgendswo die TextDraws.
Du musst wenn schon auch im public OnPlayerClickTextDraw die Textdraws hiden. -
// Edit
Die Pflanzen werden nun erstellt. Als ich ein Blick in den MySQL Log geworfen habe, ist mir aufgefallen das die Koords falls gespeichert wurden.
Ergo: Objekt wurde erstellt aber an falschen Koords, da die Koords falsch abgespeichert wurden beim erstellen einer Pflanze.
Trotzdem danke! -
Ja habe ich auch schon versucht, ich hatte schon mal z.B 6 Pflanzen, keine einzige ist erstellt wurden.
-
Ok danke für die Empfehlung. Problem besteht leider immer noch.
-
@Jeffry
Die Pflanze ( das Objekt ) wird nicht erstellt.
1000 Objekte sind auf jeden Fall nicht erreicht.C
Alles anzeigenforward OnPlayerDrugsLoad(); public OnPlayerDrugsLoad() { new num_fields, num_rows, count = 0; cache_get_data(num_rows, num_fields, handle); if(!num_rows)return 1; for(new i=0; i < num_rows; i++) { new id = SearchFreeDrugID(); DrugInfo[id][d_Besitzer] = cache_get_field_content_int(i, "besitzer", handle); DrugInfo[id][d_Zustand] = cache_get_field_content_int(i, "zustand", handle); DrugInfo[id][d_Wasser] = cache_get_field_content_int(i, "wasser", handle); DrugInfo[id][d_Prozent] = cache_get_field_content_int(i, "prozent", handle); DrugInfo[id][d_PosX] = cache_get_field_content_float(i, "x", handle); DrugInfo[id][d_PosY] = cache_get_field_content_float(i, "y", handle); DrugInfo[id][d_PosZ] = cache_get_field_content_float(i, "z", handle); DrugInfo[id][d_Objekt] = CreateObject(826, DrugInfo[id][d_PosX], DrugInfo[id][d_PosY], DrugInfo[id][d_PosZ], 0.0, 0.0, 0.0); count ++; } printf("[INFO] %i/%i Drogenpflanze geladen.", count, sizeof(DrugInfo)); return 1; }
Cstock SearchFreeDrugID() { for(new i=0; i < sizeof(DrugInfo); i++) { if(DrugInfo[i][d_Objekt] == 0)return i; } return 0; }