예제 #1
0
        public MapDataServer()
        {
            httpServer = new HttpServer(SERVER_PORT);
            httpServer.AddWebSocketService <WebSocketHandler>("/");
            httpServer.KeepClean = true;

            webSocketHandler = httpServer.WebSocketServices["/"];

            broadcastTimer = new System.Threading.Timer(e => {
                string dataString = "";
                players.ForEach(player => {
                    ZDO zdoData = null;
                    try {
                        zdoData = ZDOMan.instance.GetZDO(player.m_characterID);
                    } catch { }

                    if (zdoData != null)
                    {
                        Vector3 pos     = zdoData.GetPosition();
                        float maxHealth = zdoData.GetFloat("max_health", 25f);
                        float health    = zdoData.GetFloat("health", maxHealth);
                        maxHealth       = Mathf.Max(maxHealth, health);

                        if (player.m_publicRefPos)
                        {
                            dataString +=
                                $"{player.m_uid}\n{player.m_playerName}\n{pos.x:0.##},{pos.y:0.##},{pos.z:0.##}\n{health:0.##}\n{maxHealth:0.##}\n\n";
                        }
                        else
                        {
                            dataString += $"{player.m_uid}\n{player.m_playerName}\nhidden\n\n";
                        }
                    }
                });
                if (dataString.Length > 0)
                {
                    webSocketHandler.Sessions.Broadcast("players\n" + dataString.Trim());
                }
            }, null, TimeSpan.Zero, TimeSpan.FromSeconds(PLAYER_UPDATE_INTERVAL));

            publicRoot = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, "web");

            fileCache = new Dictionary <string, byte[]>();

            httpServer.OnGet += (sender, e) => {
                HttpListenerRequest req = e.Request;
                // Debug.Log("~~~ Got GET Request for: " + req.RawUrl);

                if (ProcessSpecialRoutes(e))
                {
                    return;
                }

                ServeStaticFiles(e);
            };
        }
예제 #2
0
 // Token: 0x060006DC RID: 1756 RVA: 0x00038A80 File Offset: 0x00036C80
 public static void LoadFromZDO(ItemDrop.ItemData itemData, ZDO zdo)
 {
     itemData.m_durability  = zdo.GetFloat("durability", itemData.m_durability);
     itemData.m_stack       = zdo.GetInt("stack", itemData.m_stack);
     itemData.m_quality     = zdo.GetInt("quality", itemData.m_quality);
     itemData.m_variant     = zdo.GetInt("variant", itemData.m_variant);
     itemData.m_crafterID   = zdo.GetLong("crafterID", itemData.m_crafterID);
     itemData.m_crafterName = zdo.GetString("crafterName", itemData.m_crafterName);
 }
예제 #3
0
        public void BroadcastWebsocket()
        {
            var dataString = "";

            mapDataServer.players.ForEach(player =>
            {
                ZDO zdoData = null;
                try
                {
                    zdoData = ZDOMan.instance.GetZDO(player.m_characterID);
                }
                catch { }

                if (zdoData != null)
                {
                    var pos       = zdoData.GetPosition();
                    var maxHealth = zdoData.GetFloat("max_health", 25f);
                    var health    = zdoData.GetFloat("health", maxHealth);
                    maxHealth     = Mathf.Max(maxHealth, health);

                    var maxStamina = zdoData.GetFloat("max_stamina", 100f);
                    var stamina    = zdoData.GetFloat("stamina", maxStamina);
                    //  maxStamina = Mathf.Max(maxStamina, stamina);

                    if (player.m_publicRefPos)
                    {
                        dataString +=
                            $"{player.m_uid}\n{player.m_playerName}\n{str(pos.x)},{str(pos.y)},{str(pos.z)}\n{str(health)}\n{str(maxHealth)}\n{str(stamina)}\n{str(maxStamina)}\n\n";
                    }
                    else
                    {
                        dataString += $"{player.m_uid}\n{player.m_playerName}\nhidden\n\n";
                    }
                }
                else
                {
                }
            });
            if (dataString.Length > 0)
            {
                mapDataServer.Broadcast("players\n" + dataString.Trim());
            }
            mapDataServer.Broadcast("time\n" + GetCurrentTimeString());
        }
예제 #4
0
    // Token: 0x060009C5 RID: 2501 RVA: 0x00046F2C File Offset: 0x0004512C
    private void SyncParameters()
    {
        ZDO zdo = this.m_nview.GetZDO();

        if (!this.m_nview.IsOwner())
        {
            for (int i = 0; i < this.m_boolHashes.Length; i++)
            {
                int  num   = this.m_boolHashes[i];
                bool @bool = zdo.GetBool(438569 + num, this.m_boolDefaults[i]);
                this.m_animator.SetBool(num, @bool);
            }
            for (int j = 0; j < this.m_floatHashes.Length; j++)
            {
                int   num2   = this.m_floatHashes[j];
                float @float = zdo.GetFloat(438569 + num2, this.m_floatDefaults[j]);
                if (this.m_smoothCharacterSpeeds && (num2 == ZSyncAnimation.m_forwardSpeedID || num2 == ZSyncAnimation.m_sidewaySpeedID))
                {
                    this.m_animator.SetFloat(num2, @float, 0.2f, Time.fixedDeltaTime);
                }
                else
                {
                    this.m_animator.SetFloat(num2, @float);
                }
            }
            for (int k = 0; k < this.m_intHashes.Length; k++)
            {
                int num3 = this.m_intHashes[k];
                int @int = zdo.GetInt(438569 + num3, this.m_intDefaults[k]);
                this.m_animator.SetInteger(num3, @int);
            }
            float float2 = zdo.GetFloat(ZSyncAnimation.m_animSpeedID, 1f);
            this.m_animator.speed = float2;
            return;
        }
        zdo.Set(ZSyncAnimation.m_animSpeedID, this.m_animator.speed);
    }
예제 #5
0
            public void unequip()
            {
                if (isFilled())
                {
                    GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(equippedItem);
                    if ((bool)((UnityEngine.Object)itemPrefab))
                    {
                        GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(itemPrefab, this.armorStand.m_dropSpawnPoint.position, this.armorStand.m_dropSpawnPoint.rotation);

                        var itemData = gameObject.GetComponent <ItemDrop>().m_itemData;
                        itemData.m_durability  = zdo.GetFloat($"{zdoVar}durability", itemData.m_durability);
                        itemData.m_stack       = zdo.GetInt($"{zdoVar}stack", itemData.m_stack);
                        itemData.m_quality     = zdo.GetInt($"{zdoVar}quality", itemData.m_quality);
                        itemData.m_variant     = zdo.GetInt($"{zdoVar}variant", itemData.m_variant);
                        itemData.m_crafterID   = zdo.GetLong($"{zdoVar}crafterID", itemData.m_crafterID);
                        itemData.m_crafterName = zdo.GetString($"{zdoVar}crafterName", itemData.m_crafterName);

                        this.armorStand.m_effects.Create(this.armorStand.m_dropSpawnPoint.position, Quaternion.identity, null, 1f);
                        zdo.Set(zdoVar, "");
                        zdo.Set(zdoVariantVar, 0);
                    }
                }
            }
예제 #6
0
        public static void Prefix(MonsterAI __instance, ref float dt)
        {
            if (Configuration.Current.Tameable.IsEnabled)
            {
                MonsterAI monsterAI = __instance;
                ZDO       zdo       = monsterAI.m_nview.GetZDO();

                if ((TameableMortalityTypes)Configuration.Current.Tameable.mortality != TameableMortalityTypes.Essential || zdo == null || !zdo.GetBool("isRecoveringFromStun"))
                {
                    return;
                }

                if (monsterAI.m_character.m_moveDir != Vector3.zero)
                {
                    monsterAI.StopMoving();
                }

                if (monsterAI.m_sleepTimer != 0f)
                {
                    monsterAI.m_sleepTimer = 0f;
                }

                float timeSinceStun = zdo.GetFloat("timeSinceStun") + dt;
                zdo.Set("timeSinceStun", timeSinceStun);

                if (timeSinceStun >= Configuration.Current.Tameable.stunRecoveryTime)
                {
                    zdo.Set("timeSinceStun", 0f);
                    monsterAI.m_sleepTimer = 0.5f;
                    monsterAI.m_character.m_animator.SetBool("sleeping", false);
                    zdo.Set("sleeping", false);
                    zdo.Set("isRecoveringFromStun", false);
                }

                dt = 0f;
            }
        }
예제 #7
0
 public static float GetNoise(this ZDO zdo)
 {
     return(zdo.GetFloat(NoiseHash));
 }