При перезапуску карты игроку дает самый последний ранг
| |
CAMPER9957
|
Дата: Четверг, 16.10.2014, 17:22:25 | Сообщение # 1 |
|
Сообщений: 3
Репутация: 0 [ +/- ]
|
|
При смене карты или при перезапуску сервера игрокам прибавляет максимум очков к рангу, помогите исправить.
Гости не могут скачивать файлы
|
Сообщение отредактировал CAMPER9957 - Четверг, 16.10.2014, 17:23:09 |
|
| |
king(rus)
|
Дата: Пятница, 17.10.2014, 08:42:53 | Сообщение # 2 |
|
Сообщений: 109
Репутация: 2 [ +/- ]
|
|
Цитата CAMPER9957 ( ) При смене карты или при перезапуску сервера игрокам прибавляет максимум очков к рангу, помогите исправить.
1. Зачем записывать имя игроков в БД? 2. Зачем записывать id в БД? 3. Ошибка тут: FormatEx(sQuery, sizeof(sQuery) - 1, "UPDATE `ranks` SET `name` = '%s', `kills` = %d WHERE `id` = %d", g_iClientKills[iClient], sNameDB, g_iClientID[iClient]);
Отдельно:
Код public Action:HookPlayerChat(client, const String:command[], args) { new String:buffer[512], String:name[128]; if(g_iClientKills[client] < killsone) return Plugin_Continue; GetCmdArgString(buffer, sizeof(buffer)); //Получаем то, что написал игрок StripQuotes(buffer); GetClientName(client, name, sizeof(name));//И ник игрока, который написал if (killsone <= g_iClientKills[client] < killstwo) //Если убийства игрока больше (или равно) количества убийств для 1 ранга и меньше количества убийств для 2 ранга,то { //Это значит, что его ранг равен 1. PrintToChatAll("\x07F0F8FF%s \x03%s\x01: \x01%s", prefixone, name, buffer); //Пишем его текст с префиксом. } else if (killstwo <= g_iClientKills[client] < killsthree) //Так же и тут. Если убийства > порога 2 ранга и < порога 3 ранга, то у него 2 ранг. { PrintToChatAll("\x07F0F8FF%s \x03%s\x01: \x01%s", prefixtwo, name, buffer); //Пишем текст с префиксом } else if (killsthree <= g_iClientKills[client] < killsfour) { PrintToChatAll("\x04%s \x03%s\x01: \x01%s", prefixthree, name, buffer); } else if (killsfour <= g_iClientKills[client] < killsfive) { PrintToChatAll("\x04%s \x03%s\x01: \x01%s", prefixfour, name, buffer); } else if (killsfive <= g_iClientKills[client] < killssix) { PrintToChatAll("\x04%s \x03%s\x01: \x01%s", prefixfive, name, buffer); } else if (killssix <= g_iClientKills[client] < killsseven) { PrintToChatAll("\x04%s \x03%s\x01: \x01%s", prefixsix, name, buffer); } else if (killsseven <= g_iClientKills[client] < killseight) { PrintToChatAll("\x04%s \x03%s\x01: \x01%s", prefixseven, name, buffer); } else //Если его убийства больше максимального порога убийств, то у игрока последний ранг. Добавлять можно { //по этому примеру можешь добавлять свои PrintToChatAll("\x04%s \x03%s\x01: \x01%s", prefixeight, name, buffer); }return Plugin_Handled; } Код выше ужасен. А если игрок напишет мёртвый? Там же префикс *МЁРТВ*. Что будешь делать с этим? тут лучше не проверкой, а тупым выводом. А если он напишет в командный чат? Тогда будет без префикса?
Создай одну переменную. new String:iTag[MAXPLAYERS+1][128]; Ей присваивай свои ранги(каждому игроку). и тупо выводи их ранг, вместо кода выше. И лучше не через PrintToChat, (если в34), а CPrintToChat (colors.inc). Допустим он заслужил определённый ранг и он записан в iTag; То тупо выводим:
if (IsPlayerAlive(client)) CPrintToChatAll("{GREEN}%s {TEAM}%N {DEFAULT}: лалала", iTag[client], client); Это пример.
Исправлять будешь сам. Ибо опыт твой.
И ещё одна логическая ошибка. Поменяй местами. Иди не с 1ранга, а с 7 вниз.
Половину исходника можно спокойно сократить.
Сообщение отредактировал king(rus) - Пятница, 17.10.2014, 09:13:53 |
|
| |
CAMPER9957
|
Дата: Пятница, 17.10.2014, 10:35:24 | Сообщение # 3 |
|
Сообщений: 3
Репутация: 0 [ +/- ]
|
|
Спасибо конечно, но код то не мой :) Просто попросил что бы кто-то исправил, я сам то не очень понимаю ))
|
|
| |
king(rus)
|
Дата: Суббота, 18.10.2014, 21:21:46 | Сообщение # 4 |
|
Сообщений: 109
Репутация: 2 [ +/- ]
|
|
Пиши в ЛС, если хочешь, сделаю.
|
|
| |
Samil
|
Дата: Воскресенье, 19.10.2014, 08:03:24 | Сообщение # 5 |
|
Сообщений: 59
Репутация: 11 [ +/- ]
|
|
Укажите автора хоть...
|
|
| |
king(rus)
|
Дата: Воскресенье, 19.10.2014, 09:28:40 | Сообщение # 6 |
|
Сообщений: 109
Репутация: 2 [ +/- ]
|
|
Цитата Samil ( ) Укажите автора хоть...
Автор и так указан в исходнике. Нужно читать ВНИМАТЕЛЬНО.
|
|
| |
Samil
|
Дата: Воскресенье, 19.10.2014, 09:41:38 | Сообщение # 7 |
|
Сообщений: 59
Репутация: 11 [ +/- ]
|
|
Изначально плагин мой и барда...
|
|
| |
BarD
|
Дата: Воскресенье, 19.10.2014, 10:38:06 | Сообщение # 8 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Все верно. Я помогал, но не оптимизировал. Поэтому там столько кода.
|
|
| |
king(rus)
|
Дата: Воскресенье, 19.10.2014, 13:44:26 | Сообщение # 9 |
|
Сообщений: 109
Репутация: 2 [ +/- ]
|
|
Вот. Если хотите, цвета сами меняйте. Делал под 34
Гости не могут скачивать файлы
|
Сообщение отредактировал king(rus) - Воскресенье, 19.10.2014, 13:47:28 |
|
| |
Sallcom
|
Дата: Воскресенье, 19.10.2014, 14:04:47 | Сообщение # 10 |
|
Сообщений: 205
Репутация: 31 [ +/- ]
|
|
Цитата king(rus) ( ) И ещё одна логическая ошибка. Поменяй местами. Иди не с 1 ранга, а с 7 вниз. Лол. Неважно с какой цифры идет нумерация. Автор сделал так, как захотел именно он или заказчик.
P.S. Что-то ты часто говоришь, что у кого-то где-то ошибки, хотя их там вообще нет, но сам при этом имеешь мало знаний, чтобы объективно оценить что-либо.
|
|
| |
king(rus)
|
Дата: Воскресенье, 19.10.2014, 14:45:04 | Сообщение # 11 |
|
Сообщений: 109
Репутация: 2 [ +/- ]
|
|
Цитата Sallcom ( ) Лол. Неважно с какой цифры идет нумерация. Автор сделал так, как захотел именно он или заказчик.
P.S. Что-то ты часто говоришь, что у кого-то где-то ошибки, хотя их там вообще нет, но сам при этом имеешь мало знаний, чтобы объективно оценить что-либо.
Это очень важно, с какой нумерации идёт ранг. Смотри, как сделал я - правильно. Как было: Допустим у игрока 3 убийства if (creditsClient >= 1) то тот ранг else if (creditsClient >= 40), то тот ранг. Вот он перезашёл, у него 45 очков, ему плагин даст 1 ранг, потому Выполняется первое условие. Так что важно. Поменяй местами и ты сам убедишься. И впредь. Чтобы критиковать других, ты сам должен хоть чего-то знать, а ты ничего не знаешь.
И я переписал плагин, ибо он не при четных фрагов писал бы без префикса. А так намного оптимизированее, чем if else. Прочитай код, а потом говори, умник нашёлся =.=
Что же ты сам не исправил?
Сообщение отредактировал king(rus) - Воскресенье, 19.10.2014, 14:46:06 |
|
| |
Samil
|
Дата: Понедельник, 20.10.2014, 04:39:00 | Сообщение # 12 |
|
Сообщений: 59
Репутация: 11 [ +/- ]
|
|
if (creditsClient >= 1 && creditsClient < 40) Так не проще?
Сообщение отредактировал Samil - Понедельник, 20.10.2014, 04:39:27 |
|
| |
king(rus)
|
Дата: Понедельник, 20.10.2014, 06:59:42 | Сообщение # 13 |
|
Сообщений: 109
Репутация: 2 [ +/- ]
|
|
Цитата Samil ( ) if (creditsClient >= 1 && creditsClient < 40) Так не проще? Проще так, как сделал я, а у тебя будет много условий и не будет никакой оптимизации.
|
|
| |
Samil
|
Дата: Понедельник, 20.10.2014, 11:10:11 | Сообщение # 14 |
|
Сообщений: 59
Репутация: 11 [ +/- ]
|
|
Хорошо(=Учту
|
|
| |
Sallcom
|
Дата: Понедельник, 20.10.2014, 16:56:38 | Сообщение # 15 |
|
Сообщений: 205
Репутация: 31 [ +/- ]
|
|
Цитата king(rus) ( ) Это очень важно, с какой нумерации идёт ранг. Смотри, как сделал я - правильно. Как было: Допустим у игрока 3 убийства if (creditsClient >= 1) то тот ранг else if (creditsClient >= 40), то тот ранг. Вот он перезашёл, у него 45 очков, ему плагин даст 1 ранг, потому Выполняется первое условие. Так что важно. Поменяй местами и ты сам убедишься. И впредь. Чтобы критиковать других, ты сам должен хоть чего-то знать, а ты ничего не знаешь.
И я переписал плагин, ибо он не при четных фрагов писал бы без префикса. А так намного оптимизированее, чем if else. Прочитай код, а потом говори, умник нашёлся =.=
Что же ты сам не исправил? Так ты же все в плагине исправил, зачем другому человеку менять местами ранги? И почему у него ошибка, раз ты переделал и не сказал, что для корректной работы, нужна именно твоя нумерация?
Цитата king(rus) ( ) ... Что же ты сам не исправил? .... А я разве обязан? Я могу оценить чей-либо код без предоставления своего решения.
P.S. wS, пожалуйста, добавь модератора данного форума, а то те, кто не разбирается в чем-то, размножают свои ошибки, а потом другие на их знаниях доказывают что-либо, с упреком на то, что ты ничего не знаешь. (Данный комментарий не является следствием личной неприязни к какому-либо пользователю)
Сообщение отредактировал Sallcom - Понедельник, 20.10.2014, 17:01:46 |
|
| |
|