tstone87 commited on
Commit
15ba985
·
verified ·
1 Parent(s): 3d660c6

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +140 -0
app.py ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request
2
+ import random
3
+
4
+ app = Flask(__name__)
5
+
6
+ # In-memory storage for each player's game state.
7
+ game_states = {}
8
+
9
+ # Helper to ensure responses never exceed 400 characters.
10
+ def limit_response(text, limit=400):
11
+ return text if len(text) <= limit else text[:limit-3] + "..."
12
+
13
+ def init_game(username, loadout):
14
+ bonus = 1.0
15
+ if loadout:
16
+ for w in loadout.lower().split(","):
17
+ if w.strip() in ["ak-47", "m4", "mp5", "ar-15"]:
18
+ bonus += 0.2
19
+ return {
20
+ "players": 150,
21
+ "kills": 0,
22
+ "bonus": bonus,
23
+ "round": 0,
24
+ "status": "active", # active, gulag, eliminated, won
25
+ "revives": 0, # self-revives used
26
+ "ammo": 100,
27
+ "armor": 100,
28
+ "inventory": [],
29
+ "in_gulag": False
30
+ }
31
+
32
+ @app.route("/start", methods=["GET"])
33
+ def start():
34
+ user = request.args.get("user")
35
+ loadout = request.args.get("loadout", "")
36
+ if not user:
37
+ return limit_response("User required"), 400
38
+ game_states[user] = init_game(user, loadout)
39
+ resp = (f"Game started for {user}! Players:150, Bonus:{game_states[user]['bonus']:.1f}. "
40
+ "Use !fight to engage.")
41
+ return limit_response(resp)
42
+
43
+ @app.route("/fight", methods=["GET"])
44
+ def fight():
45
+ user = request.args.get("user")
46
+ if not user or user not in game_states:
47
+ return limit_response("Start game first with !start"), 400
48
+ state = game_states[user]
49
+ if state["status"] != "active":
50
+ return limit_response(f"Game over. Final Kills: {state['kills']}."), 400
51
+ state["round"] += 1
52
+ r = state["round"]
53
+ event = random.choice(["fight", "loot", "buy", "ambush"])
54
+ resp = f"R{r}: "
55
+ if event == "fight":
56
+ roll = random.random() * state["bonus"]
57
+ if roll > 0.7:
58
+ kills = random.randint(1, 3)
59
+ state["kills"] += kills
60
+ state["players"] = max(state["players"] - kills, 1)
61
+ state["ammo"] = max(state["ammo"] - random.randint(5,15), 0)
62
+ resp += f"Fought & got {kills} kill(s)! "
63
+ elif roll > 0.5:
64
+ resp += "Enemy fled! "
65
+ else:
66
+ if random.random() < 0.3 and state["revives"] < 1:
67
+ state["revives"] += 1
68
+ resp += "Downed but self-revived! "
69
+ else:
70
+ state["in_gulag"] = True
71
+ state["status"] = "gulag"
72
+ return limit_response(resp + "Downed! Now in Gulag. Use !gulag.")
73
+ elif event == "loot":
74
+ loot = random.choice(["weapon", "ammo", "armor"])
75
+ if loot == "weapon":
76
+ wpn = random.choice(["AK-47", "M4", "Shotgun", "Sniper"])
77
+ state["inventory"].append(wpn)
78
+ if wpn.lower() in ["ak-47", "m4", "mp5", "ar-15"]:
79
+ state["bonus"] += 0.2
80
+ resp += f"Found {wpn}. "
81
+ elif loot == "ammo":
82
+ add_ammo = random.randint(10,30)
83
+ state["ammo"] += add_ammo
84
+ resp += f"Found {add_ammo} ammo. "
85
+ else:
86
+ add_arm = random.randint(5,20)
87
+ state["armor"] += add_arm
88
+ resp += f"Found {add_arm} armor. "
89
+ elif event == "buy":
90
+ item = random.choice(["UAV", "Air Strike", "Cluster Strike", "Armor Box"])
91
+ if item == "Armor Box":
92
+ state["armor"] += 10
93
+ else:
94
+ state["bonus"] += 0.15
95
+ resp += f"Bought {item}. "
96
+ elif event == "ambush":
97
+ resp += "Ambushed! "
98
+ amb = random.choice(["escaped", "lost ammo", "got a kill"])
99
+ if amb == "escaped":
100
+ resp += "Escaped. "
101
+ elif amb == "lost ammo":
102
+ lost = random.randint(10,20)
103
+ state["ammo"] = max(state["ammo"] - lost, 0)
104
+ resp += f"Lost {lost} ammo. "
105
+ else:
106
+ kills = random.randint(1,2)
107
+ state["kills"] += kills
108
+ state["players"] = max(state["players"] - kills, 1)
109
+ resp += f"Got {kills} kill(s)! "
110
+ # Natural eliminations
111
+ nat = random.randint(5,15)
112
+ state["players"] = max(state["players"] - nat, 1)
113
+ resp += f"Nat:{nat}. "
114
+ if state["players"] <= 1:
115
+ state["status"] = "won"
116
+ resp += f"Victory! Final Kills: {state['kills']}."
117
+ else:
118
+ resp += f"Left:{state['players']}, Kills:{state['kills']}."
119
+ return limit_response(resp)
120
+
121
+ @app.route("/gulag", methods=["GET"])
122
+ def gulag():
123
+ user = request.args.get("user")
124
+ if not user or user not in game_states:
125
+ return limit_response("Start game first with !start"), 400
126
+ state = game_states[user]
127
+ if not state.get("in_gulag"):
128
+ return limit_response("Not in Gulag."), 400
129
+ if random.random() < (0.6 + state["bonus"] * 0.05):
130
+ state["status"] = "active"
131
+ state["in_gulag"] = False
132
+ state["players"] = max(state["players"] - 5, 1)
133
+ resp = "Won Gulag fight! Back in action. Use !fight next."
134
+ else:
135
+ state["status"] = "eliminated"
136
+ resp = f"Lost Gulag fight. Game over. Final Kills: {state['kills']}."
137
+ return limit_response(resp)
138
+
139
+ if __name__ == "__main__":
140
+ app.run(host="0.0.0.0", port=5000)