• Страница 1 из 1
  • 1
Модератор форума: [east_side]_trane, drifter-dron, valych, admin  
Форум » Pawno » Уроки » pawno урок тетрис (*icon-0*)
pawno урок тетрис
adminДата: Среда, 07.09.2011, 03:58:51 | Сообщение # 1

Группа: Администраторы
Сообщений: 3869

Вот так будет у вас выглядеть тетрис.
Управления!
Кнопки - a,d и стрелки вправо в лево!
Как зайти в тетрис?
Для этого надо будет написать саму команду: /tetr .
И так начнем уроку!
В самом верху мода перед инклудами вашими вставим:
Code
#if defined PBlock_Included
    #endinput
#endif
#define PBlock_Included

После этого, после инклудов вставляем:
Code
#define DIALOG_PBLOCK  1030

#define PRESSED(%0) \
   (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))

new bool:pblock_isplaying[MAX_PLAYERS];
new bool:just_pressed_key[MAX_PLAYERS];
new player_scores[MAX_PLAYERS];

new block_table[MAX_PLAYERS][5][10];

new moving_block[MAX_PLAYERS][2];

enum
   {
   NO_BLOCK,
   RED_BLOCK,
   BLUE_BLOCK,
   LIGHTBLUE_BLOCK,
   YELLOW_BLOCK,
   PURPLE_BLOCK,
   GREEN_BLOCK,
   LIGHTGREEN_BLOCK,
   WHITE_BLOCK
   }

new pblock_timer[MAX_PLAYERS];

new Text:pblock_background,Text:pblock_background2,Text:pblock_title,
   Text:pblock_score,Text:pblock_table;

После этого ищем public OnGameModeInit() и туда вставляем:
Code
pblock_background = TextDrawCreate(228.000000, 44.000000, "_");
   TextDrawBackgroundColor(pblock_background, 255);
   TextDrawFont(pblock_background, 1);
   TextDrawLetterSize(pblock_background, 0.500000, 39.199996);
   TextDrawColor(pblock_background, -1);
   TextDrawSetOutline(pblock_background, 0);
   TextDrawSetProportional(pblock_background, 1);
   TextDrawSetShadow(pblock_background, 1);
   TextDrawUseBox(pblock_background, 1);
   TextDrawBoxColor(pblock_background, 858993493);
   TextDrawTextSize(pblock_background, 421.000000, 0.000000);

   pblock_title = TextDrawCreate(228.000000, 19.000000, "P~b~~h~~h~Block~w~ - v1.0      (~r~x~w~)");
   TextDrawBackgroundColor(pblock_title, 255);
   TextDrawFont(pblock_title, 2);
   TextDrawLetterSize(pblock_title, 0.439999, 2.099999);
   TextDrawColor(pblock_title, -1);
   TextDrawSetOutline(pblock_title, 1);
   TextDrawSetProportional(pblock_title, 1);
   TextDrawUseBox(pblock_title, 1);
   TextDrawBoxColor(pblock_title, 87875741);
   TextDrawTextSize(pblock_title, 421.000000, 0.000000);

   pblock_score = TextDrawCreate(419.000000, 379.000000, "SCORE: 1003");
   TextDrawAlignment(pblock_score, 3);
   TextDrawBackgroundColor(pblock_score, 255);
   TextDrawFont(pblock_score, 2);
   TextDrawLetterSize(pblock_score, 0.370000, 1.900001);
   TextDrawColor(pblock_score, -1);
   TextDrawSetOutline(pblock_score, 1);
   TextDrawSetProportional(pblock_score, 1);

   pblock_background2 = TextDrawCreate(244.000000, 44.000000, "_");
   TextDrawBackgroundColor(pblock_background2, 255);
   TextDrawFont(pblock_background2, 1);
   TextDrawLetterSize(pblock_background2, 0.500000, 36.999984);
   TextDrawColor(pblock_background2, -1);
   TextDrawSetOutline(pblock_background2, 0);
   TextDrawSetProportional(pblock_background2, 1);
   TextDrawSetShadow(pblock_background2, 1);
   TextDrawUseBox(pblock_background2, 1);
   TextDrawBoxColor(pblock_background2, 673720575);
   TextDrawTextSize(pblock_background2, 404.000000, 0.000000);

   pblock_table = TextDrawCreate(251.000000, 44.000000, "~w~O~b~~h~~h~O~y~O~r~O~p~O~n~OOOOO~n~OOOOO~n~OOOOO~n~OOOOO~n~OO OO~n~OOOOO~n~OOOOO~n~OOOOO~n~OOOOO");
   TextDrawBackgroundColor(pblock_table, 255);
   TextDrawFont(pblock_table, 2);
   TextDrawLetterSize(pblock_table, 1.049998, 3.699997);
   TextDrawColor(pblock_table, -1);
   TextDrawSetOutline(pblock_table, 1);
   TextDrawSetProportional(pblock_table, 0);
   if (funcidx("PBlock_OnGameModeInit") != -1)
   {
    return CallLocalFunction("PBlock_OnGameModeInit", "");
   }

