hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2025.06.20. 13:51



Jelenlévő felhasználók

Jelenleg 330 felhasználó van jelen :: 2 regisztrált, 0 rejtett és 328 vendég

A legtöbb felhasználó (2761 fő) 2025.01.09. 20:06-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot], Google [Bot]az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása Hozzászólás a témához  [2 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Walltext/Falra irás
HozzászólásElküldve:2013.06.08. 15:27 
Offline
Tud valamit

Csatlakozott:2012.10.06. 14:16
Hozzászólások:106
Megköszönt másnak: 6 alkalommal
Megköszönték neki: 1 alkalommal
Sziasztok!Evvel a pluginnal falra lehet irni csak annyi a baj hogy megfordit minden betüt pl. az E 3 kb. igy néz ki xD
Megtudnátok oldaniii? :D
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fakemeta>
  4.  
  5. #define PLUGIN "Wall Text"
  6. #define AUTHOR "stupok"
  7. #define VERSION "1.09"
  8.  
  9. #define CHAR_WIDTH 12
  10.  
  11. #define MESSAGE_LEN 64
  12. #define BUFFER_LEN 512
  13.  
  14. #define ACCESS_LEVEL ADMIN_KICK
  15.  
  16. new Array:g_aOrigins
  17. new Array:g_aVectors
  18. new Array:g_aMessages
  19. new Array:g_aSaved
  20.  
  21. new g_szConfigsDir[128]
  22. new g_szMapName[64]
  23. new g_szFile[256]
  24.  
  25. new g_iDecalAlpha, g_iDecalAlphaBk, g_iDecalDigit, g_iDecalDigitBk
  26.  
  27. new g_iDecalResetEvent
  28. new g_fwdidPrecacheEvent
  29.  
  30. public plugin_init()
  31. {
  32. register_plugin( PLUGIN, VERSION, AUTHOR )
  33.  
  34. register_clcmd( "amx_walltext", "cmd_WallText", ACCESS_LEVEL, "- amx_walltext <Szoveg ami a falra kerul>" )
  35. register_clcmd( "amx_walltextmenu", "cmd_WallTextMenu", ACCESS_LEVEL, "- Fal szoveg menu" )
  36. register_clcmd( "say walltextmenu", "cmd_WallTextMenu", ACCESS_LEVEL, "- Fal szoveg menu" )
  37.  
  38. if( get_user_msgid( "HLTV" ) )
  39. register_event( "HLTV", "event_NewRound", "a", "1=0", "2=0" )
  40.  
  41. g_aOrigins = ArrayCreate( 3 )
  42.  
  43. g_aVectors = ArrayCreate( 3 )
  44.  
  45. g_aMessages = ArrayCreate( MESSAGE_LEN )
  46.  
  47. g_aSaved = ArrayCreate()
  48.  
  49. get_configsdir( g_szConfigsDir, charsmax( g_szConfigsDir ) )
  50. get_mapname( g_szMapName, charsmax( g_szMapName ) )
  51.  
  52. formatex( g_szFile, charsmax( g_szFile ), "%s/maps", g_szConfigsDir )
  53.  
  54. if( !dir_exists( g_szFile ) )
  55. mkdir( g_szFile )
  56.  
  57. formatex( g_szFile, charsmax( g_szFile ), "%s/maps/walltext-%s.ini", g_szConfigsDir, g_szMapName )
  58.  
  59. g_iDecalAlphaBk = engfunc( EngFunc_DecalIndex, "{smscorch2" )
  60.  
  61. g_iDecalAlpha = engfunc( EngFunc_DecalIndex, "{capsa" )
  62.  
  63. g_iDecalDigitBk = engfunc( EngFunc_DecalIndex, "{break3" )
  64.  
  65. g_iDecalDigit = engfunc( EngFunc_DecalIndex, "{small#s0" )
  66.  
  67. LoadMessagesFromFile()
  68. }
  69.  
  70. public plugin_precache()
  71. {
  72. g_fwdidPrecacheEvent = register_forward( FM_PrecacheEvent, "forward_PrecacheEvent", 1 )
  73. }
  74.  
  75. public forward_PrecacheEvent( type, const szName[] )
  76. {
  77. if( equal( szName, "events/decal_reset.sc" ) )
  78. {
  79. g_iDecalResetEvent = get_orig_retval()
  80. unregister_forward( FM_PrecacheEvent, g_fwdidPrecacheEvent, 1 )
  81. }
  82. }
  83.  
  84. public event_NewRound()
  85. {
  86. set_task( 0.2, "LoadMessagesFromArray" )
  87. }
  88.  
  89. public client_putinserver( id )
  90. {
  91. set_task( 3.0, "LoadMessagesFromArray" )
  92. }
  93.  
  94. public cmd_WallText( id )
  95. {
  96. if( !( get_user_flags( id ) & ACCESS_LEVEL ) )
  97. return PLUGIN_HANDLED
  98.  
  99. new szArg[MESSAGE_LEN]
  100. read_args( szArg, charsmax( szArg ) )
  101. strtoupper( szArg )
  102.  
  103. CreateNewMessage( id, szArg )
  104.  
  105. return PLUGIN_HANDLED
  106. }
  107.  
  108. public cmd_WallTextMenu( id )
  109. {
  110. if( !( get_user_flags( id ) & ACCESS_LEVEL ) )
  111. return PLUGIN_HANDLED
  112.  
  113. new iMenu = menu_create( "Fal szoveg menu:", "menu_HandleMainMenu" )
  114.  
  115. menu_additem( iMenu, "Uj szoveg", "1" )
  116. menu_additem( iMenu, "Szoveg mentese", "2" )
  117. menu_additem( iMenu, "Szoveg torlese", "3" )
  118.  
  119. if( g_iDecalResetEvent != 0 )
  120. menu_additem( iMenu, "Refresh Canvas", "4" )
  121.  
  122. menu_setprop( iMenu, MPROP_EXIT, MEXIT_ALL )
  123.  
  124. menu_display( id, iMenu, 0 )
  125.  
  126. return PLUGIN_HANDLED
  127. }
  128.  
  129. public cmd_SaveWallText( id )
  130. {
  131. if( !( get_user_flags( id ) & ACCESS_LEVEL ) )
  132. return PLUGIN_HANDLED
  133.  
  134. new iSize = ArraySize(g_aMessages)
  135. new szMessage[MESSAGE_LEN]
  136. new szIndex[8]
  137.  
  138. new iMenu = menu_create( "Szoveg mentese menu:", "menu_HandleSaveMenu" )
  139.  
  140. for( new i = 0; i < iSize; i++ )
  141. {
  142. if( ArrayGetCell( g_aSaved, i ) )
  143. continue
  144.  
  145. ArrayGetString( g_aMessages, i, szMessage, MESSAGE_LEN - 1 )
  146. num_to_str( i, szIndex, charsmax( szIndex ) )
  147.  
  148. menu_additem( iMenu, szMessage, szIndex, 0 )
  149. }
  150.  
  151. menu_additem( iMenu, "Vissza", "-1", 0 )
  152.  
  153. menu_setprop( iMenu, MPROP_EXIT, MEXIT_NEVER )
  154.  
  155. menu_display( id, iMenu, 0 )
  156.  
  157. return PLUGIN_HANDLED
  158. }
  159.  
  160. public cmd_DeleteWallText( id )
  161. {
  162. if( !( get_user_flags( id ) & ACCESS_LEVEL ) )
  163. return PLUGIN_HANDLED
  164.  
  165. new fh = fopen( g_szFile, "rt" )
  166.  
  167. if( !fh )
  168. return PLUGIN_HANDLED
  169.  
  170. new iLine
  171. new szIndex[8]
  172. new szBuffer[BUFFER_LEN]
  173.  
  174. new iMenu = menu_create( "Mentett szoveg torlese:", "menu_HandleDeleteMenu" )
  175.  
  176. while( !feof( fh ) )
  177. {
  178. fgets( fh, szBuffer, charsmax( szBuffer ) )
  179.  
  180. if( ExtractMessage( szBuffer ) )
  181. {
  182. num_to_str( iLine, szIndex, charsmax( szIndex) )
  183.  
  184. menu_additem( iMenu, szBuffer, szIndex, 0 )
  185. szBuffer[0] = 0
  186. }
  187.  
  188. iLine++
  189. }
  190.  
  191. fclose( fh )
  192.  
  193. menu_additem( iMenu, "Back", "-1", 0 )
  194.  
  195. menu_setprop( iMenu, MPROP_EXIT, MEXIT_NEVER )
  196.  
  197. menu_display( id, iMenu, 0 )
  198.  
  199. return PLUGIN_HANDLED
  200. }
  201.  
  202. public menu_HandleMainMenu( id, menu, item )
  203. {
  204. if( item == MENU_EXIT )
  205. {
  206. menu_destroy( menu )
  207. return PLUGIN_HANDLED
  208. }
  209.  
  210. new iAccess, szInfo[8], szName[32], iCallBack
  211. menu_item_getinfo( menu, item, iAccess, szInfo, charsmax( szInfo ), szName, charsmax( szName ), iCallBack )
  212.  
  213. switch( str_to_num( szInfo ) )
  214. {
  215. case 1:
  216. {
  217. client_cmd( id, "messagemode amx_walltext" )
  218. cmd_WallTextMenu( id )
  219. }
  220. case 2:
  221. {
  222. menu_destroy( menu )
  223. cmd_SaveWallText( id )
  224. }
  225. case 3:
  226. {
  227. menu_destroy( menu )
  228. cmd_DeleteWallText( id )
  229. }
  230. case 4:
  231. {
  232. engfunc( EngFunc_PlaybackEvent, FEV_GLOBAL, 0, g_iDecalResetEvent )
  233. cmd_WallTextMenu( id )
  234. set_task( 0.2, "LoadMessagesFromArray" )
  235. }
  236. }
  237.  
  238. return PLUGIN_HANDLED
  239. }
  240.  
  241. public menu_HandleSaveMenu( id, menu, item )
  242. {
  243. if( item == MENU_EXIT )
  244. {
  245. menu_destroy( menu )
  246. cmd_WallTextMenu( id )
  247. return PLUGIN_HANDLED
  248. }
  249.  
  250. new szMessage[MESSAGE_LEN], szIndex[8]
  251. new iAccess, iCallBack
  252.  
  253. menu_item_getinfo( menu, item, iAccess, szIndex, charsmax( szIndex ), szMessage, charsmax( szMessage ), iCallBack )
  254.  
  255. new iIndex = str_to_num( szIndex )
  256.  
  257. if( iIndex == -1 )
  258. {
  259. menu_destroy( menu )
  260. cmd_WallTextMenu( id )
  261. return PLUGIN_HANDLED
  262. }
  263.  
  264. WriteToFile( iIndex )
  265.  
  266. client_print( id, print_chat, "* Hozzaadva a szoveg '%s' '%s'", szMessage, g_szFile )
  267.  
  268. cmd_SaveWallText( id )
  269.  
  270. return PLUGIN_HANDLED
  271. }
  272.  
  273. public menu_HandleDeleteMenu( id, menu, item )
  274. {
  275. if( item == MENU_EXIT )
  276. {
  277. menu_destroy( menu )
  278. cmd_WallTextMenu( id )
  279. return PLUGIN_HANDLED
  280. }
  281.  
  282. new szMessage[MESSAGE_LEN], szIndex[8]
  283. new iAccess, iCallBack
  284.  
  285. menu_item_getinfo( menu, item, iAccess, szIndex, charsmax( szIndex ), szMessage, charsmax( szMessage ), iCallBack )
  286.  
  287. if( str_to_num( szIndex ) == -1 )
  288. {
  289. menu_destroy( menu )
  290. cmd_WallTextMenu( id )
  291. return PLUGIN_HANDLED
  292. }
  293.  
  294. new fh = fopen( g_szFile, "rt" )
  295.  
  296. if( !fh )
  297. return PLUGIN_HANDLED
  298.  
  299. new szBuffer[BUFFER_LEN]
  300. new iLine
  301.  
  302. while( !feof( fh ) )
  303. {
  304. fgets( fh, szBuffer, charsmax( szBuffer ) )
  305.  
  306. if( ExtractMessage( szBuffer ) )
  307. {
  308. if( equal( szBuffer, szMessage ) )
  309. {
  310. fclose( fh )
  311. write_file( g_szFile, "", iLine )
  312.  
  313. client_print( id, print_chat, "* Torolve a '%s' uzenet '%s'", szMessage, g_szFile )
  314.  
  315. cmd_DeleteWallText( id )
  316.  
  317. ArrayClear( g_aOrigins )
  318. ArrayClear( g_aVectors )
  319. ArrayClear( g_aMessages )
  320. ArrayClear( g_aSaved )
  321.  
  322. LoadMessagesFromFile()
  323.  
  324. return PLUGIN_HANDLED
  325. }
  326. szBuffer[0] = 0
  327. }
  328.  
  329. iLine++
  330. }
  331.  
  332. fclose( fh )
  333.  
  334. return PLUGIN_HANDLED
  335. }
  336.  
  337. public LoadMessagesFromArray()
  338. {
  339. new iSize = ArraySize( g_aOrigins )
  340.  
  341. new Float:fOrigin[3]
  342. new Float:fVector[3]
  343. new szMessage[MESSAGE_LEN]
  344.  
  345. for( new i = 0; i < iSize; i++ )
  346. {
  347. ArrayGetArray( g_aOrigins, i, fOrigin )
  348. ArrayGetArray( g_aVectors, i, fVector )
  349. ArrayGetString( g_aMessages, i, szMessage, charsmax( szMessage ) )
  350.  
  351. DrawMessage( szMessage, fOrigin, fVector )
  352. }
  353. }
  354.  
  355. public LoadMessagesFromFile()
  356. {
  357. new fh = fopen( g_szFile, "rt" )
  358.  
  359. if( !fh )
  360. return PLUGIN_HANDLED
  361.  
  362. new szBuffer[BUFFER_LEN]
  363. new szPart[BUFFER_LEN]
  364. new Float:fOrigin[3]
  365. new Float:fVector[3]
  366. new szMessage[MESSAGE_LEN]
  367.  
  368. while( !feof( fh ) )
  369. {
  370. fgets( fh, szBuffer, charsmax( szBuffer ) )
  371. if( strlen(szBuffer) < 13 ) continue
  372.  
  373. strtok( szBuffer, szPart, charsmax( szPart ), szBuffer, charsmax( szBuffer ), ';', 1 )
  374. fOrigin[0] = str_to_float( szPart )
  375. strtok( szBuffer, szPart, charsmax( szPart ), szBuffer, charsmax( szBuffer ), ';', 1 )
  376. fOrigin[1] = str_to_float( szPart )
  377. strtok( szBuffer, szPart, charsmax( szPart ), szBuffer, charsmax( szBuffer ), ';', 1 )
  378. fOrigin[2] = str_to_float( szPart )
  379.  
  380. strtok( szBuffer, szPart, charsmax( szPart ), szBuffer, charsmax( szBuffer ), ';', 1 )
  381. fVector[0] = str_to_float( szPart )
  382. strtok( szBuffer, szPart, charsmax( szPart ), szBuffer, charsmax( szBuffer ), ';', 1 )
  383. fVector[1] = str_to_float( szPart )
  384. strtok( szBuffer, szPart, charsmax( szPart ), szMessage, charsmax( szMessage ), ';', 1 )
  385. fVector[2] = str_to_float( szPart )
  386.  
  387. replace( szMessage, charsmax( szMessage ), "^n", "" )
  388.  
  389. if( file_exists( szMessage ) )
  390. {
  391. new fh2 = fopen( szMessage, "rt" )
  392.  
  393. if( fh2 )
  394. {
  395. fgets( fh2, szMessage, charsmax( szMessage ) )
  396. fclose( fh2 )
  397. }
  398. }
  399.  
  400. strtoupper( szMessage )
  401.  
  402. ArrayPushArray( g_aOrigins, fOrigin )
  403. ArrayPushArray( g_aVectors, fVector )
  404.  
  405. ArrayPushString( g_aMessages, szMessage )
  406.  
  407. ArrayPushCell( g_aSaved, 1 )
  408.  
  409. DrawMessage( szMessage, fOrigin, fVector )
  410. }
  411.  
  412. fclose( fh )
  413.  
  414. return PLUGIN_HANDLED
  415. }
  416.  
  417. ExtractMessage( szBuffer[BUFFER_LEN] )
  418. {
  419. new iLen = strlen( szBuffer )
  420. new iSemicolonCount = 0
  421.  
  422. for( new i = 0; i < iLen; i++ )
  423. {
  424. if( szBuffer[i] == ';' )
  425. {
  426. iSemicolonCount++
  427. }
  428.  
  429. if( iSemicolonCount == 6 )
  430. {
  431. copy( szBuffer, charsmax( szBuffer ), szBuffer[i+1] )
  432. replace(szBuffer, charsmax( szBuffer ), "^n", "")
  433. return 1
  434. }
  435. }
  436.  
  437. return 0
  438. }
  439.  
  440. WriteToFile( iIndex )
  441. {
  442. new Float:fOrigin[3]
  443. new Float:fVector[3]
  444. new szMessage[MESSAGE_LEN]
  445.  
  446. ArrayGetArray( g_aOrigins, iIndex, fOrigin )
  447. ArrayGetArray( g_aVectors, iIndex, fVector )
  448. ArrayGetString( g_aMessages, iIndex, szMessage, charsmax( szMessage ) )
  449.  
  450. new szBuffer[BUFFER_LEN]
  451.  
  452. formatex( szBuffer, charsmax( szBuffer ), "%f;%f;%f;%f;%f;%f;%s",
  453. fOrigin[0], fOrigin[1], fOrigin[2],
  454. fVector[0], fVector[1], fVector[2],
  455. szMessage )
  456.  
  457. write_file( g_szFile, szBuffer, -1 )
  458.  
  459. ArraySetCell( g_aSaved, iIndex, 1 )
  460. }
  461.  
  462. DrawMessage( szMessage[MESSAGE_LEN], Float:fAimOrigin[3], Float:fTextVector[3] )
  463. {
  464. new Float:fOffset[3]
  465.  
  466. new iLen = strlen( szMessage )
  467.  
  468. fOffset[0] = 0.0
  469. fOffset[1] = 0.0
  470. fOffset[2] = 0.0
  471.  
  472. for( new i = 0; i < iLen; i++ )
  473. {
  474. if( isalpha( szMessage[i] ) )
  475. {
  476. DrawDecal( fAimOrigin[0] + fOffset[0], fAimOrigin[1] + fOffset[1], fAimOrigin[2] + fOffset[2], g_iDecalAlphaBk )
  477. }
  478. else if( szMessage[i] == ',' )
  479. {
  480. fOffset[0] = 0.0
  481. fOffset[1] = 0.0
  482. fOffset[2] -= 23.0
  483. }
  484.  
  485. fOffset[0] += fTextVector[0]
  486. fOffset[1] += fTextVector[1]
  487. }
  488.  
  489. fOffset[0] = 0.0
  490. fOffset[1] = 0.0
  491. fOffset[2] = 0.0
  492.  
  493. for( new i = 0; i < iLen; i++ )
  494. {
  495. if( '0' <= szMessage[i] <= '9' )
  496. {
  497. DrawDecal( fAimOrigin[0] + fOffset[0], fAimOrigin[1] + fOffset[1], fAimOrigin[2] + fOffset[2], g_iDecalDigitBk )
  498. }
  499. else if( szMessage[i] == ',' )
  500. {
  501. fOffset[0] = 0.0
  502. fOffset[1] = 0.0
  503. fOffset[2] -= 23.0
  504. }
  505.  
  506. fOffset[0] += fTextVector[0]
  507. fOffset[1] += fTextVector[1]
  508. }
  509.  
  510. fOffset[0] = 0.0
  511. fOffset[1] = 0.0
  512. fOffset[2] = 0.0
  513.  
  514. for( new i = 0; i < iLen; i++ )
  515. {
  516. if( isalpha( szMessage[i] ) )
  517. {
  518. DrawDecal( fAimOrigin[0] + fOffset[0], fAimOrigin[1] + fOffset[1], fAimOrigin[2] + fOffset[2], g_iDecalAlpha + 'A' - szMessage[i] )
  519. }
  520. else if( szMessage[i] == ',' )
  521. {
  522. fOffset[0] = 0.0
  523. fOffset[1] = 0.0
  524. fOffset[2] -= 23.0
  525. }
  526.  
  527. fOffset[0] += fTextVector[0]
  528. fOffset[1] += fTextVector[1]
  529. }
  530.  
  531. fOffset[0] = 0.0
  532. fOffset[1] = 0.0
  533. fOffset[2] = 0.0
  534.  
  535. for( new i = 0; i < iLen; i++ )
  536. {
  537. if( '0' <= szMessage[i] <= '9' )
  538. {
  539. DrawDecal( fAimOrigin[0] + fOffset[0], fAimOrigin[1] + fOffset[1], fAimOrigin[2] + fOffset[2], g_iDecalDigit + '0' - szMessage[i] )
  540. }
  541. else if( szMessage[i] == ',' )
  542. {
  543. fOffset[0] = 0.0
  544. fOffset[1] = 0.0
  545. fOffset[2] -= 23.0
  546. }
  547.  
  548. fOffset[0] += fTextVector[0]
  549. fOffset[1] += fTextVector[1]
  550. }
  551. }
  552.  
  553. CreateNewMessage( id, szMessage[MESSAGE_LEN] )
  554. {
  555. new Float:fAimOrigin[3]
  556. new Float:fPlayerOrigin[3]
  557.  
  558. new Float:fAimVector[3]
  559. new Float:fNormalVector[3]
  560. new Float:fTextVector[3]
  561.  
  562. pev( id, pev_v_angle, fAimVector )
  563.  
  564. angle_vector( fAimVector, ANGLEVECTOR_FORWARD, fAimVector )
  565.  
  566. pev( id, pev_origin, fPlayerOrigin )
  567.  
  568. fAimVector[0] = fAimVector[0] * 9999.0 + fPlayerOrigin[0]
  569. fAimVector[1] = fAimVector[1] * 9999.0 + fPlayerOrigin[1]
  570. fAimVector[2] = fAimVector[2] * 9999.0 + fPlayerOrigin[2]
  571.  
  572. new iTr = create_tr2()
  573. engfunc( EngFunc_TraceLine, fPlayerOrigin, fAimVector, IGNORE_MONSTERS, id, iTr )
  574. get_tr2( iTr, TR_vecEndPos, fAimOrigin )
  575. get_tr2( iTr, TR_vecPlaneNormal, fNormalVector )
  576. free_tr2( iTr )
  577.  
  578. vector_to_angle( fNormalVector, fTextVector )
  579.  
  580. angle_vector( fTextVector, ANGLEVECTOR_RIGHT, fTextVector )
  581.  
  582. fTextVector[0] *= -1.0 * CHAR_WIDTH
  583. fTextVector[1] *= -1.0 * CHAR_WIDTH
  584. fTextVector[2] *= -1.0 * CHAR_WIDTH
  585.  
  586. DrawMessage( szMessage, fAimOrigin, fTextVector )
  587.  
  588. ArrayPushArray( g_aOrigins, fAimOrigin )
  589. ArrayPushArray( g_aVectors, fTextVector )
  590.  
  591. remove_quotes( szMessage )
  592. replace( szMessage, charsmax( szMessage ), "^n", "" )
  593. ArrayPushString( g_aMessages, szMessage )
  594.  
  595. ArrayPushCell( g_aSaved, 0 )
  596. }
  597.  
  598. DrawDecal( Float:x, Float:y, Float:z, tid )
  599. {
  600. message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
  601. if( tid > 255 )
  602. {
  603. tid -= 255
  604. write_byte( TE_WORLDDECALHIGH )
  605. }
  606. else
  607. {
  608. write_byte( TE_WORLDDECAL )
  609. }
  610. engfunc( EngFunc_WriteCoord, x )
  611. engfunc( EngFunc_WriteCoord, y )
  612. engfunc( EngFunc_WriteCoord, z )
  613. write_byte( tid )
  614. message_end()
  615. }
  616.  


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Walltext/Falra irás
HozzászólásElküldve:2013.06.08. 20:01 
Offline
Jómunkásember

Csatlakozott:2013.02.11. 16:06
Hozzászólások:491
Megköszönt másnak: 96 alkalommal
Megköszönték neki: 50 alkalommal
pepsi552 írta:
Sziasztok!Evvel a pluginnal falra lehet irni csak annyi a baj hogy megfordit minden betüt pl. az E 3 kb. igy néz ki xD
Megtudnátok oldaniii? :D
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fakemeta>
  4.  
  5. #define PLUGIN "Wall Text"
  6. #define AUTHOR "stupok"
  7. #define VERSION "1.09"
  8.  
  9. #define CHAR_WIDTH 12
  10.  
  11. #define MESSAGE_LEN 64
  12. #define BUFFER_LEN 512
  13.  
  14. #define ACCESS_LEVEL ADMIN_KICK
  15.  
  16. new Array:g_aOrigins
  17. new Array:g_aVectors
  18. new Array:g_aMessages
  19. new Array:g_aSaved
  20.  
  21. new g_szConfigsDir[128]
  22. new g_szMapName[64]
  23. new g_szFile[256]
  24.  
  25. new g_iDecalAlpha, g_iDecalAlphaBk, g_iDecalDigit, g_iDecalDigitBk
  26.  
  27. new g_iDecalResetEvent
  28. new g_fwdidPrecacheEvent
  29.  
  30. public plugin_init()
  31. {
  32. register_plugin( PLUGIN, VERSION, AUTHOR )
  33.  
  34. register_clcmd( "amx_walltext", "cmd_WallText", ACCESS_LEVEL, "- amx_walltext <Szoveg ami a falra kerul>" )
  35. register_clcmd( "amx_walltextmenu", "cmd_WallTextMenu", ACCESS_LEVEL, "- Fal szoveg menu" )
  36. register_clcmd( "say walltextmenu", "cmd_WallTextMenu", ACCESS_LEVEL, "- Fal szoveg menu" )
  37.  
  38. if( get_user_msgid( "HLTV" ) )
  39. register_event( "HLTV", "event_NewRound", "a", "1=0", "2=0" )
  40.  
  41. g_aOrigins = ArrayCreate( 3 )
  42.  
  43. g_aVectors = ArrayCreate( 3 )
  44.  
  45. g_aMessages = ArrayCreate( MESSAGE_LEN )
  46.  
  47. g_aSaved = ArrayCreate()
  48.  
  49. get_configsdir( g_szConfigsDir, charsmax( g_szConfigsDir ) )
  50. get_mapname( g_szMapName, charsmax( g_szMapName ) )
  51.  
  52. formatex( g_szFile, charsmax( g_szFile ), "%s/maps", g_szConfigsDir )
  53.  
  54. if( !dir_exists( g_szFile ) )
  55. mkdir( g_szFile )
  56.  
  57. formatex( g_szFile, charsmax( g_szFile ), "%s/maps/walltext-%s.ini", g_szConfigsDir, g_szMapName )
  58.  
  59. g_iDecalAlphaBk = engfunc( EngFunc_DecalIndex, "{smscorch2" )
  60.  
  61. g_iDecalAlpha = engfunc( EngFunc_DecalIndex, "{capsa" )
  62.  
  63. g_iDecalDigitBk = engfunc( EngFunc_DecalIndex, "{break3" )
  64.  
  65. g_iDecalDigit = engfunc( EngFunc_DecalIndex, "{small#s0" )
  66.  
  67. LoadMessagesFromFile()
  68. }
  69.  
  70. public plugin_precache()
  71. {
  72. g_fwdidPrecacheEvent = register_forward( FM_PrecacheEvent, "forward_PrecacheEvent", 1 )
  73. }
  74.  
  75. public forward_PrecacheEvent( type, const szName[] )
  76. {
  77. if( equal( szName, "events/decal_reset.sc" ) )
  78. {
  79. g_iDecalResetEvent = get_orig_retval()
  80. unregister_forward( FM_PrecacheEvent, g_fwdidPrecacheEvent, 1 )
  81. }
  82. }
  83.  
  84. public event_NewRound()
  85. {
  86. set_task( 0.2, "LoadMessagesFromArray" )
  87. }
  88.  
  89. public client_putinserver( id )
  90. {
  91. set_task( 3.0, "LoadMessagesFromArray" )
  92. }
  93.  
  94. public cmd_WallText( id )
  95. {
  96. if( !( get_user_flags( id ) & ACCESS_LEVEL ) )
  97. return PLUGIN_HANDLED
  98.  
  99. new szArg[MESSAGE_LEN]
  100. read_args( szArg, charsmax( szArg ) )
  101. strtoupper( szArg )
  102.  
  103. CreateNewMessage( id, szArg )
  104.  
  105. return PLUGIN_HANDLED
  106. }
  107.  
  108. public cmd_WallTextMenu( id )
  109. {
  110. if( !( get_user_flags( id ) & ACCESS_LEVEL ) )
  111. return PLUGIN_HANDLED
  112.  
  113. new iMenu = menu_create( "Fal szoveg menu:", "menu_HandleMainMenu" )
  114.  
  115. menu_additem( iMenu, "Uj szoveg", "1" )
  116. menu_additem( iMenu, "Szoveg mentese", "2" )
  117. menu_additem( iMenu, "Szoveg torlese", "3" )
  118.  
  119. if( g_iDecalResetEvent != 0 )
  120. menu_additem( iMenu, "Refresh Canvas", "4" )
  121.  
  122. menu_setprop( iMenu, MPROP_EXIT, MEXIT_ALL )
  123.  
  124. menu_display( id, iMenu, 0 )
  125.  
  126. return PLUGIN_HANDLED
  127. }
  128.  
  129. public cmd_SaveWallText( id )
  130. {
  131. if( !( get_user_flags( id ) & ACCESS_LEVEL ) )
  132. return PLUGIN_HANDLED
  133.  
  134. new iSize = ArraySize(g_aMessages)
  135. new szMessage[MESSAGE_LEN]
  136. new szIndex[8]
  137.  
  138. new iMenu = menu_create( "Szoveg mentese menu:", "menu_HandleSaveMenu" )
  139.  
  140. for( new i = 0; i < iSize; i++ )
  141. {
  142. if( ArrayGetCell( g_aSaved, i ) )
  143. continue
  144.  
  145. ArrayGetString( g_aMessages, i, szMessage, MESSAGE_LEN - 1 )
  146. num_to_str( i, szIndex, charsmax( szIndex ) )
  147.  
  148. menu_additem( iMenu, szMessage, szIndex, 0 )
  149. }
  150.  
  151. menu_additem( iMenu, "Vissza", "-1", 0 )
  152.  
  153. menu_setprop( iMenu, MPROP_EXIT, MEXIT_NEVER )
  154.  
  155. menu_display( id, iMenu, 0 )
  156.  
  157. return PLUGIN_HANDLED
  158. }
  159.  
  160. public cmd_DeleteWallText( id )
  161. {
  162. if( !( get_user_flags( id ) & ACCESS_LEVEL ) )
  163. return PLUGIN_HANDLED
  164.  
  165. new fh = fopen( g_szFile, "rt" )
  166.  
  167. if( !fh )
  168. return PLUGIN_HANDLED
  169.  
  170. new iLine
  171. new szIndex[8]
  172. new szBuffer[BUFFER_LEN]
  173.  
  174. new iMenu = menu_create( "Mentett szoveg torlese:", "menu_HandleDeleteMenu" )
  175.  
  176. while( !feof( fh ) )
  177. {
  178. fgets( fh, szBuffer, charsmax( szBuffer ) )
  179.  
  180. if( ExtractMessage( szBuffer ) )
  181. {
  182. num_to_str( iLine, szIndex, charsmax( szIndex) )
  183.  
  184. menu_additem( iMenu, szBuffer, szIndex, 0 )
  185. szBuffer[0] = 0
  186. }
  187.  
  188. iLine++
  189. }
  190.  
  191. fclose( fh )
  192.  
  193. menu_additem( iMenu, "Back", "-1", 0 )
  194.  
  195. menu_setprop( iMenu, MPROP_EXIT, MEXIT_NEVER )
  196.  
  197. menu_display( id, iMenu, 0 )
  198.  
  199. return PLUGIN_HANDLED
  200. }
  201.  
  202. public menu_HandleMainMenu( id, menu, item )
  203. {
  204. if( item == MENU_EXIT )
  205. {
  206. menu_destroy( menu )
  207. return PLUGIN_HANDLED
  208. }
  209.  
  210. new iAccess, szInfo[8], szName[32], iCallBack
  211. menu_item_getinfo( menu, item, iAccess, szInfo, charsmax( szInfo ), szName, charsmax( szName ), iCallBack )
  212.  
  213. switch( str_to_num( szInfo ) )
  214. {
  215. case 1:
  216. {
  217. client_cmd( id, "messagemode amx_walltext" )
  218. cmd_WallTextMenu( id )
  219. }
  220. case 2:
  221. {
  222. menu_destroy( menu )
  223. cmd_SaveWallText( id )
  224. }
  225. case 3:
  226. {
  227. menu_destroy( menu )
  228. cmd_DeleteWallText( id )
  229. }
  230. case 4:
  231. {
  232. engfunc( EngFunc_PlaybackEvent, FEV_GLOBAL, 0, g_iDecalResetEvent )
  233. cmd_WallTextMenu( id )
  234. set_task( 0.2, "LoadMessagesFromArray" )
  235. }
  236. }
  237.  
  238. return PLUGIN_HANDLED
  239. }
  240.  
  241. public menu_HandleSaveMenu( id, menu, item )
  242. {
  243. if( item == MENU_EXIT )
  244. {
  245. menu_destroy( menu )
  246. cmd_WallTextMenu( id )
  247. return PLUGIN_HANDLED
  248. }
  249.  
  250. new szMessage[MESSAGE_LEN], szIndex[8]
  251. new iAccess, iCallBack
  252.  
  253. menu_item_getinfo( menu, item, iAccess, szIndex, charsmax( szIndex ), szMessage, charsmax( szMessage ), iCallBack )
  254.  
  255. new iIndex = str_to_num( szIndex )
  256.  
  257. if( iIndex == -1 )
  258. {
  259. menu_destroy( menu )
  260. cmd_WallTextMenu( id )
  261. return PLUGIN_HANDLED
  262. }
  263.  
  264. WriteToFile( iIndex )
  265.  
  266. client_print( id, print_chat, "* Hozzaadva a szoveg '%s' '%s'", szMessage, g_szFile )
  267.  
  268. cmd_SaveWallText( id )
  269.  
  270. return PLUGIN_HANDLED
  271. }
  272.  
  273. public menu_HandleDeleteMenu( id, menu, item )
  274. {
  275. if( item == MENU_EXIT )
  276. {
  277. menu_destroy( menu )
  278. cmd_WallTextMenu( id )
  279. return PLUGIN_HANDLED
  280. }
  281.  
  282. new szMessage[MESSAGE_LEN], szIndex[8]
  283. new iAccess, iCallBack
  284.  
  285. menu_item_getinfo( menu, item, iAccess, szIndex, charsmax( szIndex ), szMessage, charsmax( szMessage ), iCallBack )
  286.  
  287. if( str_to_num( szIndex ) == -1 )
  288. {
  289. menu_destroy( menu )
  290. cmd_WallTextMenu( id )
  291. return PLUGIN_HANDLED
  292. }
  293.  
  294. new fh = fopen( g_szFile, "rt" )
  295.  
  296. if( !fh )
  297. return PLUGIN_HANDLED
  298.  
  299. new szBuffer[BUFFER_LEN]
  300. new iLine
  301.  
  302. while( !feof( fh ) )
  303. {
  304. fgets( fh, szBuffer, charsmax( szBuffer ) )
  305.  
  306. if( ExtractMessage( szBuffer ) )
  307. {
  308. if( equal( szBuffer, szMessage ) )
  309. {
  310. fclose( fh )
  311. write_file( g_szFile, "", iLine )
  312.  
  313. client_print( id, print_chat, "* Torolve a '%s' uzenet '%s'", szMessage, g_szFile )
  314.  
  315. cmd_DeleteWallText( id )
  316.  
  317. ArrayClear( g_aOrigins )
  318. ArrayClear( g_aVectors )
  319. ArrayClear( g_aMessages )
  320. ArrayClear( g_aSaved )
  321.  
  322. LoadMessagesFromFile()
  323.  
  324. return PLUGIN_HANDLED
  325. }
  326. szBuffer[0] = 0
  327. }
  328.  
  329. iLine++
  330. }
  331.  
  332. fclose( fh )
  333.  
  334. return PLUGIN_HANDLED
  335. }
  336.  
  337. public LoadMessagesFromArray()
  338. {
  339. new iSize = ArraySize( g_aOrigins )
  340.  
  341. new Float:fOrigin[3]
  342. new Float:fVector[3]
  343. new szMessage[MESSAGE_LEN]
  344.  
  345. for( new i = 0; i < iSize; i++ )
  346. {
  347. ArrayGetArray( g_aOrigins, i, fOrigin )
  348. ArrayGetArray( g_aVectors, i, fVector )
  349. ArrayGetString( g_aMessages, i, szMessage, charsmax( szMessage ) )
  350.  
  351. DrawMessage( szMessage, fOrigin, fVector )
  352. }
  353. }
  354.  
  355. public LoadMessagesFromFile()
  356. {
  357. new fh = fopen( g_szFile, "rt" )
  358.  
  359. if( !fh )
  360. return PLUGIN_HANDLED
  361.  
  362. new szBuffer[BUFFER_LEN]
  363. new szPart[BUFFER_LEN]
  364. new Float:fOrigin[3]
  365. new Float:fVector[3]
  366. new szMessage[MESSAGE_LEN]
  367.  
  368. while( !feof( fh ) )
  369. {
  370. fgets( fh, szBuffer, charsmax( szBuffer ) )
  371. if( strlen(szBuffer) < 13 ) continue
  372.  
  373. strtok( szBuffer, szPart, charsmax( szPart ), szBuffer, charsmax( szBuffer ), ';', 1 )
  374. fOrigin[0] = str_to_float( szPart )
  375. strtok( szBuffer, szPart, charsmax( szPart ), szBuffer, charsmax( szBuffer ), ';', 1 )
  376. fOrigin[1] = str_to_float( szPart )
  377. strtok( szBuffer, szPart, charsmax( szPart ), szBuffer, charsmax( szBuffer ), ';', 1 )
  378. fOrigin[2] = str_to_float( szPart )
  379.  
  380. strtok( szBuffer, szPart, charsmax( szPart ), szBuffer, charsmax( szBuffer ), ';', 1 )
  381. fVector[0] = str_to_float( szPart )
  382. strtok( szBuffer, szPart, charsmax( szPart ), szBuffer, charsmax( szBuffer ), ';', 1 )
  383. fVector[1] = str_to_float( szPart )
  384. strtok( szBuffer, szPart, charsmax( szPart ), szMessage, charsmax( szMessage ), ';', 1 )
  385. fVector[2] = str_to_float( szPart )
  386.  
  387. replace( szMessage, charsmax( szMessage ), "^n", "" )
  388.  
  389. if( file_exists( szMessage ) )
  390. {
  391. new fh2 = fopen( szMessage, "rt" )
  392.  
  393. if( fh2 )
  394. {
  395. fgets( fh2, szMessage, charsmax( szMessage ) )
  396. fclose( fh2 )
  397. }
  398. }
  399.  
  400. strtoupper( szMessage )
  401.  
  402. ArrayPushArray( g_aOrigins, fOrigin )
  403. ArrayPushArray( g_aVectors, fVector )
  404.  
  405. ArrayPushString( g_aMessages, szMessage )
  406.  
  407. ArrayPushCell( g_aSaved, 1 )
  408.  
  409. DrawMessage( szMessage, fOrigin, fVector )
  410. }
  411.  
  412. fclose( fh )
  413.  
  414. return PLUGIN_HANDLED
  415. }
  416.  
  417. ExtractMessage( szBuffer[BUFFER_LEN] )
  418. {
  419. new iLen = strlen( szBuffer )
  420. new iSemicolonCount = 0
  421.  
  422. for( new i = 0; i < iLen; i++ )
  423. {
  424. if( szBuffer[i] == ';' )
  425. {
  426. iSemicolonCount++
  427. }
  428.  
  429. if( iSemicolonCount == 6 )
  430. {
  431. copy( szBuffer, charsmax( szBuffer ), szBuffer[i+1] )
  432. replace(szBuffer, charsmax( szBuffer ), "^n", "")
  433. return 1
  434. }
  435. }
  436.  
  437. return 0
  438. }
  439.  
  440. WriteToFile( iIndex )
  441. {
  442. new Float:fOrigin[3]
  443. new Float:fVector[3]
  444. new szMessage[MESSAGE_LEN]
  445.  
  446. ArrayGetArray( g_aOrigins, iIndex, fOrigin )
  447. ArrayGetArray( g_aVectors, iIndex, fVector )
  448. ArrayGetString( g_aMessages, iIndex, szMessage, charsmax( szMessage ) )
  449.  
  450. new szBuffer[BUFFER_LEN]
  451.  
  452. formatex( szBuffer, charsmax( szBuffer ), "%f;%f;%f;%f;%f;%f;%s",
  453. fOrigin[0], fOrigin[1], fOrigin[2],
  454. fVector[0], fVector[1], fVector[2],
  455. szMessage )
  456.  
  457. write_file( g_szFile, szBuffer, -1 )
  458.  
  459. ArraySetCell( g_aSaved, iIndex, 1 )
  460. }
  461.  
  462. DrawMessage( szMessage[MESSAGE_LEN], Float:fAimOrigin[3], Float:fTextVector[3] )
  463. {
  464. new Float:fOffset[3]
  465.  
  466. new iLen = strlen( szMessage )
  467.  
  468. fOffset[0] = 0.0
  469. fOffset[1] = 0.0
  470. fOffset[2] = 0.0
  471.  
  472. for( new i = 0; i < iLen; i++ )
  473. {
  474. if( isalpha( szMessage[i] ) )
  475. {
  476. DrawDecal( fAimOrigin[0] + fOffset[0], fAimOrigin[1] + fOffset[1], fAimOrigin[2] + fOffset[2], g_iDecalAlphaBk )
  477. }
  478. else if( szMessage[i] == ',' )
  479. {
  480. fOffset[0] = 0.0
  481. fOffset[1] = 0.0
  482. fOffset[2] -= 23.0
  483. }
  484.  
  485. fOffset[0] += fTextVector[0]
  486. fOffset[1] += fTextVector[1]
  487. }
  488.  
  489. fOffset[0] = 0.0
  490. fOffset[1] = 0.0
  491. fOffset[2] = 0.0
  492.  
  493. for( new i = 0; i < iLen; i++ )
  494. {
  495. if( '0' <= szMessage[i] <= '9' )
  496. {
  497. DrawDecal( fAimOrigin[0] + fOffset[0], fAimOrigin[1] + fOffset[1], fAimOrigin[2] + fOffset[2], g_iDecalDigitBk )
  498. }
  499. else if( szMessage[i] == ',' )
  500. {
  501. fOffset[0] = 0.0
  502. fOffset[1] = 0.0
  503. fOffset[2] -= 23.0
  504. }
  505.  
  506. fOffset[0] += fTextVector[0]
  507. fOffset[1] += fTextVector[1]
  508. }
  509.  
  510. fOffset[0] = 0.0
  511. fOffset[1] = 0.0
  512. fOffset[2] = 0.0
  513.  
  514. for( new i = 0; i < iLen; i++ )
  515. {
  516. if( isalpha( szMessage[i] ) )
  517. {
  518. DrawDecal( fAimOrigin[0] + fOffset[0], fAimOrigin[1] + fOffset[1], fAimOrigin[2] + fOffset[2], g_iDecalAlpha + 'A' - szMessage[i] )
  519. }
  520. else if( szMessage[i] == ',' )
  521. {
  522. fOffset[0] = 0.0
  523. fOffset[1] = 0.0
  524. fOffset[2] -= 23.0
  525. }
  526.  
  527. fOffset[0] += fTextVector[0]
  528. fOffset[1] += fTextVector[1]
  529. }
  530.  
  531. fOffset[0] = 0.0
  532. fOffset[1] = 0.0
  533. fOffset[2] = 0.0
  534.  
  535. for( new i = 0; i < iLen; i++ )
  536. {
  537. if( '0' <= szMessage[i] <= '9' )
  538. {
  539. DrawDecal( fAimOrigin[0] + fOffset[0], fAimOrigin[1] + fOffset[1], fAimOrigin[2] + fOffset[2], g_iDecalDigit + '0' - szMessage[i] )
  540. }
  541. else if( szMessage[i] == ',' )
  542. {
  543. fOffset[0] = 0.0
  544. fOffset[1] = 0.0
  545. fOffset[2] -= 23.0
  546. }
  547.  
  548. fOffset[0] += fTextVector[0]
  549. fOffset[1] += fTextVector[1]
  550. }
  551. }
  552.  
  553. CreateNewMessage( id, szMessage[MESSAGE_LEN] )
  554. {
  555. new Float:fAimOrigin[3]
  556. new Float:fPlayerOrigin[3]
  557.  
  558. new Float:fAimVector[3]
  559. new Float:fNormalVector[3]
  560. new Float:fTextVector[3]
  561.  
  562. pev( id, pev_v_angle, fAimVector )
  563.  
  564. angle_vector( fAimVector, ANGLEVECTOR_FORWARD, fAimVector )
  565.  
  566. pev( id, pev_origin, fPlayerOrigin )
  567.  
  568. fAimVector[0] = fAimVector[0] * 9999.0 + fPlayerOrigin[0]
  569. fAimVector[1] = fAimVector[1] * 9999.0 + fPlayerOrigin[1]
  570. fAimVector[2] = fAimVector[2] * 9999.0 + fPlayerOrigin[2]
  571.  
  572. new iTr = create_tr2()
  573. engfunc( EngFunc_TraceLine, fPlayerOrigin, fAimVector, IGNORE_MONSTERS, id, iTr )
  574. get_tr2( iTr, TR_vecEndPos, fAimOrigin )
  575. get_tr2( iTr, TR_vecPlaneNormal, fNormalVector )
  576. free_tr2( iTr )
  577.  
  578. vector_to_angle( fNormalVector, fTextVector )
  579.  
  580. angle_vector( fTextVector, ANGLEVECTOR_RIGHT, fTextVector )
  581.  
  582. fTextVector[0] *= -1.0 * CHAR_WIDTH
  583. fTextVector[1] *= -1.0 * CHAR_WIDTH
  584. fTextVector[2] *= -1.0 * CHAR_WIDTH
  585.  
  586. DrawMessage( szMessage, fAimOrigin, fTextVector )
  587.  
  588. ArrayPushArray( g_aOrigins, fAimOrigin )
  589. ArrayPushArray( g_aVectors, fTextVector )
  590.  
  591. remove_quotes( szMessage )
  592. replace( szMessage, charsmax( szMessage ), "^n", "" )
  593. ArrayPushString( g_aMessages, szMessage )
  594.  
  595. ArrayPushCell( g_aSaved, 0 )
  596. }
  597.  
  598. DrawDecal( Float:x, Float:y, Float:z, tid )
  599. {
  600. message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
  601. if( tid > 255 )
  602. {
  603. tid -= 255
  604. write_byte( TE_WORLDDECALHIGH )
  605. }
  606. else
  607. {
  608. write_byte( TE_WORLDDECAL )
  609. }
  610. engfunc( EngFunc_WriteCoord, x )
  611. engfunc( EngFunc_WriteCoord, y )
  612. engfunc( EngFunc_WriteCoord, z )
  613. write_byte( tid )
  614. message_end()
  615. }
  616.  



Próbáld a vele szemben lévő falra;)

_________________
Rengeteg új beszólás eléréséhez kattints IDE (Ezek alapból sank soundshoz készültek)

Steam profil:
[steam]http://steamcommunity.com/profiles/76561198089487307[/steam]


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése: Rendezés 
Új téma nyitása Hozzászólás a témához  [2 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 0 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole