Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Skull system #3385

Closed
wants to merge 31 commits into from
Closed
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
b7ee6a4
skulls
rookgaard Mar 25, 2021
64c1f83
updated config
rookgaard Mar 25, 2021
65e1adb
CR changes
rookgaard Mar 26, 2021
6c4bb91
CR changes
rookgaard Mar 26, 2021
07ce63f
int comparision
rookgaard Mar 26, 2021
ee2e8a5
CR changes
rookgaard Mar 26, 2021
d545727
CR changes
rookgaard Mar 26, 2021
ef32e4a
CR changes
rookgaard Mar 26, 2021
e630b0d
more detailed shared exp messages
EPuncker Feb 12, 2022
cdc856d
Revert "more detailed shared exp messages"
EPuncker Feb 12, 2022
8fc86b8
Merge remote-tracking branch 'upstream/master'
EPuncker Feb 14, 2022
ddb384c
Merge remote-tracking branch 'upstream/master'
EPuncker Feb 15, 2022
e336f26
Merge remote-tracking branch 'upstream/master'
EPuncker Feb 18, 2022
303edf4
Merge remote-tracking branch 'upstream/master'
EPuncker Feb 19, 2022
b3f9db4
Merge remote-tracking branch 'upstream/master'
EPuncker Feb 22, 2022
c6ff3aa
Merge remote-tracking branch 'upstream/master'
EPuncker Mar 8, 2022
4c0f1b6
Merge remote-tracking branch 'upstream/master'
EPuncker Mar 11, 2022
9db33e6
Merge remote-tracking branch 'upstream/master'
EPuncker Mar 18, 2022
f50c3c7
Merge branch 'otland:master' into master
EPuncker Mar 18, 2022
2ac9e90
Merge branch 'otland:master' into master
EPuncker Apr 1, 2022
8e7e26f
Merge branch 'otland:master' into master
EPuncker Apr 20, 2022
43c1cdf
Merge branch 'otland:master' into master
EPuncker Apr 27, 2022
44c166c
Merge branch 'master' into pr/3385
EPuncker May 8, 2022
55d2baa
Update player.cpp
EPuncker May 8, 2022
f42875b
clang
EPuncker May 8, 2022
f8f9b43
Use fmt format instead of ostringstream
ramon-bernardo Jul 25, 2022
46cef05
Code improvement
ramon-bernardo Nov 2, 2022
7334865
Code improvement
ramon-bernardo Nov 2, 2022
a3080e3
Code format
ramon-bernardo Nov 2, 2022
48bcf35
Last commit
ramon-bernardo Nov 2, 2022
85f383c
Remove Orange Skull check
ramon-bernardo Nov 3, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
11 changes: 8 additions & 3 deletions config.lua.dist
Expand Up @@ -3,14 +3,19 @@
worldType = "pvp"
hotkeyAimbotEnabled = true
protectionLevel = 1
killsToRedSkull = 3
killsToBlackSkull = 6
redDailyLimit = 3
redWeeklyLimit = 5
redMonthlyLimit = 10
redSkullLength = 30 * 24 * 60 * 60
blackDailyLimit = 6
blackWeeklyLimit = 10
blackMonthlyLimit = 20
blackSkullLength = 45 * 24 * 60 * 60
pzLocked = 60000
removeChargesFromRunes = true
removeChargesFromPotions = true
removeWeaponAmmunition = true
removeWeaponCharges = true
timeToDecreaseFrags = 24 * 60 * 60
whiteSkullTime = 15 * 60
stairJumpExhaustion = 2000
experienceByKillingPlayers = false
Expand Down
11 changes: 8 additions & 3 deletions src/configmanager.cpp
Expand Up @@ -265,16 +265,21 @@ bool ConfigManager::load()
integer[RATE_MAGIC] = getGlobalNumber(L, "rateMagic", 3);
integer[RATE_SPAWN] = getGlobalNumber(L, "rateSpawn", 1);
integer[HOUSE_PRICE] = getGlobalNumber(L, "housePriceEachSQM", 1000);
integer[KILLS_TO_RED] = getGlobalNumber(L, "killsToRedSkull", 3);
integer[KILLS_TO_BLACK] = getGlobalNumber(L, "killsToBlackSkull", 6);
integer[RED_DAILY_LIMIT] = getGlobalNumber(L, "redDailyLimit", 3);
integer[RED_WEEKLY_LIMIT] = getGlobalNumber(L, "redWeeklyLimit", 5);
integer[RED_MONTHLY_LIMIT] = getGlobalNumber(L, "redMonthlyLimit", 10);
integer[RED_SKULL_LENGTH] = getGlobalNumber(L, "redSkullLength", 30 * 24 * 60 * 60);
integer[BLACK_DAILY_LIMIT] = getGlobalNumber(L, "blackDailyLimit", 6);
integer[BLACK_WEEKLY_LIMIT] = getGlobalNumber(L, "blackWeeklyLimit", 10);
integer[BLACK_MONTHLY_LIMIT] = getGlobalNumber(L, "blackMonthlyLimit", 20);
integer[BLACK_SKULL_LENGTH] = getGlobalNumber(L, "blackSkullLength", 45 * 24 * 60 * 60);
integer[ACTIONS_DELAY_INTERVAL] = getGlobalNumber(L, "timeBetweenActions", 200);
integer[EX_ACTIONS_DELAY_INTERVAL] = getGlobalNumber(L, "timeBetweenExActions", 1000);
integer[MAX_MESSAGEBUFFER] = getGlobalNumber(L, "maxMessageBuffer", 4);
integer[KICK_AFTER_MINUTES] = getGlobalNumber(L, "kickIdlePlayerAfterMinutes", 15);
integer[PROTECTION_LEVEL] = getGlobalNumber(L, "protectionLevel", 1);
integer[DEATH_LOSE_PERCENT] = getGlobalNumber(L, "deathLosePercent", -1);
integer[STATUSQUERY_TIMEOUT] = getGlobalNumber(L, "statusTimeout", 5000);
integer[FRAG_TIME] = getGlobalNumber(L, "timeToDecreaseFrags", 24 * 60 * 60);
integer[WHITE_SKULL_TIME] = getGlobalNumber(L, "whiteSkullTime", 15 * 60);
integer[STAIRHOP_DELAY] = getGlobalNumber(L, "stairJumpExhaustion", 2000);
integer[EXP_FROM_PLAYERS_LEVEL_RANGE] = getGlobalNumber(L, "expFromPlayersLevelRange", 75);
Expand Down
11 changes: 8 additions & 3 deletions src/configmanager.h
Expand Up @@ -106,16 +106,21 @@ class ConfigManager
RATE_MAGIC,
RATE_SPAWN,
HOUSE_PRICE,
KILLS_TO_RED,
KILLS_TO_BLACK,
RED_DAILY_LIMIT,
RED_WEEKLY_LIMIT,
RED_MONTHLY_LIMIT,
RED_SKULL_LENGTH,
BLACK_DAILY_LIMIT,
BLACK_WEEKLY_LIMIT,
BLACK_MONTHLY_LIMIT,
BLACK_SKULL_LENGTH,
MAX_MESSAGEBUFFER,
ACTIONS_DELAY_INTERVAL,
EX_ACTIONS_DELAY_INTERVAL,
KICK_AFTER_MINUTES,
PROTECTION_LEVEL,
DEATH_LOSE_PERCENT,
STATUSQUERY_TIMEOUT,
FRAG_TIME,
WHITE_SKULL_TIME,
GAME_PORT,
LOGIN_PORT,
Expand Down
14 changes: 14 additions & 0 deletions src/iologindata.cpp
Expand Up @@ -1073,3 +1073,17 @@ void IOLoginData::updatePremiumTime(uint32_t accountId, time_t endTime)
query << "UPDATE `accounts` SET `premium_ends_at` = " << endTime << " WHERE `id` = " << accountId;
Database::getInstance().executeQuery(query.str());
}