Примерно так должен быть public:
Code
public OnGameModeInit()
{
   pblock_background = TextDrawCreate(228.000000, 44.000000, "_");
   TextDrawBackgroundColor(pblock_background, 255);
   TextDrawFont(pblock_background, 1);
   TextDrawLetterSize(pblock_background, 0.500000, 39.199996);
   TextDrawColor(pblock_background, -1);
   TextDrawSetOutline(pblock_background, 0);
   TextDrawSetProportional(pblock_background, 1);
   TextDrawSetShadow(pblock_background, 1);
   TextDrawUseBox(pblock_background, 1);
   TextDrawBoxColor(pblock_background, 858993493);
   TextDrawTextSize(pblock_background, 421.000000, 0.000000);

   pblock_title = TextDrawCreate(228.000000, 19.000000, "P~b~~h~~h~Block~w~ - v1.0      (~r~x~w~)");
   TextDrawBackgroundColor(pblock_title, 255);
   TextDrawFont(pblock_title, 2);
   TextDrawLetterSize(pblock_title, 0.439999, 2.099999);
   TextDrawColor(pblock_title, -1);
   TextDrawSetOutline(pblock_title, 1);
   TextDrawSetProportional(pblock_title, 1);
   TextDrawUseBox(pblock_title, 1);
   TextDrawBoxColor(pblock_title, 87875741);
   TextDrawTextSize(pblock_title, 421.000000, 0.000000);

   pblock_score = TextDrawCreate(419.000000, 379.000000, "SCORE: 1003");
   TextDrawAlignment(pblock_score, 3);
   TextDrawBackgroundColor(pblock_score, 255);
   TextDrawFont(pblock_score, 2);
   TextDrawLetterSize(pblock_score, 0.370000, 1.900001);
   TextDrawColor(pblock_score, -1);
   TextDrawSetOutline(pblock_score, 1);
   TextDrawSetProportional(pblock_score, 1);

   pblock_background2 = TextDrawCreate(244.000000, 44.000000, "_");
   TextDrawBackgroundColor(pblock_background2, 255);
   TextDrawFont(pblock_background2, 1);
   TextDrawLetterSize(pblock_background2, 0.500000, 36.999984);
   TextDrawColor(pblock_background2, -1);
   TextDrawSetOutline(pblock_background2, 0);
   TextDrawSetProportional(pblock_background2, 1);
   TextDrawSetShadow(pblock_background2, 1);
   TextDrawUseBox(pblock_background2, 1);
   TextDrawBoxColor(pblock_background2, 673720575);
   TextDrawTextSize(pblock_background2, 404.000000, 0.000000);

   pblock_table = TextDrawCreate(251.000000, 44.000000, "~w~O~b~~h~~h~O~y~O~r~O~p~O~n~OOOOO~n~OOOOO~n~OOOOO~n~OOOOO~n~OO OO~n~OOOOO~n~OOOOO~n~OOOOO~n~OOOOO");
   TextDrawBackgroundColor(pblock_table, 255);
   TextDrawFont(pblock_table, 2);
   TextDrawLetterSize(pblock_table, 1.049998, 3.699997);
   TextDrawColor(pblock_table, -1);
   TextDrawSetOutline(pblock_table, 1);
   TextDrawSetProportional(pblock_table, 0);
   if (funcidx("PBlock_OnGameModeInit") != -1)
   {
    return CallLocalFunction("PBlock_OnGameModeInit", "");
   }
   return 1;
}

Потом после этого public OnGameModeInit() вставим:
Code
#if defined _ALS_OnGameModeInit
    #undef OnGameModeInit
#else
    #define _ALS_OnGameModeInit
#endif
#define OnGameModeInit PBlock_OnGameModeInit

После этого ищем public OnPlayerDisconnect и туда вставляем:
Code
  PBlock_ExitGame(playerid);
   if (funcidx("PBlock_OnGameModeInit") != -1)
   {
    return CallLocalFunction("PBlock_OnPlayerDisconnect", "d", playerid);
   }

Примерно так должен быть public:
Code
public OnPlayerDisconnect(playerid)
{
      PBlock_ExitGame(playerid);
   if (funcidx("PBlock_OnGameModeInit") != -1)
   {
    return CallLocalFunction("PBlock_OnPlayerDisconnect", "d", playerid);
   }
   return 1;
}

так же после public OnPlayerDisconnect вставляем:
Code
#if defined _ALS_OnPlayerDisconnect
    #undef OnPlayerDisconnect
#else
    #define _ALS_OnPlayerDisconnect
#endif
#define OnPlayerDisconnect PBlock_OnPlayerDisconnect

После этого в любое место вставим:
Code
stock PBlock_Create_NewBlock(playerid)
{
   if(block_table[playerid][2][9] != NO_BLOCK)
    {
    PBlock_GameOver(playerid);
    return 0;
    }
   moving_block[playerid] = {2, 9};
   block_table[playerid][2][9] = random(WHITE_BLOCK)+1;
   PBlock_Refresh_Textdraw(playerid);
   return 1;
}

stock PBlock_StartGame(playerid)
{
      PB_PlaySound(playerid, 1076);
   TogglePlayerControllable(playerid, 0);
      player_scores[playerid] = 0;
      TextDrawSetString(pblock_score, "Score: 0");
   TextDrawShowForPlayer(playerid, pblock_background);
   TextDrawShowForPlayer(playerid, pblock_background2);
   TextDrawShowForPlayer(playerid, pblock_title);
   TextDrawShowForPlayer(playerid, pblock_score);
   TextDrawSetString(pblock_table, "");   
   TextDrawShowForPlayer(playerid, pblock_table);
   ShowPlayerDialog(playerid, DIALOG_PBLOCK, 0, "{157FFF}Т{FFCA16}етрис {C1C1C1}- v1.0", "   {C1C1C1}Добро пожаловать {157FFF}В чем это игра заключается?\nВы должны набрать как больше кубиков в стобце \n 3 квадратов одного цвета.\nУдачи!","Играть!", "Выйти");
   return 1;
}

stock PBlock_ExitGame(playerid)
{
      PB_PlaySound(playerid, 1077);
   TextDrawHideForPlayer(playerid, pblock_background);
   TextDrawHideForPlayer(playerid, pblock_background2);
   TextDrawHideForPlayer(playerid, pblock_title);
   TextDrawHideForPlayer(playerid, pblock_score);
   TextDrawSetString(pblock_table, "");   
   TextDrawHideForPlayer(playerid, pblock_table);
      KillTimer(pblock_timer[playerid]);
      pblock_isplaying[playerid] = false;
      TogglePlayerControllable(playerid, 1);
   return 1;
}

stock PBlock_GameStart(playerid)
{
   for(new i; i<5; i++)
   {
    for(new j; j<10; j++)
     {
     block_table[playerid][i][j] = NO_BLOCK;   
     }
   }
   GameTextForPlayer(playerid, "~g~~h~~h~GAME STARTS!", 3000, 1);
   PBlock_Create_NewBlock(playerid);
   pblock_isplaying[playerid] = true;
   pblock_timer[playerid] = SetTimerEx("PBlock_Fall", 1000, true, "d", playerid);
   return 1;
}

stock PBlock_GameOver(playerid)
{
   pblock_isplaying[playerid] = false;
   GameTextForPlayer(playerid, "~r~GAME OVER", 3000, 1);
   KillTimer(pblock_timer[playerid]);
      ShowPlayerDialog(playerid, DIALOG_PBLOCK, 0, "{157FFF}T{FFCA16}ETRIS {C1C1C1}- v1.0", "   {157FFF}Тэтрис\n\n{EA3E13}Вы проиграли{C1C1C1}!","Еще раз сыграть!", "Выйти");
   return 1;
}

