Перейти к содержанию

Проблема с PK рейтингом NPC


Рекомендуемые сообщения

И так прошу помочь на сервер стоит вот этот PvP счетчик.

После того как я удалил пвп-логи с MYSQL скрипт перестал считать ПК для старых игроков.

Если сделать нового чара тогда НПЦ работает стабильно, а для старого не дает ПК рейтинг и не убовляет.

@reloadscript не решил проблему.

Помогите решить проблему.

//===== eAthena Script =======================================

// PvP Rating System

//===== Автор ================================================

// Empty

//===== Текущая версия =======================================

// 3.1

//===== Совместимость ========================================

// SQL eAthena version

//===== Описание =============================================

// Система PvP рейтинга.

//===== Изменения ============================================

// 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 арене.

// В иных зонах не работает. [Empty]

// v2.1 - Изменена структура рейтинга. Теперь работает через

// OnPCKillEvent. Оптимизирован код. Доска рейтинга

// Теперь расположена отдельно. [Empty]

// v2.1a - Добавлена проверка на ГМ левел. За идею спасибо

// VoidLess. [Empty]

// v2.2b - Имя локаций теперь задаёться переменной @pvpmap$

// Стандартом выставлены 5 локаций-городов. [Empty]

// v2.3 - Для ревизий 12ххх+ добавлен лейбл OnPCKillEvent.

// Поправлен маленький недочёт.

// Добавлен выбор типа сервера (PvP, Normal) [Empty]

// v3.0b - В очередной раз переделана структура.

// Весь рейтинг вынесен в отдельную таблицу. [Empty]

// v3.0 - Поправлены все недочёты. Скрипт стабилен.

// Добавлена переменная на вкл\выкл проверки на ГМов.

// Немного изменена ф-ция проигравших. [Empty]

// v3.1 - Исправлен баг с "двойным начислением"...

// аннонсы получают только убитый и жертва. [Empty]

// v3.1.1 Небольшие изменения. [nomn]

//============================================================

- 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$, "sqluser00659c"; // Название базы данных, в которых расположена таблица рейтинга.

setarray @eventmaps$[0], "pvp_n_1-5", "pvp_n_2-5", "prtg_cas01", "guild_vs1", "guild_vs2", "guild_vs3";

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() >= 30 ) 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;

if ( @killer_sex )

set $@kill_msg$, "";

else

set $@kill_msg$, "Была убита";

set @tmp_attach, killedrid;

attachrid( @tmp_attach );

set PvP_Death, PvP_Death+1;

set $@Dead_base, BaseLevel;

set @dead_sex, Sex;

if ( @dead_sex )

set $@dead_msg$, "убил";

else

set $@dead_msg$, "убила";

Rating_Loser;

set @tmp_attach, killerrid;

attachrid( @tmp_attach );

Rating_Winner;

// Больше не нужен...

// announce "["+$@KillerName$+"] "+$@kill_msg$+" ["+$@KilledName$+"]. Рейтинг [ + "+$@CountWinner+" / - "+$@CountLoser+" ]",bc_map|bc_blue;

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$+".pvplog SET pvprat=pvprat+"+@CountWinner+" WHERE name='"+$@KillerName$+"'";

} else {

query_sql "INSERT INTO "+$@db_name$+".pvplog (`name`,`pvprat`) VALUES ('"+$@KillerName$+"',"+@CountWinner+")";

}

announce $@kill_msg$+" [ "+$@KilledName$+" ]. Рейтинг +"+@CountWinner,bc_self|bc_blue;

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$+".pvplog WHERE name='"+$@KilledName$+"'", @pvp_loser;

if ( $@CountLoser < @pvp_loser[0] )

set @PvP_LosPoints, @pvp_loser[0] - @CountLoser;

}

query_sql "UPDATE "+$@db_name$+".pvplog SET pvprat="+@PvP_LosPoints+" WHERE name='"+$@KilledName$+"'";

announce "Вас "+$@dead_msg$+" [ "+$@KillerName$+" ]. Рейтинг -"+@CountLoser,bc_self|bc_blue;

return;

}

}

Изменено пользователем Gans
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика