Décrivez un addon en une phrase et téléchargez-le en zip prêt à installer. C’est gratuit, sans compte, et chaque fonction globale et événement utilisé est vérifié dans la liste d’API de la build Forever 70338.
Interrogez notre IA de dégénéré tryhard sur le créateur d’addons
Décrire votre addon, nos vérifications, réparer après un patch, exemples vérifiés et plus
Tout ce que couvrent nos guides. Les réponses proviennent de cette page et du reste de nos guides, avec les vraies valeurs en graphique et les sections de guide liées. C’est une IA : vérifiez la source avant de la citer.
Essayez
Décrire votre addon
Gratuit. Sans inscription. Vous gardez le code. En panne après un patch ? Collez l’erreur et nous le réparons.
La création personnalisée est désactivée. Les huit exemples vérifiés restent téléchargeables.
Choisissez un exemple ou décrivez votre propre addon.
Votre addon
Pas encore testé en jeu. Client 1.60.1.70338.
Mention IA : créé avec le créateur d’addons WoW Forever Guides (Claude), vérifié dans la liste d’API du client Forever.
Collez l’erreur de la fenêtre de discussion. Si la réparation échoue à la vérification, vous gardez la dernière copie valide et aucun téléchargement n’est proposé.
attempt to compare a secret value
La vérification exige une protection avant l’utilisation de cette valeur.
if issecretvalue(xp) then return end
Exemples vérifiés
Huit exemples pour le client 1.60.1.70338. Pas encore testés en jeu. Aucune capture inventée.
Bloquer le spam d’addons dans le canal de guilde
Masque un message de guilde répété trois fois en une demi-minute. N’enregistre pas son expéditeur.
Aucune erreur de vérification. Pas encore testé en jeu. Client 1.60.1.70338.
local ADDON = ...
local NAME = "GuildChatFilter"
local errors = {}
local function safeCall(func)
return xpcall(func, function(err)
errors[#errors + 1] = tostring(err)
if #errors > 10 then table.remove(errors, 1) end
print(NAME .. " error: " .. tostring(err))
end)
end
local function showErrors()
if #errors == 0 then print(NAME .. ": no errors saved") return end
for i = 1, #errors do print(i .. ". " .. errors[i]) end
end
local seen = {}
local function repeatSpam(message)
local now = GetTime()
local count = 0
local kept = {}
for i = 1, #seen do
if now - seen[i].at < 30 then
kept[#kept + 1] = seen[i]
if seen[i].text == message then count = count + 1 end
end
end
kept[#kept + 1] = { text = message, at = now }
seen = kept
return count >= 2
end
local function filter(_, _, message)
if type(message) ~= "string" or message == "" then return false end
local hide = false
safeCall(function() hide = repeatSpam(message) end)
return hide
end
ChatFrame_AddMessageEventFilter("CHAT_MSG_GUILD", filter)
SLASH_GUILDCHATFILTER1 = "/guildfilter"
SlashCmdList["GUILDCHATFILTER"] = function(msg)
if msg == "errors" then showErrors() else print(NAME .. ": hiding guild lines that repeat within 30 seconds") end
end
Faire scintiller les objets de quête
Liste les objets de quête de vos sacs sur une ligne dorée. Forever n’offre pas ici de scintillement sûr des boutons des sacs : la liste sert donc de signal.
Aucune erreur de vérification. Pas encore testé en jeu. Client 1.60.1.70338.
local ADDON = ...
local NAME = "QuestItemSparkle"
local errors = {}
local function safeCall(func)
return xpcall(func, function(err)
errors[#errors + 1] = tostring(err)
if #errors > 10 then table.remove(errors, 1) end
print(NAME .. " error: " .. tostring(err))
end)
end
local function showErrors()
if #errors == 0 then print(NAME .. ": no errors saved") return end
for i = 1, #errors do print(i .. ". " .. errors[i]) end
end
local frame = CreateFrame("Frame", "QuestItemSparkleFrame", UIParent)
frame:SetSize(240, 72)
frame:SetPoint("CENTER", UIParent, "CENTER", 0, 160)
frame:SetMovable(true)
frame:EnableMouse(true)
frame:RegisterForDrag("LeftButton")
frame:SetScript("OnDragStart", function(self) self:StartMoving() end)
frame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end)
local label = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
label:SetPoint("CENTER")
label:SetText("QuestItemSparkleFrame")
local function scan()
local lines = {}
for bag = 0, 4 do
local slots = C_Container.GetContainerNumSlots(bag) or 0
for slot = 1, slots do
local isQuest = C_Container.GetContainerItemQuestInfo(bag, slot)
if isQuest then
local info = C_Container.GetContainerItemInfo(bag, slot)
local name = info and info.itemID and C_Item.GetItemInfo(info.itemID) or nil
lines[#lines + 1] = name or "Quest item"
end
end
end
if #lines == 0 then label:SetText("No quest items in your bags")
else label:SetText(table.concat(lines, "\n")) end
end
frame:RegisterEvent("BAG_UPDATE")
frame:RegisterEvent("PLAYER_LOGIN")
frame:SetScript("OnEvent", function() safeCall(scan) end)
SLASH_QUESTITEMSPARKLE1 = "/questitems"
SlashCmdList["QUESTITEMSPARKLE"] = function(msg)
if msg == "errors" then showErrors() else scan() end
end
Refuser automatiquement les invitations de groupe
Refuse chaque invitation de groupe à son arrivée. Désactivez-le avec /declineinvites off.
Aucune erreur de vérification. Pas encore testé en jeu. Client 1.60.1.70338.
local ADDON = ...
local NAME = "DeclineInvites"
local errors = {}
local function safeCall(func)
return xpcall(func, function(err)
errors[#errors + 1] = tostring(err)
if #errors > 10 then table.remove(errors, 1) end
print(NAME .. " error: " .. tostring(err))
end)
end
local function showErrors()
if #errors == 0 then print(NAME .. ": no errors saved") return end
for i = 1, #errors do print(i .. ". " .. errors[i]) end
end
local on = true
local frame = CreateFrame("Frame")
frame:RegisterEvent("PARTY_INVITE_REQUEST")
frame:SetScript("OnEvent", function()
if not on then return end
safeCall(function()
DeclineGroup()
StaticPopup_Hide("PARTY_INVITE")
print(NAME .. ": declined a party invite")
end)
end)
SLASH_DECLINEINVITES1 = "/declineinvites"
SlashCmdList["DECLINEINVITES"] = function(msg)
if msg == "errors" then showErrors() return end
if msg == "off" then on = false print(NAME .. ": off") return end
on = true
print(NAME .. ": on")
end
Compter tous les mobs que j’ai tués
Compte les ennemis tués en groupe pour ce personnage, y compris sans PX et en groupe. Les compteurs restent dans SavedVariables.
Aucune erreur de vérification. Pas encore testé en jeu. Client 1.60.1.70338.
## Interface: 16001
## Title: Local Kill Count
## Notes: Local kill counts. No mob database.
## Author: You
## Version: 1.0.0
## X-Generator: WoW Forever Guides Addon Maker
## X-License: CC0 (public domain)
## SavedVariables: LocalKillCountDB
LocalKillCount.lua
LocalKillCount/LocalKillCount.lua
local ADDON = ...
local NAME = "LocalKillCount"
local errors = {}
local function safeCall(func)
return xpcall(func, function(err)
errors[#errors + 1] = tostring(err)
if #errors > 10 then table.remove(errors, 1) end
print(NAME .. " error: " .. tostring(err))
end)
end
local function showErrors()
if #errors == 0 then print(NAME .. ": no errors saved") return end
for i = 1, #errors do print(i .. ". " .. errors[i]) end
end
LocalKillCountDB = LocalKillCountDB or { total = 0, xp = 0, gray = 0, grouped = 0 }
local function bump(key)
LocalKillCountDB[key] = (LocalKillCountDB[key] or 0) + 1
end
local frame = CreateFrame("Frame")
frame:RegisterEvent("PARTY_KILL")
frame:SetScript("OnEvent", function()
safeCall(function()
local before = UnitXP("player")
local grouped = IsInGroup()
C_Timer.After(0.5, function()
safeCall(function()
bump("total")
if grouped then bump("grouped") end
local after = UnitXP("player")
if issecretvalue(before) then return end
if issecretvalue(after) then return end
if after == before then bump("gray") else bump("xp") end
end)
end)
end)
end)
local function report()
local db = LocalKillCountDB
print(NAME .. ": " .. (db.total or 0) .. " kills, " .. (db.xp or 0) .. " with XP, " .. (db.gray or 0) .. " with no XP, " .. (db.grouped or 0) .. " while grouped")
end
SLASH_LOCALKILLCOUNT1 = "/kills"
SlashCmdList["LOCALKILLCOUNT"] = function(msg)
if msg == "errors" then showErrors() else report() end
end
Prix de vente dans chaque infobulle
Ajoute le prix de vente au marchand dans l’infobulle d’un objet, ou indique que ce prix n’est pas encore chargé.
Aucune erreur de vérification. Pas encore testé en jeu. Client 1.60.1.70338.
local ADDON = ...
local NAME = "VendorPriceTip"
local errors = {}
local function safeCall(func)
return xpcall(func, function(err)
errors[#errors + 1] = tostring(err)
if #errors > 10 then table.remove(errors, 1) end
print(NAME .. " error: " .. tostring(err))
end)
end
local function showErrors()
if #errors == 0 then print(NAME .. ": no errors saved") return end
for i = 1, #errors do print(i .. ". " .. errors[i]) end
end
local function coins(copper)
if type(copper) ~= "number" or copper <= 0 then return nil end
local gold = math.floor(copper / 10000)
local silver = math.floor((copper % 10000) / 100)
local rest = copper % 100
return gold .. "g " .. silver .. "s " .. rest .. "c"
end
local function addPrice(tip)
safeCall(function()
local _, link = tip:GetItem()
if not link then return end
local sell = select(11, C_Item.GetItemInfo(link))
local line = coins(sell)
if not line then
C_Item.RequestLoadItemDataByID(link)
line = "Vendor price not loaded"
end
tip:AddLine(line, 1, 0.82, 0.45)
end)
end
GameTooltip:HookScript("OnTooltipSetItem", addPrice)
if TooltipDataProcessor and TooltipDataProcessor.AddTooltipPostCall and Enum and Enum.TooltipDataType and Enum.TooltipDataType.Item then
TooltipDataProcessor.AddTooltipPostCall(Enum.TooltipDataType.Item, addPrice)
end
SLASH_VENDORPRICETIP1 = "/vendorprice"
SlashCmdList["VENDORPRICETIP"] = function(msg)
if msg == "errors" then showErrors() else print(NAME .. ": vendor price is added to item tooltips") end
end
PX par heure et temps jusqu’au prochain niveau
Affiche les PX par heure et une estimation du temps jusqu’au prochain niveau. L’inactivité et un niveau tout juste atteint ne provoquent pas de division par zéro.
Aucune erreur de vérification. Pas encore testé en jeu. Client 1.60.1.70338.
## Interface: 16001
## Title: XP Per Hour
## Notes: XP per hour and time to level.
## Author: You
## Version: 1.0.0
## X-Generator: WoW Forever Guides Addon Maker
## X-License: CC0 (public domain)
XpPerHour.lua
XpPerHour/XpPerHour.lua
local ADDON = ...
local NAME = "XpPerHour"
local errors = {}
local function safeCall(func)
return xpcall(func, function(err)
errors[#errors + 1] = tostring(err)
if #errors > 10 then table.remove(errors, 1) end
print(NAME .. " error: " .. tostring(err))
end)
end
local function showErrors()
if #errors == 0 then print(NAME .. ": no errors saved") return end
for i = 1, #errors do print(i .. ". " .. errors[i]) end
end
local frame = CreateFrame("Frame", "XpPerHourFrame", UIParent)
frame:SetSize(240, 72)
frame:SetPoint("CENTER", UIParent, "CENTER", 0, 160)
frame:SetMovable(true)
frame:EnableMouse(true)
frame:RegisterForDrag("LeftButton")
frame:SetScript("OnDragStart", function(self) self:StartMoving() end)
frame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end)
local label = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
label:SetPoint("CENTER")
label:SetText("XpPerHourFrame")
local state = { start = nil, xp = nil, last = nil }
local function paint(now)
local xp = UnitXP("player")
local maxXp = UnitXPMax("player")
if issecretvalue(xp) then label:SetText("XP is hidden right now") return end
if issecretvalue(maxXp) then label:SetText("XP is hidden right now") return end
if not state.start or not state.xp then
state.start = now
state.xp = xp
state.last = now
label:SetText("Waiting for XP")
return
end
if now - state.last > 120 then label:SetText("Idle. No recent XP.") return end
local gained = xp - state.xp
local elapsed = now - state.start
if gained <= 0 or elapsed < 1 then label:SetText("Waiting for XP") return end
local perHour = gained / elapsed * 3600
if perHour <= 0 then label:SetText("Waiting for XP") return end
local remain = maxXp - xp
if remain < 0 then remain = 0 end
local minutes = math.floor(remain / perHour * 60)
label:SetText(math.floor(perHour) .. " XP/hour, about " .. minutes .. " min")
end
local elapsed = 0
frame:SetScript("OnUpdate", function(_, gap)
elapsed = elapsed + gap
if elapsed < 1 then return end
elapsed = 0
safeCall(function() paint(GetTime()) end)
end)
frame:RegisterEvent("PLAYER_XP_UPDATE")
frame:RegisterEvent("PLAYER_LEVEL_UP")
frame:SetScript("OnEvent", function(_, event)
safeCall(function()
if event == "PLAYER_LEVEL_UP" then state.start = nil state.xp = nil state.last = nil end
if event == "PLAYER_XP_UPDATE" then state.last = GetTime() end
paint(GetTime())
end)
end)
SLASH_XPPERHOUR1 = "/xphour"
SlashCmdList["XPPERHOUR"] = function(msg)
if msg == "errors" then showErrors() else paint(GetTime()) print(NAME .. ": " .. (label:GetText() or "")) end
end
frame:Show()
Me rappeler quand mon buff disparaît
Hors combat, affiche le nom du buff défini lorsque celui-ci manque. Reste masqué en combat.
Aucune erreur de vérification. Pas encore testé en jeu. Client 1.60.1.70338.
## Interface: 16001
## Title: Buff Reminder
## Notes: Out-of-combat reminder when one buff is missing.
## Author: You
## Version: 1.0.0
## X-Generator: WoW Forever Guides Addon Maker
## X-License: CC0 (public domain)
## SavedVariables: BuffReminderDB
BuffReminder.lua
BuffReminder/BuffReminder.lua
local ADDON = ...
local NAME = "BuffReminder"
local errors = {}
local function safeCall(func)
return xpcall(func, function(err)
errors[#errors + 1] = tostring(err)
if #errors > 10 then table.remove(errors, 1) end
print(NAME .. " error: " .. tostring(err))
end)
end
local function showErrors()
if #errors == 0 then print(NAME .. ": no errors saved") return end
for i = 1, #errors do print(i .. ". " .. errors[i]) end
end
local frame = CreateFrame("Frame", "BuffReminderFrame", UIParent)
frame:SetSize(240, 72)
frame:SetPoint("CENTER", UIParent, "CENTER", 0, 160)
frame:SetMovable(true)
frame:EnableMouse(true)
frame:RegisterForDrag("LeftButton")
frame:SetScript("OnDragStart", function(self) self:StartMoving() end)
frame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end)
local label = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
label:SetPoint("CENTER")
label:SetText("BuffReminderFrame")
BuffReminderDB = BuffReminderDB or { spell = "" }
frame:Hide()
local function remind()
if InCombatLockdown() or UnitAffectingCombat("player") then frame:Hide() return end
local spell = BuffReminderDB.spell or ""
if spell == "" then frame:Hide() return end
local aura = C_UnitAuras.GetAuraDataBySpellName("player", spell, "HELPFUL")
if issecretvalue(aura) then frame:Hide() return end
if aura then frame:Hide() return end
label:SetText("Buff down: " .. spell)
frame:Show()
end
frame:RegisterEvent("UNIT_AURA")
frame:RegisterUnitEvent("UNIT_AURA", "player")
frame:RegisterEvent("PLAYER_REGEN_DISABLED")
frame:RegisterEvent("PLAYER_REGEN_ENABLED")
frame:SetScript("OnEvent", function() safeCall(remind) end)
SLASH_BUFFREMINDER1 = "/buffremind"
SlashCmdList["BUFFREMINDER"] = function(msg)
if msg == "errors" then showErrors() return end
if msg == "" then print(NAME .. ": /buffremind Spell Name") return end
BuffReminderDB.spell = msg
print(NAME .. ": watching " .. msg)
remind()
end
Liste de préparation au raid pour ma guilde
Une liste personnelle à cocher avant un raid. Elle ne lit pas la liste des membres de la guilde.
Aucune erreur de vérification. Pas encore testé en jeu. Client 1.60.1.70338.
## Interface: 16001
## Title: Raid Prep List
## Notes: A personal raid prep checklist.
## Author: You
## Version: 1.0.0
## X-Generator: WoW Forever Guides Addon Maker
## X-License: CC0 (public domain)
## SavedVariables: RaidPrepDB
RaidPrepList.lua
RaidPrepList/RaidPrepList.lua
local ADDON = ...
local NAME = "RaidPrepList"
local errors = {}
local function safeCall(func)
return xpcall(func, function(err)
errors[#errors + 1] = tostring(err)
if #errors > 10 then table.remove(errors, 1) end
print(NAME .. " error: " .. tostring(err))
end)
end
local function showErrors()
if #errors == 0 then print(NAME .. ": no errors saved") return end
for i = 1, #errors do print(i .. ". " .. errors[i]) end
end
local frame = CreateFrame("Frame", "RaidPrepFrame", UIParent)
frame:SetSize(240, 72)
frame:SetPoint("CENTER", UIParent, "CENTER", 0, 160)
frame:SetMovable(true)
frame:EnableMouse(true)
frame:RegisterForDrag("LeftButton")
frame:SetScript("OnDragStart", function(self) self:StartMoving() end)
frame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end)
local label = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
label:SetPoint("CENTER")
label:SetText("RaidPrepFrame")
RaidPrepDB = RaidPrepDB or { items = { "Food", "Water", "Flasks", "Repair" }, done = {} }
local function line()
local parts = {}
for i = 1, #RaidPrepDB.items do
local item = RaidPrepDB.items[i]
local mark = RaidPrepDB.done[item] and "[x] " or "[ ] "
parts[#parts + 1] = mark .. item
end
if #parts == 0 then label:SetText("Checklist is empty") else label:SetText(table.concat(parts, "\n")) end
end
frame:SetScript("OnMouseUp", function()
safeCall(function()
if #RaidPrepDB.items == 0 then return end
local item = RaidPrepDB.items[1]
for i = 1, #RaidPrepDB.items do
if not RaidPrepDB.done[RaidPrepDB.items[i]] then item = RaidPrepDB.items[i] break end
end
RaidPrepDB.done[item] = not RaidPrepDB.done[item]
line()
end)
end)
line()
SLASH_RAIDPREPLIST1 = "/raidprep"
SlashCmdList["RAIDPREPLIST"] = function(msg)
if msg == "errors" then showErrors() return end
local add = msg:match("^add%s+(.+)$")
if add then
RaidPrepDB.items[#RaidPrepDB.items + 1] = add
line()
print(NAME .. ": added " .. add)
return
end
if msg == "reset" then RaidPrepDB.done = {} line() print(NAME .. ": cleared") return end
line()
print(NAME .. ": click the box to tick the next open line")
end
La création personnalisée est désactivée. Les exemples vérifiés restent téléchargeables.
Le créateur a atteint sa limite pour le moment. Les exemples vérifiés restent téléchargeables.
Vous avez utilisé vos créations ou modifications du jour. Les exemples vérifiés restent téléchargeables.
La vérification a échoué. Réessayez. Les exemples restent téléchargeables.
La création personnalisée n’est pas configurée sur ce serveur. Les exemples restent téléchargeables.
Le créateur n’a pas terminé. Votre demande est toujours dans le champ.
Cette création a pris trop de temps et a été arrêtée. Votre demande est toujours dans le champ.
La connexion a été interrompue. Votre demande et le dernier addon valide sont toujours ici.
Arrêté. Votre demande est toujours dans le champ.
Ce lien a expiré ou la copie enregistrée a été supprimée.
Ce navigateur n’a pas enregistré cet addon et ne peut donc pas le modifier.
Actualisez la page et réessayez depuis wowforeverguides.com.
Cette demande était inutilisable. Gardez une phrase courte et réessayez.
Une création personnalisée exige le script de vérification. Les exemples restent téléchargeables.
Création en cours. Cela peut prendre une minute.
Vérification des fichiers et réparation des problèmes.
Enregistré sur ce navigateur pendant 90 jours. Toute personne disposant du lien de partage peut lire la dernière copie.
Ce navigateur a bloqué le stockage. La clé propriétaire n’est valable que dans cet onglet et cet addon n’est pas enregistré.
La liste de ce navigateur n’a pas pu être enregistrée.
Copié.
Sélectionnez le code et copiez-le vous-même.
La copie enregistrée est supprimée.
Le supprimer
Lien de partage copié. Il ne contient pas votre clé propriétaire.
La dernière vérification a échoué : aucun téléchargement disponible. La copie valide précédente est inchangée.
Cette demande a été refusée.
Une question avant la création.
Un addon publié fait déjà cela.
Addon partagé. Lecture seule.
Modifier et réparer s’appliquent à une création enregistrée. Décrivez votre propre addon pour en obtenir une.
Exemple vérifié. Pas encore testé en jeu.
Les addons peuvent afficher les informations que le client vous fournit déjà. Ils ne peuvent pas jouer à votre place.Blizzard : Developer Q&A, septembre 17, 2026. Les listes ci-dessous correspondent aux huit exemples. Lisez ce qui fonctionne et ce qui casse avant de vous y fier.
Oui. Les limites quotidiennes permettent de le garder gratuit pour tous. Les huit exemples se téléchargent sans compte.
Dois-je connaître Lua ?
Non. Vous pouvez lire chaque fichier si vous le souhaitez. Chaque exemple comprend un fichier .toc et un fichier .lua.
Le code d’addon écrit par l’IA est-il sûr ?
Une création personnalisée ne fait aucun appel réseau, et vous pouvez lire son code source. Le vérificateur compare chaque fonction globale et événement avec la liste d’API de la build Forever 70338 et les règles de Blizzard sur les addons, et signale les méthodes de widgets qu’il ne peut pas confirmer. Cela ne garantit pas que l’addon est sûr en combat, et aucun de ces fichiers n’a encore été testé en jeu.
Les addons sont-ils autorisés dans WoW Forever ?
Oui, avec l’API moderne et les limites de combat de Midnight. La page des addons présente la réponse du 17 septembre.
Pourquoi ne peut-il pas créer un addon de rotation ou de lancement automatique ?
Le créateur ne génère pas d’automatisation du combat ni de code tentant de contourner les actions protégées que le jeu bloque. Il vérifie chaque création avec les règles de Blizzard sur les addons d’interface. Demandez plutôt une note, une liste à cocher, une ligne d’infobulle ou un rappel hors combat.
WeakAuras fonctionne-t-il dans Forever ?
Wowhead a écrit que WeakAuras avait arrêté son développement avant les changements d’addons de Midnight. Un autre auteur a répertorié un fork, et Musca Auras publie un fichier Forever. Blizzard n’a pas déclaré que WeakAuras lui-même fonctionne. La page des addons présente ces rapports.
Puis-je partager ou publier mon addon ?
Oui. Les fichiers d’exemple sont dans le domaine public, CC0. Utilisez-les, modifiez-les et publiez-les. Aucun crédit n’est requis. Collez cette ligne lorsqu’un site demande une mention de l’IA. Mention IA : créé avec le créateur d’addons WoW Forever Guides (Claude), vérifié dans la liste d’API du client Forever.
Et s’il ne fonctionne plus après un patch ?
Collez l’erreur dans Réparer. Si la nouvelle copie échoue à la vérification, la dernière copie valide reste et la copie en échec n’est pas téléchargeable.
Quelle IA l’écrit ?
Claude, d’Anthropic, rédige une version personnalisée. Notre vérificateur compare ensuite chaque fonction globale et événement avec la liste d’API de la build 70338 et signale les méthodes de widgets qu’il ne peut pas confirmer. Rien n’a encore été testé en jeu : lisez donc les fichiers avant de vous y fier.
Que stockez-vous ?
Les projets enregistrés contiennent votre demande et vos fichiers. Leur suppression est prévue 90 jours après leur dernière modification. Supprimer utilise la clé du propriétaire pour retirer un projet enregistré et toutes ses versions.
La page de confidentialité explique l’accès par lien de partage, le stockage du navigateur et les durées de conservation distinctes du cache et du fournisseur.
Noms et événements vérifiés avec le client 1.60.1.70338. Ces fichiers n’ont pas été testés en jeu.
Un jet sur la mesure d’audience ? Besoin = Clicky, GA4 et Microsoft Clarity avec cookies et enregistrements de session, pour voir quels guides aident. Passer = aucune analyse.Confidentialité