コード例 #1
0
ファイル: EngineChargen.cpp プロジェクト: Ascension64/TobEx
void DETOUR_CScreenCharGen::DETOUR_MulticlassPanelOnUpdate(CPanel& panel, CCreatureObject& cre) {
	if (!pRuleEx->m_ClassRaceReq.m_2da.bLoaded) return (this->*Tramp_CScreenCharGen_MulticlassPanelOnUpdate)(panel, cre);

	CUIScrollBar& scroll = (CUIScrollBar&)panel.GetUIControl(13);
	pScrollActive = &scroll;
	CInfGame* pGame = g_pChitin->pGame;
	Object& o = cre.oBase;

	for (int i = 2; i <= 11; i++) {
		CUICheckButtonChargenMulticlass& button = (CUICheckButtonChargenMulticlass&)panel.GetUIControl(i);
		button.SetToggleState(button.GetClass() == o.m_cClass);

		IECString sRace = pGame->GetRaceString(o.m_cRace);
		IECString sClass = pGame->GetClassString(button.GetClass(), KIT_TRUECLASS);
		IECString sAllowed = pRuleEx->m_ClassRaceReq.GetValue(sRace, sClass);
		BOOL bAllowed;
		sscanf_s((LPCTSTR)sAllowed, "%d", &bAllowed);
		button.SetActive(bAllowed);
	}

	CUIButton& buttonDone = (CUIButton&)panel.GetUIControl(0);
	buttonDone.SetActive(CanContinue(cre));

	return;
}
コード例 #2
0
void CombatMode::CanContinue()
{
	// If player is dead, the game is over
	if ( m_pPlayer->GetCurHP() == 0 )
	{
		AddStringToCombatLog( "You die! Game Over " );
		CGameEngine::Instance()->ContinueGame(m_pCombatant, m_pMonster);		
	}
	// If enemy is dead, game continues
	else if ( m_pCombatant->GetCurHP() == 0 )
	{
		AddStringToCombatLog( "You have slain " + m_pCombatant->GetName() + "!");
		CGameEngine::Instance()->ContinueGame(m_pCombatant, m_pMonster);
	}
	// If it is the enemy his turn, he attacks the player
	else if ( !m_bPlayersTurn ) 
	{
		int damage = m_pCombatant->Attack(m_pPlayer);
		if ( damage > 0 )
		{
			AddStringToCombatLog( m_pCombatant->GetName()  + " hits you with " + itoa2(damage) + " damage!" );
		}
		else
		{
			AddStringToCombatLog( m_pCombatant->GetName() + " misses you! " );
		}
		m_bPlayersTurn = true;
		
		CanContinue();
	}
}
コード例 #3
0
 bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
 {
     pPlayer->PlayerTalkClass->ClearMenus();
     switch(uiAction)
     {
         case GOSSIP_ACTION_INFO_DEF+1:
             if(CanContinue(pPlayer))
                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_VARGOTH_EXT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
             pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_VARGOTH_EXT, pCreature->GetGUID());
             break;
         case GOSSIP_ACTION_INFO_DEF+2:
             if (CanContinue(pPlayer))
                 pCreature->CastSpell(pPlayer, SPELL_CREATE_KIRIN_TOR_FAMILIAR, false);
             pPlayer->CLOSE_GOSSIP_MENU();
             break;
     }
     return true;
 }
コード例 #4
0
    bool OnGossipHello(Player* pPlayer, Creature* pCreature)
    {
        if (CanContinue(pPlayer))
            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_VARGOTH, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);

        pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_VARGOTH, pCreature->GetGUID());

        return true;
    }
コード例 #5
0
ファイル: EngineChargen.cpp プロジェクト: Ascension64/TobEx
void DETOUR_CScreenCharGen::DETOUR_ClassPanelOnUpdate(CPanel& panel, CCreatureObject& cre) {
	if (!pRuleEx->m_ClassRaceReq.m_2da.bLoaded) return (this->*Tramp_CScreenCharGen_ClassPanelOnUpdate)(panel, cre);

	CUIScrollBar& scroll = (CUIScrollBar&)panel.GetUIControl(12);
	pScrollActive = &scroll;
	CInfGame* pGame = g_pChitin->pGame;
	CreFileHeader& stats = cre.m_header;
	Object& o = cre.oBase;
	unsigned int dwKit = stats.m_wKit[1] | stats.m_wKit[0] << 16;

	for (int i = 2; i <= 9; i++) {
		CUICheckButtonChargenClass& button = (CUICheckButtonChargenClass&)panel.GetUIControl(i);
		if (button.GetClass() == o.m_cClass) {
			if (o.m_cClass == CLASS_FIGHTER && dwKit == KIT_BARBARIAN) {
				button.SetToggleState(FALSE);
			} else {
				button.SetToggleState(TRUE);
			}
		} else {
			button.SetToggleState(FALSE);
		}

		IECString sRace = pGame->GetRaceString(o.m_cRace);
		IECString sClass = pGame->GetClassString(button.GetClass(), KIT_TRUECLASS);
		IECString sAllowed = pRuleEx->m_ClassRaceReq.GetValue(sRace, sClass);
		BOOL bAllowed;
		sscanf_s((LPCTSTR)sAllowed, "%d", &bAllowed);
		button.SetActive(bAllowed);
	}

	for (int i = 15; i <= 17; i++) {
		CUICheckButtonChargenClass& button = (CUICheckButtonChargenClass&)panel.GetUIControl(i);
		if (button.GetClass() == o.m_cClass) {
			if (o.m_cClass == CLASS_FIGHTER && dwKit != KIT_BARBARIAN) {
				button.SetToggleState(FALSE);
			} else {
				button.SetToggleState(TRUE);
			}
		} else {
			button.SetToggleState(FALSE);
		}

		IECString sRace = pGame->GetRaceString(o.m_cRace);
		IECString sClass = pGame->GetClassString(button.GetClass(), KIT_TRUECLASS);
		IECString sAllowed = pRuleEx->m_ClassRaceReq.GetValue(sRace, sClass);
		BOOL bAllowed;
		sscanf_s((LPCTSTR)sAllowed, "%d", &bAllowed);
		button.SetActive(bAllowed);
	}

	//CUIButton& buttonMulticlass = (CUIButton&)panel.GetUIControl(10);
	//buttonMulticlass.SetActive((bool)(o.Race - 1));
	CUIButton& buttonDone = (CUIButton&)panel.GetUIControl(0);
	buttonDone.SetActive(CanContinue(cre));

	return;
}
コード例 #6
0
bool CombatMode::Hit( const CEGUI::EventArgs &e )
{
	// Gives damage to the enemy
	int damage = m_pPlayer->Attack(m_pCombatant);
	if ( damage > 0 )
	{
		// Print combat log
		AddStringToCombatLog( "You hit " + m_pCombatant->GetName() + " with " + itoa2(damage) + "!" );
		m_pPlayer->AddRage(2);
	}
	else
	{
		AddStringToCombatLog( "You miss " + m_pCombatant->GetName() + "!" );
	}
	m_bPlayersTurn = false;
	CanContinue();	
	return true;
}
コード例 #7
0
bool CombatMode::Double( const CEGUI::EventArgs &e )
{
		// Checks for enough rage and if so, attack with double slash
	if ( m_pPlayer->GetRage() > 8 ) 
	{
		int damage = m_pPlayer->DoubleSlash(m_pCombatant);
		if ( damage > 0 )
		{
			AddStringToCombatLog( "You Double Slash " + m_pCombatant->GetName() + " with " + itoa2(damage) + "!!!" );		
		}
		else
		{
			AddStringToCombatLog( "You miss " + m_pCombatant->GetName() + "!" );
		}
		m_bPlayersTurn = false;
		CanContinue();	
	}
	else 
	{
		AddStringToCombatLog( "You don't have enough Rage!\n    Need at least 6 for Double Slash!" );
	}

	return true;
}
コード例 #8
0
bool CombatMode::Thunder( const CEGUI::EventArgs &e )
{
	// Checks for enough rage and if so, attack with thunder
	if ( m_pPlayer->GetRage() > 4 ) 
	{
		int damage = m_pPlayer->ThunderStrike(m_pCombatant);
		if ( damage > 0 )
		{
			AddStringToCombatLog( "You ThunderStrike " + m_pCombatant->GetName() + " with " + itoa2(damage) + "!!" );		
		}
		else
		{
			AddStringToCombatLog( "You miss " + m_pCombatant->GetName() + "!" );
		}
		m_bPlayersTurn = false;
		CanContinue();	
	}
	else 
	{
		AddStringToCombatLog( "You don't have enough Rage!\n    Need at least 3 for ThunderStrike!" );
	}

	return true;
}
コード例 #9
0
ファイル: EngineChargen.cpp プロジェクト: Ascension64/TobEx
void DETOUR_CScreenCharGen::DETOUR_KitPanelOnUpdate(CPanel& panel, CCreatureObject& cre) {
	CUIScrollBar& scroll = (CUIScrollBar&)panel.GetUIControl(6);
	pScrollActive = &scroll;
	Object& o = cre.oBase;

	CUIScrollBarChargenKit& scrollKit = (CUIScrollBarChargenKit&)panel.GetUIControl(15);

	CUICheckButtonChargenKit& option1 = (CUICheckButtonChargenKit&)panel.GetUIControl(1);
	CUICheckButtonChargenKit& option2 = (CUICheckButtonChargenKit&)panel.GetUIControl(2);
	CUICheckButtonChargenKit& option3 = (CUICheckButtonChargenKit&)panel.GetUIControl(3);
	CUICheckButtonChargenKit& option4 = (CUICheckButtonChargenKit&)panel.GetUIControl(4);
	CUICheckButtonChargenKit& option5 = (CUICheckButtonChargenKit&)panel.GetUIControl(9);
	CUICheckButtonChargenKit& option6 = (CUICheckButtonChargenKit&)panel.GetUIControl(10);
	CUICheckButtonChargenKit& option7 = (CUICheckButtonChargenKit&)panel.GetUIControl(11);
	CUICheckButtonChargenKit& option8 = (CUICheckButtonChargenKit&)panel.GetUIControl(12);
	CUICheckButtonChargenKit& option9 = (CUICheckButtonChargenKit&)panel.GetUIControl(13);
	CUICheckButtonChargenKit& option10 = (CUICheckButtonChargenKit&)panel.GetUIControl(14);
	CUICheckButtonChargenKit& option11 = (CUICheckButtonChargenKit&)panel.GetUIControl(16);

	CScreenCharGen* pCreateChar = g_pChitin->pCreateChar;
	CInfGame* pGame = g_pChitin->pGame;

	assert(&option1 != NULL);
	assert(&option2 != NULL);
	assert(&option3 != NULL);
	assert(&option4 != NULL);
	assert(&option5 != NULL);
	assert(&option6 != NULL);
	assert(&option7 != NULL);
	assert(&option8 != NULL);
	assert(&option9 != NULL);
	assert(&option10 != NULL);
	assert(pCreateChar != NULL);
	assert(pGame != NULL);

	if (&scrollKit == NULL ||
		&option11 == NULL) {
		LPCTSTR lpsz = "DETOUR_CScreenCharGen::DETOUR_KitPanelOnUpdate(): Kit selection scroll bar or button 11 not found\r\n";
		console.write(lpsz);
		L.timestamp();
		L.append(lpsz);
		return (this->*Tramp_CScreenCharGen_KitPanelOnUpdate)(panel, cre);
	}

	IECString sClass, sRace, sKitName, sAlignment, sRowName, sKitFile;

	if (m_class) {
		sClass = pGame->GetClassString(m_class, KIT_TRUECLASS);
	} else {
		sClass = pGame->GetClassString(o.GetClass(), KIT_TRUECLASS);
	}

	sRace = pGame->GetRaceString(o.m_cRace);
	sKitFile = pGame->KITTABLE.GetValue(sRace, sClass);

	if (Kit_Class_Race.m_2da.name != sKitFile) {
		Kit_Class_Race.LoadTable(ResRef(sKitFile));
	}

	for (int row = 0; row < Kit_Class_Race.nRows; row++) {

		int col = 0;

		IECString sKit;
		if (col < g_pChitin->pCreateChar->Kit_Class_Race.nCols &&
			row < g_pChitin->pCreateChar->Kit_Class_Race.nRows &&
			col >= 0 &&
			row >= 0) {
			sKit = *((g_pChitin->pCreateChar->Kit_Class_Race.pDataArray) + (g_pChitin->pCreateChar->Kit_Class_Race.nCols * row + col));
		} else {
			sKit = g_pChitin->pCreateChar->Kit_Class_Race.defaultVal;
		}
		unsigned int nKitId;
		sscanf_s((LPCTSTR)sKit, "%d", &nKitId);

		if (nKitId == 0) { //true class
			if (m_class) {
				pGame->GetDetailedClassString(m_class, KIT_TRUECLASS, 0, sKitName, cre);
			} else {
				pGame->GetDetailedClassString(o.GetClass(), KIT_TRUECLASS, 0, sKitName, cre);
			}
		} else {
			int col = 1;

			IECString sKitLowerStrRef;
			if (col < g_pChitin->pGame->KITLIST.nCols &&
				nKitId < g_pChitin->pGame->KITLIST.nRows &&
				col >= 0 &&
				nKitId >= 0) {
				sKitLowerStrRef = *((g_pChitin->pGame->KITLIST.pDataArray) + (g_pChitin->pGame->KITLIST.nCols * nKitId + col));
			} else {
				sKitLowerStrRef = g_pChitin->pGame->KITLIST.defaultVal;
			}
			STRREF strrefLower;
			sscanf_s((LPCTSTR)sKitLowerStrRef, "%d", &strrefLower);
			sKitName = GetTlkString(strrefLower);
		}

		switch (row - scrollKit.nCurrentValue) {
		case 0:
			option1.SetText(sKitName);
			break;
		case 1:
			option2.SetText(sKitName);
			break;
		case 2:
			option3.SetText(sKitName);
			break;
		case 3:
			option4.SetText(sKitName);
			break;
		case 4:
			option5.SetText(sKitName);
			break;
		case 5:
			option6.SetText(sKitName);
			break;
		case 6:
			option7.SetText(sKitName);
			break;
		case 7:
			option8.SetText(sKitName);
			break;
		case 8:
			option9.SetText(sKitName);
			break;
		case 9:
			option10.SetText(sKitName);
			break;
		case 10:
			option11.SetText(sKitName);
			break;
		}

	} //for (row)

	for (int index = 0; index < 11; index++) {
		CUICheckButton* pButton;
		switch (index) {
		case 0:
			pButton = &option1;
			break;
		case 1:
			pButton = &option2;
			break;
		case 2:
			pButton = &option3;
			break;
		case 3:
			pButton = &option4;
			break;
		case 4:
			pButton = &option5;
			break;
		case 5:
			pButton = &option6;
			break;
		case 6:
			pButton = &option7;
			break;
		case 7:
			pButton = &option8;
			break;
		case 8:
			pButton = &option9;
			break;
		case 9:
			pButton = &option10;
			break;
		case 10:
			pButton = &option11;
			break;
		}

		index += scrollKit.nCurrentValue;

		BOOL bKitAllowedByAlignment = FALSE;
		BOOL bAlignmentChecked = FALSE;
		unsigned int nKitId = 0;
		if ((index < Kit_Class_Race.nRows) && (nChargenProgress == 5)) {
			sAlignment = pGame->GetAlignmentString(o.m_cAlignment);

			int col = 0;

			IECString sKit;
			if (col < g_pChitin->pCreateChar->Kit_Class_Race.nCols &&
				index < g_pChitin->pCreateChar->Kit_Class_Race.nRows &&
				col >= 0 &&
				index >= 0) {
				sKit = *((g_pChitin->pCreateChar->Kit_Class_Race.pDataArray) + (g_pChitin->pCreateChar->Kit_Class_Race.nCols * index + col));
			} else {
				sKit = g_pChitin->pCreateChar->Kit_Class_Race.defaultVal;
			}
			sscanf_s((LPCTSTR)sKit, "%d", &nKitId);

			col = 0;

			if (col < g_pChitin->pGame->KITLIST.nCols &&
				nKitId < g_pChitin->pGame->KITLIST.nRows &&
				col >= 0 &&
				nKitId >= 0) {
				sRowName = *((g_pChitin->pGame->KITLIST.pDataArray) + (g_pChitin->pGame->KITLIST.nCols * nKitId + col));
			} else {
				sRowName = g_pChitin->pGame->KITLIST.defaultVal;
			}

			IECString sKitAllowedByAlignment = pGame->ALIGNMNT.GetValue(sAlignment, sRowName);
			sscanf_s((LPCTSTR)sKitAllowedByAlignment, "%d", &bKitAllowedByAlignment);
			bAlignmentChecked = TRUE;
		}

		if (index < Kit_Class_Race.nRows) {
			pButton->SetEnabled(TRUE);
			if (bAlignmentChecked && nKitId) { //not true class
				if (bAlignmentChecked && bKitAllowedByAlignment) {
					pButton->SetActive(TRUE);
				} else {
					pButton->SetActive(FALSE);
				}
			} else {
				pButton->SetActive(TRUE);
			}

		} else {
			pButton->SetEnabled(FALSE);
			pButton->SetActive(FALSE);
			pButton->SetVisible(FALSE);
		}

		index -= scrollKit.nCurrentValue;

	} //for (index)

	unsigned int dwKit = cre.m_header.m_wKit[1] | (cre.m_header.m_wKit[0] << 16);

	option1.SetToggleState(false);
	option2.SetToggleState(false);
	option3.SetToggleState(false);
	option4.SetToggleState(false);
	option5.SetToggleState(false);
	option6.SetToggleState(false);
	option7.SetToggleState(false);
	option8.SetToggleState(false);
	option9.SetToggleState(false);
	option10.SetToggleState(false);
	option11.SetToggleState(false);

	if ((dwKit & KIT_TRUECLASS) && (dwKit & 0xBFFF)) { //has a kit
		unsigned int dwKitOnly = dwKit & 0xBFFF;

		for (int row = 0; row < Kit_Class_Race.nRows; row++ ) {
			int col = 0;

			IECString sKit;
			if (col < g_pChitin->pCreateChar->Kit_Class_Race.nCols &&
				row < g_pChitin->pCreateChar->Kit_Class_Race.nRows &&
				col >= 0 &&
				row >= 0) {
				sKit = *((g_pChitin->pCreateChar->Kit_Class_Race.pDataArray) + (g_pChitin->pCreateChar->Kit_Class_Race.nCols * row + col));
			} else {
				sKit = g_pChitin->pCreateChar->Kit_Class_Race.defaultVal;
			}
			unsigned int nKitId;
			sscanf_s((LPCTSTR)sKit, "%d", &nKitId);

			if (nKitId == dwKitOnly) {
			switch (row - scrollKit.nCurrentValue) {
				case 0:
					option1.SetToggleState(TRUE);
					break;
				case 1:
					option2.SetToggleState(TRUE);
					break;
				case 2:
					option3.SetToggleState(TRUE);
					break;
				case 3:
					option4.SetToggleState(TRUE);
					break;
				case 4:
					option5.SetToggleState(TRUE);
					break;
				case 5:
					option6.SetToggleState(TRUE);
					break;
				case 6:
					option7.SetToggleState(TRUE);
					break;
				case 7:
					option8.SetToggleState(TRUE);
					break;
				case 8:
					option9.SetToggleState(TRUE);
					break;
				case 9:
					option10.SetToggleState(TRUE);
					break;
				case 10:
					option11.SetToggleState(TRUE);
					break;
				}
			}
		} //for
	} else {
		switch (dwKit) {
			case KIT_TRUECLASS:
				switch (scrollKit.nCurrentValue) {
				case 0:
					option1.SetToggleState(TRUE);
					break;
				default:
					break;
				}
				break;
			case KIT_BERSERKER:
			case KIT_CAVALIER:
			case KIT_FERALAN:
			case KIT_ASSASIN:
			case KIT_BLADE:
			case KIT_GODTALOS:
			case KIT_TOTEMIC:
				switch (scrollKit.nCurrentValue) {
				case 0:
					option2.SetToggleState(TRUE);
					break;
				case 1:
					option1.SetToggleState(TRUE);
					break;
				default:
					break;
				}
				break;
			case KIT_WIZARDSLAYER:
			case KIT_INQUISITOR:
			case KIT_STALKER:
			case KIT_BOUNTYHUNTER:
			case KIT_JESTER:
			case KIT_GODHELM:
			case KIT_SHAPESHIFTER:
				switch (scrollKit.nCurrentValue) {
				case 0:
					option1.SetToggleState(TRUE);
					break;
				case 1:
					option2.SetToggleState(TRUE);
					break;
				case 2:
					option3.SetToggleState(TRUE);
					break;
				default:
					break;
				}
				break;
			case KIT_KENSAI:
			case KIT_UNDEADHUNTER:
			case KIT_BEASTMASTER:
			case KIT_SWASHBUCKLER:
			case KIT_SKALD:
			case KIT_GODLATHANDER:
			case KIT_BEASTFRIEND:
				switch (scrollKit.nCurrentValue) {
				case 0:
					option1.SetToggleState(TRUE);
					break;
				case 1:
					option2.SetToggleState(TRUE);
					break;
				case 2:
					option3.SetToggleState(TRUE);
					break;
				case 3:
					option4.SetToggleState(TRUE);
					break;
				default:
					break;
				}
				break;
			default:
				break;
		}
	} //has a kit

	CUIButton& buttonDone = (CUIButton&)panel.GetUIControl(7);
	buttonDone.SetActive(CanContinue(cre));

	scrollKit.nValues = Kit_Class_Race.nRows;
	scrollKit.nRows = 11;
	if (Kit_Class_Race.nRows > 11) {
		scrollKit.SetEnabled(TRUE);
		scrollKit.SetVisible(TRUE);
	} else {
		scrollKit.SetEnabled(FALSE);
		scrollKit.SetVisible(FALSE);
	}

	if (pGameOptionsEx->GetOption("Debug_Verbose")) {
		
		LPCTSTR lpsz = "DETOUR_CScreenCharGen::DETOUR_KitPanelOnUpdate(): nKits(%d), nScrollValues(%d), wKit(0x%X)\r\n";
		console.writef(lpsz, Kit_Class_Race.nRows, max(scrollKit.nValues - scrollKit.nRows, 0), dwKit);
		L.timestamp();
		L.appendf(lpsz, Kit_Class_Race.nRows, scrollKit.nValues, dwKit);
	}

	return;
};
コード例 #10
0
ファイル: EngineChargen.cpp プロジェクト: Ascension64/TobEx
void DETOUR_CScreenCharGen::DETOUR_MageSchoolPanelOnUpdate(CPanel& panel, CCreatureObject& cre) {
	if (!pRuleEx->m_MageSchoolRaceReq.m_2da.bLoaded) return (this->*Tramp_CScreenCharGen_MageSchoolPanelOnUpdate)(panel, cre);

	CUIScrollBar& scroll = (CUIScrollBar&)panel.GetUIControl(10);
	pScrollActive = &scroll;
	CInfGame* pGame = g_pChitin->pGame;
	CreFileHeader& stats = cre.m_header;
	Object& o = cre.oBase;
	unsigned int dwKit = stats.m_wKit[1] | stats.m_wKit[0] << 16;
	BOOL bButtonToggled = FALSE;

	BOOL bMageClass = o.GetClass() == CLASS_MAGE || o.GetClass() == CLASS_SORCERER;
	if (!bMageClass) {
		unsigned char nClassNew;
		unsigned char nClassOrg;
		o.GetDualClasses(&nClassNew, &nClassOrg);
		bMageClass = nClassNew == CLASS_MAGE || nClassOrg == CLASS_MAGE;
	}

	for (int i = 2; i <= 9; i++) {
		CUICheckButtonChargenMageSchool& buttonSchool = (CUICheckButtonChargenMageSchool&)panel.GetUIControl(i);
		if (bMageClass &&
			dwKit == buttonSchool.GetKit()) {
			buttonSchool.SetToggleState(TRUE);
			bButtonToggled = TRUE;
		} else {
			buttonSchool.SetToggleState(FALSE);
		}

		buttonSchool.SetActive(pGame->IsMageSchoolAllowed(buttonSchool.GetKit(), o.m_cRace));
	}

	CUICheckButtonChargenMageSchool& buttonWildMage = (CUICheckButtonChargenMageSchool&)panel.GetUIControl(14);
	if (*g_pEnableWildMage) {
		if (bMageClass &&
			dwKit == buttonWildMage.GetKit()) {
			buttonWildMage.SetToggleState(TRUE);
			bButtonToggled = TRUE;
		} else {
			buttonWildMage.SetToggleState(FALSE);
		}
		buttonWildMage.SetActive(pGame->IsMageSchoolAllowed(buttonWildMage.GetKit(), o.m_cRace));
	} else {
		buttonWildMage.SetToggleState(FALSE);
		buttonWildMage.SetActive(FALSE);
		buttonWildMage.SetEnabled(FALSE);
		buttonWildMage.SetVisible(FALSE);
	}

	CUICheckButtonChargenMageSchool& buttonMage = (CUICheckButtonChargenMageSchool&)panel.GetUIControl(13);
	if (bMageClass &&
		dwKit == buttonMage.GetKit()) {
		buttonMage.SetToggleState(TRUE);
		bButtonToggled = TRUE;
	} else {
		buttonMage.SetToggleState(FALSE);
	}
	buttonMage.SetActive(pGame->IsMageSchoolAllowed(buttonMage.GetKit(), o.m_cRace));

	CUIButton& buttonDone = (CUIButton&)panel.GetUIControl(0);
	buttonDone.SetActive(CanContinue(cre) && pGame->IsMageSchoolAllowed(dwKit, o.m_cRace));

	return;
}