SwiZzoR

מערכת כיפת ברזל דינאמית

Jul 14th, 2014
535
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.86 KB | None | 0 0
  1. #include a_samp
  2. #include YSI\y_ini
  3. #include YSI\y_dialog
  4. #include ZCMD
  5. #include sscanf2
  6.  
  7. //==== ID Dialogs =========
  8. #define DIALOG_IronDome 432
  9. #define DIALOG_IronDomeNotExist 433
  10. #define DIALOG_IronDomeExist 444
  11. #define DIALOG_SURE 445
  12. #define DIALOG_OnOff 446
  13. #define DIALOG_IDS 447
  14. //==== Defines ===========
  15. #define MAX_IronDome 500
  16. #define SendClientFormatMessage(%0,%1,%2,%3) format(g_string,128,%2,%3),SendClientMessage(%0,%1,g_string)
  17. enum data_IronDome
  18. {
  19.     ID,
  20.     File[64],
  21.     Object,
  22.     ObjectShoot,
  23.     Float:Pos[6],
  24.     Text3D:label[MAX_IronDome], // beacause i have a bug
  25.     bool:On
  26. };
  27.  
  28. new IronDome[MAX_IronDome][data_IronDome], bool:Attack[MAX_PLAYERS][MAX_IronDome];
  29. new LastID, g_string[128], Float:pPos[3], Timer;
  30.  
  31. // ===================== IronDome Create ==========================
  32. CMD:irondome(playerid, params[])
  33. {
  34.     if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "על מנת לבצע פקודה זו, עלייך להתחבר לרקון");
  35.     if(isnull(params)) return SendClientMessage(playerid, 0xFF0000FF, "Usage:/IronDome [Create / Edit]");
  36.     if(!strcmp(params, "Create", true, 6))
  37.     {
  38.         if(sscanf(params[6],"d",LastID)) return SendClientMessage(playerid, 0xFF0000FF, "Usage: /IronDomeCreate [id]");
  39.         if(LastID >= MAX_IronDome || !LastID) return SendClientFormatMessage(playerid, 0xFF0000FF, "%d-0 אתה יכול לעשות מספרים בין", MAX_IronDome);
  40.         if(IronDome[LastID][ID]) return SendClientMessage(playerid, 0xFF0000FF, "האיידי תפוס, אנא נסה איידי אחר");
  41.         format(g_string, 128, "? %d :האם ברצונך ליצור כיפת ברזל חדשה באיידי", LastID);
  42.         return ShowPlayerDialog(playerid, DIALOG_IronDomeNotExist, DIALOG_STYLE_MSGBOX, "יצירת כיפת ברזל", g_string, "כן", "לא");
  43.     }
  44.     // ===================== IronDome Edit ==========================
  45.     if(!strcmp(params, "Edit", true, 4))
  46.     {
  47.         SelectObject(playerid);
  48.         return SendClientMessage(playerid, 0xFF0000FF, "לחץ על כיפת הברזל שברצונך לערוך");
  49.     }
  50.     return SendClientMessage(playerid, 0xFF0000FF, "Usage:/IronDome [Create / Edit]");
  51. }
  52.  
  53. public OnPlayerConnect(playerid) for(new i;i<MAX_IronDome;i++) Attack[playerid][i] = false;
  54.  
  55. public OnFilterScriptInit()
  56. {
  57.     Timer = SetTimer("IronDomesShoot", 7*1000, true); // timer to shoot
  58.     if(!fexist("IronDome/")) return print("You need create folder : \"IronDome\" in folter scriptfiles, to use with this filterscript!"), SendRconCommand("exit");
  59.     for(new i; i < MAX_IronDome; i++)
  60.     {
  61.             format(IronDome[i][File], 64, "IronDome/%d.ini", i);
  62.             if(!fexist(IronDome[i][File])) continue;
  63.             INI_ParseFile(IronDome[i][File], "LoadIronDomes", .bExtra = true, .extra = i);
  64.             IronDome[i][Object] = CreateObject(18848, IronDome[i][Pos][0], IronDome[i][Pos][1], IronDome[i][Pos][2], IronDome[i][Pos][3], IronDome[i][Pos][4], IronDome[i][Pos][5],300);
  65.             format(g_string, 128, "[ID: %02d]כיפת ברזל", i);
  66.             IronDome[i][label][i] = Create3DTextLabel(g_string, 0x008080FF, IronDome[i][Pos][0], IronDome[i][Pos][1], IronDome[i][Pos][2]+3, 300.0, 0, 0);
  67.     }
  68.     return 1;
  69. }
  70.  
  71. public OnFilterScriptExit()
  72. {
  73.     KillTimer(Timer);
  74.     for(new i; i < MAX_IronDome; i++)
  75.     {
  76.             if(IronDome[i][ID])
  77.             {
  78.                 format(IronDome[i][File], 64, "IronDome/%d.ini", i);
  79.                 new INI:file = INI_Open(IronDome[i][File]);
  80.                 INI_WriteInt(file, "ID", IronDome[i][ID]);
  81.                 for(new id = 0;id<6;id++)
  82.                 {
  83.                         format(g_string, 8, "Pos%d",id);
  84.                         INI_WriteFloat(file,g_string, IronDome[i][Pos][id]);
  85.                 }
  86.                 INI_WriteBool(file, "On", IronDome[i][On]);
  87.                 INI_Close(file);
  88.             }
  89.             DestroyObject(IronDome[i][Object]);
  90.             Delete3DTextLabel(IronDome[i][label][i]);
  91.     }
  92.     return 1;
  93. }
  94.  
  95.  
  96. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  97. {
  98.     //================== Dialog Create IronDome ===================================
  99.     if(dialogid == DIALOG_IronDomeNotExist && response)
  100.     {
  101.         GetPlayerPos(playerid, IronDome[LastID][Pos][0], IronDome[LastID][Pos][1], IronDome[LastID][Pos][2]);
  102.         IronDome[LastID][Object] = CreateObject(18848, IronDome[LastID][Pos][0],  IronDome[LastID][Pos][1],  IronDome[LastID][Pos][2], 0.0, 0.0,0.0, 300);
  103.         IronDome[LastID][ID] = LastID;
  104.         EditObject(playerid, IronDome[LastID][Object]);
  105.         SendClientMessage(playerid, 0xFF0000FF, "הגדר מיקום כיפת ברזל");
  106.     }
  107.     //================== Dialog Setting IronDome ===================================
  108.     if(dialogid == DIALOG_IronDomeExist && response)
  109.     {
  110.         switch(listitem)
  111.         {
  112.             case 0: ShowPlayerDialog(playerid, DIALOG_OnOff, DIALOG_STYLE_LIST, "הפעלה / כיבוי כיפת ברזל", "הפעל כיפת ברזל\nכבה כיפת ברזל", "אישור", "חזרה"); // On/Off IronDome
  113.             case 1: EditObject(playerid, IronDome[LastID][Object]), SendClientMessage(playerid, 0xFF0000FF, "הגדר מיקום כיפת ברזל"); // Set pos of IronDome
  114.             case 2: ShowDialogIDS(playerid);
  115.             case 3: ShowPlayerDialog(playerid, DIALOG_SURE, DIALOG_STYLE_MSGBOX, "מחיקת כיפת ברזל", "?האם אתה בטוח שאתה רוצה למחוק כיפת ברזל זו", "כן", "לא"); // Delete IronDome
  116.         }
  117.     }
  118.  
  119.     //================== Dialog On / Off IronDome ===================================
  120.     if(dialogid == DIALOG_OnOff)
  121.     {
  122.         if(!response) return ShowPlayerDialog(playerid, DIALOG_IronDomeExist, DIALOG_STYLE_LIST, "הגדרות כיפת ברזל", "הפעלת כיפת ברזל\nעריכת מיקום כיפת ברזל\nהגדרת אוייבים לכיפת ברזל\nמחיקת כיפת ברזל", "אישור", "ביטול");
  123.         if(!listitem && IronDome[LastID][On] || listitem && !IronDome[LastID][On]) return SendClientMessage(playerid, 0xFF0000FF, listitem ? ( "כיפת ברזל כבר כבויה" ) : ("כיפת ברזל כבר מופעלת") ), ShowPlayerDialog(playerid, DIALOG_OnOff, DIALOG_STYLE_LIST, "הפעלה / כיבוי כיפת ברזל", "הפעל כיפת ברזל\nכבה כיפת ברזל", "אישור", "חזרה");
  124.         SendClientMessage(playerid, !listitem ? 0x0DFF00FF : 0x5E5E5EFF, !listitem ? ("הפעלת את כיפת ברזל בהצלחה") : ("כיבית את כיפת ברזל בהצלחה") );
  125.         IronDome[LastID][On] = !listitem ? true : false;
  126.     }
  127.     //================== Dialog sure delete IronDome ===================================
  128.     if(dialogid == DIALOG_SURE)
  129.     {
  130.         if(!response) return ShowPlayerDialog(playerid, DIALOG_IronDomeExist, DIALOG_STYLE_LIST, "הגדרות כיפת ברזל", "הפעלת כיפת ברזל\nעריכת מיקום כיפת ברזל\nהגדרת אוייבים לכיפת ברזל\nמחיקת כיפת ברזל", "אישור", "ביטול");
  131.         IronDome[LastID][ID] = 0, SendClientMessage(playerid, 0x0DFF00FF, "מחקת את כיפת הברזל בהצלחה");
  132.         DestroyObject(IronDome[LastID][Object]), Delete3DTextLabel(IronDome[LastID][label][LastID]);
  133.         for(new i, j = GetMaxPlayers();i<j;i++) if(Attack[i][LastID]) Attack[i][LastID] = false;
  134.     }
  135.     // Attack id
  136.     if(dialogid == DIALOG_IDS)
  137.     {
  138.         if(!response) return ShowPlayerDialog(playerid, DIALOG_IronDomeExist, DIALOG_STYLE_LIST, "הגדרות כיפת ברזל", "הפעלת כיפת ברזל\nעריכת מיקום כיפת ברזל\nהגדרת אוייבים לכיפת ברזל\nמחיקת כיפת ברזל", "אישור", "ביטול");
  139.         if(listitem == GetMaxPlayers() || listitem == GetMaxPlayers() + 1)
  140.         {
  141.             for(new i, j = GetMaxPlayers();i<j;i++) if(IsPlayerConnected(i)) Attack[i][LastID] = listitem == GetMaxPlayers() ? true : false;
  142.             ShowDialogIDS(playerid);
  143.             return SendClientMessage(playerid, 0x00FFF2FF, listitem == GetMaxPlayers() ? ("הגדרת את כולם אוייבים") : ("ביטלת את כל האוייבים") );
  144.         }
  145.         if(!IsPlayerConnected(listitem)) return SendClientMessage(playerid, 0xFF0000FF, "אתה לא יכול להגדיר אוייב לשחקן לא מחובר"), ShowDialogIDS(playerid);
  146.         Attack[listitem][LastID] = !Attack[listitem][LastID];
  147.         ShowDialogIDS(playerid);
  148.     }
  149.     return 0;
  150. }
  151.  
  152. public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
  153. {
  154.     for(new i = 0,j = MAX_IronDome;i != j;i++) if(objectid == IronDome[i][Object]) LastID = i;
  155.     if(type == SELECT_OBJECT_GLOBAL_OBJECT && modelid == 18848 && IronDome[LastID][Object] == objectid)
  156.     {
  157.         ShowPlayerDialog(playerid, DIALOG_IronDomeExist, DIALOG_STYLE_LIST, "הגדרות כיפת ברזל", "הפעלת כיפת ברזל\nעריכת מיקום כיפת ברזל\nהגדרת אוייבים לכיפת ברזל\nמחיקת כיפת ברזל", "אישור", "ביטול");
  158.         CancelSelectTextDraw(playerid);
  159.     }
  160.     return 1;
  161. }
  162.  
  163. public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
  164. {
  165.     if(response == EDIT_RESPONSE_FINAL)
  166.     {
  167.         IronDome[LastID][Pos][0] = fX;
  168.         IronDome[LastID][Pos][1] = fY;
  169.         IronDome[LastID][Pos][2] = fZ;
  170.         IronDome[LastID][Pos][3] = fRotX;
  171.         IronDome[LastID][Pos][4] = fRotY;
  172.         IronDome[LastID][Pos][5] = fRotZ;
  173.         Delete3DTextLabel(IronDome[LastID][label][LastID]);
  174.         format(g_string, 128, "[ID: %02d]כיפת ברזל", LastID);
  175.         IronDome[LastID][label][LastID] = Create3DTextLabel(g_string, 0x008080FF, IronDome[LastID][Pos][0], IronDome[LastID][Pos][1], IronDome[LastID][Pos][2]+3, 300.0, 0, 0);
  176.         SetObjectPos(IronDome[LastID][Object], IronDome[LastID][Pos][0], IronDome[LastID][Pos][1], IronDome[LastID][Pos][2]);
  177.         SetObjectRot(IronDome[LastID][Object], IronDome[LastID][Pos][3], IronDome[LastID][Pos][4], IronDome[LastID][Pos][5]);
  178.  
  179.     }
  180.     if(response == EDIT_RESPONSE_CANCEL)
  181.     {
  182.         Delete3DTextLabel(IronDome[LastID][label][LastID]);
  183.         format(g_string, 128, "[ID: %02d]כיפת ברזל", LastID);
  184.         IronDome[LastID][label][LastID] = Create3DTextLabel(g_string, 0x008080FF, IronDome[LastID][Pos][0], IronDome[LastID][Pos][1], IronDome[LastID][Pos][2]+3, 300.0, 0, 0);
  185.         SetObjectPos(IronDome[LastID][Object], IronDome[LastID][Pos][0], IronDome[LastID][Pos][1], IronDome[LastID][Pos][2]);
  186.         SetObjectRot(IronDome[LastID][Object], IronDome[LastID][Pos][3], IronDome[LastID][Pos][4], IronDome[LastID][Pos][5]);
  187.     }
  188. }
  189.  
  190. forward LoadIronDomes(Dome, name[], value[]);
  191. public LoadIronDomes(Dome, name[], value[])
  192. {
  193.     INI_Int("ID", IronDome[Dome][ID]);
  194.     for(new i = 0; i<6; i++)
  195.     {
  196.         format(g_string, 8, "Pos%d",i);
  197.         INI_Float(g_string, IronDome[Dome][Pos][i]);
  198.     }
  199.     INI_Bool("On", IronDome[Dome][On]);
  200.     return 1;
  201. }
  202.  
  203. public OnObjectMoved(objectid)
  204. {
  205.     for(new i; i < MAX_IronDome; i++) if(objectid == IronDome[i][ObjectShoot]) CreateExplosion(pPos[0],pPos[1],pPos[2], 6, 50), DestroyObject(IronDome[i][ObjectShoot]);
  206.     return 1;
  207. }
  208.  
  209. forward IronDomesShoot();
  210. public IronDomesShoot()
  211. {
  212.     for(new i; i != MAX_IronDome; i++)
  213.     {
  214.         if(!IronDome[i][On]) continue;
  215.         for(new playerid, Maxp = GetMaxPlayers(); playerid < Maxp ;playerid++)
  216.         {
  217.             if(!IsPlayerConnected(playerid) || !Attack[playerid][i]) continue;
  218.             if(IsPlayerInRangeOfPoint(playerid, 300, IronDome[i][Pos][0], IronDome[i][Pos][1], IronDome[i][Pos][2]))
  219.             {
  220.                 GetPlayerPos(playerid,pPos[0],pPos[1],pPos[2]);
  221.                 IronDome[i][ObjectShoot] = CreateObject(345, IronDome[i][Pos][0], IronDome[i][Pos][1], IronDome[i][Pos][2], IronDome[i][Pos][3] + 5, IronDome[i][Pos][4], IronDome[i][Pos][5], 300);
  222.                 MoveObject(IronDome[i][ObjectShoot], pPos[0],pPos[1],pPos[2], 40);
  223.             }
  224.         }
  225.     }
  226. }
  227.  
  228. stock ShowDialogIDS(playerid)
  229. {
  230.     new DialogPlayers[2048]; // max dialog info
  231.     for(new i,j=GetMaxPlayers();i<=j;i++)
  232.     {
  233.         if(i==j) format(DialogPlayers,2048,"%s\n{00FF2F}בחר הכל\nבטל הכל",DialogPlayers);
  234.         else format(DialogPlayers,2048,"%s\n%s%d",DialogPlayers, Attack[i][LastID]?("{1AFF00}"):(""),i);
  235.     }
  236.     ShowPlayerDialog(playerid,DIALOG_IDS,DIALOG_STYLE_LIST,"איידי לתקיפה",DialogPlayers,"אישור","חזרה");
  237.     return 1;
  238. }
Advertisement
Add Comment
Please, Sign In to add comment