• Networking: The investigation is still on the way, we've switched to backup telecom carriers since the episode but we're still working in settling everything as it must be. We'll add more updates as we have them available. Incoming and outgoing emails will be restricted, and user registration has been disabled until the issue is resolved.

New Anti-lead Source 1.5 (FIXED 2012)

Status
Not open for further replies.
Joined
Dec 6, 2011
Messages
879
Reaction score
108
Location
Lost World
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):
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:
Error cscomon :

Captura6 - New Anti-lead Source 1.5 (FIXED 2012) - RaGEZONE Forums

codigo error :

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
 
And they are supposed to do with this, because this incliuda and if the replacement will be the same, you have to remove it from there?.

MLadderPicker.h(70):
bool PickMatch(int* pGroupA, int* pGroupB);

MMatchServer.h(416):
void LadderGameLaunch(MLadderGroup* pGroupA, MLadderGroup* pGroupB);
 
Ronny , to everything true ? , and function to checkbox in if or switch , true , false ?

Checkbox agree my interface not work , for switch :3


Sorry for my english :c
 
Status
Not open for further replies.
Back