I have this npc BG, I wanted to use thejoinbg command appears and 2 options 1 to go to the blue side and one for the red side, and so already getting on the waiting.
// (c) 2008 - 2012 eAmod Project; Andres Garbanzo / Zephyrus
//
// - [email protected]
// - MSN [email protected]
// - Skype: Zephyrus_cr
// - Site: http://dev.terra-gaming.com
//
// This file is NOT public - you are not allowed to distribute it.
// Authorized Server List : http://dev.terra-gaming.com/index.php?/topic/72-authorized-eamod-servers/
// eAmod is a non Free, extended version of eAthena Ragnarok Private Server.
// ==============================================================================
// BattleGround System - Common NPCs
// ==============================================================================
// MapFlags
// *********************************************************************
bat_room mapflag nomemo
bat_room mapflag nowarpto
bat_room mapflag nobranch
bat_room mapflag nopenalty
bat_room mapflag noteleport
bat_room mapflag nosave SavePoint
bat_room mapflag allow_bg_items
// Mapflag Town is required to Join BG Queues
bat_room mapflag town
// Battleground Queue Admin
// *********************************************************************
- script BG_Queue_Join -1,{
end;
OnInit:
// Configuration
// *****************************************************
// Battleground Rotation - Main NPC name
setarray .BG_Arenas$[0], "Conquest";
// Battleground Arena Name - for announcements
setarray .BG_Names$[0], "Conquest";
// Minimum Players to start the BG
setarray .BG_Min[0], 5;
// Maximum Players per Team
setarray .BG_Max[0], 30;
// BG Message Colors
setarray .BG_Color$[0], "0x4169E1";
// Team Building Mode : 0 = Lineal | 1 = Random | 2 = Class Priority | 3 = Faction Mode | 4 = Team Color ( by script set Bat_Team,N; )
set .TeamMode, 4;
// Main Code
// *****************************************************
set .BG_Count, getarraysize(.BG_Arenas$);
set .BG_Queue, bg_queue_create("Battleground Arena","BG_Queue_Join::OnJoinEvent",80);
set .VS_Queue, bg_queue_create("Free For All Arena","BG_Queue_Join::OnVersusJoin",80);
// Move to Next Arena
if( $BG_Index >= .BG_Count ) set $BG_Index,1; // Restart Rotation
set .BG_Arena$,.BG_Arenas$[$BG_Index];
set .Ready, 1;
donpcevent "BG_Queue_Join::OnDoHappyHour";
initnpctimer; // Rotation if BG don't start... Comment if you don't want to use this method
// Comment the next two lines if you don't want to allow @joinbg and @leavebg commands.
bindatcmd "joinbg","BG_Queue_Join::OnDoJoin",0,200;
bindatcmd "leavebg","BG_Queue_Join::OnDoLeave",0,200;
end;
OnDoJoin: // @joinbg
if( checkquest(8506,PLAYTIME) == 2 )
erasequest 8506;
if( checkquest(8506,PLAYTIME) != -1 )
{
dispbottom "[Você é um desertor. Você não pode participar até que o indicador se apague]";
end;
}
bg_queue_join .BG_Queue;
end;
OnDoLeave: // @leavebg
bg_queue_leave .BG_Queue;
end;
OnRotate:
OnTimer740000: // Rotation if BG don't start... Comment if you don't want to use this method. 120 = 2 Minutes
set $@BG_Status, 0;
// Warps Teams
bg_warp $@BG_Team1,"bat_room",155,150;
bg_warp $@BG_Team2,"bat_room",155,150;
bg_warp $@BG_Team3,"bat_room",155,150;
// Destroy Teams
bg_destroy $@BG_Team1; set $@BG_Team1, 0;
bg_destroy $@BG_Team2; set $@BG_Team2, 0;
bg_destroy $@BG_Team3; set $@BG_Team3, 0;
// Move to Next Arena
if( set($BG_Index,$BG_Index + 1) >= .BG_Count )
set $BG_Index,0; // Restart Rotation
set .BG_Arena$,.BG_Arenas$[$BG_Index];
initnpctimer; // Rotation if BG don't start... Comment if you don't want to use this method
// Trigger the Event - Maybe people is waiting...
OnJoinEvent:
if( $@BG_Status == 2 )
end; // BG Ending... Must wait until OnRotate is called
set .@Queue_Count, bg_queue_data(.BG_Queue,0);
switch( $@BG_Status )
{
case 0: // Idle - Ready to Start
if( .BG_Arena$ == "Tierra_TI" )
set .@Req, .BG_Min[$BG_Index] * 3;
else
set .@Req, .BG_Min[$BG_Index] * 2;
if( bg_queue_checkstart(.BG_Queue,.TeamMode,( (.BG_Arena$ == "Tierra_TI") ? 3 : 2 ),.BG_Min[$BG_Index]) )
{
donpcevent .BG_Arena$ + "::OnBuildTeams";
// Fill Teams with Queue Members
if( .BG_Arenas$[$BG_Index] == "Tierra_TI" )
bg_queue2teams .BG_Queue,.BG_Min[$BG_Index],.BG_Max[$BG_Index],.TeamMode,$@BG_Team1,$@BG_Team2,$@BG_Team3;
else
bg_queue2teams .BG_Queue,.BG_Min[$BG_Index],.BG_Max[$BG_Index],.TeamMode,$@BG_Team1,$@BG_Team2;
stopnpctimer; // Rotation if BG don't start... Comment if you don't want to use this method
set $@BG_Status,1;
set .@msg$, "Batalha Campal -- " + .BG_Names$[$BG_Index] + " -- Começando";
announce .@msg$,.BG_Color$[$BG_Index];
donpcevent .BG_Arena$ + "::OnReady";
}
else
{
set .@msg$, "Batalha Campal -- " + .BG_Names$[$BG_Index] + " -- " + (.@Req - .@Queue_Count) + " Jogadores Para Começar, Use @joinbg Para Participar.";
announce .@msg$,0,.BG_Color$[$BG_Index];
}
break;
case 1: // Running - Others can join
if( .@Queue_Count > 0 )
{
if( .BG_Arena$ == "Tierra_TI" )
{
bg_balance_teams .BG_Queue,.BG_Max[$BG_Index],.TeamMode,$@BG_Team1,$@BG_Team2,$@BG_Team3;
set .@BG_Count1, bg_get_data($@BG_Team1,0);
set .@BG_Count2, bg_get_data($@BG_Team2,0);
set .@BG_Count3, bg_get_data($@BG_Team3,0);
set .@msg$, "Batalha Campal -- " + .BG_Names$[$BG_Index] + " -- B: " + .@BG_Count1 + "/" + .BG_Max[$BG_Index] + ", R: " + .@BG_Count2 + "/" + .BG_Max[$BG_Index] + ", G: " + .@BG_Count3 + "/" + .BG_Max[$BG_Index] + " (Em andamento) Use @joinbg Para Participar.";
}
else
{
bg_balance_teams .BG_Queue,.BG_Max[$BG_Index],.TeamMode,$@BG_Team1,$@BG_Team2;
set .@BG_Count1, bg_get_data($@BG_Team1,0);
set .@BG_Count2, bg_get_data($@BG_Team2,0);
set .@msg$, "Batalha Campal -- " + .BG_Names$[$BG_Index] + " -- B: " + .@BG_Count1 + "/" + .BG_Max[$BG_Index] + ", R: " + .@BG_Count2 + "/" + .BG_Max[$BG_Index] + " (Em andamento) Use @joinbg Para Participar.";
}
announce .@msg$,.BG_Color$[$BG_Index];
}
break;
}
end;
OnVersusJoin:
if( $@VS_Status != 0 )
end;
set .@Queue_Count, bg_queue_data(.VS_Queue,0);
if( .@Queue_Count >= 10 )
{
donpcevent "FFA_Arena::OnBuildTeams";
bg_queue2teams .VS_Queue,1,1,0,$@VS_Team[0],$@VS_Team[1],$@VS_Team[2],$@VS_Team[3],$@VS_Team[4],$@VS_Team[5],$@VS_Team[6],$@VS_Team[7],$@VS_Team[8],$@VS_Team[9];
set $@VS_Status,1;
announce "Batalha Campal -- Free For All -- Começando",0,0x483D8B;
donpcevent "FFA_Arena::OnReady";
}
else
announce "Batalha Campal -- Free For All -- " + (10 - .@Queue_Count) + " Jogadores Para Começar, Use @joinbg Para Participar.",0,0x483D8B;
end;
OnFri0600: // Friday, 6 a.m.
rankreset 1; // Ranking Reset
end;
// BattleGround Happy Hour
OnDoHappyHour:
OnClock1600:
OnClock1800:
OnClock2000:
OnClock2200:
switch( gettime(4) )
{
case 1:
case 3:
case 5:
if( gettime(3) >= 20 && gettime(3) < 22 )
{
announce "-- Battleground Happy Hour has begun | Ranked Arena Mode --",0,0x00FF00;
setbattleflag "bg_reward_rates",120; // +20% Reward Rates
setbattleflag "bg_ranked_mode",1;
end;
}
if( gettime(3) == 22 )
{
announce "-- Battleground Happy Hour is over | Regular Arena Mode --",0,0x00BFFF;
setbattleflag "bg_reward_rates",100; // Normal Rates
setbattleflag "bg_ranked_mode",0;
end;
}
break;
case 2:
case 4:
case 6:
if( gettime(3) >= 16 && gettime(3) < 18 )
{
announce "-- Battleground Happy Hour has begun | Ranked Arena Mode --",0,0x00FF00;
setbattleflag "bg_reward_rates",120; // +20% Reward Rates
setbattleflag "bg_ranked_mode",1;
end;
}
if( gettime(3) == 18 )
{
announce "-- Battleground Happy Hour is over | Regular Arena Mode --",0,0x00BFFF;
setbattleflag "bg_reward_rates",100; // Normal Rates
setbattleflag "bg_ranked_mode",0;
end;
}
break;
}
end;
}
// Registration NPC
// *********************************************************************
- script BG_Register -1,{
if( getvariableofnpc(.Ready,"BG_Queue_Join") == 0 )
donpcevent "BG_Queue_Join::OnInit";
mes "[^FFA500Battle Recruiter^000000]";
mes "Bem Vindo ao novo sistema de Batalha Campal! Aqui você pode registrar-se ou registrar seu Grupo no sistema. O sistema seleciona os Times e Arena radomicamente e segue alternando as Arenas de forma consecutiva. Conquest -->Rush -->Conquest --> Conquest e por ai vai.";
mes "O que você quer fazer?";
next;
switch( select("^FFA500Batalha Campal Arenas^000000:^0000FFFree For All Arena^000000:Ir as lojas da Batalha Campal") )
{
case 1:
mes "[^FFA500Recrutadora de Batalha^000000]";
mes "Batalha Campal, diferentes tipos de jogos onde as equipes lutam pela vitória.";
mes "Oque você quer fazer?";
next;
switch( select("Registrar:Registrar Grupo:Cancelar Registro:Battleground Help") )
{
case 1:
if( BaseLevel < 80 )
{
mes "[^FFA500Recrutadora Batalha Campal^000000]";
mes "Nível necessário para participar de um campo de batalha é de 80.";
close;
}
if( checkquest(8506,PLAYTIME) == 2 )
erasequest 8506;
if( checkquest(8506,PLAYTIME) != -1 )
{
mes "[^FFA500Recrutadora Batalha Campal^000000]";
mes "Você é um desertor. Você não pode participar até que o indicador se apaga";
close;
}
mes "[^FFA500Recrutadora Batalha Campal^000000]";
mes "Vamos prosseguir com o registro...";
mes "Você pode esperar em qualquer cidade até BG começa.";
mes "Feche esta janela para continuar...";
close2;
bg_queue_join getvariableofnpc(.BG_Queue,"BG_Queue_Join");
end;
case 2:
if( getcharid(1) == 0 )
{
mes "[^FFA500Battle Recruiter^000000]";
mes "Você não estar em um grupo.";
close;
}
mes "[^FFA500Battle Recruiter^000000]";
mes "Vamos prosseguir com o registro...";
mes "Você pode esperar em qualquer cidade até BG começa.";
mes "Feche esta janela para continuar...";
close2;
bg_queue_partyjoin getcharid(1),getvariableofnpc(.BG_Queue,"BG_Queue_Join");
end;
case 3:
mes "[^FFA500Battle Recruiter^000000]";
mes "Se você estiver registrado, você será removido.";
mes "Você tem certeza?";
next;
if( select("Sim, sair da fila:Não, eu vou ficar") == 2 )
{
mes "[^FFA500Battle Recruiter^000000]";
mes "Ok, nada para mudar.";
close;
}
mes "[^FFA500Battle Recruiter^000000]";
mes "Feche esta janela para continuar ...";
close2;
bg_queue_leave getvariableofnpc(.BG_Queue,"BG_Queue_Join");
end;
case 4:
mes "[^FFA500Battle Recruiter^000000]";
mes "Tell me... what battleground you don't understand?";
next;
switch( select("Capture the Flag:Team DeathMatch:Stone Control:Eye of Storm:Bossnia:Domination:Triple Inferno:Conquest:Rush") )
{
case 1:
mes "[^FFA500Battle Recruiter^000000]";
mes "The objective of the Flavius Battle CTF is to score 3 points before your enemy, by capture their Flag.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "To capture a Flag you need to take the enemy flag, and bring it to your base flag.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "If your base flag is captured too, you need to kill the flag carrier and take the flag back to your base.";
break;
case 2:
mes "[^FFA500Battle Recruiter^000000]";
mes "Kill all the enemy players to let their Team without points.";
mes "Protect our army.";
break;
case 3:
mes "[^FFA500Battle Recruiter^000000]";
mes "Take the Stones in the middle of the battlefield and put in on your base, in the Stone Points.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "Each Stone will give points to your team. First team reach 99 points wins the game.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "Protect your stones from to be captured by the enemy.";
break;
case 4:
mes "[^FFA500Battle Recruiter^000000]";
mes "There are two bases, North and South which teams can capture by holding position on the Base more than the other team.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "Each base will give you points each 5 seconds of Domination. If your Team control both bases the amount of points increases.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "To get aditional points, in the middle there is a Flag spawn, capture it and put it on any of your team Bases.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "The first Team reach 99 points wins the match.";
break;
case 5:
mes "[^FFA500Battle Recruiter^000000]";
mes "Attack the enemy base and destroy each MVP Guardian. To do damage to the guardian your team must capture the Balance Flag in the middle base.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "Each team have 5 guardian to be protected or killed.";
break;
case 6:
mes "[^FFA500Battle Recruiter^000000]";
mes "There are three bases, North, Center and South which teams can capture by holding position on the Base more than the other team.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "Each base will give you points each 5 seconds of Domination.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "The first Team reach 99 points wins the match.";
break;
case 7:
mes "[^FFA500Battle Recruiter^000000]";
mes "There are 3 teams in the battlefield, your team and other 2 enemies.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "Kill the enemy players, collect the skulls and bring then to the Sacrifice Totem to win points.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "You can collect your own team skulls and bring then to your Sacrifice Totem to avoid other teams to score.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "If you get killed all your skulls will be drop to the floor, including your own skull. First Team to get 80 points wins the battle.";
break;
case 8:
mes "[^FFA500Battle Recruiter^000000]";
mes "If you are Attacking, destroy the enemy defenses and it's Flag.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "If you are Defending, protect your castle defenses and the Flag.";
break;
case 9:
mes "[^FFA500Battle Recruiter^000000]";
mes "Fight to capture the Castle and organize your team to defend it.";
next;
mes "[^FFA500Battle Recruiter^000000]";
mes "If you fail on the first capture, kill the defender and take it for your team.";
break;
}
break;
}
close;
case 2:
mes "[^FFA500Battle Recruiter^000000]";
mes "Free For All Arena is a Duel between 10 players with No Teams.";
mes "The target is to kill 25 players.";
mes "What do you want to do?";
next;
switch( select("Register:Leave Queue") )
{
case 1:
if( BaseLevel < 80 )
{
mes "[^FFA500Battle Recruiter^000000]";
mes "Min required level to join a battleground is 80.";
close;
}
if( checkquest(8506,PLAYTIME) == 2 )
erasequest 8506;
if( checkquest(8506,PLAYTIME) != -1 )
{
mes "[^FFA500Battle Recruiter^000000]";
mes "You are a Deserter. You can't participate until the indicator goes off";
close;
}
mes "[^FFA500Battle Recruiter^000000]";
mes "Let's proceed with the registration...";
mes "You must wait on any City until BG starts.";
mes "Close this window to continue...";
close2;
bg_queue_join getvariableofnpc(.VS_Queue,"BG_Queue_Join");
end;
case 2:
mes "[^FFA500Battle Recruiter^000000]";
mes "If you are registered, you will be removed.";
mes "Are you sure?";
next;
if( select("Yes, leave queue:No, I will stay") == 2 )
{
mes "[^FFA500Battle Recruiter^000000]";
mes "Ok, nothing to change.";
close;
}
mes "[^FFA500Battle Recruiter^000000]";
mes "Close this window to continue...";
close2;
bg_queue_leave getvariableofnpc(.VS_Queue,"BG_Queue_Join");
end;
}
break;
case 3:
mes "[^FFA500Battle Recruiter^000000]";
mes "May the War God bless you.";
close2;
warp "bat_room",155,150;
end;
OnInit:
waitingroom "Batalha Campal",0;
}
end;
}
bat_room,156,150,3 duplicate(BG_Register) Battle Recruiter#bat 728
prontera,162,191,4 duplicate(BG_Register) Battle Recruiter#prt 728
// General Guillaume
// *********************************************************************
bat_room,160,159,3 script General Guillaume 420,{
cutin "bat_kiyom2",2;
mes "[General Guillaume]";
mes "Hot-blooded adventurer, we need your ability to win this battle.";
next;
cutin "bat_kiyom1",2;
mes "[General Guillaume]";
mes "Our great king, Marcel Marollo VII, is very sick lately. His Majesty has declared that he chosen either me or Prince Croix as the next king amongst his 9 sons.";
next;
mes "[General Guillaume]";
mes "Two kings can't share a nation!";
mes "Only the one victorious from His Majesty's appointed battle will be enthroned.";
next;
mes "[General Guillaume]";
mes "This is however, not just a battle between us. This battle will determine the future of this country. I pledge on my honor to prove that I'm the one who can protect this Maroll from outside threats.";
next;
switch( select("Join the Blue Team","Join the Green Team","End Conversation") )
{
case 1:
cutin "bat_kiyom2",2;
mes "[General Guillaume]";
mes "Welcome to my army, comrade.";
mes "Your eyes tell me that you're a soldier that I can trust.";
set Bat_Team,1;
next;
mes "[General Guillaume]";
mes "Now, go upstairs and apply for battle with your comrades. I'm sure they'll welcome you whole-heartedly!";
break;
case 2:
cutin "bat_kiyom2",2;
mes "[General Guillaume]";
mes "So you will take this fight as your own...";
mes "Then you are my enemy.";
set Bat_Team,0;
next;
mes "[General Guillaume]";
mes "Go now, We will meet again in the Battlefield.";
break;
case 3:
mes "[General Guillaume]";
mes "I'll be the one who will capture the flag!";
break;
}
close2;
cutin "",255;
end;
}
// General Croix
// *********************************************************************
bat_room,160,140,3 script Prince Croix 416,{
cutin "bat_crua1",2;
mes "[Prince Croix]";
mes "Wise adventurer, why don't you lend us your power for victory?";
next;
cutin "bat_crua2",2;
mes "[Prince Croix]";
mes "I do not wish to shed blood, but I have no choice but to fight for the possibility of peace and for the sake of my people.";
next;
mes "[Prince Croix]";
mes "General Guillaume may have an advantage in this battle as he is the great general of Maroll, but that doesn't automatically mean he'll win. I want to win this battle so that I can grant a better future for my people.";
next;
switch( select("Join the Red Team","Join the Green Team","End Conversation") )
{
case 1:
mes "[Prince Croix]";
mes "Thank you so much. I feel like I can win with the help of adventurers like you. Now, please go downstairs and join your comrades in sharpening their skills to fight the enemy!";
set Bat_Team,2;
break;
case 2:
mes "[Prince Croix]";
mes "So you will take this fight as your own...";
mes "Then you are my enemy.";
set Bat_Team,0;
next;
mes "[Prince Croix]";
mes "Go now, We will meet again in the Battlefield.";
break;
case 3:
mes "[Prince Croix]";
mes "For Maroll!";
break;
}
close2;
cutin "",255;
end;
}
// Guard Dummy
// *********************************************************************
bat_room,161,141,3 script Prince Croix's Aid::bat_aid 415,{ end; }
bat_room,161,139,3 duplicate(bat_aid) Prince Croix's Aid::bat_aid2 415
bat_room,161,160,3 duplicate(bat_aid) General Guillaume's Aid::bat_aid3 419
bat_room,161,158,3 duplicate(bat_aid) General Guillaume's Aid::bat_aid4 419
// Flags
// *********************************************************************
- script Base Flag#bg -1,{ end; }
// BattleGround Warper - Exit
// *********************************************************************
bat_room,148,150,4 script Teleporter#bat 124,{
mes "[Teleporter]";
mes "Do you wish to leave the battlefield? Use my service to return to town.";
next;
if( select("Leave:Don't Leave") == 2 )
{
mes "[Teleporter]";
mes "I'll be here whenever you're in need of my service.";
close;
}
switch( @ArenaPVP_out )
{
// Rune Midgard Republic
case 1: warp "prontera",138,86; break;
case 2: warp "payon",165,98; break;
case 3: warp "morocc",153,94; break;
case 4: warp "umbala",121,143; break;
case 5: warp "comodo",196,140; break;
case 6: warp "niflheim",214,193; break;
case 7: warp "aldebaran",143,111; break;
case 8: warp "geffen",107,53; break;
// Schwarzard Republic
case 9: warp "yuno",151,177; break;
case 10: warp "hugel",99,143; break;
case 11: warp "lighthalzen",167,93; break;
case 12: warp "einbroch",70,194; break;
case 13: warp "einbech",168,130; break;
// Arunafelz Republic
case 14: warp "rachel",118,114; break;
case 15: warp "veins",207,122; break;
// Islands
case 16: warp "nameless_n",161,179; break;
case 17: warp "louyang",213,106; break;
case 18: warp "gonryun",154,111; break;
case 19: warp "ayothaya",148,109; break;
case 20: warp "moscovia",229,195; break;
case 21: warp "xmas",151,127; break;
case 22: warp "amatsu",203,107; break;
case 23: warp "izlude",126,114; break;
case 24: warp "brasilis",195,211; break;
case 25: warp "manuk",279,214; break;
case 26: warp "splendide",200,174; break;
// Anyplace else
default:
set .@spoint$, getsavepoint(0);
set .@x, getsavepoint(1);
set .@y, getsavepoint(2);
mes "[Teleporter]";
mes "You will be sent back to " + .@spoint$ + ".";
close2;
warp .@spoint$, .@x, .@y;
break;
}
set @ArenaPVP_out, 0;
end;
}
// Kafra
// *********************************************************************
bat_room,148,147,4 script Kafra Staff::kaf_bat 861,{
cutin "kafra_09",2;
callfunc "F_Kafra",0,2,1,150,0;
}
// Badges Exchange
// *********************************************************************
Question
Scofield
I have this npc BG, I wanted to use thejoinbg command appears and 2 options 1 to go to the blue side and one for the red side, and so already getting on the waiting.
Edited by cumbe11Link to comment
Share on other sites
2 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.