[Ajuda] SetPlayerScore
#6

pawn Код:
#include <a_samp> // by I dont know .. :D lol

#define DRIFT_MINKAT 10.0 // by
#define DRIFT_MAXKAT 90.0 // by
#define DRIFT_SPEED 30.0 // by

//////////// ///////
#define COLOR_Label 0xFFFFFFFF
#define COLOR_LabelOut 0x00000040
#define COLOR_ValueOut 0xFFFFFF40
#define COLOR_Value 0x000000FF

#define Label_X 500
#define Value_X 500
#define TD_Y 100
/////////////////////////////////////

new DriftTimer[MAX_PLAYERS]; //
new TimerA,TimerB,TimerC; //

new DriftPointsNow[MAX_PLAYERS]; // by
new PlayerDriftCancellation[MAX_PLAYERS]; // by
new Float:ppos[MAX_PLAYERS][3]; // by
enum Float:Pos{ Float:sX,Float:sY,Float:sZ }; // by
new Float:SavedPos[MAX_PLAYERS][Pos]; // by

new bool:DriftMode[MAX_PLAYERS]=false; // Added b
new DriftBonus[MAX_PLAYERS]=1; // Added by
new Float:HealthInit[MAX_PLAYERS]=1000.0; // Added b
new bool:AutoFixBool[MAX_PLAYERS]=true; // Added by

new Text:TDLabels[3]; // Added by
new Text:TDValueDrift[MAX_PLAYERS]; // Added by
new Text:TDValueBonus[MAX_PLAYERS]; // Added by
new Text:TDValueCash[MAX_PLAYERS]; // Added by
new score;

forward Drift(playerid); // by
forward AngleUpdate(); // by
forward DriftExit(playerid); // by
forward CheckPlayerState(); // Added
forward AutoFix(); // Added by

public OnFilterScriptInit()
{
    TimerA=SetTimer("AngleUpdate", 200, true); // by
    TimerB=SetTimer("AutoFix", 500, true); //by A
    TimerC=SetTimer("CheckPlayerState", 100, true); //b
    LoadTextDraws();
    return 1;
}

public OnFilterScriptExit()
{
    KillTimer(TimerA);
    KillTimer(TimerB);
    KillTimer(TimerC);
    return 1;
}

Float: GetPlayerTheoreticAngle(i) // By
{
    new Float: sin;
    new Float: dis;
    new Float: angle2;
    new Float: x,
    Float: y,
    Float: z;
    new Float: tmp3;
    new Float: tmp4;
    new Float: MindAngle;

    if (IsPlayerConnected(i))
    {

        GetPlayerPos(i, x, y, z);

        dis = floatsqroot(floatpower(floatabs(floatsub(x, ppos[i][0])), 2) + floatpower(floatabs(floatsub(y, ppos[i][1])), 2));

        if (IsPlayerInAnyVehicle(i))
        {
            GetVehicleZAngle(GetPlayerVehicleID(i), angle2);
        }
        else
        {
            GetPlayerFacingAngle(i, angle2);
        }

        if (x > ppos[i][0])
        {
            tmp3 = x - ppos[i][0];
        }
        else
        {
            tmp3 = ppos[i][0] - x;
        }
        if (y > ppos[i][1])
        {
            tmp4 = y - ppos[i][1];
        }
        else
        {
            tmp4 = ppos[i][1] - y;
        }

        if (ppos[i][1] > y && ppos[i][0] > x)
        {
            sin = asin(tmp3 / dis);
            MindAngle = floatsub(floatsub(floatadd(sin, 90), floatmul(sin, 2)), -90.0);
        }

        if (ppos[i][1] < y && ppos[i][0] > x)
        {
            sin = asin(tmp3 / dis);
            MindAngle = floatsub(floatadd(sin, 180), 180.0);
        }

        if (ppos[i][1] < y && ppos[i][0] < x)
        {
            sin = acos(tmp4 / dis);
            MindAngle = floatsub(floatadd(sin, 360), floatmul(sin, 2));
        }

        if (ppos[i][1] > y && ppos[i][0] < x)
        {
            sin = asin(tmp3 / dis);
            MindAngle = floatadd(sin, 180);
        }
    }

    if (MindAngle == 0.0)
    {
        return angle2;
    }
    else
    {
        return MindAngle;
    }
}

public DriftExit(playerid)
{ // By
    PlayerDriftCancellation[playerid] = 0;

    ////////////////// by ///////////////////
    new Float: h;
    GetVehicleHealth(GetPlayerVehicleID(playerid), h);
    if (DriftPointsNow[playerid] > 70 && DriftPointsNow[playerid] < 10000 && h == HealthInit[playerid]) GivePlayerMoney(playerid, DriftPointsNow[playerid] * DriftBonus[playerid]);
    TextDrawHideForPlayer(playerid, TDLabels[0]);
    TextDrawHideForPlayer(playerid, TDLabels[1]);
    TextDrawHideForPlayer(playerid, TDLabels[2]);
    TextDrawHideForPlayer(playerid, TDValueDrift[playerid]);
    TextDrawHideForPlayer(playerid, TDValueBonus[playerid]);
    TextDrawHideForPlayer(playerid, TDValueCash[playerid]);
    DriftBonus[playerid] = 1;
    AutoFixBool[playerid] = true;
    SetVehicleHealth(GetPlayerVehicleID(playerid), HealthInit[playerid]);
    ////////////////////////////////////////////////////
    DriftPointsNow[playerid] = 0;
}

Float: ReturnPlayerAngle(playerid)
{ // By
    new Float: Ang;
    if (IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehicleID(playerid), Ang);
    else GetPlayerFacingAngle(playerid, Ang);
    return Ang;
}

public Drift(playerid)
{ // By Luby
    new Float: Angle1,
    Float: Angle2,
    Float: BySpeed;
    new Float: Z;
    new Float: X;
    new Float: Y;
    new Float: SpeedX;
    for (new g = 0; g < 200; g++)
    {
        GetPlayerPos(g, X, Y, Z);
        SpeedX = floatsqroot(floatadd(floatadd(floatpower(floatabs(floatsub(X, SavedPos[g][sX])), 2), floatpower(floatabs(floatsub(Y, SavedPos[g][sY])), 2)), floatpower(floatabs(floatsub(Z, SavedPos[g][sZ])), 2)));
        Angle1 = ReturnPlayerAngle(g);
        Angle2 = GetPlayerTheoreticAngle(g);
        BySpeed = floatmul(SpeedX, 12);
        if (IsPlayerInAnyVehicle(g) && GetVType(GetPlayerVehicleID(g)) && floatabs(floatsub(Angle1, Angle2)) > DRIFT_MINKAT && floatabs(floatsub(Angle1, Angle2)) < DRIFT_MAXKAT && BySpeed > DRIFT_SPEED)
        {
            if (PlayerDriftCancellation[g] > 0) KillTimer(PlayerDriftCancellation[g]);
            PlayerDriftCancellation[g] = 0;
            DriftPointsNow[g] += floatval(floatabs(floatsub(Angle1, Angle2)) * 3 * (BySpeed * 0.1)) / 10;
            PlayerDriftCancellation[g] = SetTimerEx("DriftExit", 3000, 0, "d", g);
        }

        if (DriftPointsNow[g] > 70 && DriftPointsNow[g] < 10000)
        {
            ///////////// by A////////////////////
            if (DriftPointsNow[g] < 200)
            {
                DriftBonus[g] = 1;
            }
            if (DriftPointsNow[g] >= 200 && DriftPointsNow[g] < 500)
            {
                DriftBonus[g] = 2;
                SetPlayerScore(playerid, GetPlayerScore(score) + 20);
            }
            if (DriftPointsNow[g] >= 500 && DriftPointsNow[g] < 1000)
            {
                DriftBonus[g] = 3;
                SetPlayerScore(playerid, GetPlayerScore(score) + 30);
            }
            if (DriftPointsNow[g] >= 1000 && DriftPointsNow[g] < 1500)
            {
                DriftBonus[g] = 4;
                SetPlayerScore(playerid, GetPlayerScore(score) + 40);
            }
            if (DriftPointsNow[g] >= 1500)
            {
                DriftBonus[g] = 5;
                SetPlayerScore(playerid, GetPlayerScore(score) + 50);
            }

            TextDrawShowForPlayer(g, TDLabels[0]);
            TextDrawShowForPlayer(g, TDLabels[1]);
            TextDrawShowForPlayer(g, TDLabels[2]);

            TextDrawShowForPlayer(g, TDValueDrift[g]);
            TextDrawShowForPlayer(g, TDValueBonus[g]);
            TextDrawShowForPlayer(g, TDValueCash[g]);

            new DPs[128], DBn[128], Cash[128], csh;

            valstr(DPs, DriftPointsNow[g], false);
            format(DBn, sizeof(DBn), "X%i", DriftBonus[g]);
            csh = DriftPointsNow[g] * DriftBonus[g];
            format(Cash, sizeof(Cash), "$%i", csh);

            TextDrawSetString(TDValueDrift[g], DPs);
            TextDrawSetString(TDValueBonus[g], DBn);
            TextDrawSetString(TDValueCash[g], Cash);
            ////////////////////////////////////////
        }
        SavedPos[g][sX] = X;
        SavedPos[g][sY] = Y;
        SavedPos[g][sZ] = Z;
    }
}

