Dann entfern alle Zeile die mit "anzahl" was zu tun haben und öffne stattdessen einen Dialog am Ende.
dcmd_fischeverkaufen(playerid,params[])
{
new anzahl; // <- Weg
if(sscanf(params,"i",anzahl)) return SendClientMessage(playerid,rot,"Benutze: /fischeverkaufen [Anzahl]!");// <- Weg
if(!IsPlayerInRangeOfPoint(playerid, 2.0, 1023.5853,-1884.4575,12.7962)) return SendClientMessage(playerid,hellrot,"Du bist nicht am Angelshop...");
if(AngelInfo[playerid][Fische] == 0) return SendClientMessage(playerid,hellrot,"Du hast keine Fische!");
if(AngelInfo[playerid][Fische] <= anzahl) return SendClientMessage(playerid,hellrot,"Du hast nicht soviele Fische!");// <- Weg
new string[56]; // <- Eventuell Weg
new geld = fischpreis*anzahl; // <- Weg
format(string,sizeof(string),"Du hast %d Fische verkauft und bekommst dafür $%d!",anzahl,geld);// <- Weg
SendClientMessage(playerid,neongruen,string);// <- Weg
AngelInfo[playerid][Fische] -= anzahl;// <- Weg
GivePlayerMoney(playerid, geld);// <- Weg
// Dialog anzeigen
return 1;
}
Wenn du das hast,dann probier mal wie du es unter OnDialogResponse verarbeitest. Eigentlich müsstest du die Zeilen die du aus dem Befehl entferst in die Dialog-Verarbeitung verschieben.
Beiträge von Goldkiller
-
-
Ließ dir deinen Beitrag vor dem Absenden nochmal durch,verstehe nur Bahnhof.
-
Du brauchst das else doch gar nicht.
Entweder die Schleife findet einen Cop der in der nähe ist oder nicht.Je nachdem wird IntFluch[] auf 1 gesetzt oder bleibt wie es vorher war.Es gibt viele Möglichkeiten wie du es machen könntest.
Function WantedChecker(playerid)
{
new Float: x, Float: y, Float: z;
GetPlayerPos(playerid, x, y, z);
for(new i=0;i<MAX_PLAYERS; i++) {
if(IsPlayerConnected(i))
{
if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z) && IsACop(i))
{
IntFlucht[playerid] = 1;
return true;
}
}
}
return false;
}Function WantedChecker(playerid)
{
new Float: x, Float: y, Float: z;
new bool:bFoundCop = false;
GetPlayerPos(playerid, x, y, z);
for(new i=0;i<MAX_PLAYERS; i++) {
if(IsPlayerConnected(i))
{
if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z) && IsACop(i))
{
IntFlucht[playerid] = 1;
bFoundCop = true
break;
}
}
}
if(!bFoundCop) {
IntFlucht[playerid] = 0;
}
return 1;
}Function WantedChecker(playerid)
{
new Float: x, Float: y, Float: z;
new bool:bFoundCop = false;
GetPlayerPos(playerid, x, y, z);
for(new i=0;i<MAX_PLAYERS; i++)
if(IsPlayerConnected(i))
{
if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z) && IsACop(i))
{
IntFlucht[playerid] = 1;
bFoundCop = true
break;
}
}
if(!bFoundCop) {
IntFlucht[playerid] = 0;
}
return 1;
}
Falls der Spieler für den WantedChecker läuft auch ein Cop selber sein kann,musst du unbedingt auf "playerid != i" prüfen. -
Zwei Sachen.
Ich würde prüfen ob i != playerid ist.Könnte bei dir vllt zu Fehler führen,je nachdem wie das im Ganzen bei dir funktioniert.
Wieso machst du nicht "if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z)" und falls das wahr ist,die Abfrage ob Polizist oder nicht.
Ist er/sie Polizist,machst ein break und wir wissen,dass mindestens 1 Polizisten in der nähe gefunden wurde. -
Dann teste es nochmal, es funktioniert nicht richtig.
Wenn ich es so wie von dir mal ausprobiere,bekomme ich falsche Ergebnisse ( Nebenbei, du hast sowieso float geschrieben - float != Float ).Falls du es auch probieren möchtest,
main() {
new
Float:fVar;
r_mysql_Connect_To_Database("localhost", "root", "", "accounts");
r_LoadSQLEntrance("accounts", "id", "1");
fVar = r_mysql_GetFloat("prozent");
printf("%f",fVar);
}
Hier der Datenbank Eintrag:
http://s14.directupload.net/file/d/2879/235nfdew_png.htm
Lass ich das mal laufen:Zitat[23:49:52] [profiler] Attached profiler to 'gamemodes\rft.amx' (no debug symbols)
[23:49:52] OnGameo
[23:49:52] MySql: Verbindung zur Datenbank: accounts wird hergestellt...
[23:49:52] MySql: Verbindung zur Datenbank: accounts erfolgreich hergestellt...
[23:49:52] 1123478016.000000
1123478016.000000 != 123.457Änder ich deine Funktion um in:
stock Float:r_mysql_GetFloat(Var[])
{
return floatstr(r_mysql_GetString(Var));
}
und teste nochmal:Zitat[23:51:45] [profiler] Attached profiler to 'gamemodes\rft.amx' (no debug symbols)
[23:51:45] OnGameo
[23:51:45] MySql: Verbindung zur Datenbank: accounts wird hergestellt...
[23:51:45] MySql: Verbindung zur Datenbank: accounts erfolgreich hergestellt...
[23:51:45] 123.457000
Jetzt stimmt der Wert :/. -
Mein Meistertitel wurde mir hier wohl aberkannt... .
r_mysql_GetFloat
Funktioniert nicht richtig.Das Tag fehlt im Funktionskopf.
new bool:r_GET[3][64];
Ehm,bool :-O?
format(query, sizeof(query), "SELECT * FROM %s WHERE `%s`='%s'", r_GET[0], r_GET[1], r_GET[2]);
Dann nimm doch direkt `%s` ( Var ) anstatt * , ist doch unnötiges Laden da du das Ergebnis danach eh wieder löschst und nur den gesuchten Eintrage daraus ausließt.Stimme dennoch Austrianer zu.Da würde ich lieber bei den Funktionieren von Maddin bleiben,die beim Tutorial bei liegen.
-
Was willst n da auch großartig sehen ?
1661.5585,-2159.5645,1661.4371,-2158.66701661.5585 = minX
1661.4371 = maxX-2159.5645 = minY
-2158.6670 = maxYmaxX ist kleiner als minX,wäre also von der logik sowieso schon nicht richtig.Außerdem ist deine Fläche sowas von verdammt klein,bezweifel,dass die Zonen auf die Nachkommastelle genau sind. Da wird bestimmt auf eine ganze Zahl gerundet ( Denke ich,weiss ich aber nicht 100% . Macht aber auch nichts ) . Somit wäre deine Fläche also maximal 1<FE>².
Auch die Farbe ist fast durchsichtig mit 0x5B. Probier zum testen lieber 0xFF bzw FF aus ;).
Mach die Fläche mal größer und probier es nochmal. -
Ab jetzt wird verwarnt,wer weiterhin unnötige Post's bringt.
-
Du hast bestimmt noch mehr Spalten als nur Name. Damit du nur Name einfügen kannst,musst du für die Tabelle einstellen,dass die Anderen Werte automatisch null sind.Sonst klappt INSERT nämlich nicht.
-
Dann biste hier aber im falschen Bereich,ich verschieb's mal :p.
-
Eine Datei die mit DINI erstellt wurde ist nichts Anders,als eine die du mit Notepad öffnest und dort etwas rein schreibst.Es könnte auch mit SII,YINI oder sonst was erstellt worden sein,ist egal.
Da so ein UCP sicherlich über PHP läuft und man sehr wohl mit PHP auch einfache Dateien öffnen kann die mit zB DINI erstellt wurden,ist es also kein Problem.
Das Problem ist nur,dass man jeweils nur die ganzen Zeilen auslesen kann und dort den Wert und den Schlüssel voneinander trennen müsste.Zitatadminlevel=5
kills=50
deaths=53
password=jsef83nwefw39ergwfn039erg9
Bei SQL basierten UCP wäre es da deutlich einfacher,da bekomm ich die Daten schön in einem Array mit Schlüssel zurück. -
Eine Reihe aus der Datenbank löschen ?
Wenn ich dich jetzt richtig verstehe,wieso machst du dann nicht folgendes query:
format( sQuery, sizeof(sQuery), "DELETE FROM `%s` WHERE `ID` = %d",Name,ID );
Ist doch viel einfacher.Solltest dir vielleicht mal etwas Wissen über MySQL aneignen,denn dein Weg ist mehr als umständlich. -
Wir haben hier übrigens ein Tag, [ pwn] und [ /pwn] um den Quellcode bringt wunder ( Ohne Leerzeichen ).
new bInt[][BizzInnen] =
{
{X,Y,Z,INT}, //erklärt sich eigentlich von selbst + NR. 0
{X,Y,Z,INT}, //Nr1
{X;Y;Z;INT} //NR2
};
Ich hoffe du trägst für X , Y , Z und INT auch Werte ein und nicht einfach das Wort.
Übrigens ist in der Zeile mit //NR2 anstatt , zwischen den Einträgen heweils ein Semikolon ( ; ) , ist falsch.
new bInt[][BizzInnen] =
{
{100.0,-500.0,20.0,0}, //erklärt sich eigentlich von selbst + NR. 0
{100.0,-500.0,20.0,0}, //Nr1
{100.0,-500.0,20.0,0} //NR2
}; -
Was soll die Funktion überhaupt bewirken ? Das geht nämlich bestimmt auch einfacher was du vor hast.
new a = (ID + 1), tname[1024][MAX_PLAYER_NAME], tnumber[1024];
Das ist ziemlich viel, meinst du nicht ? Glaube der stack ist nicht mal standardmäßig so groß. Befürchte,dass du damit das Script zum Absturz bekommst bzw den Server. -
Jetzt mal im ernst,hast du dir vor dem Posten das Ganze auch gut überlegt ?
Es gibt definitiv Fehlermeldungen,wenn ich die Funktionen nutzen möchte.Da brauch ich auch keinen Compiler für,dass sieht man doch auf den ersten Blick -
Ich nehme an,du hast dich an das Tutorial gehalten.Falls nicht,schau dir trotzdem diesen Post an.
Probier es mal aus, schau in die Log und poste sie gegenbenfalls. -
Unnötig,da es auch nicht schlimm aussieht :\.
-
stock mysql_GetInt(Table[], Field[], Where[], Is[])
if(mysql_GetInt(playerid,"Adminlevel")>=rang)return 1; //<----- 785
Und da fällt dir nichts auf ? Wo ist Where und Is ? Table ist sowieso falsch,denn die playerid ist a) kein String und b) sowieso kein guter Wert für eine Tabelle -
Dein Code bringt nichts ohne die Datenbank zu sehen. Denn deine Datenbank könnte theoretisch auch "meinedatenbank_nixmitsamp" heißen und deswegen nichts abspeichern. Man könnte dann ja ewig im Quelltext nach Fehlernsuchen auch wenn da keine sind.
Übrigens würde ich nicht immer SpielerName(playerid) aufrufen.Ließ den Spielernamen einmalig aus und speicher es in einer Variable,die du dann an Stelle von SpielerName(playerid) überall bei SavePlayer verwendest. -
stock SqlGetConfig(what[])
{
new query[128];
// mysql_format(MySQL[1], query, "SELECT `%s` FROM `config` LIMIT 1;", what); // geht beides nicht
format(query, sizeof query, "SELECT `%s` FROM `config` LIMIT 1;", what);
printf("SqlGetConfig #1 '%s'",query);
mysql_query(query/*, (-1), (-1), MySQL[1]*/);
print("SqlGetConfig #2");
mysql_store_result(MySQL[1]);
print("SqlGetConfig #3");
mysql_fetch_row(query, MySQL[1]);
print("SqlGetConfig #4");
mysql_fetch_field_row(query, what, MySQL[1]);
print("SqlGetConfig #5");
mysql_free_result(MySQL[1]);
print("SqlGetConfig #6");
return query;
}
Dann Debug den Kram mal komplett und nicht nur so bischen :p.