public PBlock_Fall(playerid)
{
   if(!moving_block[playerid][1] || block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]-1] != NO_BLOCK)
       {
       PBlock_Create_NewBlock(playerid);
       PBlock_Deleting_Block(playerid);
       return 1;
       }
   PB_PlaySound(playerid, 1131);
   block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]-1] = block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]];
   block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]] = NO_BLOCK;
      moving_block[playerid][1]--;
   PBlock_Refresh_Textdraw(playerid);
   return 1;
}

stock PBlock_Refresh_Textdraw(playerid)
{
   new text_string[580];
   for(new p_y = 9; p_y >= 0; p_y--)
    {
    for(new p_x; p_x < 5; p_x++)
        {
        switch(block_table[playerid][p_x][p_y])
            {
            case NO_BLOCK: strins(text_string, " ", strlen(text_string), 580);
            case RED_BLOCK: strins(text_string, "~r~~h~O", strlen(text_string), 580);
            case BLUE_BLOCK: strins(text_string, "~b~~h~O", strlen(text_string), 580);
            case LIGHTBLUE_BLOCK: strins(text_string, "~b~~h~~h~O", strlen(text_string), 580);
            case YELLOW_BLOCK: strins(text_string, "~y~O", strlen(text_string), 580);
            case PURPLE_BLOCK: strins(text_string, "~p~O", strlen(text_string), 580);
            case GREEN_BLOCK: strins(text_string, "~g~O", strlen(text_string), 580);
            case LIGHTGREEN_BLOCK: strins(text_string, "~g~~h~~h~O", strlen(text_string), 580);
            case WHITE_BLOCK: strins(text_string, "~w~O", strlen(text_string), 580);
            }
     if(p_x == 4)
         {
         strins(text_string, "~n~", strlen(text_string), 580);
         }
        }
    }
   TextDrawSetString(pblock_table, text_string);
   TextDrawShowForPlayer(playerid,pblock_table);
   return 1;
}

stock PBlock_Deleting_Block(playerid)
{
   enum info_check {last_block_type, amount};
   new pblock_check[info_check];
   new score_string[50];
   for(new p_x; p_x < 5; p_x++)
       {
       for(new p_y; p_y < 10; p_y++)
        {
     if(!p_y)
         {
         pblock_check[last_block_type] = block_table[playerid][p_x][p_y];
         pblock_check[amount] = 1;
         continue;
         }
     if(block_table[playerid][p_x][p_y] == pblock_check[last_block_type])
         {
         pblock_check[amount]++;
         continue;
         }
     else if(block_table[playerid][p_x][p_y] != pblock_check[last_block_type])
         {
         if(pblock_check[amount] >= 3 && pblock_check[last_block_type]!= NO_BLOCK) // Why >= 3? Because I'm developing another version where it will check also rows (not only column as now). For now checking if it is >3 is useless.
          {
       player_scores[playerid]++;
       format(score_string, sizeof(score_string), "Score: %d", player_scores[playerid]);
       TextDrawSetString(pblock_score, score_string);
       TextDrawShowForPlayer(playerid, pblock_score);
       PB_PlaySound(playerid, 1057);
          for(new pb_del = p_y - pblock_check[amount]; pb_del < p_y; pb_del++)
              {
              block_table[playerid][p_x][pb_del] = NO_BLOCK;
              }
       }
      pblock_check[amount] = 1;
         }
        }
    }
   PBlock_Refresh_Textdraw(playerid);
   return 1;
}

И ищем public OnDialogResponse и туда вставим:
Code
if(dialogid == DIALOG_PBLOCK)
      {
      if(!response)
          {
          PBlock_ExitGame(playerid);
          return 1;
          }
   PBlock_GameStart(playerid);
   return 1;
      }
  if (funcidx("PBlock_OnDialogResponse") != -1)
  {
   return CallLocalFunction("PBlock_OnDialogResponse", "dddds", playerid, dialogid, response, listitem, inputtext);
  }

Примерно так должен быть public:
Code
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
  if(dialogid == DIALOG_PBLOCK)
      {
      if(!response)
          {
          PBlock_ExitGame(playerid);
          return 1;
          }
   PBlock_GameStart(playerid);
   return 1;
      }
  if (funcidx("PBlock_OnDialogResponse") != -1)
  {
   return CallLocalFunction("PBlock_OnDialogResponse", "dddds", playerid, dialogid, response, listitem, inputtext);
  }
  return 1;
}

И сразу после public OnDialogResponse добавьте:
Code
#if defined _ALS_OnDialogResponse
   #undef OnDialogResponse
#else
   #define _ALS_OnDialogResponse
#endif
#define OnDialogResponse PBlock_OnDialogResponse

И потом добавляем public OnPlayerUpdate в любое место:
Code
public OnPlayerUpdate(playerid)
{
  new pb_keys, pb_updown, pb_leftright;
  GetPlayerKeys(playerid, pb_keys, pb_updown, pb_leftright);
  if(pb_leftright == 128 || pb_leftright == -128)
      {
      OnPlayerKeyStateChange(playerid, pb_leftright, 0);
      }
  if (funcidx("PBlock_OnPlayerUpdate") != -1)
  {
   return CallLocalFunction("PBlock_OnPlayerUpdate", "d", playerid);
  }
  return 1;
}

#if defined _ALS_OnPlayerUpdate
   #undef OnPlayerUpdate
#else
   #define _ALS_OnPlayerUpdate
#endif
#define OnPlayerUpdate PBlock_OnPlayerUpdate

После этого ищем public OnPlayerKeyStateChange и туда добавляем:
Code
    if(just_pressed_key[playerid]) return 1;  
  if(pblock_isplaying[playerid])
      {
      if(PRESSED(KEY_LEFT))
          {
          if(!moving_block[playerid][0] || block_table[playerid][moving_block[playerid][0]-1][moving_block[playerid][1]] != NO_BLOCK) return 1;
             PB_PlaySound(playerid, 1131);
    block_table[playerid][moving_block[playerid][0]-1][moving_block[playerid][1]] = block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]];
    block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]] = NO_BLOCK;
    moving_block[playerid][0]--;
    PBlock_Refresh_Textdraw(playerid);
    just_pressed_key[playerid] = true;
    SetTimerEx("Remove_JustPressed", 300, false, "d", playerid);
    return 1;
    }
      if(PRESSED(KEY_RIGHT))
          {
          if(moving_block[playerid][0] == 4 || block_table[playerid][moving_block[playerid][0]+1][moving_block[playerid][1]] != NO_BLOCK) return 1;
             PB_PlaySound(playerid, 1131);
    block_table[playerid][moving_block[playerid][0]+1][moving_block[playerid][1]] = block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]];
    block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]] = NO_BLOCK;
    moving_block[playerid][0]++;
    PBlock_Refresh_Textdraw(playerid);
    just_pressed_key[playerid] = true;
    SetTimerEx("Remove_JustPressed", 300, false, "d", playerid);
    return 1;
    }
      }
  if (funcidx("PBlock_OnPlayerKeyStateChange") != -1)
  {
   return CallLocalFunction("PBlock_OnPlayerKeyStateChange", "ddd", playerid, newkeys, oldkeys);
  }

Примерно так должен быть public:
Code
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
  if(just_pressed_key[playerid]) return 1;  
  if(pblock_isplaying[playerid])
      {
      if(PRESSED(KEY_LEFT))
          {
          if(!moving_block[playerid][0] || block_table[playerid][moving_block[playerid][0]-1][moving_block[playerid][1]] != NO_BLOCK) return 1;
             PB_PlaySound(playerid, 1131);
    block_table[playerid][moving_block[playerid][0]-1][moving_block[playerid][1]] = block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]];
    block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]] = NO_BLOCK;
    moving_block[playerid][0]--;
    PBlock_Refresh_Textdraw(playerid);
    just_pressed_key[playerid] = true;
    SetTimerEx("Remove_JustPressed", 300, false, "d", playerid);
    return 1;
    }
      if(PRESSED(KEY_RIGHT))
          {
          if(moving_block[playerid][0] == 4 || block_table[playerid][moving_block[playerid][0]+1][moving_block[playerid][1]] != NO_BLOCK) return 1;
             PB_PlaySound(playerid, 1131);
    block_table[playerid][moving_block[playerid][0]+1][moving_block[playerid][1]] = block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]];
    block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]] = NO_BLOCK;
    moving_block[playerid][0]++;
    PBlock_Refresh_Textdraw(playerid);
    just_pressed_key[playerid] = true;
    SetTimerEx("Remove_JustPressed", 300, false, "d", playerid);
    return 1;
    }
      }
  if (funcidx("PBlock_OnPlayerKeyStateChange") != -1)
  {
   return CallLocalFunction("PBlock_OnPlayerKeyStateChange", "ddd", playerid, newkeys, oldkeys);
  }
  return 1;
}

#if defined _ALS_OnPlayerKeyStateChange
   #undef OnPlayerKeyStateChange
#else
   #define _ALS_OnPlayerKeyStateChange
#endif
#define OnPlayerKeyStateChange PBlock_OnPlayerKeyStateChange

После этого ищем public OnPlayerCommandText и туда вставляем:
Code
    if (strcmp("/tetr", cmdtext, true, 10) == 0)
  {
   PB_PlaySound(playerid, 1076);
  TogglePlayerControllable(playerid, 0);
     player_scores[playerid] = 0;
     TextDrawSetString(pblock_score, "Score: 0");
  TextDrawShowForPlayer(playerid, pblock_background);
  TextDrawShowForPlayer(playerid, pblock_background2);
  TextDrawShowForPlayer(playerid, pblock_title);
  TextDrawShowForPlayer(playerid, pblock_score);
  TextDrawSetString(pblock_table, "");
  TextDrawShowForPlayer(playerid, pblock_table);
  ShowPlayerDialog(playerid, DIALOG_PBLOCK, 0, "{157FFF}Т{FFCA16}етрис {C1C1C1}- v1.0", "   {C1C1C1}Добро пожаловать {157FFF}В чем это игра заключается?\nВы должны набрать как больше кубиков в стобце \n 3 квадратов одного цвета.\nУдачи!","Играть!", "Выйти");
  return 1;
  }

Примерно так должен быть public:
Code
public OnPlayerCommandText(playerid, cmdtext[])
{
  if (strcmp("/tetr", cmdtext, true, 10) == 0)
  {
   PB_PlaySound(playerid, 1076);
  TogglePlayerControllable(playerid, 0);
     player_scores[playerid] = 0;
     TextDrawSetString(pblock_score, "Score: 0");
  TextDrawShowForPlayer(playerid, pblock_background);
  TextDrawShowForPlayer(playerid, pblock_background2);
  TextDrawShowForPlayer(playerid, pblock_title);
  TextDrawShowForPlayer(playerid, pblock_score);
  TextDrawSetString(pblock_table, "");
  TextDrawShowForPlayer(playerid, pblock_table);
  ShowPlayerDialog(playerid, DIALOG_PBLOCK, 0, "{157FFF}Т{FFCA16}етрис {C1C1C1}- v1.0", "   {C1C1C1}Добро пожаловать {157FFF}В чем это игра заключается?\nВы должны набрать как больше кубиков в стобце \n 3 квадратов одного цвета.\nУдачи!","Играть!", "Выйти");
  return 1;
  }
  return 0;
}

Потом в любое место вставляем функции:
Code
public Remove_JustPressed(playerid)
{
     just_pressed_key[playerid] = false;
     return 1;
}

stock PB_PlaySound(playerid, soundid)
{
  new Float:pb_xpos, Float:pb_ypos, Float:pb_zpos;
  GetPlayerPos(playerid, pb_xpos, pb_ypos, pb_zpos);
  PlayerPlaySound(playerid, soundid, pb_xpos, pb_ypos, pb_zpos);
  return 1;
}

Автор тетриса - Phanto90
Урок by - 26_RUSSS


zm-jail.ru

Разработка сайта samp-pawno.ru


 
Сообщение
Вот так будет у вас выглядеть тетрис.
Управления!
Кнопки - a,d и стрелки вправо в лево!
Как зайти в тетрис?
Для этого надо будет написать саму команду: /tetr .
И так начнем уроку!
В самом верху мода перед инклудами вашими вставим:
Code
#if defined PBlock_Included
    #endinput
#endif
#define PBlock_Included

После этого, после инклудов вставляем:
Code
#define DIALOG_PBLOCK  1030

#define PRESSED(%0) \
   (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))

new bool:pblock_isplaying[MAX_PLAYERS];
new bool:just_pressed_key[MAX_PLAYERS];
new player_scores[MAX_PLAYERS];

new block_table[MAX_PLAYERS][5][10];

new moving_block[MAX_PLAYERS][2];

enum
   {
   NO_BLOCK,
   RED_BLOCK,
   BLUE_BLOCK,
   LIGHTBLUE_BLOCK,
   YELLOW_BLOCK,
   PURPLE_BLOCK,
   GREEN_BLOCK,
   LIGHTGREEN_BLOCK,
   WHITE_BLOCK
   }

