Wieso machst du für deine bool Funktionen einen forward, der ist überflüssig ![]()
Sieht ordentlicher aus, als was ich hier sonst so sehe ![]()
mfg. ![]()
Wieso machst du für deine bool Funktionen einen forward, der ist überflüssig ![]()
Sieht ordentlicher aus, als was ich hier sonst so sehe ![]()
mfg. ![]()
Okay, ich nehme mal kurz deinen Beitrag auseinander und sage was dazu:
Ebenso hast du zwar #error verwendet, aber nirgens erklärt.
#error = Erzeugt einen error (das steht da auch grob)
ch hätte mir gewünscht, dass du noch ein paar #pragma-Sachen reingebracht hättest.
Lese meinen letzten Satz...
Auch #inlcude wäre sinnvoll.
Das Directive Included eine Include datei, mehr aber auch weniger nicht.
Du hast in der Überschrift was von pre-processor geschrieben, aber gerade darauf gehst du nicht weiter ein.
Okay, da hast du recht, ich denke ich baue das noch ein wenig aus, wie der Compiler das ganze Script verarbeitet...
sehe ich keinen Unterschied zwischen #if und if
Dann hast du nicht genau hingeschaut, du kannst #if im Gegensatz zu if egal wo im Script verwenden.
das ist doch erst das total spannende daran.
Dein Leben scheint nicht sehr aufregend zu sein, wenn du es als "so spannend" hälst, dass der Compiler die Directives vor allem anderen verarbeitet ![]()
Naja, ich werde es evtl noch hier und da ein wenig ausbauen ![]()
mfg. ![]()
Allerdings fehlerhaft
Genau, direkt falsch reingeschrieben ![]()
und wenn du dabei bist, solltest du dir direkt nochmal die Basics anschauen und evtl noch mehr meiner Vorschläge realisieren ![]()
mfg. ![]()
Die meisten Anfänger brauchen das aber nicht und können damit sowieso nichts anfangen.
Naja, wenn sie sich das durchgelesen haben, haben sie zumindest einen groben Einblick und ich hoffe der 1. Fehler den ich gepostet habe taucht nicht mehr so oft auf ![]()
mfg. ![]()
Ein, in meinen Augen, sehr unbrauchbares Tutorial. Zwar zeigt es ein paar Direktiven, aber die sind in meinen Augen genauso selbsterklärend wie include*. In diesem Tutorial wird in die Thematik zu wenig eingegangen, Fragen wie "Wie greift der Compiler auf diese zu / wie werden sie verarbeitet" sind für in meinen Augen ein MUSS, wenn es um den angesprochenden Bereich geht.
* Dieser Satz ist entstanden, da include von der Priorität her die höchste Direktive ist und scheinbar gewollt nicht genannt / erläutert wurde.
Dieses Tutorial ist für Anfänger gedacht und ich fand es nicht so klug direkt zu erklären wie der Compiler das verarbeitet, da das ja nicht direkt was mit dem Scripten damit zu tun hat ![]()
un Include habe ich weggelassen, da das der einzige Directive mit Tryinclude ist, den man nicht wirklich erklären muss (wenn man ein wenig englisch kann) ![]()
mfg. ![]()
Problem ist, ich weiss nicht wie ich das abfrage mit dem Geld
Kann mir dort jemand helfen? Dann kommt das heut Abend noch dazu.
if(GetPlayerMoney(playerid) < 50) return SendClienMessage(playerid, 0xFF0000FF,"Du besitzt zu wenig Geld für diesen Skin");
mfg. ![]()
Schönes Tutorial von dir
Gefällt mir
Kann ich auch bei anderen Sprachen verwenden..
Dankeschön ![]()
Da solltest du einiges editieren:
//Und dann einfach bei deinem Dialog so einsetzen
ShowPlayerDialog(playerid,dSkinshop,DIALOG_STYLE_LIST,"Bincoladen",string_dialog,"Bestätigen","Abbrechen");
Nicht sehr viel Arbeit und auch nicht so schön ![]()
mfg. ![]()
Gutes Tutorial!
Aber
printf("Text", rest);
Würde so eine Fehlermeldung ausgeben!
Ehm...warum sollte die Funktion sowas tun ![]()
Danke ![]()
//Edit: und...?
Returning 0 in this callback will pass the dialog to another script in case no matching code were found in your gamemode's callback.
woher weißt du jetzt das es sich hier um Filterscripts handelt und nicht um Includes die unter dem Callback included werden ![]()
Nein ists nicht sonst denkt der Server, dass die dialogid gefunden wurde und prüft erst gar nicht die Filterscripts.
Die Filterscripts werden aber vor dem Gamemode überprüft ![]()
mfg. ![]()
ja ist doch richtig oder nicht?
Nein ![]()
Nimm das return und die Klammer da weg, dann funktioniert es ![]()
Nochdazu soltle OnDialogResponse 0 returnen
Im GameMode ist das egal ![]()
Da:
Bei dir Zeile 60-62:
return 1;
}
Da beendest du schon den Callback ![]()
mfg. ![]()
Guten Morgen liebe Community,
also ich wollte euch heute nochmal ein wenig die Directives näher bringen, da ich leider immernoch in einigen Threads sowas sehe:
#include <a_samp>
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
//Hier der entscheidene Code
}
#endif
und dann wundern sich die Leute warum ihr Code nicht aufgerufen wurde
Also, dann fangen wir mal mit dem ersten Directive an:
#define, #undef
Mit #define können wir einen statischen Wert definieren sprich:
#define Butter 1
Jetzt besitzt Butter den Wert 1. Das ist die Einfachste Form einer Definition.
Wir können aber noch viel viel weiter gehen und z.B. eine Funktion auf eine andere schreiben:
#define SCM SendClientMessage
Nun müssen wir nicht immer SendClientMessage(...); schreiben, sondern nur SCM(...);
Aber man kann noch einen Schritt weiter gehen und Makros erstellen mit unterschiedlichen Parametern:
So, nehmen wir nun eine andere Funktion, sagen wir mal printf und wir tauschen jetzt die Parameter sprich von:
printf("Text", rest);
machen wir:
PP(rest, "Text");
Sowas sieht dann so aus:
#define PP(%1,%0) \
printf(%0, %1)
Was auch noch eine Möglichkeit wäre ist, ganze Funktionen bzw Codeschnipsel in so ein Define zu schreiben, quasi sowas:
#define Loop \
new i; i<MAX_PLAYERS; i++) \
if(IsPlayerConnected(i)
//Anwendung:
for(Loop) {
//Hier dann was passieren soll, wenn die Schleife durchläuft.
}
Der char "\" bedeutet, dass das Makro in einer neuen Zeile weitergeht.
So und nun zu der letzten Verwendung für #define (die ich vorstelle es gibt natürlich noch viel mehr), wir bauen uns eine Funktion ![]()
Und die machen wir ganz simpel so:
#define Sum(%0,%1) \
((%0) + (%1))
//Verwendung:
printf("%d", Sum(1, 2));//Hier würde 3 geprintet werden
Natürlich gibt es auch Makros die schon in einer Include Datei stehen und die wir nicht für unser Script weiter benutzen wollen und dann machen wir z.B. sowas:
#undef MAX_PLAYERS //Hier wird das Makro entfernt
#define MAX_PLAYERS 50 //Hier mit dem neuen Wert 50 definiert
So nun zu den nächsten Directives:
#if, #error, #else, #endif, #endinput
Dieses Directive macht das selbe wie if(...) nur mit Directive Werten ![]()
Sprich:
#define Butter 1
#if Butter == 1
#error Butter ist ja 1
#endif
Dann würde halt im Compiler der Error erscheinen durch #error, dass Butter 1 ist ![]()
Natürlich geht das noch ein wenig Komplexer:
#define Butter 10
#if Butter > 10 //Fragt ab ob Butter größer 10 ist
#error Das werden wir nicht sehen//wenn ja das hier
#elseif Butter == 9//oder wenn Butter == 9
#error das werden wir auch nicht sehen//wenn Butter 9 wäre das hier
#else//Wenn nicht
#error das werden wir sehen//dann das hier
#endif//if-Abfrage beendet
Kommen wir nun zu einer wichtigen Verwendung im Zusammenhang mit Includes !
#include <test>//Wir includen eine Include Datei names test
#if defined _TEST_INC
#endinput
#endif
#define _TEST_INC
So verhindern wir, dass eine Include Datei 2x included wird ![]()
#assert
Ja, assert ist ein schönes Directive, wenn die Bedingung nicht zutrifft, failt der Compiler und spuckt einen Fatal Error aus, sprich sowas:
#define test 1
#assert test > 10
Da würde das rauskommen: 
Das waren erstmal die einfachen Directives, vielleicht werde ich ein 2. Tutorial machen für Leute, die schon etwas besser scripten können, wo ich dann auf #emit und #pragma eingehe ![]()
//Edit: Hier geht es zu [ SCRIPTING ] #pragma & #emit
mfg.
ein # zu viel gemacht...
Wie nutze ich jetzt "SetPlayerScore();" Richtig ?
SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
mfg. ![]()
Schreibe es so:
if (strcmp("/umkleiden", cmdtext, true) == 0) {
if(IsPlayerInRangeOfPoint(playerid, 2.0, x,y,z))
{
ForceClassSelection(playerid);
SetPlayerHealth(playerid, 0);
}
return 1;
}
mfg. ![]()
wo ist der fehler?
Der Name wird zu ein Intger aus der datenbank etc..
Du hast das vergessen vor den ersten string zu setzen
{i}
Ich hab mich doch schon lange verbessert ![]()
Dann brauch ich aber kein enum mehr oder ?
Natürlich brauchst du ein enum, auf welche Variablen willst du denn sonst die Werte von deiner Datenbank schreiben lassen ![]()
Das mit dem <e> kannte ich noch gar nicht, ist in der neuen Sscanf Version erst erschienen ![]()
Das ist natürlich noch praktischer habe es mir gerade angeschaut, schreibe es dann einfach so:
sscanf(Query, "p<|>e<is[24]s[64]iddd>",PlayerInfo[playerid]);
mfg. ![]()