Die Skins schreibst du in die skins.txt, welche du in dem Ordner scriptfiles ablegst.
Beiträge von Jeffry
-
-
#include <mSelection>
Unter den Includes:
new skinlist = mS_INVALID_LISTID;OnGameModeInit:
skinlist = LoadModelSelectionMenu("skins.txt");
(Die skins.txt findest du hier: http://gta-sa-mp.de/stuff/mSelection/skins.txt)public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == skinChangePickup)
{
ShowModelSelectionMenu(playerid, skinlist, "Select Skin");
return 1;
}
return 0;
}public OnPlayerModelSelection(playerid, response, listid, modelid)
{
if(listid == skinlist)
{
if(response)
{
SendClientMessage(playerid, 0xFF0000FF, "Skin Changed");
SetPlayerSkin(playerid, modelid);
//Geld hier abziehen.
}
else SendClientMessage(playerid, 0xFF0000FF, "Canceled skin selection");
return 1;
}
return 1;
}Ist in etwa der Code vom Beispiel.
-
Ja, kannst du schon machen.
Du mappst dir einen Laden hin, da setzt du einen Checkpoint oder ein Pickup in, wenn man in das rein läuft, dann öffnet sich das Menü (zum Beispiel das aus dem ersten (oder zweiten) Link den ich dir gegeben habe. So könnte ich mir das vorstellen. -
Wie sieht die IsAnAmbulance Funktion aus?
EDIT: (Post unten)
[SomL]RePnaix: Genau. Alles klar, super!
PS: Du darfst gerne "du" sagen! -
-
Ohh oh fail
Das steht ja in keiner Schleife. Manchmal sieht man den Wald vor lauter Bäumen nicht, dafür gibt es zum Glück Logs.
format(str_aut, sizeof(str_aut), "Fahrzeugname: %s\n", str_aut, CarName[PlayerCar[playerid][slot][CarModel]-400]);
zu:
format(str_aut, sizeof(str_aut), "Fahrzeugname: %s\n", CarName[PlayerCar[playerid][slot][CarModel]-400]); -
Aber dann stimmt doch alles. Es müsste dir der Dialog angezeigt werden.
Kannst es ja mal so versuchen:
if(strcmp("/freikaufen", cmdtext, true) == 0)
{
new str_aut[512], slot = Dtc_PlayerKey[playerid];
printf("playerid: %d slot %d -> %d", playerid, slot, PlayerCar[playerid][slot][Abgeschleppt]);
if(PlayerCar[playerid][slot][Abgeschleppt] == 1)
{
printf("abgeschleppt");
format(str_aut, sizeof(str_aut), "Fahrzeugname: %s\n", str_aut, CarName[PlayerCar[playerid][slot][CarModel]-400]);
printf("Zeige Dialog: %s", str_aut);
ShowPlayerDialog(playerid, DIALOG_FREIKAUFEN, DIALOG_STYLE_MSGBOX, "Information", string, "Freikaufen", "Abbrechen");
}
else
{
printf("Nicht abgeschleppt");
SendClientMessage(playerid, 0xFF0000FF, "Error: Fahrzeug ist nicht abgeschleppt, wechsele den Schlüssel.");
}
return 1;
}
Was steht dann im Log? -
Lösche den server_log.txt. Dann starte den Server und danach poste einfach alles was im server_log.txt ist.
-
Ok, dann ändere im /opark:
new Carowner = GetDtCarOwner(trailercar);
new slot = GetDtCarOwnerSlot(Carowner,trailercar);
zu:
new Carowner = GetDtCarOwner(trailercar);
new slot = GetDtCarOwnerSlot(Carowner,trailercar);
printf("Abgeschleppt: %d slot %d", Carowner, slot);Und bei /freikaufen:
if(PlayerCar[playerid][slot][Abgeschleppt] == 1)
zu:
printf("playerid: %d slot %d -> %d", playerid, slot, PlayerCar[playerid][slot][Abgeschleppt] );
if(PlayerCar[playerid][slot][Abgeschleppt] == 1)Was steht dann im Server Log, wenn du beide Befehle eingibst?
-
Nein, nicht im crash_log. Im Server Log. Wenn du das crashdetect Plugin eingefügt hast, dann gibt dir das im Server Log Informationen aus.
-
Wird das abgeschleppte Fahrzeug zwischen /opark und /freikaufen neu geladen, dann könnte es sein, dass du den Abgeschleppt-Wert nicht speicherst/lädst.
-
stock LoadAccount(playerid)
{
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
SetPVarInt(playerid,"Baned",dini_Int(Spielerdatei,"Baned"));
SetPVarInt(playerid,"Führerschein",dini_Int(Spielerdatei,"Führerschein"));
SetPVarInt(playerid,"Skin",dini_Int(Spielerdatei,"Skin"));
SetPlayerWantedLevel(playerid, dini_Int(Spielerdatei,"WantedLevel"));
if(GetPVarInt(playerid,"Baned")==1)
{
SendClientMessage(playerid,Rot,"Du bist vom Server gebannt.");
Kick(playerid);
}
SetPVarInt(playerid,"loggedin",1);
return 1;
}stock SpielerSpeichern(playerid)
{
if(GetPVarInt(playerid,"loggedin")==1)
{
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
dini_IntSet(Spielerdatei,"Baned",GetPVarInt(playerid,"Baned"));
dini_IntSet(Spielerdatei,"Führerschein",GetPVarInt(playerid,"Führerschein"));
dini_IntSet(Spielerdatei,"WantedLevel",GetPlayerWantedLevel(playerid));
dini_IntSet(Spielerdatei,"Skin",GetPlayerSkin(playerid));
}
return 1;
}Bei OnPlayerSpawn:
SetPlayerSkin(playerid, GetPVarInt(playerid,"Skin")); -
Lade dir das crashdetect Plugin herunter und füge es in deinen Server ein. Dann starte den Server und poste was im Server Log steht. http://forum.sa-mp.com/showthread.php?t=262796
Die Meldungen brauchst du nicht zu übersetzen, es ist besser, wenn sie in englisch sind. -
Die zwei/drei (falls mit Nachricht) Zeilen:
SetPlayerPos(playerid, 770.8033,-0.7033,1000.7267);
SetPlayerInterior(playerid, 5);zu:
OnPlayerCommandText(playerid, "/setloc 770.8033 -0.7033 1000.7267 5");Wenn es mit dem Befehl geht, müsste es ja so klappen.
Wenn nicht, dann kannst du ja mal /save und /interior machen, ob bei /save die gleichen Koordinaten stehen. -
-
Nichts passiert? Die Nachricht "Freigekauft." kommt aber, oder?
Du musst die Koordinaten hier auch ändern:
SetVehiclePos(PlayerCar[playerid][slot][CarId], 9999.0, -9999.0, -200.0);
Dort müssen jeweils die gleichen Koordinaten rein, wie darunter in die Variablen gepackt werden, sprich die aus dem /save. -
Aha, du arbeitest gar nicht mit der PVar beim Wanted-Level-Vergeben.
Schreibe die beiden Funktionen so:
stock LoadAccount(playerid)
{
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
SetPVarInt(playerid,"Baned",dini_Int(Spielerdatei,"Baned"));
SetPVarInt(playerid,"Führerschein",dini_Int(Spielerdatei,"Führerschein"));
SetPlayerWantedLevel(playerid, dini_Int(Spielerdatei,"WantedLevel"));
if(GetPVarInt(playerid,"Baned")==1)
{
SendClientMessage(playerid,Rot,"Du bist vom Server gebannt.");
Kick(playerid);
}
SetPVarInt(playerid,"loggedin",1);
return 1;
}stock SpielerSpeichern(playerid)
{
if(GetPVarInt(playerid,"loggedin")==1)
{
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
dini_IntSet(Spielerdatei,"Baned",GetPVarInt(playerid,"Baned"));
dini_IntSet(Spielerdatei,"Führerschein",GetPVarInt(playerid,"Führerschein"));
dini_IntSet(Spielerdatei,"WantedLevel",GetPlayerWantedLevel(playerid));
}
return 1;
} -
Du hast nur die Variable auf 310 gesetzt, nicht aber das Textdraw. Du könntest das PlayerTextDrawSetString auch dort machen, spielt im Endeffekt keine Rolle.
Deshalb hat auch alles funktioniert, bis auf die Anzeige in der ersten Sekunde. -
E: Hat nicht geholfen, sieht nach wie vor so aus:
Habe den Code grade bei mir getestet, genau so. Es klappt ohne Probleme.Ersetze die drei Zeilen mal mit:
OnPlayerCommandText(playerid, "/setloc 770.8033 -0.7033 1000.7267 5");
Geht es dann? -
Ok, ich geb dir nicht alles auf einmal, weil ich es ja nicht prüfen kann und nicht kompilieren kann, daher Schritt für Schritt.
Teste es erst mal so:
if(strcmp("/freikaufen", cmdtext, true) == 0)
{
new string[512], slot = Dtc_PlayerKey[playerid];
if(PlayerCar[playerid][slot][Abgeschleppt] == 1)
{
format(string, sizeof(string), "Fahrzeugname: %s\n", string, CarName[PlayerCar[playerid][slot][CarModel]-400]);
ShowPlayerDialog(playerid, DIALOG_FREIKAUFEN, DIALOG_STYLE_MSGBOX, "Information", string, "Freikaufen", "Abbrechen");
}
else SendClientMessage(playerid, 0xFF0000FF, "Error: Fahrzeug ist nicht abgeschleppt, wechsele den Schlüssel.");
return 1;
}OnDialogResponse:
if(dialogid == DIALOG_FREIKAUFEN)
{
static place;
new slot = Dtc_PlayerKey[playerid];
switch(place)
{
case 0:
{
//Bei "CarId" muss das rein, was bei CreateVehicle vom PlayerCar steht.
SetVehiclePos(PlayerCar[playerid][slot][CarId], 1111.1, 1111.1, 111.1);
PlayerCar[playerid][slot][CarPos_x] = 1111.1;
PlayerCar[playerid][slot][CarPos_y] = 1111.1;
PlayerCar[playerid][slot][CarPos_z] = 111.1;
PlayerCar[playerid][slot][CarRotate] = 0.0;
place = 1;
}
case 1:
{
//Bei "CarId" muss das rein, was bei CreateVehicle vom PlayerCar steht.
SetVehiclePos(PlayerCar[playerid][slot][CarId], 2222.2, 2222.2, 222.2);
PlayerCar[playerid][slot][CarPos_x] = 2222.2;
PlayerCar[playerid][slot][CarPos_y] = 2222.2;
PlayerCar[playerid][slot][CarPos_z] = 222.2;
PlayerCar[playerid][slot][CarRotate] = 0.0;
place = 2;
}
case 2:
{
//Bei "CarId" muss das rein, was bei CreateVehicle vom PlayerCar steht.
SetVehiclePos(PlayerCar[playerid][slot][CarId], 3333.3, 3333.3, 333.3);
PlayerCar[playerid][slot][CarPos_x] = 3333.3;
PlayerCar[playerid][slot][CarPos_y] = 3333.3;
PlayerCar[playerid][slot][CarPos_z] = 333.3;
PlayerCar[playerid][slot][CarRotate] = 0.0;
place = 0;
}
}
PlayerCar[playerid][slot][Abgeschleppt] = 0;
OnPlayerCarUpdate(playerid,false);
return SendClientMessage(playerid, 0xFFFFFFFF, "Freigekauft.");
}
Es ist dann so, dass er immer von Parkplatz 1 bis 3 durchrotiert.
Teste das mal so aus, ob das mit dem Freikauf klappt, soweit natürlich. Die Koordinaten musst du anpassen. Wenn das klappt, poste den Code mit den neuen Koordinaten wieder.Nicht vergessen DIALOG_FREIKAUFEN zu definieren.