Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » При перезапуску карты игроку дает самый последний ранг
При перезапуску карты игроку дает самый последний ранг
CAMPER9957 Дата: Четверг, 16.10.2014, 17:22:25 | Сообщение # 1
Сообщений: 3
Репутация: 0 [ +/- ]
При смене карты или при перезапуску сервера игрокам прибавляет максимум очков к рангу, помогите исправить.

Прикрепления: PrefixRanks.sp(15.5 Kb)


Сообщение отредактировал 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
Сообщений: 942
Репутация: 132 [ +/- ]
Все верно. Я помогал, но не оптимизировал. Поэтому там столько кода.
 
king(rus) Дата: Воскресенье, 19.10.2014, 13:44:26 | Сообщение # 9
Сообщений: 109
Репутация: 2 [ +/- ]
Вот. Если хотите, цвета сами меняйте. Делал под 34

Прикрепления: 7503481.sp(13.4 Kb)


Сообщение отредактировал king(rus) - Воскресенье, 19.10.2014, 13:47:28
 
Sallcom Дата: Воскресенье, 19.10.2014, 14:04:47 | Сообщение # 10
Сообщений: 206
Репутация: 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
Сообщений: 206
Репутация: 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
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » При перезапуску карты игроку дает самый последний ранг
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: