seifader
#1

I dont know why, when I include it (#include "..\pawno\include\fadescreen.inc") when compiler crashes? When I delete that line (include) everything works ok.

Inc code:

pawn Code:
/*
                                    Seifader - SA-MP screen fader by Seif

        *-----------------------------------------------*
        | This include allows you to fade players'      |
        | screens from a color or to a color. Also,     |
        | it calls a callback when the fading finishes  |
        | so you can do whatever when the fading ends.  |
        | 'OnPlayerScreenFade & OnPlayerScreenColorFade'|
        *-----------------------------------------------*
*/

/*x---------------------------------Important-------------------------------------x*/
//**INCLUDES**//
#include <a_samp>
//**PRAGMAS**//

//**MISC**//
#define function%0(%1) forward%0(%1); public%0(%1)
/*
#if defined MAX_PLAYERS
    #undef MAX_PLAYERS
    #define MAX_PLAYERS     100     // CHANGE IT TO YOUR PLAYER SLOTS IN YOUR SERVER
#endif*/

/*x---------------------------------Defining-------------------------------------x*/
//**COLORS*//

    //Some colors I made
/*#define GREEN             0x21DD00FF
#define RED             0xE60000FF
#define ADMIN_RED       0xFB0000FF
#define YELLOW          0xFFFF00FF
#define ORANGE          0xF97804FF
#define LIGHTRED        0xFF8080FF
#define LIGHTBLUE       0x00C2ECFF
#define PURPLE          0xB360FDFF
#define BLUE            0x1229FAFF
#define LIGHTGREEN      0x38FF06FF
#define DARKPINK        0xE100E1FF
#define DARKGREEN       0x008040FF
#define ANNOUNCEMENT    0x6AF7E1FF
#define GREY            0xCECECEFF
#define PINK            0xD52DFFFF
#define DARKGREY        0x626262FF
#define AQUAGREEN       0x03D687FF
#define WHITE           0xFFFFFFFF*/

//**MISC**//
#define MAX_FADES       5      // max fades that a player can have at the same time.
//**VARIABLES**//
new colorfade[MAX_PLAYERS][MAX_FADES];
new FadeAvailability[MAX_PLAYERS][MAX_FADES];
new Text:PlayerFadeText[MAX_PLAYERS][MAX_FADES];
new bool:FlashFade[MAX_PLAYERS][MAX_FADES];
new FlashFadeTimes[MAX_PLAYERS][MAX_FADES];
// **FORWARDS** //
forward OnPlayerScreenFade(playerid, color, speed);
forward OnPlayerScreenColorFade(playerid, color, speed);
forward OnPlayerFadeFlashed(playerid, color, speed);
// **NATIVES** //
/*
    native Seifader_OnExit();
    native RemovePlayerColorFade(playerid);
    native FadePlayerScreen(playerid, color, speed);
    native FadePlayerScreenToColor(playerid, color, speed);
    native FlashPlayerScreen(playerid, color, speed, times);
    native IsValidPlayerFade(playerid, fadeid);
*/

/*x---------------------------------Functions-------------------------------------x*/
/*
                                            ---[FadePlayerScreen]---
            »playerid: the target
            »color: the color you want his screen to fade from
            »speed: from 1-255 where 255 is the fastest(instant)
            »wipe_other_colorfades: (optional) we want no bug to occur, so this will make sure there's
                                                no other fade that could've messed with it and thus maybe causing
                                                a player's screen to be stuck at a color. It's random but you always
                                                want to prevent it. I've fully tested this include and rarely
                                                encountered that issue. Unfortunately, nothing is bug-free.
            *Return: id of the fade
        *-----------------------------------------------*
        | Fades the player's screen from a color.       |
        *-----------------------------------------------*
*/

stock FadePlayerScreen(playerid, color, speed, bool:wipe_other_colorfades = true)
{
    if (wipe_other_colorfades == true) RemovePlayerColorFade(playerid);
    new fadeid = FindFadeID(playerid);
    new maxalpha = GetAlpha(color);
    PlayerFadeText[playerid][fadeid] = TextDrawCreate(0.0, 0.0, "_");
    TextDrawFont(PlayerFadeText[playerid][fadeid], 1);
    TextDrawLetterSize(PlayerFadeText[playerid][fadeid], 0.0, 50.0);
    TextDrawUseBox(PlayerFadeText[playerid][fadeid], true);
    TextDrawColor(PlayerFadeText[playerid][fadeid], 0);
    colorfade[playerid][fadeid] = color;
    TextDrawBoxColor(PlayerFadeText[playerid][fadeid], color);
    TextDrawShowForPlayer(playerid, PlayerFadeText[playerid][fadeid]);
    FadeAvailability[playerid][fadeid] = 1;
    FlashFade[playerid][fadeid] = false;
    SetTimerEx("ScreenFade", 100, 0, "ddddd", playerid, color, speed, maxalpha, fadeid);
    return fadeid;
}

/*
                                            ---[FadePlayerScreenToColor]---
            »playerid: the target
            »color: the color you want his screen to fade TO
            »speed: from 1-255 where 255 is the fastest(instant)
            *Return: id of the fade
        *-----------------------------------------------*
        | Fades the player's screen to a color.         |
        *-----------------------------------------------*
*/

function FadePlayerScreenToColor(playerid, color, speed)
{
    new fadeid = FindFadeID(playerid);
    new maxalpha = GetAlpha(color);
    PlayerFadeText[playerid][fadeid] = TextDrawCreate(0.0, 0.0, "_");
    TextDrawFont(PlayerFadeText[playerid][fadeid], 1);
    TextDrawLetterSize(PlayerFadeText[playerid][fadeid], 0.0, 50.0);
    TextDrawUseBox(PlayerFadeText[playerid][fadeid], true);
    TextDrawColor(PlayerFadeText[playerid][fadeid], 0);
    color -= maxalpha;
    colorfade[playerid][fadeid] = color;
    TextDrawBoxColor(PlayerFadeText[playerid][fadeid], color);
    TextDrawShowForPlayer(playerid, PlayerFadeText[playerid][fadeid]);
    FadeAvailability[playerid][fadeid] = 1;
    FlashFade[playerid][fadeid] = false;
    SetTimerEx("ScreenFadeColor", 100, 0, "ddddd", playerid, color, speed, maxalpha, fadeid);
    return fadeid;
}

/*
                                            ---[FlashPlayerScreen]---
            »playerid: the target
            »color: the color you want his screen to flash to
            »speed: from 1-255 where 1 is the fastest(instant)
            »times: amount of flashes
            *Return: id of the fade
        *-----------------------------------------------*
        | Flashes the player's screen. Basically, this  |
        | is a mix of FadePlayerScreen and ToColor      |
        | together to make your screen flash.           |
        *-----------------------------------------------*
*/

function FlashPlayerScreen(playerid, color, speed, times)
{
    new fadeid = FindFadeID(playerid);
    new maxalpha = GetAlpha(color);
    PlayerFadeText[playerid][fadeid] = TextDrawCreate(0.0, 0.0, "_");
    TextDrawFont(PlayerFadeText[playerid][fadeid], 1);
    TextDrawLetterSize(PlayerFadeText[playerid][fadeid], 0.0, 50.0);
    TextDrawUseBox(PlayerFadeText[playerid][fadeid], true);
    TextDrawColor(PlayerFadeText[playerid][fadeid], 0);
    color -= maxalpha;
    colorfade[playerid][fadeid] = color;
    TextDrawBoxColor(PlayerFadeText[playerid][fadeid], color);
    TextDrawShowForPlayer(playerid, PlayerFadeText[playerid][fadeid]);
    FadeAvailability[playerid][fadeid] = 1;
    FlashFade[playerid][fadeid] = true;
    FlashFadeTimes[playerid][fadeid] = times;
    SetTimerEx("ScreenFadeColor", 100, 0, "ddddd", playerid, color, speed, maxalpha, fadeid);
    return fadeid;
}

/*
                                            ---[RemovePlayerColorFade]---
            »playerid: the target
        *-----------------------------------------------*
        | Removes every fade made to a player.          |
        *-----------------------------------------------*
*/

function RemovePlayerColorFade(playerid) // This function is used to erase every fade made for the player. Should be used before FadePlayerScreen to make sure there's no bug
{
    for(new i; i < MAX_FADES; i++)
    {
        TextDrawDestroy(PlayerFadeText[playerid][i]);
        FadeAvailability[playerid][i] = 0;
        FlashFade[playerid][i] = false;
        FlashFadeTimes[playerid][i] = 0;
    }
}

/*
                                            ---[IsValidPlayerFade]---
            »playerid: the target
            »fadeid: the fade id you want to check
            *Return: 1 if valid, 0 if invalid
        *-----------------------------------------------*
        | Checks if the fade id is valid, meaning       |
        | if it's being used by the player or not.      |
        *-----------------------------------------------*
*/

function IsValidPlayerFade(playerid, fadeid) return FadeAvailability[playerid][fadeid];

//------------------------------------------------: Script functions :---------------------------------------------------//
Seifader_OnExit()
{
    for(new all, m = GetMaxPlayers(); all < m; all++)
    {
        if (IsPlayerNPC(all) || !IsPlayerConnected(all)) continue;
        for(new f; f < MAX_FADES; f++)
        {
            TextDrawDestroy(PlayerFadeText[all][f]);
            FadeAvailability[all][f] = 0;
            FlashFade[all][f] = false;
            FlashFadeTimes[all][f] = 0;
        }
    }
}

function ScreenFade(playerid, color, speed, maxalpha, fadeid)
{
    if (color <= (colorfade[playerid][fadeid] - maxalpha))
    {
        FADECOLOR_FINISH:
        TextDrawDestroy(PlayerFadeText[playerid][fadeid]);
        OnPlayerScreenFade(playerid, color, speed);
        FadeAvailability[playerid][fadeid] = 0;
    }
    else
    {
        if (!FadeAvailability[playerid][fadeid]) return 1;
        color -= speed;
        if (color <= (colorfade[playerid][fadeid] - maxalpha)) goto FADECOLOR_FINISH; //color = (colorfade[playerid][fadeid] - maxalpha);
        TextDrawBoxColor(PlayerFadeText[playerid][fadeid], color);
        TextDrawShowForPlayer(playerid, PlayerFadeText[playerid][fadeid]);
        SetTimerEx("ScreenFade", 100, 0, "ddddd", playerid, color, speed, maxalpha, fadeid);
    }
    return 1;
}

function ScreenFade_Flash(playerid, color, speed, maxalpha, fadeid)
{
    if (color <= colorfade[playerid][fadeid])
    {
        FADECOLOR_FINISH:
        if (FlashFade[playerid][fadeid] == true)
        {
            if (!FlashFadeTimes[playerid][fadeid])
            {
                TextDrawDestroy(PlayerFadeText[playerid][fadeid]);
                OnPlayerFadeFlashed(playerid, color, speed);
                FadeAvailability[playerid][fadeid] = 0;
                return 1;
            }
            TextDrawBoxColor(PlayerFadeText[playerid][fadeid], colorfade[playerid][fadeid]);
            TextDrawShowForPlayer(playerid, PlayerFadeText[playerid][fadeid]);
            SetTimerEx("ScreenFadeColor", 100, 0, "ddddd", playerid, colorfade[playerid][fadeid], speed, maxalpha, fadeid);
            return 1;
        }
        TextDrawDestroy(PlayerFadeText[playerid][fadeid]);
        OnPlayerScreenFade(playerid, color, speed);
        FadeAvailability[playerid][fadeid] = 0;
    }
    else
    {
        if (!FadeAvailability[playerid][fadeid]) return 1;
        color -= speed;
        if (color <= colorfade[playerid][fadeid]) goto FADECOLOR_FINISH; //color = (colorfade[playerid][fadeid] - maxalpha);
        TextDrawBoxColor(PlayerFadeText[playerid][fadeid], color);
        TextDrawShowForPlayer(playerid, PlayerFadeText[playerid][fadeid]);
        SetTimerEx("ScreenFade_Flash", 100, 0, "ddddd", playerid, color, speed, maxalpha, fadeid);
    }
    return 1;
}

function ScreenFadeColor(playerid, color, speed, maxalpha, fadeid)
{
    if (color >= (colorfade[playerid][fadeid] + maxalpha))
    {
        FADE_FINISH:
        if (FlashFade[playerid][fadeid] == true)
        {
            FlashFadeTimes[playerid][fadeid]--;
            TextDrawBoxColor(PlayerFadeText[playerid][fadeid], colorfade[playerid][fadeid]+maxalpha);
            TextDrawShowForPlayer(playerid, PlayerFadeText[playerid][fadeid]);
            SetTimerEx("ScreenFade_Flash", 100, 0, "ddddd", playerid, colorfade[playerid][fadeid]+maxalpha, speed, maxalpha, fadeid);
            return 1;
        }
        OnPlayerScreenColorFade(playerid, color, speed);
        FadeAvailability[playerid][fadeid] = 0;
    }
    else
    {
        if (!FadeAvailability[playerid][fadeid]) return 1;
        color += speed;
        if (color >= (colorfade[playerid][fadeid] + maxalpha)) goto FADE_FINISH;
        TextDrawBoxColor(PlayerFadeText[playerid][fadeid], color);
        TextDrawShowForPlayer(playerid, PlayerFadeText[playerid][fadeid]);
        SetTimerEx("ScreenFadeColor", 100, 0, "ddddd", playerid, color, speed, maxalpha, fadeid);
    }
    return 1;
}

function FindFadeID(playerid)
{
    for(new f; f < MAX_FADES; f++)
    {
        if (FadeAvailability[playerid][f] == 0)
        {
            //printf("found fade id: %d", f);
            return f;
        }
    }
    return -1;
}

function GetAlpha(color)
{
    return color&0xFF;
}

// Required in your script that uses this include, otherwise you'll get an error:

public OnPlayerScreenFade(playerid, color, speed)
{
    return 1;
}

public OnPlayerScreenColorFade(playerid, color, speed)
{
    return 1;
}

public OnPlayerFadeFlashed(playerid, color, speed)
{
    return 1;
}
Reply
#2

Sorry for bump, but:


I tried to open a new file(new.pwn), include seifader and then use some of inc functions. It worked, compiled the script fine. However, I tried to wait 3min+ for compile result in that mode, and nah, no results.. Just crash
Reply
#3

srsly bump
Reply
#4

Include it again the your main file, comment out a function in fadescreen.inc, try to compile the main file, do this until the end of the include, then change, start this commenting out in your main file.
Also check the global variables in each file.
Reply
#5

Well, thanks, I will try that way with commenting out/in later, but I dont think that even there would be some global variables with same name - compiler would not crash, just would give some errors.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)