Habe es jetzt schon oft benutzt, und finde es sehr sehr nützlich.
Es spart extrem viel Zeit beim Scripten! Danke
Better Format
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
-
-
Warum das ganze als Plugin rausbringen und nicht als Pre-Compiler Funktion?
-
Warum das ganze als Plugin rausbringen und nicht als Pre-Compiler Funktion?
Ich habe schon erwähnt, das es Möglichkeiten gibt (Ryder hatte mal so etwas "versucht).Aber, die Sache ist das sich der Speicher bei PAWN nicht ganz Dynamisch verändern / beeinflussen lässt.
Das heißt, das du oft in die Gefahr raus läufst das du Referenzen zu Memory- Regionen verlierst und somit ein Memory Leak hast.
-
Und wenn man Global einfach nen String definiert und dann über ne Pre-Compiler funktion via format immer nur den selben string formatiert und diesen dann über SendClientMessage ausgibt?
In der Theorie dürfte es da nicht zu den Lücken kommen.. Obwohl ich mich mit der Speicherdynamic nie wirklich beschäftigt habe.Wenn dies aber auch nicht funktioniert wäre das Plugin natürlich eine gute Lösung.
-
@Firerfan
So, oder so bist du darauf angewiesen wenigstens etwas mit Speicher Manipulation zu Arbeiten wenn es Effizient und ohne Überschneidungen funktionieren soll.
Ich kann dir jetzt keine genauere Ergebnisse oder anderes Liefern, da ich jetzt in PAWN noch nicht solche Versuche gewagt hatte / benötigt habe.Und über die Makro würdest du dann sowieso wieder "format" Aufrufen, was wieder etwas Ausführzeit benötigt was ich hier zB nicht mache.
-
Gut zu gebrauchen!
10/10 -
Schöne Arbeit, gut hinbekommen
sehr nützlichMit freundlichen Grüssen
Haui_CH
-
Ich habe schon erwähnt, das es Möglichkeiten gibt (Ryder hatte mal so etwas "versucht).Aber, die Sache ist das sich der Speicher bei PAWN nicht ganz Dynamisch verändern / beeinflussen lässt.
Das heißt, das du oft in die Gefahr raus läufst das du Referenzen zu Memory- Regionen verlierst und somit ein Memory Leak hast.
Y_Less hat eine Include gemacht mit der es möglich ist sowas ohne Plugin zu machen..
http://forum.sa-mp.com/showthread.php?t=399069 -
Y_Less hat eine Include gemacht mit der es möglich ist sowas ohne Plugin zu machen..
Und, schon wieder kommen wir zu der Sache das die PAWN Version von SA:MP einfach nicht für Dynamischen Speicher umgang ausgelegt ist auch wenn es Y_LESS für einige der "Meister" Zauberer ist heißt es nicht das dieser Code nach einer längeren Laufzeit Stabil & ohne Probleme läuft.Soweit, ich es der Include entnommen habe löst diese immer die Adressen für Funktionen wie "strlen,strcat,format,uvm" auf...
Mit diesem Plugin umgehe ich dies und Löse die Adressen für SendClientMessage etc nur EINMAL auf, und der Rest wird nicht über format oder anderes geleitet sondern von mir selbst in C++ Verwaltet.
Jeder, hat sein eigenen Geschmack und sollte wissen was er Verwendet daher bitte ich darum mit Sachlicher Kritik zu kommen (.. und nicht den Texten von jemanden anderen) als immer wieder zu probieren irgendetwas mit irgendwas anderen zu unterjochen. -
Bist du sicher, dass dein Code besser ist als dieser hier:
Hier klicken für den Code #define BYTES_PER_CELL 4Hier klicken für den Code stock SendClientMessageFormatted(playerid, color, fstring[], {Float, _}:...)
{
static const STATIC_ARGS = 3;
new n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
if(n)
{
new message[144],arg_start,arg_end;
#emit CONST.alt fstring
#emit LCTRL 5
#emit ADD
#emit STOR.S.pri arg_startHier klicken für den Code #emit LOAD.S.alt n
#emit ADD
#emit STOR.S.pri arg_end
do
{
#emit LOAD.I
#emit PUSH.pri
arg_end -= BYTES_PER_CELL;
#emit LOAD.S.pri arg_end
}
while(arg_end > arg_start);Hier klicken für den Code #emit PUSH.S fstring
#emit PUSH.C 144
#emit PUSH.ADR messageHier klicken für den Code n += BYTES_PER_CELL * 3;
#emit PUSH.S n
#emit SYSREQ.C formatHier klicken für den Code n += BYTES_PER_CELL;
#emit LCTRL 4
#emit LOAD.S.alt n
#emit ADD
#emit SCTRL 4Hier klicken für den Code if(playerid == INVALID_PLAYER_ID)
{
#pragma unused playerid
return SendClientMessageToAll(color, message);
} else {
return SendClientMessage(playerid, color, message);
}
} else {
if(playerid == INVALID_PLAYER_ID)
{
#pragma unused playerid
return SendClientMessageToAll(color, fstring);
} else {
return SendClientMessage(playerid, color, fstring);
}
}
}Würde mich mal interessieren, was du davon hälst
mfg.
-
Bist du sicher, dass dein Code besser ist als dieser hier:
Hier klicken für den Code #define BYTES_PER_CELL 4Hier klicken für den Code stock SendClientMessageFormatted(playerid, color, fstring[], {Float, _}:...)
{
static const STATIC_ARGS = 3;
new n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
if(n)
{
new message[144],arg_start,arg_end;
#emit CONST.alt fstring
#emit LCTRL 5
#emit ADD
#emit STOR.S.pri arg_startHier klicken für den Code #emit LOAD.S.alt n
#emit ADD
#emit STOR.S.pri arg_end
do
{
#emit LOAD.I
#emit PUSH.pri
arg_end -= BYTES_PER_CELL;
#emit LOAD.S.pri arg_end
}
while(arg_end > arg_start);Hier klicken für den Code #emit PUSH.S fstring
#emit PUSH.C 144
#emit PUSH.ADR messageHier klicken für den Code n += BYTES_PER_CELL * 3;
#emit PUSH.S n
#emit SYSREQ.C formatHier klicken für den Code n += BYTES_PER_CELL;
#emit LCTRL 4
#emit LOAD.S.alt n
#emit ADD
#emit SCTRL 4Hier klicken für den Code if(playerid == INVALID_PLAYER_ID)
{
#pragma unused playerid
return SendClientMessageToAll(color, message);
} else {
return SendClientMessage(playerid, color, message);
}
} else {
if(playerid == INVALID_PLAYER_ID)
{
#pragma unused playerid
return SendClientMessageToAll(color, fstring);
} else {
return SendClientMessage(playerid, color, fstring);
}
}
}Würde mich mal interessieren, was du davon hälst
mfg.
Um mich kurz zu Halten, Ja jedenfalls in der Stabilität...Gründe habe ich oben genannt.
-
schaut nützlich aus
-
-
Kaliber
kann man den code so nutzen also alles in ner scm?
Ja...sonst würde das keinen Sinn machen, das ich so einen Code poste -
ja meine logik is fürn ar***
-
Gutes Plugin, und spart einiges an Zeit wenn man am scripten ist.
-
SendClientMessageX
Wird es auch ein Update kommen mit "ShowPlayerDialogX"?
Ist aber auf jeden fall echt Genial!
10/10 Punkte! -
Dieser Thread kann geschlossen werden, ich stelle den Support für dieses Plug-in ein.
Es wird bald ein anderes Plug-in geben was diese Funktionen beinhaltet, sowie auch einige andere (ob es hier Releast wird ist nicht Klar). -
Bei mir ladet mein Gamemode nicht, wenn ich diese Include und das Plugin hinzufüge ...
-