Exemplo n.º 1
0
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++;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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;
}