port 2V2-b: GamePhase dispatch consumes the Entergame burst
PythonNetworkStreamPhaseGame/PhaseGameActor/PhaseGameItem/Command, NetworkActorManager and PythonChat/PythonChatModule are ported verbatim and dispatched at runtime; the 2V0 chat stub module is removed and initChat() runs before initnet() as in 40250. InstanceBase, PythonCharacterManager and GameLib ActorInstance/RaceData/RaceManager compile but stay TODO until 2V2-c/d wire them. Units not ported yet get their singletons from PythonBoot's GameSingletons (CPythonApplication member order) and platform/pending stand-ins generated by platform_stub.py pending; const char* stand-ins return "". port.login_flow's fake server now sends the CInputLogin::Entergame order (actor insert, NPC positions, PHASE_GAME, land list, time, channel, greet notice, ping) and a TraceError observer asserts no unknown packet header. port.login_live passes against the real server for 10 s of game phase. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d16fabf61c
commit
62b6e23bfc
@@ -5,6 +5,12 @@
|
|||||||
platform_stub.py gen [<header>...] [--force] write extension/src/platform/<Lib>/<File>.cpp
|
platform_stub.py gen [<header>...] [--force] write extension/src/platform/<Lib>/<File>.cpp
|
||||||
(no args: every platform header; never overwrites
|
(no args: every platform header; never overwrites
|
||||||
without --force, so hand-written implementations stay)
|
without --force, so hand-written implementations stay)
|
||||||
|
platform_stub.py pending <header> <symbol>... [--ctor]
|
||||||
|
append stubs of just those members (the linker's
|
||||||
|
undefined-symbol names, demangled as ld prints them) to the stand-in of a not-yet-ported
|
||||||
|
logic unit, extension/src/platform/pending/<Lib>/<File>.cpp;
|
||||||
|
--ctor adds the class constructor/destructor so the
|
||||||
|
singleton can exist (its members still default-construct)
|
||||||
|
|
||||||
`<header>` is a mirror path such as `EterLib/GrpBase.h`. A header is platform-layer when its same-stem
|
`<header>` is a mirror path such as `EterLib/GrpBase.h`. A header is platform-layer when its same-stem
|
||||||
40250 .cpp unit is (port_map.py LAYER_PATTERNS), or, without one, when its own path matches.
|
40250 .cpp unit is (port_map.py LAYER_PATTERNS), or, without one, when its own path matches.
|
||||||
@@ -262,11 +268,13 @@ class Collector:
|
|||||||
and not node.get("inline"):
|
and not node.get("inline"):
|
||||||
self.add("fn", f"{scope}{node['name']}", node)
|
self.add("fn", f"{scope}{node['name']}", node)
|
||||||
|
|
||||||
def render(self) -> list[str]:
|
def render(self, only=None) -> list[str]:
|
||||||
out = []
|
out = []
|
||||||
for kind, qname, node in self.decls:
|
for kind, qname, node in self.decls:
|
||||||
if node.get("mangledName") in self.defined:
|
if node.get("mangledName") in self.defined:
|
||||||
continue
|
continue
|
||||||
|
if only is not None and not only(qname, node):
|
||||||
|
continue
|
||||||
if kind == "var":
|
if kind == "var":
|
||||||
out.append(f"decltype({qname}) {qname}{{}};\n")
|
out.append(f"decltype({qname}) {qname}{{}};\n")
|
||||||
else:
|
else:
|
||||||
@@ -288,7 +296,8 @@ def namespaces(header: Path) -> dict[str, str]:
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def generate(rel: str) -> str:
|
def generate(rel: str, only=None) -> str:
|
||||||
|
"""The skeleton of `rel`; with `only(qname, node)`, just the declarations it accepts (the bodies alone)."""
|
||||||
header = PORT / rel
|
header = PORT / rel
|
||||||
records, functions = scan(header)
|
records, functions = scan(header)
|
||||||
args, tu = gate_command(rel)
|
args, tu = gate_command(rel)
|
||||||
@@ -304,9 +313,9 @@ def generate(rel: str) -> str:
|
|||||||
for n in nodes:
|
for n in nodes:
|
||||||
if n.get("name") == name:
|
if n.get("name") == name:
|
||||||
col.root(n, ns.get(name, ""))
|
col.root(n, ns.get(name, ""))
|
||||||
body = col.render()
|
body = col.render(only)
|
||||||
if not body:
|
if not body or only is not None:
|
||||||
return ""
|
return "\n".join(body)
|
||||||
lib = rel.split("/")[0]
|
lib = rel.split("/")[0]
|
||||||
stdafx = next((p.name for p in (PORT / lib).glob("*") if p.name.lower() == "stdafx.h"), None)
|
stdafx = next((p.name for p in (PORT / lib).glob("*") if p.name.lower() == "stdafx.h"), None)
|
||||||
unit = unit_of(rel)
|
unit = unit_of(rel)
|
||||||
@@ -382,6 +391,44 @@ def cmd_gen(args) -> int:
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_pending(args) -> int:
|
||||||
|
rel = next((h.relative_to(PORT).as_posix() for h in PORT.rglob("*.h")
|
||||||
|
if h.relative_to(PORT).as_posix().lower() == args.header.lower()), None)
|
||||||
|
if not rel:
|
||||||
|
raise SystemExit(f"{args.header}: not in the mirror")
|
||||||
|
wanted = {s.strip().strip('"') for s in args.symbols}
|
||||||
|
demangled: dict[str, str] = {}
|
||||||
|
|
||||||
|
def only(qname: str, node: dict) -> bool:
|
||||||
|
mangled = node.get("mangledName", "")
|
||||||
|
if mangled not in demangled:
|
||||||
|
demangled[mangled] = subprocess.run(["c++filt", mangled], capture_output=True, text=True).stdout.strip()
|
||||||
|
if demangled[mangled] in wanted:
|
||||||
|
return True
|
||||||
|
return args.ctor and node.get("kind") in ("CXXConstructorDecl", "CXXDestructorDecl") \
|
||||||
|
and qname.split("::")[-2:-1] == [node.get("name", "").lstrip("~")] and qname.count("::") == 1
|
||||||
|
body = generate(rel, only)
|
||||||
|
if not body:
|
||||||
|
print(f"none {rel} (no such undefined member)")
|
||||||
|
return 0
|
||||||
|
path = PLATFORM / "pending" / (rel.rsplit(".", 1)[0] + ".cpp")
|
||||||
|
if path.exists():
|
||||||
|
text = path.read_text(encoding="utf-8").rstrip("\n") + "\n\n" + body
|
||||||
|
else:
|
||||||
|
lib = rel.split("/")[0]
|
||||||
|
stdafx = next((p.name for p in (PORT / lib).glob("*") if p.name.lower() == "stdafx.h"), None)
|
||||||
|
unit = unit_of(rel) or rel
|
||||||
|
text = (f"// Stand-in for the 40250 logic unit {unit}, not ported yet: the members the ported units\n"
|
||||||
|
f"// reference, as {MARK} stubs. Delete this file in the commit that ports the unit into port/\n"
|
||||||
|
f"// (docs/PORT-PLAN.md).\n"
|
||||||
|
+ (f'#include "{lib}/{stdafx}"\n' if stdafx else "")
|
||||||
|
+ f'#include "{rel}"\n\n#include "{"../" * (rel.count("/") + 1)}PlatformStub.h"\n\n' + body)
|
||||||
|
path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
path.write_text(text, encoding="utf-8")
|
||||||
|
print(f"wrote {path.relative_to(REPO)} (+{body.count('MT_PLATFORM_STUB();')} stubs)")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
def main() -> int:
|
def main() -> int:
|
||||||
ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
|
ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
|
||||||
sub = ap.add_subparsers(dest="cmd", required=True)
|
sub = ap.add_subparsers(dest="cmd", required=True)
|
||||||
@@ -390,6 +437,11 @@ def main() -> int:
|
|||||||
g.add_argument("headers", nargs="*")
|
g.add_argument("headers", nargs="*")
|
||||||
g.add_argument("--force", action="store_true")
|
g.add_argument("--force", action="store_true")
|
||||||
g.set_defaults(fn=cmd_gen)
|
g.set_defaults(fn=cmd_gen)
|
||||||
|
p = sub.add_parser("pending")
|
||||||
|
p.add_argument("header")
|
||||||
|
p.add_argument("symbols", nargs="*")
|
||||||
|
p.add_argument("--ctor", action="store_true")
|
||||||
|
p.set_defaults(fn=cmd_pending)
|
||||||
args = ap.parse_args()
|
args = ap.parse_args()
|
||||||
return args.fn(args)
|
return args.fn(args)
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,8 @@
|
|||||||
|
|
||||||
Mechanical edits, and nothing else:
|
Mechanical edits, and nothing else:
|
||||||
- CP949 is decoded and written as UTF-8 (comments are Korean). A non-ASCII string or character
|
- CP949 is decoded and written as UTF-8 (comments are Korean). A non-ASCII string or character
|
||||||
literal would change bytes at runtime, so such a file is refused and must be handled by hand.
|
literal would change bytes at runtime, so its non-ASCII characters are written as their CP949
|
||||||
|
bytes in 3-digit octal escapes (`"\301\326..."`): the compiled bytes stay those of 40250.
|
||||||
- CRLF becomes LF.
|
- CRLF becomes LF.
|
||||||
- `#include "..."` paths get the on-disk case of the file they name (40250 builds on a
|
- `#include "..."` paths get the on-disk case of the file they name (40250 builds on a
|
||||||
case-insensitive file system and writes `../eterLib/StdAfx.h`, `Parser.h` for `parser.h`, ...),
|
case-insensitive file system and writes `../eterLib/StdAfx.h`, `Parser.h` for `parser.h`, ...),
|
||||||
@@ -77,9 +78,12 @@ def mechanical(ref: Path, index: dict[str, Path], src: Path) -> str:
|
|||||||
raise SystemExit(f"{src.relative_to(ref)}: not CP949 ({e})")
|
raise SystemExit(f"{src.relative_to(ref)}: not CP949 ({e})")
|
||||||
text = text.replace("\r\n", "\n").lstrip("")
|
text = text.replace("\r\n", "\n").lstrip("")
|
||||||
code = COMMENT.sub(lambda m: " " * len(m.group(0)), text)
|
code = COMMENT.sub(lambda m: " " * len(m.group(0)), text)
|
||||||
bad = [m.group(0) for m in LITERAL.finditer(code) if not m.group(0).isascii()]
|
# Literals are found with comments blanked out; offsets are the same in `text`.
|
||||||
if bad:
|
for m in reversed(list(LITERAL.finditer(code))):
|
||||||
raise SystemExit(f"{src.relative_to(ref)}: non-ASCII literal(s), copy by hand: {bad[:3]}")
|
if not m.group(0).isascii():
|
||||||
|
escaped = "".join(c if c.isascii() else "".join(f"\\{b:03o}" for b in c.encode("cp949"))
|
||||||
|
for c in m.group(0))
|
||||||
|
text = text[:m.start()] + escaped + text[m.end():]
|
||||||
return INCLUDE.sub(lambda m: m.group(1) + fix_include(ref, index, src, m.group(2)) + m.group(3), text)
|
return INCLUDE.sub(lambda m: m.group(1) + fix_include(ref, index, src, m.group(2)) + m.group(3), text)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -513,3 +513,4 @@
|
|||||||
{"time": "2026-09-23T06:23:33Z", "event": "port_round", "unit": "PORT-PLAN 2V1-e: live smoke harness (port.login_live)", "ported": [], "adapted": ["port_login_flow_test live mode: server and account from MT_LIVE_* env vars only, passed to Python as objects, never printed"], "divergent": [], "needs_live": ["login -> character list -> loading against 192.168.21.203 (host unreachable from this machine on 2026-09-23)", "the live loading-phase packet burst through the platform/pending stand-ins", "auth/login failure popups (wrong password, already logged in, blocked)", "CG_CLIENT_VERSION with an empty filename (GetExcutedFileName stub) accepted by the server"], "tests": ["port.login_flow: pass", "port.login_live: skipped without MT_LIVE_*", "script/port_gate.sh macos: PASS"], "todo": ["run port.login_live once the server is reachable", "port the platform/pending units"]}
|
{"time": "2026-09-23T06:23:33Z", "event": "port_round", "unit": "PORT-PLAN 2V1-e: live smoke harness (port.login_live)", "ported": [], "adapted": ["port_login_flow_test live mode: server and account from MT_LIVE_* env vars only, passed to Python as objects, never printed"], "divergent": [], "needs_live": ["login -> character list -> loading against 192.168.21.203 (host unreachable from this machine on 2026-09-23)", "the live loading-phase packet burst through the platform/pending stand-ins", "auth/login failure popups (wrong password, already logged in, blocked)", "CG_CLIENT_VERSION with an empty filename (GetExcutedFileName stub) accepted by the server"], "tests": ["port.login_flow: pass", "port.login_live: skipped without MT_LIVE_*", "script/port_gate.sh macos: PASS"], "todo": ["run port.login_live once the server is reachable", "port the platform/pending units"]}
|
||||||
{"time": "2026-09-23T07:40:54Z", "event": "port_round", "unit": "PORT-PLAN 2V1-e: live smoke against 192.168.21.203", "ported": [], "adapted": [], "divergent": [], "needs_live": ["the loading-phase packet burst after GC_MAIN_CHARACTER and CG_ENTERGAME (2V2 GameWindow)", "auth/login failure popups", "server handling of CG_CLIENT_VERSION with an empty filename (not observable client-side)"], "tests": ["port.login_live: pass x2 against 192.168.21.203 (auth handshake + key agreement + LOGIN3, game LOGIN2, character list, DirectEnter reconnect, CHARACTER_SELECT, GC_MAIN_CHARACTER -> LoadData + CG_CLIENT_VERSION; no unknown packets)", "port.login_flow: pass"], "todo": ["2V2", "port the platform/pending units"]}
|
{"time": "2026-09-23T07:40:54Z", "event": "port_round", "unit": "PORT-PLAN 2V1-e: live smoke against 192.168.21.203", "ported": [], "adapted": [], "divergent": [], "needs_live": ["the loading-phase packet burst after GC_MAIN_CHARACTER and CG_ENTERGAME (2V2 GameWindow)", "auth/login failure popups", "server handling of CG_CLIENT_VERSION with an empty filename (not observable client-side)"], "tests": ["port.login_live: pass x2 against 192.168.21.203 (auth handshake + key agreement + LOGIN3, game LOGIN2, character list, DirectEnter reconnect, CHARACTER_SELECT, GC_MAIN_CHARACTER -> LoadData + CG_CLIENT_VERSION; no unknown packets)", "port.login_flow: pass"], "todo": ["2V2", "port the platform/pending units"]}
|
||||||
{"time": "2026-09-23T07:52:21Z", "event": "port_round", "unit": "PORT-PLAN 2V2-a: game.GameWindow opens after Loading, CG_ENTERGAME", "ported": [], "adapted": ["2V0 stub modules: 40250 constants (verbatim init lines, stub_constants.py) and zero return values shaped like each reference function's last Py_BuildValue"], "divergent": [], "fixed": ["UserInterface/StdAfx.h included GameType.h before Locale.h, dropping GameType.h's ENABLE_NEW_EQUIPMENT_SYSTEM branches; 40250 PCH order restored"], "needs_live": ["PHASE_GAME and the Entergame burst: GamePhase/SetGamePhase still stand-ins (2V2-b)"], "tests": ["port.login_flow: pass (fake server receives CG_ENTERGAME with the right sequence byte, GameWindow shown)", "port.login_live: pass against 192.168.21.203 (GameWindow shown)", "port.packet: pass"], "todo": ["2V2-b PhaseGame dispatch", "2V2-c PythonCharacterManager", "2V2-d InstanceBase/ActorInstance", "2V2-e render"]}
|
{"time": "2026-09-23T07:52:21Z", "event": "port_round", "unit": "PORT-PLAN 2V2-a: game.GameWindow opens after Loading, CG_ENTERGAME", "ported": [], "adapted": ["2V0 stub modules: 40250 constants (verbatim init lines, stub_constants.py) and zero return values shaped like each reference function's last Py_BuildValue"], "divergent": [], "fixed": ["UserInterface/StdAfx.h included GameType.h before Locale.h, dropping GameType.h's ENABLE_NEW_EQUIPMENT_SYSTEM branches; 40250 PCH order restored"], "needs_live": ["PHASE_GAME and the Entergame burst: GamePhase/SetGamePhase still stand-ins (2V2-b)"], "tests": ["port.login_flow: pass (fake server receives CG_ENTERGAME with the right sequence byte, GameWindow shown)", "port.login_live: pass against 192.168.21.203 (GameWindow shown)", "port.packet: pass"], "todo": ["2V2-b PhaseGame dispatch", "2V2-c PythonCharacterManager", "2V2-d InstanceBase/ActorInstance", "2V2-e render"]}
|
||||||
|
{"time": "2026-09-23T09:19:19Z", "event": "port_round", "unit": "PORT-PLAN 2V2-b: PhaseGame dispatch + Entergame burst", "ported": ["UserInterface/PythonNetworkStreamPhaseGame.cpp", "UserInterface/PythonNetworkStreamPhaseGameActor.cpp", "UserInterface/PythonNetworkStreamPhaseGameItem.cpp", "UserInterface/PythonNetworkStreamCommand.cpp", "UserInterface/NetworkActorManager.cpp", "UserInterface/PythonChat.cpp", "UserInterface/PythonChatModule.cpp"], "adapted": ["GameSingletons in PythonBoot (CPythonApplication member order, calloc storage) for units still behind platform/pending stand-ins", "platform_stub.py pending: stand-ins generated from undefined symbols", "PlatformStub const char* stand-ins return \"\"", "EterBase TraceErrorObserver test hook"], "divergent": [], "needs_live": ["CreateInstance of every actor fails on the SetRace placeholder (2V2-d)"], "tests": ["port.login_flow: pass (fake server sends the CInputLogin::Entergame order: ADD/ADDITIONAL_INFO/UPDATE, NPC_POSITION, PHASE_GAME, LAND_LIST, TIME, CHANNEL, CHAT notice, PING -> PONG; notice reaches CPythonChat; no Unknown packet header)", "port.login_live: pass against 192.168.21.203 (10 s of the real game phase, connected, no unknown packet)", "script/port_gate.sh macos: PASS"], "todo": ["2V2-c chrmgr/chr modules", "2V2-d SetRace/RaceData", "2V2-e render"]}
|
||||||
|
|||||||
@@ -0,0 +1,251 @@
|
|||||||
|
{
|
||||||
|
"reference": "GameLib/ActorInstance.cpp",
|
||||||
|
"reference_sha256": "29fa76807f3fbd3c066a3e9464540852a3f5879b4a4d3acc4287dbfa1a6356c3",
|
||||||
|
"priority": "P0",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"CActorInstance::INSTANCEBASE_Deform": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::INSTANCEBASE_Transform": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::OnUpdate": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::GetBackground": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetMainInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetParalysis": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetFaint": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetSleep": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetResistFallen": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetReachScale": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__GetReachScale": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__GetAttackSpeed": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__GetCurrentComboType": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetComboType": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetAttackSpeed": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetMoveSpeed": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetFishingPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::Move": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::Stop": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetOwner": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetActorType": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::GetActorType": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsHandMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsTwoHandMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsBowMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsPoly": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsPC": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsNPC": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsEnemy": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsStone": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsWarp": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsGoto": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsBuilding": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsDoor": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsObject": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::DestroySystem": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::DieEnd": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::Die": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsSleep": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsParalysis": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsFaint": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsResistFallen": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsMoving": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsWaiting": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsDead": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsKnockDown": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsDamage": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsAttacked": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::PhysicsProcess": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__AccumulationMovement": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::AccumulationMovement": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::TransformProcess": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::OnUpdateCollisionData": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::OnUpdateHeighInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::OnGetObjectHeight": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::Revive": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsStun": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::Stun": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetWalkMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetRunMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::GetNormalAttackIndex": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__InitializeMovement": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::AddMovement": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::AdjustDynamicCollisionMovement": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__AdjustCollisionMovement": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IsMovement": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::GetHeight": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::IntersectDefendingSphere": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__IsMountingHorse": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::MountHorse": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__CreateTree": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__DestroyTree": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__SetTreePosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::ClearAttachingEffect": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::Destroy": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__InitializeRotationData": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__InitializeStateData": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__InitializeMotionData": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__Initialize": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::CActorInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::~CActorInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"reference": "GameLib/ActorInstanceData.cpp",
|
||||||
|
"reference_sha256": "c8f4c28eeeac19e4d827d1c742477e46d2780acff230af49b74c668aac14a701",
|
||||||
|
"priority": "P1",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"CActorInstance::GetVirtualID": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetVirtualID": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::UpdateAttribute": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::__CreateAttributeInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::GetRace": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetRace": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetHair": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetShape": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::ChangeMaterial": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::GetPartItemID": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetSpecularInfo": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CActorInstance::SetSpecularInfoForce": {
|
||||||
|
"status": "TODO"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,152 @@
|
|||||||
|
{
|
||||||
|
"reference": "GameLib/RaceData.cpp",
|
||||||
|
"reference_sha256": "399a7690468dac633f649561e577a20bf6ce48979734e20dcb92b10c1f9f47ec",
|
||||||
|
"priority": "P1",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"CRaceData::GetSmokeBone": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetSmokeEffectID": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::FindHair": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::SetHairSkin": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::FindShape": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::SetShapeModel": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::AppendShapeSkin": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::New": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::Delete": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::CreateSystem": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::DestroySystem": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::CreateMotionModeIterator": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::NextMotionModeIterator": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetMotionKey": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetMotionModeDataPointer": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetModelDataPointer": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetMotionVectorPointer": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetMotionDataPointer": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetAttachingDataCount": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetAttachingDataPointer": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetCollisionDataPointer": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetBodyCollisionDataPointer": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::SetRace": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::RegisterAttachingBoneName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::RegisterMotionMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::NEW_RegisterMotion": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::RegisterMotionData": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::OLD_RegisterMotion": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::__OLD_RegisterMotion": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::SetMotionRandomWeight": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::RegisterNormalAttack": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetNormalAttackIndex": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::ReserveComboAttack": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::RegisterComboAttack": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetComboDataPointer": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetBaseModelFileName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetAttributeFileName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetMotionListFileName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetBaseModelThing": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetLODModelThing": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetAttributeDataPtr": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetAttachingBoneName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::IsTree": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::GetTreeFileName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::Destroy": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::__Initialize": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::CRaceData": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceData::~CRaceData": {
|
||||||
|
"status": "TODO"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"reference": "GameLib/RaceManager.cpp",
|
||||||
|
"reference_sha256": "52f446872e4619da00b4e1a1790c181aad0a5ef0dc48e7016d3fab3d53a81f2c",
|
||||||
|
"priority": "P4",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"__IsGuildRace": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"__IsNPCRace": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"__GetRaceResourcePathes": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::__LoadRaceData": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::__LoadRaceMotionList": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::RegisterRaceSrcName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::RegisterRaceName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::CreateRace": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::SelectRace": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::GetSelectedRaceDataPointer": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::GetRaceDataPointer": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::SetPathName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::GetFullPathFileName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::Create": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::__Initialize": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::__DestroyRaceDataMap": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::Destroy": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::CRaceManager": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CRaceManager::~CRaceManager": {
|
||||||
|
"status": "TODO"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,614 @@
|
|||||||
|
{
|
||||||
|
"reference": "UserInterface/InstanceBase.cpp",
|
||||||
|
"reference_sha256": "73af0fdd22f5fbe97605dbfbde5963cf4f87b84e08d93ec092b4de6f28cd3225",
|
||||||
|
"priority": "P0",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"IsWall": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::SHORSE": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::~SHORSE": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::__Initialize": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::SetAttackSpeed": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::SetMoveSpeed": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::Create": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::Destroy": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::GetActorRef": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::GetActorPtr": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::GetLevel": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::IsNewMount": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::CanUseSkill": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::CanAttack": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::IsMounting": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::Deform": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SHORSE::Render": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__AttachHorseSaddle": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__DetachHorseSaddle": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::BlockMovement": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsBlockObject": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::AvoidObject": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"__ArmorVnumToShape": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::LessRenderOrder": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__LessRenderOrder_GetLODLevel": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__Background_GetWaterHeight": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__Background_IsWaterPixelPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__IsInDustRange": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__EnableSkipCollision": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__DisableSkipCollision": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__GetShadowMapColor": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__GetBackgroundHeight": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsMovieMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsInvisibility": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsParalysis": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsGameMaster": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsSameEmpire": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetEmpireID": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetGuildID": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetAlignment": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetAlignmentGrade": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetAlignmentType": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetPKMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsKiller": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsPartyMember": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsInSafe": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::CalculateDistanceSq3d": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::OnSelected": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::OnUnselected": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::OnTargeted": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::OnUntargeted": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::DestroySystem": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::CreateSystem": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::New": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::Delete": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetMainInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__GetMainInstancePtr": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__ClearMainInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__IsMainInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__IsExistMainInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__MainCanSeeHiddenThing": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__GetBowRange": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__FindInstancePtr": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__FindRaceType": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::Create": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__Create_SetName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__Create_SetWarpName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetNameString": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetRace": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__IsChangableWeapon": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsWearingDress": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsHoldingPickAxe": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsNewMount": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsMountingHorse": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::MountHorse": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::DismountHorse": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetInfo": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::ResetPerformanceCounter": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_IsLastPixelPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_GetLastPixelPositionRef": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_SetDstPixelPositionZ": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_SetDstPixelPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_SetSrcPixelPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_GetCurPixelPositionRef": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_GetDstPixelPositionRef": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_GetSrcPixelPositionRef": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::OnSyncing": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::OnWaiting": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::OnMoving": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::ChangeGuild": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetPart": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetShape": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::CanAct": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::CanMove": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::CanUseSkill": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::CanAttack": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::CanFishing": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsBowMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsHandMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsFishingMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsFishing": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsDead": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsStun": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsSleep": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__IsSyncing": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_SetOwner": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetLocalTime": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::PushUDPState": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::PushTCPStateExpanded": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::PushTCPState": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__CanProcessNetworkStatePacket": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__IsEnableTCPProcess": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::StateProcess": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::MovementProcess": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__ProcessFunctionEmotion": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::Update": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::Transform": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::Deform": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::RenderTrace": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::Render": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::RenderToShadowMap": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::RenderCollision": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetVirtualID": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetVirtualNumber": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetInstanceType": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetAlignment": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetPKMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetKiller": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetPartyMemberFlag": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetStateFlags": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetComboType": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetNameString": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetRace": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsConflictAlignmentInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetDuelMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetDuelMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsAttackableInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsTargetableInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::CanChangeTarget": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::CanPickInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::CanViewTargetHP": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsPoly": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsPC": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsNPC": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsEnemy": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsStone": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsGuildWall": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsResource": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsWarp": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsGoto": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsObject": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsBuilding": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsDoor": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsWoodenDoor": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsStoneDoor": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsFlag": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsForceVisible": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetInstanceType": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetVirtualID": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetVirtualNumber": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__IsInViewFrustum": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__CanRender": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IntersectBoundingBox": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IntersectDefendingSphere": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetDistance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetGraphicThingInstanceRef": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetGraphicThingInstancePtr": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::RefreshActorInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::Refresh": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::RestoreRenderMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetAddRenderMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetModulateRenderMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetRenderMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetAddColor": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__SetBlendRenderingMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__SetAlphaValue": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__GetAlphaValue": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetHair": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::ChangeHair": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetArmor": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetShape": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetWeaponType": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__ClearWeaponRefineEffect": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__ClearArmorRefineEffect": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__GetRefinedEffect": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetWeapon": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::ChangeWeapon": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::ChangeArmor": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__IsShapeAnimalWear": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__GetRaceType": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::RefreshState": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::RegisterBoundingSphere": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::CreateDeviceObjects": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::DestroyDeviceObjects": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::Destroy": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__InitializeRotationSpeed": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__Warrior_Initialize": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::__Initialize": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::CInstanceBase": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::~CInstanceBase": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::GetBoundBox": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetLevel": {
|
||||||
|
"status": "TODO"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
{
|
||||||
|
"reference": "UserInterface/InstanceBaseMovement.cpp",
|
||||||
|
"reference_sha256": "a03e67fda21299c75810eb108e05ff2b76d630bcbf00c4fac3d8605274d6af17",
|
||||||
|
"priority": "P0",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"CInstanceBase::SetAttackSpeed": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetMoveSpeed": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetRotationSpeed": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_Stop": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_SyncPixelPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_CanMoveToDestPixelPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase_GetDegreeFromPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_GetAdvancingRotationFromDirPixelPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_GetAdvancingRotationFromDestPixelPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_GetAdvancingRotationFromPixelPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_SetAdvancingRotationFromDirPixelPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_SetAdvancingRotationFromPixelPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_SetAdvancingRotationFromDestPixelPosition": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetAdvancingRotation": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::StartWalking": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::EndWalking": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::EndWalkingWithoutBlending": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsWaiting": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsWalking": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsPushing": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsAttacked": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsKnockDown": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsAttacking": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsActingEmotion": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::IsGoing": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_MoveToDestInstanceDirection": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_MoveToDestPixelPositionDirection": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_Goto": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::NEW_MoveToDirection": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::EndGoing": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetRunMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CInstanceBase::SetWalkMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,176 @@
|
|||||||
|
{
|
||||||
|
"reference": "UserInterface/NetworkActorManager.cpp",
|
||||||
|
"reference_sha256": "432b35aaad8b9194b7724596de37d1989af015b7d86896dfd69f3e287179e7fd",
|
||||||
|
"priority": "P4",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"SNetworkActorData::UpdatePosition": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:SNetworkActorData::UpdatePosition"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"SNetworkActorData::SetDstPosition": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:SNetworkActorData::SetDstPosition"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"SNetworkActorData::SetPosition": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:SNetworkActorData::SetPosition"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"SNetworkActorData::SNetworkActorData": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:SNetworkActorData::SNetworkActorData"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"SNetworkActorData::__copy__": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:SNetworkActorData::__copy__"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::CNetworkActorManager": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::CNetworkActorManager"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::~CNetworkActorManager": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::~CNetworkActorManager"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::Destroy": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::Destroy"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::SetMainActorVID": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::SetMainActorVID"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::Update": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::Update"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::__OLD_Update": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::__OLD_Update"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::__FindActor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::__FindActor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::__RemoveAllGroundItems": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::__RemoveAllGroundItems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::__RemoveAllActors": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::__RemoveAllActors"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::__RemoveDynamicActors": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::__RemoveDynamicActors"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::__UpdateMainActor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::__UpdateMainActor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::__IsVisibleActor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::__IsVisibleActor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::__IsVisiblePos": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::__IsVisiblePos"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::__IsMainActorVID": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::__IsMainActorVID"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::__GetCharacterManager": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::__GetCharacterManager"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::__RemoveCharacterManagerActor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::__RemoveCharacterManagerActor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::__AppendCharacterManagerActor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::__AppendCharacterManagerActor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::AppendActor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::AppendActor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::RemoveActor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::RemoveActor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::UpdateActor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::UpdateActor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::MoveActor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::MoveActor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::SyncActor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::SyncActor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CNetworkActorManager::SetActorOwner": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/NetworkActorManager.cpp:CNetworkActorManager::SetActorOwner"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,170 @@
|
|||||||
|
{
|
||||||
|
"reference": "UserInterface/PythonCharacterManager.cpp",
|
||||||
|
"reference_sha256": "040f89aab5ec5f07f11ec290bdacda47c46f2fe7f584ec0e5be312060c29f9a7",
|
||||||
|
"priority": "P0",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"CPythonCharacterManager::AdjustCollisionWithOtherObjects": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::EnableSortRendering": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::InsertPVPKey": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::RemovePVPKey": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::ChangeGVG": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::ClearMainInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::SetMainInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::GetMainInstancePtr": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::GetInfo": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::IsCacheMode": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::Update": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::ShowPointEffect": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::RegisterPointEffect": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::UpdateTransform": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::UpdateDeleting": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::Deform": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::OLD_GetPickedInstanceVID": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::OLD_GetPickedInstancePtr": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::OLD_GetPickedInstPosReference": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::IsRegisteredVID": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::IsAliveVID": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::IsDeadVID": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::__RenderSortedAliveActorList": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::__RenderSortedDeadActorList": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::Render": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::RenderShadowMainInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::RenderShadowAllInstances": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::RenderCollision": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::CreateInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::RegisterInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::DeleteInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::__DeleteBlendOutInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::DeleteInstanceByFade": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::SelectInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::GetInstancePtr": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::GetInstancePtrByName": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::GetSelectedInstancePtr": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::FindClickableInstancePtr": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::__UpdateSortPickedActorList": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::__UpdatePickedActorList": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::__SortPickedActorList": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::__NEW_Pick": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::__OLD_Pick": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::PickAll": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::GetCloseInstance": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::RefreshAllPCTextTail": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::RefreshAllGuildMark": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::DeleteAllInstances": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::DestroyAliveInstanceMap": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::DestroyDeadInstanceList": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::Destroy": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::__Initialize": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::CPythonCharacterManager": {
|
||||||
|
"status": "TODO"
|
||||||
|
},
|
||||||
|
"CPythonCharacterManager::~CPythonCharacterManager": {
|
||||||
|
"status": "TODO"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,374 @@
|
|||||||
|
{
|
||||||
|
"reference": "UserInterface/PythonChat.cpp",
|
||||||
|
"reference_sha256": "9b1d9f153604adfb5e42a8e9fa191e202feee87987e262bc8a2f8dc00bf5b7e7",
|
||||||
|
"priority": "P3",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"CPythonChat::SetChatColor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SetChatColor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SChatLine::New": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SChatLine::New"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SChatLine::Delete": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SChatLine::Delete"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SChatLine::DestroySystem": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SChatLine::DestroySystem"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SChatLine::SetColor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SChatLine::SetColor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SChatLine::SetColorAll": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SChatLine::SetColorAll"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SChatLine::GetColorRef": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SChatLine::GetColorRef"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SChatLine::SChatLine": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SChatLine::SChatLine"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SChatLine::~SChatLine": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SChatLine::~SChatLine"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::CreateChatSet": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::CreateChatSet"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::UpdateViewMode": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::UpdateViewMode"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::UpdateEditMode": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::UpdateEditMode"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::UpdateLogMode": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::UpdateLogMode"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::Update": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::Update"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::Render": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::Render"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SetBoardState": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SetBoardState"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SetPosition": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SetPosition"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SetHeight": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SetHeight"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SetStep": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SetStep"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::ToggleChatMode": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::ToggleChatMode"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::EnableChatMode": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::EnableChatMode"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::DisableChatMode": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::DisableChatMode"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::SetEndPos": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::SetEndPos"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::GetVisibleLineCount": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::GetVisibleLineCount"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::GetEditableLineCount": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::GetEditableLineCount"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::GetLineCount": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::GetLineCount"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::GetLineStep": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::GetLineStep"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::GetChatLineListPtr": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::GetChatLineListPtr"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::GetChatSetPtr": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::GetChatSetPtr"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::ArrangeShowingChat": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::ArrangeShowingChat"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::AppendChat": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::AppendChat"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::AppendChatWithDelay": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::AppendChatWithDelay"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::GetChatColor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::GetChatColor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::IgnoreCharacter": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::IgnoreCharacter"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::IsIgnoreCharacter": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::IsIgnoreCharacter"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::CreateWhisper": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::CreateWhisper"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::AppendWhisper": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::AppendWhisper"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::ClearWhisper": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::ClearWhisper"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::GetWhisper": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::GetWhisper"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::InitWhisper": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::InitWhisper"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::__DestroyWhisperMap": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::__DestroyWhisperMap"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::Close": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::Close"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::Destroy": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::Destroy"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::__Initialize": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::__Initialize"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::CPythonChat": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::CPythonChat"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonChat::~CPythonChat": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CPythonChat::~CPythonChat"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::New": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::New"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::Delete": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::Delete"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::DestroySystem": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::DestroySystem"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::SetPosition": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::SetPosition"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::SetBoxSize": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::SetBoxSize"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::AppendChat": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::AppendChat"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::__ArrangeChat": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::__ArrangeChat"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::Render": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::Render"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::__Initialize": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::__Initialize"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::Destroy": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::Destroy"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::CWhisper": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::CWhisper"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::~CWhisper": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::~CWhisper"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::SChatLine::New": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::SChatLine::New"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::SChatLine::Delete": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::SChatLine::Delete"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CWhisper::SChatLine::DestroySystem": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChat.cpp:CWhisper::SChatLine::DestroySystem"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,194 @@
|
|||||||
|
{
|
||||||
|
"reference": "UserInterface/PythonChatModule.cpp",
|
||||||
|
"reference_sha256": "e8072051ae8777a6f85afe1b322c30488e274c15d7d69c78b8779581154710db",
|
||||||
|
"priority": "P3",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"chatSetChatColor": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatSetChatColor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatClear": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatClear"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatClose": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatClose"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatCreateChatSet": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatCreateChatSet"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatUpdate": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatUpdate"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatRender": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatRender"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatSetBoardState": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatSetBoardState"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatSetPosition": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatSetPosition"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatSetHeight": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatSetHeight"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatSetStep": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatSetStep"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatToggleChatMode": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatToggleChatMode"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatEnableChatMode": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatEnableChatMode"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatDisableChatMode": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatDisableChatMode"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatSetEndPos": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatSetEndPos"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatGetLineCount": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatGetLineCount"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatGetVisibleLineCount": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatGetVisibleLineCount"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatGetLineStep": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatGetLineStep"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatAppendChat": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatAppendChat"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatAppendChatWithDelay": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatAppendChatWithDelay"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatArrangeShowingChat": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatArrangeShowingChat"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatIgnoreCharacter": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatIgnoreCharacter"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatIsIgnoreCharacter": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatIsIgnoreCharacter"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatCreateWhisper": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatCreateWhisper"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatAppendWhisper": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatAppendWhisper"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatRenderWhisper": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatRenderWhisper"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatSetWhisperBoxSize": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatSetWhisperBoxSize"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatSetWhisperPosition": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatSetWhisperPosition"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatClearWhisper": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatClearWhisper"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatInitWhisper": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatInitWhisper"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chatGetLinkFromHyperlink": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:chatGetLinkFromHyperlink"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"initChat": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonChatModule.cpp:initChat"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"reference": "UserInterface/PythonNetworkStreamCommand.cpp",
|
||||||
|
"reference_sha256": "08d9a36866b03ec7a04b4d34d4176d2137c88b7767f5d6b22778cd7bf7529023",
|
||||||
|
"priority": "P2",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"SkipSpaces": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamCommand.cpp:SkipSpaces"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"OneArgument": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamCommand.cpp:OneArgument"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"AppendMonsterList": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamCommand.cpp:AppendMonsterList"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::ClientCommand": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamCommand.cpp:CPythonNetworkStream::ClientCommand"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"SplitToken": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamCommand.cpp:SplitToken"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::ServerCommand": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamCommand.cpp:CPythonNetworkStream::ServerCommand"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,932 @@
|
|||||||
|
{
|
||||||
|
"reference": "UserInterface/PythonNetworkStreamPhaseGame.cpp",
|
||||||
|
"reference_sha256": "85eafb922a2b297bd9434ef953c097a07ecb13c8ed137795cf974882766ce00c",
|
||||||
|
"priority": "P2",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"CPythonNetworkStream::__RefreshAlignmentWindow": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshAlignmentWindow"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshTargetBoardByVID": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshTargetBoardByVID"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshTargetBoardByName": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshTargetBoardByName"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshTargetBoard": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshTargetBoard"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshGuildWindowGradePage": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshGuildWindowGradePage"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshGuildWindowSkillPage": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshGuildWindowSkillPage"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshGuildWindowMemberPageGradeComboBox": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshGuildWindowMemberPageGradeComboBox"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshGuildWindowMemberPage": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshGuildWindowMemberPage"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshGuildWindowBoardPage": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshGuildWindowBoardPage"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshGuildWindowInfoPage": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshGuildWindowInfoPage"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshMessengerWindow": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshMessengerWindow"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshSafeboxWindow": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshSafeboxWindow"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshMallWindow": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshMallWindow"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshSkillWindow": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshSkillWindow"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshExchangeWindow": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshExchangeWindow"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshStatus": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshStatus"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshCharacterWindow": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshCharacterWindow"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshInventoryWindow": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshInventoryWindow"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RefreshEquipmentWindow": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__RefreshEquipmentWindow"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__SetGuildID": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__SetGuildID"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::GamePhase": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::GamePhase"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__InitializeGamePhase": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__InitializeGamePhase"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::Warp": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::Warp"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__ShowMapName": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__ShowMapName"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__LeaveGamePhase": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__LeaveGamePhase"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SetGamePhase": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SetGamePhase"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvObserverAddPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvObserverAddPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvObserverRemovePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvObserverRemovePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvObserverMovePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvObserverMovePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvWarpPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvWarpPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvDuelStartPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvDuelStartPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvPVPPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvPVPPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::NotifyHack": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::NotifyHack"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__SendHack": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__SendHack"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendMessengerAddByVIDPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendMessengerAddByVIDPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendMessengerAddByNamePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendMessengerAddByNamePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendMessengerRemovePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendMessengerRemovePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendCharacterStatePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendCharacterStatePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendUseSkillPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendUseSkillPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendChatPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendChatPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RegisterEmoticonString": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RegisterEmoticonString"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::ParseEmoticon": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::ParseEmoticon"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__ConvertEmpireText": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__ConvertEmpireText"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvChatPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvChatPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvWhisperPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvWhisperPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendWhisperPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendWhisperPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendMobileMessagePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendMobileMessagePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvPointChange": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvPointChange"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvStunPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvStunPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvDeadPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvDeadPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendCharacterPositionPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendCharacterPositionPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendOnClickPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendOnClickPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvCharacterPositionPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvCharacterPositionPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvMotionPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvMotionPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvShopPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvShopPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvExchangePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvExchangePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvQuestInfoPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvQuestInfoPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvQuestConfirmPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvQuestConfirmPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvRequestMakeGuild": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvRequestMakeGuild"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::ToggleGameDebugInfo": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::ToggleGameDebugInfo"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendExchangeStartPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendExchangeStartPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendExchangeElkAddPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendExchangeElkAddPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendExchangeItemAddPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendExchangeItemAddPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendExchangeItemDelPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendExchangeItemDelPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendExchangeAcceptPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendExchangeAcceptPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendExchangeExitPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendExchangeExitPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendPointResetPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendPointResetPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__IsPlayerAttacking": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__IsPlayerAttacking"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvScriptPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvScriptPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendScriptAnswerPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendScriptAnswerPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendScriptButtonPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendScriptButtonPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendAnswerMakeGuildPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendAnswerMakeGuildPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendQuestInputStringPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendQuestInputStringPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendQuestConfirmPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendQuestConfirmPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvSkillCoolTimeEnd": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvSkillCoolTimeEnd"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvSkillLevel": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvSkillLevel"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvSkillLevelNew": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvSkillLevelNew"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvDamageInfoPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvDamageInfoPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvTargetPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvTargetPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvMountPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvMountPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvChangeSpeedPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvChangeSpeedPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendAttackPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendAttackPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendSpecial": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendSpecial"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvAddFlyTargetingPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvAddFlyTargetingPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvFlyTargetingPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvFlyTargetingPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendShootPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendShootPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendAddFlyTargetingPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendAddFlyTargetingPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendFlyTargetingPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendFlyTargetingPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvCreateFlyPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvCreateFlyPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendTargetPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendTargetPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendSyncPositionElementPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendSyncPositionElementPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvMessenger": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvMessenger"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendPartyInvitePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendPartyInvitePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendPartyInviteAnswerPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendPartyInviteAnswerPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendPartyRemovePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendPartyRemovePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendPartySetStatePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendPartySetStatePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendPartyUseSkillPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendPartyUseSkillPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendPartyParameterPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendPartyParameterPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvPartyInvite": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvPartyInvite"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvPartyAdd": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvPartyAdd"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvPartyUpdate": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvPartyUpdate"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvPartyRemove": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvPartyRemove"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvPartyLink": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvPartyLink"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvPartyUnlink": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvPartyUnlink"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvPartyParameter": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvPartyParameter"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildAddMemberPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildAddMemberPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildRemoveMemberPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildRemoveMemberPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildChangeGradeNamePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildChangeGradeNamePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildChangeGradeAuthorityPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildChangeGradeAuthorityPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildOfferPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildOfferPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildPostCommentPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildPostCommentPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildDeleteCommentPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildDeleteCommentPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildRefreshCommentsPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildRefreshCommentsPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildChangeMemberGradePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildChangeMemberGradePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildUseSkillPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildUseSkillPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildChangeMemberGeneralPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildChangeMemberGeneralPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildInviteAnswerPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildInviteAnswerPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildChargeGSPPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildChargeGSPPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildDepositMoneyPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildDepositMoneyPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGuildWithdrawMoneyPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGuildWithdrawMoneyPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvGuild": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvGuild"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendFishingPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendFishingPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendGiveItemPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendGiveItemPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvFishing": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvFishing"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvDungeon": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvDungeon"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendBuildPrivateShopPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendBuildPrivateShopPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvShopSignPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvShopSignPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvTimePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvTimePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvWalkModePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvWalkModePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvChangeSkillGroupPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvChangeSkillGroupPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__TEST_SetSkillGroupFake": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__TEST_SetSkillGroupFake"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendRefinePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendRefinePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendSelectItemPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendSelectItemPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvRefineInformationPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvRefineInformationPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvRefineInformationPacketNew": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvRefineInformationPacketNew"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvNPCList": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvNPCList"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__SendCRCReportPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::__SendCRCReportPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendClientVersionPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendClientVersionPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvAffectAddPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvAffectAddPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvAffectRemovePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvAffectRemovePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvChannelPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvChannelPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvViewEquipPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvViewEquipPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvLandPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvLandPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvTargetCreatePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvTargetCreatePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvTargetCreatePacketNew": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvTargetCreatePacketNew"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvTargetUpdatePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvTargetUpdatePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvTargetDeletePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvTargetDeletePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvLoverInfoPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvLoverInfoPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvLovePointUpdatePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvLovePointUpdatePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvDigMotionPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::RecvDigMotionPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendDragonSoulRefinePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::SendDragonSoulRefinePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::Discord_Start": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::Discord_Start"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::Discord_Update": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::Discord_Update"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::Discord_Close": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGame.cpp:CPythonNetworkStream::Discord_Close"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
{
|
||||||
|
"reference": "UserInterface/PythonNetworkStreamPhaseGameActor.cpp",
|
||||||
|
"reference_sha256": "b62fd266ef028167d4901469eaaa1c9119d993b67aa45c27527270d3ba9a5b0d",
|
||||||
|
"priority": "P2",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"CPythonNetworkStream::__GlobalPositionToLocalPosition": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::__GlobalPositionToLocalPosition"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__LocalPositionToGlobalPosition": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::__LocalPositionToGlobalPosition"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__CanActMainInstance": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::__CanActMainInstance"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__ClearNetworkActorManager": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::__ClearNetworkActorManager"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"__SetWeaponPower": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:__SetWeaponPower"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"IsInvisibleRace": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:IsInvisibleRace"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvCharacterAppendPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::RecvCharacterAppendPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvCharacterAdditionalInfo": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::RecvCharacterAdditionalInfo"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvCharacterAppendPacketNew": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::RecvCharacterAppendPacketNew"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvCharacterUpdatePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::RecvCharacterUpdatePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvCharacterUpdatePacketNew": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::RecvCharacterUpdatePacketNew"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RecvCharacterAppendPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::__RecvCharacterAppendPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__RecvCharacterUpdatePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::__RecvCharacterUpdatePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvCharacterDeletePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::RecvCharacterDeletePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvCharacterMovePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::RecvCharacterMovePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvOwnerShipPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::RecvOwnerShipPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvSyncPositionPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameActor.cpp:CPythonNetworkStream::RecvSyncPositionPacket"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,272 @@
|
|||||||
|
{
|
||||||
|
"reference": "UserInterface/PythonNetworkStreamPhaseGameItem.cpp",
|
||||||
|
"reference_sha256": "eea34b48af0e7e1b1340ca6e72f708882b3db108b2f80c82842a9cc67f2348a2",
|
||||||
|
"priority": "P2",
|
||||||
|
"contracts": [],
|
||||||
|
"functions": {
|
||||||
|
"CPythonNetworkStream::SendSafeBoxMoneyPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendSafeBoxMoneyPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendSafeBoxCheckinPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendSafeBoxCheckinPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendSafeBoxCheckoutPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendSafeBoxCheckoutPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendSafeBoxItemMovePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendSafeBoxItemMovePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvSafeBoxSetPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvSafeBoxSetPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvSafeBoxDelPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvSafeBoxDelPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvSafeBoxWrongPasswordPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvSafeBoxWrongPasswordPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvSafeBoxSizePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvSafeBoxSizePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvSafeBoxMoneyChangePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvSafeBoxMoneyChangePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendMallCheckoutPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendMallCheckoutPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvMallOpenPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvMallOpenPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvMallItemSetPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvMallItemSetPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvMallItemDelPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvMallItemDelPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvItemSetPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvItemSetPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvItemSetPacket2": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvItemSetPacket2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvItemUsePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvItemUsePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvItemUpdatePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvItemUpdatePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvItemGroundAddPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvItemGroundAddPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvItemOwnership": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvItemOwnership"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvItemGroundDelPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvItemGroundDelPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvQuickSlotAddPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvQuickSlotAddPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvQuickSlotDelPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvQuickSlotDelPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvQuickSlotMovePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvQuickSlotMovePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendShopEndPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendShopEndPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendShopBuyPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendShopBuyPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendShopSellPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendShopSellPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendShopSellPacketNew": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendShopSellPacketNew"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendItemUsePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendItemUsePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendItemUseToItemPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendItemUseToItemPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendItemDropPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendItemDropPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendItemDropPacketNew": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendItemDropPacketNew"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__IsEquipItemInSlot": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::__IsEquipItemInSlot"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__PlayInventoryItemUseSound": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::__PlayInventoryItemUseSound"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__PlayInventoryItemDropSound": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::__PlayInventoryItemDropSound"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__PlaySafeBoxItemDropSound": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::__PlaySafeBoxItemDropSound"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::__PlayMallItemDropSound": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::__PlayMallItemDropSound"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendItemMovePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendItemMovePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendItemPickUpPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendItemPickUpPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendQuickSlotAddPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendQuickSlotAddPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendQuickSlotDelPacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendQuickSlotDelPacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::SendQuickSlotMovePacket": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::SendQuickSlotMovePacket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvSpecialEffect": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvSpecialEffect"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvSpecificEffect": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvSpecificEffect"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CPythonNetworkStream::RecvDragonSoulRefine": {
|
||||||
|
"status": "PORTED",
|
||||||
|
"impl": [
|
||||||
|
"extension/src/port/UserInterface/PythonNetworkStreamPhaseGameItem.cpp:CPythonNetworkStream::RecvDragonSoulRefine"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-3
@@ -420,9 +420,9 @@ extension/third_party/cpython-2.7.18/ # 静态库(2P 批次
|
|||||||
| 子步骤 | 内容 | 状态 |
|
| 子步骤 | 内容 | 状态 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| 2V2-a | Loading 结束后打开 `game.GameWindow`,发 `CG_ENTERGAME` | 完成:2V0 桩模块的常量与返回值形状改为按 40250 生成(`scripts/stub_constants.py`:常量逐行抄各模块 init 的 `PyModule_Add*Constant` 及其预处理行/枚举/`extern const` 定义,写到 `platform/ScriptLib/GameplayModuleConstants.cpp`;桩函数返回参考函数最后一个 `return` 的 `Py_BuildValue` 格式的零值或 None,而不是一律 `int 0`),`uiSafebox.SetTableSize` 的除零和 `uiTaskBar` 解包失败随之消失,`interfaceModule.MakeInterface` 走完。修正:`UserInterface/StdAfx.h` 按 40250 PCH 顺序先 `Locale.h` 后 `GameType.h`(之前反了,`GameType.h` 里 `ENABLE_NEW_EQUIPMENT_SYSTEM` 分支全被丢掉)。`port.login_flow` 假服在 `CG_CLIENT_VERSION` 后收 `CG_ENTERGAME`(校验序列字节),测试等到 `GameWindow` 显示;`port.login_live` 2026-09-23 对 192.168.21.203 同样走到 `GameWindow`。`GamePhase`/`SetGamePhase` 仍是替身:服务器的 PHASE_GAME 及 Loading 阶段落到 `GamePhase()` 的包会卡住读流 |
|
| 2V2-a | Loading 结束后打开 `game.GameWindow`,发 `CG_ENTERGAME` | 完成:2V0 桩模块的常量与返回值形状改为按 40250 生成(`scripts/stub_constants.py`:常量逐行抄各模块 init 的 `PyModule_Add*Constant` 及其预处理行/枚举/`extern const` 定义,写到 `platform/ScriptLib/GameplayModuleConstants.cpp`;桩函数返回参考函数最后一个 `return` 的 `Py_BuildValue` 格式的零值或 None,而不是一律 `int 0`),`uiSafebox.SetTableSize` 的除零和 `uiTaskBar` 解包失败随之消失,`interfaceModule.MakeInterface` 走完。修正:`UserInterface/StdAfx.h` 按 40250 PCH 顺序先 `Locale.h` 后 `GameType.h`(之前反了,`GameType.h` 里 `ENABLE_NEW_EQUIPMENT_SYSTEM` 分支全被丢掉)。`port.login_flow` 假服在 `CG_CLIENT_VERSION` 后收 `CG_ENTERGAME`(校验序列字节),测试等到 `GameWindow` 显示;`port.login_live` 2026-09-23 对 192.168.21.203 同样走到 `GameWindow`。`GamePhase`/`SetGamePhase` 仍是替身:服务器的 PHASE_GAME 及 Loading 阶段落到 `GamePhase()` 的包会卡住读流 |
|
||||||
| 2V2-b | `PythonNetworkStreamPhaseGame*.cpp` 分派闭包:`SetGamePhase`/`GamePhase`,PHASE_GAME 后的 Entergame 包洪流(`GC_TIME`/`GC_CHANNEL`/`GC_CHARACTER_ADD`/`GC_CHAR_ADDITIONAL_INFO`/`GC_CHARACTER_UPDATE`/技能/物品/快捷栏…)读流不断 | TODO |
|
| 2V2-b | `PythonNetworkStreamPhaseGame*.cpp` 分派闭包:`SetGamePhase`/`GamePhase`,PHASE_GAME 后的 Entergame 包洪流(`GC_TIME`/`GC_CHANNEL`/`GC_CHARACTER_ADD`/`GC_CHAR_ADDITIONAL_INFO`/`GC_CHARACTER_UPDATE`/技能/物品/快捷栏…)读流不断 | 完成:`PythonNetworkStreamPhaseGame`/`PhaseGameActor`/`PhaseGameItem`/`Command`、`NetworkActorManager` 原样移植并在运行时分派(port-map 标 PORTED);`GC_CHAT` 需要的 `PythonChat.cpp`/`PythonChatModule.cpp` 一并原样移植,`GameplayModules.cpp` 的 `chat` 桩删除,`initChat()` 按 40250 顺序在 `initnet()` 前调用。未移植单元的单例在 `PythonBoot` 的 `GameSingletons` 里按 `CPythonApplication` 成员顺序创建(calloc 存储:替身构造函数不初始化标量);替身由 `platform_stub.py pending <header> <符号...> [--ctor]` 按链接缺失符号生成到 `platform/pending/<Lib>/`,返回 `const char*` 的替身返回 `""`(`RecvGuild` 里 `strcmp(…, CPythonPlayer::GetName())`)。`port.login_flow` 假服按 `CInputLogin::Entergame` 顺序发:Loading 阶段 `CHARACTER_ADD`+`CHAR_ADDITIONAL_INFO`+`CHARACTER_UPDATE`、`NPC_POSITION` → `PHASE_GAME` → `LAND_LIST`、`TIME`、`CHANNEL`、问候 `CHAT` → `PING`,客户端回 `PONG`,公告进 `CPythonChat`,`TraceError` 观察钩子(`EterBase/TraceErrorObserver.h`)断言无 `Unknown packet header`。`port.login_live` 2026-09-23 对 192.168.21.203 读 10 s 真实游戏阶段:连接保持、GameWindow 显示、无未知包;剩下的 SYSERR 只有 `CreateInstance` 失败(2V2-d 的 `SetRace` 占位) |
|
||||||
| 2V2-c | `PythonCharacterManager` + `chrmgr`/`chr` 模块:`playerSettingModule` 的种族/动作/特效注册走真实实现 | TODO |
|
| 2V2-c | `PythonCharacterManager` + `chrmgr`/`chr` 模块:`playerSettingModule` 的种族/动作/特效注册走真实实现 | 进行中:PythonCharacterManager 原版逻辑已编译;`chrmgr`/`chr` 仍是 2V0 桩,注册链未接通 |
|
||||||
| 2V2-d | `InstanceBase` + `ActorInstance` + `CGraphicThingInstance` adapter:`GC_CHARACTER_ADD` 创建主角实例(msm 模型 + 待机动作) | TODO |
|
| 2V2-d | `InstanceBase` + `ActorInstance` + `CGraphicThingInstance` adapter:`GC_CHARACTER_ADD` 创建主角实例(msm 模型 + 待机动作) | 进行中:InstanceBase、InstanceBaseMovement、ActorInstance 已编译;ActorInstanceData/RaceManager/RaceData 已照抄但未接通。主角创建测试明确失败于尚为占位的 `CActorInstance::SetRace`,继续接通仍需 RaceDataFile、RaceMotionData、AttributeInstance、角色注册和模型 adapter |
|
||||||
| 2V2-e | Godot 显示主角(渲染 adapter),离线 + 真服 smoke:进游戏看到可辨认的静止角色 | TODO |
|
| 2V2-e | Godot 显示主角(渲染 adapter),离线 + 真服 smoke:进游戏看到可辨认的静止角色 | TODO |
|
||||||
4. **2V3 — 本地移动**:加入 `PythonPlayer`、`PythonPlayerInput*`、`PythonPlayerEventHandler`、
|
4. **2V3 — 本地移动**:加入 `PythonPlayer`、`PythonPlayerInput*`、`PythonPlayerEventHandler`、
|
||||||
`InstanceBaseMovement`、`ActorInstance{Motion,Event,Position,Rotation,CollisionDetection}` 的实际依赖闭包。验收为输入经过新路径
|
`InstanceBaseMovement`、`ActorInstance{Motion,Event,Position,Rotation,CollisionDetection}` 的实际依赖闭包。验收为输入经过新路径
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "../PlatformStub.h"
|
#include "../PlatformStub.h"
|
||||||
#include "EterBase/Timer.h"
|
#include "EterBase/Timer.h"
|
||||||
#include "LogBox.h"
|
#include "LogBox.h"
|
||||||
|
#include "TraceErrorObserver.h"
|
||||||
|
|
||||||
#include <cstdarg>
|
#include <cstdarg>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
@@ -15,6 +16,16 @@
|
|||||||
|
|
||||||
const DWORD DEBUG_STRING_MAX_LEN = 1024;
|
const DWORD DEBUG_STRING_MAX_LEN = 1024;
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
TraceErrorObserver g_trace_error_observer = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetTraceErrorObserver(TraceErrorObserver observer)
|
||||||
|
{
|
||||||
|
g_trace_error_observer = observer;
|
||||||
|
}
|
||||||
|
|
||||||
auto SetLogLevel(UINT) -> void
|
auto SetLogLevel(UINT) -> void
|
||||||
{
|
{
|
||||||
MT_PLATFORM_STUB();
|
MT_PLATFORM_STUB();
|
||||||
@@ -91,6 +102,8 @@ void TraceError(const char* c_szFormat, ...)
|
|||||||
ELTimer_GetMSec() % 60000,
|
ELTimer_GetMSec() % 60000,
|
||||||
szBuf + 8);
|
szBuf + 8);
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
|
if (g_trace_error_observer)
|
||||||
|
g_trace_error_observer(szBuf + 8);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
// Test hook: sees every TraceError line (without the "SYSERR: " prefix) after it is written to stderr.
|
||||||
|
// The 40250 client only writes these to syserr.txt; tests use it to fail on, e.g., the stream's
|
||||||
|
// "Unknown packet header" (CPythonNetworkStream::CheckPacket), which otherwise only clears the buffer.
|
||||||
|
|
||||||
|
using TraceErrorObserver = void (*)(const char* line);
|
||||||
|
|
||||||
|
void SetTraceErrorObserver(TraceErrorObserver observer);
|
||||||
@@ -35,6 +35,12 @@ T mt_platform_stub_return()
|
|||||||
return static_cast<T>(*reinterpret_cast<U*>(storage));
|
return static_cast<T>(*reinterpret_cast<U*>(storage));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if constexpr (std::is_same_v<T, const char*>)
|
||||||
|
{
|
||||||
|
// Callers strcmp/strlen/format the names these return (CPythonPlayer::GetName in RecvGuild); a
|
||||||
|
// null string would crash where the real function never returns one.
|
||||||
|
return "";
|
||||||
|
}
|
||||||
else if constexpr (std::is_default_constructible_v<T>)
|
else if constexpr (std::is_default_constructible_v<T>)
|
||||||
{
|
{
|
||||||
return T{};
|
return T{};
|
||||||
|
|||||||
@@ -75,28 +75,6 @@ void AddStubConstants_background(PyObject* poModule)
|
|||||||
PyModule_AddIntConstant(poModule, "TEXTURE_SORT", CMapOutdoor::TEXTURE_SORT);
|
PyModule_AddIntConstant(poModule, "TEXTURE_SORT", CMapOutdoor::TEXTURE_SORT);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 40250 UserInterface/PythonChatModule.cpp
|
|
||||||
void AddStubConstants_chat(PyObject* poModule)
|
|
||||||
{
|
|
||||||
(void) poModule;
|
|
||||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_TALKING", CHAT_TYPE_TALKING);
|
|
||||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_INFO", CHAT_TYPE_INFO);
|
|
||||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_NOTICE", CHAT_TYPE_NOTICE);
|
|
||||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_PARTY", CHAT_TYPE_PARTY);
|
|
||||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_GUILD", CHAT_TYPE_GUILD);
|
|
||||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_COMMAND", CHAT_TYPE_COMMAND);
|
|
||||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_SHOUT", CHAT_TYPE_SHOUT);
|
|
||||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_WHISPER", CHAT_TYPE_WHISPER);
|
|
||||||
PyModule_AddIntConstant(poModule, "WHISPER_TYPE_CHAT", CPythonChat::WHISPER_TYPE_CHAT);
|
|
||||||
PyModule_AddIntConstant(poModule, "WHISPER_TYPE_SYSTEM", CPythonChat::WHISPER_TYPE_SYSTEM);
|
|
||||||
PyModule_AddIntConstant(poModule, "WHISPER_TYPE_GM", CPythonChat::WHISPER_TYPE_GM);
|
|
||||||
PyModule_AddIntConstant(poModule, "BOARD_STATE_VIEW", CPythonChat::BOARD_STATE_VIEW);
|
|
||||||
PyModule_AddIntConstant(poModule, "BOARD_STATE_EDIT", CPythonChat::BOARD_STATE_EDIT);
|
|
||||||
PyModule_AddIntConstant(poModule, "BOARD_STATE_LOG", CPythonChat::BOARD_STATE_LOG);
|
|
||||||
PyModule_AddIntConstant(poModule, "CHAT_SET_CHAT_WINDOW", 0);
|
|
||||||
PyModule_AddIntConstant(poModule, "CHAT_SET_LOG_WINDOW", 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 40250 UserInterface/PythonCharacterModule.cpp
|
// 40250 UserInterface/PythonCharacterModule.cpp
|
||||||
void AddStubConstants_chr(PyObject* poModule)
|
void AddStubConstants_chr(PyObject* poModule)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
// GameplayModuleConstants.cpp: each module's 40250 constants.
|
// GameplayModuleConstants.cpp: each module's 40250 constants.
|
||||||
void AddStubConstants_ServerStateChecker(PyObject* poModule);
|
void AddStubConstants_ServerStateChecker(PyObject* poModule);
|
||||||
void AddStubConstants_background(PyObject* poModule);
|
void AddStubConstants_background(PyObject* poModule);
|
||||||
void AddStubConstants_chat(PyObject* poModule);
|
|
||||||
void AddStubConstants_chr(PyObject* poModule);
|
void AddStubConstants_chr(PyObject* poModule);
|
||||||
void AddStubConstants_chrmgr(PyObject* poModule);
|
void AddStubConstants_chrmgr(PyObject* poModule);
|
||||||
void AddStubConstants_effect(PyObject* poModule);
|
void AddStubConstants_effect(PyObject* poModule);
|
||||||
@@ -154,70 +153,6 @@ PyMethodDef methods_background[] = {
|
|||||||
{ "WarpTest", stub_background_WarpTest, METH_VARARGS },
|
{ "WarpTest", stub_background_WarpTest, METH_VARARGS },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
// 40250 UserInterface/PythonChatModule.cpp: chat export names.
|
|
||||||
PyObject* stub_chat_SetChatColor(PyObject*, PyObject*) { return stub_call_named("chat.SetChatColor", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_Clear(PyObject*, PyObject*) { return stub_call_named("chat.Clear", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_Close(PyObject*, PyObject*) { return stub_call_named("chat.Close", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_CreateChatSet(PyObject*, PyObject*) { return stub_call_named("chat.CreateChatSet", Py_BuildValue("i", 0)); }
|
|
||||||
PyObject* stub_chat_Update(PyObject*, PyObject*) { return stub_call_named("chat.Update", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_Render(PyObject*, PyObject*) { return stub_call_named("chat.Render", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_SetBoardState(PyObject*, PyObject*) { return stub_call_named("chat.SetBoardState", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_SetPosition(PyObject*, PyObject*) { return stub_call_named("chat.SetPosition", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_SetHeight(PyObject*, PyObject*) { return stub_call_named("chat.SetHeight", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_SetStep(PyObject*, PyObject*) { return stub_call_named("chat.SetStep", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_ToggleChatMode(PyObject*, PyObject*) { return stub_call_named("chat.ToggleChatMode", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_EnableChatMode(PyObject*, PyObject*) { return stub_call_named("chat.EnableChatMode", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_DisableChatMode(PyObject*, PyObject*) { return stub_call_named("chat.DisableChatMode", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_SetEndPos(PyObject*, PyObject*) { return stub_call_named("chat.SetEndPos", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_GetLineCount(PyObject*, PyObject*) { return stub_call_named("chat.GetLineCount", Py_BuildValue("i", 0)); }
|
|
||||||
PyObject* stub_chat_GetVisibleLineCount(PyObject*, PyObject*) { return stub_call_named("chat.GetVisibleLineCount", Py_BuildValue("i", 0)); }
|
|
||||||
PyObject* stub_chat_GetLineStep(PyObject*, PyObject*) { return stub_call_named("chat.GetLineStep", Py_BuildValue("i", 0)); }
|
|
||||||
PyObject* stub_chat_AppendChat(PyObject*, PyObject*) { return stub_call_named("chat.AppendChat", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_AppendChatWithDelay(PyObject*, PyObject*) { return stub_call_named("chat.AppendChatWithDelay", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_ArrangeShowingChat(PyObject*, PyObject*) { return stub_call_named("chat.ArrangeShowingChat", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_IgnoreCharacter(PyObject*, PyObject*) { return stub_call_named("chat.IgnoreCharacter", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_IsIgnoreCharacter(PyObject*, PyObject*) { return stub_call_named("chat.IsIgnoreCharacter", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_CreateWhisper(PyObject*, PyObject*) { return stub_call_named("chat.CreateWhisper", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_AppendWhisper(PyObject*, PyObject*) { return stub_call_named("chat.AppendWhisper", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_RenderWhisper(PyObject*, PyObject*) { return stub_call_named("chat.RenderWhisper", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_SetWhisperBoxSize(PyObject*, PyObject*) { return stub_call_named("chat.SetWhisperBoxSize", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_SetWhisperPosition(PyObject*, PyObject*) { return stub_call_named("chat.SetWhisperPosition", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_ClearWhisper(PyObject*, PyObject*) { return stub_call_named("chat.ClearWhisper", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_InitWhisper(PyObject*, PyObject*) { return stub_call_named("chat.InitWhisper", Py_BuildNone()); }
|
|
||||||
PyObject* stub_chat_GetLinkFromHyperlink(PyObject*, PyObject*) { return stub_call_named("chat.GetLinkFromHyperlink", Py_BuildValue("s", "")); }
|
|
||||||
PyMethodDef methods_chat[] = {
|
|
||||||
{ "SetChatColor", stub_chat_SetChatColor, METH_VARARGS },
|
|
||||||
{ "Clear", stub_chat_Clear, METH_VARARGS },
|
|
||||||
{ "Close", stub_chat_Close, METH_VARARGS },
|
|
||||||
{ "CreateChatSet", stub_chat_CreateChatSet, METH_VARARGS },
|
|
||||||
{ "Update", stub_chat_Update, METH_VARARGS },
|
|
||||||
{ "Render", stub_chat_Render, METH_VARARGS },
|
|
||||||
{ "SetBoardState", stub_chat_SetBoardState, METH_VARARGS },
|
|
||||||
{ "SetPosition", stub_chat_SetPosition, METH_VARARGS },
|
|
||||||
{ "SetHeight", stub_chat_SetHeight, METH_VARARGS },
|
|
||||||
{ "SetStep", stub_chat_SetStep, METH_VARARGS },
|
|
||||||
{ "ToggleChatMode", stub_chat_ToggleChatMode, METH_VARARGS },
|
|
||||||
{ "EnableChatMode", stub_chat_EnableChatMode, METH_VARARGS },
|
|
||||||
{ "DisableChatMode", stub_chat_DisableChatMode, METH_VARARGS },
|
|
||||||
{ "SetEndPos", stub_chat_SetEndPos, METH_VARARGS },
|
|
||||||
{ "GetLineCount", stub_chat_GetLineCount, METH_VARARGS },
|
|
||||||
{ "GetVisibleLineCount", stub_chat_GetVisibleLineCount, METH_VARARGS },
|
|
||||||
{ "GetLineStep", stub_chat_GetLineStep, METH_VARARGS },
|
|
||||||
{ "AppendChat", stub_chat_AppendChat, METH_VARARGS },
|
|
||||||
{ "AppendChatWithDelay", stub_chat_AppendChatWithDelay, METH_VARARGS },
|
|
||||||
{ "ArrangeShowingChat", stub_chat_ArrangeShowingChat, METH_VARARGS },
|
|
||||||
{ "IgnoreCharacter", stub_chat_IgnoreCharacter, METH_VARARGS },
|
|
||||||
{ "IsIgnoreCharacter", stub_chat_IsIgnoreCharacter, METH_VARARGS },
|
|
||||||
{ "CreateWhisper", stub_chat_CreateWhisper, METH_VARARGS },
|
|
||||||
{ "AppendWhisper", stub_chat_AppendWhisper, METH_VARARGS },
|
|
||||||
{ "RenderWhisper", stub_chat_RenderWhisper, METH_VARARGS },
|
|
||||||
{ "SetWhisperBoxSize", stub_chat_SetWhisperBoxSize, METH_VARARGS },
|
|
||||||
{ "SetWhisperPosition", stub_chat_SetWhisperPosition, METH_VARARGS },
|
|
||||||
{ "ClearWhisper", stub_chat_ClearWhisper, METH_VARARGS },
|
|
||||||
{ "InitWhisper", stub_chat_InitWhisper, METH_VARARGS },
|
|
||||||
{ "GetLinkFromHyperlink", stub_chat_GetLinkFromHyperlink, METH_VARARGS },
|
|
||||||
{ NULL, NULL }
|
|
||||||
};
|
|
||||||
// 40250 UserInterface/PythonCharacterModule.cpp: chr export names.
|
// 40250 UserInterface/PythonCharacterModule.cpp: chr export names.
|
||||||
PyObject* stub_chr_DismountHorse(PyObject*, PyObject*) { return stub_call_named("chr.DismountHorse", Py_BuildNone()); }
|
PyObject* stub_chr_DismountHorse(PyObject*, PyObject*) { return stub_call_named("chr.DismountHorse", Py_BuildNone()); }
|
||||||
PyObject* stub_chr_MountHorse(PyObject*, PyObject*) { return stub_call_named("chr.MountHorse", Py_BuildNone()); }
|
PyObject* stub_chr_MountHorse(PyObject*, PyObject*) { return stub_call_named("chr.MountHorse", Py_BuildNone()); }
|
||||||
@@ -1502,11 +1437,6 @@ void init_2v0_gameplay_stubs() {
|
|||||||
PyModule_AddIntConstant(module, "__port_stub__", 1);
|
PyModule_AddIntConstant(module, "__port_stub__", 1);
|
||||||
AddStubConstants_background(module);
|
AddStubConstants_background(module);
|
||||||
}
|
}
|
||||||
{
|
|
||||||
PyObject* module = Py_InitModule("chat", methods_chat);
|
|
||||||
PyModule_AddIntConstant(module, "__port_stub__", 1);
|
|
||||||
AddStubConstants_chat(module);
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
PyObject* module = Py_InitModule("chr", methods_chr);
|
PyObject* module = Py_InitModule("chr", methods_chr);
|
||||||
PyModule_AddIntConstant(module, "__port_stub__", 1);
|
PyModule_AddIntConstant(module, "__port_stub__", 1);
|
||||||
|
|||||||
@@ -12,12 +12,31 @@
|
|||||||
#include "UserInterface/PythonPlayer.h"
|
#include "UserInterface/PythonPlayer.h"
|
||||||
#include "GameLib/FlyingObjectManager.h"
|
#include "GameLib/FlyingObjectManager.h"
|
||||||
#include "EffectLib/EffectManager.h"
|
#include "EffectLib/EffectManager.h"
|
||||||
|
#include "GameLib/ItemManager.h"
|
||||||
|
#include "UserInterface/PythonCharacterManager.h"
|
||||||
|
#include "UserInterface/PythonItem.h"
|
||||||
|
#include "UserInterface/PythonShop.h"
|
||||||
|
#include "UserInterface/PythonExchange.h"
|
||||||
|
#include "UserInterface/PythonChat.h"
|
||||||
|
#include "UserInterface/PythonTextTail.h"
|
||||||
|
#include "UserInterface/PythonNonPlayer.h"
|
||||||
|
#include "UserInterface/PythonMiniMap.h"
|
||||||
|
#include "UserInterface/PythonEventManager.h"
|
||||||
|
#include "UserInterface/PythonBackground.h"
|
||||||
|
#include "UserInterface/PythonQuest.h"
|
||||||
|
#include "UserInterface/PythonMessenger.h"
|
||||||
|
#include "UserInterface/PythonSafeBox.h"
|
||||||
|
#include "UserInterface/PythonGuild.h"
|
||||||
|
#include "UserInterface/AbstractApplication.h"
|
||||||
|
#include "UserInterface/PythonApplication.h"
|
||||||
|
#include "EterBase/Timer.h"
|
||||||
#include "PythonBoot.h"
|
#include "PythonBoot.h"
|
||||||
#include "PythonHost.h"
|
#include "PythonHost.h"
|
||||||
#include "../EterLib/UIRenderCommands.h"
|
#include "../EterLib/UIRenderCommands.h"
|
||||||
#include "../EterBase/LogBox.h"
|
#include "../EterBase/LogBox.h"
|
||||||
|
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
|
#include <cstdlib>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
@@ -39,6 +58,61 @@ std::unique_ptr<CAccountConnector> g_account_connector;
|
|||||||
std::unique_ptr<CPythonPlayer> g_player;
|
std::unique_ptr<CPythonPlayer> g_player;
|
||||||
std::unique_ptr<CFlyingManager> g_flying_manager;
|
std::unique_ptr<CFlyingManager> g_flying_manager;
|
||||||
std::unique_ptr<CEffectManager> g_effect_manager;
|
std::unique_ptr<CEffectManager> g_effect_manager;
|
||||||
|
// PORT: CPythonApplication is not constructed by the Godot host yet. GamePhase calls the
|
||||||
|
// 40250 IAbstractApplication singleton, so expose the host's current timer and camera surface.
|
||||||
|
class GameApplicationAdapter final : public IAbstractApplication
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void GetMousePosition(POINT* point) override { if (point) *point = {}; }
|
||||||
|
float GetGlobalTime() override { return CTimer::Instance().GetCurrentSecond(); }
|
||||||
|
float GetGlobalElapsedTime() override { return CTimer::Instance().GetElapsedSecond(); }
|
||||||
|
void SkipRenderBuffering(DWORD) override {}
|
||||||
|
void SetServerTime(time_t) override {}
|
||||||
|
void SetCenterPosition(float x, float y, float z) override
|
||||||
|
{
|
||||||
|
CPythonApplication::Instance().SetCenterPosition(x, y, z);
|
||||||
|
}
|
||||||
|
void SetEventCamera(const SCameraSetting& setting) override
|
||||||
|
{
|
||||||
|
CPythonApplication::Instance().SetEventCamera(setting);
|
||||||
|
}
|
||||||
|
void BlendEventCamera(const SCameraSetting&, float) override {}
|
||||||
|
void SetDefaultCamera() override { CPythonApplication::Instance().SetDefaultCamera(); }
|
||||||
|
void RunIMEUpdate() override {}
|
||||||
|
void RunIMETabEvent() override {}
|
||||||
|
void RunIMEReturnEvent() override {}
|
||||||
|
void RunIMEChangeCodePage() override {}
|
||||||
|
void RunIMEOpenCandidateListEvent() override {}
|
||||||
|
void RunIMECloseCandidateListEvent() override {}
|
||||||
|
void RunIMEOpenReadingWndEvent() override {}
|
||||||
|
void RunIMECloseReadingWndEvent() override {}
|
||||||
|
};
|
||||||
|
std::unique_ptr<GameApplicationAdapter> g_game_application;
|
||||||
|
// The CPythonApplication members the game phase reaches through Instance() (批次 2V2), in 40250's member
|
||||||
|
// order. All are platform/pending stand-ins so far: their stub constructors leave scalar members unset, so
|
||||||
|
// the object is built in zeroed storage and inline header accessors read null/0 rather than garbage.
|
||||||
|
struct GameSingletons
|
||||||
|
{
|
||||||
|
static void* operator new(size_t size) { return std::calloc(1, size); }
|
||||||
|
static void operator delete(void* p) { std::free(p); }
|
||||||
|
|
||||||
|
CItemManager kItemMgr;
|
||||||
|
CPythonCharacterManager kChrMgr;
|
||||||
|
CPythonItem pyItem;
|
||||||
|
CPythonShop pyShop;
|
||||||
|
CPythonExchange pyExchange;
|
||||||
|
CPythonChat pyChat;
|
||||||
|
CPythonTextTail pyTextTail;
|
||||||
|
CPythonNonPlayer pyNonPlayer;
|
||||||
|
CPythonMiniMap pyMiniMap;
|
||||||
|
CPythonEventManager pyEventManager;
|
||||||
|
CPythonBackground pyBackground;
|
||||||
|
CPythonQuest pyQuest;
|
||||||
|
CPythonMessenger pyManager;
|
||||||
|
CPythonSafeBox pySafeBox;
|
||||||
|
CPythonGuild pyGuild;
|
||||||
|
};
|
||||||
|
std::unique_ptr<GameSingletons> g_game_singletons;
|
||||||
|
|
||||||
bool fail(std::string* error, const std::string& text)
|
bool fail(std::string* error, const std::string& text)
|
||||||
{
|
{
|
||||||
@@ -225,6 +299,8 @@ bool Start(const char* stdlib_path, std::string* error)
|
|||||||
g_player = std::make_unique<CPythonPlayer>();
|
g_player = std::make_unique<CPythonPlayer>();
|
||||||
g_flying_manager = std::make_unique<CFlyingManager>();
|
g_flying_manager = std::make_unique<CFlyingManager>();
|
||||||
g_effect_manager = std::make_unique<CEffectManager>();
|
g_effect_manager = std::make_unique<CEffectManager>();
|
||||||
|
g_game_application = std::make_unique<GameApplicationAdapter>();
|
||||||
|
g_game_singletons = std::make_unique<GameSingletons>();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,6 +321,7 @@ bool run_main_script_body(const char* lpCmdLine, std::string* error)
|
|||||||
initgrpText();
|
initgrpText();
|
||||||
initwndMgr();
|
initwndMgr();
|
||||||
initapp();
|
initapp();
|
||||||
|
initChat();
|
||||||
initnet();
|
initnet();
|
||||||
init_2v0_gameplay_stubs();
|
init_2v0_gameplay_stubs();
|
||||||
|
|
||||||
@@ -411,6 +488,8 @@ void Stop()
|
|||||||
// 40250 Main(): pyLauncher.Clear() runs before app->Destroy()/delete app, so the window manager
|
// 40250 Main(): pyLauncher.Clear() runs before app->Destroy()/delete app, so the window manager
|
||||||
// (a CPythonApplication member) is still alive while Py_Finalize runs the windows' __del__.
|
// (a CPythonApplication member) is still alive while Py_Finalize runs the windows' __del__.
|
||||||
g_launcher->Clear();
|
g_launcher->Clear();
|
||||||
|
g_game_singletons.reset();
|
||||||
|
g_game_application.reset();
|
||||||
g_effect_manager.reset();
|
g_effect_manager.reset();
|
||||||
g_flying_manager.reset();
|
g_flying_manager.reset();
|
||||||
g_player.reset();
|
g_player.reset();
|
||||||
|
|||||||
@@ -169,15 +169,11 @@ void CMovieMan::PlayLogo(const char*) { MT_PLATFORM_STUB(); }
|
|||||||
float GetDegreeDifference(float, float) { MT_PLATFORM_STUB(); return 0; }
|
float GetDegreeDifference(float, float) { MT_PLATFORM_STUB(); return 0; }
|
||||||
int GetRotatingDirection(float, float) { MT_PLATFORM_STUB(); return 0; }
|
int GetRotatingDirection(float, float) { MT_PLATFORM_STUB(); return 0; }
|
||||||
|
|
||||||
BOOL HAIR_COLOR_ENABLE = FALSE;
|
|
||||||
BOOL PERF_CHECKER_RENDER_GAME = FALSE;
|
BOOL PERF_CHECKER_RENDER_GAME = FALSE;
|
||||||
BOOL RIDE_HORSE_ENABLE = FALSE;
|
|
||||||
BOOL SKILL_EFFECT_UPGRADE_ENABLE = FALSE;
|
BOOL SKILL_EFFECT_UPGRADE_ENABLE = FALSE;
|
||||||
BOOL USE_ARMOR_SPECULAR = FALSE;
|
|
||||||
BOOL USE_WEAPON_SPECULAR = FALSE;
|
BOOL USE_WEAPON_SPECULAR = FALSE;
|
||||||
D3DXCOLOR g_fSpecularColor;
|
D3DXCOLOR g_fSpecularColor;
|
||||||
double g_specularSpd = 0;
|
double g_specularSpd = 0;
|
||||||
int g_iAccumulationTime = 0;
|
|
||||||
|
|
||||||
bool LoadLocaleData(const char*) { MT_PLATFORM_STUB(); return false; }
|
bool LoadLocaleData(const char*) { MT_PLATFORM_STUB(); return false; }
|
||||||
void SetGuildSymbolPath(const char*) { MT_PLATFORM_STUB(); }
|
void SetGuildSymbolPath(const char*) { MT_PLATFORM_STUB(); }
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
// Stand-in for the 40250 logic unit EterLib/AttributeInstance.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "EterLib/StdAfx.h"
|
||||||
|
#include "EterLib/AttributeInstance.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
auto CAttributeInstance::Clear() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CAttributeInstance::GetHeight(float, float, float *) -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CAttributeInstance::Delete(CAttributeInstance *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
// Stand-in for the 40250 logic unit EterLib/CollisionData.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "EterLib/StdAfx.h"
|
||||||
|
#include "EterLib/CollisionData.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
auto CSphereCollisionInstance::GetAttribute() -> TSphereData &
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return m_attribute;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CSphereCollisionInstance::GetAttribute() const -> const TSphereData & { return m_attribute; }
|
||||||
|
auto CSphereCollisionInstance::Render(D3DFILLMODE) -> void { MT_PLATFORM_STUB(); }
|
||||||
|
auto CSphereCollisionInstance::OnDestroy() -> void { MT_PLATFORM_STUB(); }
|
||||||
|
auto CSphereCollisionInstance::OnMovementCollisionDynamicSphere(const CDynamicSphereInstance&) const -> bool
|
||||||
|
{ MT_PLATFORM_STUB(); return false; }
|
||||||
|
auto CSphereCollisionInstance::OnCollisionDynamicSphere(const CDynamicSphereInstance&) const -> bool
|
||||||
|
{ MT_PLATFORM_STUB(); return false; }
|
||||||
|
auto CSphereCollisionInstance::OnGetCollisionMovementAdjust(const CDynamicSphereInstance&) const -> D3DXVECTOR3
|
||||||
|
{ MT_PLATFORM_STUB(); return D3DXVECTOR3(0, 0, 0); }
|
||||||
@@ -0,0 +1,565 @@
|
|||||||
|
// Stand-in for the 40250 logic unit GameLib/ActorInstance.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "GameLib/StdAfx.h"
|
||||||
|
#include "GameLib/ActorInstance.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
auto CActorInstance::IEventHandler::GetEmptyPtr() -> IEventHandler *
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<IEventHandler *>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::IsDirLine() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetMaterialColor(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetEventHandler(IEventHandler *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetRace(DWORD) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetHair(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetVirtualID(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetShape(DWORD, float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::ChangeMaterial(const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::GetRace() -> DWORD
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<DWORD>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::GetVirtualID() -> DWORD
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<DWORD>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::CanAct() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::CanMove() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::CanAttack() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::CanUseSkill() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::AttachWeapon(DWORD, DWORD, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::RefreshActorInstance() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::GetPartItemID(DWORD) -> DWORD
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<DWORD>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::UpdateAttachingInstances() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetMotionMode(int) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::GetMotionMode() -> int
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<int>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetLoopMotion(DWORD, float, float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::InterceptOnceMotion(DWORD, float, UINT, float) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::InterceptLoopMotion(DWORD, float) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::IsPushing() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::IsUsingSkill() -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::CanCancelSkill() -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::UpdatePointInstance() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::TestCollisionWithDynamicSphere(const CDynamicSphereInstance &) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::UpdateAdvancingPointInstance() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::AvoidObject(const CGraphicObjectInstance &) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::IsBlockObject(const CGraphicObjectInstance &) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::BlockMovement() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::TestPhysicsBlendingCollision(CActorInstance &) -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::isAttacking() -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::IsUsingMovingSkill() -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::IsActEmotion() -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetBlendingPosition(const TPixelPosition &, float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetBattleHitEffect(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::GetMovementVectorRef() -> const D3DXVECTOR3 &
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<const D3DXVECTOR3 &>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetCurPixelPosition(const TPixelPosition &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::NEW_SetSrcPixelPosition(const TPixelPosition &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::NEW_SetDstPixelPosition(const TPixelPosition &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::NEW_SetDstPixelPositionZ(float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::NEW_GetCurPixelPositionRef() -> const TPixelPosition &
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<const TPixelPosition &>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::NEW_GetSrcPixelPositionRef() -> const TPixelPosition &
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<const TPixelPosition &>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::NEW_GetDstPixelPositionRef() -> const TPixelPosition &
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<const TPixelPosition &>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::NEW_GetLastPixelPositionRef() -> const TPixelPosition &
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<const TPixelPosition &>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::GetPixelPosition(TPixelPosition *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::GetRotation() -> float
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<float>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::GetTargetRotation() -> float
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<float>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::GetAdvancingRotation() -> float
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<float>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetRotation(float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetAdvancingRotation(float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::RestoreRenderMode() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetBlendRenderMode() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetAlphaValue(float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::GetAlphaValue() -> float
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<float>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::BlendAlphaValue(float, float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetAddRenderMode() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetAddColor(const D3DXCOLOR &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetModulateRenderMode() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetRenderMode(int) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::RenderTrace() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::RenderCollisionData() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::RenderToShadowMap() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::UpdateAttribute() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::CanFishing() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::IsFishing() -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::OnGetFlyTargetPosition() -> D3DXVECTOR3
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<D3DXVECTOR3>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::OnShootDamage() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::AddFlyTarget(const CFlyTarget &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::SetFlyTarget(const CFlyTarget &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::CanChangeTarget() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::HORSE_MotionProcess(BOOL) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::MotionProcess(BOOL) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::RotationProcess() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::ComboProcess() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::ShakeProcess() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::TraceProcess() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::OnRender() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__ClearAttachingEffect() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__ClearCombo() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__ClearMotion() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__IsWaitMotion() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__IsMoveMotion() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__IsDamageMotion() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__IsKnockDownMotion() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__IsDieMotion() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__GetCurrentMotionIndex() -> WORD
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<WORD>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__DestroyWeaponTrace() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__InitializePositionData() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__OnSyncing() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__OnWaiting() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__OnMoving() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::EnableSkipCollision() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::DisableSkipCollision() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__InitializeCollisionData() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__BlendAlpha_Initialize() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__BlendAlpha_Update() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__IsSyncing() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::__OnStop() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CActorInstance::TEMP_Push(int, int) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
// Stand-in for the 40250 logic unit GameLib/FlyTarget.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "GameLib/StdAfx.h"
|
||||||
|
#include "GameLib/FlyTarget.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CFlyTarget::CFlyTarget(IFlyTargetableObject *)
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CFlyTarget::CFlyTarget(const D3DXVECTOR3 &)
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CFlyTarget::~CFlyTarget()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CFlyTarget::CFlyTarget()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CFlyTarget::NotifyTargetClear() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
// Stand-in for the 40250 logic unit GameLib/ItemData.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "GameLib/StdAfx.h"
|
||||||
|
#include "GameLib/ItemData.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
auto CItemData::GetName() const -> const char *
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<const char *>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CItemData::GetType() const -> BYTE
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BYTE>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CItemData::GetValue(BYTE) const -> long
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<long>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CItemData::GetIndex() const -> DWORD
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<DWORD>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CItemData::GetSubType() const -> BYTE
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BYTE>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CItemData::GetRefine() const -> UINT
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<UINT>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CItemData::GetWeaponType() const -> DWORD
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<DWORD>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CItemData::GetSocketCount() const -> int
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<int>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CItemData::GetSpecularPowerf() const -> float
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<float>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
// Stand-in for the 40250 logic unit GameLib/ItemManager.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "GameLib/StdAfx.h"
|
||||||
|
#include "GameLib/ItemManager.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CItemManager::CItemManager()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CItemManager::~CItemManager()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CItemManager::GetItemDataPointer(DWORD, CItemData **) -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
// Stand-in for the 40250 logic unit GameLib/MapManager.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "GameLib/StdAfx.h"
|
||||||
|
#include "GameLib/MapManager.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
auto CMapManager::GetHeight(float, float) -> float
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<float>();
|
||||||
|
}
|
||||||
|
|
||||||
|
CMapManager::CMapManager()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CMapManager::~CMapManager()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CMapManager::Clear() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CMapManager::AllocMap() -> CMapBase *
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<CMapBase *>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CMapManager::LoadMap(const std::string &, float, float, float) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CMapManager::isPhysicalCollision(const D3DXVECTOR3 &) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CMapManager::GetWaterHeight(int, int, long *) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CMapManager::GetShadowMapColor(float, float) -> DWORD
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<DWORD>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CMapManager::isAttrOn(float, float, BYTE) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CMapManager::isAttrOn(int, int, BYTE) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
// Pending MapType.cpp dependency of InstanceBase; the full unit is not ported yet.
|
||||||
|
#include "GameLib/StdAfx.h"
|
||||||
|
#include "GameLib/MapType.h"
|
||||||
|
|
||||||
|
float SPixelPosition_CalculateDistanceSq3d(const TPixelPosition& left, const TPixelPosition& right)
|
||||||
|
{
|
||||||
|
float dx = left.x - right.x;
|
||||||
|
float dy = left.y - right.y;
|
||||||
|
float dz = left.z - right.z;
|
||||||
|
return dx * dx + dy * dy + dz * dz;
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// Pending MapUtil.cpp dependency of the physics object. The interpolation unit remains 2V3 work.
|
||||||
|
#include "GameLib/StdAfx.h"
|
||||||
|
#include "GameLib/MapUtil.h"
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CEaseOutInterpolation::CEaseOutInterpolation() { MT_PLATFORM_STUB(); }
|
||||||
|
CEaseOutInterpolation::~CEaseOutInterpolation() { MT_PLATFORM_STUB(); }
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
// Stand-in for the 40250 logic unit GameLib/PhysicsObject.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "GameLib/StdAfx.h"
|
||||||
|
#include "GameLib/PhysicsObject.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
decltype(IObjectManager::ms_ObjManager) IObjectManager::ms_ObjManager{};
|
||||||
|
|
||||||
|
decltype(IPhysicsWorld::ms_pWorld) IPhysicsWorld::ms_pWorld{};
|
||||||
|
|
||||||
|
CPhysicsObject::CPhysicsObject()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPhysicsObject::~CPhysicsObject()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPhysicsObject::Initialize() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPhysicsObject::Update(float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPhysicsObject::GetXMovement() -> float
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<float>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPhysicsObject::GetYMovement() -> float
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<float>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
// Stand-in for the 40250 logic unit GameLib/PropertyManager.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "GameLib/StdAfx.h"
|
||||||
|
#include "GameLib/PropertyManager.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CPropertyManager::CPropertyManager()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPropertyManager::~CPropertyManager()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// Stand-in for the 40250 logic unit GameLib/RaceData.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "GameLib/StdAfx.h"
|
||||||
|
#include "GameLib/RaceData.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
auto CRaceData::GetNormalAttackIndex(WORD, WORD *) -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// Pending GameType.cpp dependency of InstanceBase; the full unit is not ported yet.
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/GameType.h"
|
||||||
|
|
||||||
|
std::string g_strGuildSymbolPathName = "mark/10/";
|
||||||
|
|
||||||
|
const char* GetGuildSymbolFileName(DWORD dwGuildID)
|
||||||
|
{
|
||||||
|
return _getf("%s%03d.jpg", g_strGuildSymbolPathName.c_str(), dwGuildID);
|
||||||
|
}
|
||||||
@@ -0,0 +1,389 @@
|
|||||||
|
// Stand-in for the 40250 logic unit UserInterface/InstanceBase.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/InstanceBase.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
auto CInstanceBase::RegisterEffect(UINT, const char *, const char *, bool) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__AttachEffect(UINT) -> DWORD
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<DWORD>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__DetachEffect(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::CreateSpecialEffect(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::AttachSpecialEffect(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
decltype(CInstanceBase::ms_adwCRCAffectEffect) CInstanceBase::ms_adwCRCAffectEffect{};
|
||||||
|
|
||||||
|
decltype(CInstanceBase::ms_fDustGap) CInstanceBase::ms_fDustGap{};
|
||||||
|
|
||||||
|
decltype(CInstanceBase::ms_fHorseDustGap) CInstanceBase::ms_fHorseDustGap{};
|
||||||
|
|
||||||
|
auto CInstanceBase::DeleteBlendOut() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::AttachTextTail() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::DetachTextTail() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::UpdateTextTailLevel(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::RefreshTextTail() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::RefreshTextTailTitle() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::UpdateDeleting() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::ActDualEmotion(CInstanceBase &, WORD, WORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::ActEmotion(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::LevelUp() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::SkillUp() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::Stun() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::Die() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::IsPVPInstance(CInstanceBase &) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::IsAffect(UINT) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::SetEventHandler(CActorInstance::IEventHandler *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::NEW_UseSkill(UINT, UINT, UINT, bool) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::NEW_GetDistanceFromDestPixelPosition(const TPixelPosition &) -> float
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<float>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::NEW_GetDistanceFromDestInstance(CInstanceBase &) -> float
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<float>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::NEW_SetPixelPosition(const TPixelPosition &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::RunNormalAttack(float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::RunComboAttack(float, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::CheckAdvancing() -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::StartFishing(float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::StopFishing() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::ReactFishing() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::CatchSuccess() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::CatchFail() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::SCRIPT_SetPixelPosition(float, float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::NEW_GetPixelPosition(TPixelPosition *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::NEW_LookAtDestInstance(CInstanceBase &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::GetRotation() -> float
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<float>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::GetAdvancingRotation() -> float
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<float>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::SetRotation(float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::BlendRotation(float, float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::SetMotionMode(int) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::PushOnceMotion(WORD, float, float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__ClearAffects() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::SetAffectFlagContainer(const CAffectFlagContainer &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::SetEmoticon(UINT) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::SetFishEmoticon() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__EnableChangingTCPState() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__ComboProcess() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::AttackProcess() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__AttachSelectEffect() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__DetachSelectEffect() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__AttachTargetEffect() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__DetachTargetEffect() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__AttachEmpireEffect(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__EffectContainer_Initialize() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__EffectContainer_Destroy() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__StoneSmoke_Inialize() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__StoneSmoke_Destroy() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::ProcessDamage() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::AddDamageEffect(DWORD, BYTE, BOOL, BOOL) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::ClearPVPKeySystem() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::InsertPVPKey(DWORD, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::RemovePVPKey(DWORD, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::InsertGVGKey(DWORD, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::RemoveGVGKey(DWORD, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::InsertDUELKey(DWORD, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__FindDUELKey(DWORD, DWORD) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::GetEventHandlerRef() -> CActorInstance::IEventHandler &
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<CActorInstance::IEventHandler &>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::IsUsingSkill() -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::isLock() -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__EffectContainer_AttachEffect(DWORD) -> DWORD
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<DWORD>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CInstanceBase::__EffectContainer_DetachEffect(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
@@ -1,177 +0,0 @@
|
|||||||
// Stand-in for the 40250 logic unit UserInterface/NetworkActorManager.cpp, not ported yet: the platform_stub.py skeleton of its
|
|
||||||
// header, so the units that call it (批次 2V1, the network slice) link. Delete this file in the commit
|
|
||||||
// that ports the unit into port/ (docs/PORT-PLAN.md 2V1).
|
|
||||||
#include "UserInterface/StdAfx.h"
|
|
||||||
#include "UserInterface/NetworkActorManager.h"
|
|
||||||
#include "UserInterface/PythonCharacterManager.h" // the __GetCharacterManager return type
|
|
||||||
|
|
||||||
#include "../../PlatformStub.h"
|
|
||||||
|
|
||||||
SNetworkActorData::SNetworkActorData()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto SNetworkActorData::SetDstPosition(DWORD, LONG, LONG, DWORD) -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto SNetworkActorData::SetPosition(LONG, LONG) -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto SNetworkActorData::UpdatePosition() -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
SNetworkActorData::SNetworkActorData(const SNetworkActorData &)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto SNetworkActorData::operator=(const SNetworkActorData &) -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto SNetworkActorData::__copy__(const SNetworkActorData &) -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
CNetworkActorManager::CNetworkActorManager()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
CNetworkActorManager::~CNetworkActorManager()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::Destroy() -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::SetMainActorVID(DWORD) -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::RemoveActor(DWORD) -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::AppendActor(const SNetworkActorData &) -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::UpdateActor(const SNetworkUpdateActorData &) -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::MoveActor(const SNetworkMoveActorData &) -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::SyncActor(DWORD, LONG, LONG) -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::SetActorOwner(DWORD, DWORD) -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::Update() -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__OLD_Update() -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__UpdateMainActor() -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__IsVisiblePos(LONG, LONG) -> bool
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__IsVisibleActor(const SNetworkActorData &) -> bool
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__IsMainActorVID(DWORD) -> bool
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__RemoveAllGroundItems() -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__RemoveAllActors() -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__RemoveDynamicActors() -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__RemoveCharacterManagerActor(SNetworkActorData &) -> void
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__FindActorData(DWORD) -> SNetworkActorData *
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<SNetworkActorData *>();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__AppendCharacterManagerActor(SNetworkActorData &) -> CInstanceBase *
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<CInstanceBase *>();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__FindActor(SNetworkActorData &) -> CInstanceBase *
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<CInstanceBase *>();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__FindActor(SNetworkActorData &, LONG, LONG) -> CInstanceBase *
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<CInstanceBase *>();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto CNetworkActorManager::__GetCharacterManager() -> CPythonCharacterManager &
|
|
||||||
{
|
|
||||||
// PORT: the 40250 body (NetworkActorManager.cpp:310-313); a stub's default reference would construct a
|
|
||||||
// character manager.
|
|
||||||
return CPythonCharacterManager::Instance();
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
// Stand-in for the 40250 logic unit UserInterface/PythonBackground.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/PythonBackground.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
auto CPythonBackground::Destroy() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::Create() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::GlobalPositionToLocalPosition(LONG &, LONG &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::LocalPositionToGlobalPosition(LONG &, LONG &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::RefreshShadowLevel() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::Update(float, float, float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::ClearGuildArea() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::RegisterGuildArea(int, int, int, int) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::CreateTargetEffect(DWORD, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::CreateTargetEffect(DWORD, long, long) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::DeleteTargetEffect(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::Warp(DWORD, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::GetWarpMapName() -> const char *
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
// PORT: Keep the not-yet-ported map lookup safe for GamePhase's ShowMapName call.
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonBackground::CPythonBackground()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonBackground::~CPythonBackground()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonBackground::CheckAdvancing(CInstanceBase *) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
// Stand-in for the 40250 logic unit UserInterface/PythonEventManager.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/PythonEventManager.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CPythonEventManager::CPythonEventManager()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonEventManager::~CPythonEventManager()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonEventManager::RegisterEventSetFromString(const std::string &) -> int
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<int>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonEventManager::SetVisibleLineCount(int, int) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
// Stand-in for the 40250 logic unit UserInterface/PythonExchange.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/PythonExchange.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CPythonExchange::CPythonExchange()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonExchange::~CPythonExchange()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::Clear() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::Start() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::End() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::isTrading() -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::SetSelfName(const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::SetTargetName(const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::SetElkToTarget(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::SetElkToSelf(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::SetItemToTarget(DWORD, DWORD, BYTE) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::SetItemToSelf(DWORD, DWORD, BYTE) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::SetItemMetinSocketToTarget(int, int, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::SetItemMetinSocketToSelf(int, int, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::SetItemAttributeToTarget(int, int, BYTE, short) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::SetItemAttributeToSelf(int, int, BYTE, short) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::DelItemOfTarget(BYTE) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::DelItemOfSelf(BYTE) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::SetAcceptToTarget(BYTE) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonExchange::SetAcceptToSelf(BYTE) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
@@ -11,3 +11,123 @@ BOOL CPythonGuild::GetMemberDataPtrByName(const char *, TGuildMemberData **)
|
|||||||
MT_PLATFORM_STUB();
|
MT_PLATFORM_STUB();
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::Destroy() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::EnableGuild() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::SetGuildMoney(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::SetGuildEXP(BYTE, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::SetGradeData(BYTE, TGuildGradeData &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::SetGradeName(BYTE, const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::SetGradeAuthority(BYTE, BYTE) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::ClearComment() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::RegisterComment(DWORD, const char *, const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::RegisterMember(TGuildMemberData &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::ChangeGuildMemberGrade(DWORD, BYTE) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::ChangeGuildMemberGeneralFlag(DWORD, BYTE) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::RemoveMember(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::RegisterGuildName(DWORD, const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::IsMainPlayer(DWORD) -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::GetGuildInfoRef() -> TGuildInfo &
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<TGuildInfo &>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::GetMemberDataPtrByPID(DWORD, TGuildMemberData **) -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::GetGuildSkillDataRef() -> TGuildSkillData &
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<TGuildSkillData &>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::GetGuildName(DWORD, std::string *) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::StartGuildWar(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonGuild::EndGuildWar(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonGuild::CPythonGuild()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonGuild::~CPythonGuild()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Stand-in for the 40250 logic unit UserInterface/PythonItem.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/PythonItem.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CPythonItem::CPythonItem()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonItem::~CPythonItem()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonItem::Destroy() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonItem::PlayUseSound(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonItem::PlayDropSound(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonItem::PlayUsePotionSound() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonItem::CreateItem(DWORD, DWORD, float, float, float, bool) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonItem::DeleteItem(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonItem::DeleteAllItems() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonItem::SetOwnership(DWORD, const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Stand-in for the 40250 logic unit UserInterface/PythonMessenger.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/PythonMessenger.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CPythonMessenger::CPythonMessenger()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonMessenger::~CPythonMessenger()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMessenger::OnFriendLogin(const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMessenger::OnFriendLogout(const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMessenger::SetMobile(const char *, BYTE) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMessenger::AppendGuildMember(const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMessenger::RemoveGuildMember(const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMessenger::RemoveAllGuildMember() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMessenger::LoginGuildMember(const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMessenger::LogoutGuildMember(const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
// Stand-in for the 40250 logic unit UserInterface/PythonMiniMap.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/PythonMiniMap.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CPythonMiniMap::CPythonMiniMap()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonMiniMap::~CPythonMiniMap()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMiniMap::AddObserver(DWORD, float, float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMiniMap::MoveObserver(DWORD, float, float) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMiniMap::RemoveObserver(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMiniMap::ClearAtlasMarkInfo() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMiniMap::RegisterAtlasMark(BYTE, const char *, long, long) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMiniMap::ClearGuildArea() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMiniMap::RegisterGuildArea(DWORD, DWORD, long, long, long, long) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMiniMap::CreateTarget(int, const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMiniMap::CreateTarget(int, const char *, DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMiniMap::UpdateTarget(int, int, int) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonMiniMap::DeleteTarget(int) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
@@ -1,335 +0,0 @@
|
|||||||
// Stand-in for the 40250 logic unit UserInterface/PythonNetworkStreamPhaseGame.cpp, not ported yet: the CPythonNetworkStream
|
|
||||||
// members it defines that the ported network slice (批次 2V1) references, as MT_PLATFORM_STUB()s. Delete this
|
|
||||||
// file in the commit that ports the unit into port/ (docs/PORT-PLAN.md 2V1).
|
|
||||||
#include "UserInterface/StdAfx.h"
|
|
||||||
#include "UserInterface/PythonNetworkStream.h"
|
|
||||||
#include "EterBase/Filename.h"
|
|
||||||
|
|
||||||
#include "../../PlatformStub.h"
|
|
||||||
|
|
||||||
BOOL gs_bEmpireLanuageEnable = TRUE;
|
|
||||||
|
|
||||||
void CPythonNetworkStream::GamePhase()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
// PORT: consumes the packet only, so the loading phase keeps reading; the handler body comes with the unit.
|
|
||||||
bool CPythonNetworkStream::RecvPointChange()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
TPacketGCPointChange PointChange;
|
|
||||||
return Recv(sizeof(PointChange), &PointChange);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPythonNetworkStream::RegisterEmoticonString(const char *)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendAnswerMakeGuildPacket(const char *)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendCharacterPositionPacket(BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendChatPacket(const char *, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
// PORT: the 40250 body verbatim ahead of its unit: the loading phase sends it on the main-character packet.
|
|
||||||
bool CPythonNetworkStream::SendClientVersionPacket()
|
|
||||||
{
|
|
||||||
std::string filename;
|
|
||||||
|
|
||||||
GetExcutedFileName(filename);
|
|
||||||
|
|
||||||
filename = CFileNameHelper::NoPath(filename);
|
|
||||||
CFileNameHelper::ChangeDosPath(filename);
|
|
||||||
|
|
||||||
if (LocaleService_IsEUROPE() && false == LocaleService_IsYMIR())
|
|
||||||
{
|
|
||||||
TPacketCGClientVersion2 kVersionPacket;
|
|
||||||
kVersionPacket.header = HEADER_CG_CLIENT_VERSION2;
|
|
||||||
strncpy(kVersionPacket.filename, filename.c_str(), sizeof(kVersionPacket.filename)-1);
|
|
||||||
strncpy(kVersionPacket.timestamp, "1215955205", sizeof(kVersionPacket.timestamp)-1); // # python time.time 앞자리
|
|
||||||
//strncpy(kVersionPacket.timestamp, __TIMESTAMP__, sizeof(kVersionPacket.timestamp)-1); // old_string_ver
|
|
||||||
//strncpy(kVersionPacket.timestamp, "1218055205", sizeof(kVersionPacket.timestamp)-1); // new_future
|
|
||||||
//strncpy(kVersionPacket.timestamp, "1214055205", sizeof(kVersionPacket.timestamp)-1); // old_past
|
|
||||||
|
|
||||||
if (!Send(sizeof(kVersionPacket), &kVersionPacket))
|
|
||||||
Tracef("SendClientReportPacket Error");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TPacketCGClientVersion kVersionPacket;
|
|
||||||
kVersionPacket.header = HEADER_CG_CLIENT_VERSION;
|
|
||||||
strncpy(kVersionPacket.filename, filename.c_str(), sizeof(kVersionPacket.filename)-1);
|
|
||||||
strncpy(kVersionPacket.timestamp, __TIMESTAMP__, sizeof(kVersionPacket.timestamp)-1);
|
|
||||||
|
|
||||||
if (!Send(sizeof(kVersionPacket), &kVersionPacket))
|
|
||||||
Tracef("SendClientReportPacket Error");
|
|
||||||
}
|
|
||||||
return SendSequence();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendExchangeAcceptPacket()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendExchangeElkAddPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendExchangeExitPacket()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendExchangeItemAddPacket(TItemPos, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendExchangeItemDelPacket(BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendExchangeStartPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGiveItemPacket(DWORD, TItemPos, int)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildAddMemberPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildChangeGradeAuthorityPacket(BYTE, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildChangeGradeNamePacket(BYTE, const char *)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildChangeMemberGeneralPacket(DWORD, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildChangeMemberGradePacket(DWORD, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildChargeGSPPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildDeleteCommentPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildDepositMoneyPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildInviteAnswerPacket(DWORD, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildOfferPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildPostCommentPacket(const char *)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildRefreshCommentsPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildRemoveMemberPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildUseSkillPacket(DWORD, DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendGuildWithdrawMoneyPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendMessengerAddByNamePacket(const char *)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendMessengerAddByVIDPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendMessengerRemovePacket(const char *, const char *)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendMobileMessagePacket(const char *, const char *)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendOnClickPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendPartyInviteAnswerPacket(DWORD, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendPartyInvitePacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendPartyParameterPacket(BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendPartyRemovePacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendPartySetStatePacket(DWORD, BYTE, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendPartyUseSkillPacket(BYTE, DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendQuestConfirmPacket(BYTE, DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendQuestInputStringPacket(const char *)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendRefinePacket(BYTE, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendSelectItemPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendWhisperPacket(const char *, const char *)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPythonNetworkStream::SetGamePhase()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPythonNetworkStream::ToggleGameDebugInfo()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPythonNetworkStream::Warp(LONG, LONG)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPythonNetworkStream::__InitializeGamePhase()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPythonNetworkStream::__TEST_SetSkillGroupFake(int)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
// Stand-in for the 40250 logic unit UserInterface/PythonNetworkStreamPhaseGameActor.cpp, not ported yet: the CPythonNetworkStream
|
|
||||||
// members it defines that the ported network slice (批次 2V1) references, as MT_PLATFORM_STUB()s. Delete this
|
|
||||||
// file in the commit that ports the unit into port/ (docs/PORT-PLAN.md 2V1).
|
|
||||||
#include "UserInterface/StdAfx.h"
|
|
||||||
#include "UserInterface/PythonNetworkStream.h"
|
|
||||||
|
|
||||||
#include "../../PlatformStub.h"
|
|
||||||
|
|
||||||
// PORT: consumes the packet only, so the loading phase keeps reading; the handler body comes with the unit.
|
|
||||||
bool CPythonNetworkStream::RecvCharacterUpdatePacket()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
TPacketGCCharacterUpdate chrUpdatePacket;
|
|
||||||
return Recv(sizeof(chrUpdatePacket), &chrUpdatePacket);
|
|
||||||
}
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
// Stand-in for the 40250 logic unit UserInterface/PythonNetworkStreamPhaseGameItem.cpp, not ported yet: the CPythonNetworkStream
|
|
||||||
// members it defines that the ported network slice (批次 2V1) references, as MT_PLATFORM_STUB()s. Delete this
|
|
||||||
// file in the commit that ports the unit into port/ (docs/PORT-PLAN.md 2V1).
|
|
||||||
#include "UserInterface/StdAfx.h"
|
|
||||||
#include "UserInterface/PythonNetworkStream.h"
|
|
||||||
|
|
||||||
#include "../../PlatformStub.h"
|
|
||||||
|
|
||||||
// PORT: consumes the packet only, so the loading phase keeps reading; the handler body comes with the unit.
|
|
||||||
bool CPythonNetworkStream::RecvItemSetPacket()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
TPacketGCItemSet packet_item_set;
|
|
||||||
return Recv(sizeof(packet_item_set), &packet_item_set);
|
|
||||||
}
|
|
||||||
|
|
||||||
// PORT: consumes the packet only, so the loading phase keeps reading; the handler body comes with the unit.
|
|
||||||
bool CPythonNetworkStream::RecvQuickSlotAddPacket()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
TPacketGCQuickSlotAdd packet_quick_slot_add;
|
|
||||||
return Recv(sizeof(packet_quick_slot_add), &packet_quick_slot_add);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendItemDropPacket(TItemPos, DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendItemDropPacketNew(TItemPos, DWORD, DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendItemMovePacket(TItemPos, TItemPos, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendItemPickUpPacket(DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendItemUsePacket(TItemPos)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendItemUseToItemPacket(TItemPos, TItemPos)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendMallCheckoutPacket(BYTE, TItemPos)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendSafeBoxCheckinPacket(TItemPos, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendSafeBoxCheckoutPacket(BYTE, TItemPos)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendSafeBoxItemMovePacket(BYTE, BYTE, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendSafeBoxMoneyPacket(BYTE, DWORD)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendShopBuyPacket(BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendShopEndPacket()
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendShopSellPacket(BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPythonNetworkStream::SendShopSellPacketNew(BYTE, BYTE)
|
|
||||||
{
|
|
||||||
MT_PLATFORM_STUB();
|
|
||||||
return mt_platform_stub_return<bool>();
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
// Stand-in for the 40250 logic unit UserInterface/PythonNonPlayer.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/PythonNonPlayer.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CPythonNonPlayer::CPythonNonPlayer()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonNonPlayer::~CPythonNonPlayer()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonNonPlayer::GetName(DWORD, const char **) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonNonPlayer::GetInstanceType(DWORD, BYTE *) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonNonPlayer::GetEventType(DWORD) -> BYTE
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BYTE>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonNonPlayer::GetMonsterColor(DWORD) -> DWORD
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<DWORD>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
// Stand-in for the 40250 logic unit UserInterface/PythonQuest.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/PythonQuest.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CPythonQuest::CPythonQuest()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonQuest::~CPythonQuest()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonQuest::RegisterQuestInstance(const SQuestInstance &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonQuest::DeleteQuestInstance(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonQuest::IsQuest(DWORD) -> bool
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<bool>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonQuest::MakeQuest(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonQuest::SetQuestTitle(DWORD, const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonQuest::SetQuestClockName(DWORD, const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonQuest::SetQuestCounterName(DWORD, const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonQuest::SetQuestClockValue(DWORD, int) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonQuest::SetQuestCounterValue(DWORD, int) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonQuest::SetQuestIconFileName(DWORD, const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
// Stand-in for the 40250 logic unit UserInterface/PythonSafeBox.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/PythonSafeBox.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CPythonSafeBox::CPythonSafeBox()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonSafeBox::~CPythonSafeBox()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonSafeBox::OpenSafeBox(int) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonSafeBox::SetItemData(DWORD, const TItemData &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonSafeBox::DelItemData(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonSafeBox::SetMoney(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonSafeBox::GetSlotItemID(DWORD, DWORD *) -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonSafeBox::OpenMall(int) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonSafeBox::SetMallItemData(DWORD, const TItemData &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonSafeBox::DelMallItemData(DWORD) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonSafeBox::GetSlotMallItemID(DWORD, DWORD *) -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
// Stand-in for the 40250 logic unit UserInterface/PythonShop.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/PythonShop.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CPythonShop::CPythonShop()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonShop::~CPythonShop()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonShop::Clear() -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonShop::SetItemData(DWORD, const TShopItemData &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonShop::SetItemData(BYTE, DWORD, const TShopItemData &) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonShop::SetTabCoinType(BYTE, BYTE) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonShop::SetTabName(BYTE, const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonShop::IsOpen() -> BOOL
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
return mt_platform_stub_return<BOOL>();
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// Stand-in for the 40250 logic unit UserInterface/PythonTextTail.cpp, not ported yet: the members the ported units
|
||||||
|
// reference, as platform_stub.py stubs. Delete this file in the commit that ports the unit into port/
|
||||||
|
// (docs/PORT-PLAN.md).
|
||||||
|
#include "UserInterface/StdAfx.h"
|
||||||
|
#include "UserInterface/PythonTextTail.h"
|
||||||
|
|
||||||
|
#include "../../PlatformStub.h"
|
||||||
|
|
||||||
|
CPythonTextTail::CPythonTextTail()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonTextTail::~CPythonTextTail()
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CPythonTextTail::RegisterChatTail(DWORD, const char *) -> void
|
||||||
|
{
|
||||||
|
MT_PLATFORM_STUB();
|
||||||
|
}
|
||||||
@@ -0,0 +1,979 @@
|
|||||||
|
#include "StdAfx.h"
|
||||||
|
#include "ActorInstance.h"
|
||||||
|
#include "AreaTerrain.h"
|
||||||
|
#include "RaceData.h"
|
||||||
|
#include "../SpeedTreeLib/SpeedTreeForestDirectX8.h"
|
||||||
|
#include "../SpeedTreeLib/SpeedTreeWrapper.h"
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
MAIN_RACE_MAX_NUM = 8,
|
||||||
|
};
|
||||||
|
|
||||||
|
void CActorInstance::INSTANCEBASE_Deform()
|
||||||
|
{
|
||||||
|
Deform();
|
||||||
|
TraceProcess();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::INSTANCEBASE_Transform()
|
||||||
|
{
|
||||||
|
if (m_pkHorse)
|
||||||
|
{
|
||||||
|
m_pkHorse->INSTANCEBASE_Transform();
|
||||||
|
|
||||||
|
m_x = m_pkHorse->NEW_GetCurPixelPositionRef().x;
|
||||||
|
m_y = -m_pkHorse->NEW_GetCurPixelPositionRef().y;
|
||||||
|
m_z = m_pkHorse->NEW_GetCurPixelPositionRef().z;
|
||||||
|
m_bNeedUpdateCollision = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//DWORD t2=ELTimer_GetMSec();
|
||||||
|
Update();
|
||||||
|
//DWORD t3=ELTimer_GetMSec();
|
||||||
|
TransformProcess();
|
||||||
|
//DWORD t4=ELTimer_GetMSec();
|
||||||
|
Transform();
|
||||||
|
//DWORD t5=ELTimer_GetMSec();
|
||||||
|
UpdatePointInstance();
|
||||||
|
//DWORD t6=ELTimer_GetMSec();
|
||||||
|
ShakeProcess();
|
||||||
|
//DWORD t7=ELTimer_GetMSec();
|
||||||
|
UpdateBoundingSphere();
|
||||||
|
//DWORD t8=ELTimer_GetMSec();
|
||||||
|
UpdateAttribute();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void CActorInstance::TEMP_Update()
|
||||||
|
{
|
||||||
|
//DWORD t1=ELTimer_GetMSec();
|
||||||
|
OnUpdate();
|
||||||
|
//DWORD t2=ELTimer_GetMSec();
|
||||||
|
UpdateBoundingSphere();
|
||||||
|
//DWORD t3=ELTimer_GetMSec();
|
||||||
|
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
{
|
||||||
|
static FILE* fp=fopen("perf_actor_update.txt", "w");
|
||||||
|
|
||||||
|
if (t3-t1>3)
|
||||||
|
{
|
||||||
|
fprintf(fp, "AIU.Total %d (Time %f)\n",
|
||||||
|
t3-t1, ELTimer_GetMSec()/1000.0f);
|
||||||
|
fprintf(fp, "AIU.UP %d\n", t2-t1);
|
||||||
|
fprintf(fp, "AIU.UBS %d\n", t3-t2);
|
||||||
|
fprintf(fp, "-------------------------------- \n");
|
||||||
|
fflush(fp);
|
||||||
|
}
|
||||||
|
fflush(fp);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void CActorInstance::OnUpdate()
|
||||||
|
{
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t1=ELTimer_GetMSec();
|
||||||
|
#endif
|
||||||
|
if (!IsParalysis())
|
||||||
|
CGraphicThingInstance::OnUpdate();
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t2=ELTimer_GetMSec();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
UpdateAttachingInstances();
|
||||||
|
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t3=ELTimer_GetMSec();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
__BlendAlpha_Update();
|
||||||
|
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t4=ELTimer_GetMSec();
|
||||||
|
{
|
||||||
|
static FILE* fp=fopen("perf_actor_update2.txt", "w");
|
||||||
|
|
||||||
|
if (t4-t1>3)
|
||||||
|
{
|
||||||
|
fprintf(fp, "AIU2.Total %d (Time %f)\n",
|
||||||
|
t4-t1, ELTimer_GetMSec()/1000.0f);
|
||||||
|
fprintf(fp, "AIU2.GU %d\n", t2-t1);
|
||||||
|
fprintf(fp, "AIU2.UAI %d\n", t3-t2);
|
||||||
|
fprintf(fp, "AIU2.BAU %d\n", t4-t3);
|
||||||
|
fprintf(fp, "-------------------------------- \n");
|
||||||
|
fflush(fp);
|
||||||
|
}
|
||||||
|
fflush(fp);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 2004.07.05.myevan. 궁신탄영 맵에 끼이는 문제해결
|
||||||
|
IBackground& CActorInstance::GetBackground()
|
||||||
|
{
|
||||||
|
return IBackground::Instance();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CActorInstance::SetMainInstance()
|
||||||
|
{
|
||||||
|
m_isMain=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetParalysis(bool isParalysis)
|
||||||
|
{
|
||||||
|
m_isParalysis=isParalysis;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetFaint(bool isFaint)
|
||||||
|
{
|
||||||
|
m_isFaint=isFaint;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetSleep(bool isSleep)
|
||||||
|
{
|
||||||
|
m_isSleep=isSleep;
|
||||||
|
|
||||||
|
Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetResistFallen(bool isResistFallen)
|
||||||
|
{
|
||||||
|
m_isResistFallen=isResistFallen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetReachScale(float fScale)
|
||||||
|
{
|
||||||
|
m_fReachScale=fScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
float CActorInstance::__GetReachScale()
|
||||||
|
{
|
||||||
|
return m_fReachScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
float CActorInstance::__GetAttackSpeed()
|
||||||
|
{
|
||||||
|
return m_fAtkSpd;
|
||||||
|
}
|
||||||
|
|
||||||
|
WORD CActorInstance::__GetCurrentComboType()
|
||||||
|
{
|
||||||
|
if (IsBowMode())
|
||||||
|
return 0;
|
||||||
|
if (IsHandMode())
|
||||||
|
return 0;
|
||||||
|
if (__IsMountingHorse())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return m_wcurComboType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetComboType(WORD wComboType)
|
||||||
|
{
|
||||||
|
m_wcurComboType = wComboType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetAttackSpeed(float fAtkSpd)
|
||||||
|
{
|
||||||
|
m_fAtkSpd=fAtkSpd;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetMoveSpeed(float fMovSpd)
|
||||||
|
{
|
||||||
|
if (m_fMovSpd==fMovSpd)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_fMovSpd=fMovSpd;
|
||||||
|
|
||||||
|
if (__IsMoveMotion())
|
||||||
|
{
|
||||||
|
Stop();
|
||||||
|
Move();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetFishingPosition(D3DXVECTOR3 & rv3Position)
|
||||||
|
{
|
||||||
|
m_v3FishingPosition = rv3Position;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ActorInstanceMotion.cpp 에 넣도록 하자
|
||||||
|
void CActorInstance::Move()
|
||||||
|
{
|
||||||
|
if (m_isWalking)
|
||||||
|
{
|
||||||
|
SetLoopMotion(CRaceMotionData::NAME_WALK, 0.15f, m_fMovSpd);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetLoopMotion(CRaceMotionData::NAME_RUN, 0.15f, m_fMovSpd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::Stop(float fBlendingTime)
|
||||||
|
{
|
||||||
|
__ClearMotion();
|
||||||
|
SetLoopMotion(CRaceMotionData::NAME_WAIT, fBlendingTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetOwner(DWORD dwOwnerVID)
|
||||||
|
{
|
||||||
|
m_fOwnerBaseTime=GetLocalTime();
|
||||||
|
m_dwOwnerVID=dwOwnerVID;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetActorType(UINT eType)
|
||||||
|
{
|
||||||
|
m_eActorType=eType;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT CActorInstance::GetActorType() const
|
||||||
|
{
|
||||||
|
return m_eActorType;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsHandMode()
|
||||||
|
{
|
||||||
|
if (CRaceMotionData::MODE_GENERAL==GetMotionMode())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (CRaceMotionData::MODE_HORSE==GetMotionMode())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsTwoHandMode()
|
||||||
|
{
|
||||||
|
if (CRaceMotionData::MODE_TWOHAND_SWORD==GetMotionMode())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsBowMode()
|
||||||
|
{
|
||||||
|
if (CRaceMotionData::MODE_BOW==GetMotionMode())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (CRaceMotionData::MODE_HORSE_BOW==GetMotionMode())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsPoly()
|
||||||
|
{
|
||||||
|
if (TYPE_POLY==m_eActorType)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (TYPE_PC==m_eActorType)
|
||||||
|
if (m_eRace >= MAIN_RACE_MAX_NUM)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsPC()
|
||||||
|
{
|
||||||
|
if (TYPE_PC==m_eActorType)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsNPC()
|
||||||
|
{
|
||||||
|
if (TYPE_NPC==m_eActorType)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsEnemy()
|
||||||
|
{
|
||||||
|
if (TYPE_ENEMY==m_eActorType)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsStone()
|
||||||
|
{
|
||||||
|
if (TYPE_STONE==m_eActorType)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsWarp()
|
||||||
|
{
|
||||||
|
if (TYPE_WARP==m_eActorType)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsGoto()
|
||||||
|
{
|
||||||
|
if (TYPE_GOTO==m_eActorType)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsBuilding()
|
||||||
|
{
|
||||||
|
if (TYPE_BUILDING==m_eActorType)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsDoor()
|
||||||
|
{
|
||||||
|
if (TYPE_DOOR==m_eActorType)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IsObject()
|
||||||
|
{
|
||||||
|
if (TYPE_OBJECT==m_eActorType)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::DestroySystem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::DieEnd()
|
||||||
|
{
|
||||||
|
Die();
|
||||||
|
|
||||||
|
CGraphicThingInstance::SetMotionAtEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::Die()
|
||||||
|
{
|
||||||
|
if (m_isRealDead)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (__IsMoveMotion())
|
||||||
|
Stop();
|
||||||
|
|
||||||
|
SetAdvancingRotation(GetRotation());
|
||||||
|
|
||||||
|
if (IsStone())
|
||||||
|
{
|
||||||
|
InterceptOnceMotion(CRaceMotionData::NAME_DEAD);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!__IsDieMotion())
|
||||||
|
{
|
||||||
|
InterceptOnceMotion(CRaceMotionData::NAME_DEAD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_isRealDead = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CActorInstance::IsSleep()
|
||||||
|
{
|
||||||
|
return m_isSleep;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CActorInstance::IsParalysis()
|
||||||
|
{
|
||||||
|
return m_isParalysis;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CActorInstance::IsFaint()
|
||||||
|
{
|
||||||
|
return m_isFaint;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CActorInstance::IsResistFallen()
|
||||||
|
{
|
||||||
|
return m_isResistFallen;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CActorInstance::IsMoving()
|
||||||
|
{
|
||||||
|
return __IsMoveMotion();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CActorInstance::IsWaiting()
|
||||||
|
{
|
||||||
|
return __IsWaitMotion();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CActorInstance::IsDead()
|
||||||
|
{
|
||||||
|
return m_isRealDead;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CActorInstance::IsKnockDown()
|
||||||
|
{
|
||||||
|
return __IsKnockDownMotion();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CActorInstance::IsDamage()
|
||||||
|
{
|
||||||
|
return __IsDamageMotion();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CActorInstance::IsAttacked()
|
||||||
|
{
|
||||||
|
if (IsPushing())
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
if (__IsDamageMotion())
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
if (__IsKnockDownMotion())
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
if (__IsDieMotion())
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Process
|
||||||
|
void CActorInstance::PhysicsProcess()
|
||||||
|
{
|
||||||
|
m_PhysicsObject.Update(m_fSecondElapsed);
|
||||||
|
AddMovement(m_PhysicsObject.GetXMovement(), m_PhysicsObject.GetYMovement(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::__AccumulationMovement(float fRot)
|
||||||
|
{
|
||||||
|
// NOTE - 일단은 WAIT로 미끄러짐 방지
|
||||||
|
// 추후에는 RaceMotionData가 이동되는 모션인지에 대한 Flag를 갖고 있게끔 한다. - [levites]
|
||||||
|
if (CRaceMotionData::NAME_WAIT == __GetCurrentMotionIndex())
|
||||||
|
return;
|
||||||
|
|
||||||
|
D3DXMATRIX s_matRotationZ;
|
||||||
|
D3DXMatrixRotationZ(&s_matRotationZ, D3DXToRadian(fRot));
|
||||||
|
UpdateTransform(&s_matRotationZ, GetAverageSecondElapsed());
|
||||||
|
|
||||||
|
AddMovement(s_matRotationZ._41, s_matRotationZ._42, s_matRotationZ._43);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::AccumulationMovement()
|
||||||
|
{
|
||||||
|
if (m_pkTree)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (m_pkHorse)
|
||||||
|
{
|
||||||
|
m_pkHorse->__AccumulationMovement(m_fcurRotation);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
__AccumulationMovement(m_fAdvancingRotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::TransformProcess()
|
||||||
|
{
|
||||||
|
if (!IsParalysis())
|
||||||
|
{
|
||||||
|
m_x += m_v3Movement.x;
|
||||||
|
m_y += m_v3Movement.y;
|
||||||
|
m_z += m_v3Movement.z;
|
||||||
|
}
|
||||||
|
|
||||||
|
__InitializeMovement();
|
||||||
|
|
||||||
|
SetPosition(m_x, m_y, m_z);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Process
|
||||||
|
|
||||||
|
void CActorInstance::OnUpdateCollisionData(const CStaticCollisionDataVector * pscdVector)
|
||||||
|
{
|
||||||
|
assert(pscdVector);
|
||||||
|
CStaticCollisionDataVector::const_iterator it;
|
||||||
|
for(it = pscdVector->begin();it!=pscdVector->end();++it)
|
||||||
|
{
|
||||||
|
const CStaticCollisionData & c_rColliData = *it;
|
||||||
|
const D3DXMATRIX & c_rMatrix = GetTransform();
|
||||||
|
AddCollision(&c_rColliData, &c_rMatrix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::OnUpdateHeighInstance(CAttributeInstance * pAttributeInstance)
|
||||||
|
{
|
||||||
|
assert(pAttributeInstance);
|
||||||
|
SetHeightInstance(pAttributeInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::OnGetObjectHeight(float fX, float fY, float * pfHeight)
|
||||||
|
{
|
||||||
|
if (!m_pHeightAttributeInstance)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (TYPE_BUILDING != GetType())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return m_pHeightAttributeInstance->GetHeight(fX, fY, pfHeight) == 1 ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////
|
||||||
|
// Battle
|
||||||
|
void CActorInstance::Revive()
|
||||||
|
{
|
||||||
|
m_isSleep = FALSE;
|
||||||
|
m_isParalysis = FALSE;
|
||||||
|
m_isFaint = FALSE;
|
||||||
|
m_isRealDead = FALSE;
|
||||||
|
m_isStun = FALSE;
|
||||||
|
m_isWalking = FALSE;
|
||||||
|
m_isMain = FALSE;
|
||||||
|
m_isResistFallen = FALSE;
|
||||||
|
|
||||||
|
__InitializeCollisionData();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CActorInstance::IsStun()
|
||||||
|
{
|
||||||
|
return m_isStun;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::Stun()
|
||||||
|
{
|
||||||
|
m_isStun = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetWalkMode()
|
||||||
|
{
|
||||||
|
m_isWalking = TRUE;
|
||||||
|
if (CRaceMotionData::NAME_RUN == GET_MOTION_INDEX(m_kCurMotNode.dwMotionKey))
|
||||||
|
SetLoopMotion(CRaceMotionData::NAME_WALK, 0.15f, m_fMovSpd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetRunMode()
|
||||||
|
{
|
||||||
|
m_isWalking = FALSE;
|
||||||
|
if (CRaceMotionData::NAME_WALK == GET_MOTION_INDEX(m_kCurMotNode.dwMotionKey))
|
||||||
|
SetLoopMotion(CRaceMotionData::NAME_RUN, 0.15f, m_fMovSpd);
|
||||||
|
}
|
||||||
|
|
||||||
|
MOTION_KEY CActorInstance::GetNormalAttackIndex()
|
||||||
|
{
|
||||||
|
WORD wMotionIndex;
|
||||||
|
m_pkCurRaceData->GetNormalAttackIndex(GetMotionMode(), &wMotionIndex);
|
||||||
|
|
||||||
|
return MAKE_MOTION_KEY(GetMotionMode(), wMotionIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////
|
||||||
|
// Movement
|
||||||
|
void CActorInstance::__InitializeMovement()
|
||||||
|
{
|
||||||
|
m_v3Movement.x = 0.0f;
|
||||||
|
m_v3Movement.y = 0.0f;
|
||||||
|
m_v3Movement.z = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::AddMovement(float fx, float fy, float fz)
|
||||||
|
{
|
||||||
|
m_v3Movement.x += fx;
|
||||||
|
m_v3Movement.y += fy;
|
||||||
|
m_v3Movement.z += fz;
|
||||||
|
}
|
||||||
|
|
||||||
|
const float gc_fActorSlideMoveSpeed = 5.0f;
|
||||||
|
|
||||||
|
void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pActorInstance)
|
||||||
|
{
|
||||||
|
if (m_pkHorse)
|
||||||
|
{
|
||||||
|
m_pkHorse->AdjustDynamicCollisionMovement(c_pActorInstance);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE : 기존의 Sphere Overlap됬을경우 처리가 비비기를 하면은 Penetration될 위험이 많아서 ( 실제로도 나왔고 --)
|
||||||
|
// Sphere간 Collision이 생겼을 경우 이전위치로 RollBack하는 방식으로 바꿨다.
|
||||||
|
// 단 BGObject에 대해서만.
|
||||||
|
|
||||||
|
if (isAttacking() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
UINT uActorType = c_pActorInstance->GetActorType();
|
||||||
|
if( (uActorType == TYPE_BUILDING) || (uActorType == TYPE_OBJECT) || (uActorType == TYPE_DOOR) || (uActorType == TYPE_STONE))
|
||||||
|
{
|
||||||
|
BlockMovement();
|
||||||
|
|
||||||
|
//Movement초기화
|
||||||
|
/* m_v3Movement = D3DXVECTOR3(0.f,0.f,0.f);
|
||||||
|
|
||||||
|
TCollisionPointInstanceListIterator itMain = m_BodyPointInstanceList.begin();
|
||||||
|
for (; itMain != m_BodyPointInstanceList.end(); ++itMain)
|
||||||
|
{
|
||||||
|
CDynamicSphereInstanceVector & c_rMainSphereVector = (*itMain).SphereInstanceVector;
|
||||||
|
for (DWORD i = 0; i < c_rMainSphereVector.size(); ++i)
|
||||||
|
{
|
||||||
|
CDynamicSphereInstance & c_rMainSphere = c_rMainSphereVector[i];
|
||||||
|
c_rMainSphere.v3Position =c_rMainSphere.v3LastPosition;
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
float move_length = D3DXVec3Length(&m_v3Movement);
|
||||||
|
if (move_length>gc_fActorSlideMoveSpeed)
|
||||||
|
m_v3Movement*=gc_fActorSlideMoveSpeed/move_length;
|
||||||
|
|
||||||
|
TCollisionPointInstanceListIterator itMain = m_BodyPointInstanceList.begin();
|
||||||
|
for (; itMain != m_BodyPointInstanceList.end(); ++itMain)
|
||||||
|
{
|
||||||
|
CDynamicSphereInstanceVector & c_rMainSphereVector = (*itMain).SphereInstanceVector;
|
||||||
|
for (DWORD i = 0; i < c_rMainSphereVector.size(); ++i)
|
||||||
|
{
|
||||||
|
CDynamicSphereInstance & c_rMainSphere = c_rMainSphereVector[i];
|
||||||
|
|
||||||
|
TCollisionPointInstanceList::const_iterator itOpp = c_pActorInstance->m_BodyPointInstanceList.begin();
|
||||||
|
for(;itOpp != c_pActorInstance->m_BodyPointInstanceList.end();++itOpp)
|
||||||
|
{
|
||||||
|
CSphereCollisionInstance s;
|
||||||
|
s.GetAttribute().fRadius=itOpp->SphereInstanceVector[0].fRadius;
|
||||||
|
s.GetAttribute().v3Position=itOpp->SphereInstanceVector[0].v3Position;
|
||||||
|
D3DXVECTOR3 v3Delta = s.GetCollisionMovementAdjust(c_rMainSphere);
|
||||||
|
m_v3Movement+=v3Delta;
|
||||||
|
c_rMainSphere.v3Position+=v3Delta;
|
||||||
|
|
||||||
|
if (v3Delta.x !=0.0f || v3Delta.y !=0.0f || v3Delta.z !=0.0f )
|
||||||
|
{
|
||||||
|
move_length = D3DXVec3Length(&m_v3Movement);
|
||||||
|
if (move_length>gc_fActorSlideMoveSpeed)
|
||||||
|
{
|
||||||
|
m_v3Movement*=gc_fActorSlideMoveSpeed/move_length;
|
||||||
|
c_rMainSphere.v3Position = c_rMainSphere.v3LastPosition;
|
||||||
|
c_rMainSphere.v3Position+=m_v3Movement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CActorInstance::__AdjustCollisionMovement(const CGraphicObjectInstance * c_pGraphicObjectInstance)
|
||||||
|
{
|
||||||
|
if (m_pkHorse)
|
||||||
|
{
|
||||||
|
m_pkHorse->__AdjustCollisionMovement(c_pGraphicObjectInstance);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Body는 하나임을 가정합니다.
|
||||||
|
|
||||||
|
if (m_v3Movement.x == 0.0f && m_v3Movement.y == 0.0f && m_v3Movement.z == 0.0f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
float move_length = D3DXVec3Length(&m_v3Movement);
|
||||||
|
if (move_length>gc_fActorSlideMoveSpeed)
|
||||||
|
m_v3Movement*=gc_fActorSlideMoveSpeed/move_length;
|
||||||
|
|
||||||
|
TCollisionPointInstanceListIterator itMain = m_BodyPointInstanceList.begin();
|
||||||
|
for (; itMain != m_BodyPointInstanceList.end(); ++itMain)
|
||||||
|
{
|
||||||
|
CDynamicSphereInstanceVector & c_rMainSphereVector = (*itMain).SphereInstanceVector;
|
||||||
|
for (DWORD i = 0; i < c_rMainSphereVector.size(); ++i)
|
||||||
|
{
|
||||||
|
CDynamicSphereInstance & c_rMainSphere = c_rMainSphereVector[i];
|
||||||
|
|
||||||
|
D3DXVECTOR3 v3Delta = c_pGraphicObjectInstance->GetCollisionMovementAdjust(c_rMainSphere);
|
||||||
|
m_v3Movement+=v3Delta;
|
||||||
|
c_rMainSphere.v3Position+=v3Delta;
|
||||||
|
|
||||||
|
if (v3Delta.x !=0.0f || v3Delta.y !=0.0f || v3Delta.z !=0.0f )
|
||||||
|
{
|
||||||
|
move_length = D3DXVec3Length(&m_v3Movement);
|
||||||
|
if (move_length>gc_fActorSlideMoveSpeed)
|
||||||
|
{
|
||||||
|
m_v3Movement*=gc_fActorSlideMoveSpeed/move_length;
|
||||||
|
c_rMainSphere.v3Position = c_rMainSphere.v3LastPosition;
|
||||||
|
c_rMainSphere.v3Position+=m_v3Movement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*if (c_pObjectInstance->CollisionDynamicSphere(c_rMainSphere))
|
||||||
|
{
|
||||||
|
const D3DXVECTOR3 & c_rv3Position = c_pObjectInstance->GetPosition();
|
||||||
|
//if (GetVector3Distance(c_rMainSphere.v3Position, c_rv3Position) <
|
||||||
|
// GetVector3Distance(c_rMainSphere.v3LastPosition, c_rv3Position))
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CActorInstance::IsMovement()
|
||||||
|
{
|
||||||
|
if (m_pkHorse)
|
||||||
|
if (m_pkHorse->IsMovement())
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
if (0.0f != m_v3Movement.x)
|
||||||
|
return TRUE;
|
||||||
|
if (0.0f != m_v3Movement.y)
|
||||||
|
return TRUE;
|
||||||
|
if (0.0f != m_v3Movement.z)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
float CActorInstance::GetHeight()
|
||||||
|
{
|
||||||
|
return CGraphicThingInstance::GetHeight();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::IntersectDefendingSphere()
|
||||||
|
{
|
||||||
|
for (TCollisionPointInstanceList::iterator it = m_DefendingPointInstanceList.begin(); it != m_DefendingPointInstanceList.end(); ++it)
|
||||||
|
{
|
||||||
|
CDynamicSphereInstanceVector & rSphereInstanceVector = (*it).SphereInstanceVector;
|
||||||
|
|
||||||
|
CDynamicSphereInstanceVector::iterator it2 = rSphereInstanceVector.begin();
|
||||||
|
for (; it2 != rSphereInstanceVector.end(); ++it2)
|
||||||
|
{
|
||||||
|
CDynamicSphereInstance & rInstance = *it2;
|
||||||
|
D3DXVECTOR3 v3SpherePosition = rInstance.v3Position;
|
||||||
|
float fRadius = rInstance.fRadius;
|
||||||
|
|
||||||
|
D3DXVECTOR3 v3Orig;
|
||||||
|
D3DXVECTOR3 v3Dir;
|
||||||
|
float fRange;
|
||||||
|
ms_Ray.GetStartPoint(&v3Orig);
|
||||||
|
ms_Ray.GetDirection(&v3Dir, &fRange);
|
||||||
|
|
||||||
|
D3DXVECTOR3 v3Distance = v3Orig - v3SpherePosition;
|
||||||
|
float b = D3DXVec3Dot(&v3Dir, &v3Distance);
|
||||||
|
float c = D3DXVec3Dot(&v3Distance, &v3Distance) - fRadius*fRadius;
|
||||||
|
|
||||||
|
if (b*b - c >= 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::__IsMountingHorse()
|
||||||
|
{
|
||||||
|
return NULL != m_pkHorse;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::MountHorse(CActorInstance * pkHorse)
|
||||||
|
{
|
||||||
|
m_pkHorse = pkHorse;
|
||||||
|
|
||||||
|
if (m_pkHorse)
|
||||||
|
{
|
||||||
|
m_pkHorse->SetCurPixelPosition(NEW_GetCurPixelPositionRef());
|
||||||
|
m_pkHorse->SetRotation(GetRotation());
|
||||||
|
m_pkHorse->SetAdvancingRotation(GetRotation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::__CreateTree(const char * c_szFileName)
|
||||||
|
{
|
||||||
|
__DestroyTree();
|
||||||
|
|
||||||
|
CSpeedTreeForestDirectX8& rkForest=CSpeedTreeForestDirectX8::Instance();
|
||||||
|
m_pkTree=rkForest.CreateInstance(m_x, m_y, m_z, GetCaseCRC32(c_szFileName, strlen(c_szFileName)), c_szFileName);
|
||||||
|
m_pkTree->SetPosition(m_x, m_y, m_z);
|
||||||
|
m_pkTree->UpdateBoundingSphere();
|
||||||
|
m_pkTree->UpdateCollisionData();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::__DestroyTree()
|
||||||
|
{
|
||||||
|
if (!m_pkTree)
|
||||||
|
return;
|
||||||
|
|
||||||
|
CSpeedTreeForestDirectX8::Instance().DeleteInstance(m_pkTree);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::__SetTreePosition(float fx, float fy, float fz)
|
||||||
|
{
|
||||||
|
if (!m_pkTree)
|
||||||
|
return;
|
||||||
|
if (m_x == fx && m_y == fy && m_z == fz)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_pkTree->SetPosition(fx, fy, fz);
|
||||||
|
m_pkTree->UpdateBoundingSphere();
|
||||||
|
m_pkTree->UpdateCollisionData();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::ClearAttachingEffect()
|
||||||
|
{
|
||||||
|
__ClearAttachingEffect();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::Destroy()
|
||||||
|
{
|
||||||
|
ClearFlyTargeter();
|
||||||
|
|
||||||
|
m_HitDataMap.clear();
|
||||||
|
m_MotionDeque.clear();
|
||||||
|
|
||||||
|
if (m_pAttributeInstance)
|
||||||
|
{
|
||||||
|
m_pAttributeInstance->Clear();
|
||||||
|
CAttributeInstance::Delete(m_pAttributeInstance);
|
||||||
|
m_pAttributeInstance = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
__ClearAttachingEffect();
|
||||||
|
|
||||||
|
CGraphicThingInstance::Clear();
|
||||||
|
|
||||||
|
__DestroyWeaponTrace();
|
||||||
|
__DestroyTree();
|
||||||
|
//m_PhysicsObject.SetActorInstance(NULL);
|
||||||
|
|
||||||
|
|
||||||
|
__Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::__InitializeRotationData()
|
||||||
|
{
|
||||||
|
m_fAtkDirRot = 0.0f;
|
||||||
|
m_fcurRotation = 0.0f;
|
||||||
|
m_rotBegin = 0.0f;
|
||||||
|
m_rotEnd = 0.0f;
|
||||||
|
m_rotEndTime = 0.0f;
|
||||||
|
m_rotBeginTime = 0.0f;
|
||||||
|
m_rotBlendTime = 0.0f;
|
||||||
|
m_fAdvancingRotation = 0.0f;
|
||||||
|
m_rotX = 0.0f;
|
||||||
|
m_rotY = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CActorInstance::__InitializeStateData()
|
||||||
|
{
|
||||||
|
m_bEffectInitialized = false;
|
||||||
|
|
||||||
|
m_isPreInput = FALSE;
|
||||||
|
m_isNextPreInput = FALSE;
|
||||||
|
|
||||||
|
m_isSleep = FALSE;
|
||||||
|
m_isParalysis = FALSE;
|
||||||
|
m_isFaint = FALSE;
|
||||||
|
m_isRealDead = FALSE;
|
||||||
|
m_isWalking = FALSE;
|
||||||
|
m_isMain = FALSE;
|
||||||
|
m_isStun = FALSE;
|
||||||
|
m_isHiding = FALSE;
|
||||||
|
m_isResistFallen = FALSE;
|
||||||
|
|
||||||
|
m_iRenderMode = RENDER_MODE_NORMAL;
|
||||||
|
m_fAlphaValue = 0.0f;
|
||||||
|
m_AddColor = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
|
|
||||||
|
m_dwMtrlColor=0xffffffff;
|
||||||
|
m_dwMtrlAlpha=0xff000000;
|
||||||
|
|
||||||
|
m_dwBattleHitEffectID = 0;
|
||||||
|
m_dwBattleAttachEffectID = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::__InitializeMotionData()
|
||||||
|
{
|
||||||
|
m_wcurMotionMode = CRaceMotionData::MODE_GENERAL;
|
||||||
|
m_wcurComboType = 0;
|
||||||
|
|
||||||
|
m_fReachScale=1.0f;
|
||||||
|
m_fMovSpd=1.0f;
|
||||||
|
m_fAtkSpd=1.0f;
|
||||||
|
|
||||||
|
m_fInvisibleTime = 0.0f;
|
||||||
|
|
||||||
|
m_kSplashArea.isEnableHitProcess=TRUE;
|
||||||
|
m_kSplashArea.uSkill=0;
|
||||||
|
m_kSplashArea.MotionKey=0;
|
||||||
|
m_kSplashArea.fDisappearingTime = 0.0f;
|
||||||
|
m_kSplashArea.SphereInstanceVector.clear();
|
||||||
|
m_kSplashArea.HittedInstanceMap.clear();
|
||||||
|
|
||||||
|
memset(&m_kCurMotNode, 0, sizeof(m_kCurMotNode));
|
||||||
|
|
||||||
|
__ClearCombo();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::__Initialize()
|
||||||
|
{
|
||||||
|
m_pkCurRaceMotionData=NULL;
|
||||||
|
m_pkCurRaceData=NULL;
|
||||||
|
m_pkHorse=NULL;
|
||||||
|
m_pkTree=NULL;
|
||||||
|
|
||||||
|
m_fOwnerBaseTime=0.0f;
|
||||||
|
|
||||||
|
m_eActorType = TYPE_PC;
|
||||||
|
m_eRace = 0;
|
||||||
|
|
||||||
|
m_eShape = 0;
|
||||||
|
m_eHair = 0;
|
||||||
|
|
||||||
|
m_dwSelfVID = 0;
|
||||||
|
m_dwOwnerVID = 0;
|
||||||
|
|
||||||
|
m_pkEventHandler = NULL;
|
||||||
|
|
||||||
|
m_PhysicsObject.Initialize();
|
||||||
|
|
||||||
|
m_pAttributeInstance = NULL;
|
||||||
|
|
||||||
|
m_pFlyEventHandler = 0;
|
||||||
|
|
||||||
|
m_v3FishingPosition = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
|
||||||
|
m_iFishingEffectID = -1;
|
||||||
|
|
||||||
|
m_pkHorse = NULL;
|
||||||
|
|
||||||
|
__InitializePositionData();
|
||||||
|
__InitializeRotationData();
|
||||||
|
__InitializeMotionData();
|
||||||
|
__InitializeStateData();
|
||||||
|
__InitializeCollisionData();
|
||||||
|
|
||||||
|
__BlendAlpha_Initialize();
|
||||||
|
|
||||||
|
ClearFlyTargeter();
|
||||||
|
}
|
||||||
|
|
||||||
|
CActorInstance::CActorInstance()
|
||||||
|
{
|
||||||
|
__Initialize();
|
||||||
|
m_PhysicsObject.SetActorInstance(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
CActorInstance::~CActorInstance()
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
@@ -0,0 +1,358 @@
|
|||||||
|
#include "StdAfx.h"
|
||||||
|
#include "ActorInstance.h"
|
||||||
|
#include "RaceManager.h"
|
||||||
|
#include "ItemManager.h"
|
||||||
|
#include "RaceData.h"
|
||||||
|
|
||||||
|
#include "../EterLib/ResourceManager.h"
|
||||||
|
#include "../EterGrnLib/Util.h"
|
||||||
|
|
||||||
|
DWORD CActorInstance::GetVirtualID()
|
||||||
|
{
|
||||||
|
return m_dwSelfVID;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetVirtualID(DWORD dwVID)
|
||||||
|
{
|
||||||
|
m_dwSelfVID=dwVID;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::UpdateAttribute()
|
||||||
|
{
|
||||||
|
if (!m_pAttributeInstance)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!m_bNeedUpdateCollision)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_bNeedUpdateCollision = FALSE;
|
||||||
|
|
||||||
|
const CStaticCollisionDataVector & c_rkVec_ColliData = m_pAttributeInstance->GetObjectPointer()->GetCollisionDataVector();
|
||||||
|
UpdateCollisionData(&c_rkVec_ColliData);
|
||||||
|
|
||||||
|
m_pAttributeInstance->RefreshObject(GetTransform());
|
||||||
|
UpdateHeightInstance(m_pAttributeInstance);
|
||||||
|
|
||||||
|
//BOOL isHeightData = m_pAttributeInstance->IsEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::__CreateAttributeInstance(CAttributeData * pData)
|
||||||
|
{
|
||||||
|
m_pAttributeInstance = CAttributeInstance::New();
|
||||||
|
m_pAttributeInstance->Clear();
|
||||||
|
m_pAttributeInstance->SetObjectPointer(pData);
|
||||||
|
if (pData->IsEmpty())
|
||||||
|
{
|
||||||
|
m_pAttributeInstance->Clear();
|
||||||
|
CAttributeInstance::Delete(m_pAttributeInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD CActorInstance::GetRace()
|
||||||
|
{
|
||||||
|
return m_eRace;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CActorInstance::SetRace(DWORD eRace)
|
||||||
|
{
|
||||||
|
CRaceData * pRaceData;
|
||||||
|
if (!CRaceManager::Instance().GetRaceDataPointer(eRace, &pRaceData))
|
||||||
|
{
|
||||||
|
m_eRace=0;
|
||||||
|
m_pkCurRaceData=NULL;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_eRace=eRace;
|
||||||
|
m_pkCurRaceData = pRaceData;
|
||||||
|
|
||||||
|
CAttributeData * pAttributeData = pRaceData->GetAttributeDataPtr();
|
||||||
|
if (pAttributeData)
|
||||||
|
{
|
||||||
|
__CreateAttributeInstance(pAttributeData);
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(m_adwPartItemID, 0, sizeof(m_adwPartItemID));
|
||||||
|
|
||||||
|
// Setup Graphic ResourceData
|
||||||
|
__ClearAttachingEffect();
|
||||||
|
|
||||||
|
CGraphicThingInstance::Clear();
|
||||||
|
|
||||||
|
//NOTE : PC만 Part별로 다 생성하게 해준다.
|
||||||
|
if( IsPC())
|
||||||
|
{
|
||||||
|
CGraphicThingInstance::ReserveModelThing(CRaceData::PART_MAX_NUM);
|
||||||
|
CGraphicThingInstance::ReserveModelInstance(CRaceData::PART_MAX_NUM);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CGraphicThingInstance::ReserveModelThing(1);
|
||||||
|
CGraphicThingInstance::ReserveModelInstance(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CRaceData::TMotionModeDataIterator itor;
|
||||||
|
|
||||||
|
if (pRaceData->CreateMotionModeIterator(itor))
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
WORD wMotionMode = itor->first;
|
||||||
|
CRaceData::TMotionModeData * pMotionModeData = itor->second;
|
||||||
|
|
||||||
|
CRaceData::TMotionVectorMap::iterator itorMotion = pMotionModeData->MotionVectorMap.begin();
|
||||||
|
for (; itorMotion != pMotionModeData->MotionVectorMap.end(); ++itorMotion)
|
||||||
|
{
|
||||||
|
WORD wMotionIndex = itorMotion->first;
|
||||||
|
const CRaceData::TMotionVector & c_rMotionVector = itorMotion->second;
|
||||||
|
CRaceData::TMotionVector::const_iterator it;
|
||||||
|
DWORD i;
|
||||||
|
for (i = 0, it = c_rMotionVector.begin(); it != c_rMotionVector.end(); ++i, ++it)
|
||||||
|
{
|
||||||
|
DWORD dwMotionKey = MAKE_RANDOM_MOTION_KEY(wMotionMode, wMotionIndex, i);
|
||||||
|
CGraphicThingInstance::RegisterMotionThing(dwMotionKey, it->pMotion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (pRaceData->NextMotionModeIterator(itor));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetHair(DWORD eHair)
|
||||||
|
{
|
||||||
|
m_eHair = eHair;
|
||||||
|
|
||||||
|
CRaceData * pRaceData;
|
||||||
|
|
||||||
|
if (!CRaceManager::Instance().GetRaceDataPointer(m_eRace, &pRaceData))
|
||||||
|
return;
|
||||||
|
|
||||||
|
CRaceData::SHair* pkHair=pRaceData->FindHair(eHair);
|
||||||
|
if (pkHair)
|
||||||
|
{
|
||||||
|
if (!pkHair->m_stModelFileName.empty())
|
||||||
|
{
|
||||||
|
CGraphicThing * pkHairThing = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(pkHair->m_stModelFileName.c_str());
|
||||||
|
RegisterModelThing(CRaceData::PART_HAIR, pkHairThing);
|
||||||
|
SetModelInstance(CRaceData::PART_HAIR, CRaceData::PART_HAIR, 0, CRaceData::PART_MAIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::vector<CRaceData::SSkin>& c_rkVct_kSkin = pkHair->m_kVct_kSkin;
|
||||||
|
std::vector<CRaceData::SSkin>::const_iterator i;
|
||||||
|
for (i = c_rkVct_kSkin.begin(); i != c_rkVct_kSkin.end(); ++i)
|
||||||
|
{
|
||||||
|
const CRaceData::SSkin& c_rkSkinItem = *i;
|
||||||
|
|
||||||
|
CResource * pkRes = CResourceManager::Instance().GetResourcePointer(c_rkSkinItem.m_stDstFileName.c_str());
|
||||||
|
|
||||||
|
if (pkRes)
|
||||||
|
SetMaterialImagePointer(CRaceData::PART_HAIR, c_rkSkinItem.m_stSrcFileName.c_str(), static_cast<CGraphicImage*>(pkRes));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void CActorInstance::SetShape(DWORD eShape, float fSpecular)
|
||||||
|
{
|
||||||
|
m_eShape = eShape;
|
||||||
|
|
||||||
|
CRaceData * pRaceData;
|
||||||
|
if (!CRaceManager::Instance().GetRaceDataPointer(m_eRace, &pRaceData))
|
||||||
|
return;
|
||||||
|
|
||||||
|
CRaceData::SShape* pkShape=pRaceData->FindShape(eShape);
|
||||||
|
if (pkShape)
|
||||||
|
{
|
||||||
|
CResourceManager& rkResMgr=CResourceManager::Instance();
|
||||||
|
|
||||||
|
if (pkShape->m_stModelFileName.empty())
|
||||||
|
{
|
||||||
|
CGraphicThing* pModelThing = pRaceData->GetBaseModelThing();
|
||||||
|
RegisterModelThing(0, pModelThing);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CGraphicThing* pModelThing = (CGraphicThing *)rkResMgr.GetResourcePointer(pkShape->m_stModelFileName.c_str());
|
||||||
|
RegisterModelThing(0, pModelThing);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::string stLODModelFileName;
|
||||||
|
|
||||||
|
char szLODModelFileNameEnd[256];
|
||||||
|
for (UINT uLODIndex=1; uLODIndex<=3; ++uLODIndex)
|
||||||
|
{
|
||||||
|
sprintf(szLODModelFileNameEnd, "_lod_%.2d.gr2", uLODIndex);
|
||||||
|
stLODModelFileName = CFileNameHelper::NoExtension(pkShape->m_stModelFileName) + szLODModelFileNameEnd;
|
||||||
|
if (!rkResMgr.IsFileExist(stLODModelFileName.c_str()))
|
||||||
|
break;
|
||||||
|
|
||||||
|
CGraphicThing* pLODModelThing = (CGraphicThing *)rkResMgr.GetResourcePointer(stLODModelFileName.c_str());
|
||||||
|
if (!pLODModelThing)
|
||||||
|
break;
|
||||||
|
|
||||||
|
RegisterLODThing(0, pLODModelThing);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SetModelInstance(0, 0, 0);
|
||||||
|
|
||||||
|
const std::vector<CRaceData::SSkin>& c_rkVct_kSkin = pkShape->m_kVct_kSkin;
|
||||||
|
std::vector<CRaceData::SSkin>::const_iterator i;
|
||||||
|
for (i = c_rkVct_kSkin.begin(); i != c_rkVct_kSkin.end(); ++i)
|
||||||
|
{
|
||||||
|
const CRaceData::SSkin& c_rkSkinItem = *i;
|
||||||
|
|
||||||
|
CResource * pkRes = CResourceManager::Instance().GetResourcePointer(c_rkSkinItem.m_stDstFileName.c_str());
|
||||||
|
|
||||||
|
if (pkRes)
|
||||||
|
{
|
||||||
|
if (fSpecular > 0.0f)
|
||||||
|
{
|
||||||
|
SMaterialData kMaterialData;
|
||||||
|
kMaterialData.pImage = static_cast<CGraphicImage*>(pkRes);
|
||||||
|
kMaterialData.isSpecularEnable = TRUE;
|
||||||
|
kMaterialData.fSpecularPower = fSpecular;
|
||||||
|
kMaterialData.bSphereMapIndex = 0;
|
||||||
|
SetMaterialData(c_rkSkinItem.m_ePart, c_rkSkinItem.m_stSrcFileName.c_str(), kMaterialData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetMaterialImagePointer(c_rkSkinItem.m_ePart, c_rkSkinItem.m_stSrcFileName.c_str(), static_cast<CGraphicImage*>(pkRes));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pRaceData->IsTree())
|
||||||
|
{
|
||||||
|
__CreateTree(pRaceData->GetTreeFileName());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CGraphicThing* pModelThing = pRaceData->GetBaseModelThing();
|
||||||
|
RegisterModelThing(0, pModelThing);
|
||||||
|
|
||||||
|
CGraphicThing* pLODModelThing = pRaceData->GetLODModelThing();
|
||||||
|
RegisterLODThing(0, pLODModelThing);
|
||||||
|
|
||||||
|
SetModelInstance(0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attaching Objects
|
||||||
|
for (DWORD i = 0; i < pRaceData->GetAttachingDataCount(); ++i)
|
||||||
|
{
|
||||||
|
const NRaceData::TAttachingData * c_pAttachingData;
|
||||||
|
if (!pRaceData->GetAttachingDataPointer(i, &c_pAttachingData))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
switch (c_pAttachingData->dwType)
|
||||||
|
{
|
||||||
|
case NRaceData::ATTACHING_DATA_TYPE_EFFECT:
|
||||||
|
if (c_pAttachingData->isAttaching)
|
||||||
|
{
|
||||||
|
AttachEffectByName(0, c_pAttachingData->strAttachingBoneName.c_str(), c_pAttachingData->pEffectData->strFileName.c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AttachEffectByName(0, 0, c_pAttachingData->pEffectData->strFileName.c_str());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::ChangeMaterial(const char * c_szFileName)
|
||||||
|
{
|
||||||
|
CRaceData * pRaceData;
|
||||||
|
if (!CRaceManager::Instance().GetRaceDataPointer(m_eRace, &pRaceData))
|
||||||
|
return;
|
||||||
|
|
||||||
|
CRaceData::SShape* pkShape=pRaceData->FindShape(m_eShape);
|
||||||
|
if (!pkShape)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const std::vector<CRaceData::SSkin>& c_rkVct_kSkin = pkShape->m_kVct_kSkin;
|
||||||
|
if (c_rkVct_kSkin.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
std::vector<CRaceData::SSkin>::const_iterator i = c_rkVct_kSkin.begin();
|
||||||
|
const CRaceData::SSkin& c_rkSkinItem = *i;
|
||||||
|
|
||||||
|
std::string dstFileName = "d:/ymir work/npc/guild_symbol/guild_symbol.dds";
|
||||||
|
dstFileName = c_szFileName;
|
||||||
|
|
||||||
|
CResource * pkRes = CResourceManager::Instance().GetResourcePointer(dstFileName.c_str());
|
||||||
|
if (!pkRes)
|
||||||
|
return;
|
||||||
|
|
||||||
|
SetMaterialImagePointer(c_rkSkinItem.m_ePart, c_rkSkinItem.m_stSrcFileName.c_str(), static_cast<CGraphicImage*>(pkRes));
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
void CActorInstance::SetPart(DWORD dwPartIndex, DWORD dwItemID)
|
||||||
|
{
|
||||||
|
if (dwPartIndex>=CRaceData::PART_MAX_NUM)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!m_pkCurRaceData)
|
||||||
|
{
|
||||||
|
assert(m_pkCurRaceData);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CItemData * pItemData;
|
||||||
|
if (!CItemManager::Instance().GetItemDataPointer(dwItemID, &pItemData))
|
||||||
|
return;
|
||||||
|
|
||||||
|
RegisterModelThing(dwPartIndex, pItemData->GetModelThing());
|
||||||
|
for (DWORD i = 0; i < pItemData->GetLODModelThingCount(); ++i)
|
||||||
|
{
|
||||||
|
CGraphicThing * pThing;
|
||||||
|
if (!pItemData->GetLODModelThingPointer(i, &pThing))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
RegisterLODThing(dwPartIndex, pThing);
|
||||||
|
}
|
||||||
|
SetModelInstance(dwPartIndex, dwPartIndex, 0);
|
||||||
|
|
||||||
|
m_adwPartItemID[dwPartIndex] = dwItemID;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
DWORD CActorInstance::GetPartItemID(DWORD dwPartIndex)
|
||||||
|
{
|
||||||
|
if (dwPartIndex>=CRaceData::PART_MAX_NUM)
|
||||||
|
{
|
||||||
|
TraceError("CActorInstance::GetPartIndex(dwPartIndex=%d/CRaceData::PART_MAX_NUM=%d)", dwPartIndex, CRaceData::PART_MAX_NUM);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_adwPartItemID[dwPartIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetSpecularInfo(BOOL bEnable, int iPart, float fAlpha)
|
||||||
|
{
|
||||||
|
CRaceData * pkRaceData;
|
||||||
|
if (!CRaceManager::Instance().GetRaceDataPointer(m_eRace, &pkRaceData))
|
||||||
|
return;
|
||||||
|
|
||||||
|
CRaceData::SShape * pkShape = pkRaceData->FindShape(m_eShape);
|
||||||
|
if (pkShape->m_kVct_kSkin.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
std::string filename = pkShape->m_kVct_kSkin[0].m_stSrcFileName.c_str();
|
||||||
|
CFileNameHelper::ChangeDosPath(filename);
|
||||||
|
|
||||||
|
CGraphicThingInstance::SetSpecularInfo(iPart, filename.c_str(), bEnable, fAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CActorInstance::SetSpecularInfoForce(BOOL bEnable, int iPart, float fAlpha)
|
||||||
|
{
|
||||||
|
CGraphicThingInstance::SetSpecularInfo(iPart, NULL, bEnable, fAlpha);
|
||||||
|
}
|
||||||
@@ -0,0 +1,598 @@
|
|||||||
|
#include "StdAfx.h"
|
||||||
|
#include "../EterLib/ResourceManager.h"
|
||||||
|
#include "../EterLib/AttributeInstance.h"
|
||||||
|
#include "../EterBase/Utils.h"
|
||||||
|
#include "RaceData.h"
|
||||||
|
#include "RaceMotionData.h"
|
||||||
|
#include "../EterBase/Filename.h"
|
||||||
|
|
||||||
|
CDynamicPool<CRaceData> CRaceData::ms_kPool;
|
||||||
|
CDynamicPool<CRaceData::TMotionModeData> CRaceData::ms_MotionModeDataPool;
|
||||||
|
|
||||||
|
const std::string& CRaceData::GetSmokeBone()
|
||||||
|
{
|
||||||
|
return m_strSmokeBoneName;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD CRaceData::GetSmokeEffectID(UINT eSmoke)
|
||||||
|
{
|
||||||
|
if(eSmoke>=SMOKE_NUM)
|
||||||
|
{
|
||||||
|
TraceError("CRaceData::GetSmokeEffectID(eSmoke=%d)", eSmoke);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_adwSmokeEffectID[eSmoke];
|
||||||
|
}
|
||||||
|
|
||||||
|
CRaceData::SHair* CRaceData::FindHair(UINT eHair)
|
||||||
|
{
|
||||||
|
std::map<DWORD, SHair>::iterator f=m_kMap_dwHairKey_kHair.find(eHair);
|
||||||
|
if (m_kMap_dwHairKey_kHair.end()==f)
|
||||||
|
{
|
||||||
|
if (eHair != 0)
|
||||||
|
TraceError("Hair number %d is not exist.",eHair);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return &f->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::SetHairSkin(UINT eHair, UINT ePart, const char * c_szModelFileName, const char* c_szSrcFileName, const char* c_szDstFileName)
|
||||||
|
{
|
||||||
|
SSkin kSkin;
|
||||||
|
kSkin.m_ePart=ePart;
|
||||||
|
kSkin.m_stSrcFileName=c_szSrcFileName;
|
||||||
|
kSkin.m_stDstFileName=c_szDstFileName;
|
||||||
|
|
||||||
|
CFileNameHelper::ChangeDosPath(kSkin.m_stSrcFileName);
|
||||||
|
m_kMap_dwHairKey_kHair[eHair].m_kVct_kSkin.push_back(kSkin);
|
||||||
|
m_kMap_dwHairKey_kHair[eHair].m_stModelFileName = c_szModelFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
CRaceData::SShape* CRaceData::FindShape(UINT eShape)
|
||||||
|
{
|
||||||
|
std::map<DWORD, SShape>::iterator f=m_kMap_dwShapeKey_kShape.find(eShape);
|
||||||
|
if (m_kMap_dwShapeKey_kShape.end()==f)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return &f->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::SetShapeModel(UINT eShape, const char* c_szModelFileName)
|
||||||
|
{
|
||||||
|
m_kMap_dwShapeKey_kShape[eShape].m_stModelFileName=c_szModelFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::AppendShapeSkin(UINT eShape, UINT ePart, const char* c_szSrcFileName, const char* c_szDstFileName)
|
||||||
|
{
|
||||||
|
SSkin kSkin;
|
||||||
|
kSkin.m_ePart=ePart;
|
||||||
|
kSkin.m_stSrcFileName=c_szSrcFileName;
|
||||||
|
kSkin.m_stDstFileName=c_szDstFileName;
|
||||||
|
|
||||||
|
CFileNameHelper::ChangeDosPath(kSkin.m_stSrcFileName);
|
||||||
|
m_kMap_dwShapeKey_kShape[eShape].m_kVct_kSkin.push_back(kSkin);
|
||||||
|
}
|
||||||
|
|
||||||
|
CRaceData* CRaceData::New()
|
||||||
|
{
|
||||||
|
return ms_kPool.Alloc();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::Delete(CRaceData* pkRaceData)
|
||||||
|
{
|
||||||
|
pkRaceData->Destroy();
|
||||||
|
ms_kPool.Free(pkRaceData);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::CreateSystem(UINT uCapacity, UINT uMotModeCapacity)
|
||||||
|
{
|
||||||
|
ms_MotionModeDataPool.Create(uMotModeCapacity);
|
||||||
|
ms_kPool.Create(uCapacity);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::DestroySystem()
|
||||||
|
{
|
||||||
|
ms_kPool.Destroy();
|
||||||
|
ms_MotionModeDataPool.Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::CreateMotionModeIterator(TMotionModeDataIterator & itor)
|
||||||
|
{
|
||||||
|
if (m_pMotionModeDataMap.empty())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
itor = m_pMotionModeDataMap.begin();
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
BOOL CRaceData::NextMotionModeIterator(TMotionModeDataIterator & itor)
|
||||||
|
{
|
||||||
|
++itor;
|
||||||
|
|
||||||
|
return m_pMotionModeDataMap.end() != itor;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::GetMotionKey(WORD wMotionModeIndex, WORD wMotionIndex, MOTION_KEY * pMotionKey)
|
||||||
|
{
|
||||||
|
TMotionModeData * pMotionModeData;
|
||||||
|
if (!GetMotionModeDataPointer(wMotionModeIndex, &pMotionModeData))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (pMotionModeData->MotionVectorMap.end() == pMotionModeData->MotionVectorMap.find(wMotionIndex))
|
||||||
|
{
|
||||||
|
WORD wGeneralMode=CRaceMotionData::MODE_GENERAL;
|
||||||
|
|
||||||
|
switch(wMotionModeIndex)
|
||||||
|
{
|
||||||
|
case CRaceMotionData::MODE_HORSE_ONEHAND_SWORD:
|
||||||
|
case CRaceMotionData::MODE_HORSE_TWOHAND_SWORD:
|
||||||
|
case CRaceMotionData::MODE_HORSE_DUALHAND_SWORD:
|
||||||
|
case CRaceMotionData::MODE_HORSE_FAN:
|
||||||
|
case CRaceMotionData::MODE_HORSE_BELL:
|
||||||
|
case CRaceMotionData::MODE_HORSE_BOW:
|
||||||
|
wGeneralMode=CRaceMotionData::MODE_HORSE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
wGeneralMode=CRaceMotionData::MODE_GENERAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
TMotionModeData * pMotionModeGeneralData;
|
||||||
|
if (!GetMotionModeDataPointer(wGeneralMode, &pMotionModeGeneralData))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (pMotionModeGeneralData->MotionVectorMap.end() == pMotionModeGeneralData->MotionVectorMap.find(wMotionIndex))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
*pMotionKey = MAKE_MOTION_KEY(wGeneralMode, wMotionIndex);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*pMotionKey = MAKE_MOTION_KEY(wMotionModeIndex, wMotionIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::GetMotionModeDataPointer(WORD wMotionMode, TMotionModeData ** ppMotionModeData)
|
||||||
|
{
|
||||||
|
TMotionModeDataIterator itor = m_pMotionModeDataMap.find(wMotionMode);
|
||||||
|
if (itor == m_pMotionModeDataMap.end())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
*ppMotionModeData = itor->second;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::GetModelDataPointer(DWORD dwModelIndex, const TModelData ** c_ppModelData)
|
||||||
|
{
|
||||||
|
TModelDataMapIterator itor = m_ModelDataMap.find(dwModelIndex);
|
||||||
|
if (m_ModelDataMap.end() == itor)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
*c_ppModelData = &itor->second;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::GetMotionVectorPointer(WORD wMotionMode, WORD wMotionIndex, TMotionVector ** ppMotionVector)
|
||||||
|
{
|
||||||
|
TMotionModeData * pMotionModeData;
|
||||||
|
if (!GetMotionModeDataPointer(wMotionMode, &pMotionModeData))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
TMotionVectorMap::iterator itor = pMotionModeData->MotionVectorMap.find(wMotionIndex);
|
||||||
|
if (pMotionModeData->MotionVectorMap.end() == itor)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
*ppMotionVector = &itor->second;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::GetMotionDataPointer(WORD wMotionMode, WORD wMotionIndex, WORD wMotionSubIndex, CRaceMotionData ** c_ppMotionData)
|
||||||
|
{
|
||||||
|
const TMotionVector * c_pMotionVector;
|
||||||
|
if (!GetMotionVectorPointer(wMotionMode, wMotionIndex, &c_pMotionVector))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (wMotionSubIndex >= c_pMotionVector->size())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
const TMotion & c_rMotion = c_pMotionVector->at(wMotionSubIndex);
|
||||||
|
|
||||||
|
if (!c_rMotion.pMotionData)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
*c_ppMotionData = c_rMotion.pMotionData;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::GetMotionDataPointer(DWORD dwMotionKey, CRaceMotionData ** c_ppMotionData)
|
||||||
|
{
|
||||||
|
return GetMotionDataPointer(GET_MOTION_MODE(dwMotionKey), GET_MOTION_INDEX(dwMotionKey), GET_MOTION_SUB_INDEX(dwMotionKey), c_ppMotionData);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::GetMotionVectorPointer(WORD wMotionMode, WORD wMotionIndex, const TMotionVector ** c_ppMotionVector)
|
||||||
|
{
|
||||||
|
TMotionVector * pMotionVector;
|
||||||
|
if (!GetMotionVectorPointer(wMotionMode, wMotionIndex, &pMotionVector))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
*c_ppMotionVector = pMotionVector;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD CRaceData::GetAttachingDataCount()
|
||||||
|
{
|
||||||
|
return m_AttachingDataVector.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::GetAttachingDataPointer(DWORD dwIndex, const NRaceData::TAttachingData ** c_ppAttachingData)
|
||||||
|
{
|
||||||
|
if (dwIndex >= GetAttachingDataCount())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
*c_ppAttachingData = &m_AttachingDataVector[dwIndex];
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::GetCollisionDataPointer(DWORD dwIndex, const NRaceData::TAttachingData ** c_ppAttachingData)
|
||||||
|
{
|
||||||
|
if (dwIndex >= GetAttachingDataCount())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (NRaceData::ATTACHING_DATA_TYPE_COLLISION_DATA != m_AttachingDataVector[dwIndex].dwType)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
*c_ppAttachingData = &m_AttachingDataVector[dwIndex];
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::GetBodyCollisionDataPointer(const NRaceData::TAttachingData ** c_ppAttachingData)
|
||||||
|
{
|
||||||
|
for (DWORD i = 0; i < m_AttachingDataVector.size(); ++i)
|
||||||
|
{
|
||||||
|
const NRaceData::TAttachingData * pAttachingData = &m_AttachingDataVector[i];
|
||||||
|
|
||||||
|
if (NRaceData::ATTACHING_DATA_TYPE_COLLISION_DATA == pAttachingData->dwType)
|
||||||
|
if (NRaceData::COLLISION_TYPE_BODY == pAttachingData->pCollisionData->iCollisionType)
|
||||||
|
{
|
||||||
|
*c_ppAttachingData = pAttachingData;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::SetRace(DWORD dwRaceIndex)
|
||||||
|
{
|
||||||
|
m_dwRaceIndex = dwRaceIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::RegisterAttachingBoneName(DWORD dwPartIndex, const char * c_szBoneName)
|
||||||
|
{
|
||||||
|
m_AttachingBoneNameMap.insert(TAttachingBoneNameMap::value_type(dwPartIndex, c_szBoneName));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::RegisterMotionMode(WORD wMotionModeIndex)
|
||||||
|
{
|
||||||
|
TMotionModeData * pMotionModeData = ms_MotionModeDataPool.Alloc();
|
||||||
|
pMotionModeData->wMotionModeIndex = wMotionModeIndex;
|
||||||
|
pMotionModeData->MotionVectorMap.clear();
|
||||||
|
m_pMotionModeDataMap.insert(TMotionModeDataMap::value_type(wMotionModeIndex, pMotionModeData));
|
||||||
|
}
|
||||||
|
|
||||||
|
CGraphicThing* CRaceData::NEW_RegisterMotion(CRaceMotionData* pkMotionData, WORD wMotionModeIndex, WORD wMotionIndex, const char * c_szFileName, BYTE byPercentage)
|
||||||
|
{
|
||||||
|
CGraphicThing * pMotionThing = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(c_szFileName);
|
||||||
|
|
||||||
|
TMotionModeData * pMotionModeData;
|
||||||
|
if (!GetMotionModeDataPointer(wMotionModeIndex, &pMotionModeData))
|
||||||
|
{
|
||||||
|
AssertLog("Failed getting motion mode data!");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
TMotion kMotion;
|
||||||
|
kMotion.byPercentage = byPercentage;
|
||||||
|
kMotion.pMotion = pMotionThing;
|
||||||
|
kMotion.pMotionData = pkMotionData;
|
||||||
|
pMotionModeData->MotionVectorMap[wMotionIndex].push_back(kMotion);
|
||||||
|
|
||||||
|
return pMotionThing;
|
||||||
|
}
|
||||||
|
|
||||||
|
CGraphicThing* CRaceData::RegisterMotionData(WORD wMotionMode, WORD wMotionIndex, const char * c_szFileName, BYTE byPercentage)
|
||||||
|
{
|
||||||
|
CRaceMotionData * pRaceMotionData = CRaceMotionData::New();
|
||||||
|
if (!pRaceMotionData->LoadMotionData(c_szFileName))
|
||||||
|
{
|
||||||
|
TraceError("CRaceData::RegisterMotionData - LoadMotionData(c_szFileName=%s) ERROR", c_szFileName);
|
||||||
|
CRaceMotionData::Delete(pRaceMotionData);
|
||||||
|
pRaceMotionData = NULL;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2004. 3. 15. myevan. 원래는 모션내 인덱스 정보가 있어야 한다.
|
||||||
|
pRaceMotionData->SetName(wMotionIndex);
|
||||||
|
|
||||||
|
/////
|
||||||
|
|
||||||
|
// FIXME : 이미 GR2가 로드 되어 있을 경우에는 어떻게 해야 하는가?
|
||||||
|
// 현재는 똑같은 것이 하나 더 추가 되어 버린다. - [levites]
|
||||||
|
|
||||||
|
return NEW_RegisterMotion(pRaceMotionData, wMotionMode, wMotionIndex, pRaceMotionData->GetMotionFileName(), byPercentage);
|
||||||
|
|
||||||
|
// 2004.09.03.myevan.새로운함수로 대처
|
||||||
|
//TMotion Motion;
|
||||||
|
//Motion.byPercentage = byPercentage;
|
||||||
|
//Motion.pMotion = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(pRaceMotionData->GetMotionFileName());
|
||||||
|
//Motion.pMotionData = pRaceMotionData;
|
||||||
|
//__OLD_RegisterMotion(wMotionMode, wMotionIndex, Motion);
|
||||||
|
//return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CRaceData::OLD_RegisterMotion(WORD wMotionModeIndex, WORD wMotionIndex, const char * c_szFileName, BYTE byPercentage)
|
||||||
|
{
|
||||||
|
CGraphicThing * pThing = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(c_szFileName);
|
||||||
|
|
||||||
|
TMotion Motion;
|
||||||
|
Motion.byPercentage = byPercentage;
|
||||||
|
Motion.pMotion = pThing;
|
||||||
|
Motion.pMotionData = NULL;
|
||||||
|
__OLD_RegisterMotion(wMotionModeIndex, wMotionIndex, Motion);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::__OLD_RegisterMotion(WORD wMotionMode, WORD wMotionIndex, const TMotion & rMotion)
|
||||||
|
{
|
||||||
|
TMotionModeData * pMotionModeData;
|
||||||
|
if (!GetMotionModeDataPointer(wMotionMode, &pMotionModeData))
|
||||||
|
{
|
||||||
|
AssertLog("Failed getting motion mode data!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TMotionVectorMap::iterator itor = pMotionModeData->MotionVectorMap.find(wMotionIndex);
|
||||||
|
if (pMotionModeData->MotionVectorMap.end() == itor)
|
||||||
|
{
|
||||||
|
TMotionVector MotionVector;
|
||||||
|
MotionVector.push_back(rMotion);
|
||||||
|
|
||||||
|
pMotionModeData->MotionVectorMap.insert(TMotionVectorMap::value_type(wMotionIndex, MotionVector));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TMotionVector & rMotionVector = itor->second;
|
||||||
|
rMotionVector.push_back(rMotion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CRaceData::SetMotionRandomWeight(WORD wMotionModeIndex, WORD wMotionIndex, WORD wMotionSubIndex, BYTE byPercentage)
|
||||||
|
{
|
||||||
|
TMotionModeData * pMotionModeData;
|
||||||
|
|
||||||
|
if (!GetMotionModeDataPointer(wMotionModeIndex, &pMotionModeData))
|
||||||
|
{
|
||||||
|
//AssertLog("Failed getting motion mode data!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
TMotionVectorMap::iterator itor = pMotionModeData->MotionVectorMap.find(wMotionIndex);
|
||||||
|
|
||||||
|
if (pMotionModeData->MotionVectorMap.end() != itor)
|
||||||
|
{
|
||||||
|
TMotionVector & rMotionVector = itor->second;
|
||||||
|
if (wMotionSubIndex < rMotionVector.size())
|
||||||
|
{
|
||||||
|
rMotionVector[wMotionSubIndex].byPercentage = byPercentage;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TraceError("CRaceData::SetMotionRandomWeight(wMotionModeIndex=%d, wMotionIndex=%d, wMotionSubIndex=%d, byPercentage=%d) - Find Motion(wMotionIndex=%d) FAILED",
|
||||||
|
wMotionModeIndex, wMotionIndex, wMotionSubIndex, byPercentage, wMotionModeIndex);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::RegisterNormalAttack(WORD wMotionModeIndex, WORD wMotionIndex)
|
||||||
|
{
|
||||||
|
m_NormalAttackIndexMap.insert(TNormalAttackIndexMap::value_type(wMotionModeIndex, wMotionIndex));
|
||||||
|
}
|
||||||
|
BOOL CRaceData::GetNormalAttackIndex(WORD wMotionModeIndex, WORD * pwMotionIndex)
|
||||||
|
{
|
||||||
|
TNormalAttackIndexMap::iterator itor = m_NormalAttackIndexMap.find(wMotionModeIndex);
|
||||||
|
|
||||||
|
if (m_NormalAttackIndexMap.end() == itor)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
*pwMotionIndex = itor->second;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::ReserveComboAttack(WORD wMotionModeIndex, WORD wComboType, DWORD dwComboCount)
|
||||||
|
{
|
||||||
|
TComboData ComboData;
|
||||||
|
ComboData.ComboIndexVector.clear();
|
||||||
|
ComboData.ComboIndexVector.resize(dwComboCount);
|
||||||
|
m_ComboAttackDataMap.insert(TComboAttackDataMap::value_type(MAKE_COMBO_KEY(wMotionModeIndex, wComboType), ComboData));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::RegisterComboAttack(WORD wMotionModeIndex, WORD wComboType, DWORD dwComboIndex, WORD wMotionIndex)
|
||||||
|
{
|
||||||
|
TComboAttackDataIterator itor = m_ComboAttackDataMap.find(MAKE_COMBO_KEY(wMotionModeIndex, wComboType));
|
||||||
|
if (m_ComboAttackDataMap.end() == itor)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TComboIndexVector & rComboIndexVector = itor->second.ComboIndexVector;
|
||||||
|
if (dwComboIndex >= rComboIndexVector.size())
|
||||||
|
{
|
||||||
|
AssertLog("CRaceData::RegisterCombo - Strange combo index!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rComboIndexVector[dwComboIndex] = wMotionIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::GetComboDataPointer(WORD wMotionModeIndex, WORD wComboType, TComboData ** ppComboData)
|
||||||
|
{
|
||||||
|
TComboAttackDataIterator itor = m_ComboAttackDataMap.find(MAKE_COMBO_KEY(wMotionModeIndex, wComboType));
|
||||||
|
|
||||||
|
if (m_ComboAttackDataMap.end() == itor)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
*ppComboData = &itor->second;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * CRaceData::GetBaseModelFileName() const
|
||||||
|
{
|
||||||
|
return m_strBaseModelFileName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * CRaceData::GetAttributeFileName() const
|
||||||
|
{
|
||||||
|
return m_strAttributeFileName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* CRaceData::GetMotionListFileName() const
|
||||||
|
{
|
||||||
|
return m_strMotionListFileName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
CGraphicThing * CRaceData::GetBaseModelThing()
|
||||||
|
{
|
||||||
|
if (!m_pBaseModelThing)
|
||||||
|
{
|
||||||
|
m_pBaseModelThing = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(m_strBaseModelFileName.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_pBaseModelThing;
|
||||||
|
}
|
||||||
|
|
||||||
|
CGraphicThing * CRaceData::GetLODModelThing()
|
||||||
|
{
|
||||||
|
if (!m_pLODModelThing)
|
||||||
|
{
|
||||||
|
std::string strLODFileName = CFileNameHelper::NoExtension(m_strBaseModelFileName) + "_lod_01.gr2";
|
||||||
|
if (CResourceManager::Instance().IsFileExist(strLODFileName.c_str()))
|
||||||
|
{
|
||||||
|
m_pLODModelThing = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(strLODFileName.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_pLODModelThing;
|
||||||
|
}
|
||||||
|
|
||||||
|
CAttributeData * CRaceData::GetAttributeDataPtr()
|
||||||
|
{
|
||||||
|
if (m_strAttributeFileName.empty())
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (!CResourceManager::Instance().IsFileExist(m_strAttributeFileName.c_str()))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return (CAttributeData *)CResourceManager::Instance().GetResourcePointer(m_strAttributeFileName.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::GetAttachingBoneName(DWORD dwPartIndex, const char ** c_pszBoneName)
|
||||||
|
{
|
||||||
|
TAttachingBoneNameMap::iterator itor = m_AttachingBoneNameMap.find(dwPartIndex);
|
||||||
|
if (itor == m_AttachingBoneNameMap.end())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
const std::string & c_rstrBoneName = itor->second;
|
||||||
|
|
||||||
|
*c_pszBoneName = c_rstrBoneName.c_str();
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceData::IsTree()
|
||||||
|
{
|
||||||
|
return !m_strTreeFileName.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * CRaceData::GetTreeFileName()
|
||||||
|
{
|
||||||
|
return m_strTreeFileName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::Destroy()
|
||||||
|
{
|
||||||
|
m_kMap_dwHairKey_kHair.clear();
|
||||||
|
m_kMap_dwShapeKey_kShape.clear();
|
||||||
|
|
||||||
|
m_strBaseModelFileName = "";
|
||||||
|
m_strTreeFileName = "";
|
||||||
|
m_strAttributeFileName = "";
|
||||||
|
m_strMotionListFileName = "motlist.txt";
|
||||||
|
|
||||||
|
m_AttachingBoneNameMap.clear();
|
||||||
|
m_ModelDataMap.clear();
|
||||||
|
|
||||||
|
m_NormalAttackIndexMap.clear();
|
||||||
|
m_ComboAttackDataMap.clear();
|
||||||
|
|
||||||
|
TMotionModeDataMap::iterator itorMode = m_pMotionModeDataMap.begin();
|
||||||
|
for (; itorMode != m_pMotionModeDataMap.end(); ++itorMode)
|
||||||
|
{
|
||||||
|
TMotionModeData * pMotionModeData = itorMode->second;
|
||||||
|
|
||||||
|
TMotionVectorMap::iterator itorMotion = pMotionModeData->MotionVectorMap.begin();
|
||||||
|
for (; itorMotion != pMotionModeData->MotionVectorMap.end(); ++itorMotion)
|
||||||
|
{
|
||||||
|
TMotionVector & rMotionVector = itorMotion->second;
|
||||||
|
for (DWORD i = 0; i < rMotionVector.size(); ++i)
|
||||||
|
{
|
||||||
|
CRaceMotionData::Delete(rMotionVector[i].pMotionData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ms_MotionModeDataPool.Free(pMotionModeData);
|
||||||
|
}
|
||||||
|
m_pMotionModeDataMap.clear();
|
||||||
|
|
||||||
|
__Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceData::__Initialize()
|
||||||
|
{
|
||||||
|
m_strMotionListFileName = "motlist.txt";
|
||||||
|
|
||||||
|
m_pBaseModelThing = NULL;
|
||||||
|
m_pLODModelThing = NULL;
|
||||||
|
|
||||||
|
m_dwRaceIndex = 0;
|
||||||
|
|
||||||
|
memset(m_adwSmokeEffectID, 0, sizeof(m_adwSmokeEffectID));
|
||||||
|
}
|
||||||
|
|
||||||
|
CRaceData::CRaceData()
|
||||||
|
{
|
||||||
|
__Initialize();
|
||||||
|
}
|
||||||
|
CRaceData::~CRaceData()
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
@@ -0,0 +1,451 @@
|
|||||||
|
#include "StdAfx.h"
|
||||||
|
#include "RaceManager.h"
|
||||||
|
#include "RaceMotionData.h"
|
||||||
|
#include "../EterPack/EterPackManager.h"
|
||||||
|
|
||||||
|
bool __IsGuildRace(unsigned race)
|
||||||
|
{
|
||||||
|
if (race >= 14000 && race < 15000)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (20043 == race)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool __IsNPCRace(unsigned race)
|
||||||
|
{
|
||||||
|
if (race > 9000)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void __GetRaceResourcePathes(unsigned race, std::vector <std::string>& vec_stPathes)
|
||||||
|
{
|
||||||
|
if (__IsGuildRace(race))
|
||||||
|
{
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/guild/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster2/");
|
||||||
|
}
|
||||||
|
else if (__IsNPCRace(race))
|
||||||
|
{
|
||||||
|
if (race >= 30000)
|
||||||
|
{
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/guild/");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/guild/");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 만우절 이벤트용 예외 몬스터
|
||||||
|
else if (8507 == race || 8510 == race)
|
||||||
|
{
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/guild/");
|
||||||
|
}
|
||||||
|
else if (race > 8000)
|
||||||
|
{
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/guild/");
|
||||||
|
}
|
||||||
|
else if (race > 2000)
|
||||||
|
{
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/guild/");
|
||||||
|
}
|
||||||
|
else if (race>=1400 && race<=1700)
|
||||||
|
{
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/guild/");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/monster2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/npc2/");
|
||||||
|
vec_stPathes.push_back ("d:/ymir work/guild/");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CRaceData* CRaceManager::__LoadRaceData(DWORD dwRaceIndex)
|
||||||
|
{
|
||||||
|
std::map<DWORD, std::string>::iterator fRaceName=m_kMap_dwRaceKey_stRaceName.find(dwRaceIndex);
|
||||||
|
if (m_kMap_dwRaceKey_stRaceName.end()==fRaceName)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
const std::string& c_rstRaceName=fRaceName->second;
|
||||||
|
|
||||||
|
if (c_rstRaceName.empty())
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
// LOAD_LOCAL_RESOURCE
|
||||||
|
if (c_rstRaceName[0] == '#')
|
||||||
|
{
|
||||||
|
const char* pathName = c_rstRaceName.c_str() + 1;
|
||||||
|
char shapeFileName[256];
|
||||||
|
char motionListFileName[256];
|
||||||
|
_snprintf(shapeFileName, sizeof(shapeFileName), "%sshape.msm", pathName);
|
||||||
|
_snprintf(motionListFileName, sizeof(motionListFileName), "%smotlist.txt", pathName);
|
||||||
|
|
||||||
|
CRaceData * pRaceData = CRaceData::New();
|
||||||
|
pRaceData->SetRace(dwRaceIndex);
|
||||||
|
if (!pRaceData->LoadRaceData(shapeFileName))
|
||||||
|
{
|
||||||
|
TraceError("CRaceManager::RegisterRacePath(race=%u).LoadRaceData(%s)", dwRaceIndex, shapeFileName);
|
||||||
|
CRaceData::Delete(pRaceData);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
__LoadRaceMotionList(*pRaceData, pathName, motionListFileName);
|
||||||
|
|
||||||
|
return pRaceData;
|
||||||
|
}
|
||||||
|
// END_OF_LOAD_LOCAL_RESOURCE
|
||||||
|
std::vector <std::string> vec_stFullPathName;
|
||||||
|
__GetRaceResourcePathes(dwRaceIndex, vec_stFullPathName);
|
||||||
|
|
||||||
|
CRaceData * pRaceData = CRaceData::New();
|
||||||
|
pRaceData->SetRace(dwRaceIndex);
|
||||||
|
|
||||||
|
for (int i = 0; i < vec_stFullPathName.size(); i++)
|
||||||
|
{
|
||||||
|
std::string stFullPathName = vec_stFullPathName[i];
|
||||||
|
{
|
||||||
|
std::map<std::string, std::string>::iterator fRaceSrcName=m_kMap_stRaceName_stSrcName.find(c_rstRaceName);
|
||||||
|
if (m_kMap_stRaceName_stSrcName.end()==fRaceSrcName)
|
||||||
|
stFullPathName+=c_rstRaceName;
|
||||||
|
else
|
||||||
|
stFullPathName+=fRaceSrcName->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
stFullPathName+="/";
|
||||||
|
|
||||||
|
std::string stMSMFileName=stFullPathName;
|
||||||
|
stMSMFileName+=c_rstRaceName;
|
||||||
|
stMSMFileName+=".msm";
|
||||||
|
|
||||||
|
if (!pRaceData->LoadRaceData(stMSMFileName.c_str()))
|
||||||
|
{
|
||||||
|
if (i != vec_stFullPathName.size() - 1)
|
||||||
|
{
|
||||||
|
TraceError("CRaceManager::RegisterRacePath : RACE[%u] LOAD MSMFILE[%s] ERROR. Will Find Another Path.", dwRaceIndex, stMSMFileName.c_str());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
TraceError("CRaceManager::RegisterRacePath : RACE[%u] LOAD MSMFILE[%s] ERROR", dwRaceIndex, stMSMFileName.c_str());
|
||||||
|
CRaceData::Delete(pRaceData);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string stMotionListFileName=stFullPathName;
|
||||||
|
stMotionListFileName+=pRaceData->GetMotionListFileName();
|
||||||
|
|
||||||
|
__LoadRaceMotionList(*pRaceData, stFullPathName.c_str(), stMotionListFileName.c_str());
|
||||||
|
|
||||||
|
return pRaceData;
|
||||||
|
}
|
||||||
|
TraceError("CRaceManager::RegisterRacePath : RACE[%u] HAVE NO PATH ERROR", dwRaceIndex);
|
||||||
|
CRaceData::Delete(pRaceData);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CRaceManager::__LoadRaceMotionList(CRaceData& rkRaceData, const char* pathName, const char* motionListFileName)
|
||||||
|
{
|
||||||
|
static std::map<std::string, DWORD> s_kMap_stType_dwIndex;
|
||||||
|
static bool s_isInit=false;
|
||||||
|
|
||||||
|
if (!s_isInit)
|
||||||
|
{
|
||||||
|
s_isInit=true;
|
||||||
|
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SPAWN", CRaceMotionData::NAME_SPAWN));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("WAIT", CRaceMotionData::NAME_WAIT));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("WAIT1", CRaceMotionData::NAME_WAIT));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("WAIT2", CRaceMotionData::NAME_WAIT));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("WALK", CRaceMotionData::NAME_WALK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("WALK1", CRaceMotionData::NAME_WALK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("WALK2", CRaceMotionData::NAME_WALK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("RUN", CRaceMotionData::NAME_RUN));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("RUN1", CRaceMotionData::NAME_RUN));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("RUN2", CRaceMotionData::NAME_RUN));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("STOP", CRaceMotionData::NAME_STOP));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("DEAD", CRaceMotionData::NAME_DEAD));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("COMBO_ATTACK", CRaceMotionData::NAME_COMBO_ATTACK_1));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("COMBO_ATTACK1", CRaceMotionData::NAME_COMBO_ATTACK_2));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("COMBO_ATTACK2", CRaceMotionData::NAME_COMBO_ATTACK_3));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("NORMAL_ATTACK", CRaceMotionData::NAME_NORMAL_ATTACK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("NORMAL_ATTACK1", CRaceMotionData::NAME_NORMAL_ATTACK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("NORMAL_ATTACK2", CRaceMotionData::NAME_NORMAL_ATTACK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("FRONT_DAMAGE", CRaceMotionData::NAME_DAMAGE));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("FRONT_DAMAGE1", CRaceMotionData::NAME_DAMAGE));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("FRONT_DAMAGE2", CRaceMotionData::NAME_DAMAGE));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("FRONT_DAMAGE3", CRaceMotionData::NAME_DAMAGE));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("FRONT_DEAD", CRaceMotionData::NAME_DEAD));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("FRONT_DEAD1", CRaceMotionData::NAME_DEAD));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("FRONT_DEAD2", CRaceMotionData::NAME_DEAD));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("FRONT_KNOCKDOWN", CRaceMotionData::NAME_DAMAGE_FLYING));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("FRONT_KNOCKDOWN1", CRaceMotionData::NAME_DAMAGE_FLYING));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("FRONT_STANDUP", CRaceMotionData::NAME_STAND_UP));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("FRONT_STANDUP1", CRaceMotionData::NAME_STAND_UP));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("BACK_DAMAGE", CRaceMotionData::NAME_DAMAGE_BACK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("BACK_DAMAGE1", CRaceMotionData::NAME_DAMAGE_BACK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("BACK_DEAD", CRaceMotionData::NAME_DEAD_BACK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("BACK_DEAD1", CRaceMotionData::NAME_DEAD_BACK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("BACK_DEAD2", CRaceMotionData::NAME_DEAD_BACK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("BACK_KNOCKDOWN", CRaceMotionData::NAME_DAMAGE_FLYING_BACK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("BACK_KNOCKDOWN1", CRaceMotionData::NAME_DAMAGE_FLYING_BACK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("BACK_STANDUP", CRaceMotionData::NAME_STAND_UP_BACK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("BACK_STANDUP1", CRaceMotionData::NAME_STAND_UP_BACK));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SPECIAL", CRaceMotionData::NAME_SPECIAL_1));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SPECIAL1", CRaceMotionData::NAME_SPECIAL_2));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SPECIAL2", CRaceMotionData::NAME_SPECIAL_3));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SPECIAL3", CRaceMotionData::NAME_SPECIAL_4));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SPECIAL4", CRaceMotionData::NAME_SPECIAL_5));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SPECIAL5", CRaceMotionData::NAME_SPECIAL_6));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SKILL1", CRaceMotionData::NAME_SKILL+121));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SKILL2", CRaceMotionData::NAME_SKILL+122));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SKILL3", CRaceMotionData::NAME_SKILL+123));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SKILL4", CRaceMotionData::NAME_SKILL+124));
|
||||||
|
s_kMap_stType_dwIndex.insert(std::map<std::string, DWORD>::value_type("SKILL5", CRaceMotionData::NAME_SKILL+125));
|
||||||
|
}
|
||||||
|
|
||||||
|
const void* pvData;
|
||||||
|
CMappedFile kMappedFile;
|
||||||
|
if (!CEterPackManager::Instance().Get(kMappedFile, motionListFileName, &pvData))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
|
||||||
|
CMemoryTextFileLoader kTextFileLoader;
|
||||||
|
kTextFileLoader.Bind(kMappedFile.Size(), pvData);
|
||||||
|
|
||||||
|
rkRaceData.RegisterMotionMode(CRaceMotionData::MODE_GENERAL);
|
||||||
|
|
||||||
|
char szMode[256];
|
||||||
|
char szType[256];
|
||||||
|
char szFile[256];
|
||||||
|
int nPercent = 0;
|
||||||
|
|
||||||
|
bool isSpawn=false;
|
||||||
|
|
||||||
|
static std::string stSpawnMotionFileName;
|
||||||
|
static std::string stMotionFileName;
|
||||||
|
|
||||||
|
stSpawnMotionFileName = "";
|
||||||
|
stMotionFileName = "";
|
||||||
|
|
||||||
|
UINT uLineCount=kTextFileLoader.GetLineCount();
|
||||||
|
for (UINT uLineIndex=0; uLineIndex<uLineCount; ++uLineIndex)
|
||||||
|
{
|
||||||
|
DWORD motionType = CRaceMotionData::NAME_NONE;
|
||||||
|
|
||||||
|
const std::string& c_rstLine=kTextFileLoader.GetLineString(uLineIndex);
|
||||||
|
sscanf(c_rstLine.c_str(), "%s %s %s %d", szMode, szType, szFile, &nPercent);
|
||||||
|
|
||||||
|
std::map<std::string, DWORD>::iterator fTypeIndex=s_kMap_stType_dwIndex.find(szType);
|
||||||
|
|
||||||
|
if (s_kMap_stType_dwIndex.end() == fTypeIndex)
|
||||||
|
{
|
||||||
|
// 모션 목록에 WAIT, WAIT4, WAIT20 이런 식으로 등록되어 있을 때,
|
||||||
|
// WAIT4, WAIT20을 WAIT로 인식할 수 있도록 처리
|
||||||
|
const size_t c_cutLengthLimit = 2;
|
||||||
|
bool bFound = false;
|
||||||
|
|
||||||
|
if (c_cutLengthLimit < strlen(szType) + 1)
|
||||||
|
{
|
||||||
|
for (size_t i = 1; i <= c_cutLengthLimit; ++i)
|
||||||
|
{
|
||||||
|
std::string typeName = std::string(szType).substr(0, strlen(szType) - i);
|
||||||
|
fTypeIndex = s_kMap_stType_dwIndex.find(typeName);
|
||||||
|
|
||||||
|
if (s_kMap_stType_dwIndex.end() != fTypeIndex)
|
||||||
|
{
|
||||||
|
bFound = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (false == bFound)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
motionType = fTypeIndex->second;
|
||||||
|
|
||||||
|
stMotionFileName = pathName;
|
||||||
|
stMotionFileName += szFile;
|
||||||
|
|
||||||
|
rkRaceData.RegisterMotionData(CRaceMotionData::MODE_GENERAL, motionType, stMotionFileName.c_str(), nPercent);
|
||||||
|
|
||||||
|
switch (motionType)
|
||||||
|
{
|
||||||
|
case CRaceMotionData::NAME_SPAWN:
|
||||||
|
isSpawn=true;
|
||||||
|
break;
|
||||||
|
case CRaceMotionData::NAME_DAMAGE:
|
||||||
|
stSpawnMotionFileName=stMotionFileName;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isSpawn && stSpawnMotionFileName!="")
|
||||||
|
{
|
||||||
|
rkRaceData.RegisterMotionData(CRaceMotionData::MODE_GENERAL, CRaceMotionData::NAME_SPAWN, stSpawnMotionFileName.c_str(), nPercent);
|
||||||
|
}
|
||||||
|
|
||||||
|
rkRaceData.RegisterNormalAttack(CRaceMotionData::MODE_GENERAL, CRaceMotionData::NAME_NORMAL_ATTACK);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceManager::RegisterRaceSrcName(const char * c_szName, const char * c_szSrcName)
|
||||||
|
{
|
||||||
|
m_kMap_stRaceName_stSrcName.insert(std::map<std::string, std::string>::value_type(c_szName, c_szSrcName));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceManager::RegisterRaceName(DWORD dwRaceIndex, const char * c_szName)
|
||||||
|
{
|
||||||
|
m_kMap_dwRaceKey_stRaceName.insert(std::map<DWORD, std::string>::value_type(dwRaceIndex, c_szName));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceManager::CreateRace(DWORD dwRaceIndex)
|
||||||
|
{
|
||||||
|
if (m_RaceDataMap.end() != m_RaceDataMap.find(dwRaceIndex))
|
||||||
|
{
|
||||||
|
TraceError("RaceManager::CreateRace : Race %u already created", dwRaceIndex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CRaceData * pRaceData = CRaceData::New();
|
||||||
|
pRaceData->SetRace(dwRaceIndex);
|
||||||
|
m_RaceDataMap.insert(TRaceDataMap::value_type(dwRaceIndex, pRaceData));
|
||||||
|
|
||||||
|
Tracenf("CRaceManager::CreateRace(dwRaceIndex=%d)", dwRaceIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceManager::SelectRace(DWORD dwRaceIndex)
|
||||||
|
{
|
||||||
|
TRaceDataIterator itor = m_RaceDataMap.find(dwRaceIndex);
|
||||||
|
if (m_RaceDataMap.end() == itor)
|
||||||
|
{
|
||||||
|
assert(!"Failed to select race data!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pSelectedRaceData = itor->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
CRaceData * CRaceManager::GetSelectedRaceDataPointer()
|
||||||
|
{
|
||||||
|
return m_pSelectedRaceData;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CRaceManager::GetRaceDataPointer(DWORD dwRaceIndex, CRaceData ** ppRaceData)
|
||||||
|
{
|
||||||
|
TRaceDataIterator itor = m_RaceDataMap.find(dwRaceIndex);
|
||||||
|
|
||||||
|
if (m_RaceDataMap.end() == itor)
|
||||||
|
{
|
||||||
|
CRaceData* pRaceData = __LoadRaceData(dwRaceIndex);
|
||||||
|
|
||||||
|
if (pRaceData)
|
||||||
|
{
|
||||||
|
m_RaceDataMap.insert(TRaceDataMap::value_type(dwRaceIndex, pRaceData));
|
||||||
|
*ppRaceData = pRaceData;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
TraceError("CRaceManager::GetRaceDataPointer: cannot load data by dwRaceIndex %lu", dwRaceIndex);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ppRaceData = itor->second;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceManager::SetPathName(const char * c_szPathName)
|
||||||
|
{
|
||||||
|
m_strPathName = c_szPathName;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * CRaceManager::GetFullPathFileName(const char * c_szFileName)
|
||||||
|
{
|
||||||
|
static std::string s_stFileName;
|
||||||
|
|
||||||
|
if (c_szFileName[0] != '.')
|
||||||
|
{
|
||||||
|
s_stFileName = m_strPathName;
|
||||||
|
s_stFileName += c_szFileName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_stFileName = c_szFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s_stFileName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CRaceManager::Create()
|
||||||
|
{
|
||||||
|
CRaceMotionData::CreateSystem(2048);
|
||||||
|
CRaceData::CreateSystem(256, 512);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceManager::__Initialize()
|
||||||
|
{
|
||||||
|
m_pSelectedRaceData = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceManager::__DestroyRaceDataMap()
|
||||||
|
{
|
||||||
|
TRaceDataMap::iterator i;
|
||||||
|
for (i=m_RaceDataMap.begin(); i!=m_RaceDataMap.end(); ++i)
|
||||||
|
CRaceData::Delete(i->second);
|
||||||
|
|
||||||
|
m_RaceDataMap.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRaceManager::Destroy()
|
||||||
|
{
|
||||||
|
__DestroyRaceDataMap();
|
||||||
|
|
||||||
|
__Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
CRaceManager::CRaceManager()
|
||||||
|
{
|
||||||
|
__Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
CRaceManager::~CRaceManager()
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -658,7 +658,7 @@ class CInstanceBase
|
|||||||
bool NEW_GetInstanceVectorInCircleRange(float fSkillDistance, std::vector<CInstanceBase*>* pkVct_pkInst);
|
bool NEW_GetInstanceVectorInCircleRange(float fSkillDistance, std::vector<CInstanceBase*>* pkVct_pkInst);
|
||||||
|
|
||||||
void NEW_SetOwner(DWORD dwOwnerVID);
|
void NEW_SetOwner(DWORD dwOwnerVID);
|
||||||
void NEW_SyncPixelPosition(long & nPPosX, long & nPPosY);
|
void NEW_SyncPixelPosition(LONG & nPPosX, LONG & nPPosY); // PORT: 40250 Win32 long is 32-bit.
|
||||||
void NEW_SyncCurrentPixelPosition();
|
void NEW_SyncCurrentPixelPosition();
|
||||||
|
|
||||||
void NEW_SetPixelPosition(const TPixelPosition& c_rkPPosDst);
|
void NEW_SetPixelPosition(const TPixelPosition& c_rkPPosDst);
|
||||||
@@ -1129,4 +1129,4 @@ inline int RaceToSex(int race)
|
|||||||
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,356 @@
|
|||||||
|
#include "StdAfx.h"
|
||||||
|
#include "InstanceBase.h"
|
||||||
|
#include "PythonBackground.h"
|
||||||
|
#include "../EterLib/GrpMath.h"
|
||||||
|
|
||||||
|
void CInstanceBase::SetAttackSpeed(UINT uAtkSpd)
|
||||||
|
{
|
||||||
|
if (uAtkSpd > 1100)
|
||||||
|
uAtkSpd = 0;
|
||||||
|
|
||||||
|
m_GraphicThingInstance.SetAttackSpeed(uAtkSpd/100.0f);
|
||||||
|
m_kHorse.SetAttackSpeed(uAtkSpd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInstanceBase::SetMoveSpeed(UINT uMovSpd)
|
||||||
|
{
|
||||||
|
if (uMovSpd > 1100)
|
||||||
|
uMovSpd = 0;
|
||||||
|
|
||||||
|
m_GraphicThingInstance.SetMoveSpeed(uMovSpd/100.0f);
|
||||||
|
m_kHorse.SetMoveSpeed(uMovSpd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CInstanceBase::SetRotationSpeed(float fRotSpd)
|
||||||
|
{
|
||||||
|
m_fMaxRotSpd = fRotSpd;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInstanceBase::NEW_Stop()
|
||||||
|
{
|
||||||
|
if (__IsSyncing())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (isLock())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (IsUsingSkill())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!IsWaiting())
|
||||||
|
EndWalking();
|
||||||
|
|
||||||
|
m_GraphicThingInstance.__OnStop();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInstanceBase::NEW_SyncPixelPosition(LONG & nPPosX, LONG & nPPosY) // PORT: 40250 Win32 long is 32-bit.
|
||||||
|
{
|
||||||
|
m_GraphicThingInstance.TEMP_Push(nPPosX, nPPosY);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CInstanceBase::NEW_CanMoveToDestPixelPosition(const TPixelPosition& c_rkPPosDst)
|
||||||
|
{
|
||||||
|
TPixelPosition kPPosCur;
|
||||||
|
NEW_GetPixelPosition(&kPPosCur);
|
||||||
|
|
||||||
|
if (kPPosCur.x==c_rkPPosDst.x && kPPosCur.y==c_rkPPosDst.y)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
float CInstanceBase_GetDegreeFromPosition(float x, float y)
|
||||||
|
{
|
||||||
|
D3DXVECTOR3 vtDir(floor(x), floor(y), 0.0f);
|
||||||
|
D3DXVec3Normalize(&vtDir, &vtDir);
|
||||||
|
|
||||||
|
D3DXVECTOR3 vtStan(0, -1, 0);
|
||||||
|
float ret = D3DXToDegree(acosf(D3DXVec3Dot(&vtDir, &vtStan)));
|
||||||
|
|
||||||
|
if (vtDir.x < 0.0f)
|
||||||
|
ret = 360.0f - ret;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
float CInstanceBase::NEW_GetAdvancingRotationFromDirPixelPosition(const TPixelPosition& c_rkPPosDir)
|
||||||
|
{
|
||||||
|
float fDirRot=CInstanceBase_GetDegreeFromPosition(c_rkPPosDir.x, -c_rkPPosDir.y);
|
||||||
|
float fClampDirRot=ClampDegree(fDirRot);
|
||||||
|
|
||||||
|
return fClampDirRot;
|
||||||
|
}
|
||||||
|
|
||||||
|
float CInstanceBase::NEW_GetAdvancingRotationFromDestPixelPosition(const TPixelPosition& c_rkPPosDst)
|
||||||
|
{
|
||||||
|
TPixelPosition kPPosCur;
|
||||||
|
NEW_GetPixelPosition(&kPPosCur);
|
||||||
|
return NEW_GetAdvancingRotationFromPixelPosition(kPPosCur, c_rkPPosDst);
|
||||||
|
}
|
||||||
|
|
||||||
|
float CInstanceBase::NEW_GetAdvancingRotationFromPixelPosition(const TPixelPosition& c_rkPPosSrc, const TPixelPosition& c_rkPPosDst)
|
||||||
|
{
|
||||||
|
TPixelPosition kPPosDelta;
|
||||||
|
kPPosDelta=c_rkPPosDst-c_rkPPosSrc;
|
||||||
|
return NEW_GetAdvancingRotationFromDirPixelPosition(kPPosDelta);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CInstanceBase::NEW_SetAdvancingRotationFromDirPixelPosition(const TPixelPosition& c_rkPPosDir)
|
||||||
|
{
|
||||||
|
float fClampDirRot=NEW_GetAdvancingRotationFromDirPixelPosition(c_rkPPosDir);
|
||||||
|
m_GraphicThingInstance.SetAdvancingRotation(fClampDirRot);
|
||||||
|
|
||||||
|
float fCurRot=m_GraphicThingInstance.GetRotation();
|
||||||
|
float fAdvRot=m_GraphicThingInstance.GetAdvancingRotation();
|
||||||
|
|
||||||
|
m_iRotatingDirection = GetRotatingDirection(fCurRot, fAdvRot);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CInstanceBase::NEW_SetAdvancingRotationFromPixelPosition(const TPixelPosition& c_rkPPosSrc, const TPixelPosition& c_rkPPosDst)
|
||||||
|
{
|
||||||
|
TPixelPosition kPPosDelta;
|
||||||
|
kPPosDelta=c_rkPPosDst-c_rkPPosSrc;
|
||||||
|
|
||||||
|
NEW_SetAdvancingRotationFromDirPixelPosition(kPPosDelta);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CInstanceBase::NEW_SetAdvancingRotationFromDestPixelPosition(const TPixelPosition& c_rkPPosDst)
|
||||||
|
{
|
||||||
|
if (!NEW_CanMoveToDestPixelPosition(c_rkPPosDst))
|
||||||
|
{
|
||||||
|
Tracenf("Failed to move next position (%f,%f, %f)", c_rkPPosDst.x, c_rkPPosDst.y, c_rkPPosDst.z);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
TPixelPosition kPPosSrc;
|
||||||
|
NEW_GetPixelPosition(&kPPosSrc);
|
||||||
|
NEW_SetAdvancingRotationFromPixelPosition(kPPosSrc, c_rkPPosDst);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CInstanceBase::SetAdvancingRotation(float fRotation)
|
||||||
|
{
|
||||||
|
float frotDifference = GetDegreeDifference(GetRotation(), fRotation);
|
||||||
|
|
||||||
|
if (frotDifference > 45.0f)
|
||||||
|
m_fRotSpd = m_fMaxRotSpd;
|
||||||
|
else
|
||||||
|
m_fRotSpd = m_fMaxRotSpd * 5 / 12;
|
||||||
|
|
||||||
|
m_GraphicThingInstance.SetAdvancingRotation(ClampDegree(fRotation));
|
||||||
|
m_iRotatingDirection = GetRotatingDirection(m_GraphicThingInstance.GetRotation(),
|
||||||
|
m_GraphicThingInstance.GetAdvancingRotation());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInstanceBase::StartWalking()
|
||||||
|
{
|
||||||
|
m_GraphicThingInstance.Move();
|
||||||
|
|
||||||
|
if (IsAffect(AFFECT_GYEONGGONG))
|
||||||
|
{
|
||||||
|
m_adwCRCAffectEffect[AFFECT_GYEONGGONG] = __EffectContainer_AttachEffect(EFFECT_AFFECT_GYEONGGONG);
|
||||||
|
}
|
||||||
|
else if (IsAffect(AFFECT_KWAESOK))
|
||||||
|
{
|
||||||
|
m_adwCRCAffectEffect[AFFECT_KWAESOK] = __EffectContainer_AttachEffect(EFFECT_AFFECT_KWAESOK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInstanceBase::EndWalking(float fBlendingTime)
|
||||||
|
{
|
||||||
|
assert (!IsWaiting() && "CInstanceBase::EndWalking");
|
||||||
|
|
||||||
|
m_isGoing = FALSE;
|
||||||
|
|
||||||
|
// 걷고 있을때는 무조건 멈추게 해야 한다
|
||||||
|
if (IsWalking()||!IsAttacked())
|
||||||
|
{
|
||||||
|
m_GraphicThingInstance.Stop(fBlendingTime);
|
||||||
|
if (IsAffect(AFFECT_GYEONGGONG))
|
||||||
|
{
|
||||||
|
__EffectContainer_DetachEffect(EFFECT_AFFECT_GYEONGGONG);
|
||||||
|
}
|
||||||
|
else if (IsAffect(AFFECT_KWAESOK))
|
||||||
|
{
|
||||||
|
__EffectContainer_DetachEffect(EFFECT_AFFECT_KWAESOK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInstanceBase::EndWalkingWithoutBlending()
|
||||||
|
{
|
||||||
|
EndWalking(0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CInstanceBase::IsWaiting()
|
||||||
|
{
|
||||||
|
return m_GraphicThingInstance.IsWaiting();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CInstanceBase::IsWalking()
|
||||||
|
{
|
||||||
|
return m_GraphicThingInstance.IsMoving();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CInstanceBase::IsPushing()
|
||||||
|
{
|
||||||
|
return m_GraphicThingInstance.IsPushing();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CInstanceBase::IsAttacked()
|
||||||
|
{
|
||||||
|
return m_GraphicThingInstance.IsAttacked();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CInstanceBase::IsKnockDown()
|
||||||
|
{
|
||||||
|
if (!m_GraphicThingInstance.IsKnockDown())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CInstanceBase::IsAttacking()
|
||||||
|
{
|
||||||
|
return m_GraphicThingInstance.isAttacking();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CInstanceBase::IsActingEmotion()
|
||||||
|
{
|
||||||
|
return m_GraphicThingInstance.IsActEmotion();
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
BOOL CInstanceBase::IsGoing()
|
||||||
|
{
|
||||||
|
return m_isGoing;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInstanceBase::NEW_MoveToDestInstanceDirection(CInstanceBase & rkInstDst)
|
||||||
|
{
|
||||||
|
TPixelPosition kPPosDst;
|
||||||
|
rkInstDst.NEW_GetPixelPosition(&kPPosDst);
|
||||||
|
|
||||||
|
NEW_MoveToDestPixelPositionDirection(kPPosDst);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CInstanceBase::NEW_MoveToDestPixelPositionDirection(const TPixelPosition & c_rkPPosDst)
|
||||||
|
{
|
||||||
|
TPixelPosition kPPosCur;
|
||||||
|
NEW_GetPixelPosition(&kPPosCur);
|
||||||
|
float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(kPPosCur, c_rkPPosDst);
|
||||||
|
|
||||||
|
return NEW_Goto(c_rkPPosDst, fDstRot);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CInstanceBase::NEW_Goto(const TPixelPosition& c_rkPPosDst, float fDstRot)
|
||||||
|
{
|
||||||
|
if (__IsSyncing())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_GraphicThingInstance.IsUsingMovingSkill())
|
||||||
|
{
|
||||||
|
SetAdvancingRotation(fDstRot);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isLock())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!NEW_CanMoveToDestPixelPosition(c_rkPPosDst))
|
||||||
|
{
|
||||||
|
if (!IsWaiting())
|
||||||
|
EndWalking();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
NEW_SetSrcPixelPosition(NEW_GetCurPixelPositionRef());
|
||||||
|
NEW_SetDstPixelPosition(c_rkPPosDst);
|
||||||
|
NEW_SetDstPixelPositionZ(NEW_GetSrcPixelPositionRef().z);
|
||||||
|
m_fDstRot=fDstRot;
|
||||||
|
m_isGoing = TRUE;
|
||||||
|
|
||||||
|
if (!IsWalking())
|
||||||
|
{
|
||||||
|
StartWalking();
|
||||||
|
}
|
||||||
|
|
||||||
|
NEW_SetAdvancingRotationFromPixelPosition(NEW_GetSrcPixelPositionRef(), NEW_GetDstPixelPositionRef());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInstanceBase::NEW_MoveToDirection(float fDirRot)
|
||||||
|
{
|
||||||
|
if (__IsSyncing())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (m_GraphicThingInstance.IsUsingMovingSkill())
|
||||||
|
{
|
||||||
|
SetAdvancingRotation(fDirRot);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isLock())
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_isGoing = FALSE;
|
||||||
|
|
||||||
|
SetAdvancingRotation(fDirRot);
|
||||||
|
|
||||||
|
if (!IsWalking())
|
||||||
|
{
|
||||||
|
StartWalking();
|
||||||
|
}
|
||||||
|
|
||||||
|
TPixelPosition kPPosCur;
|
||||||
|
NEW_GetPixelPosition(&kPPosCur);
|
||||||
|
|
||||||
|
D3DXVECTOR3 kD3DVt3Cur(kPPosCur.x, -kPPosCur.y, kPPosCur.z);
|
||||||
|
D3DXVECTOR3 kD3DVt3Dst;
|
||||||
|
|
||||||
|
D3DXVECTOR3 kD3DVt3AdvDir(0.0f, -1.0f, 0.0f);
|
||||||
|
D3DXMATRIX kD3DMatAdv;
|
||||||
|
D3DXMatrixRotationZ(&kD3DMatAdv, D3DXToRadian(fDirRot));
|
||||||
|
D3DXVec3TransformCoord(&kD3DVt3AdvDir, &kD3DVt3AdvDir, &kD3DMatAdv);
|
||||||
|
D3DXVec3Scale(&kD3DVt3AdvDir, &kD3DVt3AdvDir, 300.0f);
|
||||||
|
D3DXVec3Add(&kD3DVt3Dst, &kD3DVt3AdvDir, &kD3DVt3Cur);
|
||||||
|
|
||||||
|
TPixelPosition kPPosDst;
|
||||||
|
kPPosDst.x = +kD3DVt3Dst.x;
|
||||||
|
kPPosDst.y = -kD3DVt3Dst.y;
|
||||||
|
kPPosDst.z = +kD3DVt3Dst.z;
|
||||||
|
|
||||||
|
NEW_SetSrcPixelPosition(kPPosCur);
|
||||||
|
NEW_SetDstPixelPosition(kPPosDst);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInstanceBase::EndGoing()
|
||||||
|
{
|
||||||
|
if (!IsWaiting())
|
||||||
|
EndWalking();
|
||||||
|
|
||||||
|
//Tracen("EndGoing");
|
||||||
|
|
||||||
|
m_isGoing = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInstanceBase::SetRunMode()
|
||||||
|
{
|
||||||
|
m_GraphicThingInstance.SetRunMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CInstanceBase::SetWalkMode()
|
||||||
|
{
|
||||||
|
m_GraphicThingInstance.SetWalkMode();
|
||||||
|
}
|
||||||
@@ -0,0 +1,582 @@
|
|||||||
|
#include "StdAfx.h"
|
||||||
|
#include "NetworkActorManager.h"
|
||||||
|
#include "PythonCharacterManager.h"
|
||||||
|
#include "PythonItem.h"
|
||||||
|
|
||||||
|
#include "AbstractPlayer.h"
|
||||||
|
|
||||||
|
void SNetworkActorData::UpdatePosition()
|
||||||
|
{
|
||||||
|
DWORD dwClientCurTime=ELTimer_GetMSec();
|
||||||
|
DWORD dwElapsedTime=dwClientCurTime-m_dwClientSrcTime;
|
||||||
|
|
||||||
|
if (dwElapsedTime<m_dwDuration)
|
||||||
|
{
|
||||||
|
float fRate=float(dwElapsedTime)/float(m_dwDuration);
|
||||||
|
m_lCurX=LONG((m_lDstX-m_lSrcX)*fRate+m_lSrcX);
|
||||||
|
m_lCurY=LONG((m_lDstY-m_lSrcY)*fRate+m_lSrcY);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_lCurX=m_lDstX;
|
||||||
|
m_lCurY=m_lDstY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SNetworkActorData::SetDstPosition(DWORD dwServerTime, LONG lDstX, LONG lDstY, DWORD dwDuration)
|
||||||
|
{
|
||||||
|
m_lSrcX=m_lCurX;
|
||||||
|
m_lSrcY=m_lCurY;
|
||||||
|
m_lDstX=lDstX;
|
||||||
|
m_lDstY=lDstY;
|
||||||
|
|
||||||
|
m_dwDuration=dwDuration;
|
||||||
|
m_dwServerSrcTime=dwServerTime;
|
||||||
|
m_dwClientSrcTime=ELTimer_GetMSec();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SNetworkActorData::SetPosition(LONG lPosX, LONG lPosY)
|
||||||
|
{
|
||||||
|
m_lDstX=m_lSrcX=m_lCurX=lPosX;
|
||||||
|
m_lDstY=m_lSrcY=m_lCurY=lPosY;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NETWORK_ACTOR_DATA_COPY
|
||||||
|
SNetworkActorData::SNetworkActorData(const SNetworkActorData& src)
|
||||||
|
{
|
||||||
|
__copy__(src);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SNetworkActorData::operator=(const SNetworkActorData& src)
|
||||||
|
{
|
||||||
|
__copy__(src);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SNetworkActorData::__copy__(const SNetworkActorData& src)
|
||||||
|
{
|
||||||
|
m_bType = src.m_bType;
|
||||||
|
m_dwVID = src.m_dwVID;
|
||||||
|
m_dwStateFlags = src.m_dwStateFlags;
|
||||||
|
m_dwEmpireID = src.m_dwEmpireID;
|
||||||
|
m_dwRace = src.m_dwRace;
|
||||||
|
m_dwMovSpd = src.m_dwMovSpd;
|
||||||
|
m_dwAtkSpd = src.m_dwAtkSpd;
|
||||||
|
m_fRot = src.m_fRot;
|
||||||
|
m_lCurX = src.m_lCurX;
|
||||||
|
m_lCurY = src.m_lCurY;
|
||||||
|
m_lSrcX = src.m_lSrcX;
|
||||||
|
m_lSrcY = src.m_lSrcY;
|
||||||
|
m_lDstX = src.m_lDstX;
|
||||||
|
m_lDstY = src.m_lDstY;
|
||||||
|
m_kAffectFlags.CopyInstance(src.m_kAffectFlags);
|
||||||
|
|
||||||
|
m_dwServerSrcTime = src.m_dwServerSrcTime;
|
||||||
|
m_dwClientSrcTime = src.m_dwClientSrcTime;
|
||||||
|
m_dwDuration = src.m_dwDuration;
|
||||||
|
|
||||||
|
m_dwArmor = src.m_dwArmor;
|
||||||
|
m_dwWeapon = src.m_dwWeapon;
|
||||||
|
m_dwHair = src.m_dwHair;
|
||||||
|
|
||||||
|
m_dwOwnerVID = src.m_dwOwnerVID;
|
||||||
|
|
||||||
|
m_sAlignment = src.m_sAlignment;
|
||||||
|
m_byPKMode = src.m_byPKMode;
|
||||||
|
m_dwMountVnum = src.m_dwMountVnum;
|
||||||
|
|
||||||
|
m_dwGuildID = src.m_dwGuildID;
|
||||||
|
m_dwLevel = src.m_dwLevel;
|
||||||
|
m_stName = src.m_stName;
|
||||||
|
}
|
||||||
|
// END_OF_NETWORK_ACTOR_DATA_COPY
|
||||||
|
|
||||||
|
SNetworkActorData::SNetworkActorData()
|
||||||
|
{
|
||||||
|
SetPosition(0, 0);
|
||||||
|
|
||||||
|
m_bType=0;
|
||||||
|
m_dwVID=0;
|
||||||
|
m_dwStateFlags=0;
|
||||||
|
m_dwRace=0;
|
||||||
|
m_dwMovSpd=0;
|
||||||
|
m_dwAtkSpd=0;
|
||||||
|
m_fRot=0.0f;
|
||||||
|
m_dwArmor=0;
|
||||||
|
m_dwWeapon=0;
|
||||||
|
m_dwHair=0;
|
||||||
|
m_dwEmpireID=0;
|
||||||
|
|
||||||
|
m_dwOwnerVID=0;
|
||||||
|
|
||||||
|
m_dwDuration=0;
|
||||||
|
m_dwClientSrcTime=0;
|
||||||
|
m_dwServerSrcTime=0;
|
||||||
|
|
||||||
|
m_sAlignment=0;
|
||||||
|
m_byPKMode=0;
|
||||||
|
m_dwMountVnum=0;
|
||||||
|
|
||||||
|
m_stName="";
|
||||||
|
|
||||||
|
m_kAffectFlags.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
CNetworkActorManager::CNetworkActorManager()
|
||||||
|
{
|
||||||
|
m_dwMainVID=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
CNetworkActorManager::~CNetworkActorManager()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::Destroy()
|
||||||
|
{
|
||||||
|
m_kNetActorDict.clear();
|
||||||
|
|
||||||
|
m_dwMainVID=0;
|
||||||
|
m_lMainPosX=0;
|
||||||
|
m_lMainPosY=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::SetMainActorVID(DWORD dwVID)
|
||||||
|
{
|
||||||
|
m_dwMainVID=dwVID;
|
||||||
|
m_lMainPosX=0;
|
||||||
|
m_lMainPosY=0;
|
||||||
|
|
||||||
|
m_kNetActorDict.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::Update()
|
||||||
|
{
|
||||||
|
__OLD_Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::__OLD_Update()
|
||||||
|
{
|
||||||
|
__UpdateMainActor();
|
||||||
|
|
||||||
|
CPythonCharacterManager& rkChrMgr=__GetCharacterManager();
|
||||||
|
|
||||||
|
std::map<DWORD, SNetworkActorData>::iterator i;
|
||||||
|
for (i=m_kNetActorDict.begin(); i!=m_kNetActorDict.end(); ++i)
|
||||||
|
{
|
||||||
|
SNetworkActorData& rkNetActorData=i->second;
|
||||||
|
rkNetActorData.UpdatePosition();
|
||||||
|
|
||||||
|
CInstanceBase * pkInstFind = rkChrMgr.GetInstancePtr(rkNetActorData.m_dwVID);
|
||||||
|
if (!pkInstFind)
|
||||||
|
{
|
||||||
|
if (__IsVisibleActor(rkNetActorData))
|
||||||
|
__AppendCharacterManagerActor(rkNetActorData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase* CNetworkActorManager::__FindActor(SNetworkActorData& rkNetActorData, LONG lDstX, LONG lDstY)
|
||||||
|
{
|
||||||
|
CPythonCharacterManager& rkChrMgr=__GetCharacterManager();
|
||||||
|
CInstanceBase * pkInstFind = rkChrMgr.GetInstancePtr(rkNetActorData.m_dwVID);
|
||||||
|
if (!pkInstFind)
|
||||||
|
{
|
||||||
|
if (__IsVisiblePos(lDstX, lDstY))
|
||||||
|
return __AppendCharacterManagerActor(rkNetActorData);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pkInstFind;
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase* CNetworkActorManager::__FindActor(SNetworkActorData& rkNetActorData)
|
||||||
|
{
|
||||||
|
CPythonCharacterManager& rkChrMgr=__GetCharacterManager();
|
||||||
|
CInstanceBase * pkInstFind = rkChrMgr.GetInstancePtr(rkNetActorData.m_dwVID);
|
||||||
|
if (!pkInstFind)
|
||||||
|
{
|
||||||
|
if (__IsVisibleActor(rkNetActorData))
|
||||||
|
return __AppendCharacterManagerActor(rkNetActorData);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pkInstFind;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::__RemoveAllGroundItems()
|
||||||
|
{
|
||||||
|
CPythonItem& rkItemMgr=CPythonItem::Instance();
|
||||||
|
rkItemMgr.DeleteAllItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::__RemoveAllActors()
|
||||||
|
{
|
||||||
|
m_kNetActorDict.clear();
|
||||||
|
|
||||||
|
CPythonCharacterManager & rkChrMgr = CPythonCharacterManager::Instance();
|
||||||
|
rkChrMgr.DeleteAllInstances();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::__RemoveDynamicActors()
|
||||||
|
{
|
||||||
|
//copy it
|
||||||
|
std::vector<DWORD> dwCharacterVIDList;
|
||||||
|
|
||||||
|
CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
|
||||||
|
for(CPythonCharacterManager::CharacterIterator i = rkChrMgr.CharacterInstanceBegin(); i!=rkChrMgr.CharacterInstanceEnd(); ++i)
|
||||||
|
{
|
||||||
|
dwCharacterVIDList.push_back( (*i)->GetVirtualID() );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( int i = 0; i < dwCharacterVIDList.size(); ++i )
|
||||||
|
{
|
||||||
|
CInstanceBase* pkInstEach = rkChrMgr.GetInstancePtr( dwCharacterVIDList[i] );
|
||||||
|
if( !pkInstEach )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
CActorInstance* rkActorEach=pkInstEach->GetGraphicThingInstancePtr();
|
||||||
|
if( rkActorEach->IsPC() || rkActorEach->IsNPC() || rkActorEach->IsEnemy() )
|
||||||
|
{
|
||||||
|
rkChrMgr.DeleteInstance(dwCharacterVIDList[i]);
|
||||||
|
std::map<DWORD, SNetworkActorData>::iterator it =m_kNetActorDict.find(dwCharacterVIDList[i]);
|
||||||
|
if (it != m_kNetActorDict.end())
|
||||||
|
{
|
||||||
|
m_kNetActorDict.erase(it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rkChrMgr.DestroyDeadInstanceList();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::__UpdateMainActor()
|
||||||
|
{
|
||||||
|
CPythonCharacterManager & rkChrMgr = CPythonCharacterManager::Instance();
|
||||||
|
CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr();
|
||||||
|
if (!pkInstMain)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TPixelPosition kPPosMain;
|
||||||
|
pkInstMain->NEW_GetPixelPosition(&kPPosMain);
|
||||||
|
|
||||||
|
m_lMainPosX=LONG(kPPosMain.x);
|
||||||
|
m_lMainPosY=LONG(kPPosMain.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern bool IsWall(unsigned race);
|
||||||
|
|
||||||
|
bool CNetworkActorManager::__IsVisibleActor(const SNetworkActorData& c_rkNetActorData)
|
||||||
|
{
|
||||||
|
if (__IsMainActorVID(c_rkNetActorData.m_dwVID))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// 2004.08.02.myevan.항상 보이기 플래그
|
||||||
|
if (c_rkNetActorData.m_kAffectFlags.IsSet(CInstanceBase::AFFECT_SHOW_ALWAYS))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (__IsVisiblePos(c_rkNetActorData.m_lCurX, c_rkNetActorData.m_lCurY))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (IsWall(c_rkNetActorData.m_dwRace))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CNetworkActorManager::__IsVisiblePos(LONG lPosX, LONG lPosY)
|
||||||
|
{
|
||||||
|
LONG dx = lPosX-m_lMainPosX;
|
||||||
|
LONG dy = lPosY-m_lMainPosY;
|
||||||
|
LONG len = (LONG)sqrt(double(dx * dx + dy * dy));
|
||||||
|
|
||||||
|
extern int CHAR_STAGE_VIEW_BOUND;
|
||||||
|
if (len < CHAR_STAGE_VIEW_BOUND) // 거리제한 cm
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CNetworkActorManager::__IsMainActorVID(DWORD dwVID)
|
||||||
|
{
|
||||||
|
if (dwVID == m_dwMainVID)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonCharacterManager& CNetworkActorManager::__GetCharacterManager()
|
||||||
|
{
|
||||||
|
return CPythonCharacterManager::Instance();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::__RemoveCharacterManagerActor(SNetworkActorData& rkNetActorData)
|
||||||
|
{
|
||||||
|
CPythonCharacterManager & rkChrMgr = CPythonCharacterManager::Instance();
|
||||||
|
|
||||||
|
if (__IsMainActorVID(rkNetActorData.m_dwVID))
|
||||||
|
{
|
||||||
|
rkChrMgr.DeleteInstance(rkNetActorData.m_dwVID);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rkChrMgr.DeleteInstanceByFade(rkNetActorData.m_dwVID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase* CNetworkActorManager::__AppendCharacterManagerActor(SNetworkActorData& rkNetActorData)
|
||||||
|
{
|
||||||
|
Lognf(0, "CNetworkActorManager::__AppendCharacterManagerActor(%d, %s)", rkNetActorData.m_dwVID, rkNetActorData.m_stName.c_str());
|
||||||
|
|
||||||
|
DWORD dwVID=rkNetActorData.m_dwVID;
|
||||||
|
|
||||||
|
CPythonCharacterManager & rkChrMgr = CPythonCharacterManager::Instance();
|
||||||
|
|
||||||
|
|
||||||
|
CInstanceBase::SCreateData kCreateData;
|
||||||
|
kCreateData.m_bType=rkNetActorData.m_bType;
|
||||||
|
kCreateData.m_dwLevel=rkNetActorData.m_dwLevel;
|
||||||
|
kCreateData.m_dwGuildID=rkNetActorData.m_dwGuildID;
|
||||||
|
kCreateData.m_dwEmpireID=rkNetActorData.m_dwEmpireID;
|
||||||
|
kCreateData.m_dwVID=rkNetActorData.m_dwVID;
|
||||||
|
kCreateData.m_dwMountVnum=rkNetActorData.m_dwMountVnum;
|
||||||
|
kCreateData.m_dwRace=rkNetActorData.m_dwRace;
|
||||||
|
kCreateData.m_fRot=rkNetActorData.m_fRot;
|
||||||
|
kCreateData.m_lPosX=rkNetActorData.m_lCurX;
|
||||||
|
kCreateData.m_lPosY=rkNetActorData.m_lCurY;
|
||||||
|
kCreateData.m_stName=rkNetActorData.m_stName;
|
||||||
|
kCreateData.m_dwStateFlags=rkNetActorData.m_dwStateFlags;
|
||||||
|
kCreateData.m_dwMovSpd=rkNetActorData.m_dwMovSpd;
|
||||||
|
kCreateData.m_dwAtkSpd=rkNetActorData.m_dwAtkSpd;
|
||||||
|
kCreateData.m_sAlignment=rkNetActorData.m_sAlignment;
|
||||||
|
kCreateData.m_byPKMode=rkNetActorData.m_byPKMode;
|
||||||
|
kCreateData.m_kAffectFlags=rkNetActorData.m_kAffectFlags;
|
||||||
|
kCreateData.m_dwArmor=rkNetActorData.m_dwArmor;
|
||||||
|
kCreateData.m_dwWeapon=rkNetActorData.m_dwWeapon;
|
||||||
|
kCreateData.m_dwHair=rkNetActorData.m_dwHair;
|
||||||
|
kCreateData.m_isMain=__IsMainActorVID(dwVID);
|
||||||
|
|
||||||
|
CInstanceBase* pOldInstance = rkChrMgr.GetInstancePtr(dwVID);
|
||||||
|
if (pOldInstance)
|
||||||
|
{
|
||||||
|
TPixelPosition oldPos;
|
||||||
|
pOldInstance->GetGraphicThingInstancePtr()->GetPixelPosition( &oldPos );
|
||||||
|
|
||||||
|
bool bIsMountingHorse = pOldInstance->IsMountingHorse();
|
||||||
|
if( (bIsMountingHorse && kCreateData.m_dwMountVnum == 0) ||
|
||||||
|
(!bIsMountingHorse && kCreateData.m_dwMountVnum != 0) )
|
||||||
|
{
|
||||||
|
//Override Pos
|
||||||
|
kCreateData.m_lPosX = oldPos.x;
|
||||||
|
kCreateData.m_lPosY = -oldPos.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
rkChrMgr.DeleteInstance(dwVID);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CInstanceBase* pNewInstance = rkChrMgr.CreateInstance(kCreateData);
|
||||||
|
if (!pNewInstance)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (kCreateData.m_isMain)
|
||||||
|
{
|
||||||
|
IAbstractPlayer & rkPlayer = IAbstractPlayer::GetSingleton();
|
||||||
|
rkPlayer.SetMainCharacterIndex(dwVID);
|
||||||
|
|
||||||
|
|
||||||
|
m_lMainPosX=rkNetActorData.m_lCurX;
|
||||||
|
m_lMainPosY=rkNetActorData.m_lCurY;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD dwClientCurTime=ELTimer_GetMSec();
|
||||||
|
DWORD dwElapsedTime=dwClientCurTime-rkNetActorData.m_dwClientSrcTime;
|
||||||
|
|
||||||
|
if (dwElapsedTime<rkNetActorData.m_dwDuration)
|
||||||
|
{
|
||||||
|
TPixelPosition kPPosDst;
|
||||||
|
kPPosDst.x=float(rkNetActorData.m_lDstX);
|
||||||
|
kPPosDst.y=float(rkNetActorData.m_lDstY);
|
||||||
|
kPPosDst.z=0;
|
||||||
|
pNewInstance->PushTCPState(rkNetActorData.m_dwServerSrcTime+dwElapsedTime, kPPosDst, rkNetActorData.m_fRot, CInstanceBase::FUNC_MOVE, 0);
|
||||||
|
}
|
||||||
|
return pNewInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::AppendActor(const SNetworkActorData& c_rkNetActorData)
|
||||||
|
{
|
||||||
|
if (__IsMainActorVID(c_rkNetActorData.m_dwVID))
|
||||||
|
{
|
||||||
|
bool bChangeMountStatus = false;
|
||||||
|
|
||||||
|
CInstanceBase* pMainInstance = CPythonCharacterManager::Instance().GetInstancePtr(c_rkNetActorData.m_dwVID);
|
||||||
|
if( pMainInstance )
|
||||||
|
{
|
||||||
|
bool bIsMountingHorse = pMainInstance->IsMountingHorse();
|
||||||
|
bChangeMountStatus = (bIsMountingHorse && c_rkNetActorData.m_dwMountVnum == 0) || (!bIsMountingHorse && c_rkNetActorData.m_dwMountVnum != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !bChangeMountStatus )
|
||||||
|
{
|
||||||
|
//__RemoveAllActors();
|
||||||
|
__RemoveDynamicActors();
|
||||||
|
__RemoveAllGroundItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
SNetworkActorData& rkNetActorData=m_kNetActorDict[c_rkNetActorData.m_dwVID];
|
||||||
|
rkNetActorData=c_rkNetActorData;
|
||||||
|
|
||||||
|
if (__IsVisibleActor(rkNetActorData))
|
||||||
|
{
|
||||||
|
if (!__AppendCharacterManagerActor(rkNetActorData))
|
||||||
|
m_kNetActorDict.erase(c_rkNetActorData.m_dwVID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::RemoveActor(DWORD dwVID)
|
||||||
|
{
|
||||||
|
std::map<DWORD, SNetworkActorData>::iterator f=m_kNetActorDict.find(dwVID);
|
||||||
|
if (m_kNetActorDict.end()==f)
|
||||||
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
TraceError("CNetworkActorManager::RemoveActor(dwVID=%d) - NOT EXIST VID", dwVID);
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SNetworkActorData& rkNetActorData=f->second;
|
||||||
|
__RemoveCharacterManagerActor(rkNetActorData);
|
||||||
|
|
||||||
|
m_kNetActorDict.erase(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::UpdateActor(const SNetworkUpdateActorData& c_rkNetUpdateActorData)
|
||||||
|
{
|
||||||
|
std::map<DWORD, SNetworkActorData>::iterator f=m_kNetActorDict.find(c_rkNetUpdateActorData.m_dwVID);
|
||||||
|
if (m_kNetActorDict.end()==f)
|
||||||
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
TraceError("CNetworkActorManager::UpdateActor(dwVID=%d) - NOT EXIST VID", c_rkNetUpdateActorData.m_dwVID);
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SNetworkActorData& rkNetActorData=f->second;
|
||||||
|
|
||||||
|
CInstanceBase* pkInstFind=__FindActor(rkNetActorData);
|
||||||
|
if (pkInstFind)
|
||||||
|
{
|
||||||
|
pkInstFind->ChangeArmor(c_rkNetUpdateActorData.m_dwArmor);
|
||||||
|
pkInstFind->ChangeWeapon(c_rkNetUpdateActorData.m_dwWeapon);
|
||||||
|
pkInstFind->ChangeHair(c_rkNetUpdateActorData.m_dwHair);
|
||||||
|
pkInstFind->ChangeGuild(c_rkNetUpdateActorData.m_dwGuildID);
|
||||||
|
pkInstFind->SetAffectFlagContainer(c_rkNetUpdateActorData.m_kAffectFlags);
|
||||||
|
pkInstFind->SetMoveSpeed(c_rkNetUpdateActorData.m_dwMovSpd);
|
||||||
|
pkInstFind->SetAttackSpeed(c_rkNetUpdateActorData.m_dwAtkSpd);
|
||||||
|
pkInstFind->SetAlignment(c_rkNetUpdateActorData.m_sAlignment);
|
||||||
|
pkInstFind->SetPKMode(c_rkNetUpdateActorData.m_byPKMode);
|
||||||
|
pkInstFind->SetStateFlags(c_rkNetUpdateActorData.m_dwStateFlags);
|
||||||
|
|
||||||
|
//if( c_rkNetUpdateActorData.m_dwMountVnum != 0 )
|
||||||
|
//{
|
||||||
|
// pkInstFind->MountHorse(c_rkNetUpdateActorData.m_dwMountVnum);
|
||||||
|
//}
|
||||||
|
//else
|
||||||
|
//{
|
||||||
|
// if( pkInstFind->IsMountingHorse() )
|
||||||
|
// {
|
||||||
|
// pkInstFind->DismountHorse();
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
rkNetActorData.m_kAffectFlags=c_rkNetUpdateActorData.m_kAffectFlags;
|
||||||
|
rkNetActorData.m_dwGuildID=c_rkNetUpdateActorData.m_dwGuildID;
|
||||||
|
//rkNetActorData.m_dwLevel=c_rkNetUpdateActorData.m_dwLevel;
|
||||||
|
rkNetActorData.m_dwMovSpd=c_rkNetUpdateActorData.m_dwMovSpd;
|
||||||
|
rkNetActorData.m_dwAtkSpd=c_rkNetUpdateActorData.m_dwAtkSpd;
|
||||||
|
rkNetActorData.m_dwArmor=c_rkNetUpdateActorData.m_dwArmor;
|
||||||
|
rkNetActorData.m_dwWeapon=c_rkNetUpdateActorData.m_dwWeapon;
|
||||||
|
rkNetActorData.m_dwHair=c_rkNetUpdateActorData.m_dwHair;
|
||||||
|
rkNetActorData.m_sAlignment=c_rkNetUpdateActorData.m_sAlignment;
|
||||||
|
rkNetActorData.m_byPKMode=c_rkNetUpdateActorData.m_byPKMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::MoveActor(const SNetworkMoveActorData& c_rkNetMoveActorData)
|
||||||
|
{
|
||||||
|
std::map<DWORD, SNetworkActorData>::iterator f=m_kNetActorDict.find(c_rkNetMoveActorData.m_dwVID);
|
||||||
|
if (m_kNetActorDict.end()==f)
|
||||||
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
TraceError("CNetworkActorManager::MoveActor(dwVID=%d) - NOT EXIST VID", c_rkNetMoveActorData.m_dwVID);
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SNetworkActorData& rkNetActorData=f->second;
|
||||||
|
|
||||||
|
CInstanceBase* pkInstFind=__FindActor(rkNetActorData, c_rkNetMoveActorData.m_lPosX, c_rkNetMoveActorData.m_lPosY);
|
||||||
|
if (pkInstFind)
|
||||||
|
{
|
||||||
|
TPixelPosition kPPosDst;
|
||||||
|
kPPosDst.x=float(c_rkNetMoveActorData.m_lPosX);
|
||||||
|
kPPosDst.y=float(c_rkNetMoveActorData.m_lPosY);
|
||||||
|
kPPosDst.z=0.0f;
|
||||||
|
|
||||||
|
pkInstFind->PushTCPState(c_rkNetMoveActorData.m_dwTime, kPPosDst,
|
||||||
|
c_rkNetMoveActorData.m_fRot, c_rkNetMoveActorData.m_dwFunc, c_rkNetMoveActorData.m_dwArg);
|
||||||
|
}
|
||||||
|
|
||||||
|
rkNetActorData.SetDstPosition(c_rkNetMoveActorData.m_dwTime,
|
||||||
|
c_rkNetMoveActorData.m_lPosX, c_rkNetMoveActorData.m_lPosY, c_rkNetMoveActorData.m_dwDuration);
|
||||||
|
rkNetActorData.m_fRot=c_rkNetMoveActorData.m_fRot;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::SyncActor(DWORD dwVID, LONG lPosX, LONG lPosY)
|
||||||
|
{
|
||||||
|
std::map<DWORD, SNetworkActorData>::iterator f=m_kNetActorDict.find(dwVID);
|
||||||
|
if (m_kNetActorDict.end()==f)
|
||||||
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
TraceError("CNetworkActorManager::SyncActor(dwVID=%d) - NOT EXIST VID", dwVID);
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SNetworkActorData& rkNetActorData=f->second;
|
||||||
|
|
||||||
|
CInstanceBase* pkInstFind=__FindActor(rkNetActorData);
|
||||||
|
if (pkInstFind)
|
||||||
|
{
|
||||||
|
pkInstFind->NEW_SyncPixelPosition(lPosX, lPosY);
|
||||||
|
}
|
||||||
|
|
||||||
|
rkNetActorData.SetPosition(lPosX, lPosY);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNetworkActorManager::SetActorOwner(DWORD dwOwnerVID, DWORD dwVictimVID)
|
||||||
|
{
|
||||||
|
std::map<DWORD, SNetworkActorData>::iterator f=m_kNetActorDict.find(dwVictimVID);
|
||||||
|
if (m_kNetActorDict.end()==f)
|
||||||
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
TraceError("CNetworkActorManager::SetActorOwner(dwOwnerVID=%d, dwVictimVID=%d) - NOT EXIST VID", dwOwnerVID, dwVictimVID);
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SNetworkActorData& rkNetActorData=f->second;
|
||||||
|
rkNetActorData.m_dwOwnerVID=dwOwnerVID;
|
||||||
|
|
||||||
|
CInstanceBase* pkInstFind=__FindActor(rkNetActorData);
|
||||||
|
if (pkInstFind)
|
||||||
|
{
|
||||||
|
pkInstFind->NEW_SetOwner(rkNetActorData.m_dwOwnerVID);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2319,8 +2319,9 @@ typedef struct SPacketGCShopSign
|
|||||||
typedef struct SPacketGCTime
|
typedef struct SPacketGCTime
|
||||||
{
|
{
|
||||||
BYTE bHeader;
|
BYTE bHeader;
|
||||||
time_t time;
|
LONG time; // PORT: _USE_32BIT_TIME_T in 40250 Win32; wire time is 32 bits on LP64.
|
||||||
} TPacketGCTime;
|
} TPacketGCTime;
|
||||||
|
static_assert(sizeof(TPacketGCTime) == 5);
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,965 @@
|
|||||||
|
#include "StdAfx.h"
|
||||||
|
#include "PythonCharacterManager.h"
|
||||||
|
#include "PythonBackground.h"
|
||||||
|
#include "PythonNonPlayer.h"
|
||||||
|
#include "AbstractPlayer.h"
|
||||||
|
#include "Packet.h"
|
||||||
|
|
||||||
|
#include "../EterLib/Camera.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Frame Process
|
||||||
|
|
||||||
|
int CHAR_STAGE_VIEW_BOUND = 200*100;
|
||||||
|
|
||||||
|
struct FCharacterManagerCharacterInstanceUpdate
|
||||||
|
{
|
||||||
|
inline void operator () (const std::pair<DWORD,CInstanceBase *>& cr_Pair)
|
||||||
|
{
|
||||||
|
cr_Pair.second->Update();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void CPythonCharacterManager::AdjustCollisionWithOtherObjects(CActorInstance* pInst )
|
||||||
|
{
|
||||||
|
if( !pInst->IsPC() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
|
||||||
|
for(CPythonCharacterManager::CharacterIterator i = rkChrMgr.CharacterInstanceBegin(); i!=rkChrMgr.CharacterInstanceEnd();++i)
|
||||||
|
{
|
||||||
|
CInstanceBase* pkInstEach=*i;
|
||||||
|
CActorInstance* rkActorEach=pkInstEach->GetGraphicThingInstancePtr();
|
||||||
|
|
||||||
|
if (rkActorEach==pInst)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if( rkActorEach->IsPC() || rkActorEach->IsNPC() || rkActorEach->IsEnemy() )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if(pInst->TestPhysicsBlendingCollision(*rkActorEach) )
|
||||||
|
{
|
||||||
|
// NOTE : 일단 기존위치로 원복
|
||||||
|
// TODO : 향후 조금더 잘 처리한다면 physic movement거리를 steping해서 iteration처리해야 함.
|
||||||
|
TPixelPosition curPos;
|
||||||
|
pInst->GetPixelPosition(&curPos);
|
||||||
|
pInst->SetBlendingPosition(curPos);
|
||||||
|
//Tracef("!!!!!! Collision Adjusted\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPythonCharacterManager::EnableSortRendering(bool isEnable)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::InsertPVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
|
||||||
|
{
|
||||||
|
CInstanceBase::InsertPVPKey(dwVIDSrc, dwVIDDst);
|
||||||
|
|
||||||
|
CInstanceBase* pkInstSrc=GetInstancePtr(dwVIDSrc);
|
||||||
|
if (pkInstSrc)
|
||||||
|
pkInstSrc->RefreshTextTail();
|
||||||
|
|
||||||
|
CInstanceBase* pkInstDst=GetInstancePtr(dwVIDDst);
|
||||||
|
if (pkInstDst)
|
||||||
|
pkInstDst->RefreshTextTail();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::RemovePVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
|
||||||
|
{
|
||||||
|
CInstanceBase::RemovePVPKey(dwVIDSrc, dwVIDDst);
|
||||||
|
|
||||||
|
CInstanceBase* pkInstSrc=GetInstancePtr(dwVIDSrc);
|
||||||
|
if (pkInstSrc)
|
||||||
|
pkInstSrc->RefreshTextTail();
|
||||||
|
|
||||||
|
CInstanceBase* pkInstDst=GetInstancePtr(dwVIDDst);
|
||||||
|
if (pkInstDst)
|
||||||
|
pkInstDst->RefreshTextTail();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::ChangeGVG(DWORD dwSrcGuildID, DWORD dwDstGuildID)
|
||||||
|
{
|
||||||
|
TCharacterInstanceMap::iterator itor;
|
||||||
|
for (itor = m_kAliveInstMap.begin(); itor != m_kAliveInstMap.end(); itor++)
|
||||||
|
{
|
||||||
|
CInstanceBase * pInstance = itor->second;
|
||||||
|
|
||||||
|
DWORD dwInstanceGuildID = pInstance->GetGuildID();
|
||||||
|
if (dwSrcGuildID == dwInstanceGuildID || dwDstGuildID == dwInstanceGuildID)
|
||||||
|
{
|
||||||
|
pInstance->RefreshTextTail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::ClearMainInstance()
|
||||||
|
{
|
||||||
|
m_pkInstMain=NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonCharacterManager::SetMainInstance(DWORD dwVID)
|
||||||
|
{
|
||||||
|
m_pkInstMain=GetInstancePtr(dwVID);
|
||||||
|
|
||||||
|
if (!m_pkInstMain)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase* CPythonCharacterManager::GetMainInstancePtr()
|
||||||
|
{
|
||||||
|
return m_pkInstMain;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::GetInfo(std::string* pstInfo)
|
||||||
|
{
|
||||||
|
pstInfo->append("Actor: ");
|
||||||
|
|
||||||
|
CInstanceBase::GetInfo(pstInfo);
|
||||||
|
|
||||||
|
char szInfo[256];
|
||||||
|
sprintf(szInfo, "Container - Live %d, Dead %d", m_kAliveInstMap.size(), m_kDeadInstList.size());
|
||||||
|
pstInfo->append(szInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CPythonCharacterManager::IsCacheMode()
|
||||||
|
{
|
||||||
|
static bool s_isOldCacheMode=false;
|
||||||
|
|
||||||
|
bool isCacheMode=s_isOldCacheMode;
|
||||||
|
if (s_isOldCacheMode)
|
||||||
|
{
|
||||||
|
if (m_kAliveInstMap.size()<30)
|
||||||
|
isCacheMode=false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (m_kAliveInstMap.size()>40)
|
||||||
|
isCacheMode=true;
|
||||||
|
}
|
||||||
|
s_isOldCacheMode=isCacheMode;
|
||||||
|
|
||||||
|
return isCacheMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::Update()
|
||||||
|
{
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t1=timeGetTime();
|
||||||
|
#endif
|
||||||
|
CInstanceBase::ResetPerformanceCounter();
|
||||||
|
|
||||||
|
CInstanceBase* pkInstMain=GetMainInstancePtr();
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t2=timeGetTime();
|
||||||
|
#endif
|
||||||
|
DWORD dwDeadInstCount=0;
|
||||||
|
DWORD dwForceVisibleInstCount=0;
|
||||||
|
|
||||||
|
TCharacterInstanceMap::iterator i=m_kAliveInstMap.begin();
|
||||||
|
while (m_kAliveInstMap.end()!=i)
|
||||||
|
{
|
||||||
|
TCharacterInstanceMap::iterator c=i++;
|
||||||
|
|
||||||
|
CInstanceBase* pkInstEach=c->second;
|
||||||
|
pkInstEach->Update();
|
||||||
|
|
||||||
|
if (pkInstMain)
|
||||||
|
{
|
||||||
|
if (pkInstEach->IsForceVisible())
|
||||||
|
{
|
||||||
|
dwForceVisibleInstCount++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int nDistance = int(pkInstEach->NEW_GetDistanceFromDestInstance(*pkInstMain));
|
||||||
|
if (nDistance > CHAR_STAGE_VIEW_BOUND + 10)
|
||||||
|
{
|
||||||
|
__DeleteBlendOutInstance(pkInstEach);
|
||||||
|
m_kAliveInstMap.erase(c);
|
||||||
|
dwDeadInstCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t3=timeGetTime();
|
||||||
|
#endif
|
||||||
|
UpdateTransform();
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t4=timeGetTime();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
UpdateDeleting();
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t5=timeGetTime();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
__NEW_Pick();
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t6=timeGetTime();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
{
|
||||||
|
static FILE* fp=fopen("perf_chrmgr_update.txt", "w");
|
||||||
|
|
||||||
|
if (t6-t1>1)
|
||||||
|
{
|
||||||
|
fprintf(fp, "CU.Total %d (Time %d, Alive %d, Dead %d)\n",
|
||||||
|
t6-t1, ELTimer_GetMSec(),
|
||||||
|
m_kAliveInstMap.size(),
|
||||||
|
m_kDeadInstList.size());
|
||||||
|
fprintf(fp, "CU.Counter %d\n", t2-t1);
|
||||||
|
fprintf(fp, "CU.ForEach %d\n", t3-t2);
|
||||||
|
fprintf(fp, "CU.Trans %d\n", t4-t3);
|
||||||
|
fprintf(fp, "CU.Del %d\n", t5-t4);
|
||||||
|
fprintf(fp, "CU.Pick %d\n", t6-t5);
|
||||||
|
fprintf(fp, "CU.AI %d\n", m_kAliveInstMap.size());
|
||||||
|
fprintf(fp, "CU.DI %d\n", dwDeadInstCount);
|
||||||
|
fprintf(fp, "CU.FVI %d\n", dwForceVisibleInstCount);
|
||||||
|
fprintf(fp, "-------------------------------- \n");
|
||||||
|
fflush(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::ShowPointEffect(DWORD ePoint, DWORD dwVID)
|
||||||
|
{
|
||||||
|
CInstanceBase * pkInstSel = (dwVID == 0xffffffff) ? GetMainInstancePtr() : GetInstancePtr(dwVID);
|
||||||
|
|
||||||
|
if (!pkInstSel)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (ePoint)
|
||||||
|
{
|
||||||
|
case POINT_LEVEL:
|
||||||
|
pkInstSel->LevelUp();
|
||||||
|
break;
|
||||||
|
case POINT_LEVEL_STEP:
|
||||||
|
pkInstSel->SkillUp();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonCharacterManager::RegisterPointEffect(DWORD ePoint, const char* c_szFileName)
|
||||||
|
{
|
||||||
|
if (ePoint>=POINT_MAX_NUM)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CEffectManager& rkEftMgr=CEffectManager::Instance();
|
||||||
|
rkEftMgr.RegisterEffect2(c_szFileName, &m_adwPointEffect[ePoint]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::UpdateTransform()
|
||||||
|
{
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t1=timeGetTime();
|
||||||
|
DWORD t2=timeGetTime();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CInstanceBase * pMainInstance = GetMainInstancePtr();
|
||||||
|
if (pMainInstance)
|
||||||
|
{
|
||||||
|
CPythonBackground& rkBG=CPythonBackground::Instance();
|
||||||
|
for (TCharacterInstanceMap::iterator i = m_kAliveInstMap.begin(); i != m_kAliveInstMap.end(); ++i)
|
||||||
|
{
|
||||||
|
CInstanceBase * pSrcInstance = i->second;
|
||||||
|
|
||||||
|
pSrcInstance->CheckAdvancing();
|
||||||
|
|
||||||
|
// 2004.08.02.myevan.IsAttacked 일 경우 죽었을때도 체크하므로,
|
||||||
|
// 실질적으로 거리가 변경되는 IsPushing일때만 체크하도록 한다
|
||||||
|
if (pSrcInstance->IsPushing())
|
||||||
|
rkBG.CheckAdvancing(pSrcInstance);
|
||||||
|
}
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
t2=timeGetTime();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __MOVIE_MODE__
|
||||||
|
if (!m_pkInstMain->IsMovieMode())
|
||||||
|
{
|
||||||
|
rkBG.CheckAdvancing(m_pkInstMain);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
rkBG.CheckAdvancing(m_pkInstMain);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t3=timeGetTime();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
|
for (TCharacterInstanceMap::iterator itor = m_kAliveInstMap.begin(); itor != m_kAliveInstMap.end(); ++itor)
|
||||||
|
{
|
||||||
|
CInstanceBase * pInstance = itor->second;
|
||||||
|
pInstance->Transform();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
DWORD t4=timeGetTime();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __PERFORMANCE_CHECKER__
|
||||||
|
{
|
||||||
|
static FILE* fp=fopen("perf_chrmgr_updatetransform.txt", "w");
|
||||||
|
|
||||||
|
if (t4-t1>5)
|
||||||
|
{
|
||||||
|
fprintf(fp, "CUT.Total %d (Time %f, Alive %d, Dead %d)\n",
|
||||||
|
t4-t1, ELTimer_GetMSec()/1000.0f,
|
||||||
|
m_kAliveInstMap.size(),
|
||||||
|
m_kDeadInstList.size());
|
||||||
|
fprintf(fp, "CUT.ChkAdvInst %d\n", t2-t1);
|
||||||
|
fprintf(fp, "CUT.ChkAdvBG %d\n", t3-t2);
|
||||||
|
fprintf(fp, "CUT.Trans %d\n", t4-t3);
|
||||||
|
|
||||||
|
fprintf(fp, "-------------------------------- \n");
|
||||||
|
fflush(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
fflush(fp);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
void CPythonCharacterManager::UpdateDeleting()
|
||||||
|
{
|
||||||
|
TCharacterInstanceList::iterator itor = m_kDeadInstList.begin();
|
||||||
|
for (; itor != m_kDeadInstList.end();)
|
||||||
|
{
|
||||||
|
CInstanceBase * pInstance = *itor;
|
||||||
|
|
||||||
|
if (pInstance->UpdateDeleting())
|
||||||
|
{
|
||||||
|
++itor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CInstanceBase::Delete(pInstance);
|
||||||
|
itor = m_kDeadInstList.erase(itor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct FCharacterManagerCharacterInstanceDeform
|
||||||
|
{
|
||||||
|
inline void operator () (const std::pair<DWORD,CInstanceBase *>& cr_Pair)
|
||||||
|
{
|
||||||
|
cr_Pair.second->Deform();
|
||||||
|
//pInstance->Update();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
struct FCharacterManagerCharacterInstanceListDeform
|
||||||
|
{
|
||||||
|
inline void operator () (CInstanceBase * pInstance)
|
||||||
|
{
|
||||||
|
pInstance->Deform();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void CPythonCharacterManager::Deform()
|
||||||
|
{
|
||||||
|
std::for_each(m_kAliveInstMap.begin(), m_kAliveInstMap.end(), FCharacterManagerCharacterInstanceDeform());
|
||||||
|
std::for_each(m_kDeadInstList.begin(), m_kDeadInstList.end(), FCharacterManagerCharacterInstanceListDeform());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool CPythonCharacterManager::OLD_GetPickedInstanceVID(DWORD* pdwPickedActorID)
|
||||||
|
{
|
||||||
|
if (!m_pkInstPick)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
*pdwPickedActorID=m_pkInstPick->GetVirtualID();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase * CPythonCharacterManager::OLD_GetPickedInstancePtr()
|
||||||
|
{
|
||||||
|
return m_pkInstPick;
|
||||||
|
}
|
||||||
|
|
||||||
|
D3DXVECTOR2 & CPythonCharacterManager::OLD_GetPickedInstPosReference()
|
||||||
|
{
|
||||||
|
return m_v2PickedInstProjPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonCharacterManager::IsRegisteredVID(DWORD dwVID)
|
||||||
|
{
|
||||||
|
if (m_kAliveInstMap.end()==m_kAliveInstMap.find(dwVID))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonCharacterManager::IsAliveVID(DWORD dwVID)
|
||||||
|
{
|
||||||
|
return m_kAliveInstMap.find(dwVID)!=m_kAliveInstMap.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonCharacterManager::IsDeadVID(DWORD dwVID)
|
||||||
|
{
|
||||||
|
for (TCharacterInstanceList::iterator f=m_kDeadInstList.begin(); f!=m_kDeadInstList.end(); ++f)
|
||||||
|
{
|
||||||
|
if ((*f)->GetVirtualID()==dwVID)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct LessCharacterInstancePtrRenderOrder
|
||||||
|
{
|
||||||
|
bool operator() (CInstanceBase* pkLeft, CInstanceBase* pkRight)
|
||||||
|
{
|
||||||
|
return pkLeft->LessRenderOrder(pkRight);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct FCharacterManagerCharacterInstanceRender
|
||||||
|
{
|
||||||
|
inline void operator () (const std::pair<DWORD,CInstanceBase *>& cr_Pair)
|
||||||
|
{
|
||||||
|
cr_Pair.second->Render();
|
||||||
|
cr_Pair.second->RenderTrace();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
struct FCharacterInstanceRender
|
||||||
|
{
|
||||||
|
inline void operator () (CInstanceBase * pInstance)
|
||||||
|
{
|
||||||
|
pInstance->Render();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
struct FCharacterInstanceRenderTrace
|
||||||
|
{
|
||||||
|
inline void operator () (CInstanceBase * pInstance)
|
||||||
|
{
|
||||||
|
pInstance->RenderTrace();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void CPythonCharacterManager::__RenderSortedAliveActorList()
|
||||||
|
{
|
||||||
|
static std::vector<CInstanceBase*> s_kVct_pkInstAliveSort;
|
||||||
|
s_kVct_pkInstAliveSort.clear();
|
||||||
|
|
||||||
|
TCharacterInstanceMap& rkMap_pkInstAlive=m_kAliveInstMap;
|
||||||
|
TCharacterInstanceMap::iterator i;
|
||||||
|
for (i=rkMap_pkInstAlive.begin(); i!=rkMap_pkInstAlive.end(); ++i)
|
||||||
|
s_kVct_pkInstAliveSort.push_back(i->second);
|
||||||
|
|
||||||
|
std::sort(s_kVct_pkInstAliveSort.begin(), s_kVct_pkInstAliveSort.end(), LessCharacterInstancePtrRenderOrder());
|
||||||
|
std::for_each(s_kVct_pkInstAliveSort.begin(), s_kVct_pkInstAliveSort.end(), FCharacterInstanceRender());
|
||||||
|
std::for_each(s_kVct_pkInstAliveSort.begin(), s_kVct_pkInstAliveSort.end(), FCharacterInstanceRenderTrace());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::__RenderSortedDeadActorList()
|
||||||
|
{
|
||||||
|
static std::vector<CInstanceBase*> s_kVct_pkInstDeadSort;
|
||||||
|
s_kVct_pkInstDeadSort.clear();
|
||||||
|
|
||||||
|
TCharacterInstanceList& rkLst_pkInstDead=m_kDeadInstList;
|
||||||
|
TCharacterInstanceList::iterator i;
|
||||||
|
for (i=rkLst_pkInstDead.begin(); i!=rkLst_pkInstDead.end(); ++i)
|
||||||
|
s_kVct_pkInstDeadSort.push_back(*i);
|
||||||
|
|
||||||
|
std::sort(s_kVct_pkInstDeadSort.begin(), s_kVct_pkInstDeadSort.end(), LessCharacterInstancePtrRenderOrder());
|
||||||
|
std::for_each(s_kVct_pkInstDeadSort.begin(), s_kVct_pkInstDeadSort.end(), FCharacterInstanceRender());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::Render()
|
||||||
|
{
|
||||||
|
STATEMANAGER.SetTexture(0, NULL);
|
||||||
|
STATEMANAGER.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
|
||||||
|
STATEMANAGER.SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CURRENT);
|
||||||
|
STATEMANAGER.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
|
||||||
|
STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
|
||||||
|
STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
|
||||||
|
|
||||||
|
STATEMANAGER.SetTexture(1, NULL);
|
||||||
|
STATEMANAGER.SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
||||||
|
STATEMANAGER.SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
|
||||||
|
|
||||||
|
|
||||||
|
__RenderSortedAliveActorList();
|
||||||
|
__RenderSortedDeadActorList();
|
||||||
|
|
||||||
|
CInstanceBase * pkPickedInst = OLD_GetPickedInstancePtr();
|
||||||
|
if (pkPickedInst)
|
||||||
|
{
|
||||||
|
const D3DXVECTOR3 & c_rv3Position = pkPickedInst->GetGraphicThingInstanceRef().GetPosition();
|
||||||
|
CPythonGraphic::Instance().ProjectPosition(c_rv3Position.x, c_rv3Position.y, c_rv3Position.z, &m_v2PickedInstProjPos.x, &m_v2PickedInstProjPos.y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::RenderShadowMainInstance()
|
||||||
|
{
|
||||||
|
CInstanceBase* pkInstMain=GetMainInstancePtr();
|
||||||
|
if (pkInstMain)
|
||||||
|
pkInstMain->RenderToShadowMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
struct FCharacterManagerCharacterInstanceRenderToShadowMap
|
||||||
|
{
|
||||||
|
inline void operator () (const std::pair<DWORD,CInstanceBase *>& cr_Pair)
|
||||||
|
{
|
||||||
|
cr_Pair.second->RenderToShadowMap();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void CPythonCharacterManager::RenderShadowAllInstances()
|
||||||
|
{
|
||||||
|
std::for_each(m_kAliveInstMap.begin(), m_kAliveInstMap.end(), FCharacterManagerCharacterInstanceRenderToShadowMap());
|
||||||
|
}
|
||||||
|
|
||||||
|
struct FCharacterManagerCharacterInstanceRenderCollision
|
||||||
|
{
|
||||||
|
inline void operator () (const std::pair<DWORD,CInstanceBase *>& cr_Pair)
|
||||||
|
{
|
||||||
|
cr_Pair.second->RenderCollision();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void CPythonCharacterManager::RenderCollision()
|
||||||
|
{
|
||||||
|
std::for_each(m_kAliveInstMap.begin(), m_kAliveInstMap.end(), FCharacterManagerCharacterInstanceRenderCollision());
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Managing Process
|
||||||
|
|
||||||
|
CInstanceBase * CPythonCharacterManager::CreateInstance(const CInstanceBase::SCreateData& c_rkCreateData)
|
||||||
|
{
|
||||||
|
CInstanceBase * pCharacterInstance = RegisterInstance(c_rkCreateData.m_dwVID);
|
||||||
|
if (!pCharacterInstance)
|
||||||
|
{
|
||||||
|
TraceError("CPythonCharacterManager::CreateInstance: VID[%d] - ALREADY EXIST\n", c_rkCreateData.m_dwVID); // PORT: MSVC accepted a struct through varargs; pass the intended VID.
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pCharacterInstance->Create(c_rkCreateData))
|
||||||
|
{
|
||||||
|
TraceError("CPythonCharacterManager::CreateInstance VID[%d] Race[%d]", c_rkCreateData.m_dwVID, c_rkCreateData.m_dwRace);
|
||||||
|
DeleteInstance(c_rkCreateData.m_dwVID);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c_rkCreateData.m_isMain)
|
||||||
|
SelectInstance(c_rkCreateData.m_dwVID);
|
||||||
|
|
||||||
|
return (pCharacterInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase * CPythonCharacterManager::RegisterInstance(DWORD VirtualID)
|
||||||
|
{
|
||||||
|
TCharacterInstanceMap::iterator itor = m_kAliveInstMap.find(VirtualID);
|
||||||
|
|
||||||
|
if (m_kAliveInstMap.end() != itor)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase * pCharacterInstance = CInstanceBase::New();
|
||||||
|
m_kAliveInstMap.insert(TCharacterInstanceMap::value_type(VirtualID, pCharacterInstance));
|
||||||
|
|
||||||
|
return (pCharacterInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::DeleteInstance(DWORD dwDelVID)
|
||||||
|
{
|
||||||
|
TCharacterInstanceMap::iterator itor = m_kAliveInstMap.find(dwDelVID);
|
||||||
|
|
||||||
|
if (m_kAliveInstMap.end() == itor)
|
||||||
|
{
|
||||||
|
Tracef("DeleteCharacterInstance: no vid by %d\n", dwDelVID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase * pkInstDel = itor->second;
|
||||||
|
|
||||||
|
if (pkInstDel == m_pkInstBind)
|
||||||
|
m_pkInstBind = NULL;
|
||||||
|
|
||||||
|
if (pkInstDel == m_pkInstMain)
|
||||||
|
m_pkInstMain = NULL;
|
||||||
|
|
||||||
|
if (pkInstDel == m_pkInstPick)
|
||||||
|
m_pkInstPick = NULL;
|
||||||
|
|
||||||
|
CInstanceBase::Delete(pkInstDel);
|
||||||
|
|
||||||
|
m_kAliveInstMap.erase(itor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::__DeleteBlendOutInstance(CInstanceBase* pkInstDel)
|
||||||
|
{
|
||||||
|
pkInstDel->DeleteBlendOut();
|
||||||
|
m_kDeadInstList.push_back(pkInstDel);
|
||||||
|
|
||||||
|
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
rkPlayer.NotifyCharacterDead(pkInstDel->GetVirtualID());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::DeleteInstanceByFade(DWORD dwVID)
|
||||||
|
{
|
||||||
|
TCharacterInstanceMap::iterator f = m_kAliveInstMap.find(dwVID);
|
||||||
|
if (m_kAliveInstMap.end() == f)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
__DeleteBlendOutInstance(f->second);
|
||||||
|
m_kAliveInstMap.erase(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::SelectInstance(DWORD VirtualID)
|
||||||
|
{
|
||||||
|
TCharacterInstanceMap::iterator itor = m_kAliveInstMap.find(VirtualID);
|
||||||
|
|
||||||
|
if (m_kAliveInstMap.end() == itor)
|
||||||
|
{
|
||||||
|
Tracef("SelectCharacterInstance: no vid by %d\n", VirtualID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pkInstBind = itor->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase * CPythonCharacterManager::GetInstancePtr(DWORD VirtualID)
|
||||||
|
{
|
||||||
|
TCharacterInstanceMap::iterator itor = m_kAliveInstMap.find(VirtualID);
|
||||||
|
|
||||||
|
if (m_kAliveInstMap.end() == itor)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return itor->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase * CPythonCharacterManager::GetInstancePtrByName(const char *name)
|
||||||
|
{
|
||||||
|
TCharacterInstanceMap::iterator itor;
|
||||||
|
|
||||||
|
for (itor = m_kAliveInstMap.begin(); itor != m_kAliveInstMap.end(); itor++)
|
||||||
|
{
|
||||||
|
CInstanceBase * pInstance = itor->second;
|
||||||
|
|
||||||
|
if (!strcmp(pInstance->GetNameString(), name))
|
||||||
|
return pInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase * CPythonCharacterManager::GetSelectedInstancePtr()
|
||||||
|
{
|
||||||
|
return m_pkInstBind;
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase* CPythonCharacterManager::FindClickableInstancePtr()
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::__UpdateSortPickedActorList()
|
||||||
|
{
|
||||||
|
__UpdatePickedActorList();
|
||||||
|
__SortPickedActorList();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::__UpdatePickedActorList()
|
||||||
|
{
|
||||||
|
m_kVct_pkInstPicked.clear();
|
||||||
|
|
||||||
|
TCharacterInstanceMap::iterator i;
|
||||||
|
for (i=m_kAliveInstMap.begin(); i!=m_kAliveInstMap.end(); ++i)
|
||||||
|
{
|
||||||
|
CInstanceBase* pkInstEach=i->second;
|
||||||
|
// 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경
|
||||||
|
if (pkInstEach->CanPickInstance())
|
||||||
|
{
|
||||||
|
if (pkInstEach->IsDead())
|
||||||
|
{
|
||||||
|
if (pkInstEach->IntersectBoundingBox())
|
||||||
|
m_kVct_pkInstPicked.push_back(pkInstEach);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pkInstEach->IntersectDefendingSphere())
|
||||||
|
m_kVct_pkInstPicked.push_back(pkInstEach);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct CInstanceBase_SLessCameraDistance
|
||||||
|
{
|
||||||
|
TPixelPosition m_kPPosEye;
|
||||||
|
|
||||||
|
bool operator() (CInstanceBase* pkInstLeft, CInstanceBase* pkInstRight)
|
||||||
|
{
|
||||||
|
int nLeftDeadPoint=pkInstLeft->IsDead();
|
||||||
|
int nRightDeadPoint=pkInstRight->IsDead();
|
||||||
|
|
||||||
|
if (nLeftDeadPoint<nRightDeadPoint)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (pkInstLeft->CalculateDistanceSq3d(m_kPPosEye)<pkInstRight->CalculateDistanceSq3d(m_kPPosEye))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void CPythonCharacterManager::__SortPickedActorList()
|
||||||
|
{
|
||||||
|
CCamera * pCamera = CCameraManager::Instance().GetCurrentCamera();
|
||||||
|
const D3DXVECTOR3& c_rv3EyePos=pCamera->GetEye();
|
||||||
|
|
||||||
|
CInstanceBase_SLessCameraDistance kLess;
|
||||||
|
kLess.m_kPPosEye=TPixelPosition(+c_rv3EyePos.x, -c_rv3EyePos.y, +c_rv3EyePos.z);
|
||||||
|
|
||||||
|
std::sort(m_kVct_pkInstPicked.begin(), m_kVct_pkInstPicked.end(), kLess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::__NEW_Pick()
|
||||||
|
{
|
||||||
|
__UpdateSortPickedActorList();
|
||||||
|
|
||||||
|
CInstanceBase* pkInstMain=GetMainInstancePtr();
|
||||||
|
|
||||||
|
#ifdef __MOVIE_MODE
|
||||||
|
if (pkInstMain)
|
||||||
|
if (pkInstMain->IsMovieMode())
|
||||||
|
{
|
||||||
|
if (m_pkInstPick)
|
||||||
|
m_pkInstPick->OnUnselected();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// 정밀한 체크
|
||||||
|
{
|
||||||
|
std::vector<CInstanceBase*>::iterator f;
|
||||||
|
for (f=m_kVct_pkInstPicked.begin(); f!=m_kVct_pkInstPicked.end(); ++f)
|
||||||
|
{
|
||||||
|
CInstanceBase* pkInstEach=*f;
|
||||||
|
if (pkInstEach!=pkInstMain && pkInstEach->IntersectBoundingBox())
|
||||||
|
{
|
||||||
|
if (m_pkInstPick)
|
||||||
|
if (m_pkInstPick!=pkInstEach)
|
||||||
|
m_pkInstPick->OnUnselected();
|
||||||
|
|
||||||
|
if (pkInstEach->CanPickInstance())
|
||||||
|
{
|
||||||
|
m_pkInstPick = pkInstEach;
|
||||||
|
m_pkInstPick->OnSelected();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 못찾겠으면 걍 순서대로
|
||||||
|
{
|
||||||
|
std::vector<CInstanceBase*>::iterator f;
|
||||||
|
for (f=m_kVct_pkInstPicked.begin(); f!=m_kVct_pkInstPicked.end(); ++f)
|
||||||
|
{
|
||||||
|
CInstanceBase* pkInstEach=*f;
|
||||||
|
if (pkInstEach!=pkInstMain)
|
||||||
|
{
|
||||||
|
if (m_pkInstPick)
|
||||||
|
if (m_pkInstPick!=pkInstEach)
|
||||||
|
m_pkInstPick->OnUnselected();
|
||||||
|
|
||||||
|
if (pkInstEach->CanPickInstance())
|
||||||
|
{
|
||||||
|
m_pkInstPick = pkInstEach;
|
||||||
|
m_pkInstPick->OnSelected();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pkInstMain)
|
||||||
|
if (pkInstMain->CanPickInstance())
|
||||||
|
if (m_kVct_pkInstPicked.end() != std::find(m_kVct_pkInstPicked.begin(), m_kVct_pkInstPicked.end(), pkInstMain))
|
||||||
|
{
|
||||||
|
if (m_pkInstPick)
|
||||||
|
if (m_pkInstPick!=pkInstMain)
|
||||||
|
m_pkInstPick->OnUnselected();
|
||||||
|
|
||||||
|
m_pkInstPick = pkInstMain;
|
||||||
|
m_pkInstPick->OnSelected();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_pkInstPick)
|
||||||
|
{
|
||||||
|
m_pkInstPick->OnUnselected();
|
||||||
|
m_pkInstPick=NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::__OLD_Pick()
|
||||||
|
{
|
||||||
|
for (TCharacterInstanceMap::iterator itor = m_kAliveInstMap.begin(); itor != m_kAliveInstMap.end(); ++itor)
|
||||||
|
{
|
||||||
|
CInstanceBase * pkInstEach = itor->second;
|
||||||
|
|
||||||
|
if (pkInstEach == m_pkInstMain)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (pkInstEach->IntersectDefendingSphere())
|
||||||
|
{
|
||||||
|
if (m_pkInstPick)
|
||||||
|
if (m_pkInstPick!=pkInstEach)
|
||||||
|
m_pkInstPick->OnUnselected();
|
||||||
|
|
||||||
|
m_pkInstPick = pkInstEach;
|
||||||
|
m_pkInstPick->OnSelected();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_pkInstPick)
|
||||||
|
{
|
||||||
|
m_pkInstPick->OnUnselected();
|
||||||
|
m_pkInstPick=NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int CPythonCharacterManager::PickAll()
|
||||||
|
{
|
||||||
|
for (TCharacterInstanceMap::iterator itor = m_kAliveInstMap.begin(); itor != m_kAliveInstMap.end(); ++itor)
|
||||||
|
{
|
||||||
|
CInstanceBase * pInstance = itor->second;
|
||||||
|
|
||||||
|
if (pInstance->IntersectDefendingSphere())
|
||||||
|
return pInstance->GetVirtualID();
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
CInstanceBase * CPythonCharacterManager::GetCloseInstance(CInstanceBase * pInstance)
|
||||||
|
{
|
||||||
|
float fMinDistance = 10000.0f;
|
||||||
|
CInstanceBase * pCloseInstance = NULL;
|
||||||
|
|
||||||
|
TCharacterInstanceMap::iterator itor = m_kAliveInstMap.begin();
|
||||||
|
for (; itor != m_kAliveInstMap.end(); ++itor)
|
||||||
|
{
|
||||||
|
CInstanceBase * pTargetInstance = itor->second;
|
||||||
|
|
||||||
|
if (pTargetInstance == pInstance)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
DWORD dwVirtualNumber = pTargetInstance->GetVirtualNumber();
|
||||||
|
if (CPythonNonPlayer::ON_CLICK_EVENT_BATTLE != CPythonNonPlayer::Instance().GetEventType(dwVirtualNumber))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
float fDistance = pInstance->GetDistance(pTargetInstance);
|
||||||
|
if (fDistance < fMinDistance)
|
||||||
|
{
|
||||||
|
fMinDistance = fDistance;
|
||||||
|
pCloseInstance = pTargetInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pCloseInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::RefreshAllPCTextTail()
|
||||||
|
{
|
||||||
|
CPythonCharacterManager::CharacterIterator itor = CharacterInstanceBegin();
|
||||||
|
CPythonCharacterManager::CharacterIterator itorEnd = CharacterInstanceEnd();
|
||||||
|
for (; itor != itorEnd; ++itor)
|
||||||
|
{
|
||||||
|
CInstanceBase * pInstance = *itor;
|
||||||
|
if (!pInstance->IsPC())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
pInstance->RefreshTextTail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::RefreshAllGuildMark()
|
||||||
|
{
|
||||||
|
CPythonCharacterManager::CharacterIterator itor = CharacterInstanceBegin();
|
||||||
|
CPythonCharacterManager::CharacterIterator itorEnd = CharacterInstanceEnd();
|
||||||
|
for (; itor != itorEnd; ++itor)
|
||||||
|
{
|
||||||
|
CInstanceBase * pInstance = *itor;
|
||||||
|
if (!pInstance->IsPC())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
pInstance->ChangeGuild(pInstance->GetGuildID());
|
||||||
|
pInstance->RefreshTextTail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::DeleteAllInstances()
|
||||||
|
{
|
||||||
|
DestroyAliveInstanceMap();
|
||||||
|
DestroyDeadInstanceList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPythonCharacterManager::DestroyAliveInstanceMap()
|
||||||
|
{
|
||||||
|
for (TCharacterInstanceMap::iterator i = m_kAliveInstMap.begin(); i != m_kAliveInstMap.end(); ++i)
|
||||||
|
CInstanceBase::Delete(i->second);
|
||||||
|
|
||||||
|
m_kAliveInstMap.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::DestroyDeadInstanceList()
|
||||||
|
{
|
||||||
|
std::for_each(m_kDeadInstList.begin(), m_kDeadInstList.end(), CInstanceBase::Delete);
|
||||||
|
m_kDeadInstList.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::Destroy()
|
||||||
|
{
|
||||||
|
DeleteAllInstances();
|
||||||
|
|
||||||
|
CInstanceBase::DestroySystem();
|
||||||
|
|
||||||
|
__Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonCharacterManager::__Initialize()
|
||||||
|
{
|
||||||
|
memset(m_adwPointEffect, 0, sizeof(m_adwPointEffect));
|
||||||
|
m_pkInstMain = NULL;
|
||||||
|
m_pkInstBind = NULL;
|
||||||
|
m_pkInstPick = NULL;
|
||||||
|
m_v2PickedInstProjPos = D3DXVECTOR2(0.0f, 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CPythonCharacterManager::CPythonCharacterManager()
|
||||||
|
{
|
||||||
|
__Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonCharacterManager::~CPythonCharacterManager()
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
@@ -0,0 +1,834 @@
|
|||||||
|
#include "StdAfx.h"
|
||||||
|
#include "PythonChat.h"
|
||||||
|
|
||||||
|
#include "AbstractApplication.h"
|
||||||
|
#include "PythonCharacterManager.h"
|
||||||
|
#include "../EterBase/Timer.h"
|
||||||
|
|
||||||
|
int CPythonChat::TChatSet::ms_iChatModeSize = CHAT_TYPE_MAX_NUM;
|
||||||
|
|
||||||
|
const float c_fStartDisappearingTime = 5.0f;
|
||||||
|
const int c_iMaxLineCount = 5;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
CDynamicPool<CPythonChat::SChatLine> CPythonChat::SChatLine::ms_kPool;
|
||||||
|
|
||||||
|
void CPythonChat::SetChatColor(UINT eType, UINT r, UINT g, UINT b)
|
||||||
|
{
|
||||||
|
if (eType>=CHAT_TYPE_MAX_NUM)
|
||||||
|
return;
|
||||||
|
|
||||||
|
DWORD dwColor=(0xff000000)|(r<<16)|(g<<8)|(b);
|
||||||
|
m_akD3DXClrChat[eType]=D3DXCOLOR(dwColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
CPythonChat::SChatLine* CPythonChat::SChatLine::New()
|
||||||
|
{
|
||||||
|
return ms_kPool.Alloc();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::SChatLine::Delete(CPythonChat::SChatLine* pkChatLine)
|
||||||
|
{
|
||||||
|
pkChatLine->Instance.Destroy();
|
||||||
|
ms_kPool.Free(pkChatLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::SChatLine::DestroySystem()
|
||||||
|
{
|
||||||
|
ms_kPool.Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::SChatLine::SetColor(DWORD dwID, DWORD dwColor)
|
||||||
|
{
|
||||||
|
assert(dwID < CHAT_LINE_COLOR_ARRAY_MAX_NUM);
|
||||||
|
|
||||||
|
if (dwID >= CHAT_LINE_COLOR_ARRAY_MAX_NUM)
|
||||||
|
return;
|
||||||
|
|
||||||
|
aColor[dwID] = dwColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::SChatLine::SetColorAll(DWORD dwColor)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < CHAT_LINE_COLOR_ARRAY_MAX_NUM; ++i)
|
||||||
|
aColor[i] = dwColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
D3DXCOLOR & CPythonChat::SChatLine::GetColorRef(DWORD dwID)
|
||||||
|
{
|
||||||
|
assert(dwID < CHAT_LINE_COLOR_ARRAY_MAX_NUM);
|
||||||
|
|
||||||
|
if (dwID >= CHAT_LINE_COLOR_ARRAY_MAX_NUM)
|
||||||
|
{
|
||||||
|
static D3DXCOLOR color(1.0f, 0.0f, 0.0f, 1.0f);
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
return aColor[dwID];
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonChat::SChatLine::SChatLine()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < CHAT_LINE_COLOR_ARRAY_MAX_NUM; ++i)
|
||||||
|
aColor[i] = 0xff0000ff;
|
||||||
|
}
|
||||||
|
CPythonChat::SChatLine::~SChatLine()
|
||||||
|
{
|
||||||
|
Instance.Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
int CPythonChat::CreateChatSet(DWORD dwID)
|
||||||
|
{
|
||||||
|
m_ChatSetMap.insert(std::make_pair(dwID, TChatSet()));
|
||||||
|
return dwID;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::UpdateViewMode(DWORD dwID)
|
||||||
|
{
|
||||||
|
IAbstractApplication& rApp=IAbstractApplication::GetSingleton();
|
||||||
|
|
||||||
|
float fcurTime = rApp.GetGlobalTime();
|
||||||
|
//float felapsedTime = rApp.GetGlobalElapsedTime();
|
||||||
|
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TChatLineList * pLineList = &(pChatSet->m_ShowingChatLineList);
|
||||||
|
int iLineIndex = pLineList->size();
|
||||||
|
int iHeight = -(int(pLineList->size()+1) * pChatSet->m_iStep);
|
||||||
|
|
||||||
|
TChatLineList::iterator itor;
|
||||||
|
for (itor = pLineList->begin(); itor != pLineList->end();)
|
||||||
|
{
|
||||||
|
TChatLine * pChatLine = (*itor);
|
||||||
|
|
||||||
|
D3DXCOLOR & rColor = pChatLine->GetColorRef(dwID);
|
||||||
|
|
||||||
|
float fElapsedTime = (fcurTime - pChatLine->fAppendedTime);
|
||||||
|
if (fElapsedTime >= c_fStartDisappearingTime || iLineIndex >= c_iMaxLineCount)
|
||||||
|
{
|
||||||
|
rColor.a -= rColor.a / 10.0f;
|
||||||
|
|
||||||
|
if (rColor.a <= 0.1f)
|
||||||
|
{
|
||||||
|
itor = pLineList->erase(itor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++itor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++itor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////
|
||||||
|
|
||||||
|
iHeight += pChatSet->m_iStep;
|
||||||
|
--iLineIndex;
|
||||||
|
|
||||||
|
pChatLine->Instance.SetPosition(pChatSet->m_ix, pChatSet->m_iy + iHeight);
|
||||||
|
pChatLine->Instance.SetColor(rColor);
|
||||||
|
pChatLine->Instance.Update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::UpdateEditMode(DWORD dwID)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const int c_iAlphaLine = max(0, GetVisibleLineCount(dwID) - GetEditableLineCount(dwID) + 2);
|
||||||
|
|
||||||
|
int iLineIndex = 0;
|
||||||
|
float fAlpha = 0.0f;
|
||||||
|
float fAlphaStep = 0.0f;
|
||||||
|
|
||||||
|
if (c_iAlphaLine > 0)
|
||||||
|
fAlphaStep = 1.0f / float(c_iAlphaLine);
|
||||||
|
|
||||||
|
TChatLineList * pLineList = &(pChatSet->m_ShowingChatLineList);
|
||||||
|
int iHeight = -(int(pLineList->size()+1) * pChatSet->m_iStep);
|
||||||
|
|
||||||
|
for (TChatLineList::iterator itor = pLineList->begin(); itor != pLineList->end(); ++itor)
|
||||||
|
{
|
||||||
|
TChatLine * pChatLine = (*itor);
|
||||||
|
|
||||||
|
D3DXCOLOR & rColor = pChatLine->GetColorRef(dwID);
|
||||||
|
|
||||||
|
if (iLineIndex < c_iAlphaLine)
|
||||||
|
{
|
||||||
|
rColor.a += (fAlpha - rColor.a) / 10.0f;
|
||||||
|
fAlpha = fMIN(fAlpha+fAlphaStep, 1.0f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rColor.a = fMIN(rColor.a+0.05f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
iHeight += pChatSet->m_iStep;
|
||||||
|
pChatLine->Instance.SetPosition(pChatSet->m_ix, pChatSet->m_iy + iHeight);
|
||||||
|
pChatLine->Instance.SetColor(rColor);
|
||||||
|
pChatLine->Instance.Update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::UpdateLogMode(DWORD dwID)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TChatLineList * pLineList = &(pChatSet->m_ShowingChatLineList);
|
||||||
|
int iHeight = 0;
|
||||||
|
|
||||||
|
for (TChatLineList::reverse_iterator itor = pLineList->rbegin(); itor != pLineList->rend(); ++itor)
|
||||||
|
{
|
||||||
|
TChatLine * pChatLine = (*itor);
|
||||||
|
|
||||||
|
iHeight -= pChatSet->m_iStep;
|
||||||
|
pChatLine->Instance.SetPosition(pChatSet->m_ix, pChatSet->m_iy + iHeight);
|
||||||
|
pChatLine->Instance.SetColor(pChatLine->GetColorRef(dwID));
|
||||||
|
pChatLine->Instance.Update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::Update(DWORD dwID)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (pChatSet->m_iBoardState)
|
||||||
|
{
|
||||||
|
case BOARD_STATE_VIEW:
|
||||||
|
UpdateViewMode(dwID);
|
||||||
|
break;
|
||||||
|
case BOARD_STATE_EDIT:
|
||||||
|
UpdateEditMode(dwID);
|
||||||
|
break;
|
||||||
|
case BOARD_STATE_LOG:
|
||||||
|
UpdateLogMode(dwID);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD dwcurTime = CTimer::Instance().GetCurrentMillisecond();
|
||||||
|
for (TWaitChatList::iterator itor = m_WaitChatList.begin(); itor != m_WaitChatList.end();)
|
||||||
|
{
|
||||||
|
TWaitChat & rWaitChat = *itor;
|
||||||
|
|
||||||
|
if (rWaitChat.dwAppendingTime < dwcurTime)
|
||||||
|
{
|
||||||
|
AppendChat(rWaitChat.iType, rWaitChat.strChat.c_str());
|
||||||
|
|
||||||
|
itor = m_WaitChatList.erase(itor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++itor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::Render(DWORD dwID)
|
||||||
|
{
|
||||||
|
TChatLineList * pLineList = GetChatLineListPtr(dwID);
|
||||||
|
if (!pLineList)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (TChatLineList::iterator itor = pLineList->begin(); itor != pLineList->end(); ++itor)
|
||||||
|
{
|
||||||
|
CGraphicTextInstance & rInstance = (*itor)->Instance;
|
||||||
|
rInstance.Render();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPythonChat::SetBoardState(DWORD dwID, int iState)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pChatSet->m_iBoardState = iState;
|
||||||
|
ArrangeShowingChat(dwID);
|
||||||
|
}
|
||||||
|
void CPythonChat::SetPosition(DWORD dwID, int ix, int iy)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pChatSet->m_ix = ix;
|
||||||
|
pChatSet->m_iy = iy;
|
||||||
|
}
|
||||||
|
void CPythonChat::SetHeight(DWORD dwID, int iHeight)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pChatSet->m_iHeight = iHeight;
|
||||||
|
}
|
||||||
|
void CPythonChat::SetStep(DWORD dwID, int iStep)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pChatSet->m_iStep = iStep;
|
||||||
|
}
|
||||||
|
void CPythonChat::ToggleChatMode(DWORD dwID, int iMode)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pChatSet->m_iMode[iMode] = 1 - pChatSet->m_iMode[iMode];
|
||||||
|
// Tracef("ToggleChatMode : %d\n", iMode);
|
||||||
|
ArrangeShowingChat(dwID);
|
||||||
|
}
|
||||||
|
void CPythonChat::EnableChatMode(DWORD dwID, int iMode)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pChatSet->m_iMode[iMode] = TRUE;
|
||||||
|
// Tracef("EnableChatMode : %d\n", iMode);
|
||||||
|
ArrangeShowingChat(dwID);
|
||||||
|
}
|
||||||
|
void CPythonChat::DisableChatMode(DWORD dwID, int iMode)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pChatSet->m_iMode[iMode] = FALSE;
|
||||||
|
// Tracef("DisableChatMode : %d\n", iMode);
|
||||||
|
ArrangeShowingChat(dwID);
|
||||||
|
}
|
||||||
|
void CPythonChat::SetEndPos(DWORD dwID, float fPos)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fPos = max(0.0f, fPos);
|
||||||
|
fPos = min(1.0f, fPos);
|
||||||
|
if (pChatSet->m_fEndPos != fPos)
|
||||||
|
{
|
||||||
|
pChatSet->m_fEndPos = fPos;
|
||||||
|
ArrangeShowingChat(dwID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int CPythonChat::GetVisibleLineCount(DWORD dwID)
|
||||||
|
{
|
||||||
|
TChatLineList * pLineList = GetChatLineListPtr(dwID);
|
||||||
|
if (!pLineList)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return pLineList->size();
|
||||||
|
}
|
||||||
|
|
||||||
|
int CPythonChat::GetEditableLineCount(DWORD dwID)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return pChatSet->m_iHeight / pChatSet->m_iStep + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CPythonChat::GetLineCount(DWORD dwID)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
int iCount = 0;
|
||||||
|
for (DWORD i = 0; i < m_ChatLineDeque.size(); ++i)
|
||||||
|
{
|
||||||
|
if (!pChatSet->CheckMode(m_ChatLineDeque[i]->iType))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
++iCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
return iCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CPythonChat::GetLineStep(DWORD dwID)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return pChatSet->m_iStep;
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonChat::TChatLineList * CPythonChat::GetChatLineListPtr(DWORD dwID)
|
||||||
|
{
|
||||||
|
TChatSetMap::iterator itor = m_ChatSetMap.find(dwID);
|
||||||
|
if (m_ChatSetMap.end() == itor)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
TChatSet & rChatSet = itor->second;
|
||||||
|
return &(rChatSet.m_ShowingChatLineList);
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonChat::TChatSet * CPythonChat::GetChatSetPtr(DWORD dwID)
|
||||||
|
{
|
||||||
|
TChatSetMap::iterator itor = m_ChatSetMap.find(dwID);
|
||||||
|
if (m_ChatSetMap.end() == itor)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
TChatSet & rChatSet = itor->second;
|
||||||
|
return &rChatSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::ArrangeShowingChat(DWORD dwID)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = GetChatSetPtr(dwID);
|
||||||
|
if (!pChatSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pChatSet->m_ShowingChatLineList.clear();
|
||||||
|
|
||||||
|
TChatLineDeque TempChatLineDeque;
|
||||||
|
for (TChatLineDeque::iterator itor = m_ChatLineDeque.begin(); itor != m_ChatLineDeque.end(); ++itor)
|
||||||
|
{
|
||||||
|
TChatLine * pChatLine = *itor;
|
||||||
|
if (pChatSet->CheckMode(pChatLine->iType))
|
||||||
|
TempChatLineDeque.push_back(pChatLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
int icurLineCount = TempChatLineDeque.size();
|
||||||
|
int iVisibleLineCount = min(icurLineCount, (pChatSet->m_iHeight + pChatSet->m_iStep) / pChatSet->m_iStep);
|
||||||
|
int iEndLine = iVisibleLineCount + int(float(icurLineCount - iVisibleLineCount - 1) * pChatSet->m_fEndPos);
|
||||||
|
|
||||||
|
/////
|
||||||
|
|
||||||
|
int iHeight = 12;
|
||||||
|
for (int i = min(icurLineCount-1, iEndLine); i >= 0; --i)
|
||||||
|
{
|
||||||
|
if (!pChatSet->CheckMode(TempChatLineDeque[i]->iType))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (pChatSet->m_iHeight + pChatSet->m_iStep <= iHeight)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
pChatSet->m_ShowingChatLineList.push_front(TempChatLineDeque[i]);
|
||||||
|
|
||||||
|
iHeight += pChatSet->m_iStep;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::AppendChat(int iType, const char * c_szChat)
|
||||||
|
{
|
||||||
|
// DEFAULT_FONT
|
||||||
|
//static CResource * s_pResource = CResourceManager::Instance().GetResourcePointer(g_strDefaultFontName.c_str());
|
||||||
|
|
||||||
|
CGraphicText* pkDefaultFont = static_cast<CGraphicText*>(DefaultFont_GetResource());
|
||||||
|
if (!pkDefaultFont)
|
||||||
|
{
|
||||||
|
TraceError("CPythonChat::AppendChat - CANNOT_FIND_DEFAULT_FONT");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// END_OF_DEFAULT_FONT
|
||||||
|
|
||||||
|
IAbstractApplication& rApp=IAbstractApplication::GetSingleton();
|
||||||
|
SChatLine * pChatLine = SChatLine::New();
|
||||||
|
pChatLine->iType = iType;
|
||||||
|
pChatLine->Instance.SetValue(c_szChat);
|
||||||
|
|
||||||
|
// DEFAULT_FONT
|
||||||
|
pChatLine->Instance.SetTextPointer(pkDefaultFont);
|
||||||
|
// END_OF_DEFAULT_FONT
|
||||||
|
|
||||||
|
pChatLine->fAppendedTime = rApp.GetGlobalTime();
|
||||||
|
pChatLine->SetColorAll(GetChatColor(iType));
|
||||||
|
|
||||||
|
m_ChatLineDeque.push_back(pChatLine);
|
||||||
|
if (m_ChatLineDeque.size() > CHAT_LINE_MAX_NUM)
|
||||||
|
{
|
||||||
|
SChatLine * pChatLine = m_ChatLineDeque.front();
|
||||||
|
SChatLine::Delete(pChatLine);
|
||||||
|
m_ChatLineDeque.pop_front();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (TChatSetMap::iterator itor = m_ChatSetMap.begin(); itor != m_ChatSetMap.end(); ++itor)
|
||||||
|
{
|
||||||
|
TChatSet * pChatSet = &(itor->second);
|
||||||
|
//pChatLine->SetColor(itor->first, GetChatColor(iType));
|
||||||
|
|
||||||
|
// Edit Mode 를 억지로 끼워 맞추기 위해 추가
|
||||||
|
if (BOARD_STATE_EDIT == pChatSet->m_iBoardState)
|
||||||
|
{
|
||||||
|
ArrangeShowingChat(itor->first);
|
||||||
|
}
|
||||||
|
else// if (BOARD_STATE_VIEW == pChatSet->m_iBoardState)
|
||||||
|
{
|
||||||
|
pChatSet->m_ShowingChatLineList.push_back(pChatLine);
|
||||||
|
if (pChatSet->m_ShowingChatLineList.size() > CHAT_LINE_MAX_NUM)
|
||||||
|
{
|
||||||
|
pChatSet->m_ShowingChatLineList.pop_front();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::AppendChatWithDelay(int iType, const char * c_szChat, int iDelay)
|
||||||
|
{
|
||||||
|
TWaitChat WaitChat;
|
||||||
|
WaitChat.iType = iType;
|
||||||
|
WaitChat.strChat = c_szChat;
|
||||||
|
WaitChat.dwAppendingTime = CTimer::Instance().GetCurrentMillisecond() + iDelay;
|
||||||
|
m_WaitChatList.push_back(WaitChat);
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD CPythonChat::GetChatColor(int iType)
|
||||||
|
{
|
||||||
|
if (iType<CHAT_TYPE_MAX_NUM)
|
||||||
|
{
|
||||||
|
return m_akD3DXClrChat[iType];
|
||||||
|
}
|
||||||
|
|
||||||
|
return D3DXCOLOR(0.0f, 0.0f, 1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::IgnoreCharacter(const char * c_szName)
|
||||||
|
{
|
||||||
|
TIgnoreCharacterSet::iterator itor = m_IgnoreCharacterSet.find(c_szName);
|
||||||
|
// NOTE : 이미 차단 중이라면..
|
||||||
|
if (m_IgnoreCharacterSet.end() != itor)
|
||||||
|
{
|
||||||
|
m_IgnoreCharacterSet.erase(itor);
|
||||||
|
}
|
||||||
|
// NOTE : 차단이 되지 않은 캐릭터라면..
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_IgnoreCharacterSet.insert(c_szName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CPythonChat::IsIgnoreCharacter(const char * c_szName)
|
||||||
|
{
|
||||||
|
TIgnoreCharacterSet::iterator itor = m_IgnoreCharacterSet.find(c_szName);
|
||||||
|
|
||||||
|
if (m_IgnoreCharacterSet.end() == itor)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
CWhisper * CPythonChat::CreateWhisper(const char * c_szName)
|
||||||
|
{
|
||||||
|
CWhisper * pWhisper = CWhisper::New();
|
||||||
|
m_WhisperMap.insert(TWhisperMap::value_type(c_szName, pWhisper));
|
||||||
|
return pWhisper;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::AppendWhisper(int iType, const char * c_szName, const char * c_szChat)
|
||||||
|
{
|
||||||
|
TWhisperMap::iterator itor = m_WhisperMap.find(c_szName);
|
||||||
|
|
||||||
|
CWhisper * pWhisper;
|
||||||
|
if (itor == m_WhisperMap.end())
|
||||||
|
{
|
||||||
|
pWhisper = CreateWhisper(c_szName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pWhisper = itor->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
pWhisper->AppendChat(iType, c_szChat);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::ClearWhisper(const char * c_szName)
|
||||||
|
{
|
||||||
|
TWhisperMap::iterator itor = m_WhisperMap.find(c_szName);
|
||||||
|
|
||||||
|
if (itor != m_WhisperMap.end())
|
||||||
|
{
|
||||||
|
CWhisper * pWhisper = itor->second;
|
||||||
|
CWhisper::Delete(pWhisper);
|
||||||
|
|
||||||
|
m_WhisperMap.erase(itor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CPythonChat::GetWhisper(const char * c_szName, CWhisper ** ppWhisper)
|
||||||
|
{
|
||||||
|
TWhisperMap::iterator itor = m_WhisperMap.find(c_szName);
|
||||||
|
|
||||||
|
if (itor == m_WhisperMap.end())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
*ppWhisper = itor->second;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::InitWhisper(PyObject * ppyObject)
|
||||||
|
{
|
||||||
|
TWhisperMap::iterator itor = m_WhisperMap.begin();
|
||||||
|
for (; itor != m_WhisperMap.end(); ++itor)
|
||||||
|
{
|
||||||
|
std::string strName = itor->first;
|
||||||
|
PyCallClassMemberFunc(ppyObject, "MakeWhisperButton", Py_BuildValue("(s)", strName.c_str()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::__DestroyWhisperMap()
|
||||||
|
{
|
||||||
|
TWhisperMap::iterator itor = m_WhisperMap.begin();
|
||||||
|
for (; itor != m_WhisperMap.end(); ++itor)
|
||||||
|
{
|
||||||
|
CWhisper::Delete(itor->second);
|
||||||
|
}
|
||||||
|
m_WhisperMap.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::Close()
|
||||||
|
{
|
||||||
|
TChatSetMap::iterator itor = m_ChatSetMap.begin();
|
||||||
|
for (; itor != m_ChatSetMap.end(); ++itor)
|
||||||
|
{
|
||||||
|
TChatSet & rChatSet = itor->second;
|
||||||
|
TChatLineList * pLineList = &(rChatSet.m_ShowingChatLineList);
|
||||||
|
for (TChatLineList::iterator itor = pLineList->begin(); itor != pLineList->end(); ++itor)
|
||||||
|
{
|
||||||
|
TChatLine * pChatLine = (*itor);
|
||||||
|
pChatLine->fAppendedTime = 0.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::Destroy()
|
||||||
|
{
|
||||||
|
__DestroyWhisperMap();
|
||||||
|
|
||||||
|
m_ShowingChatLineList.clear();
|
||||||
|
m_ChatSetMap.clear();
|
||||||
|
m_ChatLineDeque.clear();
|
||||||
|
|
||||||
|
SChatLine::DestroySystem();
|
||||||
|
CWhisper::DestroySystem();
|
||||||
|
|
||||||
|
__Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonChat::__Initialize()
|
||||||
|
{
|
||||||
|
m_akD3DXClrChat[CHAT_TYPE_TALKING] = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
m_akD3DXClrChat[CHAT_TYPE_INFO] = D3DXCOLOR(1.0f, 0.785f, 0.785f, 1.0f);
|
||||||
|
m_akD3DXClrChat[CHAT_TYPE_NOTICE] = D3DXCOLOR(1.0f, 0.902f, 0.730f, 1.0f);
|
||||||
|
m_akD3DXClrChat[CHAT_TYPE_PARTY] = D3DXCOLOR(0.542f, 1.0f, 0.949f, 1.0f);
|
||||||
|
m_akD3DXClrChat[CHAT_TYPE_GUILD] = D3DXCOLOR(0.906f, 0.847f, 1.0f, 1.0f);
|
||||||
|
m_akD3DXClrChat[CHAT_TYPE_COMMAND] = D3DXCOLOR(0.658f, 1.0f, 0.835f, 1.0f);
|
||||||
|
m_akD3DXClrChat[CHAT_TYPE_SHOUT] = D3DXCOLOR(0.658f, 1.0f, 0.835f, 1.0f);
|
||||||
|
m_akD3DXClrChat[CHAT_TYPE_WHISPER] = D3DXCOLOR(0xff4AE14A);
|
||||||
|
m_akD3DXClrChat[CHAT_TYPE_BIG_NOTICE] = D3DXCOLOR(1.0f, 0.902f, 0.730f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonChat::CPythonChat()
|
||||||
|
{
|
||||||
|
__Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
CPythonChat::~CPythonChat()
|
||||||
|
{
|
||||||
|
assert(m_ChatLineDeque.empty());
|
||||||
|
assert(m_ShowingChatLineList.empty());
|
||||||
|
assert(m_ChatSetMap.empty());
|
||||||
|
assert(m_WhisperMap.empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
CDynamicPool<CWhisper> CWhisper::ms_kPool;
|
||||||
|
|
||||||
|
CWhisper* CWhisper::New()
|
||||||
|
{
|
||||||
|
return ms_kPool.Alloc();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWhisper::Delete(CWhisper* pkWhisper)
|
||||||
|
{
|
||||||
|
pkWhisper->Destroy();
|
||||||
|
ms_kPool.Free(pkWhisper);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWhisper::DestroySystem()
|
||||||
|
{
|
||||||
|
ms_kPool.Destroy();
|
||||||
|
|
||||||
|
SChatLine::DestroySystem();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWhisper::SetPosition(float fPosition)
|
||||||
|
{
|
||||||
|
m_fcurPosition = fPosition;
|
||||||
|
__ArrangeChat();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWhisper::SetBoxSize(float fWidth, float fHeight)
|
||||||
|
{
|
||||||
|
m_fWidth = fWidth;
|
||||||
|
m_fHeight = fHeight;
|
||||||
|
|
||||||
|
for (TChatLineDeque::iterator itor = m_ChatLineDeque.begin(); itor != m_ChatLineDeque.end(); ++itor)
|
||||||
|
{
|
||||||
|
TChatLine * pChatLine = *itor;
|
||||||
|
pChatLine->Instance.SetLimitWidth(fWidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWhisper::AppendChat(int iType, const char * c_szChat)
|
||||||
|
{
|
||||||
|
// DEFAULT_FONT
|
||||||
|
//static CResource * s_pResource = CResourceManager::Instance().GetResourcePointer(g_strDefaultFontName.c_str());
|
||||||
|
|
||||||
|
#if defined(LOCALE_SERVICE_YMIR) || defined(LOCALE_SERVICE_JAPAN) || defined(LOCALE_SERVICE_HONGKONG) || defined(LOCALE_SERVICE_TAIWAN) || defined(LOCALE_SERVICE_NEWCIBN)
|
||||||
|
CGraphicText* pkDefaultFont = static_cast<CGraphicText*>(DefaultFont_GetResource());
|
||||||
|
#else
|
||||||
|
CGraphicText* pkDefaultFont = (iType == CPythonChat::WHISPER_TYPE_GM) ? static_cast<CGraphicText*>(DefaultItalicFont_GetResource()) : static_cast<CGraphicText*>(DefaultFont_GetResource());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!pkDefaultFont)
|
||||||
|
{
|
||||||
|
TraceError("CWhisper::AppendChat - CANNOT_FIND_DEFAULT_FONT");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// END_OF_DEFAULT_FONT
|
||||||
|
|
||||||
|
SChatLine * pChatLine = SChatLine::New();
|
||||||
|
pChatLine->Instance.SetValue(c_szChat);
|
||||||
|
|
||||||
|
// DEFAULT_FONT
|
||||||
|
pChatLine->Instance.SetTextPointer(pkDefaultFont);
|
||||||
|
// END_OF_DEFAULT_FONT
|
||||||
|
|
||||||
|
pChatLine->Instance.SetLimitWidth(m_fWidth);
|
||||||
|
pChatLine->Instance.SetMultiLine(TRUE);
|
||||||
|
|
||||||
|
switch(iType)
|
||||||
|
{
|
||||||
|
case CPythonChat::WHISPER_TYPE_SYSTEM:
|
||||||
|
pChatLine->Instance.SetColor(D3DXCOLOR(1.0f, 0.785f, 0.785f, 1.0f));
|
||||||
|
break;
|
||||||
|
case CPythonChat::WHISPER_TYPE_GM:
|
||||||
|
pChatLine->Instance.SetColor(D3DXCOLOR(1.0f, 0.632f, 0.0f, 1.0f));
|
||||||
|
break;
|
||||||
|
case CPythonChat::WHISPER_TYPE_CHAT:
|
||||||
|
default:
|
||||||
|
pChatLine->Instance.SetColor(0xffffffff);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_ChatLineDeque.push_back(pChatLine);
|
||||||
|
|
||||||
|
__ArrangeChat();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWhisper::__ArrangeChat()
|
||||||
|
{
|
||||||
|
for (TChatLineDeque::iterator itor = m_ChatLineDeque.begin(); itor != m_ChatLineDeque.end(); ++itor)
|
||||||
|
{
|
||||||
|
TChatLine * pChatLine = *itor;
|
||||||
|
pChatLine->Instance.Update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWhisper::Render(float fx, float fy)
|
||||||
|
{
|
||||||
|
float fHeight = fy + m_fHeight;
|
||||||
|
|
||||||
|
int iViewCount = int(m_fHeight / m_fLineStep) - 1;
|
||||||
|
int iLineCount = int(m_ChatLineDeque.size());
|
||||||
|
int iStartLine = -1;
|
||||||
|
if (iLineCount > iViewCount)
|
||||||
|
{
|
||||||
|
iStartLine = int(float(iLineCount-iViewCount) * m_fcurPosition) + iViewCount - 1;
|
||||||
|
}
|
||||||
|
else if (!m_ChatLineDeque.empty())
|
||||||
|
{
|
||||||
|
iStartLine = iLineCount - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PORT: RECT holds the 32-bit Win32 LONG, so static_cast<long> would narrow here.
|
||||||
|
RECT Rect = { static_cast<LONG>(fx), static_cast<LONG>(fy), static_cast<LONG>(fx+m_fWidth), static_cast<LONG>(fy+m_fHeight) };
|
||||||
|
|
||||||
|
for (int i = iStartLine; i >= 0; --i)
|
||||||
|
{
|
||||||
|
assert(i >= 0 && i < int(m_ChatLineDeque.size()));
|
||||||
|
TChatLine * pChatLine = m_ChatLineDeque[i];
|
||||||
|
|
||||||
|
WORD wLineCount = pChatLine->Instance.GetTextLineCount();
|
||||||
|
fHeight -= wLineCount * m_fLineStep;
|
||||||
|
|
||||||
|
pChatLine->Instance.SetPosition(fx, fHeight);
|
||||||
|
pChatLine->Instance.Render(&Rect);
|
||||||
|
|
||||||
|
if (fHeight < fy)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWhisper::__Initialize()
|
||||||
|
{
|
||||||
|
m_fLineStep = 15.0f;
|
||||||
|
m_fWidth = 300.0f;
|
||||||
|
m_fHeight = 120.0f;
|
||||||
|
m_fcurPosition = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWhisper::Destroy()
|
||||||
|
{
|
||||||
|
std::for_each(m_ChatLineDeque.begin(), m_ChatLineDeque.end(), SChatLine::Delete);
|
||||||
|
m_ChatLineDeque.clear();
|
||||||
|
m_ShowingChatLineList.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
CWhisper::CWhisper()
|
||||||
|
{
|
||||||
|
__Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
CWhisper::~CWhisper()
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
CDynamicPool<CWhisper::SChatLine> CWhisper::SChatLine::ms_kPool;
|
||||||
|
|
||||||
|
CWhisper::SChatLine* CWhisper::SChatLine::New()
|
||||||
|
{
|
||||||
|
return ms_kPool.Alloc();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWhisper::SChatLine::Delete(CWhisper::SChatLine* pkChatLine)
|
||||||
|
{
|
||||||
|
pkChatLine->Instance.Destroy();
|
||||||
|
ms_kPool.Free(pkChatLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWhisper::SChatLine::DestroySystem()
|
||||||
|
{
|
||||||
|
ms_kPool.Destroy();
|
||||||
|
}
|
||||||
@@ -0,0 +1,520 @@
|
|||||||
|
#include "StdAfx.h"
|
||||||
|
#include "PythonChat.h"
|
||||||
|
#include "PythonItem.h"
|
||||||
|
#include "../GameLib/ItemManager.h"
|
||||||
|
|
||||||
|
PyObject * chatSetChatColor(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iType;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iType))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
int r;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 1, &r))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
int g;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 2, &g))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
int b;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 3, &b))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().SetChatColor(iType, r, g, b);
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatClear(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
CPythonChat::Instance().Destroy();
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatClose(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
CPythonChat::Instance().Close();
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatCreateChatSet(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
return Py_BuildValue("i", CPythonChat::Instance().CreateChatSet(iID));
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatUpdate(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().Update(iID);
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatRender(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().Render(iID);
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatSetBoardState(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
int iState;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 1, &iState))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().SetBoardState(iID, iState);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatSetPosition(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
int ix;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 1, &ix))
|
||||||
|
return Py_BuildException();
|
||||||
|
int iy;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 2, &iy))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().SetPosition(iID, ix, iy);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatSetHeight(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
int iHeight;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 1, &iHeight))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().SetHeight(iID, iHeight);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatSetStep(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
int iStep;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 1, &iStep))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().SetStep(iID, iStep);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatToggleChatMode(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
int iType;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 1, &iType))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().ToggleChatMode(iID, iType);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatEnableChatMode(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
int iType;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 1, &iType))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().EnableChatMode(iID, iType);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatDisableChatMode(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
int iType;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 1, &iType))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().DisableChatMode(iID, iType);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatSetEndPos(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
float fPos;
|
||||||
|
if (!PyTuple_GetFloat(poArgs, 1, &fPos))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().SetEndPos(iID, fPos);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatGetLineCount(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
return Py_BuildValue("i", CPythonChat::Instance().GetLineCount(iID));
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatGetVisibleLineCount(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
return Py_BuildValue("i", CPythonChat::Instance().GetVisibleLineCount(iID));
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatGetLineStep(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
return Py_BuildValue("i", CPythonChat::Instance().GetLineStep(iID));
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatAppendChat(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iType;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iType))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
char * szChat;
|
||||||
|
if (!PyTuple_GetString(poArgs, 1, &szChat))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().AppendChat(iType, szChat);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatAppendChatWithDelay(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iType;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iType))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
char * szChat;
|
||||||
|
if (!PyTuple_GetString(poArgs, 1, &szChat))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
int iDelay;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 2, &iDelay))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().AppendChatWithDelay(iType, szChat, iDelay);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatArrangeShowingChat(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iID;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().ArrangeShowingChat(iID);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatIgnoreCharacter(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
char * szName;
|
||||||
|
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().IgnoreCharacter(szName);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatIsIgnoreCharacter(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
char * szName;
|
||||||
|
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().IsIgnoreCharacter(szName);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatCreateWhisper(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
char * szName;
|
||||||
|
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().CreateWhisper(szName);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatAppendWhisper(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iType;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &iType))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
char * szName;
|
||||||
|
if (!PyTuple_GetString(poArgs, 1, &szName))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
char * szChat;
|
||||||
|
if (!PyTuple_GetString(poArgs, 2, &szChat))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().AppendWhisper(iType, szName, szChat);
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatRenderWhisper(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
char * szName;
|
||||||
|
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
float fx;
|
||||||
|
if (!PyTuple_GetFloat(poArgs, 1, &fx))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
float fy;
|
||||||
|
if (!PyTuple_GetFloat(poArgs, 2, &fy))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CWhisper * pWhisper;
|
||||||
|
if (CPythonChat::Instance().GetWhisper(szName, &pWhisper))
|
||||||
|
{
|
||||||
|
pWhisper->Render(fx, fy);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatSetWhisperBoxSize(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
char * szName;
|
||||||
|
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
float fWidth;
|
||||||
|
if (!PyTuple_GetFloat(poArgs, 1, &fWidth))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
float fHeight;
|
||||||
|
if (!PyTuple_GetFloat(poArgs, 2, &fHeight))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CWhisper * pWhisper;
|
||||||
|
if (CPythonChat::Instance().GetWhisper(szName, &pWhisper))
|
||||||
|
{
|
||||||
|
pWhisper->SetBoxSize(fWidth, fHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatSetWhisperPosition(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
char * szName;
|
||||||
|
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
float fPosition;
|
||||||
|
if (!PyTuple_GetFloat(poArgs, 1, &fPosition))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CWhisper * pWhisper;
|
||||||
|
if (CPythonChat::Instance().GetWhisper(szName, &pWhisper))
|
||||||
|
{
|
||||||
|
pWhisper->SetPosition(fPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatClearWhisper(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
char * szName;
|
||||||
|
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().ClearWhisper(szName);
|
||||||
|
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatInitWhisper(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
PyObject * poInterface;
|
||||||
|
if (!PyTuple_GetObject(poArgs, 0, &poInterface))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
CPythonChat::Instance().InitWhisper(poInterface);
|
||||||
|
return Py_BuildNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject * chatGetLinkFromHyperlink(PyObject * poSelf, PyObject * poArgs)
|
||||||
|
{
|
||||||
|
char * szHyperlink;
|
||||||
|
|
||||||
|
if (!PyTuple_GetString(poArgs, 0, &szHyperlink))
|
||||||
|
return Py_BuildException();
|
||||||
|
|
||||||
|
std::string stHyperlink(szHyperlink);
|
||||||
|
std::vector<std::string> results;
|
||||||
|
|
||||||
|
split_string(stHyperlink, ":", results, false);
|
||||||
|
|
||||||
|
// item:vnum:flag:socket0:socket1:socket2
|
||||||
|
if (0 == results[0].compare("item"))
|
||||||
|
{
|
||||||
|
if (results.size() < 6)
|
||||||
|
return Py_BuildValue("s", "");
|
||||||
|
|
||||||
|
CItemData * pItemData = NULL;
|
||||||
|
|
||||||
|
if (CItemManager::Instance().GetItemDataPointer(htoi(results[1].c_str()), &pItemData))
|
||||||
|
{
|
||||||
|
char buf[1024] = { 0 };
|
||||||
|
char itemlink[256];
|
||||||
|
int len;
|
||||||
|
bool isAttr = false;
|
||||||
|
|
||||||
|
len = snprintf(itemlink, sizeof(itemlink), "item:%x:%x:%x:%x:%x",
|
||||||
|
htoi(results[1].c_str()),
|
||||||
|
htoi(results[2].c_str()),
|
||||||
|
htoi(results[3].c_str()),
|
||||||
|
htoi(results[4].c_str()),
|
||||||
|
htoi(results[5].c_str()));
|
||||||
|
|
||||||
|
if (results.size() >= 8)
|
||||||
|
{
|
||||||
|
for (int i = 6; i < results.size(); i += 2)
|
||||||
|
{
|
||||||
|
len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%I64d",
|
||||||
|
htoi(results[i].c_str()),
|
||||||
|
atoi(results[i+1].c_str()));
|
||||||
|
isAttr = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isAttr)
|
||||||
|
//"item:번호:플래그:소켓0:소켓1:소켓2"
|
||||||
|
snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
|
||||||
|
else
|
||||||
|
snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
|
||||||
|
|
||||||
|
return Py_BuildValue("s", buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Py_BuildValue("s", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
void initChat()
|
||||||
|
{
|
||||||
|
static PyMethodDef s_methods[] =
|
||||||
|
{
|
||||||
|
{ "SetChatColor", chatSetChatColor, METH_VARARGS },
|
||||||
|
{ "Clear", chatClear, METH_VARARGS },
|
||||||
|
{ "Close", chatClose, METH_VARARGS },
|
||||||
|
|
||||||
|
{ "CreateChatSet", chatCreateChatSet, METH_VARARGS },
|
||||||
|
{ "Update", chatUpdate, METH_VARARGS },
|
||||||
|
{ "Render", chatRender, METH_VARARGS },
|
||||||
|
|
||||||
|
{ "SetBoardState", chatSetBoardState, METH_VARARGS },
|
||||||
|
{ "SetPosition", chatSetPosition, METH_VARARGS },
|
||||||
|
{ "SetHeight", chatSetHeight, METH_VARARGS },
|
||||||
|
{ "SetStep", chatSetStep, METH_VARARGS },
|
||||||
|
{ "ToggleChatMode", chatToggleChatMode, METH_VARARGS },
|
||||||
|
{ "EnableChatMode", chatEnableChatMode, METH_VARARGS },
|
||||||
|
{ "DisableChatMode", chatDisableChatMode, METH_VARARGS },
|
||||||
|
{ "SetEndPos", chatSetEndPos, METH_VARARGS },
|
||||||
|
|
||||||
|
{ "GetLineCount", chatGetLineCount, METH_VARARGS },
|
||||||
|
{ "GetVisibleLineCount", chatGetVisibleLineCount, METH_VARARGS },
|
||||||
|
{ "GetLineStep", chatGetLineStep, METH_VARARGS },
|
||||||
|
|
||||||
|
// Chat
|
||||||
|
{ "AppendChat", chatAppendChat, METH_VARARGS },
|
||||||
|
{ "AppendChatWithDelay", chatAppendChatWithDelay, METH_VARARGS },
|
||||||
|
{ "ArrangeShowingChat", chatArrangeShowingChat, METH_VARARGS },
|
||||||
|
|
||||||
|
// Ignore
|
||||||
|
{ "IgnoreCharacter", chatIgnoreCharacter, METH_VARARGS },
|
||||||
|
{ "IsIgnoreCharacter", chatIsIgnoreCharacter, METH_VARARGS },
|
||||||
|
|
||||||
|
// Whisper
|
||||||
|
{ "CreateWhisper", chatCreateWhisper, METH_VARARGS },
|
||||||
|
{ "AppendWhisper", chatAppendWhisper, METH_VARARGS },
|
||||||
|
{ "RenderWhisper", chatRenderWhisper, METH_VARARGS },
|
||||||
|
{ "SetWhisperBoxSize", chatSetWhisperBoxSize, METH_VARARGS },
|
||||||
|
{ "SetWhisperPosition", chatSetWhisperPosition, METH_VARARGS },
|
||||||
|
{ "ClearWhisper", chatClearWhisper, METH_VARARGS },
|
||||||
|
{ "InitWhisper", chatInitWhisper, METH_VARARGS },
|
||||||
|
|
||||||
|
// Link
|
||||||
|
{ "GetLinkFromHyperlink", chatGetLinkFromHyperlink, METH_VARARGS },
|
||||||
|
|
||||||
|
{ NULL, NULL, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
PyObject * poModule = Py_InitModule("chat", s_methods);
|
||||||
|
|
||||||
|
PyModule_AddIntConstant(poModule, "CHAT_TYPE_TALKING", CHAT_TYPE_TALKING);
|
||||||
|
PyModule_AddIntConstant(poModule, "CHAT_TYPE_INFO", CHAT_TYPE_INFO);
|
||||||
|
PyModule_AddIntConstant(poModule, "CHAT_TYPE_NOTICE", CHAT_TYPE_NOTICE);
|
||||||
|
PyModule_AddIntConstant(poModule, "CHAT_TYPE_PARTY", CHAT_TYPE_PARTY);
|
||||||
|
PyModule_AddIntConstant(poModule, "CHAT_TYPE_GUILD", CHAT_TYPE_GUILD);
|
||||||
|
PyModule_AddIntConstant(poModule, "CHAT_TYPE_COMMAND", CHAT_TYPE_COMMAND);
|
||||||
|
PyModule_AddIntConstant(poModule, "CHAT_TYPE_SHOUT", CHAT_TYPE_SHOUT);
|
||||||
|
PyModule_AddIntConstant(poModule, "CHAT_TYPE_WHISPER", CHAT_TYPE_WHISPER);
|
||||||
|
PyModule_AddIntConstant(poModule, "WHISPER_TYPE_CHAT", CPythonChat::WHISPER_TYPE_CHAT);
|
||||||
|
PyModule_AddIntConstant(poModule, "WHISPER_TYPE_SYSTEM", CPythonChat::WHISPER_TYPE_SYSTEM);
|
||||||
|
PyModule_AddIntConstant(poModule, "WHISPER_TYPE_GM", CPythonChat::WHISPER_TYPE_GM);
|
||||||
|
|
||||||
|
PyModule_AddIntConstant(poModule, "BOARD_STATE_VIEW", CPythonChat::BOARD_STATE_VIEW);
|
||||||
|
PyModule_AddIntConstant(poModule, "BOARD_STATE_EDIT", CPythonChat::BOARD_STATE_EDIT);
|
||||||
|
PyModule_AddIntConstant(poModule, "BOARD_STATE_LOG", CPythonChat::BOARD_STATE_LOG);
|
||||||
|
|
||||||
|
PyModule_AddIntConstant(poModule, "CHAT_SET_CHAT_WINDOW", 0);
|
||||||
|
PyModule_AddIntConstant(poModule, "CHAT_SET_LOG_WINDOW", 1);
|
||||||
|
}
|
||||||
@@ -0,0 +1,557 @@
|
|||||||
|
#include "StdAfx.h"
|
||||||
|
#include "PythonNetworkStream.h"
|
||||||
|
#include "PythonNonPlayer.h"
|
||||||
|
#include "AbstractApplication.h"
|
||||||
|
#include "AbstractPlayer.h"
|
||||||
|
#include "AbstractCharacterManager.h"
|
||||||
|
#include "AbstractChat.h"
|
||||||
|
#include "InstanceBase.h"
|
||||||
|
|
||||||
|
#define ishan(ch) (((ch) & 0xE0) > 0x90)
|
||||||
|
#define ishanasc(ch) (isascii(ch) || ishan(ch))
|
||||||
|
#define ishanalp(ch) (isalpha(ch) || ishan(ch))
|
||||||
|
#define isnhdigit(ch) (!ishan(ch) && isdigit(ch))
|
||||||
|
#define isnhspace(ch) (!ishan(ch) && isspace(ch))
|
||||||
|
|
||||||
|
#define LOWER(c) (((c) >= 'A' && (c) <= 'Z') ? ((c) + ('a' - 'A')) : (c))
|
||||||
|
#define UPPER(c) (((c) >= 'a' && (c) <= 'z') ? ((c) + ('A' - 'a')) : (c))
|
||||||
|
|
||||||
|
void SkipSpaces(char **string)
|
||||||
|
{
|
||||||
|
for (; **string != '\0' && isnhspace((unsigned char) **string); ++(*string));
|
||||||
|
}
|
||||||
|
|
||||||
|
char *OneArgument(char *argument, char *first_arg)
|
||||||
|
{
|
||||||
|
char mark = FALSE;
|
||||||
|
|
||||||
|
if (!argument)
|
||||||
|
{
|
||||||
|
*first_arg = '\0';
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
SkipSpaces(&argument);
|
||||||
|
|
||||||
|
while (*argument)
|
||||||
|
{
|
||||||
|
if (*argument == '\"')
|
||||||
|
{
|
||||||
|
mark = !mark;
|
||||||
|
++argument;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mark && isnhspace((unsigned char) *argument))
|
||||||
|
break;
|
||||||
|
|
||||||
|
*(first_arg++) = LOWER(*argument);
|
||||||
|
++argument;
|
||||||
|
}
|
||||||
|
|
||||||
|
*first_arg = '\0';
|
||||||
|
|
||||||
|
SkipSpaces(&argument);
|
||||||
|
return (argument);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppendMonsterList(const CPythonNonPlayer::TMobTableList & c_rMobTableList, const char * c_szHeader, int iType)
|
||||||
|
{
|
||||||
|
DWORD dwMonsterCount = 0;
|
||||||
|
std::string strMonsterList = c_szHeader;
|
||||||
|
|
||||||
|
CPythonNonPlayer::TMobTableList::const_iterator itor = c_rMobTableList.begin();
|
||||||
|
for (; itor!=c_rMobTableList.end(); ++itor)
|
||||||
|
{
|
||||||
|
const CPythonNonPlayer::TMobTable * c_pMobTable = *itor;
|
||||||
|
if (iType == c_pMobTable->bRank)
|
||||||
|
{
|
||||||
|
if (dwMonsterCount != 0)
|
||||||
|
strMonsterList += ", ";
|
||||||
|
strMonsterList += c_pMobTable->szLocaleName;
|
||||||
|
if (++dwMonsterCount > 5)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (dwMonsterCount > 0)
|
||||||
|
{
|
||||||
|
IAbstractChat& rkChat=IAbstractChat::GetSingleton();
|
||||||
|
rkChat.AppendChat(CHAT_TYPE_INFO, strMonsterList.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::ClientCommand(const char * c_szCommand)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SplitToken(const char * c_szLine, CTokenVector * pstTokenVector, const char * c_szDelimeter = " ")
|
||||||
|
{
|
||||||
|
pstTokenVector->reserve(10);
|
||||||
|
pstTokenVector->clear();
|
||||||
|
|
||||||
|
std::string stToken;
|
||||||
|
std::string strLine = c_szLine;
|
||||||
|
|
||||||
|
DWORD basePos = 0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
int beginPos = strLine.find_first_not_of(c_szDelimeter, basePos);
|
||||||
|
if (beginPos < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
int endPos;
|
||||||
|
|
||||||
|
if (strLine[beginPos] == '"')
|
||||||
|
{
|
||||||
|
++beginPos;
|
||||||
|
endPos = strLine.find_first_of("\"", beginPos);
|
||||||
|
|
||||||
|
if (endPos < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
basePos = endPos + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
endPos = strLine.find_first_of(c_szDelimeter, beginPos);
|
||||||
|
basePos = endPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
pstTokenVector->push_back(strLine.substr(beginPos, endPos - beginPos));
|
||||||
|
|
||||||
|
// 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites]
|
||||||
|
if (int(strLine.find_first_not_of(c_szDelimeter, basePos)) < 0)
|
||||||
|
break;
|
||||||
|
} while (basePos < strLine.length());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonNetworkStream::ServerCommand(char * c_szCommand)
|
||||||
|
{
|
||||||
|
// #0000811: [M2EU] 콘솔창 기능 차단
|
||||||
|
if (strcmpi(c_szCommand, "ConsoleEnable") == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (m_apoPhaseWnd[PHASE_WINDOW_GAME])
|
||||||
|
{
|
||||||
|
bool isTrue;
|
||||||
|
if (PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME],
|
||||||
|
"BINARY_ServerCommand_Run",
|
||||||
|
Py_BuildValue("(s)", c_szCommand),
|
||||||
|
&isTrue
|
||||||
|
))
|
||||||
|
{
|
||||||
|
if (isTrue)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (m_poSerCommandParserWnd)
|
||||||
|
{
|
||||||
|
bool isTrue;
|
||||||
|
if (PyCallClassMemberFunc(m_poSerCommandParserWnd,
|
||||||
|
"BINARY_ServerCommand_Run",
|
||||||
|
Py_BuildValue("(s)", c_szCommand),
|
||||||
|
&isTrue
|
||||||
|
))
|
||||||
|
{
|
||||||
|
if (isTrue)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CTokenVector TokenVector;
|
||||||
|
if (!SplitToken(c_szCommand, &TokenVector))
|
||||||
|
return;
|
||||||
|
if (TokenVector.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
const char * szCmd = TokenVector[0].c_str();
|
||||||
|
|
||||||
|
if (!strcmpi(szCmd, "quit"))
|
||||||
|
{
|
||||||
|
PostQuitMessage(0);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "BettingMoney"))
|
||||||
|
{
|
||||||
|
if (2 != TokenVector.size())
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//UINT uMoney= atoi(TokenVector[1].c_str());
|
||||||
|
|
||||||
|
}
|
||||||
|
// GIFT NOTIFY
|
||||||
|
else if (!strcmpi(szCmd, "gift"))
|
||||||
|
{
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "Gift_Show", Py_BuildValue("()"));
|
||||||
|
}
|
||||||
|
// CUBE
|
||||||
|
else if (!strcmpi(szCmd, "cube"))
|
||||||
|
{
|
||||||
|
if (TokenVector.size() < 2)
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("open" == TokenVector[1])
|
||||||
|
{
|
||||||
|
if (3 > TokenVector.size())
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD npcVNUM = (DWORD)atoi(TokenVector[2].c_str());
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_Open", Py_BuildValue("(i)", npcVNUM));
|
||||||
|
}
|
||||||
|
else if ("close" == TokenVector[1])
|
||||||
|
{
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_Close", Py_BuildValue("()"));
|
||||||
|
}
|
||||||
|
else if ("info" == TokenVector[1])
|
||||||
|
{
|
||||||
|
if (5 != TokenVector.size())
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT gold = atoi(TokenVector[2].c_str());
|
||||||
|
UINT itemVnum = atoi(TokenVector[3].c_str());
|
||||||
|
UINT count = atoi(TokenVector[4].c_str());
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_UpdateInfo", Py_BuildValue("(iii)", gold, itemVnum, count));
|
||||||
|
}
|
||||||
|
else if ("success" == TokenVector[1])
|
||||||
|
{
|
||||||
|
if (4 != TokenVector.size())
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT itemVnum = atoi(TokenVector[2].c_str());
|
||||||
|
UINT count = atoi(TokenVector[3].c_str());
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_Succeed", Py_BuildValue("(ii)", itemVnum, count));
|
||||||
|
}
|
||||||
|
else if ("fail" == TokenVector[1])
|
||||||
|
{
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_Failed", Py_BuildValue("()"));
|
||||||
|
}
|
||||||
|
else if ("r_list" == TokenVector[1])
|
||||||
|
{
|
||||||
|
// result list (/cube r_list npcVNUM resultCount resultText)
|
||||||
|
// 20383 4 72723,1/72725,1/72730.1/50001,5 <- 이런식으로 "/" 문자로 구분된 리스트를 줌
|
||||||
|
if (5 != TokenVector.size())
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %d", c_szCommand, 5);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD npcVNUM = (DWORD)atoi(TokenVector[2].c_str());
|
||||||
|
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_ResultList", Py_BuildValue("(is)", npcVNUM, TokenVector[4].c_str()));
|
||||||
|
}
|
||||||
|
else if ("m_info" == TokenVector[1])
|
||||||
|
{
|
||||||
|
// material list (/cube m_info requestStartIndex resultCount MaterialText)
|
||||||
|
// ex) requestStartIndex: 0, resultCount : 5 - 해당 NPC가 만들수 있는 아이템 중 0~4번째에 해당하는 아이템을 만드는 데 필요한 모든 재료들이 MaterialText에 들어있음
|
||||||
|
// 위 예시처럼 아이템이 다수인 경우 구분자 "@" 문자를 사용
|
||||||
|
// 0 5 125,1|126,2|127,2|123,5&555,5&555,4/120000 <- 이런식으로 서버에서 클라로 리스트를 줌
|
||||||
|
|
||||||
|
if (5 != TokenVector.size())
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %d", c_szCommand, 5);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT requestStartIndex = (UINT)atoi(TokenVector[2].c_str());
|
||||||
|
UINT resultCount = (UINT)atoi(TokenVector[3].c_str());
|
||||||
|
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_MaterialInfo", Py_BuildValue("(iis)", requestStartIndex, resultCount, TokenVector[4].c_str()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// CUEBE_END
|
||||||
|
else if (!strcmpi(szCmd, "ObserverCount"))
|
||||||
|
{
|
||||||
|
if (2 != TokenVector.size())
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT uObserverCount= atoi(TokenVector[1].c_str());
|
||||||
|
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME],
|
||||||
|
"BINARY_BettingGuildWar_UpdateObserverCount",
|
||||||
|
Py_BuildValue("(i)", uObserverCount)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "ObserverMode"))
|
||||||
|
{
|
||||||
|
if (2 != TokenVector.size())
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT uMode= atoi(TokenVector[1].c_str());
|
||||||
|
|
||||||
|
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
rkPlayer.SetObserverMode(uMode ? true : false);
|
||||||
|
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME],
|
||||||
|
"BINARY_BettingGuildWar_SetObserverMode",
|
||||||
|
Py_BuildValue("(i)", uMode)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "ObserverTeamInfo"))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "StoneDetect"))
|
||||||
|
{
|
||||||
|
if (4 != TokenVector.size())
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// vid distance(1-3) angle(0-360)
|
||||||
|
DWORD dwVID = atoi(TokenVector[1].c_str());
|
||||||
|
BYTE byDistance = atoi(TokenVector[2].c_str());
|
||||||
|
float fAngle = atof(TokenVector[3].c_str());
|
||||||
|
fAngle = fmod(540.0f - fAngle, 360.0f);
|
||||||
|
Tracef("StoneDetect [VID:%d] [Distance:%d] [Angle:%d->%f]\n", dwVID, byDistance, atoi(TokenVector[3].c_str()), fAngle);
|
||||||
|
|
||||||
|
IAbstractCharacterManager& rkChrMgr=IAbstractCharacterManager::GetSingleton();
|
||||||
|
|
||||||
|
CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(dwVID);
|
||||||
|
if (!pInstance)
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Not Exist Instance", c_szCommand);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TPixelPosition PixelPosition;
|
||||||
|
D3DXVECTOR3 v3Rotation(0.0f, 0.0f, fAngle);
|
||||||
|
pInstance->NEW_GetPixelPosition(&PixelPosition);
|
||||||
|
|
||||||
|
PixelPosition.y *= -1.0f;
|
||||||
|
|
||||||
|
switch (byDistance)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
CEffectManager::Instance().RegisterEffect("d:/ymir work/effect/etc/firecracker/find_out.mse");
|
||||||
|
CEffectManager::Instance().CreateEffect("d:/ymir work/effect/etc/firecracker/find_out.mse", PixelPosition, v3Rotation);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
CEffectManager::Instance().RegisterEffect("d:/ymir work/effect/etc/compass/appear_small.mse");
|
||||||
|
CEffectManager::Instance().CreateEffect("d:/ymir work/effect/etc/compass/appear_small.mse", PixelPosition, v3Rotation);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
CEffectManager::Instance().RegisterEffect("d:/ymir work/effect/etc/compass/appear_middle.mse");
|
||||||
|
CEffectManager::Instance().CreateEffect("d:/ymir work/effect/etc/compass/appear_middle.mse", PixelPosition, v3Rotation);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
CEffectManager::Instance().RegisterEffect("d:/ymir work/effect/etc/compass/appear_large.mse");
|
||||||
|
CEffectManager::Instance().CreateEffect("d:/ymir work/effect/etc/compass/appear_large.mse", PixelPosition, v3Rotation);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Distance", c_szCommand);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
IAbstractChat& rkChat=IAbstractChat::GetSingleton();
|
||||||
|
rkChat.AppendChat(CHAT_TYPE_INFO, c_szCommand);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "StartStaminaConsume"))
|
||||||
|
{
|
||||||
|
if (3 != TokenVector.size())
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD dwConsumePerSec = atoi(TokenVector[1].c_str());
|
||||||
|
DWORD dwCurrentStamina = atoi(TokenVector[2].c_str());
|
||||||
|
|
||||||
|
IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
rPlayer.StartStaminaConsume(dwConsumePerSec, dwCurrentStamina);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (!strcmpi(szCmd, "StopStaminaConsume"))
|
||||||
|
{
|
||||||
|
if (2 != TokenVector.size())
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %d", c_szCommand, TokenVector.size());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD dwCurrentStamina = atoi(TokenVector[1].c_str());
|
||||||
|
|
||||||
|
IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
rPlayer.StopStaminaConsume(dwCurrentStamina);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "sms"))
|
||||||
|
{
|
||||||
|
IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
rPlayer.SetMobileFlag(TRUE);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "nosms"))
|
||||||
|
{
|
||||||
|
IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
rPlayer.SetMobileFlag(FALSE);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "mobile_auth"))
|
||||||
|
{
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnMobileAuthority", Py_BuildValue("()"));
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "messenger_auth"))
|
||||||
|
{
|
||||||
|
const std::string & c_rstrName = TokenVector[1].c_str();
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnMessengerAddFriendQuestion", Py_BuildValue("(s)", c_rstrName.c_str()));
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "combo"))
|
||||||
|
{
|
||||||
|
int iFlag = atoi(TokenVector[1].c_str());
|
||||||
|
IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
rPlayer.SetComboSkillFlag(iFlag);
|
||||||
|
m_bComboSkillFlag = iFlag ? true : false;
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "setblockmode"))
|
||||||
|
{
|
||||||
|
int iFlag = atoi(TokenVector[1].c_str());
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnBlockMode", Py_BuildValue("(i)", iFlag));
|
||||||
|
}
|
||||||
|
// Emotion Start
|
||||||
|
else if (!strcmpi(szCmd, "french_kiss"))
|
||||||
|
{
|
||||||
|
int iVID1 = atoi(TokenVector[1].c_str());
|
||||||
|
int iVID2 = atoi(TokenVector[2].c_str());
|
||||||
|
|
||||||
|
IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
|
||||||
|
CInstanceBase * pInstance1 = rkChrMgr.GetInstancePtr(iVID1);
|
||||||
|
CInstanceBase * pInstance2 = rkChrMgr.GetInstancePtr(iVID2);
|
||||||
|
if (pInstance1 && pInstance2)
|
||||||
|
pInstance1->ActDualEmotion(*pInstance2, CRaceMotionData::NAME_FRENCH_KISS_START, CRaceMotionData::NAME_FRENCH_KISS_START);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "kiss"))
|
||||||
|
{
|
||||||
|
int iVID1 = atoi(TokenVector[1].c_str());
|
||||||
|
int iVID2 = atoi(TokenVector[2].c_str());
|
||||||
|
|
||||||
|
IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
|
||||||
|
CInstanceBase * pInstance1 = rkChrMgr.GetInstancePtr(iVID1);
|
||||||
|
CInstanceBase * pInstance2 = rkChrMgr.GetInstancePtr(iVID2);
|
||||||
|
if (pInstance1 && pInstance2)
|
||||||
|
pInstance1->ActDualEmotion(*pInstance2, CRaceMotionData::NAME_KISS_START, CRaceMotionData::NAME_KISS_START);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "slap"))
|
||||||
|
{
|
||||||
|
int iVID1 = atoi(TokenVector[1].c_str());
|
||||||
|
int iVID2 = atoi(TokenVector[2].c_str());
|
||||||
|
|
||||||
|
IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
|
||||||
|
CInstanceBase * pInstance1 = rkChrMgr.GetInstancePtr(iVID1);
|
||||||
|
CInstanceBase * pInstance2 = rkChrMgr.GetInstancePtr(iVID2);
|
||||||
|
if (pInstance1 && pInstance2)
|
||||||
|
pInstance1->ActDualEmotion(*pInstance2, CRaceMotionData::NAME_SLAP_HURT_START, CRaceMotionData::NAME_SLAP_HIT_START);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "clap"))
|
||||||
|
{
|
||||||
|
int iVID = atoi(TokenVector[1].c_str());
|
||||||
|
IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
|
||||||
|
CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
|
||||||
|
if (pInstance)
|
||||||
|
pInstance->ActEmotion(CRaceMotionData::NAME_CLAP);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "cheer1"))
|
||||||
|
{
|
||||||
|
int iVID = atoi(TokenVector[1].c_str());
|
||||||
|
IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
|
||||||
|
CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
|
||||||
|
if (pInstance)
|
||||||
|
pInstance->ActEmotion(CRaceMotionData::NAME_CHEERS_1);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "cheer2"))
|
||||||
|
{
|
||||||
|
int iVID = atoi(TokenVector[1].c_str());
|
||||||
|
IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
|
||||||
|
CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
|
||||||
|
if (pInstance)
|
||||||
|
pInstance->ActEmotion(CRaceMotionData::NAME_CHEERS_2);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "dance1"))
|
||||||
|
{
|
||||||
|
int iVID = atoi(TokenVector[1].c_str());
|
||||||
|
IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
|
||||||
|
CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
|
||||||
|
if (pInstance)
|
||||||
|
pInstance->ActEmotion(CRaceMotionData::NAME_DANCE_1);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "dance2"))
|
||||||
|
{
|
||||||
|
int iVID = atoi(TokenVector[1].c_str());
|
||||||
|
IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
|
||||||
|
CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
|
||||||
|
if (pInstance)
|
||||||
|
pInstance->ActEmotion(CRaceMotionData::NAME_DANCE_2);
|
||||||
|
}
|
||||||
|
else if (!strcmpi(szCmd, "dig_motion"))
|
||||||
|
{
|
||||||
|
int iVID = atoi(TokenVector[1].c_str());
|
||||||
|
IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
|
||||||
|
CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
|
||||||
|
if (pInstance)
|
||||||
|
pInstance->ActEmotion(CRaceMotionData::NAME_DIG);
|
||||||
|
}
|
||||||
|
// Emotion End
|
||||||
|
else
|
||||||
|
{
|
||||||
|
static std::map<std::string, int> s_emotionDict;
|
||||||
|
|
||||||
|
static bool s_isFirst = true;
|
||||||
|
if (s_isFirst)
|
||||||
|
{
|
||||||
|
s_isFirst = false;
|
||||||
|
|
||||||
|
s_emotionDict["dance3"] = CRaceMotionData::NAME_DANCE_3;
|
||||||
|
s_emotionDict["dance4"] = CRaceMotionData::NAME_DANCE_4;
|
||||||
|
s_emotionDict["dance5"] = CRaceMotionData::NAME_DANCE_5;
|
||||||
|
s_emotionDict["dance6"] = CRaceMotionData::NAME_DANCE_6;
|
||||||
|
s_emotionDict["congratulation"] = CRaceMotionData::NAME_CONGRATULATION;
|
||||||
|
s_emotionDict["forgive"] = CRaceMotionData::NAME_FORGIVE;
|
||||||
|
s_emotionDict["angry"] = CRaceMotionData::NAME_ANGRY;
|
||||||
|
s_emotionDict["attractive"] = CRaceMotionData::NAME_ATTRACTIVE;
|
||||||
|
s_emotionDict["sad"] = CRaceMotionData::NAME_SAD;
|
||||||
|
s_emotionDict["shy"] = CRaceMotionData::NAME_SHY;
|
||||||
|
s_emotionDict["cheerup"] = CRaceMotionData::NAME_CHEERUP;
|
||||||
|
s_emotionDict["banter"] = CRaceMotionData::NAME_BANTER;
|
||||||
|
s_emotionDict["joy"] = CRaceMotionData::NAME_JOY;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<std::string, int>::iterator f = s_emotionDict.find(szCmd);
|
||||||
|
if (f == s_emotionDict.end())
|
||||||
|
{
|
||||||
|
TraceError("Unknown Server Command %s | %s", c_szCommand, szCmd);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int emotionIndex = f->second;
|
||||||
|
|
||||||
|
int iVID = atoi(TokenVector[1].c_str());
|
||||||
|
IAbstractCharacterManager & rkChrMgr = IAbstractCharacterManager::GetSingleton();
|
||||||
|
CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(iVID);
|
||||||
|
|
||||||
|
if (pInstance)
|
||||||
|
pInstance->ActEmotion(emotionIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,454 @@
|
|||||||
|
#include "StdAfx.h"
|
||||||
|
#include "PythonNetworkStream.h"
|
||||||
|
#include "NetworkActorManager.h"
|
||||||
|
#include "PythonBackground.h"
|
||||||
|
|
||||||
|
#include "PythonApplication.h"
|
||||||
|
#include "AbstractPlayer.h"
|
||||||
|
#include "../GameLib/ActorInstance.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void CPythonNetworkStream::__GlobalPositionToLocalPosition(LONG& rGlobalX, LONG& rGlobalY)
|
||||||
|
{
|
||||||
|
CPythonBackground&rkBgMgr=CPythonBackground::Instance();
|
||||||
|
rkBgMgr.GlobalPositionToLocalPosition(rGlobalX, rGlobalY);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonNetworkStream::__LocalPositionToGlobalPosition(LONG& rLocalX, LONG& rLocalY)
|
||||||
|
{
|
||||||
|
CPythonBackground&rkBgMgr=CPythonBackground::Instance();
|
||||||
|
rkBgMgr.LocalPositionToGlobalPosition(rLocalX, rLocalY);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::__CanActMainInstance()
|
||||||
|
{
|
||||||
|
CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
|
||||||
|
CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr();
|
||||||
|
if (!pkInstMain)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return pkInstMain->CanAct();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonNetworkStream::__ClearNetworkActorManager()
|
||||||
|
{
|
||||||
|
m_rokNetActorMgr->Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void __SetWeaponPower(IAbstractPlayer& rkPlayer, DWORD dwWeaponID)
|
||||||
|
{
|
||||||
|
DWORD minPower=0;
|
||||||
|
DWORD maxPower=0;
|
||||||
|
DWORD minMagicPower=0;
|
||||||
|
DWORD maxMagicPower=0;
|
||||||
|
DWORD addPower=0;
|
||||||
|
|
||||||
|
CItemData* pkWeapon;
|
||||||
|
if (CItemManager::Instance().GetItemDataPointer(dwWeaponID, &pkWeapon))
|
||||||
|
{
|
||||||
|
if (pkWeapon->GetType()==CItemData::ITEM_TYPE_WEAPON)
|
||||||
|
{
|
||||||
|
minPower=pkWeapon->GetValue(3);
|
||||||
|
maxPower=pkWeapon->GetValue(4);
|
||||||
|
minMagicPower=pkWeapon->GetValue(1);
|
||||||
|
maxMagicPower=pkWeapon->GetValue(2);
|
||||||
|
addPower=pkWeapon->GetValue(5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rkPlayer.SetWeaponPower(minPower, maxPower, minMagicPower, maxMagicPower, addPower);
|
||||||
|
}
|
||||||
|
|
||||||
|
//테이블에서 이름이 "." 인 것들
|
||||||
|
//차후에 서버에서 보내주지 않게 되면 없어질 함수..(서버님께 꼭!!협박; )
|
||||||
|
bool IsInvisibleRace(WORD raceNum)
|
||||||
|
{
|
||||||
|
switch(raceNum)
|
||||||
|
{
|
||||||
|
case 20025:
|
||||||
|
case 20038:
|
||||||
|
case 20039:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static SNetworkActorData s_kNetActorData;
|
||||||
|
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvCharacterAppendPacket()
|
||||||
|
{
|
||||||
|
TPacketGCCharacterAdd chrAddPacket;
|
||||||
|
if (!Recv(sizeof(chrAddPacket), &chrAddPacket))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
__GlobalPositionToLocalPosition(chrAddPacket.x, chrAddPacket.y);
|
||||||
|
|
||||||
|
SNetworkActorData kNetActorData;
|
||||||
|
kNetActorData.m_bType=chrAddPacket.bType;
|
||||||
|
kNetActorData.m_dwMovSpd=chrAddPacket.bMovingSpeed;
|
||||||
|
kNetActorData.m_dwAtkSpd=chrAddPacket.bAttackSpeed;
|
||||||
|
kNetActorData.m_dwRace=chrAddPacket.wRaceNum;
|
||||||
|
|
||||||
|
kNetActorData.m_dwStateFlags=chrAddPacket.bStateFlag;
|
||||||
|
kNetActorData.m_dwVID=chrAddPacket.dwVID;
|
||||||
|
kNetActorData.m_fRot=chrAddPacket.angle;
|
||||||
|
|
||||||
|
kNetActorData.m_stName="";
|
||||||
|
|
||||||
|
kNetActorData.m_stName="";
|
||||||
|
kNetActorData.m_kAffectFlags.CopyData(0, sizeof(chrAddPacket.dwAffectFlag[0]), &chrAddPacket.dwAffectFlag[0]);
|
||||||
|
kNetActorData.m_kAffectFlags.CopyData(32, sizeof(chrAddPacket.dwAffectFlag[1]), &chrAddPacket.dwAffectFlag[1]);
|
||||||
|
|
||||||
|
kNetActorData.SetPosition(chrAddPacket.x, chrAddPacket.y);
|
||||||
|
|
||||||
|
kNetActorData.m_sAlignment=0;/*chrAddPacket.sAlignment*/;
|
||||||
|
kNetActorData.m_byPKMode=0;/*chrAddPacket.bPKMode*/;
|
||||||
|
kNetActorData.m_dwGuildID=0;/*chrAddPacket.dwGuild*/;
|
||||||
|
kNetActorData.m_dwEmpireID=0;/*chrAddPacket.bEmpire*/;
|
||||||
|
kNetActorData.m_dwArmor=0;/*chrAddPacket.awPart[CHR_EQUIPPART_ARMOR]*/;
|
||||||
|
kNetActorData.m_dwWeapon=0;/*chrAddPacket.awPart[CHR_EQUIPPART_WEAPON]*/;
|
||||||
|
kNetActorData.m_dwHair=0;/*chrAddPacket.awPart[CHR_EQUIPPART_HAIR]*/;
|
||||||
|
kNetActorData.m_dwMountVnum=0;/*chrAddPacket.dwMountVnum*/;
|
||||||
|
|
||||||
|
kNetActorData.m_dwLevel = 0; // 몬스터 레벨 표시 안함
|
||||||
|
|
||||||
|
if(kNetActorData.m_bType != CActorInstance::TYPE_PC &&
|
||||||
|
kNetActorData.m_bType != CActorInstance::TYPE_NPC)
|
||||||
|
{
|
||||||
|
const char * c_szName;
|
||||||
|
CPythonNonPlayer& rkNonPlayer=CPythonNonPlayer::Instance();
|
||||||
|
if (rkNonPlayer.GetName(kNetActorData.m_dwRace, &c_szName))
|
||||||
|
kNetActorData.m_stName = c_szName;
|
||||||
|
//else
|
||||||
|
// kNetActorData.m_stName=chrAddPacket.name;
|
||||||
|
|
||||||
|
__RecvCharacterAppendPacket(&kNetActorData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_kNetActorData = kNetActorData;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvCharacterAdditionalInfo()
|
||||||
|
{
|
||||||
|
TPacketGCCharacterAdditionalInfo chrInfoPacket;
|
||||||
|
if (!Recv(sizeof(chrInfoPacket), &chrInfoPacket))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
|
||||||
|
SNetworkActorData kNetActorData = s_kNetActorData;
|
||||||
|
if (IsInvisibleRace(kNetActorData.m_dwRace))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if(kNetActorData.m_dwVID == chrInfoPacket.dwVID)
|
||||||
|
{
|
||||||
|
kNetActorData.m_stName = chrInfoPacket.name;
|
||||||
|
kNetActorData.m_dwGuildID = chrInfoPacket.dwGuildID;
|
||||||
|
kNetActorData.m_dwLevel = chrInfoPacket.dwLevel;
|
||||||
|
kNetActorData.m_sAlignment=chrInfoPacket.sAlignment;
|
||||||
|
kNetActorData.m_byPKMode=chrInfoPacket.bPKMode;
|
||||||
|
kNetActorData.m_dwGuildID=chrInfoPacket.dwGuildID;
|
||||||
|
kNetActorData.m_dwEmpireID=chrInfoPacket.bEmpire;
|
||||||
|
kNetActorData.m_dwArmor=chrInfoPacket.awPart[CHR_EQUIPPART_ARMOR];
|
||||||
|
kNetActorData.m_dwWeapon=chrInfoPacket.awPart[CHR_EQUIPPART_WEAPON];
|
||||||
|
kNetActorData.m_dwHair=chrInfoPacket.awPart[CHR_EQUIPPART_HAIR];
|
||||||
|
kNetActorData.m_dwMountVnum=chrInfoPacket.dwMountVnum;
|
||||||
|
|
||||||
|
__RecvCharacterAppendPacket(&kNetActorData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TraceError("TPacketGCCharacterAdditionalInfo name=%s vid=%d race=%d Error",chrInfoPacket.name,chrInfoPacket.dwVID,kNetActorData.m_dwRace);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvCharacterAppendPacketNew()
|
||||||
|
{
|
||||||
|
TraceError("TPacketGCCharacterAdd2\264\302 \276\262\301\366 \276\312\264\302 \306\320\305\266\300\324\264\317\264\331.");
|
||||||
|
TPacketGCCharacterAdd2 chrAddPacket;
|
||||||
|
if (!Recv(sizeof(chrAddPacket), &chrAddPacket))
|
||||||
|
return false;
|
||||||
|
if(IsInvisibleRace(chrAddPacket.wRaceNum))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
__GlobalPositionToLocalPosition(chrAddPacket.x, chrAddPacket.y);
|
||||||
|
|
||||||
|
SNetworkActorData kNetActorData;
|
||||||
|
kNetActorData.m_dwLevel = 0;
|
||||||
|
kNetActorData.m_bType=chrAddPacket.bType;
|
||||||
|
kNetActorData.m_dwGuildID=chrAddPacket.dwGuild;
|
||||||
|
kNetActorData.m_dwEmpireID=chrAddPacket.bEmpire;
|
||||||
|
kNetActorData.m_dwMovSpd=chrAddPacket.bMovingSpeed;
|
||||||
|
kNetActorData.m_dwAtkSpd=chrAddPacket.bAttackSpeed;
|
||||||
|
kNetActorData.m_dwRace=chrAddPacket.wRaceNum;
|
||||||
|
kNetActorData.m_dwArmor=chrAddPacket.awPart[CHR_EQUIPPART_ARMOR];
|
||||||
|
kNetActorData.m_dwWeapon=chrAddPacket.awPart[CHR_EQUIPPART_WEAPON];
|
||||||
|
kNetActorData.m_dwHair=chrAddPacket.awPart[CHR_EQUIPPART_HAIR];
|
||||||
|
kNetActorData.m_dwStateFlags=chrAddPacket.bStateFlag;
|
||||||
|
kNetActorData.m_dwVID=chrAddPacket.dwVID;
|
||||||
|
kNetActorData.m_dwMountVnum=chrAddPacket.dwMountVnum;
|
||||||
|
kNetActorData.m_fRot=chrAddPacket.angle;
|
||||||
|
kNetActorData.m_kAffectFlags.CopyData(0, sizeof(chrAddPacket.dwAffectFlag[0]), &chrAddPacket.dwAffectFlag[0]);
|
||||||
|
kNetActorData.m_kAffectFlags.CopyData(32, sizeof(chrAddPacket.dwAffectFlag[1]), &chrAddPacket.dwAffectFlag[1]);
|
||||||
|
kNetActorData.SetPosition(chrAddPacket.x, chrAddPacket.y);
|
||||||
|
kNetActorData.m_sAlignment=chrAddPacket.sAlignment;
|
||||||
|
kNetActorData.m_byPKMode=chrAddPacket.bPKMode;
|
||||||
|
kNetActorData.m_stName=chrAddPacket.name;
|
||||||
|
__RecvCharacterAppendPacket(&kNetActorData);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvCharacterUpdatePacket()
|
||||||
|
{
|
||||||
|
TPacketGCCharacterUpdate chrUpdatePacket;
|
||||||
|
if (!Recv(sizeof(chrUpdatePacket), &chrUpdatePacket))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SNetworkUpdateActorData kNetUpdateActorData;
|
||||||
|
kNetUpdateActorData.m_dwGuildID=chrUpdatePacket.dwGuildID;
|
||||||
|
kNetUpdateActorData.m_dwMovSpd=chrUpdatePacket.bMovingSpeed;
|
||||||
|
kNetUpdateActorData.m_dwAtkSpd=chrUpdatePacket.bAttackSpeed;
|
||||||
|
kNetUpdateActorData.m_dwArmor=chrUpdatePacket.awPart[CHR_EQUIPPART_ARMOR];
|
||||||
|
kNetUpdateActorData.m_dwWeapon=chrUpdatePacket.awPart[CHR_EQUIPPART_WEAPON];
|
||||||
|
kNetUpdateActorData.m_dwHair=chrUpdatePacket.awPart[CHR_EQUIPPART_HAIR];
|
||||||
|
kNetUpdateActorData.m_dwVID=chrUpdatePacket.dwVID;
|
||||||
|
kNetUpdateActorData.m_kAffectFlags.CopyData(0, sizeof(chrUpdatePacket.dwAffectFlag[0]), &chrUpdatePacket.dwAffectFlag[0]);
|
||||||
|
kNetUpdateActorData.m_kAffectFlags.CopyData(32, sizeof(chrUpdatePacket.dwAffectFlag[1]), &chrUpdatePacket.dwAffectFlag[1]);
|
||||||
|
kNetUpdateActorData.m_sAlignment=chrUpdatePacket.sAlignment;
|
||||||
|
kNetUpdateActorData.m_byPKMode=chrUpdatePacket.bPKMode;
|
||||||
|
kNetUpdateActorData.m_dwStateFlags=chrUpdatePacket.bStateFlag;
|
||||||
|
kNetUpdateActorData.m_dwMountVnum=chrUpdatePacket.dwMountVnum;
|
||||||
|
__RecvCharacterUpdatePacket(&kNetUpdateActorData);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvCharacterUpdatePacketNew()
|
||||||
|
{
|
||||||
|
TPacketGCCharacterUpdate2 chrUpdatePacket;
|
||||||
|
if (!Recv(sizeof(chrUpdatePacket), &chrUpdatePacket))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SNetworkUpdateActorData kNetUpdateActorData;
|
||||||
|
kNetUpdateActorData.m_dwGuildID=chrUpdatePacket.dwGuildID;
|
||||||
|
kNetUpdateActorData.m_dwMovSpd=chrUpdatePacket.bMovingSpeed;
|
||||||
|
kNetUpdateActorData.m_dwAtkSpd=chrUpdatePacket.bAttackSpeed;
|
||||||
|
kNetUpdateActorData.m_dwArmor=chrUpdatePacket.awPart[CHR_EQUIPPART_ARMOR];
|
||||||
|
kNetUpdateActorData.m_dwWeapon=chrUpdatePacket.awPart[CHR_EQUIPPART_WEAPON];
|
||||||
|
kNetUpdateActorData.m_dwHair=chrUpdatePacket.awPart[CHR_EQUIPPART_HAIR];
|
||||||
|
kNetUpdateActorData.m_dwVID=chrUpdatePacket.dwVID;
|
||||||
|
kNetUpdateActorData.m_kAffectFlags.CopyData(0, sizeof(chrUpdatePacket.dwAffectFlag[0]), &chrUpdatePacket.dwAffectFlag[0]);
|
||||||
|
kNetUpdateActorData.m_kAffectFlags.CopyData(32, sizeof(chrUpdatePacket.dwAffectFlag[1]), &chrUpdatePacket.dwAffectFlag[1]);
|
||||||
|
kNetUpdateActorData.m_sAlignment=chrUpdatePacket.sAlignment;
|
||||||
|
kNetUpdateActorData.m_byPKMode=chrUpdatePacket.bPKMode;
|
||||||
|
kNetUpdateActorData.m_dwStateFlags=chrUpdatePacket.bStateFlag;
|
||||||
|
kNetUpdateActorData.m_dwMountVnum=chrUpdatePacket.dwMountVnum;
|
||||||
|
__RecvCharacterUpdatePacket(&kNetUpdateActorData);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonNetworkStream::__RecvCharacterAppendPacket(SNetworkActorData * pkNetActorData)
|
||||||
|
{
|
||||||
|
// NOTE : 카메라가 땅에 묻히는 문제의 해결을 위해 메인 캐릭터가 지형에 올려지기
|
||||||
|
// 전에 맵을 업데이트 해 높이를 구할 수 있도록 해놓아야 합니다.
|
||||||
|
// 단, 게임이 들어갈때가 아닌 이미 캐릭터가 추가 된 이후에만 합니다.
|
||||||
|
// 헌데 이동인데 왜 Move로 안하고 Append로 하는지..? - [levites]
|
||||||
|
IAbstractPlayer& rkPlayer = IAbstractPlayer::GetSingleton();
|
||||||
|
if (rkPlayer.IsMainCharacterIndex(pkNetActorData->m_dwVID))
|
||||||
|
{
|
||||||
|
rkPlayer.SetRace(pkNetActorData->m_dwRace);
|
||||||
|
|
||||||
|
__SetWeaponPower(rkPlayer, pkNetActorData->m_dwWeapon);
|
||||||
|
|
||||||
|
if (rkPlayer.NEW_GetMainActorPtr())
|
||||||
|
{
|
||||||
|
CPythonBackground::Instance().Update(pkNetActorData->m_lCurX, pkNetActorData->m_lCurY, 0.0f);
|
||||||
|
CPythonCharacterManager::Instance().Update();
|
||||||
|
|
||||||
|
// NOTE : 사귀 타워일 경우 GOTO 로 이동시에도 맵 이름을 출력하도록 처리
|
||||||
|
{
|
||||||
|
std::string strMapName = CPythonBackground::Instance().GetWarpMapName();
|
||||||
|
if (strMapName == "metin2_map_deviltower1")
|
||||||
|
__ShowMapName(pkNetActorData->m_lCurX, pkNetActorData->m_lCurY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
__ShowMapName(pkNetActorData->m_lCurX, pkNetActorData->m_lCurY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_rokNetActorMgr->AppendActor(*pkNetActorData);
|
||||||
|
|
||||||
|
if (GetMainActorVID()==pkNetActorData->m_dwVID)
|
||||||
|
{
|
||||||
|
rkPlayer.SetTarget(0);
|
||||||
|
if (m_bComboSkillFlag)
|
||||||
|
rkPlayer.SetComboSkillFlag(m_bComboSkillFlag);
|
||||||
|
|
||||||
|
__SetGuildID(pkNetActorData->m_dwGuildID);
|
||||||
|
//CPythonApplication::Instance().SkipRenderBuffering(10000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonNetworkStream::__RecvCharacterUpdatePacket(SNetworkUpdateActorData * pkNetUpdateActorData)
|
||||||
|
{
|
||||||
|
m_rokNetActorMgr->UpdateActor(*pkNetUpdateActorData);
|
||||||
|
|
||||||
|
IAbstractPlayer& rkPlayer = IAbstractPlayer::GetSingleton();
|
||||||
|
if (rkPlayer.IsMainCharacterIndex(pkNetUpdateActorData->m_dwVID))
|
||||||
|
{
|
||||||
|
__SetGuildID(pkNetUpdateActorData->m_dwGuildID);
|
||||||
|
__SetWeaponPower(rkPlayer, pkNetUpdateActorData->m_dwWeapon);
|
||||||
|
|
||||||
|
__RefreshStatus();
|
||||||
|
__RefreshAlignmentWindow();
|
||||||
|
__RefreshEquipmentWindow();
|
||||||
|
__RefreshInventoryWindow();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rkPlayer.NotifyCharacterUpdate(pkNetUpdateActorData->m_dwVID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvCharacterDeletePacket()
|
||||||
|
{
|
||||||
|
TPacketGCCharacterDelete chrDelPacket;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(chrDelPacket), &chrDelPacket))
|
||||||
|
{
|
||||||
|
TraceError("CPythonNetworkStream::RecvCharacterDeletePacket - Recv Error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_rokNetActorMgr->RemoveActor(chrDelPacket.dwVID);
|
||||||
|
|
||||||
|
// 캐릭터가 사라질때 개인 상점도 없애줍니다.
|
||||||
|
// Key Check 를 하기때문에 없어도 상관은 없습니다.
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME],
|
||||||
|
"BINARY_PrivateShop_Disappear",
|
||||||
|
Py_BuildValue("(i)", chrDelPacket.dwVID)
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvCharacterMovePacket()
|
||||||
|
{
|
||||||
|
TPacketGCMove kMovePacket;
|
||||||
|
if (!Recv(sizeof(TPacketGCMove), &kMovePacket))
|
||||||
|
{
|
||||||
|
Tracen("CPythonNetworkStream::RecvCharacterMovePacket - PACKET READ ERROR");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
__GlobalPositionToLocalPosition(kMovePacket.lX, kMovePacket.lY);
|
||||||
|
|
||||||
|
SNetworkMoveActorData kNetMoveActorData;
|
||||||
|
kNetMoveActorData.m_dwArg=kMovePacket.bArg;
|
||||||
|
kNetMoveActorData.m_dwFunc=kMovePacket.bFunc;
|
||||||
|
kNetMoveActorData.m_dwTime=kMovePacket.dwTime;
|
||||||
|
kNetMoveActorData.m_dwVID=kMovePacket.dwVID;
|
||||||
|
kNetMoveActorData.m_fRot=kMovePacket.bRot*5.0f;
|
||||||
|
kNetMoveActorData.m_lPosX=kMovePacket.lX;
|
||||||
|
kNetMoveActorData.m_lPosY=kMovePacket.lY;
|
||||||
|
kNetMoveActorData.m_dwDuration=kMovePacket.dwDuration;
|
||||||
|
|
||||||
|
m_rokNetActorMgr->MoveActor(kNetMoveActorData);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvOwnerShipPacket()
|
||||||
|
{
|
||||||
|
TPacketGCOwnership kPacketOwnership;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(kPacketOwnership), &kPacketOwnership))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_rokNetActorMgr->SetActorOwner(kPacketOwnership.dwOwnerVID, kPacketOwnership.dwVictimVID);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvSyncPositionPacket()
|
||||||
|
{
|
||||||
|
TPacketGCSyncPosition kPacketSyncPos;
|
||||||
|
if (!Recv(sizeof(kPacketSyncPos), &kPacketSyncPos))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TPacketGCSyncPositionElement kSyncPos;
|
||||||
|
|
||||||
|
UINT uSyncPosCount=(kPacketSyncPos.wSize-sizeof(kPacketSyncPos))/sizeof(kSyncPos);
|
||||||
|
for (UINT iSyncPos=0; iSyncPos<uSyncPosCount; ++iSyncPos)
|
||||||
|
{
|
||||||
|
if (!Recv(sizeof(TPacketGCSyncPositionElement), &kSyncPos))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
#ifdef __MOVIE_MODE__
|
||||||
|
return true;
|
||||||
|
#endif __MOVIE_MODE__
|
||||||
|
|
||||||
|
//Tracenf("CPythonNetworkStream::RecvSyncPositionPacket %d (%d, %d)", kSyncPos.dwVID, kSyncPos.lX, kSyncPos.lY);
|
||||||
|
|
||||||
|
__GlobalPositionToLocalPosition(kSyncPos.lX, kSyncPos.lY);
|
||||||
|
m_rokNetActorMgr->SyncActor(kSyncPos.dwVID, kSyncPos.lX, kSyncPos.lY);
|
||||||
|
|
||||||
|
/*
|
||||||
|
CPythonCharacterManager & rkChrMgr = CPythonCharacterManager::Instance();
|
||||||
|
CInstanceBase * pkChrInst = rkChrMgr.GetInstancePtr(kSyncPos.dwVID);
|
||||||
|
|
||||||
|
if (pkChrInst)
|
||||||
|
{
|
||||||
|
pkChrInst->NEW_SyncPixelPosition(kSyncPos.lX, kSyncPos.lY);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
bool CPythonNetworkStream::RecvCharacterAppendPacket()
|
||||||
|
{
|
||||||
|
TPacketGCCharacterAdd chrAddPacket;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(chrAddPacket), &chrAddPacket))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
__GlobalPositionToLocalPosition(chrAddPacket.lX, chrAddPacket.lY);
|
||||||
|
|
||||||
|
SNetworkActorData kNetActorData;
|
||||||
|
kNetActorData.m_dwGuildID=chrAddPacket.dwGuild;
|
||||||
|
kNetActorData.m_dwEmpireID=chrAddPacket.bEmpire;
|
||||||
|
kNetActorData.m_dwMovSpd=chrAddPacket.bMovingSpeed;
|
||||||
|
kNetActorData.m_dwAtkSpd=chrAddPacket.bAttackSpeed;
|
||||||
|
kNetActorData.m_dwRace=chrAddPacket.wRaceNum;
|
||||||
|
kNetActorData.m_dwShape=chrAddPacket.parts[CRaceData::PART_MAIN];
|
||||||
|
kNetActorData.m_dwStateFlags=chrAddPacket.bStateFlag;
|
||||||
|
kNetActorData.m_dwVID=chrAddPacket.dwVID;
|
||||||
|
kNetActorData.m_dwWeapon=chrAddPacket.parts[CRaceData::PART_WEAPON];
|
||||||
|
kNetActorData.m_fRot=chrAddPacket.angle;
|
||||||
|
kNetActorData.m_kAffectFlags.CopyData(0, sizeof(chrAddPacket.dwAffectFlag[0]), &chrAddPacket.dwAffectFlag[0]);
|
||||||
|
kNetActorData.m_kAffectFlags.CopyData(32, sizeof(chrAddPacket.dwAffectFlag[1]), &chrAddPacket.dwAffectFlag[1]);
|
||||||
|
kNetActorData.SetPosition(chrAddPacket.lX, chrAddPacket.lY);
|
||||||
|
kNetActorData.m_stName=chrAddPacket.name;
|
||||||
|
__RecvCharacterAppendPacket(&kNetActorData);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
@@ -0,0 +1,940 @@
|
|||||||
|
#include "StdAfx.h"
|
||||||
|
#include "PythonNetworkStream.h"
|
||||||
|
#include "PythonItem.h"
|
||||||
|
#include "PythonShop.h"
|
||||||
|
#include "PythonExchange.h"
|
||||||
|
#include "PythonSafeBox.h"
|
||||||
|
#include "PythonCharacterManager.h"
|
||||||
|
|
||||||
|
#include "AbstractPlayer.h"
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// SafeBox
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendSafeBoxMoneyPacket(BYTE byState, DWORD dwMoney)
|
||||||
|
{
|
||||||
|
assert(!"CPythonNetworkStream::SendSafeBoxMoneyPacket - \273\347\277\353\307\317\301\366 \276\312\264\302 \307\324\274\366");
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// TPacketCGSafeboxMoney kSafeboxMoney;
|
||||||
|
// kSafeboxMoney.bHeader = HEADER_CG_SAFEBOX_MONEY;
|
||||||
|
// kSafeboxMoney.bState = byState;
|
||||||
|
// kSafeboxMoney.dwMoney = dwMoney;
|
||||||
|
// if (!Send(sizeof(kSafeboxMoney), &kSafeboxMoney))
|
||||||
|
// return false;
|
||||||
|
//
|
||||||
|
// return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendSafeBoxCheckinPacket(TItemPos InventoryPos, BYTE bySafeBoxPos)
|
||||||
|
{
|
||||||
|
__PlayInventoryItemDropSound(InventoryPos);
|
||||||
|
|
||||||
|
TPacketCGSafeboxCheckin kSafeboxCheckin;
|
||||||
|
kSafeboxCheckin.bHeader = HEADER_CG_SAFEBOX_CHECKIN;
|
||||||
|
kSafeboxCheckin.ItemPos = InventoryPos;
|
||||||
|
kSafeboxCheckin.bSafePos = bySafeBoxPos;
|
||||||
|
if (!Send(sizeof(kSafeboxCheckin), &kSafeboxCheckin))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendSafeBoxCheckoutPacket(BYTE bySafeBoxPos, TItemPos InventoryPos)
|
||||||
|
{
|
||||||
|
__PlaySafeBoxItemDropSound(bySafeBoxPos);
|
||||||
|
|
||||||
|
TPacketCGSafeboxCheckout kSafeboxCheckout;
|
||||||
|
kSafeboxCheckout.bHeader = HEADER_CG_SAFEBOX_CHECKOUT;
|
||||||
|
kSafeboxCheckout.bSafePos = bySafeBoxPos;
|
||||||
|
kSafeboxCheckout.ItemPos = InventoryPos;
|
||||||
|
if (!Send(sizeof(kSafeboxCheckout), &kSafeboxCheckout))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendSafeBoxItemMovePacket(BYTE bySourcePos, BYTE byTargetPos, BYTE byCount)
|
||||||
|
{
|
||||||
|
__PlaySafeBoxItemDropSound(bySourcePos);
|
||||||
|
|
||||||
|
TPacketCGItemMove kItemMove;
|
||||||
|
kItemMove.header = HEADER_CG_SAFEBOX_ITEM_MOVE;
|
||||||
|
kItemMove.pos = TItemPos(INVENTORY, bySourcePos);
|
||||||
|
kItemMove.num = byCount;
|
||||||
|
kItemMove.change_pos = TItemPos(INVENTORY, byTargetPos);
|
||||||
|
if (!Send(sizeof(kItemMove), &kItemMove))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvSafeBoxSetPacket()
|
||||||
|
{
|
||||||
|
TPacketGCItemSet2 kItemSet;
|
||||||
|
if (!Recv(sizeof(kItemSet), &kItemSet))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TItemData kItemData;
|
||||||
|
kItemData.vnum = kItemSet.vnum;
|
||||||
|
kItemData.count = kItemSet.count;
|
||||||
|
kItemData.flags = kItemSet.flags;
|
||||||
|
kItemData.anti_flags = kItemSet.anti_flags;
|
||||||
|
for (int isocket=0; isocket<ITEM_SOCKET_SLOT_MAX_NUM; ++isocket)
|
||||||
|
kItemData.alSockets[isocket] = kItemSet.alSockets[isocket];
|
||||||
|
for (int iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
|
||||||
|
kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];
|
||||||
|
|
||||||
|
CPythonSafeBox::Instance().SetItemData(kItemSet.Cell.cell, kItemData);
|
||||||
|
|
||||||
|
__RefreshSafeboxWindow();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvSafeBoxDelPacket()
|
||||||
|
{
|
||||||
|
TPacketGCItemDel kItemDel;
|
||||||
|
if (!Recv(sizeof(kItemDel), &kItemDel))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CPythonSafeBox::Instance().DelItemData(kItemDel.pos);
|
||||||
|
|
||||||
|
__RefreshSafeboxWindow();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvSafeBoxWrongPasswordPacket()
|
||||||
|
{
|
||||||
|
TPacketGCSafeboxWrongPassword kSafeboxWrongPassword;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(kSafeboxWrongPassword), &kSafeboxWrongPassword))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnSafeBoxError", Py_BuildValue("()"));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvSafeBoxSizePacket()
|
||||||
|
{
|
||||||
|
TPacketGCSafeboxSize kSafeBoxSize;
|
||||||
|
if (!Recv(sizeof(kSafeBoxSize), &kSafeBoxSize))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CPythonSafeBox::Instance().OpenSafeBox(kSafeBoxSize.bSize);
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OpenSafeboxWindow", Py_BuildValue("(i)", kSafeBoxSize.bSize));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvSafeBoxMoneyChangePacket()
|
||||||
|
{
|
||||||
|
TPacketGCSafeboxMoneyChange kMoneyChange;
|
||||||
|
if (!Recv(sizeof(kMoneyChange), &kMoneyChange))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CPythonSafeBox::Instance().SetMoney(kMoneyChange.dwMoney);
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RefreshSafeboxMoney", Py_BuildValue("()"));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// SafeBox
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// Mall
|
||||||
|
bool CPythonNetworkStream::SendMallCheckoutPacket(BYTE byMallPos, TItemPos InventoryPos)
|
||||||
|
{
|
||||||
|
__PlayMallItemDropSound(byMallPos);
|
||||||
|
|
||||||
|
TPacketCGMallCheckout kMallCheckoutPacket;
|
||||||
|
kMallCheckoutPacket.bHeader = HEADER_CG_MALL_CHECKOUT;
|
||||||
|
kMallCheckoutPacket.bMallPos = byMallPos;
|
||||||
|
kMallCheckoutPacket.ItemPos = InventoryPos;
|
||||||
|
if (!Send(sizeof(kMallCheckoutPacket), &kMallCheckoutPacket))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvMallOpenPacket()
|
||||||
|
{
|
||||||
|
TPacketGCMallOpen kMallOpen;
|
||||||
|
if (!Recv(sizeof(kMallOpen), &kMallOpen))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CPythonSafeBox::Instance().OpenMall(kMallOpen.bSize);
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OpenMallWindow", Py_BuildValue("(i)", kMallOpen.bSize));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool CPythonNetworkStream::RecvMallItemSetPacket()
|
||||||
|
{
|
||||||
|
TPacketGCItemSet2 kItemSet;
|
||||||
|
if (!Recv(sizeof(kItemSet), &kItemSet))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TItemData kItemData;
|
||||||
|
kItemData.vnum = kItemSet.vnum;
|
||||||
|
kItemData.count = kItemSet.count;
|
||||||
|
kItemData.flags = kItemSet.flags;
|
||||||
|
kItemData.anti_flags = kItemSet.anti_flags;
|
||||||
|
for (int isocket=0; isocket<ITEM_SOCKET_SLOT_MAX_NUM; ++isocket)
|
||||||
|
kItemData.alSockets[isocket] = kItemSet.alSockets[isocket];
|
||||||
|
for (int iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
|
||||||
|
kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];
|
||||||
|
|
||||||
|
CPythonSafeBox::Instance().SetMallItemData(kItemSet.Cell.cell, kItemData);
|
||||||
|
|
||||||
|
__RefreshMallWindow();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool CPythonNetworkStream::RecvMallItemDelPacket()
|
||||||
|
{
|
||||||
|
TPacketGCItemDel kItemDel;
|
||||||
|
if (!Recv(sizeof(kItemDel), &kItemDel))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CPythonSafeBox::Instance().DelMallItemData(kItemDel.pos);
|
||||||
|
|
||||||
|
__RefreshMallWindow();
|
||||||
|
Tracef(" >> CPythonNetworkStream::RecvMallItemDelPacket\n");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Mall
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// Item
|
||||||
|
// Recieve
|
||||||
|
bool CPythonNetworkStream::RecvItemSetPacket()
|
||||||
|
{
|
||||||
|
TPacketGCItemSet packet_item_set;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(TPacketGCItemSet), &packet_item_set))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TItemData kItemData;
|
||||||
|
kItemData.vnum = packet_item_set.vnum;
|
||||||
|
kItemData.count = packet_item_set.count;
|
||||||
|
kItemData.flags = 0;
|
||||||
|
for (int i=0; i<ITEM_SOCKET_SLOT_MAX_NUM; ++i)
|
||||||
|
kItemData.alSockets[i]=packet_item_set.alSockets[i];
|
||||||
|
for (int j=0; j<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++j)
|
||||||
|
kItemData.aAttr[j]=packet_item_set.aAttr[j];
|
||||||
|
|
||||||
|
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
|
||||||
|
rkPlayer.SetItemData(packet_item_set.Cell, kItemData);
|
||||||
|
|
||||||
|
__RefreshInventoryWindow();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvItemSetPacket2()
|
||||||
|
{
|
||||||
|
TPacketGCItemSet2 packet_item_set;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(TPacketGCItemSet2), &packet_item_set))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TItemData kItemData;
|
||||||
|
kItemData.vnum = packet_item_set.vnum;
|
||||||
|
kItemData.count = packet_item_set.count;
|
||||||
|
kItemData.flags = packet_item_set.flags;
|
||||||
|
kItemData.anti_flags = packet_item_set.anti_flags;
|
||||||
|
|
||||||
|
for (int i=0; i<ITEM_SOCKET_SLOT_MAX_NUM; ++i)
|
||||||
|
kItemData.alSockets[i]=packet_item_set.alSockets[i];
|
||||||
|
for (int j=0; j<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++j)
|
||||||
|
kItemData.aAttr[j]=packet_item_set.aAttr[j];
|
||||||
|
|
||||||
|
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
rkPlayer.SetItemData(packet_item_set.Cell, kItemData);
|
||||||
|
|
||||||
|
if (packet_item_set.highlight)
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Highlight_Item", Py_BuildValue("(ii)", packet_item_set.Cell.window_type, packet_item_set.Cell.cell));
|
||||||
|
|
||||||
|
__RefreshInventoryWindow();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvItemUsePacket()
|
||||||
|
{
|
||||||
|
TPacketGCItemUse packet_item_use;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(TPacketGCItemUse), &packet_item_use))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
__RefreshInventoryWindow();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvItemUpdatePacket()
|
||||||
|
{
|
||||||
|
TPacketGCItemUpdate packet_item_update;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(TPacketGCItemUpdate), &packet_item_update))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
rkPlayer.SetItemCount(packet_item_update.Cell, packet_item_update.count);
|
||||||
|
for (int i = 0; i < ITEM_SOCKET_SLOT_MAX_NUM; ++i)
|
||||||
|
rkPlayer.SetItemMetinSocket(packet_item_update.Cell, i, packet_item_update.alSockets[i]);
|
||||||
|
for (int j = 0; j < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++j)
|
||||||
|
rkPlayer.SetItemAttribute(packet_item_update.Cell, j, packet_item_update.aAttr[j].bType, packet_item_update.aAttr[j].sValue);
|
||||||
|
|
||||||
|
__RefreshInventoryWindow();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvItemGroundAddPacket()
|
||||||
|
{
|
||||||
|
TPacketGCItemGroundAdd packet_item_ground_add;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(TPacketGCItemGroundAdd), &packet_item_ground_add))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
__GlobalPositionToLocalPosition(packet_item_ground_add.lX, packet_item_ground_add.lY);
|
||||||
|
|
||||||
|
CPythonItem::Instance().CreateItem(packet_item_ground_add.dwVID,
|
||||||
|
packet_item_ground_add.dwVnum,
|
||||||
|
packet_item_ground_add.lX,
|
||||||
|
packet_item_ground_add.lY,
|
||||||
|
packet_item_ground_add.lZ);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvItemOwnership()
|
||||||
|
{
|
||||||
|
TPacketGCItemOwnership p;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(TPacketGCItemOwnership), &p))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CPythonItem::Instance().SetOwnership(p.dwVID, p.szName);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvItemGroundDelPacket()
|
||||||
|
{
|
||||||
|
TPacketGCItemGroundDel packet_item_ground_del;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(TPacketGCItemGroundDel), &packet_item_ground_del))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CPythonItem::Instance().DeleteItem(packet_item_ground_del.vid);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvQuickSlotAddPacket()
|
||||||
|
{
|
||||||
|
TPacketGCQuickSlotAdd packet_quick_slot_add;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(TPacketGCQuickSlotAdd), &packet_quick_slot_add))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
rkPlayer.AddQuickSlot(packet_quick_slot_add.pos, packet_quick_slot_add.slot.Type, packet_quick_slot_add.slot.Position);
|
||||||
|
|
||||||
|
__RefreshInventoryWindow();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvQuickSlotDelPacket()
|
||||||
|
{
|
||||||
|
TPacketGCQuickSlotDel packet_quick_slot_del;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(TPacketGCQuickSlotDel), &packet_quick_slot_del))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
rkPlayer.DeleteQuickSlot(packet_quick_slot_del.pos);
|
||||||
|
|
||||||
|
__RefreshInventoryWindow();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvQuickSlotMovePacket()
|
||||||
|
{
|
||||||
|
TPacketGCQuickSlotSwap packet_quick_slot_swap;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(TPacketGCQuickSlotSwap), &packet_quick_slot_swap))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
rkPlayer.MoveQuickSlot(packet_quick_slot_swap.pos, packet_quick_slot_swap.change_pos);
|
||||||
|
|
||||||
|
__RefreshInventoryWindow();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendShopEndPacket()
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
TPacketCGShop packet_shop;
|
||||||
|
packet_shop.header = HEADER_CG_SHOP;
|
||||||
|
packet_shop.subheader = SHOP_SUBHEADER_CG_END;
|
||||||
|
|
||||||
|
if (!Send(sizeof(packet_shop), &packet_shop))
|
||||||
|
{
|
||||||
|
Tracef("SendShopEndPacket Error\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendShopBuyPacket(BYTE bPos)
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
TPacketCGShop PacketShop;
|
||||||
|
PacketShop.header = HEADER_CG_SHOP;
|
||||||
|
PacketShop.subheader = SHOP_SUBHEADER_CG_BUY;
|
||||||
|
|
||||||
|
if (!Send(sizeof(TPacketCGShop), &PacketShop))
|
||||||
|
{
|
||||||
|
Tracef("SendShopBuyPacket Error\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
BYTE bCount=1;
|
||||||
|
if (!Send(sizeof(BYTE), &bCount))
|
||||||
|
{
|
||||||
|
Tracef("SendShopBuyPacket Error\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Send(sizeof(BYTE), &bPos))
|
||||||
|
{
|
||||||
|
Tracef("SendShopBuyPacket Error\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendShopSellPacket(BYTE bySlot)
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
TPacketCGShop PacketShop;
|
||||||
|
PacketShop.header = HEADER_CG_SHOP;
|
||||||
|
PacketShop.subheader = SHOP_SUBHEADER_CG_SELL;
|
||||||
|
|
||||||
|
if (!Send(sizeof(TPacketCGShop), &PacketShop))
|
||||||
|
{
|
||||||
|
Tracef("SendShopSellPacket Error\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Send(sizeof(BYTE), &bySlot))
|
||||||
|
{
|
||||||
|
Tracef("SendShopAddSellPacket Error\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendShopSellPacketNew(BYTE bySlot, BYTE byCount)
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
TPacketCGShop PacketShop;
|
||||||
|
PacketShop.header = HEADER_CG_SHOP;
|
||||||
|
PacketShop.subheader = SHOP_SUBHEADER_CG_SELL2;
|
||||||
|
|
||||||
|
if (!Send(sizeof(TPacketCGShop), &PacketShop))
|
||||||
|
{
|
||||||
|
Tracef("SendShopSellPacket Error\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Send(sizeof(BYTE), &bySlot))
|
||||||
|
{
|
||||||
|
Tracef("SendShopAddSellPacket Error\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Send(sizeof(BYTE), &byCount))
|
||||||
|
{
|
||||||
|
Tracef("SendShopAddSellPacket Error\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Tracef(" SendShopSellPacketNew(bySlot=%d, byCount=%d)\n", bySlot, byCount);
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send
|
||||||
|
bool CPythonNetworkStream::SendItemUsePacket(TItemPos pos)
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (__IsEquipItemInSlot(pos))
|
||||||
|
{
|
||||||
|
if (CPythonExchange::Instance().isTrading())
|
||||||
|
{
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_AppendNotifyMessage", Py_BuildValue("(s)", "CANNOT_EQUIP_EXCHANGE"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CPythonShop::Instance().IsOpen())
|
||||||
|
{
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_AppendNotifyMessage", Py_BuildValue("(s)", "CANNOT_EQUIP_SHOP"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (__IsPlayerAttacking())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
__PlayInventoryItemUseSound(pos);
|
||||||
|
|
||||||
|
TPacketCGItemUse itemUsePacket;
|
||||||
|
itemUsePacket.header = HEADER_CG_ITEM_USE;
|
||||||
|
itemUsePacket.pos = pos;
|
||||||
|
|
||||||
|
if (!Send(sizeof(TPacketCGItemUse), &itemUsePacket))
|
||||||
|
{
|
||||||
|
Tracen("SendItemUsePacket Error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendItemUseToItemPacket(TItemPos source_pos, TItemPos target_pos)
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
TPacketCGItemUseToItem itemUseToItemPacket;
|
||||||
|
itemUseToItemPacket.header = HEADER_CG_ITEM_USE_TO_ITEM;
|
||||||
|
itemUseToItemPacket.source_pos = source_pos;
|
||||||
|
itemUseToItemPacket.target_pos = target_pos;
|
||||||
|
|
||||||
|
if (!Send(sizeof(TPacketCGItemUseToItem), &itemUseToItemPacket))
|
||||||
|
{
|
||||||
|
Tracen("SendItemUseToItemPacket Error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
Tracef(" << SendItemUseToItemPacket(src=%d, dst=%d)\n", source_pos, target_pos);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendItemDropPacket(TItemPos pos, DWORD elk)
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
TPacketCGItemDrop itemDropPacket;
|
||||||
|
itemDropPacket.header = HEADER_CG_ITEM_DROP;
|
||||||
|
itemDropPacket.pos = pos;
|
||||||
|
itemDropPacket.elk = elk;
|
||||||
|
|
||||||
|
if (!Send(sizeof(TPacketCGItemDrop), &itemDropPacket))
|
||||||
|
{
|
||||||
|
Tracen("SendItemDropPacket Error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendItemDropPacketNew(TItemPos pos, DWORD elk, DWORD count)
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
TPacketCGItemDrop2 itemDropPacket;
|
||||||
|
itemDropPacket.header = HEADER_CG_ITEM_DROP2;
|
||||||
|
itemDropPacket.pos = pos;
|
||||||
|
itemDropPacket.gold = elk;
|
||||||
|
itemDropPacket.count = count;
|
||||||
|
|
||||||
|
if (!Send(sizeof(itemDropPacket), &itemDropPacket))
|
||||||
|
{
|
||||||
|
Tracen("SendItemDropPacket Error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::__IsEquipItemInSlot(TItemPos uSlotPos)
|
||||||
|
{
|
||||||
|
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
return rkPlayer.IsEquipItemInSlot(uSlotPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonNetworkStream::__PlayInventoryItemUseSound(TItemPos uSlotPos)
|
||||||
|
{
|
||||||
|
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
DWORD dwItemID=rkPlayer.GetItemIndex(uSlotPos);
|
||||||
|
|
||||||
|
CPythonItem& rkItem=CPythonItem::Instance();
|
||||||
|
rkItem.PlayUseSound(dwItemID);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonNetworkStream::__PlayInventoryItemDropSound(TItemPos uSlotPos)
|
||||||
|
{
|
||||||
|
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
DWORD dwItemID=rkPlayer.GetItemIndex(uSlotPos);
|
||||||
|
|
||||||
|
CPythonItem& rkItem=CPythonItem::Instance();
|
||||||
|
rkItem.PlayDropSound(dwItemID);
|
||||||
|
}
|
||||||
|
|
||||||
|
//void CPythonNetworkStream::__PlayShopItemDropSound(UINT uSlotPos)
|
||||||
|
//{
|
||||||
|
// DWORD dwItemID;
|
||||||
|
// CPythonShop& rkShop=CPythonShop::Instance();
|
||||||
|
// if (!rkShop.GetSlotItemID(uSlotPos, &dwItemID))
|
||||||
|
// return;
|
||||||
|
//
|
||||||
|
// CPythonItem& rkItem=CPythonItem::Instance();
|
||||||
|
// rkItem.PlayDropSound(dwItemID);
|
||||||
|
//}
|
||||||
|
|
||||||
|
void CPythonNetworkStream::__PlaySafeBoxItemDropSound(UINT uSlotPos)
|
||||||
|
{
|
||||||
|
DWORD dwItemID;
|
||||||
|
CPythonSafeBox& rkSafeBox=CPythonSafeBox::Instance();
|
||||||
|
if (!rkSafeBox.GetSlotItemID(uSlotPos, &dwItemID))
|
||||||
|
return;
|
||||||
|
|
||||||
|
CPythonItem& rkItem=CPythonItem::Instance();
|
||||||
|
rkItem.PlayDropSound(dwItemID);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPythonNetworkStream::__PlayMallItemDropSound(UINT uSlotPos)
|
||||||
|
{
|
||||||
|
DWORD dwItemID;
|
||||||
|
CPythonSafeBox& rkSafeBox=CPythonSafeBox::Instance();
|
||||||
|
if (!rkSafeBox.GetSlotMallItemID(uSlotPos, &dwItemID))
|
||||||
|
return;
|
||||||
|
|
||||||
|
CPythonItem& rkItem=CPythonItem::Instance();
|
||||||
|
rkItem.PlayDropSound(dwItemID);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendItemMovePacket(TItemPos pos, TItemPos change_pos, BYTE num)
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (__IsEquipItemInSlot(pos))
|
||||||
|
{
|
||||||
|
if (CPythonExchange::Instance().isTrading())
|
||||||
|
{
|
||||||
|
if (pos.IsEquipCell() || change_pos.IsEquipCell())
|
||||||
|
{
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_AppendNotifyMessage", Py_BuildValue("(s)", "CANNOT_EQUIP_EXCHANGE"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CPythonShop::Instance().IsOpen())
|
||||||
|
{
|
||||||
|
if (pos.IsEquipCell() || change_pos.IsEquipCell())
|
||||||
|
{
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_AppendNotifyMessage", Py_BuildValue("(s)", "CANNOT_EQUIP_SHOP"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (__IsPlayerAttacking())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
__PlayInventoryItemDropSound(pos);
|
||||||
|
|
||||||
|
TPacketCGItemMove itemMovePacket;
|
||||||
|
itemMovePacket.header = HEADER_CG_ITEM_MOVE;
|
||||||
|
itemMovePacket.pos = pos;
|
||||||
|
itemMovePacket.change_pos = change_pos;
|
||||||
|
itemMovePacket.num = num;
|
||||||
|
|
||||||
|
if (!Send(sizeof(TPacketCGItemMove), &itemMovePacket))
|
||||||
|
{
|
||||||
|
Tracen("SendItemMovePacket Error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendItemPickUpPacket(DWORD vid)
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
TPacketCGItemPickUp itemPickUpPacket;
|
||||||
|
itemPickUpPacket.header = HEADER_CG_ITEM_PICKUP;
|
||||||
|
itemPickUpPacket.vid = vid;
|
||||||
|
|
||||||
|
if (!Send(sizeof(TPacketCGItemPickUp), &itemPickUpPacket))
|
||||||
|
{
|
||||||
|
Tracen("SendItemPickUpPacket Error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendQuickSlotAddPacket(BYTE wpos, BYTE type, BYTE pos)
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
TPacketCGQuickSlotAdd quickSlotAddPacket;
|
||||||
|
|
||||||
|
quickSlotAddPacket.header = HEADER_CG_QUICKSLOT_ADD;
|
||||||
|
quickSlotAddPacket.pos = wpos;
|
||||||
|
quickSlotAddPacket.slot.Type = type;
|
||||||
|
quickSlotAddPacket.slot.Position = pos;
|
||||||
|
|
||||||
|
if (!Send(sizeof(TPacketCGQuickSlotAdd), &quickSlotAddPacket))
|
||||||
|
{
|
||||||
|
Tracen("SendQuickSlotAddPacket Error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendQuickSlotDelPacket(BYTE pos)
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
TPacketCGQuickSlotDel quickSlotDelPacket;
|
||||||
|
|
||||||
|
quickSlotDelPacket.header = HEADER_CG_QUICKSLOT_DEL;
|
||||||
|
quickSlotDelPacket.pos = pos;
|
||||||
|
|
||||||
|
if (!Send(sizeof(TPacketCGQuickSlotDel), &quickSlotDelPacket))
|
||||||
|
{
|
||||||
|
Tracen("SendQuickSlotDelPacket Error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::SendQuickSlotMovePacket(BYTE pos, BYTE change_pos)
|
||||||
|
{
|
||||||
|
if (!__CanActMainInstance())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
TPacketCGQuickSlotSwap quickSlotSwapPacket;
|
||||||
|
|
||||||
|
quickSlotSwapPacket.header = HEADER_CG_QUICKSLOT_SWAP;
|
||||||
|
quickSlotSwapPacket.pos = pos;
|
||||||
|
quickSlotSwapPacket.change_pos = change_pos;
|
||||||
|
|
||||||
|
if (!Send(sizeof(TPacketCGQuickSlotSwap), &quickSlotSwapPacket))
|
||||||
|
{
|
||||||
|
Tracen("SendQuickSlotSwapPacket Error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SendSequence();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvSpecialEffect()
|
||||||
|
{
|
||||||
|
TPacketGCSpecialEffect kSpecialEffect;
|
||||||
|
if (!Recv(sizeof(kSpecialEffect), &kSpecialEffect))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
DWORD effect = -1;
|
||||||
|
bool bPlayPotionSound = false; //포션을 먹을 경우는 포션 사운드를 출력하자.!!
|
||||||
|
bool bAttachEffect = true; //캐리터에 붙는 어태치 이펙트와 일반 이펙트 구분.!!
|
||||||
|
switch (kSpecialEffect.type)
|
||||||
|
{
|
||||||
|
case SE_HPUP_RED:
|
||||||
|
effect = CInstanceBase::EFFECT_HPUP_RED;
|
||||||
|
bPlayPotionSound = true;
|
||||||
|
break;
|
||||||
|
case SE_SPUP_BLUE:
|
||||||
|
effect = CInstanceBase::EFFECT_SPUP_BLUE;
|
||||||
|
bPlayPotionSound = true;
|
||||||
|
break;
|
||||||
|
case SE_SPEEDUP_GREEN:
|
||||||
|
effect = CInstanceBase::EFFECT_SPEEDUP_GREEN;
|
||||||
|
bPlayPotionSound = true;
|
||||||
|
break;
|
||||||
|
case SE_DXUP_PURPLE:
|
||||||
|
effect = CInstanceBase::EFFECT_DXUP_PURPLE;
|
||||||
|
bPlayPotionSound = true;
|
||||||
|
break;
|
||||||
|
case SE_CRITICAL:
|
||||||
|
effect = CInstanceBase::EFFECT_CRITICAL;
|
||||||
|
break;
|
||||||
|
case SE_PENETRATE:
|
||||||
|
effect = CInstanceBase::EFFECT_PENETRATE;
|
||||||
|
break;
|
||||||
|
case SE_BLOCK:
|
||||||
|
effect = CInstanceBase::EFFECT_BLOCK;
|
||||||
|
break;
|
||||||
|
case SE_DODGE:
|
||||||
|
effect = CInstanceBase::EFFECT_DODGE;
|
||||||
|
break;
|
||||||
|
case SE_CHINA_FIREWORK:
|
||||||
|
effect = CInstanceBase::EFFECT_FIRECRACKER;
|
||||||
|
bAttachEffect = false;
|
||||||
|
break;
|
||||||
|
case SE_SPIN_TOP:
|
||||||
|
effect = CInstanceBase::EFFECT_SPIN_TOP;
|
||||||
|
bAttachEffect = false;
|
||||||
|
break;
|
||||||
|
case SE_SUCCESS :
|
||||||
|
effect = CInstanceBase::EFFECT_SUCCESS ;
|
||||||
|
bAttachEffect = false ;
|
||||||
|
break ;
|
||||||
|
case SE_FAIL :
|
||||||
|
effect = CInstanceBase::EFFECT_FAIL ;
|
||||||
|
break ;
|
||||||
|
case SE_FR_SUCCESS:
|
||||||
|
effect = CInstanceBase::EFFECT_FR_SUCCESS;
|
||||||
|
bAttachEffect = false ;
|
||||||
|
break;
|
||||||
|
case SE_LEVELUP_ON_14_FOR_GERMANY: //레벨업 14일때 ( 독일전용 )
|
||||||
|
effect = CInstanceBase::EFFECT_LEVELUP_ON_14_FOR_GERMANY;
|
||||||
|
bAttachEffect = false ;
|
||||||
|
break;
|
||||||
|
case SE_LEVELUP_UNDER_15_FOR_GERMANY: //레벨업 15일때 ( 독일전용 )
|
||||||
|
effect = CInstanceBase::EFFECT_LEVELUP_UNDER_15_FOR_GERMANY;
|
||||||
|
bAttachEffect = false ;
|
||||||
|
break;
|
||||||
|
case SE_PERCENT_DAMAGE1:
|
||||||
|
effect = CInstanceBase::EFFECT_PERCENT_DAMAGE1;
|
||||||
|
break;
|
||||||
|
case SE_PERCENT_DAMAGE2:
|
||||||
|
effect = CInstanceBase::EFFECT_PERCENT_DAMAGE2;
|
||||||
|
break;
|
||||||
|
case SE_PERCENT_DAMAGE3:
|
||||||
|
effect = CInstanceBase::EFFECT_PERCENT_DAMAGE3;
|
||||||
|
break;
|
||||||
|
case SE_AUTO_HPUP:
|
||||||
|
effect = CInstanceBase::EFFECT_AUTO_HPUP;
|
||||||
|
break;
|
||||||
|
case SE_AUTO_SPUP:
|
||||||
|
effect = CInstanceBase::EFFECT_AUTO_SPUP;
|
||||||
|
break;
|
||||||
|
case SE_EQUIP_RAMADAN_RING:
|
||||||
|
effect = CInstanceBase::EFFECT_RAMADAN_RING_EQUIP;
|
||||||
|
break;
|
||||||
|
case SE_EQUIP_HALLOWEEN_CANDY:
|
||||||
|
effect = CInstanceBase::EFFECT_HALLOWEEN_CANDY_EQUIP;
|
||||||
|
break;
|
||||||
|
case SE_EQUIP_HAPPINESS_RING:
|
||||||
|
effect = CInstanceBase::EFFECT_HAPPINESS_RING_EQUIP;
|
||||||
|
break;
|
||||||
|
case SE_EQUIP_LOVE_PENDANT:
|
||||||
|
effect = CInstanceBase::EFFECT_LOVE_PENDANT_EQUIP;
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
default:
|
||||||
|
TraceError("%d \264\302 \276\370\264\302 \275\272\306\344\274\310 \300\314\306\345\306\256 \271\370\310\243\300\324\264\317\264\331.TPacketGCSpecialEffect",kSpecialEffect.type);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bPlayPotionSound)
|
||||||
|
{
|
||||||
|
IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
|
||||||
|
if(rkPlayer.IsMainCharacterIndex(kSpecialEffect.vid))
|
||||||
|
{
|
||||||
|
CPythonItem& rkItem=CPythonItem::Instance();
|
||||||
|
rkItem.PlayUsePotionSound();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-1 != effect)
|
||||||
|
{
|
||||||
|
CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetInstancePtr(kSpecialEffect.vid);
|
||||||
|
if (pInstance)
|
||||||
|
{
|
||||||
|
if(bAttachEffect)
|
||||||
|
pInstance->AttachSpecialEffect(effect);
|
||||||
|
else
|
||||||
|
pInstance->CreateSpecialEffect(effect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvSpecificEffect()
|
||||||
|
{
|
||||||
|
TPacketGCSpecificEffect kSpecificEffect;
|
||||||
|
if (!Recv(sizeof(kSpecificEffect), &kSpecificEffect))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetInstancePtr(kSpecificEffect.vid);
|
||||||
|
//EFFECT_TEMP
|
||||||
|
if (pInstance)
|
||||||
|
{
|
||||||
|
CInstanceBase::RegisterEffect(CInstanceBase::EFFECT_TEMP, "", kSpecificEffect.effect_file, false);
|
||||||
|
pInstance->AttachSpecialEffect(CInstanceBase::EFFECT_TEMP);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPythonNetworkStream::RecvDragonSoulRefine()
|
||||||
|
{
|
||||||
|
TPacketGCDragonSoulRefine kDragonSoul;
|
||||||
|
|
||||||
|
if (!Recv(sizeof(kDragonSoul), &kDragonSoul))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
|
||||||
|
switch (kDragonSoul.bSubType)
|
||||||
|
{
|
||||||
|
case DS_SUB_HEADER_OPEN:
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_DragonSoulRefineWindow_Open", Py_BuildValue("()"));
|
||||||
|
break;
|
||||||
|
case DS_SUB_HEADER_REFINE_FAIL:
|
||||||
|
case DS_SUB_HEADER_REFINE_FAIL_MAX_REFINE:
|
||||||
|
case DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL:
|
||||||
|
case DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY:
|
||||||
|
case DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MATERIAL:
|
||||||
|
case DS_SUB_HEADER_REFINE_FAIL_TOO_MUCH_MATERIAL:
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_DragonSoulRefineWindow_RefineFail", Py_BuildValue("(iii)",
|
||||||
|
kDragonSoul.bSubType, kDragonSoul.Pos.window_type, kDragonSoul.Pos.cell));
|
||||||
|
break;
|
||||||
|
case DS_SUB_HEADER_REFINE_SUCCEED:
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_DragonSoulRefineWindow_RefineSucceed",
|
||||||
|
Py_BuildValue("(ii)", kDragonSoul.Pos.window_type, kDragonSoul.Pos.cell));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -44,4 +44,5 @@ enum
|
|||||||
// Listed here as 40250 lists them; only the ported ones are defined.
|
// Listed here as 40250 lists them; only the ported ones are defined.
|
||||||
void initpack();
|
void initpack();
|
||||||
void initapp();
|
void initapp();
|
||||||
|
void initChat();
|
||||||
void initnet();
|
void initnet();
|
||||||
|
|||||||
@@ -302,6 +302,16 @@ typedef enum _D3DTEXTURESTAGESTATETYPE
|
|||||||
D3DTSS_FORCE_DWORD = 0x7fffffff,
|
D3DTSS_FORCE_DWORD = 0x7fffffff,
|
||||||
} D3DTEXTURESTAGESTATETYPE;
|
} D3DTEXTURESTAGESTATETYPE;
|
||||||
|
|
||||||
|
// D3D8 texture-stage arguments and operations used by the character renderer.
|
||||||
|
enum : DWORD {
|
||||||
|
D3DTA_DIFFUSE = 0,
|
||||||
|
D3DTA_CURRENT = 1,
|
||||||
|
D3DTA_TEXTURE = 2,
|
||||||
|
D3DTOP_DISABLE = 1,
|
||||||
|
D3DTOP_SELECTARG1 = 2,
|
||||||
|
D3DTOP_MODULATE = 4,
|
||||||
|
};
|
||||||
|
|
||||||
#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
|
#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
|
||||||
#define D3DTS_WORLD D3DTS_WORLDMATRIX(0)
|
#define D3DTS_WORLD D3DTS_WORLDMATRIX(0)
|
||||||
#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
|
#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ inline int _strnicmp(const char* a, const char* b, size_t n) { return strncasecm
|
|||||||
inline int strnicmp(const char* a, const char* b, size_t n) { return strncasecmp(a, b, n); }
|
inline int strnicmp(const char* a, const char* b, size_t n) { return strncasecmp(a, b, n); }
|
||||||
|
|
||||||
inline int _strcmpi(const char* a, const char* b) { return strcasecmp(a, b); }
|
inline int _strcmpi(const char* a, const char* b) { return strcasecmp(a, b); }
|
||||||
|
inline int strcmpi(const char* a, const char* b) { return strcasecmp(a, b); }
|
||||||
|
|
||||||
char* _strlwr(char* s);
|
char* _strlwr(char* s);
|
||||||
char* _strupr(char* s);
|
char* _strupr(char* s);
|
||||||
|
|||||||
@@ -440,6 +440,72 @@ bool FakeLoginServer::ServeGame(Connection& c, int index)
|
|||||||
return Fail(name + ": CG_ENTERGAME: " + error);
|
return Fail(name + ": CG_ENTERGAME: " + error);
|
||||||
Event(name + ":entergame");
|
Event(name + ":entergame");
|
||||||
|
|
||||||
|
// CInputLogin::Entergame order: ch->Show inserts the main actor while the client is still in
|
||||||
|
// the loading phase (CHARACTER::EncodeInsertPacket = ADD + ADDITIONAL_INFO, then UpdatePacket),
|
||||||
|
// then SendNPCPosition, PHASE_GAME, SendLandList, TIME, CHANNEL and the greet notice.
|
||||||
|
GCCharacterAdd actor = zeroed<GCCharacterAdd>();
|
||||||
|
actor.header = HDR_GC_CHARACTER_ADD;
|
||||||
|
actor.vid = kMainVID;
|
||||||
|
actor.x = kX;
|
||||||
|
actor.y = kY;
|
||||||
|
actor.type = 0; // CHAR_TYPE_PC
|
||||||
|
actor.race = 0; // warrior male
|
||||||
|
actor.moving_speed = 100;
|
||||||
|
actor.attack_speed = 100;
|
||||||
|
GCCharAddInfo info = zeroed<GCCharAddInfo>();
|
||||||
|
info.header = HDR_GC_CHAR_ADDITIONAL_INFO;
|
||||||
|
info.vid = kMainVID;
|
||||||
|
std::strncpy(info.name, kCharacterName, sizeof(info.name) - 1);
|
||||||
|
info.empire = 1;
|
||||||
|
info.level = 10;
|
||||||
|
GCCharacterUpdate update = zeroed<GCCharacterUpdate>();
|
||||||
|
update.header = HDR_GC_CHARACTER_UPDATE;
|
||||||
|
update.vid = kMainVID;
|
||||||
|
update.moving_speed = 100;
|
||||||
|
update.attack_speed = 100;
|
||||||
|
if (!c.Send(actor) || !c.Send(info) || !c.Send(update))
|
||||||
|
return Fail(name + ": send main actor");
|
||||||
|
|
||||||
|
// packet_npc_position = DynHead + count, then TNPCPosition entries.
|
||||||
|
NPCPosition34 npc = zeroed<NPCPosition34>();
|
||||||
|
npc.type = 1; // CHAR_TYPE_NPC
|
||||||
|
std::strncpy(npc.name, "Npc", sizeof(npc.name) - 1);
|
||||||
|
npc.x = kX + 500;
|
||||||
|
npc.y = kY + 500;
|
||||||
|
DynHead npc_head = {HDR_GC_NPC_POSITION, static_cast<std::uint16_t>(sizeof(DynHead) + sizeof(GCNPCPositionHead) + sizeof(npc))};
|
||||||
|
GCNPCPositionHead npc_count = {1};
|
||||||
|
if (!c.Send(npc_head) || !c.Send(npc_count) || !c.Send(npc))
|
||||||
|
return Fail(name + ": send NPC positions");
|
||||||
|
|
||||||
|
if (!c.Phase(PHASE_GAME))
|
||||||
|
return Fail(name + ": send PHASE_GAME");
|
||||||
|
|
||||||
|
LandPacketElement24 land = zeroed<LandPacketElement24>();
|
||||||
|
land.id = 1;
|
||||||
|
land.x = kX + 1000;
|
||||||
|
land.y = kY + 1000;
|
||||||
|
land.width = 2000;
|
||||||
|
land.height = 2000;
|
||||||
|
DynHead land_head = {HDR_GC_LAND_LIST, static_cast<std::uint16_t>(sizeof(DynHead) + sizeof(land))};
|
||||||
|
GCTime game_time = {HDR_GC_TIME, static_cast<std::int32_t>(now_ms())};
|
||||||
|
GCChannel channel = {HDR_GC_CHANNEL, 1};
|
||||||
|
if (!c.Send(land_head) || !c.Send(land) || !c.Send(game_time) || !c.Send(channel))
|
||||||
|
return Fail(name + ": send land/time/channel");
|
||||||
|
|
||||||
|
// SendGreetMessage: a CHAT_TYPE_NOTICE line with no speaker.
|
||||||
|
const char greet[] = "Welcome";
|
||||||
|
GCChatHead chat = {HDR_GC_CHAT, static_cast<std::uint16_t>(sizeof(GCChatHead) + sizeof(greet)), 2 /* CHAT_TYPE_NOTICE */, 0, 1};
|
||||||
|
if (!c.Send(chat) || !c.Send(greet, sizeof(greet)))
|
||||||
|
return Fail(name + ": send greet notice");
|
||||||
|
Event(name + ":burst_sent");
|
||||||
|
|
||||||
|
// A ping after the burst proves that GamePhase consumed every packet above and can reply.
|
||||||
|
Blank ping = {HDR_GC_PING};
|
||||||
|
Blank pong = {};
|
||||||
|
if (!c.Send(ping) || read_packet(c, HDR_CG_PONG, &pong, sizeof(pong), &error) != 1)
|
||||||
|
return Fail(name + ": CG_PONG after the entergame burst: " + error);
|
||||||
|
Event(name + ":burst_pong");
|
||||||
|
|
||||||
// Hold the connection until the test stops us.
|
// Hold the connection until the test stops us.
|
||||||
std::uint8_t byte = 0;
|
std::uint8_t byte = 0;
|
||||||
while (!m_stop && c.Read(&byte, 1) == 1)
|
while (!m_stop && c.Read(&byte, 1) == 1)
|
||||||
|
|||||||
@@ -15,7 +15,9 @@
|
|||||||
// 5. PHASE_LOADING, GC_MAIN_CHARACTER, GC_CHARACTER_POINTS: the loading phase answers the main
|
// 5. PHASE_LOADING, GC_MAIN_CHARACTER, GC_CHARACTER_POINTS: the loading phase answers the main
|
||||||
// character with CG_CLIENT_VERSION(2), the server's proof the client reached Loading;
|
// character with CG_CLIENT_VERSION(2), the server's proof the client reached Loading;
|
||||||
// 6. (批次 2V2) the loading steps end in net.StartGame(): networkModule.SetGamePhase opens
|
// 6. (批次 2V2) the loading steps end in net.StartGame(): networkModule.SetGamePhase opens
|
||||||
// game.GameWindow, whose Open sends CG_ENTERGAME.
|
// game.GameWindow, whose Open sends CG_ENTERGAME;
|
||||||
|
// 7. the server's Entergame answer (the actor's insert packets, PHASE_GAME, the Entergame burst) is
|
||||||
|
// read by the ported GamePhase without an unknown packet, and a final ping gets its pong.
|
||||||
//
|
//
|
||||||
// The server checks every sequence byte against the 40250 table, so a skipped or extra sequenced
|
// The server checks every sequence byte against the 40250 table, so a skipped or extra sequenced
|
||||||
// packet fails the run.
|
// packet fails the run.
|
||||||
@@ -25,7 +27,8 @@
|
|||||||
// With `live` (批次 2V1-e, ctest port.login_live) the same path runs against a real 40250 server and
|
// With `live` (批次 2V1-e, ctest port.login_live) the same path runs against a real 40250 server and
|
||||||
// the client's own state is the proof: the character list arrived, the loading window got
|
// the client's own state is the proof: the character list arrived, the loading window got
|
||||||
// LoadData from GC_MAIN_CHARACTER, which CPythonNetworkStream::RecvMainCharacter answers with
|
// LoadData from GC_MAIN_CHARACTER, which CPythonNetworkStream::RecvMainCharacter answers with
|
||||||
// CG_CLIENT_VERSION, and game.GameWindow is open, which sent CG_ENTERGAME. Everything about the
|
// CG_CLIENT_VERSION, game.GameWindow is open, which sent CG_ENTERGAME, and 10 s of the real game
|
||||||
|
// phase later it is still open and connected with no unknown packet. Everything about the
|
||||||
// server comes from the environment and nothing of it is printed:
|
// server comes from the environment and nothing of it is printed:
|
||||||
//
|
//
|
||||||
// MT_LIVE_HOST, MT_LIVE_LOGIN, MT_LIVE_PASSWORD required; without them the test is skipped
|
// MT_LIVE_HOST, MT_LIVE_LOGIN, MT_LIVE_PASSWORD required; without them the test is skipped
|
||||||
@@ -36,6 +39,7 @@
|
|||||||
#include "../src/platform/ScriptLib/PythonBoot.h"
|
#include "../src/platform/ScriptLib/PythonBoot.h"
|
||||||
#include "../src/platform/ScriptLib/PythonHost.h"
|
#include "../src/platform/ScriptLib/PythonHost.h"
|
||||||
#include "../src/platform/UserInterface/UserInterface.h"
|
#include "../src/platform/UserInterface/UserInterface.h"
|
||||||
|
#include "../src/platform/EterBase/TraceErrorObserver.h"
|
||||||
#include "port_login_flow_server.h"
|
#include "port_login_flow_server.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -44,6 +48,7 @@
|
|||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <mutex>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -59,6 +64,25 @@ static int g_failures = 0;
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
// TraceError lines; the script thread writes them while the host thread waits for its baton.
|
||||||
|
static std::mutex g_syserr_mutex;
|
||||||
|
static std::vector<std::string> g_syserr;
|
||||||
|
|
||||||
|
static void on_trace_error(const char* line)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(g_syserr_mutex);
|
||||||
|
g_syserr.emplace_back(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int count_syserr(const char* needle)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(g_syserr_mutex);
|
||||||
|
int n = 0;
|
||||||
|
for (const auto& line : g_syserr)
|
||||||
|
n += line.find(needle) != std::string::npos;
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
static bool py(const std::string& source)
|
static bool py(const std::string& source)
|
||||||
{
|
{
|
||||||
std::string error;
|
std::string error;
|
||||||
@@ -162,6 +186,7 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
auto failed = [&] { return server && server->Failed(); };
|
auto failed = [&] { return server && server->Failed(); };
|
||||||
|
|
||||||
|
SetTraceErrorObserver(on_trace_error);
|
||||||
PackSingletons();
|
PackSingletons();
|
||||||
CHECK(PackInitialize("pack"));
|
CHECK(PackInitialize("pack"));
|
||||||
|
|
||||||
@@ -239,12 +264,29 @@ int main(int argc, char** argv)
|
|||||||
return failed() || (py_true(gaming) && (!server || server->Has("game2:entergame")));
|
return failed() || (py_true(gaming) && (!server || server->Has("game2:entergame")));
|
||||||
});
|
});
|
||||||
CHECK(entered && !failed());
|
CHECK(entered && !failed());
|
||||||
|
|
||||||
|
// 7. (批次 2V2-b) The server answers CG_ENTERGAME with the character's own insert packets and
|
||||||
|
// PHASE_GAME, then the Entergame burst (PVP/land list, time, channel, greet chat, ...). GamePhase
|
||||||
|
// has to read all of it: an unknown or mis-sized packet makes CheckPacket log "Unknown packet
|
||||||
|
// header" and drop the receive buffer. Offline the fake server ends with a ping the client
|
||||||
|
// must answer; live the stream has to stay in the game window and connected for 10 s.
|
||||||
|
const bool burst = pump_until(live ? 10 : 30, [&] {
|
||||||
|
return failed() || (server && server->Has("game2:burst_pong"));
|
||||||
|
});
|
||||||
|
CHECK(live || (burst && !failed()));
|
||||||
|
CHECK(py_true(gaming));
|
||||||
|
CHECK(py("import net\nassert net.IsConnect(), 'disconnected in the game phase'"));
|
||||||
|
CHECK(count_syserr("Unknown packet header") == 0);
|
||||||
|
// The fake greet notice went through RecvChatPacket into the ported CPythonChat, where
|
||||||
|
// uichat's chat set (created by the game interface) counts it.
|
||||||
|
CHECK(live || py("import chat\nassert any(chat.GetLineCount(i) > 0 for i in range(4)), 'greet notice not in chat'"));
|
||||||
}
|
}
|
||||||
if (server)
|
if (server)
|
||||||
{
|
{
|
||||||
const std::vector<std::string> expected = {
|
const std::vector<std::string> expected = {
|
||||||
"auth:handshake", "auth:login3", "game1:handshake", "game1:login2", "auth:closed",
|
"auth:handshake", "auth:login3", "game1:handshake", "game1:login2", "auth:closed",
|
||||||
"game1:closed", "game2:handshake", "game2:login2", "game2:select", "game2:client_version", "game2:entergame",
|
"game1:closed", "game2:handshake", "game2:login2", "game2:select", "game2:client_version", "game2:entergame",
|
||||||
|
"game2:burst_sent", "game2:burst_pong",
|
||||||
};
|
};
|
||||||
auto events = server->Events();
|
auto events = server->Events();
|
||||||
// auth:closed races game1's handshake; compare the order within each connection.
|
// auth:closed races game1's handshake; compare the order within each connection.
|
||||||
|
|||||||
Reference in New Issue
Block a user