Fixed: Server side issues
This commit is contained in:
parent
9ceb9e7d81
commit
8be848dd2b
5 changed files with 120 additions and 60 deletions
|
@ -292,7 +292,7 @@
|
||||||
</STRUCT>
|
</STRUCT>
|
||||||
<STRUCT>
|
<STRUCT>
|
||||||
<ATOM Name="name" Value="PvpMode"/>
|
<ATOM Name="name" Value="PvpMode"/>
|
||||||
<ATOM Name="type" Value="uint8"/>
|
<ATOM Name="type" Value="uint32"/>
|
||||||
<ATOM Name="persistant" Value="true"/>
|
<ATOM Name="persistant" Value="true"/>
|
||||||
<ATOM Name="mirror" Value="true"/>
|
<ATOM Name="mirror" Value="true"/>
|
||||||
<ATOM Name="weight" Value="1"/>
|
<ATOM Name="weight" Value="1"/>
|
||||||
|
|
|
@ -430,6 +430,78 @@ bool getAIInstanceFromGroupName(string& groupName, uint32& instanceNumber)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool checkBannerPriv(const string &sheetName, CEntityId eid)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (sheetName.find("banner") == string::npos)
|
||||||
|
{
|
||||||
|
// Not a banner
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
CPlayer* player = PlayerManager.getPlayer( PlayerManager.getPlayerId(eid) );
|
||||||
|
|
||||||
|
if (player == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->havePriv(":DEV:"))
|
||||||
|
{
|
||||||
|
// Dev should be able to get all banners
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! player->havePriv(BannerPriv))
|
||||||
|
{
|
||||||
|
// Player has no banner privs
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sheetName.find("_gu") != string::npos)
|
||||||
|
{
|
||||||
|
if (player->havePriv(":G:"))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (sheetName.find("_sgu") != string::npos)
|
||||||
|
{
|
||||||
|
if (player->havePriv(":SG:"))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// VG uses SG banner for now
|
||||||
|
if (player->havePriv(":VG:"))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (sheetName.find("_vgu") != string::npos)
|
||||||
|
{
|
||||||
|
if (player->havePriv(":VG:"))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (sheetName.find("_gm") != string::npos)
|
||||||
|
{
|
||||||
|
if (player->havePriv(":GM:"))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (sheetName.find("_sgm") != string::npos)
|
||||||
|
{
|
||||||
|
if (player->havePriv(":SGM:"))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
CAdminCommand * findAdminCommand(const string & name)
|
CAdminCommand * findAdminCommand(const string & name)
|
||||||
{
|
{
|
||||||
H_AUTO(findAdminCommand);
|
H_AUTO(findAdminCommand);
|
||||||
|
@ -1381,18 +1453,12 @@ NLMISC_COMMAND (createItemInBag, "Create an item and put it in the player bag",
|
||||||
}
|
}
|
||||||
|
|
||||||
// banners are the only items in game which use privilege
|
// banners are the only items in game which use privilege
|
||||||
if( sheetName.find("banner") != string::npos )
|
// banners are the only items in game which use privilege
|
||||||
|
bool ok = checkBannerPriv(sheetName, eid);
|
||||||
|
if ( ! ok)
|
||||||
{
|
{
|
||||||
CPlayer * player = PlayerManager.getPlayer( PlayerManager.getPlayerId(eid) );
|
log.displayNL("Invalid banner priviledge");
|
||||||
// if (player != NULL && !player->havePriv(":DEV:") )
|
return false;
|
||||||
if (player != NULL && player->havePriv(BannerPriv) )
|
|
||||||
{
|
|
||||||
if( sheetName.find("_gu") != string::npos && !player->havePriv(":G:") ) return false;
|
|
||||||
if( sheetName.find("_sgu") != string::npos && !player->havePriv(":SG:") ) return false;
|
|
||||||
if( sheetName.find("_vgu") != string::npos && !player->havePriv(":VG:") ) return false;
|
|
||||||
if( sheetName.find("_gm") != string::npos && !player->havePriv(":GM:") ) return false;
|
|
||||||
if( sheetName.find("_sgm") != string::npos && !player->havePriv(":SGM:") ) return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const CStaticItem *form = CSheets::getForm (sheet);
|
const CStaticItem *form = CSheets::getForm (sheet);
|
||||||
|
@ -1472,17 +1538,11 @@ NLMISC_COMMAND (createItemInTmpInv, "Create an item and put it in the player tem
|
||||||
}
|
}
|
||||||
|
|
||||||
// banners are the only items in game which use privilege
|
// banners are the only items in game which use privilege
|
||||||
if( sheetName.find("banner") != string::npos )
|
bool ok = checkBannerPriv(sheetName, eid);
|
||||||
|
if ( ! ok)
|
||||||
{
|
{
|
||||||
CPlayer * player = PlayerManager.getPlayer( PlayerManager.getPlayerId(eid) );
|
log.displayNL("Invalid banner priviledge");
|
||||||
if (player != NULL && player->havePriv(BannerPriv) )
|
return false;
|
||||||
{
|
|
||||||
if( sheetName.find("_gu") != string::npos && !player->havePriv(":G:") ) return false;
|
|
||||||
if( sheetName.find("_sgu") != string::npos && !player->havePriv(":SG:") ) return false;
|
|
||||||
if( sheetName.find("_vgu") != string::npos && !player->havePriv(":VG:") ) return false;
|
|
||||||
if( sheetName.find("_gm") != string::npos && !player->havePriv(":GM:") ) return false;
|
|
||||||
if( sheetName.find("_sgm") != string::npos && !player->havePriv(":SGM:") ) return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const CStaticItem *form = CSheets::getForm (sheet);
|
const CStaticItem *form = CSheets::getForm (sheet);
|
||||||
|
@ -1545,17 +1605,11 @@ NLMISC_COMMAND (createItemInInv, "Create items and put them in the given invento
|
||||||
}
|
}
|
||||||
|
|
||||||
// banners are the only items in game which use privilege
|
// banners are the only items in game which use privilege
|
||||||
if( sheetName.find("banner") != string::npos )
|
bool ok = checkBannerPriv(sheetName, eid);
|
||||||
|
if ( ! ok)
|
||||||
{
|
{
|
||||||
CPlayer * player = PlayerManager.getPlayer( PlayerManager.getPlayerId(eid) );
|
log.displayNL("Invalid banner priviledge");
|
||||||
if (player != NULL && player->havePriv(BannerPriv) )
|
return false;
|
||||||
{
|
|
||||||
if( sheetName.find("_gu") != string::npos && !player->havePriv(":G:") ) return false;
|
|
||||||
if( sheetName.find("_sgu") != string::npos && !player->havePriv(":SG:") ) return false;
|
|
||||||
if( sheetName.find("_vgu") != string::npos && !player->havePriv(":VG:") ) return false;
|
|
||||||
if( sheetName.find("_gm") != string::npos && !player->havePriv(":GM:") ) return false;
|
|
||||||
if( sheetName.find("_sgm") != string::npos && !player->havePriv(":SGM:") ) return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const CStaticItem *form = CSheets::getForm (sheet);
|
const CStaticItem *form = CSheets::getForm (sheet);
|
||||||
|
@ -4629,7 +4683,7 @@ CInventoryPtr getInv(CCharacter *c, const string &inv)
|
||||||
return inventoryPtr;
|
return inventoryPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
NLMISC_COMMAND (webExecCommand, "Execute a web command", "<user id> <web_app_url> <index> <command> <hmac> [<new_check=0|1>] [<next_step=0|1>] [<send_url=0|1>]")
|
NLMISC_COMMAND (webExecCommand, "Execute a web command", "<user id> <web_app_url> <index> <command> <hmac> [<new_check=0|1|2|3>] [<next_step=0|1>] [<send_url=0|1>]")
|
||||||
{
|
{
|
||||||
|
|
||||||
if (args.size() < 5)
|
if (args.size() < 5)
|
||||||
|
@ -5516,7 +5570,7 @@ NLMISC_COMMAND (webExecCommand, "Execute a web command", "<user id> <web_app_url
|
||||||
//*************************************************
|
//*************************************************
|
||||||
//***************** set_title
|
//***************** set_title
|
||||||
//*************************************************
|
//*************************************************
|
||||||
// /a webExecCommand debug 1 set_title!toto hmac 0
|
// /a webExecCommand debug 1 set_title!#toto# hmac 0
|
||||||
else if (command_args[0] == "set_title")
|
else if (command_args[0] == "set_title")
|
||||||
{
|
{
|
||||||
if (command_args.size () != 2) return false;
|
if (command_args.size () != 2) return false;
|
||||||
|
@ -8538,7 +8592,7 @@ NLMISC_COMMAND(eventSetBotFacing, "Set the direction in which a bot faces", "<bo
|
||||||
|
|
||||||
std::vector<std::string> args2;
|
std::vector<std::string> args2;
|
||||||
|
|
||||||
if (args.size() == 3 && args[3] != "0")
|
if (args.size() == 3 && args[2] != "0")
|
||||||
{
|
{
|
||||||
// Do the whole group
|
// Do the whole group
|
||||||
args2.push_back(args[0]);
|
args2.push_back(args[0]);
|
||||||
|
|
|
@ -501,7 +501,7 @@ CCharacter::CCharacter(): CEntityBase(false),
|
||||||
_TeamId= CTEAM::InvalidTeamId;
|
_TeamId= CTEAM::InvalidTeamId;
|
||||||
|
|
||||||
///init LeagueId
|
///init LeagueId
|
||||||
_LeagueId = TChanID::Unknown;
|
_LeagueId = DYN_CHAT_INVALID_CHAN;
|
||||||
|
|
||||||
// init combat flags
|
// init combat flags
|
||||||
_CombatEventFlagTicks.resize(32);
|
_CombatEventFlagTicks.resize(32);
|
||||||
|
@ -12484,8 +12484,13 @@ bool CCharacter::autoFillExchangeView()
|
||||||
if (invItem == NULL)
|
if (invItem == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
itemsSeenCount++;
|
if (invItem->getLockedByOwner())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (invItem->getRefInventory() != NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
itemsSeenCount++;
|
||||||
// Changed to support comparisons on sheetID masks
|
// Changed to support comparisons on sheetID masks
|
||||||
if (invItem->getSheetId() == validateSteps[stepCounter].Sheet)
|
if (invItem->getSheetId() == validateSteps[stepCounter].Sheet)
|
||||||
{
|
{
|
||||||
|
|
|
@ -210,6 +210,21 @@ std::vector<TChanID> CPVPManager2::getCharacterChannels(CCharacter * user)
|
||||||
std::vector<TChanID> result;
|
std::vector<TChanID> result;
|
||||||
result.clear();
|
result.clear();
|
||||||
|
|
||||||
|
// Add lang channel, should be first.
|
||||||
|
if (!user->getLangChannel().empty()) {
|
||||||
|
TMAPExtraFactionChannel::iterator it = _ExtraFactionChannel.find(user->getLangChannel());
|
||||||
|
if (it != _ExtraFactionChannel.end())
|
||||||
|
{
|
||||||
|
result.push_back((*it).second);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
TMAPExtraFactionChannel::iterator it = _ExtraFactionChannel.find("en");
|
||||||
|
if (it != _ExtraFactionChannel.end())
|
||||||
|
{
|
||||||
|
result.push_back((*it).second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PVP_CLAN::TPVPClan faction = user->getAllegiance().first;
|
PVP_CLAN::TPVPClan faction = user->getAllegiance().first;
|
||||||
if( faction != PVP_CLAN::Neutral )
|
if( faction != PVP_CLAN::Neutral )
|
||||||
{
|
{
|
||||||
|
@ -230,21 +245,6 @@ std::vector<TChanID> CPVPManager2::getCharacterChannels(CCharacter * user)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add lang channel
|
|
||||||
if (!user->getLangChannel().empty()) {
|
|
||||||
TMAPExtraFactionChannel::iterator it = _ExtraFactionChannel.find(user->getLangChannel());
|
|
||||||
if (it != _ExtraFactionChannel.end())
|
|
||||||
{
|
|
||||||
result.push_back((*it).second);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
TMAPExtraFactionChannel::iterator it = _ExtraFactionChannel.find("en");
|
|
||||||
if (it != _ExtraFactionChannel.end())
|
|
||||||
{
|
|
||||||
result.push_back((*it).second);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
bool matis = CFameInterface::getInstance().getFameIndexed(user->getId(), 0) >= PVPFameRequired*6000;
|
bool matis = CFameInterface::getInstance().getFameIndexed(user->getId(), 0) >= PVPFameRequired*6000;
|
||||||
bool fyros = CFameInterface::getInstance().getFameIndexed(user->getId(), 1) >= PVPFameRequired*6000;
|
bool fyros = CFameInterface::getInstance().getFameIndexed(user->getId(), 1) >= PVPFameRequired*6000;
|
||||||
|
@ -1112,11 +1112,11 @@ void CPVPManager2::onIOSMirrorUp()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Community Channels
|
// Community Channels
|
||||||
createExtraFactionChannel("en");
|
createExtraFactionChannel("en", true);
|
||||||
createExtraFactionChannel("fr");
|
createExtraFactionChannel("fr", true);
|
||||||
createExtraFactionChannel("de");
|
createExtraFactionChannel("de", true);
|
||||||
createExtraFactionChannel("ru");
|
createExtraFactionChannel("ru", true);
|
||||||
createExtraFactionChannel("es");
|
createExtraFactionChannel("es", true);
|
||||||
|
|
||||||
for (uint i = PVP_CLAN::BeginClans; i <= PVP_CLAN::EndClans; i++)
|
for (uint i = PVP_CLAN::BeginClans; i <= PVP_CLAN::EndClans; i++)
|
||||||
{
|
{
|
||||||
|
@ -1161,7 +1161,7 @@ void CPVPManager2::createFactionChannel(PVP_CLAN::TPVPClan clan)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPVPManager2::createExtraFactionChannel(const std::string & channelName)
|
void CPVPManager2::createExtraFactionChannel(const std::string & channelName, bool universalChannel)
|
||||||
{
|
{
|
||||||
|
|
||||||
TMAPExtraFactionChannel::iterator it = _ExtraFactionChannel.find(channelName);
|
TMAPExtraFactionChannel::iterator it = _ExtraFactionChannel.find(channelName);
|
||||||
|
@ -1171,6 +1171,7 @@ void CPVPManager2::createExtraFactionChannel(const std::string & channelName)
|
||||||
TChanID factionChannelId = DynChatEGS.addLocalizedChan(name);
|
TChanID factionChannelId = DynChatEGS.addLocalizedChan(name);
|
||||||
// set historic size of the newly created channel
|
// set historic size of the newly created channel
|
||||||
DynChatEGS.setHistoricSize( factionChannelId, FactionChannelHistoricSize );
|
DynChatEGS.setHistoricSize( factionChannelId, FactionChannelHistoricSize );
|
||||||
|
DynChatEGS.setUniversalChannel( factionChannelId, universalChannel );
|
||||||
|
|
||||||
_ExtraFactionChannel.insert( make_pair(channelName, factionChannelId) );
|
_ExtraFactionChannel.insert( make_pair(channelName, factionChannelId) );
|
||||||
}
|
}
|
||||||
|
|
|
@ -150,7 +150,7 @@ public:
|
||||||
// create a faction channel if not already exist
|
// create a faction channel if not already exist
|
||||||
void createFactionChannel(PVP_CLAN::TPVPClan clan);
|
void createFactionChannel(PVP_CLAN::TPVPClan clan);
|
||||||
// create an extra faction channel if not already exist (for marauders, agnos, urasiens and hominits)
|
// create an extra faction channel if not already exist (for marauders, agnos, urasiens and hominits)
|
||||||
void createExtraFactionChannel(const std::string & channelName);
|
void createExtraFactionChannel(const std::string & channelName, bool universalChannel = false);
|
||||||
// create an user channel if not already exist
|
// create an user channel if not already exist
|
||||||
TChanID createUserChannel(const std::string & channelName, const std::string & pass);
|
TChanID createUserChannel(const std::string & channelName, const std::string & pass);
|
||||||
// remove a user channel
|
// remove a user channel
|
||||||
|
|
Loading…
Reference in a new issue