Guest User

iScreenFader 1.5

a guest
Jun 23rd, 2012
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 10.06 KB | None | 0 0
  1. /*
  2.  
  3.         iScreenFader 1.5
  4.         pabaigta 2012m. Birželio 23d. 11:32
  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.             2012m. Birželio 23d.:
  70.                 - naudojamas vienas vienintelis globalus TextDraw'as, vietoje kiekvienam žaidėjui kuriamo atskirai PlayerTextDraw'o.
  71. */
  72.  
  73.  
  74. #define FADE_IN 1
  75. #define FADE_OUT 2
  76.  
  77.  
  78. forward OnFadeComplete( playerid, mode, color );
  79.  
  80.  
  81. enum fadeScreenEnumas
  82. {
  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.     Text:fsTextDraw,
  102.     bool:fsTD_sukurtas,
  103.     fadeKokybe_intervalas = 20,
  104.     fadeKokybe_mazinimas = 4
  105. ;
  106.  
  107. stock iScreenFader_Kokybe( id )
  108. {
  109.     if( id != FADE_KOKYBE_GERA && id != FADE_KOKYBE_BLOGA ) return print( "KLAIDA iScreenFader naudojime! iScreenFader_Kokybe funkcijoje naudjama netinkama reikšmė." );
  110.     if( id == FADE_KOKYBE_GERA )
  111.     {
  112.         fadeKokybe_intervalas = 20;
  113.         fadeKokybe_mazinimas = 4;
  114.     }
  115.     else
  116.     {
  117.         fadeKokybe_intervalas = 100;
  118.         fadeKokybe_mazinimas = 20;
  119.     }
  120.     return 1;
  121. }
  122.  
  123. stock FadeScreenForPlayer( playerid, mode, color = 0x0FF )
  124. {
  125.     if( mode != FADE_IN && mode != FADE_OUT ) return printf( "KLAIDA iScreenFader naudojime! FadeScreenForPlayer žaidėjui %d mode buvo netinkamas.", playerid );
  126.     if( fadeScreen[ playerid ][ fsSteps ] > 0 ) return print( "KLAIDA iScreenFader naudojime! FadeScreenForPlayer funkcijoje žaidėjas %d jau naudoja ekrano tamsinimą." );
  127.     fadeScreen[ playerid ][ fsSteps ] = 255;
  128.     fadeScreen[ playerid ][ fsMode ] = mode;
  129.     fadeScreen[ playerid ][ fsColor ] = color;
  130.     fadeScreen[ playerid ][ fsTimer ] = SetTimerEx( "FadeScreen", fadeKokybe_intervalas, true, "d", playerid );
  131.     return 1;
  132. }
  133.  
  134. stock FadePlayerPos( playerid, color = 0x0FF, Float:fsPosX, Float:fsPosY, Float:fsPosZ, Float:fsPosA = -1.0, fsInt = -1, fsVW = -1, fsClearAnims = true, fsCamera = false )
  135. {
  136.     if( fadeScreen[ playerid ][ fsSteps ] > 0 ) return printf( "KLAIDA iScreenFader naudojime! FadePlayerPos funkcijoje žaidėjas %d jau naudoja ekrano tamsinimą.", playerid );
  137.     fadeScreen[ playerid ][ fsSteps ] = 255;
  138.     fadeScreen[ playerid ][ fsMode ] = FADE_IN;
  139.     fadeScreen[ playerid ][ fsColor ] = color;
  140.     fadeScreen[ playerid ][ fsPos ][ 0 ] = fsPosX + 1.0;
  141.     fadeScreen[ playerid ][ fsPos ][ 1 ] = fsPosY + 1.0;
  142.     fadeScreen[ playerid ][ fsPos ][ 2 ] = fsPosZ + 1.0;
  143.     fadeScreen[ playerid ][ fsPos ][ 3 ] = fsPosA + 1.0;
  144.     fadeScreen[ playerid ][ fsInterior ] = fsInt + 1;
  145.     fadeScreen[ playerid ][ fsVirtualWorld ] = fsVW + 1;
  146.     fadeScreen[ playerid ][ fsClearAnimations ] = fsClearAnims;
  147.     fadeScreen[ playerid ][ fsCameraBehindPlayer ] = fsCamera;
  148.     fadeScreen[ playerid ][ fsTimer ] = SetTimerEx( "FadeScreen", fadeKokybe_intervalas, true, "d", playerid );
  149.     return 1;
  150. }
  151.  
  152. stock FadePlayerSkin( playerid, skinID, color = 0x0FF )
  153. {
  154.     if( fadeScreen[ playerid ][ fsSteps ] > 0 ) return printf( "KLAIDA iScreenFader naudojime! FadePlayerSkin funkcijoje žaidėjas %d jau naudoja ekrano tamsinimą.", playerid );
  155.     fadeScreen[ playerid ][ fsSteps ] = 255;
  156.     fadeScreen[ playerid ][ fsMode ] = FADE_IN;
  157.     fadeScreen[ playerid ][ fsColor ] = color;
  158.     fadeScreen[ playerid ][ fsSkin ] = skinID + 1;
  159.     fadeScreen[ playerid ][ fsTimer ] = SetTimerEx( "FadeScreen", fadeKokybe_intervalas, true, "d", playerid );
  160.     return 1;
  161. }
  162.  
  163. forward FadeScreen( playerid );
  164. public FadeScreen( playerid )
  165. {
  166.     if( !fsTD_sukurtas )
  167.     {
  168.         fsTextDraw = TextDrawCreate( -159.000000, -288.000000, "iScreenFader by InstincT" );
  169.         TextDrawBackgroundColor( fsTextDraw, 255 );
  170.         TextDrawFont( fsTextDraw, 0 );
  171.         TextDrawLetterSize( fsTextDraw, 0.270000, 88.999687 );
  172.         TextDrawColor( fsTextDraw, -1 );
  173.         TextDrawSetOutline( fsTextDraw, 0 );
  174.         TextDrawSetProportional( fsTextDraw, 1 );
  175.         TextDrawSetShadow( fsTextDraw, 1 );
  176.         TextDrawUseBox( fsTextDraw, 1 );
  177.         TextDrawBoxColor( fsTextDraw, 255 );
  178.         TextDrawTextSize( fsTextDraw, 848.000000, 2.000000 );
  179.         fsTD_sukurtas = true;
  180.     }
  181.     TextDrawBoxColor( fsTextDraw, GetFadeColor( fadeScreen[ playerid ][ fsSteps ], fadeScreen[ playerid ][ fsMode ], fadeScreen[ playerid ][ fsColor ] ) );
  182.     TextDrawShowForPlayer( playerid, fsTextDraw );
  183.     fadeScreen[ playerid ][ fsSteps ] -= fadeKokybe_mazinimas;
  184.     if( fadeScreen[ playerid ][ fsSteps ] <= 0 )
  185.     {
  186.         KillTimer( fadeScreen[ playerid ][ fsTimer ] );
  187.         if( fadeScreen[ playerid ][ fsMode ] == FADE_OUT )
  188.         {
  189.             TextDrawHideForPlayer( playerid, fsTextDraw );
  190.         }
  191.         else
  192.         {
  193.             if( fadeScreen[ playerid ][ fsPos ][ 0 ] != 0.0 && fadeScreen[ playerid ][ fsPos ][ 1 ] != 0.0 && fadeScreen[ playerid ][ fsPos ][ 2 ] != 0.0 )
  194.             {
  195.                 SetPlayerPos( playerid, fadeScreen[ playerid ][ fsPos ][ 0 ] - 1.0, fadeScreen[ playerid ][ fsPos ][ 1 ] - 1.0, fadeScreen[ playerid ][ fsPos ][ 2 ] - 1.0 );
  196.                 fadeScreen[ playerid ][ fsPos ][ 0 ] = 0.0;
  197.                 fadeScreen[ playerid ][ fsPos ][ 1 ] = 0.0;
  198.                 fadeScreen[ playerid ][ fsPos ][ 2 ] = 0.0;
  199.  
  200.                 if( fadeScreen[ playerid ][ fsPos ][ 3 ] != 0.0 )
  201.                 {
  202.                     SetPlayerFacingAngle( playerid, fadeScreen[ playerid ][ fsPos ][ 3 ] - 1.0 );
  203.                     fadeScreen[ playerid ][ fsPos ][ 3 ] = 0.0;
  204.                 }
  205.                 if( fadeScreen[ playerid ][ fsInterior ] != 0 )
  206.                 {
  207.                     SetPlayerInterior( playerid, fadeScreen[ playerid ][ fsInterior ] - 1 );
  208.                     fadeScreen[ playerid ][ fsInterior ] = 0;
  209.                 }
  210.                 if( fadeScreen[ playerid ][ fsVirtualWorld ] != 0 )
  211.                 {
  212.                     SetPlayerVirtualWorld( playerid, fadeScreen[ playerid ][ fsVirtualWorld ] - 1 );
  213.                     fadeScreen[ playerid ][ fsVirtualWorld ] = 0;
  214.                 }
  215.                 FadeScreenForPlayer( playerid, FADE_OUT, fadeScreen[ playerid ][ fsColor ] );
  216.             }
  217.             if( fadeScreen[ playerid ][ fsSkin ] != 0 )
  218.             {
  219.                 SetPlayerSkin( playerid, fadeScreen[ playerid ][ fsSkin ] - 1 );
  220.                 fadeScreen[ playerid ][ fsSkin ] = 0;
  221.                 FadeScreenForPlayer( playerid, FADE_OUT, fadeScreen[ playerid ][ fsColor ] );
  222.             }
  223.             if( fadeScreen[ playerid ][ fsClearAnimations ] )
  224.             {
  225.                 fadeScreen[ playerid ][ fsClearAnimations ] = false;
  226.                 ClearAnimations( playerid );
  227.             }
  228.             if( fadeScreen[ playerid ][ fsCameraBehindPlayer ] )
  229.             {
  230.                 fadeScreen[ playerid ][ fsCameraBehindPlayer ] = false;
  231.                 SetCameraBehindPlayer( playerid );
  232.             }
  233.         }
  234.         CallRemoteFunction( "OnFadeComplete", "ddx", playerid, fadeScreen[ playerid ][ fsMode ], fadeScreen[ playerid ][ fsColor ] );
  235.         return 1;
  236.     }
  237.     return 1;
  238. }
  239.  
  240. stock GetFadeColor( steps, mode, color )
  241. {
  242.     new
  243.         alpha,
  244.         rgb[ 3 ],
  245.         hex
  246.     ;
  247.     if( mode == FADE_IN ) alpha = 255 - steps;
  248.     else alpha = 255 - ( 255 - steps );
  249.  
  250.     // ačiū 0x5A656578(a.k.a. Zeex)!
  251.     rgb[ 0 ] = ( color & 0xFF000000 ) >>> 24;
  252.     rgb[ 1 ] = ( color & 0x00FF0000 ) >>> 16;
  253.     rgb[ 2 ] = ( color & 0x0000FF00 ) >>> 8;
  254.  
  255.     hex |= ( rgb[ 0 ] & 0xFF ) << 24;
  256.     hex |= ( rgb[ 1 ] & 0xFF ) << 16;
  257.     hex |= ( rgb[ 2 ] & 0xFF ) << 8;
  258.     hex |= ( alpha & 0xFF );
  259.     return hex;
  260. }
Advertisement
Add Comment
Please, Sign In to add comment