Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
Отступление для администрации: Собственно пишу в этом разделе, так как "логичных" людей и здравых голов тут много, да и по походу выполнения задачи могут быть вопросы. Знаю что нарушаю кучу правил и по этому заранее изменяюсь ).
Собственно по теме: Я пишу плагин Дуэль для КЗ сервера. Плагин уже в бета тестировании, но игрокам очень важно в последствии похвастаться своими результатам дуэлей, и было решено написать статистику, от куда сразу возник вопрос: Как же учитывать результаты? Учитывать все результаты - выводить их при помощи сортировки по нику или карте тут более мене все просто, но помозговав с одним заядлым Джампером, но еще предложил сделать топ 15 дуэлянтов тут тоже просто - лучший - у кого больше выигранных дуелей ( если не брать качество дуэлей ) И еще один вариант - топ 15 дуэлей для каждой карты свой, но как тогда оценивать качество дуэли?
В результатах дуэлей - следующие данные:
Code
Nick Время checkp weapons omfg 03:27.642 43 usp
для обоих дуэлянтов, а так же на какое время обогнал победитель...
У кого какие мысли есть? Мне интересно мнение как с точки зрения построения самой статистики, а так же с точки зрения нагрузок от каких либо вариантов ее исполнения.
PomanoB, правильно пишет, лучше всю нагрузку возложить на SQL, и желательно на другую машину, чтоб самому серваку не мешала. По поводу организации, вариантов исполнения много. У тебя мод один, и есть победитель на каждой мапе. Можешь брать среднее время каждого участника и делить на количество побед, у кого самое маленькое значение тот и победил. То есть ( SUM(time_of_map) / COUNT(of_map) ) / COUNT(wins_of_map).
Конечно, есть карты длиннее и есть короче и игрок играя на маленьких картах может оказатся впереди, но тут можно еще учитывать среднее время за карту по другим участникам.
new Handle:query = SQL_PrepareQuery(g_h_Sql_Connect,"INSERT INTO `kz_duel` (`W_name`,`L_name`,`W_time`,`L_time`,`R_time`,`map`) VALUES ('%s','%s','%d','%d','%d','%s')", name3,name,W_time[id],L_time[id],R_time[id],g_mapname)
запихнуть нужно соответственно в место W_time/ думается остальное по аналогии сделаю, просто у самого не получилось..
Добавлено (16.02.2010, 02:29:48) --------------------------------------------- Вот что еще, объясните пожалуйста: %s%.5f %s - что это? %.5f - это я так понимаю после точки (дробь) т.е. 0.12345 , если поставим %.4f - то будет 0,1234
Добавлено (16.02.2010, 02:47:10) --------------------------------------------- Кажется разобрался ) так всегда, попросишь помощи и ответ на тебя сам находит видать когда пытаешься составить вопрос - находишь и ответ, не даром говориться - в хорошем вопросе, уже есть половина ответа )
Но все равно хочу услышать объяснения по поводу %02d:%s%.5f
Добавлено (18.02.2010, 15:28:29) --------------------------------------------- Ну вот, и дошло дело до хоть каких то результатов: http://izlapzla.ru/jump/duel Это бета тестрование плагина для выявления багов и сбора небольшой статистики для разработки самого топ15 дуэлей, а не просто списка как сейчас.
А так же: DaTa, ZETA, Zefir, И само собой все сообщество amxmodx.ucoz.ru
Добавлено (23.02.2010, 01:16:46) --------------------------------------------- Вопрос появился: Ни кто не знает как можно запретить нажатие кнопки старт? но при этом финишную кнопку нажимать можно )
Тут получается мы знаем на какую кнопку нажал игрок, но как сделать блок? На сколько я понимаю - кнопка то уже нажалась и мы определили какая.. А надо что бы не передавалась головному плагину это событие когда человек находится в дуэли.
Добавлено (24.02.2010, 01:09:10) --------------------------------------------- Пробовал return PLUGIN_HANDLED не получилось (
PomanoB, Спасибо сейчас попробую. А то вчера полез в основной плагин снова, и там сделал то что нужно. Но думается что лучше будет если это в моем плагине будет.
Не натыкался ли на толковый ФАК по hamsandwich ? описание функций я нашел, но этого явно мало, да и к тмоу же там только описание что делает, а как использовать и что от чего нет.
Добавлено (25.02.2010, 00:36:18) --------------------------------------------- Добавил return FMRES_SUPERCEDE все равно проходит команда. Плагин разумеется стоит выше по списку.
Добавлено (25.02.2010, 00:57:49) --------------------------------------------- В основном плагине сделал вот такую конструкцию:
Code
if(g_playerduel[id] == false){ // Save Player Start Position g_playerwithstart[id] = true; pev(id, pev_origin, g_playerstartposition[id]) g_player_prelastcp[id] = g_playerstartposition[id]
// Start Player climbing start_climb(id)
// Default Start for Players if( !g_is_defaultstart ) { new mapname[64] get_mapname( mapname, 63) kz_set_start_origin(mapname, g_playerstartposition[id]) } }else{ client_print(id, print_chat, "Time is already start")
}
Выдает предупреждение: Warning: Tag mismatch on line 1119 Вот строка №1119 - if(g_playerduel[id] == false){ Но при этом все работает как надо. Ни как не могу понять из за чего...
Добавлено (25.02.2010, 01:11:40) --------------------------------------------- Заменил строку на: if(!g_playerduel[id]) И предупреждение исчезло. в чем причина предупреждения? форма записи устаревшая илил подводные камни?
Возможно у тебя зарегистрирована ПОСТ версия, в то время как основной плагин использует ПРЕ версию Ham_Use, посмотри стоит ли 1 последним параметром в RegisterHam(), если стоит это пост, если нет то пре
Quote (tavot)
в чем причина предупреждения?
Причина в том, что ты сравниваешь тип "целове число" с типом "булево значение" Значение false будет всегда 0, но значение true не обязательно будет 1, это любое отличное от 0, поэтому и возникает предупреждение http://romanov4400.mybrute.com
Добрался до написания вывода топ15 дуэлей не сервере. и тут же столкнулся с проблемой, так как инглийский мой ужазстный. самому сложно разобраться с Float Суть проблемы: Есть данные в колонке W_time вида 54.546 - это в секундах. Есть запрос который захватывает все данные, НО если вывожу при помощи %d %f %.5f - это охинея. Пробовал выводить при помощи %s - выводится, но как текст, а мне еще предстоит выделить минуты, секунды и доли секунд. Т.е. Пример: из таблицы приходят данные: 192.755 - целое число выводим 192.755/60 ( отбрасывая дробь), далее секунды 192.755 - 6*3(3 получили в прошлом действии) Преобразуем и получаем: 03:12.755
Вот такая вот проблема. думал сделать как текст, потом при образовывать в цифры и тд, но подумал что это не правильно и решил обратиться в очередной раз за помощью )
Добавлено (28.02.2010, 15:54:59) --------------------------------------------- Проблема решена.
Добавлено (06.03.2010, 12:17:36) --------------------------------------------- Проблема: Ни как не могу сделать ранк ( 1 2 3 ч 5 6 ... 15 место) в выводе рекордов вот код:
Code
new g_text[5096] public stats(id){
//ColorChat(id,BLUE, "[Duel] Sorry, under construction") //ColorChat(id,BLUE, "[Duel] Web stats: http://izlapzla.ru/jump/duel")
new player1[33],player2[33] new Float:W_time new Float:L_time new Float:R_time new max_len = charsmax(g_text) new map[33] get_mapname(map,90)
new i new i2=16 new i3 new len
new Handle:query = SQL_PrepareQuery(g_h_Sql_Connect,"SELECT * FROM `kz_duel` WHERE map='%s' ORDER BY `W_time` DESC LIMIT 15",map) SQL_Execute(query) while (SQL_MoreResults(query)) { SQL_ReadResult(query,1, player1, 31) SQL_ReadResult(query,2, player2, 31) SQL_ReadResult(query,3, W_time) SQL_ReadResult(query,4, L_time) SQL_ReadResult(query,5, R_time)