modelių keitimas.

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
User avatar
xFrostas
Flooderis arba specialistas
Posts: 660
Joined: 2010 Sep 02 15:47
Skype: frost.lt

Re: modelių keitimas.

Post 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.

User avatar
aurimasko
Flooderis arba specialistas
Posts: 736
Joined: 2010 Sep 04 08:45

Re: modelių keitimas.

Post 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

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: modelių keitimas.

Post 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ą.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: modelių keitimas.

Post by hleV »

Neveiktų šiuo atveju cs_get_weapon_id() ar get_pdata_int(entity, 43, 4)?
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

User avatar
aurimasko
Flooderis arba specialistas
Posts: 736
Joined: 2010 Sep 04 08:45

Re: modelių keitimas.

Post 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])                                    }            }        }} 
Last edited by aurimasko on 2011 Apr 09 16:36, edited 1 time in total.

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: modelių keitimas.

Post 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;}
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
aurimasko
Flooderis arba specialistas
Posts: 736
Joined: 2010 Sep 04 08:45

Re: modelių keitimas.

Post 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

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: modelių keitimas.

Post 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;}
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

User avatar
aurimasko
Flooderis arba specialistas
Posts: 736
Joined: 2010 Sep 04 08:45

Re: modelių keitimas.

Post 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])

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: modelių keitimas.

Post 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.
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

Post Reply

Who is online

Users browsing this forum: No registered users and 7 guests