• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ TO_PLAYER函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中TO_PLAYER函数的典型用法代码示例。如果您正苦于以下问题:C++ TO_PLAYER函数的具体用法?C++ TO_PLAYER怎么用?C++ TO_PLAYER使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了TO_PLAYER函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: SoulStoneResurrection

bool SoulStoneResurrection(uint32 i, Aura* a, bool apply)
{
    Unit* u_target = a->GetTarget();
    if (!u_target->IsPlayer())
        return true;

    Player* p_target = TO_PLAYER(u_target);
    uint32 soulstone = a->GetSpellProto()->EffectMiscValue[0];

    if (apply)
    {
        p_target->SetSoulStone(soulstone);
        p_target->SetSoulStoneReceiver((uint32)a->m_casterGuid);
    }
    else if (p_target->isAlive())
    {
        p_target->SetSoulStone(0);
        p_target->SetSoulStoneReceiver(0);
    }
    return true;
}
开发者ID:lev1976g,项目名称:easywow,代码行数:21,代码来源:WarlockSpells.cpp


示例2: ProtectingOurOwn

// Protecting Our Own
bool ProtectingOurOwn(uint32 i, Spell* pSpell)
{
    if(pSpell->u_caster == NULL || !pSpell->u_caster->IsPlayer())
        return true;

    Player* plr = TO_PLAYER(pSpell->u_caster);
    QuestLogEntry *qle = plr->GetQuestLogForEntry(10488);

    if(qle == NULL)
        return true;

    if ( qle->GetMobCount( 0 ) < qle->GetQuest()->required_mobcount[0] )
    {
        uint32 NewCount = qle->GetMobCount( 0 ) + 1;
        qle->SetMobCount( 0, NewCount );
        qle->SendUpdateAddKill( 0 );
        qle->UpdatePlayerFields();
    }

    return true;
}
开发者ID:vata,项目名称:wowice,代码行数:22,代码来源:Quest_BladeEdge_Mountains.cpp


示例3: RuneOfDistortion

bool RuneOfDistortion(uint32 i, Spell * pSpell)
{
	if ( pSpell == NULL || pSpell->p_caster == NULL )
		return true;
	
	Player * plr = TO_PLAYER(pSpell->u_caster);
	if( plr == NULL )
		return true;

	Creature * pCreature = sEAS.SpawnCreature(plr, 32162, plr->GetPositionX(), plr->GetPositionY(), plr->GetPositionZ(),0, 0);
	pCreature->Despawn(5*60*1000, 0);
	
	QuestLogEntry *qle = plr->GetQuestLogForEntry(13312);
	if(qle == NULL)
	{
		qle = plr->GetQuestLogForEntry(13337);
		if(qle == NULL)
			return true;
	}
	return true;
}
开发者ID:vata,项目名称:wowice,代码行数:21,代码来源:QIspells.cpp


示例4: PoweringOurDefenses

bool PoweringOurDefenses(uint32 i, Spell* pSpell)
{
    if(pSpell->u_caster->IsPlayer() == false)
        return true;

    Player * plr = TO_PLAYER(pSpell->u_caster);

    QuestLogEntry *qle = plr->GetQuestLogForEntry( 8490 );
    if( qle == NULL )
        return true;

    // Angelis : Need to script the scourge attack

    if( qle && qle->GetMobCount(0) < qle->GetQuest()->required_mobcount[0] )
    {
        qle->SetMobCount(0, qle->GetMobCount(0)+1);
        qle->SendUpdateAddKill(0);
        qle->UpdatePlayerFields();
    }
    return true;
}
开发者ID:vata,项目名称:wowice,代码行数:21,代码来源:Quest_EversongWoods.cpp


示例5: RodofPurification

bool RodofPurification(uint32 i, Spell * pSpell)
{
	Player * pPlayer = TO_PLAYER(pSpell->u_caster);
	if(!pPlayer)
		return true;

	if(!pSpell->u_caster->IsPlayer())
		return true;

	QuestLogEntry *qle = pPlayer->GetQuestLogForEntry(10839);
	if(qle == NULL)
		return true;

	GameObject *  Darkstone = pPlayer->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords(-2512, 5418, 0, 185191);
	if(Darkstone != NULL)
	{
		if(pPlayer->CalcDistance(pPlayer, Darkstone) < 15)
			qle->SendQuestComplete();
	}
	return true;
}
开发者ID:vata,项目名称:wowice,代码行数:21,代码来源:QIspells.cpp


示例6: OrbOfMurlocControl

bool OrbOfMurlocControl(uint32 i, Spell* pSpell)
{
	if(pSpell->m_caster->IsPlayer() == false)
		return true;

	Player* pPlayer = TO_PLAYER( pSpell->u_caster );

	QuestLogEntry *pQuest = pPlayer->GetQuestLogForEntry(11541);
	if(pQuest == NULL)
		return true;

	Creature* pTarget;
	
	for(ObjectSet::iterator itr = pSpell->m_caster->GetInRangeSetBegin(); itr != pSpell->m_caster->GetInRangeSetEnd(); ++itr)
	{
		if( (*itr)->IsUnit() && TO_UNIT(*itr)->IsCreature() )
			pTarget = TO_CREATURE(*itr);
		else
			continue;

		if( pSpell->m_caster->CalcDistance(pTarget) > 5 )
			continue;

		if( pTarget->GetEntry() == 25084)
		{
		  if(pQuest->GetMobCount(0) < pQuest->GetQuest()->required_mobcount[0])
		  {
			pQuest->SetMobCount(0, pQuest->GetMobCount(0) + 1);
			pQuest->SendUpdateAddKill(0);		
			Creature* FreedGreengill = sEAS.SpawnCreature(pPlayer, 25085, pTarget->GetPositionX(),
			pTarget->GetPositionY(), pTarget->GetPositionZ(), pTarget->GetOrientation(), 0);
			FreedGreengill->Despawn(6*60*1000, 0);
			pTarget->Despawn(0, 6*60*1000);
			pQuest->UpdatePlayerFields();
			return true;
		  }  
		}
  }
  return true;
}
开发者ID:vata,项目名称:wowice,代码行数:40,代码来源:Quest_Isle_of_QuelDanas.cpp


示例7: GetDBCCastTime

/// Spell Target Handling for type 33: Party members of totem, inside given range
void Spell::SpellTargetNearbyPartyMembers(uint32 i, uint32 j)
{
	// this implementation is wrong.... this one is for totems
	if( u_caster != NULL )
	{
		if( u_caster->GetTypeId()==TYPEID_UNIT)
		{
			if( TO_CREATURE( u_caster )->IsTotem() )
			{
				float r = GetDBCCastTime(i);
				r *= r;

				Player* p = TO_PLAYER( TO_CREATURE(u_caster)->GetSummonOwner());

				if( p == NULL)
					return;

				if(IsInrange(m_caster->GetPositionX(),m_caster->GetPositionY(),m_caster->GetPositionZ(),p,r))
					_AddTargetForced(p->GetGUID(), i);

				SubGroup * pGroup = p->GetGroup() ?
					p->GetGroup()->GetSubGroup(p->GetSubGroup()) : 0;

				if(pGroup)
				{
					p->GetGroup()->Lock();
					for(GroupMembersSet::iterator itr = pGroup->GetGroupMembersBegin();
						itr != pGroup->GetGroupMembersEnd(); itr++)
					{
						if(!(*itr)->m_loggedInPlayer || p == (*itr)->m_loggedInPlayer)
							continue;
						if(IsInrange(m_caster->GetPositionX(),m_caster->GetPositionY(),m_caster->GetPositionZ(),(*itr)->m_loggedInPlayer,r))
							_AddTargetForced((*itr)->m_loggedInPlayer->GetGUID(), i);
					}
					p->GetGroup()->Unlock();
				}
			}
		}
	}
}
开发者ID:Bootz,项目名称:arcticdev,代码行数:41,代码来源:SpellTarget.cpp


示例8: HealingTheLake

bool HealingTheLake(uint32 i, SpellPointer pSpell)
{
	if ( pSpell == NULL || pSpell->u_caster == NULL || !pSpell->u_caster->IsPlayer() )
		return true;

	PlayerPointer pPlayer = TO_PLAYER( pSpell->u_caster );

	QuestLogEntry *pQuest = pPlayer->GetQuestLogForEntry( 9294 );
	if ( pQuest == NULL )
		return true;

	if ( pQuest->GetMobCount( 0 ) < pQuest->GetQuest()->required_mobcount[0] )
	{
		pQuest->SetMobCount( 0, pQuest->GetMobCount( 0 ) + 1 );
		pQuest->SendUpdateAddKill( 0 );
		pQuest->UpdatePlayerFields();
		
		return true;
	}
	
	return true;
}
开发者ID:Vanj-crew,项目名称:HearthStone-Emu,代码行数:22,代码来源:Azuremyst_Isle.cpp


示例9: OnLoad

    void OnLoad()
    {
        if(!_unit->IsSummon())
            return;

        Unit* summoner = TO< Summon* >(_unit)->GetOwner();

        if(summoner != NULL)
        {
            if(summoner->IsPlayer())
            {
                Player* p = TO_PLAYER(summoner);
                if(p->HasQuest(11608))
                {
                    GameObject* pSinkhole = p->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords(p->GetPositionX(), p->GetPositionY(), p->GetPositionZ(), 300171);
                    if(pSinkhole != NULL)
                    {
                        _unit->CastSpell(_unit, 45502, true);

                        float posX = pSinkhole->GetPositionX();
                        if(posX == 2657.13f)
                            sEAS.KillMobForQuest(p, 11608, 0);

                        if(posX == 2716.02f)
                            sEAS.KillMobForQuest(p, 11608, 1);

                        if(posX == 2877.96f)
                            sEAS.KillMobForQuest(p, 11608, 2);

                        if(posX == 2962.16f)
                            sEAS.KillMobForQuest(p, 11608, 3);

                    }
                }
            }
        }
        _unit->Despawn(500, 0);
    }
开发者ID:treetrees,项目名称:Edge-of-Chaos,代码行数:38,代码来源:Quest_BoreanTundra.cpp


示例10: WaitingToResurrect

bool WaitingToResurrect(uint32 i, Aura* a, bool apply)
{
	Unit* u_target = a->GetTarget();

	if(!u_target->IsPlayer())
		return true;

	Player* p_target = TO_PLAYER(u_target);

	if(apply)		// already applied in opcode handler
		return true;

	uint64 crtguid = p_target->m_areaSpiritHealer_guid;

	Creature* pCreature = p_target->IsInWorld() ? p_target->GetMapMgr()->GetCreature(GET_LOWGUID_PART(crtguid)) : NULL;

	if(pCreature == NULL || p_target->m_bg == NULL)
		return true;

	p_target->m_bg->RemovePlayerFromResurrect(p_target, pCreature);

	return true;
}
开发者ID:Antares84,项目名称:arcemu,代码行数:23,代码来源:MiscSpells.cpp


示例11: DouseEternalFlame

bool DouseEternalFlame(uint32 i, Spell* pSpell)
{
    if (pSpell->u_caster == NULL || !pSpell->u_caster->IsPlayer())
        return true;

    Player* plr = TO_PLAYER(pSpell->u_caster);
    QuestLogEntry *qle = plr->GetQuestLogForEntry(9737);
    if(qle == NULL)
        return true;

    GameObject* Flame = plr->GetMapMgr()->GetInterface()->GetGameObjectNearestCoords(3678, -3640, 139, 182068);
    if(Flame != NULL)
    {
        if(plr->CalcDistance(plr, Flame) < 30)
            if(qle->GetMobCount(0) < qle->GetQuest()->required_mobcount[0])
            {
                qle->SetMobCount(0, qle->GetMobCount(0)+1);
                qle->SendUpdateAddKill(0);
                qle->UpdatePlayerFields();
            }
    }
    return true;
}
开发者ID:Bootz,项目名称:arcticdev,代码行数:23,代码来源:Paladin.cpp


示例12: AIUpdate

        void AIUpdate()
        {
            // Let's see if we are netted
            Aura* a = _unit->FindAura(38177);
            if (a != nullptr)
            {
                Unit* Caster = a->GetUnitCaster();
                if (!Caster)
                    return;

                if (Caster->IsPlayer())
                {

                    QuestLogEntry* qle = TO_PLAYER(Caster)->GetQuestLogForEntry(10747);
                    if (qle != nullptr)
                    {
                        // casting the spell that will create the item for the player
                        _unit->CastSpell(Caster, 38178, true);
                        _unit->Despawn(1000, 360000);
                    }
                }
            }
        }
开发者ID:TheGhostGroup,项目名称:AscEmu,代码行数:23,代码来源:Quest_BladeEdge_Mountains.cpp


示例13: ForceofNeltharakuSpell

bool ForceofNeltharakuSpell(uint32 i, SpellPointer pSpell) // Becoming a Shadoweave Tailor
{
	if(pSpell->u_caster->IsPlayer() == false)
		return true;

	PlayerPointer	pPlayer= TO_PLAYER(pSpell->u_caster);
	UnitPointer		pUnit	= TO_UNIT(pPlayer->GetMapMgr()->GetCreature(GET_LOWGUID_PART(pPlayer->GetSelection())));

	if(pUnit == NULLUNIT)
		return true;

	if(!pUnit->IsCreature())
		return true;

	CreaturePointer		 pTarget	= TO_CREATURE(pUnit);
	QuestLogEntry	 *pQuest	= pPlayer->GetQuestLogForEntry(10854);
	if(pQuest == NULL)
		return true;

	if(pTarget->GetEntry() == 21722 && pPlayer->CalcDistance(pUnit)<30)
	{
		if ( pQuest && pQuest->GetMobCount(0) < pQuest->GetQuest()->required_mobcount[0] )
		{
			pTarget->CastSpell(pPlayer, dbcSpell.LookupEntry(38775), true);
			pQuest->SetMobCount(0, pQuest->GetMobCount(0)+1);
			pQuest->SendUpdateAddKill(0);
			pQuest->UpdatePlayerFields();
			if ( pTarget->GetScript() != NULL )
			{
				MoonScriptCreatureAI *pDrakeAI = static_cast<MoonScriptCreatureAI*>(pTarget->GetScript());
				pDrakeAI->SetCanMove(true);
				pDrakeAI->SetWaypointToMove(0);
			}
		}
	}
	return true;
}
开发者ID:Vanj-crew,项目名称:HearthStone-Emu,代码行数:37,代码来源:Shadowmoon.cpp


示例14: OnDied

	void OnDied(UnitPointer mKiller)
	{
		if(mKiller->IsPlayer())
		{
			PlayerPointer mPlayer = TO_PLAYER(mKiller);
			if(mPlayer == NULL || mPlayer->GetMapMgr() == NULL || mPlayer->GetMapMgr()->GetInterface() == NULL)
				return;
			CreaturePointer  beka1 = sEAS.SpawnCreature(mPlayer, 1516, -13770.5, -6.79, 42.8, 5.7 , 0);
			beka1->GetAIInterface()->MoveTo(-13727.8, -26.2, 46.15, 4.07);
			beka1->Despawn(10*60*1000, 0);
		}
		else
		{
			PlayerPointer mPlayer = _unit->GetMapMgr()->GetInterface()->GetPlayerNearestCoords(_unit->GetPositionX(), _unit->GetPositionY(), _unit->GetPositionZ());
			if(mPlayer)
			{
				if(mPlayer == NULL || mPlayer->GetMapMgr() == NULL || mPlayer->GetMapMgr()->GetInterface() == NULL)
					return;
				CreaturePointer  beka1 = sEAS.SpawnCreature(mPlayer, 1516, -13770.5, -6.79, 42.8, 5.7 , 0);
				beka1->GetAIInterface()->MoveTo(-13727.8, -26.2, 46.15, 4.07);
				beka1->Despawn(10*60*1000, 0);
			}
		}
	}
开发者ID:Vanj-crew,项目名称:HearthStone-Emu,代码行数:24,代码来源:StranglethornVale.cpp


示例15: TO_PLAYER

/// Spell Target Handling for type 18: All Party Members around the Caster in given range NOT RAID
void Spell::SpellTargetAllPartyMembersRangeNR(uint32 i, uint32 j)
{
	Player* p = p_caster;

	if( p == NULL )
	{
		if( TO_CREATURE( u_caster)->IsTotem() )
			p = TO_PLAYER( TO_CREATURE(u_caster)->GetSummonOwner());
		else if( u_caster->IsPet() && TO_PET( u_caster )->GetPetOwner() )
			p = TO_PET( u_caster )->GetPetOwner();
	}

	if( p == NULL )
		return;

	float r = GetDBCCastTime(i);

	r *= r;
	if( IsInrange( m_caster->GetPositionX(), m_caster->GetPositionY(), m_caster->GetPositionZ(), p, r ) )
		_AddTargetForced(p->GetGUID(), i);

	SubGroup* subgroup = p->GetGroup() ? p->GetGroup()->GetSubGroup( p->GetSubGroup() ) : 0;

	if( subgroup != NULL )
	{
		p->GetGroup()->Lock();
		for(GroupMembersSet::iterator itr = subgroup->GetGroupMembersBegin(); itr != subgroup->GetGroupMembersEnd(); itr++)
		{
			if(!(*itr)->m_loggedInPlayer || m_caster == (*itr)->m_loggedInPlayer)
				continue;
			if(IsInrange(m_caster->GetPositionX(),m_caster->GetPositionY(),m_caster->GetPositionZ(),(*itr)->m_loggedInPlayer,r))
				_AddTargetForced( (*itr)->m_loggedInPlayer->GetGUID(), i );
		}
		p->GetGroup()->Unlock();
	}
}
开发者ID:Bootz,项目名称:arcticdev,代码行数:37,代码来源:SpellTarget.cpp


示例16: OnDied

        void OnDied(Unit* mKiller)
        {
            if(mKiller->IsPlayer())
            {
                Player * plr = TO_PLAYER(mKiller);
                if(plr->HasQuest(10896))
                {
                    if(Rand(90))
                    {
                        switch(_unit->GetEntry())
                        {
                            case 22307:
                                min = 4; max = 11;
                                break;
                            case 22095:
                                min = 2; max = 5;
                                break;
                        }

                        finall = min + RandomUInt(max - min);

                        float SSX = _unit->GetPositionX();
                        float SSY = _unit->GetPositionY();
                        float SSZ = _unit->GetPositionZ();
                        float SSO = _unit->GetOrientation();

                        for(uint8 i = 0; i < finall; i++)
                        {
                            Creature * NewCreature = _unit->GetMapMgr()->GetInterface()->SpawnCreature(22419, SSX + RandomFloat(3.0f), SSY + RandomFloat(3.0f), SSZ, SSO + RandomFloat(1.0f), true, false, 0, 0);
                            if ( NewCreature != NULL )
                                NewCreature->Despawn(120000, 0);
                        }
                    }
                }
            }
        }
开发者ID:Declipe,项目名称:AscEmu,代码行数:36,代码来源:Quest_Terrokar_Forest.cpp


示例17: OnDied

		void OnDied(Unit* mKiller)
		{
			if(!mKiller->IsPlayer())
				return;

			Player* pPlayer = TO_PLAYER(mKiller);
			QuestLogEntry* pQuest = pPlayer->GetQuestLogForEntry(10502);
			if(pQuest == NULL)
			{
				pQuest = pPlayer->GetQuestLogForEntry(10505);
				if(pQuest == NULL)
				{
					return;
				}
			}

			if(pQuest->GetMobCount(0) < pQuest->GetQuest()->required_mobcount[0])
			{
				uint32 NewCount = pQuest->GetMobCount(0) + 1;
				pQuest->SetMobCount(0, NewCount);
				pQuest->SendUpdateAddKill(0);
				pQuest->UpdatePlayerFields();
			}
		}
