Advertisement
Guest User

[FS] Fire system

a guest
Jan 1st, 2015
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.69 KB | None | 0 0
  1. /*
  2.     ~~Fire System~~
  3.         by Kaz
  4. */
  5.  
  6. // USTAWIENIA
  7. #if !defined RANDOM_TIME
  8.     #define RANDOM_TIME 500
  9. #endif
  10.  
  11. #if !defined MAX_FIRE
  12.     #define MAX_FIRE 100
  13. #endif
  14.  
  15. #if !defined FIRE_TIMER
  16.     #define FIRE_TIMER 500
  17. #endif
  18.  
  19. #if !defined TXT_TEXT
  20.     #define TXT_TEXT "%d | %d",id, Fire[id][Health] // Ogólne ustawienia 3d tekstu (id - id pożaru, health - życie pożaru) - można tutaj kolorować i takie tam
  21. #endif
  22.  
  23. new Float:RandomFires[][] =
  24. {
  25.     {2780.413330,-1220.205444,49.229999},
  26.     {2668.413330,-828.205444,64.699996},
  27.     {2234.413330,-856.205444,112.680000},
  28.     {1982.413330,-954.205444,55.840000},
  29.     {1842.413330,-926.205444,52.889999},
  30.     {1912.413330,-1080.205444,23.219999},
  31.     {2024.413330,-1206.205444,20.359998},
  32.     {2304.413330,-1122.205444,31.939998},
  33.     {2444.413330,-1136.205444,33.630001},
  34.     {2486.413330,-1678.205444,12.329999},
  35.     {2276.413330,-1594.205444,2.509999},
  36.     {1842.413330,-1412.205444,12.389999},
  37.     {2682.413330,-1846.205444,8.439999},
  38.     {1562.413330,-1930.205444,25.309999},
  39.     {1137.413330,-2014.205444,68.000000},
  40.     {969.413330,-1888.205444,6.500000},
  41.     {871.413330,-1874.205444,5.109999},
  42.     {213.413330,-1832.205444,2.839999},
  43.     {-108.586669,-1519.205444,1.889999},
  44.     {-164.586669,-1351.205444,2.069999},
  45.     {-542.586669,-1677.205444,23.829999},
  46.     {-836.586669,-556.205444,38.239997},
  47.     {-216.586669,27.794555,2.109999},
  48.     {831.413330,298.794555,21.090000},
  49.     {1154.413330,750.794555,9.819999},
  50.     {2672.413330,2535.794433,9.840000},
  51.     {1213.413330,2493.794433,9.359999},
  52.     {-2735.586669,2411.794433,73.360000},
  53.     {-2021.586669,665.794433,43.829998},
  54.     {-2735.586669,763.794433,62.079998},
  55.     {-2105.586669,265.794433,34.680000},
  56.     {-2693.586669,149.794433,3.319999}
  57. };
  58.  
  59. enum _fire
  60. {
  61.     bool:use,
  62.     object,
  63.     Float:fire_X,
  64.     Float:fire_Y,
  65.     Float:fire_Z,
  66.     Text3D:info,
  67.     Health,
  68.     delHealth
  69. }
  70. new Fire[MAX_FIRE][_fire];
  71. new _firestr[10];
  72.  
  73. #if defined FILTERSCRIPT
  74.     public OnFilterScriptInit()
  75.     {
  76.         print("hook ONFI");
  77.         SetTimer("FireUpdate", FIRE_TIMER, true);
  78.         SetTimer("RandomFire", RANDOM_TIME, true);
  79.         #if defined FIRE_OnFilterScriptInit
  80.             FIRE_OnFilterScriptInit();
  81.         #endif
  82.         return 1;
  83.     }
  84.    
  85.     #if defined _ALS_OnFilterScriptInit
  86.         #undef OnFilterScriptInit
  87.     #else
  88.         #define _ALS_OnFilterScriptInit
  89.     #endif
  90.     #define OnFilterScriptInit FIRE_OnFilterScriptInit
  91.     #if defined FIRE_OnFilterScriptInit
  92.         forward FIRE_OnFilterScriptInit();
  93.     #endif
  94. #else
  95.     public OnGameModeInit()
  96.     {
  97.         print("hook ONFI");
  98.         SetTimer("FireUpdate", FIRE_TIMER, true);
  99.         SetTimer("RandomFire", RANDOM_TIME, true);
  100.         #if defined FIRE_OnGameModeInit
  101.             FIRE_OnGameModeInit();
  102.         #endif
  103.         return 1;
  104.     }
  105.     #if defined _ALS_OnGameModeInit
  106.         #undef OnGameModeInit
  107.     #else
  108.         #define _ALS_OnGameModeInit
  109.     #endif
  110.     #define OnGameModeInit FIRE_OnGameModeInit
  111.     #if defined FIRE_OnGameModeInit
  112.         forward FIRE_OnGameModeInit();
  113.     #endif
  114. #endif
  115.  
  116. #define HOLDING(%0) \
  117.     ((newkeys & (%0)) == (%0)) 
  118.  
  119. forward RandomFire();
  120. public RandomFire()
  121. {
  122.     new r = random(sizeof(RandomFires));
  123.     AddFire(RandomFires[r][0], RandomFires[r][1], RandomFires[r][2], 80+random(10),random(3));
  124.     return 1;
  125. }
  126.  
  127. forward FireUpdate();
  128. public FireUpdate(){
  129.     for(new playerid; playerid < GetMaxPlayers(); playerid++){
  130.         new id = GetClosestFire(playerid);
  131.         if(id == -1) continue;
  132.         if(GetPlayerWeapon(playerid) == 42 || (GetVehicleModel(GetPlayerVehicleID(playerid)) == 407 && GetPlayerVehicleSeat(playerid) == 0)){
  133.             new newkeys,l,u;
  134.             GetPlayerKeys(playerid, newkeys, l, u);
  135.             if(HOLDING(KEY_FIRE)){ 
  136.                 if(IsPlayerLookingAtPoint(playerid, Fire[id][fire_X], Fire[id][fire_Y], Fire[id][fire_Z])){
  137.                     if(Fire[id][Health] > 0){
  138.                         Fire[id][Health]-=Fire[id][delHealth];
  139.                         format(_firestr, sizeof(_firestr),TXT_TEXT);
  140.                         Update3DTextLabelText(Fire[id][info], 0xFFFFFFFFF, _firestr);
  141.                         CallRemoteFunction("OnPlayerPutOutFire", "ddd", playerid, id, false);
  142.                     }
  143.                     else {
  144.                         DeleteFire(id);
  145.                         CallRemoteFunction("OnPlayerPutOutFire", "ddd", playerid, id, true);
  146.                     }
  147.                 }
  148.             }
  149.         }
  150.     }
  151.     return 1;
  152. }
  153.  
  154. stock AddFire(Float:X, Float:Y, Float:Z, hh, delh){
  155.     new id = GetFreeFireID();
  156.     if(id == -1)
  157.         return -1;
  158.     Fire[id][use] = true;
  159.     Fire[id][fire_X] = X;
  160.     Fire[id][fire_Y] = Y;
  161.     Fire[id][fire_Z] = Z;
  162.     Fire[id][Health] = hh;
  163.     Fire[id][delHealth] = delh;
  164.     Fire[id][object] = CreateObject(3461, X, Y, Z-2.61, 0, 0, 0.0);
  165.     format(_firestr, sizeof(_firestr),TXT_TEXT);
  166.     Fire[id][info] = Create3DTextLabel(_firestr, 0xFFFFFFFFF, X, Y, Z, 20, 0);
  167.     CallRemoteFunction("OnFireAdd", "d", id);
  168.     return id;
  169. }
  170.  
  171. stock DeleteFire(id){
  172.     CallRemoteFunction("OnFireDelete", "d", id);
  173.     Fire[id][use] = false;
  174.     Fire[id][fire_X] = 0.0;
  175.     Fire[id][fire_Y] = 0.0;
  176.     Fire[id][fire_Z] = 0.0;
  177.     Fire[id][Health] = 0;
  178.     DestroyObject(Fire[id][object]);
  179.     Fire[id][object] = -1;
  180.     Delete3DTextLabel(Fire[id][info]);
  181.     return 1;
  182. }
  183.  
  184. stock GetClosestFire(playerid){
  185.     for(new i; i < MAX_FIRE; i++){
  186.         if(Fire[i][use] == true){
  187.             if((IsPlayerInAnyVehicle(playerid) && IsPlayerInRangeOfPoint(playerid, 10, Fire[i][fire_X],  Fire[i][fire_Y],  Fire[i][fire_Z])) || (!IsPlayerInAnyVehicle(playerid) && IsPlayerInRangeOfPoint(playerid, 1.5, Fire[i][fire_X],  Fire[i][fire_Y],  Fire[i][fire_Z]))){
  188.                 CallRemoteFunction("OnPlayerNearFire", "dd",playerid, i);
  189.                 return i;
  190.             }
  191.         }
  192.     }
  193.     return -1;
  194. }  
  195.    
  196. stock GetFreeFireID(){
  197.     for(new i; i < MAX_FIRE; i++){
  198.         if(Fire[i][use] == false){
  199.             return i;
  200.         }
  201.     }
  202.     return -1;
  203. }
  204.  
  205. stock IsPlayerLookingAtPoint(playerid,Float:X,Float:Y,Float:Z,Float:ViewWidth=22.5,Float:ViewHeight=10.0)
  206. {
  207.     new Float:cx,Float:cy,Float:cz,Float:pa1,Float:pa2,Float:ca1,Float:ca2,Float:px,Float:py,Float:pz;
  208.     GetPlayerCameraFrontVector(playerid,cx,cy,cz);
  209.     GetPlayerPos(playerid,px,py,pz);
  210.     pz+=2.0;
  211.     cx=floatadd(cx,px);
  212.     cy=floatadd(cy,py);
  213.     cz=floatadd(cz,pz);
  214.     pa1=atan2(X-px,Y-py);
  215.     if(pa1>360)pa1=floatsub(pa1,360);
  216.     if(pa1<0)pa1=floatadd(pa1,360);
  217.     pa2=atan2(Y-py,Z-pz);
  218.     if(pa2>360)pa2=floatsub(pa2,360);
  219.     if(pa2<0)pa2=floatadd(pa2,360);
  220.     ca1=atan2(cx-px,cy-py);
  221.     if(ca1>360)ca1=floatsub(ca1,360);
  222.     if(ca1<0)ca1=floatadd(ca1,360);
  223.     ca2=atan2(cy-py,cz-pz);
  224.     if(ca2>360)ca2=floatsub(ca2,360);
  225.     if(ca2<0)ca2=floatadd(ca2,360);
  226.     if((ca1>(pa1-ViewWidth))&&(ca1<(pa1+ViewWidth))&&(ca2>(pa2-ViewHeight))&&(ca2<(pa2+ViewHeight)))return 1;
  227.     if((pa1-ViewWidth)<0)
  228.     {
  229.         ca1-=360.0;
  230.         if((ca1>(pa1-ViewWidth))&&(ca1<(pa1+ViewWidth))&&(ca2>(pa2-ViewHeight))&&(ca2<(pa2+ViewHeight)))return 1;
  231.     }
  232.     if((pa1+ViewWidth)>360)
  233.     {
  234.         ca1+=360.0;
  235.         if((ca1>(pa1-ViewWidth))&&(ca1<(pa1+ViewWidth))&&(ca2>(pa2-ViewHeight))&&(ca2<(pa2+ViewHeight)))return 1;
  236.     }
  237.     return 0;
  238. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement