Skip to content

Commit

Permalink
Merge pull request #6 from AssassinTee/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
AssassinTee authored Apr 23, 2019
2 parents 8cead3b + 64faa61 commit 23601eb
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 29 deletions.
2 changes: 1 addition & 1 deletion src/engine/shared/protocol.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ enum
SERVERINFO_LEVEL_MAX=2,

MAX_CLIENTS=64,
MAX_PLAYERS=16,
MAX_PLAYERS=64,//64 player support

MAX_INPUT_SIZE=128,
MAX_SNAPSHOT_PACKSIZE=900,
Expand Down
82 changes: 56 additions & 26 deletions src/game/server/gamecontext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ void CGameContext::SendCommand(int ChatterClientID, const std::string& command)
Msg.m_Mode = CHAT_ALL;
Msg.m_ClientID = -1;

Msg.m_TargetID = -1;
Msg.m_TargetID = ChatterClientID;
for(auto it = messageList.begin(); it != messageList.end(); ++it)
{
Msg.m_pMessage = it->c_str();
Expand Down Expand Up @@ -341,12 +341,10 @@ void CGameContext::SetKillerTeam(int ClientID, int Killer, bool silent)
return;

m_apPlayers[ClientID]->SetTeamID(TeamID);
for(int p = 0; p < NUM_SKINPARTS; p++)
{
str_copy(m_apPlayers[ClientID]->m_TeeInfos.m_aaSkinPartNames[p], m_apPlayers[TeamID]->m_TeeInfosOriginal.m_aaSkinPartNames[p], 24);
m_apPlayers[ClientID]->m_TeeInfos.m_aUseCustomColors[p] = m_apPlayers[TeamID]->m_TeeInfosOriginal.m_aUseCustomColors[p];
m_apPlayers[ClientID]->m_TeeInfos.m_aSkinPartColors[p] = m_apPlayers[TeamID]->m_TeeInfosOriginal.m_aSkinPartColors[p];
}

//copy skin
copy_skin(m_apPlayers[ClientID]->m_TeeInfos, m_apPlayers[Killer]->m_TeeInfos);//copy Teaminfos from killer, original Teeinfo may be changed from player TeamID

SendSkinChange(ClientID, -1);
if(!silent) {
char aBuf[128];
Expand Down Expand Up @@ -386,12 +384,9 @@ void CGameContext::TestColor(int ColorID)
void CGameContext::ResetSkin(int ClientID)
{
m_apPlayers[ClientID]->SetTeamID(ClientID);
for(int p = 0; p < NUM_SKINPARTS; p++)
{
str_copy(m_apPlayers[ClientID]->m_TeeInfos.m_aaSkinPartNames[p], m_apPlayers[ClientID]->m_TeeInfosOriginal.m_aaSkinPartNames[p], 24);
m_apPlayers[ClientID]->m_TeeInfos.m_aUseCustomColors[p] = m_apPlayers[ClientID]->m_TeeInfosOriginal.m_aUseCustomColors[p];
m_apPlayers[ClientID]->m_TeeInfos.m_aSkinPartColors[p] = m_apPlayers[ClientID]->m_TeeInfosOriginal.m_aSkinPartColors[p];
}

//copy skin
copy_skin(m_apPlayers[ClientID]->m_TeeInfos, m_apPlayers[ClientID]->m_TeeInfosOriginal);
SendSkinChange(ClientID, -1);
}

Expand Down Expand Up @@ -729,13 +724,30 @@ void CGameContext::OnClientPredictedInput(int ClientID, void *pInput)
}
}

void CGameContext::ApplyStartColors(int ClientID, CPlayer::TeeInfos& src)
{
//Save original skin
copy_skin(m_apPlayers[ClientID]->m_TeeInfosOriginal, src);

//Overwrite original info
//Body
m_apPlayers[ClientID]->m_TeeInfosOriginal.m_aUseCustomColors[0] = 1;
m_apPlayers[ClientID]->m_TeeInfosOriginal.m_aSkinPartColors[0] = TeamHandler::getInstance().GetNewBodyColor(ClientID);

//Feet
m_apPlayers[ClientID]->m_TeeInfosOriginal.m_aUseCustomColors[4] = 1;
m_apPlayers[ClientID]->m_TeeInfosOriginal.m_aSkinPartColors[4] = TeamHandler::getInstance().GetNewFeetColor(ClientID);


}

