[Include] Limex's Swimming Include (Detect swimming!)
#21

Quote:
Originally Posted by Limex
View Post
Thanks for all the nice comments guys!

Yes I guess it would be fine with a 1 second timer, although the timer would be required to loop through ALL players, whereas OnPlayerUpdate is only called for online players. I don't think there would be that much gain from it. Especially as I am not using any loops. However, it would be suitable to stagger the amount that the full code is executed, for example, only being called every 10 updates or so.
then use foreach with it, so it will loop only through online players

anyway, good release
Reply
#22

OnPlayerUpdate is only called for connected players anyway, and again, the current code will not make the server lag.
Reply
#23

Thanks for the nice comments
Reply
#24

n1c3...
Reply
#25

th4nk5
Reply
#26

Very usefull for RP servers and not only.
Reply
#27

Quote:
Originally Posted by Hijolion
Посмотреть сообщение
You can also easily detect swimming

pawn Код:
stock IsPlayerInWater(playerid)
{
    new animlib[32],tmp[32];
    GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,tmp,32);
    if( !strcmp(animlib, "SWIM") && !IsPlayerInAnyVehicle(playerid) ) return true;
    return false;
}
this is simply faster without lags because it simply stocks it in.
^ basicly what he said was wat i was going to say..
Reply
#28

Okay then Lorenc_, explain to my how you will make it do something AS SOON as the person gets into the water with that function? You'd have to add a timer or use OnPlayerUpdate and then add callbacks, just as I did with this script.

This is why I made this script, because it has callbacks, and not just a function.

If you already have the callbacks in your script, then the function is more efficient because it just reads a static variable instead of checking the whole animations again.
Reply
#29

You could make something like when u enter the water u get a swimming suit and a swimming helmet? Just an idea
Reply
#30

Quote:
Originally Posted by TheKingWillem
Посмотреть сообщение
You could make something like when u enter the water u get a swimming suit and a swimming helmet? Just an idea
are there such objects?
Reply
#31

Well this is just providing the framework, not any flashy features.
Reply
#32

Hey Limex,
I have optimized the code a bit for you.

Here is the code:
pawn Код:
/* =============================

Limex's Swimming Include

Made by Limex / A

New function:
IsPlayerSwimming(playerid)

New callbacks:
OnPlayerStartSwimming(playerid)
OnPlayerStopSwimming(playerid)

Enjoy!

edit By Gamer_Z | ****** did mention code optimizing tips too and I used them here.
note:
OnPlayerUpdate Code should be as fast and efficient as possible!

============================= */


#include <a_samp>

#define ANIM_SWIM1 1544 //wasn't so hard to get! , just debug
#define ANIM_SWIM2 1540
#define ANIM_SWIM3 1541
#define ANIM_SWIM4 1538
#define ANIM_SWIM5 1539
#define ANIM_JUMP1 1197//this too!
#define ANIM_JUMP2 1195
#define ANIM_JUMP3 1198
#define ANIM_JUMP4 1064
#define ANIM_JUMP5 1062
#define ANIM_JUMP6 1542

#if !defined SWIM_NO_CALLBACKS
    #define SWIM_USE_CALLBACKS
#endif

#if defined SWIM_USE_CALLBACKS

new swimming[MAX_PLAYERS] = {0,...};//sorry I don't know if bool or normal variables are faster so I used them to enchance the performance of IsPlayerSwiming
stock IsPlayerSwimming(playerid)
{
    return swimming[playerid];
}

forward OnPlayerStartSwimming(playerid);
forward OnPlayerStopSwimming(playerid);

public OnPlayerUpdate(playerid)
{
    if(swimming[playerid] == 0)
    {
        switch(GetPlayerAnimationIndex(playerid))
        {
            case ANIM_SWIM1,ANIM_SWIM2,ANIM_SWIM3,ANIM_SWIM4,ANIM_SWIM5:
            {
                swimming[playerid] = 1;
                OnPlayerStartSwimming(playerid);
            }
        }
    }
    else
    {
        switch(GetPlayerAnimationIndex(playerid))
        {
            case ANIM_JUMP1,ANIM_JUMP2,ANIM_JUMP3,ANIM_JUMP4,ANIM_JUMP5,ANIM_JUMP6,ANIM_SWIM1,ANIM_SWIM2,ANIM_SWIM3,ANIM_SWIM4,ANIM_SWIM5:
            {
           
            }
            default:
            {
                swimming[playerid] = 0;
                OnPlayerStopSwimming(playerid);
            }
        }
    }
    return 1;
}

//OnPlayerStartSwimming(playerid)SendClientMessage(playerid,0xFFFFFFFF,"You Started swimming");
//OnPlayerStopSwimming(playerid)SendClientMessage(playerid,0xFFFFFFFF,"You Stoped swimming");

#else
stock IsPlayerSwimming(playerid)
{
    switch(GetPlayerAnimationIndex(playerid))
    {
        case ANIM_SWIM1,ANIM_SWIM2,ANIM_SWIM3,ANIM_SWIM4,ANIM_SWIM5:
        {
            return 1;
        }
        case ANIM_JUMP1,ANIM_JUMP2,ANIM_JUMP3,ANIM_JUMP4,ANIM_JUMP5,ANIM_JUMP6:
        {
            return -1;//or 2?
        }
        default:
            return 0;
    }
}
#endif
Have fun
Reply
#33

Quote:
Originally Posted by Hijolion
Посмотреть сообщение
You can also easily detect swimming

pawn Код:
stock IsPlayerInWater(playerid)
{
    new animlib[32],tmp[32];
    GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,tmp,32);
    if( !strcmp(animlib, "SWIM") && !IsPlayerInAnyVehicle(playerid) ) return true;
    return false;
}
this is simply faster without lags because it simply stocks it in.
Thanks.
Reply
#34

Quote:
Originally Posted by Deskoft
Посмотреть сообщение
Thanks.
yes yes that is faster but the one I 'made faster' is more precise.
Reply
#35

Thank you!
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)