Reikia pagalbos dėl submodels

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
Post Reply
User avatar
likux35
Ar jis surinks 50 žinučių?
Posts: 41
Joined: 2015 May 29 22:41
Skype: likux35
Contact:

Reikia pagalbos dėl submodels

Post by likux35 »

Sveiki. Bandau pereiti ant submodels, bet iškilo klausimas dėl grupinių submodels uždėjimo.
Pas mane yra vienoje skiltyje hats, kitoje - skinai.
Šaltinis : https://forums.alliedmods.net/showthread.php?t=210789

Aš tuos submodels persidariau, tai pas mane yra taip:
Modelių skaičius - 6
Hats skaičius - 23

Cituojant
pev_body = hat_id * amount_of_models + model_id
turi būti taip, bet vėlgi nėra tiksliai paaiškinta,
ar modelių suma tik hats reikšmė, ar visų modelių kartu sudėjus.

Tarkim, aš noriu užsidėti pas save antrąjį submodel, bei antrą hat tai bandžiau skaičiuot:

1 * 23 + 1 = 24 (netinka)
2 * 23 + 2 = 48 (netinka) (cia testavimas, nedarant atimties veiksmo)

2 * 29 + 2 = 60 (netinka)
1 * 29 + 1 = 30 (netinka) (cia testavimas, nedarant atimties veiksmo)

Jau galva net skauda, niekaip neuzdeda man normalaus skino, kokio reikia :)

Net nebežinau kokią reikšmę įvest .. :trollface:

Code: Select all

set_pev(id, pev_body, ?)
Gal kas susidūrėt su šia bėda, ar aš kažko nesuprantu? :asian:

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

Re: Reikia pagalbos dėl submodels

Post by hleV »

O geras, nemaniau kad kažkam kažkada šito prireiks. Kažkada sukau galvą, kaip apskaičiuot šitą šūdą. HL bei HL model viewer'iai naudoja HLSDK funkcijas išgaut iš modelio informaciją, o su Pawn jau sunkiau. Bet šiaip ne taip gavosi.

Funkcija:

Code: Select all

/** * Calculates model body index from given parameters. *
 * @param parts  Model part indexes from each group
 * @param sizes  Each group's sizes
 * @param count  Total amount of groups * @return       Body index 
*/
stock CalculateModelBody(const parts[], const sizes[], count)
{
    new body = 0;
    
    while (count--)
    {    
        if (sizes[count] == 1)
            continue;         
                   
        new temp = parts[count];         
        
        for (new i = 0; i < count; i++)            
            temp *= sizes[i];         
        
        body += temp;    
    }     
    
    return body;
}
Pavyzdys:

Code: Select all

// Let's use HL soldier model hgrunt.mdl
entity_set_model(entity, "models/player/hgrunt.mdl"); 

// hgrunt.mdl has 3 model part groups:
new groupCount = 3; 

// By inspecting hgrunt.mdl via HLMV we can see it has these model groups and parts:
// body    (1 part)
// heads   (4 parts)
// weapons (3 parts)
new groupSizes[] =
{    
    1, // Size of 1st model part group (body)    
    4, // Size of 2nd model part group (heads)    
    3  // Size of 3rd model part group (weapons)
}; 

// Now define which parts we want to use (counting starts from zero)
new modelParts[] =
{    
    0, // 1st (and only) part in body group    
    2, // 3rd part in heads group (balaclava)    
    1  // 2nd part in weapons group (shotgun)
}; 

// Let's calculate body and set it for entity
new body = CalculateModelBody(modelParts, groupSizes, groupCount);
entity_set_int(entity, EV_INT_body, body);
Tai tavo atveju, jei pvz. nori imt pirmą kūną (index 0) ir antrą kepurę (index 1), turbūt būtų

Code: Select all

new body = CalculateModelBody({0, 1}, {6, 23}, 2);
Mėgink.
Last edited by hleV on 2023 Mar 26 18:49, edited 1 time in total.
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

User avatar
likux35
Ar jis surinks 50 žinučių?
Posts: 41
Joined: 2015 May 29 22:41
Skype: likux35
Contact:

Re: Reikia pagalbos dėl submodels

