Untitled
PROBLEMunknown
mysql
2 years ago
2.5 kB
19
Indexable
g_hDatabase.Query(Thread_Empty,
"DELIMITER // \
CREATE PROCEDURE IN NOT EXISTS `UpdateMapPoints`(IN `in_map_id` INT, IN `in_run_type` INT, IN `in_run_id` INT, IN `in_class` INT) DETERMINISTIC CONTAINS SQL SQL SECURITY INVOKER \
BEGIN \
DECLARE v_rec_id, completions, v_tier INT; \
DECLARE v_rank INT DEFAULT 0; \
DECLARE calculated_points, default_points, wr, pr DOUBLE; \
DECLARE done INT DEFAULT FALSE; \
DECLARE cur CURSOR FOR SELECT record_id, time FROM records ORDER BY time ASC; \
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; \
OPEN cur; \
SELECT COUNT(*) INTO completions FROM records WHERE map_id = in_map_id AND run_type = in_run_type AND run_id = in_run_id AND class = in_class; \
IF in_class = 0 \
THEN \
SELECT soldier_tier INTO v_tier FROM map_info WHERE map_id = in_map_id AND run_type = in_run_type AND run_id = in_run_id; \
ELSEIF in_class = 1 \
THEN \
SELECT demoman_tier INTO v_tier FROM map_info WHERE map_id = in_map_id AND run_type = in_run_type AND run_id = in_run_id; \
END IF; \
SELECT pts INTO default_points FROM points WHERE tier = v_tier; \
loop_through_rows:LOOP \
FETCH cur INTO v_rec_id, pr; \
IF done THEN \
LEAVE loop_through_rows; \
END IF; \
SET v_rank = v_rank + 1; \
IF v_rank = 1 \
THEN \
SET wr = pr; \
SET calculated_points = default_points + ((default_points * ((wr / pr) * 1.5)) * 1.3) + completions; \
ELSE \
SET calculated_points = default_points + ((default_points * ((wr / pr) * 1.5)) / 1.3) + completions * 0.75; \
END IF; \
UPDATE records SET `records`.`rank` = (SELECT v_rank), `records`.`points` = (SELECT calculated_points) WHERE record_id = v_rec_id; \
END LOOP; \
CLOSE cur; \
END \
DELIMITER ;");Editor is loading...
Leave a Comment