Ändere mal diese Zeile in meine um:
new meldung = strget(cmdtext,1);
Beiträge von Templer
-
-
Zu deinem Neuspawn einfach:
public OnVehicleSpawn(vehicleid)
{
vEngine[vehicleid] = 1;
Tankmenge[vehicleid] = 100;
return 1;
}Ja also die Tacho Anzeige kannst du entweder, was sehr Ressourcenfressend ist, ein 2. Textdraw machen oder du machst einfach einen Zeilen umbruch mit ~n~, also zB.:
Tacho: %d~n~Tank: %d"und die if Abfrage von mir wäre hier:
public TankTimer()
{
new string[128], i = 0;
for(; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i) && vEngine[GetPlayerVehicleID(i)] == 1)
{
if(Tankmenge[GetPlayerVehicleID(i)] > 0)
{
if(vEngine[GetPlayerVehicleID(i)] > 0) format(string, sizeof(string), "Tank: %d", Tankmenge[GetPlayerVehicleID(i)]);
else format(string, sizeof(string), "Tank: ~r~LEER~w~");
TextDrawSetString(Tankanzeige[i], string);
}
else
{
GameTextForPlayer(playerid,"Der Tank ist LEER.",90000,4);
TogglePlayerControllable(playerid,0);
}
}
}
return true;
} -
Ja natürlich
Also du musst dann die Zeile:
<map src="MapTest.map" dimension="0" />
bearbeiten. -
Zu 1. InGame musst du einfach den Befehl /text eingeben, worauf ein Dialog erscheint und der Rest sollte sich selbst erklären (jedoch am Ende das speichern nicht vergessen. Datei liegt dann im Ordner scriptfiles.)
Zu 2. Ich versteh deine Frage irgendwie nicht xD
Zu 3. Mach eine kleine If Abfrage hier ein Beispiel:if(vEngine[GetPlayerVehicleID(i)] > 0) format(string, sizeof(string), "Tank: %d", vEngine[GetPlayerVehicleID(i)]);
else format(string, sizeof(string), "Tank: ~r~LEER");
TextDrawSetString(Tankanzeige[playerid], string); -
Hast du auch in der XML Datei den Namen der map Datei eingefügt? Also nicht den Dateinamen der XML Datei sondern den Inhalt, weil dort für MTA beschrieben wird, wie die .map Datei heißt
-
Also was du gepostet hast, ist völlig in Ordnung. Womöglich, was ich eher ned glaube, kann es sein, dass du nach deinen Chat Befehlen die public OnPlayerCommandText mit einem unützen } geschlossen hast und alles was danach kommt, nicht mehr geht. Zum testen könntest du oberhalb von der Zeile
if(!strcmp(cmdtext, "/aa", true))
diese folgende Zeile zum ausprobieren testen:
print("Debug OnPlayerCommandText: Durchführung von public bis hierher geschafft!");
und dann schaust du in die Console nach, wenn du /aa eingibst, ob dieser Text erscheint. -
Ja sry, hab ich total vergessen. Ersetze einfach wiedermal diesen public
public Tank()
{
for(new i = 0;i<MAX_VEHICLES;i++)
{
if(vEngine[i] == 1 && Tankmenge[i] >= 1) Tankmenge[i]--;
}
return 1;
} -
Also 2 Varianten, entweder wie du sagtest nützt du SetVehicleParamsForPlayer, jedoch Beachte (was auch im Wiki steht) musst du seit Samp 0.3 die Parameter für die Fahrzeuge unter OnVehicleStreamIn einstellen, da die Parameter beim "austreamen" zurückgesetzt werden.
Zitat von Samp Wikipedia:ZitatNote: From 0.3 you will have to re-apply this function when OnVehicleStreamIn is called!
Die andere Variante wäre unter OnPlayerEnterVehicle Abfragen, ob das Fahrzeug abgeschlossen ist oder nicht, mit irgendeiner Definition, und wenn es abgeschlossen ihm somit das Einsteigen blockiert. Diese Variante wäre für dich Perfekt wenn du keine "Einsteige" Animation haben willst. Hier ein Beispiel:
new gLockedVehicle[MAX_VEHICLES];
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(gLockedVehicle[vehicleid] != 0)
{
new Float:X, Float:Y, Float:Z; GetPlayerPos(playerid, X, Y, Z);
SetPlayerPos(playerid, X, Y, Z); //Beim Zurücksetzen der Position von wo er versucht einzusteigen wird die Animation 'verhindert'!
SendClientMessage(playerid, 0xFFFFFF00, "Dieses Fahrzeug ist abgeschlossen!");
}
return 1;
} -
Indem du sie nach der vehicleid, welche du in eine Definition / Variable zwischenspeichern solltest, die bei CreateVehicle, AddStaticVehicle und AddStaticVehicleEx ausgegeben werden löscht und am besten im Callback OnVehicleSpawn.
-
-
ne ist eh ok ^^, wobei nebenbei ja das Textdraw ist scheiße , aber ne Frage: Benützt du den
Zamaroht's Textdraw Editor v1.0 oder einen anderen? Weil dieser wirklich sehr gut ist. Mit dem kannst du InGame schöne Textdraws erstellen kannst! -
Ich würde gerne dir nun paar Sachen machen, damit es besser "aussieht", aber ich denke das ist eher egal
Also der Grund ist, warum es ned funktioniert ist, weil du kein
SetTimer("Tank", TANK_ZEIT, 1)
unter OnGameModeInit hast! Also das einfach unter den anderen Timer einfügen. -
//Ersetze wieder dann diese public´s
public Tank()
{
for(new i = 0;i<MAX_VEHICLES;i++)
{
if(Tankmenge[i] >= 1) Tankmenge[i]--;
}
return 1;
}public TankTimer()
{
new string[128], i = 0;
for(; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i) && vEngine[GetPlayerVehicleID(i)] == 1)
{
if(Tankmenge[GetPlayerVehicleID(i)] > 0)
{
format(string, sizeof(string), "Tank: %d", Tankmenge[GetPlayerVehicleID(i)]);
TextDrawSetString(Tankanzeige[i], string);
}
else
{
GameTextForPlayer(playerid,"Dein Tank ist leer. ~n~Gebe /exit ein um aus deinem Wagen zu kommen.",90000,4);
TogglePlayerControllable(playerid,0);
}
}
}
return true;
} -
Mach bei /enter das return true; auf return 1; (Kann sein, dass es an dem liegt, jedoch nicht sicher) und bei /exit fügst auch das return von /enter ein. Vielleicht Schreibste auch einen Text oberhalb von beiden return wie zB
SendClientMessage(playerid, 0xFFFFFF00, "Du bist nicht in der Nähe eines Hauses!"); -
nene, das passt auch, aber die anderen Sachen bitte so ersetzen/einfügen
-
-
-
Bitte Have Fun
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(motor, strlen("motor"), cmdtext); //Steht dies bei dir unter OnPlayerCommandText
return 1;
}
//Danach ersetze deinen Command wieder..
dcmd_motor(playerid,params[])
{
#pragma unused params
new vehicleid = GetPlayerVehicleID(playerid);
if(vEngine[vehicleid] == 0)
{
vEngine[vehicleid] = 1;
TogglePlayerControllable(playerid,1);
SendClientMessage(playerid,COLOR,"Du hast den Motor angeschaltet ");
BrowsingCar = 1;
}
else
{
vEngine[vehicleid] = 0;
TogglePlayerControllable(playerid,0);
SendClientMessage(playerid,COLOR,"Du hast den Motor ausgeschaltet ");
BrowsingCar = 0;
}
return 1; //Es muss immer eine positive Zahl am Ende zurückgegeben werden.
}//Wird der Motor auch ausgeschalten, wenn er aus dem Fahrzeug aussteigt oder beim einsteigen gefreezt wird, weil der Motor aus ist?
//Da der Tank nur abgezogen wird, wenn das Fahrzeug gestartet wurde!
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if((newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) && vEngine[vehicleid] == 0) TogglePlayerControllable(playerid,0); //Spieler wird gefreezt beim einsteigen, wenn Motor aus!
if(newstate == PLAYER_STATE_ONFOOT) vEngine[vehicleid] = 0; //Diese Zeile kannst du ignorieren, wenn du nicht willst, dass das Fahrzeug nach dem Aussteigen automatisch ausgeschalten wird!
return 1;
}//Dein Timer sollte wenn auch so im Script stehen und nicht so wie du es gepostet hast!
public OnGameModeInit()
{
for(new i=0;i<MAX_VEHICLES;i++)
{
Tankmenge[i] = 100;
}
SetTimer("TankTimer", TANK_ZEIT, 1);
return 1;
} -
In deinem fall, wenn er nicht ein Haus hat was ihm gehört muss deine Nachricht nach dem loop sein, siehe hier:
if(strcmp(cmd,"/verkaufen",true)==0)
{
if(INI_Open("Haus.cfg"))
{
if(SpielerInfo[playerid][pHaus] == 1)
{
for(new i=0;i<MAX_HOUSES;i++)
{
new vString[64];
format(vString, 64, "Id%d", i);
HausInfo[i][Id] = INI_ReadInt(vString);
new lol = HausInfo[i][Id]; //<
if(SpielerInfo[playerid][pId] == lol) //<
{
GivePlayerMoney(playerid, HausInfo[i][Preis]/2);
strmid(HausInfo[i][Besitzer], "Staat", 0, strlen("Staat"), 24);
HausInfo[i][Vergeben] = 0;
SendClientMessage(playerid, FARBE_WEIß,"Du hast dein Haus erfolgreich verkauft!");
SpielerInfo[playerid][pId] = 1000;
SpielerInfo[playerid][pHaus] = 0;
Verkauf(playerid);
return 1;
}
}
SendClientMessage(playerid,FARBE_WEIß,"Das ist nicht dein Haus!");
return 1;
}
else
{
SendClientMessage(playerid,FARBE_WEIß,"Du hast kein Haus!");
return 1;
}
}
INI_Close();
INI_Save();
return 1;
} -
Also da musste den public TankTimer wieder überschreiben mit dem hier ^^:
public TankTimer()
{
new string[128], i = 0;
for(; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i) && vEngine[GetPlayerVehicleID(i)] == 1)
{
format(string, sizeof(string), "Tank: %d", Tankmenge[GetPlayerVehicleID(i)]);
TextDrawSetString(Tankanzeige[i], string);
}
}
return true;
}und unter OnPlayerKeyStateChange
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(IsPlayerInAnyVehicle(playerid) && (newkeys & 16) && !(oldkeys & 16) && (vEngine[GetPlayerVehicleID(playerid)] == 0 || Tankmenge[GetPlayerVehicleID(playerid)] < 1))
{
TogglePlayerControllable(playerid, 1);
RemovePlayerFromVehicle(playerid);
}
return 1;
}Sollte eigentlich funktionieren...