CSHOP Extra Item: Zoom Weapons

В този раздел се качват всякакви съб-плъгини, тоест добавки за такива плъгини, които имат собствено API и позволяват изработката на съб-плъгини работещи с тях.
Аватар
Marinovv
Извън линия
Потребител
Потребител
Мнения: 511
Регистриран на: 19 Сеп 2017, 10:01
Местоположение: България
Се отблагодари: 530 пъти
Получена благодарност: 13 пъти
Обратна връзка:

CSHOP Extra Item: Zoom Weapons

Мнение от Marinovv » 25 Сеп 2018, 13:00

CSHOP Extra Item: Zoom Weapons

Автор
  • OciXCrom

Описание
  • Закупувайки този Item, вие получавате двоен Zoom на всички оръжия. Активирането и дезактивирането на приближението става най - често с десен бутон на мишката.
Настройки
  • Настройките автоматично се генерират във файла configs/CustomShopItems.ini при рестарт на сървъра, а същите може да се променят и по време на игра, чрез командата cshop_edit.

Линк за теглене
Изображение


При бъдещи доработки към този Item, пуснете заявка в раздел Заявки за плъгини.
Сървъри използващи плъгина: тук
► Покажи скъсения текст
New version:
  • Активиране на Zoom се осъществява с бутон E
cshop_zoom.sma
(1.56 KiB) Свалено 84 пъти
cshop_zoom.sma
(1.56 KiB) Свалено 84 пъти
Последно промяна от Marinovv на 13 Юни 2021, 12:52, променено общо 8 пъти.

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

CSHOP Extra Item: Zoom Weapons

Мнение от iv69 » 15 Апр 2019, 20:38

Искам да попитам - възможно ли е да се добави опция в съб-плъгина и за "4x zoom" ? И който иска да си го настройва за 4, 3 , 2 или 1-кратен зоом за оръжията му... ?
За да е по-ясно, ето за какво говоря(това го видях в този код):

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <amxmisc>

#define is_valid_player(%1) (1 <= %1 <= 32)
#define PLUGIN "Golden Deagle"
#define VERSION "1.0"
#define AUTHOR "alicx"


new DEAGLE_V_MODEL[64] = "models/v_golden_deagle.mdl"
new DEAGLE_P_MODEL[64] = "models/p_golden_deagle.mdl"

/* Pcvars */
new cvar_dmgmultiplier, cvar_goldbullets,  cvar_custommodel, cvar_cost, cvar_bullets, cvar_keepdeagle, cvar_zoom_type;

new bool:g_HasDeagle[33]

new g_hasZoom[ 33 ]
new g_ZoomDist[ 33 ] = 0
new bullets[ 33 ]

// Sprite
new m_spriteTexture

const Wep_deagle = ((1<<CSW_DEAGLE))


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	// The Cvars //
	cvar_dmgmultiplier = register_cvar("goldendeagle_dmg_multiplier", "5")
	cvar_custommodel = register_cvar("goldendeagle_custom_model", "1")
	cvar_goldbullets = register_cvar("goldendeagle_gold_bullets", "1")
	cvar_cost = register_cvar("goldendeagle_cost", "4000")
	cvar_bullets = register_cvar("goldendeagle_bullets", "200")
	cvar_keepdeagle = register_cvar("goldendeagle_keep", "1")
	cvar_zoom_type = register_cvar("goldendeagle_zoom_type", "4")

	
	// Register The Buy Cmd
	register_clcmd("say /goldendeagle", "CmdBuyDeagle")
	register_clcmd("say_team /goldendeagle", "CmdBuyDeagle")
	register_concmd("amx_goldendeagle", "CmdGiveDeagle", ADMIN_BAN, "<name>")

	//Death Msg
	register_event("DeathMsg", "Death", "a")
	
	// Weapon Pick Up
	register_event("WeapPickup","checkModel","b","1=19")
	
	// Current Weapon Event
	register_event("CurWeapon", "make_tracer", "be", "1=1", "3>0")
	
	// Ham TakeDamage
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	register_forward( FM_CmdStart, "fw_CmdStart")
	register_forward(FM_CmdStart, "fwCmdStart")
	RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
}

public plugin_precache()
{
	precache_model(DEAGLE_V_MODEL)
	precache_model(DEAGLE_P_MODEL)
	m_spriteTexture = precache_model("sprites/dot.spr")
	precache_sound("weapons/zoom.wav")
}

public client_connect(id)
{
	g_HasDeagle[id] = false
}

public client_disconnect(id)
{
	g_HasDeagle[id] = false
}

