View Single Post
  #7  
Old 10-23-2011, 02:09 AM
revloc02c's Avatar
revloc02c
Hill Giant
 
Join Date: Aug 2010
Location: UT
Posts: 215
Default

Umm, there were some bugs in the code, so here's the edited version with all the fixes and updates:
Code:
-- ----------------------------
-- Function structure for `fn_displayClasses`
-- ----------------------------
DROP FUNCTION IF EXISTS `fn_displayClasses`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `fn_displayClasses`(classes int) RETURNS varchar(128) CHARSET utf8
BEGIN
	-- receives bitmask number for classes and converts it to a list of classes

	DECLARE classList VARCHAR(128);
	SET classList = "";

	IF classes = 0 THEN
		SET classList = CONCAT(classList, "None, ");
	END IF;
	IF (classes & 1) = 1 THEN
		SET classList = CONCAT(classList, "WAR, ");
	END IF;
	IF (classes & 2) = 2 THEN
		SET classList = CONCAT(classList, "CLR, ");
	END IF;
	IF (classes & 4) = 4 THEN
		SET classList = CONCAT(classList, "PAL, ");
	END IF;
	IF (classes & 8) = 8 THEN
		SET classList = CONCAT(classList, "RGN, ");
	END IF;
	IF (classes & 16) = 16 THEN
		SET classList = CONCAT(classList, "SHD, ");
	END IF;
	IF (classes & 32) = 32 THEN
		SET classList = CONCAT(classList, "DRU, ");
	END IF;
	IF (classes & 64) = 64 THEN
		SET classList = CONCAT(classList, "MNK, ");
	END IF;
	IF (classes & 128) = 128 THEN
		SET classList = CONCAT(classList, "BRD, ");
	END IF;
	IF (classes & 256) = 256 THEN
		SET classList = CONCAT(classList, "ROG, ");
	END IF;
	IF (classes & 512) = 512 THEN
		SET classList = CONCAT(classList, "SHM, ");
	END IF;
	IF (classes & 1024) = 1024 THEN
		SET classList = CONCAT(classList, "NEC, ");
	END IF;
	IF (classes & 2048) = 2048 THEN
		SET classList = CONCAT(classList, "WIZ, ");
	END IF;
	IF (classes & 4096) = 4096 THEN
		SET classList = CONCAT(classList, "MAG, ");
	END IF;
	IF (classes & 8192) = 8192 THEN
		SET classList = CONCAT(classList, "ENC, ");
	END IF;
	IF (classes & 16384) = 16384 THEN
		SET classList = CONCAT(classList, "BST, ");
	END IF;
	IF (classes & 32768) = 32768 THEN
		SET classList = CONCAT(classList, "BER, ");
	END IF;
	IF classes = 65535 THEN
		SET classList = "ALL, ";
	END IF;

	SET classList = LEFT(classList, (LENGTH(classList) - 2));
	RETURN classList;

END
;;
DELIMITER ;
Also made one for races:
Code:
-- ----------------------------
-- Function structure for `fn_displayRaces`
-- ----------------------------
DROP FUNCTION IF EXISTS `fn_displayRaces`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `fn_displayRaces`(races int) RETURNS varchar(128) CHARSET utf8
BEGIN
	-- receives bitmask number for races and converts it to a list of races

	DECLARE raceList VARCHAR(128);
	SET raceList = "";

	IF races = 0 THEN
		SET raceList = CONCAT(raceList, "None, ");
	END IF;
	IF (races & 1) = 1 THEN
		SET raceList = CONCAT(raceList, "HUM, ");
	END IF;
	IF (races & 2) = 2 THEN
		SET raceList = CONCAT(raceList, "BAR, ");
	END IF;
	IF (races & 4) = 4 THEN
		SET raceList = CONCAT(raceList, "ERU, ");
	END IF;
	IF (races & 8) = 8 THEN
		SET raceList = CONCAT(raceList, "ELF, ");
	END IF;
	IF (races & 16) = 16 THEN
		SET raceList = CONCAT(raceList, "HIE, ");
	END IF;
	IF (races & 32) = 32 THEN
		SET raceList = CONCAT(raceList, "DEF, ");
	END IF;
	IF (races & 64) = 64 THEN
		SET raceList = CONCAT(raceList, "HEF, ");
	END IF;
	IF (races & 128) = 128 THEN
		SET raceList = CONCAT(raceList, "DWF, ");
	END IF;
	IF (races & 256) = 256 THEN
		SET raceList = CONCAT(raceList, "TRL, ");
	END IF;
	IF (races & 512) = 512 THEN
		SET raceList = CONCAT(raceList, "OGR, ");
	END IF;
	IF (races & 1024) = 1024 THEN
		SET raceList = CONCAT(raceList, "HFL, ");
	END IF;
	IF (races & 2048) = 2048 THEN
		SET raceList = CONCAT(raceList, "GNM, ");
	END IF;
	IF (races & 4096) = 4096 THEN
		SET raceList = CONCAT(raceList, "IKS, ");
	END IF;
	IF (races & 8192) = 8192 THEN
		SET raceList = CONCAT(raceList, "VAH, ");
	END IF;
	IF (races & 16384) = 16384 THEN
		SET raceList = CONCAT(raceList, "FRG, ");
	END IF;
	IF (races & 32768) = 32768 THEN
		SET raceList = CONCAT(raceList, "Shroud, ");
	END IF;
	IF races = 65535 THEN
		SET raceList = "ALL, ";
	END IF;

	SET raceList = LEFT(raceList, (LENGTH(raceList) - 2));
	RETURN raceList;

END
;;
DELIMITER ;
And here's an example of how you might use them:
Code:
SELECT id, name, weight, itemtype, price, (damage/delay) AS 'Dmg/Dly', classes, fn_displayClasses(classes) AS "Classes List", races, fn_displayRaces(races) AS "Races List"
	FROM items
	WHERE itemtype < 10
	ORDER BY itemtype;
Reply With Quote