2 a/ A* @: A* v- G: t/ N' Y#ifndef __WORLDSERVER , ]+ l' i% r9 H! G9 F3 g
DWORD dwAmbient = D3DCOLOR_ARGB( 0,0,0,0); ( a" l7 W+ \5 j6 D CLight* pLight = NULL; ; [' L5 d" K+ V% @; V9 y8 u 0 G: w' _# e7 W2 |6 G D3DXVECTOR3 vPos = ( CObj::GetActiveObj() != NULL ? CObj::GetActiveObj()->GetPos() : D3DXVECTOR3( 0, 0, 0 ) ); ! g+ K' C: M: {+ L# R F' S 1 ~# A! `4 I" I: ~ pLight = GetLight( "direction" ); 6 r' B/ D) D3 m% N3 _8 R+ _9 j$ O3 E, l! q# L- l# g3 C
#if __VER >= 15 // __BS_CHANGING_ENVIR * h0 H4 [+ A) a: F: x0 n3 Z if( g_pPlayer ){# R! x- ?' L- \& F! l5 u
ENVIR_INFO* pInfo = GetInContinent( g_pPlayer->GetPos( ) ); + y7 c! b7 m7 ?4 h/ f1 h if( pInfo && m_kCurContinent._bUseEnvir ) // ′??ú ?èàì°í ′??úá¤o??| àì???ò °??ì?? !! / \# E! ~" F- q! A$ e { : w- A3 w v- O) H4 Q h if( pLight ) 6 U. L- I& P: w0 |' F y { . z& G7 U9 p+ x9 e" @, T- Z pLight->Ambient.r = pInfo->_fAmbient[ 0 ]; : _3 S; Q6 n. v; D: Q pLight->Ambient.g = pInfo->_fAmbient[ 1 ]; $ F; y( H( v5 y pLight->Ambient.b = pInfo->_fAmbient[ 2 ]; Z. |8 N: A6 v( b( [
- c8 F) C+ E$ r
pLight->Specular.r = 2.0f; 5 H, s- O6 `; ^0 x& }5 {' [2 L6 {" T0 n pLight->Specular.g = 2.0f; ' M% i) s' X& q# f: x1 D pLight->Specular.b = 2.0f;0 I; v; y S$ b& D8 N% m+ R5 L1 f% R* T
1 a' \' @+ b- K. M1 o
pLight->Diffuse.r = pInfo->_fDiffuse[ 0 ];* G( Q% a' X/ {; Y, B* o! w
pLight->Diffuse.g = pInfo->_fDiffuse[ 1 ]; ' X& @7 b) o- j8 `, x+ z pLight->Diffuse.b = pInfo->_fDiffuse[ 2 ]; + x4 W, H, Z4 Q/ `; }) I 3 M# q- e+ \7 q# \ HookUpdateLight( pLight ); 5 H# \" Y) K* |' H" X
$ h+ I! s. r8 g) @ memcpy( &m_lightFogSky, pLight, sizeof( m_lightFogSky ) );( P; o, q# s* \1 ~$ V
4 _6 s6 {& B) r u% c1 B) ^ pLight->Diffuse.r *= 1.2f;1 h' N0 ?4 v @7 ~; ?
pLight->Diffuse.g *= 1.2f;5 y. ] Y* \9 F1 t
pLight->Diffuse.b *= 1.2f; 5 Y8 O: k) w! S. E' b* M A1 o% H8 W/ f" v9 c
pLight->Ambient.r *= 0.8f; ) e; u/ o/ U/ @4 k9 {3 O pLight->Ambient.g *= 0.8f; ^9 s N5 @' s7 }; w" l pLight->Ambient.b *= 0.8f;. h% P' P; o6 z$ e
: W3 B! c; ~" J: C$ e. n: h N memcpy( &m_light, pLight, sizeof( m_light ) ); 5 z0 m, U$ O' @7 q3 P : r( a& h5 ]# ?5 ^6 z D3DXVECTOR3 vecSun = D3DXVECTOR3( 0.0f, 0.5f,0.5f);) ~* T% L4 L3 o4 e" k2 m
D3DXVec3Normalize(&(vecSun),&(vecSun));2 @. D9 B/ ^4 {6 j
pLight->SetDir( -vecSun.x, -vecSun.y, -vecSun.z ); # I: U5 K$ Q) h6 C/ l pLight->Appear( m_pd3dDevice, TRUE );$ f: m, `6 V. I/ Z0 `0 y& X
7 s3 q+ l; u" R: f DWORD dwR, dwG, dwB;, h( M0 V! [- b6 u1 i9 B% l& [$ ?7 e
dwR = (DWORD)( pLight->Ambient.r * 255 );0 |" B8 h$ |* z2 |$ S
dwG = (DWORD)( pLight->Ambient.g * 255 ); % ?5 h# v, @/ u5 r/ M% c. O dwB = (DWORD)( pLight->Ambient.b * 255 );, m9 D9 t( c+ e) S, V
dwAmbient = D3DCOLOR_ARGB( 255, dwR, dwG, dwB ); : K3 S& h/ L6 R* Z } ( h7 U/ M0 G8 L } . c% r5 r$ D K9 m% m" R8 g+ D }; z" L* d9 E: E2 x3 N; C$ g x
else ' K5 z/ O. g* E. E$ I* O, \#endif : B' u( E7 B/ @- ?' f% S* R6 E
) M$ t5 [7 I* \/ B# h! g9 G if( m_bIsIndoor ), g; L4 h U+ A8 {& y# ?) C+ y9 @
{ + v( Z X; G; z, U if( pLight )6 D* d* E, l* c y& Z' q. W4 F7 y+ H
{ & _) k4 c) P% T4 A4 o+ K- T* o
// à??μ oˉè* 2 E* K% m" \$ W6 Z pLight->Diffuse.r = ((m_dwDiffuse>>16) & 0xff) / 255.f;$ v" r5 C& x/ v
pLight->Diffuse.g = ((m_dwDiffuse>>8) & 0xff) / 255.f; / W. W1 @' _* |) f# ~/ l pLight->Diffuse.b = ((m_dwDiffuse) & 0xff) / 255.f;, ^) I. J9 D9 R
* |- T+ |1 y1 a# m& }8 ]; \
// oˉè* ??à? # j$ M& C& }, q; Y pLight->Specular.r = 1.0f; 5 Q1 m/ C# r5 R! K9 L& J pLight->Specular.g = 1.0f;. k: V7 f) b4 o7 [8 P" k
pLight->Specular.b = 1.0f; - i7 E6 R- w* n // àü?? oˉè* 9 S* _5 t G/ B+ s pLight->Ambient.r = ((m_dwAmbient>>16) & 0xff) / 255.f; % c, O- d9 V' N6 U% a( m pLight->Ambient.g = ((m_dwAmbient>>8) & 0xff) / 255.f; & q% u5 P) z+ ]4 {% O pLight->Ambient.b = ((m_dwAmbient) & 0xff) / 255.f; . d0 ~' J( i7 e+ o2 @ P9 G7 v( Y( H$ b
if( g_Option.m_nBloom ) // ???t?? ?é??àì ??á?à?à??? á??íà? á? 3???áà?? ??′ù. ?è±×?ˉ?é 3ê1? 1à??.! o3 U/ f8 G' O* X0 [$ h% B b
{ 8 W' A& I, P0 O3 S) @4 { pLight->Diffuse.r *= 0.6f;/ T+ M$ Z( G6 o9 a
pLight->Diffuse.g *= 0.6f;1 E& }( u) L% T
pLight->Diffuse.b *= 0.6f;4 ?* k1 i8 i4 R# A3 q% I* y3 ^7 f+ ~0 K
pLight->Ambient.r *= 0.7f;8 | d( q8 ]$ j4 N/ q' t
pLight->Ambient.g *= 0.7f;' [9 l4 \ T7 A8 S& _
pLight->Ambient.b *= 0.7f;; u% R3 f9 G( }- s1 p5 d- ^
} 6 F0 z% F& x( W, I$ M# f 0 ~- {8 j7 j$ d- B#if __VER >= 15 // __BS_CHANGING_ENVIR5 @% N( j6 \& D9 y' D' D
if( g_pPlayer )# B/ U7 H! I P6 p0 S
HookUpdateLight( pLight ); / R* X* G4 T; R& B0 G6 Z& I0 z' F#endif5 ?- a0 ]+ |3 n: `: {
memcpy( &m_lightFogSky, pLight, sizeof( m_lightFogSky ) ); % [2 ]7 ?& O+ Y2 C 6 u0 `0 A& n3 R# q V9 X pLight->Diffuse.r += 0.1f;2 k$ C) [5 m0 C; _$ O1 b
pLight->Diffuse.g += 0.1f; ! g- b. w5 G, d! z+ m pLight->Diffuse.b += 0.1f; 0 n$ M0 L8 a& Q2 ] // oˉè* ??à? ) m" |4 M+ b w: v
pLight->Specular.r = 2.0f;! G1 n+ y+ O4 }
pLight->Specular.g = 2.0f; $ K; O2 E ^. h' C pLight->Specular.b = 2.0f;. `7 S; R# e4 O. n4 G, h4 N
// á?oˉ # x; m7 {$ H* {4 P; I$ t/ b! p pLight->Ambient.r *= 0.9f; ) f: v6 V0 D( E } @ pLight->Ambient.g *= 0.9f; , ^! W3 T* [, S! t# n# F3 S7 X pLight->Ambient.b *= 0.9f;- Z$ b, v+ K0 f3 `; c7 r
( u" ?3 ~ C7 b: ]# M+ T7 B
memcpy( &m_light, pLight, sizeof( m_light ) ); * s; K( ~3 I0 U. Z! \; M; ^4 b N: H/ v3 e$ ^; u2 b5 k
pLight->SetDir( m_v3LightDir.x, m_v3LightDir.y, m_v3LightDir.z );' Y; _1 \+ P& s
pLight->Appear( m_pd3dDevice, TRUE ); , S- Q. |% E. b' r, S # {& G/ G- }. u4 S0 [1 O DWORD dwR, dwG, dwB; & V. V! Q' |( H; h& I5 L- v% ]) R. v dwR = (DWORD)( pLight->Ambient.r * 255 ); Q4 e& ^( W8 O! `6 O, _" r dwG = (DWORD)( pLight->Ambient.g * 255 );/ J9 s1 [3 d+ x* _" f' k4 \
dwB = (DWORD)( pLight->Ambient.b * 255 ); ( O# _9 V1 t- U# ^& z' C: F1 p dwAmbient = D3DCOLOR_ARGB( 255, dwR, dwG, dwB );1 t7 M- M7 t. y2 ] q: A) e; J
}5 }1 e( E; |8 ~% u. A1 p; O% ^
} - f5 B$ J2 W( r5 g6 h& p3 } else + l0 V$ W2 P5 S9 r& J/ A' f {. z6 x* @& y' h9 ^7 u: {: q$ ^
if( pLight ) ) V X* m" W; L! | {, C; Z" M4 F; E! k5 n! `8 \
3 |- L6 K8 ?: P: ?" N$ G5 _6 u
int nHour = 8, nMin = 0; `- a9 ?' e* Z I
#ifdef __CLIENT $ U) r/ @0 k) C' }+ J9 | // ???óàì?e??′? ??°£à? g_GameTimer???* °?á???′ù. " C- K6 ~+ @% G4 N& c
nHour = g_GameTimer.m_nHour; ! u! p( m' |/ o, A( W! G0 f- x/ K nMin = g_GameTimer.m_nMin ;3 ~; g, f' U k; L3 F6 `( b* A- U
#else7 U) t; o* ]0 R8 h1 j) W% N& p
// o??o??′? ??°£à? m_nLightHour???* °?á???′ù. 0 S3 q/ l& w- Q( D if( m_nLightType == 1 )( b8 s5 a c1 }2 r3 ~
nHour = m_nLightHour;7 C) n7 c. B' ?+ |# v5 L/ E/ }
#endif c. o3 ], _( P. T; ^% ^ nHour--;# x, o, a* ^- h" Z5 y, e) ^5 J; w& t
if( nHour < 0 ) nHour = 0;+ @0 E3 O' J- B0 L
if( nHour > 23 ) nHour = 23;4 h) ]7 I3 Q# K7 C( Y
d+ N c7 f+ g* d. b3 ~5 M: w* L
//if( m_bFixedHour ) ( M, N0 K4 V( S7 ` // nHour = m_nFixedHour, nMin = 0; 2 S! A5 r' L2 D) e$ f5 c LIGHTCOLOR lightColorPrv = m_k24Light[ ( nHour - 1 == -1 ) ? 23 : nHour - 1 ];9 C, Z5 W) h: y
LIGHTCOLOR lightColor = m_k24Light[ nHour ];. J+ h- M6 a" V! P2 W e, f
/ R5 r( n& ]# _ `; x# V+ N _
//m_lightColor = lightColorPrv; % z, U) j( r7 `' z, N# K lightColorPrv.r1 += ( lightColor.r1 - lightColorPrv.r1) * nMin / 60; 6 R2 T/ C* J, ~+ t/ b lightColorPrv.g1 += ( lightColor.g1 - lightColorPrv.g1) * nMin / 60; 6 u3 X+ V9 c0 L lightColorPrv.b1 += ( lightColor.b1 - lightColorPrv.b1) * nMin / 60; ) u9 W! l8 j# Q8 ? lightColorPrv.r2 += ( lightColor.r2 - lightColorPrv.r2) * nMin / 60; & w6 f% w! C4 R1 }9 Q* L lightColorPrv.g2 += ( lightColor.g2 - lightColorPrv.g2) * nMin / 60; 9 b z% I) Z* M lightColorPrv.b2 += ( lightColor.b2 - lightColorPrv.b2) * nMin / 60;1 K- U2 A" v$ ~9 \
// 60(minMax) : 15(curMin) = 0.5(colorDistant) : x(curCol) 9 O0 w1 N/ D0 H% t; W& v& n: f1 H3 d4 `" g: d5 y% t
// à??μ oˉè* ! c6 R6 E# L; I" j% ^( }
pLight->Diffuse.r = lightColorPrv.r1; + @ w, L* D* Z pLight->Diffuse.g = lightColorPrv.g1; ( J! P7 h0 y N$ v+ p5 Y# ?7 ~ pLight->Diffuse.b = lightColorPrv.b1;- b. n* h1 N) j
// oˉè* ??à? , D9 C& s) u/ Y$ L" G( N pLight->Specular.r = 1.0f;6 h. Y; a0 I( D K
pLight->Specular.g = 1.0f;5 z2 _# D; b9 b# o2 ^+ f3 R
pLight->Specular.b = 1.0f; o$ N/ K- y7 s
// àü?? oˉè* + |& D( ~/ ?, H5 J: b
pLight->Ambient.r = lightColorPrv.r2;% Y" y, l4 m; |6 b
pLight->Ambient.g = lightColorPrv.g2;5 E; \; \+ Y" D& U9 R! x
pLight->Ambient.b = lightColorPrv.b2;/ Q4 m, ~$ x5 W0 Q) G, y; l
; H( d$ {/ U5 a6 h/ M" I7 t
if( g_Option.m_nBloom ) // ???t?? ?é??àì ??á?à?à??? á??íà? á? 3???áà?? ??′ù. ?è±×?ˉ?é 3ê1? 1à??. 3 O1 s2 _) f7 M {( m0 n5 O5 @& t/ \& N7 G
pLight->Diffuse.r *= 0.6f;6 Y( H9 L0 b- N& [6 m
pLight->Diffuse.g *= 0.6f; $ k' D8 K! ~0 O- n pLight->Diffuse.b *= 0.6f;+ C4 \ r9 S2 A& }4 I* g% E! j( i
pLight->Ambient.r *= 0.7f;% Q- I6 O O9 N4 _
pLight->Ambient.g *= 0.7f; . k7 A4 {! I: _; p; |$ J" ~0 {$ }8 w pLight->Ambient.b *= 0.7f;$ W5 X5 Q2 O9 e3 A
}, ?6 r t3 }9 M% D/ x( p* e
( r$ z$ W) Q# S7 u& T r$ G6 n#if __VER >= 15 // __BS_CHANGING_ENVIR + M8 I9 H7 ^- s* O# i2 N if( g_pPlayer ) % Z% C' \! V2 _) B, W/ p HookUpdateLight( pLight ); 3 R( c2 h+ c( I0 H) I$ b: p
#endif% @$ W4 F! J, C# f8 i. Y
memcpy( &m_lightFogSky, pLight, sizeof( m_lightFogSky ) );4 U9 M9 {/ i0 S
" g2 W9 Y+ z$ B6 `5 U
#ifdef __YENV ( A7 i% j8 A: F( @9 F pLight->Diffuse.r *= 1.1f; % R. l" d r: F( t: l pLight->Diffuse.g *= 1.1f;0 T1 r) r9 h7 A, z
pLight->Diffuse.b *= 1.1f;8 e* q G2 h1 J) b3 R
// oˉè* ??à? ) R6 C+ H8 a% v pLight->Specular.r = 2.0f;! |* e& a8 s3 z M7 b4 o" C/ e
pLight->Specular.g = 2.0f; ) i% l1 r1 c: M" ?" C pLight->Specular.b = 2.0f; ! G' H, }9 F! z+ O: J1 c // á?oˉ $ f# j3 x# s/ D$ L4 v% T pLight->Ambient.r *= 1.0f; 3 m/ f2 p) v$ n% H: _ M pLight->Ambient.g *= 1.0f;. |# T8 F: M+ c4 q& `# S3 W$ y+ R( X
pLight->Ambient.b *= 1.0f;* M3 a4 O% c Q' C. z/ V) ^( c
#else //__YENV $ j- @. U3 q! D9 L1 E pLight->Diffuse.r *= 1.1f;; j5 h" b' a y1 \7 Z5 P6 o3 _0 m
pLight->Diffuse.g *= 1.1f; 3 N# {0 Q! K+ f4 N z pLight->Diffuse.b *= 1.1f; 7 l: m4 [: f! p2 Z/ k" H // oˉè* ??à? $ h, b0 H! N4 f! U* ]& _
pLight->Specular.r = 2.0f; 2 U7 }, j8 o( E1 O3 L% a pLight->Specular.g = 2.0f; 9 P! u+ I3 w- K5 X pLight->Specular.b = 2.0f;1 w+ S+ C1 ^! w+ O. ?7 x2 M$ r
// á?oˉ ! K! {1 ~# q. o! x' ?8 y
pLight->Ambient.r *= 0.9f; , M: w2 e1 T7 [; _# q pLight->Ambient.g *= 0.9f; ' T1 L+ ]- Y/ d, o% a2 d pLight->Ambient.b *= 0.9f;, X; U, c6 I6 _, V
#endif //__YENV + n- P( T# d M3 t
5 {( o( O$ g3 P5 y& n5 @
memcpy( &m_light, pLight, sizeof( m_light ) );$ S. e8 E0 S& G: X
, y5 ]; ]' ~9 D. r6 T
D3DXVECTOR3 vecSun=D3DXVECTOR3( 0.0f, 0.0f,1.0f);, {* Y& N& w) L4 a* _' A7 x
D3DXMATRIX matTemp;# c S C3 k% ^
static const float CONS_VAL = 3.1415926f / 180.f; 6 O0 \) f! R: b+ m5 P5 }# F9 z) T8 F1 ]1 c4 _
D3DXMatrixRotationX( &matTemp,(m_skyBox.m_fSunAngle +180)*CONS_VAL); 2 c- n' ~$ g, X& k# T D3DXVec3TransformCoord(&vecSun,&vecSun,&matTemp);5 i! I* E% {8 o2 n& |5 k
pLight->SetDir( vecSun.x, vecSun.y, vecSun.z ); * Y4 ^! _7 w# w* F0 | pLight->Appear( m_pd3dDevice, TRUE ); + A* y" S" }" z1 L # N$ ^/ l4 O: R$ Y8 M/ C // D3DXVECTOR3 vecSun = D3DXVECTOR3( 0.0f, 0.5f,0.5f); ' D4 L0 p' a: i4 g! i6 M9 C! Y; r // D3DXVec3Normalize(&(vecSun),&(vecSun)); , y- N2 J5 u; ]0 G X // pLight->SetDir( -vecSun.x, -vecSun.y, -vecSun.z ); ) D: T# {( n5 W# K1 U$ G7 S# W# I
DWORD dwR, dwG, dwB; : H' v" G( T3 M0 ?) { dwR = (DWORD)( pLight->Ambient.r * 255 ); 5 Z5 l3 u: X A: t0 Z dwG = (DWORD)( pLight->Ambient.g * 255 ); ; k9 M3 n3 F- Z& z/ e( A dwB = (DWORD)( pLight->Ambient.b * 255 );1 D% |4 Q+ K& l2 s
dwAmbient = D3DCOLOR_ARGB( 255, dwR, dwG, dwB ); ; L5 N+ g+ }* t+ P6 m) T } 8 l% C* g9 q- _& R1 H } 2 z+ a, ?# v1 I) a" t8 L7 ~, e! C
m_pd3dDevice->SetRenderState( D3DRS_LIGHTING, bLight );//m_bViewLight );$ z* G2 g' l5 z+ S5 s
m_pd3dDevice->SetRenderState( D3DRS_AMBIENT, dwAmbient );//D3DCOLOR_ARGB( 0,0,0,0) ); //m_dwAmbient );//D3DCOLOR_ARGB( 255,128,128,128) );//D3DCOLOR_ARGB( 255,50,50,70) ); ! k' M4 ?" X4 r, x3 K5 I ::SetLight( bLight );: k2 J5 t% I- F; n) K8 b0 A
5 G8 ^- y& c4 }' u# }
// ±ao? ?D?í???ó á¤à? 9 ?# {. }- C! M7 b) L9 C m_pd3dDevice->SetMaterial( &m_baseMaterial );" E# l9 U* j9 H/ d