1. I recently started to give players on my server the BasePlayer.PlayerFlags.IsAdmin flag and I learned that they are now allowed to paint on any sign they want. To fix this I started by hooking into CanUpdateSign which fixed them from actually changing the sign, but on their client it appears that they changed it unless they leave the networking range and come back in so that a new version of the sign is sent to the client. I am attempting to use sign.SendNetworkUpdate, but the image on the sign doesn't seem to be updated unless they leave the network range and come back. Just wondering what the correct way to do this is because the Signage.cs class uses
    Code:
    this.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
    
    when the sign is updated.

    My code
    Code:
    object CanUpdateSign(BasePlayer player, Signage sign)
    {
    if (player.net?.connection?.authLevel > 0) return null;
    timer.Once(1, () =>
    {
    sign.SendNetworkUpdate();
    });return false;
    }
    
     
  2. I looked around and it does seem nearly impossible to get it to force update on the client... The best idea I have so far, which is really a workaround, is to teleport the player out of the network range and back in, but that's not ideal.
     
  3. Yeah that's what I was afraid of I guess I will look into what about going out of networking range makes it work. I also may be able to send a fake destroy packet to the client and then sent a packet to create the sign again.
     
  4. Did you try OnSignUpdate?
     
  5. I will try, but it's not a matter of the hook being called because it is. The image for the sign is not changed when the player attempts to change it which is the intended behavior, but it appears to the person attempting to change it that it has. What I want to do is send an updated version of that image to the client who tried to change the sign so it doesn't look like they were able to change it. I could be missing something so I will try anyways to see what happens.