Назад

бага в скрипте имп арены

Автор: Renegade: Дата: 12.23.2010

скрипт должен считать время за которое разбит имп и вести статистику.

Статистику ведёт, имп появляется, разбивается всё засчитывается. Но время считается неправельно. За сколько имп небыл бы разбит- всегда пишется 6 секунд и в топ заносится 6 секунд.


Где ошибка?


pvp_n_4-5	mapflag	nomemo
pvp_n_4-5 mapflag noteleport
pvp_n_4-5 mapflag noskill

prontera,164,164,0 script Emperium Арена 1288,{

set @time, $empbrk_record;
set @m, @time / 60000;
set @time, @time - (@m * 60000);
set @s, @time /1000;
set @time, @time - (@s * 1000);

mes "[Emperium]";
mes "Официальная Запись ^5050A0"+$empbrk_record$+"^000000";
mes " ^000080"+@m+"^000000m ^000080"+@s+"^000000s ^000080"+@time+"^000000ms";

set @time, empbrk_record;
set @m, @time / 60000;
set @time, @time - (@m * 60000);
set @s, @time /1000;
set @time, @time - (@s * 1000);
mes "Ваша запись:";
mes " ^000080"+@m+"^000000m ^000080"+@s+"^000000s ^000080"+@time+"^000000ms";

mes "Вы хотите попробовать установить рекорд?";
next;
if (getgmlevel()>99) {mes "^FF0000/!\ ^000000Гм меню ^509050Active ^FF0000/!\^000000"; menu "Стандартное меню",-,"Reset",L_reset,"Exit",L_exit;}
menu
"Да",-,"Нет",L_exit,"Ресет",L_resc;
cleararray .arena$[0],"",4;
mes "[Тест]";
if (getareausers("pvp_n_4-5",94,128,105,139)) mes "Имп n° ^0000DF1 ^FF0000 Занятый^000000";
else{ mes "Emp n° ^0000DF1 ^00A000 Свободный^000000"; set .arena$[0],"^0000DFEmperium^000000";}
if (getareausers("pvp_n_4-5",60,94,71,105)) mes "Имп n° ^B05D002 ^FF0000 Занятый^000000";
else{ mes "Emp n° ^B05D002 ^00A000 Свободный^000000"; set .arena$[1],"^B05D00Emperium^000000";}
if (getareausers("pvp_n_4-5",94,60,105,71)) mes "Имп n° ^B00FB03 ^FF0000 Busy^000000";
else{ mes "Emp n° ^90AF003 ^00A000 Свободный^000000"; set .arena$[2],"^90AF00Emperium^000000";}
if (getareausers("pvp_n_4-5",128,94,139,105)) mes "Имп n° ^50AF004 ^FF0000 Занятый^000000";
else{ mes "Emp n° ^500F004 ^00A000 Свободный^000000"; set .arena$[3],"^500F00Emperium^000000";}
next;
getmapxy(@mpempbrk$,@empbrkx,@empbrky,0,strcharinfo(0));
switch (select(.arena$[0],.arena$[1],.arena$[2],.arena$[3],"Esci")){

case 1:
if (getareausers("pvp_n_4-5",60,94,71,105) == 0){
warp "pvp_n_4-5",99,128;
killmonster "pvp_n_4-5","EmpBrk#1::OnThisMobDeath";
initnpctimer "EmpBrk#1";}
break;

case 2:
if (getareausers("pvp_n_4-5",60,94,71,105) == 0){
warp "pvp_n_4-5",68,99;
killmonster "pvp_n_4-5","EmpBrk#2::OnThisMobDeath";
initnpctimer "EmpBrk#2";}
break;

case 3:
if (getareausers("pvp_n_4-5",94,60,105,71) == 0){
warp "pvp_n_4-5",100,68;
killmonster "pvp_n_4-5","EmpBrk#3::OnThisMobDeath";
initnpctimer "EmpBrk#3";}
break;

case 4:
if (getareausers("pvp_n_4-5",128,94,139,105) == 0){
warp "pvp_n_4-5",130,99;
killmonster "pvp_n_4-5","EmpBrk#4::OnThisMobDeath";
initnpctimer "EmpBrk#4";}
break;

default:
close;
}
charCommand strcharinfo(0)+":#alive "+strcharinfo(0);
close;

L_reset:
mes "[Империум]";
mes "Вы хотите сделать сброс записей??";
menu "Да",-,"Нет",L_exit;
set $empbrk_record, 0;
set $empbrk_record$, 0;
close;
L_resc:
mes "[Империум]";
mes "Уверены что хотите удалить ваш рекорд";
menu "Да",-,"Нет",L_exit;
set empbrk_record, 0;
L_exit:
close;

}
- script EmpBrk#1 -1,{

OnTimer3000:
if (.end == 1) { warpchar "prontera",158,188,.charid;
stopnpctimer;
set .end, 0;
}
end;

OnTimer5000:
set .x1,94;
set .y1,128;
set .x2,105;
set .y2,139;
set .xe,100;
set .ye,134;

areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Готовся сломать Emperium",0;

end;

OnTimer7000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"5",0;
end;

OnTimer8000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"4",0;
end;

OnTimer9000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"3",0;
end;

OnTimer10000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"2",0;
end;

OnTimer11000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"1",0;
end;

OnTimer12000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Рубы!!!",0;
monster "pvp_n_4-5",.xe,.ye,"Emperium",1288,1,"EmpBrk#1::OnThisMobDeath";
end;

OnThisMobDeath:
stopnpctimer "EmpBrk#1";
set .time, getnpctimer(0,"EmpBrk#1")/2;
set .time, .time - 12000;
if (.time < empbrk_record || empbrk_record == 0)
{
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Новая Собственная Запись!!!",0;
set empbrk_record, .time;
}
if (.time < $empbrk_record || $empbrk_record == 0)
{
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Новая официальная запись!!!",0;
set $empbrk_record, .time;
set $empbrk_record$,strcharinfo(0);
}
set .m, .time / 60000;
set .time, .time - (.m * 60000);
set .s, .time /1000;
set .time, .time - (.s * 1000);
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Ваше время "+.m+"m "+.s+"s "+.time+"ms",0;
set .end,1;
set .charid,getcharid(0);
initnpctimer;
end;
}
pvp_n_4-5,99,125,0 script EmpBrk#1_touch -1,2,1,{

OnTouch:
killmonster "pvp_n_4-5","EmpBrk#1::OnThisMobDeath";
mes "[EmpBrk]";
mes "Вы не можете выходить из небольшого участка";
close2;
warp @mpempbrk$,@empbrkx,@empbrky;
close;
}
- script EmpBrk#2 -1,{

OnTimer3000:
if (.end == 1) { warpchar "prontera",158,188,.charid;
stopnpctimer;
set .end, 0;
}
end;

OnTimer5000:
set .x1,60;
set .y1,94;
set .x2,71;
set .y2,105;
set .xe,65;
set .ye,99;

areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Готовся сломать Emperium",0;
end;

OnTimer7000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"5",0;
end;

OnTimer8000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"4",0;
end;

OnTimer9000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"3",0;
end;

OnTimer10000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"2",0;
end;

OnTimer11000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"1",0;
end;

OnTimer12000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Рубы!!!",0;
monster "pvp_n_4-5",.xe,.ye,"Emperium",1288,1,"EmpBrk#2::OnThisMobDeath";
end;

OnThisMobDeath:
stopnpctimer "EmpBrk#2";
set .time, getnpctimer(0,"EmpBrk#2")/2;
set .time, .time - 12000;
if (.time < empbrk_record || empbrk_record == 0)
{
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Ваш новый рекорд!!!",0;
set empbrk_record, .time;
}
if (.time < $empbrk_record || $empbrk_record == 0)
{
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Новая официальная запись!!!",0;
set $empbrk_record, .time;
set $empbrk_record$,strcharinfo(0);
}
set .m, .time / 60000;
set .time, .time - (.m * 60000);
set .s, .time /1000;
set .time, .time - (.s * 1000);
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Ваше время "+.m+"m "+.s+"s "+.time+"ms",0;
set .end,1;
set .charid,getcharid(0);
initnpctimer;
end;
}
pvp_n_4-5,74,99,0 script EmpBrk#2_touch -1,1,2,{

OnTouch:
killmonster "pvp_n_4-5","EmpBrk#2::OnThisMobDeath";
mes "[EmpBrk]";
mes "Вы неможете выходить за небольшой участок";
close2;
warp @mpempbrk$,@empbrkx,@empbrky;
close;
}
- script EmpBrk#3 -1,{
OnTimer3000:
if (.end == 1) { warpchar "prontera",158,188,.charid;
stopnpctimer;
set .end, 0;
}
end;
OnTimer5000:
set .x1,94;
set .y1,60;
set .x2,105;
set .y2,71;
set .xe,99;
set .ye,65;

areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Готовся сломать Emperium",0;
end;

OnTimer7000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"5",0;
end;

OnTimer8000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"4",0;
end;

OnTimer9000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"3",0;
end;

OnTimer10000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"2",0;
end;

OnTimer11000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"1",0;
end;

OnTimer12000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Рубы!!!",0;
monster "pvp_n_4-5",.xe,.ye,"Emperium",1288,1,"EmpBrk#3::OnThisMobDeath";
end;

OnThisMobDeath:
stopnpctimer "EmpBrk#3";
set .time, getnpctimer(0,"EmpBrk#3")/2;
set .time, .time - 12000;
if (.time < empbrk_record || empbrk_record == 0)
{
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Новый ваш рекорд!!!",0;
set empbrk_record, .time;
}
if (.time < $empbrk_record || $empbrk_record == 0)
{
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Новая Официальная Запись!!!",0;
set $empbrk_record, .time;
set $empbrk_record$,strcharinfo(0);
}
set .m, .time / 60000;
set .time, .time - (.m * 60000);
set .s, .time /1000;
set .time, .time - (.s * 1000);
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Your time is "+.m+"m "+.s+"s "+.time+"ms",0;
set .end,1;
set .charid,getcharid(0);
initnpctimer;
end;
}
pvp_n_4-5,100,74,0 script EmpBrk#3_touch -1,2,1,{
OnTouch:
killmonster "pvp_n_4-5","EmpBrk#3::OnThisMobDeath";
mes "[EmpBrk]";
mes "Вы неможете выходить за этот маленький участок";
close2;
warp @mpempbrk$,@empbrkx,@empbrky;
close;
}
- script EmpBrk#4 -1,{

OnTimer3000:
if (.end == 1) { warpchar "prontera",158,188,.charid;
stopnpctimer;
set .end, 0;
}
end;
OnTimer5000:
set .x1,128;
set .y1,94;
set .x2,139;
set .y2,105;
set .xe,134;
set .ye,99;
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Готовься сломать Emperium",0;
end;

OnTimer7000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"5",0;
end;

OnTimer8000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"4",0;
end;

OnTimer9000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"3",0;
end;

OnTimer10000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"2",0;
end;

OnTimer11000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"1",0;
end;

OnTimer12000:
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Рубы!!!",0;
monster "pvp_n_4-5",.xe,.ye,"Emperium",1288,1,"EmpBrk#4::OnThisMobDeath";
end;

OnThisMobDeath:
stopnpctimer "EmpBrk#4";
set .time, getnpctimer(0,"EmpBrk#4")/2;
set .time, .time - 12000;
if (.time < empbrk_record || empbrk_record == 0)
{
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Собственная запись!!!",0;
set empbrk_record, .time;
}
if (.time < $empbrk_record || $empbrk_record == 0)
{
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Новая Официальная Запись!!!",0;
set $empbrk_record, .time;
set $empbrk_record$,strcharinfo(0);
}
set .m, .time / 60000;
set .time, .time - (.m * 60000);
set .s, .time /1000;
set .time, .time - (.s * 1000);
areaannounce "pvp_n_4-5",.x1,.y1,.x2,.y2,"Your time is "+.m+"m "+.s+"s "+.time+"ms",0;
set .end,1;
set .charid,getcharid(0);
initnpctimer;
end;
}
pvp_n_4-5,125,100,0 script EmpBrk#4_touch -1,1,2,{

OnTouch:
killmonster "pvp_n_4-5","EmpBrk#4::OnThisMobDeath";
mes "[EmpBrk]";
mes "Вы не можете выходить за маленький участок.";
close2;
warp @mpempbrk$,@empbrkx,@empbrky;
close;
}

Автор: Renegade: Дата: 12.24.2010

из мапфлагов оставил только:

pvp_n_4-5 mapflag gvg
pvp_n_4-5 mapflag gvg_castle


1) почему внутри комнаты нельзя юзать скилы?

2) можно ли сделать так чтоб скилы юзать было можно но на имп не работали ( mapflag gvg_castle ? )

3) если нельзя пункт 2 то чтоб не диспелило. Диспела в коде не нашел х_х.