Dabar yra 2018 Lap 20 18:05




 Puslapis 11 [ 2 pranešimai(ų) ] 
Autorius Žinutė
 Pranešimo tema: supply
Žinutės numeris: #1  StandartinėParašytas: 2017 Bal 15 15:03 
Senbūvis

Užsiregistravo: 2015 Vas 27 19:29
Pranešimai: 1086
Karma: 45

Miestas: Alytus
Sveiki,gal kas galėtu pagelbėti kaip cia padaryti kad random vieta paimtu o ne is eiles ?
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fakemeta>
  4. #include <hamsandwich>
  5. #include <engine>
  6. #include <rcsgo>
  7.  
  8. #define PLUGIN  "Supply Crates"
  9. #define AUTHOR  "TBagT"
  10. #define VERSION "2.0"
  11.  
  12. // Entity specifics //
  13. new entSupply[ ] = "supply_box_entity";
  14. new Float:minModel[ 3 ] = { -8.01, -8.09, 0.0 }
  15. new Float:maxModel[ 3 ] = { 8.12, 8.09, 22.26 }
  16. new const SupplyBoxModel[ ]   = { "models/w_supplybox.mdl" }
  17. new const PickupSound[ ]      = { "supply_boxes/pickup.wav" }
  18. new const SUPPLY_BOX_SOUND[ ] = { "supply_boxes/inbound.wav" }
  19.  
  20. // Player specifics //
  21. new bool:can_pickup[ 33 ];
  22. new pickupCount[ 33 ];
  23.  
  24. // Supply box specifics //
  25. #define TASK_ID_SPAWN_BOXES 150
  26. new Array:SupplyBoxes, Array:EmptyCfgLines;     // <- Information holders //
  27. enum _: SupplyBoxesArray {                      // <- Array variables //
  28.         line_id,
  29.         Float:box_origin[ 3 ],
  30.         Float:box_angles[ 3 ]
  31. }
  32. new Array:SupplyBoxesContents;                  // <- Content holder //
  33. enum _: SupplyContentsArray {
  34.         box_id,
  35.         box_name[ 35 ],
  36.         pickupForwardItem
  37. }
  38. // Server specifics //
  39. new cvar_pickupTimes, cvar_timesPerRound, cvar_amountSpawn, cvar_team, cvar_spawnEvery;
  40. new maxPlayers, mapName[ 32 ], configurationFile[ 258 ], lines;
  41. new forwardResult, spawnCount;
  42.  
  43. public plugin_precache( ) {
  44.         precache_model( SupplyBoxModel );
  45.         precache_sound( PickupSound );
  46.         precache_sound( SUPPLY_BOX_SOUND );
  47.  
  48.         SupplyBoxes         = ArrayCreate( SupplyBoxesArray );
  49.         SupplyBoxesContents = ArrayCreate( SupplyContentsArray );
  50.         EmptyCfgLines       = ArrayCreate( 1, 1 );
  51. }
  52.  
  53. public plugin_init( ) {
  54.  
  55.         register_plugin( PLUGIN, VERSION, AUTHOR );
  56.         cvar_spawnEvery    = register_cvar( "sb_spawn_every", "60.0" );
  57.         cvar_pickupTimes   = register_cvar( "sb_pickup_times", "3" );
  58.         cvar_timesPerRound = register_cvar( "sb_times_per_round", "2" );
  59.         cvar_amountSpawn   = register_cvar( "sb_spawn_amount", "3" );
  60.         cvar_team          = register_cvar( "sb_team", "0" );
  61.  
  62.         register_touch( entSupply, "player", "supply_box_pickup" );
  63.         register_logevent( "RoundEnd", 2, "1=Round_End" );
  64.         register_logevent( "RoundStart", 2, "1=Round_Start" );
  65.         RegisterHam( Ham_Spawn, "player", "playerSpawn", 1 );
  66.  
  67.         register_clcmd( "say /supply", "supplyAdminMenu" );
  68.  
  69.         maxPlayers = get_maxplayers( );
  70. }
  71.  
  72. public plugin_cfg( ) {
  73.         get_mapname( mapName, charsmax( mapName ) );
  74.         add( mapName, charsmax( mapName ), ".cfg", 0 );
  75.         get_configsdir( configurationFile, charsmax( configurationFile ) );
  76.         add( configurationFile, charsmax( configurationFile ), "/SupplyBoxes/", 0 );
  77.  
  78.         if( !dir_exists( configurationFile ) )
  79.                 mkdir( configurationFile );
  80.  
  81.         add( configurationFile, charsmax( configurationFile ), mapName, 0 );
  82.  
  83.         if( !file_exists( configurationFile ) ) {
  84.                 new m_map_cfg = fopen( configurationFile, "wt" );
  85.                 fclose( m_map_cfg );
  86.         }
  87.         fillSupplyArray( );
  88. }
  89.  
  90. public plugin_natives( ) {
  91.         register_native( "register_box_content", "native_register_content" );
  92. }
  93.  
  94. public client_disconnect( id ) {
  95.         can_pickup[ id ]  = false;
  96.         pickupCount[ id ] = 0;
  97. }
  98.  
  99. public client_putinserver( id ) {
  100.         can_pickup[ id ]  = false;
  101.         pickupCount[ id ] = 0;
  102. }
  103.  
  104. public RoundStart( ) {
  105.         if( get_pcvar_float( cvar_spawnEvery ) < 30.0 )
  106.                 set_task( 30.0, "spawnSupplyBoxes", TASK_ID_SPAWN_BOXES, _, _, "b" );
  107.         else
  108.                 set_task( get_pcvar_float( cvar_spawnEvery ), "spawnSupplyBoxes", TASK_ID_SPAWN_BOXES, _, _, "b" );
  109. }
  110.  
  111. public RoundEnd( ) {
  112.         remove_task( TASK_ID_SPAWN_BOXES );
  113.         for( new index = 1; index < maxPlayers; index++ )
  114.                 pickupCount[ index ] = 0;
  115.         spawnCount = 0;
  116.         remove_supply_boxes( );
  117. }
  118.  
  119. public playerSpawn( id ) {
  120.         if( !is_user_alive( id ) || get_user_team( id ) != get_pcvar_num( cvar_team ) )
  121.                 can_pickup[ id ] = false;
  122.         else
  123.                 can_pickup[ id ] = true;
  124. }
  125.  
  126. public fillSupplyArray( ) {
  127.         new data[ 258 ];
  128.         new Float:Origin[ 3 ], Float:Angles[ 3 ];
  129.         new const text_parser[ 6 ][ 8 ];
  130.  
  131.         new file = fopen( configurationFile, "r" );
  132.         while( fgets( file, data, charsmax( data ) - 1 ) ) {
  133.  
  134.                 lines++;
  135.                 if( data[ 0 ] == ' ' ) {
  136.                         ArrayPushCell( EmptyCfgLines, lines );
  137.                         continue;
  138.                 }
  139.  
  140.                 parse( data, text_parser[ 0 ], 7, text_parser[ 1 ], 7, text_parser[ 2 ], 7, text_parser[ 3 ], 7, text_parser[ 4 ], 7, text_parser[ 5 ], 7 );
  141.                 Origin[ 0 ] = str_to_float( text_parser[ 0 ] );
  142.                 Origin[ 1 ] = str_to_float( text_parser[ 1 ] );
  143.                 Origin[ 2 ] = str_to_float( text_parser[ 2 ] );
  144.                 Angles[ 0 ] = str_to_float( text_parser[ 3 ] );
  145.                 Angles[ 1 ] = str_to_float( text_parser[ 4 ] );
  146.                 Angles[ 2 ] = str_to_float( text_parser[ 5 ] );
  147.  
  148.                 AddSupplyToArray( Origin, Angles, lines );
  149.         }
  150.         fclose( file );
  151. }
  152.  
  153. public supplyAdminMenu( id ) {
  154.         if( !( get_user_flags( id ) & ADMIN_IMMUNITY ) || !is_user_alive( id ) )
  155.                 return PLUGIN_HANDLED;
  156.  
  157.         new menu = menu_create( "Supply boxes v1", "supply_menu_handler" );
  158.         menu_additem( menu, "Put supply box", "1" );
  159.         menu_additem( menu, "Delete supply box", "2" );
  160.  
  161.         menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
  162.         menu_display( id, menu, 0 );
  163.         return PLUGIN_HANDLED;
  164. }
  165.  
  166. public supply_menu_handler( id, menu, item ) {
  167.         if( !is_user_alive( id ) )
  168.                 return PLUGIN_HANDLED;
  169.  
  170.         if( item == MENU_EXIT ) {
  171.                 menu_destroy( menu );
  172.                 return PLUGIN_HANDLED;
  173.         }
  174.  
  175.         new data[ 6 ], name[ 64 ], access, callback, key;
  176.         menu_item_getinfo( menu, item, access, data, 5, name, charsmax( name ), callback );
  177.  
  178.         key = str_to_num( data );
  179.         switch( key ) {
  180.                 case 1: {
  181.                         new TargetOrigin[ 3 ], Float:Target[ 3 ], Float:Angles[ 3 ];
  182.                         get_user_origin( id, TargetOrigin, 3 );
  183.  
  184.                         Target[ 0 ] = float( TargetOrigin[ 0 ] );
  185.                         Target[ 1 ] = float( TargetOrigin[ 1 ] );
  186.                         Target[ 2 ] = float( TargetOrigin[ 2 ] );
  187.  
  188.                     entity_get_vector( id, EV_VEC_v_angle, Angles );
  189.                         Angles[ 0 ] = 0.0;
  190.                         CreateSupplyBox( Target, Angles );
  191.                 }
  192.                 case 2: {
  193.                         new entity, body;
  194.                     get_user_aiming( id, entity, body, 500 );
  195.                         deleteSupplyBox( entity );
  196.                 }
  197.         }
  198.         supplyAdminMenu( id );
  199.         return PLUGIN_HANDLED;
  200. }
  201.  
  202. public CreateSupplyBox( Float:Origins[ 3 ], Float:Angles[ 3 ] ) {
  203.         new szData[ 248 ], line_to_item;
  204.         format( szData, charsmax( szData ), "%f %f %f %f %f %f", Origins[ 0 ], Origins[ 1 ], Origins[ 2 ], Angles[ 0 ], Angles[ 1 ], Angles[ 2 ] );
  205.  
  206.         if( ArraySize( EmptyCfgLines ) > 0 ) {
  207.                 new emptyLineId = ArrayGetCell( EmptyCfgLines, 0 );
  208.                 ArrayDeleteItem( EmptyCfgLines, 0 );
  209.                 write_file( configurationFile, szData, emptyLineId - 1 );
  210.                 line_to_item = emptyLineId;
  211.         } else {
  212.                 lines++;
  213.                 write_file( configurationFile, szData );
  214.                 line_to_item = lines;
  215.         }
  216.         AddSupplyToArray( Origins, Angles, line_to_item );
  217.         spawnSupplyBox( Origins, Angles, line_to_item );
  218. }
  219.  
  220. public AddSupplyToArray( Float:Origin[ 3 ], Float:Angles[ 3 ], id ) {
  221.         new Data[ SupplyBoxesArray ];
  222.         Data[ line_id ]    = id;
  223.         Data[ box_origin ] = _:Origin;
  224.         Data[ box_angles ] = _:Angles;
  225.  
  226.         ArrayPushArray( SupplyBoxes, Data );
  227. }
  228.  
  229. public deleteSupplyBox( ent ) {
  230.  
  231.         if( pev_valid( ent ) ) {
  232.                 new class_name_ent[ 64 ];
  233.                 entity_get_string( ent, EV_SZ_classname, class_name_ent, charsmax( class_name_ent ) );
  234.                 if( equal( class_name_ent, entSupply ) ) {
  235.                         new size = ArraySize( SupplyBoxes );
  236.                         new item_id = pev( ent, pev_iuser1 );
  237.                         for( new i = 0; i < size; i++ ) {
  238.                                 new DataArray[ SupplyBoxesArray ];
  239.                                 ArrayGetArray( SupplyBoxes, i, DataArray );
  240.                                 if( DataArray[ line_id ] == item_id ) {
  241.                                         lines--;
  242.                                         remove_entity( ent );
  243.                                         ArrayPushCell( EmptyCfgLines, item_id );
  244.                                         write_file( configurationFile, " ", item_id - 1 );
  245.                                         ArrayDeleteItem( SupplyBoxes, i );
  246.                                         break;
  247.                                 }
  248.                         }
  249.                 }
  250.         }
  251.  
  252. }
  253.  
  254. public spawnSupplyBoxes( ) {
  255.  
  256.         if( ArraySize( SupplyBoxes ) < 1 || ArraySize( SupplyBoxesContents ) < 1 || spawnCount >= get_pcvar_num( cvar_timesPerRound ) ) {
  257.                 remove_task( TASK_ID_SPAWN_BOXES );
  258.                 return;
  259.         }
  260.         remove_supply_boxes( );
  261.         spawnCount++;
  262.  
  263.         new Float:Orig[ 3 ], Float:Angl[ 3 ];
  264.         new AmountCvar   = get_pcvar_num( cvar_amountSpawn );
  265.         new ArraySizeBox = ArraySize( SupplyBoxes );
  266.         new size = ( AmountCvar == 0 || AmountCvar > ArraySizeBox ) ? ArraySizeBox : AmountCvar;
  267.         new Data[ SupplyBoxesArray ];
  268.         new count, randomId;
  269.         new Array:Boxes = ArrayCreate( SupplyBoxesArray );
  270.  
  271.         for( new index = 0; index < ArraySizeBox; index++ ) {
  272.                 ArrayGetArray( SupplyBoxes, index, Data );
  273.                 ArrayPushArray( Boxes, Data );
  274.         }
  275.  
  276.         do {
  277.                 randomId = random( ArraySizeBox );
  278.                 ArrayGetArray( Boxes, randomId, Data );
  279.                 Orig[ 0 ] = Data[ box_origin ][ 0 ]; Angl[ 0 ] = Data[ box_angles ][ 0 ];
  280.                 Orig[ 1 ] = Data[ box_origin ][ 1 ]; Angl[ 1 ] = Data[ box_angles ][ 1 ];
  281.                 Orig[ 2 ] = Data[ box_origin ][ 2 ]; Angl[ 2 ] = Data[ box_angles ][ 2 ];
  282.                 spawnSupplyBox( Orig, Angl, Data[ line_id ] );
  283.                 count++;
  284.  
  285.                 ArrayDeleteItem( Boxes, randomId );
  286.                 ArraySizeBox--;
  287.         } while( count < size );
  288.  
  289.         client_cmd( 0, "spk %s", SUPPLY_BOX_SOUND );
  290. }
  291.  
  292. public remove_supply_boxes( ) {
  293.         new ent = -1;
  294.         while( ( ent = engfunc( EngFunc_FindEntityByString, ent, "classname", entSupply ) ) )
  295.                 remove_entity( ent );
  296. }
  297.  
  298. public spawnSupplyBox( Float:pOrigins[ 3 ], Float:pAngles[ 3 ], line_idas ) {
  299.         new entity = create_entity( "info_target" );
  300.         entity_set_string( entity, EV_SZ_classname, entSupply );
  301.         entity_set_int( entity, EV_INT_solid, SOLID_BBOX );
  302.         entity_set_origin( entity, pOrigins );
  303.         entity_set_vector( entity, EV_VEC_angles, pAngles );
  304.         entity_set_model( entity, SupplyBoxModel );
  305.         entity_set_size( entity, minModel, maxModel );
  306.  
  307.         entity_set_int( entity, EV_INT_renderfx, kRenderFxGlowShell );
  308.         entity_set_vector( entity, EV_VEC_rendercolor, Float:{ 221.0, 173.0, 237.0 } );
  309.  
  310.         set_pev( entity, pev_iuser1, line_idas );
  311. }
  312.  
  313. public supply_box_pickup( box, player ) {
  314.         if( !is_user_alive( player ) || !can_pickup[ player ] )
  315.                 return;
  316.  
  317.         new randomDrop = random( ArraySize( SupplyBoxesContents ) );
  318.         new Data[ SupplyContentsArray ];
  319.         ArrayGetArray( SupplyBoxesContents, randomDrop, Data );
  320.         ExecuteForward( Data[ pickupForwardItem ], forwardResult, player );
  321.  
  322.         if( get_pcvar_num( cvar_pickupTimes ) > 0 ) {
  323.                 pickupCount[ player ]++;
  324.                 if( pickupCount[ player ] >= get_pcvar_num( cvar_pickupTimes ) )
  325.                         can_pickup[ player ] = false;
  326.         }
  327.  
  328.         client_print( player, print_chat, "You picked up %s !", Data[ box_name ] );
  329.         client_cmd( player, "spk %s", PickupSound );
  330.         remove_entity( box );
  331. }
  332.  
  333. public native_register_content( plugin_id, paramaters_num ) {
  334.         new BoxName[ 32 ];
  335.         get_string( 1, BoxName, charsmax( BoxName ) );
  336.  
  337.         new Data[ SupplyContentsArray ];
  338.         Data[ box_id ]   = ArraySize( SupplyBoxesContents );
  339.         Data[ box_name ] = BoxName;
  340.         Data[ pickupForwardItem ] = CreateOneForward( plugin_id, "sb_pickup_event", FP_CELL );
  341.         ArrayPushArray( SupplyBoxesContents, Data );
  342.  
  343.         // Debuging //
  344.         // log_amx( "Registered box content name: %s and id: %d", BoxName, Data[ box_id ] );
  345.  
  346.         // Return id to original plugin //
  347.         return Data[ box_id ];
  348. }



Nebereikia... :)



_________________
Šaudyk.LT - „Siekime tikslo kartu. Tobulėkime“.
50% paramos atgavimas, 1 Gbps pralaidumas, Apsauga nuo DDoS.
Atsijungęs
 Aprašymas  
 
 Pranešimo tema: Re: supply
Žinutės numeris: #2  StandartinėParašytas: 2017 Rgs 09 14:02 
Ar jis surinks 50 žinučių?

Užsiregistravo: 2016 Rgp 19 18:28
Pranešimai: 32
Karma: 0
https://www.supergames.lt/topic/295970- ... -20170823/


Atsijungęs
 Aprašymas  
 
Rodyti paskutinius pranešimus:  Rūšiuoti pagal  
 Puslapis 11 [ 2 pranešimai(ų) ] 


Dabar prisijungę

Vartotojai naršantys šį forumą: Registruotų vartotojų nėra ir 2 svečių


Jūs negalite kurti naujų temų šiame forume
Jūs negalite atsakinėti į temas šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite trinti savo pranešimų šiame forume
Jūs negalite prikabinti failų šiame forume

Ieškoti:
Pereiti į:  

cron