Page 2 of 3

Re: modelių keitimas.

Posted: 2011 Apr 08 21:45
by xFrostas
http://amxmodx.lt/viewtopic.php?f=16&t=432

Čia panši tema, dėl tų VGUI, daugiau čia yra mano temų tokių, pasiieškok.

Re: modelių keitimas.

Posted: 2011 Apr 09 11:16
by aurimasko

Code: Select all

    register_forward(FM_SetModel,"fw_SetModel", 1)  public fw_SetModel(entity, const model[]) {    new weapon = entity     switch(weapon)    {        case CSW_M4A1: { entity_set_model(entity, _emke_models[2]); }        case CSW_AK47: { entity_set_model(entity, _ak_models[2]);  }        case CSW_AWP: { entity_set_model(entity, _awp_models[2]);  }        case CSW_SCOUT: { entity_set_model(entity, _scout_models[2]); }        case CSW_USP: { entity_set_model(entity, _usp_models[2]); }        case CSW_GLOCK18: { entity_set_model(entity, _glock_models[2]); }        //case CSW_MP5NAVY: { entity_set_model(entity, _mp5_models[2]); }        case CSW_UMP45: { entity_set_model(entity, _ump_models[2]);  }        case CSW_M249: { entity_set_model(entity, _mash_models[2]);  }        case CSW_DEAGLE: { entity_set_model(entity, _dgl_models[2]);  }        case CSW_HEGRENADE: {entity_set_model(entity, _he_models[2]);  }        case CSW_FAMAS: { entity_set_model(entity, _famas_models[2]); }    }}
ir nekeičia

Re: modelių keitimas.

Posted: 2011 Apr 09 12:29
by aaarnas
Žmogau. entity tai yra daikto ID adresas variklyje, o ne ginklo id sąraše :D

Vienas iš variantų kaip aptikti reikiamą modelį:

Code: Select all

public fw_SetModel(entity, const model[]) {    if(contain(model, "w_m4a1") {                entity_set_model(entity, _emke_models[2])    }}
Optimaliausia tai manau būtų su switch pagal char'us skenuoti, nes jei su containi visus atvejus tikrinsi, lavai daug cpu sunaudosi.

Code: Select all

    switch(model[5]) {                case 'm': {                        switch(model[6]) {                                case '4': {                                        // M4a1                }            }        }                case 'b': {                    }    }
Tik žinoma čia pavyzdys. Reikia susirašyti viską.

Re: modelių keitimas.

Posted: 2011 Apr 09 14:44
by hleV
Neveiktų šiuo atveju cs_get_weapon_id() ar get_pdata_int(entity, 43, 4)?

Re: modelių keitimas.

Posted: 2011 Apr 09 16:36
by aurimasko
pirmas variantas veikia, bet jeigu darau taip:

Code: Select all

 if(contain(model, "w_m4a1") )    {                entity_set_model(entity, _emke_models[2])     } 
Tada visiem ginklams padaro tokį modelį.

O antras variantas neveikia, darau taip:

Code: Select all

 switch(model[5])     {        case 'm':        {            switch(model[6])            {                case '4':                 {                    entity_set_model(entity, _emke_models[2])                }            }        }        case 'a':        {            switch(model[6])            {                case 'k':                 {                    entity_set_model(entity, _ak_models[2])                }                case 'w':                {                    entity_set_model(entity, _awp_models[2])                                    }            }        }} 

Re: modelių keitimas.

Posted: 2011 Apr 09 17:33
by aaarnas
contain(model, "w_m4a1") != turi būti.
Antrame variante tik pavyzdys.. Reikia char vietas atitaikyti model masyve.

Daryk taip:

Code: Select all

public fw_SetModel(entity, const model[]) {    if(!is_valid_ent(entity)) return FMRES_IGNORED;        switch(cs_get_weapon_id(entity))    {        case CSW_M4A1: { entity_set_model(entity, _emke_models[2]); }        case CSW_AK47: { entity_set_model(entity, _ak_models[2]);  }        case CSW_AWP: { entity_set_model(entity, _awp_models[2]);  }        case CSW_SCOUT: { entity_set_model(entity, _scout_models[2]); }        case CSW_USP: { entity_set_model(entity, _usp_models[2]); }        case CSW_GLOCK18: { entity_set_model(entity, _glock_models[2]); }        //case CSW_MP5NAVY: { entity_set_model(entity, _mp5_models[2]); }        case CSW_UMP45: { entity_set_model(entity, _ump_models[2]);  }        case CSW_M249: { entity_set_model(entity, _mash_models[2]);  }        case CSW_DEAGLE: { entity_set_model(entity, _dgl_models[2]);  }        case CSW_HEGRENADE: {entity_set_model(entity, _he_models[2]);  }        case CSW_FAMAS: { entity_set_model(entity, _famas_models[2]); }    }        return FMRES_IGNORED;}

Re: modelių keitimas.

Posted: 2011 Apr 09 18:05
by aurimasko
aaarnas wrote:contain(model, "w_m4a1") != turi būti.
Antrame variante tik pavyzdys.. Reikia char vietas atitaikyti model masyve.

Daryk taip:

Code: Select all

public fw_SetModel(entity, const model[]) {    if(!is_valid_ent(entity)) return FMRES_IGNORED;        switch(cs_get_weapon_id(entity))    {        case CSW_M4A1: { entity_set_model(entity, _emke_models[2]); }        case CSW_AK47: { entity_set_model(entity, _ak_models[2]);  }        case CSW_AWP: { entity_set_model(entity, _awp_models[2]);  }        case CSW_SCOUT: { entity_set_model(entity, _scout_models[2]); }        case CSW_USP: { entity_set_model(entity, _usp_models[2]); }        case CSW_GLOCK18: { entity_set_model(entity, _glock_models[2]); }        //case CSW_MP5NAVY: { entity_set_model(entity, _mp5_models[2]); }        case CSW_UMP45: { entity_set_model(entity, _ump_models[2]);  }        case CSW_M249: { entity_set_model(entity, _mash_models[2]);  }        case CSW_DEAGLE: { entity_set_model(entity, _dgl_models[2]);  }        case CSW_HEGRENADE: {entity_set_model(entity, _he_models[2]);  }        case CSW_FAMAS: { entity_set_model(entity, _famas_models[2]); }    }        return FMRES_IGNORED;}

Code: Select all

  L 04/09/2011 - 19:04:05: [CSTRIKE] Non-player entity 2 out of rangeL 04/09/2011 - 19:04:05: [AMXX] Displaying debug trace (plugin ".amxx")L 04/09/2011 - 19:04:05: [AMXX] Run time error 10: native error (native "cs_get_weapon_id")L 04/09/2011 - 19:04:05: [AMXX]    [0] .sma::fw_SetModel (line 430)L 04/09/2011 - 19:04:12: [CSTRIKE] Non-player entity 1 out of rangeL 04/09/2011 - 19:04:12: [AMXX] Displaying debug trace (plugin ".amxx")L 04/09/2011 - 19:04:12: [AMXX] Run time error 10: native error (native "cs_get_weapon_id")L 04/09/2011 - 19:04:12: [AMXX]    [0] .sma::fw_SetModel (line 430) 
Erroras konsolėje ir neveikia

Re: modelių keitimas.

Posted: 2011 Apr 09 20:09
by hleV
Atrodo cs_get_weapon_id() naudojant entityFM_SetModel forward'o visada grąžina 0, tad tekst dirbtis su model[] eilutės tikrinimu.

Edit:

Code: Select all

GetWeaponFromModel(const model[]){    static Trie:weaponIds;        if (weaponIds == Invalid_Trie)    {        weaponIds = TrieCreate();                TrieSetCell(weaponIds, "models/w_ak47.mdl", CSW_AK47);        TrieSetCell(weaponIds, "models/w_aug.mdl", CSW_AUG);        TrieSetCell(weaponIds, "models/w_awp.mdl", CSW_AWP);        TrieSetCell(weaponIds, "models/w_c4.mdl", CSW_C4);        TrieSetCell(weaponIds, "models/w_deagle.mdl", CSW_DEAGLE);        TrieSetCell(weaponIds, "models/w_elite.mdl", CSW_ELITE);        TrieSetCell(weaponIds, "models/w_famas.mdl", CSW_FAMAS);        TrieSetCell(weaponIds, "models/w_fiveseven.mdl", CSW_FIVESEVEN);        //TrieSetCell(weaponIds, "models/w_flashbang.mdl", CSW_FLASHBANG);        TrieSetCell(weaponIds, "models/w_g3sg1.mdl", CSW_G3SG1);        TrieSetCell(weaponIds, "models/w_galil.mdl", CSW_GALIL);        TrieSetCell(weaponIds, "models/w_glock18.mdl", CSW_GLOCK18);        //TrieSetCell(weaponIds, "models/w_hegrenade.mdl", CSW_HEGRENADE);        //TrieSetCell(weaponIds, "models/w_kevlar.mdl", CSW_VEST);        //TrieSetCell(weaponIds, "models/w_knife.mdl", CSW_KNIFE);        TrieSetCell(weaponIds, "models/w_m3.mdl", CSW_M3);        TrieSetCell(weaponIds, "models/w_m4a1.mdl", CSW_M4A1);        TrieSetCell(weaponIds, "models/w_m249.mdl", CSW_M249);        TrieSetCell(weaponIds, "models/w_mac10.mdl", CSW_MAC10);        TrieSetCell(weaponIds, "models/w_mp5.mdl", CSW_MP5NAVY);        TrieSetCell(weaponIds, "models/w_p90.mdl", CSW_P90);        TrieSetCell(weaponIds, "models/w_p228.mdl", CSW_P228);        TrieSetCell(weaponIds, "models/w_scout.mdl", CSW_SCOUT);        TrieSetCell(weaponIds, "models/w_sg550.mdl", CSW_SG550);        TrieSetCell(weaponIds, "models/w_sg552.mdl", CSW_SG552);        //TrieSetCell(weaponIds, "models/w_shield.mdl", CSW_SHIELD);        //TrieSetCell(weaponIds, "models/w_smokegrenade.mdl", CSW_SMOKEGRENADE);        TrieSetCell(weaponIds, "models/w_tmp.mdl", CSW_TMP);        TrieSetCell(weaponIds, "models/w_ump45.mdl", CSW_UMP45);        TrieSetCell(weaponIds, "models/w_usp.mdl", CSW_USP);        TrieSetCell(weaponIds, "models/w_xm1014.mdl", CSW_XM1014);    }     new weapon;     return TrieGetCell(weaponIds, model, weapon) ? weapon : 0;}

Re: modelių keitimas.

Posted: 2011 Apr 10 16:36
by aurimasko
Kuris variantas optimalesnis? Ta kur hleV pasiūlė ar šis:

Code: Select all

 public fw_SetModel(entity, const model[]) {    if(!is_valid_ent(entity)) return FMRES_IGNORED;        switch(model[9])     {        case 'm':         {            switch(model[10])            {                case '4':                 {                    entity_set_model(entity, _emke_models[2]);                }                case '2':                {                    entity_set_model(entity, _mash_models[2]);                }            }        }          }}ir t.t. 
EDIT:
Su šiuo būdu viskas veikia, bet meta:

L 04/10/2011 - 17:41:24: [AMXX] Displaying debug trace (plugin ".amxx")
L 04/10/2011 - 17:41:24: [AMXX] Run time error 5: memory access
L 04/10/2011 - 17:41:24: [AMXX] [0] .sma::fw_SetModel (line 611)


Ant šitos eilutes meta switch(model[9])

Re: modelių keitimas.

Posted: 2011 Apr 10 16:42
by hleV
Jei nesi prisidėjęs modelių su panašiais pavadinimais ir tikrinamas vieną kitą raidę esi įsitikinęs, kad modelis tas kurio ieškai, tai naudok switch.