Weiß nicht ganz was du meinst, aber denke du suchst das hier:
[wiki]PlayCrimeReportForPlayer[/wiki]
Weiß nicht ganz was du meinst, aber denke du suchst das hier:
[wiki]PlayCrimeReportForPlayer[/wiki]
Evtl postest du mal das Statement welches du absendest ![]()
Und die PlayerCamera wird wieder so gesetzt, wie im Bild von meinem Beitrag zuvor.
Du könntest es berechnen lassen:
new Float:x=Kamera[i][k_X], Float:y=Kamera[i][k_Y],Float:z=Kamera[i][k_Z],Float:a=Kamera[i][k_RotZ];
x += 5.0 * floatsin(-a, degrees);
y += 5.0 * floatcos(-a,degrees);
SetPlayerCameraLookAt(playerid,x,y,z-1.0);
Mit der Funktion SetPlayerCameraPos positionierst du die Kamera an den Koordinaten.
Dann mit der LookAt Funktion, gibst du quasi die Koordinaten an, wohin die Kamera schauen soll...die Rotation wird dabei automatisch justiert ![]()
SetPlayerCameraLookAt(playerid, x, y, z, rotx, roty, rotz); ?
Du löst das durch 2 Funktionen:
[wiki]SetPlayerCameraPos[/wiki]
[wiki]SetPlayerCameraLookAt[/wiki]
crash entweder ein Klammerfehler irgendwo bei public onplayertextcommand oder irgendetwas anderes
Zeile 209...
Klammer löschen ![]()
Kann mir jemand erklären wie ich diese Funktion benutzen kann, siehe
Die Funktion heißt: http://wiki.sa-mp.com/wiki/EditObject
@Retect
Du solltest normalerweise...Fehler beim compilen bekommen...du nutzt die Funktionen falsch...
Beim speichern lösche das:
GetPlayerScore(playerid,dini_Int(Spieler,"Level"));
GetPlayerMoney(playerid,dini_Int(Spieler,"Geld"));
und beim laden schreib es so:
SetPlayerScore(playerid,dini_Int(Spieler,"Level"));
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid,dini_Int(Spieler,"Geld"));
mfg. ![]()
Hast du zufällig nen Beispiel zur Hand ?
Hier wäre ein Beispiel:
stock SCMex(playerid, color, const string[])
{
const max_size = 128;
new l = strlen(string),size=l,buffer[max_size+1],tmp;
while(l > 0)
{
strmid(buffer,string,tmp,(tmp+max_size > size)?(size):(tmp+max_size),sizeof(buffer));
switch(buffer[0])
{
case ' ': strdel(buffer,0,1);
}
SendClientMessage(playerid,color,buffer);
l -= max_size,tmp += max_size;
}
return 1;
}
Alles anzeigen
Das splittet automatisch den Text in 128 Zeichen Blöcke auf, kannst max_size beliebig verändern
(logischerweise sollte es > 0 sein xD)
Es kommt auch darauf an, wie du DIALOG_COLOR_USER definiert hast ![]()
Poste mal am besten dein define ![]()
Nur um das kurz anzumerken, dein Post ist in der falschen Sektion.
Extra:
Und als Extra wollte ich noch fragen ob man vllt so was wie eine Flagge an Fahrzeugen machen kann. Weil ein User von meiner Server ist Russenmafia Leader und möchte Russenland Flaggen an die Fahrzeuge. Deshalb wollte ich fragen ob man das irgendwie ein scripten kann, wenn nicht dann sage ich ihm das es so was nicht gibt.
Ja das ist mit ein bisschen tricksen möglich.
Hier mal ein Beispiel:
stock CreateRussianFlag(x,y,z)
{
SetObjectMaterialText(CreateObject(19560,x,y,z+0.16,90,0,0),!" ",0,OBJECT_MATERIAL_SIZE_256x128,!"Arial",4,1,-1,-1,1);
SetObjectMaterialText(CreateObject(19560,x,y,z,90,0,0),!" ",0,OBJECT_MATERIAL_SIZE_256x128,!"Arial",4,1,-1,0xFF0000FF,1);
SetObjectMaterialText(CreateObject(19560,x,y,z-0.16,90,0,0),!" ",0,OBJECT_MATERIAL_SIZE_256x128,!"Arial",4,1,-1,0xFFFF0000,1);
return 1;
}
Im Anhang ist ein Bild.
Zum attachen logischerweise die Objekte einzeln erstellen und dann per AttachObject untereinander dranhängen ![]()
alles valide EMail Adressen
Lässt nur 1 von denen zu...
Wobei man halt wirklich regex oder php für eine 100%ige Validation nutzen sollte...
Hier mein Code nochmal bissl abgeändert...
stock IsValidMailAddr(const string[])
{
new l = strlen(string),p_s;
if(l < 5 || strfind(string,",") != -1) return 0;
p_s = strfind(string,"@");
if(p_s == -1) return 0;
if(strfind(string,"@",false,p_s+1) != -1) return 0;
if(strfind(string,".",false,p_s) == -1 || string[p_s+1] == '.' || string[p_s-1] == '.') return 0;
return (('A' <= string[l-1] <= 'Z' || 'a' <= string[l-1] <= 'z') && ('A' <= string[0] <= 'Z' || 'a' <= string[0] <= 'z'));
}
Hmmm anstatt das Plugin zu nutzen könnte man auch einen HTTP Request machen und mit PHP prüfen...
Wenn man es zu 100% validiert haben will....
Aber fürs erste sollte das reichen:
stock IsValidMailAddr(const string[])
{
new l = strlen(string),p_s;
if(l < 5 || strfind(string,",") != -1) return 0;
p_s = strfind(string,"@");
if(p_s == -1) return 0;
if(strfind(string,"@",false,p_s+1) != -1) return 0;
if(strfind(string,".",false,p_s) == -1 || string[p_s+1] == '.' || string[p_s-1] == '.') return 0;
return (('A' <= string[l-1] <= 'Z' || 'a' <= string[l-1] <= 'z'));
}
Hier hab mal eine kleine Funktion geschrieben...sollte klappen ![]()
stock IsValidMailAddr(const string[])
{
new l = strlen(string),p_s,p;
if(l < 5 || strfind(string,",") != -1) return 0;
p_s = strfind(string,"@");
if(p_s == -1) return 0;
if(strfind(string,"@",false,p_s+1) != -1) return 0;
p = strfind(string,".",false,p_s);
if(p == -1 || p_s == p+1) return 0;
for(new i=p+1; i!=-1; i=strfind(string,".",false,p+1)) p=i;
return !(p+1==l);
}
Alles anzeigen
Was stimmt den nun nicht?
Les doch mal meine Posts....
du musst es so schreiben:
new id=CreateObject(3975, 1469.2183, -1643.1805, 12.9006, 0.0000, 0.0000, 180.0000);
SetObjectMaterial(id, 11, 8399, "vgs_shops", "vgsclubwall05_128", 0xFFFFFFFF);
SetObjectMaterial(id, 8, 4010, "lanblokb2", "sl_lavicdtwall1", 0xFFFFFFFF);
Ja, aber das ist ja auch nicht richtig, da jeder Materialindex für etwas anderes steht.
z.B. ist 8 die Mauer und 11 das Häuschen auf dem Objekt.
Wenn du jetzt aber z.B. die 0 nimmst, ist das der Weg zwischen den beiden, der dann auch eine andere Textur bekommt, was aber nicht gewollt ist.
Aus diesem Grund sollte er einfach das schritt für schritt machen. (Dies ist auch wesentlich performanter als eine Schleife) ![]()
Schreib den Befehl mal so:
ocmd:buysnack(playerid)
{
if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT)return SendClientMessage(playerid,C_Error,"Du bist nicht zu Fuß!");
if(!IsPlayerNearSnack(playerid))return SendClientMessage(playerid,C_Error,"Du bist nicht in der Nähe eines Snackautomats.");
if(sInfo[playerid][canbuysnack] == 0) return SendClientMessage(playerid,COLOR_GRAY,"* Du kannst nur alle 10 Sekunden einen Snack kaufen!");
new snackid = GetPlayerSnackID(playerid),Float:PlayerHealth;
if(snackid == -1) return SendClientMessage(playerid,COLOR_GRAY,"Ungültige snackid!");
GetPlayerHealth(playerid,PlayerHealth);
if(getplayermoney(playerid)<=Food[snackid][fprice])return SendClientMessage(playerid,COLOR_GRAY,"Du hast nicht genug Geld dabei!");
if(PlayerHealth >= 80) return SendClientMessage(playerid,COLOR_GRAY,"* Du hast keinen Hunger!");
if(Food[snackid][fvalue] == 0) return SendClientMessage(playerid,COLOR_GRAY,"* Der Automat ist leer!");
TogglePlayerControllable(playerid,false);
TogglePlayerControllable(playerid,true);
ApplyAnimation(playerid,"VENDING","VEND_Use",4.1,0,1,1,0,2000,1);
Food[snackid][fvalue]--;
UpdateSnackLabel(GetPlayerSnackID(playerid));
SetTimerEx("ClearAnimations", 2000, false, "d", playerid);
SetTimerEx("AllowSnackBuy", 10000, false, "d", playerid);
sInfo[playerid][canbuysnack] = 0;
SetPlayerHealth(playerid,PlayerHealth + 20);
return 1;
}
...so musst du es machen:
new id=CreateObject(3975, 1469.2183, -1643.1805, 12.9006, 0.0000, 0.0000, 180.0000);
SetObjectMaterial(id, 11, 8399, "vgs_shops", "vgsclubwall05_128", 0xFFFFFFFF);
SetObjectMaterial(id, 8, 4010, "lanblokb2", "sl_lavicdtwall1", 0xFFFFFFFF);
@German_ScripterHD
Das ist Schwachsinn, da so 10 Objekte erstellt werden...und jedes mit einer anderen Textur..das ist so gar nicht das, was er will ![]()
Eine Funktionen einen Textdraw heller zu machen gibt es so nicht.
Nun, ich weiß nicht von was die rede ist, wenn es sich aber nur um Text handelt, geht das mit ~h~
Also muss ich das immer so schreiben, bei Objekten die man mehrfach Texturieren kann?
Ja, da du ja immer nur das eine Objekt manipulieren willst..und nicht immer ein neues ![]()
Der Fehler den du machst ist, du erstellst 2 Objekte...dabei musst du die ID von dem einen Objekt nur anpassen...
Sprich du musst es so schreiben:
new obj = CreateObject(8650, 1492.8816, -1597.7205, 12.1815, 0.0000, 0.0000, 90.0000);
SetObjectMaterial(obj, 0, 9239, "stuff2_sfn", "hedge1", 0xFFFFFFFF);
SetObjectMaterial(obj, 1, 9239, "stuff2_sfn", "hedge1", 0xFFFFFFFF);
mfg. ![]()