The full C++ declaration:
void cWorld::UpdateSign(int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4, cPlayer * a_Player)
It is designed to call the OnUpdatingSign callback - you simply cannot update a sign without this callback knowing.
It should be possible to pass a nil for a_Player; if that errors, it's probably an error in some plugin that expects to always get a valid cPlayer in OnUpdatingSign(). The error message should include the name of the plugin, maybe even location in the code, if you're lucky.
So the call should look like
void cWorld::UpdateSign(int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4, cPlayer * a_Player)
It is designed to call the OnUpdatingSign callback - you simply cannot update a sign without this callback knowing.
It should be possible to pass a nil for a_Player; if that errors, it's probably an error in some plugin that expects to always get a valid cPlayer in OnUpdatingSign(). The error message should include the name of the plugin, maybe even location in the code, if you're lucky.
So the call should look like
World:UpdateSign(1000, 60, -1000, "text1", "text2", "text3", "text4", nil);