|
|
@@ -101,25 +101,28 @@ def _split_lines(value):
|
|
|
def _creative_fallback(data):
|
|
|
brief = (data.get("brief") or "").lower()
|
|
|
text = " ".join([brief, data.get("styleNotes", "").lower(), data.get("avoidNotes", "").lower()])
|
|
|
- theme = "jelly"
|
|
|
+ allowed_themes = {"jelly", "fruit", "egypt", "pirate", "pirate_jelly", "cyber"}
|
|
|
+ requested_theme = data.get("theme") if data.get("theme") in allowed_themes else ""
|
|
|
+ theme = requested_theme or "jelly"
|
|
|
pirate_hint = any(k in text for k in ("pirate", "海盗", "treasure", "宝藏", "金币", "船长"))
|
|
|
jelly_hint = any(k in text for k in ("jelly", "果冻", "candy", "糖果", "gummy", "软糖"))
|
|
|
- if pirate_hint and jelly_hint:
|
|
|
- theme = "pirate_jelly"
|
|
|
- elif any(k in text for k in ("egypt", "埃及", "金字塔", "法老")):
|
|
|
- theme = "egypt"
|
|
|
- elif pirate_hint:
|
|
|
- theme = "pirate"
|
|
|
- elif any(k in text for k in ("cyber", "赛博", "neon", "霓虹")):
|
|
|
- theme = "cyber"
|
|
|
- elif any(k in text for k in ("fruit", "水果", "cherry", "樱桃")):
|
|
|
- theme = "fruit"
|
|
|
- reel_mode = "cluster" if any(k in text for k in ("消除", "cluster", "连通", "match")) else "ways"
|
|
|
- volatility = "high" if any(k in text for k in ("刺激", "大奖", "高波动", "big win")) else "medium"
|
|
|
- features = ["cascades", "free_spins", "wilds"]
|
|
|
- if any(k in text for k in ("金币", "jackpot", "hold", "respin", "大奖池")):
|
|
|
+ if not requested_theme or requested_theme == "jelly":
|
|
|
+ if pirate_hint and jelly_hint:
|
|
|
+ theme = "pirate_jelly"
|
|
|
+ elif any(k in text for k in ("egypt", "埃及", "金字塔", "法老")):
|
|
|
+ theme = "egypt"
|
|
|
+ elif pirate_hint:
|
|
|
+ theme = "pirate"
|
|
|
+ elif any(k in text for k in ("cyber", "赛博", "neon", "霓虹")):
|
|
|
+ theme = "cyber"
|
|
|
+ elif any(k in text for k in ("fruit", "水果", "cherry", "樱桃")):
|
|
|
+ theme = "fruit"
|
|
|
+ reel_mode = data.get("reelMode") or ("cluster" if any(k in text for k in ("消除", "cluster", "连通", "match")) else "ways")
|
|
|
+ volatility = data.get("volatility") or ("high" if any(k in text for k in ("刺激", "大奖", "高波动", "big win")) else "medium")
|
|
|
+ features = list(data.get("features") or ["cascades", "free_spins", "wilds"])
|
|
|
+ if any(k in text for k in ("金币", "jackpot", "hold", "respin", "大奖池")) and "hold_win" not in features:
|
|
|
features.append("hold_win")
|
|
|
- if any(k in text for k in ("倍率", "multiplier", "连锁")):
|
|
|
+ if any(k in text for k in ("倍率", "multiplier", "连锁")) and "multipliers" not in features:
|
|
|
features.append("multipliers")
|
|
|
if theme == "pirate_jelly":
|
|
|
for feature in ("hold_win", "multipliers"):
|
|
|
@@ -203,7 +206,14 @@ def creative_to_slot_request(data):
|
|
|
"uploadedReferenceImages": len(reference_images),
|
|
|
"styleNotes": data.get("styleNotes") or "",
|
|
|
"avoidNotes": data.get("avoidNotes") or "",
|
|
|
+ "theme": data.get("theme") or "",
|
|
|
+ "reelMode": data.get("reelMode") or "",
|
|
|
+ "volatility": data.get("volatility") or "",
|
|
|
"targetRtp": data.get("targetRtp", 96),
|
|
|
+ "characterCount": data.get("characterCount", 10),
|
|
|
+ "uiCompleteness": data.get("uiCompleteness", "full"),
|
|
|
+ "feedbackIntensity": data.get("feedbackIntensity", "standard"),
|
|
|
+ "features": data.get("features") or [],
|
|
|
"enableMathModel": bool(data.get("enableMathModel", True)),
|
|
|
}
|
|
|
if not api_key:
|