Dann versuche es so:
//Dialog_register Wenn er sich registiert
dini_IntSet(path, "BarGeld",5000);
ResetPlayerMoney(playerid);
ConsumingMoney[playerid] = 1;
PlayerMoney[playerid] = 5000;
Beiträge von Jeffry
-
-
Hast du denn einen Befehl oder so, mit dem du einem Spieler Geld gibst, und das funktioniert?
-
[21:28:43] Loading plugin: crashdetect.so
[21:28:43] Failed (plugins/crashdetect.so: invalid ELF header)Der Fehler ist mir so noch nie unter gekommen, auch im englischen Forum kann ich dazu nichts finden.
Nutzt du das crashdetect Plugin von dem Link, den ich dir gegeben habe? -
Du hast vergessen das crashdetect Plugin einzufügen.
Gehe obige Schritte nochmals durch. -
Lege dir ein zweites Windows Benutzerkonto auf dem Rechner an und verbinde dich damit zum Server. Dann gehe auf Benutzer wechseln (nicht abmelden!) und melde dich mit dem anderen Konto an.
Dann kannst du so hin und her wechseln. -
Lade dir das Crashdetect Plugin herunter und füge es in deinen Server ein:
http://forum.sa-mp.com/showthread.php?t=262796Dann poste was im Server Log steht, wenn der Server abstürzt.
Schritte:
1) crashdetect (so/dll je nach dem ob Linux/Windows) in den Plugins Ordner einfügen
2) "crashdetect" (Windows) oder "crashdetect.so" (Linux) in der server.cfg bei "plugins" eintragen
3) Server Log löschen
4) Server neu starten und abstürzen lassen
5) Vollständigen Server Log posten -
Die etwas neueren Versionen von Notepad++ rücken auch automatisch schon ein, wenn man eine Klammer öffnet und schließt, sprich setzen den Cursor direkt an die richtige Stelle. Zum Teil werden auch die Klammern an die richtige Stelle verschoben, wenn man sie falsch setzt.
-
Wenn es nur verschoben ist, und nicht Zeilenübergreifend mehrere Klammern stehen, dann kannst du es mit Notepad++ machen.
Plugin Manager -> TextFX Characters -> Installieren
TextFX -> TextFX Edit -> Reindent C++ code -
//Dialog_register Wenn er sich registiert
dini_IntSet(path, "BarGeld",Spieler[playerid][Gestorben] = 5000);
Spieler[playerid][BarGeld] = GetPlayerMoney(playerid);zu:
//Dialog_register Wenn er sich registiert
dini_IntSet(path, "BarGeld",5000);
GivePlayerMoney(playerid, 5000);
Spieler[playerid][BarGeld] = 5000; -
achja ist das für dcmd
Nein, das ist was anderes.
-
Ich nehme an, dass das Textlabel des Fahrrad-Verleihs die ID 0 hat.
Da du in deinem Timer das Textlabel immer für alle Spieler löschst, wird - da die Variablen leer sind - auch immer das Label mit der ID 0 mit gelöscht.
Gleiches Phänomen sollte sich bei den Pickups darstellen.Folgende Änderungen musst du machen:
1) Den Timer nur für einen Spieler aufrufen, sonst führt das bei mehreren Spielern zu Fehlern.
2) Den Timer nur einmal starten, nicht dauerhaft.
3) Die Arrays mit -1 als "leer" deklarieren.Die Änderungen habe ich jeweils kommentiert.
Ändere also den Teil von:
if(Spieler[playerid][Krankenhaus] == 1)
{
new string[256],hours,minutes;
gettime(hours, minutes);
TotenKopf[playerid] = CreatePickup(1254,1, Spieler[playerid][Pos_x],Spieler[playerid][Pos_y],Spieler[playerid][Pos_z]);
format(string, sizeof(string), "Gestorben\n%s\n%d:%d", SpielerName(playerid),hours,minutes);
TotenKopfLabel[playerid] = Create3DTextLabel(string,COLOR_WEISS, Spieler[playerid][Pos_x],Spieler[playerid][Pos_y],Spieler[playerid][Pos_z], 20, 0, 1);
SetTimer("KHtimer",180000,1);
FreezePlayer(playerid);
ResetPlayerWeapons(playerid);
SetPlayerPos(playerid,2040.5,-1406.0,23.200);
SetPlayerCameraPos(playerid, 2003.300, -1474.800, 46.4000);
SetPlayerCameraLookAt(playerid, 2038.5000, -1405.3000, 20.2999);
SetPlayerInterior(playerid, 0);
ClearPlayerChat(playerid,20);
SendClientMessage(playerid,COLOR_WEISS,"Du bist gestorben und wirst behandelt. Das dauert 3 Minuten.");
SendClientMessage(playerid,COLOR_WEISS,"Wenn du Offline gehst wird die Zeit wieder auf 3 Minuten gesetzt.");
GameTextForPlayer(playerid, "~y~Krankenhaus~n~~g~3 Minuten", 4000, 1);
}
zu:
if(Spieler[playerid][Krankenhaus] == 1)
{
new string[256],hours,minutes;
gettime(hours, minutes);
if(TotenKopf[playerid] != -1) DestroyPickup(TotenKopf[playerid]); //Zur Sicherheit prüfen wir ob es noch nicht gelöscht ist.
TotenKopf[playerid] = CreatePickup(1254,1, Spieler[playerid][Pos_x],Spieler[playerid][Pos_y],Spieler[playerid][Pos_z]);
format(string, sizeof(string), "Gestorben\n%s\n%d:%d", SpielerName(playerid),hours,minutes);
if(TotenKopfLabel[playerid] != Text3D:-1) Delete3DTextLabel(TotenKopfLabel[playerid]); //Zur Sicherheit prüfen wir ob es noch nicht gelöscht ist.
TotenKopfLabel[playerid] = Create3DTextLabel(string,COLOR_WEISS, Spieler[playerid][Pos_x],Spieler[playerid][Pos_y],Spieler[playerid][Pos_z], 20, 0, 1);
if(TotenKopfTimer[playerid] != -1) KillTimer(TotenKopfTimer[playerid]); //Zur Sicherheit prüfen wir ob der Timer nicht schon aktiv ist.
TotenKopfTimer[playerid] = SetTimerEx("KHtimer",180000,false,"d", playerid); //Der Timer wird nur für die playerid gestartet, außerdem wird er vermerkt und nur einmal (false) gestartet.
FreezePlayer(playerid);
ResetPlayerWeapons(playerid);
SetPlayerPos(playerid,2040.5,-1406.0,23.200);
SetPlayerCameraPos(playerid, 2003.300, -1474.800, 46.4000);
SetPlayerCameraLookAt(playerid, 2038.5000, -1405.3000, 20.2999);
SetPlayerInterior(playerid, 0);
ClearPlayerChat(playerid,20);
SendClientMessage(playerid,COLOR_WEISS,"Du bist gestorben und wirst behandelt. Das dauert 3 Minuten.");
SendClientMessage(playerid,COLOR_WEISS,"Wenn du Offline gehst wird die Zeit wieder auf 3 Minuten gesetzt.");
GameTextForPlayer(playerid, "~y~Krankenhaus~n~~g~3 Minuten", 4000, 1);
}Ändere dann den Timer von
forward KHtimer();
public KHtimer()
{
for(new i=0; i<MAX_PLAYERS; i++)
{
Spieler[i][Krankenhaus] = 0;
SpawnPlayerEx(i);
ClearPlayerChat(i,20);
SendClientMessage(i,COLOR_GRUEN,"Du wurdest behandelt.");
DestroyPickup(TotenKopf[i]);
Delete3DTextLabel(TotenKopfLabel[i]);
}
return 1;
}
zu:
forward KHtimer(playerid); //Timer nur für playerid.
public KHtimer(playerid)
{
if(Spieler[playerid][Krankenhaus] != 0) //Spieler wird nur gespawnt, wenn er im Krankenhaus ist.
{
Spieler[playerid][Krankenhaus] = 0;
SpawnPlayerEx(playerid);
ClearPlayerChat(playerid,20);
SendClientMessage(playerid,COLOR_GRUEN,"Du wurdest behandelt.");
}
//Entsprechende Löschungen und Variablen "leeren".
if(TotenKopf[playerid] != -1) DestroyPickup(TotenKopf[playerid]);
TotenKopf[playerid] = -1;
if(TotenKopfLabel[playerid] != Text3D:-1) Delete3DTextLabel(TotenKopfLabel[playerid]);
TotenKopfLabel[playerid] = Text3D:-1;
TotenKopfTimer[playerid] = -1;
return 1;
}Ändere dann die Deklaration der Array von:
new TotenKopf[MAX_PLAYERS];
new Text3D:TotenKopfLabel[MAX_PLAYERS];
zu:
//Das -1,... steht für alle Indizes im Array.
new TotenKopf[MAX_PLAYERS] = {-1,...};
new Text3D:TotenKopfLabel[MAX_PLAYERS] = {Text3D:-1,...};
new TotenKopfTimer[MAX_PLAYERS] = {-1,...};Füge außerdem zu OnPlayerDisconnect das hier hinzu:
//Lösche und leere jeweils die Variablen, sofern belegt.
if(TotenKopf[playerid] != -1) DestroyPickup(TotenKopf[playerid]);
TotenKopf[playerid] = -1;
if(TotenKopfLabel[playerid] != Text3D:-1) Delete3DTextLabel(TotenKopfLabel[playerid]);
TotenKopfLabel[playerid] = Text3D:-1;
if(TotenKopfTimer[playerid] != -1) KillTimer(TotenKopfTimer[playerid]);
TotenKopfTimer[playerid] = -1;Besonders bei Timern ist es enorm wichtig, diese korrekt zu beenden, damit die nicht parallel weiterlaufen. Das führt sonst garantiert zu Fehlern im Spielablauf, die extrem schwer nachzuvollziehen sind.
-
Wird das Plugin denn geladen?
Erstellst du alle Objekte mit dem Streamer? -
https://wiki.sa-mp.com/wiki/ShowPlayerDialog
Zitatdialogid - An ID to assign this dialog to, so responses can be processed. Max dialogid is 32767. Using negative values will close any open dialog.
Deshalb zeigt er dir einen falschen Wert an.
Nutze eine Zahl kleiner als 32767 für die Dialoge.
-
-
-
Das weiß ich nicht, ich schätze nicht, da das ja auch nicht mehr als die vorhandenen Funktionen nutzen kann.
Das einzige was du machen kannst ist, viele Textdraws mit entsprechenden Farben auf 1 Pixel Breite (oder Höhe, je nach dem) hintereinander zu setzen, mit entsprechendem Farbverlauf. Würde halt ne Menge an Textdraws benötigen. -
Ist ja komisch.
Was wird dir so ausgegeben?
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
printf("OnDialogResponse");
printf("dialogid: %d == %d DLG_JOB", dialogid, DLG_JOB);
if(dialogid == DLG_JOB)
{
printf("DLG_JOB");
if(response)
{
printf("response");
switch(listitem)
{
case 0:
{
printf("0");
new rand = random(sizeof Cp);
SetPlayerCheckpoint(playerid,Cp[rand][0],Cp[rand][1],Cp[rand][2],1);
SendClientMessage(playerid,0x33CCFFAA,"1 klappt");
mCP[playerid] = 1;
K[playerid] = 1;
SetPlayerSkin(playerid,158);
return 1;
}
case 1:
{
printf("1");
for(new i;i<sizeof frCars;i++)
{
if(inFrUse[fCar[i]] != -1)continue;
SetPlayerCheckpoint(playerid,frCars[i][0],frCars[i][1],frCars[i][2],5);
inFrUse[i] = playerid;
return SendClientMessage(playerid,0x33CCFFAA,"2 klappt");
}
return SendClientMessage(playerid,0xFF6347AA,"belegt");
}
}
}
}
return 0;
} -
Sagt mal, gibt es sowas wie nen Farbverlauf im Textdraw ?
Sowas, nur eben als Textdraw? http://www.colorpicker.com/
Nicht dass ich wüsste. -
Je nach dem wie lange die abzufragenden Namen sind, reicht auch 32. MAX_PLAYER_NAME ist momentan 24.
-
Was wird dir so im Server Log geprintet?
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
printf("OnDialogResponse");
switch(dialogid)
{
case DLG_JOB:
{
printf("DLG_JOB");
if(response)
{
printf("response");
switch(listitem)
{
case 0:
{
printf("0");
new rand = random(sizeof Cp);
SetPlayerCheckpoint(playerid,Cp[rand][0],Cp[rand][1],Cp[rand][2],1);
SendClientMessage(playerid,0x33CCFFAA,"1 klappt");
mCP[playerid] = 1;
K[playerid] = 1;
SetPlayerSkin(playerid,158);
return 1;
}
case 1:
{
printf("1");
for(new i;i<sizeof frCars;i++)
{
if(inFrUse[fCar[i]] != -1)continue;
SetPlayerCheckpoint(playerid,frCars[i][0],frCars[i][1],frCars[i][2],5);
inFrUse[i] = playerid;
return SendClientMessage(playerid,0x33CCFFAA,"2 klappt");
}
return SendClientMessage(playerid,0xFF6347AA,"belegt");
}
}
}
}
}
return 0;
}