Skip to content

Commit

Permalink
probably fixed.
Browse files Browse the repository at this point in the history
  • Loading branch information
ST-Chara committed Feb 18, 2024
1 parent ba0a173 commit ffea1b0
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 115 deletions.
227 changes: 117 additions & 110 deletions src/game/server/entities/account.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,38 +63,40 @@ void CAccount::Login(char *Username, char *Password)
Accfile = fopen(aBuf, "r");

fscanf(Accfile, "%d\n%s\n%s\n\n%d\n%d\n%d\n\n%d\n%d\n%d\n%d\n%d\n\n%d\n\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n\n%d\n\n%d\n%d",
&m_pPlayer->m_AccData.m_UserID,
m_pPlayer->m_AccData.m_Username,
m_pPlayer->m_AccData.m_Password,

&m_pPlayer->m_AccData.m_Exp,
&m_pPlayer->m_AccData.m_Level,
&m_pPlayer->m_AccData.m_Money,

&m_pPlayer->m_AccData.m_Dmg,
&m_pPlayer->m_AccData.m_Health,
&m_pPlayer->m_AccData.m_Ammoregen,
&m_pPlayer->m_AccData.m_Handle,
&m_pPlayer->m_AccData.m_Ammo,

&m_pPlayer->m_AccData.m_PlayerState,

&m_pPlayer->m_AccData.m_TurretMoney,
&m_pPlayer->m_AccData.m_TurretLevel,
&m_pPlayer->m_AccData.m_TurretExp,
&m_pPlayer->m_AccData.m_TurretDmg,
&m_pPlayer->m_AccData.m_TurretSpeed,
&m_pPlayer->m_AccData.m_TurretAmmo,
&m_pPlayer->m_AccData.m_TurretShotgun,
&m_pPlayer->m_AccData.m_TurretRange,
&m_pPlayer->m_AccData.m_Freeze,
&m_pPlayer->m_AccData.m_Winner,
&m_pPlayer->m_AccData.m_Luser);
&m_pPlayer->m_AccData.m_UserID,
m_pPlayer->m_AccData.m_Username,
m_pPlayer->m_AccData.m_Password,

&m_pPlayer->m_AccData.m_Exp,
&m_pPlayer->m_AccData.m_Level,
&m_pPlayer->m_AccData.m_Money,

&m_pPlayer->m_AccData.m_Dmg,
&m_pPlayer->m_AccData.m_Health,
&m_pPlayer->m_AccData.m_Ammoregen,
&m_pPlayer->m_AccData.m_Handle,
&m_pPlayer->m_AccData.m_Ammo,

&m_pPlayer->m_AccData.m_PlayerState,

&m_pPlayer->m_AccData.m_TurretMoney,
&m_pPlayer->m_AccData.m_TurretLevel,
&m_pPlayer->m_AccData.m_TurretExp,
&m_pPlayer->m_AccData.m_TurretDmg,
&m_pPlayer->m_AccData.m_TurretSpeed,
&m_pPlayer->m_AccData.m_TurretAmmo,
&m_pPlayer->m_AccData.m_TurretShotgun,
&m_pPlayer->m_AccData.m_TurretRange,

&m_pPlayer->m_AccData.m_Freeze,

&m_pPlayer->m_AccData.m_Winner,
&m_pPlayer->m_AccData.m_Luser);

fclose(Accfile);

