Hey, ich habe da so eine kleine Idee für den Sanitäter Beruf gehabt, allerdings scheiter ich daran:
Der Sanitäter soll ein Paket von hinten aus dem Fahrzeug holen.
Scheint als wäre ich grade sehr müde, und kriege das nicht wirklich hin.
Hier mal der Code:
C
stock IsPlayerBehindVehicle(playerid,veh)
{
new Float:vcoord[3]; GetVehiclePos(veh,vcoord[0],vcoord[1],vcoord[2]);
new Float:size[3]; GetVehicleModelInfo(GetVehicleModel(veh), VEHICLE_MODEL_INFO_SIZE, size[0],size[1],size[2]);
new Float:vangle; GetVehicleZAngle(veh,vangle);
vcoord[0] = floatadd(vcoord[0],(-size[0]* floatsin(-vangle,degrees)));
vcoord[1] = floatadd(vcoord[1],(-size[1]* floatcos(-vangle,degrees)));
if(IsPlayerInRangeOfPoint(playerid,3.0,vcoord[0],vcoord[1],vcoord[2])) return 1;
return 0;
}
CMD:getmedic(playerid)
{
new veh, Float:Pos[3];
if(Spieler[playerid][pFraktion] != 3)return SendClientMessage(playerid, COLOR_GREY, "** Du bist kein Sanitäter.");
if(Spieler[playerid][pMedic] != INVALID_OBJECT_ID)return SendClientMessage(playerid, COLOR_GREY, "** Du hast bereits einen Notfallkasten rausgeholt.");
if(WearsMedic[playerid])return SendClientMessage(playerid, COLOR_GREY, "** Du hast bereits einen Notfallkasten rausgeholt.");
for(new i=0;i<MAX_VEHICLES;i++)
{
new fV = IsAFraktionsVeh(i);
GetVehiclePos(fVehicle[fV][vehID], Pos[0], Pos[1], Pos[2]);
if(fVehicle[fV][vehFraktion] == Spieler[playerid][pFraktion])
{
if(IsPlayerInRangeOfPoint(playerid, 10.0, Pos[0], Pos[1], Pos[2]))
{
veh = fVehicle[fV][vehID];
break;
}
}
}
if(!IsPlayerBehindVehicle(playerid, veh))return SendClientMessage(playerid, COLOR_GREY, "** Du bist nicht an der Rückseite eines Fraktionsfahrzeugs.");
ApplyAnimation(playerid,"CARRY","liftup",4.0,0,0,0 ,0,0);
SetTimerEx("GetMedic", 500, 0, "i", playerid);
WearsMedic[playerid] = true;
return 1;
}
Alles anzeigen
Scheint an der Schleife zu scheitern.
C
stock IsAFraktionsVeh(vehicleid)
{
for(new fV;fV<MAX_FVEHS;fV++)
{
if(vehicleid == fVehicle[fV][vehID])return fV;
}
return INVALID_VEHICLE_ID;
}
Der Code kann auch noch nützlich sein.
Weiß jemand weiter?
// Edit
Habs gelöst
So:
C
CMD:getmedic(playerid)
{
new veh, Float:Pos[3], count = 0;
if(Spieler[playerid][pFraktion] != 3)return SendClientMessage(playerid, COLOR_GREY, "** Du bist kein Sanitäter.");
if(Spieler[playerid][pMedic] != INVALID_OBJECT_ID)return SendClientMessage(playerid, COLOR_GREY, "** Du hast bereits einen Notfallkasten rausgeholt.");
if(WearsMedic[playerid])return SendClientMessage(playerid, COLOR_GREY, "** Du hast bereits einen Notfallkasten rausgeholt.");
for(new fV;fV<MAX_FVEHS;fV++)
{
if(IsValidVehicle(fVehicle[fV][vehID]))
{
GetVehiclePos(fVehicle[fV][vehID], Pos[0], Pos[1], Pos[2]);
if(fVehicle[fV][vehFraktion] == Spieler[playerid][pFraktion])
{
if(IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2]))
{
veh = fVehicle[fV][vehID];
count++;
break;
}
}
}
}
if(count == 0)return SendClientMessage(playerid, COLOR_GREY, "** Kein Fraktionsfahrzeug in der Nähe.");
if(!IsPlayerBehindVehicle(playerid, veh))return SendClientMessage(playerid, COLOR_GREY, "** Du bist nicht an der Rückseite eines Fraktionsfahrzeugs.");
ApplyAnimation(playerid,"CARRY","liftup",4.0,0,0,0 ,0,0);
SetTimerEx("GetMedic", 500, 0, "i", playerid);
WearsMedic[playerid] = true;
return 1;
}
Alles anzeigen