// 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); }
// Token: 0x060004DB RID: 1243 RVA: 0x00028464 File Offset: 0x00026664 public void ShowText(HitData.DamageModifier type, Vector3 pos, float dmg, bool player = false) { DamageText.TextType type2 = DamageText.TextType.Normal; switch (type) { case HitData.DamageModifier.Normal: type2 = DamageText.TextType.Normal; break; case HitData.DamageModifier.Resistant: type2 = DamageText.TextType.Resistant; break; case HitData.DamageModifier.Weak: type2 = DamageText.TextType.Weak; break; case HitData.DamageModifier.Immune: type2 = DamageText.TextType.Immune; break; case HitData.DamageModifier.VeryResistant: type2 = DamageText.TextType.Resistant; break; case HitData.DamageModifier.VeryWeak: type2 = DamageText.TextType.Weak; break; } this.ShowText(type2, pos, dmg, player); }
// Token: 0x060004DC RID: 1244 RVA: 0x000284B8 File Offset: 0x000266B8 public void ShowText(DamageText.TextType type, Vector3 pos, float dmg, bool player = false) { ZPackage zpackage = new ZPackage(); zpackage.Write((int)type); zpackage.Write(pos); zpackage.Write(dmg); zpackage.Write(player); ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "DamageText", new object[] { zpackage }); }
// Token: 0x060004DA RID: 1242 RVA: 0x00028218 File Offset: 0x00026418 private void AddInworldText(DamageText.TextType type, Vector3 pos, float distance, float dmg, bool mySelf) { DamageText.WorldTextInstance worldTextInstance = new DamageText.WorldTextInstance(); worldTextInstance.m_worldPos = pos; worldTextInstance.m_gui = UnityEngine.Object.Instantiate <GameObject>(this.m_worldTextBase, base.transform); worldTextInstance.m_textField = worldTextInstance.m_gui.GetComponent <Text>(); this.m_worldTexts.Add(worldTextInstance); Color white; if (type == DamageText.TextType.Heal) { white = new Color(0.5f, 1f, 0.5f, 0.7f); } else if (mySelf) { if (dmg == 0f) { white = new Color(0.5f, 0.5f, 0.5f, 1f); } else { white = new Color(1f, 0f, 0f, 1f); } } else { switch (type) { case DamageText.TextType.Normal: white = new Color(1f, 1f, 1f, 1f); goto IL_16C; case DamageText.TextType.Resistant: white = new Color(0.6f, 0.6f, 0.6f, 1f); goto IL_16C; case DamageText.TextType.Weak: white = new Color(1f, 1f, 0f, 1f); goto IL_16C; case DamageText.TextType.Immune: white = new Color(0.6f, 0.6f, 0.6f, 1f); goto IL_16C; case DamageText.TextType.TooHard: white = new Color(0.8f, 0.7f, 0.7f, 1f); goto IL_16C; } white = Color.white; } IL_16C: worldTextInstance.m_textField.color = white; if (distance > this.m_smallFontDistance) { worldTextInstance.m_textField.fontSize = this.m_smallFontSize; } else { worldTextInstance.m_textField.fontSize = this.m_largeFontSize; } string text; switch (type) { case DamageText.TextType.Heal: text = "+" + dmg.ToString("0.#", CultureInfo.InvariantCulture); break; case DamageText.TextType.TooHard: text = Localization.instance.Localize("$msg_toohard"); break; case DamageText.TextType.Blocked: text = Localization.instance.Localize("$msg_blocked: ") + dmg.ToString("0.#", CultureInfo.InvariantCulture); break; default: text = dmg.ToString("0.#", CultureInfo.InvariantCulture); break; } worldTextInstance.m_textField.text = text; worldTextInstance.m_timer = 0f; }
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}"); //} } }