wie mache ich das man helis auf heli platformen macht das sich aber dann die plattformen bewegen
so weit so gut aber jetzt wenn ich sie bewege /helis dann fallen die helis runetr
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Meinst du wie im Single Player den Magneten oder ein Objekt an den Helicopter ?
Versteh dich nicht ganz aber wenn du es wie im SinglePlayer haben willst
Du könntest es so machen...Du überprüfst ob jemand im Heli sitzt und nutzt die AttachObjectToPlayer Funktion
Hab hier die Heliposition nicht extra definiert, musst du einfügen...
#define Max_Helicopters 2
#define DistanceHeliPlayer 3forward AttachObjectToDefinedVehicle(player);
enum HelicopterAttach
{
Attachveh,
Float: Offset_X,
Float: Offset_Y,
Float: Offset_Z,
Float: Rotation_X,
Float: Rotation_Y,
Float: Rotation_Z
}
new
Helicoptercfg[Max_Helicopters][HelicopterAttach];//Unter Ongamemodeinit
for(i = 0; i < sizeof(Max_Helicopters); i++) {
Helicoptercfg[i][Attachveh] = CreateVehicle(/*Dein Helicopter*/, Helipos_X, Helipos_Y,Helipos_Z, Helirotation, Farbe1, Farbe2, false); Helipos[3]++: /*Eine Y-Coordinate daneben spawnen*/ }public AttachObjectToDefinedVehicle(player)
for(i = 0; i < sizeof(Max_Helicopters); i++) {
if(IsPlayerInVehicle(player, Helicoptercfg[i][Attachveh])) {
break; /* Loop unterbrechen, Spieler kann nur in einem Helicopter sitzen*/
GetPlayerPos(player, Helicoptercfg[i][Offset_X],Helicoptercfg[i][Offset_Y],Helicoptercfg[i][Offset_Z]-DistanceHeliPlayer);
AttachObjectToPlayer( /*dein Objekt*/, player, Helicoptercfg[i][Offset_X],Helicoptercfg[i][Offset_Y],Helicoptercfg[i][Offset_Z], Helicoptercfg[i][Rotation_X],Helicoptercfg[i][Rotation_Y],Helicoptercfg[i][Rotation_Z] );
else { return StopObject(/*dein Objekt*/); }
}
}Müsstest du mal ausprobieren ob StopObject ein Attachtes Objekt stoppen kann.
Ansonsten einfach nen Timer verwenden und die Funktion benutzen.
Ob das jetzt so funktioniert zeigt sich Ingame -
Er nennt dass Legändiäre Surfen-auf-Objekten Problem.
-
hmm nee ich glaub eher er meint, das wenn sicher der boden bewegt, sich der heli auch bewegen soll..
vielleicht geht es, wenn du in einem sekundentimer die position des objektes abfragst und dann den heli auf diese position setzt (DestroyVehicle und CreateVehicle) (wenn ein spieler drinsitzt, dann mach ihn wieder rein, nach dem zerstören & erstellen des helis ^^)
ich würde mir das so vorstellen...
MFG
-
Ja Mein Gott dann soll er mal was sagen.
Wir sind nicht zum Pc-to-Pc Lippenlesen hier.
Falls es so ist wie selEcT meint dann sollte das so aussehen...
new _pos[4];
GetPlayePos(playerid, _pos[1], _pos[2], _pos[3])
SetVehiclePos(/*Fahrzeug*/, _pos[1], _pos[2], _pos[3]+3); /*Über Kopf*/new Keys,ud,lr, FLoat: Angle;
GetPlayerFacingAngle(playerid, Angle)
GetPlayerKeys(playerid,Keys,ud,lr);if(Angle > 180) {
SetVehiclePos = (ud > 0) ? ((/*Fahrzeug*/, _pos[1], _pos[2]-1, _pos[3])) : ((ud < 0) ? ((/*Fahrzeug*/, _pos[1], _pos[2]+1, _pos[3]))); }
else if(Angle < 180) {
SetVehiclePos = (lr > 0) ? ((/*Fahrzeug*/, _pos[1], _pos[2], _pos[3-1])) : ((lr < 0) ? ((/*Fahrzeug*/, _pos[1], _pos[2], _pos[3]+1))); }
else { print("Spielerrotation nicht erkannt!"); } /* Kann eig nicht passieren ich weiß*/Wenn ich nen Fehler drin habe einfach melden, ich mach das grade Freihand
Oder man macht es sich einfacher indem man die Position des Spielers nimmt und Updated auf die Position des Helicopters -
hmm ich denke eher so (ausm kopf ;))
forward HeliTimer();
new object[1];
new heli[1];public OnGameModeInit()
{
heli[0] = AddStaticVehicle(heliid, posx, posy, posz,angle);
object[0] = CreateObject(objectid,posx,posy,posz,rotationx,rotationy,rotationz);
SetTimer("HeliTimer",1000,1);
}public HeliTimer()
{
new Float:posx,Float:posy,Float:posz;
GetObjectPos(object[0],posx,posy,posz);
SetVehiclePos(heli[0],posx,posy,posz);
}so vielleicht...
ungetestet..
MFG
-
-
mach für die objekte und helis je eine variable.
-
?
-
Was genau willst du eigentlich mit den Screenshots zeigen.
Sollen da die Helicopter draufstehen auf der Plattform oder wie ? -
-
jop also ich habe die im hanger auf den plattformen gesavt
wenn cih die plattforemn raus hole mit nenm Befehl bleiben die helis drin und fallen von der plattforummfg
ich hoffe ihr könnt mir helfen
-
mach es so wie ich dir vorgeschlagen habe...
-
ja wie den?
-
wenn du ein bisschen ahnung hast vom scripten, dann sollte das hier net alzu schwer sein:
forward HeliTimer();
new object[1];
new heli[1];public OnGameModeInit()
{
heli[0] = AddStaticVehicle(heliid, posx, posy, posz,angle);
object[0] = CreateObject(objectid,posx,posy,posz,rotationx,rotationy,rotationz);
SetTimer("HeliTimer",1000,1);
}public HeliTimer()
{
new Float:posx,Float:posy,Float:posz;
GetObjectPos(object[0],posx,posy,posz);
SetVehiclePos(heli[0],posx,posy,posz);
}bei heli[0] = und bei object[0] = gibst du die koords deines helis und deinem boden an...
-
Sowürde es funktionieren ich würde es aber bei ner simplen Verschiebeaktion ohne Timer machen
#define Max_Plattform 3enum Plattformcfg
{
Fahrzeug,
Objekt
}new Plattform[Plattformcfg][Max_Plattform ];
/*Unter OnGameModeInit*/
Plattform[Fahrzeug][1] = AddStaticVehicle(ID, X, Y, Z,A);
Plattform[Fahrzeug][2] = AddStaticVehicle(ID, X, Y, Z,A);
....
Plattform[Objekt][1] = CreateObject(ID, X, Y, Z,RX,RY,RZ);
Plattform[Objekt][2] = CreateObject(ID, X, Y, Z,RX,RY,RZ);
.../*Unter OnCommandText*/
dcmd(plattform,9, cmdtext);dcmd_plattform(playerid, params[])
{
new
plattformen;
if (sscanf(params, "u", plattformen)) SendClientMessage(playerid, 0xFF0000AA, "Handhabung: \"/plattform <plattform>\"");
else if (plattformen > Max_Plattform ) SendClientMessage(playerid, 0xFF0000AA, "Plattform exisitiert nicht!");
else if (plattformen == 1)
{
SetObjectPos(Plattform[Objekt], Pos_X, Pos_Y, Pos_Z);
SetVehiclePos(Plattform[Fahrzeug], Pos_X, Pos_Y, Pos_Z+2); /* Soll ja draufstehen und nicht reingehen*/
SendClientMessage(playerid, 0x00FF00AA, "Plattform wird bewegt");
}
return 1;
} -
wenn ich tore habe soobject[0] = heli = CreateObject(9241, 375.079590, 1931.441650, 18.699524, 0.0000, 0.0000, 0.0000);
-
Sowürde es funktionieren ich würde es aber bei ner simplen Verschiebeaktion ohne Timer machen
#define Max_Plattform 3enum Plattformcfg
{
Fahrzeug,
Objekt
}new Plattform[Plattformcfg][Max_Plattform ];
/*Unter OnGameModeInit*/
Plattform[Fahrzeug][1] = AddStaticVehicle(ID, X, Y, Z,A);
Plattform[Fahrzeug][2] = AddStaticVehicle(ID, X, Y, Z,A);
....
Plattform[Objekt][1] = CreateObject(ID, X, Y, Z,RX,RY,RZ);
Plattform[Objekt][2] = CreateObject(ID, X, Y, Z,RX,RY,RZ);
.../*Unter OnCommandText*/
dcmd(plattform,9, cmdtext);dcmd_plattform(playerid, params[])
{
new
plattformen;
if (sscanf(params, "u", plattformen)) SendClientMessage(playerid, 0xFF0000AA, "Handhabung: \"/plattform <plattform>\"");
else if (plattformen > Max_Plattform ) SendClientMessage(playerid, 0xFF0000AA, "Plattform exisitiert nicht!");
else if (plattformen == 1)
{
SetObjectPos(Plattform[Objekt], Pos_X, Pos_Y, Pos_Z);
SetVehiclePos(Plattform[Fahrzeug], Pos_X, Pos_Y, Pos_Z+2); /* Soll ja draufstehen und nicht reingehen*/
SendClientMessage(playerid, 0x00FF00AA, "Plattform wird bewegt");
}
return 1;
}hab ich mir auch überlegt direkt im befehl.
Komet: mach es genau so wie es Jason_Gregory gemacht hat. So sollte es am einfachsten sein.
-
das scheck ich aber net xD
-
Was gibts den da nicht zu checken ?
(Wenn´s dir lieber ist nimm selEcT´s Weise, kommt ja auf dich drauf an und ob du damit arbeiten kannst ) -
nur beachte, das meins ressourcenlastiger ist wegen dem timer
aber was gibts an dem net zu checken? das einzige was du machen musst, ist die coords deiner plattformen und deiner helis bei
Plattform[Fahrzeug][1] = AddStaticVehicle(ID, X, Y, Z,A); //Helicoords
und
Plattform[Objekt][1] = CreateObject(ID, X, Y, Z,RX,RY,RZ); //Objectcoords
einzufügen..
MFG