Advertisement
seriu_

Дуэли

Nov 12th, 2017
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.02 KB | None | 0 0
  1. const MAX_DUELS = 10;
  2.  
  3. enum
  4. {
  5.     dDuelShow,
  6.     dDuelCreate,
  7.     dDuelCreate2,
  8.     dDuelCreate3
  9. }
  10.  
  11.  
  12. enum E_DUEL_DATA
  13. {
  14.     d_createid,
  15.     d_acceptid,
  16.     d_weaponslot,
  17.     d_map,
  18.     d_money,
  19.     d_started
  20. }
  21. new duel[MAX_DUELS][E_DUEL_DATA];
  22.  
  23. enum E_DUEL_SPAWN_DATA
  24. {
  25.     d_interior,
  26.     Float:d_pos[8]
  27. }
  28. const MAX_DUEL_SPAWN = 1;
  29.  
  30. new const map_set_position[MAX_DUEL_SPAWN][E_DUEL_SPAWN_DATA] =
  31. {
  32.     {interior,{x,y,z,fa,x2,y2,z2,fa}}
  33. };
  34.  
  35. new duel_map_name[MAX_DUEL_SPAWN][10] =
  36. {
  37.     "название1"
  38. };
  39.  
  40. const MAX_DUEL_WEAPON = 5;
  41. enum E_DUEL_WEAPON_DATA
  42. {
  43.     d_weapid,
  44.     d_weapname[8]
  45. }
  46.  
  47. new duel_weapon_name[MAX_DUEL_WEAPON][E_DUEL_WEAPON_DATA] =
  48.     {
  49.         {24,"Deagle"},
  50.         {25,"ShotGun"},
  51.         {29,"MP5"},
  52.         {30,"AK-47"},
  53.         {31,"M4"}
  54.     };
  55.  
  56.  
  57. stock ShowdDuelShow(playerid)
  58. {  
  59.     new str_duel[300],str_temp[MAX_PLAYER_NAME+11+10];
  60.     strcat(str_duel,!"Игрок\tСумма\tОружие\tКарта");
  61.     for(new i; i < MAX_DUELS; i++)
  62.     {
  63.         if(duel[i][d_createid] == INVALID_PLAYER_ID)
  64.         {
  65.             str_temp = "Слот пуст";
  66.         }
  67.         else
  68.         {
  69.             format(str_temp,sizeof str_temp,"%s\t$%i\t%s\t%s",GN(duel[i][d_createid]), // имя игрока
  70.             duel[i][d_money],duel_weapon_name[duel[i][d_weaponslot]][d_weapname],duel_map_name[duel[i][d_map]]);
  71.            
  72.         }
  73.         strcat(str_duel,str_temp);
  74.     }
  75.     ShowPlayerDialog(playerid,dDuelShow,DIALOG_STYLE_TABLIST_HEADERS,"Дуэли","","Выбрать","Отмена");
  76. }
  77.  
  78. stock ShowdDuelCreate(playerid) return ShowPlayerDialog(playerid,dDuelCreate,DIALOG_STYLE_INPUT,"$","\n\nУкажите сумму ставки за победу\n\t от 1000 до 100000","Далее","Отмена");
  79. stock ShowdDuelCreate2(playerid)
  80. {
  81.     return ShowPlayerDialog(playerid,dDuelCreate2,DIALOG_STYLE_INPUT,"Оружие","{FFFFFF}Deagle\nShotGun\nMP5\n\AK-47\nM4","Далее","Отмена");
  82. }
  83.  
  84. stock ShowdDuelCreate3(playerid, type = 0)
  85. {
  86.     static str_maps[50];
  87.     if(type == 1)
  88.     {
  89.         for(new i; i < MAX_MAP_DUEL; i++)
  90.         {
  91.             strcat(str_maps,duel_map_name[i]);
  92.         }
  93.         return 1;
  94.     }
  95.     return  ShowPlayerDialog(playerid,dDuelCreate3,DIALOG_STYLE_INPUT,"Карты",str_maps,"Далее","Отмена");
  96. }
  97.  
  98.  
  99. new player_create_duel_money[MAX_PLAYERS];
  100. new player_create_duel_weapslot[MAX_PLAYERS];
  101. new player_start_duel[MAX_PLAYERS];
  102.  
  103. public OnPlayerConnect(playerid)
  104. {
  105.     player_create_duel_money[playerid] = 0;
  106.     player_create_duel_weapslot[playerid] = 0;
  107.     player_start_duel[playerid] = -1;
  108.     return 1;
  109. }
  110.  
  111.  
  112. public OnGameModeInit()
  113. {
  114.     ShowdDuelCreate3(-1,1);
  115.     return 1;
  116. }
  117.  
  118. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  119. {
  120.     switch(dialogid)
  121.     {
  122.         case dDuelShow:
  123.         {
  124.             if(response)
  125.             {
  126.                 new slot_duel = listitem-1;
  127.                 if(slot_duel < 0)
  128.                 {
  129.                     ShowdDuelCreate(playerid);
  130.                 }
  131.                 else
  132.                 {
  133.                     if(duel[slot_duel][d_createid] == playerid)
  134.                     {
  135.                         duel[slot_duel][d_createid] = INVALID_PLAYER_ID;
  136.                         GiveMoney(playerid,duel[slot_duel][d_money]);
  137.                         SendClientMessage(playerid,-1,!"Вы вернули деньги за дуэль, Ваша дуэль отменена");
  138.                         return 1;
  139.                     }
  140.                     if(duel[slot_duel][d_createid] == INVALID_PLAYER_ID) return ShowdDuelShow(playerid);
  141.                     if(player_start_duel[duel[slot_duel][d_createid]] != -1)
  142.                     {
  143.                         SendClientMessage(playerid,-1,!"Этот игрок в данный момент учавствует в дуэли");
  144.                         return ShowdDuelShow(playerid);
  145.                     }
  146.                     else if(duel[slot_duel][d_money] < PI[playerid][pMoney] return SendClientMessage(playerid,-1,!"У Вас нет столько денег");
  147.                     GiveMoney(playerid,-duel[slot_duel][d_money]);
  148.                     player_start_duel[duel[slot_duel][d_createid]] = slot_duel;
  149.                     player_start_duel[playerid] = slot_duel;
  150.                     SetPlayerHealth(duel[slot_duel][d_createid],100.0);
  151.                     SetPlayerArmour(duel[slot_duel][d_createid],0.0);
  152.                     SetPlayerHealth(playerid,100.0);
  153.                     SetPlayerArmour(playerid,0.0);
  154.                     SetPlayerPos(playerid,
  155.                     map_set_position[duel[slot_duel][d_map]][d_pos][0],
  156.                     map_set_position[duel[slot_duel][d_map]][d_pos][1],
  157.                     map_set_position[duel[slot_duel][d_map]][d_pos][2]);
  158.                     SetPlayerFacingAngle(playerid,map_set_position[duel[slot_duel][d_map]][d_pos][3]);
  159.                     SetPlayerInterior(playerid,map_set_position[duel[slot_duel][d_interior]]);
  160.                    
  161.                     SetCameraBehindPlayer(playerid);
  162.                    
  163.                     SetPlayerPos(duel[slot_duel][d_createid],
  164.                     map_set_position[duel[slot_duel][d_map]][d_pos][4],
  165.                     map_set_position[duel[slot_duel][d_map]][d_pos][5],
  166.                     map_set_position[duel[slot_duel][d_map]][d_pos][6]);
  167.                     SetPlayerFacingAngle(duel[slot_duel][d_createid],map_set_position[duel[slot_duel][d_map]][d_pos][7]);
  168.                     SetPlayerInterior(duel[slot_duel][d_createid],map_set_position[duel[slot_duel][d_interior]]);
  169.                    
  170.                     SetCameraBehindPlayer(duel[slot_duel][d_createid]);
  171.                 }
  172.             }
  173.         }
  174.         case dDuelCreate:
  175.         {
  176.             if(response)
  177.             {
  178.                 new duel_money = strval(inputtext);
  179.                 if(duel_money < 1000 || duel_money > 100000)
  180.                 {
  181.                     return ShowdDuelCreate(playerid);
  182.                 }
  183.                
  184.                 player_create_duel_money[playerid] = duel_money;
  185.            
  186.             }
  187.             ShowdDuelCreate2(playerid);
  188.         }
  189.         case ShowdDuelCreate2:
  190.         {
  191.             if(!response) return ShowdDuelCreate(playerid);
  192.             player_create_duel_weapslot[playerid] = listitem;
  193.             ShowdDuelCreate3(playerid);
  194.         }
  195.         case dDuelCreate3:
  196.         {
  197.             if(!response) return ShowdDuelCreate2(playerid);
  198.             new pos_created = -1;
  199.             for(new i; i < MAX_DUELS; i++)
  200.             {
  201.                 if(duel[i][d_createid] == INVALID_PLAYER_ID)
  202.                 {
  203.                     pos_created = i;
  204.                     break;
  205.                 }
  206.             }
  207.             if(pos_created == -1) return SendClientMessage(playerid,-1,!"Нет доступных слотов для создания дуэли");
  208.             if(player_create_duel_money[playerid] < PI[playerid][pMoney]) return SendClientMessage(playerid,-1,!"У Вас нет столько денег");
  209.             GiveMoney(playerid,-player_create_duel_money[playerid]);
  210.            
  211.             duel[pos_created][d_createid] = playerid;
  212.             duel[pos_created][d_acceptid] = INVALID_PLAYER_ID;
  213.             duel[pos_created][d_weaponslot] = player_create_duel_weapslot[playerid];
  214.             duel[pos_created][d_map] = listitem;
  215.             duel[pos_created][d_money] = player_create_duel_money[playerid];
  216.             duel[pos_created][d_started] = 1;
  217.             SendClientMessage(playerid,-1,!"Вы создали новую дуэль, ждите пока кто-нибудь согласится");
  218.         }
  219.     }
  220.     return 1;
  221. }
  222. if(player_start_duel[playerid] != 0) return SendClientMessage(playerid,-1,!"Вы не можете создать больше дуэль");
  223.  
  224. public  OnPlayerDeath(playerid, killerid, reason)
  225. {
  226.     if(killerid != INVALID_PLAYER_ID)
  227.     {
  228.         if(player_start_duel[playerid] == player_start_duel[killerid])
  229.         {
  230.             SendClientMessage(playerid,-1,!"Вы проиграли дуэль");
  231.             SendClientMessage(killerid,-1,!"Вы выйграли дуэль");
  232.             GiveMoney(killerid,duel[player_start_duel[playerid]][d_money]*2);
  233.             duel[player_start_duel[playerid]][d_createid]  = INVALID_PLAYER_ID;
  234.         }
  235.     }
  236.     return 1;
  237. }
  238.  
  239. public OnPlayerSpawn(playerid)
  240. {
  241.     if(player_start_duel[playerid] != -1)
  242.     {
  243.         return ReturnPlayerDuel(playerid);
  244.     }
  245.     return 1;
  246. }
  247.  
  248. stock ReturnPlayerDuel(playerid)
  249. {
  250.     player_start_duel[playerid] = -1;
  251.     SetPlayerPos(playerid,0,0,0); // телепорт из карты дуэли на старт где создают дуэль
  252.     return 1;
  253. }
  254.  
  255. public OnPlayerDisconnect(playerid, reason)
  256. {
  257.     for(new i; i < MAX_DUELS; i++)
  258.     {
  259.         if(duel[i][d_createid] == playerid)
  260.         {
  261.             duel[i][d_createid] = INVALID_PLAYER_ID;
  262.             GiveMoney(playerid,duel[i][d_money]);
  263.         }
  264.         else if(duel[i][d_acceptid] == playerid)
  265.         {
  266.             if(duel[i][d_createid] != INVALID_PLAYER_ID && IsPlayerConnected(duel[i][d_createid]))
  267.             {
  268.                 GiveMoney(duel[i][d_createid],duel[i][d_money]*2);
  269.                 SendClientMessage(duel[i][d_createid],-1,"Вы выйграли дуэль");
  270.                 player_start_duel[duel[i][d_createid]] = 0;
  271.                 SetPlayerHealth(duel[i][d_createid],100.0);
  272.                 ReturnPlayerDuel(duel[i][d_createid]);
  273.             }
  274.             duel[i][d_acceptid] = INVALID_PLAYER_ID;
  275.             break;
  276.         }
  277.     }
  278.     return 1;
  279. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement