Lightning Fury kafadan yememe problemi
Gönderilme zamanı: Cmt Mar 06, 2021 5:36 pm
Lightning Fury'nin betasını hazırladım şu an 1.0 ve 1.1'in üzerinde çalışıyorum. Sorunum şu kendisinde herhangi bir traceattack'tan sadece headshot vurmaya yönelik pluginleri kullanmaya kalksam hiçbirinde pozitif sonuçlar alamıyorum. Aklıma traceattack ve silaha özgü olan bir kodla alakalı olduğunu düşünüyorum. Ancak ne kadar yöntem denediysem hiçbirisinde olumlu sonuç alamadım.
VIDEO:
Yok ben sadece verdiğim kodlarla çözemem diyeenler ve isteyenler olursa:
VIDEO:
Kod: Tümünü seç
public plugin_init()
{
...
RegisterHam(Ham_TraceAttack, "worldspawn", "TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "player", "TraceAttack")
...
}
Kod: Tümünü seç
public TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
if(!is_user_alive(iAttacker))
return HAM_IGNORED
new g_currentweapon = get_user_weapon(iAttacker)
if(g_currentweapon != CSW_BASEDON) return HAM_IGNORED
if(!g_has[iAttacker]) return HAM_IGNORED
set_tr2(ptr, TR_vecEndPos, {4960.0, 4960.0, 4960.0})
return HAM_SUPERCEDE
}
Kod: Tümünü seç
stock KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0)
{
new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
pev(id, pev_origin, vecOrigin);
new iHitResult = 0;
GetGunPosition(id, vecSrc);
pev(id, pev_v_angle, v_angle);
engfunc(EngFunc_MakeVectors, v_angle);
global_get(glb_v_forward, vecForward);
xs_vec_mul_scalar(vecForward, flRange, vecForward);
xs_vec_add(vecSrc, vecForward, vecEnd);
new tr = create_tr2();
engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
new Float:EndPos2[3]
get_tr2(tr, TR_vecEndPos, EndPos2)
new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
if (flFraction < 1.0) iHitResult = 2;
new Float:vecEndZ = vecEnd[2];
new pEntity = -1;
while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0)
{
if (!pev_valid(pEntity))
continue;
if (id == pEntity)
continue;
if (!IsAlive(pEntity))
continue;
if (!can_damage(id, pEntity))
continue
if (Stock_CheckAngle(id, pEntity) > floatcos(fAngle,degrees))
continue;
GetGunPosition(id, vecSrc);
pev(pEntity, pev_origin, vecEnd);
vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange);
xs_vec_sub(vecEnd, vecSrc, vecForward);
xs_vec_normalize(vecForward, vecForward);
xs_vec_mul_scalar(vecForward, flRange, vecForward);
xs_vec_add(vecSrc, vecForward, vecEnd);
engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
get_tr2(tr, TR_flFraction, flFraction);
if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
get_tr2(tr, TR_flFraction, flFraction);
if (flFraction < 1.0)
{
if (IsPlayer(pEntity) || IsHostage(pEntity))
{
iHitResult = 1;
if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
flDamage *= 1.0;
}
if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck)
{
engfunc(EngFunc_MakeVectors, v_angle);
global_get(glb_v_forward, vecForward);
if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup);
ExecuteHamB(Ham_TraceAttack, pEntity, id, 1.0, vecForward, tr, DMG_NEVERGIB | DMG_CLUB);
ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_CLUB)
Stock_Fake_KnockBack(id, pEntity, flKnockBack)
}
}
free_tr2(tr);
}
return iHitResult;
}
stock GetGunPosition(id, Float:vecScr[3])
{
new Float:vecViewOfs[3]
pev(id, pev_origin, vecScr)
pev(id, pev_view_ofs, vecViewOfs)
xs_vec_add(vecScr, vecViewOfs, vecScr)
}
stock IsAlive(pEntity)
{
if (pEntity < 1) return 0
return (pev(pEntity, pev_deadflag) == DEAD_NO && pev(pEntity, pev_health) > 0)
}
stock IsPlayer(pEntity) return is_user_connected(pEntity)
stock IsHostage(pEntity)
{
new classname[32]; pev(pEntity, pev_classname, classname, charsmax(classname))
return equal(classname, "hostage_entity")
}
stock Float:Stock_CheckAngle(id,iTarget)
{
new Float:vOricross[2],Float:fRad,Float:vId_ori[3],Float:vTar_ori[3],Float:vId_ang[3],Float:fLength,Float:vForward[3]
pev(id, pev_origin, vId_ori)
pev(iTarget, pev_origin, vTar_ori)
pev(id,pev_angles,vId_ang)
for(new i=0;i<2;i++) vOricross[i] = vTar_ori[i] - vId_ori[i]
fLength = floatsqroot(vOricross[0]*vOricross[0] + vOricross[1]*vOricross[1])
if (fLength<=0.0)
{
vOricross[0]=0.0
vOricross[1]=0.0
} else {
vOricross[0]=vOricross[0]*(1.0/fLength)
vOricross[1]=vOricross[1]*(1.0/fLength)
}
engfunc(EngFunc_MakeVectors,vId_ang)
global_get(glb_v_forward,vForward)
fRad = vOricross[0]*vForward[0]+vOricross[1]*vForward[1]
return fRad //-> RAD 90' = 0.5rad
}
stock can_damage(id1, id2)
{
if(id1 <= 0 || id1 >= 33 || id2 <= 0 || id2 >= 33)
return 1
// Check team
return(get_pdata_int(id1, 114, 5) != get_pdata_int(id2, 114, 5))
}
stock CheckBack(iEnemy,id)
{
new Float:anglea[3], Float:anglev[3]
pev(iEnemy, pev_v_angle, anglea)
pev(id, pev_v_angle, anglev)
new Float:angle = anglea[1] - anglev[1]
if (angle < -180.0) angle += 360.0
if (angle <= 45.0 && angle >= -45.0) return 1
return 0
}
public Stock_Fake_KnockBack(id, iVic, Float:iKb)
{
if(iVic > 32) return
new Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
pev(id, pev_origin, vAttacker)
pev(iVic, pev_origin, vVictim)
vAttacker[2] = vVictim[2] = 0.0
flags = pev(id, pev_flags)
xs_vec_sub(vVictim, vAttacker, vVictim)
new Float:fDistance
fDistance = xs_vec_len(vVictim)
xs_vec_mul_scalar(vVictim, 1 / fDistance, vVictim)
pev(iVic, pev_velocity, vVelocity)
xs_vec_mul_scalar(vVictim, iKb, vVictim)
xs_vec_mul_scalar(vVictim, 50.0, vVictim)
vVictim[2] = xs_vec_len(vVictim) * 0.15
if(flags &~ FL_ONGROUND)
{
xs_vec_mul_scalar(vVictim, 1.2, vVictim)
vVictim[2] *= 0.4
}
if(xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVic, pev_velocity, vVictim)
}