CREATE TABLE challenges ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT, start_date DATETIME, end_date DATETIME, is_active BOOLEAN NOT NULL DEFAULT 0, background_image VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); --------------------------------- ALTER TABLE game_resources ADD COLUMN challenge_id INT NULL DEFAULT NULL, ADD CONSTRAINT fk_resource_challenge FOREIGN KEY (challenge_id) REFERENCES challenges (id) ON DELETE SET NULL ON UPDATE CASCADE; --------------------------------- CREATE TABLE `challenge_donations` ( `id` int(11) NOT NULL AUTO_INCREMENT, `challenge_id` int(11) NOT NULL, `user_id` int(11) NOT NULL, `resource_id` int(11) NOT NULL, `amount` int(11) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `challenge_user_resource` (`challenge_id`,`user_id`,`resource_id`), KEY `challenge_id` (`challenge_id`), KEY `user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ------------------------------------- ALTER TABLE `challenges` ADD COLUMN `goals` JSON NULL DEFAULT NULL AFTER `background_image`, ADD COLUMN `personal_donation_goal` INT(11) UNSIGNED NULL DEFAULT NULL AFTER `goals`, ADD COLUMN `total_donation_goal` INT(11) UNSIGNED NULL DEFAULT NULL AFTER `personal_donation_goal`; ----------------------------------- ALTER TABLE challenge_donations ADD COLUMN timestamp DATETIME DEFAULT CURRENT_TIMESTAMP; ----------------------- edit_herausforderung.php ist falsch. es soll für jeden rohstoff eine benötigte menge und eine Persönliche Mindestspende festgelegt werden können. es müssen alles seperate tabelleneintäge sein um davon später aktionen abhängi machen zu können ------------------------------------------------- ALTER TABLE `challenges` DROP COLUMN `goals`, DROP COLUMN `personal_donation_goal`, DROP COLUMN `total_donation_goal`; CREATE TABLE `challenge_resources` ( `id` int(11) NOT NULL AUTO_INCREMENT, `challenge_id` int(11) NOT NULL COMMENT 'Verweis auf die Herausforderung in der `challenges` Tabelle.', `resource_id` int(11) NOT NULL COMMENT 'Verweis auf den Rohstoff in Ihrer Rohstoff-Tabelle.', `required_amount` int(11) NOT NULL COMMENT 'Die insgesamt benötigte Menge dieses Rohstoffs für die Herausforderung.', `personal_minimum_donation` int(11) NOT NULL DEFAULT 0 COMMENT 'Die persönliche Mindestspende, die ein Spieler für diesen Rohstoff leisten muss, um Belohnungen zu erhalten.', `created_at` timestamp NULL DEFAULT current_timestamp(), `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`), FOREIGN KEY (`challenge_id`) REFERENCES `challenges`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; --------------------------------- ich will eine admin seite Herausforderung zähler. mit navilink. wenn eine herausforderung aktiv │ │ ist und wir uns in deren zeitraum befinden sollen die rohstoffe mit entsprechender challenge_id │ │ dort gezählt werden wenn ein spieler sie bekommt. es muss also für jeden spieler einen zähler │ │ für jeden rostoff geben und je einen zähler gesamt für jeden rohstoff um die gesammelte │ │ gesamtmenge zu zählen. ------------------------------ ALTER TABLE `game_buildings` ADD COLUMN `challenge_id` INT(11) DEFAULT NULL, ADD CONSTRAINT `fk_building_challenge` FOREIGN KEY (`challenge_id`) REFERENCES `challenges`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -------------------------------- ALTER TABLE `game_recipes` ADD COLUMN `challenge_id` INT(11) DEFAULT NULL, ADD CONSTRAINT `fk_recipe_challenge` FOREIGN KEY (`challenge_id`) REFERENCES `challenges`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; --------------------------- ALTER TABLE game_islands ADD COLUMN challenge_id INT NULL AFTER name, ADD CONSTRAINT fk_game_islands_challenge_id FOREIGN KEY (challenge_id) REFERENCES challenges(id) ON DELETE SET NULL ON UPDATE CASCADE; -------------------------- ALTER TABLE game_island_auftraege ADD COLUMN challenge_id INT NULL AFTER island_id, ADD CONSTRAINT fk_game_island_auftraege_challenge_id FOREIGN KEY (challenge_id) REFERENCES challenges(id) ON DELETE SET NULL ON UPDATE CASCADE; -------------------------------- CREATE TABLE IF NOT EXISTS challenge_global_progress ( challenge_id INT NOT NULL, resource_id INT NOT NULL, current_amount INT NOT NULL DEFAULT 0, required_amount INT NOT NULL, is_completed BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (challenge_id, resource_id), FOREIGN KEY (challenge_id) REFERENCES challenges(id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (resource_id) REFERENCES game_resources(id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE TABLE IF NOT EXISTS challenge_player_contributions ( challenge_id INT NOT NULL, user_id INT NOT NULL, resource_id INT NOT NULL, contributed_amount INT NOT NULL DEFAULT 0, required_contribution INT NOT NULL, has_earned_fragment BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (challenge_id, user_id, resource_id), FOREIGN KEY (challenge_id) REFERENCES challenges(id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (user_id) REFERENCES game_players(user_id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (resource_id) REFERENCES game_resources(id) ON DELETE CASCADE ON UPDATE CASCADE ); ----------------------------- ALTER TABLE `game_players` ADD COLUMN `challenge_points` INT NOT NULL DEFAULT 0 AFTER `reputation_points`; ---------------------------------- ALTER TABLE `game_island_auftrag_items` ADD COLUMN `reward_challenge_points_per_unit` DECIMAL(10, 4) NOT NULL DEFAULT 0.0000 AFTER `reward_reputation_per_unit`; ----------------------------- ALTER TABLE game_resources ADD COLUMN is_challenge_reward TINYINT(1) NOT NULL DEFAULT 0 AFTER challenge_id; ------------------------- ALTER TABLE challenges ADD COLUMN is_cleaned_up BOOLEAN NOT NULL DEFAULT FALSE; ------------------------ ALTER TABLE game_resources ADD COLUMN merchant_challenge_display BOOLEAN DEFAULT FALSE; -------------------------------- beim fahrenden händler sollen nicht alle herausforderungsrohstoffe angezeigt werden sondern nur bestimmte. man sollte auf edit_rohstoff im admin bereich noch ein drop down haben in dem man den rohstoff wenn herausforderung als beim händler markieren kann.