开发者ID:Antares84,项目名称:arcemu,代码行数:24,代码来源:Quest_BladeEdge_Mountains.cpp


示例18: RuthlessCunning

//Ruthless Cunning
bool RuthlessCunning(uint32 i, Spell* pSpell)
{
	if(!pSpell->u_caster->IsPlayer())
		return true;
	
	Player* plr = TO_PLAYER(pSpell->u_caster);
	if( plr == NULL )
		return true;

	Creature* kilsorrow = plr->GetMapMgr()->GetInterface()->GetCreatureNearestCoords(plr->GetPositionX(), plr->GetPositionY() , plr->GetPositionZ());
	if( kilsorrow == NULL || kilsorrow->isAlive() )
		return true;

	QuestLogEntry *qle = plr->GetQuestLogForEntry(9927);
	if(qle && qle->GetMobCount(0) < qle->GetQuest()->required_mobcount[0])
	{
		kilsorrow->Despawn(0, 60000);
		qle->SetMobCount(0, qle->GetMobCount(0)+1);
		qle->SendUpdateAddKill(0);
		qle->UpdatePlayerFields();
	};

	return true;
}
开发者ID:arcticdev,项目名称:arctic-test,代码行数:25,代码来源:Nagrand.cpp


示例19: TO_PLAYER

bool ChatHandler::HandleStartCommand(const char* args, WorldSession *m_session)
{
	Player* m_plyr = TO_PLAYER(getSelectedChar(m_session, false));
	if( m_plyr == NULL)
		return false;

	uint32 raceid = m_plyr->getRace();
	uint32 classid = m_plyr->getClass();
	std::string argument = args;

	//No arguments given, get race from selected player
	if(m_plyr && args && strlen(args) < 2)
	{
		switch (raceid)
		{
			case 1: argument = "human";		break;
			case 2:	argument = "orc";		break;
			case 3:	argument = "dwarf";		break;
			case 4:	argument = "nightelf";	break;
			case 5:	argument = "undead";	break;
			case 6:	argument = "tauren";	break;
			case 7: argument = "gnome";		break;
			case 8:	argument = "troll";		break;
			case 10:argument = "bloodelf";	break;
			case 11:argument = "draenei";	break;
			default:
			{
				RedSystemMessage(m_session, "Could not extract race from slected character.");
				return true;
			}

		}
	}
	//Optional argument
	else if(m_plyr && args && strlen(args) > 2)
	{
		ASCENT_TOLOWER(argument);

		// Teleport to specific race
		if(argument == "human")				raceid = 1;
		else if(argument == "orc")			raceid = 2;
		else if(argument == "dwarf")		raceid = 3;
		else if(argument == "nightelf")		raceid = 4;
		else if(argument == "undead")		raceid = 5;
		else if(argument == "tauren")		raceid = 6;
		else if(argument == "gnome")		raceid = 7;
		else if(argument == "troll")		raceid = 8;
		else if(argument == "bloodelf")		raceid = 10;
		else if(argument == "draenei")		raceid = 11;
		else if(argument == "deathknight")	classid = 6;
		else
		{
			RedSystemMessage(m_session, "Invalid start location! Valid locations are: human, dwarf, gnome, nightelf, draenei, orc, troll, tauren, undead, bloodelf");
			return true;
		}
	}
	else
		return false;

	//GetPlayerCreateInfo
	PlayerCreateInfo *info = NULL;
	info = objmgr.GetPlayerCreateInfo(raceid, classid);
	if(info == NULL)
	{
		RedSystemMessage(m_session, "Internal error: Could not find create info.");
			return true;
	}


	GreenSystemMessage(m_session, "Telporting %s to %s starting location.", m_plyr->GetName(), argument.c_str());

	m_session->GetPlayer()->SafeTeleport(info->mapId, 0, LocationVector(info->positionX, info->positionY, info->positionZ));
	return true;
}
开发者ID:Ballwinkle,项目名称:Ascent_NG,代码行数:74,代码来源:Level0.cpp


示例20: CalculateHonorPointsForKill

void HonorHandler::OnPlayerKilled(Player* pPlayer, Player* pVictim)
{
	if(pVictim->m_honorless)
		return;

	if(pPlayer->m_bg)
	{
		if(pVictim->m_bgTeam == pPlayer->m_bgTeam)
			return;

		// patch 2.4, players killed >50 times in battlegrounds won't be worth honor for the rest of that bg
		if(pVictim->m_bgScore.Deaths >= 50)
			return;
	}
	else
	{
		if(pPlayer->GetTeam() == pVictim->GetTeam())
			return;
	}

	// Calculate points
	int32 Points = 0;
	if(pPlayer != pVictim)
		Points = CalculateHonorPointsForKill(pPlayer->getLevel(), pVictim->getLevel());

	if(Points > 0)
	{
		if(pPlayer->m_bg)
		{
			// hackfix for battlegrounds (since the groups there are disabled, we need to do this manually)
			vector<Player*> toadd;
			uint32 t = pPlayer->m_bgTeam;
			toadd.reserve(15);		// shouldn't have more than this
			pPlayer->m_bg->Lock();
			set<Player*> * s = &pPlayer->m_bg->m_players[t];

			for(set<Player*>::iterator itr = s->begin(); itr != s->end(); ++itr)
			{
				// Also check that the player is in range, and the player is alive.
				if((*itr) == pPlayer || ((*itr)->isAlive() && (*itr)->isInRange(pPlayer, 100.0f)))
					toadd.push_back(*itr);
			}

			if(toadd.size() > 0)
			{
				uint32 pts = Points / (uint32)toadd.size();
				for(vector<Player*>::iterator vtr = toadd.begin(); vtr != toadd.end(); ++vtr)
				{
					AddHonorPointsToPlayer(*vtr, pts);

					(*vtr)->m_killsToday++;
					(*vtr)->m_killsLifetime++;
					pPlayer->m_bg->HookOnHK(*vtr);
					if(pVictim)
					{
						// Send PVP credit
						WorldPacket data(SMSG_PVP_CREDIT, 12);
						uint32 pvppoints = pts * 10;
						data << pvppoints << pVictim->GetGUID() << uint32(pVictim->GetPVPRank());
						(*vtr)->GetSession()->SendPacket(&data);
					}
				}
			}

			pPlayer->m_bg->Unlock();
		}
		else
		{
			set<Player*> contributors;
			// First loop: Get all the people in the attackermap.
			pVictim->UpdateOppFactionSet();
			for(std::set<Object*>::iterator itr = pVictim->GetInRangeOppFactsSetBegin(); itr != pVictim->GetInRangeOppFactsSetEnd(); itr++)
			{
				if(!(*itr)->IsPlayer())
					continue;

				bool added = false;
				Player* plr = TO_PLAYER(*itr);
				if(pVictim->CombatStatus.m_attackers.find(plr->GetGUID()) != pVictim->CombatStatus.m_attackers.end())
				{
					added = true;
					contributors.insert(plr);
				}

				if(added && plr->GetGroup())
				{
					Group* pGroup = plr->GetGroup();
					uint32 groups = pGroup->GetSubGroupCount();
					for(uint32 i = 0; i < groups; i++)
					{
						SubGroup* sg = pGroup->GetSubGroup(i);
						if(!sg) continue;

						for(GroupMembersSet::iterator itr2 = sg->GetGroupMembersBegin(); itr2 != sg->GetGroupMembersEnd(); itr2++)
						{
							PlayerInfo* pi = (*itr2);
							Player* gm = objmgr.GetPlayer(pi->guid);
							if(!gm) continue;

							if(gm->isInRange(pVictim, 100.0f))
//.........这里部分代码省略.........
开发者ID:DebugProject,项目名称:Lua-Other,代码行数:101,代码来源:HonorHandler.cpp



注:本文中的TO_PLAYER函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ TRACEUSER函数代码示例发布时间:2022-05-30
下一篇:
C++ SetErrorCode函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap