BattleClientLog::BattleClientLog(battledata *dat, BattleDefaultTheme *theme, bool lognames) : mData(dat), mTheme(theme), mLogNames(lognames) { hasLoggedTeams = false; blankMessage = false; bool spectator = !(data()->role(battledata::Player1) == BattleConfiguration::Player || data()->role(battledata::Player2) == BattleConfiguration::Player); pushHtml("<!DOCTYPE html>"); pushHtml(QString("<!-- Pokemon Online battle%1 log (version 3.0) -->\n").arg(spectator ? " spectator": "")); pushHtml(QString("<head>\n\t<title>%1 vs %2</title>\n</head>").arg(data()->name(battledata::Player1), data()->name(battledata::Player2))); pushHtml("<body>"); if (!spectator) { printHtml("BattleStart", toBoldColor(tr("Battle between %1 and %2 started!"), Qt::blue).arg(data()->name(battledata::Player1), data()->name(battledata::Player2))); } else { printHtml("BattleStart", toBoldColor(tr("Battle between %1 and %2 is underway!"), Qt::blue).arg(data()->name(battledata::Player1), data()->name(battledata::Player2))); } onBlankMessage(); }
BattleServerLog::BattleServerLog(BattleData<DataContainer> *data, BattleDefaultTheme *theme) :BattleClientLog(data, theme) { for (int i = 0; i < 2; i++) { QStringList roster; for (int j=0; j<6; j++) { Pokemon::uniqueId num = data->team(i).poke(j)->num(); if (num != Pokemon::NoPoke) { roster+=PokemonInfo::Name(num); } } printHtml("Teams",toBoldColor(tr("%1's team:"), Qt::blue).arg(data->name(i)) + roster.join(" / ")); } }
// generate a .html file for one page void genPageDocFromTemplate(PageData *page) { char *pageTpl=loadTextFile("samples/doctcod/page.tpl"); if (! pageTpl) return; FILE *f = fopen(page->url,"wt"); while (*pageTpl) { if ( strncmp(pageTpl,"${TITLE}",8) == 0 ) { // navigator window's title fprintf(f,page->title); pageTpl+=8; } else if ( strncmp(pageTpl,"${SCRIPT}",9) == 0 ) { // javascript file (not the same for index.html and other pages) if (page == root) fprintf(f,"js/doctcod.js"); else fprintf(f,"../js/doctcod.js"); pageTpl+=9; } else if ( strncmp(pageTpl,"${STYLESHEET}",13) == 0 ) { // css file (not the same for index.html and other pages) if (page == root) fprintf(f,"css/style.css"); else fprintf(f,"../css/style.css"); pageTpl+=13; } else if ( strncmp(pageTpl,"${LOCATION}",11) == 0 ) { // breadcrumb fprintf(f,page->breadCrumb); pageTpl+=11; } else if ( strncmp(pageTpl,"${FILTER_FORM}",14) == 0 ) { printLanguageFilterForm(f,"c","C",config.generateC); printLanguageFilterForm(f,"cpp","C++",config.generateCpp); printLanguageFilterForm(f,"py","Py",config.generatePy); printLanguageFilterForm(f,"lua","Lua",config.generateLua); printLanguageFilterForm(f,"cs","C#",config.generateCs); pageTpl+=14; } else if ( strncmp(pageTpl,"${PREV_LINK}",12) == 0 ) { // prev page link fprintf(f,page->prevLink); pageTpl+=12; } else if ( strncmp(pageTpl,"${NEXT_LINK}",12) == 0 ) { // next page link fprintf(f,page->nextLink); pageTpl+=12; } else if ( strncmp(pageTpl,"${PAGE_TITLE}",13) == 0 ) { // page title if ( page == root ) fprintf(f,page->desc); else fprintf(f,"%s. %s",page->pageNum, page->title); pageTpl+=13; } else if ( strncmp(pageTpl,"${PAGE_CONTENT}",15) == 0 ) { pageTpl+=15; // sub pages toc if ( page == root ) printRootPageToc(f,page); else printStandardPageToc(f,page); // functions toc if ( page->funcs.size() > 1 ) { fprintf(f,"<div id=\"toc\"><ul>\n"); int i=0; for ( FuncData **fit=page->funcs.begin(); fit != page->funcs.end(); fit++,i++) { FuncData *funcData=*fit; if ( funcData->title ) { fprintf(f, "<li><a href=\"#%d\">%s</a></li>", i,funcData->title); } } fprintf(f,"</ul></div>\n"); } // page description if ( page != root && page->desc ) { fprintf(f,"<p>"); printHtml(f,page->desc); fprintf(f,"</p>\n"); if ( page->colorTable ) printColorTable(f); } // functions int i=0; for ( FuncData **fit=page->funcs.begin(); fit != page->funcs.end(); fit++,i++) { FuncData *funcData=*fit; // title and description fprintf(f,"<a name=\"%d\"></a>",i); if (funcData->title) fprintf(f,"<h3>%s</h3>\n",funcData->title); if (funcData->desc) { fprintf(f,"<p>"); printHtml(f,funcData->desc); fprintf(f,"</p>\n"); } // functions for each language fprintf(f,"<div class=\"code\">"); if (config.generateCpp && funcData->cpp) { fprintf(f,"<p class=\"cpp\">"); printCppCode(f,funcData->cpp); fprintf(f,"</p>\n"); } if (config.generateC && funcData->c) { fprintf(f,"<p class=\"c\">"); printCCode(f,funcData->c); fprintf(f,"</p>\n"); } if (config.generatePy && funcData->py) { fprintf(f,"<p class=\"py\">"); printPyCode(f,funcData->py); fprintf(f,"</p>\n"); } if (config.generateCs && funcData->cs) { fprintf(f,"<p class=\"cs\">"); printCSCode(f,funcData->cs); fprintf(f,"</p>\n"); } if (config.generateLua && funcData->lua) { fprintf(f,"<p class=\"lua\">"); printLuaCode(f,funcData->lua); fprintf(f,"</p>\n"); } fprintf(f,"</div>\n"); // parameters table if ( !funcData->params.isEmpty()) { fprintf(f,"<table class=\"param\"><tbody><tr><th>Parameter</th><th>Description</th></tr>"); bool hilite=true; for ( ParamData **pit = funcData->params.begin(); pit != funcData->params.end(); pit++) { if ( hilite ) fprintf(f,"<tr class=\"hilite\">"); else fprintf(f,"<tr>"); fprintf(f,"<td>%s</td><td>",(*pit)->name); printHtml(f,(*pit)->desc); fprintf(f,"</td></tr>\n"); hilite=!hilite; } fprintf(f,"</tbody></table>"); } // examples if ( funcData->cppEx || funcData->cEx || funcData->pyEx ) { fprintf(f,"<h6>Example:</h6><div class=\"code\">\n"); if (config.generateCpp && funcData->cppEx) { fprintf(f,"<p class=\"cpp\">"); printCppCode(f,funcData->cppEx); fprintf(f,"</p>\n"); } if (config.generateC && funcData->cEx) { fprintf(f,"<p class=\"c\">"); printCCode(f,funcData->cEx); fprintf(f,"</p>\n"); } if (config.generatePy && funcData->pyEx) { fprintf(f,"<p class=\"py\">"); printPyCode(f,funcData->pyEx); fprintf(f,"</p>\n"); } if (config.generateCs && funcData->csEx) { fprintf(f,"<p class=\"cs\">"); printCSCode(f,funcData->csEx); fprintf(f,"</p>\n"); } if (config.generateLua && funcData->luaEx) { fprintf(f,"<p class=\"lua\">"); printLuaCode(f,funcData->luaEx); fprintf(f,"</p>\n"); } fprintf(f,"</div><hr>\n"); } } } else { fputc(*pageTpl,f); pageTpl++; } } fclose(f); }
void BattleServerLog::onVariation(int player, int bonus, int malus) { printHtml("Variation", tr("%1+%2, %3").arg(toBoldColor(tr("%1's variation: ").arg(data()->name(player)), Qt::blue)).arg(bonus).arg(malus)); }