Könntest du vielleicht mal eben die neuste Version versuchen:
http://pastebin.com/mBqnTUgi
Damit sollten alle deine Probleme gelöst sein
Könntest du vielleicht mal eben die neuste Version versuchen:
http://pastebin.com/mBqnTUgi
Damit sollten alle deine Probleme gelöst sein
Schick mir mal bitte folgende Zeilen als [*pwn] [/pwn*]:
305 bis 315
430 bis 440
1800 bis 1830
2234 bis 2245
und
2988 bis 2995
Bitte am besten auch Kennzeichnen.
Dann kann ich es dir entbuggen.
dcmd_aeinstellen(playerid, params[])
{
new pid,
rang,
fraktion[64],
Spielerdatei[64],
Spielerdatei2[64],
adminname[MAX_PLAYER_NAME],
eingestellter[MAX_PLAYER_NAME];
GetPlayerName(playerid, adminname ,sizeof(adminname));
GetPlayerName(pid, eingestellter, sizeof(eingestellter));
format(Spielerdatei, sizeof(Spielerdatei), "/Accounts/%s.txt", adminname);
format(Spielerdatei2, sizeof(Spielerdatei2), "/Accounts/%s.txt", eingestellter);
if(dini_Int(Spielerdatei, "Team") < 3)
return SendClientMessage(playerid, ROT, "Du bist kein Admin!");
if(dini_Int(Spielerdatei,"Team") == 3)
{
if(sscanf(params, "uds", pid, fraktion, rang))
return SendClientMessage(playerid, ROT, "Benutzung: /aeinstellen [PlayerID] [Rang] [Fraktion]");
else
{
if(!strcmp("TEAM", fraktion, true, 4))
{
new string[128];
format(string, sizeof(string), "Du hast %s ins Team aufgenommen!", eingestellter);
SendClientMessage(playerid, GELB, string);
dini_IntSet(Spielerdatei2, "Team", rang);
return 1;
}
}
}
return 0;
}
Sag uns doch noch einmal was der genaue Fehler ist.
Was gibst du Ingame ein?
Was kommen für Fehler?
Ähm...
... kannste das vielleicht mit der ID machen?
Das du die Debug Funktion per Command anschaltest.
Mit dem Command bekommst du die Objekt ID.
Dann würdest du nur das Objekt haben.
Sonst...
.... lass es doch genauer filter,
if(stream_id > MAX_STREAM || stream_id < 0)
return 0;
mit
if(stream_id > MAX_STREAM || stream_id < 0)
return printf("[Debug] Objekt hat Fehler!");
ersetzen
vllt. noch formatieren o.ä.
Sonst einfach mal MAX_STREAM erhöhen.
eine der 3 MÖglichkeiten muss doch gehen
Siehste du Brot
Brot kann schimmeln.
Ich nicht
xDDD
Ja okay
strcmp ( string, string, bool, varchar )
Also wenn du als erstens "LVPD" und als zweitens fraktion machst... und fraktion auch ein string ist.
Dann geht eigl. alles.
Hier ist dein Fehler:
if(sscanf(params, "udd", pid, fraktion, rang))
Da musst du dann folgendes nehmen
if(sscanf(params, "usd", pid, fraktion, rang))
Ja klar.
Nehm dir ein Register/Login System und "missbrauch" es einfach als Whitelist.
Sonst eine direkte Whitelist gibt es nicht.
if(!strcmp("LVPD", fraktion, true, 4))
strcmp ist so eine Art -> == <-
Kennste vllt. aus PHP o.ä.
strcmp vergleicht string 1 und string 2.
Wenn man jetzt hier unten guckt:
if(!strcmp("LVPD", fraktion))
Dann macht der Server folgendes:
"LVPD" ==/like fraktion ?????
Also ob eben die Strings gleich bzw. fast gleich sind.
Wenn du jetzt da das:
, true, 4
hin machst, ist das eine Art wie MySQL (like).
4 bedeutet die Länge.
Machst du dort z.B. 1 hin, wäre das so:
if "L%" == fraktion
Also er nimmt nur noch das "L".
Ich hoffe ich konnte dir das jetzt gut mit Beispielen erklären.
Theoretisch kannste
if(string == string)
durch
if(!strcmp(string, string))
ersetzen
P.S.: Sa-MP Wiki: http://wiki.sa-mp.com/wiki/Strcmp
ja oder du baust dir extra ein Dini/MySQL System wo du für jeden Spieler (IP + Namen) speicherst, ob der Willkommen ist oder nicht.
Bitteschön:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new Float:health;
GetPlayerHealth(playerid, health);
if(dialogid == DIALOG_LOGIN)
{
if(!response)
{
SendClientMessage(playerid,BLAU,"Du hast den Vorgang abgebrochen.");
return Kick(playerid);
}
else
{
if(!strlen(inputtext))
{
SendClientMessage(playerid,BLAU,"Das Passwort war nicht lang genug.");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Dein Account wurde gefunden. Gib bitte das Passwort ein.","Login","Abbrechen");
return 1;
}
else
{
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/LARP/%s.ini",name);
Login(playerid,inputtext);
SetTimer("LifeTime",60000,1);
return 1;
}
}
}
if(dialogid == DIALOG_REGISTER)
{
if(!response)
{
SendClientMessage(playerid,BLAU,"Du hast den Vorgang abgebrochen.");
return Kick(playerid);
}
else
{
if(!strlen(inputtext))
{
SendClientMessage(playerid,BLAU,"Das Passwort war nicht lang genug.");
return ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Gib bitte das gewünschte Passwort ein:","Register","Abbrechen");
}
else
{
return Register(playerid, inputtext);
}
}
}
if(dialogid == DIALOG_TUTORIAL)
{
if(!response)
{
new string[256];
new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
SendClientMessage(playerid,0xFFFF00FF,"Alle Administratoren die Online sind wurden benachrichtigt, das du Hilfe benötigst.");
format(string, sizeof(string), "%s benötigt Hilfe! Du kannst ihm mit /aw antworten!", sendername);
SendAdminMessage(0xFFFA00FF, string);
return 1;
}
else
{
SendClientMessage(playerid,BLAU,"Schön, das du alleine zurecht gefunden hast.");
return 1;
}
}
if(dialogid == 20)
{
switch(listitem)// Checking which item was chosen
{
case 0:
{
if(GetPlayerMoney(playerid) < 20)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-20);
SetPlayerHealth(playerid, health+10);
}
case 1:
{
if(GetPlayerMoney(playerid) < 50)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-50);
SetPlayerHealth(playerid, health+20);
}
case 2:
{
if(GetPlayerMoney(playerid) < 80)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-80);
SetPlayerHealth(playerid, health+30);
}
case 3:
{
if(GetPlayerMoney(playerid) < 100)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-100);
SetPlayerHealth(playerid, health+45);
}
case 4:
{
if(GetPlayerMoney(playerid) < 30)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-30);
SetPlayerHealth(playerid, health+15);
}
case 5:
{
if(GetPlayerMoney(playerid) < 20)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-20);
SetPlayerHealth(playerid, health+11);
}
case 6:
{
if(GetPlayerMoney(playerid) < 50)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-50);
SetPlayerHealth(playerid, health+20);
}
case 7:
{
if(GetPlayerMoney(playerid) < 30)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-30);
SetPlayerHealth(playerid, health+15);
}
case 8:
{
if(GetPlayerMoney(playerid) < 35)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-35);
SetPlayerHealth(playerid, health+18);
}
}
}
return 1;
}
Hier noch einmal, damit du das aktuellste hast:
if(dialogid == 20)
{
switch(listitem)// Checking which item was chosen
{
case 0:
{
if(GetPlayerMoney(playerid) < 20)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-20);
SetPlayerHealth(playerid, bsnleben+10);
}
case 1:
{
if(GetPlayerMoney(playerid) < 50)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-50);
SetPlayerHealth(playerid, bsnleben+20);
}
case 2:
{
if(GetPlayerMoney(playerid) < 80)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-80);
SetPlayerHealth(playerid, bsnleben+30);
}
case 3:
{
if(GetPlayerMoney(playerid) < 100)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-100);
SetPlayerHealth(playerid, bsnleben+45);
}
case 4:
{
if(GetPlayerMoney(playerid) < 30)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-30);
SetPlayerHealth(playerid, bsnleben+15);
}
case 5:
{
if(GetPlayerMoney(playerid) < 20)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-20);
SetPlayerHealth(playerid, bsnleben+11);
}
case 6:
{
if(GetPlayerMoney(playerid) < 50)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-50);
SetPlayerHealth(playerid, bsnleben+20);
}
case 7:
{
if(GetPlayerMoney(playerid) < 30)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-30);
SetPlayerHealth(playerid, bsnleben+15);
}
case 8:
{
if(GetPlayerMoney(playerid) < 35)return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-35);
SetPlayerHealth(playerid, bsnleben+18);
}
}
}
Guck dir mal meinen Edit an.
Das Money muss auch so wie Benjamin gemacht werden.
Poste mal die Fehler.
xDD
Siehste.
Ich hab nur gelesen
Zitator declaration
und dachte direkt an meinen nicht vorhandenen Putz Fimmel
dcmd_einstellen(playerid,params[])
{
if(dini_Int(Spielerdatei,"Team") < 4)
return SendClientMessage(playerid, ROT, "Du bist kein Admin!");
if(sscanf(params, "udd", pid, fraktion, rang))
return SendClientMessage(playerid, ROT, "Benutzung: /einstellen [PlayerID] [Fraktion] [Rang]");
else
{
if(!strcmp("LVPD", fraktion, true, 4)) // oder if(!strcmp("LVPD", fraktion))
{
dini_IntSet(Spielerdatei,"LVPD",rang);
return 1;
}
}
}
So geht das
Einrückfehler.
if(dialogid == 20)
{
new Float:PlayerHealth;
GetPlayerHealth(playerid, PlayerHealth);
switch(listitem)// Checking which item was chosen
{
case 0:
{
if(GetPlayerMoney(playerid) < 20)
return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-20);
SetPlayerHealth(playerid, PlayerHealth+10);
}
case 1:
{
if(GetPlayerMoney(playerid) < 50)
return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-50);
SetPlayerHealth(playerid, PlayerHealth+20);
}
case 2:
{
if(GetPlayerMoney(playerid) < 80)
return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-80);
SetPlayerHealth(playerid, PlayerHealth+30);
}
case 3:
{
if(GetPlayerMoney(playerid) < 100)
return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-100);
SetPlayerHealth(playerid, PlayerHealth+45);
}
case 4:
{
if(GetPlayerMoney(playerid) < 30)
return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-30);
SetPlayerHealth(playerid, PlayerHealth+15);
}
case 5:
{
if(GetPlayerMoney(playerid) < 20)
return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-20);
SetPlayerHealth(playerid, PlayerHealth+11);
}
case 6:
{
if(GetPlayerMoney(playerid) < 50)
return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-50);
SetPlayerHealth(playerid, PlayerHealth+20);
}
case 7:
{
if(GetPlayerMoney(playerid) < 30)
return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-30);
SetPlayerHealth(playerid, PlayerHealth+15);
}
case 8:
{
if(GetPlayerMoney(playerid) < 35)
return SendClientMessage(playerid,0xFFFFFF,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid, GetPlayerMoney(playerid)-35);
SetPlayerHealth(playerid, PlayerHealth+18);
}
}
}
Ja schwer zu sagen
Wie wäre es wenn du folgendes machst:
public GetStreamerObjectPos(stream_id, &Float:x, &Float:y, &Float:z)
{
// Die Debug Meldungen dürfen NICHT wahr sein, wenn ja, dann ist das das Problem!
new debugStr[128];
format(debugStr, sizeof debugStr, "[ DEBUG ] stream_id (%d) > MAX_STREAM (%d) oder stream_id (%d) < 0", stream_id, MAX_STREAM, stream_id);
printf(debugStr); // oder SendClientMessageToAll(COLOR_RED, debugStr);
if(stream_id > MAX_STREAM || stream_id < 0)
return 0;
format(debugStr, sizeof debugStr, "[ DEBUG ] bfxobject[stream_id][exist] (%d) == 0", bfxobject[stream_id][exist]);
printf(debugStr); // oder SendClientMessageToAll(COLOR_RED, debugStr);
if(!bfxobject[stream_id][exist])
return 0;
new foundno = 0;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i))
continue;
if(ERSTELLT[i][stream_id])
{
GetPlayerObjectPos(i, OBJ_ID[i][stream_id], x, y, z);
foundno = 1;
break;
}
}
format(debugStr, sizeof debugStr, "[ DEBUG ] foundno (%d) == 1", foundno);
printf(debugStr); // oder SendClientMessageToAll(COLOR_RED, debugStr);
if(!foundno)
{
x = bfxobject[stream_id][ox];
y = bfxobject[stream_id][oy];
z = bfxobject[stream_id][oz];
}
return 1;
}
Wenn du das dann ingame hast (ich würde es mit SendClientMessageToAll machen) dann siehst du direkt woran es liegen könnte.
Wenn eine Bedingung -> wahr <- ist, also stimmt.
Dann ist das der Fehler!
Wenn du nicht weißt was ich meine, für das o.g. Script einfach mal aus.
Danach schickst du mir einen Screen von Ingame oder vom Server Log (je nachdem welche Methode).
-> Das letzte Objekt mir dann schicken <-
Weil der ja alle debuggt :O
Hoffe das bringt was
SpielerInfo[playerid][Passwort] = strval(dini_Get(Spielerdatei,"Passwort"));
Ups...
SpielerInfo[playerid][Passwort] = dini_Get(Spielerdatei, "Passwort");
Du willst da doch keine Zahl haben
(wenn jetzt ein Fehler mit "Tag" kommt, mach bei dem SpielerInfo Enum einfach bei Passwort ein [100] o.ä. hinter)
(wenn du nicht weißt was ich meine, versuch das:)
Ersetz:
SpielerInfo[playerid][Passwort] = strval(dini_Get(Spielerdatei,"Passwort"));
if(strcmp(inputtext,SpielerInfo[playerid][Passwort],false) == 0)
durch:
if(!strcmp(inputtext, dini_Get(Spielerdatei, "Passwort"), false))
(überspringt das zwischenspeichern)
Im Editor einfach:
Replace "new slock;" oder "slock" und das mit "//slock" bzw. "//new slock" ersetzen.
Jeder kann ja mal die float, str, val und so etwas durcheinander bringen
if(!strcmp(cmd, "/setvheal", true))
{
if(!strlen(strget(cmdtext, 1)) || !strlen(strget(cmdtext, 2)))
return SendClientMessage(playerid, COLOR_YELLOW, "Verwendung: /setvheal [Carid] [Health]");
new id[200],
heal[200];
format(id, sizeof(id), "%s", strlen(strget(cmdtext, 1)));
format(heal, sizeof(heal), "%s", strlen(strget(cmdtext, 2)));
SetVehicleHealth(strval(id), floatstr(heal));
SendClientMessage(playerid, COLOR_RED, id);
SendClientMessage(playerid, COLOR_RED, heal);
return 1;
}
if(!strcmp(cmd, "/setpheal", true))
{
if(!strlen(strget(cmdtext, 1)) || !strlen(strget(cmdtext, 2)))
return SendClientMessage(playerid, COLOR_YELLOW, "Verwendung: /setpheal [Playerid] [Health]");
new id[200],
heal[200];
format(id, sizeof(id), "%s", strlen(strget(cmdtext, 1)));
format(heal, sizeof(heal), "%s", strlen(strget(cmdtext, 2)));
SetPlayerHealth(strval(id), floatstr(heal));
SendClientMessage(playerid, COLOR_RED, id);
SendClientMessage(playerid, COLOR_RED, heal);
return 1;
}
if(!strcmp(cmd, "/respawnveh", true))
{
if(!strlen(strget(cmdtext, 1)))
return SendClientMessage(playerid,COLOR_YELLOW,"Verwendung: /respawnveh [Carid]");
new id[100];
format(id, sizeof(id), "%s", strlen(strget(cmdtext, 1)));
SetVehicleToRespawn(strval(id));
SendClientMessage(playerid, COLOR_RED, id);
return 1;
}
Meinst du so etwas?
new VehicleDeathInfo[MAX_VEHICLES];
public OnVehicleDeath(vehicleid, killerid)
{
VehicleDeathInfo[vehicleid] = 1;
}
public OnVehicleSpawn(vehicleid)
{
if(VehicleDeathInfo[vehicleid])
{
VehicleDeathInfo[vehicleid] = 0;
SetVehicleHealth(vehicleid, 255);
}
}