New Anti-lead Source 1.5 (FIXED 2012)
Observed that there is no post regarding antilead here.i found only one by jacob. that too antilead released by jacob is basic one.. the below source is new antilead by SecretsOthePast and Jacob . Ofcourse i owe this release to them.. This antilead is sorted from IGunz Source.
Here it is:
CSCOMMON:
MSharedCommandTable.cpp(667):
Code:
P(MPT_UINT, "AntiLead")
MSharedCommandTable.cpp(1712):
Code:
C(MC_GUNZ_ANTILEAD, "Match.Gunz.AntiLead", "AntiLead Information", MCDT_PEER2PEER)
P(MPT_BLOB, "ShotInfo");
MSharedCommandTable.h(682):
Code:
#define MC_GUNZ_ANTILEAD 50010 //Antilead
MLadderGroup.h(18):
Code:
bool m_bWantAntiLeadMatching;
MLadderGroup.h(36):
Code:
m_bWantAntiLeadMatching = true;
MLadderGroup.h(50):
Code:
void SetAntiLeadMatching(bool bValue) { m_bWantAntiLeadMatching = bValue; }
MLadderGroup.h(51):
Code:
bool GetAntiLeadMatching() { return m_bWantAntiLeadMatching; }
MLadderMgr.cpp(185):
Code:
if(pGroupA->GetAntiLeadMatching() != pGroupB->GetAntiLeadMatching())
MMatchStage.h(168):
Code:
bool m_bIsAntiLeading;
MMatchStage.h(317):
Code:
bool IsAntiLead() { return m_StageSetting.GetAntiLead(); }
MMatchStage.h(328):
Code:
void SetAntiLead(bool bAntiLead) { m_StageSetting.SetAntiLead(bAntiLead); }
MMatchStageSetting.cpp(46):
Code:
m_StageSetting.Ref().bAntiLead = true;
MMatchStageSetting.h(79):
MMatchStageSetting.h(174):
Code:
bool GetAntiLead() { return m_StageSetting.Ref().bAntiLead; }
MMatchStageSetting.h(198):
Code:
void SetAntiLead(bool bValue) { MEMBER_SET_CHECKCRC(m_StageSetting, bAntiLead, bValue); }
MMatchServer.h(424):
Code:
void OnLadderRequestChallenge(const MUID& uidRequestMember, void* pGroupBlob, unsigned long int nOptions, unsigned long int nAntiLead);
MMatchServer_Ladder.cpp(145):
Code:
pSetting->SetAntiLead(pGroupA->GetAntiLeadMatching());
MMatchServer_Ladder.cpp(216):
Code:
void MMatchServer::OnLadderRequestChallenge(const MUID& uidRequestMember, void* pMemberNamesBlob, unsigned long int nOptions, unsigned long int nAntiLead)
MMatchServer_Ladder.cpp(290):
Code:
if (nAntiLead == 1)
{
pGroup->SetAntiLeadMatching(true);
}
else
{
pGroup->SetAntiLeadMatching(true);
}
MMatchServer_OnCommand.cpp(1351):
Code:
unsigned long int nAntiLead;
MMatchServer_OnCommand.cpp(1355):
Code:
pCommand->GetParameter(&nAntiLead, 3, MPT_UINT);
MMatchServer_OnCommand.cpp(1363):
Code:
OnLadderRequestChallenge(pCommand->GetSenderUID(), pMemberNamesBlob, nOptions, nAntiLead);
MMatchServer_Stage.cpp(1579):
Code:
if(pNode->bAntiLead) {
pSetting->SetAntiLead(true);
} else {
pSetting->SetAntiLead(true);
}
Gunz:
ZInterfaceListener.cpp(1961):
Code:
int nAntiLead = 0;
MButton* pButton2 = (MButton*)pResource->FindWidget("AntiLeadCheckBox");
if ((pButton2) && (pButton2->GetCheck()))
{
nAntiLead = 1;
}
ZPostLadderRequestChallenge(ppMember, 1, nBalancedMatching, nAntiLead);
ZCharacter.cpp(4421):
Code:
void ZCharacter::OnDamagedAPlayer(ZObject* pAttacker, rvector srcPos, ZDAMAGETYPE damageType, MMatchWeaponType weaponType, float fDamage, float fPiercingRatio, int nMeleeTpye)
{
if (damageType == ZD_MELEE)
{
OnDamaged(pAttacker, srcPos, damageType, weaponType, fDamage, fPiercingRatio, nMeleeTpye);
return;
}
if (pAttacker != NULL && fDamage > 0)
{
if (pAttacker == ZGetGame()->m_pMyCharacter && this != pAttacker && !ZGetGame()->m_pMyCharacter->IsDie())
{
void* pBlobArray = MMakeBlobArray(sizeof(MTD_ShotInfo), 1);
void* pBlobElement = MGetBlobArrayElement(pBlobArray, 0);
MTD_ShotInfo shotInfo;
shotInfo.fDamage = fDamage;
shotInfo.fPosX = srcPos.x;
shotInfo.fPosY = srcPos.y;
shotInfo.fPosZ = srcPos.z;
shotInfo.nDamageType = damageType;
shotInfo.fRatio = fPiercingRatio;
shotInfo.nLowId = GetUID().Low;
shotInfo.nWeaponType = weaponType;
memcpy(pBlobElement, &shotInfo, sizeof(MTD_ShotInfo));
ZGetGameClient()->GetPeerPacketCrypter().Encrypt((char*)pBlobElement, sizeof(MTD_ShotInfo));
ZPOSTCMDLEAD(MC_GUNZ_ANTILEAD, GetUID(), MCommandParameterBlob(pBlobArray, MGetBlobArraySize(pBlobArray)));
}
}
}
ZCharacter.cpp(4443):
Code:
void ZCharacter::OnDamagedAPlayer(ZObject* pAttacker, vector<MTD_ShotInfo*> vShots)
{
if (vShots.size() > 0)
{
if (ZGetGameClient()->GetPlayerUID().Low != vShots[0]->nLowId && GetUID().Low == vShots[0]->nLowId)
{
if (pAttacker == ZGetGame()->m_pMyCharacter && this != pAttacker && !ZGetGame()->m_pMyCharacter->IsDie())
{
void* pBlobArray = MMakeBlobArray(sizeof(MTD_ShotInfo), vShots.size());
for (int i = 0; i < vShots.size(); ++i)
{
MTD_ShotInfo* pShot = vShots[i];
void* pElement = MGetBlobArrayElement(pBlobArray, i);
memcpy(pElement, pShot, sizeof(MTD_ShotInfo));
ZGetGameClient()->GetPeerPacketCrypter().Encrypt((char*)pElement, sizeof(MTD_ShotInfo));
}
ZPOSTCMDLEAD(MC_GUNZ_ANTILEAD, GetUID(), MCommandParameterBlob(pBlobArray, MGetBlobArraySize(pBlobArray)));
}
}
}
}
ZGame.cpp(1839):
Code:
switch (pCommand->GetID())
{
case MC_GUNZ_ANTILEAD:
{
MCommandParameter* pParam = pCommand->GetParameter(0);
if (pParam->GetType() != MPT_BLOB)
break;
void* pBlob = pParam->GetPointer();
int nSize = MGetBlobArrayCount(pBlob);
for (int i = 0; i < nSize; ++i)
{
MTD_ShotInfo* pInfo = (MTD_ShotInfo*)MGetBlobArrayElement(pBlob, i);
ZGetGameClient()->GetPeerPacketCrypter().Decrypt((char*)pInfo, sizeof(MTD_ShotInfo));
if (m_pMyCharacter && ZGetGameClient()->GetPlayerUID() != pCommand->GetSenderUID())
{
ZCharacter* pCharacter = (ZCharacter*)ZGetCharacterManager()->Find(pCommand->GetSenderUID());
rvector pos;
pos.x = pInfo->fPosX;
pos.y = pInfo->fPosY;
pos.z = pInfo->fPosZ;
// if (pCharacter != ZGetGame()->m_pMyCharacter && !pCharacter->IsNPC()) {
// pCharacter->GetStatus().CheckCrc();
// pCharacter->GetStatus().Ref().nDamageCaused += pInfo->fDamage;
// pCharacter->GetStatus().MakeCrc();
//}
if (pCharacter && pInfo->nLowId == ZGetGameClient()->GetPlayerUID().Low
&& !ZGetGame()->GetMatch()->IsTeamPlay() || ((m_pMyCharacter->IsTeam(pCharacter) && ZGetGame()->GetMatch()->GetTeamKillEnabled()) || !m_pMyCharacter->IsTeam(pCharacter))
)
{
m_pMyCharacter->OnDamaged(pCharacter, pos, (ZDAMAGETYPE)pInfo->nDamageType, (MMatchWeaponType)pInfo->nWeaponType, pInfo->fDamage, pInfo->fRatio);
}
}
else
{
ZCharacter* pCharacter = (ZCharacter*)ZGetCharacterManager()->Find(pCommand->GetSenderUID());
if (pCharacter != ZGetGame()->m_pMyCharacter)
{
// pCharacter->GetStatus().CheckCrc();
// pCharacter->GetStatus().Ref().nDamageCaused += pInfo->fDamage;
// pCharacter->GetStatus().MakeCrc();
}
else
{
// m_pMyCharacter->GetStatus().CheckCrc();
// m_pMyCharacter->GetStatus().Ref().nDamageCaused += pInfo->fDamage;
// m_pMyCharacter->GetStatus().MakeCrc();
}
}
}
}
break;
case MC_GUNZ_DAMAGECOUNTER:
{
//MCommandParameter* pParam = pCommand->GetParameter(0);
//MCommandParameter* pParam2 = pCommand->GetParameter(1);
int Damage;
MUID AttackerUID;
pCommand->GetParameter(&Damage, 0, MPT_INT);
pCommand->GetParameter(&AttackerUID, 1, MPT_UID);
ZCharacter* pCharacter = (ZCharacter*)ZGetCharacterManager()->Find(AttackerUID);
pCharacter->GetStatus().CheckCrc();
pCharacter->GetStatus().Ref().nDamageCaused += Damage;
pCharacter->GetStatus().MakeCrc();
}
break;
ZGame.cpp(4282):
Code:
if(ZGetGameClient()->GetChannelType() == MCHANNEL_TYPE_CLAN) {
if(ZGetGameClient()->GetMatchStageSetting()->GetAntiLead() == true) {
pickinfo.pObject->OnDamaged(pOwner, pOwner->GetPosition(), dt, pDesc->m_nWeaponType.Ref(), fActualDamage, fRatio );
} else {
((ZCharacter*)(pickinfo.pObject))->OnDamagedAPlayer(pOwner, pOwner->GetPosition(), dt, pDesc->m_nWeaponType.Ref(), fActualDamage, fRatio );
}
ZGame.cpp(4843):
Code:
MTD_ShotInfo* ZGame::OnPeerShotgun_Damaged(ZObject* pOwner, float fShotTime, const rvector& pos, rvector& dir, ZPICKINFO pickinfo, DWORD dwPickPassFlag, rvector& v1, rvector& v2, ZItem *pItem, rvector& BulletMarkNormal, bool& bBulletMark, ZTargetType& nTargetType, bool& bHitEnemy)
{
ZCharacter *pTargetCharacter = ZGetGameInterface()->GetCombatInterface()->GetTargetCharacter();
bool bReturnValue = !pTargetCharacter;
if(!pTargetCharacter)PROTECT_DEBUG_REGISTER(bReturnValue) return NULL;
MMatchItemDesc *pDesc = pItem->GetDesc();
bReturnValue = !pDesc;
if(!pDesc)PROTECT_DEBUG_REGISTER(bReturnValue) { _ASSERT(FALSE); return NULL; }
//rvector dir = to - pos;
bool waterSound = false;
//¿©±â¿¡ ¹æ¾îÄڵ尡 µé¾î°¡¾ßµÅ~
bReturnValue = !(ZGetGame()->PickHistory(pOwner,fShotTime,pos,pos+10000.f*dir, &pickinfo,dwPickPassFlag));
if(!(ZGetGame()->PickHistory(pOwner,fShotTime,pos,pos+10000.f*dir, &pickinfo,dwPickPassFlag)))
{
PROTECT_DEBUG_REGISTER(bReturnValue)
{
v1 = pos;
v2 = pos+dir*10000.f;
nTargetType = ZTT_NOTHING;
waterSound = GetWorld()->GetWaters()->CheckSpearing( v1, v2, 250, 0.3, !waterSound );
return NULL;
}
}
//¿©±âµµ..
bReturnValue = (!pickinfo.pObject) && (!pickinfo.bBspPicked);
if(pickinfo.bBspPicked)
{
PROTECT_DEBUG_REGISTER(pickinfo.nBspPicked_DebugRegister == FOR_DEBUG_REGISTER)
{
nTargetType = ZTT_OBJECT;
v1 = pos;
v2 = pickinfo.bpi.PickPos;
// ÃÑź ÈçÀû
BulletMarkNormal.x = pickinfo.bpi.pInfo->plane.a;
BulletMarkNormal.y = pickinfo.bpi.pInfo->plane.b;
BulletMarkNormal.z = pickinfo.bpi.pInfo->plane.c;
Normalize(BulletMarkNormal);
bBulletMark = true;
// ¸Â´Â°÷ ¹Ý°æ 20cm °¡ ȸ鿡 µé¾î¿À¸é ±×¸°´Ù
bool bDrawTargetEffects = isInViewFrustum(v2,20.f,RGetViewFrustum());
if(bDrawTargetEffects)
{
rvector pdir = v2-v1;
Normalize(pdir);
int size = 3;
bool bDrawFireEffects = isInViewFrustum(v1,100.f,RGetViewFrustum());
rvector v[6];
// size = GetWeapondummyPos(pOwnerCharacter,v);
ZCharacterObject* pCOwnerObject = MDynamicCast(ZCharacterObject, pOwner);
if(pCOwnerObject->IsRendered())
size = pCOwnerObject->GetWeapondummyPos(v);
else
{
size = 6;
v[0] = v[1] = v[2] = v1;
v[3] = v[4] = v[5] = v[0];
}
MMatchWeaponType wtype = pDesc->m_nWeaponType.Ref();
bool bSlugOutput = pDesc->m_bSlugOutput;
ZGetEffectManager()->AddBulletMark(v2,BulletMarkNormal);
if(ZGetConfiguration()->GetExtra()->bShotgunSmoke == true) {
ZGetEffectManager()->AddShotEffect(&v1, size , v2, BulletMarkNormal, nTargetType, wtype, bSlugOutput, pCOwnerObject,bDrawFireEffects,bDrawTargetEffects);
}
}
waterSound = GetWorld()->GetWaters()->CheckSpearing( v1, v2, 250, 0.3, !waterSound );
return NULL;
}
}
else if( (!pickinfo.pObject) && (!pickinfo.bBspPicked) )
{
PROTECT_DEBUG_REGISTER(bReturnValue)
{
_ASSERT(false);
return NULL;
}
}
//À§¿¡±îÁö´Â °Ë»ç ´Ü°è...
ZObject *pObject = pickinfo.pObject;
bool bGuard = pObject->IsGuard() && (pickinfo.info.parts!=eq_parts_legs) && // ´Ù¸®´Â ¸·À»¼ö¾ø´Ù
DotProduct(dir,pObject->GetDirection())<0;
if(pObject->IsGuard() && (pickinfo.info.parts!=eq_parts_legs) &&
DotProduct(dir,pObject->GetDirection())<0)
{
PROTECT_DEBUG_REGISTER(bGuard)
{
nTargetType = ZTT_CHARACTER_GUARD;
// ¸·¾Ò´Ù
rvector t_pos = pObject->GetPosition();
t_pos.z += 100.f;
ZGetEffectManager()->AddSwordDefenceEffect(t_pos+(-dir*50.f),-dir);
pObject->OnGuardSuccess();
v1 = pos;
v2 = pickinfo.info.vOut;
return NULL;
}
}
ZActor* pATarget = MDynamicCast(ZActor,pObject);
nTargetType = ZTT_CHARACTER;
bool bPushSkip = false;
if(pATarget)
{
bPushSkip = pATarget->GetNPCInfo()->bNeverPushed;
}
float fKnockbackForce = pItem->GetKnockbackForce()/ (.5f*float(SHOTGUN_BULLET_COUNT));
if(bPushSkip)
{
// ZGetSoundEngine()->PlaySound("fx_bullethit_mt_met");
rvector vPos = pOwner->GetPosition() + (pickinfo.pObject->GetPosition() - pOwner->GetPosition()) * 0.1f;
ZGetSoundEngine()->PlaySound("fx_bullethit_mt_met", vPos );
fKnockbackForce = 1.0f;
}
pObject->OnKnockback( dir, fKnockbackForce );
float fActualDamage = CalcActualDamage(pOwner, pObject, (float)pDesc->m_nDamage.Ref());
float fRatio = pItem->GetPiercingRatio( pDesc->m_nWeaponType.Ref(), pickinfo.info.parts );
ZDAMAGETYPE dt = (pickinfo.info.parts==eq_parts_head) ? ZD_BULLET_HEADSHOT : ZD_BULLET;
MTD_ShotInfo* pShotInfo = NULL;
if(ZGetGameClient()->GetChannelType() == MCHANNEL_TYPE_CLAN) {
if(ZGetGameClient()->GetMatchStageSetting()->GetAntiLead() == true) {
pickinfo.pObject->OnDamaged(pOwner, pOwner->GetPosition(), dt, pDesc->m_nWeaponType.Ref(), fActualDamage, fRatio );
} else {
pShotInfo = new MTD_ShotInfo;
pShotInfo->nLowId = pickinfo.pObject->GetUID().Low;
pShotInfo->fDamage = fActualDamage;
pShotInfo->fPosX = pOwner->GetPosition().x;
pShotInfo->fPosY = pOwner->GetPosition().y;
pShotInfo->fPosZ = pOwner->GetPosition().z;
pShotInfo->fRatio = fRatio;
pShotInfo->nDamageType = dt;
pShotInfo->nWeaponType = pDesc->m_nWeaponType.Ref();
}
} else if(ZGetGameClient()->GetChannelType() == MCHANNEL_TYPE_DUELTOURNAMENT) {
if(strstr(ZGetGameClient()->GetChannelName(), "Lead")) {
pickinfo.pObject->OnDamaged(pOwner, pOwner->GetPosition(), dt, pDesc->m_nWeaponType.Ref(), fActualDamage, fRatio );
} else {
pShotInfo = new MTD_ShotInfo;
pShotInfo->nLowId = pickinfo.pObject->GetUID().Low;
pShotInfo->fDamage = fActualDamage;
pShotInfo->fPosX = pOwner->GetPosition().x;
pShotInfo->fPosY = pOwner->GetPosition().y;
pShotInfo->fPosZ = pOwner->GetPosition().z;
pShotInfo->fRatio = fRatio;
pShotInfo->nDamageType = dt;
pShotInfo->nWeaponType = pDesc->m_nWeaponType.Ref();
}
} else {
if(pickinfo.pObject->IsNPC() == true || strstr(ZGetGameClient()->GetChannelName(), "Lead"))
{
pickinfo.pObject->OnDamaged(pOwner, pOwner->GetPosition(), dt, pDesc->m_nWeaponType.Ref(), fActualDamage, fRatio );
}
else
{
pShotInfo = new MTD_ShotInfo;
pShotInfo->nLowId = pickinfo.pObject->GetUID().Low;
pShotInfo->fDamage = fActualDamage;
pShotInfo->fPosX = pOwner->GetPosition().x;
pShotInfo->fPosY = pOwner->GetPosition().y;
pShotInfo->fPosZ = pOwner->GetPosition().z;
pShotInfo->fRatio = fRatio;
pShotInfo->nDamageType = dt;
pShotInfo->nWeaponType = pDesc->m_nWeaponType.Ref();
}
}
if(!m_Match.IsTeamPlay() || (pTargetCharacter->GetTeamID()!=pObject->GetTeamID()))
{
bHitEnemy = true;
}
v1 = pos;
v2 = pickinfo.info.vOut;
waterSound = GetWorld()->GetWaters()->CheckSpearing( v1, v2, 250, 0.3, !waterSound );
return pShotInfo;
}
ZGameClient_Ladder.cpp(269):
Code:
int nAntiLead = 0;
MButton* pButton2 = (MButton*)pResource->FindWidget("AntiLeadCheckBox");
if ((pButton2) && (pButton2->GetCheck()))
{
nAntiLead = 1;
}
// ¿©±â¼ ½ÇÁ¦·Î ¿äû
ZPostLadderRequestChallenge(ppMember, nCount, nBalancedMatching, nAntiLead);
ZPost.h(906):
Code:
inline void ZPostLadderRequestChallenge(char** ppMemberCharNames, const int nMemberCount, unsigned long int nOptions, unsigned long int nAntiLead) // ÀڽűîÁö Æ÷ÇÔ
{
void* pBlobMembersName = MMakeBlobArray(sizeof(MTD_ReplierNode), nMemberCount);
for (int i = 0; i < nMemberCount; i++)
{
MTD_LadderTeamMemberNode* pMemberNode = (MTD_LadderTeamMemberNode*)MGetBlobArrayElement(pBlobMembersName, i);
strcpy(pMemberNode->szName, ppMemberCharNames[i]);
}
ZPOSTCMD4( MC_MATCH_LADDER_REQUEST_CHALLENGE, MCmdParamInt(nMemberCount), MCmdParamUInt(nOptions),
MCmdParamBlob(pBlobMembersName, MGetBlobArraySize(pBlobMembersName)), MCmdParamUInt(nAntiLead) );
MEraseBlobArray(pBlobMembersName);
}
ZGame.h(403):
Code:
MTD_ShotInfo* OnPeerShotgun_Damaged(ZObject* pOwner, float fShotTime, const rvector& pos, rvector &dir, ZPICKINFO pickinfo, DWORD dwPickPassFlag, rvector& v1, rvector& v2, ZItem *pItem, rvector& BulletMarkNormal, bool& bBulletMark, ZTargetType& nTargetType, bool& bHitEnemy);
ZCharacter.h(262):
Code:
int nDamageCaused;
int nDamageTaken;
ZCharacter.h(278):
Code:
nDamageCaused(0),
nDamageTaken(0)
ZCharacter.h(786): Replace codes:
Code:
virtual void OnDamaged(ZObject* pAttacker, rvector srcPos, ZDAMAGETYPE damageType, MMatchWeaponType weaponType, float fDamage, float fPiercingRatio=1.f, int nMeleeType=-1);
virtual void OnDamagedAPlayer(ZObject* pAttacker, rvector srcPos, ZDAMAGETYPE damageType, MMatchWeaponType weaponType, float fDamage, float fPiercingRatio=1.f, int nMeleeTpye=-1);
virtual void OnDamagedAPlayer(ZObject* pAttacker, vector<MTD_ShotInfo*> vShots);
virtual void OnScream();
ZGame.cpp(4567):
Code:
void ZGame::OnPeerShot_Shotgun(ZItem *pItem, ZCharacter* pOwnerCharacter, float fShotTime, const rvector& pos, const rvector& to)
{
// ³» ij¸¯ÅÍ È¤Àº ³»°¡ º¸°íÀִ ij¸¯ÅÍ
ZCharacter *pTargetCharacter = ZGetGameInterface()->GetCombatInterface()->GetTargetCharacter();
if(!pTargetCharacter) return;
//// µð¹ö±×¿ë ´ýÇÁ
//{
// if(strcmp("ÆøÁÖõ»ç´ÙÅ©",pTargetCharacter->GetProperty()->szName)==0) {
// mlog("shot : %3.3f \n",fShotTime);
// }
//}
MMatchItemDesc *pDesc = pItem->GetDesc();
if(!pDesc) { _ASSERT(false); return; }
#define SHOTGUN_BULLET_COUNT 12
#define SHOTGUN_DIFFUSE_RANGE 0.1f
if (pOwnerCharacter == NULL) return;
// ¸ðµç»ç¶÷ÀÌ °°Àº random seed ¸¦ °®µµ·Ï °°Àº°ªÀ¸·Î ÃʱâÈ ÇØÁØ´Ù
int *seed=(int*)&fShotTime;
srand(*seed);
bool bHitGuard=false,bHitBody=false,bHitGround=false,bHitEnemy=false;
rvector GuardPos,BodyPos,GroundPos;
bool waterSound = false;
rvector v1, v2;
rvector dir;
rvector origdir = to - pos;
Normalize(origdir);
int nHitCount = 0;
vector<MTD_ShotInfo*> vShots;
ZPICKINFO pickinfo;
for(int i=0;i<SHOTGUN_BULLET_COUNT;i++)
{
dir = origdir;
{
// ¿ÀÂ÷°ª - ¹Ýµ¿´ë½Å ½Ã¹ü»ï¾Æ ³ÖÀ½
rvector r, up(0,0,1), right;
D3DXQUATERNION q;
D3DXMATRIX mat;
float fAngle = (rand() % (31415 * 2)) / 1000.0f;
float fForce = RANDOMFLOAT*SHOTGUN_DIFFUSE_RANGE;
D3DXVec3Cross(&right,&dir,&up);
D3DXVec3Normalize(&right,&right);
D3DXMatrixRotationAxis(&mat, &right, fForce);
D3DXVec3TransformCoord(&r, &dir, &mat);
D3DXQuaternionRotationAxis(&q, &dir, fAngle);
D3DXMatrixRotationQuaternion(&mat, &q);
D3DXVec3TransformCoord(&r, &r, &mat);
dir=r;
}
rvector BulletMarkNormal;
bool bBulletMark = false;
ZTargetType nTargetType = ZTT_OBJECT;
ZPICKINFO pickinfo;
memset(&pickinfo,0,sizeof(ZPICKINFO));
// ÃѾËÀº ·ÎÄÏÀÌ Åë°úÇϴ°÷µµ Åë°úÇÑ´Ù
const DWORD dwPickPassFlag=RM_FLAG_ADDITIVE | RM_FLAG_HIDE | RM_FLAG_PASSROCKET | RM_FLAG_PASSBULLET;
//jintriple3 µð¹ö±× ·¹Áö½ºÅÍ ÇÙ ¹æ¾î ÇÔ¼ö..
MTD_ShotInfo* pShotInfo = OnPeerShotgun_Damaged( pOwnerCharacter, fShotTime, pos, dir, pickinfo, dwPickPassFlag, v1, v2, pItem, BulletMarkNormal, bBulletMark, nTargetType, bHitEnemy);
if (pShotInfo)
vShots.push_back(pShotInfo);
/* if(g_pGame->PickHistory(pOwnerCharacter,fShotTime,pos,pos+10000.f*dir,&pickinfo,dwPickPassFlag))
{
ZObject *pObject = pickinfo.pObject;
if(pObject)
{
bool bGuard = pObject->IsGuard() && (pickinfo.info.parts!=eq_parts_legs) && // ´Ù¸®´Â ¸·À»¼ö¾ø´Ù
DotProduct(dir,pObject->GetDirection())<0;
if(bGuard)
{
rvector t_pos = pObject->GetPosition();
t_pos.z += 100.f;
ZGetEffectManager()->AddSwordDefenceEffect(t_pos+(-dir*50.f),-dir);
pObject->OnGuardSuccess();
nTargetType = ZTT_CHARACTER_GUARD;
bHitGuard=true;
}
else
{
ZActor* pATarget = MDynamicCast(ZActor,pObject);
bool bPushSkip = false;
if(pATarget) {
bPushSkip = pATarget->GetNPCInfo()->bNeverPushed;
}
float fKnockbackForce = pItem->GetKnockbackForce() / (.5f*float(SHOTGUN_BULLET_COUNT));
if(bPushSkip) {
// ZGetSoundEngine()->PlaySound("fx_bullethit_mt_met");
rvector vPos = pOwnerCharacter->GetPosition() + (pObject->GetPosition() - pOwnerCharacter->GetPosition()) * 0.1f;
ZGetSoundEngine()->PlaySound("fx_bullethit_mt_met", vPos );
fKnockbackForce = 1.0;
}
pObject->OnKnockback( dir, fKnockbackForce );
float fActualDamage = CalcActualDamage(pOwnerCharacter, pObject, (float)pDesc->m_nDamage);
float fRatio = ZItem::GetPiercingRatio( pDesc->m_nWeaponType , pickinfo.info.parts );
ZDAMAGETYPE dt = (pickinfo.info.parts==eq_parts_head) ? ZD_BULLET_HEADSHOT : ZD_BULLET;
//jintriple3 ¿©±âµµ µð¹ö±× ·¹Áö½ºÅÍ ÇÙÀ¸·ÎºÎÅÍ ¾ÈÀüÇÏÁö ¾ÊÀ½...À̰Š¿ÏÀü ³ë°¡´Ù..¤Ì¤Ì
pObject->OnDamaged(pOwnerCharacter, pOwnerCharacter->GetPosition(), dt, pDesc->m_nWeaponType, fActualDamage, fRatio );
nTargetType = ZTT_CHARACTER;
bHitBody=true;
// ¿ì¸®Æí ¶§¸°°ÍÀº combo ¿¡ Æ÷ÇÔµÇÁö ¾ÊÀ½
if(!m_Match.IsTeamPlay() || (pTargetCharacter->GetTeamID()!=pObject->GetTeamID()))
{
bHitEnemy=true;
}
}
v1 = pos;
v2 = pickinfo.info.vOut;
}
else
if(pickinfo.bBspPicked)
// if(pickinfo.bBspPicked || (pCharacter == pOwnerCharacter))
{
bHitGround=true;
nTargetType = ZTT_OBJECT;
v1 = pos;
v2 = pickinfo.bpi.PickPos;
// ÃÑź ÈçÀû
BulletMarkNormal.x = pickinfo.bpi.pInfo->plane.a;
BulletMarkNormal.y = pickinfo.bpi.pInfo->plane.b;
BulletMarkNormal.z = pickinfo.bpi.pInfo->plane.c;
Normalize(BulletMarkNormal);
bBulletMark = true;
// ¸Â´Â°÷ ¹Ý°æ 20cm °¡ ȸ鿡 µé¾î¿À¸é ±×¸°´Ù
bool bDrawTargetEffects = isInViewFrustum(v2,20.f,RGetViewFrustum());
if(bDrawTargetEffects)
ZGetEffectManager()->AddBulletMark(v2,BulletMarkNormal);
*/
/*
///////////////////////////////////////////////////////////////////////////////////////////////////////
// by º£´Ï
// ¼¦°ÇÀÌ ÀÌÆåÆ®°¡ Á¦´ë·Î ³ª¿ÀÁö ¾Ê¾Æ¼ ¼öÁ¤
#define TARGET_SMOKE_MAX_SCALE 50.0f
#define TARGET_SMOKE_MIN_SCALE 40.0f
#define TARGET_SMOKE_LIFE_TIME 0.9f
#define TARGET_SMOKE_VELOCITY 0.2f // meter/sec
#define TARGET_SMOKE_ACCEL rvector(0,0,100.f) // meter/sec
int max_cnt = 0;
if(GetEffectLevel()==0) max_cnt = 5;
else if(GetEffectLevel()==1) max_cnt = 3;
else if(GetEffectLevel()==2) max_cnt = 1;
if(max_cnt) {
//m_EffectManager.AddShotEffect(v,size, v2, BulletMarkNormal, nTargetType, NULL,ring_draw,wtype,pOwnerCharacter);
for(int i=0; i<max_cnt; i++) {
rvector p = v2+BulletMarkNormal*TARGET_SMOKE_MIN_SCALE*float(i)*0.5f + rvector(fmod((float)rand(), TARGET_SMOKE_MIN_SCALE), fmod((float)rand(), TARGET_SMOKE_MIN_SCALE), fmod((float)rand(), TARGET_SMOKE_MIN_SCALE));
float fSize = 1.0f+float(rand()%100)/100.0f;
m_EffectManager.AddSmokeEffect(m_EffectManager.m_pEBSSmokes[rand()%SMOKE_COUNT], p, BulletMarkNormal*TARGET_SMOKE_VELOCITY,rvector(0,100.f,0), TARGET_SMOKE_MIN_SCALE*fSize, TARGET_SMOKE_MAX_SCALE*fSize, TARGET_SMOKE_LIFE_TIME);
}
m_EffectManager.AddLightFragment(v2,BulletMarkNormal);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
*//*
}
else {
_ASSERT(false);
return;
}
}
else {
v1 = pos;
v2 = pos+dir*10000.f;
nTargetType = ZTT_NOTHING;
}
waterSound = GetWorld()->GetWaters()->CheckSpearing( v1, v2, 250, 0.3, !waterSound );
}
*/
/////////////////////////////////////////////////////
}
if (vShots.size() > 0 && !ZGetGameInterface()->GetCombatInterface()->GetObserverMode())
{
ZCharacter* pCharacter = (ZCharacter*)ZGetCharacterManager()->Find(MUID(0, vShots[0]->nLowId));
if (pCharacter && !m_pMyCharacter->IsDie())
{
if (!GetMatch()->IsTeamPlay())
pCharacter->OnDamagedAPlayer(pOwnerCharacter, vShots);
else if (GetMatch()->IsTeamPlay() && ZGetGame()->GetMatch()->GetTeamKillEnabled() && pCharacter->IsTeam(m_pMyCharacter))
pCharacter->OnDamagedAPlayer(pOwnerCharacter, vShots);
else if (GetMatch()->IsTeamPlay() && !pCharacter->IsTeam(m_pMyCharacter))
pCharacter->OnDamagedAPlayer(pOwnerCharacter, vShots);
}
vShots.clear();
}
if(bHitEnemy) {
CheckStylishAction(pOwnerCharacter);
CheckCombo(pOwnerCharacter, NULL,true);
}
ZApplication::GetSoundEngine()->PlaySEFire(pItem->GetDesc(), pos.x, pos.y, pos.z, (pOwnerCharacter==m_pMyCharacter));
// º¸ÀÌÁö ¾ÊÀ¸¸é ÀÌÆåÆ®¸¦ ±×¸±ÇÊ¿ä´Â ¾ø´Ù
if(!pOwnerCharacter->IsRendered()) return;
rvector v[6];
int _size = pOwnerCharacter->GetWeapondummyPos(v);
dir = to - pos;
Normalize(dir);
//if(ZGetConfiguration()->GetExtra()->bShotgunSmoke == true) {
ZGetEffectManager()->AddShotgunEffect(const_cast<rvector&>(pos),v[1],dir,pOwnerCharacter);
//}
ZGetEffectManager()->AddBloodEffect(const_cast<rvector&>(pos), dir);
// ÃÑ ½ò¶§ ¶óÀÌÆ® Ãß°¡
ZCharacter* pChar;
if( ZGetConfiguration()->GetVideo()->bDynamicLight && pOwnerCharacter != NULL )
{
pChar = pOwnerCharacter;
if( pChar->m_bDynamicLight )
{
pChar->m_vLightColor = g_CharLightList[SHOTGUN].vLightColor;
pChar->m_fLightLife = g_CharLightList[SHOTGUN].fLife;
}
else
{
pChar->m_bDynamicLight = true;
pChar->m_vLightColor = g_CharLightList[SHOTGUN].vLightColor;
pChar->m_vLightColor.x = 1.0f;
pChar->m_iDLightType = SHOTGUN;
pChar->m_fLightLife = g_CharLightList[SHOTGUN].fLife;
}
}
// m_flags.CheckSpearing( v1, v2, SHOTGUN_SPEAR_EMBLEM_POWER );
if(Z_VIDEO_DYNAMICLIGHT)
ZGetStencilLight()->AddLightSource(v1, 2.0f, 200 );
}
Zitem.cpp(160):
Code:
case MWT_PISTOL:
case MWT_PISTOLx2:
{
if(bHead) fRatio = 0.7f;
else fRatio = 0.5f;
}
break;
case MWT_REVOLVER:
case MWT_REVOLVERx2:
{
if(bHead) fRatio = 0.75f; //0.9
else fRatio = 0.55f; //0.7
}
break;
MLadderPicker.h(70):
Quote:
bool PickMatch(int* pGroupA, int* pGroupB);
MMatchServer.h(416):
Quote:
void LadderGameLaunch(MLadderGroup* pGroupA, MLadderGroup* pGroupB);
*If any declarations missing please inform. m really messed with this stuff lol..
CREDITS:
SecretsOThePast : For source
ThePhailure1772: Fixing antilead (Made perfect)
Myself: For sorting and releasing
Also tell me if anyone helped me with this source.
Re: New Anti-lead Source 1.5 (FIXED 2012)
Nice watch in Igunz source bro.... LOLOL
but its ok for other ppl what cant see the line's ;P
Re: New Anti-lead Source 1.5 (FIXED 2012)
Re: New Anti-lead Source 1.5 (FIXED 2012)
How many more times is this going to be posted, jesus.
Re: New Anti-lead Source 1.5 (FIXED 2012)
Quote:
Originally Posted by
ThePhailure772
How many more times is this going to be posted, jesus.
This source has clan antilead options + checkbox + some values fixed by you LOL ... i guess better than ur recent antilead thread .
Re: New Anti-lead Source 1.5 (FIXED 2012)
because you would miss the xml ;)
Re: New Anti-lead Source 1.5 (FIXED 2012)
How hard is it to write your own anti-lead?
Re: New Anti-lead Source 1.5 (FIXED 2012)
Quote:
Originally Posted by
Vusion
How hard is it to write your own anti-lead?
For people that can't program it's extremely hard.
It requires quite a bit of knowledge how to create one.
Re: New Anti-lead Source 1.5 (FIXED 2012)
For people like me who don't even know where to begin on even reading the source, let alone writing it...
I think I'll stick to my web programming.
1 Attachment(s)
Re: New Anti-lead Source 1.5 (FIXED 2012)
Error cscomon :
Attachment 114988
codigo error :
Quote:
source\mladdermgr.cpp(184) : Error c2065: 'pgroupa' : Undeclared identifier
source\mladdermgr.cpp(184) : Error c2227: Left of '->getantileadmatching' must point to class/struct/union
type is ''unknown-type''
source\mladdermgr.cpp(184) : Error c2065: 'pgroupb' : Undeclared identifier
source\mladdermgr.cpp(184) : Error c2227: Left of '->getantileadmatching' must point to class/struct/union
Re: New Anti-lead Source 1.5 (FIXED 2012)
Quote:
Originally Posted by
kike2
MLadderPicker.h(70):
Quote:
bool PickMatch(int* pGroupA, int* pGroupB);
MMatchServer.h(416):
Quote:
void LadderGameLaunch(MLadderGroup* pGroupA, MLadderGroup* pGroupB);
2 Attachment(s)
Re: New Anti-lead Source 1.5 (FIXED 2012)
Quote:
MLadderPicker.h(70):
bool PickMatch(int* pGroupA, int* pGroupB);
MMatchServer.h(416):
void LadderGameLaunch(MLadderGroup* pGroupA, MLadderGroup* pGroupB);
ERROR 6 D:
Attachment 115027Attachment 115028
Thanks But I'll do it again I think something movi
Re: New Anti-lead Source 1.5 (FIXED 2012)
Quote:
Originally Posted by
kike2
Replace line not copy !
1 Attachment(s)
Re: New Anti-lead Source 1.5 (FIXED 2012)
Quote:
Replace line not copy !
thanks but returns the same error D:
Attachment 115029
Re: New Anti-lead Source 1.5 (FIXED 2012)
I'd like to kno what is exactly in this particular antilead lol. And where wud the xml also be for this lol?