void IOLoginData::getUnjustifiedDates(std::string name, std::vector<time_t>& dateList, time_t _time)
rookgaard marked this conversation as resolved.
Show resolved Hide resolved
{
Database& db = Database::getInstance();
std::ostringstream query;
query << "SELECT `time` FROM `player_deaths` WHERE `killed_by` = " << db.escapeString(name) << " AND `unjustified` = 1 AND `time` >= " << (_time - (30 * 86400));
DBResult_ptr result = db.storeQuery(query.str());

if (result) {
do {
dateList.push_back((time_t)result->getNumber<uint32_t>("time"));
rookgaard marked this conversation as resolved.
Show resolved Hide resolved
} while (result->next());
}
}
1 change: 1 addition & 0 deletions src/iologindata.h
Expand Up @@ -58,6 +58,7 @@ class IOLoginData
static void removeVIPEntry(uint32_t accountId, uint32_t guid);

static void updatePremiumTime(uint32_t accountId, time_t endTime);
static void getUnjustifiedDates(std::string name, std::vector<time_t>& dateList, time_t _time);

private:
using ItemMap = std::map<uint32_t, std::pair<Item*, uint32_t>>;
Expand Down
11 changes: 8 additions & 3 deletions src/luascript.cpp
Expand Up @@ -1968,16 +1968,21 @@ void LuaScriptInterface::registerFunctions()
registerEnumIn("configKeys", ConfigManager::RATE_MAGIC)
registerEnumIn("configKeys", ConfigManager::RATE_SPAWN)
registerEnumIn("configKeys", ConfigManager::HOUSE_PRICE)
registerEnumIn("configKeys", ConfigManager::KILLS_TO_RED)
registerEnumIn("configKeys", ConfigManager::KILLS_TO_BLACK)
registerEnumIn("configKeys", ConfigManager::RED_DAILY_LIMIT)
registerEnumIn("configKeys", ConfigManager::RED_WEEKLY_LIMIT)
registerEnumIn("configKeys", ConfigManager::RED_MONTHLY_LIMIT)
registerEnumIn("configKeys", ConfigManager::RED_SKULL_LENGTH)
registerEnumIn("configKeys", ConfigManager::BLACK_DAILY_LIMIT)
registerEnumIn("configKeys", ConfigManager::BLACK_WEEKLY_LIMIT)
registerEnumIn("configKeys", ConfigManager::BLACK_MONTHLY_LIMIT)
registerEnumIn("configKeys", ConfigManager::BLACK_SKULL_LENGTH)
registerEnumIn("configKeys", ConfigManager::MAX_MESSAGEBUFFER)
registerEnumIn("configKeys", ConfigManager::ACTIONS_DELAY_INTERVAL)
registerEnumIn("configKeys", ConfigManager::EX_ACTIONS_DELAY_INTERVAL)
registerEnumIn("configKeys", ConfigManager::KICK_AFTER_MINUTES)
registerEnumIn("configKeys", ConfigManager::PROTECTION_LEVEL)
registerEnumIn("configKeys", ConfigManager::DEATH_LOSE_PERCENT)
registerEnumIn("configKeys", ConfigManager::STATUSQUERY_TIMEOUT)
registerEnumIn("configKeys", ConfigManager::FRAG_TIME)
registerEnumIn("configKeys", ConfigManager::WHITE_SKULL_TIME)
registerEnumIn("configKeys", ConfigManager::GAME_PORT)
registerEnumIn("configKeys", ConfigManager::LOGIN_PORT)
Expand Down
45 changes: 40 additions & 5 deletions src/player.cpp
Expand Up @@ -3865,14 +3865,49 @@ void Player::addUnjustifiedDead(const Player* attacked)

sendTextMessage(MESSAGE_EVENT_ADVANCE, "Warning! The murder of " + attacked->getName() + " was not justified.");

skullTicks += g_config.getNumber(ConfigManager::FRAG_TIME);
time_t now = time(NULL), today = (now - 84600), week = (now - (7 * 84600));
rookgaard marked this conversation as resolved.
Show resolved Hide resolved
std::vector<time_t> killsList;
killsList.push_back(now); // add current kill to list
IOLoginData::getUnjustifiedDates(name, killsList, now); // add kills from last month to list
uint32_t
rookgaard marked this conversation as resolved.
Show resolved Hide resolved
todayKills = 0,
weekKills = 0,
monthKills = killsList.size();

if (getSkull() != SKULL_BLACK) {
if (g_config.getNumber(ConfigManager::KILLS_TO_BLACK) != 0 && skullTicks > (g_config.getNumber(ConfigManager::KILLS_TO_BLACK) - 1) * static_cast<int64_t>(g_config.getNumber(ConfigManager::FRAG_TIME))) {
setSkull(SKULL_BLACK);
} else if (getSkull() != SKULL_RED && g_config.getNumber(ConfigManager::KILLS_TO_RED) != 0 && skullTicks > (g_config.getNumber(ConfigManager::KILLS_TO_RED) - 1) * static_cast<int64_t>(g_config.getNumber(ConfigManager::FRAG_TIME))) {
for (std::vector<time_t>::iterator it = killsList.begin(); it != killsList.end(); ++it) {
rookgaard marked this conversation as resolved.
Show resolved Hide resolved
if ((*it) > week) {
weekKills++;
rookgaard marked this conversation as resolved.
Show resolved Hide resolved
}

if ((*it) > today) {
todayKills++;
rookgaard marked this conversation as resolved.
Show resolved Hide resolved
}
}

if (getSkull() < SKULL_RED) {
rookgaard marked this conversation as resolved.
Show resolved Hide resolved
uint32_t
rookgaard marked this conversation as resolved.
Show resolved Hide resolved
redDailyLimit = g_config.getNumber(ConfigManager::RED_DAILY_LIMIT),
redWeekLimit = g_config.getNumber(ConfigManager::RED_WEEKLY_LIMIT),
redMonthLimit = g_config.getNumber(ConfigManager::RED_MONTHLY_LIMIT);

if (todayKills >= redDailyLimit || weekKills >= redWeekLimit || monthKills >= redMonthLimit) {
setSkull(SKULL_RED);
skullTicks = g_config.getNumber(ConfigManager::RED_SKULL_LENGTH);
}
} else if (getSkull() == SKULL_RED) {
uint32_t
rookgaard marked this conversation as resolved.
Show resolved Hide resolved
blackDailyLimit = g_config.getNumber(ConfigManager::BLACK_DAILY_LIMIT),
blackWeekLimit = g_config.getNumber(ConfigManager::BLACK_WEEKLY_LIMIT),
blackMonthLimit = g_config.getNumber(ConfigManager::BLACK_MONTHLY_LIMIT);

if (todayKills >= blackDailyLimit || weekKills >= blackWeekLimit || monthKills >= blackMonthLimit) {
setSkull(SKULL_BLACK);
skullTicks = g_config.getNumber(ConfigManager::BLACK_SKULL_LENGTH);
} else {
skullTicks = g_config.getNumber(ConfigManager::RED_SKULL_LENGTH);
}
} else if (getSkull() == SKULL_BLACK) {
skullTicks = g_config.getNumber(ConfigManager::BLACK_SKULL_LENGTH);
}
}

Expand Down