[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]