Назад

Выложите плиз есле у когонибуть есть анонс убийств

Автор: MaxxWell: Дата: 01.10.2010

Чтобы когда на арене, или за её пределами тоже, когда в пвп ктото выйгрывает был анонс

Автор: MaxxWell: Дата: 01.21.2010

Мне можно и так=) просто еще дописал бы свои локи=)

Автор: [OneLife]: Дата: 01.21.2010

Вроде бы то, что просите:


//===== eAthena Script ================================================== =====
//= PVP ladder script ( SQL only )
//===== By: ================================================== ================
//= ~AnnieRuru~
//===== Current Version: ================================================== ===
//= 2.5
//===== Compatible With: ================================================== ===
//= eAthena SQL 12068, with MySQL 5
//===== Description: ================================================== =======
//= PVP ladder store in SQL table
//= with a lot configurations, and anti-sit-killer feature
//= http://www.eathena.ws/board/index.php?showtopic=177918
//================================================== ==========================
- script DOTAPVP -1,{
OnInit:
// Config
set .sound, 1; // soundeffect : 0 - disable, 1 - soundeffect on map, 2 - soundeffect to server/global, 3 - soundeffect to self only
set .announce, 1; // announce to : 0 - global, 1 - map
set .announcemap, 1; // announce the map name in the announcement ? : 0 - off, 1 - on

set .announcekill, 1; // announce who pawn who's head : 0 - off, 1 - on
set .msg_die, 1; // show message who kill you when die : 0 - off, 1 - on
set .msg_kill, 1; // show message you kill who when killed someone : 0 - off, 1 - on

set .gmnokill, 0; // GMs are not suppose to kill players. A GM with level or higher will do nothing. IF set to 60, GM60 and above kill any player will not get anything : 0 - off

set .killingspree, 3;
set .dominating, 4;
set .megakill, 5;
set .unstoppable, 6;
set .wickedsick, 7;
set .monsterkill, 8;
set .godlike, 9;
set .holyshit, 10;
set .continue, 1; // after beyond-godlike, every kills will make announcement again

set .owned, 5; // how many times the party/guild has to kill to announce ownage
set .owncontinue, 1; // after ownage, every party/guild cumulative kills will make ownage announce again

set getvariableofnpc(.min_gm_menu,"PvP-StatsViewer"), 99; // minimum level of GM can use the GM menu on ladder npc

set getvariableofnpc(.showtotal,"PvP-StatsViewer"), 20; // show the length of ladder. Note : Maximum value = 128
set getvariableofnpc(.showpage,"PvP-StatsViewer"), 10; // set the views per page. Note : Maximum value = 128
set getvariableofnpc(.loweststreak,"PvP-StatsViewer"), 3; // mininum streak count allow to show in highest streak ladder. Default 3 means must at least have killing spree streak to display in ladder
set getvariableofnpc(.lowestownage,"PvP-StatsViewer"), 5; // mininum ownage count allow to show in longest ownage ladder. Default 5 means must at least have 5 ownage counts to display in ladder

// *NEW* anti-sit-killer system
// a player must kill another player with this minimum base level to get the announcement and in the ladder.
// Otherwise only have streak ended announcement and killed player's streak reset.
// Its possible for a level 1 novice to kill a level 99 player and he/she will still get in the ladder
// but a level 99 kill a level 1 player will get nothing
// 0 - off this system ( default is 55, pk setting )
set .lvltokill, 90;

// when a player kill another same player times in a row, the player is warp back to save point.
// and the player's streak, kills, and ownage count will deduct accordingly
// 0 - off this system
set .counttopunish, 6;

// minimum level range to kill another player
// eg. when set to 20, player level 99 needs to kill another player with minimum level of 79 to get announcement and increase the kill rank.
// but a player with base level 50 kills a level 99 will also get the announcement
// higher base level cannot kill lower level, but lower level can kill higher level
// 0 - off this system
set .minlvlrange, 10;


// Config ends ------------------------------------------------------------------------------------------

// to prevent bug happen
if ( .announce < 0 || .announce > 1 ) set .announce, 0;
if ( .continue < 1 ) set .continue, 1;
if ( .owncontinue < 1 ) set .owncontinue, 1;
if ( .gmnokill <= 0 ) set .gmnokill, 100;
if ( .lvltokill <= 1 ) set .lvltokill, 0;
if ( .counttopunish <= 1 ) set .counttopunish, 0;
end;

// script start
OnPCKillEvent:
if ( getgmlevel() >= .gmnokill ) end;
getmapxy .@map$,.@x,.@y,0;
if ( !attachrid(killedrid) ) end;
if ( killerrid != getcharid(3) && ( .msg_die || .msg_kill ) ) {
if ( .msg_die ) message strcharinfo(0),"Вы были убиты "+ rid2name(killerrid);
if ( .msg_kill ) message rid2name(killerrid),"Ты только что убил "+ strcharinfo(0);
}
if ( @PlayersKilledStreak >= .holyshit )
set .@streakname$,"Beyond Godlike";
else if ( @PlayersKilledStreak >= .godlike )
set .@streakname$,"Godlike";
else if ( @PlayersKilledStreak >= .monsterkill )
set .@streakname$,"Monster Kill";
else if ( @PlayersKilledStreak >= .wickedsick )
set .@streakname$,"Wicked Sick";
else if ( @PlayersKilledStreak >= .unstoppable )
set .@streakname$,"Unstoppable";
else if ( @PlayersKilledStreak >= .megakill )
set .@streakname$,"Mega-kill";
else if ( @PlayersKilledStreak >= .dominating )
set .@streakname$,"Dominating";
else if ( @PlayersKilledStreak >= .killingspree )
set .@streakname$,"Killing Spree";
if ( @PlayersKilledStreak >= .killingspree && killerrid == getcharid(3) )
announce strcharinfo(0) +" has ended "+( (sex)?"him":"her" )+" own "+ .@streakname$ +"["+ @PlayersKilledStreak +"] streak "+( (.announcemap)?("at "+ .@map$):""),16|.announce;
else if ( @PlayersKilledStreak >= .killingspree )
announce rid2name(killerrid) +" has ended "+ strcharinfo(0) +"'s "+ .@streakname$ +"["+ @PlayersKilledStreak +"] streak "+( (.announcemap)?("at "+ .@map$):""),16|.announce;
else if ( .announcekill )
announce rid2name(killerrid) +" has pawned "+ strcharinfo(0) +"'s head "+( (.announcemap)?("at "+ .@map$):""),16|.announce;
set @PlayersKilledStreak,0;
if ( query_sql("select char_id from pvpladder where char_id = "+ getcharid(0), .@d_cid ) )
query_sql "update pvpladder set deaths = deaths + 1 where char_id = "+ getcharid(0);
set @dota_multikills,0;
if ( getcharid(2) ) {
if ( query_sql("select guild_id from ownladder where guild_id = "+ getcharid(2), .@d_gid ) )
query_sql "update ownladder set currentown = 0 where guild_id = "+ getcharid(2);
set .@killedgroup, getcharid(2);
}
if ( killerrid == getcharid(3) || baselevel < .lvltokill ) end;
if ( .minlvlrange ) set .@killedlvl, baselevel;
if ( !attachrid(killerrid) ) end;
if ( .minlvlrange && .@killedlvl + .minlvlrange < baselevel ) end;
if ( .counttopunish ) {
for ( set .@i,0; .@i < 60; set .@i, .@i +1 ) {
if ( .@i == gettime(2) ) continue;
deletearray getd("@sitkillid"+ .@i), 128;
deletearray getd("@sitkilltimes"+ .@i), 128;
}
if ( !getarraysize( getd("@sitkillid"+ gettime(2)) ) ) {
setd "@sitkillid"+ gettime(2) +"[0]", killedrid;
setd "@sitkilltimes"+ gettime(2) +"[0]", 1;
} else {
for ( set .@i,0; .@i < getarraysize( getd("@sitkillid"+ gettime(2)) ); set .@i, .@i +1 ) {
if ( getd("@sitkillid"+ gettime(2) +"["+ .@i +"]") != killedrid )
continue;
else {
setd "@sitkilltimes"+ gettime(2) +"["+ .@i +"]", getd("@sitkilltimes"+ gettime(2) +"["+ .@i +"]") +1;
if ( getd("@sitkilltimes"+ gettime(2) +"["+ .@i +"]") >= .counttopunish ) {
warp "SavePoint",0,0;
announce strcharinfo(0) +" , Stop killing "+ rid2name(killedrid) + " !!!",0;
logmes "is sit-killing "+ rid2name(killedrid) +" for "+ getd("@sitkilltimes"+ gettime(2) +"["+ .@i +"]") +" times";
query_sql "update pvpladder set kills = kills - "+ ( .counttopunish -1 ) +" where char_id = "+ getcharid(0);
query_sql "select streaks from pvpladder where char_id = "+ getcharid(0), .@streak;
if ( @PlayersKilledStreak == .@streak )
query_sql "update pvpladder set streaks = "+( @PlayersKilledStreak +1 - .counttopunish )+" where char_id = "+ getcharid(0);
set @PlayersKilledStreak, @PlayersKilledStreak +1 - .counttopunish;
if ( getcharid(2) ) {
query_sql "select currentown, highestown from ownladder where guild_id = "+ getcharid(2), .@currentown, .@highestown;
query_sql "update ownladder set currentown = currentown - "+ ( .counttopunish -1 ) +" where guild_id = "+ getcharid(2);
if ( .@currentown == .@highestown )
query_sql "update ownladder set highestown = currentown where guild_id = "+ getcharid(2);
}
end;
}
}
}
}
}
set @PlayersKilledStreak, @PlayersKilledStreak + 1;
if ( query_sql("select streaks from pvpladder where char_id = "+ getcharid(0), .@streaks) )
query_sql "update pvpladder set kills = kills + 1 where char_id = "+ getcharid(0);
else
query_sql "insert into pvpladder ( char_id, name, kills , streaktime ) values ( "+ getcharid(0) +", '"+ strcharinfo(0) +"', 1, now() )";
if ( @PlayersKilledStreak > .@streaks ) {
query_sql "update pvpladder set streaks = "+ @PlayersKilledStreak +" where char_id = "+ getcharid(0);
query_sql "update pvpladder set streaktime = now() where char_id = "+ getcharid(0);
}
if ( @PlayersKilledStreak == .killingspree )
setarray .@streakname$,"killingspree.wav","is on a KILLING SPREE",".";
else if ( @PlayersKilledStreak == .dominating )
setarray .@streakname$,"dominating.wav","is DOMINATING!",".";
else if ( @PlayersKilledStreak == .megakill )
setarray .@streakname$,"megakill.wav","has a MEGA-Kill!",".";
else if ( @PlayersKilledStreak == .unstoppable )
setarray .@streakname$,"unstoppable.wav","is UNSTOPPABLE!",".";
else if ( @PlayersKilledStreak == .wickedsick )
setarray .@streakname$,"wickedsick.wav","is WICKED SICK!",".";
else if ( @PlayersKilledStreak == .monsterkill )
setarray .@streakname$,"monsterkill.wav","has a MONSTER Kill!",".";
else if ( @PlayersKilledStreak == .godlike )
setarray .@streakname$,"godlike.wav","is GODLIKE!",". Will someone ever stop "+( (sex)?"him":"her" ) +"?";
else if ( @PlayersKilledStreak >= .holyshit && ( (@PlayersKilledStreak - .holyshit) % .continue == 0 ) )
setarray .@streakname$,"holyshit.wav","is BEYOND GODLIKE!",". Someone kill "+( (sex)?"him":"her" ) +"!";
if ( .@streakname$[1] != "" ) {
announce strcharinfo(0) +" "+ .@streakname$[1] +"["+ @PlayersKilledStreak +"] "+( (.announcemap)?("at "+ .@map$):"") + .@streakname$[2],16|.announce;
if ( .sound == 1 ) soundeffectall .@streakname$[0],0,.@map$;
else if ( .sound == 2 ) soundeffectall .@streakname$[0],0;
else if ( .sound == 3 ) soundeffect .@streakname$[0],0;
}
set @dota_multikills, @dota_multikills + 1;
deltimer "DOTAPVP::OnStreakReset";
addtimer 11500,"DOTAPVP::OnStreakReset";
if ( getcharid(2) ) {
set .@sideid, getcharid(2);
if ( .@sideid != .@killedgroup ) {
if ( query_sql("select currentown, highestown from ownladder where guild_id = "+ getcharid(2), .@currentown, .@highestown) ) {
set .@currentown, .@currentown + 1;
query_sql "update ownladder set currentown = "+ .@currentown +" where guild_id = "+ getcharid(2);
if ( .@currentown > .@highestown ) {
query_sql "update ownladder set highestown = "+ .@currentown +" where guild_id = "+ getcharid(2);
query_sql "update ownladder set owntime = now() where guild_id = "+ getcharid(2);
}
} else
query_sql "insert into ownladder ( guild_id, name, currentown, highestown ) values ( "+ getcharid(2) +", '"+ strcharinfo(2) +"', 1 , 1 )";
}
}
set .@dota_multikills, @dota_multikills;
set .@origin, getcharid(3);
sleep 1500;
if ( .@sideid && .@sideid != .@killedgroup && .@currentown >= .owned && ( ( .@currentown - .owned ) % .owncontinue == 0 ) ) {
if ( .announce ) mapannounce .@map$, "The guild ["+ getguildname(.@sideid) +"] is OWNING["+ .@currentown +"] !!!",16;
else announce "The guild ["+ getguildname(.@sideid) +"] is OWNING["+ .@currentown +"] !!!",16;
if ( .sound == 1 ) soundeffectall "ownage.wav",0,.@map$;
else if ( .sound == 2 ) soundeffectall "ownage.wav",0;
else if ( .sound == 3 && attachrid(.@origin) ) soundeffect "ownage.wav",0;
}
sleep 1250;
if ( !attachrid(.@origin) ) end;
if ( .@dota_multikills == 2 ) {
if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a Double Kill !",16;
else announce strcharinfo(0) +" just got a Double Kill !",16;
if ( .sound == 1 ) soundeffectall "doublekill.wav",0,.@map$;
else if ( .sound == 2 ) soundeffectall "doublekill.wav",0;
else if ( .sound == 3 ) soundeffect "doublekill.wav",0;
}
else if ( .@dota_multikills >= 3 ) {
if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a TRIPLE KILL !!!!!!",16;
else announce strcharinfo(0) +" just got a TRIPLE KILL !!!!!!",16;
if ( .sound == 1 ) soundeffectall "triplekill.wav",0,.@map$;
else if ( .sound == 2 ) soundeffectall "triplekill.wav",0;
else if ( .sound == 3 ) soundeffect "triplekill.wav",0;
}
end;
OnWhisperGlobal:
dispbottom "Ваша текущяя полоса : "+ @PlayersKilledStreak;
if ( query_sql("select kills from pvpladder where char_id = "+ getcharid(0), .@kills) )
dispbottom "Текущие убийства : "+ .@kills;
else
dispbottom "Тебя еще нет в пвп рейтинге!";
if ( !getcharid(2) ) end;
if ( query_sql("select currentown from ownladder where guild_id = "+ getcharid(2), .@currentown) )
dispbottom "Собственная гильдия : "+ .@currentown;
else
dispbottom "Гильдии еще нет в пвп рейтинге!";
end;
OnStreakReset:
set @dota_multikills,0;
end;
}

