Im format hinten:
gettime()<werbungtimer
zu:
werbungtimer - gettime();
Im format hinten:
gettime()<werbungtimer
zu:
werbungtimer - gettime();
Color Code:
0xFF0000FF (voll rot)
0xFF000088 (halb durchsichtig)
Also die letzten zwei Stellen des HEX Codes verändern.
00 das kleinste, FF das größte.
Oder eben einen Color Picker benutzen.
Nein und Nein. Das ist doch viel zu umständlich Leute
Einfach das [playerid] weg machen, und bei new das [MAX_PLAYERS] weg machen, fertig.
Müsste meines Erachtens nach so gehen:
CreateDynamicObject...//alle hier oben...
for(new i=0; i<SO_VIELE_OBJEKTE_WIE_DU_HAST; i++) Streamer_SetFloatData(STREAMER_TYPE_OBJECT, i,E_STREAMER_DRAW_DISTANCE, 500.0);
Würde alle auf 500.0 setzen (so zumindest sagt es die Erklärung, ich habe es noch nie benützt).
Oder du änderst den Wert bei allen Objekten einzeln:
native CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 200.0);
Wie bereits schon gesagt, im Float:streamdistance Parameter.
Du solltest das auch per mysql_escape_String escapen, da % in Mysql eine Funktion hat.
10% wäre in mysql alles mit 10 anfängt also 10 101 102 10234 etc.
Genau das will er doch machen.
... WHERE X LIKE ...
LIKE, daher das % zeichen.
Ein Prozentzeichen im format muss so eingegeben werden: %%
format(str, sizeof(str), "Ich habe 10%% Gewinn gemacht.");
print(str);
gibt aus: Ich habe 10% Gewinn gemacht.
Also ich habe PAWN gelernt, indem ich mir den LAdmin4v2 (damals sehr neu) genommen habe, und versucht habe, die einzelnen Teile zu verstehen. Dann habe ich einfach losgelegt, und überlegt, welcher Teil das tut, was ich will. Den Code hab ich mir dann angeschaut, und so für den neuen Code verändert, dass er seinen Zweck erfüllt hat.
Wichtig: Fang klein an, jeder tut das. Ich arbeite nun fast 4 Jahre mit PAWN und mein Wissen ist noch lange nicht komplett, im Gegenteil.
Falls dir jemand sagt, du sollst dir die PAWN Doc durchlesen, lass es, genauso rate ich dir davon ab das wiki in allen Einzelteilen durchzulesen. Du wirst es nicht verstehen. Das kannst du in 3 Jahren machen, wenn du es verstehst, und selbst dann wirst du den Großteil in der Pawn Doc nicht auf Anhieb verstehen.
Noch was: Ausprobieren. Du kannst nichts kaputt machen. Das einzige was passieren kann, ist dass du Errors bekommst. Na und? Für was gibt es STRG+Z. Einfach probieren, wenn du nicht weiter kommst, lass es, oder frag nach Hilfe, sofern es im kleinen Bereich ist.
Learning By Doing nennt sich das. Nicht aufgeben, einfach machen machen machen. Das muss nicht immer perfekt sein, und muss auch nicht immer Sinn ergeben, hauptsache du machst was. Zum Anfang kannst du dir z.B. vornehmen, einen FilterScript der hier im Forum veröffentlicht wurde (einen einfachen) nachzumachen. Musst ihn ja nicht auch veröffentlichen, aber nur zur Übung einfach nachmachen. Wenn du hängst, kannst du ja nachsehen, was falsch ist.
Meiner Meinung nach besser als alles andere.
Wie machst du das?
Du suchst dir einen Filterscript der irgendwas macht, sei es ein Auto Spawn Menu.
Schau dir zuerst mal an, was der FilterScript denn machst (z.B. ein Auto-Menu, um Auto's zu spawnen). Dann überlegst du, was du denn alles dafür brauchst, suchst dir die Funktionen zusammen (Google, SAMP Wiki) und legst los so ein Menu zu erstellen. Wenn du irgendwo hängst, kannst du einen Blick in den Code werfen, und ein paar Zeilen, die du denkst zu verstehen abschreiben, dann siehst du ja was passiert.
Am Besten ist es aber, wenn du es ganz ohne in den Code zu schauen hin bekommst, deshalb fang mit leichten Dingen an.
Bis du erst mal richtig rein findest vergehen mit Sicherheit 1-3 Monate! Also nicht verzagen, du wirst am Anfang ziemlich oft stecken bleiben und auf die Nase fallen (ist wie laufen lernen). Ich weiß das von mir. Wenn du einmal drinne bist, dann gehts jeden Tag besser.
PS: Ich hab es ganz alleine gelernt. Die einzige Hilfestellung die ich damals hatte war ein /kill Command aus 6 Zeilen code, den mir jemand gemacht hat. Den gebe ich dir auch:
if(strcmp(cmdtext, "/kill", true) == 0)
{
SetPlayerHealth(playerid, 0.0);
SendClientMessage(playerid, 0xFF0000FF, "Du hast dich selbst getötet.");
return 1;
}
Das fügst du im callback OnPlayerCommandText ein. Dann auf den Compiler drücken, und Server neu starten.
Viel Erfolg! Dranbleiben!
Das wichtigste ist aber nicht aufgeben es kann auch passieren das erst nach 2 monaten gute fortschritte zu bemerken sind.
Genau! Und das wird ganz sicher so sein.
Stream Distance: Nur für jedes Objekt einzeln, oder eben mit einer Schleife durch alle erstellten Objekte.
Stream Rate: Nur für alle möglich.
Geht auch viel einfacher:
Nein! Dann hast du irgendwann zich tausend Timer, da du den Timer nie beendest, und somit wird er immer nur neu erstellt, was dazu führt, dass der zehnte Spieler auf der ID zehn mal so oft einen PayDay bekommt.
PayTimer[playerid] = SetTimerEx("PayDay",60000,true, "d", playerid);
Beim Login.
if(PayTimer[playerid] != -1) KillTimer(PayTimer[playerid]);
PayTimer[playerid] = -1;
Beim logout.
new PayTimer[MAX_PLAYERS] = {-1,...};
Unter die includes.
Bitte probier es selber aus, ich bin gerade nicht am Computer.
Existiert die Tabelle?
Was passiert wenn du den print(str); über sscanf setzt, was wird dann ausgegeben?
Wenn die Ausgabe im print dann stimmt, also irgendwie sowas: 12|41|1|52|...
dann stimmt (mal wieder) was mit sscanf nicht, dann kannst du dir mal die manuelle Methode (wie ich es mache) anschauen: MYSQL Lädt falsche werte
Wenn die Ausgabe nicht so aussieht, dann zeig mal wie sie aussieht, und wie die Tabelle in der Datenbank aussieht, und sieh nach ob im errorlog/debug was drin steht.
Achso.
Dann mach das [playerid] weg bei allen "durchsuchen", und das [MAX_PLAYERS]. Dann ist es auf die Tonne bezogen.
forward IstAnMull(playerid);
public IstAnMull(playerid)
{
if(IsPlayerConnected(playerid))
{
if(IsPlayerInRangeOfPoint(playerid,5.0,1323.6999500,-1581.5000000,13.4000000)) return 1;
if(IsPlayerInRangeOfPoint(playerid,5.0,1272.9000200,-1472.1999500,9.9000000)) return 2;
//und so weiter, für alle Tonnen
}
return 0;
}
Jetzt klarer?
Den Command brauchst du ja nur einzufügen.
Du lässt "IstAnMull(playerid)" für jede Tonne (IsPlayerInRangeOfPoint) einen anderen Wert zurückgeben (return), also für die erste Tonne 1, die zweite 2, und so weiter.
Im command:
(Der Timer fällt dann weg, ist besser.)
dcmd_durchsuchen(playerid,params[])
{
#pragma unused params
new tonne = IstAnMull(playerid);
if(tonne)
{
if(durchsuchen[playerid][tonne]+300 < gettime()) //300 sek = 5min
{
new rand = random (9);
switch (rand)
{
case 0:
{
SendClientMessage(playerid,Gelb,"Du hast den Müll durchsucht und findest 20$!");
durchsuchen[playerid][tonne] = gettime();
GivePlayerMoney(playerid,20);
}
case 1:
{
SendClientMessage(playerid,Gelb,"Du hast einen Schuh gefunden!");
durchsuchen[playerid][tonne] = gettime();
}
case 2:
{
SendClientMessage(playerid,Gelb,"Du hast einen Fisch gefunden!");
durchsuchen[playerid][tonne] = gettime();
SInfo[playerid][pFisch] += 1;
}
case 3:
{
SendClientMessage(playerid,Gelb,"Du hast eine Hose gefunden!");
durchsuchen[playerid][tonne] = gettime();
}
case 4:
{
SendClientMessage(playerid,Gelb,"Du hast den Müll durchsucht und findest 40$!");
durchsuchen[playerid][tonne] = gettime();
GivePlayerMoney(playerid,40);
}
case 5:
{
SendClientMessage(playerid,Gelb,"Du hast eine Pfandflasche gefunden!");
SInfo[playerid][pPfand] += 1;
durchsuchen[playerid][tonne] = gettime();
}
case 6:
{
SendClientMessage(playerid,Gelb,"Du hast den Müll durchsucht und findest 32$!");
durchsuchen[playerid][tonne] = gettime();
GivePlayerMoney(playerid,32);
}
case 7:
{
SendClientMessage(playerid,Gelb,"Du hast nichts gefunden...");
durchsuchen[playerid][tonne] = gettime();
}
case 8:
{
SendClientMessage(playerid,Gelb,"Du hast nichts gefunden...");
durchsuchen[playerid][tonne] = gettime();
}
}
}
else
{
SendClientMessage(playerid,0x828282FF,"Du kannst diesen Mülleimer noch nicht durchsuchen...");
}
}
else
{
SendClientMessage(playerid,0x828282FF,"Du hast nichts gefunden...");
}
return 1;
}
und new:
new durchsuchen[MAX_PLAYERS][SOVIELETONNENWIEDUHAST];
case DIALOG_REGISTER_SET_PASSWORD:
{
if(response)
{
new str[sizeof(Register_Password)];
format(str,sizeof(str),"");
for(new i=0; i<strlen(inputtext); i++){strcat(str,"-");}
format(Register_Password[playerid],sizeof(Register_Password),str);
PlayerTextDrawSetString(playerid,RegisterInput[2],str);
}
}
Habs jetzt so
Lag auch da dran aber wenn ich im veh bin geht das nicht?
Nur wenn ich onfoot bin xD?
Genau. Der wird nur zu Fuß erkannt, das ist bei manchen Keys so.
Es ist immer gut wenn man es im Fahrzeug und zu Fuß probiert.