bem, este chumbo anti é bom, com tag [LEAD] para o quarto e canal.
LIBERADO PELO INTELWORKER
--ZCharacter.h Line 783--ZCharacter.cpp Line: 4374PHP Code:
virtual void OnDamagedAPlayer(ZObject* pAttacker, rvector srcPos, ZDAMAGETYPE damageType, MMatchWeaponType weaponType, float fDamage, float fPiercingRatio=1.f, int nMeleeTpye=-1);virtual void OnDamagedAPlayer(vector<MTD_ShotInfo*> vShots);
PHP 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)));
}
}
}void ZCharacter::OnDamagedAPlayer(vector<MTD_ShotInfo*> vShotInfo)
{
if (vShotInfo.size() > 0)
{
if (ZGetGameClient()->GetPlayerUID().Low != GetUID().Low)
{
void* pBlobArray = MMakeBlobArray(sizeof(MTD_ShotInfo), vShotInfo.size());
for (int i = 0; i < vShotInfo.size(); ++i)
{
MTD_ShotInfo* pShot = vShotInfo[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 Line: 4475PHP Code:
vector<MTD_ShotInfo*> vShots;
--ZGame.cpp Line: 4511PHP Code:
MTD_ShotInfo* pShotInfo = OnPeerShotgun_Damaged( pOwnerCharacter, fShotTime, pos, dir, pickinfo, dwPickPassFlag, v1, v2, pItem, BulletMarkNormal, bBulletMark, nTargetType, bHitEnemy);
--ZGame.cpp Line: 4648PHP Code:
if (vShots.size() > 0 && !ZGetGameInterface()->GetCombatInterface()->GetObserverMode())
{
ZCharacter* pCharacter = (ZCharacter*)ZGetCharacterManager()->Find(MUID(0, vShots[0]->nLowId));
if (pOwnerCharacter->GetUID() == ZGetGameClient()->GetPlayerUID())
{
if (!GetMatch()->IsTeamPlay())
{
pCharacter->OnDamagedAPlayer(vShots);
}
else if (GetMatch()->IsTeamPlay() && ZGetGame()->GetMatch()->GetTeamKillEnabled() && pCharacter->IsTeam(pOwnerCharacter))
{
pCharacter->OnDamagedAPlayer(vShots);
}
else if (GetMatch()->IsTeamPlay() && !pCharacter->IsTeam(pOwnerCharacter))
{
pCharacter->OnDamagedAPlayer(vShots);
}
}
vShots.clear();
}
--ZGame.cpp Line: 4171PHP Code:
if(pickinfo.pObject->IsNPC() == 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 );
--Zitem.cpp Line: 171PHP Code:
if(bHead) fRatio = 0.8f;
else fRatio = 0.6f;
--MMatchTransDataType.h Line: 576--MMatchClient.h Line: 151PHP Code:
struct MTD_ShotInfo{
unsigned long nLowId;
float fPosX;
float fPosY;
float fPosZ;
float fDamage;
float fRatio;
char nDamageType;
char nWeaponType;
};--ZGameClient.h Line: 399PHP Code:
MPacketCrypter GetPeerPacketCrypter() { return m_PeerPacketCrypter; }
--MSharedCommandTable.h Line: 680PHP Code:
#define ZPOSTCMDLEAD(_ID, _UID, _P0) { MCommand* pC=ZNewCmd(_ID); pC->AP(_P0); pC->m_Receiver = _UID; ZPostCommand(pC); }
--MSharedCommandTable.cpp Line: 1710PHP Code:
#define MC_GUNZ_ANTILEAD 50010
-ZGame.cpp Line: 1806PHP Code:
C(MC_GUNZ_ANTILEAD, "Match.Gunz.AntiLead", "AntiLead Information", MCDT_PEER2PEER)
P(MPT_BLOB, "ShotInfo");--ZCharacter.h Line: 262PHP Code:
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 && 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);
pCharacter->GetStatus().CheckCrc();
pCharacter->GetStatus().Ref().nDamageCaused += pInfo->fDamage;
pCharacter->GetStatus().MakeCrc();
}
}
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;
}PHP Code:
int nDamageCaused;
int nDamageTaken;
--h ZCharacter.Line: 2771
PHP Code:
nDamageCaused(0),nDamageTaken(0)
--- neekeri
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);
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_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()->GetStageName(), "[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;
}
-- keltainen poika
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);
Creditos: MatheusRose Da Ragezone Inter.
Funciona perfectamente?
ResponderExcluirmano esse ultimo codigo vai na onde ?
ResponderExcluir--h ZCharacter.Line: 2771
não achei lugar nenhum para adicionar essa modo
mano esse ultimo codigo vai na onde ?
ResponderExcluir--h ZCharacter.Line: 2771
não achei lugar nenhum para adicionar essa modo
mano esse ultimo codigo vai na onde ?
ResponderExcluir--h ZCharacter.Line: 2771
não achei lugar nenhum para adicionar essa modo