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

pvprating


poiuty

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

sql таблицы нет, скрипт 2008 года

-    script    PVP_rating    -1,{
OnInit:
setarray $PVPR_pvpmap$[0],"guild_vs1","guild_vs2","guild_vs3","guild_vs4","guild_vs5","pvp_y_1-2","pvp_n_1-3";
// Задаем элементы формулы
set $Y, 10; set $K, 2; set $X, 1; set $G, 2;
// настройки
set $PKR_param_one,10; // этот параметр отвечает за частоту записи в БД.
set $PKR_bonus_one,5; // параметр для mod'a убийств подряд.
set $PKR_bonus_two,5; // параметря для mod'a - разница в уровнях
end;
OnPCLogoutEvent:
if (PKR_rate != 0) callfunc ("PKR_update_db",PKR_rate);
set PKR_rate,0;
set PKR_kills_w_death,0;
end;
OnPCKillEvent:
if (getcharid(0) == killerrid) end; // проверка на суицид
if (getmapxy(@mapname$,@mapx,@mapy,0) != 0) end; // проверка на посыл пакетов или типа того
if (callfunc("find_in_array",@mapname$,"$PVPR_pvpmap$",1) == -1) end;
if ( getgmlevel() >= 40 ) end; // на время теста комментирую ))
//////
// работает с киллером
set PvP_Kills,PvP_Kills+1;
set PKR_kills_w_death,PKR_kills_w_death+1;
set .@count_k_w_d,PKR_kills_w_death;
set .@killer_name$, strcharinfo(0);
set .@killer_base, BaseLevel; // в дальнейшем буду использовать для бонусных очков
set .@killer_sex, Sex;
set .@killer_upper,Upper;
// Блок задача пола
if ( .@killer_sex ) set .@kill_msg$,"убил"; else set .@kill_msg$,"убилa";
if (PKR_rate == 0) query_sql "SELECT `rating` FROM `pvplog` WHERE `char_id` = "+getcharid(0),PKR_rate; //берем значение из pvplog -> rating.
set .@killer_rate,PKR_rate; // задаем временную переменную рэйтингом убийцы
//
//////
// работает с убитым
attachrid(killedrid);
set .@killed_name$, strcharinfo(0);
set .@count_k_w_d_D,PKR_kills_w_death;
set PvP_Death, PvP_Death+1;
set PKR_kills_w_death,0;
if (PKR_rate == 0) query_sql "SELECT `rating` FROM `pvplog` WHERE `char_id` = "+getcharid(0),PKR_rate;
set .@killed_rate,PKR_rate; // задаем временную переменную рэйтингом убитого
set .@dead_base, BaseLevel; // в дальнейшем буду использовать для бонусных очков
set .@killed_upper,Upper;
//
//////
//Анализируем по какой форумле считать.Считаем...
if ( .@killer_rate > .@killed_rate) set .@count_points,( .@killed_rate / ( ( .@killer_rate + $X ) * $Y ) ) + $K + rand(1,2);
else if (.@killer_rate < .@killed_rate) set .@count_points,( .@killed_rate / ( ( .@killer_rate + $X ) * $Y ) ) + ($K + $G + rand(1,2));
else if (.@killer_rate == .@killed_rate) set .@count_points, $G;
//////
// раздел бонусов
if (div((.@count_k_w_d_D-.@count_k_w_d),$PKR_bonus_one) != 0) set .@bonus,.@bonus+div((.@count_k_w_d_D-.@count_k_w_d),$PKR_bonus_one); // бонус от параметра KWD
// announce div((.@count_k_w_d_D-.@count_k_w_d),$PKR_bonus_one)+" : КВД",bc_all;
if (div((.@dead_base-.@killer_base),$PKR_bonus_two) != 0) set .@bonus,.@bonus+div((.@dead_base-.@killer_base),$PKR_bonus_two); // бонус от разницы в уровнях
// announce div((.@dead_base-.@killer_base),$PKR_bonus_two)+" : LVL bonus",bc_all;
if ((.@killed_upper - .@killer_upper) != 0) set .@bonus,.@bonus+(.@killed_upper - .@killer_upper); // бонус над победой над адванс профой
if (.@count_points < 0) set .@count_points,.@count_points*(-1); // переворачиваем рез-ы, если отрицательны
if (.@bonus > 0) set .@count_points,.@count_points+.@bonus;
else if (.@bonus < 0 && .@bonus*(-1) > .@count_points) set .@count_points,0; // если бонус больше очков по формуле, то обнуляем
//mapannounce $maps,.@bonus+" - Бонус",bc_all;
set .@bonus,0;
//
//////
// операции по изменению переменных
set PKR_rate,PKR_rate-.@count_points;
set .@killed_rate,PKR_rate;
if (mod(PvP_Death,$PKR_param_one) == 0) callfunc ("PKR_update_db",PKR_rate);
dispbottom "У вас "+PKR_rate+" PVP-поинтов.";
attachrid(killerrid);
set PKR_rate,PKR_rate+.@count_points;
set .@killer_rate,PKR_rate;
if (mod(PvP_Kills,$PKR_param_one) == 0) callfunc ("PKR_update_db",PKR_rate);
// Сообщение об убийстве.
if (.@count_k_w_d == 2) soundeffectall "double_kill.wav",0,@mapname$;
if (.@count_k_w_d == 3) soundeffectall "triple_kill.wav",0,@mapname$;
if (.@count_k_w_d == 6) soundeffectall "dominating.wav",0,@mapname$;
if (.@count_k_w_d == 8) soundeffectall "megakill.wav",0,@mapname$;
if (.@count_k_w_d == 10) soundeffectall "monsterkill.wav",0,@mapname$;
if (.@count_k_w_d == 13) soundeffectall "wickedsick.wav",0,@mapname$;
if (.@count_k_w_d == 16) soundeffectall "unstoppable.wav",0,@mapname$;
if (.@count_k_w_d == 20) soundeffectall "godlike.wav",0,@mapname$;
if (.@count_k_w_d == 22) soundeffectall "holyshit.wav",0,@mapname$;
// if (.@count_k_w_d > 5 && .@count_points < 4) {
// set .@i,rand(.@count_k_w_d,.@count_k_w_d_D);
// mapannounce @mapname$,.@i,bc_all;
// if (.@i > 0) {
// mapannounce @mapname$,"Вы получили бонус в размере "+.@i+" "+callfunc ("get_right_word","поинт",.@i)+". Так держать!",bc_self;
// set PKR_rate,PKR_rate+.@i;
// }
//}

mapannounce "guild_vs1","[ "+.@killer_name$+" ] "+.@kill_msg$+" [ "+.@killed_name$+" ]. Рейтинг +/- ["+.@count_points+" / "+.@count_points+"] ("+.@count_k_w_d+" убитых подряд)",bc_map;
mapannounce "guild_vs2","[ "+.@killer_name$+" ] "+.@kill_msg$+" [ "+.@killed_name$+" ]. Рейтинг +/- ["+.@count_points+" / "+.@count_points+"] ("+.@count_k_w_d+" убитых подряд)",bc_map;
mapannounce "guild_vs3","[ "+.@killer_name$+" ] "+.@kill_msg$+" [ "+.@killed_name$+" ]. Рейтинг +/- ["+.@count_points+" / "+.@count_points+"] ("+.@count_k_w_d+" убитых подряд)",bc_map;
mapannounce "guild_vs4","[ "+.@killer_name$+" ] "+.@kill_msg$+" [ "+.@killed_name$+" ]. Рейтинг +/- ["+.@count_points+" / "+.@count_points+"] ("+.@count_k_w_d+" убитых подряд)",bc_map;
mapannounce "guild_vs5","[ "+.@killer_name$+" ] "+.@kill_msg$+" [ "+.@killed_name$+" ]. Рейтинг +/- ["+.@count_points+" / "+.@count_points+"] ("+.@count_k_w_d+" убитых подряд)",bc_map;
mapannounce "pvp_y_1-2","[ "+.@killer_name$+" ] "+.@kill_msg$+" [ "+.@killed_name$+" ]. Рейтинг +/- ["+.@count_points+" / "+.@count_points+"] ("+.@count_k_w_d+" убитых подряд)",bc_map;
mapannounce "pvp_n_1-3","[ "+.@killer_name$+" ] "+.@kill_msg$+" [ "+.@killed_name$+" ]. Рейтинг +/- ["+.@count_points+" / "+.@count_points+"] ("+.@count_k_w_d+" убитых подряд)",bc_map;
dispbottom "У вас "+PKR_rate+" PVP-поинтов.";
}
function script PKR_update_db {
query_sql "SELECT count(*) FROM `pvplog` WHERE `char_id` = "+getcharid(0),.@count;
if (.@count == 0) query_sql "INSERT INTO `pvplog` (char_id,last_update,rating) VALUES ("+getcharid(0)+",NOW(),"+getarg(0)+")",.@bla;
else query_sql "UPDATE `pvplog` SET `rating` = "+getarg(0)+" WHERE char_id = "+getcharid(0),.@bla;
return(0);
}

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

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