Versuche mal einen anderen materialindex zu nehmen:
SetObjectMaterial( Sparkasse1, 1, -1, "none", "none", 0xFFFF0000 );
oder
SetObjectMaterial( Sparkasse1, 2, -1, "none", "none", 0xFFFF0000 );
usw...
Beiträge von Jeffry
-
-
Schreibe es mal so:
SendClientMessageToAll(COLOR_LIGHTRED, string);
format(string, sizeof(string), "AdmCmd: Du wurdest von %s gebannt, Grund: %s", sendername, (result));
SendClientMessage(giveplayerid,COLOR_LIGHTRED, string);
PlayerInfo[giveplayerid][pGesperrt] = 1;
OnPlayerUpdate(giveplayerid); //Hier hatte ich dir die falsche Variable gesagt, sorry.
return 1;Und das musst du mit einem Array machen, sonst bringt das nichts.
Du könntest aber auch einfach die Kick/Ban-Fix Include nutzen.
forward KickTimer(playerid);
new oKick[MAX_PLAYERS];public KickTimer(playerid)
{
if(oKick[playerid] == 0)
{
SetTimerEx("KickTimer",200,false,"i",playerid);
oKick[playerid] = 1;
}
else if(oKick[playerid] == 1)
{
Kick(playerid);
oKick[playerid] = 0;
}
return 1;
} -
Hast du da einen Log dazu?
Hat er es bei einem Hoster, oder auf seinem PC, oder auf seinem eigenen root? -
Was machen die Punkte da?
public OnPlayerConnect(playerid)
{
new pname[MAX_PLAYER_NAME], string[39 + MAX_PLAYER_NAME];
if(fexist(UserPath(playerid)))
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s");
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Login Menu",""COL_WHITE"Type your password below to login.","Login","Kick");
}
else
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,"Register Menu","Type your password below to register a new account.","Register","Kick");
}
GetPlayerName(playerid, pname, sizeof(pname));
format(string, sizeof(string), "%s has Joined the server.", pname);
SendClientMessageToAll(0xFF8000FF, string);
return 1;
}
Geht's so? -
Was heißt, "die falsche Welt"? Du setzt die Welt zum Index in iInfo. Wenn das falsch ist, dann erstelle eine neue Spalte im iInfo, nenne es IP_World und schreibe die Welt zu den Daten dazu, ebenso bei SetPlayerVirtualWorld.
Und was meinst du mit "nicht sofort"? Was passiert, wenn du in das Pickup läufst? -
Schalte entsprechend zu deinem MySQL Plugin den Debug Modus an und poste was im MySQL Log steht, wenn du den Server startest.
Wie du das machst steht hier: Tipps: Scripting-Probleme richtig erklären (Kapitel 1.4)Dazu poste dann bitte den Code, mit dem du die Verbindung herstellst.
-
Schreibe es so:
ocmd:fillcar(playerid,params[])
{
if(pInfo[playerid][pEingeloggt] == 0)return SCM(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
if(!IsPlayerInAnyVehicle(playerid))return SCM(playerid,COLOR_GRAU,"Du bist in keinem Fahrzeug!");
new vID = GetPlayerVehicleID(playerid);
new string[128];
if(!HasCarMotor(vID))return SCM(playerid,COLOR_GRAU,"Dieses Fahrzeug besitzt kein Motor!");
if(GetPVarInt(playerid,"tank_Rechnung")>0)return SCM(playerid,COLOR_GRAU,"Begleiche erst die Rechnung in der Tankstelle.");
if(IsMotorOn(vID))return SCM(playerid,COLOR_GRAU,"Schalte erst den Motor ab bevor du Tanken tust.");
for(new i=0; i<sizeof(tkInfo); i++)
{
if(!bsInfo[i][db_id])continue;
if(bsInfo[i][b_id] !=2)continue;
if(!IsPlayerInRangeOfPoint(playerid,2,tkInfo[i][tk_x],tkInfo[i][tk_y],tkInfo[i][tk_z])) continue;
format(string,128,"Willkommen bei der Tankstelle.\nAktueller Preis pro Liter: %i$",bsInfo[i][b_gasprice]);
ShowPlayerDialog(playerid,DIALOG_FILLCAR,DIALOG_STYLE_INPUT,"Tankstelle",string,"Tanken","Abbrechen");
return 1;
}
return SCM(playerid,COLOR_GRAU,"Du bist nicht in der nähe einer Tankstelle.");
}Das return bei der if-Abfrage gehört nicht in die Schleife, wenn du mehrere prüfen willst.
-
Kannst du so schreiben:
public OnPlayerPickUpPickup(playerid, pickupid)
{
static lastIn[MAX_PLAYERS];
if(gettime() > lastIn[playerid] + 3)
{
for(new i=0; i<sizeof(iInfo); i++)
{
if(!IsPlayerInRangeOfPoint(playerid,1,iInfo[i][IP_X],iInfo[i][IP_Y],iInfo[i][IP_Z]))continue;
lastIn[playerid] = gettime();
SetPlayerPos(playerid,iInfo[i][IP_IntX],iInfo[i][IP_IntY],iInfo[i][IP_IntZ]);
SetPlayerInterior(playerid,iInfo[i][IP_Interior]);
SetPlayerVirtualWorld(playerid,i);
return 1;
}
}
return 1;
} -
Sa haben wir doch den Fehler. Du versuchst KillTimer mit dem Callback zu machen, das geht nicht.
Dort wo du den Timer startest muss es so aussehen:
meinTimer = SetTimer...Und das KillTimer dann so:
KillTimer(meinTimer);Wobei meinTimer global unter den Includes deklariert ist.
IntelCore.I7:
Du hast noch immer nicht das Callback genannt unter welchem der Code steht, und du hast noch immer nicht die Copyrights ersetzt mit dem Copyright playerid Array... -
Ja, relativ wenig zwar, aber du hast anstatt einer IF Abfrage zwei IF Abfragen, somit braucht die Abfrage theoretisch doppelt so lang. Sind zwar nur Nanosekunden, aber wenn es einfacher und schneller geht, kann man es ja so machen.
Letztendlich spielt es keine Rolle, da zählt die persönliche Bevorzugung.
-
Nein so nicht. Wenn, dann so:
if(tmp < dist || dist == -1)Allerdings ist das nicht so performant.
-
So wie ich das sehe willst du nur das Krankenhaus herausfinden, welches dir beim Tod am nächsten ist.
Dazu brauchst du diese ganze Sortiererei gar nicht. Außerdem war das mit der Verwendung der Variablen etwas durcheinander bei deinem Code, du hast da Sachen angegeben die gar nicht existieren.Schreibe es so:
new hospitalID[MAX_PLAYERS]; //Zwischenspeicher
new Float:Hospitals[][] =
{
{1177.0387, -1323.8035, 14.0510, EAST},
{-2655.6882, 636.9452, 14.4531, SOUTH},
{1607.2102, 1818.1615, 10.820, NORTH}
};
public OnPlayerDeath(playerid, killerid, reason)
{
new Float:dist = 999999999.0, idx, Float:tmp;
for(new i=0; i<sizeof(Hospitals); i++) //Schleife durch alle Krankenhäuser, dynamisch.
{
tmp = GetPlayerDistanceFromPoint(playerid, Hospitals[i][0], Hospitals[i][1], Hospitals[i][2]);
if(tmp < dist) //Wenn Krankenhaus näher als das zuletzt nähste.
{
dist = tmp;
idx = i;
}
}
hospitalID[playerid] = idx; //Nähstes Krankenhaus in den Zwischenspeicher packen
return 1;
}public OnPlayerSpawn(playerid)
{
new idx = hospitalID[playerid]; //Zwischenspeicher laden und Spieler an die Position setzen.
SetPlayerPos(playerid, Hospitals[idx][0], Hospitals[idx][1], Hospitals[idx][2]);
SetPlayerFacingAngle(playerid, Hospitals[idx][3]);
return 1;
} -
Das ist soweit alles richtig, das gesperrt muss auch in der Datei stehen, du schreibst es ja rein. Ob es da mit 0 oder 1 steht ist was anderes, aber es muss drin stehen, schau da mal nochmal nach.
Steht die Abfrage, ob der Spieler gebannt ist direkt nach dem Laden der Spieler Stats, oder wo im Code steht das? Poste das bitte mal zusammenhängend, weil wenn da zuvor zum Beispiel ein return ist, dann würde es nichts bringen.
-
PlayerInfo findest du, indem du nach "new PlayerInfo" suchst, das was in der zweiten Klammer steht ist das enum, suche danach dann, ohne die Klammern.
Das SpielerSpeichern oder wie auch immer es bei dir heißt, findest du indem du nach "/Accounts/" suchst.
Das sollte nicht zu schwer sein, wenn du einen Server führen willst, solltest du in der Lage sein wenigstens etwas in deinem Code zu finden.
-
So wie ich das sehe willst du Fraktion 1 und 2 die Nachricht senden. Dann schreibe es so:
//FRAKTIONSNACHRICHTEN
stock SendFraktionMessage(farbe,string[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(sSpieler[i][Fraktion] >= 1 && sSpieler[i][Fraktion] <= 2)
{
SendClientMessage(i,farbe,string);
}
}
}Außerdem musst du im /f Befehl SendFraktionMessage machen, anstatt SendAdminMessage.
-
Bei beiden Befehlen fehlt vor dem return 1 eine geschweifte Klammer zu. Sowas: }
-
Dann poste bitte dein OnPlayerUpdate und dein OnPlayerLogin. Beide Codes.
-
Das ist doch kein Callback. Das hilft nicht weiter.
Callbacks: http://wiki.sa-mp.com/wiki/Category:Scripting_CallbacksUnter welchem Callback steht der Code der dir Errors bringt?
-
Schau mal was ich geschrieben habe:
Unter welchem Callback steht der Code, der dir die Fehler bringt? Poste bitte den Code und das Callback.
Wenn du nicht sagst unter welchem Callback es steht, kann ich nicht wissen welche Variablen zur Verfügung stehen.
-
Unter welchem Callback steht der Code, der dir die Fehler bringt? Poste bitte den Code und das Callback.