Дрифт счётчик

Описание: Готовые решения скриптов, filterScript
Модератор: SJplayer

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 23 октября 2014, 22:05

Дрифт счётчик.jpg
Дрифт счётчик.jpg (38.48 КБ) 3680 просмотров


Ко всем #define добавим:

Код: Выделить всё

#define COLOR_YELLOW 0xFFFF00FF
#define COLOR_GREEN 0x33AA33FF
#define DRIFT_MINKAT 10.0
#define DRIFT_MAXKAT 90.0
#define DRIFT_SPEED 30.0         


Ко всем new добавим:

Код: Выделить всё

new dtimer, atimer;
new Text:Score[MAX_PLAYERS];
new Text:Chet[MAX_PLAYERS];
new scores[MAX_PLAYERS], scplay[MAX_PLAYERS], chets[MAX_PLAYERS];
new PlayerDriftCancellation[200];
new DriftPointsNow[200];
new Float:ppos[200][3];
enum Float:Pos{ Float:sX,Float:sY,Float:sZ };
new Float:SavedPos[MAX_PLAYERS][Pos]; 


В enum pInfo добавим


Ко всем forward

Код: Выделить всё

forward Drift();
forward AngleUpdate(); 
forward DriftCancellation
(playerid); 


В public OnGameModeInit()

Код: Выделить всё

dtimer = SetTimer("Drift", 200, true);
atimer = SetTimer("AngleUpdate", 200, true); 


В public OnGameModeExit()

Код: Выделить всё

KillTimer(dtimer);
KillTimer(atimer); 


В public OnGameModeInit()

Код: Выделить всё

    scores[playerid] = 0;
    chets[playerid] = 1;
    scplay[playerid] = 1;
     Score[playerid] = TextDrawCreate(500,150,"-");
    TextDrawAlignment(Score[playerid],0);
    TextDrawBackgroundColor(Score[playerid],0x000000ff);
    TextDrawFont(Score[playerid],3);
    TextDrawLetterSize(Score[playerid],0.4,1.5);
    TextDrawColor(Score[playerid],COLOR_YELLOW);
    TextDrawSetOutline(Score[playerid],1);
    TextDrawSetProportional(Score[playerid],1);
    TextDrawSetShadow(Score[playerid],1);
     Chet[playerid] = TextDrawCreate(500,170,"-");
    TextDrawAlignment(Chet[playerid],0);
    TextDrawBackgroundColor(Chet[playerid],0x000000ff);
    TextDrawFont(Chet[playerid],3);
    TextDrawLetterSize(Chet[playerid],0.5,1.7);
    TextDrawColor(Chet[playerid],0xA4A2AEF6);
    TextDrawSetOutline(Chet[playerid],1);
    TextDrawSetProportional(Chet[playerid],1);
    TextDrawSetShadow(Chet[playerid],1); 


В public OnPlayerDisconnect(playerid, reason)

Код: Выделить всё

    TextDrawDestroy(Score[playerid]);
    TextDrawDestroy(Chet[playerid]); 


В конец мода добавим

Код: Выделить всё

Float:GetPlayerTheoreticAngle(i) 
{
        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]>&& ppos[i][0]>x)
                {
                    sin = asin(tmp3/dis);
                    MindAngle = floatsub(floatsub(floatadd(sin, 90), floatmul(sin, 2)), -90.0);
                }
                if(ppos[i][1]<&& ppos[i][0]>x)
                {
                    sin = asin(tmp3/dis);
                    MindAngle = floatsub(floatadd(sin, 180), 180.0);
                }
                if(ppos[i][1]<&& ppos[i][0]<x)
                {
                    sin = acos(tmp4/dis);
                    MindAngle = floatsub(floatadd(sin, 360), floatmul(sin, 2));
                }
                if(ppos[i][1]>&& ppos[i][0]<x)
                {
                    sin = asin(tmp3/dis);
                    MindAngle = floatadd(sin, 180);
                }
        }

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