prontera,164,196,3 script PvP-StatsViewer 857,{
do {
deletearray .@name$, 128;
deletearray .@kills, 128;
deletearray .@deaths, 128;
deletearray .@streak, 128;
deletearray .@owned, 128;
deletearray .@time$, 128;
set .@gid, 0;
set .@cid, 0;
set .@currentown, 0;
mes "[Доска Славы]";
mes "Привет тебе,славный "+ strcharinfo(0) +"...";
mes "Хочешь посмотреть на особо отличшившихся на арене?.";
if ( getgmlevel() >= .min_gm_menu ) mes "И опция Гм'а для вас.";
next;
if ( getgmlevel() >= .min_gm_menu )
select "Топ 20 Киллеров","Самые Бешенные","Самые опасные Гильдии","Твой статус","Обьяснение","Сбросить таблицу","Изменить ценность";
else
select "Топ 20 Киллеров","Самые Бешенные","Самые опасные Гильдии","Твой статус","Обьяснение";
switch (@menu) {
case 1:
query_sql "select name, kills, deaths from pvpladder order by kills desc limit "+ .showtotal, .@name$, .@kills, .@deaths;
if ( !getarraysize(.@name$) ) {
mes "[Доска Славы]";
mes "Пока тут пусто.";
next;
}
for ( set .@j,0; .@j < getarraysize(.@name$); set .@j, .@j + .showpage ) {
mes "[Доска Славы]";
for ( set .@i, .@j; .@i < (.showpage + .@j) && .@i < getarraysize(.@name$); set .@i, .@i + 1 ) {
mes "^996600"+ (.@i+1) +": ^006699"+ .@name$[.@i] +" ^00AA00["+ .@kills[.@i] +"] ^FF0000<"+ .@deaths[.@i] +">^000000";
}
next;
}
break;
case 2:
query_sql "select name, streaks, date_format(streaktime,'%a %e/%c/%y %r') from pvpladder where streaks >= "+ .loweststreak +" order by streaks desc limit "+ .showtotal, .@name$, .@streak, .@time$;
if ( !getarraysize(.@name$) ) {
mes "[Доска Славы]";
mes "Пока тут пусто.";
next;
}
for ( set .@j,0; .@j < getarraysize(.@name$); set .@j, .@j + .showpage ) {
mes "[Доска Славы]";
for ( set .@i, .@j; .@i < (.showpage + .@j) && .@i < getarraysize(.@name$); set .@i, .@i + 1 ) {
mes "^996600"+ (.@i+1) +": ^006699"+ .@name$[.@i] +" ^70AC11{"+ .@streak[.@i] +"} ^000000on :";
mes " ^EE8800"+ .@time$[.@i] +"^000000";
}
next;
}
break;
case 3:
query_sql "select name, highestown, date_format(owntime,'%a %e/%c/%y %r') from ownladder where highestown >= "+ .lowestownage +" order by highestown desc limit "+ .showtotal, .@name$, .@owned, .@time$;
if ( !getarraysize(.@name$) ) {
mes "[Доска Славы]";
mes "Пока тут пусто.";
next;
}
for ( set .@j,0; .@j < getarraysize(.@name$); set .@j, .@j + .showpage ) {
mes "[Доска Славыr]";
for ( set .@i, .@j; .@i < (.showpage + .@j) && .@i < getarraysize(.@name$); set .@i, .@i + 1 ) {
mes "^996600"+ (.@i+1) +": ^006699"+ .@name$[.@i] +" ^00AAAA("+ .@owned[.@i] +") ^000000on :";
mes " ^EE8800"+ .@time$[.@i] +"^000000";
}
next;
}
break;
case 4:
query_sql "select char_id, streaks, kills, deaths, date_format(streaktime,'%a %e/%c/%y %r') from pvpladder where char_id = "+ getcharid(0), .@cid, .@streak, .@kills, .@deaths, .@time$;
mes "[Доска Славы]";
if ( !.@cid && !@PlayersKilledStreak )
mes "Пока что ты мирный,и никого не убил!";
else {
mes "Твой счет : ^70AC11{"+ @PlayersKilledStreak +"}^000000";
mes "Твои фраги : ^00AA00["+ .@kills +"]^000000";
mes "Твои смерти : ^FF0000<"+ .@deaths +">^000000";
mes "Лучший день на арене это ^70AC11{"+ .@streak +"}^000000 on :";
mes " ^EE8800"+ .@time$ +"^000000";
set .@streak, 0;
set .@kills, 0;
set .@deaths, 0;
set .@time$, "";
}
next;
if ( getcharid(2) ) {
mes "[Доска Славы]";
query_sql "select guild_id, currentown, highestown, date_format(owntime,'%a %e/%c/%y %r') from ownladder where guild_id = "+ getcharid(2), .@gid, .@currentown, .@owned, .@time$;
if ( !.@gid )
mes "У тебя мирная гильдия, исправь это скорее!";
else {
mes "Название твоей Гильдии : ^006699"+ strcharinfo(2) +"^000000";
mes "Текущий счет : ^00AAAA("+ .@currentown +")^000000";
mes "Самый лучший день для твоей Гильдии ^00AAAA("+ .@owned + ")^000000 on :";
mes " ^EE8800"+ .@time$ +"^000000";
}
next;
}
break;
case 5:
mes "[Доска Славы]";
mes "Как формируется Топ 20 Киллеров:";
mes " ";
mes "^996600Ранг. ^006699ИМЯ ^00AA00[Всего фрагов] ^FF0000<Смерти>^000000";
mes " ";
mes "--------------------------------";
mes " ";
mes "^00AA00Фраги^000000 Появляются когда ты кого то убиваешь.";
mes " ";
mes "^FF0000Смерти^000000 Появляются, когда тебя убивает другой игрок,или ты,в стиле эмо, убиваешь сам себя (типо Гранд Кросс).";
mes " ";
mes "Тебя убил моб, пет?Не беда, эти смерти не идут в зачет ТОП 20.";
next;
mes "[Доска Славы]";
mes "Как составляется рейтинг Самых Бешенных:";
mes " ";
mes "^996600Ранг. ^006699ИМЯ ^70AC11{Сколько фрагов за раз} ^000000on :";
mes " ^EE8800TIME^000000";
mes " ";
mes "--------------------------------";
mes " ";
mes "^70AC11Фраги^000000 Добавляются каждый раз, когда ты кого то убиваешь,и накапливаются, пока тебя не убивают, или пока ты не идешь путем эмо (типо Сакрифайс).";
mes " ";
mes "Кто больше всех убьет за раз- тот и попадает в наш Зал Почета.Запись о твоем подвиге навечно останется на этой доске";
mes " ";
mes "Опять же, если умираешь от моба, пета или гома- рейтинг не сбрасывается.";
mes " ";
mes "--------------------------------";
mes " ";
mes "Чем больше наберешь нижепреведенных рейтингов, тем больше шанс навсегда остаться в памяти нашего сервера :";
mes "^70AC11"+ getvariableofnpc(.killingspree,"DOTAPVP") +"^000000 : Killing Spree";
mes "^70AC11"+ getvariableofnpc(.dominating,"DOTAPVP") +"^000000 : Dominating";
mes "^70AC11"+ getvariableofnpc(.megakill,"DOTAPVP") +"^000000 : Mega Kill";
mes "^70AC11"+ getvariableofnpc(.unstoppable,"DOTAPVP") +"^000000 : Unstoppable";
mes "^70AC11"+ getvariableofnpc(.wickedsick,"DOTAPVP") +"^000000 : Wicked Sick";
mes "^70AC11"+ getvariableofnpc(.monsterkill,"DOTAPVP") +"^000000 : Monster Kill";
mes "^70AC11"+ getvariableofnpc(.godlike,"DOTAPVP") +"^000000 : Godlike";
mes "^70AC11"+ getvariableofnpc(.holyshit,"DOTAPVP") +"^000000 : Beyond Godlike";
next;
mes "[Доска Славы]";
mes "Как формируется рейтинг Самых опасных Гильдей:";
mes " ";
mes "^996600Ранг. ^006699ИМЯ ^00AAAA(Опасность Гильдии) :";
mes " ^EE8800Время^000000";
mes " ";
mes "--------------------------------";
mes " ";
mes "^00AAAAОпасность^000000 набирается так: сколько игроков других гильдий убивают игроки одной гильдии,столько и фрагов пишется на счет этой гильдии.Рейтинг останавливается когда на арене умирают все представители Гильдии.";
mes " ";
mes "Потом на доске пишется ^EE8800Время^000000 когда гильдия набрала максимальную опасность.";
mes " ";
mes "Опасность не исчезнет даже после рестарта сервера! Ваша гильдия навеки вписывается в наш рейтинг Самых опасных Гильдий сервера";
mes " ";
mes "Сметрь от руки/лапы/хвост/зубов и тп моба/гома/пета в счет рейтинга не идет.";
next;
if ( getvariableofnpc(.lvltokill,"DOTAPVP") ) {
mes "[Доска Славы]";
mes "Ты должен убить чара с синимальным левелом "+ getvariableofnpc(.lvltokill,"DOTAPVP") +", чтобы попасть в наш топ!!!.";
mes " ";
mes "Новис 1 лвл может убить чара 99 лвл и попасть в рейтинг.";
mes "Однако чару 99 лвл убийство новиса 1 лвл в счет фрагов не идет.";
next;
}
if ( getvariableofnpc(.counttopunish,"DOTAPVP") ) {
mes "[Доска Славы]";
mes "Некоторые нубы пытаются убить одного и того же чара для того чтобы попасть в ТОП 20.";
mes "Но бойся всевидящего ГМА! Все твои действия записываются, а за подобный нагон пвп рейтинг игроку присуждается бан на срок неделя/месяц.";
next;
}
if ( getvariableofnpc(.minlvlrange,"DOTAPVP") ) {
mes "[Доска Славы]";
mes "Минимальная разница в лвл между тобой и убитым тобой персом "+ getvariableofnpc(.minlvlrange,"DOTAPVP") +".";
mes " ";
if ( getvariableofnpc(.minlvlrange,"DOTAPVP") >= 200)
mes "Другими словами, если твой лвл 500, лвл убитого тобой не должен быть меньше "+( 500 - getvariableofnpc(.minlvlrange,"DOTAPVP") )+" тогда ты получишь + в ТОП 20.";
else if ( getvariableofnpc(.minlvlrange,"DOTAPVP") >= 70)
mes "Другими словами, если твой лвл 255, лвл убитого тобой игрока должн быть минимум "+( 255 - getvariableofnpc(.minlvlrange,"DOTAPVP") )+" тогда ты получишь + в ТОП 20.";
else
mes "Другими словами, если твой лвл 99, лвл убитого тобой игрока должн быть минимум "+( 99 - getvariableofnpc(.minlvlrange,"DOTAPVP") )+" тогда ты получишь + в ТОП 20.";
mes "Игрок,убивший чара с меньшим лвл не получает рейтинга. И наоборот, чар с меньшим лвл, убив игрока с большим лвл получает + в ТОП 20.";
next;
}
break;
case 6:
if ( getgmlevel() < .min_gm_menu ) break;
mes "[Доска Славы]";
mes "Что резетнуть? ?";
next;
switch( select("Всё","Пвп рейтинг","Гильд рейтинг","Нет") ) {
case 1:
mes "[Доска Славы]";
mes "Вы в этом уверены ?";
next;
if ( select("Нет:Да") == 1 ) break;
query_sql "delete from pvpladder";
query_sql "delete from ownladder";
mes "[Доска Славы]";
mes "Таблица рейтинга сброшена.";
next;
break;
case 2:
case 3:
set .@menu, @menu;
mes "[Доска Славы]";
mes "Вы уверены что хотите сбросить "+( (.@menu ==2)?"PVP":"Ownage" )+" рейтинг ?";
next;
if ( select("Нет:Да") == 1 ) break;
query_sql "delete from "+( (.@menu ==2)?"pvp":"own" )+"ladder";
mes "[Доска Славы]";
mes "Рейтинг сброшен.";
next;
break;
default:
}
break;
case 7:
if ( getgmlevel() < .min_gm_menu ) break;
mes "[Доска Славы]";
mes "Что бы вы хотели изменить?";
next;
switch( select ("Пвп рейтинг","Гильд рейтинг","Назад") ) {
if ( @menu == 3 ) break;
mes "[Доска Славы]";
mes "Выберите входной тип:";
next;
case 1:
if ( select("Ид чара","Ник","Ид акка") != 3) {
if ( @menu == 1 )
input .@id;
else
input .@id$;
mes "[Доска Славы]";
query_sql "select char_id from `char` where "+( (@menu ==1)?("char_id = "+ .@id):("name = '"+ escape_sql(.@id$) +"'") ), .@cid;
if ( !.@cid ) {
mes "Нет такого чара.";
next;
break;
} else
set .@cid, 0;
query_sql "select char_id, name, streaks, kills, deaths, date_format(streaktime,'%a %e/%c/%y %r') from pvpladder where "+( (@menu ==1)?("char_id = "+ .@id):("name = '"+ escape_sql(.@id$) +"'") ), .@cid, .@name$, .@streak, .@kills, .@deaths, .@time$;
if ( !.@cid ) {
mes "Этого игрока нет в таблице.";
next;
break;
}
} else {
input .@id;
query_sql "select char_id, name, char_num from `char` where account_id = "+ .@id +" order by char_num asc", .@cid, .@name$, .@gid;
if ( !.@cid ) {
mes "Неверный аккаунт ид.";
next;
break;
}
mes "[Доска Славы]";
for ( set .@i,0; .@i < getarraysize(.@cid); set .@i, .@i + 1 )
mes (.@gid[.@i] +1) +". "+ .@cid[.@i] +" "+ .@name$[.@i];
set .@menu$, (.@gid[.@i] +1) +". "+ .@cid;
for ( set .@i,1; .@i < getarraysize(.@cid); set .@i, .@i + 1 )
set .@menu$, .@menu$ +":"+ .@gid[.@i] +". "+ .@cid[.@i];
next;
select .@menu$;
mes "[Доска Славы]";
set .@id, .@cid[@menu-1];
deletearray .@cid, 9;
query_sql "select char_id, name, streaks, kills, deaths, date_format(streaktime,'%a %e/%c/%y %r') from pvpladder where char_id = "+ .@id, .@cid, .@name$, .@streak, .@kills, .@deaths, .@time$;
if ( !.@cid ) {
mes "Этого игрока нет в таблице.";
next;
break;
}
}
mes "Ид игрока : ^006699"+ .@cid +"^000000";
mes "Ник : ^006699"+ .@name$ +"^000000";
mes "Убийства : ^00AA00["+ .@kills +"]^000000";
mes "Смерти : ^FF0000<"+ .@deaths +">^000000";
mes "Самая высокая полоса была ^70AC11{"+ .@streak +"}^000000 on :";
mes " ^EE8800"+ .@time$ +"^000000";
next;
switch( select("Total Kills","Death Counts","Highest Streak & Highest Streak Time","Name") ) {
case 1:
setarray .@time$,"Total Kills",".@kills","kills","";
break;
case 2:
setarray .@time$,"Death Counts",".@deaths","deaths","";
break;
case 3:
setarray .@time$,"Highest Streak",".@streak","streaks","1";
default:
}
if ( @menu < 4 ) {
input .@num;
mes "[Доска Славы]";
mes "Действительно изменить "+ .@name$ +"'s";
mes .@time$[0] +" from "+ getd(.@time$[1]) +" to "+ .@num +" ?";
if ( .@num >= getd(.@time$[1]) && .@time$[3] == "1" ) mes "and set Highest Streak Time to current time?";
next;
if ( select("Нет:Да") == 1 ) break;
input .@num;
mes "[Доска Славы]";
query_sql "update pvpladder set "+ .@time$[2] +" = "+ .@num +" where char_id = "+ .@cid;
if ( .@num >= getd(.@time$[1]) && .@time$[3] == "1" ) query_sql "update pvpladder set streaktime = now()";
mes "The "+ .@time$[0] +" for";
mes .@name$ +" has set to "+ .@num;
if ( .@num >= getd(.@time$[1]) && .@time$[3] == "1" ) mes "and the Highest Streak Time set to current time";
next;
break;
} else {
input .@num;
mes "[Доска Славы]";
mes "Регенерация имени :";
mes .@name$ +" ......";
mes " ";
query_sql "select `char`.name, pvpladder.name from `char` right join pvpladder on `char`.char_id = pvpladder.char_id where `char`.char_id = "+ .@cid, .@cid1$, .@cid2$;
if ( .@cid1$ == "" )
mes "Персонаж удалён, так что больше не может быть изменен.";
else if ( .@cid1$ == .@cid2$ )
mes "Имя тоже самое, так что его изменить вы больше не сможете.";
else {
query_sql "update pvpladder set name = '"+ escape_sql(.@cid1$) +"' where char_id = "+ .@cid;
mes "Теперь это звонило : "+ .@cid1$;
}
set .@cid1$, "";
set .@cid2$, "";
next;
}
break;
case 2:
select "Ид гильдии","Название Ги";
if ( @menu == 1 )
input .@id;
else
input .@id$;
mes "[Доска Славы]";
query_sql "select guild_id from guild where "+( (@menu ==1)?("guild_id = "+ .@id):("name = '"+ escape_sql(.@id$) +"'") ), .@gid;
if ( !.@gid ) {
mes "Нет такой Ги.";
next;
break;
} else
set .@gid, 0;
query_sql "select guild_id, name, currentown, highestown, date_format(owntime,'%a %e/%c/%y %r') from ownladder where "+( (@menu ==1)?("guild_id = "+ .@id):("name = '"+ escape_sql(.@id$) +"'") ), .@gid, .@name$, .@currentown, .@owned, .@time$;
if ( !.@gid ) {
mes "Этой Ги нет в таблице.";
next;
break;
}
mes "Ид Ги : ^006699"+ .@gid +"^000000";
mes "Название : ^006699"+ .@name$ +"^000000";
mes "Текущий рейтинг : ^00AAAA("+ .@currentown +")^000000";
mes "Самый длинный кил был ^00AAAA("+ .@owned +")^000000 on :";
mes " ^EE8800"+ .@time$ +"^000000";
next;
switch( select("Current Owning","Longest Ownage & Longest Ownage Time","Name") ) {
case 1:
setarray .@time$,"Current Owning",".@currentown","currentown","";
break;
case 2:
setarray .@time$,"Highest Ownage",".@owned","highestown","1";
default:
}
if ( @menu < 3 ) {
input .@num;
mes "[Доска Славы]";
mes "Действильно изменить "+ .@name$ +"'s";
mes .@time$[0] +" from "+ getd(.@time$[1]) +" to "+ .@num +" ?";
if ( .@num >= getd(.@time$[1]) && .@time$[3] == "1" ) mes "and set Longest Ownage Time to current time?";
next;
if ( select("Нет:Да") == 1 ) break;
mes "[Доска Славы]";
query_sql "update ownladder set "+ .@time$[2] +" = "+ .@num +" where guild_id = "+ .@gid;
if ( .@num >= getd(.@time$[1]) && .@time$[3] == "1" ) query_sql "update ownladder set owntime = now()";
mes "The "+ .@time$[0] +" for";
mes .@name$ +" guild has set to "+ .@num;
if ( .@num >= getd(.@time$[1]) && .@time$[3] == "1" ) mes "and the Longest Ownage Time set to current time";
next;
break;
} else {
mes "[Доска Славы]";
mes "Регенерация название Ги :";
mes .@name$ +" ......";
mes " ";
query_sql "select guild.name, ownladder.name from guild right join ownladder on guild.guild_id = ownladder.guild_id where guild.guild_id = "+ .@gid, .@gid1$, .@gid2$;
if ( .@gid1$ == "" )
mes "Гильдия удалена, так что не может быть изменена больше.";
else if ( .@gid1$ == .@gid2$ )
mes "Название это тоже самое, так что нельзя его изменять.";
else {
query_sql "update ownladder set name = '"+ escape_sql(.@gid1$) +"' where guild_id = "+ .@gid;
mes "Теперь это звонило : "+ .@gid1$;
}
set .@gid1$, "";
set .@gid2$, "";
next;
}
default:
}
default:
}
} while (1);
}

Автор: 879546: Дата: 01.21.2010

Цитата [OneLife];18998:
Вроде бы то, что просите:

//===== eAthena Script ================================================== =====
//= PVP ladder script ( SQL only )
//===== By: ================================================== ================
//= ~AnnieRuru~
//===== Current Version: ================================================== ===
//= 2.5
//===== Compatible With: ================================================== ===
//= eAthena SQL 12068, with MySQL 5
//===== Description: ================================================== =======
//= PVP ladder store in SQL table
//= with a lot configurations, and anti-sit-killer feature
//= http://www.eathena.ws/board/index.php?showtopic=177918
//================================================== ==========================
- script DOTAPVP -1,{
OnInit:
// Config
set .sound, 1; // soundeffect : 0 - disable, 1 - soundeffect on map, 2 - soundeffect to server/global, 3 - soundeffect to self only
set .announce, 1; // announce to : 0 - global, 1 - map
set .announcemap, 1; // announce the map name in the announcement ? : 0 - off, 1 - on

set .announcekill, 1; // announce who pawn who's head : 0 - off, 1 - on
set .msg_die, 1; // show message who kill you when die : 0 - off, 1 - on
set .msg_kill, 1; // show message you kill who when killed someone : 0 - off, 1 - on

set .gmnokill, 0; // GMs are not suppose to kill players. A GM with level or higher will do nothing. IF set to 60, GM60 and above kill any player will not get anything : 0 - off

set .killingspree, 3;
set .dominating, 4;
set .megakill, 5;
set .unstoppable, 6;
set .wickedsick, 7;
set .monsterkill, 8;
set .godlike, 9;
set .holyshit, 10;
set .continue, 1; // after beyond-godlike, every kills will make announcement again

set .owned, 5; // how many times the party/guild has to kill to announce ownage
set .owncontinue, 1; // after ownage, every party/guild cumulative kills will make ownage announce again

set getvariableofnpc(.min_gm_menu,"PvP-StatsViewer"), 99; // minimum level of GM can use the GM menu on ladder npc

set getvariableofnpc(.showtotal,"PvP-StatsViewer"), 20; // show the length of ladder. Note : Maximum value = 128
set getvariableofnpc(.showpage,"PvP-StatsViewer"), 10; // set the views per page. Note : Maximum value = 128
set getvariableofnpc(.loweststreak,"PvP-StatsViewer"), 3; // mininum streak count allow to show in highest streak ladder. Default 3 means must at least have killing spree streak to display in ladder
set getvariableofnpc(.lowestownage,"PvP-StatsViewer"), 5; // mininum ownage count allow to show in longest ownage ladder. Default 5 means must at least have 5 ownage counts to display in ladder

// *NEW* anti-sit-killer system
// a player must kill another player with this minimum base level to get the announcement and in the ladder.
// Otherwise only have streak ended announcement and killed player's streak reset.
// Its possible for a level 1 novice to kill a level 99 player and he/she will still get in the ladder
// but a level 99 kill a level 1 player will get nothing
// 0 - off this system ( default is 55, pk setting )
set .lvltokill, 90;

// when a player kill another same player times in a row, the player is warp back to save point.
// and the player's streak, kills, and ownage count will deduct accordingly
// 0 - off this system
set .counttopunish, 6;

// minimum level range to kill another player
// eg. when set to 20, player level 99 needs to kill another player with minimum level of 79 to get announcement and increase the kill rank.
// but a player with base level 50 kills a level 99 will also get the announcement
// higher base level cannot kill lower level, but lower level can kill higher level
// 0 - off this system
set .minlvlrange, 10;


// Config ends ------------------------------------------------------------------------------------------

// to prevent bug happen
if ( .announce < 0 || .announce > 1 ) set .announce, 0;
if ( .continue < 1 ) set .continue, 1;
if ( .owncontinue < 1 ) set .owncontinue, 1;
if ( .gmnokill <= 0 ) set .gmnokill, 100;
if ( .lvltokill <= 1 ) set .lvltokill, 0;
if ( .counttopunish <= 1 ) set .counttopunish, 0;
end;

// script start
OnPCKillEvent:
if ( getgmlevel() >= .gmnokill ) end;
getmapxy .@map$,.@x,.@y,0;
if ( !attachrid(killedrid) ) end;
if ( killerrid != getcharid(3) && ( .msg_die || .msg_kill ) ) {
if ( .msg_die ) message strcharinfo(0),"Вы были убиты "+ rid2name(killerrid);
if ( .msg_kill ) message rid2name(killerrid),"Ты только что убил "+ strcharinfo(0);
}
if ( @PlayersKilledStreak >= .holyshit )
set .@streakname$,"Beyond Godlike";
else if ( @PlayersKilledStreak >= .godlike )
set .@streakname$,"Godlike";
else if ( @PlayersKilledStreak >= .monsterkill )
set .@streakname$,"Monster Kill";
else if ( @PlayersKilledStreak >= .wickedsick )
set .@streakname$,"Wicked Sick";
else if ( @PlayersKilledStreak >= .unstoppable )
set .@streakname$,"Unstoppable";
else if ( @PlayersKilledStreak >= .megakill )
set .@streakname$,"Mega-kill";
else if ( @PlayersKilledStreak >= .dominating )
set .@streakname$,"Dominating";
else if ( @PlayersKilledStreak >= .killingspree )
set .@streakname$,"Killing Spree";
if ( @PlayersKilledStreak >= .killingspree && killerrid == getcharid(3) )
announce strcharinfo(0) +" has ended "+( (sex)?"him":"her" )+" own "+ .@streakname$ +"["+ @PlayersKilledStreak +"] streak "+( (.announcemap)?("at "+ .@map$):""),16|.announce;
else if ( @PlayersKilledStreak >= .killingspree )
announce rid2name(killerrid) +" has ended "+ strcharinfo(0) +"'s "+ .@streakname$ +"["+ @PlayersKilledStreak +"] streak "+( (.announcemap)?("at "+ .@map$):""),16|.announce;
else if ( .announcekill )
announce rid2name(killerrid) +" has pawned "+ strcharinfo(0) +"'s head "+( (.announcemap)?("at "+ .@map$):""),16|.announce;
set @PlayersKilledStreak,0;
if ( query_sql("select char_id from pvpladder where char_id = "+ getcharid(0), .@d_cid ) )
query_sql "update pvpladder set deaths = deaths + 1 where char_id = "+ getcharid(0);
set @dota_multikills,0;
if ( getcharid(2) ) {
if ( query_sql("select guild_id from ownladder where guild_id = "+ getcharid(2), .@d_gid ) )
query_sql "update ownladder set currentown = 0 where guild_id = "+ getcharid(2);
set .@killedgroup, getcharid(2);
}
if ( killerrid == getcharid(3) || baselevel < .lvltokill ) end;
if ( .minlvlrange ) set .@killedlvl, baselevel;
if ( !attachrid(killerrid) ) end;
if ( .minlvlrange && .@killedlvl + .minlvlrange < baselevel ) end;
if ( .counttopunish ) {
for ( set .@i,0; .@i < 60; set .@i, .@i +1 ) {
if ( .@i == gettime(2) ) continue;
deletearray getd("@sitkillid"+ .@i), 128;
deletearray getd("@sitkilltimes"+ .@i), 128;
}
if ( !getarraysize( getd("@sitkillid"+ gettime(2)) ) ) {
setd "@sitkillid"+ gettime(2) +"[0]", killedrid;
setd "@sitkilltimes"+ gettime(2) +"[0]", 1;
} else {
for ( set .@i,0; .@i < getarraysize( getd("@sitkillid"+ gettime(2)) ); set .@i, .@i +1 ) {
if ( getd("@sitkillid"+ gettime(2) +"["+ .@i +"]") != killedrid )
continue;
else {
setd "@sitkilltimes"+ gettime(2) +"["+ .@i +"]", getd("@sitkilltimes"+ gettime(2) +"["+ .@i +"]") +1;
if ( getd("@sitkilltimes"+ gettime(2) +"["+ .@i +"]") >= .counttopunish ) {
warp "SavePoint",0,0;
announce strcharinfo(0) +" , Stop killing "+ rid2name(killedrid) + " !!!",0;
logmes "is sit-killing "+ rid2name(killedrid) +" for "+ getd("@sitkilltimes"+ gettime(2) +"["+ .@i +"]") +" times";
query_sql "update pvpladder set kills = kills - "+ ( .counttopunish -1 ) +" where char_id = "+ getcharid(0);
query_sql "select streaks from pvpladder where char_id = "+ getcharid(0), .@streak;
if ( @PlayersKilledStreak == .@streak )
query_sql "update pvpladder set streaks = "+( @PlayersKilledStreak +1 - .counttopunish )+" where char_id = "+ getcharid(0);
set @PlayersKilledStreak, @PlayersKilledStreak +1 - .counttopunish;
if ( getcharid(2) ) {
query_sql "select currentown, highestown from ownladder where guild_id = "+ getcharid(2), .@currentown, .@highestown;
query_sql "update ownladder set currentown = currentown - "+ ( .counttopunish -1 ) +" where guild_id = "+ getcharid(2);
if ( .@currentown == .@highestown )
query_sql "update ownladder set highestown = currentown where guild_id = "+ getcharid(2);
}
end;
}
}
}
}
}
set @PlayersKilledStreak, @PlayersKilledStreak + 1;
if ( query_sql("select streaks from pvpladder where char_id = "+ getcharid(0), .@streaks) )
query_sql "update pvpladder set kills = kills + 1 where char_id = "+ getcharid(0);
else
query_sql "insert into pvpladder ( char_id, name, kills , streaktime ) values ( "+ getcharid(0) +", '"+ strcharinfo(0) +"', 1, now() )";
if ( @PlayersKilledStreak > .@streaks ) {
query_sql "update pvpladder set streaks = "+ @PlayersKilledStreak +" where char_id = "+ getcharid(0);
query_sql "update pvpladder set streaktime = now() where char_id = "+ getcharid(0);
}
if ( @PlayersKilledStreak == .killingspree )
setarray .@streakname$,"killingspree.wav","is on a KILLING SPREE",".";
else if ( @PlayersKilledStreak == .dominating )
setarray .@streakname$,"dominating.wav","is DOMINATING!",".";
else if ( @PlayersKilledStreak == .megakill )
setarray .@streakname$,"megakill.wav","has a MEGA-Kill!",".";
else if ( @PlayersKilledStreak == .unstoppable )
setarray .@streakname$,"unstoppable.wav","is UNSTOPPABLE!",".";
else if ( @PlayersKilledStreak == .wickedsick )
setarray .@streakname$,"wickedsick.wav","is WICKED SICK!",".";
else if ( @PlayersKilledStreak == .monsterkill )
setarray .@streakname$,"monsterkill.wav","has a MONSTER Kill!",".";
else if ( @PlayersKilledStreak == .godlike )
setarray .@streakname$,"godlike.wav","is GODLIKE!",". Will someone ever stop "+( (sex)?"him":"her" ) +"?";
else if ( @PlayersKilledStreak >= .holyshit && ( (@PlayersKilledStreak - .holyshit) % .continue == 0 ) )
setarray .@streakname$,"holyshit.wav","is BEYOND GODLIKE!",". Someone kill "+( (sex)?"him":"her" ) +"!";
if ( .@streakname$[1] != "" ) {
announce strcharinfo(0) +" "+ .@streakname$[1] +"["+ @PlayersKilledStreak +"] "+( (.announcemap)?("at "+ .@map$):"") + .@streakname$[2],16|.announce;
if ( .sound == 1 ) soundeffectall .@streakname$[0],0,.@map$;
else if ( .sound == 2 ) soundeffectall .@streakname$[0],0;
else if ( .sound == 3 ) soundeffect .@streakname$[0],0;
}
set @dota_multikills, @dota_multikills + 1;
deltimer "DOTAPVP::OnStreakReset";
addtimer 11500,"DOTAPVP::OnStreakReset";
if ( getcharid(2) ) {
set .@sideid, getcharid(2);
if ( .@sideid != .@killedgroup ) {
if ( query_sql("select currentown, highestown from ownladder where guild_id = "+ getcharid(2), .@currentown, .@highestown) ) {
set .@currentown, .@currentown + 1;
query_sql "update ownladder set currentown = "+ .@currentown +" where guild_id = "+ getcharid(2);
if ( .@currentown > .@highestown ) {
query_sql "update ownladder set highestown = "+ .@currentown +" where guild_id = "+ getcharid(2);
query_sql "update ownladder set owntime = now() where guild_id = "+ getcharid(2);
}
} else
query_sql "insert into ownladder ( guild_id, name, currentown, highestown ) values ( "+ getcharid(2) +", '"+ strcharinfo(2) +"', 1 , 1 )";
}
}
set .@dota_multikills, @dota_multikills;
set .@origin, getcharid(3);
sleep 1500;
if ( .@sideid && .@sideid != .@killedgroup && .@currentown >= .owned && ( ( .@currentown - .owned ) % .owncontinue == 0 ) ) {
if ( .announce ) mapannounce .@map$, "The guild ["+ getguildname(.@sideid) +"] is OWNING["+ .@currentown +"] !!!",16;
else announce "The guild ["+ getguildname(.@sideid) +"] is OWNING["+ .@currentown +"] !!!",16;
if ( .sound == 1 ) soundeffectall "ownage.wav",0,.@map$;
else if ( .sound == 2 ) soundeffectall "ownage.wav",0;
else if ( .sound == 3 && attachrid(.@origin) ) soundeffect "ownage.wav",0;
}
sleep 1250;
if ( !attachrid(.@origin) ) end;
if ( .@dota_multikills == 2 ) {
if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a Double Kill !",16;
else announce strcharinfo(0) +" just got a Double Kill !",16;
if ( .sound == 1 ) soundeffectall "doublekill.wav",0,.@map$;
else if ( .sound == 2 ) soundeffectall "doublekill.wav",0;
else if ( .sound == 3 ) soundeffect "doublekill.wav",0;
}
else if ( .@dota_multikills >= 3 ) {
if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a TRIPLE KILL !!!!!!",16;
else announce strcharinfo(0) +" just got a TRIPLE KILL !!!!!!",16;
if ( .sound == 1 ) soundeffectall "triplekill.wav",0,.@map$;
else if ( .sound == 2 ) soundeffectall "triplekill.wav",0;
else if ( .sound == 3 ) soundeffect "triplekill.wav",0;
}
end;
OnWhisperGlobal:
dispbottom "Ваша текущяя полоса : "+ @PlayersKilledStreak;
if ( query_sql("select kills from pvpladder where char_id = "+ getcharid(0), .@kills) )
dispbottom "Текущие убийства : "+ .@kills;
else
dispbottom "Тебя еще нет в пвп рейтинге!";
if ( !getcharid(2) ) end;
if ( query_sql("select currentown from ownladder where guild_id = "+ getcharid(2), .@currentown) )
dispbottom "Собственная гильдия : "+ .@currentown;
else
dispbottom "Гильдии еще нет в пвп рейтинге!";
end;
OnStreakReset:
set @dota_multikills,0;
end;
}

prontera,164,196,3 script PvP-StatsViewer 857,{
do {
deletearray .@name$, 128;
deletearray .@kills, 128;
deletearray .@deaths, 128;
deletearray .@streak, 128;
deletearray .@owned, 128;
deletearray .@time$, 128;
set .@gid, 0;
set .@cid, 0;
set .@currentown, 0;
mes "[Доска Славы]";
mes "Привет тебе,славный "+ strcharinfo(0) +"...";
mes "Хочешь посмотреть на особо отличшившихся на арене?.";
if ( getgmlevel() >= .min_gm_menu ) mes "И опция Гм'а для вас.";
next;
if ( getgmlevel() >= .min_gm_menu )
select "Топ 20 Киллеров","Самые Бешенные","Самые опасные Гильдии","Твой статус","Обьяснение","Сбросить таблицу","Изменить ценность";
else
select "Топ 20 Киллеров","Самые Бешенные","Самые опасные Гильдии","Твой статус","Обьяснение";
switch (@menu) {
case 1:
query_sql "select name, kills, deaths from pvpladder order by kills desc limit "+ .showtotal, .@name$, .@kills, .@deaths;
if ( !getarraysize(.@name$) ) {
mes "[Доска Славы]";
mes "Пока тут пусто.";
next;
}
for ( set .@j,0; .@j < getarraysize(.@name$); set .@j, .@j + .showpage ) {
mes "[Доска Славы]";
for ( set .@i, .@j; .@i < (.showpage + .@j) && .@i < getarraysize(.@name$); set .@i, .@i + 1 ) {
mes "^996600"+ (.@i+1) +": ^006699"+ .@name$[.@i] +" ^00AA00["+ .@kills[.@i] +"] ^FF0000<"+ .@deaths[.@i] +">^000000";
}
next;
}
break;
case 2:
query_sql "select name, streaks, date_format(streaktime,'%a %e/%c/%y %r') from pvpladder where streaks >= "+ .loweststreak +" order by streaks desc limit "+ .showtotal, .@name$, .@streak, .@time$;
if ( !getarraysize(.@name$) ) {
mes "[Доска Славы]";
mes "Пока тут пусто.";
next;
}
for ( set .@j,0; .@j < getarraysize(.@name$); set .@j, .@j + .showpage ) {
mes "[Доска Славы]";
for ( set .@i, .@j; .@i < (.showpage + .@j) && .@i < getarraysize(.@name$); set .@i, .@i + 1 ) {
mes "^996600"+ (.@i+1) +": ^006699"+ .@name$[.@i] +" ^70AC11{"+ .@streak[.@i] +"} ^000000on :";
mes " ^EE8800"+ .@time$[.@i] +"^000000";
}
next;
}
break;
case 3:
query_sql "select name, highestown, date_format(owntime,'%a %e/%c/%y %r') from ownladder where highestown >= "+ .lowestownage +" order by highestown desc limit "+ .showtotal, .@name$, .@owned, .@time$;
if ( !getarraysize(.@name$) ) {
mes "[Доска Славы]";
mes "Пока тут пусто.";
next;
}
for ( set .@j,0; .@j < getarraysize(.@name$); set .@j, .@j + .showpage ) {
mes "[Доска Славыr]";
for ( set .@i, .@j; .@i < (.showpage + .@j) && .@i < getarraysize(.@name$); set .@i, .@i + 1 ) {
mes "^996600"+ (.@i+1) +": ^006699"+ .@name$[.@i] +" ^00AAAA("+ .@owned[.@i] +") ^000000on :";
mes " ^EE8800"+ .@time$[.@i] +"^000000";
}
next;
}
break;
case 4:
query_sql "select char_id, streaks, kills, deaths, date_format(streaktime,'%a %e/%c/%y %r') from pvpladder where char_id = "+ getcharid(0), .@cid, .@streak, .@kills, .@deaths, .@time$;
mes "[Доска Славы]";
if ( !.@cid && !@PlayersKilledStreak )
mes "Пока что ты мирный,и никого не убил!";
else {
mes "Твой счет : ^70AC11{"+ @PlayersKilledStreak +"}^000000";
mes "Твои фраги : ^00AA00["+ .@kills +"]^000000";
mes "Твои смерти : ^FF0000<"+ .@deaths +">^000000";
mes "Лучший день на арене это ^70AC11{"+ .@streak +"}^000000 on :";
mes " ^EE8800"+ .@time$ +"^000000";
set .@streak, 0;
set .@kills, 0;
set .@deaths, 0;
set .@time$, "";
}
next;
if ( getcharid(2) ) {
mes "[Доска Славы]";
query_sql "select guild_id, currentown, highestown, date_format(owntime,'%a %e/%c/%y %r') from ownladder where guild_id = "+ getcharid(2), .@gid, .@currentown, .@owned, .@time$;
if ( !.@gid )
mes "У тебя мирная гильдия, исправь это скорее!";
else {
mes "Название твоей Гильдии : ^006699"+ strcharinfo(2) +"^000000";
mes "Текущий счет : ^00AAAA("+ .@currentown +")^000000";
mes "Самый лучший день для твоей Гильдии ^00AAAA("+ .@owned + ")^000000 on :";
mes " ^EE8800"+ .@time$ +"^000000";
}
next;
}
break;
case 5:
mes "[Доска Славы]";
mes "Как формируется Топ 20 Киллеров:";
mes " ";
mes "^996600Ранг. ^006699ИМЯ ^00AA00[Всего фрагов] ^FF0000<Смерти>^000000";
mes " ";
mes "--------------------------------";
mes " ";
mes "^00AA00Фраги^000000 Появляются когда ты кого то убиваешь.";
mes " ";
mes "^FF0000Смерти^000000 Появляются, когда тебя убивает другой игрок,или ты,в стиле эмо, убиваешь сам себя (типо Гранд Кросс).";
mes " ";
mes "Тебя убил моб, пет?Не беда, эти смерти не идут в зачет ТОП 20.";
next;
mes "[Доска Славы]";
mes "Как составляется рейтинг Самых Бешенных:";
mes " ";
mes "^996600Ранг. ^006699ИМЯ ^70AC11{Сколько фрагов за раз} ^000000on :";
mes " ^EE8800TIME^000000";
mes " ";
mes "--------------------------------";
mes " ";
mes "^70AC11Фраги^000000 Добавляются каждый раз, когда ты кого то убиваешь,и накапливаются, пока тебя не убивают, или пока ты не идешь путем эмо (типо Сакрифайс).";
mes " ";
mes "Кто больше всех убьет за раз- тот и попадает в наш Зал Почета.Запись о твоем подвиге навечно останется на этой доске";
mes " ";
mes "Опять же, если умираешь от моба, пета или гома- рейтинг не сбрасывается.";
mes " ";
mes "--------------------------------";
mes " ";
mes "Чем больше наберешь нижепреведенных рейтингов, тем больше шанс навсегда остаться в памяти нашего сервера :";
mes "^70AC11"+ getvariableofnpc(.killingspree,"DOTAPVP") +"^000000 : Killing Spree";
mes "^70AC11"+ getvariableofnpc(.dominating,"DOTAPVP") +"^000000 : Dominating";
mes "^70AC11"+ getvariableofnpc(.megakill,"DOTAPVP") +"^000000 : Mega Kill";
mes "^70AC11"+ getvariableofnpc(.unstoppable,"DOTAPVP") +"^000000 : Unstoppable";
mes "^70AC11"+ getvariableofnpc(.wickedsick,"DOTAPVP") +"^000000 : Wicked Sick";
mes "^70AC11"+ getvariableofnpc(.monsterkill,"DOTAPVP") +"^000000 : Monster Kill";
mes "^70AC11"+ getvariableofnpc(.godlike,"DOTAPVP") +"^000000 : Godlike";
mes "^70AC11"+ getvariableofnpc(.holyshit,"DOTAPVP") +"^000000 : Beyond Godlike";
next;
mes "[Доска Славы]";
mes "Как формируется рейтинг Самых опасных Гильдей:";
mes " ";
mes "^996600Ранг. ^006699ИМЯ ^00AAAA(Опасность Гильдии) :";
mes " ^EE8800Время^000000";
mes " ";
mes "--------------------------------";
mes " ";
mes "^00AAAAОпасность^000000 набирается так: сколько игроков других гильдий убивают игроки одной гильдии,столько и фрагов пишется на счет этой гильдии.Рейтинг останавливается когда на арене умирают все представители Гильдии.";
mes " ";
mes "Потом на доске пишется ^EE8800Время^000000 когда гильдия набрала максимальную опасность.";
mes " ";
mes "Опасность не исчезнет даже после рестарта сервера! Ваша гильдия навеки вписывается в наш рейтинг Самых опасных Гильдий сервера";
mes " ";
mes "Сметрь от руки/лапы/хвост/зубов и тп моба/гома/пета в счет рейтинга не идет.";
next;
if ( getvariableofnpc(.lvltokill,"DOTAPVP") ) {
mes "[Доска Славы]";
mes "Ты должен убить чара с синимальным левелом "+ getvariableofnpc(.lvltokill,"DOTAPVP") +", чтобы попасть в наш топ!!!.";
mes " ";
mes "Новис 1 лвл может убить чара 99 лвл и попасть в рейтинг.";
mes "Однако чару 99 лвл убийство новиса 1 лвл в счет фрагов не идет.";
next;
}
if ( getvariableofnpc(.counttopunish,"DOTAPVP") ) {
mes "[Доска Славы]";
mes "Некоторые нубы пытаются убить одного и того же чара для того чтобы попасть в ТОП 20.";
mes "Но бойся всевидящего ГМА! Все твои действия записываются, а за подобный нагон пвп рейтинг игроку присуждается бан на срок неделя/месяц.";
next;
}
if ( getvariableofnpc(.minlvlrange,"DOTAPVP") ) {
mes "[Доска Славы]";
mes "Минимальная разница в лвл между тобой и убитым тобой персом "+ getvariableofnpc(.minlvlrange,"DOTAPVP") +".";
mes " ";
if ( getvariableofnpc(.minlvlrange,"DOTAPVP") >= 200)
mes "Другими словами, если твой лвл 500, лвл убитого тобой не должен быть меньше "+( 500 - getvariableofnpc(.minlvlrange,"DOTAPVP") )+" тогда ты получишь + в ТОП 20.";
else if ( getvariableofnpc(.minlvlrange,"DOTAPVP") >= 70)
mes "Другими словами, если твой лвл 255, лвл убитого тобой игрока должн быть минимум "+( 255 - getvariableofnpc(.minlvlrange,"DOTAPVP") )+" тогда ты получишь + в ТОП 20.";
else
mes "Другими словами, если твой лвл 99, лвл убитого тобой игрока должн быть минимум "+( 99 - getvariableofnpc(.minlvlrange,"DOTAPVP") )+" тогда ты получишь + в ТОП 20.";
mes "Игрок,убивший чара с меньшим лвл не получает рейтинга. И наоборот, чар с меньшим лвл, убив игрока с большим лвл получает + в ТОП 20.";
next;
}
break;
case 6:
if ( getgmlevel() < .min_gm_menu ) break;
mes "[Доска Славы]";
mes "Что резетнуть? ?";
next;
switch( select("Всё","Пвп рейтинг","Гильд рейтинг","Нет") ) {
case 1:
mes "[Доска Славы]";
mes "Вы в этом уверены ?";
next;
if ( select("Нет:Да") == 1 ) break;
query_sql "delete from pvpladder";
query_sql "delete from ownladder";
mes "[Доска Славы]";
mes "Таблица рейтинга сброшена.";
next;
break;
case 2:
case 3:
set .@menu, @menu;
mes "[Доска Славы]";
mes "Вы уверены что хотите сбросить "+( (.@menu ==2)?"PVP":"Ownage" )+" рейтинг ?";
next;
if ( select("Нет:Да") == 1 ) break;
query_sql "delete from "+( (.@menu ==2)?"pvp":"own" )+"ladder";
mes "[Доска Славы]";
mes "Рейтинг сброшен.";
next;
break;
default:
}
break;
case 7:
if ( getgmlevel() < .min_gm_menu ) break;
mes "[Доска Славы]";
mes "Что бы вы хотели изменить?";
next;
switch( select ("Пвп рейтинг","Гильд рейтинг","Назад") ) {
if ( @menu == 3 ) break;
mes "[Доска Славы]";
mes "Выберите входной тип:";
next;
case 1:
if ( select("Ид чара","Ник","Ид акка") != 3) {
if ( @menu == 1 )
input .@id;
else
input .@id$;
mes "[Доска Славы]";
query_sql "select char_id from `char` where "+( (@menu ==1)?("char_id = "+ .@id):("name = '"+ escape_sql(.@id$) +"'") ), .@cid;
if ( !.@cid ) {
mes "Нет такого чара.";
next;
break;
} else
set .@cid, 0;
query_sql "select char_id, name, streaks, kills, deaths, date_format(streaktime,'%a %e/%c/%y %r') from pvpladder where "+( (@menu ==1)?("char_id = "+ .@id):("name = '"+ escape_sql(.@id$) +"'") ), .@cid, .@name$, .@streak, .@kills, .@deaths, .@time$;
if ( !.@cid ) {
mes "Этого игрока нет в таблице.";
next;
break;
}
} else {
input .@id;
query_sql "select char_id, name, char_num from `char` where account_id = "+ .@id +" order by char_num asc", .@cid, .@name$, .@gid;
if ( !.@cid ) {
mes "Неверный аккаунт ид.";
next;
break;
}
mes "[Доска Славы]";
for ( set .@i,0; .@i < getarraysize(.@cid); set .@i, .@i + 1 )
mes (.@gid[.@i] +1) +". "+ .@cid[.@i] +" "+ .@name$[.@i];
set .@menu$, (.@gid[.@i] +1) +". "+ .@cid;
for ( set .@i,1; .@i < getarraysize(.@cid); set .@i, .@i + 1 )
set .@menu$, .@menu$ +":"+ .@gid[.@i] +". "+ .@cid[.@i];
next;
select .@menu$;
mes "[Доска Славы]";
set .@id, .@cid[@menu-1];
deletearray .@cid, 9;
query_sql "select char_id, name, streaks, kills, deaths, date_format(streaktime,'%a %e/%c/%y %r') from pvpladder where char_id = "+ .@id, .@cid, .@name$, .@streak, .@kills, .@deaths, .@time$;
if ( !.@cid ) {
mes "Этого игрока нет в таблице.";
next;
break;
}
}
mes "Ид игрока : ^006699"+ .@cid +"^000000";
mes "Ник : ^006699"+ .@name$ +"^000000";
mes "Убийства : ^00AA00["+ .@kills +"]^000000";
mes "Смерти : ^FF0000<"+ .@deaths +">^000000";
mes "Самая высокая полоса была ^70AC11{"+ .@streak +"}^000000 on :";
mes " ^EE8800"+ .@time$ +"^000000";
next;
switch( select("Total Kills","Death Counts","Highest Streak & Highest Streak Time","Name") ) {
case 1:
setarray .@time$,"Total Kills",".@kills","kills","";
break;
case 2:
setarray .@time$,"Death Counts",".@deaths","deaths","";
break;
case 3:
setarray .@time$,"Highest Streak",".@streak","streaks","1";
default:
}
if ( @menu < 4 ) {
input .@num;
mes "[Доска Славы]";
mes "Действительно изменить "+ .@name$ +"'s";
mes .@time$[0] +" from "+ getd(.@time$[1]) +" to "+ .@num +" ?";
if ( .@num >= getd(.@time$[1]) && .@time$[3] == "1" ) mes "and set Highest Streak Time to current time?";
next;
if ( select("Нет:Да") == 1 ) break;
input .@num;
mes "[Доска Славы]";
query_sql "update pvpladder set "+ .@time$[2] +" = "+ .@num +" where char_id = "+ .@cid;
if ( .@num >= getd(.@time$[1]) && .@time$[3] == "1" ) query_sql "update pvpladder set streaktime = now()";
mes "The "+ .@time$[0] +" for";
mes .@name$ +" has set to "+ .@num;
if ( .@num >= getd(.@time$[1]) && .@time$[3] == "1" ) mes "and the Highest Streak Time set to current time";
next;
break;
} else {
input .@num;
mes "[Доска Славы]";
mes "Регенерация имени :";
mes .@name$ +" ......";
mes " ";
query_sql "select `char`.name, pvpladder.name from `char` right join pvpladder on `char`.char_id = pvpladder.char_id where `char`.char_id = "+ .@cid, .@cid1$, .@cid2$;
if ( .@cid1$ == "" )
mes "Персонаж удалён, так что больше не может быть изменен.";
else if ( .@cid1$ == .@cid2$ )
mes "Имя тоже самое, так что его изменить вы больше не сможете.";
else {
query_sql "update pvpladder set name = '"+ escape_sql(.@cid1$) +"' where char_id = "+ .@cid;
mes "Теперь это звонило : "+ .@cid1$;
}
set .@cid1$, "";
set .@cid2$, "";
next;
}
break;
case 2:
select "Ид гильдии","Название Ги";
if ( @menu == 1 )
input .@id;
else
input .@id$;
mes "[Доска Славы]";
query_sql "select guild_id from guild where "+( (@menu ==1)?("guild_id = "+ .@id):("name = '"+ escape_sql(.@id$) +"'") ), .@gid;
if ( !.@gid ) {
mes "Нет такой Ги.";
next;
break;
} else
set .@gid, 0;
query_sql "select guild_id, name, currentown, highestown, date_format(owntime,'%a %e/%c/%y %r') from ownladder where "+( (@menu ==1)?("guild_id = "+ .@id):("name = '"+ escape_sql(.@id$) +"'") ), .@gid, .@name$, .@currentown, .@owned, .@time$;
if ( !.@gid ) {
mes "Этой Ги нет в таблице.";
next;
break;
}
mes "Ид Ги : ^006699"+ .@gid +"^000000";
mes "Название : ^006699"+ .@name$ +"^000000";
mes "Текущий рейтинг : ^00AAAA("+ .@currentown +")^000000";
mes "Самый длинный кил был ^00AAAA("+ .@owned +")^000000 on :";
mes " ^EE8800"+ .@time$ +"^000000";
next;
switch( select("Current Owning","Longest Ownage & Longest Ownage Time","Name") ) {
case 1:
setarray .@time$,"Current Owning",".@currentown","currentown","";
break;
case 2:
setarray .@time$,"Highest Ownage",".@owned","highestown","1";
default:
}
if ( @menu < 3 ) {
input .@num;
mes "[Доска Славы]";
mes "Действильно изменить "+ .@name$ +"'s";
mes .@time$[0] +" from "+ getd(.@time$[1]) +" to "+ .@num +" ?";
if ( .@num >= getd(.@time$[1]) && .@time$[3] == "1" ) mes "and set Longest Ownage Time to current time?";
next;
if ( select("Нет:Да") == 1 ) break;
mes "[Доска Славы]";
query_sql "update ownladder set "+ .@time$[2] +" = "+ .@num +" where guild_id = "+ .@gid;
if ( .@num >= getd(.@time$[1]) && .@time$[3] == "1" ) query_sql "update ownladder set owntime = now()";
mes "The "+ .@time$[0] +" for";
mes .@name$ +" guild has set to "+ .@num;
if ( .@num >= getd(.@time$[1]) && .@time$[3] == "1" ) mes "and the Longest Ownage Time set to current time";
next;
break;
} else {
mes "[Доска Славы]";
mes "Регенерация название Ги :";
mes .@name$ +" ......";
mes " ";
query_sql "select guild.name, ownladder.name from guild right join ownladder on guild.guild_id = ownladder.guild_id where guild.guild_id = "+ .@gid, .@gid1$, .@gid2$;
if ( .@gid1$ == "" )
mes "Гильдия удалена, так что не может быть изменена больше.";
else if ( .@gid1$ == .@gid2$ )
mes "Название это тоже самое, так что нельзя его изменять.";
else {
query_sql "update ownladder set name = '"+ escape_sql(.@gid1$) +"' where guild_id = "+ .@gid;
mes "Теперь это звонило : "+ .@gid1$;
}
set .@gid1$, "";
set .@gid2$, "";
next;
}
default:
}
default:
}
} while (1);
}


Мощно. А звуки куда пихать? Просто в папку дата, или дата/саунд, или хз куда там?))

Автор: [OneLife]: Дата: 01.21.2010

Насколько я помню Data/Wav

Автор: 879546: Дата: 01.21.2010

ок спс

Автор: MaxxWell: Дата: 01.21.2010

спасибо, но всеже это ро а не варик=) звуки по мне лишнее=)

Автор: 879546: Дата: 01.21.2010

Цитата MaxxWell;19004]спасибо, но всеже это ро а не варик=) звуки по мне лишнее=)


Ну почему же. Не обязательно же из варика ставить)) Можно в скрипте переписать killingspree dominating и тд на поринг->дропс->[...:
ангелинг->девелинг) Хотя... пожалуй звуки тут и вправду лишнее. Но я просто так себе представляю, на ГВ кто-нибудь идёт, всех подряд косит и тут же ему деферамбы поются :D

Автор: MaxxWell: Дата: 01.21.2010

ну спрайт хороший=) но мне всеже ненужны звуки=)

Автор: 879546: Дата: 01.21.2010

Цитата MaxxWell;19012:
ну спрайт хороший=) но мне всеже ненужны звуки=)

благо, там есть конфиг в начале, не придётся по всему скрипту убирать))

Автор: JaneAir: Дата: 01.21.2010

хех , эти звуки вобще-то с КСа а не варика)) спасибо

Автор: [OneLife]: Дата: 01.21.2010

Цитата MaxxWell;19012:
ну спрайт хороший=) но мне всеже ненужны звуки=)


Их можно отключить в начале скрипта ;)

Автор: MaxxWell: Дата: 01.21.2010

простите конечно за оффтоп но: даже в ксе эти звуки появились из варика!=)

Автор: Мяфк: Дата: 01.21.2010

Точнее из доты.

Автор: JaneAir: Дата: 01.22.2010

хех , пасиб просветили)) незнал

Автор: Enjoy: Дата: 01.22.2010

-	script	sayeventpoty	-1,{
OnPcKillEvent:
set $@KillerName$, strcharinfo(0);
set $@KilledName$, rid2name( killedrid );
announce "Игрок ["+$@KillerName$+"] беспощадно "+((sex)?"убил":"убила")+" ["+$@KilledName$+"]",bc_map;
}