public Death()
{
	g_HasDeagle[read_data(2)] = false
}

public fwHamPlayerSpawnPost(id)
{
    if( !is_user_alive( id ) )
        return;
        
    if( get_pcvar_num( cvar_keepdeagle ) )
    {
        if( user_has_weapon( id, CSW_DEAGLE ) )
        {
            g_HasDeagle[id] = true
        }
        else {
            g_HasDeagle[id] = false;
        }
    }
    else {
        g_HasDeagle[id] = false;
    }
}

public checkModel(id)
{
	if ( !g_HasDeagle[id] )
		return PLUGIN_HANDLED
	
	new szWeapID = read_data(2)
	
	if ( szWeapID == CSW_DEAGLE && g_HasDeagle[id] == true && get_pcvar_num(cvar_custommodel) )
	{
		set_pev(id, pev_viewmodel2, DEAGLE_V_MODEL)
		set_pev(id, pev_weaponmodel2, DEAGLE_P_MODEL)
	}
	return PLUGIN_HANDLED
}


public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
	if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CSW_DEAGLE && g_HasDeagle[attacker] )
	{
		SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier ) )
	}
}

public fw_CmdStart( id, uc_handle, seed )
{
    if( !is_user_alive( id ) ) 
        return PLUGIN_HANDLED
    
    if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
    {
        new szClip, szAmmo
        new szWeapID = get_user_weapon( id, szClip, szAmmo )
        
        if( szWeapID == CSW_DEAGLE && g_HasDeagle[id] && !g_hasZoom[ id ] )
        {
            golden_deagle_zoom( id, get_pcvar_num( cvar_zoom_type ) )
        }
        else if ( szWeapID == CSW_DEAGLE && g_HasDeagle[id] && g_hasZoom[id])
        {
            g_hasZoom[ id ] = false
            cs_set_user_zoom( id, CS_RESET_ZOOM, 1 )
        }      
    }
    return PLUGIN_HANDLED
}

public make_tracer(id)
{
	if (get_pcvar_num(cvar_goldbullets))
	{
		new clip,ammo
		new wpnid = get_user_weapon(id,clip,ammo)
		new pteam[16]
		
		get_user_team(id, pteam, 15)
		
		if ((bullets[id] > clip) && (wpnid == CSW_DEAGLE) && g_HasDeagle[id]) 
		{
			new vec1[3], vec2[3]
			get_user_origin(id, vec1, 1) // origin; your camera point.
			get_user_origin(id, vec2, 4) // termina; where your bullet goes (4 is cs-only)
			
			
			//BEAMENTPOINTS
			message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
			write_byte (0)     //TE_BEAMENTPOINTS 0
			write_coord(vec1[0])
			write_coord(vec1[1])
			write_coord(vec1[2])
			write_coord(vec2[0])
			write_coord(vec2[1])
			write_coord(vec2[2])
			write_short( m_spriteTexture )
			write_byte(1) // framestart
			write_byte(5) // framerate
			write_byte(2) // life
			write_byte(10) // width
			write_byte(0) // noise
			write_byte( 255 )     // r, g, b
			write_byte( 215 )       // r, g, b
			write_byte( 0 )       // r, g, b
			write_byte(200) // brightness
			write_byte(150) // speed
			message_end()
		}
		
		bullets[id] = clip
	}
	
}

public CmdBuyDeagle(id)
{
	if ( !is_user_alive(id) )
	{
		client_print(id,print_chat, "[AMXX] To buy golden Deagle You need to be alive!")
		return PLUGIN_HANDLED
	}
	
	new money = cs_get_user_money(id)
	
	if (money >= get_pcvar_num(cvar_cost) && get_pcvar_num(cvar_bullets)) 
	{
		cs_set_user_money(id, money - get_pcvar_num(cvar_cost))
		give_item(id, "weapon_deagle")
		give_item(id, "ammo_50ae")
		cs_set_user_bpammo(id, CSW_DEAGLE, get_pcvar_num(cvar_bullets))
		g_HasDeagle[id] = true
	}
	
	else
	{
		client_print(id, print_chat, "[AMXX] You dont hav enough money to buy Golden Deagle. Cost $%d ", get_pcvar_num(cvar_cost))
	}
	return PLUGIN_HANDLED
}

public CmdGiveDeagle(id,level,cid)
{
	if (!cmd_access(id,level,cid,2))
		return PLUGIN_HANDLED;
	new arg[32];
	read_argv(1,arg,31);
	
	new player = cmd_target(id,arg,7);
	if (!player) 
		return PLUGIN_HANDLED;
	
	new name[32];
	get_user_name(player,name,31);
	
	give_item(player, "weapon_deagle")
	g_HasDeagle[player] = true
	
	return PLUGIN_HANDLED
}

