void flood_fill(void){ int didStuff; do { int i,j; didStuff = 0; for (i = 0; i < width; i++){ for (j = 0; j < height; j++){ if (room[i][j] != TOPROCESS) continue; room[i][j] = nextRoom; roomSize[nextRoom]++; didStuff = 1; int dir; for (dir = 1; dir <= 8; dir <<= 1){ if (canGo(dir, map[i][j]) && !room[i+xdir[dir]][j+ydir[dir]]){ room[i+xdir[dir]][j+ydir[dir]] = TOPROCESS; } } } } } while (didStuff); if (roomSize[nextRoom] > largestRoom) largestRoom = roomSize[nextRoom]; nextRoom++; }
bool World::move(shared_ptr<WorldObject> obj, DIRECTION to) { if(canGo(obj, to)){ auto sb = getSbFrom(obj, to); move(obj, sb); return true; } return false; }
bool cansolve(int maze[N][N],int sol[N][N],int row, int col) { int i,j; if(row == N && col== N){ sol[row][col]=1; return true; } if(canGo(maze,row,col)){ sol[row][col]=1; if(cansolve(maze,sol,row+1,col)) return true; else if (cansolve(maze,sol,row,col+1)) return true; else return false; } return false; }
DWORD WINAPI toolThreadProc( LPVOID lpParam ) { CMemReaderProxy reader; CPackSenderProxy sender; CConfigData *config = (CConfigData *)lpParam; int allAtOnce = 0; int buyOrSell = 0; int persistentShouldGo=0; int lastPathNotFoundTm=0; while (!toolThreadShouldStop) { /* for (int i=0;i<MAX_SELLERS;i++) { char buf[2048]; sprintf(buf, "Seller: %d\nTrigger: %s %d %d\nTrigger: %s %d %d\nTrigger: %s %d %d\nTrigger: %s %d %d\nTrigger: %s %d %d\nTrigger: %s %d %d\nTrigger: %s %d %d\nTrigger: %s %d %d\nTrigger: %s %d %d\nTrigger: %s %d %d", i, config->sellItem[i].tradeItem[0].itemName, config->sellItem[i].tradeItem[0].quantityBuySell, config->sellItem[i].tradeItem[0].salePrice, config->sellItem[i].tradeItem[1].itemName, config->sellItem[i].tradeItem[1].quantityBuySell, config->sellItem[i].tradeItem[1].salePrice, config->sellItem[i].tradeItem[2].itemName, config->sellItem[i].tradeItem[2].quantityBuySell, config->sellItem[i].tradeItem[2].salePrice, config->sellItem[i].tradeItem[3].itemName, config->sellItem[i].tradeItem[3].quantityBuySell, config->sellItem[i].tradeItem[3].salePrice, config->sellItem[i].tradeItem[4].itemName, config->sellItem[i].tradeItem[4].quantityBuySell, config->sellItem[i].tradeItem[4].salePrice, config->sellItem[i].tradeItem[5].itemName, config->sellItem[i].tradeItem[5].quantityBuySell, config->sellItem[i].tradeItem[5].salePrice, config->sellItem[i].tradeItem[6].itemName, config->sellItem[i].tradeItem[6].quantityBuySell, config->sellItem[i].tradeItem[6].salePrice, config->sellItem[i].tradeItem[7].itemName, config->sellItem[i].tradeItem[7].quantityBuySell, config->sellItem[i].tradeItem[7].salePrice, config->sellItem[i].tradeItem[8].itemName, config->sellItem[i].tradeItem[8].quantityBuySell, config->sellItem[i].tradeItem[8].salePrice, config->sellItem[i].tradeItem[9].itemName, config->sellItem[i].tradeItem[9].quantityBuySell, config->sellItem[i].tradeItem[9].salePrice); AfxMessageBox(buf); sprintf(buf, "Buyer: %d\nTrigger: %s %d %d %d\nTrigger: %s %d %d %d\nTrigger: %s %d %d %d\nTrigger: %s %d %d %d\nTrigger: %s %d %d %d\nTrigger: %s %d %d %d\nTrigger: %s %d %d %d\nTrigger: %s %d %d %d\nTrigger: %s %d %d %d\nTrigger: %s %d %d %d\n", i, config->buyItem[i].tradeItem[0].itemName, config->buyItem[i].tradeItem[0].quantityBuySell, config->buyItem[i].tradeItem[0].salePrice, config->buyItem[i].tradeItem[0].triggerQuantity, config->buyItem[i].tradeItem[1].itemName, config->buyItem[i].tradeItem[1].quantityBuySell, config->buyItem[i].tradeItem[1].salePrice, config->buyItem[i].tradeItem[1].triggerQuantity, config->buyItem[i].tradeItem[2].itemName, config->buyItem[i].tradeItem[2].quantityBuySell, config->buyItem[i].tradeItem[2].salePrice, config->buyItem[i].tradeItem[2].triggerQuantity, config->buyItem[i].tradeItem[3].itemName, config->buyItem[i].tradeItem[3].quantityBuySell, config->buyItem[i].tradeItem[3].salePrice, config->buyItem[i].tradeItem[3].triggerQuantity, config->buyItem[i].tradeItem[4].itemName, config->buyItem[i].tradeItem[4].quantityBuySell, config->buyItem[i].tradeItem[4].salePrice, config->buyItem[i].tradeItem[4].triggerQuantity, config->buyItem[i].tradeItem[5].itemName, config->buyItem[i].tradeItem[5].quantityBuySell, config->buyItem[i].tradeItem[5].salePrice, config->buyItem[i].tradeItem[5].triggerQuantity, config->buyItem[i].tradeItem[6].itemName, config->buyItem[i].tradeItem[6].quantityBuySell, config->buyItem[i].tradeItem[6].salePrice, config->buyItem[i].tradeItem[6].triggerQuantity, config->buyItem[i].tradeItem[7].itemName, config->buyItem[i].tradeItem[7].quantityBuySell, config->buyItem[i].tradeItem[7].salePrice, config->buyItem[i].tradeItem[7].triggerQuantity, config->buyItem[i].tradeItem[8].itemName, config->buyItem[i].tradeItem[8].quantityBuySell, config->buyItem[i].tradeItem[8].salePrice, config->buyItem[i].tradeItem[8].triggerQuantity, config->buyItem[i].tradeItem[9].itemName, config->buyItem[i].tradeItem[9].quantityBuySell, config->buyItem[i].tradeItem[9].salePrice, config->buyItem[i].tradeItem[9].triggerQuantity); AfxMessageBox(buf); } */ static int tStart=0; Sleep(400); tStart=GetTickCount(); if (buyOrSell == MAX_SELLERS) buyOrSell = allAtOnce = persistentShouldGo = 0; const char* controller=reader.getGlobalVariable("walking_control"); if (!persistentShouldGo && shouldGo(config)){ persistentShouldGo=1; } if (!persistentShouldGo && config->stopBySeller && (!strcmp(controller,"banker") || !strcmp(controller,"depotwalker")) && canGo(config)){ persistentShouldGo=1; } bool control= strcmp(controller,"seller")==0; int modpriority=atoi(reader.getGlobalVariable("walking_priority")); int wantsControl=0; int foundPathToSeller=0; // if wants control if ((allAtOnce || persistentShouldGo)) { //if no path found let other modules work and wait 10 secs before trying again if (time(NULL)-lastPathNotFoundTm > 10){ //if should have control, take it if (!control){ if (atoi(config->modPriorityStr) > modpriority){ reader.setGlobalVariable("walking_control","seller"); reader.setGlobalVariable("walking_priority",config->modPriorityStr); }else{ globalSellerState=CToolSellerState_halfSleep; } } } else { // if doesn't want control globalSellerState=CToolSellerState_noPathFound; //if has control, give it up if (control){ reader.setGlobalVariable("walking_control",""); reader.setGlobalVariable("walking_priority","0"); } } } else { // if doesn't want control globalSellerState=CToolSellerState_notRunning; //if has control, give it up if (control){ reader.setGlobalVariable("walking_control",""); reader.setGlobalVariable("walking_priority","0"); } } if (donaAttackingAndLooting() && strcmp(reader.getGlobalVariable("walking_control"),"seller")==0) { allAtOnce = 1; for (int i = buyOrSell; i < MAX_SELLERS; i++) { if (individualShouldGo(config, i)){ if (findSeller(config, i)) { globalSellerState=CToolSellerState_walking; if (moveToSeller(config,i)) { // High Priority Task reader.setGlobalVariable("walking_control","seller"); reader.setGlobalVariable("walking_priority","9"); globalSellerState=CToolSellerState_talking; config->targetX = config->targetY = config->targetZ = 0; sellItems(config, i); buyItems(config, i); buyOrSell++; reader.setGlobalVariable("walking_control","seller"); reader.setGlobalVariable("walking_priority",config->modPriorityStr); } else break; } else { lastPathNotFoundTm=time(NULL); } } else buyOrSell++; } } } if (strcmp(reader.getGlobalVariable("walking_control"),"seller")==0){ reader.setGlobalVariable("walking_control",""); reader.setGlobalVariable("walking_priority","0"); } globalSellerState=CToolSellerState_notRunning; toolThreadShouldStop=0; return 0; }