23.01.2019, 13:32
So I have a vehicle interior system for tropics and journeys and the vehicle isn't allowing me to enter the interior, in game is says only got the car is enterable.
Code:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if(newkeys & KEY_CTRL_BACK) { if(PlayerInfo[playerid][pInVehicle] == -1) { //Enter vehicle. new car = PlayerToCar(playerid, 2, 5.0); new vInt = IsEnterableVehicle(car); if(vInt != -1) { if(!IsPlayerInAnyVehicle(playerid)) { new Float:x, Float:y, Float:z; SendClientMessage(0, COLOR_ORANGE, "Getting Vehicle Relative pos."); GetVehicleRelativePos(car, x, y, z, VehicleInteriorPos[vInt][vExitX], VehicleInteriorPos[vInt][vExitY], VehicleInteriorPos[vInt][vExitZ]); if(IsPlayerInRangeOfPoint(playerid, 2, x, y, z)) { SendClientMessage(0, COLOR_ORANGE, "checking if car is locked."); if(VehicleInfo[car][vLocked] == 0) { GetPlayerPos(playerid, PlayerInfo[playerid][EnterVehPos][0], PlayerInfo[playerid][EnterVehPos][1], PlayerInfo[playerid][EnterVehPos][2]); SetPlayerPos(playerid, VehicleInteriorPos[vInt][vIntX], VehicleInteriorPos[vInt][vIntY], VehicleInteriorPos[vInt][vIntZ]); SetPlayerVirtualWorld(playerid, car); SetPlayerInterior(playerid, car); SendClientMessage(playerid, COLOR_WHITE, "Use '/exit' or click the door hotkey to leave this vehicle."); if(GetPVarInt(playerid, "DrugTime") == 0) { SetPlayerWeather(playerid, 11); } PlayerInfo[playerid][pInVehicle] = car; TempFreeze(playerid); return 1; } else SendClientMessage(playerid, COLOR_WHITE, "This vehicle is locked!"); } } } } } return 1; } stock PlayerToCar(playerid,type,Float:distance) { new Float:x, Float:y, Float:z, Float:closedist, id = -1; foreach(new c : Vehicle) { if(IsVehicleStreamedIn(c, playerid)) { GetVehiclePos(c,x,y,z); new Float:dist = GetPlayerDistanceFromPoint(playerid, x, y, z); if(!closedist) { closedist = dist; id = c; } else { if(dist < closedist) { closedist = dist; id = c; } } } } if(id != -1) { GetVehiclePos(id,x,y,z); SendClientMessage(0, COLOR_ORANGE, "Got the car id."); if(IsPlayerInRangeOfPoint(playerid,distance,x,y,z)) { switch(type) { case 1: return true; case 2: return id; } } } if(type == 1) return false; return INVALID_VEHICLE_ID; } stock IsEnterableVehicle(id) { new model = GetVehicleModel(id); SendClientMessage(0, COLOR_ORANGE, "Got if car is enterable."); if(model == 508) { return VEHICLE_INTERIOR_JOURNEY; } else if(model == 427) { return VEHICLE_INTERIOR_ENFORCER; } else if(model == 416) { return VEHICLE_INTERIOR_AMBULANCE; } else if(model == 577) { return VEHICLE_INTERIOR_AT400; } else if(model == 454) { return VEHICLE_INTERIOR_TROPIC; } return VEHICLE_INTERIOR_INVALID; } //============================================// stock IsValidCar(vehicleid) { if(vehicleid == -1) { return false; } foreach(new car : Vehicle) { if(car == vehicleid) { return true; } } return false; } //============================================// stock ExitVehicleInterior(playerid) { new car = PlayerInfo[playerid][pInVehicle]; new vwCar = GetVehicleVirtualWorld(car), intCar = VehicleInfo[car][vInterior]; if(vwCar != 0 || intCar != 0) { TempFreeze(playerid); } if(IsValidCar(car)) { //Exit by car. new Float:x, Float:y, Float:z, intID = IsEnterableVehicle(car); GetVehicleRelativePos(car, x, y, z, VehicleInteriorPos[intID][vExitX], VehicleInteriorPos[intID][vExitY], VehicleInteriorPos[intID][vExitZ]); Streamer_UpdateEx(playerid, x, y, z, vwCar, intCar); SetPlayerPos(playerid, x, y, z); new Float:velX, Float:velY, Float:velZ; GetVehicleVelocity(car, velX, velY, velZ); if(intID == VEHICLE_INTERIOR_TROPIC) { if(velX > 0.5 || velY > 0.5 || velZ > 0.5) { SetPlayerVelocity(playerid, velX, velY, velZ+0.25); } else TempFreeze(playerid); } else if(velX < 0.5 || velY < 0.5 || velZ < 0.5) { TempFreeze(playerid); } } else { //Exit where you entered. Streamer_UpdateEx(playerid, PlayerInfo[playerid][EnterVehPos][0], PlayerInfo[playerid][EnterVehPos][1], PlayerInfo[playerid][EnterVehPos][2], vwCar, intCar); SetPlayerPos(playerid, PlayerInfo[playerid][EnterVehPos][0], PlayerInfo[playerid][EnterVehPos][1], PlayerInfo[playerid][EnterVehPos][2]); } SetPlayerVirtualWorld(playerid, vwCar); SetPlayerInterior(playerid, intCar); //if(GetPVarInt(playerid, "DrugTime") == 0) { SetPlayerWeather(playerid, GMWeather); } PlayerInfo[playerid][pInVehicle] = -1; return 1; } //============================================// stock GetVehicleRelativePos(vehicleid, &Float:x, &Float:y, &Float:z, Float:xoff=0.0, Float:yoff=0.0, Float:zoff=0.0) { new Float:rot; GetVehicleZAngle(vehicleid, rot); rot = 360 - rot; GetVehiclePos(vehicleid, x, y, z); x = floatsin(rot,degrees) * yoff + floatcos(rot,degrees) * xoff + x; y = floatcos(rot,degrees) * yoff - floatsin(rot,degrees) * xoff + y; z = zoff + z; } //============================================// stock GetOffsetFromVehicle(Float:posXx, Float:posYy, Float:posZz, vehicleid, &Float:X, &Float:Y, &Float:Z) { new Float:pos[3]; GetVehiclePos(vehicleid, pos[0], pos[1], pos[2]); new Float:rotZ; GetVehicleZAngle(vehicleid, rotZ); new Float:off[2]; off[0] = posX - pos[0]; off[1] = posY - pos[1]; X = off[0]*floatcos(rotZ, degrees)+off[1]*floatsin(rotZ, degrees); Y = -off[0]*floatsin(rotZ, degrees)+off[1]*floatcos(rotZ, degrees); Z = posZ - pos[2]; return 1; } stock TempFreeze(playerid) { TogglePlayerControllable(playerid,false); SetTimerEx("TempUnfreeze", 1500, false, "i", playerid); return 1; } //============================================// forward TempUnfreeze(playerid); public TempUnfreeze(playerid) { TogglePlayerControllable(playerid,true); return 1; }