Teleporting with Vehicle
#1

Hey guys & gals, I'm in a bit of a rut here, I'm trying to make it so that when I drive into an icon, it teleports me to the x,y,z cords of my choice. It's like a A to B thing.
Icon1 = Teleports infront of a Mod-Garage when you drive into it
Icon2 = Teleports you back to where you started

I have it set up so that if you're not in a car - It doesn't let you teleport (By just setting your position to a few units back from where you were). Thing is, when I drive into the Icon - I don't go anywhere, nor does the car.



TOP OF MY SCRIPT
pawn Код:
new pickup1;
Under OnGameModeInit
pawn Код:
pickup1 = CreatePickup(1239, 23, 1247.8792,-2037.0391,59.7714 ); // Tranfender Icon - Main Hill
pawn Код:
public OnPlayerPickUpPickup(playerid, pickupid)
{
//________________________________________ENTERS ENTERS ENTERS ENTERS______________________________________________________________
    {
        if (IsPlayerInAnyVehicle(playerid))
        {
            SetVehiclePos(GetPlayerVehicleID(playerid), -1943.1667,222.0864,33.7985); // In vehicle
        }
        else
        {
          SetPlayerPos(playerid, 1254.4995,-2036.9609,59.3486); // NOT in vehicle
        }
    }
    return 1;
}
When you try to walk into the icon with no car - It teleports you back like it's supposed to.
With the car, no prevail.

Can anyone help please?

PS: I just started scripting like, today. I know a bit of pawn, like, color & stuff
That's it
Reply
#2

OnPlayerPickUpPickup isn't called when player is in a vehicle, use a timer instead.
Reply
#3

if (IsPlayerInAnyVehicle(playerid))
{
SetVehiclePos(GetPlayerVehicleID(playerid), -1943.1667,222.0864,33.7985); // In vehicle
}
try to add this =)
Код:
new vehicleid = GetPlayerVehicleID(playerid);
So It seems like that:
Код:
if (IsPlayerInAnyVehicle(playerid))
		{
            new vehicleid = GetPlayerVehicleID(playerid);
            LinkVehicleToInterior(vehicleid,Interiornumber);
			SetVehiclePos(vehicleid, -1943.1667,222.0864,33.7985); // In vehicle
		}
And on teleports you have to add
Код:
SetPlayerInterior(playerid,Interiornumber);

and

LinkVehicleToInterior(vehicleid,Interiornumber);
The Interior is normal OUT of Houses Interior = 0
but IN houses its a difference ..
so ****** Interior Id's and you're done ...

Hope It's working then

MFG Bearfist
Reply
#4

Use a timer and use player to point. It'd be something like this:
pawn Код:
//top of script
forward timer1(playerid);

//OnGameModeInit
SetTimer("timer1", 1000, 1);

//anywhere in the script
public timer1(playerid)
{
    if(PlayerToPoint(2,playerid,1247.8792,-2037.0391,59.7714)) //If the player is anywhere really close to the pickup
    {
        if (IsPlayerInAnyVehicle(playerid))
        {
            SetVehiclePos(GetPlayerVehicleID(playerid), -1943.1667,222.0864,33.7985); // In vehicle
            PutPlayerInVehicle(playerid,GetPlayerVehicleID(playerid),0);
        }
        else
        {
          SetPlayerPos(playerid, 1254.4995,-2036.9609,59.3486); // NOT in vehicle
        }
    }
    return 1;
}
This is PlayerToPoint, put it anywhere in your GM.
pawn Код:
stock PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
  if(IsPlayerConnected(playerid))
    {
        new Float:oldposx, Float:oldposy, Float:oldposz;
        new Float:tempposx, Float:tempposy, Float:tempposz;
        GetPlayerPos(playerid, oldposx, oldposy, oldposz);
        tempposx = (oldposx -x);
        tempposy = (oldposy -y);
        tempposz = (oldposz -z);
        //printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
        if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
        {
            return 1;
        }
    }
    return 0;
}
Reply
#5

Don't use PlayerToPoint, instead, use GetPlayerPos once, and then check distance between this position to pickups position.

(And also SetTimer can't pass parameters to the timed function, it will result playerid always = 0)
Reply
#6

Quote:
Originally Posted by 0rb
Don't use PlayerToPoint, instead, use GetPlayerPos once, and then check distance between this position to pickups position.
Yeah you could do this to, PlayerToPoint was just the first that came to my head.
Reply
#7

-Edit: Uneeded Post - Delete please-
Reply
#8

Thank you Pyrokid! It works great!
Now, to make all the places do that... and then coming back to the spot we started at >________>

I really appreciate all of your help you guys. Zero, Cueball, and pghpunk in the IRC too, thanks!
Reply
#9

RemovePlayerFromVehicle -> DeleteVehicle -> CreateVehicle -> whatever that command to sit the player into the vehicle is

that's my solution - I'm not very logical but I'm sure you can complete this.
Reply
#10

Hey, well Pyrokid's suggestion worked fine, but only ID 0 can teleport into any of them. I tried with 2 other players, each of us being Id 0.
Every time - ID - 0 could only TP
Any Idea what's wrong? Here's the teleport snippet

pawn Код:
public timer1(playerid)
{
//---------------------------To Transfender in SF-----------------------------------------------
    if(PlayerToPoint(2,playerid,1247.8792,-2037.0391,59.7714)) //If the player is anywhere really close to the pickup
    {
        if (IsPlayerInAnyVehicle(playerid))
        {
            SetVehiclePos(GetPlayerVehicleID(playerid), -1943.1667,222.0864,33.7985); // In vehicle
            PutPlayerInVehicle(playerid,GetPlayerVehicleID(playerid),0);
        }
        else
        {
          SetPlayerPos(playerid, 1254.4995,-2036.9609,59.3486); // NOT in vehicle
        }
    }
   return 1;
}
The teleporting works like it should. There's enters for each, and seperate exits, all using the code above. I have Pickup Icons only sending GameTextForPlayer (Or whatever) separately. Any help please?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)