v2016.12.23

This commit is contained in:
lcdr
2016-12-23 09:58:25 +01:00
parent 998b697445
commit 77c0e9aa04
9 changed files with 50 additions and 11 deletions

View File

@@ -1,4 +1,3 @@
import asyncio
import logging
import random
@@ -566,12 +565,10 @@ class CharacterComponent(Component):
def match_request(self, address, activator:c_int64=None, player_choices:"ldf"=None, type:c_int=None, value:c_int=None):
# todo: how does the server know which matchmaking activity the client wants?
self.object._v_server.send_game_message(self.match_response, response=0, address=address)
if type == MatchRequestType.Join and value == MatchRequestValue.Join:
if type == MatchRequestType.Join:# and value == MatchRequestValue.Join:
update_data = {}
update_data["time"] = c_float, 60
self.object._v_server.send_game_message(self.match_update, data=update_data, type=MatchUpdateType.Time, address=address)
elif type == MatchRequestType.Ready and value == MatchRequestValue.Ready:
asyncio.ensure_future(self.transfer_to_world((1101, 0, 0)))
def match_response(self, address, response:c_int=None):
pass

View File

@@ -1,6 +1,11 @@
from .component import Component
class RailActivatorComponent(Component):
def __init__(self, obj, set_vars, comp_id):
super().__init__(obj, set_vars, comp_id)
self.rail_path = set_vars.get("rail_path", "")
self.rail_path_start = set_vars.get("rail_path_start", 0)
def serialize(self, out, is_creation):
pass

View File

@@ -1,11 +1,15 @@
from ..bitstream import c_bit, c_float, c_int64, c_uint
import asyncio
from ..bitstream import c_bit, c_float, c_int, c_int64, c_uint
from .component import Component
class ScriptedActivityComponent(Component):
def __init__(self, obj, set_vars, comp_id):
super().__init__(obj, set_vars, comp_id)
self.object.scripted_activity = self
self._flags["players"] = "activity_flag"
self.players = []
self.comp_id = comp_id
def serialize(self, out, is_creation):
out.write(c_bit(self.activity_flag))
@@ -16,3 +20,9 @@ class ScriptedActivityComponent(Component):
for _ in range(10):
out.write(c_float(0))
self.activity_flag = False
def message_box_respond(self, address, button:c_int=None, identifier:"wstr"=None, user_data:"wstr"=None):
if identifier == "LobbyReady" and button == 1:
player = self.object._v_server.accounts[address].characters.selected()
activity = self.object._v_server.db.activities[self.comp_id]
asyncio.ensure_future(player.char.transfer_to_world((activity[0], 0, 0)))

View File

@@ -98,6 +98,8 @@ class CastType:
Consumable = 3
EverlastingConsumable = 4
PASSIVE_BEHAVIORS = BehaviorTemplate.TargetCaster, BehaviorTemplate.Buff, BehaviorTemplate.SkillCastFailed, BehaviorTemplate.ApplyBuff
class SkillComponent(Component):
def __init__(self, obj, set_vars, comp_id):
super().__init__(obj, set_vars, comp_id)
@@ -418,7 +420,7 @@ class SkillComponent(Component):
if item.lot in self.object._v_server.db.object_skills:
for skill_id in self.object._v_server.db.object_skills[item.lot]:
behavior = self.object._v_server.db.skill_behavior[skill_id]
if behavior.template in (BehaviorTemplate.TargetCaster, BehaviorTemplate.Buff, BehaviorTemplate.ApplyBuff):
if behavior.template in PASSIVE_BEHAVIORS:
if add_buffs:
if hasattr(self.object, "char"):
# update missions that have using this skill as requirement
@@ -440,7 +442,7 @@ class SkillComponent(Component):
def add_skill_server(self, skill_id):
behavior = self.object._v_server.db.skill_behavior[skill_id]
if behavior.template in (BehaviorTemplate.TargetCaster, BehaviorTemplate.Buff, BehaviorTemplate.ApplyBuff):
if behavior.template in PASSIVE_BEHAVIORS:
if hasattr(self.object, "char"):
# update missions that have using this skill as requirement
for mission in self.object.char.missions:
@@ -454,12 +456,12 @@ class SkillComponent(Component):
if item.lot in self.object._v_server.db.object_skills:
for skill_id in self.object._v_server.db.object_skills[item.lot]:
behavior = self.object._v_server.db.skill_behavior[skill_id]
if behavior.template in (BehaviorTemplate.TargetCaster, BehaviorTemplate.Buff, BehaviorTemplate.ApplyBuff):
if behavior.template in PASSIVE_BEHAVIORS:
self.undo_behavior(behavior)
else:
self.object._v_server.send_game_message(self.remove_skill, skill_id=skill_id, address=self.object.char.address)
def remove_skill_server(self, skill_id):
behavior = self.object._v_server.db.skill_behavior[skill_id]
if behavior.template in (BehaviorTemplate.TargetCaster, BehaviorTemplate.Buff, BehaviorTemplate.ApplyBuff):
if behavior.template in PASSIVE_BEHAVIORS:
self.undo_behavior(behavior)

View File

@@ -25,6 +25,7 @@ from .components.rail import RailActivatorComponent
from .components.rebuild import RebuildComponent
from .components.render import RenderComponent
from .components.script import ScriptComponent
from .components.scripted_activity import ScriptedActivityComponent
from .components.skill import SkillComponent
from .components.spawner import SpawnerComponent
from .components.stats import StatsSubcomponent
@@ -59,6 +60,7 @@ component[73] = MissionNPCComponent, # belongs to the other nonserialized compon
component[49] = SwitchComponent,
component[16] = VendorComponent,
component[6] = BouncerComponent,
component[39] = ScriptedActivityComponent,
component[75] = ExhibitComponent,
component[2] = RenderComponent,

View File

@@ -0,0 +1,14 @@
import asyncio
import luserver.components.script as script
from luserver.bitstream import c_int
class ScriptComponent(script.ScriptComponent):
def on_use(self, player, multi_interact_id):
assert multi_interact_id is None
self.object._v_server.send_game_message(player.char.display_message_box, show=True, callback_client=self.object.object_id, identifier="instance_exit", image_id=0, text=self.script_vars.get("transfer_text", "DRAGON_EXIT_QUESTION"), user_data="", address=player.char.address)
def message_box_respond(self, address, button:c_int=None, identifier:"wstr"=None, user_data:"wstr"=None):
if identifier == "instance_exit" and button == 1:
player = self.object._v_server.accounts[address].characters.selected()
asyncio.ensure_future(player.char.transfer_to_world(((player.char.world[0] // 100)*100, player.char.world[1], player.char.world[2])))

View File

@@ -339,6 +339,7 @@ if GENERATE_COMPS:
root.destructible_component = BTrees.IOBTree.BTree()
root.vendor_component = BTrees.IOBTree.BTree()
root.inventory_component = BTrees.IOBTree.BTree()
root.activities = BTrees.IOBTree.BTree()
root.rebuild_component = BTrees.IOBTree.BTree()
root.package_component = BTrees.IOBTree.BTree()
root.launchpad_component = BTrees.IOBTree.BTree()
@@ -390,6 +391,10 @@ if GENERATE_COMPS:
for comp_row in cdclient.execute("select itemid, equip from InventoryComponent where id == %i" % row[2]):
root.inventory_component.setdefault(row[2], []).append((comp_row[0], comp_row[1]))
elif row[1] == 39 and row[2] not in root.activities:
for comp_row in cdclient.execute("select instanceMapID from Activities where ActivityID == %i" % row[2]):
root.activities[row[2]] = comp_row
elif row[1] == 48 and row[2] not in root.rebuild_component:
comp_row = cdclient.execute("select complete_time, time_before_smash, reset_time, take_imagination, activityID from RebuildComponent where id == %i" % row[2]).fetchone()
if comp_row is not None:

View File

@@ -54,7 +54,7 @@ class PathType:
Race = 6
Rail = 7
WHITELISTED_SERVERSIDE_LOTS = 176, 2292, 3964, 4734, 4764, 4860, 4945, 5633, 5652, 6247, 6396, 6464, 6465, 6466, 6700, 6842, 6958, 6960, 7085, 7608, 7973, 8139, 8419, 9930, 10009, 10042, 10413, 10496, 11165, 11178, 11274, 11279, 11280, 11281, 12232, 12384, 12661, 13142, 13834, 13835, 13881, 13882, 14013, 14031, 14086, 14087, 14199, 14214, 14215, 14216, 14217, 14218, 14220, 14225, 14226, 14242, 14243, 14244, 14245, 14246, 14248, 14249, 14289, 14290, 14291, 14292, 14293, 14294, 14330, 14331, 14332, 14333, 14345, 14346, 14347, 14348, 14510, 14530, 15902, 16506, 16513, 16627
WHITELISTED_SERVERSIDE_LOTS = 176, 2292, 3964, 4734, 4764, 4860, 4945, 5633, 5652, 6247, 6396, 6464, 6465, 6466, 6700, 6842, 6958, 6960, 7085, 7608, 7973, 8139, 8419, 9930, 10009, 10042, 10413, 10496, 11165, 11178, 11182, 11274, 11279, 11280, 11281, 12232, 12384, 12661, 13142, 13834, 13835, 13881, 13882, 14013, 14031, 14086, 14087, 14199, 14214, 14215, 14216, 14217, 14218, 14220, 14225, 14226, 14242, 14243, 14244, 14245, 14246, 14248, 14249, 14289, 14290, 14291, 14292, 14293, 14294, 14330, 14331, 14332, 14333, 14345, 14346, 14347, 14348, 14510, 14530, 15902, 16477, 16506, 16513, 16627
EVENT_NAMES = {}
EVENT_NAMES["OnActivated"] = "on_activated"
@@ -177,6 +177,8 @@ def lvl_parse_chunk_type_2001(lvl, conn, world_data, triggers):
script_vars["teleport_respawn_point_name"] = config["teleGroup"]
if "TouchCompleteID" in config:
script_vars["touch_complete_mission_id"] = config["TouchCompleteID"]
if "transferText" in config:
script_vars["transfer_text"] = config["transferText"]
if "transferZoneID" in config:
script_vars["transfer_world_id"] = int(config["transferZoneID"])

View File

@@ -38,9 +38,10 @@ SCRIPTS[1582] = "items.maelstrom_vacuum"
SCRIPTS[1586] = "avant_gardens.caged_bricks"
SCRIPTS[1641] = "ninjago.ninja"
SCRIPTS[1647] = "ninjago.ninja"
SCRIPTS[1696] = "ninjago.treasure_chest"
SCRIPTS[1709] = "general.transfer_to_last_non_instance"
SCRIPTS[1712] = "ninjago.ninja"
SCRIPTS[1713] = "ninjago.ninja"
SCRIPTS[1696] = "ninjago.treasure_chest"
SCRIPTS[r"02_server\Map\AG\L_AG_LASER_SENSOR_SERVER.lua"] = "avant_gardens.laser_sensor"
SCRIPTS[r"02_server\Map\General\L_POI_MISSION.lua"] = "general.poi_mission"
SCRIPTS[r"02_server\Map\General\L_TOUCH_MISSION_UPDATE_SERVER.lua"] = "general.touch_complete_mission"
@@ -58,6 +59,7 @@ SCRIPTS[r"ai\AG\L_AG_SHIP_PLAYER_SHOCK_SERVER.lua"] = "venture_explorer.broken_c
SCRIPTS[r"ai\AG\L_AG_SHIP_SHAKE.lua"] = "venture_explorer.ship_shake"
SCRIPTS[r"ai\FV\L_ACT_BOUNCE_OVER_WALL.lua"] = "forbidden_valley.bounce_over_wall"
SCRIPTS[r"ai\GF\L_GF_JAIL_WALLS.lua"] = "gnarled_forest.jail_walls"
SCRIPTS[r"ai\GENERAL\L_INSTANCE_EXIT_TRANSFER_PLAYER_TO_LAST_NON_INSTANCE.lua"] = "general.transfer_to_last_non_instance"
SCRIPTS[r"ai\NS\L_NS_JONNY_FLAG_MISSION_SERVER.lua"] = "nimbus_station.johnny_thunder"
SCRIPTS[r"ai\NS\L_NS_QB_IMAGINATION_STATUE.lua"] = "nimbus_station.imagination_statue"
SCRIPTS[r"ai\NS\NS_PP_01\L_NS_PP_01_TELEPORT.lua"] = "property.teleport"