if (m_pPlayer->GetTeam() == TEAM_SPECTATORS)
{
{
if (GameServer()->m_pController->ZombStarted() && !GameServer()->m_pController->m_Warmup)
m_pPlayer->SetTeam(TEAM_RED);
else
Expand All @@ -107,60 +109,60 @@ void CAccount::Login(char *Username, char *Password)
void CAccount::Register(char *Username, char *Password)
{
char aBuf[125];
if(m_pPlayer->m_AccData.m_UserID)
if (m_pPlayer->m_AccData.m_UserID)
return GameServer()->SendChatTarget(m_pPlayer->GetCID(), _("已经登录了"));

if(Exists(Username))
if (Exists(Username))
return GameServer()->SendChatTarget(m_pPlayer->GetCID(), _("账号已存在."));

char Filter[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-_";
char *p = strpbrk(Username, Filter);
if(!p)
if (!p)
{
GameServer()->SendChatTarget(m_pPlayer->GetCID(), _("请使用以下字符注册用户名!"));
GameServer()->SendChatTarget(m_pPlayer->GetCID(), _("A - Z, a - z, 0 - 9, . - _"));
return;
}

str_format(aBuf, sizeof(aBuf), "accounts/%s.acc", Username);

FILE *Accfile;
Accfile = fopen(aBuf, "a+");

str_format(aBuf, sizeof(aBuf), "%d\n%s\n%s\n\n%d\n%d\n%d\n\n%d\n%d\n%d\n%d\n%d\n\n%d\n\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n\n%d\n\n%d\n%d",
NextID(),
Username,
Password,

m_pPlayer->m_AccData.m_Exp,
m_pPlayer->m_AccData.m_Level = g_Config.m_SvRegStartLevel,
m_pPlayer->m_AccData.m_Money = g_Config.m_SvRegStartLevel,
m_pPlayer->m_AccData.m_Dmg,
m_pPlayer->m_AccData.m_Health,
m_pPlayer->m_AccData.m_Ammoregen,
m_pPlayer->m_AccData.m_Handle,
m_pPlayer->m_AccData.m_Ammo,

m_pPlayer->m_AccData.m_PlayerState,

m_pPlayer->m_AccData.m_TurretMoney,
m_pPlayer->m_AccData.m_TurretLevel,
m_pPlayer->m_AccData.m_TurretExp,
m_pPlayer->m_AccData.m_TurretDmg,
m_pPlayer->m_AccData.m_TurretSpeed,
m_pPlayer->m_AccData.m_TurretAmmo,
m_pPlayer->m_AccData.m_TurretShotgun,
m_pPlayer->m_AccData.m_TurretRange,
m_pPlayer->m_AccData.m_Freeze,
m_pPlayer->m_AccData.m_Winner,
m_pPlayer->m_AccData.m_Luser);
str_format(aBuf, sizeof(aBuf), "%d\n%s\n%s\n\n%d\n%d\n%d\n\n%d\n%d\n%d\n%d\n%d\n\n%d\n\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n\n%d\n\n%d\n%d",
NextID(),
Username,
Password,

m_pPlayer->m_AccData.m_Exp,
m_pPlayer->m_AccData.m_Level = g_Config.m_SvRegStartLevel,
m_pPlayer->m_AccData.m_Money = g_Config.m_SvRegStartLevel,

m_pPlayer->m_AccData.m_Dmg,
m_pPlayer->m_AccData.m_Health,
m_pPlayer->m_AccData.m_Ammoregen,
m_pPlayer->m_AccData.m_Handle,
m_pPlayer->m_AccData.m_Ammo,

m_pPlayer->m_AccData.m_PlayerState,

m_pPlayer->m_AccData.m_TurretMoney,
m_pPlayer->m_AccData.m_TurretLevel,
m_pPlayer->m_AccData.m_TurretExp,
m_pPlayer->m_AccData.m_TurretDmg,
m_pPlayer->m_AccData.m_TurretSpeed,
m_pPlayer->m_AccData.m_TurretAmmo,
m_pPlayer->m_AccData.m_TurretShotgun,
m_pPlayer->m_AccData.m_TurretRange,
m_pPlayer->m_AccData.m_Freeze,
m_pPlayer->m_AccData.m_Winner,
m_pPlayer->m_AccData.m_Luser);

fputs(aBuf, Accfile);
fclose(Accfile);

Login(Username, Password);

GameServer()->SendChatTarget(m_pPlayer->GetCID(), _("~~~~~~~~~~~ ! 注册 ! ~~~~~~~~~~~"));
str_format(aBuf, sizeof(aBuf), "登录: %s", Username);
GameServer()->SendChatTarget(m_pPlayer->GetCID(), _(aBuf));
Expand All @@ -175,12 +177,12 @@ bool CAccount::Exists(const char *Username)
{
char aBuf[128];
str_format(aBuf, sizeof(aBuf), "accounts/%s.acc", Username);
if(FILE *Accfile = fopen(aBuf, "r"))
{
fclose(Accfile);
return true;
}
return false;
if (FILE *Accfile = fopen(aBuf, "r"))
{
fclose(Accfile);
return true;
}
return false;
}

void CAccount::Apply()
Expand All @@ -189,37 +191,43 @@ void CAccount::Apply()
str_format(aBuf, sizeof(aBuf), "accounts/%s.acc", m_pPlayer->m_AccData.m_Username);
std::remove(aBuf);
FILE *Accfile;
Accfile = fopen(aBuf,"a+");

str_format(aBuf, sizeof(aBuf), "%d\n%s\n%s\n\n%d\n%d\n%d\n\n%d\n%d\n%d\n%d\n%d\n\n%d\n\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n\n%d\n\n%d\n%d",

m_pPlayer->m_AccData.m_UserID,
m_pPlayer->m_AccData.m_Username,
m_pPlayer->m_AccData.m_Password,

m_pPlayer->m_AccData.m_Exp,
m_pPlayer->m_AccData.m_Level,
m_pPlayer->m_AccData.m_Money,

m_pPlayer->m_AccData.m_Dmg,
m_pPlayer->m_AccData.m_Health,
m_pPlayer->m_AccData.m_Ammoregen,
m_pPlayer->m_AccData.m_Handle,
m_pPlayer->m_AccData.m_Ammo,

m_pPlayer->m_AccData.m_PlayerState,

m_pPlayer->m_AccData.m_TurretMoney,
m_pPlayer->m_AccData.m_TurretLevel,
m_pPlayer->m_AccData.m_TurretExp,
m_pPlayer->m_AccData.m_TurretDmg,
m_pPlayer->m_AccData.m_TurretSpeed,
m_pPlayer->m_AccData.m_TurretAmmo,
m_pPlayer->m_AccData.m_TurretShotgun,
m_pPlayer->m_AccData.m_TurretRange,
m_pPlayer->m_AccData.m_Freeze,
m_pPlayer->m_AccData.m_Winner,
m_pPlayer->m_AccData.m_Luser);
Accfile = fopen(aBuf, "a+");

str_format(aBuf, sizeof(aBuf), "%d\n%s\n%s\n"
"\n%d\n%d\n%d\n"
"\n%d\n%d\n%d\n%d\n%d\n"
"\n%d\n"
"\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n"
"\n%d\n"
"\n%d\n%d",

m_pPlayer->m_AccData.m_UserID,
m_pPlayer->m_AccData.m_Username,
m_pPlayer->m_AccData.m_Password,

m_pPlayer->m_AccData.m_Exp,
m_pPlayer->m_AccData.m_Level,
m_pPlayer->m_AccData.m_Money,

m_pPlayer->m_AccData.m_Dmg,
m_pPlayer->m_AccData.m_Health,
m_pPlayer->m_AccData.m_Ammoregen,
m_pPlayer->m_AccData.m_Handle,
m_pPlayer->m_AccData.m_Ammo,

m_pPlayer->m_AccData.m_PlayerState,

m_pPlayer->m_AccData.m_TurretMoney,
m_pPlayer->m_AccData.m_TurretLevel,
m_pPlayer->m_AccData.m_TurretExp,
m_pPlayer->m_AccData.m_TurretDmg,
m_pPlayer->m_AccData.m_TurretSpeed,
m_pPlayer->m_AccData.m_TurretAmmo,
m_pPlayer->m_AccData.m_TurretShotgun,
m_pPlayer->m_AccData.m_TurretRange,
m_pPlayer->m_AccData.m_Freeze,
m_pPlayer->m_AccData.m_Winner,
m_pPlayer->m_AccData.m_Luser);

fputs(aBuf, Accfile);
fclose(Accfile);
Expand All @@ -230,7 +238,7 @@ void CAccount::Reset()
m_pPlayer->m_AccData.m_UserID = 0;
str_copy(m_pPlayer->m_AccData.m_Username, "", 32);
str_copy(m_pPlayer->m_AccData.m_Password, "", 32);

m_pPlayer->m_AccData.m_Exp = m_pPlayer->m_AccData.m_Level = m_pPlayer->m_AccData.m_Money = 0;
m_pPlayer->m_AccData.m_Dmg = m_pPlayer->m_AccData.m_Health = m_pPlayer->m_AccData.m_Ammoregen = m_pPlayer->m_AccData.m_Handle = m_pPlayer->m_AccData.m_Ammo = 0;
m_pPlayer->m_AccData.m_PlayerState = 0;
Expand All @@ -240,31 +248,30 @@ void CAccount::Reset()

void CAccount::NewPassword(char *NewPassword)
{
if(str_length(NewPassword) > 12 || str_length(NewPassword) < 4)
if (str_length(NewPassword) > 12 || str_length(NewPassword) < 4)
{
char aBuf[48];
str_format(aBuf, sizeof(aBuf), "密码太%s!", str_length(NewPassword)<4?"长了":"短了");
str_format(aBuf, sizeof(aBuf), "密码太%s!", str_length(NewPassword) < 4 ? "长了" : "短了");
GameServer()->SendChatTarget(m_pPlayer->GetCID(), _(aBuf));
return;
}
}

char Filter[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-_";
char *p = strpbrk(NewPassword, Filter);
if(!p)
if (!p)
{
GameServer()->SendChatTarget(m_pPlayer->GetCID(), _("请使用以下字符作为注册密码!"));
GameServer()->SendChatTarget(m_pPlayer->GetCID(), _("A - Z, a - z, 0 - 9, . - _"));
return;
}

str_copy(m_pPlayer->m_AccData.m_Password, NewPassword, 32);
Apply();

dbg_msg("account", "密码更改为 - ('%s')", m_pPlayer->m_AccData.m_Username);
GameServer()->SendChatTarget(m_pPlayer->GetCID(), _("密码更改成功"));
}


int CAccount::NextID()
{
FILE *Accfile;
Expand All @@ -273,7 +280,7 @@ int CAccount::NextID()

str_copy(AccUserID, "accounts/UsersID.acc", sizeof(AccUserID));

if(Exists("UsersID"))
if (Exists("UsersID"))
{
Accfile = fopen(AccUserID, "r");
fscanf(Accfile, "%d", &UserID);
Expand All @@ -282,11 +289,11 @@ int CAccount::NextID()
std::remove(AccUserID);

Accfile = fopen(AccUserID, "a+");
str_format(aBuf, sizeof(aBuf), "%d", UserID+1);
str_format(aBuf, sizeof(aBuf), "%d", UserID + 1);
fputs(aBuf, Accfile);
fclose(Accfile);

return UserID+1;
return UserID + 1;
}
else
{
Expand Down
2 changes: 1 addition & 1 deletion src/game/server/gamecontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ void IGameController::EndRound()

for (int i = 0; i < MAX_CLIENTS; i++)
{
if (GameServer()->m_apPlayers[i])
if (GameServer()->m_apPlayers[i] && GameServer()->m_apPlayers[i]->m_AccData.m_UserID)
GameServer()->m_apPlayers[i]->m_pAccount->Apply();
}
}
Expand Down
6 changes: 2 additions & 4 deletions src/game/server/player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,11 @@ CPlayer::CPlayer(CGameContext *pGameServer, int ClientID, int Team)
m_pCharacter = 0;
m_NumInputs = 0;
m_KillMe = 0;
mem_zero(&m_AccData, sizeof(m_AccData));

m_pAccount = new CAccount(this, m_pGameServer);
m_pChatCmd = new CCmd(this, m_pGameServer);

if (m_AccData.m_UserID)
m_pAccount->Apply();

Reset();
}

Expand Down Expand Up @@ -113,7 +111,7 @@ void CPlayer::Tick()
{
m_AccData.m_Money++;
m_AccData.m_Exp -= ExpNeedToNextLvl();
m_AccData.m_Level += m_AccData.m_Level/4;
m_AccData.m_Level += m_AccData.m_Level / 4;
if (m_AccData.m_Exp < m_AccData.m_Level)
{
if (m_AccData.m_UserID)
Expand Down

0 comments on commit ffea1b0

Please sign in to comment.