local variable "id" shadows a variable at a preceding level
Nenne die Variable id einfach um.
h_text
das muss im enum so stehen:
Text3D:h_text
mfg. ![]()
local variable "id" shadows a variable at a preceding level
Nenne die Variable id einfach um.
h_text
das muss im enum so stehen:
Text3D:h_text
mfg. ![]()
Ich habe auch nur seinen Code genommen und "angepasst".
Wenn er sich mit PAWN auseinandersetzen möchte, sollte er seinen eigenen Fehler schon selbst bemerken und somit auch, dass "!" eine Negierung ist und abgefragt wird, ob er NICHT in dieser Range ist.
Schau dir mal seinen Code genauer an ![]()
Er hat die ! für IsPlayerInRangeOfPoint verwendet um herauszufinden, ob er nicht in dieser Range ist und dann ein return benutzt um den Code zu beenden.
Wenn es jetzt nur 1ne Abfrage gewesen wäre, dann hätte das auch wunderbar funktioniert...
Doch bei mehreren ist das natürlich so falsch ![]()
mfg. ![]()
Dein Code funktioniert so eigentlich gar nicht...da du nach dem ersten return den Code unterbrichst...
Zudem sind deine permanenten if-Abfragen für den key völlig unnötig...schreibs doch einfach so:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_SECONDARY_ATTACK ) {
if(IsPlayerInRangeOfPoint(playerid,1.0,2265.5400,1675.8618,1090.4453)) {
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,9);
SetPlayerPos(playerid,2268.7078,1675.7773,94.9219);
} else if(IsPlayerInRangeOfPoint(playerid,1.0,2266.0137,1619.4340,1090.4453)) {
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,9);
SetPlayerPos(playerid,2269.3811,1619.5103,94.9219);
} else if(IsPlayerInRangeOfPoint(playerid,1.0,2268.7078,1675.7773,94.9219)) {
SetPlayerInterior(playerid,1);
SetPlayerVirtualWorld(playerid,9);
SetPlayerPos(playerid,2265.5400,1675.8618,1090.4453);
} else if(IsPlayerInRangeOfPoint(playerid,1.0,2269.3811,1619.5103,94.9219)) {
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,9);
SetPlayerPos(playerid,2266.0137,1619.4340,1090.4453);
}
}
return 1;
}
//Edit: Scott_Mitchell:
Dein Code ist falsch...die ! stimmen nicht ![]()
mfg. ![]()
Ich habe eine kleine Frage zu den Defines.
Das machst du dann einfach so:
Create3DTextLabel(test,...); //test wird dann durch den Text "Hallo Welt" ersetzt ;)
mfg. ![]()
Wie bekomme ich das nun hin?
Das wäre meiner Meinung nach die beste Methode in Pawn:
#define sLetter(%0) (((%0) >= 'A' && (%0) <= 'Z') ? ((%0) | 0x20) : (%0))
for(new i,l = strlen(string); i<l; i++) {
string[i] = sLetter(string[i]);
}
mfg. ![]()
okey aber wie kann man es verkaufen lassen wenn es nur eine Special Action ist..
Ja..wie wohl, so wie man alles verkauft...
ocmd:buyjetpack(playerid) {
if(GetPlayerMoney(playerid) < 1000) return SendClientMessage(playerid,-1,"Du besitzt keine 1000$!");
if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK) return SendClientMessage(playerid,-1,"Du besitzt bereits ein Jetpack!");
GivePlayerMoney(playerid, -1000);
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK);
SendClientMessage(playerid,-1,"Du hast dir erfolgreich ein Jetpack für 1000$ gekauft!");
return 1;
}
mfg. ![]()
Vehikel.
So ein Quatsch! ![]()
Ein Jetpack ist eine Special Action!
Man gibt deshalb auch jemanden ein Jetpack mit der Funktion:
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK);
mfg. ![]()
Die hässlichste Anfrage die ich jemals gesehen habe.
Bleib doch mal ein wenig sachlich und konstruktiv.
Sag ihm doch ganz neutral, dass einige seiner ausgewählten Farben, vielleicht nicht ganz den Effekt haben, den er sich vorgestellt hat und dass er mal ein wenig mehr auf die Grammtik achten sollte und die Bilder vielleicht etwas besser skalieren sollte und evtl nicht ganz so groß schreiben sollte.
Aber wieso machst du ihn gleich so extrem runter? Anstatt ihm Hass zu wünschen, wünsche ihm doch Glück, dass er Erfolg hat oder findest du es toll Menschen zu sehen, die nur scheitern?!
Also, beherzigt oben mal ein wenig die angesprochene Kritik und viel Erfolg ![]()
mfg. ![]()
Kaliber: Was ist der Unterschied bzw. wo lag der Fehler? Würde ich gerne als Anfänger wissen
Naja, wie schon gesagt, du musst Integer verwenden und keine Strings.
//Ein String ist das:
new string[24] = "Kaliber";
//String ist eine Variable mit 24 cells, sprich du kannst 23 Zeichen darein speichern + den null character \0.
new string[24] = 5; //Würde auch nicht gehen, da 5 kein string in diesem Fall ist.
//Ein Integer ist das:
new test = 5;
//test hat nun den Wert 5 und ist eine Zahl.
//Sowas geht nicht:
new test = "Kaliber"; //Das geht nicht, da test keine cells hat bzw kein String/Array ist.
Und nun zu der if-Abfrage:
new test = 5; //Deklaration einer Variable mit dem Wert 5
if(test == 5) //Prüfen ob der Wert von der Variable test 5 ist
{ //Klammern nicht vergessen, damit der Compiler die Code Blöcke zuordnen kann
//Hier der Code,wenn test 5 ist
}
else //Wenn nicht
{
//Hier der Code, wenn test nicht 5 ist
}
//Erweiterungen:
//In Pawn kannst du auch folgendes machen:
if(test == 5) SendClientMessage(playerid,-1,"hallo");
//Solange es sich um eine Zeile Code handelt, oder du den Code mit einem , verbindest, dann kannst du es auch in eine Zeile schreiben.
//Mit Komma verbinden:
if(test == 5) SendClientMessage(playerid,-1,"Hallo"),SendClientMessage(playerid,-1,"Test ist 5");
//Was es jetzt mit dem return auf sich hat:
//Return beendet den Callback oder die Funktion und gibt einen Wert zurück (Dieser wird nicht immer verarbeitet und ist z.B. bei Commandprozessoren irrelevant).
if(test == 5) return SendClientMessage(playerid,-1,"hi"); //Was SendClientMessage zurückgibt ist hier irrelevant!
SendClientMessage(playerid,-1,"Test!"); //Das wird nicht aufgerufen, da test = 5 ist und der code in der Abfrage schon die gesamte Funktion beendet.
//Edit:
//Es ist egal ob man es so schreibt:
new var;
new var5;
//Oder so schriebt:
new var,var5;
//Das macht für die amx keinen Unterschied
Hoffe das erklärt es so einigermaßen ![]()
mfg. ![]()
Schreib es so:
Info: Waffe und Munition sind keine Strings, sondern Integer ![]()
ocmd:weapon(playerid, params[]) {
new waffe,ammu;
if(sscanf(params, "ii", waffe, ammu)) return SendClientMessage(playerid, COLOR_INFO, "> Benutzung: /weapon <WeaponID> <Munition>");
if(waffe <= 0 || waffe> 46) return SendClientMessage(playerid,COLOR_INFO,"Bitte geben sie eine gültige Waffenid ein!");
return GivePlayerWeapon(playerid, waffe, ammu);
}
mfg. ![]()
das ist ein record der garnichts macht und nur rumsteht
Ja, eben
Dann mach einen, wo er die Animation während dem Record ausführt ![]()
aber mein bot will keine animationen machen...
Du musst die Animation während dem Record ausführen ![]()
mfg. ![]()
Das ist der Komplette befehl
Schreib das so, dann funktioniert es auch ![]()
static bool:freeze[MAX_PLAYERS char]; //Oben global deklarieren
dcmd_freeze(playerid, params[])
{
if(!IstSpielerAdmin(playerid, 3)) return SendClientMessage(playerid, ROT,"Du bist kein Admin, oder hast nicht die benörigten Rechte!");
if(!params[0]) return SendClientMessage(playerid, ROT,"Verwendung: /freeze [playerid]!");
if(!IsPlayerConnected(strval(params))) return SendClientMessage(playerid, ROT,"Dieser Spieler ist nicht Online!");
if(freeze{strval(params)}) return SendClientMessage(playerid, ROT,"Dieser Spieler ist bereits gefreezed. Du kannst ihn m it /unfreeze[playerid] unfreezen!");
new string[64];
format(string,sizeof string, "Du wurdest von %s gefreezed!",getPlayerName(playerid));
SendClientMessage(strval(params), GRÜN,string);
format(string,sizeof string, "Du hast %s erfolgreich gefreezed!",getPlayerName(strval(params)));
SendClientMessage(playerid, GRÜN, string);
return TogglePlayerControllable(strval(params),false),freeze{strval(params)} = true,1;
}
dcmd_unfreeze(playerid, params[])
{
if(!IstSpielerAdmin(playerid, 3)) return SendClientMessage(playerid, ROT,"Du bist kein Admin, oder hast nicht die benörigten Rechte!");
if(!params[0]) return SendClientMessage(playerid, ROT,"Verwendung: /unfreeze [playerid]!");
if(!IsPlayerConnected(strval(params))) return SendClientMessage(playerid, ROT,"Dieser Spieler ist nicht Online!");
if(!freeze{strval(params)}) return SendClientMessage(playerid, ROT,"Dieser Spieler ist nicht gefreezed! Du kannst ihn mit /freeze [playerid] freezen!");
new string[64];
format (string, sizeof string,"Du wurdest von %s geunfreezed!",getPlayerName(playerid));
SendClientMessage(strval(params), GRÜN,string);
format (string,sizeof string,"Du hast %s erfolgreich geunfreezed!",getPlayerName(strval(params)));
SendClientMessage(playerid, GRÜN, string);
return TogglePlayerControllable(strval(params),true),freeze{strval(params)} = false,1;
}
mfg. ![]()
das in dieser Zeile ein unrechable Code ist:
Poste mal ein paar Zeilen drüber ![]()
//Edit: btw da steht "us"...das heißt du brauchst 2 Attribute...1x sID für die spielerid und dann noch einen String.. ![]()
mfg. ![]()
... warum?
Weil deine Abfrage falsch ist, schreib sie so:
if(400 <= strval(inputtext) <= 611)
mfg. ![]()
Aber ist ja auch unnötigen wenn Man Float:Float:123.12 hat?
Hast du eig meinen Text gelesen? ![]()
macht aber in diesem Fall gar keinen Sinn, da es schon Floats sind
mfg. ![]()
ausserdem müssen die Floats: weg wenn du das anwendest die müssen nur bei der Variablendeklarieung hinb!
Naja "müssen" sie nicht.
Damit würde er nur die Floats in Floats casten. Grundsätzlich kann man das machen, macht aber in diesem Fall gar keinen Sinn, da es schon Floats sind ![]()
Aber bei Integer Variablen z.B. ist dies eine gute Methode:
printf("%f",Float:0); //Output: 0.000000
mf. ![]()
Du hast so wie ich das gesehen habe die Z-Angel vergessen
Ja in der Tat, dass hat er, allerdings ist das kein Tag mismatch Error, sondern wäre nur ein warning 202: number of arguments does not match definition ![]()
mfg. ![]()
Hey. Ich weiß nicht wo hier ein Tag missmatch ist.
Eine Zeile wäre von Vorteil ![]()
//Edit:
Foat:X,Float:Y,Float:Z
Du hast bei dem X Foat: geschrieben und das gibt es nichts..lösch überall das Foat bzw Float ![]()
Aber hier einige Tipps & Möglichkeiten:
GetPlayerPos(playerid, Float:X,Float:Y,Float:Z);
Die Variablen sind schon Floats, in den Funktionen wo du sie verwendest musst du den Tag nicht nocheinmal angeben außer du willst sie casten ![]()
carid = GetPlayerVehicleID(playerid);
Wofür diese Zeile...du machst mit dem Wert doch nichts? ![]()
vehCar[carid] = true;
Vielleicht ist vehCar kein boolean?
strval(inputtext)
Du solltest oben erstmal abfragen ob er überhaupt einen inputtext eingegeben hat...falls man sich mal verklickt oder so..zudem würde dann CreateVehicle einen Fehler ausgeben, also checken ob die modelid von dem Fahrzeug im validen Bereich liegt (400 - 611) ![]()
mfg. ![]()