• This is a read only backup of the old Emudevs forum. If you want to have anything removed, please message me on Discord: KittyKaev

[SOLVED] Awards of BG

Status
Not open for further replies.

Lstm

Respected Member
Hello, I have a problem .. I added a script to the winners and losers of earning their BG marks of honor according to BG
Is working however the same prize is being sent to all BG's
Example: When I enter Warsong Gulch warsong is gaining Mark of Honor, but when I joino in arathi etc. .. do not get the Arathi Basin Mark of Honor
He keeps winning Warsong Gulch Mark of Honor ... could someone help me?

The script is this

Code:
// Variaveis
			   uint32 reward_bg_item_id;
			   uint32 reward_arena_item_id;
			   uint32 reward_winner_count;
			   uint32 reward_loser_count;
			   uint32 reward_alterac;
			   uint32 reward_warsong;
			   uint32 reward_arathi;
			   uint32 reward_eyestorm;
			   uint32 reward_ancients;
			   uint32 reward_isle;
			   uint32 reward_winter;

        // Reward
			   reward_bg_item_id	= uint32(sConfigMgr->GetIntDefault("BG.RewawrdTokenBattlegrounds",		20558));
               reward_arena_item_id = uint32(sConfigMgr->GetIntDefault("BG.RewawrdTokenIdArenas",			20558));
               reward_winner_count	= uint32(sConfigMgr->GetIntDefault("BG.RewardWinnerCount",					4));
               reward_loser_count	= uint32(sConfigMgr->GetIntDefault("BG.RewardLoserCount",					2));
               reward_alterac		= uint32(sConfigMgr->GetIntDefault("BG.RewardAlterac",					20560));
			   reward_warsong		= uint32(sConfigMgr->GetIntDefault("BG.RewardWarsong",					20558));
               reward_arathi		= uint32(sConfigMgr->GetIntDefault("BG.RewardArathi",					20559));
               reward_eyestorm		= uint32(sConfigMgr->GetIntDefault("BG.RewardEye",						29024));
			   reward_ancients		= uint32(sConfigMgr->GetIntDefault("BG.RewardAncients",					42425));
			   reward_isle			= uint32(sConfigMgr->GetIntDefault("BG.RewardIsle",						47395));
			   reward_winter		= uint32(sConfigMgr->GetIntDefault("BG.RewardWinter",					43589));


        uint32 itemId = isArena() ? reward_arena_item_id : reward_bg_item_id;
        uint32 itemCount = team == winner ? reward_winner_count : reward_loser_count;
        uint32 spellId = 0;
        ItemPosCountVec dest;

        // Reward time ganhador
        if (team == winner)
        {
		switch(player->GetMapId())
            {
				case 30: // Alterac
					player->AddItem(reward_alterac, true);
                    break;

                case 489: // Warsong Gulch
					player->AddItem(reward_warsong, true);
                    break;

                case 529: // Arathi Basin
					player->AddItem(reward_arathi, true);
                    break;

                case 566: // Eye of the Storm
					player->AddItem(reward_eyestorm, true);
                    break;

				case 607: // Ancients
					player->AddItem(reward_ancients, true);
                    break;

					case 628: // Isle Conquest
						player->AddItem(reward_isle, true);
                    break;
				
				case 571: // Wintergrasp
					player->AddItem(reward_winter,  true);
                    break;

                default:
                    break;
            }

            if (IsRandom() || BattlegroundMgr::IsBGWeekend(GetTypeID()))
            {
                UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(winner_kills));
                if (CanAwardArenaPoints())
                    player->ModifyArenaPoints(winner_arena);
                if (!player->GetRandomWinner())
                    player->SetRandomWinner(true);
            }

            player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, 1);
        }
        else
        {
            if (IsRandom() || BattlegroundMgr::IsBGWeekend(GetTypeID()))
                UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(loser_kills));
        }

		 if (isArena())
		 {
		 player->SetGMVisible(true);
		 player->SetGameMaster(false);
	   }
        if (player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, itemCount) == EQUIP_ERR_OK)
        {
            Item* item = player->StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
            player->SendNewItem(item, itemCount, true, false);
 

Tommy

Founder
Can you paste the full function? I'd like to clean it up because as I can tell, it is very messy - it will also give me more of an example than the code you actually pasted.
 

Tommy

Founder
I cleaned up the part you linked above.

Code:
        // Reward
        uint32 reward_winner_count	= uint32(sConfigMgr->GetIntDefault("BG.RewardWinnerCount",					4));
        uint32 reward_loser_count	= uint32(sConfigMgr->GetIntDefault("BG.RewardLoserCount",					2));
        uint32 reward_alterac		= uint32(sConfigMgr->GetIntDefault("BG.RewardAlterac",					20560));
	uint32 reward_warsong		= uint32(sConfigMgr->GetIntDefault("BG.RewardWarsong",					20558));
        uint32 reward_arathi		= uint32(sConfigMgr->GetIntDefault("BG.RewardArathi",					20559));
        uint32 reward_eyestorm	= uint32(sConfigMgr->GetIntDefault("BG.RewardEye",						29024));
	uint32 reward_ancients		= uint32(sConfigMgr->GetIntDefault("BG.RewardAncients",					42425));
	uint32 reward_isle		= uint32(sConfigMgr->GetIntDefault("BG.RewardIsle",						47395));
	uint32 reward_winter		= uint32(sConfigMgr->GetIntDefault("BG.RewardWinter",					43589));

        [COLOR="#00FF00"]uint32 itemId = 0;[/COLOR]
        uint32 itemCount = team == winner ? reward_winner_count : reward_loser_count;
        uint32 spellId = 0;
        ItemPosCountVec dest;

        // Reward time ganhador
        if (team == winner)
        {
	    switch(player->GetMapId())
            {
[COLOR="#00FF00"]	        case 30: // Alterac
		   itemId = reward_alterac;
                    break;
                case 489: // Warsong Gulch
		    itemId = reward_warsong;
                    break;
                case 529: // Arathi Basin
		    itemId = reward_arathi;
                    break;
                case 566: // Eye of the Storm
		    itemId = reward_eyestorm;
                    break;
		case 607: // Ancients
		    itemId = reward_ancients;
                    break;
		case 628: // Isle Conquest
		    itemId = reward_isle;
                    break;	
		case 571: // Wintergrasp
		    itemId = reward_winter;
                    break;[/COLOR]
                default:
                    break;
            }

            if (IsRandom() || BattlegroundMgr::IsBGWeekend(GetTypeID()))
            {
                UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(winner_kills));
                if (CanAwardArenaPoints())
                    player->ModifyArenaPoints(winner_arena);
                if (!player->GetRandomWinner())
                    player->SetRandomWinner(true);
            }

            player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, 1);
        }
        else
        {
            if (IsRandom() || BattlegroundMgr::IsBGWeekend(GetTypeID()))
                UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(loser_kills));
        }

	if (isArena())
	{
           player->SetGMVisible(true);
	   player->SetGameMaster(false);
	}
		 
        if (player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, itemCount) == EQUIP_ERR_OK)
        {
            Item* item = player->StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
            player->SendNewItem(item, itemCount, true, false);
        }

