Skip to content

Commit

Permalink
Merge branch 'feature/invasion' into thmsn.adventureland.community
Browse files Browse the repository at this point in the history
  • Loading branch information
thmsndk committed Oct 13, 2024
2 parents 9af9ea7 + 12f30b9 commit e389df6
Show file tree
Hide file tree
Showing 19 changed files with 1,293 additions and 7 deletions.
51 changes: 46 additions & 5 deletions design/conditions.py
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@
},
"invincible":{
"name":"Invincible",
"skin":"condition_positive",
"skin":"condition_good",
"explanation":"When you spawn in a PVP area. This prevents you from receiving damage or marked as engaged in PVP. If you get attacked, disconnect before this runs out - or fight!",
"duration":6000,
"persistent":True,
Expand Down Expand Up @@ -556,19 +556,19 @@
},
"charging":{
"name":"Charging",
"skin":"condition_positive",
"skin":"condition_good",
"speed":30,
"duration":3200,
},
"dash":{
"name":"Dashing",
"skin":"condition_positive",
"skin":"condition_good",
"set_speed":500,
"persistent":True,
},
"blink":{
"name":"Blinking",
"skin":"condition_positive",
"skin":"condition_good",
"explanation":"Blink in progress",
},
"block":{
Expand All @@ -580,7 +580,7 @@
},
"town":{
"name":"Town",
"skin":"condition_positive",
"skin":"condition_good",
"explanation":"Town in progress",
"channel":True,
"can_move":True,
Expand Down Expand Up @@ -650,6 +650,47 @@
"buff":True,
"explanation": "Will aid & tend to the queen, healing the queen."
},

"invasion_success_xp":{
"skin":"condition_good",
"name":"Invasion Success",
"explanation":"Protected a town during an invasion!",
"buff":True,
"persistent":True,
"ui":True,
"xp": 1,
},

"invasion_success_gold":{
"skin":"condition_good",
"name":"Invasion Success",
"explanation":"Protected a town during an invasion!",
"buff":True,
"persistent":True,
"ui":True,
"gold": 1

},

"invasion_success_luck":{
"skin":"condition_good",
"name":"Invasion Success",
"explanation":"Protected a town during an invasion!",
"buff":True,
"persistent":True,
"ui":True,
"luck": 1,

},

"invasion_failure":{
"skin":"condition_bad",
"name":"Invasion Failure",
"explanation":"Failed to protecting a town during an invasion",
"debuff":True,
"persistent":True,
"ui":True,
},
}

if 0:
Expand Down
151 changes: 151 additions & 0 deletions design/drops.py
Original file line number Diff line number Diff line change
Expand Up @@ -1034,6 +1034,21 @@
[1,"pvptoken"],
[0.5,"empty"],
],
"town_invasion":[
[1,"invasiontoken"],
[1,"invasiontoken",2],
[1,"invasiontoken",3],
[0.5,"invasiontoken",4],
[0.25,"invasiontoken",5],
[0.125,"invasiontoken",6],
[0.0675,"invasiontoken",20],
# TODO: invasion gear box?
# [0.0025,"fury"],
],
"town_invasion_defeat":[
[1,"invasiontoken"],
[0.5,"empty"],
],
"weaponofthedead":[
[0.85,"bowofthedead"],
[0.35,"swordofthedead"],
Expand Down Expand Up @@ -1326,6 +1341,135 @@
drops["cosmo3"].append([1.0/12,"cx","hat400"])
drops["cosmo3"].append([1.0/12,"cx","hat405"])

# invasion boxes
drops["invasion_scrollbox_tier0"] = []
drops["invasion_scrollbox_tier1"] = []
drops["invasion_scrollbox_tier2"] = []
# computer parts, network card?
# materials box? type == "material"
# keys? dungeons, bkey,ukey,dkey?
# type == "elixir"
# type == "shoes"
# type == "pants"
# type == "orb"
# type == "cape"
# type == "helmet", chest, gloves,
drops["invasion_accessoriesbox_tier0"] = []
drops["invasion_accessoriesbox_tier1"] = []
drops["invasion_accessoriesbox_tier2"] = []
# ring, earring, amulet

# Base Stat Earrings
# Base Stat Rings
# Base Stat Amulets
base_stat = ["str","int","dex"]
for stat in base_stat:
for itype in ["ring","earring","amulet"]:
drops["invasion_accessoriesbox_tier0"].append([1,stat + itype])
drops["invasion_accessoriesbox_tier1"].append([0.9,stat + itype])
drops["invasion_accessoriesbox_tier2"].append([0.4,stat + itype])

# Base Stat orbs (orbofstr)
drops["invasion_accessoriesbox_tier2"].append([0.5,"orbof" + stat])

# T2 stat amulets
drops["invasion_accessoriesbox_tier1"].append([0.5,"t2" + stat + "amulet"])
drops["invasion_accessoriesbox_tier2"].append([0.6,"t2" + stat + "amulet"])

for name in ["vitring", "vitearring", "hpamulet", "ringsj",
"orbg", "test_orb","warmscarf"]:
drops["invasion_accessoriesbox_tier0"].append([1,name])
drops["invasion_accessoriesbox_tier1"].append([0.6,name])
drops["invasion_accessoriesbox_tier2"].append([0.5,name])

drops["invasion_accessoriesbox_tier0"].append([0.5,"skullamulet"])
drops["invasion_accessoriesbox_tier1"].append([0.5,"skullamulet"])
drops["invasion_accessoriesbox_tier2"].append([0.3,"skullamulet"])

# t2 => ctristone, cdarktristone, molesteeth, mbelt, ftrinket, tigerstone, solitaire?

drops["invasion_accessoriesbox_tier2"].append([0.001,"armorring"])
drops["invasion_accessoriesbox_tier2"].append([0.001,"resistancering"])
drops["invasion_accessoriesbox_tier2"].append([0.0001,"ringofluck"])
drops["invasion_accessoriesbox_tier2"].append([0.0001,"suckerpunch"])
drops["invasion_accessoriesbox_tier2"].append([0.000001,"mpxbelt"])
drops["invasion_accessoriesbox_tier2"].append([0.000001,"sanguine"])
drops["invasion_accessoriesbox_tier2"].append([0.000001,"amuletofm"])
drops["invasion_accessoriesbox_tier2"].append([0.000001,"bfangamulet"])
drops["invasion_accessoriesbox_tier2"].append([0.000001,"sbelt"])
drops["invasion_accessoriesbox_tier2"].append([0.000001,"orbofsc"])
drops["invasion_accessoriesbox_tier2"].append([0.000001,"rabbitsfoot"])
drops["invasion_accessoriesbox_tier2"].append([0.000001,"mearring"])



drops["invasion_accessoriesbox_tier0"].append([0.001,"invasion_accessoriesbox_tier1"])
# drops["invasion_accessoriesbox_tier0"].append([0.00001,"invasion_accessoriesbox_tier2"])
drops["invasion_accessoriesbox_tier1"].append([0.001,"invasion_accessoriesbox_tier2"])

# Fillers, potions, upgrade scrolls, gem0 x N? offering?

for name in items:
item = items[name]
if not items[name].get("ignore") and not items[name].get("exclusive"):

# Property Scrolls (str,luck..)
if item["type"] == "pscroll":
# make some stats harder to roll
if item["stat"] in ["gold","luck", "lifesteal","manasteal","mp_cost"]:
drops["invasion_scrollbox_tier0"].append([0.1, name])
drops["invasion_scrollbox_tier1"].append([0.1, name])
drops["invasion_scrollbox_tier2"].append([0.1, name])

else:
drops["invasion_scrollbox_tier0"].append([0.25, name])
drops["invasion_scrollbox_tier1"].append([0.25, name])
drops["invasion_scrollbox_tier2"].append([0.25, name])

# Upgrade / Compound scrolls
elif item["type"] == "uscroll" or item["type"] == "cscroll":
# TODO: amount of scrolls given?
if item["grade"] > 0:
drops["invasion_scrollbox_tier0"].append([10.0 / item["grade"], name])
else:
drops["invasion_scrollbox_tier0"].append([10.0, name])

# if item["type"] in ["ring","earring", "amulet"]:
# # TODO: tier modifier?
# if grade_chance > 0:
# # jewellery has no tier... try to find existing drop chances and use that as maximum?
# minChance = grade_chance
# for table_name in drops.keys():
# table = drops[table_name]
# if table_name == "monsters":
# for monsterKey in table:
# monster_table = drops["monsters"][monsterKey]
# for drop in monster_table:
# if drop[1] == name and minChance > drop[0]:
# # print(table_name)
# # print(drop)
# minChance = drop[0]
# else:
# for drop in table:
# if drop[1] == name and minChance > drop[0]:
# # print(table_name)
# # print(drop)
# minChance = drop[0]

# drops["invasion_accessoriesbox_tier0"].append([minChance, name])

invasion_boxes = ["invasion_scrollbox_tier0",
"invasion_scrollbox_tier1",
"invasion_scrollbox_tier2",
"invasion_accessoriesbox_tier0",
"invasion_accessoriesbox_tier1",
"invasion_accessoriesbox_tier2"
]
# sort invasion boxes highest to lowest value
for key in invasion_boxes:
drops[key].sort()
drops[key].reverse()

for key in drops.keys():
if key.find(",")!=-1:
t=drops[key]
Expand All @@ -1335,15 +1479,22 @@
drops[key]=t

for name in items:
item = items[name]
if not items[name].get("ignore") and not items[name].get("exclusive"):
grade_chance = 0
if items[name].get("grades") and (items[name].get("upgrade") and items[name]["grades"][2]<8 or items[name].get("compound") and items[name]["grades"][2]<3):
grade_chance = 0.1
drops["glitch"].append([0.1,name])
elif items[name].get("grades") and items[name]["grades"][2]==0:
grade_chance = 0.1
drops["glitch"].append([0.1,name])
elif items[name].get("grades") and items[name]["grades"][1]==0:
grade_chance = 0.25
drops["glitch"].append([0.25,name])
else:
grade_chance = 1
drops["glitch"].append([1,name])


for name in items:
if "g" not in items[name]:
Expand Down
52 changes: 52 additions & 0 deletions design/items.py
Original file line number Diff line number Diff line change
Expand Up @@ -5898,6 +5898,50 @@
# "a":True,
# "event":True,
# },
"invasion_accessoriesbox_tier0":{
"type":"box",
"skin":"chest3",
"name":"Invasion Jewellery Box",
"explanation":"Can be exchanged for a random acessory.",
#"cash":2320,
"g":24000,
"e":1,
"a":True,
"s":True,
},
"invasion_accessoriesbox_tier1":{
"type":"box",
"skin":"chest3",
"name":"Invasion Jewellery Box Tier 1",
"explanation":"Can be exchanged for a random acessory.",
#"cash":2320,
"g":24000,
"e":1,
"a":True,
"s":True,
},
"invasion_accessoriesbox_tier2":{
"type":"box",
"skin":"chest3",
"name":"Invasion Jewellery Box Tier 2",
"explanation":"Can be exchanged for a random acessory.",
#"cash":2320,
"g":24000,
"e":1,
"a":True,
"s":True,
},
"invasion_scrollbox_tier0":{
"type":"box",
"skin":"placeholder",
"name":"Invasion Scroll Box",
"explanation":"Can be exchanged for a random scroll.",
#"cash":2320,
"g":24000,
"e":1,
"a":True,
"s":True,
},
}

misc={
Expand Down Expand Up @@ -6101,6 +6145,14 @@
"s":True,
"g":36000,
},
"invasiontoken":{
"type":"token",
"skin":"placeholder",
"name":"Invasion Token",
"explanation":"A token representing efforts during an invasion!",
"s":True,
"g":12000,
},
"beetoken":{
"type":"token",
"skin":"placeholder",
Expand Down
39 changes: 39 additions & 0 deletions design/maps.py
Original file line number Diff line number Diff line change
Expand Up @@ -601,6 +601,7 @@
{"id":"mcollector","position":[81,-283,1]},
#{"id":"newyear_tree","position":[64,-88]}, #xmas
{"id":"beekeeper","position":[612, 737.5],"boundary":[-200,-200,200,200]},
{"id":"invasion_scout","position":[0,0],"boundary":[-100,-100,100,100]},
],
"monsters":[
#square
Expand Down Expand Up @@ -757,6 +758,41 @@
}
],
"outside":True,
"invasion" :{
# [MIN_MS, MAX_MS, CHANCE]
# "frequency": [3600000, 21600000, 0.4], # 2-6 hours
# TODO: what is the target? there could be multiple targets?
"town": [0,0],
# TODO: what types of invasions are enabled?
# TODO: any specific monsters on the map that should not be part of an invasion?
# disable fairies
"exclude":[
"crabxx",
"puppy1",
"puppy2",
"puppy3",
"puppy4",
"kitty1",
"kitty2",
"kitty3",
"kitty4",
# Targets has no attack, so we ignore them for now, although having them "revolt" is kinda funny
"target",
"target_a500",
"target_a750",
"target_r500",
"target_r750",
"target_ar900",
"target_ar500red",
],
# TODO: combined invasion of different mobs?
# TODO: failure conditions?
# TODO: "nearby" monster invasions, moles for example emergin from tunnels
# "extra": [
# # moles emerge from tunnel
# ["tunnel","mole", [535,1677]]
# ]
}
},
"mansion":{
"key":"jayson_Mansion",
Expand Down Expand Up @@ -1281,6 +1317,9 @@
#"irregular":True,
"drop_norm":1000,
"outside":True,
"invasion" :{
"town": [0,0],
}
},
"shellsisland":{
"key":"jayson_shells_island01",
Expand Down
Loading

0 comments on commit e389df6

Please sign in to comment.