new pblock_timer[MAX_PLAYERS];

new Text:pblock_background,Text:pblock_background2,Text:pblock_title,
   Text:pblock_score,Text:pblock_table;

После этого ищем public OnGameModeInit() и туда вставляем:
Code
pblock_background = TextDrawCreate(228.000000, 44.000000, "_");
   TextDrawBackgroundColor(pblock_background, 255);
   TextDrawFont(pblock_background, 1);
   TextDrawLetterSize(pblock_background, 0.500000, 39.199996);
   TextDrawColor(pblock_background, -1);
   TextDrawSetOutline(pblock_background, 0);
   TextDrawSetProportional(pblock_background, 1);
   TextDrawSetShadow(pblock_background, 1);
   TextDrawUseBox(pblock_background, 1);
   TextDrawBoxColor(pblock_background, 858993493);
   TextDrawTextSize(pblock_background, 421.000000, 0.000000);

   pblock_title = TextDrawCreate(228.000000, 19.000000, "P~b~~h~~h~Block~w~ - v1.0      (~r~x~w~)");
   TextDrawBackgroundColor(pblock_title, 255);
   TextDrawFont(pblock_title, 2);
   TextDrawLetterSize(pblock_title, 0.439999, 2.099999);
   TextDrawColor(pblock_title, -1);
   TextDrawSetOutline(pblock_title, 1);
   TextDrawSetProportional(pblock_title, 1);
   TextDrawUseBox(pblock_title, 1);
   TextDrawBoxColor(pblock_title, 87875741);
   TextDrawTextSize(pblock_title, 421.000000, 0.000000);

   pblock_score = TextDrawCreate(419.000000, 379.000000, "SCORE: 1003");
   TextDrawAlignment(pblock_score, 3);
   TextDrawBackgroundColor(pblock_score, 255);
   TextDrawFont(pblock_score, 2);
   TextDrawLetterSize(pblock_score, 0.370000, 1.900001);
   TextDrawColor(pblock_score, -1);
   TextDrawSetOutline(pblock_score, 1);
   TextDrawSetProportional(pblock_score, 1);

   pblock_background2 = TextDrawCreate(244.000000, 44.000000, "_");
   TextDrawBackgroundColor(pblock_background2, 255);
   TextDrawFont(pblock_background2, 1);
   TextDrawLetterSize(pblock_background2, 0.500000, 36.999984);
   TextDrawColor(pblock_background2, -1);
   TextDrawSetOutline(pblock_background2, 0);
   TextDrawSetProportional(pblock_background2, 1);
   TextDrawSetShadow(pblock_background2, 1);
   TextDrawUseBox(pblock_background2, 1);
   TextDrawBoxColor(pblock_background2, 673720575);
   TextDrawTextSize(pblock_background2, 404.000000, 0.000000);

   pblock_table = TextDrawCreate(251.000000, 44.000000, "~w~O~b~~h~~h~O~y~O~r~O~p~O~n~OOOOO~n~OOOOO~n~OOOOO~n~OOOOO~n~OO OO~n~OOOOO~n~OOOOO~n~OOOOO~n~OOOOO");
   TextDrawBackgroundColor(pblock_table, 255);
   TextDrawFont(pblock_table, 2);
   TextDrawLetterSize(pblock_table, 1.049998, 3.699997);
   TextDrawColor(pblock_table, -1);
   TextDrawSetOutline(pblock_table, 1);
   TextDrawSetProportional(pblock_table, 0);
   if (funcidx("PBlock_OnGameModeInit") != -1)
   {
    return CallLocalFunction("PBlock_OnGameModeInit", "");
   }

Примерно так должен быть public:
Code
public OnGameModeInit()
{
   pblock_background = TextDrawCreate(228.000000, 44.000000, "_");
   TextDrawBackgroundColor(pblock_background, 255);
   TextDrawFont(pblock_background, 1);
   TextDrawLetterSize(pblock_background, 0.500000, 39.199996);
   TextDrawColor(pblock_background, -1);
   TextDrawSetOutline(pblock_background, 0);
   TextDrawSetProportional(pblock_background, 1);
   TextDrawSetShadow(pblock_background, 1);
   TextDrawUseBox(pblock_background, 1);
   TextDrawBoxColor(pblock_background, 858993493);
   TextDrawTextSize(pblock_background, 421.000000, 0.000000);

   pblock_title = TextDrawCreate(228.000000, 19.000000, "P~b~~h~~h~Block~w~ - v1.0      (~r~x~w~)");
   TextDrawBackgroundColor(pblock_title, 255);
   TextDrawFont(pblock_title, 2);
   TextDrawLetterSize(pblock_title, 0.439999, 2.099999);
   TextDrawColor(pblock_title, -1);
   TextDrawSetOutline(pblock_title, 1);
   TextDrawSetProportional(pblock_title, 1);
   TextDrawUseBox(pblock_title, 1);
   TextDrawBoxColor(pblock_title, 87875741);
   TextDrawTextSize(pblock_title, 421.000000, 0.000000);

   pblock_score = TextDrawCreate(419.000000, 379.000000, "SCORE: 1003");
   TextDrawAlignment(pblock_score, 3);
   TextDrawBackgroundColor(pblock_score, 255);
   TextDrawFont(pblock_score, 2);
   TextDrawLetterSize(pblock_score, 0.370000, 1.900001);
   TextDrawColor(pblock_score, -1);
   TextDrawSetOutline(pblock_score, 1);
   TextDrawSetProportional(pblock_score, 1);

   pblock_background2 = TextDrawCreate(244.000000, 44.000000, "_");
   TextDrawBackgroundColor(pblock_background2, 255);
   TextDrawFont(pblock_background2, 1);
   TextDrawLetterSize(pblock_background2, 0.500000, 36.999984);
   TextDrawColor(pblock_background2, -1);
   TextDrawSetOutline(pblock_background2, 0);
   TextDrawSetProportional(pblock_background2, 1);
   TextDrawSetShadow(pblock_background2, 1);
   TextDrawUseBox(pblock_background2, 1);
   TextDrawBoxColor(pblock_background2, 673720575);
   TextDrawTextSize(pblock_background2, 404.000000, 0.000000);

   pblock_table = TextDrawCreate(251.000000, 44.000000, "~w~O~b~~h~~h~O~y~O~r~O~p~O~n~OOOOO~n~OOOOO~n~OOOOO~n~OOOOO~n~OO OO~n~OOOOO~n~OOOOO~n~OOOOO~n~OOOOO");
   TextDrawBackgroundColor(pblock_table, 255);
   TextDrawFont(pblock_table, 2);
   TextDrawLetterSize(pblock_table, 1.049998, 3.699997);
   TextDrawColor(pblock_table, -1);
   TextDrawSetOutline(pblock_table, 1);
   TextDrawSetProportional(pblock_table, 0);
   if (funcidx("PBlock_OnGameModeInit") != -1)
   {
    return CallLocalFunction("PBlock_OnGameModeInit", "");
   }
   return 1;
}

Потом после этого public OnGameModeInit() вставим:
Code
#if defined _ALS_OnGameModeInit
    #undef OnGameModeInit
#else
    #define _ALS_OnGameModeInit
#endif
#define OnGameModeInit PBlock_OnGameModeInit

После этого ищем public OnPlayerDisconnect и туда вставляем:
Code
  PBlock_ExitGame(playerid);
   if (funcidx("PBlock_OnGameModeInit") != -1)
   {
    return CallLocalFunction("PBlock_OnPlayerDisconnect", "d", playerid);
   }

Примерно так должен быть public:
Code
public OnPlayerDisconnect(playerid)
{
      PBlock_ExitGame(playerid);
   if (funcidx("PBlock_OnGameModeInit") != -1)
   {
    return CallLocalFunction("PBlock_OnPlayerDisconnect", "d", playerid);
   }
   return 1;
}

так же после public OnPlayerDisconnect вставляем:
Code
#if defined _ALS_OnPlayerDisconnect
    #undef OnPlayerDisconnect
#else
    #define _ALS_OnPlayerDisconnect
#endif
#define OnPlayerDisconnect PBlock_OnPlayerDisconnect

После этого в любое место вставим:
Code
stock PBlock_Create_NewBlock(playerid)
{
   if(block_table[playerid][2][9] != NO_BLOCK)
    {
    PBlock_GameOver(playerid);
    return 0;
    }
   moving_block[playerid] = {2, 9};
   block_table[playerid][2][9] = random(WHITE_BLOCK)+1;
   PBlock_Refresh_Textdraw(playerid);
   return 1;
}

stock PBlock_StartGame(playerid)
{
      PB_PlaySound(playerid, 1076);
   TogglePlayerControllable(playerid, 0);
      player_scores[playerid] = 0;
      TextDrawSetString(pblock_score, "Score: 0");
   TextDrawShowForPlayer(playerid, pblock_background);
   TextDrawShowForPlayer(playerid, pblock_background2);
   TextDrawShowForPlayer(playerid, pblock_title);
   TextDrawShowForPlayer(playerid, pblock_score);
   TextDrawSetString(pblock_table, "");   
   TextDrawShowForPlayer(playerid, pblock_table);
   ShowPlayerDialog(playerid, DIALOG_PBLOCK, 0, "{157FFF}Т{FFCA16}етрис {C1C1C1}- v1.0", "   {C1C1C1}Добро пожаловать {157FFF}В чем это игра заключается?\nВы должны набрать как больше кубиков в стобце \n 3 квадратов одного цвета.\nУдачи!","Играть!", "Выйти");
   return 1;
}

stock PBlock_ExitGame(playerid)
{
      PB_PlaySound(playerid, 1077);
   TextDrawHideForPlayer(playerid, pblock_background);
   TextDrawHideForPlayer(playerid, pblock_background2);
   TextDrawHideForPlayer(playerid, pblock_title);
   TextDrawHideForPlayer(playerid, pblock_score);
   TextDrawSetString(pblock_table, "");   
   TextDrawHideForPlayer(playerid, pblock_table);
      KillTimer(pblock_timer[playerid]);
      pblock_isplaying[playerid] = false;
      TogglePlayerControllable(playerid, 1);
   return 1;
}

stock PBlock_GameStart(playerid)
{
   for(new i; i<5; i++)
   {
    for(new j; j<10; j++)
     {
     block_table[playerid][i][j] = NO_BLOCK;   
     }
   }
   GameTextForPlayer(playerid, "~g~~h~~h~GAME STARTS!", 3000, 1);
   PBlock_Create_NewBlock(playerid);
   pblock_isplaying[playerid] = true;
   pblock_timer[playerid] = SetTimerEx("PBlock_Fall", 1000, true, "d", playerid);
   return 1;
}

stock PBlock_GameOver(playerid)
{
   pblock_isplaying[playerid] = false;
   GameTextForPlayer(playerid, "~r~GAME OVER", 3000, 1);
   KillTimer(pblock_timer[playerid]);
      ShowPlayerDialog(playerid, DIALOG_PBLOCK, 0, "{157FFF}T{FFCA16}ETRIS {C1C1C1}- v1.0", "   {157FFF}Тэтрис\n\n{EA3E13}Вы проиграли{C1C1C1}!","Еще раз сыграть!", "Выйти");
   return 1;
}

public PBlock_Fall(playerid)
{
   if(!moving_block[playerid][1] || block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]-1] != NO_BLOCK)
       {
       PBlock_Create_NewBlock(playerid);
       PBlock_Deleting_Block(playerid);
       return 1;
       }
   PB_PlaySound(playerid, 1131);
   block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]-1] = block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]];
   block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]] = NO_BLOCK;
      moving_block[playerid][1]--;
   PBlock_Refresh_Textdraw(playerid);
   return 1;
}

stock PBlock_Refresh_Textdraw(playerid)
{
   new text_string[580];
   for(new p_y = 9; p_y >= 0; p_y--)
    {
    for(new p_x; p_x < 5; p_x++)
        {
        switch(block_table[playerid][p_x][p_y])
            {
            case NO_BLOCK: strins(text_string, " ", strlen(text_string), 580);
            case RED_BLOCK: strins(text_string, "~r~~h~O", strlen(text_string), 580);
            case BLUE_BLOCK: strins(text_string, "~b~~h~O", strlen(text_string), 580);
            case LIGHTBLUE_BLOCK: strins(text_string, "~b~~h~~h~O", strlen(text_string), 580);
            case YELLOW_BLOCK: strins(text_string, "~y~O", strlen(text_string), 580);
            case PURPLE_BLOCK: strins(text_string, "~p~O", strlen(text_string), 580);
            case GREEN_BLOCK: strins(text_string, "~g~O", strlen(text_string), 580);
            case LIGHTGREEN_BLOCK: strins(text_string, "~g~~h~~h~O", strlen(text_string), 580);
            case WHITE_BLOCK: strins(text_string, "~w~O", strlen(text_string), 580);
            }
     if(p_x == 4)
         {
         strins(text_string, "~n~", strlen(text_string), 580);
         }
        }
    }
   TextDrawSetString(pblock_table, text_string);
   TextDrawShowForPlayer(playerid,pblock_table);
   return 1;
}

