Teile die Zeile mit dem format in mehrere Zeilen auf, die scheint zu lang zu sein.
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Moin habe folgendes Kommando
C
Alles anzeigenif(strcmp(cmd, "/dropmoney", true) == 0) { new dropval; if(sscanf(cmdtext[strlen("/dropmoney")+1], "i", dropval)) return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /dropmoney [value]"); if(GetPlayerMoney(playerid) >= dropval && maxmoney <= 4000 && dropval > 0 && dropval <= 100000 && (maxmoney+(dropval/MoneyVal))<(MAX_PICKUPS-sizeof(ActorPickups)-sizeof(InfoPickups)-1-((dropval/MoneyVal)+maxmoney)) && dropval != 0 && !IsPlayerInAnyVehicle(playerid)) { if(dropval%MoneyVal == 0) { new dropstring[32]; format(dropstring,sizeof(dropstring),"SERVER: Dropped $%d",dropval); SendClientMessage(playerid, COLOR_WHITE, dropstring); GivePlayerMoneyText(playerid,-dropval); for(new Float:i; i <Float:(dropval/MoneyVal); i++) { maxmoney = maxmoney +1; new Float:x, Float:y, Float:z; GetPlayerPos(playerid,x,y,z); GetXYInFrontOfPlayer(playerid,x,y,4); GenerateRandomPickup(1212,19,x+0.5,x-0.5,y+0.5,y-0.5,z+0.5,z-0.5,0); } } else { if(dropval%MoneyVal != 0) { SendClientMessageEx(playerid, COLOR_WHITE, "SERVER: The desired value must be divisible by $%d",MoneyVal); } } } else { if(GetPlayerMoney(playerid) < dropval ) { SendClientMessage(playerid, COLOR_WHITE, "SERVER: You do not have enough money."); } if(dropval > 100000) { SendClientMessage(playerid, COLOR_WHITE, "SERVER: The desired value has to be $100000 or less"); } if(dropval==0) { SendClientMessage(playerid, COLOR_WHITE, "SERVER: You can not drop nothing!"); } if((maxmoney+dropval/MoneyVal)>=4095 && dropval <= 100000) { new allowmoney[128]; format(allowmoney,sizeof(allowmoney),"SERVER: Because of limitations you can not drop more than $%d right now!",(4095-maxmoney)*MoneyVal); SendClientMessage(playerid,COLOR_WHITE,allowmoney); printf("Player may only drop %d",(4095-maxmoney)*MoneyVal); } if(maxmoney > 4000) { SendClientMessage(playerid,COLOR_WHITE,"SERVER: Due to limitations you can not drop anything right now. Try again later."); } } }Der Teil
for(new i; i <dropval/MoneyVal; i++) war vorher for(new i; i <dropval/1000; i++), wollte jedoch den Wert eines Geldpakets variabel einstellen und habe daher jetzt via #define einen Wert festgesetzt.
Mit maxmoney will ich verhindern dass die MAX_PICKUPS Grenze ueberschritten wird
Problem ist jedoch: Wenn ich z.B. MoneyVal 330 habe und dann beispielsweise irgendwas durch 330 habe, dann habe ich doch nen Float als Bedingungen im Zweifelsfall oder?
Oder wird dieser Fall schon durch das Modulo ausgeschlossen? Kann ich den Befehl uebrigends vereinfachen?
Weil ich habe probiert einen Float als Iterator zu nehmen und dann die Bedingungen auch als Float, aber wenn ich den Float erhoehen will mit ++ wird er interessanterweise um 1 kleiner statt groesser

Gibt es weiterhin die Moeglichkeit Pickups zu loeschen nach einer bestimmten Zeit, also wenn keiner die mit diesem Command gedroppten Pickups einsammelt innerhalb einiger Minuten?
Habe da irgendwie an einen Timer gedacht der die PickupID uebergibt und dann mit einer Funktion IsValidPickup ueberprueft ob dieses existiert, und wenn ja es destroyed und das PickupArray neu sortiert.
Jedoch sehe ich nur den Haken dass wenn man irgendwie 1000 Dinger droppt man dann 1000 Timer hat was wohl stark unguenstig ist fuer den ServerBitte um Rat
-
Wie ist es möglich, von einem X-beliebigen Befehl, oder Funktion die Reaktionszeit im Chat anzeigen zu lassen?
Beispiel:
/testim Chat:Der Befehl hat x-millisekunden gedauert zum ausführen.Wichtig ist halt in Millisekunden
new tick = GetTickCount();
//Code...
printf("Der Befehl hat %d Millisekunden gedauert.", GetTickCount()-tick); -
-
@Jeffry Gibt es eine bekannte Methode, womit ich die Fläche einer Area berechnen kann? Wobei diese via CreateDynamicPolygon (Incognito) erstellt werden, dementsprechend sind es nicht nur Rechtecke o.ä. sondern komplexere Formen.
http://www.mathopenref.com/coordpolygonarea.html
http://www.mathopenref.com/coordpolygonarea2.htmlDie Funktion im zweiten Link kannst du ja problemlos an PAWN anpassen.
EDIT:
Also so:
forward Float:polygonArea(coord[2][], numPoints);
stock Float:polygonArea(coord[2][], numPoints)
{
new Float:area = 0.0, j = numPoints-1;
for(new i=0; i<numPoints; i++)
{
area += (coord[0][j]+coord[0][i]) * (coord[1][j]-coord[1][i]);
j = i;
}
area = area / 2.0;
return area;
} -
new tick = GetTickCount();//Code...printf("Der Befehl hat %d Millisekunden gedauert.", GetTickCount()-tick);
Danke erstmal!
Es klappt nur halb, er gibt mir immer aus, selbst bei %.10f, dass er 0,000000 millisekunden braucht, also entweder hat es tatsächlich keine verzögerung, oder irgendwas stimmt nicht..Beispielswiese bei dem Befehl:
ocmd:sethp(playerid,params[])
{
new tick = GetTickCount();
if(Spieler[playerid][Adminlevel] < 2)return SendClientMessage(playerid,COLOR_GRAD2,"* Du besitzt nicht die benötigten Rechte.");
new pID,leben,string[128];
if(sscanf(params, "ui",pID,leben))return SCM(playerid,COLOR_GRAD2,"** FEHLER: /sethp [ID/Name] [Leben]");if(leben < 0|| leben > 200) return SendClientMessage(playerid, COLOR_LIGHTRED, "Das Leben kann nicht unter 1 und über 200 sein.");
SetPlayerHealth(pID,leben);
format(string,sizeof(string),"** Du hast das Leben/die HP von %s auf %d geändert",SpielerName(pID),leben);
SendClientMessage(playerid,COLOR_ORANGE,string);format(string,sizeof(string),"** Dein Leben wurde von %s auf %d geändert.",SpielerName(playerid),leben);
SendClientMessage(pID,COLOR_ORANGE,string);
format(string,sizeof(string),"Der Befehl hat %.10f ms gedauert.",GetTickCount()-tick);
SCM(playerid,COLOR_RED,string);
return 1;
} -
-
mach mal statt %f ein %d @Keslo
Kommt auch ebenfalls 0 raus
-
moin ich habe ein enum "pReturnPropertyDataHausCount" Dadrin sollte sein wieviele häuser jemand besitzt allerdings weiß bzw finde ich die definition dafür nicht oder wie wird das definiert ?
-
@Keslo deine Messmethode ist nicht genau genug beziehungsweise geht der Befehl tatsächlich zu schnell sodass bei deiner Messmethode 0 rauskommt. Was du machen kannst ist den selben Befehl z.b per schleife 1000x ausführen zu lassen. Dann hast du einen ordentlichen wert an den du dich orientieren kannst .
-
Beitrag von Paddy_Corleone ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Falsch gelesen (). -
Ja Moin!

Ich habe (mal wieder) ein Problem, undzwar möchte ich nicht mehr NPC Arbeiten, wieso auch? Actors reichen für meine Dienst aus.

Jetzt habe ich aber das Problem, das mir der Actor wohl immer durch die Map Fällt.
(Selbstgemapptest Interior)
enum ActorEnum
{
aName[128],
Float:aX,
Float:aY,
Float:aZ,
Float:aA,
aInterior,
aSkin,
aID
};
new ActorInfo[][ActorEnum] = {
{""#FARBE_GELB"Willkommen in der Stadthalle.\nWie kann ich ihnen Helfen?\nTippe: '"#FARBE_ORANGE"/stadthalle"#FARBE_GELB"'", 1028.6716, -205.8224, 2215.5969, 93.4388, 0, 11, 0}
};// OnGameModeInit
for(new i = 0; i < sizeof(ActorInfo); i++)
{
CreateDynamic3DTextLabel(ActorInfo[i][aName], -1, ActorInfo[i][aX], ActorInfo[i][aY], ActorInfo[i][aZ]+2.0, 20.0);
ActorInfo[i][aID] = CreateActor(ActorInfo[i][aSkin], ActorInfo[i][aX], ActorInfo[i][aY], ActorInfo[i][aZ], ActorInfo[i][aA]);
SetActorVirtualWorld(ActorInfo[i][aID], -1);
SetActorInvulnerable(ActorInfo[i][aID], true);
}Hat jemand eine Lösung dafür eventuell?
MfG.
Aaron! -
Vielleicht nach paar Sekunden nochmal die Position sitzen?
-
public OnActorStreamIn(actorid, forplayerid)
{
new string[64];
format(string, sizeof(string), "Actor %d Loading", actorid);
SendClientMessage(forplayerid, -1, string);
return 1;
}Ich habe dies zB gefunden, aber auch diese "Funktion" funktioniert leider nicht.
Ist am Code vielleicht etwas Falsch?
Apple, wie meinst es die Position neu setzen? Sobald jemand das Interior betritt die Actors dann alle neu Setzen? Oo
MfG.
Aaron! -
Naja sobald ein Spieler in die Nähe kommt, den Actor die Position neu setzen.
http://wiki.sa-mp.com/wiki/SetActorPos -
Nunja, das ist ja, das ich die mit einer Forschleife laden lasse.
Ich müsste also entweder ein Stock Benutzen den ich immer aufrufen muss wenn er ein "Raum" betreten tut wo ein Actor ist,
oder sobald ein Spieler den Raum betreten tut wo ein Actor ist die Schleife neu Starten.Das Echt doof Gelöst, eine Funktion den Actor zu Freezen gibt es nicht, oder?
MfG.
Aaron! -
@Aaron1337 die Objekte werden wahrscheinlich per Objectstreamer erstellt oder?
Werden denn die Objekte auch für den Actor gestreamt? Bzw werden die auch für den gestreamt wenn sonst kein Spieler in der nähe ist oderso?
Du könntest ja zum Beispiel den Boden auf dem der stehen soll als normales Objekt einfügen. Würde das das Problem lösen?Sorry falls das Blödsinn ist, ich hab schon länger nichts mit Pawn gemacht und kenn mich generell mit diesen Actors nicht so wirklich aus

-
@Keslo deine Messmethode ist nicht genau genug beziehungsweise geht der Befehl tatsächlich zu schnell sodass bei deiner Messmethode 0 rauskommt. Was du machen kannst ist den selben Befehl z.b per schleife 1000x ausführen zu lassen. Dann hast du einen ordentlichen wert an den du dich orientieren kannst .
perfekt, danke dir!

-
Hallo,
Ich habe eine frage.
Wen ich jetzt Fahrschul Autos im Script erstelle.
Wie kann man die nicht betretbar machen erst betretbar machen wen er /fahrschein macht und dafür bezahlt.
Wen er im Auto sitzt das Checkpoints erscheinen? -
Hallo,
Ich habe eine frage.
Wen ich jetzt Fahrschul Autos im Script erstelle.
Wie kann man die nicht betretbar machen erst betretbar machen wen er /fahrschein macht und dafür bezahlt.
Wen er im Auto sitzt das Checkpoints erscheinen?Du setzt am besten eine Bool-Variable auf true, sobald er bezahlt hat. Dann fragst du ab, bei OnPlayerEnterVehicle, oder OnPlayerStateChange, ob diese Variable auf true ist, wenn ja darf er rein.

