From f927df37da777eb7f048fd9209c039653a3406bd Mon Sep 17 00:00:00 2001
From: Kaan Soral
Date: Mon, 2 Mar 2026 02:03:38 +0300
Subject: [PATCH] No more App Engine
---
README.md | 7 ++++++
config.py | 18 +++++++--------
design/dimensions.py | 5 +++++
design/drops.py | 3 +++
design/items.py | 34 +++++++++++++++++++++++++++++
design/precomputed.py | 2 +-
docs/guide/event-lunarnewyear.html | 4 ++--
images/tiles/items/custom.pxd | Bin 459891 -> 459891 bytes
js/html.js | 2 +-
node/server.js | 2 +-
node/server_functions.js | 2 +-
scripts/data.js | 24 ++++++++++++--------
scripts/keep_alive.js | 4 ++--
scripts/list_commands.js | 2 +-
scripts/run_servers.js | 2 +-
scripts/update_machines.js | 2 +-
16 files changed, 83 insertions(+), 30 deletions(-)
diff --git a/README.md b/README.md
index 394c2ae..e0107e1 100644
--- a/README.md
+++ b/README.md
@@ -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
diff --git a/config.py b/config.py
index 3fc12c3..e812e9f 100644
--- a/config.py
+++ b/config.py
@@ -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
diff --git a/design/dimensions.py b/design/dimensions.py
index 4136a22..b9adf7d 100644
--- a/design/dimensions.py
+++ b/design/dimensions.py
@@ -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],
diff --git a/design/drops.py b/design/drops.py
index d4f0d6a..2b29cf6 100644
--- a/design/drops.py
+++ b/design/drops.py
@@ -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"],
diff --git a/design/items.py b/design/items.py
index 7ca333e..5e6a4f3 100644
--- a/design/items.py
+++ b/design/items.py
@@ -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",
diff --git a/design/precomputed.py b/design/precomputed.py
index eba2068..4a566b5 100644
--- a/design/precomputed.py
+++ b/design/precomputed.py
@@ -1,2 +1,2 @@
-# Mon Feb 02 2026 18:13:18 GMT+0300
+# 2026-02-16T12:43:04.260Z
images={"/images/tiles/characters/ninja_turtles.png":{"height":144,"width":312,"type":"png"},"/images/cosmetics/makeup/makeup1.png":{"height":120,"width":1134,"type":"png"},"/images/cosmetics/hairdo/bwhair.png":{"height":120,"width":27,"type":"png"},"/images/cosmetics/beardo/burningeyes1_anim.png":{"height":120,"width":81,"type":"png"},"/images/cosmetics/beardo/burningeyes2_anim.png":{"height":120,"width":81,"type":"png"},"/images/cosmetics/hats/bathat_anim.png":{"height":120,"width":81,"type":"png"},"/images/cosmetics/hats/gcandle_anim.png":{"height":120,"width":81,"type":"png"},"/images/cosmetics/hats/halo_anim.png":{"height":120,"width":81,"type":"png"},"/images/cosmetics/makeup/kunique.png":{"height":120,"width":108,"type":"png"},"/images/cosmetics/skins/mbw.png":{"height":144,"width":81,"type":"png"},"/images/cosmetics/armors/mabw.png":{"height":144,"width":162,"type":"png"},"/images/cosmetics/accessories/kglasses.png":{"height":120,"width":108,"type":"png"},"/images/cosmetics/gravestones/gravestone.png":{"height":64,"width":160,"type":"png"},"/images/tiles/monsters/deep_sea_king.png":{"height":320,"width":318,"type":"png"},"/images/tiles/characters/adversaries.png":{"height":288,"width":324,"type":"png"},"/images/tiles/characters/angel_wingless.png":{"height":288,"width":456,"type":"png"},"/images/tiles/characters/winners_jpa.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/winners_jpb.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/sheet_winnersa.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/sheet_winnersb.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/collection1.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/collection2.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/collection3.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/collectionx.png":{"height":288,"width":456,"type":"png"},"/images/tiles/monsters/snowman.png":{"height":144,"width":76,"type":"png"},"/images/tiles/monsters/Dragold.png":{"height":212,"width":156,"type":"png"},"/images/tiles/monsters/blackscorpion.png":{"height":256,"width":176,"type":"png"},"/images/tiles/monsters/coboldProto.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/liger_x.png":{"height":184,"width":150,"type":"png"},"/images/tiles/monsters/tiger.png":{"height":184,"width":150,"type":"png"},"/images/tiles/monsters/slenderman.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/frankenstein.png":{"height":144,"width":76,"type":"png"},"/images/tiles/characters/custom1.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/custom2.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/custom3.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/others/jsonX.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/mecha_gnome.png":{"height":144,"width":78,"type":"png"},"/images/tiles/monsters/harpy_b_1.png":{"height":212,"width":156,"type":"png"},"/images/tiles/monsters/harpy_b_fly_1.png":{"height":212,"width":156,"type":"png"},"/images/tiles/monsters/harpy_a_1.png":{"height":212,"width":156,"type":"png"},"/images/tiles/monsters/harpy_a_fly_1.png":{"height":212,"width":156,"type":"png"},"/images/tiles/characters/others/ship2.png":{"height":64,"width":201,"type":"png"},"/images/tiles/characters/others/newyear_tree.png":{"height":64,"width":144,"type":"png"},"/images/tiles/characters/bonus1.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/military2.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/military3.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/knights.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/chara2.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/chara3.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/chara4.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/chara6.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/chara7.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/chara8.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/automatron2.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/npc1.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/npc3.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/npc4.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/npc5.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/npc6.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/dwarf2.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/tristone_m.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/tristone_f.png":{"height":288,"width":312,"type":"png"},"/images/tiles/characters/mystics.png":{"height":144,"width":312,"type":"png"},"/images/tiles/monsters/creatures1.png":{"height":144,"width":312,"type":"png"},"/images/tiles/monsters/creatures2.png":{"height":424,"width":624,"type":"png"},"/images/tiles/monsters/jrpumpkins.png":{"height":144,"width":155,"type":"png"},"/images/tiles/characters/chara5.png":{"height":288,"width":312,"type":"png"},"/images/tiles/items/chests.png":{"height":288,"width":504,"type":"png"},"/images/tiles/characters/animationc.png":{"height":400,"width":564,"type":"png"},"/images/tiles/characters/animation1i.png":{"height":400,"width":564,"type":"png"},"/images/tiles/characters/animation2.png":{"height":400,"width":564,"type":"png"},"/images/tiles/characters/animation3.png":{"height":400,"width":564,"type":"png"},"/images/tiles/monsters/elemental.png":{"height":512,"width":720,"type":"png"},"/images/tiles/monsters/monster_dknight1.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/monster_dknight2.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/fairies.png":{"height":288,"width":312,"type":"png"},"/images/tiles/monsters/monster_bird1.png":{"height":228,"width":183,"type":"png"},"/images/tiles/monsters/monster_bird2.png":{"height":228,"width":183,"type":"png"},"/images/tiles/monsters/monster_bird3.png":{"height":228,"width":183,"type":"png"},"/images/tiles/monsters/monster_boar.png":{"height":264,"width":195,"type":"png"},"/images/tiles/monsters/monster_cacto.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/rudolphi.png":{"height":264,"width":195,"type":"png"},"/images/tiles/monsters/monster_elk.png":{"height":264,"width":195,"type":"png"},"/images/tiles/monsters/monster_golem1.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/monster_golem2.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/monster_lich.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/monster_lizardman1.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/monster_lizardman2.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/stompy3.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/monster_minotaur.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/monster_phoenix.png":{"height":228,"width":183,"type":"png"},"/images/tiles/monsters/monster_raptor1.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/monster_raptor2.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/grinch.png":{"height":144,"width":82,"type":"png"},"/images/tiles/monsters/monster_treant.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/monster_wolf1.png":{"height":264,"width":195,"type":"png"},"/images/tiles/monsters/monster_wolf2.png":{"height":264,"width":195,"type":"png"},"/images/tiles/monsters/json.png":{"height":228,"width":183,"type":"png"},"/images/tiles/monsters/custom1.png":{"height":512,"width":720,"type":"png"},"/images/tiles/monsters/custom2.png":{"height":512,"width":720,"type":"png"},"/images/tiles/monsters/goos.png":{"height":256,"width":360,"type":"png"},"/images/tiles/monsters/monster1.png":{"height":512,"width":720,"type":"png"},"/images/tiles/monsters/animals1.png":{"height":288,"width":312,"type":"png"},"/images/tiles/monsters/animals2.png":{"height":288,"width":504,"type":"png"},"/images/tiles/monsters/birds1_modded.png":{"height":288,"width":504,"type":"png"},"/images/tiles/monsters/goblinos.png":{"height":288,"width":312,"type":"png"},"/images/tiles/monsters/goblinkingb.png":{"height":212,"width":156,"type":"png"},"/images/tiles/monsters/monsterc6.png":{"height":512,"width":692,"type":"png"},"/images/tiles/monsters/tinyfairies.png":{"height":288,"width":312,"type":"png"},"/images/tiles/monsters/monsterc2.png":{"height":400,"width":564,"type":"png"},"/images/tiles/monsters/robots.png":{"height":288,"width":372,"type":"png"},"/images/tiles/monsters/mage.png":{"height":288,"width":312,"type":"png"},"/images/tiles/monsters/monster2.png":{"height":512,"width":720,"type":"png"},"/images/tiles/monsters/monster3c.png":{"height":512,"width":720,"type":"png"},"/images/tiles/monsters/monster4.png":{"height":512,"width":720,"type":"png"},"/images/tiles/monsters/vampire2d.png":{"height":288,"width":312,"type":"png"},"/images/tiles/monsters/mr_pumpkin.png":{"height":144,"width":80,"type":"png"},"/images/tiles/monsters/cbee.png":{"height":144,"width":78,"type":"png"},"/images/tiles/monsters/iceGolem.png":{"height":200,"width":141,"type":"png"},"/images/tiles/monsters/green.png":{"height":144,"width":80,"type":"png"},"/images/tiles/monsters/robots_walkin_B_1.png":{"height":288,"width":372,"type":"png"},"/images/tiles/monsters/dryad_green_1.png":{"height":144,"width":78,"type":"png"},"/images/tiles/monsters/mondinos_1.png":{"height":288,"width":456,"type":"png"},"/images/tiles/monsters/giantspider.png":{"height":384,"width":480,"type":"png"},"/images/sprites/emblems/emblems.png":{"height":96,"width":480,"type":"png"},"/images/cosmetics/skins/sskin1.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/skins/mskin1.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/skins/lskin1.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/sbody1.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/mbody1.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/mbody2.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/mbody3.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/mbody4.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/mbody5.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/mbody6.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/sarmor1.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/sarmor2.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/marmor1.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/marmor2.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/marmor3.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/marmor4.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/marmor5.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/marmor6.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/marmor7.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/marmor8.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/marmor9.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/marmor10.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/marmor11.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/marmor12.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/armors/larmor1.png":{"height":288,"width":324,"type":"png"},"/images/all_characters/lchar1.png":{"height":288,"width":324,"type":"png"},"/images/all_characters/mchar16.png":{"height":288,"width":324,"type":"png"},"/images/all_characters/schar7.png":{"height":288,"width":324,"type":"png"},"/images/all_characters/xschar2.png":{"height":288,"width":324,"type":"png"},"/images/all_characters/xxschar2.png":{"height":288,"width":324,"type":"png"},"/images/cosmetics/hairdo/hairdo1.png":{"height":120,"width":675,"type":"png"},"/images/cosmetics/hairdo/hairdo2.png":{"height":120,"width":675,"type":"png"},"/images/cosmetics/hairdo/hairdo3.png":{"height":120,"width":675,"type":"png"},"/images/cosmetics/hairdo/hairdo4.png":{"height":120,"width":675,"type":"png"},"/images/cosmetics/hairdo/hairdo5.png":{"height":120,"width":675,"type":"png"},"/images/cosmetics/hairdo/hairdo6.png":{"height":120,"width":675,"type":"png"},"/images/cosmetics/hats/hats1.png":{"height":120,"width":675,"type":"png"},"/images/cosmetics/hats/hats2.png":{"height":120,"width":675,"type":"png"},"/images/cosmetics/hats/hats3.png":{"height":120,"width":675,"type":"png"},"/images/cosmetics/hats/hats4.png":{"height":120,"width":675,"type":"png"},"/images/cosmetics/wings/wings1.png":{"height":144,"width":185,"type":"png"},"/images/cosmetics/wings/wings2.png":{"height":144,"width":128,"type":"png"},"/images/cosmetics/wings/wings3.png":{"height":144,"width":185,"type":"png"},"/images/cosmetics/wings/backpacks.png":{"height":144,"width":185,"type":"png"},"/images/cosmetics/wings/backpack2.png":{"height":144,"width":185,"type":"png"},"/images/cosmetics/tails/wolftail.png":{"height":144,"width":108,"type":"png"},"/images/cosmetics/tails/wolftail2.png":{"height":144,"width":108,"type":"png"},"/images/cosmetics/tails/wolftail3.png":{"height":144,"width":108,"type":"png"},"/images/cosmetics/makeup/smakeup.png":{"height":120,"width":27,"type":"png"},"/images/cosmetics/makeup/malemakeup.png":{"height":120,"width":378,"type":"png"},"/images/cosmetics/makeup/femalemakeupv2.png":{"height":120,"width":351,"type":"png"},"/images/cosmetics/makeup/fmakeup.png":{"height":120,"width":351,"type":"png"},"/images/cosmetics/accessories/eyeglasses.png":{"height":120,"width":1107,"type":"png"},"/images/cosmetics/beardo/beard1.png":{"height":120,"width":1107,"type":"png"},"/images/cosmetics/beardo/mask1.png":{"height":120,"width":675,"type":"png"},"/images/cosmetics/beardo/facemakeup.png":{"height":120,"width":675,"type":"png"},"/images/cosmetics/makeup/male_makeup.png":{"height":120,"width":567,"type":"png"},"/images/cosmetics/makeup/female_makeup.png":{"height":120,"width":621,"type":"png"},"/images/cosmetics/makeup/unisex_makeup.png":{"height":120,"width":648,"type":"png"},"/images/tiles/items/pack_1a.png":{"height":2048,"width":256,"type":"png"},"/images/tiles/items/pack_20vt8.png":{"height":1280,"width":320,"type":"png"},"/images/tiles/items/skills_20v6.png":{"height":260,"width":320,"type":"png"},"/images/tiles/items/custom.png":{"height":180,"width":140,"type":"png"},"/images/tiles/items/community.png":{"height":180,"width":140,"type":"png"},"/images/tiles/map/castle.png":{"height":512,"width":544,"type":"png"},"/images/tiles/map/custom2.png":{"height":560,"width":752,"type":"png"},"/images/tiles/map/custom.png":{"height":480,"width":480,"type":"png"},"/images/tiles/map/custom_a.png":{"height":320,"width":320,"type":"png"},"/images/tiles/map/doors.png":{"height":256,"width":192,"type":"png"},"/images/tiles/map/dungeon.png":{"height":416,"width":912,"type":"png"},"/images/tiles/map/house.png":{"height":1168,"width":1104,"type":"png"},"/images/tiles/map/inside.png":{"height":816,"width":832,"type":"png"},"/images/tiles/map/outside.png":{"height":832,"width":904,"type":"png"},"/images/tiles/map/puzzle.png":{"height":320,"width":336,"type":"png"},"/images/tiles/map/water_updated.png":{"height":1200,"width":704,"type":"png"},"/images/tiles/map/winter.png":{"height":640,"width":912,"type":"png"},"/images/tiles/map/fort.png":{"height":832,"width":656,"type":"png"},"/images/tiles/map/beach_v2.png":{"height":416,"width":576,"type":"png"},"/images/tiles/map/world.png":{"height":288,"width":432,"type":"png"},"/images/tiles/items/stands.png":{"height":144,"width":78,"type":"png"},"/images/tiles/map/new.png":{"height":480,"width":672,"type":"png"},"/images/tiles/map/dark_dimension.png":{"height":336,"width":464,"type":"png"},"/images/tiles/map/jungle.png":{"height":336,"width":496,"type":"png"},"/images/tiles/map/ship.png":{"height":448,"width":864,"type":"png"},"/images/tiles/map/ashlands.png":{"height":336,"width":640,"type":"png"},"/images/tiles/map/ruins.png":{"height":832,"width":704,"type":"png"},"/images/tiles/map/tree.png":{"height":576,"width":544,"type":"png"},"/images/tiles/map/lights.png":{"height":480,"width":640,"type":"png"}}
diff --git a/docs/guide/event-lunarnewyear.html b/docs/guide/event-lunarnewyear.html
index af119d7..9703c28 100644
--- a/docs/guide/event-lunarnewyear.html
+++ b/docs/guide/event-lunarnewyear.html
@@ -2,7 +2,7 @@
Lunar New Year on Adventure Land
-
Green Envelopes drop globally. You can exchange them from Xyn in Mainland.
+ Brown Envelopes drop globally. You can exchange them from Xyn in Mainland.
@@ -18,7 +18,7 @@
diff --git a/images/tiles/items/custom.pxd b/images/tiles/items/custom.pxd
index f3c88326435a2e8dcb88813f5583d1223ad33d8e..3cdb2423696324b657bb6cfa9064d02567f343cb 100644
GIT binary patch
delta 15235
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
m=4S";
- html+=""+item_container({skin:"greenenvelope",bcolor:"black"})+"
";
+ html+=""+item_container({skin:"brownenvelope",bcolor:"black"})+"
";
html+="INFO
";
html+="";
content=true;
diff --git a/node/server.js b/node/server.js
index 4a46a1f..fe765ff 100644
--- a/node/server.js
+++ b/node/server.js
@@ -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 = {};
diff --git a/node/server_functions.js b/node/server_functions.js
index 6b84115..1d00e2d 100644
--- a/node/server_functions.js
+++ b/node/server_functions.js
@@ -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) {
diff --git a/scripts/data.js b/scripts/data.js
index c93d168..55aa0ca 100644
--- a/scripts/data.js
+++ b/scripts/data.js
@@ -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",
diff --git a/scripts/keep_alive.js b/scripts/keep_alive.js
index 83c4939..2324c01 100644
--- a/scripts/keep_alive.js
+++ b/scripts/keep_alive.js
@@ -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);
}
diff --git a/scripts/list_commands.js b/scripts/list_commands.js
index 756296c..4649948 100644
--- a/scripts/list_commands.js
+++ b/scripts/list_commands.js
@@ -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);
});
\ No newline at end of file
diff --git a/scripts/run_servers.js b/scripts/run_servers.js
index c237a0b..8ad302b 100644
--- a/scripts/run_servers.js
+++ b/scripts/run_servers.js
@@ -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);
});
\ No newline at end of file
diff --git a/scripts/update_machines.js b/scripts/update_machines.js
index a43024a..22d1d28 100644
--- a/scripts/update_machines.js
+++ b/scripts/update_machines.js
@@ -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";