// Token: 0x06000DBC RID: 3516 RVA: 0x00062418 File Offset: 0x00060618 public void Deserialize(ref ZPackage pkg) { this.m_damage.m_damage = pkg.ReadSingle(); this.m_damage.m_blunt = pkg.ReadSingle(); this.m_damage.m_slash = pkg.ReadSingle(); this.m_damage.m_pierce = pkg.ReadSingle(); this.m_damage.m_chop = pkg.ReadSingle(); this.m_damage.m_pickaxe = pkg.ReadSingle(); this.m_damage.m_fire = pkg.ReadSingle(); this.m_damage.m_frost = pkg.ReadSingle(); this.m_damage.m_lightning = pkg.ReadSingle(); this.m_damage.m_poison = pkg.ReadSingle(); this.m_damage.m_spirit = pkg.ReadSingle(); this.m_toolTier = pkg.ReadInt(); this.m_pushForce = pkg.ReadSingle(); this.m_backstabBonus = pkg.ReadSingle(); this.m_staggerMultiplier = pkg.ReadSingle(); this.m_dodgeable = pkg.ReadBool(); this.m_blockable = pkg.ReadBool(); this.m_point = pkg.ReadVector3(); this.m_dir = pkg.ReadVector3(); this.m_statusEffect = pkg.ReadString(); this.m_attacker = pkg.ReadZDOID(); this.m_skill = (Skills.SkillType)pkg.ReadInt(); }
private void extractAndUpdate(ZPackage pkg, ref GameObject obj, ref Vector3 tempRelPos, bool hasTempRelPos) { // Extract package data var position = pkg.ReadVector3(); var rotation = pkg.ReadQuaternion(); var velocity = pkg.ReadVector3(); // Update position based on last written position, velocity, and elapsed time since last data revision position += velocity * deltaTimeCounter; if (!hasTempRelPos) { tempRelPos = position; } if (Vector3.Distance(tempRelPos, position) > MIN_CHANGE) { tempRelPos = Vector3.Lerp(tempRelPos, position, 0.2f); position = tempRelPos; } // Update the object position with new calculated position updatePosition(obj, position); // Update the rotation updateRotation(obj, rotation); }
/// <summary> /// Create a <see cref="Portal" /> list from a <see cref="ZPackage" /> /// </summary> /// <param name="zpkg"></param> /// <returns></returns> public static PortalList FromZPackage(ZPackage zpkg) { Logger.LogDebug("Deserializing portal list from ZPackage"); var ret = new PortalList(); var numConnectedPortals = zpkg.ReadInt(); while (numConnectedPortals > 0) { var portalPosition = zpkg.ReadVector3(); var portalName = zpkg.ReadString(); Logger.LogDebug($"{portalName}@{portalPosition}"); ret.Add(new Portal(portalPosition, portalName, true)); numConnectedPortals--; } var numUnconnectedPortals = zpkg.ReadInt(); while (numUnconnectedPortals > 0) { var portalPosition = zpkg.ReadVector3(); var portalName = zpkg.ReadString(); Logger.LogDebug($"{portalName}@{portalPosition}"); ret.Add(new Portal(portalPosition, portalName, false)); numUnconnectedPortals--; } return(ret); }
public static WorldPlayer Load(ZPackage pkg) { var worldPlayer = new WorldPlayer(); int num = pkg.ReadInt(); if (!ValheimVersion.IsPlayerVersionCompatible(num)) { return(null); } if (num >= 28) { worldPlayer.PlayerStats_kills = pkg.ReadInt(); worldPlayer.PlayerStats_deaths = pkg.ReadInt(); worldPlayer.PlayerStats_crafts = pkg.ReadInt(); worldPlayer.PlayerStats_builds = pkg.ReadInt(); } worldPlayer.WorldPlayerData.Clear(); int num2 = pkg.ReadInt(); for (int i = 0; i < num2; i++) { long key = pkg.ReadLong(); var worldPlayerData = new WorldPlayerData(); worldPlayerData.m_haveCustomSpawnPoint = pkg.ReadBool(); worldPlayerData.m_spawnPoint = pkg.ReadVector3(); worldPlayerData.m_haveLogoutPoint = pkg.ReadBool(); worldPlayerData.m_logoutPoint = pkg.ReadVector3(); if (num >= 30) { worldPlayerData.m_haveDeathPoint = pkg.ReadBool(); worldPlayerData.m_deathPoint = pkg.ReadVector3(); } worldPlayerData.m_homePoint = pkg.ReadVector3(); if (num >= 29 && pkg.ReadBool()) { worldPlayerData.m_mapData = pkg.ReadByteArray(); } worldPlayer.WorldPlayerData.Add(key, worldPlayerData); } worldPlayer.PlayerName = pkg.ReadString(); worldPlayer.PlayerId = pkg.ReadLong(); worldPlayer.StartSeed = pkg.ReadString(); if (pkg.ReadBool()) { var byteArray = pkg.ReadByteArray(); var playerPkg = new ZPackage(byteArray); worldPlayer.Player = PlayerReaderWriter.Load(playerPkg); } else { worldPlayer.Player = null; } return(worldPlayer); }
private bool LoadPlayerFromDisk() { try { ZPackage zpackage = this.LoadPlayerDataFromDisk(); if (zpackage == null) { ZLog.LogWarning((object)"No player data"); return(false); } int version = zpackage.ReadInt(); if (!Version.IsPlayerVersionCompatible(version)) { ZLog.Log((object)"Player data is not compatible, ignoring"); return(false); } if (version >= 28) { this.m_playerStats.m_kills = zpackage.ReadInt(); this.m_playerStats.m_deaths = zpackage.ReadInt(); this.m_playerStats.m_crafts = zpackage.ReadInt(); this.m_playerStats.m_builds = zpackage.ReadInt(); } this.m_worldData.Clear(); int num = zpackage.ReadInt(); for (int index = 0; index < num; ++index) { long key = zpackage.ReadLong(); PlayerProfile.WorldPlayerData worldPlayerData = new PlayerProfile.WorldPlayerData(); worldPlayerData.m_haveCustomSpawnPoint = zpackage.ReadBool(); worldPlayerData.m_spawnPoint = zpackage.ReadVector3(); worldPlayerData.m_haveLogoutPoint = zpackage.ReadBool(); worldPlayerData.m_logoutPoint = zpackage.ReadVector3(); if (version >= 30) { worldPlayerData.m_haveDeathPoint = zpackage.ReadBool(); worldPlayerData.m_deathPoint = zpackage.ReadVector3(); } worldPlayerData.m_homePoint = zpackage.ReadVector3(); if (version >= 29 && zpackage.ReadBool()) { worldPlayerData.m_mapData = zpackage.ReadByteArray(); } this.m_worldData.Add(key, worldPlayerData); } this.m_playerName = zpackage.ReadString(); this.m_playerID = zpackage.ReadLong(); this.m_startSeed = zpackage.ReadString(); this.m_playerData = !zpackage.ReadBool() ? (byte[])null : zpackage.ReadByteArray(); } catch (Exception ex) { ZLog.LogWarning((object)("Exception while loading player profile:" + this.m_filename + " , " + ex.ToString())); } return(true); }
/// <summary> /// Sync Pin with clients via the server /// </summary> public static void RPC_VPlusMapPinSync(long sender, ZPackage mapPinPkg) { if (ZNet.m_isServer) //Server { if (sender == ZRoutedRpc.instance.GetServerPeerID()) { return; } if (mapPinPkg == null) { return; } foreach (ZNetPeer peer in ZRoutedRpc.instance.m_peers) { if (peer.m_uid != sender) { ZRoutedRpc.instance.InvokeRoutedRPC(peer.m_uid, "VPlusMapPinSync", new object[] { mapPinPkg }); } } ZLog.Log($"Sent map pin to all clients"); //VPlusAck.SendAck(sender); } else //Client { if (sender != ZRoutedRpc.instance.GetServerPeerID()) { return; //Only bother if it's from the server. } if (mapPinPkg == null) { ZLog.LogWarning("Warning: Got empty map pin package from server."); return; } long pinSender = mapPinPkg.ReadLong(); string senderName = mapPinPkg.ReadString(); if (senderName != Player.m_localPlayer.GetPlayerName() && pinSender != ZRoutedRpc.instance.m_id) { ZLog.Log("Checking sent pin"); Vector3 pinPos = mapPinPkg.ReadVector3(); int pinType = mapPinPkg.ReadInt(); string pinName = mapPinPkg.ReadString(); bool keepQuiet = mapPinPkg.ReadBool(); if (!Minimap.instance.HaveSimilarPin(pinPos, (Minimap.PinType)pinType, pinName, true)) { Minimap.PinData addedPin = Minimap.instance.AddPin(pinPos, (Minimap.PinType)pinType, pinName, true, false); if (!keepQuiet) { MessageHud.instance.ShowMessage(MessageHud.MessageType.Center, $"Received map pin {pinName} from {senderName}!", 0, Minimap.instance.GetSprite((Minimap.PinType)pinType)); } ZLog.Log($"I got pin named {pinName} from {senderName}!"); } } //Send Ack //VPlusAck.SendAck(sender); } }
public static void SetMapData(ZPackage mapData) { ServerPins.Clear(); var version = mapData.ReadInt(); var mapSize = mapData.ReadInt(); var explored = new bool[mapSize * mapSize]; for (var i = 0; i < mapSize * mapSize; i++) { explored[i] = mapData.ReadBool(); } var pinCount = mapData.ReadInt(); for (var i = 0; i < pinCount; i++) { var pin = new PinData { Name = mapData.ReadString(), Pos = mapData.ReadVector3(), Type = (Minimap.PinType)mapData.ReadInt(), Checked = mapData.ReadBool() }; ServerPins.Add(pin); } Explored = explored; }
// Token: 0x060004DD RID: 1245 RVA: 0x00028508 File Offset: 0x00026708 private void RPC_DamageText(long sender, ZPackage pkg) { Camera mainCamera = Utils.GetMainCamera(); if (!mainCamera) { return; } if (Hud.IsUserHidden()) { return; } DamageText.TextType type = (DamageText.TextType)pkg.ReadInt(); Vector3 vector = pkg.ReadVector3(); float dmg = pkg.ReadSingle(); bool flag = pkg.ReadBool(); float num = Vector3.Distance(mainCamera.transform.position, vector); if (num > this.m_maxTextDistance) { return; } bool mySelf = flag && sender == ZNet.instance.GetUID(); this.AddInworldText(type, vector, num, dmg, mySelf); }
public static PinData UnpackPin(ZPackage z) { var pin = new PinData { Name = z.ReadString(), Pos = z.ReadVector3(), Type = (Minimap.PinType)z.ReadInt(), Checked = z.ReadBool() }; return(pin); }
public static void Deserialize(this PlayerProfile profile, ZPackage data) { Debug.Assert(data.ReadInt() <= Version.m_playerVersion); profile.m_playerStats.m_kills = data.ReadInt(); profile.m_playerStats.m_deaths = data.ReadInt(); profile.m_playerStats.m_crafts = data.ReadInt(); profile.m_playerStats.m_builds = data.ReadInt(); profile.m_worldData.Clear(); int num = data.ReadInt(); for (int i = 0; i < num; i++) { long key = data.ReadLong(); PlayerProfile.WorldPlayerData worldPlayerData = (PlayerProfile.WorldPlayerData)Activator.CreateInstance(typeof(PlayerProfile.WorldPlayerData), true); worldPlayerData.m_haveCustomSpawnPoint = data.ReadBool(); worldPlayerData.m_spawnPoint = data.ReadVector3(); worldPlayerData.m_haveLogoutPoint = data.ReadBool(); worldPlayerData.m_logoutPoint = data.ReadVector3(); worldPlayerData.m_haveDeathPoint = data.ReadBool(); worldPlayerData.m_deathPoint = data.ReadVector3(); worldPlayerData.m_homePoint = data.ReadVector3(); if (data.ReadBool()) { worldPlayerData.m_mapData = data.ReadByteArray(); } profile.m_worldData.Add(key, worldPlayerData); } profile.m_playerName = data.ReadString(); profile.m_playerID = data.ReadLong(); if (profile.m_playerID == 0L) { profile.m_playerID = Utils.GenerateUID(); } profile.m_startSeed = data.ReadString(); if (data.ReadBool()) { profile.m_playerData = data.ReadByteArray(); } }
public bool CreateMergedWorldWithPins(out string error) { try { error = string.Empty; foreach (var pp in _profiles) { ZPackage zPackage = new ZPackage(pp.m_worldData[_worldId].m_mapData); _mapData.m_mapVersion = zPackage.ReadInt(); int textureSize = zPackage.ReadInt(); if (_mapData.m_textureSize != textureSize) { return(false); } for (int i = 0; i < (_mapData.m_textureSize * _mapData.m_textureSize); i++) { _mapData.m_mergedWorld[i] = (byte)(_mapData.m_mergedWorld[i] | Convert.ToByte(zPackage.ReadBool())); } if (_mapData.m_mapVersion >= 2) { int pinCount = zPackage.ReadInt(); for (int j = 0; j < pinCount; j++) { string name = zPackage.ReadString(); Vector3 pos = zPackage.ReadVector3(); PinType type = (PinType)zPackage.ReadInt(); bool isChecked = _mapData.m_mapVersion >= 3 && zPackage.ReadBool(); _mapData.AddPin(name, pos, type, isChecked); _mapData.AddProfilePin(pp.GetPlayerId(), name, pos, type, isChecked); } } if (_mapData.m_mapVersion >= 4) { _mapData.m_isReferencePositionPublic = zPackage.ReadBool(); } } return(true); } catch (Exception ex) { error = ex.Message; return(false); } }
public static List <PinData> UnpackPins(ZPackage z) { var pins = new List <PinData>(); var pinCount = z.ReadInt(); for (var i = 0; i < pinCount; i++) { var pin = new PinData { Name = z.ReadString(), Pos = z.ReadVector3(), Type = (Minimap.PinType)z.ReadInt(), Checked = z.ReadBool() }; pins.Add(pin); } return(pins); }
public void Deserialize(ZPackage pkg) { this.m_persistent = pkg.ReadBool(); this.m_distant = pkg.ReadBool(); this.m_timeCreated = pkg.ReadLong(); this.m_pgwVersion = pkg.ReadInt(); this.m_type = (ZDO.ObjectType)pkg.ReadSByte(); this.m_prefab = pkg.ReadInt(); this.m_rotation = pkg.ReadQuaternion(); int num1 = pkg.ReadInt(); if ((num1 & 1) != 0) { this.InitFloats(); int num2 = (int)pkg.ReadByte(); for (int index = 0; index < num2; ++index) { this.m_floats[pkg.ReadInt()] = pkg.ReadSingle(); } } else { this.ReleaseFloats(); } if ((num1 & 2) != 0) { this.InitVec3(); int num2 = (int)pkg.ReadByte(); for (int index = 0; index < num2; ++index) { this.m_vec3[pkg.ReadInt()] = pkg.ReadVector3(); } } else { this.ReleaseVec3(); } if ((num1 & 4) != 0) { this.InitQuats(); int num2 = (int)pkg.ReadByte(); for (int index = 0; index < num2; ++index) { this.m_quats[pkg.ReadInt()] = pkg.ReadQuaternion(); } } else { this.ReleaseQuats(); } if ((num1 & 8) != 0) { this.InitInts(); int num2 = (int)pkg.ReadByte(); for (int index = 0; index < num2; ++index) { this.m_ints[pkg.ReadInt()] = pkg.ReadInt(); } } else { this.ReleaseInts(); } if ((num1 & 64) != 0) { this.InitLongs(); int num2 = (int)pkg.ReadByte(); for (int index = 0; index < num2; ++index) { this.m_longs[pkg.ReadInt()] = pkg.ReadLong(); } } else { this.ReleaseLongs(); } if ((num1 & 16) != 0) { this.InitStrings(); int num2 = (int)pkg.ReadByte(); for (int index = 0; index < num2; ++index) { this.m_strings[pkg.ReadInt()] = pkg.ReadString(); } } else { this.ReleaseStrings(); } }
static void Prefix(RoutedRPCData data) { var targetName = ""; ZDO targetZDO; if (!data.m_targetZDO.IsNone()) { try { targetZDO = ZDOMan.instance.GetZDO(data.m_targetZDO); targetName = targetZDO.m_type.ToString(); } catch { } } ZNetPeer peer = ZNet.instance.GetPeer(data.m_senderPeerID); var steamid = ""; try { steamid = peer.m_rpc.GetSocket().GetHostName(); } catch {} if (data?.m_methodHash == "Say".GetStableHashCode()) { // private void RPC_Say(long sender, int ctype, string user, string text) try { var zdoData = ZDOMan.instance.GetZDO(peer.m_characterID); var pos = zdoData.GetPosition(); ZPackage package = new ZPackage(data.m_parameters.GetArray()); int messageType = package.ReadInt(); string userName = package.ReadString(); string message = package.ReadString(); message = (message == null ? "" : message).Trim(); if (message.StartsWith("/pin")) { var messageParts = message.Split(' '); var pinType = "dot"; var startIdx = 1; if (messageParts.Length > 1 && ALLOWED_PINS.Contains(messageParts[1])) { pinType = messageParts[1]; startIdx = 2; } var pinText = ""; if (startIdx < messageParts.Length) { pinText = String.Join(" ", messageParts, startIdx, messageParts.Length - startIdx); } if (pinText.Length > 40) { pinText = pinText.Substring(0, 40); } var safePinsText = Regex.Replace(pinText, @"[^a-zA-Z0-9 ]", ""); var uuId = Guid.NewGuid(); var pinId = uuId.ToString(); mapDataServer.AddPin(steamid, pinId, pinType, userName, pos, safePinsText); var usersPins = mapDataServer.pins.FindAll(pin => pin.StartsWith(steamid)); var numOverflowPins = usersPins.Count - WebMapConfig.MAX_PINS_PER_USER; for (var t = numOverflowPins; t > 0; t--) { var pinIdx = mapDataServer.pins.FindIndex(pin => pin.StartsWith(steamid)); // mapDataServer.RemovePin(pinIdx); harmonyLog.LogInfo($"To many pins, deleting oldest one (ONLY DEBUG; WILL NOT DO)"); } SavePins(); } else if (message.StartsWith("/undoPin")) { var pinIdx = mapDataServer.pins.FindLastIndex(pin => pin.StartsWith(steamid)); if (pinIdx > -1) { mapDataServer.RemovePin(pinIdx); SavePins(); } } else if (message.StartsWith("/deletePin")) { var messageParts = message.Split(' '); var pinText = ""; if (messageParts.Length > 1) { pinText = String.Join(" ", messageParts, 1, messageParts.Length - 1); } var pinIdx = mapDataServer.pins.FindLastIndex(pin => { var pinParts = pin.Split(','); return(pinParts[0] == steamid && pinParts[pinParts.Length - 1] == pinText); }); if (pinIdx > -1) { mapDataServer.RemovePin(pinIdx); SavePins(); } } else if (!message.StartsWith("/")) { mapDataServer.Broadcast($"say\n{messageType}\n{userName}\n{message}"); harmonyLog.LogInfo($"say\n{messageType}\n{userName}\n{message} / target={targetName}"); } } catch { harmonyLog.LogError($"Say() exception"); } } else if (data?.m_methodHash == "ChatMessage".GetStableHashCode()) { // private void RPC_ChatMessage(long sender, Vector3 position, int type, string name, string text) try { ZPackage package = new ZPackage(data.m_parameters.GetArray()); Vector3 pos = package.ReadVector3(); int messageType = package.ReadInt(); string userName = package.ReadString(); string message = package.ReadString(); message = (message == null ? "" : message).Trim(); if (messageType == (int)Talker.Type.Ping) { mapDataServer.BroadcastPing(data.m_senderPeerID, userName, pos); } else { mapDataServer.Broadcast($"chat\n{messageType}\n{userName}\n{pos}\n{message}"); harmonyLog.LogInfo($"ChatMessage() chat\n{messageType}\n{userName}\n{pos}\n{message} / target={targetName}"); } } catch { harmonyLog.LogError($"ChatMessage() exception"); } } else if (data?.m_methodHash == "OnDeath".GetStableHashCode()) { // private void RPC_OnDeath(long sender) try { var zdoData = ZDOMan.instance.GetZDO(peer.m_characterID); var pos = zdoData.GetPosition(); ZPackage package = new ZPackage(data.m_parameters.GetArray()); mapDataServer.Broadcast($"ondeath\n{peer.m_playerName}"); harmonyLog.LogInfo($"RPC_OnDeath() -- {peer.m_playerName} / target={targetName}"); } catch { harmonyLog.LogError($"RPC_OnDeath() exception"); } } else if (data?.m_methodHash == "Message".GetStableHashCode()) { // private void RPC_Message(long sender, int type, string msg, int amount) try { var zdoData = ZDOMan.instance.GetZDO(peer.m_characterID); var pos = zdoData.GetPosition(); ZPackage package = new ZPackage(data.m_parameters.GetArray()); int messageType = package.ReadInt(); string msg = package.ReadString(); int amount = package.ReadInt(); mapDataServer.Broadcast($"message\n{peer.m_playerName}\n{messageType}\n{msg}\n{amount}"); harmonyLog.LogInfo($"RPC_Message() -- {peer.m_playerName} / {msg} - {amount} / target={targetName}"); } catch { harmonyLog.LogError($"RPC_Message() exception"); } } else if (data?.m_methodHash == "DamageText".GetStableHashCode()) { try { var zdoData = ZDOMan.instance.GetZDO(peer.m_characterID); var pos = zdoData.GetPosition(); ZPackage package = new ZPackage(data.m_parameters.GetArray()); //float v = package.Read(); //bool alerted = package.ReadBool(); var pkg = package.ReadPackage(); DamageText.TextType type = (DamageText.TextType)pkg.ReadInt(); Vector3 vector = pkg.ReadVector3(); float dmg = pkg.ReadSingle(); bool flag = pkg.ReadBool(); harmonyLog.LogInfo($"RPC_DamageText() -- {peer.m_playerName} / type={type} / pos={vector} / dmg={dmg} / flag={flag} / target={targetName}"); } catch { harmonyLog.LogError($"RPC_DamageText() exception"); } } else if (data?.m_methodHash == "Damage".GetStableHashCode()) { try { var zdoData = ZDOMan.instance.GetZDO(peer.m_characterID); var pos = zdoData.GetPosition(); ZPackage package = new ZPackage(data.m_parameters.GetArray()); harmonyLog.LogInfo($"RPC_Damage() -- {peer.m_playerName} / target={targetName}"); } catch { harmonyLog.LogError($"RPC_Damage() exception"); } } else if (data?.m_methodHash == "DestroyZDO".GetStableHashCode()) { try { // supress //ZPackage pkg = new ZPackage(data.m_parameters.GetArray()); //var pkg2 = pkg.ReadPackage(); //var numberofitems = pkg2.ReadInt(); //for (int i = 0; i < numberofitems; i++) //{ // ZDOID uid = pkg.ReadZDOID(); //} //harmonyLog.LogInfo($"DestroyZDO() -- {peer.m_playerName} / numberofitems={numberofitems} / target={targetName}"); } catch (Exception e) { harmonyLog.LogError($"DestroyZDO() exception " + e); } } else if (data?.m_methodHash == "SetEvent".GetStableHashCode()) { try { // var zdoData = ZDOMan.instance.GetZDO(peer.m_characterID); // var pos = zdoData.GetPosition(); ZPackage pkg = new ZPackage(data.m_parameters.GetArray()); var eventName = pkg.ReadString(); var time = pkg.ReadSingle(); var eventPos = pkg.ReadVector3(); if (!eventName.IsNullOrEmpty()) { harmonyLog.LogInfo($"SetEvent() -- eventName={eventName} / time={time} / eventPos={eventPos} / target={targetName}"); } } catch (Exception e) { harmonyLog.LogError($"SetEvent() exception " + e); } } else { // Debug //var methods = new List<string>() { "Jump", "OnJump", "SetMoveDir", "AddDPS", "AddFire", "BlockAttack", "UseStamina", "OnTargeted", "SetHealth", "SetCrouch", // "SetLookDir","SetRun", "Stagger", "Grow", "Shake", "CreateFragments", "RemotePrint","Pickup","Move","Die","Destroy","Awake","Loot","AddOre","EmptyProcessed", // "Interact","Hit","Create","Start","UseItem","UpdateTeleport","UseDoor","DropItem","AddNoise","Alert","Pick","Forward","Stop","OnHit","AddStatusEffect", // "Heal","AddFuel","OnNearProjectileHit","SleepStop","SleepStart","Ping", "Pong","DiscoverLocationRespons", "DiscoverClosestLocation", // "DestroyZDO","RequestZDO","SpawnObject","SetGlobalKey","GlobalKeys","LocationIcons","SetOwner","Extract","ResetCloth","SetTamed","RequestOpen","OpenRespons", // "RequestTakeAll", "TakeAllRespons","RequestOpen","SetSlotVisual","RemoveDoneItem","AddItem","Tap","Pickup","RequestPickup","Nibble","Step","SetPicked", // "ApplyOperation" //}; //bool found = false; //foreach (string method in methods) //{ // if (data?.m_methodHash == method.GetStableHashCode()) // { // found = true; // harmonyLog.LogInfo($" -> DEBUG: {method}() "); // } //} //if (!found) //{ // // Unknown RPC message // harmonyLog.LogInfo($"<unknown rpc message> hash={data.m_methodHash}"); //} } }
public bool LoadPlayerFromDisk(out string error) { error = string.Empty; ZPackage zPackage = LoadPlayerDataFromDisk(); //backup DirectoryInfo dir = Directory.CreateDirectory("backup"); File.WriteAllBytes($"{dir.FullName}/{m_filename}", zPackage.GetArray()); if (zPackage == null) { error = "No player data"; return(false); } m_version = zPackage.ReadInt(); if (!VersionInfo.IsPlayerVersionCompatible(m_version)) { error = "Player data is not compatible, ignoring"; return(false); } if (m_version >= 28) { m_playerStats.m_kills = zPackage.ReadInt(); m_playerStats.m_deaths = zPackage.ReadInt(); m_playerStats.m_crafts = zPackage.ReadInt(); m_playerStats.m_builds = zPackage.ReadInt(); } int num2 = zPackage.ReadInt(); for (int i = 0; i < num2; i++) { long key = zPackage.ReadLong(); WorldPlayerData worldPlayerData = new WorldPlayerData(); worldPlayerData.m_haveCustomSpawnPoint = zPackage.ReadBool(); worldPlayerData.m_spawnPoint = zPackage.ReadVector3(); worldPlayerData.m_haveLogoutPoint = zPackage.ReadBool(); worldPlayerData.m_logoutPoint = zPackage.ReadVector3(); if (m_version >= 30) { worldPlayerData.m_haveDeathPoint = zPackage.ReadBool(); worldPlayerData.m_deathPoint = zPackage.ReadVector3(); } worldPlayerData.m_homePoint = zPackage.ReadVector3(); if (m_version >= 29 && zPackage.ReadBool()) { worldPlayerData.m_mapData = zPackage.ReadByteArray(); } m_worldData.Add(key, worldPlayerData); } m_playerName = zPackage.ReadString(); m_playerID = zPackage.ReadLong(); m_startSeed = zPackage.ReadString(); m_playerData = null; if (zPackage.ReadBool()) { m_playerData = zPackage.ReadByteArray(); } return(true); }
// Token: 0x060007D3 RID: 2003 RVA: 0x0003D98C File Offset: 0x0003BB8C private void RPC_ZDOData(ZRpc rpc, ZPackage pkg) { ZDOMan.ZDOPeer zdopeer = this.FindPeer(rpc); if (zdopeer == null) { ZLog.Log("ZDO data from unkown host, ignoring"); return; } float time = Time.time; int num = 0; ZPackage pkg2 = new ZPackage(); int num2 = pkg.ReadInt(); for (int i = 0; i < num2; i++) { ZDOID id = pkg.ReadZDOID(); ZDO zdo = this.GetZDO(id); if (zdo != null) { zdo.InvalidateSector(); } } for (;;) { ZDOID zdoid = pkg.ReadZDOID(); if (zdoid.IsNone()) { break; } num++; uint num3 = pkg.ReadUInt(); uint num4 = pkg.ReadUInt(); long owner = pkg.ReadLong(); Vector3 vector = pkg.ReadVector3(); pkg.ReadPackage(ref pkg2); ZDO zdo2 = this.GetZDO(zdoid); bool flag = false; if (zdo2 != null) { if (num4 <= zdo2.m_dataRevision) { if (num3 > zdo2.m_ownerRevision) { zdo2.m_owner = owner; zdo2.m_ownerRevision = num3; zdopeer.m_zdos[zdoid] = new ZDOMan.ZDOPeer.PeerZDOInfo(num4, num3, time); continue; } continue; } } else { zdo2 = this.CreateNewZDO(zdoid, vector); flag = true; } zdo2.m_ownerRevision = num3; zdo2.m_dataRevision = num4; zdo2.m_owner = owner; zdo2.InternalSetPosition(vector); zdopeer.m_zdos[zdoid] = new ZDOMan.ZDOPeer.PeerZDOInfo(zdo2.m_dataRevision, zdo2.m_ownerRevision, time); zdo2.Deserialize(pkg2); if (ZNet.instance.IsServer() && flag && this.m_deadZDOs.ContainsKey(zdoid)) { zdo2.SetOwner(this.m_myid); this.DestroyZDO(zdo2); } } this.m_zdosRecv += num; }
// Token: 0x06000793 RID: 1939 RVA: 0x0003BE94 File Offset: 0x0003A094 public void Load(ZPackage pkg, int version) { this.m_ownerRevision = pkg.ReadUInt(); this.m_dataRevision = pkg.ReadUInt(); this.m_persistent = pkg.ReadBool(); this.m_owner = pkg.ReadLong(); this.m_timeCreated = pkg.ReadLong(); this.m_pgwVersion = pkg.ReadInt(); if (version >= 16 && version < 24) { pkg.ReadInt(); } if (version >= 23) { this.m_type = (ZDO.ObjectType)pkg.ReadSByte(); } if (version >= 22) { this.m_distant = pkg.ReadBool(); } if (version < 13) { pkg.ReadChar(); pkg.ReadChar(); } if (version >= 17) { this.m_prefab = pkg.ReadInt(); } this.m_sector = pkg.ReadVector2i(); this.m_position = pkg.ReadVector3(); this.m_rotation = pkg.ReadQuaternion(); int num = (int)pkg.ReadChar(); if (num > 0) { this.InitFloats(); for (int i = 0; i < num; i++) { int key = pkg.ReadInt(); this.m_floats[key] = pkg.ReadSingle(); } } else { this.ReleaseFloats(); } int num2 = (int)pkg.ReadChar(); if (num2 > 0) { this.InitVec3(); for (int j = 0; j < num2; j++) { int key2 = pkg.ReadInt(); this.m_vec3[key2] = pkg.ReadVector3(); } } else { this.ReleaseVec3(); } int num3 = (int)pkg.ReadChar(); if (num3 > 0) { this.InitQuats(); for (int k = 0; k < num3; k++) { int key3 = pkg.ReadInt(); this.m_quats[key3] = pkg.ReadQuaternion(); } } else { this.ReleaseQuats(); } int num4 = (int)pkg.ReadChar(); if (num4 > 0) { this.InitInts(); for (int l = 0; l < num4; l++) { int key4 = pkg.ReadInt(); this.m_ints[key4] = pkg.ReadInt(); } } else { this.ReleaseInts(); } int num5 = (int)pkg.ReadChar(); if (num5 > 0) { this.InitLongs(); for (int m = 0; m < num5; m++) { int key5 = pkg.ReadInt(); this.m_longs[key5] = pkg.ReadLong(); } } else { this.ReleaseLongs(); } int num6 = (int)pkg.ReadChar(); if (num6 > 0) { this.InitStrings(); for (int n = 0; n < num6; n++) { int key6 = pkg.ReadInt(); this.m_strings[key6] = pkg.ReadString(); } } else { this.ReleaseStrings(); } if (version < 17) { this.m_prefab = this.GetInt("prefab", 0); } }
// Token: 0x06000791 RID: 1937 RVA: 0x0003B918 File Offset: 0x00039B18 public void Deserialize(ZPackage pkg) { this.m_persistent = pkg.ReadBool(); this.m_distant = pkg.ReadBool(); this.m_timeCreated = pkg.ReadLong(); this.m_pgwVersion = pkg.ReadInt(); this.m_type = (ZDO.ObjectType)pkg.ReadSByte(); this.m_prefab = pkg.ReadInt(); this.m_rotation = pkg.ReadQuaternion(); int num = pkg.ReadInt(); if ((num & 1) != 0) { this.InitFloats(); int num2 = (int)pkg.ReadByte(); for (int i = 0; i < num2; i++) { int key = pkg.ReadInt(); this.m_floats[key] = pkg.ReadSingle(); } } else { this.ReleaseFloats(); } if ((num & 2) != 0) { this.InitVec3(); int num3 = (int)pkg.ReadByte(); for (int j = 0; j < num3; j++) { int key2 = pkg.ReadInt(); this.m_vec3[key2] = pkg.ReadVector3(); } } else { this.ReleaseVec3(); } if ((num & 4) != 0) { this.InitQuats(); int num4 = (int)pkg.ReadByte(); for (int k = 0; k < num4; k++) { int key3 = pkg.ReadInt(); this.m_quats[key3] = pkg.ReadQuaternion(); } } else { this.ReleaseQuats(); } if ((num & 8) != 0) { this.InitInts(); int num5 = (int)pkg.ReadByte(); for (int l = 0; l < num5; l++) { int key4 = pkg.ReadInt(); this.m_ints[key4] = pkg.ReadInt(); } } else { this.ReleaseInts(); } if ((num & 64) != 0) { this.InitLongs(); int num6 = (int)pkg.ReadByte(); for (int m = 0; m < num6; m++) { int key5 = pkg.ReadInt(); this.m_longs[key5] = pkg.ReadLong(); } } else { this.ReleaseLongs(); } if ((num & 16) != 0) { this.InitStrings(); int num7 = (int)pkg.ReadByte(); for (int n = 0; n < num7; n++) { int key6 = pkg.ReadInt(); this.m_strings[key6] = pkg.ReadString(); } return; } this.ReleaseStrings(); }
// Token: 0x060001C5 RID: 453 RVA: 0x0000F2F0 File Offset: 0x0000D4F0 public static Player Load(ZPackage pkg) { var player = new Player(); int num = pkg.ReadInt(); if (num >= 7) { player.MaxHealth = pkg.ReadSingle(); } player.Health = pkg.ReadSingle(); if (num >= 10) { player.MaxStamina = pkg.ReadSingle(); } if (num >= 8) { player.FirstSpawn = pkg.ReadBool(); } if (num >= 20) { player.TimeSinceDeath = pkg.ReadSingle(); } if (num >= 23) { player.GuardianPower = pkg.ReadString(); } if (num >= 24) { player.GuardianPowerCooldown = pkg.ReadSingle(); } if (num == 2) { pkg.ReadZDOID(); } player.Inventory = InventoryReaderWriter.Load(pkg); int num3 = pkg.ReadInt(); for (int i = 0; i < num3; i++) { string item = pkg.ReadString(); player.m_knownRecipes.Add(item); } if (num < 15) { int num4 = pkg.ReadInt(); for (int j = 0; j < num4; j++) { pkg.ReadString(); } } else { int num5 = pkg.ReadInt(); for (int k = 0; k < num5; k++) { string key = pkg.ReadString(); int value = pkg.ReadInt(); player.m_knownStations.Add(key, value); } } int num6 = pkg.ReadInt(); for (int l = 0; l < num6; l++) { string item2 = pkg.ReadString(); player.m_knownMaterial.Add(item2); } if (num < 19 || num >= 21) { int num7 = pkg.ReadInt(); for (int m = 0; m < num7; m++) { string item3 = pkg.ReadString(); player.m_shownTutorials.Add(item3); } } if (num >= 6) { int num8 = pkg.ReadInt(); for (int n = 0; n < num8; n++) { string item4 = pkg.ReadString(); player.m_uniques.Add(item4); } } if (num >= 9) { int num9 = pkg.ReadInt(); for (int num10 = 0; num10 < num9; num10++) { string item5 = pkg.ReadString(); player.m_trophies.Add(item5); } } if (num >= 18) { int num11 = pkg.ReadInt(); for (int num12 = 0; num12 < num11; num12++) { Biome item6 = (Biome)pkg.ReadInt(); player.m_knownBiome.Add(item6); } } if (num >= 22) { int num13 = pkg.ReadInt(); for (int num14 = 0; num14 < num13; num14++) { string key2 = pkg.ReadString(); string value2 = pkg.ReadString(); player.m_knownTexts.Add(key2, value2); } } if (num >= 4) { string beard = pkg.ReadString(); string hair = pkg.ReadString(); player.Beard = beard; player.Hair = hair; } if (num >= 5) { Vector3 skinColor = pkg.ReadVector3(); Vector3 hairColor = pkg.ReadVector3(); player.SkinColor = skinColor; player.HairColor = hairColor; } if (num >= 11) { int playerModel = pkg.ReadInt(); player.PlayerModel = playerModel; } if (num >= 12) { player.m_foods.Clear(); int num15 = pkg.ReadInt(); for (int num16 = 0; num16 < num15; num16++) { if (num >= 14) { var food = new Food(); food.m_name = pkg.ReadString(); food.m_health = pkg.ReadSingle(); if (num >= 16) { food.m_stamina = pkg.ReadSingle(); } player.m_foods.Add(food); } else { pkg.ReadString(); pkg.ReadSingle(); pkg.ReadSingle(); pkg.ReadSingle(); pkg.ReadSingle(); pkg.ReadSingle(); pkg.ReadSingle(); if (num >= 13) { pkg.ReadSingle(); } } } } if (num >= 17) { player.Skills = SkillsReaderWriter.Load(pkg); } return(player); }
public void Load(ZPackage pkg, int version) { this.m_ownerRevision = pkg.ReadUInt(); this.m_dataRevision = pkg.ReadUInt(); this.m_persistent = pkg.ReadBool(); this.m_owner = pkg.ReadLong(); this.m_timeCreated = pkg.ReadLong(); this.m_pgwVersion = pkg.ReadInt(); if (version >= 16 && version < 24) { pkg.ReadInt(); } if (version >= 23) { this.m_type = (ZDO.ObjectType)pkg.ReadSByte(); } if (version >= 22) { this.m_distant = pkg.ReadBool(); } if (version < 13) { int num1 = (int)pkg.ReadChar(); int num2 = (int)pkg.ReadChar(); } if (version >= 17) { this.m_prefab = pkg.ReadInt(); } this.m_sector = pkg.ReadVector2i(); this.m_position = pkg.ReadVector3(); this.m_rotation = pkg.ReadQuaternion(); int num3 = (int)pkg.ReadChar(); if (num3 > 0) { this.InitFloats(); for (int index = 0; index < num3; ++index) { this.m_floats[pkg.ReadInt()] = pkg.ReadSingle(); } } else { this.ReleaseFloats(); } int num4 = (int)pkg.ReadChar(); if (num4 > 0) { this.InitVec3(); for (int index = 0; index < num4; ++index) { this.m_vec3[pkg.ReadInt()] = pkg.ReadVector3(); } } else { this.ReleaseVec3(); } int num5 = (int)pkg.ReadChar(); if (num5 > 0) { this.InitQuats(); for (int index = 0; index < num5; ++index) { this.m_quats[pkg.ReadInt()] = pkg.ReadQuaternion(); } } else { this.ReleaseQuats(); } int num6 = (int)pkg.ReadChar(); if (num6 > 0) { this.InitInts(); for (int index = 0; index < num6; ++index) { this.m_ints[pkg.ReadInt()] = pkg.ReadInt(); } } else { this.ReleaseInts(); } int num7 = (int)pkg.ReadChar(); if (num7 > 0) { this.InitLongs(); for (int index = 0; index < num7; ++index) { this.m_longs[pkg.ReadInt()] = pkg.ReadLong(); } } else { this.ReleaseLongs(); } int num8 = (int)pkg.ReadChar(); if (num8 > 0) { this.InitStrings(); for (int index = 0; index < num8; ++index) { this.m_strings[pkg.ReadInt()] = pkg.ReadString(); } } else { this.ReleaseStrings(); } if (version >= 17) { return; } this.m_prefab = this.GetInt("prefab", 0); }
static void Prefix(RoutedRPCData data) { ZNetPeer peer = ZNet.instance.GetPeer(data.m_senderPeerID); var steamid = ""; try { steamid = peer.m_rpc.GetSocket().GetHostName(); } catch {} if (data?.m_methodHash == sayMethodHash) { try { var zdoData = ZDOMan.instance.GetZDO(peer.m_characterID); var pos = zdoData.GetPosition(); ZPackage package = new ZPackage(data.m_parameters.GetArray()); int messageType = package.ReadInt(); string userName = package.ReadString(); string message = package.ReadString(); message = (message == null ? "" : message).Trim(); if (message.StartsWith("/pin")) { var messageParts = message.Split(' '); var pinType = "dot"; var startIdx = 1; if (messageParts.Length > 1 && ALLOWED_PINS.Contains(messageParts[1])) { pinType = messageParts[1]; startIdx = 2; } var pinText = ""; if (startIdx < messageParts.Length) { pinText = String.Join(" ", messageParts, startIdx, messageParts.Length - startIdx); } if (pinText.Length > 20) { pinText = pinText.Substring(0, 20); } var safePinsText = Regex.Replace(pinText, @"[^a-zA-Z0-9 ]", ""); var timestamp = DateTime.Now - unixEpoch; var pinId = $"{timestamp.TotalMilliseconds}-{UnityEngine.Random.Range(1000, 9999)}"; mapDataServer.AddPin(steamid, pinId, pinType, userName, pos, safePinsText); var usersPins = mapDataServer.pins.FindAll(pin => pin.StartsWith(steamid)); var numOverflowPins = usersPins.Count - WebMapConfig.MAX_PINS_PER_USER; for (var t = numOverflowPins; t > 0; t--) { var pinIdx = mapDataServer.pins.FindIndex(pin => pin.StartsWith(steamid)); mapDataServer.RemovePin(pinIdx); } SavePins(); } else if (message.StartsWith("/undoPin")) { var pinIdx = mapDataServer.pins.FindLastIndex(pin => pin.StartsWith(steamid)); if (pinIdx > -1) { mapDataServer.RemovePin(pinIdx); SavePins(); } } else if (message.StartsWith("/deletePin")) { var messageParts = message.Split(' '); var pinText = ""; if (messageParts.Length > 1) { pinText = String.Join(" ", messageParts, 1, messageParts.Length - 1); } var pinIdx = mapDataServer.pins.FindLastIndex(pin => { var pinParts = pin.Split(','); return(pinParts[0] == steamid && pinParts[pinParts.Length - 1] == pinText); }); if (pinIdx > -1) { mapDataServer.RemovePin(pinIdx); SavePins(); } } //Debug.Log("SAY!!! " + messageType + " | " + userName + " | " + message); } catch {} } else if (data?.m_methodHash == chatMessageMethodHash) { try { ZPackage package = new ZPackage(data.m_parameters.GetArray()); Vector3 pos = package.ReadVector3(); int messageType = package.ReadInt(); string userName = package.ReadString(); // string message = package.ReadString(); // message = (message == null ? "" : message).Trim(); if (messageType == (int)Talker.Type.Ping) { mapDataServer.BroadcastPing(data.m_senderPeerID, userName, pos); } // Debug.Log("CHAT!!! " + pos + " | " + messageType + " | " + userName + " | " + message); } catch {} } }
public static bool Prefix(ref ZRoutedRpc __instance, ref ZRoutedRpc.RoutedRPCData rpcData) { if (VPlusChatFilter.isEnabled.Value) { if (rpcData.m_methodHash == "ChatMessage".GetStableHashCode()) { ZPackage payload = rpcData.m_parameters; VPlusChatFilter.chatFilterLogger.LogDebug("ChatMessage Sent"); payload.SetPos(0); VPlusChatFilter.chatFilterLogger.LogDebug("Size of package is " + payload.Size()); VPlusChatFilter.chatFilterLogger.LogDebug("Read byte test : " + payload.ReadInt()); payload.SetPos(0); Vector3 headPoint = payload.ReadVector3(); VPlusChatFilter.chatFilterLogger.LogDebug("Read head : " + headPoint.ToString()); int messageType = payload.ReadInt(); VPlusChatFilter.chatFilterLogger.LogDebug("Read type : " + messageType); string playerName = payload.ReadString(); VPlusChatFilter.chatFilterLogger.LogDebug("Read name : " + playerName); string message = payload.ReadString(); VPlusChatFilter.chatFilterLogger.LogDebug("Read message : " + message); var profanities = FamilyFriendlyfier.filter.DetectAllProfanities(message, true); if (profanities.Count > 0) { foreach (string bannable in profanities) { VPlusChatFilter.chatFilterLogger.LogInfo("Bad word from " + playerName + " : " + bannable); } message = FamilyFriendlyfier.filter.CensorString(message, VPlusChatFilter.replaceKey.Value[0]); } VPlusChatFilter.chatFilterLogger.LogDebug("New message : " + message); ZPackage newpayload = new ZPackage(); ZRpc.Serialize(new object[] { headPoint, messageType, playerName, message }, ref newpayload); rpcData.m_parameters = newpayload; } else if (rpcData.m_methodHash == "Say".GetStableHashCode()) { ZPackage payload = rpcData.m_parameters; VPlusChatFilter.chatFilterLogger.LogDebug("Say Sent"); payload.SetPos(0); VPlusChatFilter.chatFilterLogger.LogDebug("Size of package is " + payload.Size()); VPlusChatFilter.chatFilterLogger.LogDebug("Read byte test : " + payload.ReadInt()); payload.SetPos(0); int messageType = payload.ReadInt(); VPlusChatFilter.chatFilterLogger.LogDebug("Read type : " + messageType); string playerName = payload.ReadString(); VPlusChatFilter.chatFilterLogger.LogDebug("Read name : " + playerName); string message = payload.ReadString(); VPlusChatFilter.chatFilterLogger.LogDebug("Read message : " + message); var profanities = FamilyFriendlyfier.filter.DetectAllProfanities(message, true); if (profanities.Count > 0) { foreach (string bannable in profanities) { VPlusChatFilter.chatFilterLogger.LogInfo("Bad word from " + playerName + " : " + bannable); } message = FamilyFriendlyfier.filter.CensorString(message, VPlusChatFilter.replaceKey.Value[0]); } VPlusChatFilter.chatFilterLogger.LogDebug("New message : " + message); ZPackage newpayload = new ZPackage(); ZRpc.Serialize(new object[] { messageType, playerName, message }, ref newpayload); rpcData.m_parameters = newpayload; } ZPackage zpackage = new ZPackage(); rpcData.Serialize(zpackage); if (__instance.m_server) { if (rpcData.m_targetPeerID != 0L) { ZNetPeer peer = __instance.GetPeer(rpcData.m_targetPeerID); if (peer != null && peer.IsReady()) { peer.m_rpc.Invoke("RoutedRPC", new object[] { zpackage }); return(false); } return(false); } else { using (List <ZNetPeer> .Enumerator enumerator = __instance.m_peers.GetEnumerator()) { while (enumerator.MoveNext()) { ZNetPeer znetPeer = enumerator.Current; if (rpcData.m_senderPeerID != znetPeer.m_uid && znetPeer.IsReady()) { znetPeer.m_rpc.Invoke("RoutedRPC", new object[] { zpackage }); } } return(false); } } } foreach (ZNetPeer znetPeer2 in __instance.m_peers) { if (znetPeer2.IsReady()) { znetPeer2.m_rpc.Invoke("RoutedRPC", new object[] { zpackage }); } } } return(true); }