Wie startest du den Timer?
erledigt
- tayson87
- Geschlossen
- Erledigt
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
-
-
Unter OnGameModeInit
SetTimer("GrandTimer",1000,1);
-
Dann musst du das playerid aus dem Kopf der Funktion raus nehmen und eine Schleife durch alle Spieler in der Funktion machen.
-
also so ?
//Eine Sekunden Timer
forward GrandTimer();
public GrandTimer()
{
for(new i;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i))return 1;
if(IsPlayerNPC(i))return 1;
new string[300], query[128];
//Haussystem Textdraw
for(new haus=1;haus<MAX_HAUS;haus++)
{
if(HausInfo[haus][hauscreatet] != 0)
{
if(IsPlayerInRangeOfPoint(i,2,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]))
{
if(GetString(HausInfo[haus][haus_besitzer],"Niemand"))
{
format(string,sizeof(string),"Hausnummer: %i",haus);
PlayerTextDrawSetString(i,HausLabelTD[i][9],string);
format(string,sizeof(string),"Besitzer: ~w~Haus zum Verkauf");
PlayerTextDrawSetString(i,HausLabelTD[i][1],string);
format(string,sizeof(string),"Kosten: ~w~%i$",HausInfo[haus][haus_preis]);
PlayerTextDrawSetString(i,HausLabelTD[i][2],string);
format(string,sizeof(string),"Miete: ~w~%i$",HausInfo[haus][haus_miete]);
PlayerTextDrawSetString(i,HausLabelTD[i][3],string);
format(string,sizeof(string),"Level: ~w~%i",HausInfo[haus][haus_level]);
PlayerTextDrawSetString(i,HausLabelTD[i][4],string);
format(string,sizeof(string),"Mieter Slots: ~w~%i/%i",HausInfo[haus][haus_eingemitetenzaehler],HausInfo[haus][haus_slots]);
PlayerTextDrawSetString(i,HausLabelTD[i][5],string);
mysql_format(MySqlConnection,query,sizeof(query),"SELECT * FROM "#SQLTAG"_account_main WHERE `HausMieter` = '%d'", haus);
mysql_function_query(MySqlConnection,query,true,"LoadHouseRentFinish","siii",query,_SQL_HOUSEMIETER_LOAD,0,MySqlConnection);
PlayerTextDrawShow(i,HausLabelTD[i][0]);
PlayerTextDrawShow(i,HausLabelTD[i][1]);
PlayerTextDrawShow(i,HausLabelTD[i][2]);
PlayerTextDrawShow(i,HausLabelTD[i][3]);
PlayerTextDrawShow(i,HausLabelTD[i][4]);
PlayerTextDrawShow(i,HausLabelTD[i][5]);
PlayerTextDrawShow(i,HausLabelTD[i][6]);
PlayerTextDrawShow(i,HausLabelTD[i][7]);
PlayerTextDrawShow(i,HausLabelTD[i][8]);
PlayerTextDrawShow(i,HausLabelTD[i][9]);
}
else
{
format(string,sizeof(string),"Hausnummer: %i",haus);
PlayerTextDrawSetString(i,HausLabelTD[i][9],string);
format(string,sizeof(string),"Besitzer: ~w~%s",HausInfo[haus][haus_besitzer]);
PlayerTextDrawSetString(i,HausLabelTD[i][1],string);
format(string,sizeof(string),"Kosten: ~w~%i$",HausInfo[haus][haus_preis]);
PlayerTextDrawSetString(i,HausLabelTD[i][2],string);
format(string,sizeof(string),"Miete: ~w~%i$",HausInfo[haus][haus_miete]);
PlayerTextDrawSetString(i,HausLabelTD[i][3],string);
format(string,sizeof(string),"Level: ~w~%i",HausInfo[haus][haus_level]);
PlayerTextDrawSetString(i,HausLabelTD[i][4],string);
format(string,sizeof(string),"Mieter Slots: ~w~%i/%i",HausInfo[haus][haus_eingemitetenzaehler],HausInfo[haus][haus_slots]);
PlayerTextDrawSetString(i,HausLabelTD[haus][5],string);
mysql_format(MySqlConnection,query,sizeof(query),"SELECT * FROM "#SQLTAG"_account_main WHERE `HausMieter` = '%d'", haus);
mysql_function_query(MySqlConnection,query,true,"LoadHouseRentFinish","siii",query,_SQL_HOUSEMIETER_LOAD,0,MySqlConnection);
PlayerTextDrawShow(i,HausLabelTD[i][0]);
PlayerTextDrawShow(i,HausLabelTD[i][1]);
PlayerTextDrawShow(i,HausLabelTD[i][2]);
PlayerTextDrawShow(i,HausLabelTD[i][3]);
PlayerTextDrawShow(i,HausLabelTD[i][4]);
PlayerTextDrawShow(i,HausLabelTD[i][5]);
PlayerTextDrawShow(i,HausLabelTD[i][6]);
PlayerTextDrawShow(i,HausLabelTD[i][7]);
PlayerTextDrawShow(i,HausLabelTD[i][8]);
PlayerTextDrawShow(i,HausLabelTD[i][9]);
}
}
else if(!IsPlayerInRangeOfPoint(i,2,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]))
{
PlayerTextDrawHide(i,HausLabelTD[i][0]);
PlayerTextDrawHide(i,HausLabelTD[i][1]);
PlayerTextDrawHide(i,HausLabelTD[i][2]);
PlayerTextDrawHide(i,HausLabelTD[i][3]);
PlayerTextDrawHide(i,HausLabelTD[i][4]);
PlayerTextDrawHide(i,HausLabelTD[i][5]);
PlayerTextDrawHide(i,HausLabelTD[i][6]);
PlayerTextDrawHide(i,HausLabelTD[i][7]);
PlayerTextDrawHide(i,HausLabelTD[i][8]);
PlayerTextDrawHide(i,HausLabelTD[i][9]);
}
}
}
}
return 1;
} -
if(!IsPlayerConnected(i))return 1;
if(IsPlayerNPC(i))return 1;
zu:
if(!IsPlayerConnected(i))continue;
if(IsPlayerNPC(i))continue -
Nun ist das Problem, das man nur bei dem "neuesten" Haus das Textdraw sieht.. Bzw. zb ich erstelle viele Häuser, dann sieht man das Textdraw nur bei dem zuletzt erstellten Haus, sprich beim neusten Haus..
PS: Kannst gern aufm Server kommen und es selber sehen was ich meine.. einfach pn me
-
Wie erstellst du die Häuser?
-
mit einem Adminbefehl.
COMMAND:erstellen(playerid,params[])
{
if(ImTutorial[playerid] != 0)return SendClientMessage(playerid,GRAU,"Du kannst keine Befehle nutzen,da du im Tutorial bist.");
if(GetPVarInt(playerid,"Eingeloggt") == 0)return SendClientMessage(playerid,GRAU,"Du bist nicht eingeloggt!");
if(Spieler[playerid][pAWAYFROMKEYBOARD] == 1)return SendClientMessage(playerid,WRONGCMD,"Du bist im AFK-Modus und kannst somit keine Befehle nutzen."),SendClientMessage(playerid,WRONGCMD,"BENUTZE: /back");
if(Spieler[playerid][pInPrison] == 1)return SendClientMessage(playerid,GRAU,"Du bist im Prison.");
if(Spieler[playerid][pFriedhof] == 1)return SendClientMessage(playerid,GRAU,"Du bist Tot.");
if(Spieler[playerid][pDeath] == 1)return SendClientMessage(playerid,GRAU,"Du bist verletzt.");
if(Spieler[playerid][pJailed] != 0)return SendClientMessage(playerid,GRAU,"Du bist im Gefängnis.");
if(Spieler[playerid][pTazerd] == 1)return SendClientMessage(playerid,GRAU,"Du bist K.O/getazert.");
if(Spieler[playerid][pCuffed] == 1)return SendClientMessage(playerid,GRAU,"Du bist gefesselt.");
new cmd[25],query[256];
if(!isPlayerAnAdmin(playerid,6))return SendClientMessage(playerid,GRAU,"Du bist kein "#SERVERTAG" Teammitglied./Du hast nicht den jeweiligen Adminrang.");
if(sscanf(params,"s[25]",cmd))return SendClientMessage(playerid,WRONGCMD,"BENUTZE: /erstellen [Haus/Business/Schwarzmarkt]");
if(strcmp(cmd,"Haus",true) == 0)
{
for(new haus=1;haus<MAX_HAUS;haus++)
{
if(HausInfo[haus][hauscreatet] != 1)
{
mysql_format(MySqlConnection,query,sizeof(query),"INSERT INTO "#SQLTAG"_properties (id) VALUES ('%d')",haus);
mysql_function_query(MySqlConnection,query,false,"","");
MakeHaus[playerid] = haus;
GetPlayerPos(playerid,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]);
HausInfo[haus][hauscreatet] = 1;
strmid(HausInfo[haus][haus_besitzer],"Niemand",0,strlen("Niemand"),24);
strmid(HausInfo[haus][haus_beschreibung],"Keine",0,strlen("Keine"),150);
strmid(HausInfo[haus][haus_msg],"Keine",0,strlen("Keine"),64);
HausInfo[haus][haus_Owned] = 0;
HausInfo[haus][haus_innenraum] = 255;
HausInfo[haus][haus_miete] = 0;
HausInfo[haus][haus_locked] = 1;
HausInfo[haus][haus_slots] = 0;
HausInfo[haus][haus_eingemitetenzaehler] = 0;
HausInfo[haus][haus_preis] = 0;
HausInfo[haus][haus_level] = 0;
HausInfo[haus][haus_geldkasse] = 0;
for(new i=0;i<MAX_HAUSSAFEINV;i++)
{
HausInfo[haus][haus_inv][i] = 0;
}
HausInfo[haus][haus_heal] = 0;
HausInfo[haus][haus_armour] = 0;
HausInfo[haus][haus_hatheal] = 0;
HausInfo[haus][haus_hatarmour] = 0;
HausInfo[haus][hausmull] = 0;
for(new i=0;i<4;i++)
{
if(i < 3) HausInfo[haus][haus_garagepos][i] = 0.0;
HausInfo[haus][haus_garagevehspawn][i] = 0.0;
}
HausInfo[haus][haus_havegarage] = 0;
HausInfo[haus][haus_garagelocked] = 1;
HausLabel[haus] = Create3DTextLabel("HAUS ERSTELLUNG",HAUSCOLOR,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z] +1,20.0,0,1);
HausInfo[haus][haus_pickup] = CreatePickup(NOTOWNEDHAUSPICKUP,1,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]);
ShowPlayerDialog(playerid,HCREATE_DIALOG_PREIS,DIALOG_STYLE_INPUT,"Hauserstellung Schritt 1","Gib den Preis an,\nfür den das Haus zum verkauf freigestellt werden soll:","Weiter","Abbrechen");
return 1;
}
}
return SendClientMessage(playerid,GRAU,"Die maximale Anzahl an erstellten Häusern ist erreicht!");
}
return 1;
}und hier wenn ich es zu ende mich durchgeklickt habe durch die Dialoge..
case HDIA_ENDERSTELLUNG:
{
new string[700];
if(response == 0)
{
format(string,sizeof(string),"Hauserstellungs Fortschritt:\nPreis: %i$\nLevel zum kauf: %i\nMieter Slots: %i\nInterior Spawn: X=%i\nY=%i\nZ=%i\nInterior-ID: %i\nVirtual-World-ID: %i\nGebe nun die Beschreibung ein die am Haus stehen soll:",
HausInfo[MakeHaus[playerid]][haus_preis],HausInfo[MakeHaus[playerid]][haus_level],HausInfo[MakeHaus[playerid]][haus_slots],Homestore[HausInfo[MakeHaus[playerid]][haus_innenraum]][Hx],Homestore[HausInfo[MakeHaus[playerid]][haus_innenraum]][Hy],Homestore[HausInfo[MakeHaus[playerid]][haus_innenraum]][Hz],Homestore[HausInfo[MakeHaus[playerid]][haus_innenraum]][Hint],MakeHaus[playerid]);
ShowPlayerDialog(playerid,HCREATE_DIALOG_HAUSBESCHREIBUNG,DIALOG_STYLE_INPUT,"Hauserstellung Schritt 5",string,"Weiter","Zurück");
return 1;
}
if(response == 1)
{
SendClientMessage(playerid,GELB,"Hauserstellung beendet! (Haus erstellt)");
SaveOnlyOneHaus(MakeHaus[playerid]);
MakeHaus[playerid] = 0;
return 1;
}
}Hier das Enum:
enum haus_daten
{
hauscreatet,
Float:haus_x,
Float:haus_y,
Float:haus_z,
haus_heal,
haus_armour,
haus_hatheal,
haus_hatarmour,
haus_level,
haus_slots,
haus_besitzer[24],
haus_Owned,
haus_miete,
haus_preis,
haus_innenraum,
haus_beschreibung[150],
haus_eingemitetenzaehler,
haus_pickup,
haus_locked,
haus_inv[MAX_HAUSSAFEINV],
haus_geldkasse,
haus_waffenschrank,
haus_gun[13],
haus_gunammo[13],
hausmull,
haus_msg[64],
Float:haus_garagepos[3],
Float:haus_garagevehspawn[4],
haus_havegarage,
haus_garagepickup,
haus_garagelocked
} -
Während ich die Debug Meldungen eingebaut habe und den Timer etwas aufgeräumt habe ist mir der Fehler aufgefallen.
Du hast die Textdraws immer gehidet, wenn man nicht nahe einem Haus war das existiert, sprich wenn man nicht am letzten Haus war, hat man kein Textdraw gezeigt bekommen.So sollte es passen:
//Eine Sekunden Timer
forward GrandTimer();
public GrandTimer()
{
printf("Starte GrandTimer.");
new string[300], query[128];
for(new i;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i))continue;
if(IsPlayerNPC(i))continue;
printf("i: %d", i);
//Haussystem Textdraw
new bool:shown;
for(new haus=1;haus<MAX_HAUS;haus++)
{
printf("haus: %d", haus);
if(HausInfo[haus][hauscreatet] != 0)
{
printf("Haus existiert. Range: %d", IsPlayerInRangeOfPoint(i,2,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]));
if(IsPlayerInRangeOfPoint(i,2,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]))
{
printf("Zeige Haus %d an.", haus);
if(GetString(HausInfo[haus][haus_besitzer],"Niemand"))
{
format(string,sizeof(string),"Besitzer: ~w~Haus zum Verkauf");
}
else
{
format(string,sizeof(string),"Besitzer: ~w~%s",HausInfo[haus][haus_besitzer]);
}
PlayerTextDrawSetString(i,HausLabelTD[i][1],string);
format(string,sizeof(string),"Hausnummer: %i",haus);
PlayerTextDrawSetString(i,HausLabelTD[i][9],string);
format(string,sizeof(string),"Kosten: ~w~%i$",HausInfo[haus][haus_preis]);
PlayerTextDrawSetString(i,HausLabelTD[i][2],string);
format(string,sizeof(string),"Miete: ~w~%i$",HausInfo[haus][haus_miete]);
PlayerTextDrawSetString(i,HausLabelTD[i][3],string);
format(string,sizeof(string),"Level: ~w~%i",HausInfo[haus][haus_level]);
PlayerTextDrawSetString(i,HausLabelTD[i][4],string);
format(string,sizeof(string),"Mieter Slots: ~w~%i/%i",HausInfo[haus][haus_eingemitetenzaehler],HausInfo[haus][haus_slots]);
PlayerTextDrawSetString(i,HausLabelTD[i][5],string);
mysql_format(MySqlConnection,query,sizeof(query),"SELECT * FROM "#SQLTAG"_account_main WHERE `HausMieter` = '%d'", haus);
mysql_function_query(MySqlConnection,query,true,"LoadHouseRentFinish","siii",query,_SQL_HOUSEMIETER_LOAD,0,MySqlConnection);
for(new x = 0; x < 10; x++) PlayerTextDrawShow(i,HausLabelTD[i][x]);
shown = true;
break;
}
}
}
if(!shown)
{
printf("Verstecke Textdraws.");
for(new x = 0; x < 10; x++) PlayerTextDrawHide(i,HausLabelTD[i][x]);
}
}
for(new i = 0;i < MAX_BOMBS; i ++)
{
if(i < MAX_BOMBS)
{
BombTimerTL(i);
}
}
return 1;
}Wenn nicht, poste bitte was im Server Log steht.
Wenn es klappt, dann kannst du die printf's wieder entfernen. -
klappt wunderbar danke dir
-
-
breadfish.de
Hat das Thema geschlossen.