The silent GUID is used for identification if there exists one. If there doesn't exist one, it is generated and stored to silent.dat. When the player gets a new silent GUID it is not yet recognized by the server. Then the server uses the PB GUID(etkey) if, there exists one, to search it's database for a match. If a match is found, the database record is linked with the new silent GUID. If there already was a silent GUID for that record, the change of silent GUID is written to the server log. This was made so that the transition from PB GUIDs would work the easiest way. It doesn't work the same if your PB GUID changes. The server database is made to keep both PB and silent GUIDs as individually unique. But players are identified by their silent GUIDs if there exists a record for it and the PB GUID is ignored in such case.
I don't remember the algorithm for generating the real etkeys, but it might have something related to time. So for that reason it is good to get the keys from etkey.org so that they don't clash. Silent keys are made of hashed UUIDs provided by the platform, which are supposed to be unique. These are hashed also before sending to the server so that they don't match the stored value in silent.dat.
For more information of the PB GUIDs, you might find some from the Luigi Auriemmas website. I don't really know where to find the real algorithm if it's not there anywhere. It might be somewhere embedded in some thread about the matter for example at splashdamage or splatterladder.
The actions you have described can be made only with rcon commands. Also, you can never trust a word someone who does that kind of things to you are saying. If he says one thing it is most likely something completely different in reality.
Please pm me the userinfo strings he uses. The name check has a known issue which allows too wide range of characters as valid. If I remeber correctly, someone else reported empty name too.
Sorry, I didn't realize the field names were missing. I added them now. They are sess.overall_killrating and sess.rating for PRW. If you want them in the same format as they are in the scoreboard, the formula for kill rating is:
function kill_probability(net, g_of_x_margin)
return 1.0 / (1.0+math.exp(-(net*g_of_x_margin)))
local M_PI = 3.14159265358979323846
return 1.0 / math.sqrt(1.0+variance*3.0/(M_PI*M_PI))
local probability = kill_probability(rating,g_of_x(variance))
return probability / (1.0f - probability)
Ok. That is a custom menu for changing names made by the admins of the server. The problem is that the menu is updating the name to the server after each keystroke. So when you have deleted the name, it is updating the server with an empty name. You have found a clear bug, but it is in this case caused by custom server modifications.
I tested our menus, which worked correctly when backspacing.