Агрессивно по-моему ты реагируешь. Тебе всего лишь предложили ясно излагать свои мысли, потому что твою абракадабру никто не понял (хотя тебе 23-24 года, по крайней мере так указано). И тебе сказали, что подобный сервер уже есть, но теперь ты почему-то не понял. И начинаешь быковать.
Мой тебе совет, почитай книжки, а то ты деградируешь. Я дал почитать твою писанину дочери (ей 14), и даже она подумала, что либо тебе меньше 10 лет, либо ты просто отстаешь в развитии.
Да то, что ты прямолинейный я в курсе, не про тебя речь.
А то,что он разбанивает "читеров" смысл имеется, в большинстве разбанов я с ним солидарен.
Есть правила на сервере - их нужно соблюдать, это я про муты.
"Начали за здравие, закончили за упокой". 80% тем на бцм заканчиваются тем, что админы плохие, випы хуже админов. А если вип и админ, то вообще конченый человек. Зато хорошо оправдывать свою криворукость: "это не я плохо играю, это випы виноваты". Те кто умеют играть, и без вип-админ занимают первые места в рейтинге и в стате в первой 10 сидят. А не ноют на форуме.
Кому не интересен анализ кода - в самый низ, пожалуйста)
stock addPoints(client, Float:initialPoints) {
//Функция складывания очков в пределах раунда для статы/рекордов
new Float:points = initialPoints;
//Очки(points) инициализируется базовыми очками за какое-либо действие
points = multiplyByDifficulty(points);
//Очки умножаются на множитель сложности игры
recordsPointsEarned[client] += points;
//Здесь очки копятся для рекордов в течении раунда
//(с учётом сложности, но без остальных множителей)
if (isMultiplyingAction(lastAction[client])) {
if (cachedPoints[client] > 0.0) {
//Если очки игрока в стате > 0, то...
new bool:pointsPlus = points > 0.0;
//проверяем, штрафом или прибавкой является текущее действие
// Уменьшаем пенальти в любом случае
if (!pointsPlus) points = points / 1.5;
//Если штраф, то уменьшаем его в 1.5 раза
// Помогаем нубам набрать базовые очки
if (cachedPoints[client] < 20000.0) {
//Если очки игрока меньше 20000...
if (pointsPlus) {
//и если это прибавка, то
new Float:completedPercent = (cachedPoints[client] / 20000.0) * 100.0;
//Вычисляем в % очки игрока по отношению к планке 20000
new Float:incompletedPercent = 100.0 - completedPercent;
//Вычисляем сколько % вам осталось до 20000
new Float:multiplier = (2.5 * incompletedPercent) / 100.0;
/*Вычисляем множитель помощи нубам, и вот здесь кроется подводный камень,
я раньше точно так же упиралась в потолок, только он был 5000,
и всё не могла понять, в чём же дело, т.к. не видела кода.
Сейчас вот поняла. Я так понимаю, задумывалось умножать очки нубам
в 2.5 раза на старте, и постепенно уменьшать множитель до 1
при приближении к 20000. Но по этой формуле получается,
что с приближением к 20000 множитель уменьшается не до 1, а до 0.
Допустим у вас 19500 очков, тогда получаемые очки будут умножаться
всего лишь на 0.0625, а штрафы будут снимать намного больше.
Поэтому чтобы перепрыгнуть планку 20000, надо будет пройти раунд
(скорее всего не один) вообще не падая и не получая повреждений,
и при этом набирать бешенное кол-во очков (по базе),
я думаю в формулу выше надо добавить единицу:
new Float:multiplier = 1 + (slopeModifier * incompletedPercent) / 100.0;
Тогда по приближению к 20000 множитель очков будет снижаться
от стартового значения до 1, а крутизна спада будет задаваться
как slopeModifier + 1, т.е. если на старте надо множить очки на 2.5,
то slopeModifier будет 1.5, если надо на 10, то slopeModifier будет 9.
В результате очки будут правильно набираться и до и после 20000,
и никто больше не будет вопить, что не могут перепрыгнуть 20000*/
points = points * multiplier;
//Очки умножаются на множитель помощи нубам
}
}
// Затрудняем рост\падение очков по мере их количества
else {
new Float:excessMultiplier = cachedPoints[client] / 20000.0;
points = points / excessMultiplier;
/*Если очки 20000 и более, то множитель начинает падать уже от 1 до 0,
но это будет очень долгий процесс. Например, имея в 5 раз больше очков
относительно планки 20000, вы будете получать соответственно в 5 раз меньше*/
}
}
}
statsPoints[client] += points;
//Накопление очков, которые пойдут в стату, с учётом всех множителей
cachedPoints[client] += points;
if (cachedPoints[client] < 0.0) {
cachedPoints[client] = 0.0;
statsPoints[client] = 0.0;
//Эти строки, так понимаю, чтобы игрок не ушёл в минус в стате,
//т.е. меньше 0 очков в стате у вас не может быть
}
lastPointsChange[client] = points;
//Хранит значение последнего изменения очков в ту или иную сторону
if (points > 0.0) statsRank[client] += points;
//statsRank учитывает только прибавки, но для чего она
//и в какой раздел статы пишет значения - не догадываюсь
recordsPointsIncome[client] += points;
//Здесь очки тоже копятся для рекордов, но с учётом всех множителей. Хмм, зачем?)
//LogMessage("> %N (%0.1f) got %0.2f for event %d", client, cachedPoints[client], points, lastAction[client]);
//Ну а это просто лог произведенных операций, отключенный комментарием)
}Итого:Единственный косячок я нашла в формуле планки 20000, из-за которого её практически нереально перепрыгнуть, но это легко исправить (описание причины и фикса где-то в середине, множитель помощи нубам). А так, в общем, я не вижу тут никаких багов, позволяющих конкретным лицам без напряга перепрыгивать 20000, или способствующих росту очков. Перепрыгнуть можно при большом везении и чрезмерной аккуратности, нужно очень постараться не получать звездюлей. Также админам/випам перепрыгнуть её проще, чем простым смертным.
P.S. Если что-то не верно, сильно не бейте, пожалуйста)
Да то, что ты прямолинейный я в курсе, не про тебя речь.
А то,что он разбанивает "читеров" смысл имеется, в большинстве разбанов я с ним солидарен.
Есть правила на сервере - их нужно соблюдать, это я про муты.