Назад

PVP Эвент

Автор: Hatzel: Дата: 03.07.2009

© IvanZombie
Всё дословно:

Привет всем, небольшой развлекательный эвент который может запустить любой игрок!
Описание: Нпц Бойня - говорит с игроком и в итоге варпует его на карту и шлёт на весь мир сообщения,
по которым как, пчёлы на гав.. ,мёд сбегаются игроки и входят в игру. Изначально "создатель бойни" вносит
сумму для входа, так называемый прайз, после 1 минуты регистрации, начинается пвп, победитель получает деньги(приз)
по формуле: сумма установленная для входа*колличество игроков-10% от всего приза. Эти 10% уходят на благотворительные средства сервера, если кому хочется сделать 100% приз.
Внизу находим:

set prozent,(summ*.players)/10; // 10 процентов от суммы эвент забирает себе
set zeny,zeny+(.summ*.players-@prozent);

Заменяем на:

set zeny,zeny+.summ*.players;


Проблемы:
1)Есть проблеика которую я ещё не дописал, завтра сделаю.
Когда 1 начинает говорить с нпц до начала эвента и 2ой тоже начинает создавать игру,
создасться одна игра, того кто поговорил последним.
2)Так же скоро профиксю, если никто так и не зарегистрировался, нужно варпнуть обратно в город и вернуть деньги.
3) Незнаю как решить, это скорее фикс чем проблема, нужно чтобы на арене трупаков не варповало, а они могли бы лежать, и наблюдать за бойней. И .т.к у линка есть скил после которого игрок снова респается.


PVP бойня
// PVP Бойня by Ivan Zombie ~ ICQ: 47-51-581 ~
prontera,153,217,1 script Бойня 786,{
if(.event==1){
if(.register==1){
mes "[Uncle]";
mes "Простите, бойня уже идёт..";
close;
}
mes "[Uncle]";
mes "Привет! Это эвент пвп бойня!";
mes "Участники могут быть любого уровня!";
next;
mes "Сумма взноса для приза равна "+.summ+"! Участников "+.players+"!";
mes "Хотите присоединится?";
switch(select("Да","Нет")){
case 1:
if(zeny<.summ) goto money;
set .players,.players+1;
set zeny,zeny-.summ;
warp "quiz_02",251,378; close;
case 2:
mes "[Uncle]";
mes "Ок, приходи как передумаешь.";
close;
}
}

set .players,1;
mes "[Uncle]";
mes "Привет! Это эвент пвп бойня!";
mes "Начать эвент может каждый игрок 99 уровня!";
next;
mes "[Uncle]";
mes "Все кто придёт зарегистрироваться будут вносить сумму, которую вы укажете";
next;
mes "[Uncle]";
mes "В итоге приз получит только 1 победитель.";
mes "Что ты желаеш?";
switch(select("Создать игру","Выход")) {
case 1:
if(baselevel < 99) {
mes "[Uncle]";
mes "Простите, но для участия необходимо что бы у вас был 99 базовый уровень..";
close;
}
mes "[Uncle]";
mes "Хорошо, ты выбрал создать игру.";
mes "Помни, мы забираем 10% от приза!";
mes "Сколько взнос за вход?";
next;
menu "200.000zeny",Zeny1,"500.000zeny",Zeny2,"1.000.000zeny",Zeny3;
Zeny1:
set .summ,200000;
goto check;
Zeny2:
set .summ,500000;
goto check;
Zeny3:
set .summ,1000000;
goto check;
check:
if(zeny<.summ) {
mes "[Uncle]";
mes "Простите у вас меньше "+.summ+" zeny!";
close;}

else {

mes "[Uncle]";
set zeny,zeny-.summ;
mes "Хорошо, ваша сумма была установлена как цена за вход!";
mes "Сейчас начнём звать участников";
mes "Вы готовы запустить пвп бойню?";
next;
switch(select("Да","Нет")){
case 1:
mes "[Поехали]";
pvpoff "quiz_02";
warp "quiz_02",251,378;
set .event,1;
initnpctimer;
announce "Начинается PVP бойня! Зачинщик "+strcharinfo(0)+"!",0,0x00ff00;

OnTimer5000:
announce "Начало PVP бойни через 1 минуту!",0,0x00ff00;
end;

OnTimer55000:
announce "Начало PVP бойни через ~5~",0,0x00ff00;
end;

OnTimer56000:
announce "Начало PVP бойни через ~4~",0,0x00ff00;
end;

OnTimer57000:
announce "Начало PVP бойни через ~3~",0,0x00ff00;
end;

OnTimer58000:
announce "Начало PVP бойни через ~2~",0,0x00ff00;
end;

OnTimer59000:
announce "Начало PVP бойни через ~1~",0,0x00ff00;
end;

OnTimer60000:
pvpon "quiz_02";
stopnpctimer;
set .register,1;
announce "PVP бойня началась! Регистрация закрыта!",0,0x00ff00;
end;
case 2:
mes "[Uncle]";
mes "Передумали?! А я уже всё подготовил..";
close;
}
}

case 2:
mes "[Uncle]";
mes "Передумали?!..";
close;
}
OnPCKillEvent:
getmapxy(@mapname$,@mapx,@mapy,0,strcharinfo(0));
if(@mapname$=="quiz_02"){
attachrid(killedrid);
warp "prontera",155,182;
if(getmapusers("quiz_02")<2){
attachrid(killerrid);
announce "Победитель в PVP Бойне - "+strcharinfo(0)+"!",0,0x00ff00;
set @prozent,(summ*.players)/10; // 10 процентов от суммы эвент забирает себе
set zeny,zeny+(.summ*.players-@prozent);
set .event,0;
set .register,0;
mapwarp "quiz_02","prontera",155,182;}}


}

Автор: Fayl: Дата: 01.16.2011

Возникла проблема с этим эвентом.
Ситуация следующая:
На арене два игрока, бойня началась.
Первый убивает второго.
Оба летят в пронту.
НПЦ лечит победителя - всё отлично, хп на максимуме, сп тоже, скилы и бафы работают.
НПЦ лечит проигравшего - полоска хп на нуле. Касты на него не ложатся. Атаковать монстров он не может. При перезаходе ситуация та же.
Лечится только через phpmyadmin. Заходим и вручную редактируем таблицу с персонажем, устанавливая макимальное количество хп.
UPD: Замтил ещё одно, этого персонажа не видят агрессивные мобы, а так же МВП.

Автор: DiS[IP]: Дата: 01.16.2011

[FONT=Lucida Console]Сделай авторес при смерти.[/FONT]

Автор: Fayl: Дата: 01.16.2011

Цитата Dis[IP];30436:
[FONT=Lucida Console]Сделай авторес при смерти.[/FONT]

Что бы они ресалилсь на пвп зоне после смерти? Ведь тогда никогда не выйграет, там ведь стоит проверка:
if(getmapusers("poring_c01")<2){

Автор: Jarek: Дата: 01.16.2011

По идее лечится вставкой sleep между варпом в пронту и хилом.

Автор: Fayl: Дата: 01.16.2011

Верно! Спасибо большое!
OnPCKillEvent:

getmapxy(@mapname$,@mapx,@mapy,0,strcharinfo(0));
if(@mapname$=="poring_c01"){
attachrid(killedrid);
percentheal 100,100;
sleep2 1;
warp "prontera",155,182;

Так работает.