Dann nimm diesen Code Abschnitt, und schreibe ihn direkt als erstes unter OnPlayerDeath. Möglicherweise hast du ein return irgendwo drin. Dann solltest du mindestens den einen Print sehen.
Beiträge von Jeffry
-
-
new Text:Geld2[MAX_PLAYERS];
zu
new PlayerText:Geld2[MAX_PLAYERS];Auch bei Geld1:
new PlayerText:Geld1;Auch wenn ich das zuvor schon geschrieben habe, aber es scheint als hättest du das noch nicht gemacht, anders sind die Warnungen nicht zu erklären.
-
printf("Head: %d", PlayerInfo[playerid][pHeadValue]);
if(PlayerInfo[playerid][pHeadValue] > 0)
{
if(IsPlayerConnected(killerid))
{
printf("Member: %d, Leader: %d", PlayerInfo[killerid][pMember], PlayerInfo[killerid][pLeader]);
if(PlayerInfo[killerid][pMember] == 8 || PlayerInfo[killerid][pLeader] == 8)
{
printf("Chase: %d -> playerid: %d", GoChase[killerid], playerid);
if(GoChase[killerid] == playerid)
{
ConsumingMoney[killerid] = 1;
new killer[MAX_PLAYER_NAME];
GetPlayerName(killerid, killer, sizeof(killer));
GivePlayerMoney(killerid, PlayerInfo[playerid][pHeadValue]);
format(string,128,"<< Hitman %s hat den Auftrag an %s erfüllt und erhält: $%d >>",killer,name,PlayerInfo[playerid][pHeadValue]);
print("Test");
SendFamilyMessage(8, COLOR_YELLOW, string);
PlayerInfo[playerid][pHeadValue] = 0;
GotHit[playerid] = 0;
GetChased[playerid] = 999;
GoChase[killerid] = 999;
}
}
}
}Was wird geprintet, wenn du es so einfügst?
-
Der Fehler liegt in der Berechnung, wenn du es so ohne Timer machen willst.
if(strcmp(cmd,"/equip",true)==0)
{
if(PlayerInfo[playerid][pMember]!=20&&PlayerInfo[playerid][pLeader]!=20)return SendClientMessage(playerid,COLOR_GREY,"Du bist nicht in der jewaligen Fraktion.");
if(PlayerInfo[playerid][pFriedhof]==1)return SendClientMessage(playerid,COLOR_GREY,"Du kannst dich nicht ausrüsten, solange du auf den Friedhof bist.");
if(!PlayerToPoint(5,playerid,-1869.5820,-1624.6660,21.8426))return SendClientMessage(playerid,COLOR_GREY,"Du kannst dich hier nicht ausrüsten.");
if(gettime()<equipusen[playerid])
{
new equipzeit=equipusen[playerid]-gettime();
format(string,sizeof(string),"Du kannst dich erst wieder in %d:%02d Minuten wieder ausrüsten.",equipzeit / 60, equipzeit % 60);
return SendClientMessage(playerid,COLOR_GREY,string);
}
GivePlayerWeapon(playerid,24,200);
equipusen[playerid]=gettime()+(60*2);
SendClientMessage(playerid,COLOR_GREY,"Du hast dich erfolgreich ausgerüstet.");
return 1;
}Dann passt es.
-
Den einen Teil den ich dir gesagt habe hast du ja nicht gemacht.
Payday[playerid] = CreatePlayerTextDraw(playerid, 8, 300, "~r~PayDay: ~w~%d~r~/~w~60");
PlayerTextDrawFont(playerid, Payday[playerid], 1);
PlayerTextDrawAlignment(playerid, Payday[playerid], 0);
PlayerTextDrawLetterSize(playerid, Payday[playerid], 0.500000, 0.999990);
PlayerTextDrawSetProportional(playerid, Payday[playerid], 1);
PlayerTextDrawSetShadow(playerid, Payday[playerid], 1);
PlayerTextDrawShow(playerid, Payday[playerid]);for(new i=0; i < MAX_PLAYERS; i++)
{
new string[68];
format(string,sizeof(string),"~r~PayDay: ~w~%d~r~/~w~60",PlayerInfo[playerid][pPlayMinutes]);
PlayerTextDrawSetString(i, Payday[i], string);
} //OnPlayerSpawn
zu:
Payday[playerid] = CreatePlayerTextDraw(playerid, 8, 300, "~r~PayDay: ~w~0~r~/~w~60");
PlayerTextDrawFont(playerid, Payday[playerid], 1);
PlayerTextDrawAlignment(playerid, Payday[playerid], 0);
PlayerTextDrawLetterSize(playerid, Payday[playerid], 0.500000, 0.999990);
PlayerTextDrawSetProportional(playerid, Payday[playerid], 1);
PlayerTextDrawSetShadow(playerid, Payday[playerid], 1);
PlayerTextDrawShow(playerid, Payday[playerid]);
^Das muss zu OnPlayerConnect und aus OnPlayerSpawn weg.
Die Schleife muss ganz weg.Außerdem:
PlayerTextDrawHide(playerid,Payday[playerid]); // OnPlayerDisconnect
zu:
PlayerTextDrawDestroy(playerid,Payday[playerid]); // OnPlayerDisconnect -
Erstellst du das Textdraw on deinem PayDay Timer? Das würde das erklären, du musst es nämlich bei OnPlayerConnect erstellen.
An deinen Codes oben wird das nicht klar, da du die Callbacks nicht dazu geschrieben hast. Schau da mal nach.
-
Das Problem wurde bereits behoben, siehe hier:
Problem mit meiner Attach SireneiMontreal: Kannst den Thread auf erledigt setzen?
-
Bist du eingeloggt, und steht die PVar Eingeloggt auch auf 1?
Hast du beim Checkpoint das auch zu PVar geändert? -
suche ein Buch und Zeitschrift als Objekt, hoffe das einer etwas parat hätte!
Objekt ID: 2813, 2816, 2823, 2824, 2825, 2826, 2827, 2852, 2853, 2854, 2855Da sollte alles dabei sein was du haben willst.
-
new equipusen[MAX_PLAYERS];
if(strcmp(cmd,"/equip", true) == 0)
{
if(PlayerToPoint(5,playerid, -1869.5820,-1624.6660,21.8426))
{
if(equipusen[playerid] == 1)
{
SendClientMessage(playerid,COLOR_GREY,"Du kannst dich noch nicht Ausrüsten.");
return 1;
}
if(PlayerInfo[playerid][pFriedhof] == 1)
{
SendClientMessage(playerid, COLOR_GREY, "Du kannst auf dem Friedhof keine Befehle benutzen.");
return 1;
}
if(PlayerInfo[playerid][pMember] == 20 || PlayerInfo[playerid][pLeader] == 20)
{
GivePlayerWeapon(playerid,24,200);
equipusen[playerid] = 1;
SetTimerEx("EquipTimer",120000,0,"i",playerid);
}
}
}Einfach über ein Array.
-
Klar, einfach so:
public T(playerid,t){
new s = random(sizeof(RandomTimer));
t+=random(5);
if(t>100) t = 100;
setper(playerid, t);
printf("Percent : %d %", t);
if(t<100) SetTimerEx("T", 100*random(8), false, "dd", playerid, t);
return 1;
}EDIT:
Mysterious Unknown: Klar, gut gesehen. -
Payday[playerid] = CreatePlayerTextDraw(playerid, 8, 300, "~r~PayDay: ~w~%d~r~/~w~60");
PlayerTextDrawFont(playerid, Payday[playerid], 1);
PlayerTextDrawAlignment(playerid, Payday[playerid], 0);
PlayerTextDrawLetterSize(playerid, Payday[playerid], 0.500000, 0.999990);
PlayerTextDrawSetProportional(playerid, Payday[playerid], 1);
PlayerTextDrawSetShadow(playerid, Payday[playerid], 1);
PlayerTextDrawShow(playerid, Payday[playerid]);for(new i=0; i < MAX_PLAYERS; i++)
{
new string[68];
format(string,sizeof(string),"~r~PayDay: ~w~%d~r~/~w~60",PlayerInfo[playerid][pPlayMinutes]);
PlayerTextDrawSetString(i, Payday[i], string);
}
zu:
Payday[playerid] = CreatePlayerTextDraw(playerid, 8, 300, "~r~PayDay: ~w~0~r~/~w~60");
PlayerTextDrawFont(playerid, Payday[playerid], 1);
PlayerTextDrawAlignment(playerid, Payday[playerid], 0);
PlayerTextDrawLetterSize(playerid, Payday[playerid], 0.500000, 0.999990);
PlayerTextDrawSetProportional(playerid, Payday[playerid], 1);
PlayerTextDrawSetShadow(playerid, Payday[playerid], 1);
PlayerTextDrawShow(playerid, Payday[playerid]);Die Schleife muss weg, und %d wird zu 0 beim Erstellen.
Das hier kannst du ganz weg machen:
PlayerTextDrawSetString(playerid, Payday[playerid], "~r~PayDay: ~w~0~r~/~w~60");
PlayerTextDrawShow(playerid,Payday[playerid]); -
Dann musst du noch
DisablePlayerRaceCheckpoint(playerid);
unter das Flugschein[playerid] = 1; setzen.Der Flugschein müste aber 1 sein, da sollte alles passen. Wenn du in der Spieler-Datei oder Datenbank nachschaust, dann lass den Spieler vorher speichern.
-
Laut dem print müsste es geklappt haben.
Zitat[20:47:21] Ende
Was ist passiert, als du durchgeflogen bist?
-
Ok, debugge es bitte so nochmal:
public OnPlayerEnterRaceCheckpoint(playerid)
{
printf("Prüfung: %d", Prufung[playerid]);
if(Prufung[playerid] == 1)
{
new cID = GetPVarInt(playerid, "fCP");
new Float:range;
if(cID == sizeof(fsCP)-1) range = 20.0;
else range = 10.0;
printf("cID: %d /Range: %d", cID, IsPlayerInRangeOfPoint(playerid, range, fsCP[cID][fx], fsCP[cID][fy], fsCP[cID][fz]));
if(IsPlayerInRangeOfPoint(playerid, range, fsCP[cID][fx], fsCP[cID][fy], fsCP[cID][fz]))
{
cID++;
if(cID >= sizeof(fsCP))
{
printf("Ende");
SetPVarInt(playerid, "fCP", 0);
new string[128];
format(string,128,"{C8C8C8}Du hast den Flugschein erfolgreich {41FF00}bestanden.");
DestroyVehicle(GetPVarInt(playerid,"Flugzeug"));
SetPlayerPos(playerid,415.1635,2535.5076,19.1484);
SetPlayerVirtualWorld(playerid,0);
Prufung[playerid] = 0;
Flugschein[playerid] = 1;
}
else
{
printf("Nächster: %d", cID);
SetPVarInt(playerid, "fCP", cID);
if(cID < sizeof(fsCP)-1) SetPlayerRaceCheckpoint(playerid, 3, fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], fsCP[cID+1][fx], fsCP[cID+1][fy],fsCP[cID+1][fz], 10);
else SetPlayerRaceCheckpoint(playerid, 4, fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], 10);
printf("Angezeigt: %d", cID);
}
}
return 1;
}
DisablePlayerRaceCheckpoint(playerid);
return 1;
}Was kommt dann?
-
Du musst den alten "per" bzw. "t" Wert wieder mitgeben. Dazu muss der Timer neu gestartet werden.
Alternativ könnte man es auch über eine Variable machen.Außerdem ist es im Timer nur "d", nicht "%d".
CMD:load(playerid){
SetTimerEx("T", 1000, false, "dd", playerid, 0);
return 1;
}forward T(playerid, t);
public T(playerid, t){
t+=random(5);
setper(playerid, t);
SetTimerEx("T", 1000, false, "dd", playerid, t);
return 1;
}setper(playerid, per){
TextDrawTextSize(Textdraw1, 245.099914+(226.794708/100*per), 0.000000);
TextDrawShowForPlayer(playerid, Textdraw1);
} -
Denkfehler meinerseits.
if(cID == sizeof(fsCP)) range = 20.0;
zu:
if(cID == sizeof(fsCP)-1) range = 20.0;sizeof gibt ja 20 zurück, und nicht 19.
-
Gut, dass du den Log gleich gepostet hast!
Hier ist noch ein kleiner Fehler in der Prüfung, dort wo der Checkpoint erstellt wird:
if(cID < sizeof(fsCP))
zu:
if(cID < sizeof(fsCP)-1) -
Ok. Um nicht unnötig viel Radius um die anderen Checkpoints zu prüfen, schreib es so:
public OnPlayerEnterRaceCheckpoint(playerid)
{
printf("Prüfung: %d", Prufung[playerid]);
if(Prufung[playerid] == 1)
{
new cID = GetPVarInt(playerid, "fCP");
new Float:range;
if(cID == sizeof(fsCP)-1) range = 20.0;
else range = 10.0;
printf("cID: %d /Range: %d", cID, IsPlayerInRangeOfPoint(playerid, range, fsCP[cID][fx], fsCP[cID][fy], fsCP[cID][fz]));
if(IsPlayerInRangeOfPoint(playerid, range, fsCP[cID][fx], fsCP[cID][fy], fsCP[cID][fz]))
{
cID++;
if(cID > sizeof(fsCP))
{
printf("Ende");
SetPVarInt(playerid, "fCP", 0);
new string[128];
format(string,128,"{C8C8C8}Du hast den Flugschein erfolgreich {41FF00}bestanden.");
DestroyVehicle(GetPVarInt(playerid,"Flugzeug"));
SetPlayerPos(playerid,415.1635,2535.5076,19.1484);
SetPlayerVirtualWorld(playerid,0);
Prufung[playerid] = 0;
Flugschein[playerid] = 1;
}
else
{
printf("Nächster: %d", cID);
SetPVarInt(playerid, "fCP", cID);
if(cID < sizeof(fsCP)) SetPlayerRaceCheckpoint(playerid, 3, fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], fsCP[cID+1][fx], fsCP[cID+1][fy],fsCP[cID+1][fz], 10);
else SetPlayerRaceCheckpoint(playerid, 4, fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], 10);
}
}
return 1;
}
DisablePlayerRaceCheckpoint(playerid);
return 1;
}Falls 20.0 nicht reicht, nimm 30.0.
-
Ok, dann muss es auf jeden Fall so sein, das hatten wir ja so aber schon zuvor.
if(cID >= sizeof(fsCP))Wenn es dann nicht mehr geht, nimm nochmal die Prints von Post #6 und schau was geprintet wird.