open.mp forum
[Pawn] How can I do this? - Printable Version

+ open.mp forum (https://forum.open.mp)
-- Forum: SA-MP (https://forum.open.mp/forumdisplay.php?fid=3)
--- Forum: Pawn Scripting (https://forum.open.mp/forumdisplay.php?fid=10)
--- Thread: [Pawn] How can I do this? (/showthread.php?tid=1715)



How can I do this? - Boxi - 2021-02-26

Hello everyone! A few days ago he asked how to modify the gravity, his answers helped me a lot. But now I have another problem, and it is that I need gravity to be X in a certain place. How do I do this? with VirtualWorld? I would MUCH appreciate your help. Greetings! :D


RE: How can I do this? - destiezk - 2021-02-26

that's a bit more complicated. This is not the best way to make it at all, but I'm using this:
Code:
new PlayerDM[5][3][MapInfo] =
{
    {           //   X         Y                Z       A              Name
        {1306.9261,2195.0313,11.0234,212.9963,"Baseball"}, // home
        {1391.2493,2111.0488,11.0156,321.7007,"Baseball"},  // away
        {1367.4415,2196.2263,14.2495,177.9026,"Baseball"} // spec
    }
}
forward Timer();
public Timer()
{
new Float:zz;
GetPlayerPos(i, zz, zz, zz);
if(zz <  floatround(PlayerDM[Map][TEAM_HOME][z], floatround_ceil))
    SetGravity(0.0);
}

and make a timer for the public that plays every 250ms for example.


RE: How can I do this? - Virsenas - 2021-02-26

Code:
IsPlayerInArea(playerid, Float:MinX, Float:MaxX, Float:MinY, Float:MaxY)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
#pragma unused z
? ? if(x >= MinX && x <= MaxX && y >= MinY && y <= MaxY) { return 1; }
? ? return 0;
}

P.S. I think you can only set gravity only for all players. You can't set the gravity different for other players.


RE: How can I do this? - Boxi - 2021-02-27

(2021-02-26, 09:45 PM)destiezk Wrote: that's a bit more complicated. This is not the best way to make it at all, but I'm using this:

Code:
new PlayerDM[5][3][MapInfo] =

{

{? ? ? ? ? //? X? ? ? ? Y? ? ? ? ? ? ? ? Z? ? ? A? ? ? ? ? ? ? Name

{1306.9261,2195.0313,11.0234,212.9963,"Baseball"}, // home

{1391.2493,2111.0488,11.0156,321.7007,"Baseball"},? // away

{1367.4415,2196.2263,14.2495,177.9026,"Baseball"} // spec

}

}

forward Timer();

public Timer()

{

new Float:zz;

GetPlayerPos(i, zz, zz, zz);

if(zz <? floatround(PlayerDM[Map][TEAM_HOME][z], floatround_ceil))

SetGravity(0.0);

}



and make a timer for the public that plays every 250ms for example.



Hello! First of all, thanks for answering C: could you explain to me what these coordinates are that you put here? is that I do not understand much. Thanks, again!



Code:
{1306.9261,2195.0313,11.0234,212.9963,"Baseball"}, // home

{1391.2493,2111.0488,11.0156,321.7007,"Baseball"},? // away

{1367.4415,2196.2263,14.2495,177.9026,"Baseball"} // spec



RE: How can I do this? - Boxi - 2021-02-27

(2021-02-26, 10:30 PM)Virsenas Wrote:
Code:
IsPlayerInArea(playerid, Float:MinX, Float:MaxX, Float:MinY, Float:MaxY)

{

new Float:x, Float:y, Float:z;

GetPlayerPos(playerid, x, y, z);

#pragma unused z

? ? if(x >= MinX && x <= MaxX && y >= MinY && y <= MaxY) { return 1; }

? ? return 0;

}



P.S. I think you can only set gravity only for all players. You can't set the gravity different for other players.



Isn't it possible to do that?


RE: How can I do this? - Virsenas - 2021-02-27

(2021-02-27, 12:47 PM)Boxi Wrote:
(2021-02-26, 10:30 PM)Virsenas Wrote:
Code:
IsPlayerInArea(playerid, Float:MinX, Float:MaxX, Float:MinY, Float:MaxY)

{

new Float:x, Float:y, Float:z;

GetPlayerPos(playerid, x, y, z);

#pragma unused z

? ? if(x >= MinX && x <= MaxX && y >= MinY && y <= MaxY) { return 1; }

? ? return 0;

}



P.S. I think you can only set gravity only for all players. You can't set the gravity different for other players.



Isn't it possible to do that?



https://open.mp/docs/scripting/functions/SetGravity



Quote:Description



Set the gravity for all players.



RE: How can I do this? - Kwarde - 2021-02-27

In combination with Pawn.RakNet: https://github.com/Romz24/samp-gravity


RE: How can I do this? - destiezk - 2021-02-28

(2021-02-27, 12:46 PM)Boxi Wrote:
(2021-02-26, 09:45 PM)destiezk Wrote: that's a bit more complicated. This is not the best way to make it at all, but I'm using this:
Code:
new PlayerDM[5][3][MapInfo] =
{
{? ? ? ? ? //? X? ? ? ? Y? ? ? ? ? ? ? ? Z? ? ? A? ? ? ? ? ? ? Name
{1306.9261,2195.0313,11.0234,212.9963,"Baseball"}, // home
{1391.2493,2111.0488,11.0156,321.7007,"Baseball"},? // away
{1367.4415,2196.2263,14.2495,177.9026,"Baseball"} // spec
}
}
forward Timer();
public Timer()
{
new Float:zz;
GetPlayerPos(i, zz, zz, zz);
if(zz <? floatround(PlayerDM[Map][TEAM_HOME][z], floatround_ceil))
SetGravity(0.0);
}

and make a timer for the public that plays every 250ms for example.

Hello! First of all, thanks for answering C: could you explain to me what these coordinates are that you put here? is that I do not understand much. Thanks, again!

Code:
{1306.9261,2195.0313,11.0234,212.9963,"Baseball"}, // home
{1391.2493,2111.0488,11.0156,321.7007,"Baseball"},? // away
{1367.4415,2196.2263,14.2495,177.9026,"Baseball"} // spec

Well it's what I use in my code.. I have three teams (Home, Away, Spectator) and it's their spawn position.
Otherwise, SetGravity() function is used for all players, you can use Pawn.Raknet and this https://github.com/Romz24/samp-gravity so you can actually make it.


RE: How can I do this? - DandoRYx - 2021-02-28

You can try to use plugin: https://github.com/IllidanS4/YSF

Code:
native SetPlayerGravity(playerid, Float:gravity);
native Float:GetPlayerGravity(playerid);

It has more useful functions, check it out.


RE: How can I do this? - Boxi - 2021-02-28

I will use the Pawn.Raknet thank you all very much for your answers, I appreciate it very much


RE: How can I do this? - Y_Less - 2021-03-07

I really suggest you use YSF for this, not pawn.raknet. The former is nice functions you can use easily, the latter is a very low-level hack.