[TUT] Смяна моделите на оръжията

В този раздел можете да намерите полезни кодове и уроци свързани с PAWN скриптинга.
Аватар
JustInCase
Извън линия
Потребител
Потребител
Мнения: 582
Регистриран на: 14 Окт 2016, 23:31
Се отблагодари: 4 пъти
Получена благодарност: 15 пъти

[TUT] Смяна моделите на оръжията

Мнение от JustInCase » 28 Дек 2016, 16:04

Съвет: Ако този пример е повече от 80% от целия ви код, ви препоръчвам да не го Release-вате като плъгин.

Това е пример за смяна на оръжейните модели в Counter-Strike. С този пример ще можете да смените всички 3 модели, който биват :

  • view models - Най-често пред имената си имат "v_" (Това е модела, който виждате когато играете)
  • player model Най-често пред имената си имат "p_" (Това е модела, който виждате в ръцете на някой друг играч)
  • world models Най-често пред имената си имат "w_" (Това е модела, който се вижда на земята).
В темата са написани 2 начина. Единият използва Engine и Fakemeta за хората, които не са толкова на "ТИ" с Fakemeta. Другият е само с
    Fakemeta за по напреднали в кодирането.

    И така нека започваме :

    Engine and Fakemeta

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

    #include <amxmodx> 
    #include <engine> 
    #include <fakemeta> 
    
    new VIEW_MODEL[]        = "models/v_<model name>.mdl" 
    new PLAYER_MODEL[]        = "models/p_<model name>.mdl" 
    new WORLD_MODEL[]    = "models/w_<model name>.mdl"
    
    new OLDWORLD_MODEL[]    = "models/w_<model name>.mdl" //Това е world модела който искате замените (стария модел)
    
    new PLUGIN_NAME[]    = "Custom Weapon Model" 
    new PLUGIN_AUTHOR[]         = "Cheap_Suit" 
    new PLUGIN_VERSION[]        = "1.0" 
    
    public plugin_init() 
    {
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)     
        register_event("CurWeapon", "Event_CurWeapon", "be","1=1")
        register_forward(FM_SetModel, "fw_SetModel")
    } 
    
    public plugin_precache() 
    {    
        precache_model(VIEW_MODEL)     
        precache_model(PLAYER_MODEL) 
        precache_model(WORLD_MODEL)
    } 
    
    public Event_CurWeapon(id) 
    {     
        // Може да не работи с други модове като (war3ft и др.)
        new weaponID = read_data(2) 
        
        // Проверка ако оръжието не е AK позволяваме на плъгина да продължи
        if(weaponID != CSW_AK47)
            return PLUGIN_CONTINUE
        
        // С този ред слагаме VIEW модела (Този който виждаме в ръката си)
        entity_set_string(id, EV_SZ_viewmodel, VIEW_MODEL)  
        
        // С този ред слагаме PLAYER модела(Този който виждаме в ръцете на другите играчи)
        entity_set_string(id, EV_SZ_weaponmodel, PLAYER_MODEL)         
        
        return PLUGIN_CONTINUE 
    }
    
    public fw_SetModel(entity, model[])
    {
        // Проверяваме дали entity-то е валидно за да избегнем грешки
        if(!is_valid_ent(entity)) 
            return FMRES_IGNORED
        
        // Проверяваме дали е модела който искаме да сменим
        if(!equali(model, OLDWORLD_MODEL)) 
            return FMRES_IGNORED
        
        new className[33]
        entity_get_string(entity, EV_SZ_classname, className, 32)
        
        //            Изхвърлените оръжия                      Map оръжията                       c4 + гранати
        if(equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade"))
        {
            // Слага WORLD модела ( тези които са по земята )
            entity_set_model(entity, WORLD_MODEL)
            return FMRES_SUPERCEDE
        }
        return FMRES_IGNORED
    } 
    Само Fakemeta

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

    public Event_CurWeapon(id) 
    {     
        // Може да не работи с други модове като (war3ft и др.)
        new weaponID = read_data(2) 
        
        // Проверка ако оръжието не е AK позволяваме на плъгина да продължи
        if(weaponID != CSW_AK47)
            return PLUGIN_CONTINUE
        
        // С този ред слагаме VIEW модела (Този който виждаме в ръката си)
         set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, VIEW_MODEL))
        
        // С този ред слагаме PLAYER модела(Този който виждаме в ръцете на другите играчи)
        set_pev(id, pev_weaponmodel, engfunc(EngFunc_AllocString, PLAYER_MODEL))       
        
        return PLUGIN_CONTINUE 
    }
    
    public fw_SetModel(entity, model[])
    {
        // Проверяваме дали entity-то е валидно за да избегнем грешки
        if(!is_valid_ent(entity)) 
            return FMRES_IGNORED
        
        // Проверяваме дали е модела който искаме да сменим
        if(!equali(model, OLDWORLD_MODEL)) 
            return FMRES_IGNORED
        
        new className[33]
        pev(entity, pev_classname, className, 32)
        
        //            Изхвърлените оръжия                      Map оръжията                       c4 + гранати
        if(equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade"))
        {
            // Слага WORLD модела ( тези които са по земята )
            engfunc(EngFunc_SetModel, entity, WORLD_MODEL)
            return FMRES_SUPERCEDE
        }
        return FMRES_IGNORED
    } 
    ID на оръжията

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

    #define CSW_P228        1
    #define CSW_SCOUT        3
    #define CSW_HEGRENADE        4
    #define CSW_XM1014        5
    #define CSW_C4            6
    #define CSW_MAC10        7
    #define CSW_AUG            8
    #define CSW_SMOKEGRENADE    9
    #define CSW_ELITE        10
    #define CSW_FIVESEVEN        11
    #define CSW_UMP45        12
    #define CSW_SG550        13
    #define CSW_GALI        14
    #define CSW_GALIL        14
    #define CSW_FAMAS        15
    #define CSW_USP            16
    #define CSW_GLOCK18        17
    #define CSW_AWP            18
    #define CSW_MP5NAVY        19
    #define CSW_M249        20
    #define CSW_M3            21
    #define CSW_M4A1        22
    #define CSW_TMP            23
    #define CSW_G3SG1        24
    #define CSW_FLASHBANG        25
    #define CSW_DEAGLE        26
    #define CSW_SG552        27
    #define CSW_AK47        28
    #define CSW_KNIFE        29
    #define CSW_P90            30   

    Пример за смяна модела на ножа

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

    #include <amxmodx> 
    #include <engine> 
    #include <fakemeta> 
    
    new VIEW_MODEL[]    = "models/v_newKnife.mdl" 
    new PLAYER_MODEL[]    = "models/p_newKnife.mdl" 
    new WORLD_MODEL[]    = "models/w_knife.mdl"
    
    new OLDWORLD_MODEL[]    = "models/w_knife.mdl"
    
    new PLUGIN_NAME[]        = "Custom Knife Model" 
    new PLUGIN_AUTHOR[]    = "Cheap_Suit" 
    new PLUGIN_VERSION[]     = "1.0" 
    
    public plugin_init() 
    {
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)     
        register_event("CurWeapon", "Event_CurWeapon", "be","1=1")
        register_forward(FM_SetModel, "fw_SetModel")
    } 
    
    public plugin_precache() 
    {    
        precache_model(VIEW_MODEL)     
        precache_model(PLAYER_MODEL) 
        precache_model(WORLD_MODEL)
    } 
    
    public Event_CurWeapon(id) 
    {     
        new weaponID = read_data(2) 
    
        if(weaponID != CSW_KNIFE)
            return PLUGIN_CONTINUE
    
        set_pev(id, pev_viewmodel2, VIEW_MODEL)
        set_pev(id, pev_weaponmodel2, PLAYER_MODEL)
        
        return PLUGIN_CONTINUE 
    }
    
    public fw_SetModel(entity, model[])
    {
        if(!is_valid_ent(entity)) 
            return FMRES_IGNORED
    
        if(!equali(model, OLDWORLD_MODEL)) 
            return FMRES_IGNORED
    
        new className[33]
        entity_get_string(entity, EV_SZ_classname, className, 32)
        
        if(equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade"))
        {
            engfunc(EngFunc_SetModel, entity, WORLD_MODEL)
            return FMRES_SUPERCEDE
        }
        return FMRES_IGNORED
    } 

    Урокът е взет от ТУК


    Преведен е от мен : JustInCase


    И ЗАБРАНЯВАМ КОПИРАНЕТО НА ПРЕВОДА ПО ДРУГИ САЙТОВЕ И ФОРУМИ !!!

    :bg:
    Последно промяна от JustInCase на 06 Яну 2017, 13:14, променено общо 1 път.
    MANSION - HNS : 45.144.155.99:27026
    ONLINE

    Аватар
    Unbr3akable
    Извън линия
    Потребител
    Потребител
    Мнения: 178
    Регистриран на: 21 Дек 2016, 20:50
    Получена благодарност: 6 пъти

    Re: Смяна моделите на оръжията

    Мнение от Unbr3akable » 28 Дек 2016, 20:11

    Страхотен урок! Тествах няколко модела да видя дали ще работи и всичко е ОК!
    Съветвам те да направиш или вземеш да преведеш урок как се сменят звуците на оръжията.

    Аватар
    OciXCrom
    Извън линия
    Администратор
    Администратор
    Мнения: 7206
    Регистриран на: 06 Окт 2016, 19:20
    Местоположение: /resetscore
    Се отблагодари: 117 пъти
    Получена благодарност: 1295 пъти
    Обратна връзка:

    Re: Смяна моделите на оръжията

    Мнение от OciXCrom » 28 Дек 2016, 20:22

    Звуците на оръжията не се сменят. Може единствено да се сложат други звуци върху старите и да се чуват едновременно.

    Аватар
    SmirnoffBG
    Извън линия
    Потребител
    Потребител
    Мнения: 267
    Регистриран на: 27 Ное 2016, 19:43
    Местоположение: nz
    Се отблагодари: 77 пъти
    Получена благодарност: 38 пъти
    Обратна връзка:

    [TUT] Смяна моделите на оръжията

    Мнение от SmirnoffBG » 22 Окт 2018, 12:28

    Искам само да допълня един бъг, които ми се получава и съответно неговото оправяне.
    В един плъгин ми се налага да заменя скиновете на всички оръжия, при което се получи странен бъг
    При метода:

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

    set_pev( id, pev_viewmodel2, Modelite[wid][0])
    Където в масива "Modelite" имам на всички оръжия по 3 модела 0 = Новия v_, 1= Новия p_, 2= пътя на базовият p_ модел на оръжието.
    Ползвам го в "Ham_Item_Deploy" и сървърът угасва със следната грешка:

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

    L 19/10/2018 - 20:05:03: (map "fy_pool_day") SV_ModelIndex: model |аDЊмLђфX ьX˜˜˜˜˜˜ not precached
    L 20/10/2018 - 15:33:11: (map "de_nuke32") SV_ModelIndex: model `И0|аDЊмLђфX ьX˜˜˜˜˜˜ not precached
    Най-странното, е че като го "debug"-на и данните са нормални точно преди "set_pev".
    Ето и начина по който се оправя(колкото и еднакво да изглежда изглежда):

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

    if(gHas_Golden[wid][id]) switch(wid)
    	{
    		case CSW_AK47:		set_pev( id, pev_viewmodel2, V_AK)
    		case CSW_AUG:		set_pev( id, pev_viewmodel2, V_AUG)
    		case CSW_AWP:		set_pev( id, pev_viewmodel2, V_AWP)
    		case CSW_DEAGLE:	set_pev( id, pev_viewmodel2, V_DEAGLE)
    		case CSW_ELITE:		set_pev( id, pev_viewmodel2, V_ELITE)
    		case CSW_FAMAS:		set_pev( id, pev_viewmodel2, V_FAMAS)
    		case CSW_FIVESEVEN:	set_pev( id, pev_viewmodel2, V_FIVESEVEN)
    		case CSW_G3SG1:		set_pev( id, pev_viewmodel2, V_G3SG1)
    		case CSW_GALIL:		set_pev( id, pev_viewmodel2, V_GALIL)
    		case CSW_GLOCK18:	set_pev( id, pev_viewmodel2, V_GLOCK)
    		case CSW_KNIFE:		set_pev( id, pev_viewmodel2, V_KNIFE)
    		case CSW_M249:		set_pev( id, pev_viewmodel2, V_M249)
    		case CSW_M3:		set_pev( id, pev_viewmodel2, V_M3)
    		case CSW_M4A1:		set_pev( id, pev_viewmodel2, V_M4)
    		case CSW_MAC10:		set_pev( id, pev_viewmodel2, V_MAC10)
    		case CSW_MP5NAVY:	set_pev( id, pev_viewmodel2, V_MP5)
    		case CSW_P228:		set_pev( id, pev_viewmodel2, V_P228)
    		case CSW_P90:		set_pev( id, pev_viewmodel2, V_P90)
    		case CSW_SCOUT:		set_pev( id, pev_viewmodel2, V_SCOUT)
    		case CSW_SG550:		set_pev( id, pev_viewmodel2, V_SG550)
    		case CSW_SG552:		set_pev( id, pev_viewmodel2, V_SG552)
    		case CSW_TMP:		set_pev( id, pev_viewmodel2, V_TMP)
    		case CSW_UMP45:		set_pev( id, pev_viewmodel2, V_UMP45)
    		case CSW_USP:		set_pev( id, pev_viewmodel2, V_USP)
    		case CSW_XM1014:	set_pev( id, pev_viewmodel2, V_XM1014)
    	}
    Ето повече данни за всички по заинтересовани:

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

    #define V_AK		"models/golden/v_ak47.mdl"
    #define V_AUG		"models/golden/v_aug.mdl"
    #define V_AWP		"models/golden/v_awp.mdl"
    #define V_DEAGLE	"models/golden/v_deagle.mdl"
    #define V_ELITE		"models/golden/v_elite.mdl"
    #define V_FAMAS		"models/golden/v_famas.mdl"
    #define V_FIVESEVEN	"models/golden/v_fiveseven.mdl"
    #define V_G3SG1		"models/golden/v_g3sg1.mdl"
    #define V_GALIL		"models/golden/v_galil.mdl"
    #define V_GLOCK		"models/golden/v_glock18.mdl"
    #define V_KNIFE		"models/golden/v_knife.mdl"
    #define V_M3		"models/golden/v_m3.mdl"
    #define V_M4		"models/golden/v_m4a1.mdl"
    #define V_MAC10		"models/golden/v_mac10.mdl"
    #define V_MP5		"models/golden/v_mp5.mdl"
    #define V_M249		"models/golden/v_m249.mdl"
    #define V_P228		"models/golden/v_p228.mdl"
    #define V_P90		"models/golden/v_p90.mdl"
    #define V_SCOUT		"models/golden/v_scout.mdl"
    #define V_SG550		"models/golden/v_sg550.mdl"
    #define V_SG552		"models/golden/v_sg552.mdl"
    #define V_TMP		"models/golden/v_tmp.mdl"
    #define V_UMP45		"models/golden/v_ump45.mdl"
    #define V_USP		"models/golden/v_usp.mdl"
    #define V_XM1014	"models/golden/v_xm1014.mdl"
    
    #define P_AK		"models/golden/p_ak47.mdl"
    #define P_AUG		"models/golden/p_aug.mdl"
    #define P_AWP		"models/golden/p_awp.mdl"
    #define P_DEAGLE	"models/golden/p_deagle.mdl"
    #define P_ELITE		"models/golden/p_elite.mdl"
    #define P_FAMAS		"models/golden/p_famas.mdl"
    #define P_FIVESEVEN	"models/golden/p_fiveseven.mdl"
    #define P_G3SG1		"models/golden/p_g3sg1.mdl"
    #define P_GALIL		"models/golden/p_galil.mdl"
    #define P_GLOCK		"models/golden/p_glock18.mdl"
    #define P_KNIFE		"models/golden/p_knife.mdl"
    #define P_M3		"models/golden/p_m3.mdl"
    #define P_M4		"models/golden/p_m4a1.mdl"
    #define P_MAC10		"models/golden/p_mac10.mdl"
    #define P_MP5		"models/golden/p_mp5.mdl"
    #define P_M249		"models/golden/p_m249.mdl"
    #define P_P228		"models/golden/p_p228.mdl"
    #define P_P90		"models/golden/p_p90.mdl"
    #define P_SCOUT		"models/golden/p_scout.mdl"
    #define P_SG550		"models/golden/p_sg550.mdl"
    #define P_SG552		"models/golden/p_sg552.mdl"
    #define P_TMP		"models/golden/p_tmp.mdl"
    #define P_UMP45		"models/golden/p_ump45.mdl"
    #define P_USP		"models/golden/p_usp.mdl"
    #define P_XM1014	"models/golden/p_xm1014.mdl"
    
    #define F_AK		"models/p_ak47.mdl"
    #define F_AUG		"models/p_aug.mdl"
    #define F_AWP		"models/p_awp.mdl"
    #define F_DEAGLE	"models/p_deagle.mdl"
    #define F_ELITE		"models/p_elite.mdl"
    #define F_FAMAS		"models/p_famas.mdl"
    #define F_FIVESEVEN	"models/p_fiveseven.mdl"
    #define F_G3SG1		"models/p_g3sg1.mdl"
    #define F_GALIL		"models/p_galil.mdl"
    #define F_GLOCK		"models/p_glock18.mdl"
    #define F_KNIFE		"models/p_knife.mdl"
    #define F_M3		"models/p_m3.mdl"
    #define F_M4		"models/p_m4a1.mdl"
    #define F_MAC10		"models/p_mac10.mdl"
    #define F_MP5		"models/p_mp5.mdl"
    #define F_M249		"models/p_m249.mdl"
    #define F_P228		"models/p_p228.mdl"
    #define F_P90		"models/p_p90.mdl"
    #define F_SCOUT		"models/p_scout.mdl"
    #define F_SG550		"models/p_sg550.mdl"
    #define F_SG552		"models/p_sg552.mdl"
    #define F_TMP		"models/p_tmp.mdl"
    #define F_UMP45		"models/p_ump45.mdl"
    #define F_USP		"models/p_usp.mdl"
    #define F_XM1014	"models/p_xm1014.mdl"
    
    new Modelite[][][] = 
    {
    	{ 0, 		0 ,	0	},
    	{ V_P228, 	P_P228,	F_P228	},
    	{ 0, 		0,	0	},
    	{ V_SCOUT, 	P_SCOUT,F_SCOUT	},
    	{ 0, 		0,	0	},
    	{ V_XM1014, 	P_XM1014,F_XM1014},
    	{ 0, 		0,	0	},
    	{ V_MAC10, 	P_MAC10,F_MAC10	},
    	{ V_AUG,	P_AUG,	F_AUG	},
    	{ 0, 		0,	0	},
    	{ V_ELITE, 	P_ELITE,F_ELITE	},
    	{ V_FIVESEVEN,	P_FIVESEVEN,	F_FIVESEVEN},
    	{ V_UMP45, 	P_UMP45,F_UMP45	},
    	{ V_SG550, 	P_SG550,F_SG550	},
    	{ V_GALIL, 	P_GALIL,F_GALIL	},
    	{ V_FAMAS, 	P_FAMAS,F_FAMAS	},
    	{ V_USP, 	P_USP,	F_USP	},
    	{ V_GLOCK, 	P_GLOCK,F_GLOCK	},
    	{ V_AWP, 	P_AWP,	F_AWP	},
    	{ V_MP5, 	P_MP5,	F_MP5	},
    	{ V_M249, 	P_M249,	F_M249	},
    	{ V_M3, 	P_M3,	F_M3	},
    	{ V_M4, 	P_M4,	F_M4	},
    	{ V_TMP, 	P_TMP,	F_TMP	},
    	{ V_G3SG1, 	P_G3SG1,F_G3SG1	},
    	{ 0, 		0,	0	},
    	{ V_DEAGLE, 	P_DEAGLE,F_DEAGLE},
    	{ V_SG552, 	P_SG552,F_SG552	},
    	{ V_AK, 	P_AK,	F_AK	},
    	{ V_KNIFE, 	P_KNIFE,F_KNIFE	},
    	{ V_P90, 	P_P90,	F_P90	},
    	{ 0, 		0,	0	},
    	{ 0, 		0,	0	}
    }
    for(new i=0;i<sizeof Wep_Names; i++) 
    		RegisterHam(Ham_Item_Deploy, Wep_Names[i], "ModelChange", 1)
    new Wep_Names[][] = 
    {
    	"weapon_p228",
    	"weapon_scout",
    	"weapon_xm1014",
    	"weapon_mac10",
    	"weapon_aug",
    	"weapon_elite",
    	"weapon_fiveseven",
    	"weapon_ump45",
    	"weapon_sg550",
    	"weapon_galil",
    	"weapon_famas",
    	"weapon_usp",
    	"weapon_glock18",
    	"weapon_awp",
    	"weapon_mp5navy",
    	"weapon_m249",
    	"weapon_m3",
    	"weapon_m4a1",
    	"weapon_tmp",
    	"weapon_g3sg1",
    	"weapon_deagle",
    	"weapon_sg552",
    	"weapon_ak47",
    	"weapon_knife",
    	"weapon_p90",
    	"weapon_p228"
    }
    public ModelChange(ent)
    {
    	static id, wid
    	id = get_pdata_cbase(ent, 41, 4), wid = get_pdata_int(ent, 43, 4)
    	
    	wepid2[id] = ent
    	
    	if(!is_user_alive(id)) return
    	
    	if(gHas_Golden[wid][id]) switch(wid)
    	{
    		case CSW_AK47:		set_pev( id, pev_viewmodel2, V_AK)
    		case CSW_AUG:		set_pev( id, pev_viewmodel2, V_AUG)
    		case CSW_AWP:		set_pev( id, pev_viewmodel2, V_AWP)
    		case CSW_DEAGLE:	set_pev( id, pev_viewmodel2, V_DEAGLE)
    		case CSW_ELITE:		set_pev( id, pev_viewmodel2, V_ELITE)
    		case CSW_FAMAS:		set_pev( id, pev_viewmodel2, V_FAMAS)
    		case CSW_FIVESEVEN:	set_pev( id, pev_viewmodel2, V_FIVESEVEN)
    		case CSW_G3SG1:		set_pev( id, pev_viewmodel2, V_G3SG1)
    		case CSW_GALIL:		set_pev( id, pev_viewmodel2, V_GALIL)
    		case CSW_GLOCK18:	set_pev( id, pev_viewmodel2, V_GLOCK)
    		case CSW_KNIFE:		set_pev( id, pev_viewmodel2, V_KNIFE)
    		case CSW_M249:		set_pev( id, pev_viewmodel2, V_M249)
    		case CSW_M3:		set_pev( id, pev_viewmodel2, V_M3)
    		case CSW_M4A1:		set_pev( id, pev_viewmodel2, V_M4)
    		case CSW_MAC10:		set_pev( id, pev_viewmodel2, V_MAC10)
    		case CSW_MP5NAVY:	set_pev( id, pev_viewmodel2, V_MP5)
    		case CSW_P228:		set_pev( id, pev_viewmodel2, V_P228)
    		case CSW_P90:		set_pev( id, pev_viewmodel2, V_P90)
    		case CSW_SCOUT:		set_pev( id, pev_viewmodel2, V_SCOUT)
    		case CSW_SG550:		set_pev( id, pev_viewmodel2, V_SG550)
    		case CSW_SG552:		set_pev( id, pev_viewmodel2, V_SG552)
    		case CSW_TMP:		set_pev( id, pev_viewmodel2, V_TMP)
    		case CSW_UMP45:		set_pev( id, pev_viewmodel2, V_UMP45)
    		case CSW_USP:		set_pev( id, pev_viewmodel2, V_USP)
    		case CSW_XM1014:	set_pev( id, pev_viewmodel2, V_XM1014)
    	}
    }
    El-Super Respawn = 87.121.54.85:27016
    BG Trewa Respawn = 91.92.137.205:27015

    Аватар
    TheRedShoko
    Извън линия
    Модератор
    Модератор
    Мнения: 1016
    Регистриран на: 06 Окт 2016, 07:42
    Местоположение: Бургас
    Се отблагодари: 5 пъти
    Получена благодарност: 84 пъти

    [TUT] Смяна моделите на оръжията

    Мнение от TheRedShoko » 22 Окт 2018, 16:00

    По-заинтересован съм какъв е бил кода преди да го рефакторираш по този начин.

    Аватар
    SmirnoffBG
    Извън линия
    Потребител
    Потребител
    Мнения: 267
    Регистриран на: 27 Ное 2016, 19:43
    Местоположение: nz
    Се отблагодари: 77 пъти
    Получена благодарност: 38 пъти
    Обратна връзка:

    [TUT] Смяна моделите на оръжията

    Мнение от SmirnoffBG » 22 Окт 2018, 20:16

    Коя част от него.
    Ако те интересува Ham_Item_Deploy, to:

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

    public ModelChange(ent)
    {
    	static id, wid
    	id = get_pdata_cbase(ent, 41, 4), wid = get_pdata_int(ent, 43, 4)
    	
    	wepid2[id] = ent
    	
    	if(!is_user_alive(id)) return
    	
    	if(gHas_Golden[wid][id]) 
    		set_pev( id, pev_viewmodel2, Modelite[wid][0])
    }
    Там е малко диво :Д но както казах вади проблем само като е на масив, но
    ако те интересува самото зареждане на модела в сървъра(precaching-а):

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

    public plugin_precache()
    {
    	new gConfigFile[50], iFileP, FullCmd[50], the_cmd[50], Float:price;
    	new callbacka, var[50], chara = 6, wepid, ItemName[50];
    	
    	get_configsdir(gConfigFile, sizeof gConfigFile - 1);
    	add(gConfigFile, sizeof gConfigFile - 1, "/multi-golden.cfg");
    	
    	gold_menu = menu_create("\yGold \wMenu^n\yFor \rV\w.\rI\w.\rP\w. there is \r50% OFF!", "GoldMenuto")
    	gold_vip_menu = menu_create("\yGold \rV\w.\rI\w.\rP\w. Menu^n", "GoldMenuto")
    
    	callbacka = menu_makecallback("GoldCallBack")
    	
    	iFileP = fopen(gConfigFile, "rt")
    	while(!feof(iFileP))
    	{
    		fgets(iFileP, FullCmd, charsmax(FullCmd))
    		remove_quotes(FullCmd)
    		if( !FullCmd[0] || FullCmd[0] == ';' || FullCmd[0] == '/' && FullCmd[1] == '/'  || FullCmd[0] != 'g') 
    			continue;
    		
    		parse(FullCmd, the_cmd, charsmax(the_cmd), var, charsmax(var))
    		
    		if(var[0] == '0') continue
    		
    		switch(wepid = Get_WepID(the_cmd, chara))
    		{
    			case COSTA2: costa = str_to_num(var)
    			case VIPA: VIPflaga = read_flags(var)
    			case FREEGOLDA: FreeGold = read_flags(var)
    			//case WORLDA: World_Models_On = bool:str_to_num(var)
    			default: Precache_modela(wepid)
    		}
    		
    		if(wepid < 31)
    		if(AllowedWeps[wepid] == true)
    		{
    			if((price = str_to_float(var)) > 1.0)
    			{
    				PriceBalance[wepid] = price/(costa*1.0)
    			}
    			register_concmd(cmds[wepid], "Golden_Handle")
    			formatex(ItemName, 29, "\yGolden %s \r[%d cost]",cmds[wepid][10], floatround(costa*PriceBalance[wepid]))
    			menu_additem(gold_menu, ItemName, cmds[wepid], 0, callbacka)
    			formatex(ItemName, 29, "\yGolden %s \r[%d cost]",cmds[wepid][10], floatround(costa*PriceBalance[wepid]/2.0))
    			menu_additem(gold_vip_menu, ItemName, cmds[wepid], 0, callbacka)
    			
    		}
    	}
    	fclose(iFileP)
    	
    	beama = precache_model("sprites/dot.spr")
    }
    Get_WepID(the_cmd[50], chara)
    {
    	switch(the_cmd[chara])
    	{
    		case 'a': switch(the_cmd[chara+1])
    			{
    				case 'k':return CSW_AK47
    				case 'u':return CSW_AUG
    				case 'w':return CSW_AWP
    			}
    		case 'd':return CSW_DEAGLE
    		case 'e':return CSW_ELITE
    		case 'f':if(the_cmd[chara+1] == 'a') return CSW_FAMAS;else return CSW_FIVESEVEN
    		case 'g': switch(the_cmd[chara+1])
    			{
    				case '3':return CSW_G3SG1
    				case 'a':return CSW_GALIL
    				case 'l':return CSW_GLOCK18
    			}
    		case 'k': return CSW_KNIFE
    		case 'm':switch(the_cmd[chara+1])
    			{
    				case '2':return CSW_M249
    				case '3':return CSW_M3
    				case '4':return CSW_M4A1
    				case 'a':return CSW_MAC10
    				case 'p':return CSW_MP5NAVY
    			}
    		case 'p':if(the_cmd[chara+1] == '2') return CSW_P228;else return CSW_P90
    		case 's':switch(the_cmd[chara+4])
    			{
    				case 't':return CSW_SCOUT
    				case '0':return CSW_SG550
    				case '2':return CSW_SG552
    				case 's':return COSTA2
    				case 'p':return VIPA
    				case 'e':return FREEGOLDA
    				case 'a':return WORLDA
    			}
    		case 't': return CSW_TMP
    		case 'u':if(the_cmd[chara+1] == 'm') return CSW_UMP45;else return CSW_USP
    		case 'x':return CSW_XM1014
    		
    	}
    	return 0
    }
    Precache_modela(CSW)
    {
    	if(CSW > 30) return
    	if(file_exists(Modelite[CSW][0]))
    	{
    		precache_model(Modelite[CSW][0])
    		AllowedWeps[CSW] = true
    	} else 	AllowedWeps[CSW] = false
    }
    El-Super Respawn = 87.121.54.85:27016
    BG Trewa Respawn = 91.92.137.205:27015

    Аватар
    OciXCrom
    Извън линия
    Администратор
    Администратор
    Мнения: 7206
    Регистриран на: 06 Окт 2016, 19:20
    Местоположение: /resetscore
    Се отблагодари: 117 пъти
    Получена благодарност: 1295 пъти
    Обратна връзка:

    [TUT] Смяна моделите на оръжията

    Мнение от OciXCrom » 22 Окт 2018, 20:59

    По-скоро дай да видим как си декларирал въпросния масив Modelite и как добавяш стойностите в него.

    Аватар
    SmirnoffBG
    Извън линия
    Потребител
    Потребител
    Мнения: 267
    Регистриран на: 27 Ное 2016, 19:43
    Местоположение: nz
    Се отблагодари: 77 пъти
    Получена благодарност: 38 пъти
    Обратна връзка:

    [TUT] Смяна моделите на оръжията

    Мнение от SmirnoffBG » 22 Окт 2018, 23:51

    Дал съм го накрая на първият ми пост.
    И стойностите са зададени както се вижда и са константни(Знам че е "new", а не "const". Ще го оправя.).
    El-Super Respawn = 87.121.54.85:27016
    BG Trewa Respawn = 91.92.137.205:27015

    Аватар
    OciXCrom
    Извън линия
    Администратор
    Администратор
    Мнения: 7206
    Регистриран на: 06 Окт 2016, 19:20
    Местоположение: /resetscore
    Се отблагодари: 117 пъти
    Получена благодарност: 1295 пъти
    Обратна връзка:

    [TUT] Смяна моделите на оръжията

    Мнение от OciXCrom » 23 Окт 2018, 16:01

    new Modelite[][][] - задал си го като тридименсионален масив, а ти реално ползваш двудименсионален - [][].

    Аватар
    TheRedShoko
    Извън линия
    Модератор
    Модератор
    Мнения: 1016
    Регистриран на: 06 Окт 2016, 07:42
    Местоположение: Бургас
    Се отблагодари: 5 пъти
    Получена благодарност: 84 пъти

    [TUT] Смяна моделите на оръжията

    Мнение от TheRedShoko » 23 Окт 2018, 19:39

    Реално използва и 3те измерения. Имаш колекция от масиви, които съдържат стрингове. Тоест

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

    { // Първо измерение
    	{ // Второ измерение
    		"", // Трето измерение
    		""
    	},
    	{ // Второ измерение
    		0 // Трето измерение (0 = "\0")
    	}
    }
    
    Ако нямаше случаи, в които има стрингове, масива щеше да си е двумерен. Самият факт, че използваш стринг ти добавя още 1 измерение.

    Относно плъгина - съмнява ме, че тези нули са правели проблем. Да беше пробвал с "".

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

    Обратно към “Полезни кодове/уроци”

    Кой е на линия

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