Die Koordinaten stimmen doch 1:1 mit denen im enum überein. ![]()
Beiträge von Jeffry
-
-
Lade dir das crashdetect Plugin herunter und poste dann was im Log steht, wenn du den Server startest.
http://forum.sa-mp.com/showthread.php?t=262796 -
Ja.
Zwecks dem Mieten:
Es wäre besser, eine neue Tabelle "Mieter" anzulegen, in der du die Haus ID und den Mieter-Name speicherst. So kannst du beliebig viele Mieter haben:
1 | Hans
1 | Horst
2 | Fritz
1 | Fritz
3 | Tom
2 | Horst
1 | Tom
... -
Hast du es mal so versucht?
ocmd:exit(playerid, params[])
{
for(new i=0; i<MAX_HOUSE; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 3.0, hInfo[i][IntX],hInfo[i][IntY],hInfo[i][IntZ]))
{
SetPlayerPos(playerid, hInfo[i][PosX],hInfo[i][PosY],hInfo[i][PosZ]);
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
return 1;
}
}
return SendClientMessage(playerid, error, "Du bist nicht in der Nähe eines Hauses!");
}Stimmen die Koordinaten auch überein, oder hast du vielleicht falsche eingetragen?
-
Suche eine Boden-ID da ich gerade zu blöd für alles bin

Objekt ID 8661 dürfte so ähnlich aussehen. -
#pragma dynamic 1000000
Füge das mal unter den Includes ein. Falls die Meldung nicht weg geht, erhöhe die Zahl etwas.
EDIT: (Post unten)
@Goldfire: Da dein Problem behoben ist, wäre es super, wenn du den Thread als erledigt markierst. Danke!
-
Hast du eine mehrzeilige Meldung mit vielen Zahlen im Compiler stehen?
-
Was hast du denn da gemacht? Schau dir mal den Code von mir an und den von dir.
Warum hast du es nicht einfach nur kopiert?forward lookup();
public lookup()
{
for(new i; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
if(IsPlayerInRangeOfPoint(i,1.0,3422.0671,-1810.0132,11.9972)) SetPlayerPos(i,3419.1365,-1815.3472,10015.5713);
if(IsPlayerInRangeOfPoint(i,10.0,3419.1365,-1815.3472,10015.5713)) SetPlayerPos(i,3422.0671,-1810.0132,11.9972);
}
return 1;
} -
Kannst du den Code bitte richig posten (erster Expander)?
Dann erstelle bitte mal zwei Häuser und poste dann einen Screenshot wie es in der Datenbank aussieht.
-
Tut mir leid, Chef
Macht ja nichts, nur nächstes mal prüfe erst deinen Code, bevor du in einen Thread zwischenrein-postest, an dem bereits jemand anderes dran ist. Das gibt sonst nur ein Chaos.
-
Bekomme keine Erros, werde aber vom Innenraum nicht wieder nach draußen teleportiert.
Dann bist du nicht an der Position. Zeig mal deinen Code.PermanenT: Der Timer wird alle 3 Sekunden aufgerufen, zwangsläufig kann er nur nach 3 Sekunden wieder raus teleportiert werden, und nicht früher.
-
Nein, so nicht, PermanenT...
public sekunde()
{
for(new i = 0; i<MAX_PLAYERS; i++)
{
if((gettime()-Bergarbeiter[i][aufladez]) >= 7 && Bergarbeiter[i][aufladez]!=0)
{
SetPlayerCheckpoint(i,Bergabfuhr_Stationen[berg_Checkpoint][B_fX],Bergabfuhr_Stationen[berg_Checkpoint][B_fY],Bergabfuhr_Stationen[berg_Checkpoint][B_fZ],Bergabfuhr_Stationen[berg_Checkpoint][B_fRad]);
SendClientMessage(i,GRÜN,"Eisenerz abgeliefert!");
Bergarbeiter[i][aufladez]=0;
}
}
return 1;
}Und:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(IsPlayerInRangeOfPoint(playerid,20,682.4080,823.6100,-27.3594))
{
if(PRESSED(2048))
{
if(!Bergarbeiter[playerid][aufladez])
Bergarbeiter[playerid][aufladez] = gettime();
}
}
if(RELEASED(2048) && Bergarbeiter[i][aufladez] != 0)
{
Bergarbeiter[i][aufladez]=0;
SendClientMessage(i,ROT,"Du hast die Taste keine 7 Sekunden gedrückt");
}
return 1;
} -
forward lookup();
public lookup()
{
for(new i; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
if(IsPlayerInRangeOfPoint(i,1.0,3422.0671,-1810.0132,11.9972)) SetPlayerPos(i,3419.1365,-1815.3472,10015.5713);
if(IsPlayerInRangeOfPoint(i,10.0,3419.1365,-1815.3472,10015.5713)) SetPlayerPos(i,3422.0671,-1810.0132,11.9972);
}
return 1;
}So? Oder wie meinst du es?
-
Nein.
Mit einem Timer, der jede Sekunde durch alle Spieler loopt (Schleife) und das hier prüft:
Timer bei OnGameModeInit erstellen.
for-Schleife durch alle Spieler im Timer-Public und entsprechend abfragen.Es macht keinen Sinn für jeden Spieler einen Timer dafür zu erstellen.
Bei OnPlayerKeyStateChange bleibt alles so wie es war.
-
if(!IsPlayerInRangeOfPoint(playerid,10.0,3422.0671,-1810.0132,11.9972)) continue;
Der Umkreis/Radius hat gefehlt, und die 1 am Anfang muss playerid sein, sonst prüfst du nur die ID 1.
-
Hier stehen die Erklärungen:
http://wiki.sa-mp.com/wiki/AddPlayerClass_DE -
-
Was meinst du? gettime verwendest du ja dann im Timer.
Du brauchst ja etwas, was ständig prüft ob die 7 Sekunden rum sind, das ist der Timer. -
Mit einem Timer, der jede Sekunde durch alle Spieler loopt (Schleife) und das hier prüft:
if((gettime()-Bergarbeiter[playerid][aufladez]) == 7) -
ocmd:sellhouse(playerid, params[])
{
new string[64];
for(new i=0; i<MAX_HOUSE; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 3.0, hInfo[i][PosX],hInfo[i][PosY],hInfo[i][PosZ]))
{
if(hInfo[i][Gekauft] != 1) return SendClientMessage(playerid, error, "Dieses Haus kannst du nicht verkaufen!");
if(strcmp(hInfo[i][Besitzer], SpielerName(playerid))) return SendClientMessage(playerid, error, "Dieses Haus gehört nicht dir!");
hInfo[i][Gekauft] = 0;
format(hInfo[i][Besitzer], 34, "");
format(string, sizeof(string), "Besitzer: Niemand\nPreis: %d\nLevel: %d",hInfo[i][Kaufpreis],hInfo[i][Level]);
Update3DTextLabelText(hInfo[i][Houselable], 0xB90000FF, string);
GivePlayerMoney(playerid, hInfo[i][Kaufpreis]);
return 1;
}
}
return SendClientMessage(playerid, error, "Du bist nicht in der Nähe deines Hauses!");
}