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):
MSharedCommandTable.cpp(1712):
MSharedCommandTable.h(682):
MLadderGroup.h(18):
MLadderGroup.h(36):
MLadderGroup.h(50):
MLadderGroup.h(51):
MLadderMgr.cpp(185):
MMatchStage.h(168):
MMatchStage.h(317):
MMatchStage.h(328):
MMatchStageSetting.cpp(46):
MMatchStageSetting.h(79):
MMatchStageSetting.h(174):
MMatchStageSetting.h(198):
MMatchServer.h(424):
MMatchServer_Ladder.cpp(145):
MMatchServer_Ladder.cpp(216):
MMatchServer_Ladder.cpp(290):
MMatchServer_OnCommand.cpp(1351):
MMatchServer_OnCommand.cpp(1355):
MMatchServer_OnCommand.cpp(1363):
MMatchServer_Stage.cpp(1579):
Gunz:
ZInterfaceListener.cpp(1961):
ZCharacter.cpp(4421):
ZCharacter.cpp(4443):
ZGame.cpp(1839):
ZGame.cpp(4282):
ZGame.cpp(4843):
ZGameClient_Ladder.cpp(269):
ZPost.h(906):
ZGame.h(403):
ZCharacter.h(262):
ZCharacter.h(278):
ZCharacter.h(786): Replace codes:
ZGame.cpp(4567):
Zitem.cpp(160):
MLadderPicker.h(70):
MMatchServer.h(416):
*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.
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):
Code:
bool bAntiLead;
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):
bool PickMatch(int* pGroupA, int* pGroupB);
MMatchServer.h(416):
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.
Last edited: