Könnte man so richtigerweise interpretieren, ja.
Beiträge von Klemmlampe
-
-
Das hat aber nichts mit dem Compiler zutun, sondern lediglich mit den Shortcuts von Pawno: F6...
-
Ein Break zum unterbrechen der Schleife, dann sollte es gehen.
for(new i=0;i<MAX_PLAYERS;i++)
{
if(pInfo[i][Nummer] == number)
{
format(string,sizeof(string),"[SMS] %s: %s, Nummer: %d ))",SpielerName[playerid],text,pInfo[playerid][Nummer]);
SendClientMessage(playerid,0xFFFA00FF,string);
SendClientMessage(pID,0xFFFA00FF,string);
break;
}
} -
Mit einer Schleife alle Spieler durchgehen und prüfen, ob jemand die Nummer besitzt.
-
Nachdem so viel (zum Teil berechtigtes) Lob kam, will ich auch mal negative Kritik verteilen.
Es ist ein GameMode für Anfänger, gut, aber dann sollte man es auch richtig bzw. auf die beste Art "beibringen".1) Wieso nutzt du public, welche um ein vielfaches langsamer sind, wenn du auch simple Funktionen (stocks) nutzen kannst/könntest? Sinnfrei!
2) Wieso nutzt du das veraltete PlayerToPoint wenn es auch eine Native von SAMP gibt (IsPlayerInRangeOfPoint)?
3) Wieso hast du einige unnötige Schleifen im Script?
4) Wieso befinden sich unnötige Case bei Switches im Script?
5) Warum nutzt du sscanf (+ ocmd) und strtok (+ strcmp)? Lege dich auf eines fest, ich rate zu ersterem.
6) Warum nutzt du englische und deutsche Funktionsnamen (isPlayerAnAdmin/hateinjob)? Ist zwar möglich und jedem freigestellt, jedoch auf dauer eher verwirrend.
7) Wieso machst du unnötig else-Abfragen?
if (pInfo[playerid][Fraktion] == 1)
{}
else
{}
// kürzer
if(!pInfo[playerid][Fraktion]) {}
// oder
if(pInfo[playerid][Fraktion] != 1) {}Ansonsten sind noch einige typische Anfängerfehler drin, die ich allerdings nicht auflisten möchte.
Zum Schluss noch Positives: Du nutzt Switch und Case, mir kommt es inzwischen so vor als ob es ausgestorben sei, endlich jemand der es nutz!
-
Funktioniert aber nicht mal richtig. fcmd_DasIstEinTest ist nicht fcmd_dasisteintest .
Davon abgesehen, dass es auch fcmd|dasisteintest heißt, ist es bei ocmd und Co. genauso, bedingt durch CallLocalFunction (case sensitive).
-
Meinen 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
//E: sscanf Plugin wird benötigt, außerdem ist das nur eine Lösung wenn man sscanf so oder so zur Weiterverarbeitung nutzen möchte.
-
Oben im Script statt deinen Defines den Array und bei deinem alten Case-Teil einfach wie ich es angewendet habe verwenden (SetPlayerPos(playerid, Spawn[0][0], Spawn[0][1], Spawn[0][2]), SetPlayerPos(playerid, Spawn[1][0], Spawn[1][1], Spawn[1][2]), usw.). Außerdem würde ich nicht case 0 verwenden, wenn es keine Verwendung hat, einfach weg lassen oder durch default ersetzen.
-
@Flummi: Wie soll das denn funktionieren?
@PsYcH0999: Mach' es einfach, wie EvilToastBroat meinte.
new Float:Spawn[][3] =
{
{1571.9734,-1694.7366,5.4608},
{1531.4615,-1478.8479,9.5432},
{2772.4231,-2354.1746,15.3014}
// usw.
};
// Anwendung
case 1:
{
SetPlayerPos(playerid, Spawn[0][0], Spawn[0][1], Spawn[0][2]);
GivePlayerWeapon(playerid,18,10);
} -
Warum zur Hölle lässt man CE auf einem (normalen) PC laufen? Schwachsinn und für Server nur noch schlimmer.
Aber b2t: Im normalfall sollten UNIX-Systeme, somit Linux, auch bei MIPS-CPUs laufen, allerdings ist mir fragwürdig warum du einen solchen nutzen willst, obwohl sie nicht für Server/Computer vorgesehen sind.ACHTUNG: Halbwissen meinerseits.
-
Durchschnittlich.
Die Signaturen sind etwas lau, das letzte ist aber schön schlicht und gefällt mir. -
http://wiki.sa-mp.com/wiki/Random
Perfekte Erklärung inklusive Beispiel.
The_Cop: Was soll er mit Switch wenn's auch einfacher geht?
-
DIALOG_STYLE_LIST ist wie der Name sagt nur das Aussehen des Dialoges, du könntest stattdessen auch eine 2 schreiben. Wichtig ist, dass du den Dialogstyle nicht mit der DialogID verwechselst und dass sich keine IDs überschneiden (Logindialog hat ID 1, Spawn Dialog muss dann eine andere ID haben).
#define DIALOG_SPAWN 1 // beliebige Nummer
// Dialog anzeigen
ShowPlayerDialog(playerid, DIALOG_STYLE_LIST, DIALOG_SPAWN, "Titel...", "Text...", "Button 1", "Button 2");
// Dialog abfragen
if(dialogid == DIALOG_SPAWN) // ID prüfen
{
// Weitere Abfrage(n){
PutPlayerInVehicle(playerid,CreateVehicle(435,X,Y,Z,0,-1,-1,-1),0);
}}
//E: RS
-
Wie sieht deine Config auf dem Linuxserver aus?
Wird das Plugin geladen (Logs)? -
\t ist für einen Tab, für eine neue Zeile brauchst du \n.
-
Der richtige Server läuft auf Linux?
Dann kannst du nicht das Plugin als .dll verwenden, sondern du brauchst die .so-Datei.
http://forum.sa-mp.com/showthread.php?t=102865 dort ist auch der Download für Linux inbegriffen.
Für Hilfe zur Installation von Plugins unter Linux: http://www.samp-wiki.de/index.php?title=Plugins#Linux -
Code
C:\Users\*\Desktop\Scripting Base\GTA SA Server\gamemodes\GFF.pwn(8535) : warning 202: number of arguments does not match definition
Bedeutet, dass du mehr oder weniger Argumente/Parameter verwendest, als die Funktion besitzt/erwartet.CodeC:\Users\*\Desktop\Scripting Base\GTA SA Server\gamemodes\GFF.pwn(8509) : warning 217: loose indentation
Einfach nur ein Einrückfehler, kann ignoriert werden, nervt aber. Entweder#pragma tabsize 0 oder richtig einrücken (lernen). -
http://wiki.sa-mp.com/wiki/TextDrawSetString
TextDraw unter OnGameModeInit erstellen und dann bei OnPlayerConnect nur setzen und anstatt den TextDraw bei OnPlayerConnect zu erstellen, setzt du einfach nur den String/Text. -
public joinl(playerid)
{
new Text:joinleave;
new Text:joinleave1;
TextDrawHideForPlayer(playerid,joinleave1); // Ist kein Texdraw
TextDrawShowForPlayer(playerid,joinleave); // Ist kein TextDraw
}
Du versuchst einen nicht vorhandenen Textdraw anzuzeigen/zu verstecken? Das kann nicht funktionieren, du musst einen Textdraw dort erstellen, den du dann anzeigen kannst, oder in OnGameModeInit und dann den Text (TexDrawSetString) ändern und dann anzeigen, so sollte es gehen. -
Bevor wir mit Timern raten: Alle Scriptfiles vorhanden?