in.erase(in_pos,4); g.set_name(game_name); g.set_price(price); p.reset(); p.set_game(&g); p.set_appid(game_id); p.set_price(price); p.set_msrp(msrp); p.update_price(); } else if((in_pos = in.find(search_max_page)) != string::npos){ in.erase(0,in_pos+search_max_page.length()); max_page = read_number_of_pages(in_file,in); } } in_file.close(); cout << "CURRENT PAGE: " << cpage << "/" << max_page << endl; cpage++; } else{ cout << "Failed to connect to Steam's store page." << endl; cout << "Reconnecting in one minute." << endl; Sleep(1000*60*1); } } } int Steam::read_number_of_pages( ifstream &in_file, string & in ){
// opens new books // writeable 1 -> open new books in writable mode // 0 -> open new books in readonly mode void cBooks::openbook_new(UOXSOCKET s, P_ITEM pBook, char writeable) { unsigned char bookopen[10]= "\x93\x40\x01\x02\x03\x01\x01\x00\x02"; //LB 7'th dec 1999, making it client 1.26 complaint int a,b; short pages, bytes; char line[33]; char buch[256][8][33]; char fileName[13]; bool bookexists = false; FILE *file; // I dont know what that new client 1.26 byte does, but it needs to be set to 1 or 2 or writing doesnt work // wild guess: rune books ... char booktitle[61]={0x00,}; char bookauthor[31]={0x00,}; sprintf( fileName, "%8x.bok", pBook->serial); file = fopen( fileName, "r+b"); // open existing file for read/write bookexists = (file!=NULL); if (bookexists) { fclose(file); file = NULL; read_author ( pBook, bookauthor ); // fetch author if existing read_title ( pBook, booktitle ); // fetch title if existing pages = read_number_of_pages(pBook); } else { pages = pBook->morey; // if new book get number of maxpages ... if (pages<1 || pages>255) pages = 16; } // clear all buffers from previous book openings memset( &authorbuffer[s], '~', 32 ); memset( &titlebuffer[s], '~', 62 ); memset( &pagebuffer[s], '~', 511 ); LongToCharPtr(pBook->serial, &bookopen[1]); ShortToCharPtr(pages, &bookopen[7]); if (writeable) bookopen[5] = 1; else bookopen[5] = 0; Xsend(s, bookopen, 9); Xsend(s, booktitle, 60); Xsend(s, bookauthor, 30); if (!bookexists) return; // dont send book contents if the file doesnt exist (yet)! if (!writeable) return; // if readonly book return !! ////////////////////////////////////////////////////////////// // Now we HAVE to send the ENTIRE Book / / // Cauz in writeable mode the client only sends out packets / // if something gets changed / // this also means -> for each bookopening in writeable mode / // lots of data has to be send. / ////////////////////////////////////////////////////////////// unsigned char bookpage_pre[10]="\x66\x01\x02\x40\x01\x02\x03\x00\x01"; unsigned char bookpage[5]="\x00\x00\x00\x08"; // we have to know the total size "in advance" // thats why i save the book data in a temporaray array to // avoid reading it twice from (slow) hd bytes = 9; for (a = 1; a <= pages; a++) { bytes+=4; // 4 bytes for each page for (b=1;b<=8;b++) { read_line(pBook, a,b, line); strcpy(buch[a-1][b-1],line); bytes += static_cast<short>(strlen(line)+1); // plus the stringlength+null terminator per(!) row } } ShortToCharPtr(bytes, &bookpage_pre[1]); LongToCharPtr(pBook->serial, &bookpage_pre[3]); ShortToCharPtr(pages, &bookpage_pre[7]); Xsend(s, bookpage_pre, 9); for (a=1;a<=pages;a++) { ShortToCharPtr(a, &bookpage[0]); Xsend(s, bookpage, 4); for (int j=0;j<8;j++) { Xsend(s, buch[a-1][j], strlen(buch[a-1][j])+1); } } }