Hier weißt du der Integervariable "t" einen string " ... " zu.
new t="GangZoneLS"
Versuch stattdessen mal new t = GangZoneLS,
da du wahrscheinlich GangZoneLS = GangZoneCreate(...) hast.
Hier weißt du der Integervariable "t" einen string " ... " zu.
new t="GangZoneLS"
Versuch stattdessen mal new t = GangZoneLS,
da du wahrscheinlich GangZoneLS = GangZoneCreate(...) hast.
Gute Idee + Gute Umsetzung = 10/10.
Das geht:
#undef MAX_PLAYERS
#define MAX_PLAYERS 32
und muss das 256? Bisschen viel..dachte man kann nur 128 oder 144 eingeben
Ich hab's ihm gerade eingebaut...bei mir "local" hab ichs nun getestet und mein's ging einwandtfrei
Unter OnPlayerConnect oder OnPlayerRequestSpawn
new string[100];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name, sizeof name);
format(string,sizeof string,"%s.ini",name);
if(fexist(string))
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Logge in, please!", "Welcome Back, please log in!", "Login", "Cancel");
}
else
{
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Register, please!", "It's your first vist. Register please", "Register", "Cancel");
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new string[24];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name, sizeof name);
format(string,sizeof string,"%s.ini",name);
if(dialogid == 1)
{
if(!response)
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Logge in, please!", "Welcome Back, please log in!", "Login", "Cancel");
SendClientMessage(playerid,0xAA3333AA,"*** Account Exists. Login to continue!");
return 1;
}
new File: User = fopen(string,io_read);
new search[100];
while(fread(User,search,sizeof search))
{
if(strcmp("Password=",search,false,9) == 0)
{
new pw[100];
strmid(pw,search,9,strlen(search));
if(strcmp(pw,inputtext,false)==0)
{
SendClientMessage(playerid,0xAA3333AA,"Logged in!");
Logged[playerid] = true;
}
else
{
SendClientMessage(playerid,0xAA3333AA," Bad Password!");
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Logge in, please!", "Welcome Back, please log in!", "Login", "Cancel");
}
}
}
}
else if(dialogid == 2)
{
if(!response) return SendClientMessage(playerid,0xAA3333AA,"Dont forget to register befor you leave :)");
new File: User = fopen(string,io_write);
new save[100];
format(save,sizeof save,"Password=%s",inputtext);
fwrite(User,save);
fclose(User);
SendClientMessage(playerid,0xAA3333AA," Registered!");
}
return 1;
}
// Ungetestet
Meinst du soetwas?
Bessere wäre es, den gesamten Codeausschnitt zu nehmen..könnte nur daran liegen:
{
CODE
{
new sendername[MAX_PLAYER_NAME];
}
// hier gibt es das Sendername nicht mehr!
CODE
}
Finde das auch eine gute Map 7/10, doch glaube auch Tool . Das ist wie, Suggalike gesagt hat, per Hand nahezu unmöglich und sehr viel Arbeit
Weed kannst du als ganz einfache Variable deklarieren,wie
new WEEDGramm[MAX_PLAYERS];
// Im Command, wo mans haben soll:
WEEDGramm[playerid]++;
//bzw.
WEEDGramm[playerid] += x;
Was mir aufgefallen ist, deine Variabeln, wie WEEDgepflanzt sind einmalig und keine Arrys. D.h. wenn jemand /weedpflanzen macht, wäre das WEEDgepflanzt für alle auf 1 gesetzt.
Benutzt daher new WEEDgeplfanzt[MAX_PLAYERS] (= für jeden Spieler existiert diese Variabel nun...). Verwendung dann mit WEEDgepflanzt[playerid]; . Nebenbei: Da du sowieso nur zwischen "1" und "0" unterscheidest, reicht true und false => bool.
// Ganz Oben
enum AcceptInfo
{
gewicht,
preis,
dealer
}
new Accept[MAX_PLAYERS][AcceptInfo];
new WEEDgramm[MAX_PLAYERS];
// Unter das OnPlayerCommandText
new cmd[128];
new tmp[128];
new giveplayerid, moneys, idx;
cmd = strtok(cmdtext, idx);
if(!strcmp(cmd,"/accept",true))
{
if(Accept[playerid][gewicht] <= 0 || Accept[playerid][preis] <= 0) return SendClientMessage(playerid,COLOR_GREEN,"*** Du hast kein Angebot!");
if(GetPlayerMoney(playerid) < Accept[playerid][preis]) return SendClientMessage(playerid,COLOR_GREEN,"*** Du hast kein Geld dafür im Moment!");
WEEDgramm[playerid] += Accept[playerid][gewicht];
GivePlayerMoney(playerid, -Accept[playerid][preis]);
SendClientMessage(playerid,COLOR_GREEN,"*** Weed angenommen. Viel Spaß damit !");
GivePlayerMoney(Accept[playerid][dealer],Accept[playerid][preis]);
Accept[playerid][gewicht] = 0;
Accept[playerid][preis] = 0;
Accept[playerid][dealer] = 0;
// Was auch immer
return 1;
}
if(!strcmp(cmd,"/weedsell",true))
{
if(WEEDgramm[playerid] == 0) return SendClientMessage(playerid,COLOR_GREEN,"*** Du hast kein Weed (0 Gramm)");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_GREEN,"USE: /weedsell [ID] [GRAMM] [PREIS]!");
giveplayerid = ReturnUser(tmp);
if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,COLOR_GREEN,"*** Angegebener User nicht online!");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_GREEN,"USE: /weedsell [ID] [GRAMM] [PREIS]!");
new gramm = strval(tmp);
if(gramm <= 0 || gramm >= 1000) return SendClientMessage(playerid,COLOR_GREEN,"*** Gramm muss zwischen 1 und 999 sein!");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_GREEN,"USE: /weedsell [ID] [GRAMM] [PREIS]!");
moneys = strval(tmp);
if(moneys <= 0) return SendClientMessage(playerid,COLOR_GREEN,"*** Preis muss über 0 sein!");
SendClientMessage(playerid,COLOR_GREEN,"*** Weedangebot abgegeben!");
Accept[giveplayerid][gewicht] = gramm;
Accept[giveplayerid][preis] = moneys;
Accept[giveplayerid][dealer] = playerid;
return 1;
}
// ReturnUser Code falls du ihn nicht hast. Ist von mir gibts aber bestimmt von irgendwem anders besser
stock ReturnUser(strings[])
{
new count = 0;
new len = strlen(strings);
if(len > 3)
{
for(new i = 0; i < MAX_PLAYERS;i++)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(i,name,sizeof(name));
if(!strcmp(name,strings,false,MAX_PLAYER_NAME))
{
return i;
}
else
{
count = 1;
}
}
}
else
{
return strval(strings);
}
return (count == 1) ? (INVALID_PLAYER_ID) : (strval(strings));
}
Es ist spät, ich bin müde und hab den Code ungetestet aus dem Kopf geschrieben. Hoffe daher, dass es klappt, sonst mach ich es dir heute (später) richtig.
Für Neulinge empfiehlt sich aber dcmd & sscanf
[ SCRIPTING ] Commands mit Parametern
by Goldkiller.
Also ich sehe kein "case" (denke es fehlt bei dir..) und "};" sollte eh nicht klappen. Stock heißt, wenn du es nicht benutzt,liest er es sich gar nicht erst durch...daher keine Errors
Vllt. kann ich dir per TV helfen...meld dich in ICQ
#define TERROR 0
Hmm
versuch mal "Terror" mit einem Integerwert zu definieren und gib ein return bei SetPlayerToTeamColor an.
Ich erkläre es dir, den Rest musst du selber machen:
Dann mach folgendes (baut auf den eben gennanten "Grundkenntnissen" auf):
// Oben
new belegt;
// im Command
SetPlayerPos(playerid,spawns[belegt][x],spawns[belegt][y],spawns[belegt][z]);
belegt++;
// Wir wissen ja bereits, dass die erste "[ ]" die ZEILE angibt und die zweite "[ ]" die einzelnen Spalten.
// Am Anfang ist "belegt" 0. D.h. er setzt den User auf die Koords der Zeile 0. Nun addieren wir 1 dazu.
// D.h. beim 2. Durchgang (wenn jemand wieder /derby macht) wird es auf 1 sein. Daher wird er auf die Koords der Zeile 1 gesetzt.
http://wiki.sa-mp.com/wiki/PutPlayerInVehicle
Bsp:
public OnPlayerEnterVehicle(playerid,vehicleid,ispassanger)
{
PutPlayerInVehicle(playerid, vehicleid, 0);
return 1;
}
Du hast bereits einen Thread über genau dieses Problem offen, das ist Spamm³ und eine Unverschämtheit .
Ich bin für...
Vote for Close & Warn
Lies dir das durch: [ SCRIPTING ] Warning (& Error) Erklärungen + Behebungen
> by Bright
Ums kurz zu fassen: die Variable wurde schonmal definiert
2 Sachen:
1. Du hast /register PASSWORT, d.h. einen Command mit einem Parameter. Diese funktionieren anders, im Gegensatz zu "/help" oder "/enter" zB.
Dazu gibt es ganz viele Varianten (strtok,strget,ycmd,zcmd,dcmd,sscanf,explode,...). Am einfachsten ist dcmd & sscanf.
Tutorial von Goldkiller dazu: [ SCRIPTING ] Commands mit Parametern
( Für die anderen gibt es kein Tutorial,....)
2. du hast kein "return", daher wird nichts zurückgegeben...
1. Bitte nächstes mal nur die Zeilenabschnitte verwenden, denn das gescrolle nervt...
2. in Zeile 36 das "," am Ende entfernen.
3.
SetPlayerPos(playerid, spawns[ex], spawns[ey], spawns[ez]);
new spawns[][espawn] = {
{CODE}
};
Das "spawns" ist ein Arry, am besten merkst du es dir so:
new spawns[ZEILE][SPALTE]
Nun gibst du nur an "spawns[X-Spalte]" - als Beispiel. Woher soll das Script wissen welche Zeile?
Daher spawns[4][ex] zB.
Random Variante:
new rand = random(sizeof(spawns)); -> Random der größe des ersten Indexes ( sprich erste eckige Klammer ). Wolltest du das 2. : new rand = random(sizeof(spawns[]));
spawns[rand][ex],spawns[rand][ey],....
Hoffe es klappt
Mich interessiert aber eines am Meisten:
- sin die Onlinekeys dabei und verwendbar?