No more App Engine

This commit is contained in:
Kaan Soral
2026-03-02 02:03:53 +03:00
parent fa525716d9
commit f927df37da
16 changed files with 83 additions and 30 deletions
+7
View File
@@ -1,3 +1,10 @@
# Notice: Moved Out of Cloud
New Live Project At: https://github.com/kaansoral/adventureland_mongodb
Google Cloud became a joke with constant 500 errors that are not even propagated to the services - likely by design as reporting these issues result in "won't fix" responses. Performance was abysmal, costs were astronomical. The time to free Adventure Land was long overdue. With the switch to MongoDB, Adventure Land is free from any external service, no more random disconnects due to Cloudflare fluctuations or instance restarts either. Just snappy gameplay in an environment that can be managed eternally.
# Adventure Land - The Open Source CODE MMORPG
https://adventure.land
+8 -10
View File
@@ -114,22 +114,19 @@ if is_production:
#maps["desertland"]["key"]="jayson_desertland_copy"
pass
game_version=835
game_version=837
SALES=4+5+388+5101+125/20 #donation+manual+macos+steam+sales
update_notes=[
"Valentine's Day Event!",
"Lunar New Year Event!",
"Last Update [2nd of February]",
"PR: fix monster dimensions #211",
"PR: Fix miss so that it uses the value from the attack, instead of the attacker #220",
"PR: Update reject_deferred calls to include place for death and disappear events #227",
"PR: Update the two scaling healing skills to accurately reflect their output #223",
"PR: Add flag for implicit targets, and the implicit targets functionality #225",
"PR: Pass the target parameter to consume_mp for more skills #222",
]
next_notes=[
"Last Update [12th of February]",
"5X Co-op contribution points for home server characters",
"Overdrop logic for co-op events",
"Smoothed coop contributions",
"Event update, new drops!",
]
next_notes=[
]
ip_to_subdomain={ #IMPORTANT: SPECIAL PAGE RULES ARE NEEDED: https://dash.cloudflare.com/b6f5a13bded5fdd273e4a1cd3777162d/adventure.land/page-rules - uss1 / eus1 was best
"35.187.255.184":"asia1",
@@ -142,6 +139,7 @@ ip_to_subdomain={ #IMPORTANT: SPECIAL PAGE RULES ARE NEEDED: https://dash.cloudf
"34.67.187.11":"uspvp",
"195.201.181.245":"eud1",
"158.69.23.127":"usd1",
"195.201.105.60":"euw1",
}
HTTPS_MODE=True #IMPORTANT: converts server IP's to subdomain urls at create_server_api [17/11/18]
always_amazon_ses=True
+5
View File
@@ -756,6 +756,11 @@ positions={
"greenenvelopev2":["custom",5,3],
#chinese new year 2026
"brownenvelope":["custom",4,6],
"horsecapeg":["custom",6,6],
"horsecape":["custom",5,6],
#valentines
"solitaire":["",5,16],
+3
View File
@@ -267,6 +267,7 @@ drops={
],
"pinkgoblin":[
[1.0/24000,"bkey"],
[1.0/10,"horsecape"],
],
"spider":[[0.001,"spidersilk"],[1.0/5000,"offeringp"],[1.0/10000,"spiderkey"]],
"tinyp":[[1.0/1,"offeringp"]],
@@ -372,6 +373,7 @@ drops={
[0.5,"lmace"],
[2.0/4/1000/1000,"cxjar",1,"hat400"],
[2.0/6/1000/1000,"chrysalis0"],
[1,"horsecapeg"],
],
"ent":[
[1,"essenceofnature"],
@@ -814,6 +816,7 @@ drops={
[1,"oxhelmet",None,None,"lucky"],
[0.1,"cdragon",None,None,"lucky"],
[0.1,"snakeoil"], #2025
[0.3,"horsecapeg"],
],
"eastereggs":[
[1,"egg0"],
+34
View File
@@ -84,6 +84,40 @@ items={
"grades":[0,8],
"g":20000,
},
"horsecape":{
"type":"cape",
"skin":"horsecape",
"armor":10,
"stat":5,
"speed":1,
"name":"Horse Leather Cape",
"upgrade":{
"armor":2,
"resistance":2,
"stat":0.10,
"speed":0.1,
},
"grades":[0,5],
"g":1600000,
},
"horsecapeg":{
"type":"cape",
"skin":"horsecapeg",
"armor":10,
"gold":3,
"stat":5,
"speed":1,
"name":"Horse Leather Cape",
"upgrade":{
"armor":2,
"resistance":2,
"stat":0.10,
"speed":0.1,
"gold":0.5,
},
"grades":[0,0],
"g":1600000,
},
"fcape":{
"type":"cape",
"skin":"fcape",
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -2,7 +2,7 @@
<p style='font-size: 32px; color: #216D25; text-decoration: underline dotted #B30B1A'>Lunar New Year on Adventure Land</p>
<p>
<div style='float:left; margin-right: 10px'><span class='eitem1'></span> Green Envelopes drop globally. You can exchange them from Xyn in Mainland. <br /></div>
<div style='float:left; margin-right: 10px'><span class='eitem1'></span> Brown Envelopes drop globally. You can exchange them from Xyn in Mainland. <br /></div>
</p>
<p>
@@ -18,7 +18,7 @@
<script>
$(".eitem1").html(item_container({skin:G.items.greenenvelope.skin},{name:"greenenvelope",q:0}));
$(".eitem1").html(item_container({skin:G.items.greenenvelope.skin},{name:"brownenvelope",q:0}));
$(".spdragold").html(sprite("dragold",{height:80,width:66}));
$(".sptiger").html(sprite("tiger",{height:50,width:42}));
</script>
Binary file not shown.
+1 -1
View File
@@ -330,7 +330,7 @@ function render_server()
if(S.lunarnewyear)
{
html+=" <div class='gamebutton' style='padding: 6px 8px 6px 8px; font-size: 24px; line-height: 18px' onclick='pcs(event); open_guide(\"event-lunarnewyear\",\"/docs/ref/lunarnewyear\")'>";
html+="<div style='margin-top: -1px; margin-left: -3px; margin-right: -3px'>"+item_container({skin:"greenenvelope",bcolor:"black"})+"</div>";
html+="<div style='margin-top: -1px; margin-left: -3px; margin-right: -3px'>"+item_container({skin:"brownenvelope",bcolor:"black"})+"</div>";
html+="<div style='color:#CFD1D1; margin-top: 1px'>INFO</div>";
html+="</div>";
content=true;
+1 -1
View File
@@ -33,7 +33,7 @@ eval("" + fs.readFileSync(variables.functions_path));
eval("" + fs.readFileSync(variables.data_path));
var base_url = variables.base_url;
var server_id = "1";
var server_auth = "123456";
var server_auth = require("crypto").randomBytes(32).toString("hex");
var server_name = "";
var players = {};
var dc_players = {};
+1 -1
View File
@@ -279,7 +279,7 @@ function sprocess_game_data() {
}
if (events.lunarnewyear) {
D.drops.maps.global.push([0.00005, "greenenvelope"]);
D.drops.maps.global.push([0.00005, "brownenvelope"]);
D.drops.maps.global.push([0.000000005, "5bucks"]);
}
if (events.valentines) {
+15 -9
View File
@@ -1,13 +1,19 @@
// Mappings: config.py + Cloudflare
machines={
"eud1":{
"key":"~/thegame/design/docs/id_rsa.pem",
"ip":"195.201.181.245",
// "eud1":{
// "key":"~/thegame/design/docs/id_rsa.pem",
// "ip":"195.201.181.245",
// "user":"root",
// "map":"eud1",
// },
"euw1":{
"key":"~/server_admin/keys/hetzner_dedicated",
"ip":"195.201.105.60",
"user":"root",
"map":"eud1",
"map":"euw1",
},
"usd1":{
"key":"~/thegame/design/docs/id_rsa.pem",
"key":"~/server_admin/keys/usd1_dedicated",
"ip":"158.69.23.127",
"user":"ubuntu",
"map":"usd1",
@@ -68,19 +74,19 @@ servers=[
"region":"EU",
"name":"I",
"port":2053,
"machine":"eud1",
"machine":"euw1",
},
{
"region":"EU",
"name":"II",
"port":2083,
"machine":"eud1",
"machine":"euw1",
},
{
"region":"EU",
"name":"PVP",
"port":2087,
"machine":"eud1",
"machine":"euw1",
},
// {
// "region":"EU",
@@ -92,7 +98,7 @@ servers=[
"region":"ASIA",
"name":"I",
"port":8443,
"machine":"eud1",
"machine":"euw1",
},
{
"region":"US",
+2 -2
View File
@@ -12,10 +12,10 @@ setInterval(function(){
servers.forEach(function(server){
if(server.machine!=id) return;
var name=server.region+" "+server.name+" "+server.port;
if(output.indexOf("node server/server.js "+server.region+" "+server.name+" "+server.port)==-1)
if(output.indexOf("node adventureland/server.js "+server.region+" "+server.name+" "+server.port)==-1)
{
console.log("Server not running: "+name);
var command="ssh -i "+machine.key+" "+machine.user+"@"+machine.ip+" \"nohup node server/server.js "+server.region+" "+server.name+" "+server.port+" > s"+server.port+".out 2> s"+server.port+".err < /dev/null &\"";
var command="ssh -i "+machine.key+" "+machine.user+"@"+machine.ip+" \"nohup node adventureland/server.js "+server.region+" "+server.name+" "+server.port+" > s"+server.port+".out 2> s"+server.port+".err < /dev/null &\"";
console.log(command);
f.execso(command);
}
+1 -1
View File
@@ -7,6 +7,6 @@ servers.forEach(function(server){
console.log(command);
command="["+server.machine+" logs] scp -i "+machine.key+" "+machine.user+"@"+machine.ip+":s"+server.port+".out .";
console.log(command);
command="["+server.machine+" run] ssh -i "+machine.key+" "+machine.user+"@"+machine.ip+" \"nohup node server/server.js "+server.region+" "+server.name+" "+server.port+" > s"+server.port+".out 2> s"+server.port+".err < /dev/null &\"";
command="["+server.machine+" run] ssh -i "+machine.key+" "+machine.user+"@"+machine.ip+" \"nohup node adventureland/server.js "+server.region+" "+server.name+" "+server.port+" > s"+server.port+".out 2> s"+server.port+".err < /dev/null &\"";
console.log(command);
});
+1 -1
View File
@@ -3,7 +3,7 @@ require(process.env.HOME+"/thegame/scripts/data.js");
servers.forEach(function(server){
var machine=machines[server.machine];
var command="ssh -i "+machine.key+" "+machine.user+"@"+machine.ip+" \"nohup node server/server.js "+server.region+" "+server.name+" "+server.port+" > s"+server.port+".out 2> s"+server.port+".err < /dev/null &\"";
var command="ssh -i "+machine.key+" "+machine.user+"@"+machine.ip+" \"source ~/.nvm/nvm.sh && screen -dm bash -c 'node adventureland/server.js "+server.region+" "+server.name+" "+server.port+" > adventureland/s"+server.port+".out 2> adventureland/s"+server.port+".err'\"";
console.log(command);
f.execso(command);
});
+1 -1
View File
@@ -8,7 +8,7 @@ for(var id in machines)
{
var machine=machines[id];
// var command="scp -qv -r -i "+machine.key+" ~/deploy/server "+machine.user+"@"+machine.ip+":./ 2>&1 | grep -e 'Sending file modes' -e 'Exit status'";
var command="rsync -ru --exclude='node_modules/' ~/deploy/server -i "+machine.key+" "+machine.user+"@"+machine.ip+":./";
var command="rsync -rui --exclude='node_modules/' --exclude='package-lock.json' -e 'ssh -i "+machine.key+"' ~/deploy/server/ "+machine.user+"@"+machine.ip+":./adventureland/";
//var command="rsync -ru ~/deploy/server -e \"ssh -i "+machine.key+"\" "+machine.user+"@"+machine.ip+":./";
// Spent 50 minutes on perfecting the scp output, bastards didn't provide a non-interactive output argument ... [05/08/18]
// command+=" > /tmp/scp.log 2>&1";