Jump to content

Is player inside colshape ?


R1Z

Recommended Posts

Hi guys, 

so im trying to get back into scripting, trying to figure out everything by my own wont work. 

I used to script but somehow im really rust. 

I have this script where i just want the player to be able to do the /armyduty command when he is in a colshape&Marker and not when he is outside. 

I found some usefull information on the wiki but i keep on getting "Nope" as an answer. 

const Armymarker = mp.markers.new(1, new mp.Vector3(-2126.56128, 3285.96265, 37.7325134), 3,
            {
                color: [255, 165, 0, 50],
                visible: true,
            });

let ArmyColShape = mp.colshapes.newSphere(-2126.56128, 3285.96265, 37.7325134, 5);

mp.events.addCommand('armyduty', (player, shape) => {
if(shape == ArmyColShape) {
    player.outputChatBox(`${player.name} duty Army`);
} else {
    player.outputChatBox(`${player.name} Nope`);
	}
});

Thats the script, but i cant figure out what im doing wrong that i cant execute the command in the colshape. 

Im grateful for every tips and tricks. 

Cheers, 

R1Z 

Edited by R1Z
  • Like 1
Link to comment
Share on other sites

If I'm guessing correctly, you're just typing /armyduty and that's it? That won't do anything as you haven't written anything for 'shape', it can't just grab 'shape' out of nowhere, you need to tell it what 'shape' is.

Thinking off the top of my head, what if you used the playerEnterColShape and playerExitColShape events, and assign the player a variable called something like currentCol with the value of the shape that you get from the event. Then when they exit, just assign that variable the value of 'null'?

I've never actually played with colshapes where it checks if you're inside one, I've always just executed functions as soon as they enter it so this is just me thinking up one way.

Edited by MrPancakers
  • Like 1
Link to comment
Share on other sites

14 hours ago, MrPancakers said:

If I'm guessing correctly, you're just typing /armyduty and that's it? That won't do anything as you haven't written anything for 'shape', it can't just grab 'shape' out of nowhere, you need to tell it what 'shape' is.

Thinking off the top of my head, what if you used the playerEnterColShape and playerExitColShape events, and assign the player a variable called something like currentCol with the value of the shape that you get from the event. Then when they exit, just assign that variable the value of 'null'?

I've never actually played with colshapes where it checks if you're inside one, I've always just executed functions as soon as they enter it so this is just me thinking up one way.

Thanks for your reply. Thats the first helpful step though. Going to try that thankyou :)

  • Like 2
Link to comment
Share on other sites

let ArmyColShape = mp.colshapes.newSphere(-2126.56128, 3285.96265, 37.7325134, 5);

mp.events.addCommand('armyduty', (player) => {
    if(ArmyColShape.isPointWithin(player.position)) {
        //The player is within the colshape
    } else {
        //Handle if the player isn't
    }
})

How I understand it, it's something like this you're looking for

  • Like 1
  • Mask 1
Link to comment
Share on other sites

28 minutes ago, Elliot said:

let ArmyColShape = mp.colshapes.newSphere(-2126.56128, 3285.96265, 37.7325134, 5);

mp.events.addCommand('armyduty', (player) => {
    if(ArmyColShape.isPointWithin(player.position)) {
        //The player is within the colshape
    } else {
        //Handle if the player isn't
    }
})

How I understand it, it's something like this you're looking for

I think youre an angel haha! I dont know what i did wrong before but i troed the isPointWithin and did something wrong! Im so grateful! Thank you man! 

Link to comment
Share on other sites

I know you have already you answer but Why are you creating a colshape for that function when you use a command. 

It is more simple to use directly   
 

const armyPosition = new mp.Vector3(-2126.56128, 3285.96265, 37.7325134);

if (player.position.substract(armyPosition).length <= 5)

I mean maybe I am wrong but this should be more efficient, isn't it?

  • Like 2
  • Mask 1
Link to comment
Share on other sites

Sorry to say that: but you are completely wrong.

First of all to explain differences:
player.position ist only a PROPERTY a property is a value in storage. You DO NOT CALCULATE IT. So only calculation on my solution you have is vector calculation.

Colshape solution: You create an entire ENTITY so an Object in world and compare it to the position and delete it. - so as it sounds it IS more calculations (don't want to go in details as I do not know hjow rage.mp / gta V implemented it)

Before you do not believe me, I did some performance tests and have let run both solutions 1 mio times.

Just to show difference: gcb3WVa.png

I think the times, explains why you should use in this case only Vector calculation based on properties.
In Fact you want to have events and so on, yes then colshapes should be your solution, but I think more because of it has more confort in such things

// edit:

I improved a bit the performance and created the colshape upfront and destroy it after all loops - in case for example in the script you want to check multiple times same position. Same for Vector solution. -> In this solution you should consider that you have all the time an entity spawned which takes also storage and performance as it is used for all colshape events.

But here the numbers says still the same:

CitccyE.png

 

//edit2: ofcause you could also write a var on entering and existing a colshape - result will be still the same, but I can not write a performance test out of that, simply because you get only the end of the process as time in your script - but still see the first edit - the time will be like that because most of the time is creating colshape and checking position - which happens also before triggering the event

//edit3: What I also do not understand: why are we talking about that, also regarding of complexity for just a position check, my solution is the simplest (I know that is now a subjective opinion - but I can not see that it should be easier to handle a whole colshape instead of simply check two positions against each other)

Edited by Geramy92
  • Like 2
Link to comment
Share on other sites

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...