format(query, sizeof(query), "INSERT INTO `haeuser` (`hid`, `preis`,`level`,`hx`,`hy`, `hz`,`besitzer`) VALUES ('%i', '%i', '%i','%f','%f','%f','Niemand')", Haeuser+1 , preis,level,hx,hy,hz);
Du hast dich mit den Anführungszeichen vertan.
format(query, sizeof(query), "INSERT INTO `haeuser` (`hid`, `preis`,`level`,`hx`,`hy`, `hz`,`besitzer`) VALUES ('%i', '%i', '%i','%f','%f','%f','Niemand')", Haeuser+1 , preis,level,hx,hy,hz);
Du hast dich mit den Anführungszeichen vertan.
Nein.
So:
ocmd:kick(playerid,params[])
{
if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,ROT,"Rang zu Niedrig.");
new pID, reason[128],string[144];
if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,GELB,"/kick [id] [grund]");
format(string,sizeof(string),"Du wurdest von %s gekickt.Grund: %s",Name(playerid),reason);
KickExWithMessage(pID, ROT, string);
SetPVarInt(pID,"Kick1",GetPVarInt(pID,"Kick1")+1);
return 1;
}
stock KickExWithMessage(playerid, color, message[])
{
SendClientMessage(playerid, color, message);
SetTimerEx("KickExPublic", 1000, false, "d", playerid);
}
public KickExPublic(playerid)
{
Kick(playerid);
}
EDIT:
Übrigens ist hier noch ein Fehler:
SetTimerEx("BanExPublic", 1000, false, "d", playerid, reason);
das muss so sein:
SetTimerEx("BanExPublic", 1000, false, "ds", playerid, reason);
Naja, es kickt den Spieler nicht, es bannt ihn. Aber syntaktisch, ja das ist ok so.
format(string, sizeof(string), "Du wurdest von %s für %s gebannt.Grund: %s", Name(playerid), time, grund);
BanExWithMessage(playerid, ROT, string, grund);
new Float:pos[3];
new dots, tmp[16], count;
for(new i=1, j=strlen(inputtext); i<j; i++)
{
if(inputtext[i] == ',' || inputtext[i] == ')')
{
pos[count] = floatstr(tmp);
count++;
tmp = "";
dots = 0;
}
else if(inputtext[i] >= '0' && inputtext[i] <= '9')
{
format(tmp, sizeof(tmp), "%s%c", tmp, inputtext[i]);
}
else if(inputtext[i] == '-')
{
if(!strlen(tmp)) format(tmp, sizeof(tmp), "%s%c", tmp, inputtext[i]);
else return SendClientMessage(playerid, ROT, "Fehler"); //Minus nicht am Anfang (was will es denn mittendrin??!)
}
else if(inputtext[i] == '.')
{
dots++;
format(tmp, sizeof(tmp), "%s%c", tmp, inputtext[i]);
if(dots > 1) return SendClientMessage(playerid, ROT, "Fehler"); //Mehr als 1 Punkt
}
else return SendClientMessage(playerid, ROT, "Fehler"); //Kein - oder ) oder , oder . oder 0 1 2 3 4 5 6 7 8 9.
}
printf("%f %f %f", pos[0], pos[1], pos[2]);
Eingabe:
Zitat(1345.34314,-2019.43414,14.0983)
Ausgabe:
Zitat1345.343139 -2019.434082 14.098299
Geht sicher effizienter, aber du macht ja keine 10000 Eingaben auf einmal, von daher geht die Anschaulichkeit vor.
Genau so ist es. Etwas umständlich, aber der einzig sinnvolle Weg.
Nicht nur normalerweise, sondern man macht es gar nicht.
Warum?
Ganz einfach. Du führst die Include ja nicht aus, sondern baust sie in einen Gamemode oder einen Filterscript ein, und den kompilierst du dann. Eine .amx von einer Include hat keinen Sinn.
Wieso die Errors?
a_samp.inc ist nicht in der Include inkludiert. Warum das nicht? => Sonst wäre es doppelt inkludiert, wenn du die Include in einem GM/FS hast, der auch a_samp.inc als Include nutzt.
Wenn du eine Include auf Syntax-Fehler prüfen willst, dann musst du den .pwn Code kompilieren, in dem die Include inkludiert ist.
ocmd:buyhaus(playerid,params[])
{
if(hatPlayerHaus(playerid))return SendClientMessage(playerid,rot,"Du hast berreits ein Haus!");
for(new i=0; i<sizeof(hInfo); i++)
{
if(!hInfo[i][h_id])continue;
if(IsPlayerInRangeOfPoint(playerid,2,hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]))
{
if(!strlen(hInfo[i][h_besitzer]))
{
if(GetPlayerMoney(playerid)<hInfo[i][h_preis])return SendClientMessage(playerid,rot,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid,-hInfo[i][h_preis]);
strmid(hInfo[i][h_besitzer], getPlayerName(playerid),0, MAX_PLAYER_NAME,MAX_PLAYER_NAME);
updatehaus(i);
SaveHaus(i);
return 1;
}
else
{
SendClientMessage(playerid,rot,"Dieses Haus steht nicht zum Verkauf!");
return 1;
}
}
}
return SendClientMessage(playerid,rot,"Du bist nicht in der nähe eines Hauses!");
}
ocmd:sellhaus(playerid,params[])
{
for(new i=0; i<sizeof(hInfo); i++)
{
if(!hInfo[i][h_id])continue;
if(IsPlayerInRangeOfPoint(playerid,5,hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]))
{
if(!strlen(hInfo[i][h_besitzer]))continue;
if(!strcmp(hInfo[i][h_besitzer],getPlayerName(playerid),true))
{
GivePlayerMoney(playerid,hInfo[i][h_preis]/2);
strmid(hInfo[i][h_besitzer], "",0, 0,0);
updatehaus(i);
SaveHaus(i);
new string[164];
format(string,sizeof(string),"Haus Verkauft! Du hast die Hälfte des Kaufpreises wieder beckommen (%i$)",hInfo[i][h_preis]/2);
SendClientMessage(playerid,gelb,string);
return 1;
}
else
{
SendClientMessage(playerid,rot,"Das Haus gehört nicht dir!");
return 1;
}
}
}
return SendClientMessage(playerid,rot,"Du bist nicht in der nähe eines Hauses!");
}
Das lag an der Schleife, weil du dort nach dem ersten Haus gleich ein return drinnen hattest.
Korrekt.
Ok. Du musst die Größe von "string" erhöhen.
So wie bei dem hier:
new whostats[48];
steht irgndwo vor ^dem sowas:
new string[HIER_EINE_ZAHL];
Das HIER_EINE_ZAHL ist bei dir irgendeine Zahl, die musst du erhöhen, am besten so:
new string[1024];
Dann solltest du alles sehen.
Du solltest uns schon sagen was passiert, und was eigentlich passieren sollte. Bekommst du irgendwelche Nachrichten?
stock RemoveObjectsAtConnect(playerid)
{
for(new i=0;i<MAX_MAPS;i++)
{
for(new r = 0; r < MAX_REMOVE_CODES; r++)
{
RemoveBuildingForPlayer(playerid,ServerMaps[i][removeModel][r],ServerMaps[i][removeX][r],ServerMaps[i][removeY][r],ServerMaps[i][removeZ][r],ServerMaps[i][removeRadius][r]);
}
}
return 1;
}
So.
Du hast ja auch das vehicles++ gelöscht.
So muss es sein:
if (VehicleKeys[targetid][i] != 0) vehicles++;
Nein, da hast du wohl was falsch eingefügt. Wie hast du den Code von oben denn jetzt?
if (VehicleKeys[targetid] != 0)
Zu
if (VehicleKeys[targetid][i] != 0)
Hast du VehicleKeys so definiert?
new VehicleKeys[MAX_PLAYERS];
Wenn nein, wie dann? Bzw, mach es so, und falls es nicht klappt, wie hast du es definiert?
if(GetPlayerVehicleID(playerid)-1 == cInfo[x][id_x] && Spieler[playerid][GruppenID] == cInfo[x][id_x])
Dann so, wenn es immer eins größer ist.
Das schreiben wir lieber so, sieht schöner aus und ist besser lesbar.
if(strcmp(cmd, "/stats", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid] != 0) ShowStats(playerid,playerid);
else SendClientMessage(playerid, GREY, " You are not Logged in.");
}
return 1;
}
if(strcmp(cmd, "/stealth", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pAdmin] >= 3)
{
if(PlayerInfo[playerid][pStealthed] == 0)
{
PlayerInfo[playerid][pStealthed] = 1;
return SendClientMessage(playerid, GREY, " You are now hidden.");
}
if(PlayerInfo[playerid][pStealthed] == 1)
{
PlayerInfo[playerid][pStealthed] = 0;
return SendClientMessage(playerid, GREY, " You are no longer hidden.");
}
}
}
}
Ansonsten sollte es passen.
Nach IP fehlt ein ' - Dingens.
`IP`='55 WHERE
zu:
`IP`='55' WHERE
Außerdem solltest du IP als String (%s) speichern.
Poste den Code mit dem du das AdminLevel (etc) speichern lässt.
Und schalte den mysql_debug bzw. mysql_log an (1 bzw LOG_ALL) je nach Plugin, und poste dann was im Log steht, wenn du den Spieler speicherst.