stock PBlock_Deleting_Block(playerid)
{
   enum info_check {last_block_type, amount};
   new pblock_check[info_check];
   new score_string[50];
   for(new p_x; p_x < 5; p_x++)
       {
       for(new p_y; p_y < 10; p_y++)
        {
     if(!p_y)
         {
         pblock_check[last_block_type] = block_table[playerid][p_x][p_y];
         pblock_check[amount] = 1;
         continue;
         }
     if(block_table[playerid][p_x][p_y] == pblock_check[last_block_type])
         {
         pblock_check[amount]++;
         continue;
         }
     else if(block_table[playerid][p_x][p_y] != pblock_check[last_block_type])
         {
         if(pblock_check[amount] >= 3 && pblock_check[last_block_type]!= NO_BLOCK) // Why >= 3? Because I'm developing another version where it will check also rows (not only column as now). For now checking if it is >3 is useless.
          {
       player_scores[playerid]++;
       format(score_string, sizeof(score_string), "Score: %d", player_scores[playerid]);
       TextDrawSetString(pblock_score, score_string);
       TextDrawShowForPlayer(playerid, pblock_score);
       PB_PlaySound(playerid, 1057);
          for(new pb_del = p_y - pblock_check[amount]; pb_del < p_y; pb_del++)
              {
              block_table[playerid][p_x][pb_del] = NO_BLOCK;
              }
       }
      pblock_check[amount] = 1;
         }
        }
    }
   PBlock_Refresh_Textdraw(playerid);
   return 1;
}

И ищем public OnDialogResponse и туда вставим:
Code
if(dialogid == DIALOG_PBLOCK)
      {
      if(!response)
          {
          PBlock_ExitGame(playerid);
          return 1;
          }
   PBlock_GameStart(playerid);
   return 1;
      }
  if (funcidx("PBlock_OnDialogResponse") != -1)
  {
   return CallLocalFunction("PBlock_OnDialogResponse", "dddds", playerid, dialogid, response, listitem, inputtext);
  }

Примерно так должен быть public:
Code
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
  if(dialogid == DIALOG_PBLOCK)
      {
      if(!response)
          {
          PBlock_ExitGame(playerid);
          return 1;
          }
   PBlock_GameStart(playerid);
   return 1;
      }
  if (funcidx("PBlock_OnDialogResponse") != -1)
  {
   return CallLocalFunction("PBlock_OnDialogResponse", "dddds", playerid, dialogid, response, listitem, inputtext);
  }
  return 1;
}

И сразу после public OnDialogResponse добавьте:
Code
#if defined _ALS_OnDialogResponse
   #undef OnDialogResponse
#else
   #define _ALS_OnDialogResponse
#endif
#define OnDialogResponse PBlock_OnDialogResponse

И потом добавляем public OnPlayerUpdate в любое место:
Code
public OnPlayerUpdate(playerid)
{
  new pb_keys, pb_updown, pb_leftright;
  GetPlayerKeys(playerid, pb_keys, pb_updown, pb_leftright);
  if(pb_leftright == 128 || pb_leftright == -128)
      {
      OnPlayerKeyStateChange(playerid, pb_leftright, 0);
      }
  if (funcidx("PBlock_OnPlayerUpdate") != -1)
  {
   return CallLocalFunction("PBlock_OnPlayerUpdate", "d", playerid);
  }
  return 1;
}

#if defined _ALS_OnPlayerUpdate
   #undef OnPlayerUpdate
#else
   #define _ALS_OnPlayerUpdate
#endif
#define OnPlayerUpdate PBlock_OnPlayerUpdate

После этого ищем public OnPlayerKeyStateChange и туда добавляем:
Code
    if(just_pressed_key[playerid]) return 1;  
  if(pblock_isplaying[playerid])
      {
      if(PRESSED(KEY_LEFT))
          {
          if(!moving_block[playerid][0] || block_table[playerid][moving_block[playerid][0]-1][moving_block[playerid][1]] != NO_BLOCK) return 1;
             PB_PlaySound(playerid, 1131);
    block_table[playerid][moving_block[playerid][0]-1][moving_block[playerid][1]] = block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]];
    block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]] = NO_BLOCK;
    moving_block[playerid][0]--;
    PBlock_Refresh_Textdraw(playerid);
    just_pressed_key[playerid] = true;
    SetTimerEx("Remove_JustPressed", 300, false, "d", playerid);
    return 1;
    }
      if(PRESSED(KEY_RIGHT))
          {
          if(moving_block[playerid][0] == 4 || block_table[playerid][moving_block[playerid][0]+1][moving_block[playerid][1]] != NO_BLOCK) return 1;
             PB_PlaySound(playerid, 1131);
    block_table[playerid][moving_block[playerid][0]+1][moving_block[playerid][1]] = block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]];
    block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]] = NO_BLOCK;
    moving_block[playerid][0]++;
    PBlock_Refresh_Textdraw(playerid);
    just_pressed_key[playerid] = true;
    SetTimerEx("Remove_JustPressed", 300, false, "d", playerid);
    return 1;
    }
      }
  if (funcidx("PBlock_OnPlayerKeyStateChange") != -1)
  {
   return CallLocalFunction("PBlock_OnPlayerKeyStateChange", "ddd", playerid, newkeys, oldkeys);
  }

