Not perfect... haven't tested in L4D2.
This works when player not reconnect.
- Player need stay on server at end of map and wait map change.
PHP Code:
public void OnPluginStart()
{
HookEvent("player_spawn", player_spawn);
}
StringMap remember;
public void OnClientDisconnect(int client)
{
if(!IsClientInGame(client) || !IsPlayerAlive(client) || IsFakeClient(client)) return;
if(remember == null)
remember = CreateTrie();
int hp = GetClientHealth(client);
char userid[60];
Format(userid, sizeof(userid), "%i", GetClientUserId(client));
remember.SetValue(userid, hp, true);
}
public void player_spawn(Event event, const char[] name, bool dontBroadcast)
{
if(remember == null) return;
char userid[60];
int id = event.GetInt("userid");
Format(userid, sizeof(userid), "%i", id);
int client = GetClientOfUserId(id);
if(IsFakeClient(client) || GetClientTeam(client) <= 1 || !IsPlayerAlive(client)) return;
// userid found from Trie array
int hp;
if(!remember.GetValue(userid, hp)) return;
remember.Remove(userid);
if(hp <= GetClientHealth(client)) return;
// Delay 1 sec
DataPack pack;
CreateDataTimer(1.0, delay, pack);
pack.WriteCell(id);
pack.WriteCell(hp);
pack.Reset();
}
public Action delay(Handle timer, DataPack pack)
{
int client = GetClientOfUserId(pack.ReadCell());
if(!client || !IsClientInGame(client) || !IsPlayerAlive(client)) return Plugin_Continue;
int hp = pack.ReadCell();
SetEntProp(client, Prop_Send, "m_iHealth", hp);
PrintToChat(client, "[SM] HP restored");
return Plugin_Continue;
}
Maybe there is already plugin what do this.
__________________