Advertisement
Guest User

SAMP - Shark System

a guest
Feb 11th, 2015
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 12.17 KB | None | 0 0
  1. /*
  2. *
  3. *
  4. * SAMP Shark System by targetid
  5. * Copyright by targetid
  6. * Breadfish: http://forum.sa-mp.de/index.php?page=User&userID=32659
  7. *
  8. *
  9. *
  10. *
  11. */
  12.  
  13.  
  14. #include <a_samp>
  15.  
  16.  
  17. #define SHARK_ALERT_ZONE                                                        //delete this line and the red shark alert zone will be destroy
  18. #define SHARK_ALERT_ICON                                                        //delete this line and the alert icon that is attached on the shark will be destroy
  19. #define SHARK_ALERT_ICON_TYPE                   0                               //the icon type ... currently a square ... the list with icon types: http://wiki.sa-mp.com/wiki/MapIcons
  20. #define SHARK_ALERT_ICON_COL                    3                               //the icon color ... currently red ... you can take the color ids from there: http://wiki.sa-mp.com/wiki/Vehicle_Color_IDs
  21. #define SHARK_ALTER_ICON_SLOT                   99                              //the icon slot for the shark icon ... you can only use 100 map icons at the same time
  22. #define MIN_SHARK_SWIMSPEED                     2.5                             //the shark minimal swim speed limit
  23. #define MAX_SHARK_SWIMSPEED                     9.0                             //the shark maximal swim speed limit                          
  24.  
  25.  
  26. //delete the following 6 lines when you include the streamer from incognito (Download: http://forum.sa-mp.com/showthread.php?t=102865)
  27. #define CreateDynamicObject                     CreateObject
  28. #define DestroyDynamicObject                    DestroyObject
  29. #define GetDynamicObjectPos                     GetObjectPos
  30. #define GetDynamicObjectRot                     GetObjectRot
  31. #define MoveDynamicObject                       MoveObject
  32. #define OnDynamicObjectMove                     OnObjectMoved
  33.  
  34.  
  35. enum SharkInfo
  36. {
  37.     Float:sh_x,
  38.     Float:sh_y,
  39.     Float:sh_z,
  40.     Float:sh_xr,
  41.     Float:sh_yr,
  42.     Float:sh_zr,
  43.     Float:sh_minx,
  44.     Float:sh_miny,
  45.     Float:sh_maxx,
  46.     Float:sh_maxy,
  47.     sh_zone,
  48.     sh_obj,
  49.     Float:sh_rpos[2],
  50.     sh_nextattack,
  51.     sh_targetid,
  52.     Float:sh_hp
  53. }
  54.  
  55.  
  56. forward SharkAttack();
  57.  
  58.  
  59. new Shark[][SharkInfo] =                                                        
  60.     {
  61.     //to add a new shark you must input the x,y,z spawn coordinates and the x,y,z of rotation coordinates (default 0.0) at least the shark zone where the shark swim into
  62.     //Float:sh_x,Float:sh_y,Float:sh_z,Float:sh_xr,Float:sh_yr,Float:sh_zr,Float:sh_minx,Float:sh_miny,Float:sh_maxx,Float:sh_maxy,sh_obj,Float:sh_rpos[2],sh_nextattack,sh_targetid,Float:sh_hp
  63.     {389.7715,-2185.0862,-2.0,0.0,0.0,0.0,81.74512, -2919.469, 922.5522, -1950.205},//Los Santos Pier
  64.     {-2274.7344,1891.1919,-2.0,0.0,0.0,0.0,-2966.18, 1588.191, -1891.816, 2090.34},//Bayside
  65.     {-1291.1990,1096.1586,-2.0,0.0,0.0,0.0,-1389.667, 548.8602, -1179.465, 1471.412},//San Fierro Wang Cars
  66.     {1983.8652,-162.5381,-2.0,0.0,0.0,0.0,1903.494, -233.5575, 2078.662, -58.38938},//Mount Gomery
  67.     {-63.6942,-1862.7518,-2.0,0.0,0.0,0.0,-210.2018, -2020.272, 70.06725, -1728.326},//Los Santos Pier 2
  68.     {1983.8652,-162.5381,-2.0,0.0,0.0,0.0,-969.2637, 326.9805, -572.2159, 607.2495}//San Fierro Airport
  69.     };
  70. new SharkTimer;
  71.  
  72.  
  73. public OnFilterScriptInit()
  74. {
  75.     print("\n--------------------------------------\n\n");
  76.     print("Shark System by targetid loaded");
  77.     print("\n\n--------------------------------------\n");
  78.     for(new i=0;i<sizeof(Shark);i++)
  79.     {
  80.         #if defined SHARK_ALERT_ZONE
  81.             Shark[i][sh_zone] = GangZoneCreate(Shark[i][sh_minx],Shark[i][sh_miny],Shark[i][sh_maxx],Shark[i][sh_maxy]);
  82.         #endif
  83.         Shark[i][sh_obj] = CreateDynamicObject(1608,Shark[i][sh_x],Shark[i][sh_y],Shark[i][sh_z],Shark[i][sh_xr],Shark[i][sh_yr],Shark[i][sh_zr]);
  84.         RandPosInZone(Shark[i][sh_minx],Shark[i][sh_miny],Shark[i][sh_maxx],Shark[i][sh_maxy],Shark[i][sh_rpos][0],Shark[i][sh_rpos][1]);
  85.         MoveDynamicObject(Shark[i][sh_obj],Shark[i][sh_rpos][0],Shark[i][sh_rpos][1],Shark[i][sh_z],MIN_SHARK_SWIMSPEED,Shark[i][sh_xr],Shark[i][sh_yr],Shark[i][sh_zr]);
  86.         Shark[i][sh_nextattack] = gettime() + (10);
  87.         Shark[i][sh_targetid] = -1;
  88.         Shark[i][sh_hp] = 1000.0;
  89.     }
  90.     SharkTimer = SetTimer("SharkAttack",1093,1);
  91.     return 1;
  92. }
  93.  
  94. public OnFilterScriptExit()
  95. {
  96.     KillTimer(SharkTimer);
  97.     for(new i=0;i<sizeof(Shark);i++)
  98.     {
  99.         #if defined SHARK_ALERT_ZONE
  100.             GangZoneDestroy(Shark[i][sh_zone]);
  101.         #endif
  102.         DestroyDynamicObject(Shark[i][sh_obj]);
  103.         MoveDynamicObject(Shark[i][sh_obj],Shark[i][sh_rpos][0],Shark[i][sh_rpos][1],Shark[i][sh_z],MIN_SHARK_SWIMSPEED,Shark[i][sh_xr],Shark[i][sh_yr],Shark[i][sh_zr]);
  104.         for(new i2;SharkInfo:i2<SharkInfo;i2++)
  105.         {
  106.              Shark[i][SharkInfo:i2] = 0;
  107.         }
  108.     }
  109.     print("\n--------------------------------------\n\n");
  110.     print("Shark System by targetid unloaded");
  111.     print("\n\n--------------------------------------\n");
  112.     return 1;
  113. }
  114.  
  115. public OnPlayerDeath(playerid,killerid,reason)
  116. {
  117.     for(new i=0;i<sizeof(Shark);i++)
  118.     {
  119.         if(Shark[i][sh_targetid] != playerid) continue;
  120.         #if defined SHARK_ALERT_ZONE
  121.             GangZoneStopFlashForPlayer(Shark[i][sh_targetid],Shark[i][sh_zone]);
  122.             GangZoneHideForPlayer(Shark[i][sh_targetid],Shark[i][sh_zone]);
  123.         #endif
  124.         #if defined SHARK_ALERT_ICON
  125.             RemovePlayerMapIcon(playerid,SHARK_ALTER_ICON_SLOT);
  126.         #endif
  127.         RandPosInZone(Shark[i][sh_minx],Shark[i][sh_miny],Shark[i][sh_maxx],Shark[i][sh_maxy],Shark[i][sh_rpos][0],Shark[i][sh_rpos][1]);
  128.         MoveDynamicObject(Shark[i][sh_obj],Shark[i][sh_rpos][0],Shark[i][sh_rpos][1],Shark[i][sh_z],MIN_SHARK_SWIMSPEED,Shark[i][sh_xr],Shark[i][sh_yr],Shark[i][sh_zr]);
  129.         Shark[i][sh_targetid] = -1;
  130.     }
  131.     return 1;
  132. }
  133.  
  134. public OnDynamicObjectMove(objectid)
  135. {
  136.     new Float:Pos[3];
  137.     for(new i=0;i<sizeof(Shark);i++)
  138.     {
  139.         if(Shark[i][sh_targetid] == -1)
  140.         {
  141.             if(objectid == Shark[i][sh_obj])
  142.             {
  143.                 GetDynamicObjectPos(Shark[i][sh_obj],Pos[0],Pos[1],Pos[2]);
  144.                 if(Pos[0] == Shark[i][sh_rpos][0] && Pos[1] == Shark[i][sh_rpos][1])
  145.                 {
  146.                     RandPosInZone(Shark[i][sh_minx],Shark[i][sh_miny],Shark[i][sh_maxx],Shark[i][sh_maxy],Shark[i][sh_rpos][0],Shark[i][sh_rpos][1]);
  147.                     MoveDynamicObject(Shark[i][sh_obj],Shark[i][sh_rpos][0],Shark[i][sh_rpos][1],Shark[i][sh_z],MIN_SHARK_SWIMSPEED,Shark[i][sh_xr],Shark[i][sh_yr],Shark[i][sh_zr]);
  148.                 }
  149.             }
  150.         }
  151.     }
  152.     return 1;
  153. }
  154.  
  155. public SharkAttack()
  156. {
  157.     new Float:Pos[6],string[64];
  158.     for(new i=0;i<sizeof(Shark);i++)
  159.     {
  160.         if(Shark[i][sh_targetid] == -1)
  161.         {
  162.             for(new playerid=0;playerid<MAX_PLAYERS;playerid++)
  163.             {
  164.                 if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
  165.                 {
  166.                     if(IsPlayerInZone(playerid,Shark[i][sh_minx],Shark[i][sh_miny],Shark[i][sh_maxx],Shark[i][sh_maxy]) && !IsVehicleABoat(GetPlayerVehicleID(playerid)))
  167.                     {
  168.                             GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
  169.                             if(Pos[2] < 1.0)
  170.                             {
  171.                                 Shark[i][sh_targetid] = playerid;
  172.                                 #if defined SHARK_ALERT_ZONE
  173.                                     GangZoneShowForPlayer(playerid,Shark[i][sh_zone],0xDD140074);
  174.                                     GangZoneFlashForPlayer(playerid,Shark[i][sh_zone],0xDD150089);
  175.                                 #endif
  176.                                 #if defined SHARK_ALERT_ICON
  177.                                     SetPlayerMapIcon(playerid,SHARK_ALTER_ICON_SLOT,Shark[i][sh_x],Shark[i][sh_y],Shark[i][sh_z],SHARK_ALERT_ICON_TYPE,SHARK_ALERT_ICON_COL,MAPICON_LOCAL);
  178.                                 #endif
  179.                                 if(GetPlayerSpeed(Shark[i][sh_targetid]) != 0) GetPlayerFacingAngle(playerid,Pos[3]),MoveDynamicObject(Shark[i][sh_obj],Pos[0],Pos[1],Pos[2],MAX_SHARK_SWIMSPEED,0.0,0.0,Pos[3]);
  180.                                 else MoveDynamicObject(Shark[i][sh_obj],Pos[0],Pos[1],Pos[2],MAX_SHARK_SWIMSPEED,0.0,0.0,0.0);
  181.                             }
  182.                     }
  183.                 }
  184.             }
  185.             if(gettime() > Shark[i][sh_nextattack] && Shark[i][sh_nextattack] != 0) Shark[i][sh_nextattack] = gettime() + (10);
  186.         }
  187.         else
  188.         {
  189.             GetDynamicObjectPos(Shark[i][sh_obj],Pos[0],Pos[1],Pos[2]);
  190.             #if defined SHARK_ALERT_ICON
  191.                 SetPlayerMapIcon(Shark[i][sh_targetid],SHARK_ALTER_ICON_SLOT,Pos[0],Pos[1],Pos[2],SHARK_ALERT_ICON_TYPE,SHARK_ALERT_ICON_COL,MAPICON_LOCAL);
  192.             #endif
  193.             GetDynamicObjectRot(Shark[i][sh_obj],Pos[3],Pos[4],Pos[5]);
  194.             if(Pos[2] > 0.5) MoveDynamicObject(Shark[i][sh_obj],Pos[0],Pos[1],Shark[i][sh_z],MAX_SHARK_SWIMSPEED,Pos[3],Pos[4],Pos[5]);
  195.             if(!IsPlayerConnected(Shark[i][sh_targetid])) MoveDynamicObject(Shark[i][sh_obj],Shark[i][sh_x],Shark[i][sh_y],Shark[i][sh_z],MAX_SHARK_SWIMSPEED,Shark[i][sh_xr],Shark[i][sh_yr],Shark[i][sh_zr]),Shark[i][sh_targetid] = -1;
  196.             if(!IsPlayerInZone(Shark[i][sh_targetid],Shark[i][sh_minx],Shark[i][sh_miny],Shark[i][sh_maxx],Shark[i][sh_maxy]) || IsVehicleABoat(GetPlayerVehicleID(Shark[i][sh_targetid])))
  197.             {
  198.                 #if defined SHARK_ALERT_ZONE
  199.                     GangZoneStopFlashForPlayer(Shark[i][sh_targetid],Shark[i][sh_zone]);
  200.                     GangZoneHideForPlayer(Shark[i][sh_targetid],Shark[i][sh_zone]);
  201.                 #endif
  202.                 #if defined SHARK_ALERT_ICON
  203.                     RemovePlayerMapIcon(Shark[i][sh_targetid],SHARK_ALTER_ICON_SLOT);
  204.                 #endif
  205.                 RandPosInZone(Shark[i][sh_minx],Shark[i][sh_miny],Shark[i][sh_maxx],Shark[i][sh_maxy],Shark[i][sh_rpos][0],Shark[i][sh_rpos][1]);
  206.                 MoveDynamicObject(Shark[i][sh_obj],Shark[i][sh_rpos][0],Shark[i][sh_rpos][1],Shark[i][sh_z],MIN_SHARK_SWIMSPEED,Shark[i][sh_xr],Shark[i][sh_yr],Shark[i][sh_zr]);
  207.                 Shark[i][sh_targetid] = -1;
  208.             }
  209.             else
  210.             {
  211.                 if(gettime() > Shark[i][sh_nextattack])
  212.                 {
  213.                     GetDynamicObjectPos(Shark[i][sh_obj],Pos[0],Pos[1],Pos[2]);
  214.                     if(IsPlayerInRangeOfPoint(Shark[i][sh_targetid],5.0,Pos[0],Pos[1],Pos[2]) && Pos[2] <= 0.5)
  215.                     {
  216.                         format(string,sizeof(string),"** %s wird von etwas unbekanntem gebissen **",PlayerName(Shark[i][sh_targetid]));
  217.                         SendClientMessage(Shark[i][sh_targetid],0xAA00FF38,string);
  218.                         new Float:heal;
  219.                         GetPlayerHealth(Shark[i][sh_targetid],heal),SetPlayerHealth(Shark[i][sh_targetid],heal-25);
  220.                         Shark[i][sh_nextattack] = gettime() + (10);
  221.                     }
  222.                     GetPlayerPos(Shark[i][sh_targetid],Pos[0],Pos[1],Pos[2]);
  223.                     if(GetPlayerSpeed(Shark[i][sh_targetid]) != 0) GetPlayerFacingAngle(Shark[i][sh_targetid],Pos[3]),MoveDynamicObject(Shark[i][sh_obj],Pos[0],Pos[1],Pos[2]-2,MAX_SHARK_SWIMSPEED,0.0,0.0,Pos[3]);
  224.                     else MoveDynamicObject(Shark[i][sh_obj],Pos[0],Pos[1],Pos[2]-2,5.0,0.0,0.0,0.0);
  225.                 }
  226.                 else
  227.                 {
  228.                     GetPlayerPos(Shark[i][sh_targetid],Pos[0],Pos[1],Pos[2]);
  229.                     if(GetPlayerSpeed(Shark[i][sh_targetid]) != 0) GetPlayerFacingAngle(Shark[i][sh_targetid],Pos[3]),MoveDynamicObject(Shark[i][sh_obj],Pos[0],Pos[1],Shark[i][sh_z]-random(5)+2,MIN_SHARK_SWIMSPEED,0.0,0.0,Pos[3]);
  230.                     else MoveDynamicObject(Shark[i][sh_obj],Pos[0],Pos[1],Shark[i][sh_z]-random(5)+2,MIN_SHARK_SWIMSPEED,0.0,0.0,0.0);
  231.                 }
  232.             }
  233.         }
  234.     }
  235.     return 1;
  236. }
  237.  
  238.  
  239. stock RandPosInZone(Float:zminX,Float:zminY,Float:zmaxX,Float:zmaxY,&Float:zdestX,&Float:zdestY)
  240. {
  241.     new iMin,iMax,Float:mul = floatpower(10.0,4);
  242.     iMin = floatround(zminX * mul);
  243.     iMax = floatround(zmaxX * mul);
  244.     zdestX = float(random(iMax - iMin) + iMin) / mul;
  245.     iMin = floatround(zminY * mul);
  246.     iMax = floatround(zmaxY * mul);
  247.     zdestY = float(random(iMax - iMin) + iMin) / mul;
  248.     return 1;
  249. }
  250.  
  251. stock IsPlayerInZone(playerid,Float:zminX,Float:zminY,Float:zmaxX,Float:zmaxY,Float:hmax = 2000.0)
  252. {
  253.     new Float:zoneX,Float:zoneY,Float:zoneZ;
  254.     GetPlayerPos(playerid,zoneX,zoneY,zoneZ);
  255.     if((zoneX >= zminX && zoneX <= zmaxX && zoneY >= zminY && zoneY <= zmaxY && zoneZ < hmax))
  256.     {
  257.         return 1;
  258.     }
  259.     return 0;
  260. }
  261.  
  262. stock IsVehicleABoat(vehicleid)
  263. {
  264.     new model = GetVehicleModel(vehicleid);
  265.     switch(model)
  266.     {
  267.         case 472,473,493,595,484,430,453,452,446,454:return 1;
  268.     }
  269.     return 0;
  270. }
  271.  
  272. stock GetPlayerSpeed(playerid)
  273. {
  274.     new Float:SpeedVel[3],Float:Speeddistance,Speed;
  275.     if(!IsPlayerConnected(playerid))return 0;
  276.     if(!IsPlayerInAnyVehicle(playerid)) GetPlayerVelocity(playerid,SpeedVel[0],SpeedVel[1],SpeedVel[2]);
  277.     else GetVehicleVelocity(GetPlayerVehicleID(playerid),SpeedVel[0],SpeedVel[1],SpeedVel[2]);
  278.     Speeddistance = floatsqroot(((SpeedVel[0]*SpeedVel[0])+(SpeedVel[1]*SpeedVel[1]))+(SpeedVel[2]*SpeedVel[2]))*144;
  279.     Speed = floatround(Speeddistance,floatround_round);
  280.     return Speed;
  281. }
  282.  
  283. stock PlayerName(playerid)
  284. {
  285.     new name[MAX_PLAYER_NAME];
  286.     GetPlayerName(playerid,name,MAX_PLAYER_NAME);
  287.     return name;
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement