Guest User

iScreenFader 1.3

a guest
Jun 20th, 2012
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 10.30 KB | None | 0 0
  1. /*
  2.  
  3.         iScreenFader 1.3
  4.         pabaigta 2012m. Birželio 20d. 11:56
  5.  
  6.         Autorius: InstincT
  7.         Keisti kreditus draudžiama! Pakeitęs kreditus autoriumi netapsi!
  8.  
  9.         funkcijos
  10.             FadeScreenForPlayer( playerid, mode, color = 0x0FF )
  11.             playerid - žaidėjo ID
  12.             mode - užtemdymo rėžimas. Jų yra du tipai:
  13.                 FADE_IN - užtemdyti(po truputį padaryti ekraną juodą)
  14.                 FADE_OUT - atitemdyti(po truputį padaryti ekraną matomą)
  15.             **color - spalva
  16.  
  17.             FadePlayerPos( playerid, color = 0x0FF, Float:fsPosX, Float:fsPosY, Float:fsPosZ, Float:fsPosA = -1.0, fsInt = -1, fsVW = -1, fsClearAnims = false )
  18.             playerid - žaidėjo ID
  19.             **color - spalva
  20.             fsPosX - koordinatė X
  21.             fsPosY - koordinatė Y
  22.             fsPosZ - koordinatė Z
  23.             **fsPosA - pasisukimo laipsniai
  24.             **fsInt - interioras
  25.             **fsVW - virtual worldas
  26.             **fsClearAnims - ar užtamsinus ekraną įvykdyti funkciją ClearAnimations
  27.             **fsCamera - ar užtamsinus ekraną įvykdyti funkciją SetCameraBehindPlayer
  28.  
  29.             FadeSkinForPlayer( playerid, skinID, color = 0x0FF )
  30.             playerid - žaidėjo ID
  31.             skinID - skino ID
  32.             **color - spalva
  33.  
  34.             iScreenFader_Kokybe( id );
  35.             id - kokybės ID. Galimi du variantai:
  36.                 FADE_KOKYBE_GERA - gera kokybė, timer'io intervalas yra 20, fsSteps kintamojo mažinimas 4
  37.                 FADE_KOKYBE_BLOGA - vidutiniška kokybė, timer'io intervalas 100, fsSteps kintamojo mažinimas 20
  38.  
  39.             ** - PARAMETRAS NEBŪTINAS! Norint jį praleisti funkcijos kvietime, vietoj parametro rašykit _
  40.  
  41.         callbackai
  42.             OnFadeComplete( playerid, mode, color )
  43.                 playerid - žaidėjo ID
  44.                 mode - užtemdymo rėžimas
  45.                 color - užtemdyta/atitemdyta spalva
  46.  
  47.         changelogas
  48.             2012m. Birželio 12d.:
  49.                 - išleista
  50.             2012m. Birželio 13d.:
  51.                 - padaryti pranešimai bei vykdymo nutraukimai, kurių dėka bus išvengiamas netaisyklingas funkcijų naudojimas,
  52.                 - naudojami PlayerTextDraw'ai vietoje globalių TextDraw'ų,
  53.                 - viskas turėtų veikti dvigubai greičiau, pakeistas timer'io intervalas iš 5 į 10, taip pat kintamasis fsSteps mažinamas dviem vienetais
  54.                 - naujos funkcijos:
  55.                         FadePlayerPos, FadePlayerSkin
  56.             2012m. Birželio 14d.:
  57.                 - pridėta galimybė kontroliuoti spalvas visose funkcijose. Parametras nėra būtinas, spalva pagal nutylėjimą - juoda(0x0FF).
  58.                 - OnFadeComplete callback'ui pridėtas spalvos parametras
  59.                 - viskas turėtų veikti dar dvigubai greičiau, pakeistas timer'io intervalas iš 5 į 10, taip pat kintamasis fsSteps mažinamas keturiais vienetais
  60.                 - funkcijai FadePlayerPos pridėta galimybė užtamsinus ekraną įvykdyti funkciją SetCameraBehindPlayer bei ClearAnimations
  61.                 - ištaisyta klaida, dėl kurios galėjo neatitemdyti ekrano.
  62.                 - ištaisyta klaida, dėl kurios informaciniuose pranešimuose konsolėje nerodydavo žaidėjo ID
  63.                 - naujos funkcijos:
  64.                         iScreenFader_Kokybe - pakeisti užtemdymo/atitemdymo kokybę.
  65.             2012m. Birželio 20d.:
  66.                 - ištaisyta klaida, dėl kurios panaudojus FadePlayerPos funkciją, o paskui kitą užtemdymo funkciją vėl žaidėjo pozicija buvo nustatoma į prieš tai naudotosios funkcijos FadePlayerPos nustatytą poziciją.
  67. */
  68.  
  69.  
  70. #define FADE_IN 1
  71. #define FADE_OUT 2
  72.  
  73.  
  74. forward OnFadeComplete( playerid, mode, color );
  75.  
  76.  
  77. enum fadeScreenEnumas
  78. {
  79.     fsTD_sukurtas,
  80.     PlayerText:fsTextDraw,
  81.     fsTimer,
  82.     fsSteps,
  83.     fsMode,
  84.     fsColor,
  85.  
  86.     Float:fsPos[ 4 ],
  87.     fsInterior,
  88.     fsVirtualWorld,
  89.     fsSkin,
  90.     fsClearAnimations,
  91.     fsCameraBehindPlayer
  92. }
  93.  
  94. #define FADE_KOKYBE_GERA 1
  95. #define FADE_KOKYBE_BLOGA 2
  96.  
  97. new
  98.     fadeScreen[ MAX_PLAYERS ][ fadeScreenEnumas ],
  99.     fadeKokybe_intervalas = 20,
  100.     fadeKokybe_mazinimas = 4
  101. ;
  102.  
  103. stock iScreenFader_Kokybe( id )
  104. {
  105.     if( id != FADE_KOKYBE_GERA && id != FADE_KOKYBE_BLOGA ) return print( "KLAIDA iScreenFader naudojime! iScreenFader_Kokybe funkcijoje naudjama netinkama reikšmė." );
  106.     if( id == FADE_KOKYBE_GERA )
  107.     {
  108.         fadeKokybe_intervalas = 20;
  109.         fadeKokybe_mazinimas = 4;
  110.     }
  111.     else
  112.     {
  113.         fadeKokybe_intervalas = 100;
  114.         fadeKokybe_mazinimas = 20;
  115.     }
  116.     return 1;
  117. }
  118.  
  119. stock FadeScreenForPlayer( playerid, mode, color = 0x0FF )
  120. {
  121.     if( mode != FADE_IN && mode != FADE_OUT ) return printf( "KLAIDA iScreenFader naudojime! FadeScreenForPlayer žaidėjui %d mode buvo netinkamas.", playerid );
  122.     if( fadeScreen[ playerid ][ fsSteps ] > 0 ) return print( "KLAIDA iScreenFader naudojime! FadeScreenForPlayer funkcijoje žaidėjas %d jau naudoja ekrano tamsinimą." );
  123.     fadeScreen[ playerid ][ fsSteps ] = 255;
  124.     fadeScreen[ playerid ][ fsMode ] = mode;
  125.     fadeScreen[ playerid ][ fsColor ] = color;
  126.     fadeScreen[ playerid ][ fsTimer ] = SetTimerEx( "FadeScreen", fadeKokybe_intervalas, true, "d", playerid );
  127.     return 1;
  128. }
  129.  
  130. stock FadePlayerPos( playerid, color = 0x0FF, Float:fsPosX, Float:fsPosY, Float:fsPosZ, Float:fsPosA = -1.0, fsInt = -1, fsVW = -1, fsClearAnims = true, fsCamera = false )
  131. {
  132.     if( fadeScreen[ playerid ][ fsSteps ] > 0 ) return printf( "KLAIDA iScreenFader naudojime! FadePlayerPos funkcijoje žaidėjas %d jau naudoja ekrano tamsinimą.", playerid );
  133.     fadeScreen[ playerid ][ fsSteps ] = 255;
  134.     fadeScreen[ playerid ][ fsMode ] = FADE_IN;
  135.     fadeScreen[ playerid ][ fsColor ] = color;
  136.     fadeScreen[ playerid ][ fsPos ][ 0 ] = fsPosX;
  137.     fadeScreen[ playerid ][ fsPos ][ 1 ] = fsPosY;
  138.     fadeScreen[ playerid ][ fsPos ][ 2 ] = fsPosZ;
  139.     fadeScreen[ playerid ][ fsPos ][ 3 ] = fsPosA;
  140.     fadeScreen[ playerid ][ fsInterior ] = fsInt;
  141.     fadeScreen[ playerid ][ fsVirtualWorld ] = fsVW;
  142.     fadeScreen[ playerid ][ fsClearAnimations ] = fsClearAnims;
  143.     fadeScreen[ playerid ][ fsCameraBehindPlayer ] = fsCamera;
  144.     fadeScreen[ playerid ][ fsTimer ] = SetTimerEx( "FadeScreen", fadeKokybe_intervalas, true, "d", playerid );
  145.     return 1;
  146. }
  147.  
  148. stock FadePlayerSkin( playerid, skinID, color = 0x0FF )
  149. {
  150.     if( fadeScreen[ playerid ][ fsSteps ] > 0 ) return printf( "KLAIDA iScreenFader naudojime! FadePlayerSkin funkcijoje žaidėjas %d jau naudoja ekrano tamsinimą.", playerid );
  151.     fadeScreen[ playerid ][ fsSteps ] = 255;
  152.     fadeScreen[ playerid ][ fsMode ] = FADE_IN;
  153.     fadeScreen[ playerid ][ fsColor ] = color;
  154.     fadeScreen[ playerid ][ fsSkin ] = skinID + 1;
  155.     fadeScreen[ playerid ][ fsTimer ] = SetTimerEx( "FadeScreen", fadeKokybe_intervalas, true, "d", playerid );
  156.     return 1;
  157. }
  158.  
  159. forward FadeScreen( playerid );
  160. public FadeScreen( playerid )
  161. {
  162.     if( !fadeScreen[ playerid ][ fsTD_sukurtas ] )
  163.     {
  164.         fadeScreen[ playerid ][ fsTextDraw ] = CreatePlayerTextDraw( playerid, -159.000000, -288.000000, "iScreenFader by InstincT" );
  165.         PlayerTextDrawBackgroundColor( playerid, fadeScreen[ playerid ][ fsTextDraw ], 255 );
  166.         PlayerTextDrawFont( playerid, fadeScreen[ playerid ][ fsTextDraw ], 0 );
  167.         PlayerTextDrawLetterSize( playerid, fadeScreen[ playerid ][ fsTextDraw ], 0.270000, 88.999687 );
  168.         PlayerTextDrawColor( playerid, fadeScreen[ playerid ][ fsTextDraw ], -1 );
  169.         PlayerTextDrawSetOutline( playerid, fadeScreen[ playerid ][ fsTextDraw ], 0 );
  170.         PlayerTextDrawSetProportional( playerid, fadeScreen[ playerid ][ fsTextDraw ], 1 );
  171.         PlayerTextDrawSetShadow( playerid, fadeScreen[ playerid ][ fsTextDraw ], 1 );
  172.         PlayerTextDrawUseBox( playerid, fadeScreen[ playerid ][ fsTextDraw ], 1 );
  173.         PlayerTextDrawBoxColor( playerid, fadeScreen[ playerid ][ fsTextDraw ], 255 );
  174.         PlayerTextDrawTextSize( playerid, fadeScreen[ playerid ][ fsTextDraw ], 848.000000, 2.000000 );
  175.         fadeScreen[ playerid ][ fsTD_sukurtas ] = true;
  176.     }
  177.     PlayerTextDrawBoxColor( playerid, fadeScreen[ playerid ][ fsTextDraw ],
  178.     GetFadeColor( fadeScreen[ playerid ][ fsSteps ], fadeScreen[ playerid ][ fsMode ], fadeScreen[ playerid ][ fsColor ] ) );
  179.     PlayerTextDrawShow( playerid, fadeScreen[ playerid ][ fsTextDraw ] );
  180.     fadeScreen[ playerid ][ fsSteps ] -= fadeKokybe_mazinimas;
  181.     if( fadeScreen[ playerid ][ fsSteps ] <= 0 )
  182.     {
  183.         KillTimer( fadeScreen[ playerid ][ fsTimer ] );
  184.         if( fadeScreen[ playerid ][ fsMode ] == FADE_OUT )
  185.         {
  186.             PlayerTextDrawHide( playerid, fadeScreen[ playerid ][ fsTextDraw ] );
  187.         }
  188.         else
  189.         {
  190.             if( fadeScreen[ playerid ][ fsPos ][ 0 ] != -1.0 && fadeScreen[ playerid ][ fsPos ][ 1 ] != -1.0 && fadeScreen[ playerid ][ fsPos ][ 2 ] != -1.0 )
  191.             {
  192.                 SetPlayerPos( playerid, fadeScreen[ playerid ][ fsPos ][ 0 ], fadeScreen[ playerid ][ fsPos ][ 1 ], fadeScreen[ playerid ][ fsPos ][ 2 ] );
  193.                 fadeScreen[ playerid ][ fsPos ][ 0 ] = -1.0;
  194.                 fadeScreen[ playerid ][ fsPos ][ 1 ] = -1.0;
  195.                 fadeScreen[ playerid ][ fsPos ][ 2 ] = -1.0;
  196.  
  197.                 if( fadeScreen[ playerid ][ fsPos ][ 3 ] != -1.0 )
  198.                 {
  199.                     SetPlayerFacingAngle( playerid, fadeScreen[ playerid ][ fsPos ][ 3 ] );
  200.                     fadeScreen[ playerid ][ fsPos ][ 3 ] = -1.0;
  201.                 }
  202.                 if( fadeScreen[ playerid ][ fsInterior ] != -1 )
  203.                 {
  204.                     SetPlayerInterior( playerid, fadeScreen[ playerid ][ fsInterior ] );
  205.                     fadeScreen[ playerid ][ fsInterior ] = -1;
  206.                 }
  207.                 if( fadeScreen[ playerid ][ fsVirtualWorld ] != -1 )
  208.                 {
  209.                     SetPlayerVirtualWorld( playerid, fadeScreen[ playerid ][ fsVirtualWorld ] );
  210.                     fadeScreen[ playerid ][ fsVirtualWorld ] = -1;
  211.                 }
  212.                 FadeScreenForPlayer( playerid, FADE_OUT, fadeScreen[ playerid ][ fsColor ] );
  213.             }
  214.             if( fadeScreen[ playerid ][ fsSkin ] != 0 )
  215.             {
  216.                 SetPlayerSkin( playerid, fadeScreen[ playerid ][ fsSkin ] - 1 ); // -1, kadangi funkcijoje buvo +1. Tai reikalinga tam, kad būtų leidžiama nustatyti CJ skiną(ID 0)
  217.                 fadeScreen[ playerid ][ fsSkin ] = 0;
  218.                 FadeScreenForPlayer( playerid, FADE_OUT, fadeScreen[ playerid ][ fsColor ] );
  219.             }
  220.             if( fadeScreen[ playerid ][ fsClearAnimations ] )
  221.             {
  222.                 fadeScreen[ playerid ][ fsClearAnimations ] = false;
  223.                 ClearAnimations( playerid );
  224.             }
  225.             if( fadeScreen[ playerid ][ fsCameraBehindPlayer ] )
  226.             {
  227.                 fadeScreen[ playerid ][ fsCameraBehindPlayer ] = false;
  228.                 SetCameraBehindPlayer( playerid );
  229.             }
  230.         }
  231.         CallRemoteFunction( "OnFadeComplete", "ddx", playerid, fadeScreen[ playerid ][ fsMode ], fadeScreen[ playerid ][ fsColor ] );
  232.         return 1;
  233.     }
  234.     return 1;
  235. }
  236.  
  237. stock GetFadeColor( steps, mode, color )
  238. {
  239.     new
  240.         alpha,
  241.         rgb[ 3 ],
  242.         hex
  243.     ;
  244.     if( mode == FADE_IN ) alpha = 255 - steps;
  245.     else alpha = 255 - ( 255 - steps );
  246.  
  247.     // ačiū 0x5A656578(a.k.a. Zeex)!
  248.     rgb[ 0 ] = ( color & 0xFF000000 ) >>> 24;
  249.     rgb[ 1 ] = ( color & 0x00FF0000 ) >>> 16;
  250.     rgb[ 2 ] = ( color & 0x0000FF00 ) >>> 8;
  251.  
  252.     hex |= ( rgb[ 0 ] & 0xFF ) << 24;
  253.     hex |= ( rgb[ 1 ] & 0xFF ) << 16;
  254.     hex |= ( rgb[ 2 ] & 0xFF ) << 8;
  255.     hex |= ( alpha & 0xFF );
  256.     return hex;
  257. }
Advertisement
Add Comment
Please, Sign In to add comment