Post by likux35 »

hleV wrote:O geras, nemaniau kad kažkam kažkada šito prireiks. Kažkada sukau galvą, kaip apskaičiuot šitą šūdą. HL bei HL model viewer'iai naudoja HLSDK funkcijas išgaut iš modelio informaciją, o su Pawn jau sunkiau. Bet šiaip ne taip gavosi.

Funkcija:
[pawn]/** * Calculates model body index from given parameters. *  * @param parts  Model part indexes from each group * @param sizes  Each group's sizes * @param count  Total amount of groups * @return       Body index */stock CalculateModelBody(const parts[], const sizes[], count){    new body = 0;     while (count--)    {        if (sizes[count] == 1)            continue;                new temp = parts[count];         for (new i = 0; i < count; i++)            temp *= sizes;         body += temp;    }     return body;}[/pawn]
Pavyzdys:
[pawn]// Let's use HL soldier model hgrunt.mdlentity_set_model(entity, "models/player/hgrunt.mdl"); // hgrunt.mdl has 3 model part groups:new groupCount = 3; // By inspecting hgrunt.mdl via HLMV we can see it has these model groups and parts:// body    (1 part)// heads   (4 parts)// weapons (3 parts)new groupSizes[] ={    1, // Size of 1st model part group (body)    4, // Size of 2nd model part group (heads)    3  // Size of 3rd model part group (weapons)}; // Now define which parts we want to use (counting starts from zero)new modelParts[] ={    0, // 1st (and only) part in body group    2, // 3rd part in heads group (balaclava)    1  // 2nd part in weapons group (shotgun)}; // Let's calculate body and set it for entitynew body = CalculateModelBody(modelParts, groupSizes, groupCount);entity_set_int(entity, EV_INT_body, body);[/pawn]
Tai tavo atveju, jei pvz. nori imt pirmą kūną (index 0) ir antrą kepurę (index 1), turbūt būtų
[pawn]new body = CalculateModelBody({0, 1}, {6, 23}, 2);[/pawn]
Mėgink.


Viskas veikia, ačiū :D Reiks dabar su kitais išsitestuoti. :D
Dar toks pastebėjimas, kad į stock`e pakeitus į

Code: Select all

new temp = parts[count]-1;
nereiks atimti po vieną nuolatos, ko aš, žinoma, vistiek pamiršiu :D
Last edited by likux35 on 2019 Sep 20 23:03, edited 3 times in total.

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

Re: Reikia pagalbos dėl submodels

Post by hleV »

Geriau nieko nekeitinėk tam stock'e jei pilnai nesupranti kaip jis skaičiuoja. Gal su vienu modeliu pasiseks ir veiks, bet pabandysi su kitais, kur pvz. yra daugiau sub-grupių ir pnš. ir gali jau blogai apskaičiuot. Indeksai visada ėjo ir eis nuo 0, ne nuo 1. Nieko čia atiminėt nereikia, tiesiog įsimint šitą esminį dalyką.
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

Povylas
Naujokas apylinkėse
Posts: 1
Joined: 2020 Oct 23 10:38

Re: Reikia pagalbos dėl submodels

Post by Povylas »

Sveiki. Naudoju dvi grupes ir joje yra po 16 pasirinkimų, o kaip turėtu atrodyti meniu? Jei pirmoji grupėje pasirinkimas pirmas aktyvus, Kad užmestu antroji grupėje pirma submodels grupe ir taip iki 16.
Tarkim taip norėtųsi, Pvz pirmoji grupėje pasirinkau 1. Tai antroji grupėje galėčiau rinktis nuo 1 iki 16, tačiau kartu ir išliktu pirmoji grupėje pirmas.
Toliau, Jei pasirinkimas 1 grupėje 2. Tai antroji grupėje galėčiau rinktis nuo 1 iki 16, Aišku pirmoji turėtu išlikti aktyvus 2 submodels, ir taip iki 16.
Tai pati klausimas, yra galimybė naudoti submodels ant ginklu? ir kodėl mato klientai iki 256 body? Galima apeiti šitas limitas?

Post Reply

Who is online

Users browsing this forum: No registered users and 8 guests