public DriftCancellation(playerid)
{
    PlayerDriftCancellation[playerid] = 0;
    GivePlayerMoney(playerid, DriftPointsNow[playerid]);
    PlayerInfo[playerid][pScore] += scores[playerid];
    SetPlayerScore(playerid, PlayerInfo[playerid][pScore]);
    DriftPointsNow[playerid] = 0;
    scores[playerid] = 0;
    TextDrawHideForPlayer(playerid, Chet[playerid]);
}

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

public Drift()
{
    new Float:Angle1, Float:Angle2, Float:BySpeed, s[128];
    new Float:Z;
    new Float:X;
    new Float:Y;
    new Float:SpeedX;
    for(new g=0;g<MAX_PLAYERS;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) && IsCar(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] += 10;
            scores[g]++;
            PlayerDriftCancellation[g] = SetTimerEx("DriftCancellation", 2000, 0, "d", g);
        }
        if(DriftPointsNow[g] > 0)
        {
            if(scplay[g] == 1)
            {
                TextDrawShowForPlayer(g,Chet[g]);
                format(s, sizeof(s), "drift: +%d$", DriftPointsNow[g]);
                TextDrawSetString(Chet[g], s);
            }
        }
        SavedPos[ g ][ sX ] = X;
        SavedPos[ g ][ sY ] = Y;
        SavedPos[ g ][ sZ ] = Z;
    }
}

IsCar(model)
{
    switch(model)
    {
        case 443:return 0;
        case 448:return 0;
        case 461:return 0;
        case 462:return 0;
        case 463:return 0;
        case 468:return 0;
        case 521:return 0;
        case 522:return 0;
        case 523:return 0;
        case 581:return 0;
        case 586:return 0;
        case 481:return 0;
        case 509:return 0;
        case 510:return 0;
        case 430:return 0;
        case 446:return 0;
        case 452:return 0;
        case 453:return 0;
        case 454:return 0;
        case 472:return 0;
        case 473:return 0;
        case 484:return 0;
        case 493:return 0;
        case 595:return 0;
        case 417:return 0;
        case 425:return 0;
        case 447:return 0;
        case 465:return 0;
        case 469:return 0;
        case 487:return 0;
        case 488:return 0;
        case 497:return 0;
        case 501:return 0;
        case 548:return 0;
        case 563:return 0;
        case 406:return 0;
        case 444:return 0;
        case 556:return 0;
        case 557:return 0;
        case 573:return 0;
        case 460:return 0;
        case 464:return 0;
        case 476:return 0;
        case 511:return 0;
        case 512:return 0;
        case 513:return 0;
        case 519:return 0;
        case 520:return 0;
        case 539:return 0;
        case 553:return 0;
        case 577:return 0;
        case 592:return 0;
        case 593:return 0;
        case 471:return 0;
    }
    return 1;
}

public AngleUpdate()
{
 
    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;
    }
}

public OnVehicleDamageStatusUpdate(vehicleid, playerid)
{
    if(DriftPointsNow[playerid] > 0)
    {
        DriftPointsNow[playerid] = 0;
        scores[playerid] = 0;
        TextDrawSetString(Chet[playerid], "~r~Crash");
    }
    return 1;


В public OnPlayerSpawn(playerid)

Код: Выделить всё

    TextDrawHideForPlayer(playerid, Chet[playerid]);
    TextDrawShowForPlayer(playerid,Score[playerid]); 


И в public OnPlayerUpdate(playerid)

Код: Выделить всё

    new string[128];//Обновление Score:%d
    format(string,sizeof(string),"score %07d",PlayerInfo[playerid][pScore]);
    TextDrawSetString(Score[playerid],string); 
[center]i love you [s]mxIni[/s] Mysql[/center]


TheSpektor M
Ефрейтор
Ефрейтор
Аватара
TheSpektor M
Ефрейтор
Ефрейтор
Сообщения: 19
Зарегистрирован: 24 января 2015
С нами: 9 лет 2 месяца

#2 TheSpektor » 15 октября 2015, 17:02

Вырезан из мода Drift Andreas. Уже сразу понятно.

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#3 Дим » 17 октября 2015, 12:48

TheSpektor писал(а):Вырезан из мода Drift Andreas. Уже сразу понятно.
Да это и не секрет :grin:
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Скрипты / FS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 4 гостя