Примерно так должен быть public:
Code
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
  if(just_pressed_key[playerid]) return 1;  
  if(pblock_isplaying[playerid])
      {
      if(PRESSED(KEY_LEFT))
          {
          if(!moving_block[playerid][0] || block_table[playerid][moving_block[playerid][0]-1][moving_block[playerid][1]] != NO_BLOCK) return 1;
             PB_PlaySound(playerid, 1131);
    block_table[playerid][moving_block[playerid][0]-1][moving_block[playerid][1]] = block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]];
    block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]] = NO_BLOCK;
    moving_block[playerid][0]--;
    PBlock_Refresh_Textdraw(playerid);
    just_pressed_key[playerid] = true;
    SetTimerEx("Remove_JustPressed", 300, false, "d", playerid);
    return 1;
    }
      if(PRESSED(KEY_RIGHT))
          {
          if(moving_block[playerid][0] == 4 || block_table[playerid][moving_block[playerid][0]+1][moving_block[playerid][1]] != NO_BLOCK) return 1;
             PB_PlaySound(playerid, 1131);
    block_table[playerid][moving_block[playerid][0]+1][moving_block[playerid][1]] = block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]];
    block_table[playerid][moving_block[playerid][0]][moving_block[playerid][1]] = NO_BLOCK;
    moving_block[playerid][0]++;
    PBlock_Refresh_Textdraw(playerid);
    just_pressed_key[playerid] = true;
    SetTimerEx("Remove_JustPressed", 300, false, "d", playerid);
    return 1;
    }
      }
  if (funcidx("PBlock_OnPlayerKeyStateChange") != -1)
  {
   return CallLocalFunction("PBlock_OnPlayerKeyStateChange", "ddd", playerid, newkeys, oldkeys);
  }
  return 1;
}

#if defined _ALS_OnPlayerKeyStateChange
   #undef OnPlayerKeyStateChange
#else
   #define _ALS_OnPlayerKeyStateChange
#endif
#define OnPlayerKeyStateChange PBlock_OnPlayerKeyStateChange

После этого ищем public OnPlayerCommandText и туда вставляем:
Code
    if (strcmp("/tetr", cmdtext, true, 10) == 0)
  {
   PB_PlaySound(playerid, 1076);
  TogglePlayerControllable(playerid, 0);
     player_scores[playerid] = 0;
     TextDrawSetString(pblock_score, "Score: 0");
  TextDrawShowForPlayer(playerid, pblock_background);
  TextDrawShowForPlayer(playerid, pblock_background2);
  TextDrawShowForPlayer(playerid, pblock_title);
  TextDrawShowForPlayer(playerid, pblock_score);
  TextDrawSetString(pblock_table, "");
  TextDrawShowForPlayer(playerid, pblock_table);
  ShowPlayerDialog(playerid, DIALOG_PBLOCK, 0, "{157FFF}Т{FFCA16}етрис {C1C1C1}- v1.0", "   {C1C1C1}Добро пожаловать {157FFF}В чем это игра заключается?\nВы должны набрать как больше кубиков в стобце \n 3 квадратов одного цвета.\nУдачи!","Играть!", "Выйти");
  return 1;
  }

Примерно так должен быть public:
Code
public OnPlayerCommandText(playerid, cmdtext[])
{
  if (strcmp("/tetr", cmdtext, true, 10) == 0)
  {
   PB_PlaySound(playerid, 1076);
  TogglePlayerControllable(playerid, 0);
     player_scores[playerid] = 0;
     TextDrawSetString(pblock_score, "Score: 0");
  TextDrawShowForPlayer(playerid, pblock_background);
  TextDrawShowForPlayer(playerid, pblock_background2);
  TextDrawShowForPlayer(playerid, pblock_title);
  TextDrawShowForPlayer(playerid, pblock_score);
  TextDrawSetString(pblock_table, "");
  TextDrawShowForPlayer(playerid, pblock_table);
  ShowPlayerDialog(playerid, DIALOG_PBLOCK, 0, "{157FFF}Т{FFCA16}етрис {C1C1C1}- v1.0", "   {C1C1C1}Добро пожаловать {157FFF}В чем это игра заключается?\nВы должны набрать как больше кубиков в стобце \n 3 квадратов одного цвета.\nУдачи!","Играть!", "Выйти");
  return 1;
  }
  return 0;
}

Потом в любое место вставляем функции:
Code
public Remove_JustPressed(playerid)
{
     just_pressed_key[playerid] = false;
     return 1;
}

stock PB_PlaySound(playerid, soundid)
{
  new Float:pb_xpos, Float:pb_ypos, Float:pb_zpos;
  GetPlayerPos(playerid, pb_xpos, pb_ypos, pb_zpos);
  PlayerPlaySound(playerid, soundid, pb_xpos, pb_ypos, pb_zpos);
  return 1;
}

Автор тетриса - Phanto90
Урок by - 26_RUSSS

Автор - admin
Дата добавления - 07.09.2011 в 03:58:51
Форум » Pawno » Уроки » pawno урок тетрис (*icon-0*)
  • Страница 1 из 1
  • 1
Поиск:
Загрузка страницы, займет меньше минуты...
Загрузка...

Статистика Форума
Последнии темы Читаемые темы Лучшие пользователи Новые пользователи
Система телефонов поломалась
Не в себе
фильм скалайн
Трансформеры 3
форсаж 6
Ищу [FS]Для админок на сервер
нужны координаты карты для отметки зон...
Помогите найти мод
pawno урок автоматические ворота
обращение к скриптерам.
Вопросы по скриптингу
Ваши ошибки при компиляции GM/FS

Вопросы по скриптингу

(1081)

Считаем до 1000

(274)

Ваши ошибки при компиляция gm

(260)

Набор в команду

(80)

Ваши ошибки при компиляции GM/FS

(71)

вопроосы по скриптингу от 22.04.2013

(64)

Баннеробмен

(64)

несколько команд на samp 0.3 c

(64)

Оценки сайта samp-pawno.ru

(55)

Заказ хостинга

(51)

Набор в команду(форум)

(45)

Урок №61 по созданию системы авто для GodFather

(45)

admin

(3869)

[east_side]_trane

(443)

TWiX

(316)

valych

(501)

drifter-dron

(477)

danik_rok

(317)

Dimka_71rus

(360)

Drifter96

(300)

MaNb9K

(220)

[MTA]MaPeR5518

(181)

Dima_Tkach

(107)

Nik_Ull

(184)

system32xzxz

(Четверг 09:25:24)

torbin169

(Суббота 23:09:29)

kuchuk_00

(Суббота 17:10:14)

artem_boyko_3

(Суббота 15:57:37)

greggelbak

(Среда 18:29:37)

vladisvlavs

(Среда 13:51:57)

add02102002

(Понедельник 22:37:15)

Диман221

(Понедельник 18:12:45)

almas051004

(Воскресенье 11:05:32)

megasuccessms

(Суббота 14:15:36)

nawe

(Пятница 22:25:23)

swoysb

(Пятница 14:55:29)

Вверх
17:16:29
ОбновитьСмайлыУправление мини-чатом
ЧАТ-PAWNO
2010-2024

vkontakte :samp-pawno.ru: