ПуфЫстик Опубликовано 22 августа, 2011 Жалоба Поделиться Опубликовано 22 августа, 2011 (изменено) Всем привет, нашёл в интернете старый пвп рейтинг by Empty. Вроде как всё собрал, ерроры которые выдавал мап сервер исправил, но пвп рейтинг всё равно не правильно работает, не понимаю в чем проблема. Сам скрипт: ////////////////////////////////////////////////////////////// //===== eAthena Script ======================================= // PvP Rating System //===== By: ================================================== // Empty (aka F4nT) //===== Current Version: ===================================== // 2.1a //===== Compatible With: ===================================== // SQL eAthena version //===== Description: ========================================= // Система PvP рейтинга, с использованием счёта. // Для работы скрипта c SQL сервером, заугрузите в вашу бд следующий дамп: // ALTER TABLE `char` ADD COLUMN `pvprat` int(11) NOT NULL DEFAULT '0' AFTER `fame`; //===== Additional Comments: ================================= // v1.0b - Первый релиз. // Счёт очков ведётся по фиксированным числам. [Empty] // v1.0 - Исправлен баг с калькуляцией очков [Empty] // v1.1 - В табилице не указываются чары с 0 PK поинтов [Empty] // v1.1b - Исправлен баг с отниманием очков у убитого. // Теперь очков не может быть меньше 0 [Empty] // v1.2 - Исправлен баг с начислением "левых" поинтов [Empty] // v1.3 - Изменены переменные. // Все функции расставлены по порядку. [Empty] // v1.4 - Отключены счётчики в замках. // Добавлены аннонсы убийце и убитому. [Empty] // v1.5 - Добавлены формулы подсчёта рейтинга. [Empty] // v1.5b - Добавлено большее количество локаций-исключений. // (спасибо Rumpl!) [Empty] // v1.6 - При смерти если количиство отнимаемых очков больше, // чем количиство имеющихся, // значиние приравнивается к 0. // (за идею спасиб I'm n00b XD) [Empty] // v1.7 - За убийство самого себя не снимают и не прибавляют // поинтов (За идею спасиб I'm n00b XD) [Empty] // v1.7b - Исправлены ошибки с перенаправлением. [Empty] // v2.0b - Заменена система исключений. Теперь проверка // Идёт на убийство на PvP арене. // В иных зонах не работает. [F4nT] // v2.1 - Изменена структура рейтинга. Теперь работает через // OnPCKillEvent. Оптимизирован код. Доска рейтинга // Теперь расположена отдельно. [F4nT] // v2.1a - Добавлена проверка на ГМ левел. За идею спасибо // VoidLess. [F4nT] //============================================================ - script OnPCKillEvent -1,{ OnPCKillEvent: function Rating_Winner; function Rating_Loser; set @disable_gms, 1; // Проверка на Гм уровень. 1 - вкл. 0 - выкл. set @servertype, 1; // 1 - Normal Server; 2 - PvP Server. set @db_name$, "homero"; // Название базы данных, в которых расположена таблица рейтинга. setarray @eventmaps$[0], "guild_vs2"; if ( getcharid(0) == killerrid ) end; if ( getmapxy( @mapname$, @mapx, @mapy, 0, strcharinfo(0) ) != 0 ) end; switch (@servertype) { case 1: for ( set @i, 0; @i <= getstrlen( @eventmaps$ ); set @i, @i+1 ) { if ( @mapname$ == @eventmaps$[@i] ) { set @eventgo, 1; break; } } break; case 2: set @eventgo, 1; for ( set @i, 0; @i <= getstrlen( @eventmaps$ ); set @i, @i+1 ) { if ( @mapname$ == @eventmaps$[@i] ) { set @eventgo, 0; break; } } break; } if ( !@eventgo ) end; if ( @disable_gms && getgmlevel() >= 40 ) end; set $@PvP_Point, 80; set PvP_Kills,PvP_Kills+1; set $@KillerName$, strcharinfo(0); set $@KilledName$, rid2name( killedrid ); set $@Kill_base, BaseLevel; set @killer_sex, Sex; set @PPkkanus, rand(1,21); if ( @killer_sex ){ set $@kill_msg$, "убил"; } else { set $@kill_msg$, "убила"; } set @tmp_dead, killedrid; attachrid( @tmp_dead ); set PvP_Death, PvP_Death+1; set $@Dead_base, BaseLevel; Rating_Winner; Rating_Loser; announce "[ "+$@KillerName$+" ] "+$@kill_msg$+" [ "+$@KilledName$+" ].",bc_map; end; function Rating_Winner { if ( $@Kill_base < $@Dead_base ) set $@CountWinner, ( $@PvP_Point + ( $@Dead_base - $@Kill_base ) ) / 5; else set $@CountWinner, ( $@PvP_Point - ( $@Kill_base - $@Dead_base ) ) / 5; if ( PvP_Kills > 1 ) { query_sql "UPDATE "+@db_name$+".pvprate SET pvprat=pvprat+"+$@CountWinner+" WHERE name='"+$@KillerName$+"'"; } else { query_sql "INSERT INTO "+@db_name$+".pvprate (`name`,`pvprat`) VALUES ('"+$@KillerName$+"',"+$@CountWinner+")"; } return; } function Rating_Loser { if ( !PvP_Kills ) return; set @PvP_LosPoints, 0; if ( PvP_Kills - PvP_Death >= 0 ) { if ( $@Kill_base < $@Dead_base ) set $@CountLoser, ( $@PvP_Point + ( $@Dead_base - $@Kill_base ) ) / 5; else set $@CountLoser, ( $@PvP_Point - ( $@Kill_base - $@Dead_base ) ) / 5; cleararray @pvp_loser[0],0,1; query_sql "SELECT pvprat FROM "+@db_name$+".pvprate WHERE name='"+$@KilledName$+"'", @pvp_loser; if ( $@CountLoser < @pvp_loser[0] ) set @PvP_LosPoints, @pvp_loser[0] - $@CountLoser; } query_sql "UPDATE "+@db_name$+".pvprate SET pvprat="+@PvP_LosPoints+" WHERE name='"+$@KilledName$+"'"; return; } } prontera,164,172,3 script ПвП-Рейтинг 857,{ set @db_name$, "homero"; // Название базы данных, в которых расположена таблица рейтинга. mes "[ PvP System ]"; mes "Я могу показать вам:"; mes "1. Лидеров-Убийц (Топ 100)."; mes "2. Ваш Статус."; next; switch(select("Лидеры-Убийцы","Мой Cтатус","Выход")) { case 1: set @topcount, 100; cleararray @pvpboard1$[0],"",@topcount; cleararray @pvpboard2[0],0,@topcount; query_sql "SELECT name, pvprat FROM "+@db_name$+".pvprate ORDER BY pvprat DESC LIMIT "+@topcount+";", @pvpboard1$, @pvpboard2; mes "[ ^ff0000Топ "+@topcount+"^000000 ]"; for (set @i,0; @i<@topcount; set @i,@i+1) { if(@pvpboard2[@i] != 0) mes "["+(@i+1)+"] ^0000FF[ "+@pvpboard1$[@i]+" ]^000000 - ^FF0000"+@pvpboard2[@i]+"^000000."; else mes "["+(@i+1)+"] ^0000FF[ Пусто ]^000000 - ^FF0000"+@pvpboard2[@i]+"^000000."; } close2; break; case 2: cleararray @pvp_points[0],0,1; query_sql "SELECT pvprat FROM "+@db_name$+".pvprate WHERE name='"+strcharinfo(0)+"'", @pvp_points; mes "[ PvP Статус ^0000ff"+strcharinfo(0)+"^000000 ]"; mes "Убийств: ^0000FF"+PvP_Kills+"^000000"; mes "Сметрей: ^0000FF"+PvP_Death+"^000000"; mes " "; mes "PK рейтинг: ^0000FF"+@pvp_points[0]+"^000000"; close2; break; case 3: close2; break; } end; } Вот то что я загрузил в sql базу: CREATE TABLE `pvprate` ( `id` int(11) NOT NULL auto_increment, `name` varchar(30) NOT NULL default '', `pvprat` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) Почему пвп рейтинг 0 ? И вот что находится в phpmyadmin в таблице pvprate Изменено 22 августа, 2011 пользователем ПуфЫстик Ссылка на комментарий Поделиться на другие сайты Поделиться
ПуфЫстик Опубликовано 22 августа, 2011 Автор Жалоба Поделиться Опубликовано 22 августа, 2011 Почему он не работоспособный ? если он всё делай , только не вычитывает пвп рейтинг ... Ссылка на комментарий Поделиться на другие сайты Поделиться
ПуфЫстик Опубликовано 22 августа, 2011 Автор Жалоба Поделиться Опубликовано 22 августа, 2011 а почему нет ?рейтинг он считает(сколько убил, сколько смертей) + если кто кого убивает он анонсит... Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 23 августа, 2011 Жалоба Поделиться Опубликовано 23 августа, 2011 attachrid( @tmp_dead );set PvP_Death, PvP_Death+1;set $@Dead_base, BaseLevel;Rating_Winner;Rating_Loser;announce "[ "+$@KillerName$+" ] "+$@kill_msg$+" [ "+$@KilledName$+" ].",bc_map;end;function Rating_Winner {if ( $@Kill_base < $@Dead_base )set $@CountWinner, ( $@PvP_Point + ( $@Dead_base - $@Kill_base ) ) / 5;elseset $@CountWinner, ( $@PvP_Point - ( $@Kill_base - $@Dead_base ) ) / 5;if ( PvP_Kills > 1 ) {query_sql "UPDATE "+@db_name$+".pvprate SET pvprat=pvprat+"+$@CountWinner+" WHERE name='"+$@KillerName$+"'";} else {query_sql "INSERT INTO "+@db_name$+".pvprate (`name`,`pvprat`) VALUES ('"+$@KillerName$+"',"+$@CountWinner+")";}return;}Вот кривой кусок из-за которого дублируются записи в базе. Почему проверяются PvP_Kills у приаттаченного убитого? Надо у киллера проверять >_< Дальше, если честно, лень ковыряться. Прав был кто-то выше, проще с нуля самому написать, чем тут без намека на форматирование ковыряться =( Ссылка на комментарий Поделиться на другие сайты Поделиться
ПуфЫстик Опубликовано 23 августа, 2011 Автор Жалоба Поделиться Опубликовано 23 августа, 2011 И что никто не может помочь ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 23 августа, 2011 Жалоба Поделиться Опубликовано 23 августа, 2011 Помочь в чем? переписывать рейтинг от Empty? Спасибо, увольте (: Написать свой - пиши, в чем проблема? Вопросы будут - поможем. А просто так а-ля вынь-да-положь лично я не буду делать, разве что найдется что-то уже написанное и достаточно лишь выложить Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 23 августа, 2011 Жалоба Поделиться Опубликовано 23 августа, 2011 Я свой писал =( Терпеть ненавижу разгребать чужой код 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
ПуфЫстик Опубликовано 23 августа, 2011 Автор Жалоба Поделиться Опубликовано 23 августа, 2011 Ладно , тогда по другому. Объясните мне принцип работы этого кода : set $@CountLoser, ( $@PvP_Point + ( $@Dead_base - $@Kill_base ) ) / 5; else set $@CountLoser, ( $@PvP_Point - ( $@Kill_base - $@Dead_base ) ) / 5; Я правильно понимаю , это переменная которая показывает как рейтинг высчитывается ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 24 августа, 2011 Жалоба Поделиться Опубликовано 24 августа, 2011 Ладно , тогда по другому. Объясните мне принцип работы этого кода : set $@CountLoser, ( $@PvP_Point + ( $@Dead_base - $@Kill_base ) ) / 5; else set $@CountLoser, ( $@PvP_Point - ( $@Kill_base - $@Dead_base ) ) / 5; Я правильно понимаю , это переменная которая показывает как рейтинг высчитывается ? Ну да) Это обсчет рейтинга. Сколько поинтов отнять у персонажа. $@CountLoser = ( 80 + ( Базовый лвл умершего - Базовый лвл киллера ) ) / 5. Сюда можешь свою формулу придумать Ссылка на комментарий Поделиться на другие сайты Поделиться
ПуфЫстик Опубликовано 24 августа, 2011 Автор Жалоба Поделиться Опубликовано 24 августа, 2011 (изменено) а почему 80 и /5 ? p.s. кто подскажет как сделать, чтобы без пересчета рейтинга, просто выводилось сколько убийств и смертей. А рейтинг выставлялся по принципу у кого больше убийств тот круче. Изменено 24 августа, 2011 пользователем ПуфЫстик Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 25 августа, 2011 Жалоба Поделиться Опубликовано 25 августа, 2011 а почему 80 и /5 ? p.s. кто подскажет как сделать, чтобы без пересчета рейтинга, просто выводилось сколько убийств и смертей. А рейтинг выставлялся по принципу у кого больше убийств тот круче. 80 и /5 потому что автор скрипта так придумал set $@CountLoser, ( $@PvP_Point + ( $@Dead_base - $@Kill_base ) ) / 5;elseset $@CountLoser, ( $@PvP_Point - ( $@Kill_base - $@Dead_base ) ) / 5; заменить на set $@CountLoser, 1;elseset $@CountLoser, 1; и аналогично поступить с $@CountWinner. или другой вариант: query_sql "UPDATE "+@db_name$+".pvprate SET pvprat=pvprat+"+$@CountWinner+" WHERE name='"+$@KillerName$+"'"; заменить на query_sql "UPDATE "+@db_name$+".pvprate SET pvprat=pvprat+1 WHERE name='"+$@KillerName$+"'"; и так же поменять в запросе для Winner'а. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
ПуфЫстик Опубликовано 25 августа, 2011 Автор Жалоба Поделиться Опубликовано 25 августа, 2011 Кеник, подскажи правильно я запрос изменил ?CREATE TABLE `pvprate` (`id` int(11) unsigned NOT NULL default '0',`name` varchar(255) NOT NULL default '',`pvpkill` int(11) unsigned NOT NULL default '0',`pvpdie` int(11) unsigned NOT NULL default '0',PRIMARY KEY (`id`)) Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 26 августа, 2011 Жалоба Поделиться Опубликовано 26 августа, 2011 Да. Скрипт под таблицу изменить не забудь 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
ПуфЫстик Опубликовано 26 августа, 2011 Автор Жалоба Поделиться Опубликовано 26 августа, 2011 (изменено) Подскажи как переделать меню "Ваш Статус" : cleararray @pvp_points[0],0,1; query_sql "SELECT pvprate FROM "+@db_name$+".pvprate WHERE name='"+strcharinfo(0)+"'", @pvp_points; mes "[ PvP Статус ^0000ff"+strcharinfo(0)+"^000000 ]"; mes "Убийств: ^0000FF"+PvP_Kills+"^000000"; mes "Сметрей: ^0000FF"+PvP_Death+"^000000"; close2; break;Я не понимаю как мне запрос переделать что бы ошибок не было. Ошибка когда тыркаю на "Ваш Статус":[SQL]: DB error - Unknown column 'pvprate' in 'field list'[Debug]: at ..\src\map\script.c:12741 - SELECT pvprate FROM homero.pvprate WHERE name='Artur'[Debug]: Source (NPC): ╧т╧-╨хщЄшэу at prontera (164,172) Изменено 26 августа, 2011 пользователем ПуфЫстик Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 26 августа, 2011 Жалоба Поделиться Опубликовано 26 августа, 2011 query_sql "SELECT pvprate FROM "+@db_name$+".pvprate WHERE name='"+strcharinfo(0)+"'", @pvp_points; Красным выделил. Там нужно указывать имя колонки в таблице, из которой значение выбирать, а не имя таблицы. Поправь самостоятельно, так полезнее 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
ПуфЫстик Опубликовано 26 августа, 2011 Автор Жалоба Поделиться Опубликовано 26 августа, 2011 (изменено) Таак... pvpkill сработало, теперь не понимаю другого, вот что у меня в базе в таблице pvprate: а вот что в игре показывает... А вот теперь самое интересное , в игре показывает 1 убийство и 1 смерть, а в таблице даже на ник artuur ничего нету... Откуда он это взял ?О_О Изменено 26 августа, 2011 пользователем ПуфЫстик Ссылка на комментарий Поделиться на другие сайты Поделиться
Jarek Опубликовано 26 августа, 2011 Жалоба Поделиться Опубликовано 26 августа, 2011 (изменено) В скрипте берутся переменные, а не данные из таблицы (кстати зачем в скрипте нпц запрос, если он не нужен?), из чего можно сделать вывод, что в таблицу ничего не записалось Изменено 26 августа, 2011 пользователем Jarek 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
ПуфЫстик Опубликовано 26 августа, 2011 Автор Жалоба Поделиться Опубликовано 26 августа, 2011 (изменено) Хммм... мне интересно, как сделать что бы из определённый таблицы высчитывалось и записывалось ? что бы в таблицу global_reg_value ничего не записывалось... Изменено 26 августа, 2011 пользователем ПуфЫстик Ссылка на комментарий Поделиться на другие сайты Поделиться
ПуфЫстик Опубликовано 26 августа, 2011 Автор Жалоба Поделиться Опубликовано 26 августа, 2011 Тему можно закрыть , я разобрался (помогли) . Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения