poiuty Опубликовано 2 ноября, 2013 Жалоба Поделиться Опубликовано 2 ноября, 2013 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);} Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения