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; }
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(); } }
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; }
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; }
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; }
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; }
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; }
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; }
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; };
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; }