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

Помогите разобраться


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

Друзя помогите разобраться....

есть скрипт дуели ! Работает почти хорошо .. но есть проблема которую не могу решить ...

в скрипте есть такой кусочек

который должен отключать запрос на дуель по выходу времени ! но ничего не происходит.. можете подсказать почему ?(

//If 5 Minutes passed after the challenger registred and no one accepts it.
OnTimer1:
announce "Так и не нашелься суперник или вышло время, и к сожалению дуель была отменена .",bc_map|bc_blue;
if((.char$ != "") && (attachrid (getcharid(3,.char$)))) {
set Zeny,Zeny+(.zeny/2);
set dueling,0;
}
if((.char2$ != "") && (attachrid (getcharid(3,.char2$)))) {
set Zeny,Zeny+(.zeny/2);
set dueling,0;
}
// detachrid;
set .char$,"";
set .char2$,"";
set .gambling,0;
set .waiting,0;
set .zeny,0;
stopnpctimer;
end;

вот скрипт

//===== eAthena Script ======================================================================
//= Duel Gambling
//===== Original By =========================================================================
//= Information
//===== Edited By =========================================================================
//= Kaushik
//===== Current Version: ====================================================================
//= 1.4 = Fixed everything by Kaushik
//= 1.3 = Added Comments and some Functions
//= 1.2 - Fix exploitable bug
//= 1.1 - Small Fix
//= 1.0 - Script Release
//===== Compatible With: ====================================================================
//= Tested in TXT Revision 12168 Trunk
//===== Description: ========================================================================
//= You have to set the duel_time_interval to 0
//===== Comments and Credits ================================================================
//= Thanks to Ruroniarc,AnnieRuru,David Boy and Yhn that help me on getitemname2 o.O(getitemname2?)
//= Thanks to my friend, Joey for the typo things
//=
//===========================================================================================
prontera,150,177,4 script Дуель на деньги 953,{
set @npcname$,"[Менеджер дуели]";

L_mm:
mes @npcname$;
//If already a duel is going on
if(.gambling) {
mes "Дуель стартовала, пожалуйста дождитесь окончание";
close;
}

mes callfunc("F_Hi") + " " + strcharinfo(0);
//If the challenger and the one accepting the duel have registred and the duel is ready to start
if(.char$ == strcharinfo(0) && .char2$ != "") {
mes "^0000FF" +.char2$+ "^000000 ждет Вас для начала дуели!";
if(.zeny) mes "Ставка дуели ^FF0000" +.zeny+ "^000000 zeny.";
if(.item) mes "The player duel for a ^FF0000" + callfunc("F_getitemname2",.item2[0],.item2[1],.item2[2],.item2[3],.item2[4],.item2[5]) + "^000000";
mes "Что бы Вы хотели?";
next;
menu "Начать дуель",L_sduel,"Закрыть дуель",L_cduel;
}
//If the one accept the duel is going to talk to the npc
if(.waiting) {
mes "Дуэль будет начата в ближайшее время!";
close;
}
//If the challenger has registred, speaks again to the npc and no one accepted it
if(.char$ == strcharinfo(0)) {
mes "Пожалуйста, подождите вашего соперника.";
next;
menu "Закрыть дуель",L_cduel,"Я подожду",-;
close;
}
//If a challenger has registred, another person speaks to the npc and no one has accepted before
if(.char$ != "") {
mes "Игрок ждет на поединок";
mes "Что бы Вы хотели?";
next;
menu "Игрок и информация дуели",-,"Отправить приглашение на дуэль игроку",L_iduel,"Дуель на деньги?",L_info;
mes @npcname$;
mes "Игрок который ждет поединок ^0000FF"+.char$+"^000000";
if(.zeny) mes "Дуелт за ^FF0000" +.zeny+ "^000000 зени.";
if(.item) mes "Дуель за ^FF0000" + callfunc("F_getitemname2",.item[0],.item[1],.item[2],.item[3],.item[4],.item[5]) + "^000000";
next;
goto L_mm;
}
//If no challenger is registred.
else {
mes "Ни один игрок не ждет дуели за деньги в настоящее время";
mes "Что бы вы хотели сделать?";
next;
menu "Начать дуель",-,"Дуель за деньги?",L_info;
set .zeny,callfunc("F_PDZeny",0);
Initnpctimer;
set .char$,strcharinfo(0);
mes @npcname$;
mes "Пожалуйста подождите соперника.";
announce .char$+ " ждет азартного игрока который отправиться с ним на дуель со ставкой " +.zeny+ " зеней " ,bc_map|bc_blue;
close;
}

//This party will run after someone accepted the challenge of a challenger
L_iduel:
set .zeny,callfunc("F_PDZeny",.zeny);
set .char2$,strcharinfo(0);
set .waiting,1;
mes @npcname$;
mes "Пожалусто подождите я проинформирую вашого соперника.";
announce .char$+ ", у вас есть соперник!",bc_map|bc_blue;
close;

//After both players registred and the challenger starts the duel.
L_sduel:
mes @npcname$;
mes "Мы начинаем дуель.";
close2;
attachrid getcharid(3,.char2$);
warp "pvp_n_1-1",90,50;
attachrid getcharid(3,.char$);
set dueling,1;
warp "pvp_n_1-1",110,50;
atcommand "@duel " + .char2$;
attachrid getcharid(3,.char2$);
atcommand "@accept";
set dueling,1;
// detachrid;
set .gambling,1;
announce .char$+ " начал дуель с " +.char2$+ "!",bc_map|bc_blue;
end;

//If only the challenger is registred and cancels or if both registred and the challenger cancels the duel.
L_cduel:
announce "Дуель была отменена игроком " +.char$,bc_map|bc_blue;
mes @npcname$;
mes "Очень жаль, " + callfunc("F_Bye");
set dueling,0;
set Zeny,Zeny+(.zeny/2);
close2;
if((.char2$ != "") && (attachrid (getcharid(3,.char2$)))) {
attachrid getcharid(3,.char2$);
set Zeny,Zeny+(.zeny/2);
set dueling,0;
// detachrid;
}
set .char$,"";
set .char2$,"";
set .gambling,0;
set .waiting,0;
set .zeny,0;
end;

//If you click on information for the duel.
L_info:
mes @npcname$;
mes "Я собираю двох игроков,";
mes "которые будуть биться на смерть,";
next;
mes @npcname$;
mes "Перед началом дуели игрок указывает суму,";
mes "за которую игроки будут сражаться.";
mes "Победитель получат всё.";
next;
mes @npcname$;
mes "Максимальное время ожидание дуали и дуелянта 5 минут.";
next;
goto L_mm;

//If 5 Minutes passed after the challenger registred and no one accepts it.
OnTimer1:
announce "Так и не нашелься суперник или вышло время, и к сожалению дуель была отменена .",bc_map|bc_blue;
if((.char$ != "") && (attachrid (getcharid(3,.char$)))) {
set Zeny,Zeny+(.zeny/2);
set dueling,0;
}
if((.char2$ != "") && (attachrid (getcharid(3,.char2$)))) {
set Zeny,Zeny+(.zeny/2);
set dueling,0;
}
// detachrid;
set .char$,"";
set .char2$,"";
set .gambling,0;
set .waiting,0;
set .zeny,0;
stopnpctimer;
end;

//When a player kills his oppenent.
OnPCKillEvent:
if(!dueling) end;
set Zeny,Zeny+.zeny;
atcommand "@leave";
announce strcharinfo(0)+" выиграл в дуели!!! Поздравляем!!",bc_map|bc_blue;
warp "prontera",158,184;
set dueling,0;
attachrid killedrid;
set dueling,0;
// detachrid;
set .char$,"";
set .char2$,"";
set .gambling,0;
set .waiting,0;
set .zeny,0;
set .waiting,0;
warp "prontera",158,184;
end;

//When a player dies.. (Just incase he doesnt get killed by his oppenent)
OnPCDieEvent:
if(!dueling) end;
if (killerrid == 0)
{
announce "Дуель была завершена потому что игрок "+strcharinfo(0)+" умер", bc_map|bc_blue;
if (strcharinfo(0) == .char$)
{
attachrid getcharid(3,.char2$);
set Zeny,Zeny+.zeny/2;
}
if (strcharinfo(0) == .char2$)
{
attachrid getcharid(3,.char$);
set Zeny,Zeny+.zeny/2;
}
atcommand "@leave";
set dueling,0;
// detachrid;
set .char$,"";
set .char2$,"";
set .gambling,0;
set .waiting,0;
set .zeny,0;
set .waiting,0;
end;
}
}
//Function for gambling for Zeny
Function script F_PDZeny {
If(!getarg(0)) {
mes @npcname$;
mes "Какую ставку вы желаете установить?";
next;
input .@zeny;
If(.@zeny > Zeny || !.@zeny) {
mes "У вас недостаточно денег на ставку , пожалуйста приходите когда соверете нужную суму!";
mes "Или просто измените на более низкую!";
close;
}
set Zeny,Zeny-.@zeny;
return .@zeny;
}
If(getarg(0) > Zeny) {
mes "У Вас недостаточно денег на дуель , прихожите когда соберете достаточную суму !";
close;
}
else
set Zeny,Zeny-getarg(0);
set .@zeny,getarg(0)*2;
return .@zeny;
warp "prontera",158,184;
}

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

Для начала. я бы порекомендовал вам пользоваться тэгом форума

[code]

По вашей ошибке, думаю что вам внутри OnTimer1 нужно использовать не announce, а mapannounce, т.к. announce требует, чтобы был прицеплен RID, а mapannounce — нет.

Ну и OnTimer1 — неправильно, но думаю вы это знаете.

И было бы неплохо выложить лог ошибки mapserv'а.

Изменено пользователем wl.illusion
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Логи выдают

[Debug]: Data: string value="Так и не нашелься суперник или вышло время, и к сожалению дуель была отменена"
[Debug]: Data: number value=17
[Debug]: Source (NPC): Duel Gambling at prontera (150,177)

всё что происходить ... функция не происходит и в чат сообщение не выбивает

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

mapannounce "prontera","Так и не нашелься суперник или вышло время, и к сожалению дуель была отменена.",0;

отлично!) помогло после полной перезагрузки сервера !! спасибо!!!

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

Зародилься второй вопрос ... как вместо того чтобы НПЦ показывал ИД... он показывал название вещи !?


//===== Athena Script =====================================
//= Stop the Clock
//===== By ================================================
//= Tom94
//===== Version ===========================================
//= 1.0
//=========================================================
//= 1.0 - First release
//===== Compatible With ===================================
//= TXT and SQL. No idea which revisions xP
//===== Description =======================================
//= A minigame
//=========================================================
prontera,164,180,1 script Время 712,{
if(.game == 1 && stopped != 1) {
set stopped, 1;
set @stopped, .i;
message strcharinfo(0), "Вы остановили часы на "+@stopped+".";
if(.lowest > @stopped) {
set .lowest, @stopped;
set .winner$, strcharinfo(0);
}
end;
}
else if(.game == 1) {
message strcharinfo(0), "Вы уже остановили часы.";
end;
}
set .name$, "[^ff0000Время^000000]";
set .menu$, "Время:Информация:Подарок:Выйти";

if(strcharinfo(0) == .winner$) {
set stopped, 0;
mes .name$;
mes "Ваш подарок.";
mes "Подарок -ID-: ^ff0000"+$prize_id+"^000000.";
mes "Подарок -ID-: ^ff0000"+$prize_id($betitemid)+"^000000.";
mes "Количество: ^ff0000"+$prize_amount+"^000000.";
getitem $prize_id, $prize_amount;
set .winner$, "";
close;
}
if(stopped == 1) {
set stopped, 0;
mes .name$;
mes "Вы зарегистрировали чара для участие в следующем раунде.";
close;
}
if(getgmlevel() > 60) set .menu$, .menu$ + ":Начать игру:Установить подарок";
mes .name$;
mes "Добро пожаловать в ^ff0000игру Время^000000 .";
switch(select(.menu$)) {
case 1:
mes "^ff0000Игра Время^000000 стартует каждого дня в 18:00. ";
close;
case 2:
mes "^ff0000Время^000000 игра где вы должны нажимать на меня";
mes "и кто будет ближе к 0 тот и победит.";
next;
mes .name$;
mes "Точное время старта игры 17:59:50 -10 секунд до начала 18:00.";
mes "В это время я отщитываю от 1000 до 0.";
next;
mes .name$;
mes "Для победы, ты должен быть ближе к 0 покрайне мере ниже 50.";
next;
mes .name$;
mes "Победитель получает подарок.";
close;
case 3:
mes "Подарок: -ID- ^ff0000"+$prize_id+"^000000.";
mes "Количество: ^ff0000"+$prize_amount+"^000000.";
close;
case 4:
close;
case 5:
sleep2 100;
close2;
goto l_start;
end;
case 6:
mes "Ведите ИД подарка:";
input $prize_id;
next;
mes .name$;
mes "Ведите количество подарков , которые получит победитель:";
input $prize_amount;
next;
mes .name$;
mes "Подарок -ID-: ^ff0000"+$prize_id+"^000000.";
mes "Количество: ^ff0000"+$prize_amount+"^000000.";
close;
}
OnClock1759:
l_start:
set .winner$, "";
set .game, 1;
set .lowest, 1000;
for(set .i, 1000; .i > 300;set .i, .i - 100) {
announce "В пронтере стартовала игра Время.",bc_blue;
announce ":: "+.i+" ::",bc_blue|bc_area;
misceffect 377;
sleep2 1000;
}
for(set .i, 300; .i > 50;set .i, .i - 10) {
announce ":: "+.i+" ::",bc_blue|bc_area;
misceffect 377;
sleep2 100;
}
for(set .i, 50; .i > 0;set .i, .i - 1) {
announce ":: "+.i+" ::",bc_blue|bc_area;
misceffect 377;
sleep2 10;
}
set .game, 0;
if(.winner$ == "") {
announce "Никто не решилься остановить часы.Так что победителя нет ((.",bc_blue;
end;
}
announce .winner$+" выиграл игру остановить часы.. Часы были остановлены в "+.lowest+".",bc_blue;
sleep2 2500;
announce .winner$+", нажмите на мне для получение подарка.",bc_blue;
sleep2 2500;
announce "Для участия в игре , нажмите на мне в следующий раз перед началом игры, юхууу.",bc_blue;
end;
}

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

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