Guest User

Colored CheckPoint v1.1

a guest
May 16th, 2013
235
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*============================================================================*\
  2. =======================|     Colored CheckPoint v1.1    |=======================
  3. =======================|      Created by: White_116     |=======================
  4. =======================|        Date: 17.05.2013        |=======================
  5. ================================================================================
  6. native GetPlayerColoredCheckpoint(playerid);//                                  Узнаёт ид чекпойнта
  7. native IsPlayerInAnyColoredCheckpoint(playerid);//                              Находится ли игрок в каком либо чекпойнте
  8. native IsPlayerInColoredCheckpoint(playerid, pointid);//                        Находится ли игрок в заданом чекпойнте
  9. native CreateColoredCheckpoint(modelid, color, Float:size, Float:x, Float:y, Float:z, Float:rx=0.0, Float:ry=0.0, Float:rz=0.0, w=-1, i=-1, icon=0);//Создаёт чекпойнт
  10. native DestroyColoredCheckpoint(pointid);//                                     Удаляет чекпойнт
  11. native DestroyAllColoredCheckpoint();//                                         Удаляет все чекпойнты
  12. native SetColoredCheckpointPos(pointid, Float:x, Float:y, Float:z);//           Смена позичии чекпойнта
  13. native GetColoredCheckpointPos(pointid, &Float:x, &Float:y, &Float:z);//        Узнайт позицию чекпойнта
  14. native SetColoredCheckpointRot(pointid, Float:rx, Float:ry, Float:rz);//        Смена ротации чекпойнта
  15. native GetColoredCheckpointRot(pointid, &Float:rx, &Float:ry, &Float:rz);//     Узнаёт ротацию чекпойнта
  16. native OnPlayerEnterColoredCheckpoint(playerid, pointid);//                     Игрок вошёл в чекпойнт
  17. native OnPlayerLeaveColoredCheckpoint(playerid, pointid);//                     Игрок вышел из чекпойнта
  18. native SetColoredCheckpointInterior(pointid, interior);//                       Установка интерьера чекпойнта
  19. native SetColoredCheckpointWorld(pointid, worldid);//                           Установка вирт.мира чекпойнта
  20. native GetColoredCheckpointInterior(pointid);//                                 Узнаёт интерьер чекпойнта
  21. native GetColoredCheckpointWorld(pointid);//                                    Узнаёт вирт.мир чекпойнта
  22. native SetColoredCheckpointRadius(pointid, Float:r);//                          Устанавливает радиус действия чекпойнта
  23. native GetColoredCheckpointRadius(pointid, &Float:r);//                         Узнаёт радиус действия чекпойнта
  24. native SetColoredCheckpointColor(pointid, color);//                             Устанавливает цвет чекпойнта
  25. native GetColoredCheckpointColor(pointid);//                                    Узнаёт цвет чекпойнта
  26.  
  27. \*============================================================================*/
  28.  
  29. #include <a_samp>
  30. //#include <streamer>// раскоментировать если вы хотите чтобы объекты создавались через стример
  31.  
  32. #define PointWorld
  33. #define PointInterior
  34. #define MAX_POINTS (1000)//                 Максимальное число точек.
  35. #define MAX_POINTS_TO_STREAM (100)//        Количество точек в чанке (MAX 255)
  36. #include <W_PS> // http://pastebin.com/RkAScXtG
  37.  
  38.  
  39. #if defined STREAMER_OBJECT_TYPE_DYNAMIC
  40.     new ColoredCheckpointI[MAX_POINTS+1];
  41. #endif
  42. new ColoredCheckpointID[MAX_POINTS+1];
  43. new ColoredCheckpointIC[MAX_POINTS+1];
  44. new ColoredCheckpointM[MAX_POINTS+1];
  45. new ColoredCheckpointC[MAX_POINTS+1];
  46. new ColoredCheckpoint[MAX_PLAYERS];
  47. new bool:ColoredCheckpointTimer;
  48. //==============================================================================
  49. //==============================================================================
  50. public OnFilterScriptExit()
  51. {
  52.     DestroyAllColoredCheckpoint();//                                                                                Удалим все чекпойнты
  53.     return 1;
  54. }
  55.  
  56. public OnPlayerDisconnect(playerid, reason)
  57. {
  58.     #pragma unused reason
  59.     ColoredCheckpoint[playerid]=0;//                                                                                Игрок не стои в точке.
  60.     return 1;
  61. }
  62.  
  63. public OnPlayerUpdate(playerid)
  64. {
  65.     ColoredCheckpointTimer=!ColoredCheckpointTimer;//                                                               Смена состояния
  66.     if(ColoredCheckpointTimer)return 1;//                                                                           Пропистить проверку или нет ВНИМАНИЕ при вставление в мод - это не допустимо, так как обрывает код.
  67.  
  68.     new newppoint=GetPlayerPoint(playerid);//                                                                       Ищем самую близлежайшую точку в которой находится игрок
  69.     if(ColoredCheckpoint[playerid] != newppoint)//                                                                  Если точка отличается от старой.
  70.     {
  71.         if(ColoredCheckpoint[playerid] != 0)OnPlayerLeaveColoredCheckpoint(playerid, ColoredCheckpoint[playerid]);//Если мы были в точке
  72.         if(newppoint != 0)                  OnPlayerEnterColoredCheckpoint(playerid, newppoint);//                  Если новая точка точка.
  73.         ColoredCheckpoint[playerid]=newppoint;//                                                                    Запомним точку
  74.     }
  75.     return 1;
  76. }
  77. //==============================================================================
  78. //==============================================================================
  79. #define GetPlayerColoredCheckpoint(%0)      ColoredCheckpoint[%0]
  80. #define IsPlayerInAnyColoredCheckpoint(%0)  ColoredCheckpoint[%0] ? 1:0
  81. #define IsPlayerInColoredCheckpoint(%0,%1)  ColoredCheckpoint[%0] != %1 ? 1:0
  82. #define GetColoredCheckpointPos(%0, %1, %2, %3) GetPointPos(%0, %1, %2, %3)
  83.  
  84. #define GetColoredCheckpointInterior(%0)    GetPointInterior(%0);
  85. #define GetColoredCheckpointWorld(%0)       GetPointVirtualWorld(%0)
  86.  
  87. #define SetColoredCheckpointRadius(%0, %1)  SetPointRadius(%0, %1)
  88. #define GetColoredCheckpointRadius(%0, %1)  GetPointRadius(%0, %1)
  89. #define GetColoredCheckpointColor(%0)       ColoredCheckpointIC[%0]
  90.  
  91. stock CreateColoredCheckpoint(modelid, color, Float:size, Float:x, Float:y, Float:z, Float:rx=0.0, Float:ry=0.0, Float:rz=0.0, w=-1, i=-1, icon=0)
  92. {
  93.     #if !defined STREAMER_OBJECT_TYPE_DYNAMIC
  94.         #pragma unused icon
  95.     #endif
  96.     new pointid=CreatePoint(x,y,z,size,w,i);
  97.     if(pointid < 1)return 0;
  98.     new c[1];
  99.     ColoredCheckpointIC[pointid]=color;
  100.     c[0]=color;
  101.     color=c{3};
  102.     c{3}=c{2};
  103.     c{2}=c{1};
  104.     c{1}=c{0};
  105.     c{0}=color;
  106.     ColoredCheckpointC[pointid]=c[0];
  107.     ColoredCheckpointM[pointid]=modelid;
  108.     #if defined STREAMER_OBJECT_TYPE_DYNAMIC
  109.         ColoredCheckpointID[pointid]=CreateDynamicObject(modelid, x, y, z-1.0, rx, ry, rz, w, i, -1, 200.0);
  110.         SetDynamicObjectMaterial(ColoredCheckpointID[pointid], 0, modelid, "none", "none", c[0]);
  111.         if(icon!=0)ColoredCheckpointI[pointid]=CreateDynamicMapIcon(x, y, z, 0, ColoredCheckpointIC[pointid],  w, i, -1, 200.0);
  112.         else ColoredCheckpointI[pointid]=0;
  113.     #else
  114.         ColoredCheckpointID[pointid]=CreateObject(modelid, x, y, z-1.0, rx, ry, rz,200.0);
  115.         SetObjectMaterial(ColoredCheckpointID[pointid], 0, modelid, "none", "none", c[0]);
  116.     #endif
  117.     return pointid;
  118. }
  119.  
  120. stock DestroyColoredCheckpoint(pointid)
  121. {
  122.     if(DestroyPoint(pointid) < 1)return 0;//                                                                        Точка не былоа создана
  123.     #if defined STREAMER_OBJECT_TYPE_DYNAMIC
  124.         if(ColoredCheckpointI[pointid]!=0)DestroyDynamicMapIcon(ColoredCheckpointI[pointid]);
  125.         return DestroyDynamicObject(ColoredCheckpointID[pointid]);//                                                Удалим объект
  126.     #else
  127.         return DestroyObject(ColoredCheckpointID[pointid]);//                                                       Удалим объект
  128.     #endif
  129. }
  130.  
  131. DestroyAllColoredCheckpoint()
  132. {
  133.     for(new j=1; j <= MAX_POINTS; j++)if(ColoredCheckpointID[j])DestroyColoredCheckpoint(j);
  134.     return 1;
  135. }
  136.  
  137. stock SetColoredCheckpointPos(pointid,Float:x,Float:y,Float:z)
  138. {
  139.     if(SetPointPos(pointid, x, y, z) < 1)return 0;
  140.     #if defined STREAMER_OBJECT_TYPE_DYNAMIC
  141.         if(ColoredCheckpointI[pointid]!=0)
  142.         {
  143.             DestroyDynamicMapIcon(ColoredCheckpointI[pointid]);
  144.             ColoredCheckpointI[pointid]=CreateDynamicMapIcon(x, y, z, 0, ColoredCheckpointIC[pointid],  PointW[pointid], PointI[pointid], -1, 200.0);
  145.         }
  146.         return SetDynamicObjectPos(ColoredCheckpointID[pointid], x, y, z-1.0);
  147.     #else
  148.         return SetObjectPos(ColoredCheckpointID[pointid], x, y, z-1.0);
  149.     #endif
  150. }
  151.  
  152. stock SetColoredCheckpointRot(pointid,Float:rx,Float:ry,Float:rz)
  153. {
  154.     if(ColoredCheckpointID[pointid] < 1)return 0;
  155.     #if defined STREAMER_OBJECT_TYPE_DYNAMIC
  156.         return SetDynamicObjectRot(ColoredCheckpointID[pointid], rx, ry, rz);
  157.     #else
  158.         return SetObjectRot(ColoredCheckpointID[pointid], rx, ry, rz);
  159.     #endif
  160. }
  161.  
  162. stock GetColoredCheckpointRot(pointid,&Float:rx,&Float:ry,&Float:rz)
  163. {
  164.     if(ColoredCheckpointID[pointid] < 1)return 0;
  165.     #if defined STREAMER_OBJECT_TYPE_DYNAMIC
  166.         return GetDynamicObjectRot(ColoredCheckpointID[pointid], rx, ry, rz);
  167.     #else
  168.         return GetObjectRot(ColoredCheckpointID[pointid], rx, ry, rz);
  169.     #endif
  170. }
  171.  
  172. stock SetColoredCheckpointInterior(pointid, i)
  173. {
  174.     if(SetPointInterior(pointid, i) < 1)return 0;
  175.     #if defined STREAMER_OBJECT_TYPE_DYNAMIC
  176.         if(ColoredCheckpointI[pointid]!=0)
  177.         {
  178.             DestroyDynamicMapIcon(ColoredCheckpointI[pointid]);
  179.             ColoredCheckpointI[pointid]=CreateDynamicMapIcon(PointX[pointid], PointY[pointid], PointZ[pointid], 0, ColoredCheckpointIC[pointid],  PointW[pointid], PointI[pointid], -1, 200.0);
  180.         }
  181.         new Float:rx,Float:ry,Float:rz;
  182.         GetDynamicObjectRot(ColoredCheckpointID[pointid], rx, ry, rz);
  183.         DestroyDynamicObject(ColoredCheckpointID[pointid]);
  184.         ColoredCheckpointID[pointid]=CreateDynamicObject(ColoredCheckpointM[pointid], PointX[pointid], PointY[pointid], PointZ[pointid]-1.0, rx, ry, rz, PointW[pointid], PointI[pointid], -1, 200.0);
  185.         return SetDynamicObjectMaterial(ColoredCheckpointID[pointid], 0, ColoredCheckpointM[pointid], "none", "none", ColoredCheckpointC[pointid]);
  186.     #endif
  187.     return 1;
  188. }
  189.  
  190. stock SetColoredCheckpointWorld(pointid, worldid)
  191. {
  192.     if(SetPointVirtualWorld(pointid, worldid) < 1)return 0;
  193.     #if defined STREAMER_OBJECT_TYPE_DYNAMIC
  194.         if(ColoredCheckpointI[pointid]!=0)
  195.         {
  196.             DestroyDynamicMapIcon(ColoredCheckpointI[pointid]);
  197.             ColoredCheckpointI[pointid]=CreateDynamicMapIcon(PointX[pointid], PointY[pointid], PointZ[pointid], 0, ColoredCheckpointIC[pointid],  PointW[pointid], PointI[pointid], -1, 200.0);
  198.         }
  199.         new Float:rx,Float:ry,Float:rz;
  200.         GetDynamicObjectRot(ColoredCheckpointID[pointid], rx, ry, rz);
  201.         DestroyDynamicObject(ColoredCheckpointID[pointid]);
  202.         ColoredCheckpointID[pointid]=CreateDynamicObject(ColoredCheckpointM[pointid], PointX[pointid], PointY[pointid], PointZ[pointid]-1.0, rx, ry, rz, PointW[pointid], PointI[pointid], -1, 200.0);
  203.         return SetDynamicObjectMaterial(ColoredCheckpointID[pointid], 0, ColoredCheckpointM[pointid], "none", "none", ColoredCheckpointC[pointid]);
  204.     #endif
  205.     return 1;
  206. }
  207.  
  208. stock SetColoredCheckpointColor(pointid, color)
  209. {
  210.     if(IsValidPoint(pointid) < 1)return 0;
  211.    
  212.     #if defined STREAMER_OBJECT_TYPE_DYNAMIC
  213.         if(ColoredCheckpointI[pointid]!=0)
  214.         {
  215.             DestroyDynamicMapIcon(ColoredCheckpointI[pointid]);
  216.             ColoredCheckpointI[pointid]=CreateDynamicMapIcon(PointX[pointid], PointY[pointid], PointZ[pointid], 0, color,  PointW[pointid], PointI[pointid], -1, 200.0);
  217.         }
  218.         new c[1];
  219.         c[0]=color;
  220.         color=c{3};
  221.         c{3}=c{2};
  222.         c{2}=c{1};
  223.         c{1}=c{0};
  224.         c{0}=color;
  225.         ColoredCheckpointC[pointid]=c[0];
  226.         new Float:rx,Float:ry,Float:rz;
  227.         GetDynamicObjectRot(ColoredCheckpointID[pointid], rx, ry, rz);
  228.         DestroyDynamicObject(ColoredCheckpointID[pointid]);
  229.         ColoredCheckpointID[pointid]=CreateDynamicObject(ColoredCheckpointM[pointid], PointX[pointid], PointY[pointid], PointZ[pointid]-1.0, rx, ry, rz, PointW[pointid], PointI[pointid], -1, 200.0);
  230.         return SetDynamicObjectMaterial(ColoredCheckpointID[pointid], 0, ColoredCheckpointM[pointid], "none", "none", ColoredCheckpointC[pointid]);
  231.     #else
  232.         new c[1];
  233.         c[0]=color;
  234.         color=c{3};
  235.         c{3}=c{2};
  236.         c{2}=c{1};
  237.         c{1}=c{0};
  238.         c{0}=color;
  239.         ColoredCheckpointC[pointid]=c[0];
  240.         new Float:rx,Float:ry,Float:rz;
  241.         GetObjectRot(ColoredCheckpointID[pointid], rx, ry, rz);
  242.         DestroyObject(ColoredCheckpointID[pointid]);
  243.         ColoredCheckpointID[pointid]=CreateObject(ColoredCheckpointM[pointid], PointX[pointid], PointY[pointid], PointZ[pointid]-1.0, rx, ry, rz, 200.0);
  244.         return SetObjectMaterial(ColoredCheckpointID[pointid], 0, ColoredCheckpointM[pointid], "none", "none", ColoredCheckpointC[pointid]);
  245.     #endif
  246. }
  247. //==============================================================================
  248. //==============================================================================
  249. new Float:cPos[5][6] = {
  250.     {1410.0, 1461.0, 11.82, 0.0, 0.0, 0.0},
  251.     {1412.0, 1461.0, 11.82, 0.0, 0.0, 0.0},
  252.     {1414.0, 1461.0, 11.82, 0.0, 0.0, 0.0},
  253.     {1416.0, 1461.0, 11.82, 0.0, 0.0, 0.0},
  254.     {1418.0, 1461.0, 11.82, 0.0, 0.0, 0.0}
  255. };
  256.  
  257. public OnFilterScriptInit()
  258. {
  259.     CreateColoredCheckpoint(1317,0xFF0000FF,5.0, cPos[0][0], cPos[0][1], cPos[0][2], cPos[0][3], cPos[0][4], cPos[0][5], -1, -1, 1);//Создадим чек с иконкой
  260.     CreateColoredCheckpoint(1317,0x00FF00FF,5.0, cPos[1][0], cPos[1][1], cPos[1][2], cPos[1][3], cPos[1][4], cPos[1][5]);
  261.     CreateColoredCheckpoint(1317,0x0000FFFF,5.0, cPos[2][0], cPos[2][1], cPos[2][2], cPos[2][3], cPos[2][4], cPos[2][5]);
  262.     CreateColoredCheckpoint(1317,0xFFFF00FF,5.0, cPos[3][0], cPos[3][1], cPos[3][2], cPos[3][3], cPos[3][4], cPos[3][5]);
  263.     CreateColoredCheckpoint(1317,0xFF00FFFF,5.0, cPos[4][0], cPos[4][1], cPos[4][2], cPos[4][3], cPos[4][4], cPos[4][5]);
  264.  
  265.     return 1;
  266. }
  267.  
  268. forward OnPlayerEnterColoredCheckpoint(playerid, pointid);
  269. public OnPlayerEnterColoredCheckpoint(playerid, pointid)
  270. {
  271.     //ниже действия при входе
  272.     new str[64];
  273.     format(str,64,"ты вошёл в точку %d",pointid);
  274.     SendClientMessage(playerid,0xFFFFFFFF,str);
  275.     return 1;
  276. }
  277.  
  278. forward OnPlayerLeaveColoredCheckpoint(playerid, pointid);
  279. public OnPlayerLeaveColoredCheckpoint(playerid, pointid)
  280. {
  281.     //ниже действия при выходе
  282.     new str[64];
  283.     format(str,64,"ты вышел из точки %d",pointid);
  284.     SendClientMessage(playerid,0xFFFFFFFF,str);
  285.     return 1;
  286. }
  287.  
  288. public OnPlayerCommandText(playerid, cmdtext[])
  289. {
  290.     if(!strcmp(cmdtext, "/CC", true))//                                                                             Создать чекпойнт
  291.     {
  292.         new Float:x,Float:y,Float:z;
  293.         GetPlayerPos(playerid,x,y,z);
  294.        
  295.         if(CreateColoredCheckpoint(1317,0x0000FFFF,10.0, x, y, z, 0.0, 0.0, 0.0, -1, -1, 1) < 1)return SendClientMessage(playerid, -1, "{ff0000}Ты не смог создать в чек!");
  296.         return SendClientMessage(playerid, -1, "{ee0000}Ты создал чек!");
  297.     }
  298.     if(!strcmp(cmdtext, "/DC", true))//                                                                             Удалить чекпойнт
  299.     {
  300.         if(!GetPlayerColoredCheckpoint(playerid))return SendClientMessage(playerid, -1, "{ff0000}Ты не в чеке!");//    Если playerid находится в чеке
  301.         if(DestroyColoredCheckpoint(GetPlayerColoredCheckpoint(playerid))< 1)return SendClientMessage(playerid, -1, "{ff0000}Ты не смог удалить чек!");
  302.         return SendClientMessage(playerid, -1, "{ee0000}Ты в чеке, он удалён!");
  303.     }
  304.     if(!strcmp(cmdtext, "/PC", true))//                                                                             Переместить чекпойнт
  305.     {
  306.         if(!GetPlayerColoredCheckpoint(playerid))return SendClientMessage(playerid, -1, "{ff0000}Ты не в чеке!");//    Если playerid находится в чеке
  307.         new Float:x,Float:y,Float:z;
  308.         GetPlayerPos(playerid,x,y,z);
  309.         if(SetColoredCheckpointPos(GetPlayerColoredCheckpoint(playerid),x, y, z) < 1)return SendClientMessage(playerid, -1, "{ff0000}Ты не переместил чеке!");
  310.         return SendClientMessage(playerid, -1, "{ee0000}Ты переместил чек!");
  311.     }
  312.  
  313.     if(!strcmp(cmdtext, "/CC1", true))//                                                                            Переместить чекпойнт
  314.     {
  315.         if(!GetPlayerColoredCheckpoint(playerid))return SendClientMessage(playerid, -1, "{ff0000}Ты не в чеке!");//    Если playerid находится в чеке
  316.        
  317.         if(SetColoredCheckpointColor(GetPlayerColoredCheckpoint(playerid), 0xFFFF00FF) < 1)return SendClientMessage(playerid, -1, "{ff0000}Ты не покрасил чеке!");
  318.         return SendClientMessage(playerid, -1, "{ee0000}Ты покрасил чек!");
  319.     }
  320.     if(!strcmp(cmdtext, "/CC2", true))//                                                                            Переместить чекпойнт
  321.     {
  322.         if(!GetPlayerColoredCheckpoint(playerid))return SendClientMessage(playerid, -1, "{ff0000}Ты не в чеке!");//    Если playerid находится в чеке
  323.  
  324.         if(SetColoredCheckpointColor(GetPlayerColoredCheckpoint(playerid), 0xFF0000FF) < 1)return SendClientMessage(playerid, -1, "{ff0000}Ты не покрасил чеке!");
  325.         return SendClientMessage(playerid, -1, "{ee0000}Ты покрасил чек!");
  326.     }
  327.     if(!strcmp(cmdtext, "/TP", true))//телепорт к тестовым чекам
  328.     {
  329.         SetPlayerPos(playerid, 1415.0404,1452.5490,10.8203);
  330.         return 1;
  331.     }
  332.     return 0;
  333. }
RAW Paste Data