Sobald ein Admin /aduty macht musst du für jeden Spieler den Spieler in diesem Fall setzten (http://wiki.sa-mp.com/wiki/SetPlayerMarkerForPlayer)
Mit ShowPlayerMarkers(1) würde jeder Spieler angezeigt werden bzw. in einem Radius je nachdem welcher Mode.
Mit SetPlayerMarkerForPlayer wird ein Spieler bei einem anderen Spieler immer angezeigt (was du glaub ich auch haben möchtest), musst du per For Schleife dann machen dass jeder Spieler den jenigen sieht.
Beiträge von pierre65
-
-
Artus nein muss man nicht...
Man kann, bzw. wär es besser und ordentlicher wenn man diese `` hat, aber das ist nicht umbedingt notwendig.Master147
strcat(query1, "INSERT INTO `haus` (id,Created,Owner,Owned,EnterX,EnterY,EnterZ,ExitX,ExitY,ExitZ,Preis,Level,Int,Mieter,Miete,Rentable,lock");
format(query2,sizeof(query2),"VALUES ('%d','%d','%s','%d','%f','%f','%f','%f','%f','%f','%d','%d','%d','%d','%d','%d','%d')", i,Hauser[i][pCreated],Hauser[i][pOwner],Hauser[i][pOwned],Hauser[i][pEnterX],Hauser[i][pEnterY],Hauser[i][pEnterZ],Hauser[i][pExitX],Hauser[i][pExitY],Hauser[i][pExitZ],Hauser[i][pPrice],Hauser[i][pLevel],Hauser[i][pInt],Hauser[i][pMieter],Hauser[i][pMiete],Hauser[i][pRentable],Hauser[i][plock]);
Du hast 2x "Preis" speichern wollen.... nächstes mal schaust du dein Code nochmal ganz genau nach, denn sowas sind Kleinigkeiten die man beim selber beim genaueren rüberschauen problemlos finden kann.. -
Also ich habe 18/17 gezählt.....
Vielleicht hast du alle angegeben (format(string..., "('%d'....", wert1,wert2.....);) es muss aber nicht sein dass du alle beim Query eingetragen hast
also du hast zu wenig Parameter mit übergeben
Kleines Beispiel (hat man mehr Überblick)
format(query,sizeof query,"INSERT INTO `table` (VALUE1,VALUE2,VALUE3)");
format(query,sizeof query,"%s VALUES('%d','%d')", query, variable1, variable2, variable3); -
Wie gesagt, du vergisst einen Wert zu senden....
du musst dir jetzt Wert für Wert anschauen und gucken welchen du vergessen hast.
Sei froh dass es nur das Haussystem ist. -
MySql Log? Fehlermeldungen?
(MySql Log aktivieren mit mysql_debug(1))// Edit: Hast einen Parameter vergessen beim übergeben
, mach VALUES(NULL,'%d'...... oder nimm "id," raus (beim INSERT)
// Edit 2: Hab falsch gelesen -
Ohne Code geht nichts....
Poste mal den Code wo du das Passwort speichern bzw. auslesen lässt, du hast aber glaube ich ein ' oder so ähnlich vergessen -
Oh Fail hatte ausversehen Shift Taste drin... Schreibe ebend zu schnell
Hätt sonst ein paar Jahre warten müssen bevor er den Befehl wieder nutzen hätte können (rofl) -
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{//Vom San Fierro Mietautohaus, was auch funktioniert
for(new i = 0; i<MAX_VEHICLES; i++) {
if(vehicleid == Mietcar[i] || vehicleid == LSMietcar[i])
{
TogglePlayerControllable(playerid,1); // freezt eigentlich nur den Spieler?!?
RemovePlayerFromVehicle(playerid); // Entfernt den Spieler vom Auto ;)
return 1;
}
}
return 1;
}
Kannst einfach mit einer For schleife das ganze überprüfen -
new vehid = GetPlayerVehicleID(PERSONB);
for (new i=0;i<MAX_PLAYERS;i++) {
if ( IsPlayerConnected(i) && GetPlayerVehicleID(i) == vehid ) {
if ( GetPlayerVehicleSeat(i) == 0 ) {
// Das ist dein Taxifahrer! (ID: i)
break; // da gefunden wurde kann er die For Schleife auch abbrechen.
}
}
}
Wäre die einzigste Möglichkeit die mir auf die schnelle einfällt.. -
// Beim Befehl:
if ( gettime() >= DasIstDeineVariableVomUser[playerid] ) { // Das soll passieren wenn 2 Stunden um sind oder er es zum ersten mal macht
DasIstDeineVariableVomUser[playerid] = gettime() * (3600 * STUNDENANZAHL); // damit er es auch erst nach 2h kann, wieder speichern
}
Die Variable solltest du aber auch abspeichern -
format(query1,sizeof(query1),"UPDATE `haus` SET `Created` = '%d',`Besitzer` = '%s',`Owned = '%d',`EnterX` = '%f',`EnterY` = '%f',`EnterZ` = '%f',`ExitX` = '%f',`ExitY` = '%f',`ExitZ` = '%f',",Hauser[haus][pCreated],]Hauser[haus][pOwner],Hauser[haus][pOwned],Hauser[haus][pEnterX],Hauser[haus][pEnterY],Hauser[haus][pEnterZ],Hauser[haus][pExitX],Hauser[haus][pExitY],Hauser[haus][pExitZ]); //<-----Kriege hier alle fehler
Guck dir mal Hauser[haus][pCreated],]Hauser[haus][pOwner],Hauser[haus][pOwned] genauer an...
Na findest es selbst?
Wenn nein: nachdem ersten Komma hast du ein ] zu stehen, das entfernen. -
1. Crashdetect (http://forum.sa-mp.com/showthread.php?t=262796) installieren.
2. Server starten
3. Server.log hier posten oder wenn der Fehler dir schon reicht dann selbst beheben.... -
ocmd:admins(playerid,params[])
{
new adminonline = 0;
for(new i = 0;i<MAX_PLAYERS;i++)
{
if(IstSpielerAdmin(i,1))
{
adminonline ++;
new string[128];
new adminrang[64];
switch(GetPVarInt(i,"Adminlevel"))
{
case 1:{adminrang="1 Adminrang";}
case 2:{adminrang="2 Adminrang";}
//usw...
}
format(string,sizeof(string),"%s | Administratoren | %i",SpielerName(i),adminrang);
SendClientMessage(playerid,FARBE,string);//FARBE = DEINE FARBE!!!
}
}
if ( adminonline < 1 ) { SendClientMessage(playerid,FARBE," Es sind momentan keine Administratoren online!"); } //FARBE = DEINE FARBE!!!
return 1;
}[SoA]TheBester hat das in der For-Schleife abgefragt dadurch wurde auch der Chat zugespamt...
-
Wird denn überhaupt deine "price" Variable gefüllt oder ist die auch leer, dann könnte es nämlich an der If-Abfrage liegen:
if((!strcmp(BizInfo[i][bTyp],"Werbung",true))) zu
if(!strcmp(BizInfo[i][bTyp],"Werbung",true)) -
{-2596.0364, 337.6360, -2550.4565, 302.9267}
ersetzen zu
{-2596.0364, 302.9267, -2550.4565, 337.6360}
Danach sollte es gehen...
Weil er denkt die erste und die zweite ist die Mindestvariable und die 3. + 4. ist die Maxvariable.. -
Du hast viele Varialben (für zum Beispiel) Timers erstellt, hättest das alles auf eins machen können z.b. GangZone[i][flagTimer] = SetTimer... und das mit allen anderen Timern auch.
Du hast bei der auch ein Fehler gemacht
MinX, MinY, MaxX, MaxY, da 337.* höher ist als 302.* ist das keine gültige Gangzone, falls du es nach dieser Reihenfolge sortiert hast, wasi ch glaube. -
Da du in new mny = strlen(str) * price; ja den Preis hast wird ja durch SpielerInfo[playerid][pGeld] -= mny; eigentlich der richtige Preis abgezogen und dann machst du noch GivePlayerMoney(playerid, -mny);
-
public OnPlayerRequestSpawn(playerid) {
TogglePlayerSpectating(playerid, 1);
PlayerSpectatePlayer(playerid, playerid);
return 0;
}
public OnPlayerRequestClass(playerid, classid)
{
TogglePlayerSpectating(playerid, 1);
PlayerSpectatePlayer(playerid, playerid);
// dein restlicher Code....
}Damit hast du keine Buttons unten mehr... Damit man auch spawnt musst du wie JackC schon gesagt hat, SpawnPlayer (& SetSpawnInfo) nutzen (beim OnDialogResponse..).
-
Dein SpielerSpeichern ändern zu:
stock SpielerSpeichern(playerid)
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
new Float:x, Float:y, Float:z; // falls nicht generiert
GetPlayerPos(playerid,x,yz);
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",Sname);
if(dini_Exists(Spieler))
{
dini_IntSet(Spieler,"Adminlevel",sSpieler[playerid][Adminlevel]);
dini_IntSet(Spieler,"Level",sSpieler[playerid][Level]);
dini_IntSet(Spieler,"Fraktion",sSpieler[playerid][Fraktion]);
dini_IntSet(Spieler,"Job",sSpieler[playerid][Job]);
dini_IntSet(Spieler,"Team",sSpieler[playerid][Team]);
dini_IntSet(Spieler,"Skin",GetPlayerSkin(playerid));
dini_IntSet(Spieler,"Geld",GetPlayerMoney(playerid));
dini_FloatSet(Spieler,"X", x);
dini_FloatSet(Spieler,"Y", y);
dini_FloatSet(Spieler,"Z", z);
return 1;
}
return 1;
}
Dein SpielerLaden Befehl ändern zu:
stock SpielerLaden(playerid)
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",Sname);
if(dini_Exists(Spieler))
{
sSpieler[playerid][Adminlevel] = dini_Int(Spieler,"Adminlevel");
sSpieler[playerid][Level] = dini_Int(Spieler,"Level");
sSpieler[playerid][Fraktion] = dini_Int(Spieler,"Fraktion");
sSpieler[playerid][Job] = dini_Int(Spieler,"Job");
sSpieler[playerid][Team] = dini_Int(Spieler,"Team");
sSpieler[playerid][sLogin] = 1;
sSpieler[playerid][Geld] = dini_Int(Spieler,"Geld");
GivePlayerMoney(playerid, sSpieler[playerid][Geld]);
SetPlayerPos(playerid,dini_Float(Spieler,"X"),dini_Float(Spieler,"Y"),dini_Float(Spieler,"Z"));
return 1;
}
return 1;
}Und fertig... (Weiss gerade nicht obs dini_Float und dini_FloatSet ist ich arbeite nicht mehr mit dini nur noch mit MySql)
-
Wieso hast du das so kompliziert gestaltet.... (hier (wird in 7 Tagen wieder gelöscht) kannst du mal mein GangWar System anschauen)
1. (Nur ein Tip) Statt "var = i;" kannst du "return i;" nutzen (bei GetPlayerGangZone(playerid)). Sowie am Ende "return var;" durch "return -5;" ersetzen, die Zeile "new var = -5;" kannst du dann entfernen. So läuft nämlich die For Schleife nicht weiter falls er schon ein Gebiet gefunden hat, und ich glaube nicht dass du 2 Gebiete übereinander hast...2. Gib dir mal gangzoneid aus und schau was für einen Wert er dir zurückgibt. Sollte der Wert über 0 liegen liegts daran schonmal nicht.
3. Alles was zwischen "if(IsGangZoneInFight[gangzoneid] == false)" steht kommentierst du mal mit Hilfe von /* und */ aus und gibst etwas ein wie "SendClientMessage(playerid, 255, "Hallo");" oder so ähnlich. (nicht in den /* */, sondern davor).
>> Ist der Fehler "Server Unknown Command" weg, dann liegt es an einen Befehl den du auskommentiert hast, einfach jeden einzelnen Befehl wieder "entkommentieren" (oder so) und dann mal schauen durch welchen Befehl der "Server Unknown Command" ausgelöst wird. (denke mal das liegt an der FOR-Schleife)
>> Ist der Fehler nicht weg, dann liegt es an einer IF-Abfrage.