SetPlayerInterior vl verwenden? Und wenn er truckexit macht, einfach SetPlayerInterior(playerid, 0); ?
Beiträge von Templer
-
-
ersetze DestroyVehicle mit
SetVehicleToRespawn(GetPlayerVehicleID(playerid));
-
return ist nur für den Programmierer selbst gedacht um ihm Werte von einer Funktion rückzugeben bzw. es wird verwendet um CodeTeile "abzubrechen", sozusagen der Code endet hier für den Spieler. Beispiel zu sehen bei dem Admin Befehl /kick, wenn Spieler kein Admin ist kriegt er einen Text und der Code wird mit return abgebrochen. Für stocks wird jedoch return oft verwendet um Werte zurückzugeben, z.B.: ein nahestehendes Auto wie bei dem Beispiel hier unten:
stock GetCloseVehicle(playerid) //by Templer
{
if(!IsPlayerConnected(playerid)) return -1;
new Float:X, Float:Y, Float:Z, Float:pX, Float:pY, Float:pZ, Float:dist = 0.0, vehicles = 0, Float:cdist = 0.000000, vehicleid = -1;
GetPlayerPos(playerid, pX, pY, pZ); GetVehiclePos(0, X, Y, Z);
cdist = floatadd(floatadd(floatsqroot(floatpower(floatsub(X,pX),2)),floatsqroot(floatpower(floatsub(Y,pY),2))),floatsqroot(floatpower(floatsub(Z,pZ),2)));
for(; vehicles < MAX_VEHICLES; vehicles++)
{
GetVehiclePos(vehicles, X, Y, Z);
dist = floatadd(floatadd(floatsqroot(floatpower(floatsub(X,pX),2)),floatsqroot(floatpower(floatsub(Y,pY),2))),floatsqroot(floatpower(floatsub(Z,pZ),2)));
if(dist < cdist && vehicles != GetPlayerVehicleID(playerid))
{
cdist = dist;
vehicleid = vehicles;
}
}
return vehicleid;
}Bei dem wird also die FahrzeugID zurückgegeben! Wenn man genauer hinschaut wird oben auch vehicleid mit -1 definiert, bedeutet, wenn kein Auto in der Nähe ist, wird auch die Variable vehicleid nicht überschrieben und der Wert -1 wird zurückgegeben um den Abfragen zu sagen, dass dort kein Fahrzeug ist! Das einzige Callback bei dem das return eine Rolle spielt ist OnPlayerCommandText, ansonsten ist bei den Callbacks ein einfaches return 1; ausreichend Hoffe du verstehst es nun
-
Probleme mim Streamer? Wobei andersrum, dein Streamer ist wohl zu langsam um die Objekte zu spawnen, zum Testen kannst du ja die Objecte per CreateObject ersetellen lassen, oder du machst die Variante: (einfach den /truckin unten mit deinem derzeitigen ersetzen und die paar Sachen dazufügen ^^)
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/truckin", false))
{
if(!IsPlayerConnected(playerid)) return 1;
new vehicle, Float:X, Float:Y, Float:Z, Float:angle;
GetCloseVehicle(playerid, vehicle);
if(vehicle == -1) return SendClientMessage(playerid, 0xFFFFFF00, "Kein Anhänger in deiner Nähe...");
if(GetVehicleModel(vehicle) != 435 && GetVehicleModel(vehicle) != 591) return SendClientMessage(playerid, 0xFFFFFF00, "Das ist kein Anhänger...");
GetVehiclePos(vehicle, X, Y, Z); GetVehicleZAngle(vehicle, angle);
if(angle >= 180.0) angle += 180.0;
else angle -= 180.0;
X += (5.0 * floatsin(angle, degrees)); Y += (5.0 * floatcos(angle, degrees));
if(!IsPlayerInRangeOfPoint(playerid, 3.5, X, Y, Z)) return SendClientMessage(playerid, 0xFFFFFF00, "Du musst hinter dem Anhänger stehen...");
GameTextForPlayer(playerid, "Lade ~r~Interior...", 2500, 3);
SetPVarInt(playerid, "TrailerID", vehicle);
SetPlayerVirtualWorld(playerid, vehicle); //Diese ID nicht verändern, damit dein Interior mehrfach benützt werden kann!
TogglePlayerControllable(playerid, 0);
SetTimerEx("EntfriereSpieler", 2500, 0, "d", playerid); //Entfriert den Spieler erst nach 2 Sekunden...
//Bitte diese Koordinaten unterbei anpassen ^^
if(IsPlayerInAnyVehicle(playerid))
{
SetVehiclePos(GetPlayerVehicleID(playerid), 1076.6134, -2320.7100, 1060.6104); //Die Position im Interior vom Anhänger
SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), vehicle);
}
else SetPlayerPos(playerid, 1076.6134, -2320.7100, 1060.6104); //Die Position im Interior vom Anhänger
return 1;
}
return 0;
}forward EntfriereSpieler(playerid);
public EntfriereSpieler(playerid)
{
if(GetPVarInt(playerid, "TrailerID") != -1) GameTextForPlayer(playerid, "Willkommen im Anhaenger ^^", 2500, 3);
return TogglePlayerControllable(playerid, 1);
} -
Sollte verständlich sein:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp("/checktest", cmdtext, false))
{
if(!IsPlayerConnected(playerid) && !IsPlayerInAnyVehicle(playerid)) return 1; //Verbietet Befehl wenn Spieler nicht verbunden und Spieler iin keinem Fahrzeug ist!
SetPlayerCheckpoint(playerid, 88.568946, -67.571983, 1.450038, 2.5); //Setzt Checkpoint
SetPVarInt(playerid, "CheckpointSet", 1); //Variable für den Checkpoint setzen..
SendClientMessage(playerid, 0xFFFFFF00, "Checkpoint wurde gesetzt! ^^"); //Einfacher Text
return 1;
}
return 0;
}public OnPlayerEnterCheckpoint(playerid)
{
if(GetPVarInt(playerid, "CheckpointSet") == 1 && IsPlayerInAnyVehicle(playerid)) //Wenn Variable auf 1 und er im Auto ist ^^
{
DisablePlayerCheckpoint(playerid); //Löscht den Checkpoint
DestroyVehicle(GetPlayerVehicleID(playerid)); //Zerstört das Fahrzeug ;-p
SendClientMessage(playerid, 0xFFFFFF00, "Du bist nun an der Farm und dein Auto wurde von einem Schwarzen gestohlen xD"); //Wiedergibt nen Text
DeletePVar(playerid, "CheckpointSet"); //Löscht die gesetzte Variable
}
return 1;
} -
In Dem Code ist auch sicher nicht dein Interior Hab nur die Koordinaten von deinem Letzten Teil genommen, was du gepostet hast, also einfach die Interior Pos ändern, wenn es ned stimmt bei SetPlayerPos und SetVehiclePos beim /truckin Befehl, NICHT beim /truckexit
-
So ist es richtig..
if(strcmp(x_put,"waffen",true) == 0)
{
new weapons[13][2];
for (new i = 0; i < 13; i++)
{
GetPlayerWeaponData(playerid, i, weapons[i][0], weapons[i][1]);
CarInfo[car][cGun][i] += weapons[i][0];//diese
CarInfo[car][cAmmo][i] += weapons[i][1];
}
ResetPlayerWeapons(playerid);
} -
-
Jo iwie wusste ich, dass wenn ich was nicht teste nicht funktioniert.. Also habs nun ausgestestet und folgende Sachen müssen ersetzt werden..
stock GetCloseVehicle(playerid, &vehicleid) //by Templer
{
if(!IsPlayerConnected(playerid)) return -1;
new Float:X, Float:Y, Float:Z, Float:pX, Float:pY, Float:pZ, Float:dist = 0.0, vehicles = 0, Float:cdist = 0.000000;
vehicleid = -1;
GetPlayerPos(playerid, pX, pY, pZ); GetVehiclePos(0, X, Y, Z);
cdist = floatadd(floatadd(floatsqroot(floatpower(floatsub(X,pX),2)),floatsqroot(floatpower(floatsub(Y,pY),2))),floatsqroot(floatpower(floatsub(Z,pZ),2)));
for(; vehicles < MAX_VEHICLES; vehicles++)
{
GetVehiclePos(vehicles, X, Y, Z);
dist = floatadd(floatadd(floatsqroot(floatpower(floatsub(X,pX),2)),floatsqroot(floatpower(floatsub(Y,pY),2))),floatsqroot(floatpower(floatsub(Z,pZ),2)));
if(dist < cdist && vehicles != GetPlayerVehicleID(playerid))
{
cdist = dist;
vehicleid = vehicles;
}
}
return true;
}und..
if(!strcmp(cmdtext, "/truckin", false))
{
if(!IsPlayerConnected(playerid)) return 1;
new vehicle, Float:X, Float:Y, Float:Z, Float:angle;
GetCloseVehicle(playerid, vehicle);
if(vehicle == -1) return SendClientMessage(playerid, 0xFFFFFF00, "Kein Anhänger in deiner Nähe...");
if(GetVehicleModel(vehicle) != 435 && GetVehicleModel(vehicle) != 591) return SendClientMessage(playerid, 0xFFFFFF00, "Das ist kein Anhänger...");
GetVehiclePos(vehicle, X, Y, Z); GetVehicleZAngle(vehicle, angle);
if(angle >= 180.0) angle += 180.0;
else angle -= 180.0;
X += (5.0 * floatsin(angle, degrees)); Y += (5.0 * floatcos(angle, degrees));
if(!IsPlayerInRangeOfPoint(playerid, 3.5, X, Y, Z)) return SendClientMessage(playerid, 0xFFFFFF00, "Du musst hinter dem Anhänger stehen...");
GameTextForPlayer(playerid, "Willkommen im Anhaenger ^^", 2500, 3);
SetPVarInt(playerid, "TrailerID", vehicle);
SetPlayerVirtualWorld(playerid, vehicle); //Diese ID nicht verändern, damit dein Interior mehrfach benützt werden kann!
//Bitte diese Koordinaten unterbei anpassen ^^
if(IsPlayerInAnyVehicle(playerid))
{
SetVehiclePos(GetPlayerVehicleID(playerid), 1076.6134, -2320.7100, 1060.6104); //Die Position im Interior vom Anhänger
SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), vehicle);
}
else SetPlayerPos(playerid, 1076.6134, -2320.7100, 1060.6104); //Die Position im Interior vom Anhänger
return 1;
}
if(!strcmp(cmdtext, "/truckexit", false))
{
if(!IsPlayerConnected(playerid)) return 1;
if(GetPVarInt(playerid, "TrailerID") == -1) return SendClientMessage(playerid, 0xFFFFFF00, "Du bist in einem Anhänger drinnen...");
if(GetPlayerVirtualWorld(playerid) != GetPVarInt(playerid, "TrailerID"))
{
SetPVarInt(playerid, "TrailerID", -1);
return SendClientMessage(playerid, 0xFFFFFF00, "Du bist in einem Anhänger drinnen...");
}
new vehicle = GetPVarInt(playerid, "TrailerID"), Float:X, Float:Y, Float:Z, Float:angle, Float:distance = 5.0;
GetVehiclePos(vehicle, X, Y, Z); GetVehicleZAngle(vehicle, angle);
if(angle >= 180.0) angle += 180.0;
else angle -= 180.0;
X += (5.0 * floatsin(angle, degrees)); Y += (5.0 * floatcos(angle, degrees));
SetPlayerVirtualWorld(playerid, 0);
if(IsPlayerInAnyVehicle(playerid))
{
SetVehiclePos(GetPlayerVehicleID(playerid), X, Y, Z); //Diese Werte NICHT Ändern..
SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), 0);
}
else SetPlayerPos(playerid, X, Y, Z); //Diese Werte NICHT Ändern..
GameTextForPlayer(playerid, "Hoffe der Besuch im Haenger war doll ^^", 2500, 3);
SetPVarInt(playerid, "TrailerID", -1);
return 1;
}Diesmal funktioniert es 100%ig, hab es ausgetestet Ja meine Berechnungen bei den Koordinaten waren geschätzt, deshalb war der "Einstiegspunkt" nicht so geplant ^^, also Viel Spaß damit.
-
Welcher AnhängerID also ModelID? Unterstützt werden derzeit nur 2:
und -
So bitte:
public OnPlayerEnterCheckpoint(playerid)
{
switch(auftrag1[playerid])
{
case 1:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 199.2657,-1379.1980,49.4461, 5.0);
auftrag1[playerid] = 2;
}
case 2:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 284.5833,-1252.7310,74.2073, 5.0);
auftrag1[playerid] = 3;
}
case 3:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 548.7088,-1195.9177,45.0756, 5.0);
auftrag1[playerid] = 4;
}
case 4:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 566.0327,-1138.8364,51.6114, 5.0);
auftrag1[playerid] = 5;
}
case 5:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 468.4139,-1179.8032,64.6608, 5.0);
auftrag1[playerid] = 6;
}
case 6:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 388.0745,-1162.3539,79.1744, 5.0);
auftrag1[playerid] = 7;
}
case 7:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 484.8989,-1079.7264,82.7310, 5.0);
auftrag1[playerid] = 8;
}
case 8:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 565.2359,-1054.3549,74.6838, 5.0);
auftrag1[playerid] = 9;
}
case 9:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 978.4000,-810.9236,98.6700, 5.0);
auftrag1[playerid] = 10;
}
case 10:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 944.1165,-759.0430,108.2155, 5.0);
auftrag1[playerid] = 11;
}
case 11:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 943.8287,-695.3416,122.3382, 5.0);
auftrag1[playerid] = 12;
}
case 12:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 1006.3703,-636.4201,121.1949, 5.0);
auftrag1[playerid] = 13;
}
case 13:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 1286.2035,-607.0198,101.9000, 5.0);
auftrag1[playerid] = 14;
}
case 14:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 1402.2178,-645.8114,90.7170, 5.0);
auftrag1[playerid] = 15;
}
case 15:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 1078.7463,-768.8945,108.4876, 5.0);
auftrag1[playerid] = 16;
}
case 16:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 1021.7408,-779.8043,103.3206, 5.0);
auftrag1[playerid] = 17;
}
case 17:
{
SendClientMessage(playerid, COLOR_LIGHTGREEN, "**Auftrag beendet!**");
SendClientMessage(playerid, COLOR_LIGHTGREEN, "**Lohnabrechnung: 100.000$");
GivePlayerMoney(i,100000);
}
}
return 1;
} -
-
Naja im Englischen gibt es andere Formatierungen betreffend 1000er Trennzeichen und Kommastellen Aber egal hier die Lösung:
SetPlayerWorldBounds(playerid, 2684.994, 2005.551, 2382.25, 1608.636);
-
-
und Sehr Sehr Sehr viele Klammerfehler Hier das gefixxte:
public OnPlayerEnterCheckpoint(playerid)
{
switch(auftrag1)
{
case 1:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 199.2657,-1379.1980,49.4461, 5.0);
auftrag1[playerid] = 2;
}
case 2:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 284.5833,-1252.7310,74.2073, 5.0);
auftrag1[playerid] = 3;
}
case 3:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 548.7088,-1195.9177,45.0756, 5.0);
auftrag1[playerid] = 4;
}
case 4:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 566.0327,-1138.8364,51.6114, 5.0);
auftrag1[playerid] = 5;
}
case 5:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 468.4139,-1179.8032,64.6608, 5.0);
auftrag1[playerid] = 6;
}
case 6:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 388.0745,-1162.3539,79.1744, 5.0);
auftrag1[playerid] = 7;
}
case 7:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 484.8989,-1079.7264,82.7310, 5.0);
auftrag1[playerid] = 8;
}
case 8:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 565.2359,-1054.3549,74.6838, 5.0);
auftrag1[playerid] = 9;
}
case 9:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 978.4000,-810.9236,98.6700, 5.0);
auftrag1[playerid] = 10;
}
case 10:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 944.1165,-759.0430,108.2155 5.0);
auftrag1[playerid] = 11;
}
case 11:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 943.8287,-695.3416,122.3382, 5.0);
auftrag1[playerid] = 12;
}
case 12:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 1006.3703,-636.4201,121.1949, 5.0);
auftrag1[playerid] = 13;
}
case 13:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 1286.2035,-607.0198,101.9000, 5.0);
auftrag1[playerid] = 14;
}
case 14:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 1402.2178,-645.8114,90.7170, 5.0);
auftrag1[playerid] = 15;
}
case 15:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 1078.7463,-768.8945,108.4876, 5.0);
auftrag1[playerid] = 16;
}
case 16:
{
DisablePlayerCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 1021.7408,-779.8043,103.3206, 5.0);
auftrag1[playerid] = 17;
}
case 17:
{
SendClientMessage(playerid, COLOR_LIGHTGREEN, "**Auftrag beendet!**");
SendClientMessage(playerid, COLOR_LIGHTGREEN, "**Lohnabrechnung: 100.000$");
GivePlayerMoney(i,100000);
}
}
return 1;
} -
Ja ich hab nen Testserver und Co, wenn du das meinst Aber das ist OffTopic und hat hier nix verloren
-
Ok sry, hier sind die Bugs gefixxt
stock GetCloseVehicle(playerid, &vehicleid) //by Templer
{
new Float:X, Float:Y, Float:Z, Float:pX, Float:pY, Float:pZ, Float:dist = 0.0, vehicles = 0, Float:cdist = 0.000000;
vehicleid = -1;
for(; vehicles < MAX_VEHICLES; vehicles++)
{
GetVehiclePos(vehicles, X, Y, Z);
dist = floatsqroot(floatpower(floatabs(floatsub(X,pX)),2)+floatpower(floatabs(floatsub(Y,pY)),2)+floatpower(floatabs(floatsub(Z,pZ)),2));
if(dist > cdist && vehicles != GetPlayerVehicleID(playerid))
{
cdist = dist;
vehicleid = vehicles;
}
}
return true;
}public OnPlayerConnect(playerid)
{
SetPVarInt(playerid, "TrailerID", -1);
return 1;
}public OnPlayerDisconnect(playerid, reason)
{
DeletePVar(playerid, "TrailerID");
return 1;
}public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/truckin", false))
{
if(!IsPlayerConnected(playerid)) return 1;
new vehicle, Float:X, Float:Y, Float:Z, Float:angle, Float:distance = 5.0;
GetCloseVehicle(playerid, vehicle);
if(vehicle == -1) return SendClientMessage(playerid, 0xFFFFFF00, "Kein Anhänger in deiner Nähe...");
if(GetVehicleModel(vehicle) != 435 && GetVehicleModel(vehicle) != 591) return SendClientMessage(playerid, 0xFFFFFF00, "Das ist kein Anhänger...");
GetVehiclePos(vehicle, X, Y, Z); GetVehicleZAngle(vehicle, angle);
if(angle < 180.0) floatadd(angle, 180.0);
else floatsub(angle, 180.0);
floatadd(X, (distance * floatsin(-angle, degrees))); floatadd(Y, (distance * floatcos(-angle, degrees)));
if(!IsPlayerInRangeOfPoint(playerid, 3.5, X, Y, Z)) return SendClientMessage(playerid, 0xFFFFFF00, "Du musst hinter dem Anhänger stehen...");
GameTextForPlayer(playerid, "Willkommen im Anhaenger ^^", 2500, 3);
SetPVarInt(playerid, "TrailerID", vehicle);
SetPlayerVirtualWorld(playerid, vehicle); //Diese ID nicht verändern, damit dein Interior mehrfach benützt werden kann!
//Bitte diese Koordinaten unterbei anpassen ^^
if(IsPlayerInAnyVehicle(playerid))
{
SetVehiclePos(GetPlayerVehicleID(playerid), X, Y, Z); //Die Position im Interior vom Anhänger
SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), vehicle);
}
else SetPlayerPos(playerid, X, Y, Z); //Die Position im Interior vom Anhänger
return 1;
}
if(!strcmp(cmdtext, "/truckexit", false))
{
if(!IsPlayerConnected(playerid)) return 1;
if(GetPVarInt(playerid, "TrailerID") == -1) return SendClientMessage(playerid, 0xFFFFFF00, "Du bist in einem Anhänger drinnen...");
if(GetPlayerVirtualWorld(playerid) != GetPVarInt(playerid, "TrailerID"))
{
SetPVarInt(playerid, "TrailerID", -1);
return SendClientMessage(playerid, 0xFFFFFF00, "Du bist in einem Anhänger drinnen...");
}
new vehicle = GetPVarInt(playerid, "TrailerID"), Float:X, Float:Y, Float:Z, Float:angle, Float:distance = 5.0;
GetVehiclePos(vehicle, X, Y, Z); GetVehicleZAngle(vehicle, angle);
if(angle < 180.0) floatadd(angle, 180.0);
else floatsub(angle, 180.0);
floatadd(X, (distance * floatsin(-angle, degrees))); floatadd(Y, (distance * floatcos(-angle, degrees)));
SetPlayerVirtualWorld(playerid, 0);
if(IsPlayerInAnyVehicle(playerid))
{
SetVehiclePos(GetPlayerVehicleID(playerid), X, Y, Z); //Diese Werte NICHT Ändern..
SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), 0);
}
else SetPlayerPos(playerid, X, Y, Z); //Diese Werte NICHT Ändern..
GameTextForPlayer(playerid, "Hoffe der Besuch im Haenger war doll ^^", 2500, 3);
SetPVarInt(playerid, "TrailerID", -1);
return 1;
}
return 0;
} -
-
Was er meint, ist dieses Tool für GTA (Nicht für Samp), jedoch auch in Samp nützbar, ist das hier: http://www.thegtaplace.com/dow…-andreas-camera-hack-v1-2
was ich meine ist folgende Theorie:
forward CamCheck(playerid);public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
SetPVarInt(playerid, "CamCheckTimer", SetTimerEx("CamCheck", 250, 1, "d", playerid));
}
if(newstate == PLAYER_STATE_ONFOOT)
{
KillTimer(GetPVarInt(playerid, "CamCheckTimer"));
RemovePVar(playerid, "CamCheckTimer");
}
return 1;
}
public CamCheck(playerid)
{
if(!IsPlayerInAnyVehicle(playerid)) return 1;
new Float:X, Float:Y, Float:Z, Float:Angle, Float:nX, Float:nY;
GetVehiclePos(GetPlayerVehicleID(playerid, X, Y, Z));
GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle);
nX = X+(3.5 * floatsin(-Angle, degrees)); nY = Y+(3.5 * floatcos(-Angle, degrees));
SetPlayerCameraPos(playerid, X, Y, Z);
SetPlayerCameraLookAt(playerid, nX, nY, Z);
return true;
}ACHTUNG: Verbraucht sehr viel an CPU Auslastung!
-
Oder du baust den Befehl SetPlayerCameraPos in einen Timer ein, der sehr schnell aktualisiert wird und die Camera im Auto eingebaut wird! Natürlich mithilfe von SetPlayerCameraLookAt