Guest User

iScreenFader 1.4

a guest
Jun 21st, 2012
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 10.50 KB | None | 0 0
  1. /*
  2.  
  3.         iScreenFader 1.4
  4.         pabaigta 2012m. Birželio 21d. 11:54
  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.             2012m. Birželio 21d.:
  68.                 - ištaisyta klaida, dėl kurios pirmą kartą po serverio įjungimo panaudojus ne FadePlayerPos funkciją, galėjo užtamsinus ekraną žaidėjus nukelti į neteisingą poziciją. Tas pats ir su interior'u bei virtual world'u.
  69. */
  70.  
  71.  
  72. #define FADE_IN 1
  73. #define FADE_OUT 2
  74.  
  75.  
  76. forward OnFadeComplete( playerid, mode, color );
  77.  
  78.  
  79. enum fadeScreenEnumas
  80. {
  81.     fsTD_sukurtas,
  82.     PlayerText:fsTextDraw,
  83.     fsTimer,
  84.     fsSteps,
  85.     fsMode,
  86.     fsColor,
  87.  
  88.     Float:fsPos[ 4 ],
  89.     fsInterior,
  90.     fsVirtualWorld,
  91.     fsSkin,
  92.     fsClearAnimations,
  93.     fsCameraBehindPlayer
  94. }
  95.  
  96. #define FADE_KOKYBE_GERA 1
  97. #define FADE_KOKYBE_BLOGA 2
  98.  
  99. new
  100.     fadeScreen[ MAX_PLAYERS ][ fadeScreenEnumas ],
  101.     fadeKokybe_intervalas = 20,
  102.     fadeKokybe_mazinimas = 4
  103. ;
  104.  
  105. stock iScreenFader_Kokybe( id )
  106. {
  107.     if( id != FADE_KOKYBE_GERA && id != FADE_KOKYBE_BLOGA ) return print( "KLAIDA iScreenFader naudojime! iScreenFader_Kokybe funkcijoje naudjama netinkama reikšmė." );
  108.     if( id == FADE_KOKYBE_GERA )
  109.     {
  110.         fadeKokybe_intervalas = 20;
  111.         fadeKokybe_mazinimas = 4;
  112.     }
  113.     else
  114.     {
  115.         fadeKokybe_intervalas = 100;
  116.         fadeKokybe_mazinimas = 20;
  117.     }
  118.     return 1;
  119. }
  120.  
  121. stock FadeScreenForPlayer( playerid, mode, color = 0x0FF )
  122. {
  123.     if( mode != FADE_IN && mode != FADE_OUT ) return printf( "KLAIDA iScreenFader naudojime! FadeScreenForPlayer žaidėjui %d mode buvo netinkamas.", playerid );
  124.     if( fadeScreen[ playerid ][ fsSteps ] > 0 ) return print( "KLAIDA iScreenFader naudojime! FadeScreenForPlayer funkcijoje žaidėjas %d jau naudoja ekrano tamsinimą." );
  125.     fadeScreen[ playerid ][ fsSteps ] = 255;
  126.     fadeScreen[ playerid ][ fsMode ] = mode;
  127.     fadeScreen[ playerid ][ fsColor ] = color;
  128.     fadeScreen[ playerid ][ fsTimer ] = SetTimerEx( "FadeScreen", fadeKokybe_intervalas, true, "d", playerid );
  129.     return 1;
  130. }
  131.  
  132. stock FadePlayerPos( playerid, color = 0x0FF, Float:fsPosX, Float:fsPosY, Float:fsPosZ, Float:fsPosA = -1.0, fsInt = -1, fsVW = -1, fsClearAnims = true, fsCamera = false )
  133. {
  134.     if( fadeScreen[ playerid ][ fsSteps ] > 0 ) return printf( "KLAIDA iScreenFader naudojime! FadePlayerPos funkcijoje žaidėjas %d jau naudoja ekrano tamsinimą.", playerid );
  135.     fadeScreen[ playerid ][ fsSteps ] = 255;
  136.     fadeScreen[ playerid ][ fsMode ] = FADE_IN;
  137.     fadeScreen[ playerid ][ fsColor ] = color;
  138.     fadeScreen[ playerid ][ fsPos ][ 0 ] = fsPosX + 1.0;
  139.     fadeScreen[ playerid ][ fsPos ][ 1 ] = fsPosY + 1.0;
  140.     fadeScreen[ playerid ][ fsPos ][ 2 ] = fsPosZ + 1.0;
  141.     fadeScreen[ playerid ][ fsPos ][ 3 ] = fsPosA + 1.0;
  142.     fadeScreen[ playerid ][ fsInterior ] = fsInt + 1;
  143.     fadeScreen[ playerid ][ fsVirtualWorld ] = fsVW + 1;
  144.     fadeScreen[ playerid ][ fsClearAnimations ] = fsClearAnims;
  145.     fadeScreen[ playerid ][ fsCameraBehindPlayer ] = fsCamera;
  146.     fadeScreen[ playerid ][ fsTimer ] = SetTimerEx( "FadeScreen", fadeKokybe_intervalas, true, "d", playerid );
  147.     return 1;
  148. }
  149.  
  150. stock FadePlayerSkin( playerid, skinID, color = 0x0FF )
  151. {
  152.     if( fadeScreen[ playerid ][ fsSteps ] > 0 ) return printf( "KLAIDA iScreenFader naudojime! FadePlayerSkin funkcijoje žaidėjas %d jau naudoja ekrano tamsinimą.", playerid );
  153.     fadeScreen[ playerid ][ fsSteps ] = 255;
  154.     fadeScreen[ playerid ][ fsMode ] = FADE_IN;
  155.     fadeScreen[ playerid ][ fsColor ] = color;
  156.     fadeScreen[ playerid ][ fsSkin ] = skinID + 1;
  157.     fadeScreen[ playerid ][ fsTimer ] = SetTimerEx( "FadeScreen", fadeKokybe_intervalas, true, "d", playerid );
  158.     return 1;
  159. }
  160.  
  161. forward FadeScreen( playerid );
  162. public FadeScreen( playerid )
  163. {
  164.     if( !fadeScreen[ playerid ][ fsTD_sukurtas ] )
  165.     {
  166.         fadeScreen[ playerid ][ fsTextDraw ] = CreatePlayerTextDraw( playerid, -159.000000, -288.000000, "iScreenFader by InstincT" );
  167.         PlayerTextDrawBackgroundColor( playerid, fadeScreen[ playerid ][ fsTextDraw ], 255 );
  168.         PlayerTextDrawFont( playerid, fadeScreen[ playerid ][ fsTextDraw ], 0 );
  169.         PlayerTextDrawLetterSize( playerid, fadeScreen[ playerid ][ fsTextDraw ], 0.270000, 88.999687 );
  170.         PlayerTextDrawColor( playerid, fadeScreen[ playerid ][ fsTextDraw ], -1 );
  171.         PlayerTextDrawSetOutline( playerid, fadeScreen[ playerid ][ fsTextDraw ], 0 );
  172.         PlayerTextDrawSetProportional( playerid, fadeScreen[ playerid ][ fsTextDraw ], 1 );
  173.         PlayerTextDrawSetShadow( playerid, fadeScreen[ playerid ][ fsTextDraw ], 1 );
  174.         PlayerTextDrawUseBox( playerid, fadeScreen[ playerid ][ fsTextDraw ], 1 );
  175.         PlayerTextDrawBoxColor( playerid, fadeScreen[ playerid ][ fsTextDraw ], 255 );
  176.         PlayerTextDrawTextSize( playerid, fadeScreen[ playerid ][ fsTextDraw ], 848.000000, 2.000000 );
  177.         fadeScreen[ playerid ][ fsTD_sukurtas ] = true;
  178.     }
  179.     PlayerTextDrawBoxColor( playerid, fadeScreen[ playerid ][ fsTextDraw ],
  180.     GetFadeColor( fadeScreen[ playerid ][ fsSteps ], fadeScreen[ playerid ][ fsMode ], fadeScreen[ playerid ][ fsColor ] ) );
  181.     PlayerTextDrawShow( playerid, fadeScreen[ playerid ][ fsTextDraw ] );
  182.     fadeScreen[ playerid ][ fsSteps ] -= fadeKokybe_mazinimas;
  183.     if( fadeScreen[ playerid ][ fsSteps ] <= 0 )
  184.     {
  185.         KillTimer( fadeScreen[ playerid ][ fsTimer ] );
  186.         if( fadeScreen[ playerid ][ fsMode ] == FADE_OUT )
  187.         {
  188.             PlayerTextDrawHide( playerid, fadeScreen[ playerid ][ fsTextDraw ] );
  189.         }
  190.         else
  191.         {
  192.             if( fadeScreen[ playerid ][ fsPos ][ 0 ] != 0.0 && fadeScreen[ playerid ][ fsPos ][ 1 ] != 0.0 && fadeScreen[ playerid ][ fsPos ][ 2 ] != 0.0 )
  193.             {
  194.                 SetPlayerPos( playerid, fadeScreen[ playerid ][ fsPos ][ 0 ] - 1.0, fadeScreen[ playerid ][ fsPos ][ 1 ] - 1.0, fadeScreen[ playerid ][ fsPos ][ 2 ] - 1.0 );
  195.                 fadeScreen[ playerid ][ fsPos ][ 0 ] = 0.0;
  196.                 fadeScreen[ playerid ][ fsPos ][ 1 ] = 0.0;
  197.                 fadeScreen[ playerid ][ fsPos ][ 2 ] = 0.0;
  198.  
  199.                 if( fadeScreen[ playerid ][ fsPos ][ 3 ] != 0.0 )
  200.                 {
  201.                     SetPlayerFacingAngle( playerid, fadeScreen[ playerid ][ fsPos ][ 3 ] - 1.0 );
  202.                     fadeScreen[ playerid ][ fsPos ][ 3 ] = 0.0;
  203.                 }
  204.                 if( fadeScreen[ playerid ][ fsInterior ] != 0 )
  205.                 {
  206.                     SetPlayerInterior( playerid, fadeScreen[ playerid ][ fsInterior ] - 1 );
  207.                     fadeScreen[ playerid ][ fsInterior ] = 0;
  208.                 }
  209.                 if( fadeScreen[ playerid ][ fsVirtualWorld ] != 0 )
  210.                 {
  211.                     SetPlayerVirtualWorld( playerid, fadeScreen[ playerid ][ fsVirtualWorld ] - 1 );
  212.                     fadeScreen[ playerid ][ fsVirtualWorld ] = 0;
  213.                 }
  214.                 FadeScreenForPlayer( playerid, FADE_OUT, fadeScreen[ playerid ][ fsColor ] );
  215.             }
  216.             if( fadeScreen[ playerid ][ fsSkin ] != 0 )
  217.             {
  218.                 SetPlayerSkin( playerid, fadeScreen[ playerid ][ fsSkin ] - 1 );
  219.                 fadeScreen[ playerid ][ fsSkin ] = 0;
  220.                 FadeScreenForPlayer( playerid, FADE_OUT, fadeScreen[ playerid ][ fsColor ] );
  221.             }
  222.             if( fadeScreen[ playerid ][ fsClearAnimations ] )
  223.             {
  224.                 fadeScreen[ playerid ][ fsClearAnimations ] = false;
  225.                 ClearAnimations( playerid );
  226.             }
  227.             if( fadeScreen[ playerid ][ fsCameraBehindPlayer ] )
  228.             {
  229.                 fadeScreen[ playerid ][ fsCameraBehindPlayer ] = false;
  230.                 SetCameraBehindPlayer( playerid );
  231.             }
  232.         }
  233.         CallRemoteFunction( "OnFadeComplete", "ddx", playerid, fadeScreen[ playerid ][ fsMode ], fadeScreen[ playerid ][ fsColor ] );
  234.         return 1;
  235.     }
  236.     return 1;
  237. }
  238.  
  239. stock GetFadeColor( steps, mode, color )
  240. {
  241.     new
  242.         alpha,
  243.         rgb[ 3 ],
  244.         hex
  245.     ;
  246.     if( mode == FADE_IN ) alpha = 255 - steps;
  247.     else alpha = 255 - ( 255 - steps );
  248.  
  249.     // ačiū 0x5A656578(a.k.a. Zeex)!
  250.     rgb[ 0 ] = ( color & 0xFF000000 ) >>> 24;
  251.     rgb[ 1 ] = ( color & 0x00FF0000 ) >>> 16;
  252.     rgb[ 2 ] = ( color & 0x0000FF00 ) >>> 8;
  253.  
  254.     hex |= ( rgb[ 0 ] & 0xFF ) << 24;
  255.     hex |= ( rgb[ 1 ] & 0xFF ) << 16;
  256.     hex |= ( rgb[ 2 ] & 0xFF ) << 8;
  257.     hex |= ( alpha & 0xFF );
  258.     return hex;
  259. }
Advertisement
Add Comment
Please, Sign In to add comment