As far as I can tell code wise, both your "reward_bg_item_id" and "reward_arena_item_id" is 20558, which is Warsong Gulch itemId. So, those two itemIds are the same and when you run:

Code:
uint32 itemId = isArena() ? reward_arena_item_id : reward_bg_item_id;

The itemIds are the same. You're using the variable 'itemId' to store the item to the player, which will always give them the Warsong mark. Not sure what the itemId variable is intended for. Is it for 'random' bg win reward? You're already adding the items in your 'if team == winner' statement.

Anyway, I corrected the code and it is how it should be. The corrected code is in 'LIME'.
 

Tommy

Founder
if (team == winner)


Thats why..

Just to clarify, that is NOT the main reason. That if statement has an "else" -

Code:
        else
        {
            if (IsRandom() || BattlegroundMgr::IsBGWeekend(GetTypeID()))
                UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(loser_kills));
        }

Which in this case, losers will lose and receive no item because itemId has not been assigned for the losers.

just remove it?

Removing the if statement will not work for the most part. Only logical thing I can see is to take out the switch statement that assigns the itemId and put it above "team == winner" if statement. You still need that if statement to give the winner/loser honor rewards.

Below, I have corrected the issue. What I changed around is in LIME.

Code:
        // Reward
        uint32 reward_winner_count	= uint32(sConfigMgr->GetIntDefault("BG.RewardWinnerCount",					4));
        uint32 reward_loser_count	= uint32(sConfigMgr->GetIntDefault("BG.RewardLoserCount",					2));
        uint32 reward_alterac		= uint32(sConfigMgr->GetIntDefault("BG.RewardAlterac",					20560));
	uint32 reward_warsong		= uint32(sConfigMgr->GetIntDefault("BG.RewardWarsong",					20558));
        uint32 reward_arathi		= uint32(sConfigMgr->GetIntDefault("BG.RewardArathi",					20559));
        uint32 reward_eyestorm	= uint32(sConfigMgr->GetIntDefault("BG.RewardEye",						29024));
	uint32 reward_ancients		= uint32(sConfigMgr->GetIntDefault("BG.RewardAncients",					42425));
	uint32 reward_isle		= uint32(sConfigMgr->GetIntDefault("BG.RewardIsle",						47395));
	uint32 reward_winter		= uint32(sConfigMgr->GetIntDefault("BG.RewardWinter",					43589));

        uint32 itemId = 0;
        uint32 itemCount = team == winner ? reward_winner_count : reward_loser_count;
        uint32 spellId = 0;
        ItemPosCountVec dest;

[COLOR="#00FF00"]	switch(player->GetMapId())
        {
	    case 30: // Alterac
	        itemId = reward_alterac;
                break;
            case 489: // Warsong Gulch
		itemId = reward_warsong;
                break;
            case 529: // Arathi Basin
		itemId = reward_arathi;
                break;
            case 566: // Eye of the Storm
		itemId = reward_eyestorm;
                break;
            case 607: // Ancients
		itemId = reward_ancients;
                break;
	    case 628: // Isle Conquest
		itemId = reward_isle;
                break;	
	    case 571: // Wintergrasp
		itemId = reward_winter;
                break;
            default:
                break;
        }[/COLOR]

[COLOR="#00FF00"]        if (team == winner)
        {
            if (IsRandom() || BattlegroundMgr::IsBGWeekend(GetTypeID()))
            {
                UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(winner_kills));
                if (CanAwardArenaPoints())
                    player->ModifyArenaPoints(winner_arena);
                if (!player->GetRandomWinner())
                    player->SetRandomWinner(true);
            }

            player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, 1);
        }
        else
        {
            if (IsRandom() || BattlegroundMgr::IsBGWeekend(GetTypeID()))
                UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(loser_kills));
        }[/COLOR]

	if (isArena())
	{
           player->SetGMVisible(true);
	   player->SetGameMaster(false);
	}
		 
        if (player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, itemCount) == EQUIP_ERR_OK)
        {
            Item* item = player->StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
            player->SendNewItem(item, itemCount, true, false);
        }
 
Status
Not open for further replies.
Top