Jump to content

Question

Posted

[pawn]#define FILTERSCRIPT

#include <a_samp>

#if defined FILTERSCRIPT

#define NO_BALL 403

#define CALA 0

#define POL 1

#define WHITE 14

#define BLACK 15

#define TABLE 16

#define POLYGONS 6

forward Float:GetVectorAngle(obj, obj2);

forward Float:GetVectorAngle_XY(Float:fx, Float:fy, Float:tx, Float:ty);

forward Float:GetVectorDistance_PL(playerid, obj);

forward Float:GetVectorDistance_OB(obj, obj2);

forward Float:GetDistance(Float:fx, Float:fy, Float:tx, Float:ty);

forward Float:GetDistancePointToLong(Float:px,Float:py, Float:px1,Float:py1, Float:px2,Float:py2);

forward OnEndBilliard();

forward OnBallInHole(ballid);

forward OnTimer();

forward BallProperties();

forward OnShowedTD(playerid);

enum GameEnum

{

bool:Waiting,

bool:Running,

bool:WhiteInHole,

bool:BlackInHole,

    Timer,

Timer2,

Player1,

Player2,

LastBall

};

new Game[GameEnum];

enum BallEnum

{

ObjID,

Float:x,

Float:y,

Float:z,

Float:a,

Float:speed,

TouchID

};

new Ball[17][ballEnum];

enum EnumVertices

{

Float:x,

Float:y

};

new Polygon[POLYGONS][2][EnumVertices];

enum PolygonInfo

{

bool:Progress,

Vertices

};

new PolyResult[POLYGONS][PolygonInfo];

enum EnumPlayer

{

bool:Sighting,

bool:AfterSighting,

bool:Turn,

BBall,

Points,

SelectLR,

SelectUD,

Float:a,

Text:T1,

Text:T2,

Text:T3,

Text:T4,

Text:T5,

Text:T6,

TDTimer

};

new Player[20][EnumPlayer];

new Float:Hole[6][4] =

{

{2495.6413,-1670.6297, 2495.5415,-1670.7099}, // 1  12

{2496.4323,-1670.6297, 2496.5825,-1670.6398}, // 2  3

{2497.3632,-1670.6297, 2497.4433,-1670.7299}, // 4  5

{2497.4633,-1671.5506, 2497.3732,-1671.6607}, // 6  7

{2496.5725,-1671.6607, 2496.4323,-1671.6607}, // 8  9

{2495.6315,-1671.6607, 2495.5415,-1671.5606}  // 10 11

};

new Char[2][] =

{

{"(0)"},

{"(-)"}

};

public OnFilterScriptInit()

{

print("\n--------------------------------------");

print(" Blank Filterscript by your name here");

print("--------------------------------------\n");

for(new i = 0; i < 20; i++)

{

    Player[T1] = TextDrawCreate(481.000000,353.000000," ");

    TextDrawUseBox(Player[T1],1);

    TextDrawTextSize(Player[T1],602.000000,0.000000);

    TextDrawLetterSize(Player[T1],0.359999,1.100000);

    TextDrawSetShadow(Player[T1],1);

    TextDrawColor(Player[T1],227275519);

    TextDrawBoxColor(Player[T1],227275314);

Player[T2] = TextDrawCreate(475.000000,344.000000," ");

TextDrawColor(Player[T2],4294967295);

    TextDrawSetShadow(Player[T2],1);

    Player[T3] = TextDrawCreate(481.000000,313.000000," ");

    TextDrawUseBox(Player[T3],1);

    TextDrawTextSize(Player[T3],635.000000,0.000000);

    TextDrawLetterSize(Player[T3],0.359999,1.100000);

    TextDrawSetShadow(Player[T3],1);

    TextDrawColor(Player[T3],227275519);

    TextDrawBoxColor(Player[T3],227275314);

Player[T4] = TextDrawCreate(475.000000,304.000000," ");

TextDrawColor(Player[T4],4294967295);

    TextDrawSetShadow(Player[T4],1);

    Player[T5] = TextDrawCreate(481.000000,273.000000," ");

    TextDrawUseBox(Player[T5],1);

    TextDrawTextSize(Player[T5],635.000000,0.000000);

    TextDrawLetterSize(Player[T5],0.359999,1.100000);

    TextDrawSetShadow(Player[T5],1);

    TextDrawColor(Player[T5],227275519);

    TextDrawBoxColor(Player[T5],227275314);

Player[T6] = TextDrawCreate(475.000000,264.000000," ");

TextDrawColor(Player[T6],4294967295);

    TextDrawSetShadow(Player[T6],1);

}

return 1;

}

public OnFilterScriptExit()

{

Release();

return 1;

}

#else

main()

{

print("\n----------------------------------");

print(" Blank Gamemode by your name here");

print("----------------------------------\n");

}

#endif

public OnGameModeInit()

{

// Don't use these lines if it's a filterscript

SetGameModeText("Blank Script");

AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);

return 1;

}

public OnGameModeExit()

{

return 1;

}

public OnPlayerRequestClass(playerid, classid)

{

SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);

SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);

SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);

return 1;

}

public OnPlayerCommandText(playerid, cmdtext[])

{

if (strcmp("/pool start", cmdtext, true, 10) == 0)

{

if(Game[Waiting] == false && Game[Running] == false)

{

Game[Waiting] = true;

Game[Player1] = playerid;

Game[LastBall] = -1;

Player[playerid][Points] = 7;

TextDrawSetString(Player[playerid][T1],"The Enemy...");

    TextDrawShowForPlayer(playerid,Player[playerid][T1]);

  TextDrawSetString(Player[playerid][T2],"Expectation...");

    TextDrawShowForPlayer(playerid,Player[playerid][T2]);

    GivePlayerWeapon(playerid,7,1);

    new name[24];

    new str[100];

name = GetName(playerid);

format(str,sizeof(str),"% s is waiting for the opponent. Enter /pool join to compete with the host.",name);

    for(new i = 0; i < 20; i++)

    {

        if(IsPlayerConnected(i) == 1 && playerid != i)

{

            TextDrawSetString(Player[T1],str);

TextDrawShowForPlayer(i,Player[T1]);

TextDrawSetString(Player[T2],"Biliard");

    TextDrawShowForPlayer(i,Player[T2]);

        }

        Player[bBall] = NO_BALL;

    }

    Ball[0][ObjID] = CreateObject(3100, 2497.0749511719, -1670.9591064453, 13.199293525696, 0, 0, 0); //CALA

Ball[1][ObjID] = CreateObject(3101, 2497.0034179688, -1671.01171875, 13.199293525696, 0, 0, 0); //CALA

Ball[2][ObjID] = CreateObject(3102, 2497.0034179688, -1671.1900634766, 13.199293525696, 0, 0, 0); //CALA

Ball[3][ObjID] = CreateObject(3103, 2496.8696289063, -1671.1865234375, 13.199293525696, 0, 0, 0); //CALA

Ball[4][ObjID] = CreateObject(3104, 2496.9370117188, -1671.0673828125, 13.199293525696, 0, 0, 0); //CALA

Ball[5][ObjID] = CreateObject(3105, 2497.072265625, -1671.2313232422, 13.199293525696, 0, 0, 0); //CALA

Ball[6][ObjID] = CreateObject(3002, 2496.8068847656, -1671.1413574219, 13.199293525696, 0, 0, 0); //CALA

Ball[7][ObjID] = CreateObject(2995, 2496.8703613281, -1671.0987548828, 13.199293525696, 0, 0, 0); //POLOWKA

Ball[8][ObjID] = CreateObject(2996, 2497.0031738281, -1671.2750244141, 13.199293525696, 0, 0, 0); //POLOWKA

Ball[9][ObjID] = CreateObject(2997, 2497.0705566406, -1671.3179931641, 13.199293525696, 0, 0, 0); //POLOWKA

Ball[10][ObjID] = CreateObject(2998, 2497.0759277344, -1671.0457763672, 13.199293525696, 0, 0, 0); //POLOWKA

Ball[11][ObjID] = CreateObject(2999, 2497.0063476563, -1671.1011962891, 13.199293525696, 0, 0, 0); //POLOWKA

Ball[12][ObjID] = CreateObject(3000, 2497.0734863281, -1671.1456298828, 13.199293525696, 0, 0, 0); //POLOWKA

Ball[13][ObjID] = CreateObject(3001, 2496.9333496094, -1671.2292480469, 13.199293525696, 0, 0, 0); //POLOWKA

Ball[WHITE][ObjID] = CreateObject(3003, 2495.8618164063, -1671.1704101563, 13.209293525696, 0, 0, 0); //Biala

Ball[bLACK][ObjID] = CreateObject(3106, 2496.9375, -1671.1451416016, 13.199293525696, 0, 0, 0); //Czarna

Ball[table]

[ObjID] = CreateObject(2964, 2496.4970703125, -1671.1528320313, 12.265947036743, 0, 0, 0); //Stol

CreatePolygon(2495.6413,-1670.6297, 2496.4323,-1670.6297);

CreatePolygon(2496.5825,-1670.6398, 2497.3632,-1670.6297);

CreatePolygon(2497.4433,-1670.7299, 2497.4633,-1671.5506);

CreatePolygon(2497.3732,-1671.6607, 2496.5725,-1671.6607);

CreatePolygon(2496.4323,-1671.6607, 2495.6315,-1671.6607);

CreatePolygon(2495.5415,-1671.5606, 2495.5415,-1670.7099);

}

return 1;

}

if (strcmp("/pool end", cmdtext, true, 10) == 0)

{

    if(Game[Waiting] == true || Game[Running] == true)

    {

KillTimer(Game[Timer]);

KillTimer(Game[Timer2]);

for(new i = 0; i < 17; i++)

{

    DestroyObject(Ball[ObjID]);

    }

    if(Game[Waiting] == true)

        Game[Waiting] = false;

    if(Game[Running] == true)

        Game[Running] = false;

Game[WhiteInHole] = false;

Game[blackInHole] = false;

    Player[Game[Player1]][sighting] = false;

    TextDrawHideForPlayer(Game[Player1],Player[Game[Player1]][T1]);

    TextDrawHideForPlayer(Game[Player1],Player[Game[Player1]][T2]);

    TextDrawHideForPlayer(Game[Player1],Player[Game[Player1]][T3]);

    TextDrawHideForPlayer(Game[Player1],Player[Game[Player1]][T4]);

    TextDrawHideForPlayer(Game[Player1],Player[Game[Player1]][T5]);

    TextDrawHideForPlayer(Game[Player1],Player[Game[Player1]][T6]);

    Player[Game[Player2]][sighting] = false;

    TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T1]);

    TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T2]);

    TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T3]);

    TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T4]);

    TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T5]);

    TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T6]);

    }

    return 1;

}

if (strcmp("/pool join", cmdtext, true, 10) == 0)

{

    if(Game[Waiting] == true)

    {

        if(Game[Player1] != playerid)

        {

        Game[Waiting] = false;

        Game[Running] = true;

        Game[Player2] = playerid;

        TextDrawHideForPlayer(playerid,Player[Game[Player1]][T1]);

        TextDrawHideForPlayer(playerid,Player[Game[Player1]][T2]);

    new str[50];

    new name[24];

    GivePlayerWeapon(playerid,7,1);

    new rand = random(2);

if(rand == 0)

{

    name = GetName(Game[Player1]);

    Player[Game[Player1]][Turn] = true;

    Player[Game[Player2]][Turn] = false;

}

else if(rand == 1)

{

    name = GetName(Game[Player2]);

    Player[Game[Player1]][Turn] = false;

    Player[Game[Player2]][Turn] = true;

    }

    for(new i = 0; i < 20; i++)

    {

        if(IsPlayerConnected(i) == 1 && Game[Player1] != i && Game[Player2] != i)

{

    ShowMessage(i,"Billiard:Failed to subscribe to the game. You can wait for the next round.");

}

}

Player[playerid][Points] = 7;

format(str,sizeof(str),"The Game is started %s",name);

    ShowMessage(Game[Player1],"The Game",str);

    ShowMessage(Game[Player2],"The Game",str);

new string[80];

format(string,sizeof(string),"%s %d~n~%s %d",GetName(Game[Player1]),Player[Game[Player1]][Points],GetName(Game[Player2]),Player[Game[Player2]][Points]);

    TextDrawSetString(Player[Game[Player1]][T3],string);

    TextDrawSetString(Player[Game[Player1]][T4],"Billiard");

    TextDrawSetString(Player[Game[Player2]][T3],string);

    TextDrawSetString(Player[Game[Player2]][T4],"Billiard");

    TextDrawShowForPlayer(Game[Player1],Player[Game[Player1]][T3]);

    TextDrawShowForPlayer(Game[Player1],Player[Game[Player1]][T4]);

    TextDrawShowForPlayer(Game[Player2],Player[Game[Player2]][T3]);

    TextDrawShowForPlayer(Game[Player2],Player[Game[Player2]][T4]);

        for(new i = 0; i < 16; i++)

        {

Ball[TouchID] = -1;

        }

        }

    }

    return 1;

}

return 0;

}

public OnEndBilliard()

{

for(new i = 0; i < 17; i++)

{

    DestroyObject(Ball[ObjID]);

    }

  Game[Waiting] = false;

Game[Running] = false;

Game[WhiteInHole] = false;

    Game[blackInHole] = false;

Player[Game[Player1]][sighting] = false;

TextDrawHideForPlayer(Game[Player1],Player[Game[Player1]][T1]);

TextDrawHideForPlayer(Game[Player1],Player[Game[Player1]][T2]);

TextDrawHideForPlayer(Game[Player1],Player[Game[Player1]][T3]);

TextDrawHideForPlayer(Game[Player1],Player[Game[Player1]][T4]);

TextDrawHideForPlayer(Game[Player1],Player[Game[Player1]][T5]);

TextDrawHideForPlayer(Game[Player1],Player[Game[Player1]][T6]);

Player[Game[Player2]][sighting] = false;

TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T1]);

TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T2]);

TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T3]);

TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T4]);

TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T5]);

TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T6]);

}

public OnBallInHole(ballid)

{

if(ballid != WHITE)

{

    DestroyObject(Ball[ballid][ObjID]);

    Ball[ballid][speed] = 0;

    }

    else

    {

    Ball[WHITE][speed] = 0.2;

        SetObjectPos(Ball[WHITE][ObjID],2495.8618164063, -1671.1704101563, 13.209293525696);

    StopObject(Ball[WHITE][ObjID]);

    Ball[WHITE][x] = 2495.8618164063;

    Ball[WHITE][y] = -1671.1704101563;

    Ball[WHITE][z] = 13.209293525696;

    }

Game[LastBall] = ballid;

for(new i = 0; i < 16; i++)

{

    if(ballid == i)

    {

        if(ballid <= 6) //CALA

{

    if(Player[Game[Player1]][Turn] == true && Player[Game[Player1]][bBall] == NO_BALL)

    {

        Player[Game[Player1]][bBall] = CALA;

        Player[Game[Player2]][bBall] = POL;

      }

      else if(Player[Game[Player2]][Turn] == true && Player[Game[Player2]][bBall] == NO_BALL)

      {

          Player[Game[Player1]][bBall] = POL;

        Player[Game[Player2]][bBall] = CALA;

      }

if(Player[Game[Player1]][bBall] == CALA)

    Player[Game[Player1]][Points]--;

else if(Player[Game[Player2]][bBall] == CALA)

    Player[Game[Player2]][Points]--;

  }

        else if(6 < ballid <= 13) //POLOWKA

        {

                if(Player[Game[Player1]][Turn] == true && Player[Game[Player1]][bBall] == NO_BALL)

    {

        Player[Game[Player1]][bBall] = POL;

        Player[Game[Player2]][bBall] = CALA;

      }

      else if(Player[Game[Player2]][Turn] == true && Player[Game[Player2]][bBall] == NO_BALL)

      {

          Player[Game[Player1]][bBall] = CALA;

        Player[Game[Player2]][bBall] = POL;

}

            if(Player[Game[Player1]][bBall] == POL)

    Player[Game[Player1]][Points]--;

else if(Player[Game[Player2]][bBall] == POL)

    Player[Game[Player2]][Points]--;

        }

else if(ballid == WHITE)

Game[WhiteInHole] = true;

else if(ballid == BLACK)

    Game[blackInHole] = true;

        break;

    }

}

if(ballid != WHITE && ballid != BLACK)

{

new str[80];

format(str,sizeof(str),"%s %s %d~n~%s %s %d",GetName(Game[Player1]),Char[Player[Game[Player1]][bBall]],Player[Game[Player1]][Points], GetName(Game[Player2]),Char[Player[Game[Player2]][bBall]],Player[Game[Player2]][Points]);

TextDrawSetString(Player[Game[Player1]][T3],str);

TextDrawSetString(Player[Game[Player2]][T3],str);

TextDrawShowForPlayer(Game[Player1],Player[Game[Player1]][T3]);

TextDrawShowForPlayer(Game[Player2],Player[Game[Player2]][T3]);

}

}

public BallProperties()

{

for(new i = 0; i < 16; i++)

{

if(Ball[speed] > 0.1)

  {

    Ball[speed] = Ball[speed] / 1.4;

    SetObjectSpeed(i,Ball[speed]);

    }

  else

    {

        Ball[speed] = 0;

        StopObject(Ball[ObjID]);

        if(CheckAllBalls() == 1)

        {

            KillTimer(Game[Timer]);

            KillTimer(Game[Timer2]);

            if(Game[LastBall] != - 1)

            {

                if(Game[LastBall] <= 6) //CALA

{

    if(Player[Game[Player1]][bBall] == CALA)

    {

        Player[Game[Player1]][Turn] = true;

  Player[Game[Player2]][Turn] = false;

    }

    else if(Player[Game[Player2]][bBall] == CALA)

    {

        Player[Game[Player1]][Turn] = false;

  Player[Game[Player2]][Turn] = true;

    }

}

    else if(6 < Game[LastBall] <= 13) //POLOWKA

                {

                    if(Player[Game[Player1]][bBall] == POL)

    {

        Player[Game[Player1]][Turn] = true;

  Player[Game[Player2]][Turn] = false;

    }

    else if(Player[Game[Player2]][bBall] == POL)

    {

        Player[Game[Player1]][Turn] = false;

  Player[Game[Player2]][Turn] = true;

    }

                }

            }

            else //Jezeli zadna bila nie wpadla

            {

if(Player[Game[Player1]][Turn] == true)

{

    Player[Game[Player1]][Turn] = false;

  Player[Game[Player2]][Turn] = true;

}

else if(Player[Game[Player2]][Turn] == true)

{

  Player[Game[Player1]][Turn] = true;

  Player[Game[Player2]][Turn] = false;

}

            }

TextDrawSetString(Player[Game[Player1]][T6],"Queue");

TextDrawSetString(Player[Game[Player2]][T6],"Queue");

TextDrawShowForPlayer(Game[Player1],Player[Game[Player1]][T6]);

TextDrawShowForPlayer(Game[Player2],Player[Game[Player2]][T6]);

if(Game[blackInHole] == false)

{

    if(Game[WhiteInHole] == false)

    {

    if(Player[Game[Player1]][Turn] == true)

{

    TextDrawSetString(Player[Game[Player1]][T5],GetName(Game[Player1]));

    TextDrawSetString(Player[Game[Player2]][T5],GetName(Game[Player1]));

}

else if(Player[Game[Player2]][Turn] == true)

{

    TextDrawSetString(Player[Game[Player1]][T5],GetName(Game[Player2]));

    TextDrawSetString(Player[Game[Player2]][T5],GetName(Game[Player2]));

}

}

else

{

    if(Player[Game[Player1]][Turn] == true)

    {

        Player[Game[Player1]][Turn] = false;

        Player[Game[Player2]][Turn] = true;

        TextDrawSetString(Player[Game[Player1]][T5],GetName(Game[Player2]));

    TextDrawSetString(Player[Game[Player2]][T5],GetName(Game[Player2]));

    }

  else if(Player[Game[Player2]][Turn] == true)

    {

        Player[Game[Player1]][Turn] = true;

        Player[Game[Player2]][Turn] = false;

        TextDrawSetString(Player[Game[Player1]][T5],GetName(Game[Player1]));

    TextDrawSetString(Player[Game[Player2]][T5],GetName(Game[Player1]));

    }

    Game[WhiteInHole] = false;

    ShowMessage(Game[Player1],"Billiard:hit the cue ball");

    ShowMessage(Game[Player2],"Billiard:hit the cue ball");

}

TextDrawShowForPlayer(Game[Player1],Player[Game[Player1]][T5]);

TextDrawShowForPlayer(Game[Player2],Player[Game[Player2]][T5]);

}

else

{

      Game[Waiting] = true;

      Player[Game[Player1]][sighting] = false;

      Player[Game[Player2]][sighting] = false;

      TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T1]);

    TextDrawHideForPlayer(Game[Player2],Player[Game[Player2]][T2]);

    TextDrawSetString(Player[Game[Player1]][T4],"The Game");

    TextDrawSetString(Player[Game[Player2]][T4],"The Game");

    TextDrawShowForPlayer(Game[Player1],Player[Game[Player1]][T4]);

    TextDrawShowForPlayer(Game[Player2],Player[Game[Player2]][T4]);

    TextDrawSetString(Player[Game[Player1]][T3],"She/He hit the black ball");

    TextDrawSetString(Player[Game[Player2]][T3],"She/He hit the black ball");

    TextDrawShowForPlayer(Game[Player1],Player[Game[Player1]][T3]);

  TextDrawShowForPlayer(Game[Player2],Player[Game[Player2]][T3]);

  TextDrawSetString(Player[Game[Player1]][T6],"The Winner");

  TextDrawSetString(Player[Game[Player2]][T6],"The Winner");

  TextDrawShowForPlayer(Game[Player1],Player[Game[Player1]][T6]);

  TextDrawShowForPlayer(Game[Player2],Player[Game[Player2]][T6]);

    if(Player[Game[Player1]][Points] == 0 || Player[Game[Player2]][Points] == 0)

    {

        if(Player[Game[Player1]][Turn] == true)

        {

            TextDrawSetString(Player[Game[Player1]][T5],GetName(Game[Player1]));

          TextDrawSetString(Player[Game[Player2]][T5],GetName(Game[Player1]));

        }

        else if(Player[Game[Player2]][Turn] == true)

        {

            TextDrawSetString(Player[Game[Player1]][T5],GetName(Game[Player2]));

          TextDrawSetString(Player[Game[Player2]][T5],GetName(Game[Player2]));

        }

    }

    else

    {

      if(Player[Game[Player1]][Turn] == true)

  {

      TextDrawSetString(Player[Game[Player1]][T5],GetName(Game[Player2]));

          TextDrawSetString(Player[Game[Player2]][T5],GetName(Game[Player2]));

    }

    else if(Player[Game[Player2]][Turn] == true)

    {

      TextDrawSetString(Player[Game[Player1]][T5],GetName(Game[Player1]));

      TextDrawSetString(Player[Game[Player2]][T5],GetName(Game[Player1]));

  }

}

Player[Game[Player1]][Turn] = false;

    Player[Game[Player2]][Turn] = false;

    Game[blackInHole] = false;

    TextDrawShowForPlayer(Game[Player1],Player[Game[Player1]][T5]);

    TextDrawShowForPlayer(Game[Player2],Player[Game[Player1]][T5]);

    SetTimer("OnEndBilliard",10000,0);

}

Game[LastBall] = -1;

break;

        }

}

}

}

public OnTimer()

{

new temp[2];

for(new i = 0; i < 16; i++)

{

    for(new j = 0; j < 16; j++)

    {

        if(i != j)

        {

        if(GetVectorDistance_OB(Ball[ObjID],Ball[j][ObjID]) < 0.09)

{

    if(Ball[TouchID] != j && Ball[j][TouchID] != i)

    {

        if(Ball[speed] > 0.1)

{

            new Float:pos[6];

            GetObjectPos(Ball[ObjID],pos[0],pos[1],pos[2]);

            GetObjectPos(Ball[j][ObjID],pos[3],pos[4],pos[5]);

            Ball[j][TouchID] = i;

              Ball[TouchID] = j;

            temp[0] = i;

            temp[1] = j;

            Ball[j][a] = GetVectorAngle(Ball[ObjID],Ball[j][ObjID]);

            Ball[j][speed] = Ball[speed];

            if(Ball[speed] < 3)

            {

              Ball[a] = GetVectorAngle(Ball[ObjID],Ball[j][ObjID]) + 180;

            Ball[speed] = Ball[speed] / 1.15; //1.5

            pos[0] += 5 * floatsin(-Ball[a],degrees); //(Ball[speed] / 1.1)

            pos[1] += 5 * floatcos(-Ball[a],degrees); //(Ball[speed] / 1.1)

            MoveObject(Ball[ObjID],pos[0],pos[1],pos[2],Ball[speed]);

          }

            else if(Ball[speed] >= 3)

            {

                Ball[speed] = Ball[speed] / 1.15; //2

                pos[0] += 5 * floatsin(-Ball[a],degrees); //Ball[speed] / 2) + random(25)

                pos[1] += 5 * floatcos(-Ball[a],degrees); //Ball[speed] / 2) - random(25)

                MoveObject(Ball[ObjID],pos[0],pos[1],pos[2],Ball[speed]);

            }

Ball[j][speed] = Ball[j][speed] / 1.1;

pos[3] += 5 * floatsin(-Ball[j][a],degrees); //Ball[j][speed] / 1.3

pos[4] += 5 * floatcos(-Ball[j][a],degrees); //Ball[j][speed] / 1.3

MoveObject(Ball[j][ObjID],pos[3],pos[4],pos[5],Ball[j][speed]);

    Ball[x] = pos[0];

Ball[y] = pos[1];

Ball[z] = Ball[WHITE][z];

Ball[j][x] = pos[3];

Ball[j][y] = pos[4];

Ball[j][z] = Ball[WHITE][z];

}

            }

        }

        }

}

  new Float:pos[5];

GetObjectPos(Ball[ObjID],pos[0],pos[1],pos[2]);

for(new h = 0; h < 6; h++)

{

    if(PointInLong(0.04,pos[0],pos[1],Hole[h][0],Hole[h][1],Hole[h][2],Hole[h][3]) == 1)

    {

        CallRemoteFunction("OnBallInHole","d",i);

        break;

    }

}

for(new k = 0; k < POLYGONS; k++)

  {

      if(PointInPolygon(pos[0],pos[1],k) == 1)

      {

          new Float:tmp[4];

          tmp[0] = pos[0];

          tmp[1] = pos[1];

          tmp[2] = pos[0];

          tmp[3] = pos[1];

          pos[0] += floatsin(-Ball[a] + 180,degrees) / 5;

pos[1] += floatcos(-Ball[a] + 180,degrees) / 5;

new Float:angle[2];

angle[0] = GetVectorAngle_XY(tmp[0],tmp[1],Polygon[k][0][x],Polygon[k][0][y]);

if(angle[0] > 0)

{

    angle[1] = angle[0] + 180;

    if(angle[1] > 360)

        angle[1] = angle[1] - 360;

}

else

{

                    angle[1] = GetVectorAngle_XY(tmp[0],tmp[1],Polygon[k][0][x],Polygon[k][0][y]);

angle[0] = angle[1] + 180;

if(angle[0] > 360)

    angle[0] = angle[0] - 360;

if(angle[1] < 0)

    angle[1] = angle[0] + 180;

}

new Float:stop = Ball[a] + 180;

if(stop > 360)

    stop = stop - 360;

if(angle[0] < angle[1])

{

    if(angle[0] < stop < angle[1])

angle[0] = angle[0] + 90;

else if(angle[1] < stop < 360 || 0 < stop < angle[0])

{

angle[0] = angle[1] + 90;

if(angle[0] > 360)

  angle[0] = angle[0] - 360;

    }

}

else if(angle[0] > angle[1])

{

    if(angle[0] > stop > angle[1])

        angle[0] = angle[1] + 90;

else if(angle[1] > stop > 0)

{

    angle[0] = angle[1] - 90;

    if(angle[0] > 360)

      angle[0] = angle[0] - 360;

}

else if(360 > stop > angle[0])

{

    angle[0] = angle[0] + 90;

    if(angle[0] > 360)

      angle[0] = angle[0] - 360;

}

}

new Float:sraka[2];

sraka[0] = tmp[0];

sraka[1] = tmp[1];

sraka[0] += floatsin(-angle[0],degrees) / 50;

sraka[1] += floatcos(-angle[0],degrees) / 50;

tmp[0] += floatsin(-angle[0],degrees) / 7;

tmp[1] += floatcos(-angle[0],degrees) / 7;

SetObjectPos(Ball[ObjID],sraka[0],sraka[1],13.199293525696);

new Float:ang;

new Float:dist;

ang = GetVectorAngle_XY(pos[0],pos[1],tmp[0],tmp[1]);

dist = GetDistance(pos[0],pos[1],tmp[0],tmp[1]);

pos[0] += (dist * floatsin(-ang,degrees)) * 2;

pos[1] += (dist * floatcos(-ang,degrees)) * 2;

new Float:ang2;

ang2 = GetVectorAngle_XY(pos[0],pos[1],tmp[2],tmp[3]);

ang2 = ang2 + 180;

tmp[2] += 5 * floatsin(-ang2,degrees);

tmp[3] += 5 * floatcos(-ang2,degrees);

MoveObject(Ball[ObjID],tmp[2],tmp[3],13.199293525696,Ball[speed]);

Ball[x] = tmp[2];

Ball[y] = tmp[3];

if(ang2 > 360)

    ang2 = ang2 - 360;

Ball[a] = ang2;

          break;

      }

  }

}

Ball[temp[0]][TouchID] = -1;

Ball[temp[1]][TouchID] = -1;

}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)

{

if(newkeys & 128)

{

    if(Player[playerid][sighting] == false && CheckAllBalls() == 1 && Game[Running] == true && Player[playerid][Turn] == true)

    {

        new Float:dist = GetVectorDistance_PL(playerid,Ball[WHITE][ObjID]);

    if(GetPlayerWeapon(playerid) == 7 && dist < 1.6)

        {

        new Float:pos[7];

        GetObjectPos(Ball[WHITE][ObjID],pos[0],pos[1],pos[2]);

GetPlayerPos(playerid,pos[3],pos[4],pos[5]);

pos[6] = GetVectorAngle_XY(pos[3],pos[4],pos[0],pos[1]);

Player[playerid][sighting] = true;

Player[playerid][AfterSighting] = true;

Player[playerid][selectLR] = 0;

Player[playerid][selectUD] = 5;

TextDrawSetString(Player[playerid][T2],"Predkosc");

        TextDrawShowForPlayer(playerid,Player[playerid][T2]);

        TextDrawSetString(Player[playerid][T1],"60 cm~w~/s");

        TextDrawShowForPlayer(playerid,Player[playerid][T1]);

if(0.9 <= dist <= 1.2)

{

    pos[3] += floatsin(-pos[6] + 180,degrees) * 0.3;

    pos[4] += floatcos(-pos[6] + 180,degrees) * 0.3;

}

else if(dist < 0.9)

{

    pos[3] += floatsin(-pos[6] + 180,degrees) * 0.6;

    pos[4] += floatcos(-pos[6] + 180,degrees) * 0.6;

}

SetPlayerPos(playerid,pos[3],pos[4],pos[5]);

SetPlayerFacingAngle(playerid,pos[6] - 2.2);

Player[playerid][a] = pos[6] - 2.2;

    pos[3] += floatsin(-pos[6] - 10,degrees) * 0.2;

  pos[4] += floatcos(-pos[6] - 10,degrees) * 0.2;

    SetPlayerCameraPos(playerid,pos[3],pos[4],pos[2] + 0.5);

    SetPlayerCameraLookAt(playerid,pos[0],pos[1],pos[2]);

    ApplyAnimation(playerid,"POOL","POOL_Med_Start",1,0,0,0,1,0,1);

    }

  }

}

else if(oldkeys & 128)

{

    if(Player[playerid][AfterSighting] == true)

    {

    SetCameraBehindPlayer(playerid);

    ApplyAnimation(playerid,"POOL","POOL_Med_Shot_O",4.1,0,1,1,1,1,1);

    TextDrawHideForPlayer(playerid,Player[playerid][T1]);

  TextDrawHideForPlayer(playerid,Player[playerid][T2]);

  Player[playerid][AfterSighting] = false;

  if(Player[playerid][sighting] == true)

      Player[playerid][sighting] = false;

  }

}

if(newkeys & KEY_FIRE)

{

    if(Player[playerid][sighting] == true)

    {

        new Float:pos[7];

    GetObjectPos(Ball[WHITE][ObjID],pos[0],pos[1],pos[2]);

    Game[Timer] = SetTimer("OnTimer",10,1);

    Game[Timer2] = SetTimer("BallProperties",200,1);

    TextDrawHideForPlayer(playerid,Player[playerid][T1]);

        TextDrawHideForPlayer(playerid,Player[playerid][T2]);

        Player[playerid][sighting] = false;

    if(Player[playerid][a] > 360)

Player[playerid][a] = Player[playerid][a] - 360;

else if(Player[playerid][a] < 0)

    Player[playerid][a] = 360 + Player[playerid][a];

Ball[WHITE][a] = Player[playerid][a];

    pos[0] += 5 * floatsin(-Ball[WHITE][a],degrees);

    pos[1] += 5 * floatcos(-Ball[WHITE][a],degrees);

Ball[WHITE][x] = pos[0];

Ball[WHITE][y] = pos[1];

Ball[WHITE][z] = pos[2];

Ball[WHITE][speed] = Player[playerid][selectUD] / 1.5;

new Float:pp[4];

GetPlayerPos(playerid,pp[0],pp[1],pp[2]);

GetPlayerFacingAngle(playerid,pp[3]);

pp[0] += floatsin(-pp[3] - 90,degrees) * 0.3;

pp[1] += floatcos(-pp[3] - 90,degrees) * 0.3;

SetPlayerPos(playerid,pp[0],pp[1],pp[2]);

SetPlayerCameraPos(playerid,2496.4970703125, -1671.1528320313, 12.275947036743 + 5);

SetPlayerCameraLookAt(playerid,2496.4970703125, -1671.1528320313, 12.275947036743);

ApplyAnimation(playerid,"POOL","POOL_Med_Shot",4.1,0,1,1,1,1,1);

    }

}

return 1;

}

public OnPlayerUpdate(playerid)

{

if(Player[playerid][sighting] == true)

{

    if(GetVectorDistance_PL(playerid,Ball[WHITE][ObjID]) < 1.6)

    {

    new key[3];

    new Float:pos[3];

    GetPlayerPos(playerid,pos[0],pos[1],pos[2]);

    GetPlayerKeys(playerid,key[0],key[1],key[2]);

    if(key[2] == KEY_LEFT && Player[playerid][selectLR] < 10)

    {

        new Float:angle;

        new Float:angXY;

GetPlayerFacingAngle(playerid,angle);

Player[playerid][selectLR]++;

pos[0] += floatsin(-angle - 90,degrees) / 20;

pos[1] += floatcos(-angle - 90,degrees) / 20;

new Float:dist = GetVectorDistance_PL(playerid,Ball[WHITE][ObjID]);

new Float:pp[3];

GetObjectPos(Ball[WHITE][ObjID],pp[0],pp[1],pp[2]);

angXY = GetVectorAngle_XY(pos[0],pos[1],pp[0],pp[1]);

if(0.9 <= dist <= 1.2)

{

pos[0] += floatsin(-angXY + 180,degrees) * 0.3;

pos[1] += floatcos(-angXY + 180,degrees) * 0.3;

}

else if(dist < 0.9)

{

pos[0] += floatsin(-angXY + 180,degrees) * 0.6;

pos[1] += floatcos(-angXY + 180,degrees) * 0.6;

}

SetPlayerPos(playerid,pos[0],pos[1],pos[2]);

SetPlayerFacingAngle(playerid,angXY - 2.2);

Player[playerid][a] = angXY - 2.2;

pos[0] += floatsin(-angXY - 10,degrees) * 0.2;

pos[1] += floatcos(-angXY - 10,degrees) * 0.2;

  SetPlayerCameraPos(playerid,pos[0],pos[1],pp[2] + 0.5);

      SetPlayerCameraLookAt(playerid,pp[0],pp[1],pp[2]);

        ApplyAnimation(playerid,"POOL","POOL_Med_Start",1,0,0,0,1,0,1);

    }

    else if(key[2] == KEY_RIGHT && Player[playerid][selectLR] > -10)

    {

        new Float:angle;

        new Float:angXY;

GetPlayerFacingAngle(playerid,angle);

pos[0] += floatsin(-angle + 90,degrees) / 20;

pos[1] += floatcos(-angle + 90,degrees) / 20;

Player[playerid][selectLR]--;

new Float:dist = GetVectorDistance_PL(playerid,Ball[WHITE][ObjID]);

new Float:pp[3];

GetObjectPos(Ball[WHITE][ObjID],pp[0],pp[1],pp[2]);

angXY = GetVectorAngle_XY(pos[0],pos[1],pp[0],pp[1]);

if(0.9 <= dist <= 1.2)

{

pos[0] += floatsin(-angXY + 180,degrees) * 0.3;

pos[1] += floatcos(-angXY + 180,degrees) * 0.3;

}

else if(dist < 0.9)

{

pos[0] += floatsin(-angXY + 180,degrees) * 0.6;

pos[1] += floatcos(-angXY + 180,degrees) * 0.6;

}

SetPlayerPos(playerid,pos[0],pos[1],pos[2]);

SetPlayerFacingAngle(playerid,angXY - 2.2);

Player[playerid][a] = angXY - 2.2;

pos[0] += floatsin(-angXY - 10,degrees) * 0.2;

pos[1] += floatcos(-angXY - 10,degrees) * 0.2;

    SetPlayerCameraPos(playerid,pos[0],pos[1],pp[2] + 0.5);

        SetPlayerCameraLookAt(playerid,pp[0],pp[1],pp[2]);

        ApplyAnimation(playerid,"POOL","POOL_Med_Start",1,0,0,0,1,0,1);

    }

    else if(key[1] == KEY_UP || key[1] == KEY_DOWN)

    {

        if(key[1] == KEY_UP && 0 < Player[playerid][selectUD] < 8)

        {

Player[playerid][selectUD]++;

if(Player[playerid][TDTimer] != 0)

        {

            KillTimer(Player[playerid][TDTimer]);

    Player[playerid][TDTimer] = 0;

        }

        TextDrawSetString(Player[playerid][T2],"Speed");

        TextDrawShowForPlayer(playerid,Player[playerid][T2]);

        new str[20];

        new length = (Player[playerid][selectUD] / 2) * 30;

        if(length == 0)

length = 15;

      format(str,sizeof(str),"%d cm~w~/s",length);

        TextDrawSetString(Player[playerid][T1],str);

        TextDrawShowForPlayer(playerid,Player[playerid][T1]);

}

        else if(key[1] == KEY_DOWN && 1 < Player[playerid][selectUD] <= 8)

  {

            Player[playerid][selectUD]--;

            if(Player[playerid][TDTimer] != 0)

        {

            KillTimer(Player[playerid][TDTimer]);

    Player[playerid][TDTimer] = 0;

        }

        TextDrawSetString(Player[playerid][T2],"Speed");

        TextDrawShowForPlayer(playerid,Player[playerid][T2]);

        new str[20];

new length = (Player[playerid][selectUD] / 2) * 30;

if(length == 0)

length = 15;

      format(str,sizeof(str),"%d cm~w~/s",length);

        TextDrawSetString(Player[playerid][T1],str);

        TextDrawShowForPlayer(playerid,Player[playerid][T1]);

      }

    }

}

    }

return 1;

}

public OnShowedTD(playerid)

{

TextDrawHideForPlayer(playerid,Player[playerid][T1]);

TextDrawHideForPlayer(playerid,Player[playerid][T2]);

Player[playerid][TDTimer] = 0;

}

stock SetObjectSpeed(sysobj, Float:speedy)

{

MoveObject(Ball[sysobj][ObjID],Ball[sysobj][x],Ball[sysobj][y],Ball[sysobj][z],speedy);

}

stock CheckAllBalls()

{

for(new i = 0; i < 16; i++)

{

    if(Ball[speed] != 0)

        return 0;

    else if(i == 15)

    {

        if(Ball[speed] == 0)

            return 1;

    }

}

return 0;

}

stock Float:GetVectorAngle(obj, obj2)

{

new Float:vector[3];

new Float:pos[6];

GetObjectPos(obj,pos[0],pos[1],pos[2]);

GetObjectPos(obj2,pos[3],pos[4],pos[5]);

vector[0] = pos[3] - pos[0];

vector[1] = pos[4] - pos[1];

vector[2] = atan(-(vector[0] / vector[1]));

if(vector[1] < 0)

    vector[2] = vector[2] >= 180 ? vector[2] - 180 : vector[2] + 180;

return vector[2];

}

stock Float:GetVectorAngle_XY(Float:fx, Float:fy, Float:tx, Float:ty)

{

new Float:vector[3];

vector[0] = tx - fx;

vector[1] = ty - fy;

vector[2] = atan(-(vector[0] / vector[1]));

if(vector[1] < 0)

    vector[2] = vector[2] >= 180 ? vector[2] - 180 : vector[2] + 180;

return vector[2];

}

stock Float:GetVectorDistance_PL(playerid, obj)

{

    new Float:pos[6];

GetPlayerPos(playerid,pos[0],pos[1],pos[2]);

GetObjectPos(obj,pos[3],pos[4],pos[5]);

return floatsqroot(floatpower(pos[3] - pos[0],2) + floatpower(pos[4] - pos[1],2) + floatpower(pos[5] - pos[2],2));

}

stock Float:GetVectorDistance_OB(obj, obj2)

{

new Float:pos[6];

GetObjectPos(obj,pos[0],pos[1],pos[2]);

GetObjectPos(obj2,pos[3],pos[4],pos[5]);

return floatsqroot(floatpower(pos[3] - pos[0],2) + floatpower(pos[4] - pos[1],2) + floatpower(pos[5] - pos[2],2));

}

stock Float:GetDistance(Float:fx, Float:fy, Float:tx, Float:ty)

{

return floatsqroot(floatpower(tx - fx,2) + floatpower(ty - fy,2));

}

stock Float:GetDistancePointToLong(Float:px,Float:py, Float:px1,Float:py1, Float:px2,Float:py2)

{

    new Float:vec[3];

vec[0] = GetDistance(px1,py1,px2,py2);

if((vec[1] = GetDistance(px,py,px1,py1)) < vec[0] && (vec[2] = GetDistance(px,py,px2,py2)) < vec[0])

{

    new Float:opt[2];

opt[0] = (vec[0] + vec[1] + vec[2]) / 2;

    opt[1] = floatsqroot(opt[0] * (opt[0] - vec[0]) * (opt[0] - vec[1]) * (opt[0] - vec[2]));

opt[1] = ((opt[1] * 2) / vec[0]);

return opt[1];

}

return 0.0;

}

stock PointInLong(Float:size, Float:px,Float:py, Float:px1,Float:py1, Float:px2,Float:py2)

{

new Float:vec[3];

vec[0] = GetDistance(px1,py1,px2,py2);

if((vec[1] = GetDistance(px,py,px1,py1)) < vec[0] && (vec[2] = GetDistance(px,py,px2,py2)) < vec[0])

{

    new Float:opt[2];

opt[0] = (vec[0] + vec[1] + vec[2]) / 2;

    opt[1] = floatsqroot(opt[0] * (opt[0] - vec[0]) * (opt[0] - vec[1]) * (opt[0] - vec[2]));

opt[1] = ((opt[1] * 2) / vec[0]) * 2;

if(opt[1] < size)

    return 1;

}

return 0;

}

stock CreatePolygon(Float:px1,Float:py1, Float:px2,Float:py2)

{

for(new i = 0; i < POLYGONS; i++)

{

    if(PolyResult[Progress] == false)

    {

PolyResult[Progress] = true;

PolyResult[Vertices] = 2;

Polygon[0][x] = px1;

Polygon[0][y] = py1;

Polygon[1][x] = px2;

Polygon[1][y] = py2;

return i;

    }

}

return 0;

}

stock ShowMessage(playerid, message1[], message2[])

{

if(Player[playerid][TDTimer] != 0)

{

    KillTimer(Player[playerid][TDTimer]);

    Player[playerid][TDTimer] = 0;

}

TextDrawHideForPlayer(playerid,Player[playerid][T1]);

    TextDrawHideForPlayer(playerid,Player[playerid][T2]);

TextDrawSetString(Player[playerid][T2],message1);

TextDrawSetString(Player[playerid][T1],message2);

TextDrawShowForPlayer(playerid,Player[playerid][T1]);

TextDrawShowForPlayer(playerid,Player[playerid][T2]);

new space;

for(new i = 0; i < strlen(message2); i++)

{

if(message2 == ' ')

    space++;

}

if(space != 0)

Player[playerid][TDTimer] = SetTimerEx("OnShowedTD",space * 3000,0,"d",playerid);

else

    Player[playerid][TDTimer] = SetTimerEx("OnShowedTD",3000,0,"d",playerid);

}

stock PointInPolygon(Float:px, Float:py, polygonid)

{

if(PolyResult[polygonid][Progress] == true)

{

for(new i = 0; i < PolyResult[polygonid][Vertices]; i++)

{

if(i == PolyResult[polygonid][Vertices] - 1)

{

    if(PointInLong(0.06,px,py,Polygon[polygonid][x],Polygon[polygonid][y],Polygon[polygonid][0][x],Polygon[polygonid][0][y]) == 1)

        return 1;

}

else

{

if(PointInLong(0.06,px,py,Polygon[polygonid][x],Polygon[polygonid][y],Polygon[polygonid][i + 1][x],Polygon[polygonid][i + 1][y]) == 1)

      return 1;

  }

}

}

return 0;

}

stock GetName(playerid)

{

new name[24];

GetPlayerName(playerid,name,24);

return name;

}

stock Release()

{

for(new i = 0; i < 20; i++)

{

    TextDrawHideForPlayer(i,Player[T1]);

    TextDrawHideForPlayer(i,Player[T2]);

    TextDrawHideForPlayer(i,Player[T3]);

    TextDrawHideForPlayer(i,Player[T4]);

    TextDrawHideForPlayer(i,Player[T5]);

    TextDrawHideForPlayer(i,Player[T6]);

    TextDrawDestroy(Player[T1]);

    TextDrawDestroy(Player[T2]);

    TextDrawDestroy(Player[T3]);

    TextDrawDestroy(Player[T4]);

    TextDrawDestroy(Player[T5]);

    TextDrawDestroy(Player[T6]);

}

if(Game[Running] == true || Game[Waiting] == true)

{

KillTimer(Game[Timer]);

KillTimer(Game[Timer2]);

for(new i = 0; i < 17; i++)

{

    DestroyObject(Ball[ObjID]);

    }

}

}[/pawn]

Puteti sa ma ajutati?Cand dau /pool start masa cade din cer la grove,as vrea ca masa sa ramana asa adica sa nu mai cada si sa fie la PD si daca ati putea sa faceti cand scrii /pool sa iti apara asa :

        ___________[Pool]__________

**/pool start,/pool join,/pool end**

[/table]

6 answers to this question

Recommended Posts

Posted

invata sa faci o comanda, uitate la celelalte comenzi din gm si refale pe ale tale.

Cum sa faci o comanda asa [pawn]if (strcmp("/pool start", cmdtext, true, 10) == 0)[pawn], Cu spatiu? la astfel de cmd treb sa faci legat.Daca gresesc sa ma corectati

 

1859311972_BANNER-GIREADAcopy-min.thumb.png.48e5e420ae2185dce5b244965a1d2601.png

 

Posted

invata sa faci o comanda, uitate la celelalte comenzi din gm si refale pe ale tale.

Cum sa faci o comanda asa [pawn]if (strcmp("/pool start", cmdtext, true, 10) == 0)[pawn], Cu spatiu? la astfel de cmd treb sa faci legat.Daca gresesc sa ma corectati

dami add gireada09

Gireada stii ca nu ai voie sa lasi id-urile de mess

i_gerb.gif
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.