public AngleUpdate()
{ // By
    for (new g = 0; g <= MAX_PLAYERS; g++)
    {
        new Float: x,
        Float: y,
        Float: z;
        if (IsPlayerInAnyVehicle(g)) GetVehiclePos(GetPlayerVehicleID(g), x, y, z);
        else GetPlayerPos(g, x, y, z);
        ppos[g][0] = x;
        ppos[g][1] = y;
        ppos[g][2] = z;
    }
}

floatval(Float:val)
{ // By
    new str[256];
    format(str, 256, "%.0f", val);
    return todec(str);
}

todec(str[])
{ // By Luby
    return strval(str);
}

LoadTextDraws()
{ // by
    TDLabels[0] = TextDrawCreate(Label_X, TD_Y, "Pontos No Drift");
    TextDrawColor(TDLabels[0], COLOR_Label);
    TextDrawSetShadow(TDLabels[0], 0);
    TextDrawSetOutline(TDLabels[0], 1);
    TextDrawLetterSize(TDLabels[0], 0.5, 2);
    TextDrawBackgroundColor(TDLabels[0], COLOR_LabelOut);
    TextDrawFont(TDLabels[0], 1);

    TDLabels[1] = TextDrawCreate(Label_X, TD_Y + 50, "Bonus Do Drift");
    TextDrawColor(TDLabels[1], COLOR_Label);
    TextDrawSetShadow(TDLabels[1], 0);
    TextDrawSetOutline(TDLabels[1], 1);
    TextDrawLetterSize(TDLabels[1], 0.5, 2);
    TextDrawBackgroundColor(TDLabels[1], COLOR_LabelOut);
    TextDrawFont(TDLabels[1], 1);

    TDLabels[2] = TextDrawCreate(Label_X, TD_Y + 100, "Grana Do Drift");
    TextDrawColor(TDLabels[2], COLOR_Label);
    TextDrawSetShadow(TDLabels[2], 0);
    TextDrawSetOutline(TDLabels[2], 1);
    TextDrawLetterSize(TDLabels[2], 0.5, 2);
    TextDrawBackgroundColor(TDLabels[2], COLOR_LabelOut);
    TextDrawFont(TDLabels[2], 1);

    new i;
    for (i = 0; i <= MAX_PLAYERS; i++)
    {
        TDValueDrift[i] = TextDrawCreate(Value_X, TD_Y + 20, "0");
        TextDrawColor(TDValueDrift[i], COLOR_Value);
        TextDrawSetShadow(TDValueDrift[i], 0);
        TextDrawSetOutline(TDValueDrift[i], 1);
        TextDrawLetterSize(TDValueDrift[i], 0.5, 2);
        TextDrawBackgroundColor(TDValueDrift[i], COLOR_ValueOut);
        TextDrawFont(TDValueDrift[i], 3);

        TDValueBonus[i] = TextDrawCreate(Value_X, TD_Y + 70, "X1");
        TextDrawColor(TDValueBonus[i], COLOR_Value);
        TextDrawSetShadow(TDValueBonus[i], 0);
        TextDrawSetOutline(TDValueBonus[i], 1);
        TextDrawLetterSize(TDValueBonus[i], 0.5, 2);
        TextDrawBackgroundColor(TDValueBonus[i], COLOR_ValueOut);
        TextDrawFont(TDValueBonus[i], 3);

        TDValueCash[i] = TextDrawCreate(Value_X, TD_Y + 120, "$0");
        TextDrawColor(TDValueCash[i], COLOR_Value);
        TextDrawSetShadow(TDValueCash[i], 0);
        TextDrawSetOutline(TDValueCash[i], 1);
        TextDrawLetterSize(TDValueCash[i], 0.5, 2);
        TextDrawBackgroundColor(TDValueCash[i], COLOR_ValueOut);
        TextDrawFont(TDValueCash[i], 3);
    }

    return 1;
}

public CheckPlayerState()
{ //by
    new i, cs;

    for (i = 0; i <= MAX_PLAYERS; i++)
    {
        cs = GetPlayerState(i);
        if (DriftMode[i] && cs == PLAYER_STATE_DRIVER && DriftPointsNow[i] > 70)
        {
            new Float: h;
            GetVehicleHealth(GetPlayerVehicleID(i), h);
            if (h < HealthInit[i])
            {
                KillTimer(DriftTimer[i]);
                DriftExit(i);
                GameTextForPlayer(i, "~n~~n~~n~~n~~n~~r~Bateu PerdeO", 800, 5);
                DriftMode[i] = false;
            }
        }
        if (cs == PLAYER_STATE_DRIVER && DriftMode[i] == false)
        {
            if (GetVType(GetPlayerVehicleID(i)))
            {
                DriftMode[i] = true;
                GetVehicleHealth(GetPlayerVehicleID(i), HealthInit[i]);
                AutoFixBool[i] = false;
                DriftTimer[i] = SetTimerEx("Drift", 200, true, "i", i);
            }
        }
        else if (cs != PLAYER_STATE_DRIVER && DriftMode[i] == true)
        {
            KillTimer(DriftTimer[i]);
            DriftMode[i] = false;
            AutoFixBool[i] = true;
        }
        else
        {}
    }
    return 1;
}

public AutoFix()
{ // By
    new i;
    for (i = 0; i <= MAX_PLAYERS; i++)
    {
        if (AutoFixBool[i] && IsPlayerInAnyVehicle(i))
        {
            SetVehicleHealth(GetPlayerVehicleID(i), HealthInit[i]);
        }
    }
}

GetVType(vid)
{ // By
    new Convertibles[4] = {
        480, 533, 439, 555
    };
    new Industrial[26] = {
        499, 422, 482, 498, 609, 524, 578, 455, 403, 414, 582, 443, 514, 413, 515, 440, 543, 605, 459, 531, 408, 552, 478, 456, 554
    };
    new LowRider[8] = {
        536, 575, 534, 567, 535, 566, 576, 412
    };
    new OffRoad[13] = {
        568, 424, 573, 579, 400, 500, 444, 556, 557, 470, 489, 505, 595
    };
    new Service[19] = {
        416, 433, 431, 438, 437, 523, 427, 490, 528, 407, 544, 596, 596, 597, 598, 599, 432, 601, 420
    };
    new Saloon[35] = {
        445, 504, 401, 518, 527, 542, 507, 562, 585, 419, 526, 604, 466, 492, 474, 546, 517, 410, 551, 516, 467, 600, 426, 436, 547, 405, 580, 560, 550, 549, 540, 491, 529, 421
    };
    new Sports[20] = {
        602, 429, 496, 402, 541, 415, 589, 587, 565, 494, 502, 503, 411, 559, 603, 475, 506, 451, 558, 477
    };
    new Wagons[5] = {
        418, 404, 479, 458, 561
    };

    new modelid = GetVehicleModel(vid);
    new i;
    for (i = 0; i < 3; i++)
    {
        if (Convertibles[i] == modelid) return 1;
    }
    for (i = 0; i < 25; i++)
    {
        if (Industrial[i] == modelid) return 1;
    }
    for (i = 0; i < 7; i++)
    {
        if (LowRider[i] == modelid) return 1;
    }
    for (i = 0; i < 12; i++)
    {
        if (OffRoad[i] == modelid) return 1;
    }
    for (i = 0; i < 19; i++)
    {
        if (Service[i] == modelid) return 1;
    }
    for (i = 0; i < 35; i++)
    {
        if (Saloon[i] == modelid) return 1;
    }
    for (i = 0; i < 20; i++)
    {
        if (Sports[i] == modelid) return 1;
    }
    for (i = 0; i < 5; i++)
    {
        if (Wagons[i] == modelid) return 1;
    }
    return 0;
}
@Edit
Tenta ai.


Crйditos : Ambrуsio
Tуpico Original : https://sampforum.blast.hk/showthread.php?tid=138798
Reply


Messages In This Thread
[RESOLVIDO]SetPlayerScore - by Brunooh - 25.08.2013, 23:01
Re: SetPlayerScore - by [THs]ShadoW - 25.08.2013, 23:04
Re: SetPlayerScore - by Brunooh - 25.08.2013, 23:07
Re: SetPlayerScore - by [THs]ShadoW - 25.08.2013, 23:09
Re: SetPlayerScore - by Brunooh - 25.08.2013, 23:11
Re: SetPlayerScore - by Diogo123 - 25.08.2013, 23:32
Re: SetPlayerScore - by Brunooh - 25.08.2013, 23:35
Re: SetPlayerScore - by [THs]ShadoW - 25.08.2013, 23:49
Re: SetPlayerScore - by Brunooh - 26.08.2013, 00:02

Forum Jump:


Users browsing this thread: 2 Guest(s)