- Block creation — CreateBlock
- 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")
- {
- new iEntity = create_entity("info_target");
- if ( !is_valid_ent(iEntity) ) return 0;
- entity_set_string(iEntity, EV_SZ_classname, g_block_classname);
- entity_set_int(iEntity, EV_INT_solid, SOLID_BBOX);
- switch ( block_type )
- {
- case BOUNCE_DEATH:
- {
- set_pev(iEntity, pev_movetype, MOVETYPE_TOSS);
- set_task(0.1,"bounce_death",iEntity);
- }
- case TELEPORT: { ... entity_set_int(iEntity, EV_INT_movetype, MOVETYPE_NONE); }
- case DESTINATION: { ... entity_set_int(iEntity, EV_INT_movetype, MOVETYPE_NONE); }
- default: { entity_set_int(iEntity, EV_INT_movetype, MOVETYPE_NONE); }
- }
- // ... oblicza size_min/size_max/angles wg axis (X/Y/Z) i size (SMALL/NORMAL/LARGE/POLE)
- set_pev(iEntity, pev_targetname, szCreator, 31);
- set_pev(iEntity, pev_target, szLastMover, 31);
- entity_set_model(iEntity, block_model);
- SetBlockRendering(iEntity, g_render[block_type], g_red[block_type], g_green[block_type], g_blue[block_type], g_alpha[block_type]);
- entity_set_vector(iEntity, EV_VEC_angles, angles);
- entity_set_size(iEntity, size_min, size_max);
- entity_set_int(iEntity, EV_INT_body, block_type);
- if ( 1 <= id <= g_max_players )
- {
- DoSnapping(id, iEntity, origin);
- }
- entity_set_origin(iEntity, origin);
- SetProperty(iEntity, 1, property1);
- SetProperty(iEntity, 2, property2);
- SetProperty(iEntity, 3, property3);
- SetProperty(iEntity, 4, property4);
- g_block_count ++;
- return iEntity;
- }
- ------------------------------------
- Load parsing — TaskLoad
- ------------------------------------
- public TaskLoad()
- {
- if (file_exists(g_new_file))
- {
- new file = fopen(g_new_file, "rt");
- new data[256];
- new type[2];
- new block_size[17];
- new origin_x[17], origin_y[17], origin_z[17];
- new angel_x[17], angel_y[17], angel_z[17];
- new property1[5], property2[5], property3[5], property4[5];
- new szCreator[32], szLastMover[32];
- new count = 0;
- while ( !feof(file) )
- {
- type = g_blank;
- fgets(file, data, charsmax(data));
- if(++count < g_load_start_line) continue;
- if(count >= g_load_start_line + 25) {
- g_load_start_line = count;
- set_task(0.5, "TaskLoad");
- fclose(file);
- return;
- }
- parse(data,
- type, charsmax(type),
- origin_x, charsmax(origin_x),
- origin_y, charsmax(origin_y),
- origin_z, charsmax(origin_z),
- angel_x, charsmax(angel_x),
- angel_y, charsmax(angel_y),
- angel_z, charsmax(angel_z),
- block_size, charsmax(block_size),
- property1, charsmax(property1),
- property2, charsmax(property2),
- property3, charsmax(property3),
- property4, charsmax(property4),
- szCreator, charsmax(szCreator),
- szLastMover, charsmax(szLastMover)
- );
- // konwersja stringów -> float/int
- origin[0] = str_to_float(origin_x); ...
- angles[0] = str_to_float(angel_x); ...
- size = str_to_num(block_size);
- if ( strlen(type) > 0 )
- {
- if ( type[0] != '*' )
- {
- // ustala axis (X/Y/Z) na podstawie angles
- }
- switch ( type[0] )
- {
- case 'A': block_type = PLATFORM;
- // ... mapowanie liter na typ bloku
- case '*':
- {
- CreateTeleport(0, TELEPORT_START, origin);
- CreateTeleport(0, TELEPORT_DESTINATION, angles);
- ++tele_count;
- }
- }
- if ( type[0] != '*' && type[0] != '!' )
- {
- CreateBlock(0, block_type, origin, axis, size, property1, property2, property3, property4, szCreator, szLastMover);
- ++block_count;
- }
- }
- }
- fclose(file);
- BCM_Print(0, "...done loading...");
- set_task(0.1, "checkstuck");
- }
- }
- --------------------------------------------------------
- Load timing
- --------------------------------------------------------
- public plugin_cfg()
- {
- LoadBlockConfigurations();
- newLoad(0);
- }
- -------------------
- precache
- ------------------
- public plugin_precache()
- {
- g_block_models[PLATFORM] = g_model_platform;
- g_block_models[BHOP] = g_model_bhop;
- g_block_models[DAMAGE] = g_model_damage;
- g_block_models[HEALER] = g_model_healer;
- g_block_models[NO_FALL_DAMAGE] = g_model_no_fall_damage;
- g_block_models[ICE] = g_model_ice;
- g_block_models[TRAMPOLINE] = g_model_trampoline;
- g_block_models[SPEED_BOOST] = g_model_speed_boost;
- g_block_models[DEATH] = g_model_death;
- g_block_models[LOW_GRAVITY] = g_model_low_gravity;
- g_block_models[SLAP] = g_model_slap;
- g_block_models[HONEY] = g_model_honey;
- g_block_models[CT_BARRIER] = g_model_ct_barrier;
- g_block_models[T_BARRIER] = g_model_t_barrier;
- g_block_models[GLASS] = g_model_glass;
- g_block_models[NO_SLOW_DOWN_BHOP] = g_model_no_slow_down_bhop;
- g_block_models[DELAYED_BHOP] = g_model_delayed_bhop;
- g_block_models[INVINCIBILITY] = g_model_invincibility;
- g_block_models[STEALTH] = g_model_stealth;
- g_block_models[BOOTS_OF_SPEED] = g_model_boots_of_speed;
- g_block_models[WEAPON_BLOCK] = g_model_weapon_block;
- g_block_models[DUCK_BLOCK] = g_model_duck_block;
- g_block_models[XP] = g_model_xp_block;
- g_block_models[BLIND_TRAP] = g_model_blind_trap;
- g_block_models[SUPERMAN] = g_model_superman;
- g_block_models[MONEY] = g_model_money;
- g_block_models[BOUNCE_DEATH] = g_model_death;
- g_block_models[TELEPORT] = g_model_teleport;
- g_block_models[DESTINATION] = g_model_destination;
- g_block_models[ICE_BHOP] = g_model_ice_bhop;
- g_block_models[HE] = g_model_he;
- g_block_models[FLASH] = g_model_flash;
- g_block_models[SMOKE] = g_model_smoke;
- g_block_models[M4A1] = g_model_m4a1;
- g_block_models[M3] = g_model_m3;
- g_block_models[AWP] = g_model_awp;
- g_block_models[DEAGLE] = g_model_deagle;
- g_block_models[USP] = g_model_usp;
- g_block_models[GLOCK] = g_model_glock;
- g_block_models[AK47] = g_model_ak47;
- g_block_models[LIGHT] = g_model_light;
- g_block_models[QUAKE] = g_model_quake;
- g_block_models[MUZA] = g_model_muza;
- g_block_models[VIP] = g_model_vip;
- g_block_models[MP5] = g_model_mp5;
- SetupBlockRendering(GLASS, TRANSWHITE, 255, 255, 255, 100);
- SetupBlockRendering(INVINCIBILITY, GLOWSHELL, 0, 150, 255, 16);
- SetupBlockRendering(STEALTH, GLOWSHELL, 255, 255, 255, 16);
- SetupBlockRendering(XP, GLOWSHELL, 255, 150, 0, 16);
- SetupBlockRendering(WEAPON_BLOCK, NORMAL, 255, 0, 0, 16);
- SetupBlockRendering(XP, NORMAL, 255, 150, 0, 16);
- SetupBlockRendering(HE, GLOWSHELL, 0, 0, 255, 16);
- SetupBlockRendering(FLASH, GLOWSHELL, 0, 0, 255, 16);
- SetupBlockRendering(SMOKE, GLOWSHELL, 0, 0, 255, 16);
- SetupBlockRendering(M4A1, NORMAL, 255, 0, 0, 16);
- SetupBlockRendering(M3, NORMAL, 255, 0, 0, 16);
- SetupBlockRendering(AWP, NORMAL, 255, 0, 0, 16);
- SetupBlockRendering(DEAGLE, NORMAL, 255, 0, 0, 16);
- SetupBlockRendering(USP, NORMAL, 255, 0, 0, 16);
- SetupBlockRendering(GLOCK, NORMAL, 255, 0, 0, 16);
- SetupBlockRendering(AK47, NORMAL, 255, 0, 0, 16);
- new block_model_small[256];
- new block_model_large[256];
- new block_model_pole[256];
- for ( new i = 0; i < TOTAL_BLOCKS; ++i )
- {
- SetBlockModelNameSmall(block_model_small, g_block_models[i], 256);
- SetBlockModelNameLarge(block_model_large, g_block_models[i], 256);
- SetBlockModelNamePole(block_model_pole, g_block_models[i], 256);
- precache_model(g_block_models[i]);
- precache_model(block_model_small);
- precache_model(block_model_large);
- precache_model(block_model_pole);
- }
- precache_model(g_sprite_teleport_start);
- precache_model(g_sprite_teleport_destination);
- precache_sound(g_sound_invincibility);
- precache_sound(g_sound_stealth);
- precache_sound(g_sound_boots_of_speed);
- precache_sound(g_sound_supermario);
- precache_sound(g_sound_xpblock);
- precache_sound(g_sound_money);
- precache_sound(g_sound_teleport);
- precache_sound(g_sound_teleports);
- precache_sound(g_sound_death);
- precache_sound(g_sound_death_bounce);
- precache_sound(g_sound_trampoline);
- precache_sound(gsz1); precache_sound(gsz2); precache_sound(gsz3);
- precache_sound(gsz4); precache_sound(gsz5); precache_sound(gsz6);
- precache_sound(gsz7); precache_sound(gsz8); precache_sound(gsz9);
- precache_sound(gsz10); precache_sound(gsz11);
- }
- -----------------------------
- 5. Rendering — SetBlockRendering
- --------------------------------
- enum
- {
- NORMAL,
- GLOWSHELL,
- TRANSCOLOR,
- TRANSALPHA,
- TRANSWHITE
- };
- SetupBlockRendering(block_type, render_type, red, green, blue, alpha)
- {
- g_render[block_type] = render_type;
- g_red[block_type] = red;
- g_green[block_type] = green;
- g_blue[block_type] = blue;
- g_alpha[block_type] = alpha;
- }
- SetBlockRendering(iEntity, type, red, green, blue, alpha)
- {
- if ( !IsBlock(iEntity) ) return PLUGIN_HANDLED;
- switch ( type )
- {
- case GLOWSHELL: set_rendering(iEntity, kRenderFxGlowShell, red, green, blue, kRenderNormal, alpha);
- case TRANSCOLOR: set_rendering(iEntity, kRenderFxGlowShell, red, green, blue, kRenderTransColor, alpha);
- case TRANSALPHA: set_rendering(iEntity, kRenderFxNone, red, green, blue, kRenderTransColor, alpha);
- case TRANSWHITE: set_rendering(iEntity, kRenderFxNone, red, green, blue, kRenderTransAdd, alpha);
- default: set_rendering(iEntity, kRenderFxNone, red, green, blue, kRenderNormal, alpha);
- }
- return PLUGIN_HANDLED;
- }

Pobierz program!
