DWORD print(CubeMainBIN* curForm, LPWSTR buf, LPINT len, DWORD)//maxsize) { if (!buf || !curForm || !curForm->enabled) return 0; InNoSocket = false; int realNbInputs=0; printInputItem(&curForm->input1, buf, len, &realNbInputs); printInputItem(&curForm->input2, buf, len, &realNbInputs); printInputItem(&curForm->input3, buf, len, &realNbInputs); printInputItem(&curForm->input4, buf, len, &realNbInputs); printInputItem(&curForm->input5, buf, len, &realNbInputs); printInputItem(&curForm->input6, buf, len, &realNbInputs); printInputItem(&curForm->input7, buf, len, &realNbInputs); if (realNbInputs != curForm->numinputs) { PRINT(BUF, L" *** ERROR : numInputs(%d) != realNbInputs(%d) ***", curForm->numinputs, realNbInputs); return 1; } PRINT(BUF,L" => "); int realNbOutputs=0; printOutputItem(&curForm->output1, buf, len, &realNbOutputs); printOutputItem(&curForm->output2, buf, len, &realNbOutputs); printOutputItem(&curForm->output3, buf, len, &realNbOutputs); // if (curForm->ladder) // sprintf(BUF," [ladder only]"); if (curForm->minDiff == 1) PRINT(BUF, L" %s", getLocalString(STR_ONLY_N_H)); else if (curForm->minDiff == 2) PRINT(BUF, L" %s", getLocalString(STR_ONLY_HELL)); if (curForm->playerClass != 0xFF) { CharStatsBIN* charStats = D2GetCharStatsBIN(curForm->playerClass); PRINT(BUF, L" ("); PRINT(BUF, getLocalString(STR_ONLY_CLASS), charStats->name); PRINT(BUF, L")"); } if ((curForm->op>0) && (curForm->op!=28)) PRINT(BUF, L" [op%d(%d,%d)]", curForm->op, curForm->param, curForm->value); // if (curForm->version == 100) // sprintf(BUF, " [expansion only]"); return 1; }
std::string Bundle::formatMessage(const std::string &key, const std::vector<std::string> *parms) const { std::string messageIn = getLocalString(key); std::string messageOut; if (!parms || (parms->size() == 0)) return messageIn; int parmCnt = parms->size(); int startPos = 0; int lCurlyPos = messageIn.find_first_of("{"); while (lCurlyPos >= 0) { messageOut += messageIn.substr( startPos, lCurlyPos - startPos); int rCurlyPos = messageIn.find_first_of("}", lCurlyPos++); if (rCurlyPos < 0) { messageOut += messageIn.substr(lCurlyPos); return messageOut; } std::string numStr = messageIn.substr(lCurlyPos, rCurlyPos-lCurlyPos); int num; if (sscanf(numStr.c_str(), "%d", &num) != 1) messageOut += messageIn.substr(lCurlyPos, rCurlyPos-lCurlyPos); else { num--; if ((num >= 0) && (num < parmCnt)) messageOut += (*parms)[num]; } startPos = rCurlyPos+1; lCurlyPos = messageIn.find_first_of("{", startPos); } messageOut += messageIn.substr(startPos); return messageOut; }
void STDCALL printDisabledStatsBtn(WORD statID, sDrawImageInfo* data, DWORD x, DWORD y, DWORD p4, DWORD p5, DWORD p6) { if ( onRealm || !D2isLODGame()) { D2PrintImage(data,x,y,p4,p5,p6); return; } Unit* ptChar = D2GetClientPlayer(); CharStatsBIN* charStats = D2GetCharStatsBIN(ptChar->nPlayerClass); int minValue=1; switch (statID) { case STATS_STRENGTH: minValue = charStats->baseSTR; break; case STATS_DEXTERITY: minValue = charStats->baseDEX; break; case STATS_VITALITY: minValue = charStats->baseVIT; break; case STATS_ENERGY: minValue = charStats->baseENE; break; } int statValue = D2GetPlayerBaseStat(ptChar, statID, 0); if (isOnRect(D2GetMouseX(),D2GetMouseY(),x+5,y+5,32,32)) { WCHAR text[100]; if (active_StatsShiftClickLimit) _snwprintf(text, sizeof(text) - 1, getLocalString(STR_STATS_UNASSIGN_WITH_LIMIT), limitValueToShiftClick); else _snwprintf(text, sizeof(text) - 1, getLocalString(STR_STATS_UNASSIGN_WITHOUT_LIMIT)); wcscat(text,L"\n"); int len = wcslen(text); _snwprintf(text + len, sizeof(text) - len, getLocalString(STR_STATS_BASE_MIN), statValue, minValue); D2SetFont(1); D2PrintPopup(text, x+18, y-32, WHITE, 1); } if ( GetKeyState(keyUsedForUnassignStatPoint) >= 0) { if ( D2GetPlayerBaseStat(ptChar, 4, 0) <= 0) setFrame(data, 2); } else { setImage(data, unassignStatsBtnImages); if (minValue >= statValue) setFrame(data, 2); } D2PrintImage(data,x,y,p4,p5,p6); }
void FASTCALL printPageNumber(LPWSTR maxGoldText, DWORD x, DWORD y, DWORD color, DWORD bfalse) { if (onRealm || !D2isLODGame() ) { D2PrintString(maxGoldText,x,y,color,bfalse); return; } Unit* ptChar = D2GetClientPlayer(); WCHAR popupText[100]; if (PCPY->currentStash) { bool isShared = PCPY->currentStash->isShared; bool isIndex = PCPY->currentStash->isIndex; DWORD currentId = PCPY->currentStash->id; if (PCPY->currentStash->name && PCPY->currentStash->name[0]) mbstowcs(popupText,PCPY->currentStash->name,50);//strlen(PCPY->currentStash->name)+1 else _snwprintf(popupText, sizeof(popupText), getLocalString( isShared ? STR_SHARED_PAGE_NUMBER : STR_PERSONAL_PAGE_NUMBER), currentId+1); D2PrintString(popupText, x, y, isShared ? (isIndex ? CRYSTAL_RED : RED) : (isIndex ? BRIGHT_WHITE : WHITE), bfalse); } else { _snwprintf(popupText, sizeof(popupText), getLocalString(STR_NO_SELECTED_PAGE)); D2PrintString(popupText, x, y, WHITE, bfalse); } //printGoldMaxPopup DWORD mx = D2GetMouseX(); DWORD my = D2GetMouseY(); if ((RX(0x5E) < mx) && (mx < RX(0xF8)) && (RY(0x1C8) < my) && (my < RY(0x1B6)) ) { if (active_sharedGold) { _snwprintf(popupText, sizeof(popupText), L"%s\n%s: %u", maxGoldText, getLocalString(STR_SHARED_GOLD_QUANTITY), PCPY->sharedGold); DWORD x = D2GetPixelLen(maxGoldText); DWORD x2 = D2GetPixelLen(popupText) - x; D2PrintPopup(popupText, RX(0xA8-max(x,x2)/2), RY(0x1CA), WHITE, 0); } else D2PrintPopup(maxGoldText, RX(0xA8), RY(0x1CA), WHITE, 1); } }
//6FB21FAA void STDCALL printRunewordsPage() { if (!D2isLODGame() || !D2GetResolution()) return D2PrintStatsPage(); LPWSTR lpText; bDontPrintBorder = true; //Init data for print image sDrawImageInfo data; ZeroMemory(&data,sizeof(data)); //print background /* setImage(&data, newStatsInterfaceImages); setFrame(&data, 0); D2PrintImage(&data, 0, 256, -1, 5, 0); setFrame(&data, 1); D2PrintImage(&data, 256,256, -1, 5, 0); setFrame(&data, 2); D2PrintImage(&data, 0, 512, -1, 5, 0); setFrame(&data, 3); D2PrintImage(&data, 256,512, -1, 5, 0); setFrame(&data, 4); D2PrintImage(&data, 0, 552, -1, 5, 0); setFrame(&data, 5); D2PrintImage(&data, 256,552, -1, 5, 0); */ fillRect(0,0,400,552,0,5); //print button close setImage(&data, D2LoadBuySelBtn()); setFrame(&data, 10 + isDownBtn.close); D2PrintImage(&data, getXCloseBtn(), getYCloseBtn(), -1, 5, 0); //print next page button setFrame(&data, isDownBtn.nextPage); D2PrintImage(&data, getXNextPageBtn(), getYNextPageBtn(), -1, 5, 0); //print previous runes button setImage(&data, stashBtnsImages); setFrame(&data, isDownBtn.prevRunes); D2PrintImage(&data, getXPrevRunesBtn(), getYPrevRunesBtn(), -1, 5, 0); //print previous runes button setFrame(&data, 2 + isDownBtn.nextRunes); D2PrintImage(&data, getXNextRunesBtn(), getYNextRunesBtn(), -1, 5, 0); D2SetFont(6); //146;//B400 int nbRunes = *D2GetNbRunesBIN(); RunesBIN* runesFirst = nbRunes>1 ? D2GetRunesBIN(1)-1 : NULL; RunesBIN* runesLast = runesFirst? runesFirst + nbRunes : NULL; // log_msg("nbRunes(%d,%d) runesFirst(%08X, %08X) runesLast(%08X, %08X)",nbRunes,SgptDataTables->nbRunes,runesFirst, SgptDataTables->runes,runesLast,SgptDataTables->runes + SgptDataTables->nbRunes); int nbRunesCompleted=0; DWORD curNbRunes=0; for ( RunesBIN* runesData = runesFirst; runesData < runesLast; runesData++) { if (!runesData->Complete || runesData->Server) continue; nbRunesCompleted++; if ( (curRunesPage * NB_RUNES_PER_PAGE < nbRunesCompleted) && (nbRunesCompleted <= (curRunesPage+1) * NB_RUNES_PER_PAGE) ) printRuneword(runesData, curNbRunes++); } maxRunesPage = nbRunesCompleted ? (nbRunesCompleted-1) / NB_RUNES_PER_PAGE : 0; //////////////////// POPUP PRINTING //////////////////// //set MouseX & MouseY DWORD x = D2GetMouseX(); DWORD y = D2GetMouseY(); if (isOnCloseBtn(x,y)) // print popup "close" { D2PrintPopup(D2GetStringFromIndex(0x1030), getXCloseBtn()+getLCloseBtn()/2, getYCloseBtn()-getHCloseBtn(), WHITE, 1); } else if (isOnNextPageBtn(x,y)) // print popup "next page" { lpText = getLocalString(STR_NEXT_PAGE); D2PrintPopup(lpText, getXNextPageBtn()+getLNextPageBtn()/2, getYNextPageBtn()-getHNextPageBtn(), WHITE, 1); } }
void* STDCALL printBtns() { if (onRealm || !D2isLODGame()) return D2LoadBuySelBtn(); Unit* ptChar = D2GetClientPlayer(); sDrawImageInfo data; ZeroMemory(&data,sizeof(data)); setImage(&data, stashBtnsImages); setFrame(&data, 0 + isDownBtn.previous); D2PrintImage(&data, getXPreviousBtn(), getYPreviousBtn(), -1, 5, 0); setFrame(&data, 2 + isDownBtn.next); D2PrintImage(&data, getXNextBtn(), getYNextBtn(), -1, 5, 0); if (active_sharedStash) { setFrame(&data, 4 + isDownBtn.toggleToSharedStash + (PCPY->showSharedStash?2:0) ); D2PrintImage(&data, getXSharedBtn(), getYSharedBtn(), -1, 5, 0); } setFrame(&data, 8 + isDownBtn.previousIndex); D2PrintImage(&data, getXPreviousIndexBtn(), getYPreviousIndexBtn(), -1, 5, 0); setFrame(&data, 10 + isDownBtn.nextIndex); D2PrintImage(&data, getXNextIndexBtn(), getYNextIndexBtn(), -1, 5, 0); if (active_sharedGold) { setImage(&data, sharedGoldBtnsImages); setFrame(&data, 0 + isDownBtn.putGold); D2PrintImage(&data, getXPutGoldBtn(), getYPutGoldBtn(), -1, 5, 0); setFrame(&data, 2 + isDownBtn.takeGold); D2PrintImage(&data, getXTakeGoldBtn(), getYTakeGoldBtn(), -1, 5, 0); } LPWSTR lpText; WCHAR text[100]; DWORD mx = D2GetMouseX(); DWORD my = D2GetMouseY(); D2SetFont(1); if (isOnButtonPreviousStash(mx,my)) { lpText = getLocalString(STR_STASH_PREVIOUS_PAGE); D2PrintPopup(lpText, getXPreviousBtn()+getLPreviousBtn()/2, getYPreviousBtn()-getHPreviousBtn(), WHITE, 1); } else if (isOnButtonNextStash(mx,my)) { lpText = getLocalString(STR_STASH_NEXT_PAGE); D2PrintPopup(lpText, getXNextBtn()+getLNextBtn()/2, getYNextBtn()-getHNextBtn(), WHITE, 1); } else if (active_sharedStash && isOnButtonToggleSharedStash(mx,my)) { lpText = getLocalString(PCPY->showSharedStash ? STR_TOGGLE_TO_PERSONAL : STR_TOGGLE_TO_SHARED); D2PrintPopup(lpText, getXSharedBtn()+getLSharedBtn()/2, getYSharedBtn()-getHSharedBtn(), WHITE, 1); } else if (isOnButtonPreviousIndexStash(mx,my)) { _snwprintf(text, sizeof(text), getLocalString(STR_STASH_PREVIOUS_INDEX) ,nbPagesPerIndex,nbPagesPerIndex2); D2PrintPopup(text, getXPreviousIndexBtn()+getLPreviousIndexBtn()/2, getYPreviousIndexBtn()-getHPreviousIndexBtn(), 0, 0); } else if (isOnButtonNextIndexStash(mx,my)) { _snwprintf(text, sizeof(text), getLocalString(STR_STASH_NEXT_INDEX) ,nbPagesPerIndex,nbPagesPerIndex2); D2PrintPopup(text, getXNextIndexBtn()+getLNextIndexBtn()/2, getYNextIndexBtn()-getHNextIndexBtn(), WHITE, 1); } else if (active_sharedGold && isOnButtonPutGold(mx,my)) { lpText = getLocalString(STR_PUT_GOLD); D2PrintPopup(lpText, getXPutGoldBtn()+getLPutGoldBtn()/2, getYPutGoldBtn()-getHPutGoldBtn(), WHITE, 1); } else if (active_sharedGold && isOnButtonTakeGold(mx,my)) { lpText = getLocalString(STR_TAKE_GOLD); D2PrintPopup(lpText, getXTakeGoldBtn()+getLTakeGoldBtn()/2, getYTakeGoldBtn()-getHTakeGoldBtn(), WHITE, 1); } return D2LoadBuySelBtn(); }
void STDCALL printNewStatsPageTwo(int currentPage) { if (!D2isLODGame()) return D2PrintStatsPage(); WCHAR text[BUFSIZE]; LPWSTR lpText; bDontPrintBorder = false; Unit* ptChar = D2GetClientPlayer(); d2_assert(!ptChar, "Printing stats page : no character selected",__FILE__,__LINE__); d2_assert(ptChar->nUnitType != UNIT_PLAYER, "Printing stats page : bad unit type",__FILE__,__LINE__); //Init data for print image sDrawImageInfo data; ZeroMemory(&data,sizeof(data)); //print background fillRect(RX(0),RY(480),320,432,0,5);//552 setImage(&data, newStatsInterfaceImages); setFrame(&data, 0); D2PrintImage(&data, RX(0), RY(224), -1, 5, 0); setFrame(&data, 1); D2PrintImage(&data, RX(256),RY(224), -1, 5, 0);//256 setFrame(&data, 2); D2PrintImage(&data, RX(0), RY(48), -1, 5, 0);//432 setFrame(&data, 3); D2PrintImage(&data, RX(256),RY(48), -1, 5, 0); D2SetFont(1); for (int i=0; i<nbStatsInterface; i++) manageStatLine(ptChar, &statsInterface[i], currentPage, text); /* // DWORD x,y; // DWORD curValue; // CharStatsBIN* charStats = D2GetCharStatsBIN(ptChar->nPlayerClass); // DifficultyLevelsBIN* difficultyLevels = D2GetDifficultyLevelsBIN (D2GetDifficultyLevel()); //print deadly Strike / Critical Strike x=RX(25); y=RY(445); Unit* ptItem = D2GetSkillItem(ptChar); DWORD cs = ptItem ? D2GetCriticalStrikeFromMasteries(ptChar,ptItem,0,2) : 0; cs = cs>100?100:cs; cs += D2GetPlayerStat(ptChar, STATS_PASSIVE_CRITICAL_STRIKE, 0)*(100-cs)/100; cs = cs>100?100:cs; //SkillDescBIN* skilldesc = SgptDataTables->skilldesc + 9; LPWSTR lpCS = D2GetStringFromIndex(skilldesc->strNameID); lpText = D2GetStringFromIndex(getDescStrPos(STATS_ITEM_DEADLYSTRIKE)); curValue = D2GetPlayerStat(ptChar, STATS_ITEM_DEADLYSTRIKE, 0); cs += curValue*(100-cs)/100; curValue = cs>100?100:cs; swprintf(text,L"%i%% %s/%s",curValue,lpCS,lpText); D2SetFont(1); D2SetFont( D2GetPixelLen(text)>0x110 ? 6 : 1); D2PrintString(text, x, y, WHITE, 0); */ //print background previous/next page buttons setImage(&data, statsBackgroundImages); setFrame(&data, D2GetResolution()?1:0); D2PrintImage(&data, getXPreviousPageBtn()-7, getYPreviousPageBtn()+8, -1, 5, 0); //print button close setImage(&data, D2LoadBuySelBtn()); setFrame(&data, 10 + isDownBtn.close); D2PrintImage(&data, getXCloseBtn(), getYCloseBtn(), -1, 5, 0); //print previous page button setFrame(&data, 12 + isDownBtn.previousPage); D2PrintImage(&data, getXPreviousPageBtn(), getYPreviousPageBtn(), -1, 5, 0); //print next page button setFrame(&data, 14 + isDownBtn.nextPage); D2PrintImage(&data, getXNextPageBtn(), getYNextPageBtn(), -1, 5, 0); //////////////////// POPUP PRINTING //////////////////// //set MouseX & MouseY DWORD mx = D2GetMouseX(); DWORD my = D2GetMouseY(); D2SetFont(1); if (isOnCloseBtn(mx,my)) // print popup "close" { D2PrintPopup(D2GetStringFromIndex(0x1030), getXCloseBtn()+getLCloseBtn()/2, getYCloseBtn()-getHCloseBtn(), WHITE, 1); } else if (isOnPreviousPageBtn(mx,my)) //print popup "previous page" { lpText = getLocalString(STR_PREVIOUS_PAGE); D2PrintPopup(lpText, getXPreviousPageBtn()+getLPreviousPageBtn()/2, getYPreviousPageBtn()-getHPreviousPageBtn(), WHITE, 1); } else if (isOnNextPageBtn(mx,my)) //print popup "next page" { lpText = getLocalString(STR_NEXT_PAGE); D2PrintPopup(lpText, getXNextPageBtn()+getLNextPageBtn()/2, getYNextPageBtn()-getHNextPageBtn(), WHITE, 1); } }
/* 6FC9275F |. E8 ECCCFFFF |CALL D2Game.6FC8F450 ; \D2Game.6FC8F450 */ void printOutputItem(CubeOutput* output, LPWSTR buf, LPINT len, LPINT nbOutputs) { if (output->outputType == 0) return; if (*nbOutputs > 0) PRINT(BUF, L" + "); *nbOutputs += 1; if (output->outputType == 1) { PRINT(BUF, getLocalString(STR_COW_PORTAL)); return; } else if (output->outputType == 2) { PRINT(BUF, getLocalString(STR_PANDEMONIUM_PORTAL)); return; } else if (output->outputType == 3) { PRINT(BUF, getLocalString(STR_PANDEMONIUM_FINAL_PORTAL)); return; } if ((output->quantityOrNbSockets>1) && !output->haveSockets) { if (output->quantityOrNbSockets = 255) PRINT(BUF, L"%s ", getLocalString(STR_FULL)); else PRINT(BUF, L"%u ", output->quantityOrNbSockets); } if (output->repair) PRINT(BUF, L"%s ", getLocalString(STR_REPAIR)); if (output->repair && output->recharge) PRINT(BUF, L"%s ", getLocalString(STR_AND)); if (output->recharge) PRINT(BUF, L"%s ", getLocalString(STR_RECHARGE)); if (output->destroysFillers) PRINT(BUF, L"%s ", getLocalString(STR_DESTROY_FILLERS)); if (output->removeFillers) PRINT(BUF, L"%s ", getLocalString(STR_REMOVE_FILLERS)); if (output->regeneratesUnique) PRINT(BUF, L"%s ", getLocalString(STR_REGENERATE)); if (output->upgradeToExceptional) PRINT(BUF, L"%s ", getLocalString(STR_UPGRADE_TO_EXCEPTIONAL)); if (output->upgradeToElite) PRINT(BUF, L"%s ", getLocalString(STR_UPGRADE_TO_ELITE)); if (output->isEthereal) PRINT(BUF, L"%s ", getLocalString(STR_ETHERAL)); if (output->isSpecificItem) { if (output->quality == ITEMQUALITY_UNIQUE) { UniqueItemsBIN* uniqueItems = SgptDataTables->uniqueItems + output->specificID-1; PRINT(BUF, D2GetStringFromIndex(uniqueItems->uniqueNameId)); } else if (output->quality == ITEMQUALITY_SET) { SetItemsBIN* setItems = SgptDataTables->setItems + output->specificID-1; PRINT(BUF, D2GetStringFromIndex(setItems->setNameId)); } else { PRINT(BUF,STRING_ERROR);return; } } else { switch (output->quality) { case 1:PRINT(BUF, L"%s ", getLocalString(STR_CRACKED));break; case 2:PRINT(BUF, L"%s ", getLocalString(STR_NORMAL));break; case 3:PRINT(BUF, L"%s ", getLocalString(STR_SUPERIOR));break; case 4:PRINT(BUF, L"%s ", getLocalString(STR_MAGIC));break; case 5:PRINT(BUF, L"%s ", getLocalString(STR_SET));break; case 6:PRINT(BUF, L"%s ", getLocalString(STR_RARE));break; case 7:PRINT(BUF, L"%s ", getLocalString(STR_UNIQUE));break; case 8:PRINT(BUF, L"%s ", getLocalString(STR_CRAFTED));break; case 9:PRINT(BUF, L"%s ", getLocalString(STR_TEMPERED));break; } switch (output->outputType) { case 0xFC: { ItemsBIN* items = D2GetItemsBIN(output->ID); PRINT(BUF, StripGender(D2GetStringFromIndex(items->NameStr))); break; } case 0xFD: { ItemTypesBIN* itemTypeData = D2GetItemTypesBIN(output->ID); if (!itemTypeData) PRINT(BUF, L"Unknow Item Type"); else PRINT(BUF, getLocalTypeString(itemTypeData->code)); break; } case 0xFE: PRINT(BUF, L"%s", getLocalString(STR_ITEM)); break; case 0xFF: PRINT(BUF, L"%s", getLocalString(STR_ITEM_SAME_TYPE)); break; default: PRINT(BUF, L"%s ", STRING_ERROR); return; } } if (output->haveSockets == 1 || InNoSocket) { PRINT(BUF, L" "); if (output->quantityOrNbSockets >= 1) PRINT(BUF, getLocalString(STR_WITH_N_SOCKETS), output->quantityOrNbSockets); // else if (output->quantityOrNbSockets == 1) // PRINT(BUF, getLocalString(STR_WITH_ONE_SOCKET)); else PRINT(BUF, getLocalString(STR_WITH_SOCKETS)); } }
void printInputItem(CubeInput* input, LPWSTR buf, LPINT len, LPINT nbInputs)//maxsize) { if (!input->byItemID && !input->byItemTypeID) return; if (*nbInputs) PRINT(BUF, L" + "); BYTE nb = input->quantity > 0 ? input->quantity : 1; *nbInputs += nb; if (nb > 1) PRINT(BUF, L"%u ", nb); if (input->isEthereal) PRINT(BUF, L"%s ", getLocalString(STR_ETHERAL)); if (input->isNotEthereal) PRINT(BUF, L"%s ", getLocalString(STR_NOT_ETHERAL)); if (input->isNotRuneword) PRINT(BUF, L"%s ", getLocalString(STR_NOT_RUNEWORD)); if (input->isBasic) PRINT(BUF, L"%s ", getLocalString(STR_BASIC)); if (input->isExceptional) PRINT(BUF, L"%s ", getLocalString(STR_EXCEPTIONAL)); if (input->isElite) PRINT(BUF, L"%s ", getLocalString(STR_ELITE)); if (input->isSpecificItem) { if (input->quality == ITEMQUALITY_UNIQUE) { UniqueItemsBIN* uniqueItems = SgptDataTables->uniqueItems + input->specificID - 1; PRINT(BUF, StripGender(D2GetStringFromIndex(uniqueItems->uniqueNameId))); } else if (input->quality == ITEMQUALITY_SET) { SetItemsBIN* setItems = SgptDataTables->setItems + input->specificID - 1; PRINT(BUF, StripGender(D2GetStringFromIndex(setItems->setNameId))); } else { PRINT(BUF, L"%s ", STRING_ERROR); return; } } else { switch (input->quality) { case 1:PRINT(BUF, L"%s ", getLocalString(STR_CRACKED)); break; case 2:PRINT(BUF, L"%s ", getLocalString(STR_NORMAL)); break; case 3:PRINT(BUF, L"%s ", getLocalString(STR_SUPERIOR)); break; case 4:PRINT(BUF, L"%s ", getLocalString(STR_MAGIC)); break; case 5:PRINT(BUF, L"%s ", getLocalString(STR_SET)); break; case 6:PRINT(BUF, L"%s ", getLocalString(STR_RARE)); break; case 7:PRINT(BUF, L"%s ", getLocalString(STR_UNIQUE)); break; case 8:PRINT(BUF, L"%s ", getLocalString(STR_CRAFTED)); break; case 9:PRINT(BUF, L"%s ", getLocalString(STR_TEMPERED)); break; } if (input->byItemTypeID) { ItemTypesBIN* itemTypeData = D2GetItemTypesBIN(input->ID); if (!itemTypeData) PRINT(BUF, L"Unknow Item Type"); else PRINT(BUF, getLocalTypeString(itemTypeData->code)); } else if (input->ID == 0xFFFF) { PRINT(BUF, getLocalString(STR_ITEM)); } else { ItemsBIN* items = D2GetItemsBIN(input->ID); PRINT(BUF, StripGender(D2GetStringFromIndex(items->NameStr))); } } if (input->includeUpgradedVersions && !input->isElite) PRINT(BUF, L" %s", getLocalString(STR_INCLUDE_UPGRADED)); if (input->haveNoSocket) { PRINT(BUF, L" %s", getLocalString(STR_WITHOUT_SOCKET)); InNoSocket = true; } if (input->haveSockets) PRINT(BUF, L" %s", getLocalString(STR_WITH_SOCKETS)); }