stock drop_prim(id) 
{
	new weapons[32], num
	get_user_weapons(id, weapons, num)
	for (new i = 0; i < num; i++) {
		if (Wep_deagle & (1<<weapons[i])) 
		{
			static wname[32]
			get_weaponname(weapons[i], wname, sizeof wname - 1)
			engclient_cmd(id, "drop", wname)
		}
	}
}

stock golden_deagle_zoom( id, type )
{
    g_hasZoom[ id ] = true;
    switch( type )
    {
        case 0: cs_set_user_zoom( id, CS_RESET_ZOOM, 1 )
        case 1: cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 1 )
        case 2:
        {
            cs_set_user_zoom( id, CS_SET_FIRST_ZOOM, 1 )
            emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
        }
        case 3:
        {
            cs_set_user_zoom( id, CS_SET_SECOND_ZOOM, 1 )
            emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
        }
        case 4:
        {
            g_ZoomDist[ id ]++
            g_hasZoom[ id ] = false;
            switch( g_ZoomDist[ id ] )
            {
                case 1: cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 1 )
                case 2: 
                {
                    cs_set_user_zoom( id, CS_SET_FIRST_ZOOM, 1 )
                    emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
                }
                case 3: 
                {
                    cs_set_user_zoom( id, CS_SET_SECOND_ZOOM, 1 )
                    emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
                }
                case 4: 
                {
                    g_ZoomDist[ id ] = 0;
                    cs_set_user_zoom( id, CS_RESET_ZOOM, 1 )
                }
            }
        }
    }
}
Предполагам , че идеята не е никак лоша, и ще стане доста интересно с такава промяна за всяко оръжие ? А ако пък ще можем да си променяме колко кратен zoom , да е за всяко едно оръжие, ще е "върховно"... , но това предполагам ще е може би доста трудно и дори невъзможно!

Аватар
Halu
Извън линия
Потребител
Потребител
Мнения: 50
Регистриран на: 06 Апр 2019, 17:11
Се отблагодари: 4 пъти
Получена благодарност: 8 пъти

CSHOP Extra Item: Zoom Weapons

Мнение от Halu » 07 Май 2019, 00:56

неактивен линк за теглене.....

Аватар
Marinovv
Извън линия
Потребител
Потребител
Мнения: 511
Регистриран на: 19 Сеп 2017, 10:01
Местоположение: България
Се отблагодари: 530 пъти
Получена благодарност: 13 пъти
Обратна връзка:

CSHOP Extra Item: Zoom Weapons

Мнение от Marinovv » 11 Май 2019, 18:52

Halu написа: 07 Май 2019, 00:56 неактивен линк за теглене.....

Прощавай, фиксирано е! :spam:
Иван Маринов,

лицензиран оператор и пилот на професионални дронове клас C1 за всички държави в EU.

DJI Mavic 3 Classic | DJI Mavic 3 PRO - погледни света от различна перспектива.

Последвайте ме във Facebook

Аватар
Marinovv
Извън линия
Потребител
Потребител
Мнения: 511
Регистриран на: 19 Сеп 2017, 10:01
Местоположение: България
Се отблагодари: 530 пъти
Получена благодарност: 13 пъти
Обратна връзка:

CSHOP Extra Item: Zoom Weapons

Мнение от Marinovv » 02 Авг 2019, 11:00

iv69 написа: 15 Апр 2019, 20:38 Искам да попитам - възможно ли е да се добави опция в съб-плъгина и за "4x zoom" ? И който иска да си го настройва за 4, 3 , 2 или 1-кратен зоом за оръжията му... ?
За да е по-ясно, ето за какво говоря(това го видях в този код):

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <amxmisc>

#define is_valid_player(%1) (1 <= %1 <= 32)
#define PLUGIN "Golden Deagle"
#define VERSION "1.0"
#define AUTHOR "alicx"


new DEAGLE_V_MODEL[64] = "models/v_golden_deagle.mdl"
new DEAGLE_P_MODEL[64] = "models/p_golden_deagle.mdl"

/* Pcvars */
new cvar_dmgmultiplier, cvar_goldbullets,  cvar_custommodel, cvar_cost, cvar_bullets, cvar_keepdeagle, cvar_zoom_type;

new bool:g_HasDeagle[33]

new g_hasZoom[ 33 ]
new g_ZoomDist[ 33 ] = 0
new bullets[ 33 ]

// Sprite
new m_spriteTexture

const Wep_deagle = ((1<<CSW_DEAGLE))


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	// The Cvars //
	cvar_dmgmultiplier = register_cvar("goldendeagle_dmg_multiplier", "5")
	cvar_custommodel = register_cvar("goldendeagle_custom_model", "1")
	cvar_goldbullets = register_cvar("goldendeagle_gold_bullets", "1")
	cvar_cost = register_cvar("goldendeagle_cost", "4000")
	cvar_bullets = register_cvar("goldendeagle_bullets", "200")
	cvar_keepdeagle = register_cvar("goldendeagle_keep", "1")
	cvar_zoom_type = register_cvar("goldendeagle_zoom_type", "4")

	
	// Register The Buy Cmd
	register_clcmd("say /goldendeagle", "CmdBuyDeagle")
	register_clcmd("say_team /goldendeagle", "CmdBuyDeagle")
	register_concmd("amx_goldendeagle", "CmdGiveDeagle", ADMIN_BAN, "<name>")

	//Death Msg
	register_event("DeathMsg", "Death", "a")
	
	// Weapon Pick Up
	register_event("WeapPickup","checkModel","b","1=19")
	
	// Current Weapon Event
	register_event("CurWeapon", "make_tracer", "be", "1=1", "3>0")
	
	// Ham TakeDamage
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	register_forward( FM_CmdStart, "fw_CmdStart")
	register_forward(FM_CmdStart, "fwCmdStart")
	RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
}

public plugin_precache()
{
	precache_model(DEAGLE_V_MODEL)
	precache_model(DEAGLE_P_MODEL)
	m_spriteTexture = precache_model("sprites/dot.spr")
	precache_sound("weapons/zoom.wav")
}

public client_connect(id)
{
	g_HasDeagle[id] = false
}

public client_disconnect(id)
{
	g_HasDeagle[id] = false
}

public Death()
{
	g_HasDeagle[read_data(2)] = false
}

public fwHamPlayerSpawnPost(id)
{
    if( !is_user_alive( id ) )
        return;
        
    if( get_pcvar_num( cvar_keepdeagle ) )
    {
        if( user_has_weapon( id, CSW_DEAGLE ) )
        {
            g_HasDeagle[id] = true
        }
        else {
            g_HasDeagle[id] = false;
        }
    }
    else {
        g_HasDeagle[id] = false;
    }
}

public checkModel(id)
{
	if ( !g_HasDeagle[id] )
		return PLUGIN_HANDLED
	
	new szWeapID = read_data(2)
	
	if ( szWeapID == CSW_DEAGLE && g_HasDeagle[id] == true && get_pcvar_num(cvar_custommodel) )
	{
		set_pev(id, pev_viewmodel2, DEAGLE_V_MODEL)
		set_pev(id, pev_weaponmodel2, DEAGLE_P_MODEL)
	}
	return PLUGIN_HANDLED
}


public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
	if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CSW_DEAGLE && g_HasDeagle[attacker] )
	{
		SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier ) )
	}
}

public fw_CmdStart( id, uc_handle, seed )
{
    if( !is_user_alive( id ) ) 
        return PLUGIN_HANDLED
    
    if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
    {
        new szClip, szAmmo
        new szWeapID = get_user_weapon( id, szClip, szAmmo )
        
        if( szWeapID == CSW_DEAGLE && g_HasDeagle[id] && !g_hasZoom[ id ] )
        {
            golden_deagle_zoom( id, get_pcvar_num( cvar_zoom_type ) )
        }
        else if ( szWeapID == CSW_DEAGLE && g_HasDeagle[id] && g_hasZoom[id])
        {
            g_hasZoom[ id ] = false
            cs_set_user_zoom( id, CS_RESET_ZOOM, 1 )
        }      
    }
    return PLUGIN_HANDLED
}

