Noob_with_cheats
Скриптер
- Сообщения
- 56
- Реакции
- 28
- Баллы
- 18
C-подобный:
#define MAX_STUDIO_BONES 128 // из goldsrc
/**
* Получает хитбоксы у субмодели.
*
* @param szModel Путь до модели (Пр. "models/bag.mdl")
* @param iSub Номер субмодели [0;iNum)
* @param flMaxs Local BB max.
* @param flMins Local BB min.
* @param flSize max - min
*
* @note Поддержка составных моделей (игроков) отсутствует. Получает хитбоксы субмодели
* предметов, оружия и т.д., объединённых в 1 файл.
*
* @return true/false;
*/
stock bool:UTIL_GetHitBoxSubModel(const szModel[], const iSub, Float: flMaxs[3], Float: flMins[3], Float: flSize[3])
{
new hFile = fopen(szModel, "rb");
if (!hFile)
{
server_print("Can`t open %s", szModel);
return false;
}
new iBlock, iCount, index = -1;
fseek(hFile, 204, SEEK_SET);
fread(hFile, iCount, BLOCK_INT);
fread(hFile, iBlock, BLOCK_INT);
fseek(hFile, iBlock, SEEK_SET);
for (new i = 0, iSubs, iTotal; i < iCount; i++)
{
fseek(hFile, 64, SEEK_CUR);
fread(hFile, iSubs, BLOCK_INT);
fseek(hFile, 4, SEEK_CUR);
fread(hFile, iBlock, BLOCK_INT);
if (iSub < iSubs + iTotal)
{
index = iSub - iTotal;
break;
}
iTotal += iSubs;
}
if (index < 0)
{
server_print("Index not found %i", iSub);
fclose(hFile);
return false;
}
fseek(hFile, iBlock, SEEK_SET);
fseek(hFile, 112 * index, SEEK_CUR);
fseek(hFile, 80, SEEK_CUR);
fread(hFile, iCount, BLOCK_INT);
fread(hFile, iBlock, BLOCK_INT);
if (iCount < 1)
{
server_print("No hitbox");
fclose(hFile);
return false;
}
fseek(hFile, iBlock, SEEK_SET);
new bool:bBones[MAX_STUDIO_BONES];
for (new i = 0, bone; i < iCount; i++)
{
fread(hFile, bone, BLOCK_BYTE);
if (bone < MAX_STUDIO_BONES)
{
bBones[bone] = true;
}
}
fseek(hFile, 156, SEEK_SET);
fread(hFile, iCount, BLOCK_INT);
fread(hFile, iBlock, BLOCK_INT);
fseek(hFile, iBlock, SEEK_SET);
for (new i = 0, bone; i < iCount; i++)
{
fread(hFile, bone, BLOCK_INT);
if (bone >= 0 && bone < MAX_STUDIO_BONES && bBones[bone])
{
fseek(hFile, 4, BLOCK_INT);
fread_blocks(hFile, _:flMins, 3, BLOCK_INT);
fread_blocks(hFile, _:flMaxs, 3, BLOCK_INT);
flSize[0] = flMaxs[0] - flMins[0];
flSize[1] = flMaxs[1] - flMins[1];
flSize[2] = flMaxs[2] - flMins[2];
fclose(hFile);
return true;
}
fseek(hFile, 28, SEEK_CUR);
}
fclose(hFile);
return false;
}
Вывод парсинга модели из https://hlds.run/resources/100/
C-подобный:
public plugin_init()
{
new szModel[] = "models/weapon/noob/wmg_default_v2.mdl";
new iNum = UTIL_GetCountSubModels(szModel);
new szName[64];
new Float: flMaxs[3], Float: flMins[3], Float: flSize[3];
for (new i; i < iNum; i++)
{
UTIL_GetHitBoxSubModel(szModel, i, flMaxs, flMins, flSize);
UTIL_GetNameSubModel(szModel, i, szName, 64);
server_print("#%i | %s | Maxs: {%.2f, %.2f, %.2f} | Mins: {%.2f, %.2f, %.2f} | Size: {%.2f, %.2f, %.2f}", i, szName, flMaxs[0], flMaxs[1], flMaxs[2],
flMins[0], flMins[1], flMins[2], flSize[0], flSize[1], flSize[2]);
}
return PLUGIN_HANDLED;
}
C-подобный:
#0 | blank | Maxs: {0.00, 0.00, 0.00} | Mins: {0.00, 0.00, 0.00} | Size: {0.00, 0.00, 0.00}
#1 | w_glock18 | Maxs: {-3.39, 1.65, 3.67} | Mins: {0.00, -1.65, -3.67} | Size: {-3.39, 3.31, 7.34}
#2 | w_usp | Maxs: {-6.04, 2.68, 5.15} | Mins: {0.00, -2.68, -5.15} | Size: {-6.04, 5.36, 10.31}
#3 | w_deagle | Maxs: {-4.28, 1.78, 3.75} | Mins: {0.00, -1.78, -3.75} | Size: {-4.28, 3.57, 7.51}
#4 | w_elite | Maxs: {0.00, 9.02, 4.55} | Mins: {0.00, -3.59, -7.05} | Size: {0.00, 12.62, 11.60}
#5 | w_p228 | Maxs: {-3.56, 1.67, 3.72} | Mins: {0.00, -1.67, -3.72} | Size: {-3.56, 3.35, 7.45}
#6 | w_fiveseven | Maxs: {-3.56, 1.67, 3.72} | Mins: {0.00, -1.67, -3.72} | Size: {-3.56, 3.35, 7.45}
#7 | w_m3 | Maxs: {-5.21, 0.60, 22.61} | Mins: {0.00, -0.61, -12.97} | Size: {-5.21, 1.21, 35.59}
#8 | w_xm1014 | Maxs: {-6.28, 1.42, 19.79} | Mins: {0.00, -1.34, -24.26} | Size: {-6.28, 2.76, 44.05}
#9 | w_mac10 | Maxs: {-15.96, 1.54, 3.88} | Mins: {0.00, -1.01, -17.55} | Size: {-15.96, 2.56, 21.44}
#10 | w_tmp | Maxs: {-3.51, 0.67, 4.54} | Mins: {0.00, -0.67, -5.18} | Size: {-3.51, 1.34, 9.73}
#11 | w_mp5 | Maxs: {-0.16, 27.29, 3.90} | Mins: {0.00, -1.54, -10.43} | Size: {-0.16, 28.84, 14.34}
#12 | w_ump45 | Maxs: {-9.51, 1.13, 7.19} | Mins: {0.00, -1.13, -7.31} | Size: {-9.51, 2.27, 14.51}
#13 | w_p90 | Maxs: {-11.19, 1.47, 5.40} | Mins: {0.00, -1.47, -5.40} | Size: {-11.19, 2.94, 10.81}
#14 | w_famas | Maxs: {-5.67, 19.18, 1.01} | Mins: {0.00, -25.83, -1.02} | Size: {-5.67, 45.02, 2.04}
#15 | w_galil | Maxs: {0.00, 33.88, 3.67} | Mins: {0.00, -19.28, -9.94} | Size: {0.00, 53.16, 13.61}
#16 | w_m4a1 | Maxs: {-15.20, 1.04, 3.30} | Mins: {0.00, -1.17, -7.44} | Size: {-15.20, 2.22, 10.75}
#17 | w_ak47 | Maxs: {-7.84, 1.26, 11.43} | Mins: {0.00, -1.16, -0.87} | Size: {-7.84, 2.43, 12.31}
#18 | w_aug | Maxs: {-0.25, 20.35, 6.80} | Mins: {0.00, -14.06, -5.09} | Size: {-0.25, 34.41, 11.90}
#19 | w_sg552 | Maxs: {-9.56, 1.52, 8.06} | Mins: {0.00, -1.52, -2.57} | Size: {-9.56, 3.05, 10.64}
#20 | w_awp | Maxs: {-19.93, 1.35, 4.59} | Mins: {0.00, -1.29, -3.97} | Size: {-19.93, 2.65, 8.56}
#21 | w_sg550 | Maxs: {-10.52, 1.00, 7.67} | Mins: {0.00, -1.00, -2.00} | Size: {-10.52, 2.00, 9.67}
#22 | w_g3sg1 | Maxs: {-20.85, 1.33, 5.40} | Mins: {0.00, -1.32, -5.40} | Size: {-20.85, 2.65, 10.81}
#23 | w_scout | Maxs: {-20.53, 1.30, 3.99} | Mins: {0.00, -1.30, -4.00} | Size: {-20.53, 2.61, 7.99}
#24 | w_m249 | Maxs: {-1.00, 24.25, 5.01} | Mins: {0.00, -10.26, -6.13} | Size: {-1.00, 34.51, 11.14}
#25 | w_hegrenade | Maxs: {-4.61, 4.67, 4.05} | Mins: {0.00, -4.67, -4.03} | Size: {-4.61, 9.34, 8.08}
#26 | w_flashbang | Maxs: {-4.61, 4.67, 4.05} | Mins: {0.00, -4.67, -4.03} | Size: {-4.61, 9.34, 8.08}
#27 | w_smokegrenade | Maxs: {-4.61, 4.67, 4.05} | Mins: {0.00, -4.67, -4.03} | Size: {-4.61, 9.34, 8.08}
#28 | w_shield | Maxs: {-31.13, 15.51, 2.96} | Mins: {0.00, -15.52, -2.97} | Size: {-31.13, 31.03, 5.93}
#29 | w_kevlar | Maxs: {0.00, 14.19, 17.23} | Mins: {0.00, -13.52, -15.97} | Size: {0.00, 27.71, 33.20}
#30 | w_c4_backpack | Maxs: {-6.84, 5.21, 2.94} | Mins: {0.00, -5.21, -2.94} | Size: {-6.84, 10.43, 5.88}
#31 | w_c4 | Maxs: {-2.56, 2.79, 6.30} | Mins: {0.00, -3.60, -7.28} | Size: {-2.56, 6.40, 13.59}
#32 | w_thighpack | Maxs: {-3.65, 10.43, 6.80} | Mins: {0.00, -9.25, -4.63} | Size: {-3.65, 19.68, 11.43}
Последнее редактирование: