Dodany przez: shiq, 13:42 22-08-2026

Nowy Pobierz
  1. Block creation — CreateBlock
  2.  
  3.  
  4. CreateBlock(const id, const block_type, Float:origin[3], const axis, const size, const property1[], const property2[], const property3[], const property4[], szCreator[] = "Unknown", szLastMover[] = "Unknown")
  5. {
  6.         new iEntity = create_entity("info_target");
  7.         if ( !is_valid_ent(iEntity) ) return 0;
  8.         entity_set_string(iEntity, EV_SZ_classname, g_block_classname);
  9.         entity_set_int(iEntity, EV_INT_solid, SOLID_BBOX);
  10.        
  11.         switch ( block_type )
  12.         {
  13.                 case BOUNCE_DEATH:
  14.                 {
  15.                         set_pev(iEntity, pev_movetype, MOVETYPE_TOSS);
  16.                         set_task(0.1,"bounce_death",iEntity);
  17.                 }
  18.                 case TELEPORT: { ... entity_set_int(iEntity, EV_INT_movetype, MOVETYPE_NONE); }
  19.                 case DESTINATION: { ... entity_set_int(iEntity, EV_INT_movetype, MOVETYPE_NONE); }
  20.                 default: { entity_set_int(iEntity, EV_INT_movetype, MOVETYPE_NONE); }
  21.         }
  22.        
  23.         // ... oblicza size_min/size_max/angles wg axis (X/Y/Z) i size (SMALL/NORMAL/LARGE/POLE)
  24.        
  25.         set_pev(iEntity, pev_targetname, szCreator, 31);
  26.         set_pev(iEntity, pev_target, szLastMover, 31);
  27.         entity_set_model(iEntity, block_model);
  28.        
  29.         SetBlockRendering(iEntity, g_render[block_type], g_red[block_type], g_green[block_type], g_blue[block_type], g_alpha[block_type]);
  30.  
  31.         entity_set_vector(iEntity, EV_VEC_angles, angles);
  32.         entity_set_size(iEntity, size_min, size_max);
  33.         entity_set_int(iEntity, EV_INT_body, block_type);
  34.        
  35.         if ( 1 <= id <= g_max_players )
  36.         {
  37.                 DoSnapping(id, iEntity, origin);
  38.         }
  39.        
  40.         entity_set_origin(iEntity, origin);
  41.        
  42.         SetProperty(iEntity, 1, property1);
  43.         SetProperty(iEntity, 2, property2);
  44.         SetProperty(iEntity, 3, property3);
  45.         SetProperty(iEntity, 4, property4);
  46.        
  47.         g_block_count ++;
  48.         return iEntity;
  49. }
  50.  
  51.  
  52. ------------------------------------
  53.  
  54. Load parsing — TaskLoad
  55.  
  56.  
  57. ------------------------------------
  58.  
  59. public TaskLoad()
  60. {
  61.         if (file_exists(g_new_file))
  62.         {
  63.                 new file = fopen(g_new_file, "rt");
  64.                 new data[256];
  65.                 new type[2];
  66.                 new block_size[17];
  67.                 new origin_x[17], origin_y[17], origin_z[17];
  68.                 new angel_x[17], angel_y[17], angel_z[17];
  69.                 new property1[5], property2[5], property3[5], property4[5];
  70.                 new szCreator[32], szLastMover[32];
  71.                 new count = 0;
  72.                
  73.                 while ( !feof(file) )
  74.                 {
  75.                         type = g_blank;
  76.                         fgets(file, data, charsmax(data));
  77.                         if(++count < g_load_start_line) continue;
  78.                         if(count >= g_load_start_line + 25) {
  79.                                 g_load_start_line = count;
  80.                                 set_task(0.5, "TaskLoad");
  81.                                 fclose(file);
  82.                                 return;
  83.                         }
  84.                        
  85.                         parse(data,
  86.                                 type, charsmax(type),
  87.                                 origin_x, charsmax(origin_x),
  88.                                 origin_y, charsmax(origin_y),
  89.                                 origin_z, charsmax(origin_z),
  90.                                 angel_x, charsmax(angel_x),
  91.                                 angel_y, charsmax(angel_y),
  92.                                 angel_z, charsmax(angel_z),
  93.                                 block_size, charsmax(block_size),
  94.                                 property1, charsmax(property1),
  95.                                 property2, charsmax(property2),
  96.                                 property3, charsmax(property3),
  97.                                 property4, charsmax(property4),
  98.                                 szCreator, charsmax(szCreator),
  99.                                 szLastMover, charsmax(szLastMover)
  100.                                 );
  101.                        
  102.                         // konwersja stringów -> float/int
  103.                         origin[0] = str_to_float(origin_x); ...
  104.                         angles[0] = str_to_float(angel_x); ...
  105.                         size = str_to_num(block_size);
  106.                        
  107.                         if ( strlen(type) > 0 )
  108.                         {
  109.                                 if ( type[0] != '*' )
  110.                                 {
  111.                                         // ustala axis (X/Y/Z) na podstawie angles
  112.                                 }
  113.                                
  114.                                 switch ( type[0] )
  115.                                 {
  116.                                         case 'A': block_type = PLATFORM;
  117.                                         // ... mapowanie liter na typ bloku
  118.                                         case '*':
  119.                                         {
  120.                                                 CreateTeleport(0, TELEPORT_START, origin);
  121.                                                 CreateTeleport(0, TELEPORT_DESTINATION, angles);
  122.                                                 ++tele_count;
  123.                                         }
  124.                                 }
  125.                                
  126.                                 if ( type[0] != '*' && type[0] != '!' )
  127.                                 {
  128.                                         CreateBlock(0, block_type, origin, axis, size, property1, property2, property3, property4, szCreator, szLastMover);
  129.                                         ++block_count;
  130.                                 }
  131.                         }
  132.                 }
  133.                 fclose(file);
  134.                 BCM_Print(0, "...done loading...");
  135.                 set_task(0.1, "checkstuck");
  136.         }
  137. }
  138.  
  139.  
  140. --------------------------------------------------------
  141. Load timing
  142. --------------------------------------------------------
  143.  
  144. public plugin_cfg()
  145. {
  146.         LoadBlockConfigurations();
  147.         newLoad(0);
  148. }
  149.  
  150.  
  151. -------------------
  152. precache
  153. ------------------
  154.  
  155. public plugin_precache()
  156. {
  157.         g_block_models[PLATFORM] = g_model_platform;
  158.         g_block_models[BHOP] = g_model_bhop;
  159.         g_block_models[DAMAGE] = g_model_damage;
  160.         g_block_models[HEALER] = g_model_healer;
  161.         g_block_models[NO_FALL_DAMAGE] = g_model_no_fall_damage;
  162.         g_block_models[ICE] = g_model_ice;
  163.         g_block_models[TRAMPOLINE] = g_model_trampoline;
  164.         g_block_models[SPEED_BOOST] = g_model_speed_boost;
  165.         g_block_models[DEATH] = g_model_death;
  166.         g_block_models[LOW_GRAVITY] = g_model_low_gravity;
  167.         g_block_models[SLAP] = g_model_slap;
  168.         g_block_models[HONEY] = g_model_honey;
  169.         g_block_models[CT_BARRIER] = g_model_ct_barrier;
  170.         g_block_models[T_BARRIER] = g_model_t_barrier;
  171.         g_block_models[GLASS] = g_model_glass;
  172.         g_block_models[NO_SLOW_DOWN_BHOP] = g_model_no_slow_down_bhop;
  173.         g_block_models[DELAYED_BHOP] = g_model_delayed_bhop;
  174.         g_block_models[INVINCIBILITY] = g_model_invincibility;
  175.         g_block_models[STEALTH] = g_model_stealth;
  176.         g_block_models[BOOTS_OF_SPEED] = g_model_boots_of_speed;
  177.         g_block_models[WEAPON_BLOCK] = g_model_weapon_block;
  178.         g_block_models[DUCK_BLOCK] = g_model_duck_block;
  179.         g_block_models[XP] = g_model_xp_block;
  180.         g_block_models[BLIND_TRAP] = g_model_blind_trap;
  181.         g_block_models[SUPERMAN] = g_model_superman;
  182.         g_block_models[MONEY] = g_model_money;
  183.         g_block_models[BOUNCE_DEATH] = g_model_death;
  184.         g_block_models[TELEPORT] = g_model_teleport;
  185.         g_block_models[DESTINATION] = g_model_destination;
  186.         g_block_models[ICE_BHOP] = g_model_ice_bhop;
  187.         g_block_models[HE] = g_model_he;
  188.         g_block_models[FLASH] = g_model_flash;
  189.         g_block_models[SMOKE] = g_model_smoke;
  190.         g_block_models[M4A1] = g_model_m4a1;
  191.         g_block_models[M3] = g_model_m3;
  192.         g_block_models[AWP] = g_model_awp;
  193.         g_block_models[DEAGLE] = g_model_deagle;
  194.         g_block_models[USP] = g_model_usp;
  195.         g_block_models[GLOCK] = g_model_glock;
  196.         g_block_models[AK47] = g_model_ak47;
  197.         g_block_models[LIGHT] = g_model_light;
  198.         g_block_models[QUAKE] = g_model_quake;
  199.         g_block_models[MUZA] = g_model_muza;
  200.         g_block_models[VIP] = g_model_vip;
  201.         g_block_models[MP5] = g_model_mp5;
  202.  
  203.         SetupBlockRendering(GLASS, TRANSWHITE, 255, 255, 255, 100);
  204.         SetupBlockRendering(INVINCIBILITY, GLOWSHELL, 0, 150, 255, 16);
  205.         SetupBlockRendering(STEALTH, GLOWSHELL, 255, 255, 255, 16);
  206.         SetupBlockRendering(XP, GLOWSHELL, 255, 150, 0, 16);
  207.         SetupBlockRendering(WEAPON_BLOCK, NORMAL, 255, 0, 0, 16);
  208.         SetupBlockRendering(XP, NORMAL, 255, 150, 0, 16);
  209.         SetupBlockRendering(HE, GLOWSHELL, 0, 0, 255, 16);
  210.         SetupBlockRendering(FLASH, GLOWSHELL, 0, 0, 255, 16);
  211.         SetupBlockRendering(SMOKE, GLOWSHELL, 0, 0, 255, 16);
  212.         SetupBlockRendering(M4A1, NORMAL, 255, 0, 0, 16);
  213.         SetupBlockRendering(M3, NORMAL, 255, 0, 0, 16);
  214.         SetupBlockRendering(AWP, NORMAL, 255, 0, 0, 16);
  215.         SetupBlockRendering(DEAGLE, NORMAL, 255, 0, 0, 16);
  216.         SetupBlockRendering(USP, NORMAL, 255, 0, 0, 16);
  217.         SetupBlockRendering(GLOCK, NORMAL, 255, 0, 0, 16);
  218.         SetupBlockRendering(AK47, NORMAL, 255, 0, 0, 16);
  219.        
  220.         new block_model_small[256];
  221.         new block_model_large[256];
  222.         new block_model_pole[256];
  223.  
  224.         for ( new i = 0; i < TOTAL_BLOCKS; ++i )
  225.         {
  226.                 SetBlockModelNameSmall(block_model_small, g_block_models[i], 256);
  227.                 SetBlockModelNameLarge(block_model_large, g_block_models[i], 256);
  228.                 SetBlockModelNamePole(block_model_pole, g_block_models[i], 256);
  229.                
  230.                 precache_model(g_block_models[i]);
  231.                 precache_model(block_model_small);
  232.                 precache_model(block_model_large);
  233.                 precache_model(block_model_pole);
  234.         }
  235.        
  236.         precache_model(g_sprite_teleport_start);
  237.         precache_model(g_sprite_teleport_destination);    
  238.         precache_sound(g_sound_invincibility);
  239.         precache_sound(g_sound_stealth);
  240.         precache_sound(g_sound_boots_of_speed);
  241.         precache_sound(g_sound_supermario);
  242.         precache_sound(g_sound_xpblock);
  243.         precache_sound(g_sound_money);
  244.         precache_sound(g_sound_teleport);
  245.         precache_sound(g_sound_teleports);
  246.         precache_sound(g_sound_death);
  247.         precache_sound(g_sound_death_bounce);
  248.         precache_sound(g_sound_trampoline);
  249.         precache_sound(gsz1); precache_sound(gsz2); precache_sound(gsz3);
  250.         precache_sound(gsz4); precache_sound(gsz5); precache_sound(gsz6);
  251.         precache_sound(gsz7); precache_sound(gsz8); precache_sound(gsz9);
  252.         precache_sound(gsz10); precache_sound(gsz11);
  253. }
  254.  
  255. -----------------------------
  256. 5. Rendering — SetBlockRendering
  257. --------------------------------
  258. enum
  259. {
  260.         NORMAL,
  261.         GLOWSHELL,
  262.         TRANSCOLOR,
  263.         TRANSALPHA,
  264.         TRANSWHITE
  265. };
  266.  
  267. SetupBlockRendering(block_type, render_type, red, green, blue, alpha)
  268. {
  269.         g_render[block_type] = render_type;
  270.         g_red[block_type] = red;
  271.         g_green[block_type] = green;
  272.         g_blue[block_type] = blue;
  273.         g_alpha[block_type] = alpha;
  274. }
  275.  
  276. SetBlockRendering(iEntity, type, red, green, blue, alpha)
  277. {
  278.         if ( !IsBlock(iEntity) ) return PLUGIN_HANDLED;
  279.        
  280.         switch ( type )
  281.         {
  282.                 case GLOWSHELL:   set_rendering(iEntity, kRenderFxGlowShell, red, green, blue, kRenderNormal, alpha);
  283.                 case TRANSCOLOR:  set_rendering(iEntity, kRenderFxGlowShell, red, green, blue, kRenderTransColor, alpha);
  284.                 case TRANSALPHA:  set_rendering(iEntity, kRenderFxNone, red, green, blue, kRenderTransColor, alpha);
  285.                 case TRANSWHITE:  set_rendering(iEntity, kRenderFxNone, red, green, blue, kRenderTransAdd, alpha);
  286.                 default:          set_rendering(iEntity, kRenderFxNone, red, green, blue, kRenderNormal, alpha);
  287.         }
  288.        
  289.         return PLUGIN_HANDLED;
  290. }
  291.  
  292.  

Źródło:

Ostatnie wpisy

Linki

Funkcje