public make_tracer(id)
{
	if (get_pcvar_num(cvar_goldbullets))
	{
		new clip,ammo
		new wpnid = get_user_weapon(id,clip,ammo)
		new pteam[16]
		
		get_user_team(id, pteam, 15)
		
		if ((bullets[id] > clip) && (wpnid == CSW_DEAGLE) && g_HasDeagle[id]) 
		{
			new vec1[3], vec2[3]
			get_user_origin(id, vec1, 1) // origin; your camera point.
			get_user_origin(id, vec2, 4) // termina; where your bullet goes (4 is cs-only)
			
			
			//BEAMENTPOINTS
			message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
			write_byte (0)     //TE_BEAMENTPOINTS 0
			write_coord(vec1[0])
			write_coord(vec1[1])
			write_coord(vec1[2])
			write_coord(vec2[0])
			write_coord(vec2[1])
			write_coord(vec2[2])
			write_short( m_spriteTexture )
			write_byte(1) // framestart
			write_byte(5) // framerate
			write_byte(2) // life
			write_byte(10) // width
			write_byte(0) // noise
			write_byte( 255 )     // r, g, b
			write_byte( 215 )       // r, g, b
			write_byte( 0 )       // r, g, b
			write_byte(200) // brightness
			write_byte(150) // speed
			message_end()
		}
		
		bullets[id] = clip
	}
	
}

public CmdBuyDeagle(id)
{
	if ( !is_user_alive(id) )
	{
		client_print(id,print_chat, "[AMXX] To buy golden Deagle You need to be alive!")
		return PLUGIN_HANDLED
	}
	
	new money = cs_get_user_money(id)
	
	if (money >= get_pcvar_num(cvar_cost) && get_pcvar_num(cvar_bullets)) 
	{
		cs_set_user_money(id, money - get_pcvar_num(cvar_cost))
		give_item(id, "weapon_deagle")
		give_item(id, "ammo_50ae")
		cs_set_user_bpammo(id, CSW_DEAGLE, get_pcvar_num(cvar_bullets))
		g_HasDeagle[id] = true
	}
	
	else
	{
		client_print(id, print_chat, "[AMXX] You dont hav enough money to buy Golden Deagle. Cost $%d ", get_pcvar_num(cvar_cost))
	}
	return PLUGIN_HANDLED
}

public CmdGiveDeagle(id,level,cid)
{
	if (!cmd_access(id,level,cid,2))
		return PLUGIN_HANDLED;
	new arg[32];
	read_argv(1,arg,31);
	
	new player = cmd_target(id,arg,7);
	if (!player) 
		return PLUGIN_HANDLED;
	
	new name[32];
	get_user_name(player,name,31);
	
	give_item(player, "weapon_deagle")
	g_HasDeagle[player] = true
	
	return PLUGIN_HANDLED
}

stock drop_prim(id) 
{
	new weapons[32], num
	get_user_weapons(id, weapons, num)
	for (new i = 0; i < num; i++) {
		if (Wep_deagle & (1<<weapons[i])) 
		{
			static wname[32]
			get_weaponname(weapons[i], wname, sizeof wname - 1)
			engclient_cmd(id, "drop", wname)
		}
	}
}

stock golden_deagle_zoom( id, type )
{
    g_hasZoom[ id ] = true;
    switch( type )
    {
        case 0: cs_set_user_zoom( id, CS_RESET_ZOOM, 1 )
        case 1: cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 1 )
        case 2:
        {
            cs_set_user_zoom( id, CS_SET_FIRST_ZOOM, 1 )
            emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
        }
        case 3:
        {
            cs_set_user_zoom( id, CS_SET_SECOND_ZOOM, 1 )
            emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
        }
        case 4:
        {
            g_ZoomDist[ id ]++
            g_hasZoom[ id ] = false;
            switch( g_ZoomDist[ id ] )
            {
                case 1: cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 1 )
                case 2: 
                {
                    cs_set_user_zoom( id, CS_SET_FIRST_ZOOM, 1 )
                    emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
                }
                case 3: 
                {
                    cs_set_user_zoom( id, CS_SET_SECOND_ZOOM, 1 )
                    emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
                }
                case 4: 
                {
                    g_ZoomDist[ id ] = 0;
                    cs_set_user_zoom( id, CS_RESET_ZOOM, 1 )
                }
            }
        }
    }
}
Предполагам , че идеята не е никак лоша, и ще стане доста интересно с такава промяна за всяко оръжие ? А ако пък ще можем да си променяме колко кратен zoom , да е за всяко едно оръжие, ще е "върховно"... , но това предполагам ще е може би доста трудно и дори невъзможно!
Не може да нагласиш различни видове зуум. Той е само един стандартен зуум. Твоя плъгин освен това е за Deagle, а не за всички оръжия. Няма смисъл да се наглася за всички оръжия, тъй като аз съм ти предоставил вече такъв плъгин. :P
Иван Маринов,

лицензиран оператор и пилот на професионални дронове клас C1 за всички държави в EU.

DJI Mavic 3 Classic | DJI Mavic 3 PRO - погледни света от различна перспектива.

Последвайте ме във Facebook

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Съб-плъгини”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта