Пример #1
0
    // 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);
    }
Пример #2
0
    // 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);
    }
Пример #3
0
    // 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
        });
    }
Пример #4
0
    // 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;
    }
Пример #5
0
            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}");
                    //}
                }
            }