void CGameContext::OnClientEnter(int ClientID)
{
m_pController->OnPlayerConnect(m_apPlayers[ClientID]);

m_VoteUpdate = true;

//Overwrite original info
/*//Overwrite original info
//Body
m_apPlayers[ClientID]->m_TeeInfos.m_aUseCustomColors[0] = 1;
m_apPlayers[ClientID]->m_TeeInfos.m_aSkinPartColors[0] = TeamHandler::getInstance().GetNewBodyColor(ClientID);
Expand All @@ -744,13 +756,18 @@ void CGameContext::OnClientEnter(int ClientID)
m_apPlayers[ClientID]->m_TeeInfos.m_aUseCustomColors[4] = 1;
m_apPlayers[ClientID]->m_TeeInfos.m_aSkinPartColors[4] = TeamHandler::getInstance().GetNewFeetColor(ClientID);
//Save original Teaminfos
for(int p = 0; p < NUM_SKINPARTS; p++)
//Save original Teaminfos*/
/*for(int p = 0; p < NUM_SKINPARTS; p++)
{
str_copy(m_apPlayers[ClientID]->m_TeeInfosOriginal.m_aaSkinPartNames[p], m_apPlayers[ClientID]->m_TeeInfos.m_aaSkinPartNames[p], 24);
m_apPlayers[ClientID]->m_TeeInfosOriginal.m_aUseCustomColors[p] = m_apPlayers[ClientID]->m_TeeInfos.m_aUseCustomColors[p];
m_apPlayers[ClientID]->m_TeeInfosOriginal.m_aSkinPartColors[p] = m_apPlayers[ClientID]->m_TeeInfos.m_aSkinPartColors[p];
}
}*/

//save original skin
ApplyStartColors(ClientID, m_apPlayers[ClientID]->m_TeeInfos);
copy_skin(m_apPlayers[ClientID]->m_TeeInfos, m_apPlayers[ClientID]->m_TeeInfosOriginal);

m_apPlayers[ClientID]->SetTeamID(ClientID);
//Set skin of hugest team
//ResetSkin(ClientID);
Expand Down Expand Up @@ -1136,6 +1153,17 @@ void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID)
{
if(pPlayer->m_LastKill && pPlayer->m_LastKill+Server()->TickSpeed()*3 > Server()->Tick())
return;
else if(pPlayer->m_LastKillRequest+Server()->TickSpeed()*1 > Server()->Tick())
return;//don't send a message
else if(pPlayer->m_LastKill && pPlayer->m_LastKill+Server()->TickSpeed()*g_Config.m_SvSelfkillCooldown > Server()->Tick())
{
pPlayer->m_LastKillRequest = Server()->Tick();
char aSelfkill[128];
int seconds = (pPlayer->m_LastKill+Server()->TickSpeed()*g_Config.m_SvSelfkillCooldown-Server()->Tick())/Server()->TickSpeed();
str_format(aSelfkill, sizeof(aSelfkill), "You can't selfkill for '%d' second(s)", seconds);
SendChat(-1, CHAT_ALL, ClientID, aSelfkill);
return;
}

pPlayer->m_LastKill = Server()->Tick();
pPlayer->KillCharacter(WEAPON_SELF);
Expand All @@ -1150,27 +1178,29 @@ void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID)
}
else if(MsgID == NETMSGTYPE_CL_SKINCHANGE)
{
if(pPlayer->m_LastChangeInfo && pPlayer->m_LastChangeInfo+Server()->TickSpeed()*5 > Server()->Tick())
return;
if(pPlayer->m_LastChangeInfo && pPlayer->m_LastChangeInfo+Server()->TickSpeed()*5 > Server()->Tick()) {
return;
}

pPlayer->m_LastChangeInfo = Server()->Tick();
CNetMsg_Cl_SkinChange *pMsg = (CNetMsg_Cl_SkinChange *)pRawMsg;

for(int p = 0; p < NUM_SKINPARTS; p++)
{
str_copy(pPlayer->m_TeeInfos.m_aaSkinPartNames[p], pMsg->m_apSkinPartNames[p], 24);
pPlayer->m_TeeInfos.m_aUseCustomColors[p] = pMsg->m_aUseCustomColors[p];
pPlayer->m_TeeInfos.m_aSkinPartColors[p] = pMsg->m_aSkinPartColors[p];
str_copy(pPlayer->m_TeeInfosOriginal.m_aaSkinPartNames[p], pMsg->m_apSkinPartNames[p], 24);
pPlayer->m_TeeInfosOriginal.m_aUseCustomColors[p] = pMsg->m_aUseCustomColors[p];
pPlayer->m_TeeInfosOriginal.m_aSkinPartColors[p] = pMsg->m_aSkinPartColors[p];
}

// update all clients
for(int i = 0; i < MAX_CLIENTS; ++i)
ApplyStartColors(ClientID, pPlayer->m_TeeInfosOriginal);//does change feet and body colors of original skin
SendChat(-1, CHAT_ALL, ClientID, "Your skinchange will apply next round");
// update all clients//don't update, the update will apply next round
/*for(int i = 0; i < MAX_CLIENTS; ++i)
{
if(!m_apPlayers[i] || (!Server()->ClientIngame(i) && !m_apPlayers[i]->IsDummy()) || Server()->GetClientVersion(i) < MIN_SKINCHANGE_CLIENTVERSION)
continue;
SendSkinChange(pPlayer->GetCID(), i);
}
}*/
}
}
else
Expand Down
2 changes: 2 additions & 0 deletions src/game/server/gamecontext.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "gameworld.h"

#include <string>
#include "player.h"

/*
Tick
Expand Down Expand Up @@ -150,6 +151,7 @@ class CGameContext : public IGameServer
void SendSkinChange(int ClientID, int TargetID);

void TestColor(int ColorID);
void ApplyStartColors(int ClientID, CPlayer::TeeInfos& src);

void SendGameMsg(int GameMsgID, int ClientID);
void SendGameMsg(int GameMsgID, int ParaI1, int ClientID);
Expand Down
12 changes: 11 additions & 1 deletion src/game/server/player.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,11 @@ class CPlayer
int m_LastChangeInfo;
int m_LastEmote;
int m_LastKill;
int m_LastKillRequest;//prevet server spaming
int m_LastReadyChange;

// TODO: clean this up
struct
struct TeeInfos
{
char m_aaSkinPartNames[NUM_SKINPARTS][24];
int m_aUseCustomColors[NUM_SKINPARTS];
Expand Down Expand Up @@ -135,4 +136,13 @@ class CPlayer
bool m_ActiveSpecSwitch;
};

inline void copy_skin(CPlayer::TeeInfos& dst, CPlayer::TeeInfos& src)
{
for(int p = 0; p < NUM_SKINPARTS; p++)
{
str_copy(dst.m_aaSkinPartNames[p], src.m_aaSkinPartNames[p], 24);
dst.m_aUseCustomColors[p] = src.m_aUseCustomColors[p];
dst.m_aSkinPartColors[p] = src.m_aSkinPartColors[p];
}
}
#endif
1 change: 1 addition & 0 deletions src/game/variables.h
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ MACRO_CONFIG_INT(SvStartWeapon, sv_start_weapon, 4, 0, 4, CFGFLAG_SAVE|CFGFLAG_S
MACRO_CONFIG_INT(SvAllowPickups, sv_start_weapon, 0, 0, 1, CFGFLAG_SAVE|CFGFLAG_SERVER, "Spawn pickups")
MACRO_CONFIG_INT(SvAllowWeaponPickups, sv_start_weapon, 0, 0, 1, CFGFLAG_SAVE|CFGFLAG_SERVER, "Spawn weapons")

MACRO_CONFIG_INT(SvSelfkillCooldown, sv_start_weapon, 15, 3, 9999, CFGFLAG_SAVE|CFGFLAG_SERVER, "Cooldown for selfkill, 3 seconds is the teeworlds minimum!");
// debug
#ifdef CONF_DEBUG // this one can crash the server if not used correctly
MACRO_CONFIG_INT(DbgDummies, dbg_dummies, 0, 0, MAX_CLIENTS-1, CFGFLAG_SERVER, "")
Expand Down
2 changes: 1 addition & 1 deletion src/game/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#define GAME_VERSION_H
#include <generated/nethash.cpp>
#define GAME_VERSION "0.7.3"
#define GAME_NETVERSION "0.7 " GAME_NETVERSION_HASH
#define GAME_NETVERSION "0.7 802f1be60a05665f"
#define CLIENT_VERSION 0x0703
static const char GAME_RELEASE_VERSION[8] = "0.7.3";
#define CATCH_VERSION "1.0.0"
Expand Down

0 comments on commit 23601eb

Please sign in to comment.