QuakeGuns |
Что это такое:
Играли в Doom? Или Quake? Помните как там располагаются модели ( в думе сделано спрайтами ) оружия? Многим приелось положение моделек в CS'e, поэтому мы рассмотрим здесь как их же сменить. Код довольно прост, он изменяет раположение модели относительно экрана. Не забывайте, что код использован для положения в правой руке, потому надо убедиться что переменная cl_righthand равна 1
Исполнение:
1) Нужен ClientHook на V_CalcRefdef и EngineFunctions.
float GetGunOffset(cl_entity_s* vm)
{
if(!vm->model)
return 0;
char* gunname = vm->model->name;
if(!gunname || !gunname[0])
return 0;
gunname += 9;
#define CHECKGUNOFFSET(a,b) if(!strcmp(a,gunname)) return b;
CHECKGUNOFFSET("glock18.mdl", -4.55f);
CHECKGUNOFFSET("usp.mdl", -4.64f);
CHECKGUNOFFSET("p228.mdl", -4.65f);
CHECKGUNOFFSET("deagle.mdl", -4.71f);
CHECKGUNOFFSET("fiveseven.mdl", -4.84f);
CHECKGUNOFFSET("m3.mdl", -5.03f);
CHECKGUNOFFSET("xm1014.mdl", -5.82f);
CHECKGUNOFFSET("mac10.mdl", -5.05f);
CHECKGUNOFFSET("tmp.mdl", -6.47f);
CHECKGUNOFFSET("mp5.mdl", -5.53f);
CHECKGUNOFFSET("ump45.mdl", -6.07f);
CHECKGUNOFFSET("p90.mdl", -4.32f);
CHECKGUNOFFSET("scout.mdl", -5.14f);
CHECKGUNOFFSET("awp.mdl", -6.02f);
CHECKGUNOFFSET("famas.mdl", -4.84f);
CHECKGUNOFFSET("aug.mdl", -6.22f);
CHECKGUNOFFSET("m4a1.mdl", -6.74f);
CHECKGUNOFFSET("sg550.mdl", -7.11f);
CHECKGUNOFFSET("ak47.mdl", -6.79f);
CHECKGUNOFFSET("g3sg1.mdl", -6.19f);
CHECKGUNOFFSET("sg552.mdl", -5.27f);
CHECKGUNOFFSET("galil.mdl", -4.78f);
CHECKGUNOFFSET("m249.mdl", -5.13f);
return 0;
}
void QuakeGuns()
{
cl_entity_s * vm = oEngfuncs.GetViewModel();
if(!vm)
return;
float gunoffsetr = GetGunOffset(vm);
if(gunoffsetr == 0)
return;
float* org = vm->origin;
float* ang = vm->angles;
VectorCopy(mainViewAngles, ang);
vec3_t forward, right, up;
oEngfuncs.pfnAngleVectors(mainViewAngles, forward, right, up);
org[0] += forward[0] + up[0] + right[0]*gunoffsetr;
org[1] += forward[1] + up[1] + right[1]*gunoffsetr;
org[2] += forward[2] + up[2] + right[2]*gunoffsetr;
}
// После оригинала V_CalcRefdef
QuakeGuns();
2) Можете подобрать свои значения, по предпочтению. Пример на скриншоте:
Copyright (c) Troll