Server Only option in UNet

Hey guys… So I have had everything working perfectly, but I am trying to play with this “Server only” option when starting my server in the UNet network manager.

Everything works 100% when I do “Host” (player + server) however, some weird things don’t work when I am “Server only”.
For example:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;

public class ZombieSpawner : NetworkBehaviour {

    public GameObject objectToSpawn;
    public float spawnTime = 15f;
    public float range = 15f;

    private float t;

    void Start() {

    }

    public override void OnStartServer() {
        t = Time.time + spawnTime;
    }

    void FixedUpdate() {
        if (!isServer)
            return;
        if (Time.time > t) {
            CmdSpawnObject();
            t = Time.time + 15f;
        }
    }

    [Command]
    void CmdSpawnObject() {
        GameObject go = GameObject.Instantiate(objectToSpawn, new Vector3(transform.position.x + Random.Range(-range, range), transform.position.y, transform.position.z + Random.Range(-range, range)), Quaternion.identity) as GameObject;
        NetworkServer.Spawn(go);
    }
}

Simple script on a gameobject spawns enemies, now with the server only option it is like it does NOT run any FixedUpdate() or Update() methods.
What can I call other thatn FixedUpdate() or Update() to have timer things going on like I need?

you cant run a Command on a dedicated server… there are no players

Like seanr says you can’t use [Command] on the server side if that makes more sense… [Command] is called by clients. To run code on the server use the [Server] tag. The best way I can think to describe this is that [Command] is when your player is telling the server something like “Interact with the door” where as [Server] is server side updates and such - like AI - the player’s have no input as to what path the AI takes it is all server side. Although I need to clean up my code a bit maybe this will help.

You may also find this answer helpful… RPC Client and Server playing - Questions & Answers - Unity Discussions

For example: (for commands from my player input script)

if(Input.GetKeyDown(KeyCode.Mouse0))    //left click
            {
                if (pc.hud.showINV == false)
                {
                    switch (pc.inv.HotbarItems[pc.hud.selection].Type)
                    {
                        case ItemType.None:
                        case ItemType.Weapon:
                            CmdAttack();
                            break;
                        case ItemType.Magic:
                            CmdCast();
                            break;
                        case ItemType.BuildingBlock:
                            if (pc.inLandArea != null)
                            {
                                CmdPlaceBlock();
                            }
                            break;
                        //etc etc etc
                    }
                }
            }

[Command]
    void CmdAttack()
    {
        // play animation for character to swing sync to all players
        // ray cast in front of player by weapon.range if we hit NPC, Player, or Structure call Object.TakeDamage(Damage dmg) 
        RaycastHit hit;
        Ray Vision_Ray = new Ray(Cam.transform.position, Cam.transform.forward * InteractionRange);     //should use weapon.range when weapons are implemented.
        if (timeSinceLastAttack >= 1.5f && Physics.Raycast(Vision_Ray, out hit, InteractionRange))
        {
            timeSinceLastAttack = 0.0f;
            switch(hit.collider.tag)
            {
                case "Monster":
                    AIBasic ai = hit.collider.gameObject.GetComponentInParent<AIBasic>();
                    DamageData dd;
                    DamageInfo di;
                    dd.damageAmount = 5 * ai.FindZone(hit.collider.transform.position);     //temp. using 5 until weapons are defined.
                    Debug.Log("Damage Amount: " + dd.damageAmount.ToString());
                    dd.pc = pc;

                    di.crushing = 100;
                    di.arcane = 0;
                    di.earth = 0;
                    di.fire = 0;
                    di.ice = 0;
                    di.electric = 0;
                    di.slashing = 0;
                    di.piercing = 0;

                    dd.dmgInfo = di;

                    ai.TakeDamage(dd);     //this is actually a [Server] call because things can take damage with no players
                    break;
                case "Breakable":
                    Breakable Thing = hit.collider.gameObject.GetComponent<Breakable>();
                    Thing.CmdBreak();
                    break;
            }
        }
    }

[Server]
    public void TakeDamage(DamageData data)
    {
        if (baseInfo.HP > 0)
        { 
            float TotalDamage = 0.0f;
            TotalDamage += data.damageAmount * (data.dmgInfo.piercing / 100) * (resistInfo.piercing / 100);
            TotalDamage += data.damageAmount * (data.dmgInfo.slashing / 100) * (resistInfo.slashing / 100);
            TotalDamage += data.damageAmount * (data.dmgInfo.fire / 100) * (resistInfo.fire / 100);
            TotalDamage += data.damageAmount * (data.dmgInfo.ice / 100) * (resistInfo.ice / 100);
            TotalDamage += data.damageAmount * (data.dmgInfo.electric / 100) * (resistInfo.electric / 100);
            TotalDamage += data.damageAmount * (data.dmgInfo.earth / 100) * (resistInfo.earth / 100);
            TotalDamage += data.damageAmount * (data.dmgInfo.crushing / 100) * (resistInfo.crushing / 100);
            TotalDamage += data.damageAmount * (data.dmgInfo.arcane / 100) * (resistInfo.arcane / 100);
            baseInfo.HP -= (int)TotalDamage;
            Debug.Log("Actual Damage Delt: " + TotalDamage.ToString());
            anim.Play(GetRandomAnimationFromList(HitAnimations).name);
            anim.SetInteger("HP", baseInfo.HP);
            if (baseInfo.HP <= 0)
            {
                agent.speed = 0;
            }
        }
    }