diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-10-08 20:47:56 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-10-08 20:47:56 +0000 |
| commit | 3544db49270f6d99c8b2126f294d38267e2899cb (patch) | |
| tree | 02a17b114cacf8ce634d65c6f53f3b6537ee06ce /src/game/client | |
| parent | 1d094181ed06edd6f9d851f5d802bc9d03b6c352 (diff) | |
| download | zcatch-3544db49270f6d99c8b2126f294d38267e2899cb.tar.gz zcatch-3544db49270f6d99c8b2126f294d38267e2899cb.zip | |
fixed #490 (insert the player info in the sv_setinfo message into the snapshot instead)
Diffstat (limited to 'src/game/client')
| -rw-r--r-- | src/game/client/clienthooks.cpp | 1 | ||||
| -rw-r--r-- | src/game/client/gameclient.cpp | 96 | ||||
| -rw-r--r-- | src/game/client/gameclient.hpp | 1 |
3 files changed, 38 insertions, 60 deletions
diff --git a/src/game/client/clienthooks.cpp b/src/game/client/clienthooks.cpp index 1611b00d..88a7722a 100644 --- a/src/game/client/clienthooks.cpp +++ b/src/game/client/clienthooks.cpp @@ -17,7 +17,6 @@ extern "C" void modc_init() { gameclient.on_init(); } extern "C" void modc_connected() { gameclient.on_connected(); } extern "C" void modc_predict() { gameclient.on_predict(); } extern "C" void modc_newsnapshot() { gameclient.on_snapshot(); } -extern "C" void modc_recordkeyframe() { gameclient.on_recordkeyframe(); } extern "C" int modc_snap_input(int *data) { return gameclient.on_snapinput(data); } extern "C" void modc_statechange(int state, int old) { gameclient.on_statechange(state, old); } extern "C" void modc_render() { gameclient.on_render(); } diff --git a/src/game/client/gameclient.cpp b/src/game/client/gameclient.cpp index 6fc478b0..7c9a1ed6 100644 --- a/src/game/client/gameclient.cpp +++ b/src/game/client/gameclient.cpp @@ -424,44 +424,7 @@ void GAMECLIENT::on_message(int msgtype) for(int i = 0; i < all.num; i++) all.components[i]->on_message(msgtype, rawmsg); - // handle core messages - if(msgtype == NETMSGTYPE_SV_SETINFO) - { - NETMSG_SV_SETINFO *msg = (NETMSG_SV_SETINFO *)rawmsg; - - str_copy(clients[msg->cid].name, msg->name, 64); - str_copy(clients[msg->cid].skin_name, msg->skin, 64); - - // make sure that we don't set a special skin on the client - if(clients[msg->cid].skin_name[0] == 'x' || clients[msg->cid].skin_name[1] == '_') - str_copy(clients[msg->cid].skin_name, "default", 64); - - clients[msg->cid].color_body = msg->color_body; - clients[msg->cid].color_feet = msg->color_feet; - - clients[msg->cid].skin_info.color_body = skins->get_color(msg->color_body); - clients[msg->cid].skin_info.color_feet = skins->get_color(msg->color_feet); - clients[msg->cid].skin_info.size = 64; - - // find new skin - clients[msg->cid].skin_id = gameclient.skins->find(clients[msg->cid].skin_name); - if(clients[msg->cid].skin_id < 0) - clients[msg->cid].skin_id = 0; - - clients[msg->cid].use_custom_color = msg->use_custom_color; - - if(msg->use_custom_color) - clients[msg->cid].skin_info.texture = gameclient.skins->get(clients[msg->cid].skin_id)->color_texture; - else - { - clients[msg->cid].skin_info.texture = gameclient.skins->get(clients[msg->cid].skin_id)->org_texture; - clients[msg->cid].skin_info.color_body = vec4(1,1,1,1); - clients[msg->cid].skin_info.color_feet = vec4(1,1,1,1); - } - - clients[msg->cid].update_render_info(); - } - else if(msgtype == NETMSGTYPE_SV_READYTOENTER) + if(msgtype == NETMSGTYPE_SV_READYTOENTER) { client_entergame(); } @@ -579,7 +542,43 @@ void GAMECLIENT::on_snapshot() SNAP_ITEM item; const void *data = snap_get_item(SNAP_CURRENT, i, &item); - if(item.type == NETOBJTYPE_PLAYER_INFO) + if(item.type == NETOBJTYPE_CLIENT_INFO) + { + const NETOBJ_CLIENT_INFO *info = (const NETOBJ_CLIENT_INFO *)data; + int cid = item.id; + ints_to_str(&info->name0, 6, clients[cid].name); + ints_to_str(&info->skin0, 6, clients[cid].skin_name); + + clients[cid].use_custom_color = info->use_custom_color; + clients[cid].color_body = info->color_body; + clients[cid].color_feet = info->color_feet; + + // prepare the info + if(clients[cid].skin_name[0] == 'x' || clients[cid].skin_name[1] == '_') + str_copy(clients[cid].skin_name, "default", 64); + + clients[cid].skin_info.color_body = skins->get_color(clients[cid].color_body); + clients[cid].skin_info.color_feet = skins->get_color(clients[cid].color_feet); + clients[cid].skin_info.size = 64; + + // find new skin + clients[cid].skin_id = gameclient.skins->find(clients[cid].skin_name); + if(clients[cid].skin_id < 0) + clients[cid].skin_id = 0; + + if(clients[cid].use_custom_color) + clients[cid].skin_info.texture = gameclient.skins->get(clients[cid].skin_id)->color_texture; + else + { + clients[cid].skin_info.texture = gameclient.skins->get(clients[cid].skin_id)->org_texture; + clients[cid].skin_info.color_body = vec4(1,1,1,1); + clients[cid].skin_info.color_feet = vec4(1,1,1,1); + } + + clients[cid].update_render_info(); + + } + else if(item.type == NETOBJTYPE_PLAYER_INFO) { const NETOBJ_PLAYER_INFO *info = (const NETOBJ_PLAYER_INFO *)data; @@ -808,25 +807,6 @@ void GAMECLIENT::send_kill(int client_id) client_send_msg(); } -void GAMECLIENT::on_recordkeyframe() -{ - for(int i = 0; i < MAX_CLIENTS; i++) - { - if(!snap.player_infos[i]) - continue; - - NETMSG_SV_SETINFO msg; - msg.cid = i; - msg.name = clients[i].name; - msg.skin = clients[i].skin_name; - msg.use_custom_color = clients[i].use_custom_color; - msg.color_body = clients[i].color_body; - msg.color_feet = clients[i].color_feet; - msg.pack(MSGFLAG_NOSEND|MSGFLAG_RECORD); - client_send_msg(); - } -} - void GAMECLIENT::con_team(void *result, void *user_data) { ((GAMECLIENT*)user_data)->send_switch_team(console_arg_int(result, 0)); diff --git a/src/game/client/gameclient.hpp b/src/game/client/gameclient.hpp index b9ee325e..d2a12099 100644 --- a/src/game/client/gameclient.hpp +++ b/src/game/client/gameclient.hpp @@ -119,7 +119,6 @@ public: void on_snapshot(); void on_predict(); int on_snapinput(int *data); - void on_recordkeyframe(); // actions // TODO: move these |