Merge branch 'ark'

feature/prepare-cross-merge
Ulukyn 5 years ago committed by kaetemi
parent 653a8fb472
commit ae685b3d68
No known key found for this signature in database
GPG Key ID: 9873C4D40BB479BC

@ -1708,7 +1708,9 @@ void addParam(const std::string &paramStr, std::vector<TBrickParam::IIdPtr> &Par
// $*-s std::string Attribute // attribute name // $*-s std::string Attribute // attribute name
// $*-s std::string Value // attribute value // $*-s std::string Value // attribute value
// $*-i uint32 Charge // initial charge of sapload // $*-i uint32 Charge // initial charge of sapload
// $*-i uint32 Modifier // onus on attribute // $*-i uint32 Modifier // Bonus on attribute
// $*-i uint32 Faction // Required faction
// $*-i uint32 Fame // Required fame in faction (if fame >= 30, require the rite too)
Params.push_back(new CSBrickParamJewelAttrs(tail)); Params.push_back(new CSBrickParamJewelAttrs(tail));
break; break;
} }

@ -5188,13 +5188,16 @@ struct CSBrickParamJewelAttrs : public TBrickParam::IId
uint32 Modifier; uint32 Modifier;
// required Faction // required Faction
std::string RequiredFaction; std::string RequiredFaction;
// required Fame
sint32 RequiredFame;
CSBrickParamJewelAttrs(): CSBrickParamJewelAttrs():
Attribute(), Attribute(),
Value(), Value(),
Charge(), Charge(),
Modifier(), Modifier(),
RequiredFaction() RequiredFaction(),
RequiredFame()
{ {
_Id = TBrickParam::JEWEL_ATTRS; _Id = TBrickParam::JEWEL_ATTRS;
@ -5224,6 +5227,11 @@ struct CSBrickParamJewelAttrs : public TBrickParam::IId
else else
RequiredFaction = ""; RequiredFaction = "";
if (!RequiredFaction.empty() && args.size() > 5)
NLMISC::fromString(args[5], RequiredFame);
else
RequiredFame = -200;
return *this; return *this;
} }
}; };

@ -1015,7 +1015,7 @@ NLMISC_COMMAND(deleteInventoryItems, "Delete items from a characters inventory",
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
NLMISC_COMMAND(enchantEquipedItem, "enchantEquipedItem", "<uid> <slotname> <sheet1>,[<sheet2> ...]") NLMISC_COMMAND(enchantEquipedItem, "enchantEquipedItem", "<uid> <slotname> <sheet1>,[<sheet2> ...] [<maxSpaLoad>]")
{ {
if (args.size () < 3) if (args.size () < 3)
{ {
@ -1027,13 +1027,13 @@ NLMISC_COMMAND(enchantEquipedItem, "enchantEquipedItem", "<uid> <slotname> <shee
string selected_slot = args[1]; string selected_slot = args[1];
std::vector<string> sheet_names;
NLMISC::splitString(args[2], ",", sheet_names);
std::vector<CSheetId> sheets; std::vector<CSheetId> sheets;
for (uint32 i=0; i<sheet_names.size(); i++) if (args[2] != "*")
{ {
sheets.push_back(CSheetId(sheet_names[i])); std::vector<string> sheet_names;
NLMISC::splitString(args[2], ",", sheet_names);
for (uint32 i=0; i<sheet_names.size(); i++)
sheets.push_back(CSheetId(sheet_names[i]));
} }
CGameItemPtr itemPtr = c->getItem(INVENTORIES::equipment, SLOT_EQUIPMENT::stringToSlotEquipment(selected_slot)); CGameItemPtr itemPtr = c->getItem(INVENTORIES::equipment, SLOT_EQUIPMENT::stringToSlotEquipment(selected_slot));
@ -1041,6 +1041,14 @@ NLMISC_COMMAND(enchantEquipedItem, "enchantEquipedItem", "<uid> <slotname> <shee
{ {
itemPtr->applyEnchantment(sheets); itemPtr->applyEnchantment(sheets);
c->updateJewelsTags(false); c->updateJewelsTags(false);
if (args.size() > 3)
{
float maxSapLoad;
fromString(args[3], maxSapLoad);
itemPtr->setMaxSapLoad(maxSapLoad);
}
log.displayNL("OK"); log.displayNL("OK");
return true; return true;
} }
@ -1048,7 +1056,72 @@ NLMISC_COMMAND(enchantEquipedItem, "enchantEquipedItem", "<uid> <slotname> <shee
return true; return true;
} }
//----------------------------------------------------------------------------
NLMISC_COMMAND(getEnchantmentInEquipedItem, "getEnchantmentInEquipedItem", "<uid> <slotname>")
{
if (args.size () < 2)
{
log.displayNL("ERR: Invalid number of parameters. Parameters: <uid> <slotname>");
return false;
}
GET_ACTIVE_CHARACTER
string selected_slot = args[1];
CGameItemPtr itemPtr = c->getItem(INVENTORIES::equipment, SLOT_EQUIPMENT::stringToSlotEquipment(selected_slot));
if (itemPtr != NULL)
{
const std::vector<CSheetId> &sheets = itemPtr->getEnchantment();
for (uint32 i=0; i<sheets.size(); i++)
log.displayNL("%s", sheets[i].toString().c_str());
}
return true;
}
//----------------------------------------------------------------------------
NLMISC_COMMAND(sapLoadInEquipedItem, "reloadSapLoadInEquipedItem", "<uid> <slotname> [<value>]")
{
if (args.size () < 2)
{
log.displayNL("ERR: invalid arg count");
return false;
}
GET_ACTIVE_CHARACTER
string selected_slot = args[1];
CGameItemPtr itemPtr = c->getItem(INVENTORIES::equipment, SLOT_EQUIPMENT::stringToSlotEquipment(selected_slot));
if (itemPtr != NULL)
{
if (args.size() >= 3)
{
string quant = args[2];
uint32 quantity;
if (quant[0] == '-')
{
if (quant.size() > 1)
{
fromString(quant.substr(1), quantity);
itemPtr->consumeSapLoad(quantity);
}
}
else
{
fromString(quant, quantity);
itemPtr->reloadSapLoad(quantity);
}
}
uint32 sapLoad = itemPtr->sapLoad();
uint32 max = itemPtr->maxSapLoad();
log.displayNL("%u / %u", sapLoad, max);
}
return true;
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -4173,15 +4246,15 @@ NLMISC_COMMAND(closeDynChat, "close DynChat", "<uid> <process missions?>")
return true; return true;
} }
NLMISC_COMMAND(manageBuilding, "Manage a building", "<uid> <action>") NLMISC_COMMAND(manageBuilding, "Manage a building", "<uid> <action> <value>")
{ {
if (args.size() < 2) return false; if (args.size() < 3) return false;
GET_ACTIVE_CHARACTER GET_ACTIVE_CHARACTER
string action = args[1]; // trigger_in, trigger_out, add_guild_room, add_player_room string action = args[1]; // trigger_in, trigger_out, add_guild_room, add_player_room
if (action == "trigger_in" && args.size() == 3) if (action == "trigger_in")
{ {
uint32 liftId; uint32 liftId;
NLMISC::fromString(args[2], liftId); NLMISC::fromString(args[2], liftId);
@ -4192,7 +4265,7 @@ NLMISC_COMMAND(manageBuilding, "Manage a building", "<uid> <action>")
CBuildingManager::getInstance()->removeTriggerRequest(c->getEntityRowId()); CBuildingManager::getInstance()->removeTriggerRequest(c->getEntityRowId());
} }
else if (action == "add_guild_room" && args.size() == 3) else if (action == "add_guild_room")
{ {
CBuildingPhysicalGuild * building = dynamic_cast<CBuildingPhysicalGuild *>(CBuildingManager::getInstance()->getBuildingPhysicalsByName(args[2])); CBuildingPhysicalGuild * building = dynamic_cast<CBuildingPhysicalGuild *>(CBuildingManager::getInstance()->getBuildingPhysicalsByName(args[2]));
if (building) if (building)
@ -4203,7 +4276,7 @@ NLMISC_COMMAND(manageBuilding, "Manage a building", "<uid> <action>")
return true; return true;
} }
} }
else if (action == "add_player_room" && args.size () == 3) else if (action == "add_player_room")
{ {
CBuildingPhysicalPlayer * building = dynamic_cast<CBuildingPhysicalPlayer *>(CBuildingManager::getInstance()->getBuildingPhysicalsByName(args[2])); CBuildingPhysicalPlayer * building = dynamic_cast<CBuildingPhysicalPlayer *>(CBuildingManager::getInstance()->getBuildingPhysicalsByName(args[2]));
if (building) if (building)
@ -4214,7 +4287,7 @@ NLMISC_COMMAND(manageBuilding, "Manage a building", "<uid> <action>")
return true; return true;
} }
} }
else if (action == "buy_guild_room" && args.size () == 3) else if (action == "buy_guild_room")
{ {
CBuildingPhysicalGuild * building = dynamic_cast<CBuildingPhysicalGuild *>(CBuildingManager::getInstance()->getBuildingPhysicalsByName(args[2])); CBuildingPhysicalGuild * building = dynamic_cast<CBuildingPhysicalGuild *>(CBuildingManager::getInstance()->getBuildingPhysicalsByName(args[2]));
if (building) if (building)
@ -4229,7 +4302,7 @@ NLMISC_COMMAND(manageBuilding, "Manage a building", "<uid> <action>")
} }
} }
} }
else if (action == "buy_player_room" && args.size () == 3) else if (action == "buy_player_room")
{ {
CBuildingPhysicalPlayer * building = dynamic_cast<CBuildingPhysicalPlayer *>(CBuildingManager::getInstance()->getBuildingPhysicalsByName(args[2])); CBuildingPhysicalPlayer * building = dynamic_cast<CBuildingPhysicalPlayer *>(CBuildingManager::getInstance()->getBuildingPhysicalsByName(args[2]));
if ( building ) if ( building )
@ -4240,7 +4313,7 @@ NLMISC_COMMAND(manageBuilding, "Manage a building", "<uid> <action>")
return true; return true;
} }
} }
else if (action == "set_player_room" && args.size () == 3) else if (action == "set_player_room")
{ {
/* CBuildingPhysicalPlayer * building = dynamic_cast<CBuildingPhysicalPlayer *>(CBuildingManager::getInstance()->getBuildingPhysicalsByName(args[2])); /* CBuildingPhysicalPlayer * building = dynamic_cast<CBuildingPhysicalPlayer *>(CBuildingManager::getInstance()->getBuildingPhysicalsByName(args[2]));
if ( building ) if ( building )
@ -4254,7 +4327,7 @@ NLMISC_COMMAND(manageBuilding, "Manage a building", "<uid> <action>")
return true; return true;
}*/ }*/
} }
else if (action == "get_access_room" && args.size () == 3) else if (action == "get_access_room")
{ {
CCharacter *owner = PlayerManager.getCharacterByName(CShardNames::getInstance().makeFullNameFromRelative(c->getHomeMainlandSessionId(), args[2])); CCharacter *owner = PlayerManager.getCharacterByName(CShardNames::getInstance().makeFullNameFromRelative(c->getHomeMainlandSessionId(), args[2]));

@ -11674,30 +11674,29 @@ void CCharacter::setNewTitle(const string &title)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void CCharacter::setTagPvPA(const string &tag) void CCharacter::setTagA(const string &tag)
{ {
_TagPvPA = tag; _TagA = tag;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void CCharacter::setTagPvPB(const string &tag) void CCharacter::setTagB(const string &tag)
{ {
_TagPvPB = tag; _TagB = tag;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void CCharacter::setTagA(const string &tag) void CCharacter::setTagPvPA(const string &tag)
{ {
_TagA = tag; _TagPvPA = tag;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void CCharacter::setTagB(const string &tag) void CCharacter::setTagPvPB(const string &tag)
{ {
_TagB = tag; _TagPvPB = tag;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void CCharacter::setDontTranslate(const string &langs) void CCharacter::setDontTranslate(const string &langs)
{ {
@ -11731,8 +11730,14 @@ CSBrickParamJewelAttrs *CCharacter::getJewelAttrs(const string &attribute, SLOT_
CSBrickParamJewelAttrs *sbrickParam = (CSBrickParamJewelAttrs*)param; CSBrickParamJewelAttrs *sbrickParam = (CSBrickParamJewelAttrs*)param;
if (param->id() == TBrickParam::JEWEL_ATTRS && sbrickParam->Attribute == attribute) if (param->id() == TBrickParam::JEWEL_ATTRS && sbrickParam->Attribute == attribute)
{ {
if (checkRequiredFaction(sbrickParam->RequiredFaction)) { // Check required fame (if no required faction, check are ok)
return sbrickParam; if (checkRequiredFame(sbrickParam->RequiredFaction, sbrickParam->RequiredFame))
{
// Require a faction/nation/org only for fame up to 30
if (sbrickParam->RequiredFame < 30 || checkRequiredFaction(sbrickParam->RequiredFaction))
{
return sbrickParam;
}
} }
} }
} }
@ -11758,8 +11763,14 @@ CSBrickParamJewelAttrs *CCharacter::getJewelAttrs(const string &attribute, SLOT_
CSBrickParamJewelAttrs *sbrickParam = (CSBrickParamJewelAttrs*)param; CSBrickParamJewelAttrs *sbrickParam = (CSBrickParamJewelAttrs*)param;
if (param->id() == TBrickParam::JEWEL_ATTRS && sbrickParam->Attribute == attribute) if (param->id() == TBrickParam::JEWEL_ATTRS && sbrickParam->Attribute == attribute)
{ {
if (checkRequiredFaction(sbrickParam->RequiredFaction)) { // Check required fame (if no required faction, check are ok)
return sbrickParam; if (checkRequiredFame(sbrickParam->RequiredFaction, sbrickParam->RequiredFame))
{
// Require a faction/nation/org only for fame up to 30
if (sbrickParam->RequiredFame < 30 || checkRequiredFaction(sbrickParam->RequiredFaction))
{
return sbrickParam;
}
} }
} }
} }
@ -15675,8 +15686,23 @@ void CCharacter::sendUrl(const string &url)
string targetInfos = getTargetInfos(); string targetInfos = getTargetInfos();
string serverInfos = getServerInfos(getState().X / 1000., getState().Y / 1000.); string serverInfos = getServerInfos(getState().X / 1000., getState().Y / 1000.);
strFindReplace(targetInfos, " ", "%20"); strFindReplace(targetInfos, " ", "%20");
string final_url;
if (url.find("$(") != string::npos )
{
final_url = url;
strFindReplace(final_url, "$(pos)", playerPos);
strFindReplace(final_url, "$(target)", targetInfos);
strFindReplace(final_url, "$(server)", serverInfos);
strFindReplace(final_url, "$(hands)", getEquipementInfos(INVENTORIES::handling));
strFindReplace(final_url, "$(equiped)", getEquipementInfos(INVENTORIES::equipment));
final_url += toString("&urlidx=%d", getUrlIndex());
}
else
{
final_url = url + toString("&urlidx=%d", getUrlIndex())+"&player_pos="+playerPos+"&target_infos="+targetInfos+"&server_infos="+serverInfos;
}
string final_url = url + toString("&urlidx=%d", getUrlIndex())+"&player_pos="+playerPos+"&target_infos="+targetInfos+"&server_infos="+serverInfos;
control = "&hmac="+ getHMacSHA1((uint8*)&final_url[0], (uint32)final_url.size(), (uint8*)&salt[0], (uint32)salt.size()).toString(); control = "&hmac="+ getHMacSHA1((uint8*)&final_url[0], (uint32)final_url.size(), (uint8*)&salt[0], (uint32)salt.size()).toString();
uint32 userId = PlayerManager.getPlayerId(getId()); uint32 userId = PlayerManager.getPlayerId(getId());
@ -21223,31 +21249,41 @@ void CCharacter::updateJewelsTags(bool remove, bool update)
string tagA = getTagA(); string tagA = getTagA();
string tagB = getTagB(); string tagB = getTagB();
string tagPvPA = getTagPvPA();
string tagPvPB = getTagPvPB();
setTagA(""); setTagA("");
setTagB(""); setTagB("");
setTagPvPA("");
setTagPvPB("");
if (remove) if (remove)
return; return;
CSBrickParamJewelAttrs *sbrickParam = getJewelAttrs("tag", SLOT_EQUIPMENT::HEADDRESS); CSBrickParamJewelAttrs *sbrickParam = getJewelAttrs("tag", SLOT_EQUIPMENT::HEADDRESS);
if (sbrickParam) if (sbrickParam)
{
setTagA(sbrickParam->Value); setTagA(sbrickParam->Value);
}
sbrickParam = getJewelAttrs("tag", SLOT_EQUIPMENT::NECKLACE); sbrickParam = getJewelAttrs("tag", SLOT_EQUIPMENT::NECKLACE);
if (sbrickParam) if (sbrickParam)
{
setTagB(sbrickParam->Value); setTagB(sbrickParam->Value);
}
sbrickParam = getJewelAttrs("tag", SLOT_EQUIPMENT::EARL);
if (sbrickParam)
setTagPvPA(sbrickParam->Value);
sbrickParam = getJewelAttrs("tag", SLOT_EQUIPMENT::EARR);
if (sbrickParam)
setTagPvPB(sbrickParam->Value);
if (!update) if (!update)
return; return;
if (getTagA() != tagA || getTagB() != tagB) { if (getTagA() != tagA || getTagB() != tagB || getTagPvPA() != tagPvPA || getTagPvPB() != tagPvPB)
{
registerName(); registerName();
} }
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------

@ -2592,6 +2592,7 @@ public:
std::string getFullTitle() const; std::string getFullTitle() const;
bool checkRequiredFaction(std::string faction) const; bool checkRequiredFaction(std::string faction) const;
bool checkRequiredFame(std::string faction, sint32 fame) const;
std::string getTagA() const; std::string getTagA() const;
void setTagA(const std::string &tag); void setTagA(const std::string &tag);

@ -1040,6 +1040,21 @@ inline bool CCharacter::checkRequiredFaction(std::string faction) const
(faction == "zorai" && allegeance.second == PVP_CLAN::Zorai && getOrganization() == 0)); (faction == "zorai" && allegeance.second == PVP_CLAN::Zorai && getOrganization() == 0));
} }
inline bool CCharacter::checkRequiredFame(std::string faction, sint32 fame) const
{
if (faction == "")
return true;
uint32 fameIdx = PVP_CLAN::getFactionIndex(PVP_CLAN::fromString(faction));
sint32 playerFame = CFameInterface::getInstance().getFameIndexed(_Id, fameIdx);
if (fame == NO_FAME)
return false;
return playerFame >= (fame * 6000);
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
inline uint32 CCharacter::getOrganization() const inline uint32 CCharacter::getOrganization() const

Loading…
Cancel
Save