diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-06-04 19:27:26 +0200 | 
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-06-04 19:27:26 +0200 | 
| commit | 80a6347b7a0e8dfbe5e690504ed373f75c4f4c76 (patch) | |
| tree | 3642bbd6c7ce37bc212d1811368e3c8cbead80c6 /src/server/scripts/Commands | |
| parent | ad683a356a173f47fd9cd1f9860d5ea5d6da868c (diff) | |
Core/Reputation: Implemented "friendship reputation"
Diffstat (limited to 'src/server/scripts/Commands')
| -rw-r--r-- | src/server/scripts/Commands/cs_character.cpp | 3 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_lookup.cpp | 3 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_modify.cpp | 78 | 
3 files changed, 47 insertions, 37 deletions
diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 833eec17be0..480ea9aae00 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -648,8 +648,7 @@ public:              FactionState const& faction = itr->second;              FactionEntry const* factionEntry = sFactionStore.LookupEntry(faction.ID);              char const* factionName = factionEntry ? factionEntry->Name[loc] : "#Not found#"; -            ReputationRank rank = target->GetReputationMgr().GetRank(factionEntry); -            std::string rankName = handler->GetTrinityString(ReputationRankStrIndex[rank]); +            std::string rankName = target->GetReputationMgr().GetReputationRankName(factionEntry);              std::ostringstream ss;              if (handler->GetSession())                  ss << faction.ID << " - |cffffffff|Hfaction:" << faction.ID << "|h[" << factionName << ' ' << localeNames[loc] << "]|h|r"; diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index 8b45a06e9cc..8b74175c628 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -360,8 +360,7 @@ public:                      if (factionState) // and then target != NULL also                      { -                        uint32 index = target->GetReputationMgr().GetReputationRankStrIndex(factionEntry); -                        std::string rankName = handler->GetTrinityString(index); +                        std::string rankName = target->GetReputationMgr().GetReputationRankName(factionEntry);                          ss << ' ' << rankName << "|h|r (" << target->GetReputationMgr().GetReputation(factionEntry) << ')'; diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index b7b8a33fa31..a0eaa8aea32 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -684,18 +684,39 @@ public:          if (!factionId || !rankTxt)              return false; +        FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionId); + +        if (!factionEntry) +        { +            handler->PSendSysMessage(LANG_COMMAND_FACTION_UNKNOWN, factionId); +            handler->SetSentErrorMessage(true); +            return false; +        } + +        if (factionEntry->ReputationIndex < 0) +        { +            handler->PSendSysMessage(LANG_COMMAND_FACTION_NOREP_ERROR, factionEntry->Name[handler->GetSessionDbcLocale()], factionId); +            handler->SetSentErrorMessage(true); +            return false; +        } +          amount = atoi(rankTxt); +        // try to find rank by name          if ((amount == 0) && (rankTxt[0] != '-') && !isdigit(rankTxt[0]))          {              std::string rankStr = rankTxt;              std::wstring wrankStr;              if (!Utf8toWStr(rankStr, wrankStr))                  return false; +              wstrToLower(wrankStr); -            int r = 0; -            amount = -42000; -            for (; r < MAX_REPUTATION_RANK; ++r) +            auto rankThresholdItr = ReputationMgr::ReputationRankThresholds.begin(); +            auto end = ReputationMgr::ReputationRankThresholds.end(); + +            int32 r = 0; + +            for (; rankThresholdItr != end; ++rankThresholdItr, ++r)              {                  std::string rank = handler->GetTrinityString(ReputationRankStrIndex[r]);                  if (rank.empty()) @@ -708,45 +729,36 @@ public:                  wstrToLower(wrank);                  if (wrank.substr(0, wrankStr.size()) == wrankStr) -                { -                    char *deltaTxt = strtok(nullptr, " "); -                    if (deltaTxt) -                    { -                        int32 delta = atoi(deltaTxt); -                        if ((delta < 0) || (delta > ReputationMgr::PointsInRank[r] -1)) -                        { -                            handler->PSendSysMessage(LANG_COMMAND_FACTION_DELTA, (ReputationMgr::PointsInRank[r]-1)); -                            handler->SetSentErrorMessage(true); -                            return false; -                        } -                        amount += delta; -                    }                      break; -                } -                amount += ReputationMgr::PointsInRank[r];              } -            if (r >= MAX_REPUTATION_RANK) + +            if (rankThresholdItr == end)              {                  handler->PSendSysMessage(LANG_COMMAND_FACTION_INVPARAM, rankTxt);                  handler->SetSentErrorMessage(true);                  return false;              } -        } -        FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionId); - -        if (!factionEntry) -        { -            handler->PSendSysMessage(LANG_COMMAND_FACTION_UNKNOWN, factionId); -            handler->SetSentErrorMessage(true); -            return false; -        } +            amount = *rankThresholdItr; -        if (factionEntry->ReputationIndex < 0) -        { -            handler->PSendSysMessage(LANG_COMMAND_FACTION_NOREP_ERROR, factionEntry->Name[handler->GetSessionDbcLocale()], factionId); -            handler->SetSentErrorMessage(true); -            return false; +            char *deltaTxt = strtok(nullptr, " "); +            if (deltaTxt) +            { +                int32 toNextRank = 0; +                auto nextThresholdItr = rankThresholdItr; +                ++nextThresholdItr; +                if (nextThresholdItr != end) +                    toNextRank = *nextThresholdItr - *rankThresholdItr; + +                int32 delta = atoi(deltaTxt); +                if (delta < 0 || delta >= toNextRank) +                { +                    handler->PSendSysMessage(LANG_COMMAND_FACTION_DELTA, std::max(0, toNextRank - 1)); +                    handler->SetSentErrorMessage(true); +                    return false; +                } +                amount += delta; +            }          }          target->GetReputationMgr().SetOneFactionReputation(factionEntry, amount, false);  | 
