Ne, kann man nicht.
Der Übersicht halber mach Ich zB aber immer sowas.
if(
PlayerInfo[playerid][pLeader] == 5 ||
PlayerInfo[playerid][pLeader] == 6 ||
PlayerInfo[playerid][pLeader] == 9 ||
PlayerInfo[playerid][pLeader] == 12
) {
// Code
}
Ne, kann man nicht.
Der Übersicht halber mach Ich zB aber immer sowas.
if(
PlayerInfo[playerid][pLeader] == 5 ||
PlayerInfo[playerid][pLeader] == 6 ||
PlayerInfo[playerid][pLeader] == 9 ||
PlayerInfo[playerid][pLeader] == 12
) {
// Code
}
Oh man... da frag Ich mich wie du über 1000 Post's sammelst, aber solche Grundlagen nicht kannst :-O.
if( Farbe1 < 0 || Farbe1 > 126 || Farbe2 < 0 || Farbe2 > 126 )
kann man aber auch etwas Anders schreiben
if( !(0 < Farbe1 < 126) || !(0 < Farbe2 < 126) )
Pastebin ( Downloadlink ) fehlt.
Nachtragen oder hier wird geschlossen :-O
Pastebin ( Downloadlink ) fehlt.
Nachtragen oder hier wird geschlossen :-O
http://forum.sa-mp.de/off-topi…sign/board111-3d-modding/
Man sollte den Bereich eher in GTA Modding umbennen. Dann kann man dort auch den ganzen Kram posten den du oben angesprochen hast.
Davon abgesehen, dass es auch fcmd|dasisteintest heißt, ist es bei ocmd und Co. genauso, bedingt durch CallLocalFunction (case sensitive).
Nur weil es bei ocmd auch so ist,ist es nicht richtig.Es hat schon seinen Grund,wieso tolower benutzt wird von Leuten wie Y_Less oder ZeeX. Nur die Kopien haben komischerweise selten den Case-Sensetive Aspekt :/.
Man muss /dasisteintest eingeben, /Dasisteintest würde nicht funktionieren,eben weil es case sensetive ist. Deshalb ( finde Ich jedenfalls ) , ist die tolower Maßnahme sehr nützlich. Man kann ja nicht einfach wie bei strcmp für ignore-case true / false angeben .
Zitat"@ Goldkiller: wie ich schon geschrieben habe, sind diese Tests mit meinen Plugin gemacht worden.
Wie kommst du auf Nanosekunden? Genauer als Microsekunden gebe ich das nirgends an...
Wenn ihr wollt, kann ich die Tests bald nochmal öfters wiederholen. "
Hups,Nanosekunde war natürlich falsch :p.
Ich meine die Nachkommastellen, wie hier : 3,37 ms
Wie du dort auf 37 kommst,denn in PAWN ist es ja nur möglich auf Millisekunden zu gehen. Wie auch immer,der Testcode wäre sehr nützlich.Versteh auch nicht so recht wieso den bisher noch nicht gepostet hast.
Hier zB bekommt man direkt den Testcode mit schöner Grafik :p
http://forum.sa-mp.com/showthread.php?t=169029
Alles anzeigenMeinen Tests zu Folge ist meine eigene Variante die schnellste (sogar minimal schneller als ZCMD), wenn du es auch testen willst:
#include <sscanf2>
#define MAX_COMMAND_LEN 31
#define MAX_PARAMS_LEN 128
#define fcmd|%1(%2) forward fcmd_%1(%2); public fcmd_%1(%2)
forward fcmdCommandText(playerid, cmdtext[]);
public OnPlayerCommandText(playerid, cmdtext[])
{
new fcmdcommand[MAX_COMMAND_LEN], fcmdparams[MAX_PARAMS_LEN];
cmdtext[0]=' ';
if(sscanf(cmdtext, "s[" #MAX_COMMAND_LEN "]s[" #MAX_PARAMS_LEN "]", fcmdcommand, fcmdparams)) fcmdparams[0]=' ';
format(fcmdcommand, MAX_COMMAND_LEN, "fcmd_%s", fcmdcommand);
if(CallLocalFunction(fcmdcommand, "ds", playerid, fcmdparams)) return 1;
cmdtext[0]='/';
return CallLocalFunction("fcmdCommandText", "ds", playerid, cmdtext);
}
#define OnPlayerCommandText fcmdCommandText
Funktioniert aber nicht mal richtig. fcmd_DasIstEinTest ist nicht fcmd_dasisteintest .
Abgesehen davon,dass 10 Durchläufe sowieso nicht Aussagekräftig genug sind, wie kommst du denn auf die Zahlenwerte?
Du kannst mit pawn nur MS bekomme, keine Nanosekunden. Wie kommst du daher auf 3,37 ?
http://forum.sa-mp.com/showthread.php?p=365121#post365121
Da habt ihr mal ein Aussagekräftigeren Test als diesen hier. Auch ohne Sourcecode nicht wirklich wertbar ;). Hab schon oft erwähnt,man sollte auf ZCMD umsteigen.Allerdings ist es nicht immer am schnellsten. Den Grund dazu findet man im verlinkten Beitrag,
Wie ist denn DMRate[] definiert ? Musst auch aufpassen bei der Division durch 0.
%.2f
Für 2 Nachkommastellen.
Könntest doch bei OnPlayerRequestClass überprüfen ob der Spieler im Krankenhaus ist ( oder was du halt hast ) und dann direkt wieder spawnen lassen mit SpawnPlayer.
Lesen hilft.Du benutzt den Variablennamen x2,y2 usw öfters.Das verwirrt.
public Float:GetDistanceBetweenPlayers(p1,p2)
{
new Float:__x1,Float:__y1,Float:__z1,Float:__x2,Float:__y2,Float:__z2;
if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
{
return -1.00;
}
GetPlayerPos(p1,__x1,__y1,__z1);
GetPlayerPos(p2,__x2,__y2,__z2);
return floatsqroot(floatpower(floatabs(floatsub(__x2,__x1)),2)+floatpower(floatabs(floatsub(__y2,__y1)),2)+floatpower(floatabs(floatsub(__z2,__z1)),2));
}
Hab das jetzt mit "Replace..." gemacht in PAWNO.
MoneySpam[playerid] = 0;
Hast du denn auch MoneySpawn definiert?
new MoneySpawn[MAX_PLAYERS];
Falls du es definiert hast,zeig uns wie.
Tommyx3,
Das kann man über format, strcat usw machen.Ich zeigs mal am Beispiel von format:
format(PlayerInfo[i][pBanAdmin],50,banner);
//format(PlayerInfo[i][pBanAdmin],50,"Server"); <- Wäre auch möglich,dann brauch man Variable banner nicht
Nicht vergessen anstatt 50 die richtige Größe einzutragen.
new banner[50], grund[50];
banner = "Server";
PlayerInfo[i][pBanAdmin] = banner; //errorzeile
grund = "Jetpack";
PlayerInfo[i][pBanGrund] = grund; //errorzeile
Man kann es auch so machen,dann müssen aber banner und grund die gleiche Größe haben wie pBanAdmin und pBanGrund.
Dafür muss es sich aber um Arrays / Strings handeln bei pBanAdmin und pBanGrund.
Zcelo12,
Das drücken von F4 kann man nicht direkt unterbrechen.Man bekommt immer die Nachricht "Return to Class-Selection ... " .
Was willst du denn genau machen ?
Vielleicht hilft dir das ja schon mal:
http://wiki.sa-mp.com/wiki/ForceClassSelection
http://wiki.sa-mp.com/wiki/SpawnPlayer
SetTimer("Funktion",10*6000*1000,true);
forward Funktion();
public Funktion() {
new
Float:fHealth;
for(new i ; i < MAX_PLAYERS ; i++) {
if( GetPlayerHealth(i,fHealth) ) { // Check ob connect + Health-Wert abfragen
fHealth -= 10.0; // Variable um 10.0 verringern
SetPlayerHealth(i,fHealth); // Health des Spielers neu setzen
}
}
return 1;
}
new IconNames[61][1024] =
Wieso du da 1024 nimmst,ist mir nicht wirklich klar.Das ist total die Verschwendung :-X.
new const IconNames[][] =
Würde Ich an deiner Stelle nehmen.Hab es mal eben so kompiliert, man spart 60KByte.Denn mit 1024 ist es nur Verschwendung, du brauchst die größe ja niemals.
Ich würde die ganzen Textdraws nicht bei OnGameModeInit erstellen.Mach es lieber immer bei OnPlayerConnect und nur für den Spieler,der gerade auf den Server kommt.Dann zerstört du den auch wieder, wenn er den Server verlässt ( OnPlayerDisconnect ).
Bist du dir denn auch sicher,dass der Timer die Funktion auch wirklich aufruft ? Zeig mal zusätzlich den Timer und die Funktion die den Textdraw updaten soll.
Naja, die Meisten machen es so:
0 / false heisst Nein,hat er nicht usw usf.
1 / true heisst Ja, hat er usw usf.
stock havePlayerCarL(playerid) // Hat er CarL ? 1 Ja , 0 Nein
{
if(GetPVarInt(playerid,"CarL") < 1) return 1; // CarL Wert kleiner als 1 ? Ok, Wert ist wahrscheinlich 0 aber hat eine Lizenz
return 0; // Hat keine Lizenz
}
Zitat>= heist ja das es größer als 1 oder 1 ist ich will aber das wen es auf 0 steht er aussteigt und nicht fahren kann
Hab ich dir ja gemacht.Also stell dich nicht ganz so Klever an, bevor du es nicht ausprobiert hast ;).
Zitatkann ich da nicht eigtnlich ==0 dahinter machen hab es noch nicht aus probiert.
stock havePlayerCarL(playerid)
{
if(GetPVarInt(playerid,"CarL") == 1 )return 1;
return 0;
}
Kannst auch machen.
FKasse[frakkasse:frak] += egeld;
Du musst den Namens des enums angeben ( frakkasse ) .Du greifst ja nicht direkt auf den Index zu durch den Namen ( zb Feuerwehr ).
stock havePlayerCarL(playerid)
{
if(GetPVarInt(playerid,"CarL")<1)return 1;
return 0;
}
Das würde ja bedeuten,wenn die Variable CarL kleiner als 1 ist,besitzt der Spieler ein CarLicence. Glaube du hast es falsch herrum.
stock havePlayerCarL(playerid)
{
if(GetPVarInt(playerid,"CarL") >= 1) return 1;
return 0;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(!havePlayerCarL(playerid))
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid,ROT,"Du hast noch keinen Führerschein!");
}
return 1;
}
Es müsste sowieso richtiger Weise hasPlayerCarL sein ;).
Sind so ähnlich wie PVars, nur gab es die halt schon bei SA:MP 01b.
Ich nehm mal das Beispiel aus dem SA:MP Wiki,
//Gamemode
setproperty(0, "", 12345, "Ich komme aus dem Gamemode");
//Filterscript
new string[24];
getproperty(0, "", 12345, string);
printf("string -> %s",string);
Damit konntest du damals schon Werte global speichern lassen. Dann natürlich auf diese von Überall ( Filterscript oder dem Gamemode selber ) darauf zugreifen.Wurde aber eher selten benutzt, jetzt gibt es ja für so etwas das GVar Plugin.