Sziasztok találtam nektek a samp fórumon egy jó FS-t ami nem más mint ping pong,csak õ ugy hívja extreme pong.Ez a játék igy néz ki
lehet több játékosal,max 2,és lehet NPCvel,(virtuális npc vagyis mint ha gép ellen mennél) A parancsai /pong elkezded a játékot,vagy /pong játékos id je akkor meghivod s elfogadja õ is akkor mehetek 2-en.Ha végezni akarsz a játékal akkor nyomj egy ENTERT és kilépsz belõle.
#include <a_samp>
#include <a_http>
#define MSPERFRAME 50 //Milliseconds per frame (decreasing this makes the game more smoother, but more resource hungry and faster)
#define Release 3 //The release version
//Dialog defines
#define DIALOG_NONE 0
#define DIALOG_CHECKPONG 1
#define DIALOG_ASKING 2
#define DIALOG_BEINGASKED 3
forward GameUpdate();
forward CheckUpdate(index, response_code, data[]);
forward UpdateDialog(playerid,time);
//TextDraws
new Text:Paddles[2]; //The paddles
new Text:Background; //Black background to cover the screen
new Text:Net[4]; //The dotted line in the center
new Text:Score[2]; //The score on either side of the \'net\'
new Text:Ball; //The ball
new TextDrawsCreated; //0/1 if textdraws are created already
//Variables
new Players[2]; //Maximum of 2 players
new PaddlePositions[2]; //The Y coordinate of the paddles (starting from the top)
new BallPosition[2]; //The X,Y Coordinate of the ball
new BallVelocity[2]; //The velocity of the ball (-5 through 5, X/Y velocities)
new Bot[2]; //0/1 if player is a bot
new GameTimer;
new GameRunning;
new SoundChange;
new GameScore[2];
new pDialog[MAX_PLAYERS];
new pOpponent[MAX_PLAYERS];
new UpdateText[512];
new NewVersionAvailable;
//Functions
stock AffirmTextDraws()
{
if(TextDrawsCreated)return;
while(TextDrawCreate(0.0,0.0,\"~R~\")==Text:0)continue;
Background=TextDrawCreate(123,103,\"~r~\");
TextDrawUseBox(Background,1);
TextDrawBoxColor(Background,0x000000FF);
TextDrawTextSize(Background,520,0.0);
TextDrawLetterSize(Background,0,200*0.135);
Net[0]=TextDrawCreate(321,103,\"~r~\");
TextDrawUseBox(Net[0],1);
TextDrawBoxColor(Net[0],0xFFFFFFFF);
TextDrawTextSize(Net[0],322,0.0);
TextDrawLetterSize(Net[0],0,26.666*0.135);
Net[1]=TextDrawCreate(321,170,\"~r~\");
TextDrawUseBox(Net[1],1);
TextDrawBoxColor(Net[1],0xFFFFFFFF);
TextDrawTextSize(Net[1],322,0.0);
TextDrawLetterSize(Net[1],0,26.666*0.135);
Net[2]=TextDrawCreate(321,240,\"~r~\");
TextDrawUseBox(Net[2],1);
TextDrawBoxColor(Net[2],0xFFFFFFFF);
TextDrawTextSize(Net[2],322,0.0);
TextDrawLetterSize(Net[2],0,26.666*0.135);
Net[3]=TextDrawCreate(321,313.2,\"~r~\");
TextDrawUseBox(Net[3],1);
TextDrawBoxColor(Net[3],0xFFFFFFFF);
TextDrawTextSize(Net[3],322,0.0);
TextDrawLetterSize(Net[3],0,26.666*0.135);
Score[0]=TextDrawCreate(313,105,\"0\");
TextDrawColor(Score[0],0xFFFFFFFF);
TextDrawAlignment(Score[0],3);
TextDrawFont(Score[0],3);
TextDrawLetterSize(Score[0],0.5,15*0.135);
TextDrawSetShadow(Score[0],0);
Score[1]=TextDrawCreate(330,105,\"0\");
TextDrawColor(Score[1],0xFFFFFFFF);
TextDrawLetterSize(Score[1],0.5,15*0.135);
TextDrawFont(Score[1],3);
TextDrawSetShadow(Score[1],0);
Paddles[0]=TextDrawCreate(138,103,\"~r~\");
TextDrawUseBox(Paddles[0],1);
TextDrawBoxColor(Paddles[0],0xFFFFFFFF);
TextDrawTextSize(Paddles[0],139,0.0);
TextDrawLetterSize(Paddles[0],0,26.666*0.135);
Paddles[1]=TextDrawCreate(504,103,\"~r~\");
TextDrawUseBox(Paddles[1],1);
TextDrawBoxColor(Paddles[1],0xFFFFFFFF);
TextDrawTextSize(Paddles[1],505,0.0);
TextDrawLetterSize(Paddles[1],0,26.666*0.135);
Ball=TextDrawCreate(400,200,\"~r~\");
TextDrawUseBox(Ball,1);
TextDrawBoxColor(Ball,0xFFFFFFFF);
TextDrawTextSize(Ball,401,0.0);
TextDrawLetterSize(Ball,0,3*0.135);
TextDrawsCreated=1;
}
stock ShowPong(playerid)
{
TextDrawShowForPlayer(playerid,Paddles[0]);
TextDrawShowForPlayer(playerid,Paddles[0]);
TextDrawShowForPlayer(playerid,Paddles[1]);
TextDrawShowForPlayer(playerid,Paddles[1]);
TextDrawShowForPlayer(playerid,Background);
TextDrawShowForPlayer(playerid,Net[0]);
TextDrawShowForPlayer(playerid,Net[1]);
TextDrawShowForPlayer(playerid,Net[2]);
TextDrawShowForPlayer(playerid,Net[3]);
TextDrawShowForPlayer(playerid,Score[0]);
TextDrawShowForPlayer(playerid,Score[1]);
TextDrawShowForPlayer(playerid,Ball);
}
stock StartPong(player1,player2)
{
if(player1==INVALID_PLAYER_ID)Bot[0]=1;
else ShowPong(player1);
if(player2==INVALID_PLAYER_ID)Bot[1]=1;
else ShowPong(player2);
Players[0]=player1;
Players[1]=player2;
TogglePlayerControllable(player1,0);
TogglePlayerControllable(player2,0);
BallPosition[0]=200;
GameTimer=SetTimer(\"GameUpdate\",MSPERFRAME,1);
GameRunning=1;
AffirmTextDraws();
}
stock KillPong()
{
for(new i;i<2;i++)
{
TextDrawDestroy(Paddles);
TextDrawDestroy(Score);
}
for(new i;i<4;i++)TextDrawDestroy(Net);
TextDrawDestroy(Background);
TextDrawDestroy(Ball);
KillTimer(GameTimer);
GameScore[0]=0;
GameScore[1]=0;
TogglePlayerControllable(Players[0],1);
TogglePlayerControllable(Players[1],1);
GameRunning=0;
TextDrawsCreated=0;
}
stock PositionObjects()
{
if(TextDrawsCreated)
{
TextDrawDestroy(Paddles[0]);
TextDrawDestroy(Paddles[1]);
TextDrawDestroy(Ball);
Paddles[0]=TextDrawCreate(138,103+PaddlePositions[0],\"~r~\");
TextDrawUseBox(Paddles[0],1);
TextDrawBoxColor(Paddles[0],0xFFFFFFFF);
TextDrawTextSize(Paddles[0],139,0.0);
TextDrawLetterSize(Paddles[0],0,26.666*0.135);
Paddles[1]=TextDrawCreate(504,103+PaddlePositions[1],\"~r~\");
TextDrawUseBox(Paddles[1],1);
TextDrawBoxColor(Paddles[1],0xFFFFFFFF);
TextDrawTextSize(Paddles[1],505,0.0);
TextDrawLetterSize(Paddles[1],0,26.666*0.135);
Ball=TextDrawCreate(123+BallPosition[0],103+BallPosition[1],\"~r~\");
TextDrawUseBox(Ball,1);
TextDrawBoxColor(Ball,0xFFFFFFFF);
TextDrawTextSize(Ball,124+BallPosition[0],0.0);
TextDrawLetterSize(Ball,0,2.5*0.135);
ShowPong(Players[0]);
ShowPong(Players[1]);
}
}
stock UpdateScore()
{
new tmp[5];
format(tmp,5,\"%02d\",GameScore[0]);
TextDrawSetString(Score[0],tmp);
format(tmp,5,\"%02d\",GameScore[1]);
TextDrawSetString(Score[1],tmp);
}
//Callbacks
public OnFilterScriptInit()
{
AffirmTextDraws();
HTTP(0, HTTP_GET, \"www.joestaff.net/updates/pong.txt\", \"\", \"CheckUpdate\");
}
public OnFilterScriptExit()
{
KillPong();
}
public OnPlayerCommandText(playerid,cmdtext[])
{
if(!strcmp(cmdtext,\"/pong\",true,5))
{
if(GameRunning)return 1;
if(strlen(cmdtext)<=6)StartPong(playerid,INVALID_PLAYER_ID);
else
{
if(!IsPlayerConnected(strval(cmdtext[6])))return SendClientMessage(playerid,0xFFFFFFFF,\"That player is not online\");
if(strval(cmdtext[6])==playerid)return SendClientMessage(playerid,0xFFFFFFFF,\"You cannot invite yourself\");
StartPong(playerid,strval(cmdtext[6]));
ShowPlayerDialog(playerid,30000,DIALOG_STYLE_MSGBOX,\"Asking Permission...\",\"Asking player if he or she wants to play pong... 5 seconds remaining\",\"Cancel\",\"\");
pDialog[playerid]=DIALOG_ASKING;
pOpponent[strval(cmdtext[6])]=playerid;
pOpponent[playerid]=strval(cmdtext[6]);
ShowPlayerDialog(strval(cmdtext[6]),30000,DIALOG_STYLE_MSGBOX,\"Want to play pong?\",\"You have been asked to play pong, do you want to?\",\"Yes\",\"No\");
pDialog[strval(cmdtext[6])]=DIALOG_BEINGASKED;
SetTimerEx(\"UpdateDialog\",1000,0,\"ii\",playerid,4);
}
return 1;
}
if(!strcmp(cmdtext,\"/checkpong\",true))
{
if(NewVersionAvailable)
{
new tmp[32];
format(tmp,32,\"Release %d\",NewVersionAvailable);
ShowPlayerDialog(playerid,30000,DIALOG_STYLE_MSGBOX,tmp,UpdateText,\"Close\",\"\");
pDialog[playerid]=DIALOG_CHECKPONG;
return 1;
}
}
return 0;
}
new GlobalTemp[3];
public GameUpdate()
{
switch(BallPosition[0])
{
//Left Wall
case 0:
{
BallVelocity[0]=random(5)+3;
PlayerPlaySound(Players[0],1056,0,0,0);
BallPosition[0]=200;
GameScore[1]++;
UpdateScore();
CallLocalFunction(\"OnPlayerScore\",\"i\",1);
if(!GameRunning)return;
}
//Right Wall
case 396:
{
BallVelocity[0]=(-random(5))-3;
PlayerPlaySound(Players[0],1056,0,0,0);
BallPosition[0]=200;
GameScore[0]++;
UpdateScore();
CallLocalFunction(\"OnPlayerScore\",\"i\",0);
if(!GameRunning)return;
}
//Left Paddle
case 18:
{
if( (BallPosition[1]<=PaddlePositions[0]+40) && (BallPosition[1]>=PaddlePositions[0]-8) )
{
BallVelocity[0]=random(5)+3;
BallVelocity[1]=(((BallPosition[1]-PaddlePositions[0])-22)/4)+2;
PlayerPlaySound(Players[0],1056+SoundChange,0,0,0);
PlayerPlaySound(Players[1],1056+SoundChange,0,0,0);
if(SoundChange)SoundChange=0;
else SoundChange=1;
}
}
//Right Paddle
case 377:
{
if( (BallPosition[1]<=PaddlePositions[1]+40) && (BallPosition[1]>=PaddlePositions[1]-8) )
{
BallVelocity[0]=(-random(5))-3;
BallVelocity[1]=(((BallPosition[1]-PaddlePositions[1])-22)/4)+2;
PlayerPlaySound(Players[0],1056+SoundChange,0,0,0);
PlayerPlaySound(Players[1],1056+SoundChange,0,0,0);
if(SoundChange)SoundChange=0;
else SoundChange=1;
}
}
}
//Roof
if(BallPosition[1]==0)
{
//BallVelocity[1]=random(5)+2;
BallVelocity[1]*=-1;
PlayerPlaySound(Players[0],1056+SoundChange,0,0,0);
PlayerPlaySound(Players[0],1056+SoundChange,0,0,0);
if(SoundChange)SoundChange=0;
else SoundChange=1;
}
//Floor
if(BallPosition[1]==240)
{
//BallVelocity[1]=(-random(5))-2;
BallVelocity[1]*=-1;
PlayerPlaySound(Players[0],1056+SoundChange,0,0,0);
PlayerPlaySound(Players[0],1056+SoundChange,0,0,0);
if(SoundChange)SoundChange=0;
else SoundChange=1;
}
if(BallVelocity[1]==0)BallVelocity[1]=2*(random(1)-1);
if(BallVelocity[0]==0)BallVelocity[0]=2*(random(1)-1);
//Player 1 Controls
if(Players[0]!=INVALID_PLAYER_ID)
{
GetPlayerKeys(Players[0],GlobalTemp[0],GlobalTemp[1],GlobalTemp[2]);
if(GlobalTemp[0]==KEY_SECONDARY_ATTACK)
{
KillPong();
new tmp[32];
GetPlayerName(Players[0],tmp,32);
format(tmp,32,\"%s quit\",tmp);
SendClientMessage(Players[0],0xFFFFFFFF,tmp);
SendClientMessage(Players[1],0xFFFFFFFF,tmp);
}
if(GlobalTemp[1]==KEY_UP)PaddlePositions[0]-=3;
else if(GlobalTemp[1]==KEY_DOWN)PaddlePositions[0]+=3;
}else{
//NPC controls
if(BallPosition[1]>PaddlePositions[0]+3)PaddlePositions[0]+=3;
else PaddlePositions[0]-=3;
}
//Player 2 Controls
if(Players[1]!=INVALID_PLAYER_ID)
{
GetPlayerKeys(Players[1],GlobalTemp[0],GlobalTemp[1],GlobalTemp[2]);
if(GlobalTemp[0]==KEY_SECONDARY_ATTACK)
{
KillPong();
new tmp[32];
GetPlayerName(Players[1],tmp,32);
format(tmp,32,\"%s quit\",tmp);
SendClientMessage(Players[0],0xFFFFFFFF,tmp);
SendClientMessage(Players[1],0xFFFFFFFF,tmp);
}
if(GlobalTemp[1]==KEY_UP)PaddlePositions[1]-=3;
else if(GlobalTemp[1]==KEY_DOWN)PaddlePositions[1]+=3;
}else{
//NPC controls
if(BallPosition[1]>PaddlePositions[1]+3)PaddlePositions[1]+=3;
else PaddlePositions[1]-=3;
}
//If ball is about to hit paddle\'s X coordinate, force it
if( ((BallPosition[0]-18)+BallVelocity[0]<0) && (BallPosition[0]>18) )BallPosition[0]=18;
else if( ((BallPosition[0]-377)+BallVelocity[0]>0) && (BallPosition[0]<377) )BallPosition[0]=377;
else BallPosition[0]+=BallVelocity[0];
//Adjust Balls Y coordinate
BallPosition[1]+=BallVelocity[1];
//Ball Limits
if(BallPosition[0]<0)BallPosition[0]=0;
if(BallPosition[0]>396)BallPosition[0]=396;
if(BallPosition[1]<0)BallPosition[1]=0;
if(BallPosition[1]>240)BallPosition[1]=240;
//Paddle Limits
if(PaddlePositions[0]>210)PaddlePositions[0]=210;
if(PaddlePositions[0]<0)PaddlePositions[0]=0;
if(PaddlePositions[1]>210)PaddlePositions[1]=210;
if(PaddlePositions[1]<0)PaddlePositions[1]=0;
//Update
PositionObjects();
}
//// OnPlayerScore callback
forward OnPlayerScore(player); //Player == 0 || 1 (1 and 2)
public OnPlayerScore(player)
{
if(GameScore[player]==15) //Check to see if his score is high enough to win
{
if(Players[player]!=INVALID_PLAYER_ID) //Affirm that winner is not an NPC
{
SendClientMessage(Players[player],0xFFFFFFFF,\"You win! {00FF00}+$15\"); //Winning message
GivePlayerMoney(Players[player],15);
}
new loser;
if(player)loser=0; //Get losing player
else loser=1;
if(Players[loser]!=INVALID_PLAYER_ID) //Make sure loser is not an NPC
{
SendClientMessage(Players[loser],0xFFFFFFFF,\"You lose! {FF0000}-$15\"); //Losing message
GivePlayerMoney(Players[loser],-15);
}
KillPong(); //Be sure to kill the game
}
}
public CheckUpdate(index, response_code, data[])
{
if(response_code==200)
{
format(UpdateText,512,\"%s\",data[strfind(data,\",\")+1]);
new tmp[11];
strmid(tmp,data,0,strfind(data,\",\"));
if(strval(tmp)>Release)
{
NewVersionAvailable=strval(tmp);
print(\"A new version of Joe Staff\'s \\\"Pong\\\" is available, type \\\"/CheckPong\\\" for more info\");
printf(\"%s\",UpdateText);
}
}
}
public OnPlayerConnect(playerid)
{
if(NewVersionAvailable)SendClientMessage(playerid,0xFFFFFFFF,\"A new version of Joe Staff\'s \\\"Pong\\\" is available, type \\\"/CheckPong\\\" for more info\");
}
public UpdateDialog(playerid,time)
{
if(GameRunning)
{
for(new i;i<MAX_PLAYERS;i++)
{
if( (pDialog==DIALOG_ASKING) || (pDialog==DIALOG_BEINGASKED) )
{
ShowPlayerDialog(i,-1,-1,\"\",\"\",\"\",\"\");
SendClientMessage(i,0xFFFFFFFF,\"A game has started and you cannot play\");
}
}
return;
}
if(time==0)
{
pDialog[playerid]=DIALOG_NONE;
pDialog[pOpponent[playerid]]=DIALOG_NONE;
ShowPlayerDialog(playerid,-1,-1,\"\",\"\",\"\",\"\");
ShowPlayerDialog(pOpponent[playerid],-1,-1,\"\",\"\",\"\",\"\");
pOpponent[pOpponent[playerid]]=INVALID_PLAYER_ID;
pOpponent[playerid]=INVALID_PLAYER_ID;
return;
}
if(pOpponent[playerid]==INVALID_PLAYER_ID)return;
new tmp[64];
format(tmp,64,\"Asking player if he or she wants to play pong... %d seconds remaining\",time);
ShowPlayerDialog(playerid,30000,DIALOG_STYLE_MSGBOX,\"Asking Permission...\",tmp,\"Cancel\",\"\");
SetTimerEx(\"UpdateDialog\",1000,0,\"ii\",playerid,time-1);
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid!=30000)return 1;
switch(pDialog[playerid])
{
case DIALOG_NONE:return 1;
case DIALOG_CHECKPONG:
{
pDialog[playerid]=DIALOG_NONE;
return 1;
}
case DIALOG_ASKING:
{
ShowPlayerDialog(pOpponent[playerid],-1,-1,\"\",\"\",\"\",\"\");
pDialog[playerid]=DIALOG_NONE;
pDialog[pOpponent[playerid]]=DIALOG_NONE;
SendClientMessage(playerid,0xFFFFFFFF,\"You backed down your offer\");
SendClientMessage(pOpponent[playerid],0xFFFFFFFF,\"The offer was backed down\");
pOpponent[pOpponent[playerid]]=INVALID_PLAYER_ID;
pOpponent[playerid]=INVALID_PLAYER_ID;
return 1;
}
case DIALOG_BEINGASKED:
{
if(!response)
{
ShowPlayerDialog(pOpponent[playerid],-1,-1,\"\",\"\",\"\",\"\");
pDialog[playerid]=DIALOG_NONE;
pDialog[pOpponent[playerid]]=DIALOG_NONE;
SendClientMessage(playerid,0xFFFFFFFF,\"You declined the offer\");
SendClientMessage(pOpponent[playerid],0xFFFFFFFF,\"The offer was declined\");
pOpponent[pOpponent[playerid]]=INVALID_PLAYER_ID;
pOpponent[playerid]=INVALID_PLAYER_ID;
return 1;
}
StartPong(playerid,pOpponent[playerid]);
pDialog[playerid]=DIALOG_NONE;
pDialog[pOpponent[playerid]]=DIALOG_NONE;
pOpponent[pOpponent[playerid]]=INVALID_PLAYER_ID;
pOpponent[playerid]=INVALID_PLAYER_ID;
}
}
return 1;
}
Eredeti szerzõje ennek a FS-nek Joe Staff.Kösz hogy megnézted csõ.