Advertisement
proSeryoga

Untitled

Feb 6th, 2013
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 10.87 KB | None | 0 0
  1.  
  2. #include <a_samp>
  3. #include <mxINI>
  4. #include <streamer>
  5.  
  6. #define MAX_MAP             50      //Максимум загруженных карт
  7. #define MAX_PLAYER_DM      10      //Максимум игроков в одной ДМ зоне
  8. #define MAX_DM             100     //Максимум ДМ зон
  9. #define PLAYER_AMMO         50     //Патроны, выдаваемые игроку
  10. #define Map::%0()  forward %0(); public %0()
  11.  
  12. new MapLoaded = -1;
  13. new MapName[MAX_MAP][50];
  14. new Float:MapCordSpawn[MAX_MAP][MAX_PLAYER_DM][3];
  15. new MapInt[MAX_MAP];
  16.  
  17. enum Dinfo
  18. {
  19.     Mapid,
  20.     Name[40],
  21.     Gun,
  22.     PlayerCol,
  23.     Players,
  24. }
  25.  
  26. enum PDMi
  27. {
  28.     Mapid,
  29.     Name[40],
  30.     Gun,
  31.     PlayerCol,
  32.     did,
  33. }
  34. new PlayerDM[MAX_PLAYERS][PDMi];
  35. new DM_info[MAX_DM][Dinfo];
  36. new DM_Created[MAX_DM];
  37. new DD[MAX_PLAYERS][MAX_DM];
  38. new DD1[MAX_PLAYERS];
  39. new RandomGun[21] = {16,18,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,41,42,4};
  40. //==============================================================================
  41. #include "../Map"
  42. //==============================================================================
  43.  
  44. public OnFilterScriptInit()
  45. {
  46.     Map_load("Map1","Карта #1");
  47.     Map_load("Angar","Ангар");
  48.     return 1;
  49. }
  50.  
  51. public OnFilterScriptExit()
  52. {
  53.     return 1;
  54. }
  55.  
  56. public OnPlayerConnect(playerid)
  57. {
  58.     PlayerDM[playerid][did] = -1;
  59.     return 1;
  60. }
  61.  
  62. public OnPlayerSpawn(playerid)
  63. {
  64.     print("Go");
  65.     DM_reconnect(playerid);
  66.     print("Go1");
  67.     return 0;
  68. }
  69. public OnPlayerCommandText(playerid, cmdtext[])
  70. {
  71.     if(!strcmp(cmdtext, "/дм", true))
  72.     {
  73.         ShowPlayerDialog(playerid,1,DIALOG_STYLE_LIST,"DM Zones","Создать\nПрисоединиться","Выбор","Отмена");
  74.         return 1;
  75.     }
  76.     if(!strcmp(cmdtext, "/s", true)) return SetPlayerHealth(playerid,0.0);
  77.     if(!strcmp(cmdtext, "/выход", true)) return DM_exit(playerid);
  78.     if(!strcmp(cmdtext, "/ЫЫ", true)) return SetPlayerPos(playerid,218.2859955,-2238.4440918,6.1450000);
  79.     return 0;
  80.  
  81. }
  82.  
  83. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  84. {
  85.     if(dialogid == 1)
  86.     {
  87.         if(response)
  88.         {
  89.             if(!listitem)
  90.             {
  91.             ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"DM Zones","Введите название ДМ зоны","Ввод","Отмена");
  92.             }
  93.             if(listitem == 1)
  94.             {
  95.                 new string[250],str[40],
  96.                 col = -1;
  97.                 for(new i;i<MAX_DM;i++)
  98.                 {
  99.                     if(DM_Created[i] == 0) continue;
  100.                     col++;
  101.                     DD[playerid][col] = i;
  102.                     format(str,sizeof(str),"%s\n",DM_info[i][Name]);
  103.                     strcat(string,str);
  104.                 }
  105.                 if(col != -1) ShowPlayerDialog(playerid,7,DIALOG_STYLE_LIST,"Выберите DM зону",string,"Выбор","Отмена");
  106.                 else SendClientMessage(playerid,0xFF0000AA,"Ни одной DM зоны не создано!");
  107.             }
  108.         }
  109.         return 1;
  110.     }
  111.     if(dialogid == 2)
  112.     {
  113.         if(response)
  114.         {
  115.             if(!strlen(inputtext)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"DM Zones","Введите название ДМ зоны","Ввод","Отмена");
  116.             strmid(PlayerDM[playerid][Name], inputtext, 0, strlen(inputtext), 255);
  117.             ShowPlayerDialog(playerid,3,DIALOG_STYLE_INPUT,"DM Zones","Введите максимальное количество игроков","Ввод","Отмена");
  118.         }
  119.     }
  120.     if(dialogid == 3)
  121.     {
  122.         if(response)
  123.         {
  124.             new col = strval(inputtext);
  125.             if(col < 2 || col > 10)
  126.             {
  127.             ShowPlayerDialog(playerid,3,DIALOG_STYLE_INPUT,"DM Zones","Введите максимальное количество игроков","Ввод","Отмена");
  128.             SendClientMessage(playerid,0xFF0000AA,"Не меньше 2 и не больше 10 игроков!");
  129.             return 1;
  130.             }
  131.             PlayerDM[playerid][PlayerCol] = col;
  132.             ShowPlayerDialog(playerid,4,DIALOG_STYLE_LIST,"Выберите Режим","Одно оружие\nСлучайное оружие","Выбор","Отмена");
  133.         }
  134.     }
  135.     if(dialogid == 4)
  136.     {
  137.         if(response)
  138.         {
  139.             if(!listitem)
  140.             {
  141.                 ShowPlayerDialog(playerid,5,DIALOG_STYLE_LIST,"Выберите Оружие","\
  142.                 9mm\n\
  143.                 Deagle\n\
  144.                 ShotGun\n\
  145.                 Combat Shotgun\n\
  146.                 Micro UZI\n\
  147.                 MP5\n\
  148.                 AK-47\n\
  149.                 M4\n\
  150.                 Tec9\n\
  151.                 Country Rifle\n\
  152.                 RPG\n\
  153.                 HS Rocket\n","Выбор","Отмена");
  154.             }
  155.             if(listitem)
  156.             {
  157.                 PlayerDM[playerid][Gun] = -1;
  158.                 new string[200],str[40];
  159.                 for(new i;i<MapLoaded+1;i++)
  160.                 {
  161.                     format(str,sizeof(str),"%s\n",MapName[i]);
  162.                     strcat(string, str);
  163.                 }
  164.                 ShowPlayerDialog(playerid,6,DIALOG_STYLE_LIST,"Выберите карту",string,"Выбор","Отмена");
  165.             }
  166.         }
  167.     }
  168.     if(dialogid == 5)
  169.     {
  170.         if(response)
  171.         {
  172.             switch(listitem)
  173.             {
  174.                 case 0: PlayerDM[playerid][Gun] = 23;
  175.                 case 1: PlayerDM[playerid][Gun] = 24;
  176.                 case 2: PlayerDM[playerid][Gun] = 25;
  177.                 case 3: PlayerDM[playerid][Gun] = 26;
  178.                 case 4: PlayerDM[playerid][Gun] = 28;
  179.                 case 5: PlayerDM[playerid][Gun] = 29;
  180.                 case 6: PlayerDM[playerid][Gun] = 30;
  181.                 case 7: PlayerDM[playerid][Gun] = 31;
  182.                 case 8: PlayerDM[playerid][Gun] = 32;
  183.                 case 9: PlayerDM[playerid][Gun] = 33;
  184.                 case 10: PlayerDM[playerid][Gun] = 35;
  185.                 case 11: PlayerDM[playerid][Gun] = 36;
  186.             }
  187.             new string[200],
  188.             str[40];
  189.             for(new i;i<MapLoaded+1;i++)
  190.             {
  191.                 format(str,sizeof(str),"%s\n",MapName[i]);
  192.                 strcat(string, str);
  193.             }
  194.             ShowPlayerDialog(playerid,6,DIALOG_STYLE_LIST,"Выберите карту",string,"Выбор","Отмена");
  195.         }
  196.     }
  197.     if(dialogid == 6)
  198.     {
  199.         if(response)
  200.         {
  201.             if(PlayerDM[playerid][did] != -1) DM_exit(playerid);
  202.             new col = DM_create(PlayerDM[playerid][Name],PlayerDM[playerid][Gun],listitem,PlayerDM[playerid][PlayerCol]);
  203.             if(col == -1) return 1;
  204.             DM_connect(playerid,col);
  205.             new str[128];
  206.             new name[MAX_PLAYER_NAME+1];
  207.             GetPlayerName(playerid, name, sizeof(name));
  208.             format(str,sizeof(str),"{3caa3c}[DM] {3ca99f}Игрок %s создал DM зону '%s'!",name,PlayerDM[playerid][Name]);
  209.             SendClientMessageToAll(0xFFFFFFAA,str);
  210.         }
  211.     }
  212.     if(dialogid == 7)
  213.     {
  214.         if(response) DM_si(playerid,DD[playerid][listitem]),DD1[playerid] = DD[playerid][listitem];
  215.     }
  216.     if(dialogid == 8)
  217.     {
  218.         if(response)
  219.         {
  220.             if(DM_info[DD1[playerid]][Players] >= DM_info[DD1[playerid]][PlayerCol]) return SendClientMessage(playerid,0xFF0000AA,"На этой DM зоне нету мест!");
  221.             if(PlayerDM[playerid][did] == DD1[playerid]) return SendClientMessage(playerid,0xFF0000AA,"Вы уже на этой DM зоне!");
  222.             if(PlayerDM[playerid][did] != -1) DM_exit(playerid);
  223.             DM_connect(playerid,DD1[playerid]);
  224.         }
  225.     }
  226.     return 0;
  227. }
  228.  
  229. stock Map_load(pub[],mapname[])
  230. {
  231.     if(MapLoaded >= (MAX_MAP-1)) return printf(" Невозможно загрузить карту '%s'!",mapname);
  232.     MapLoaded++;
  233.     CallLocalFunction(pub, "s", "Call" );
  234.     strmid(MapName[MapLoaded], mapname, 0, strlen(mapname), 255);
  235.     printf(" Карта '%s' загружена!",mapname);
  236.     return MapLoaded;
  237. }
  238.  
  239. stock Map_setSpawn(pslot,Float:x,Float:y,Float:z)
  240. {
  241.     MapCordSpawn[MapLoaded][pslot][0] = x;
  242.     MapCordSpawn[MapLoaded][pslot][1] = y;
  243.     MapCordSpawn[MapLoaded][pslot][2] = z;
  244. }
  245.  
  246. stock Map_setInterior(id) MapInt[MapLoaded] = id;
  247.  
  248. stock DM_create(name[],gun,mapid,maxplayers)
  249. {
  250.     for(new i;i<MAX_DM;i++)
  251.     {
  252.         if(DM_Created[i] == 0)
  253.         {
  254.             DM_Created[i] = 1;
  255.             DM_info[i][Mapid] = mapid;
  256.             DM_info[i][Gun] = gun;
  257.             DM_info[i][PlayerCol] = maxplayers;
  258.             DM_info[i][Players] = 0;
  259.             strmid(DM_info[i][Name], name, 0, strlen(name), 255);
  260.             return i;
  261.         }
  262.     }
  263.     print("Невозможно создать DM зону!");
  264.     return -1;
  265. }
  266.  
  267. stock DM_connect(playerid,DM_id)
  268. {
  269.     new r = random(MAX_PLAYER_DM);
  270.     PlayerDM[playerid][did] = DM_id;
  271.     SetPlayerPos(playerid,
  272.     MapCordSpawn[DM_info[DM_id][Mapid]][r][0],
  273.     MapCordSpawn[DM_info[DM_id][Mapid]][r][1],
  274.     MapCordSpawn[DM_info[DM_id][Mapid]][r][2]);
  275.     SetPlayerInterior(playerid,MapInt[DM_info[DM_id][Mapid]]);
  276.     SetPlayerVirtualWorld(playerid,DM_id+1);
  277.     DM_info[DM_id][Players]++;
  278.     if(DM_info[DM_id][Gun] > 0) GivePlayerWeapon(playerid, DM_info[DM_id][Gun], PLAYER_AMMO);
  279.     else
  280.     {
  281.         new g = random(sizeof(RandomGun));
  282.         GivePlayerWeapon(playerid,RandomGun[g],PLAYER_AMMO);
  283.     }
  284.     new str[128];
  285.     new name[MAX_PLAYER_NAME+1];
  286.     GetPlayerName(playerid, name, sizeof(name));
  287.     format(str,sizeof(str),"{3caa3c}[DM] {3ca99f}Игрок %s подключился к  DM зоне '%s'!",name,DM_info[DM_id][Name]);
  288.     SendClientMessageToAll(0xFFFFFFAA,str);
  289. }
  290.  
  291. stock DM_reconnect(playerid)
  292. {
  293.     if(PlayerDM[playerid][did] == -1) return 1;
  294.     new r = random(MAX_PLAYER_DM);
  295.     SetPlayerPos(playerid,
  296.     MapCordSpawn[DM_info[PlayerDM[playerid][did]][Mapid]][r][0],
  297.     MapCordSpawn[DM_info[PlayerDM[playerid][did]][Mapid]][r][1],
  298.     MapCordSpawn[DM_info[PlayerDM[playerid][did]][Mapid]][r][2]);
  299.     SetPlayerInterior(playerid,MapInt[DM_info[PlayerDM[playerid][did]][Mapid]]);
  300.     SetPlayerVirtualWorld(playerid,PlayerDM[playerid][did]+1);
  301.     if(DM_info[PlayerDM[playerid][did]][Gun] > 0) GivePlayerWeapon(playerid, DM_info[PlayerDM[playerid][did]][Gun], PLAYER_AMMO);
  302.     else
  303.     {
  304.         new g = random(sizeof(RandomGun));
  305.         GivePlayerWeapon(playerid,RandomGun[g],PLAYER_AMMO);
  306.     }
  307.     return 1;
  308. }
  309.  
  310. stock DM_exit(playerid)
  311. {
  312.     if(PlayerDM[playerid][did] == -1) return 1;
  313.     new str[128];
  314.     new name[MAX_PLAYER_NAME+1];
  315.     GetPlayerName(playerid, name, sizeof(name));
  316.     format(str,sizeof(str),"{3caa3c}[DM] {3ca99f}Игрок %s вышел с  DM зоны '%s'!",name,DM_info[PlayerDM[playerid][did]][Name]);
  317.     DM_info[PlayerDM[playerid][did]][Players]--;
  318.     DM_playerCheck(PlayerDM[playerid][did]);
  319.     SetPlayerVirtualWorld(playerid,0);
  320.     PlayerDM[playerid][did] = -1;
  321.     SpawnPlayer(playerid);
  322.     return 1;
  323. }
  324.  
  325. stock DM_si(playerid,DM_id)
  326. {
  327.     new rez[50];
  328.     if(DM_info[DM_id][Gun] > 0) GetWeaponName(DM_info[DM_id][Gun],rez,sizeof(rez));
  329.     else rez = "Случайное оружие";
  330.     new string[200];
  331.     format(string,sizeof(string),"\
  332.     Название: %s\n\
  333.     Игроков: %d/%d\n\
  334.     Режим: %s",
  335.     DM_info[DM_id][Name],
  336.     DM_info[DM_id][Players],
  337.     DM_info[DM_id][PlayerCol],
  338.     rez);
  339.     ShowPlayerDialog(playerid,8,DIALOG_STYLE_MSGBOX,"Информация",string,"Connect","Cancel");
  340. }
  341.  
  342. stock DM_playerCheck(DM_id)
  343. {
  344.     if(DM_info[DM_id][Players] <= 0)
  345.     {
  346.     DM_Created[DM_id] = 0;
  347.     new str[128];
  348.     format(str,sizeof(str),"{3caa3c}[DM] {3ca99f}DM зона '%s' была удалена из-за отсутствия игроков!",DM_info[DM_id][Name]);
  349.     SendClientMessageToAll(-1,str);
  350.     }
  351. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement