PandaLovesHamster's post in REMOVED was marked as the answer
*cutin "<filename>",<position>;
This command will display a picture, usually an NPC illustration, also called
cutin, for the currently attached client. The position parameter determines the
placement of the illustration and takes following values:
0 - bottom left corner
1 - bottom middle
2 - bottom right corner
3 - middle of screen in a movable window with an empty title bar
4 - middle of screen without the window header, but still movable
PandaLovesHamster's post in Need help! was marked as the answer
Replace
set #CASHPOINTS, #CASHPOINTS+(.@j*1);
with
set #CASHPOINTS, #CASHPOINTS + (.@j / 2 );
Because the value of .@j -> is 2 and you want to only give half of the number of TCG to be cash points right?
// Can you use _M/_F to make new accounts on the server?
new_account: yes
Found in login_athena.conf, find that line and see if it is set, if it is set to no, change to yes, restart your server then log in using _m/_f method when creating an account for the first time.
--
If you want to be a GM, you'll have to go inside your database, then proceed to login table, then look for group id for your account and change it to 99
set .soundef_number, .soundef_number + 1;
switch (.soundef_number)
{
case 1:
soundeffect "hollen2.wav",0;
break;
case 2:
soundeffect "hollen3.wav",0;
break;
case 3:
soundeffect "hollen4.wav",0;
break;
case 4:
soundeffect "hollen5.wav",0;
break;
}
if (.soundef_number >= 3)
{
set .soundef_number, 0;
}
Try removing those from the script itself and see if it still crashes.
//Script by Normynator v1.1
//Modified by Panda
prontera,146,163,4 script Event Representative 113,{
function EndEvent;
if(getgmlevel() >= 99){
.@s = select("Start:Stop:Set Reward:Cancel");
if(.@s == 1){
mes "[ ^83cfe9Representative^000000 ]";
if(.config_done < 1){ mes "Please set your rewards and number of winners first."; close; }
mes "Event has been started.";
close2;
set $giveaway, 0;
set .start, 1;
announce "[Event Representative]: [GM] "+strcharinfo(0)+" has started a Give Away Event!",0;
sleep2 10000;
announce "[Event Representative]: Number of Winners - "+.winner+" - ",0;
end;
}
else if(.@s == 2){
if(.start < 1){ mes "No event to stop."; close; }
mes "[ ^83cfe9Representative^000000 ]";
mes "You have cancelled the event.";
set $giveaway, 1000;
EndEvent;
close;
}
else if(.@s == 3){
mes "[ ^83cfe9Representative^000000 ]";
mes "What reward do you want to give to the players?";
input .Rew_Item;
set .item,.Rew_Item;
if ( getiteminfo( .item, 0 ) == -1 ) {
next;
mes "[ ^83cfe9Representative^000000 ]";
mes "Invalid Item ID";
close;
}
next;
mes "[ ^83cfe9Representative^000000 ]";
mes "Do you want to reward them "+getitemname(.Rew_Item)+"?";
menu "Yes",-;
next;
mes "[ ^83cfe9Representative^000000 ]";
mes "How many items will the player get?";
input .Rew_Amt;
set .amount,.Rew_Amt;
if(.amount < 1){
next;
mes "[ ^83cfe9Representative^000000 ]";
mes "Quantity can not be lesser than 1.";
close;
}
next;
mes "[ ^83cfe9Representative^000000 ]";
mes "Are you sure with "+.Rew_Amt+" items?";
menu "Yes",-;
next;
mes "[ ^83cfe9Representative^000000 ]";
mes "Quantity has been set.";
next;
mes "[ ^83cfe9Representative^000000 ]";
mes "How many players do you want to win?";
input .Rew_Win;
set .winner,.Rew_Win;
if(.winner < 1){
next;
mes "[ ^83cfe9Representative^000000 ]";
mes "Winners can not be lesser than 1.";
close;
}
next;
mes "[ ^83cfe9Representative^000000 ]";
mes .winner+" winners will be able to win.";
set .config_done,1;
close;
}else{
end;
}
}
if(.start < 1){ mes "[Representative]"; mes "No events are running."; close; }
if (#AlreadyGot){
mes "[ ^83cfe9Representative^000000 ]";
mes "I have ^FF0000"+.@left + "^000000 items left.";
mes "You already got your item.";
close;
}
if($giveaway >= .winner){
mes "[ ^83cfe9Representative^000000 ]";
mes "I'm sorry, all items have been claimed.";
close;
}
else{
mes "[ ^83cfe9Representative^000000 ]";
set .@left, .winner - $giveaway;
mes "Hi";
mes "I have ^FF0000"+.@left + "^000000 items left.";
next;
set #AlreadyGot, 1;
mes "[ ^83cfe9Representative^000000 ]";
mes "Congratulations for making it.";
getitem .Rew_Item, .Rew_Amt;
announce strcharinfo(0)+" redeemed one of the "+.@left+" Event Items!",0;
set $giveaway, $giveaway + 1;
if($giveaway == .winner){
EndEvent;
}
close;
}
OnInit:
waitingroom "Event Representative",0;
set .start, 0;
end;
EndEvent:
announce "All Event Items have been redeemed.",0;
query_sql "DELETE FROM `main`.`acc_reg_num` WHERE `key`='#AlreadyGot'"; //update this line
set .start,0;
end;
}
Just change the query line if you have a different database structure. Let me know if something doesn't work.
- pointshop custom_seller1 #ONLINEPOINTS,509:0,5406:100,5407:100
- pointshop custom_seller2 #ONLINEPOINTS,509:0,5766:100,5207:100
prontera,155,155,3 script Name_Shop_Here 437,{
mes "[NPC_NAME_HERE]";
mes "Which one do you want to open?";
@shop = select("Headgears:Supplies");
mes "[NPC_NAME_HERE";
mes "Happy shopping.";
close2;
callshop "custom_seller"+@shop,1;
end;
}
Your first NPC is good already.
Now for your second one, copy what you did to your first NPC (if statement) and put it on your second NPC so they don't end up doing the quest for the second NPC twice.
set #account, 1;
Put this one on the last leg of your quest. Preferably when the player gets his reward.
Hello, you can add
getitem 501,1;
every after
callfunc "Job_Change", @target_job;
if you want the items to be bound, use the following code
getitembound 501,1,1;
You can see more flags about getitembound here
As for zeny
Zeny += 10000 //10000 is how much zeny you give
//===== rAthena Script =======================================
//= Euphy's WOE Controller
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.5
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= A controller for War of Emperium designed for
//= simplicity and ease of use.
//= Many concepts taken from ToastOfDoom's script,
//= and "rewards" function originally by Goddameit.
//===== Additional Comments: =================================
//= Be sure to disable the default agit controllers!
//== npc\guild\agit_controller.txt
//== npc\guild2\agit_start_se.txt
//============================================================
// Information NPC
//============================================================
brasilis,191,185,4 script WOE Information 835,{
doevent "WOE_CONTROL::OnMenu";
end;
OnAgitStart:
while(agitcheck()) {
sleep 425;
}
end;
}
// Script Core
//============================================================
- script WOE_CONTROL -1,{
function Disp_Owner; function Add_Zero;
OnInit:
// -----------------------------------------------------------
// Configuration settings.
// -----------------------------------------------------------
set .CastleWarp,0; // 1: Always enable all castle warps. | 0: Warp only to active castles.
set .AutoKick,1; // Automatically kick players from inactive castles during WOE? (1:yes / 0:no)
set .NoOwner,0; // Automatically kick players from unconquered castles outside of WOE? (1:yes / 0:no)
set .ExitWarp,0; // Warp all players from castles when WOE ends? (1:yes / 0:no)
set .GMAccess,99; // GM level required to access Session Manager.
// -----------------------------------------------------------
// Reward options.
// -----------------------------------------------------------
// [1] Enable rewards.
// [2] Mail all rewards.
// - If not set, players receive items in their inventory.
// - Only ONE item can be sent via mail, plus Zeny.
// - Note that offline players do NOT receive rewards.
// [4] Only reward Guild Masters.
// - If not set, all guild members are rewarded.
// - If mailing is enabled (option 2), offline Guild Masters WILL receive rewards.
// [8] Duplicate IP check.
// - Members in a guild with the same IP address are not rewarded.
// - If Guild Masters is enabled (option 4), this feature is not used.
// -----------------------------------------------------------
// Combine values as needed (e.g. 1|8 = 1+8 = 9).
set .Options, 1|8;
// Rewards per castle.
// -- when given directly: <itemID>,<amount>{,<itemID>,<amount>,...}
// -- via mail (option 2): <itemID>,<amount>,<Zeny>
setarray .Reward[0],14001,1;
// -----------------------------------------------------------
// Constants (leave this section alone).
// -----------------------------------------------------------
setarray .Castles$[0],
"prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05",
"payg_cas01","payg_cas02","payg_cas03","payg_cas04","payg_cas05",
"gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05",
"aldeg_cas01","aldeg_cas02","aldeg_cas03","aldeg_cas04","aldeg_cas05",
"arug_cas01","arug_cas02","arug_cas03","arug_cas04","arug_cas05",
"schg_cas01","schg_cas02","schg_cas03","schg_cas04","schg_cas05";
setarray .EndLabel$[0],"ar01","ar02","ar03","ar04","ar05","sc01","sc02","sc03","sc04","sc05";
setarray .Days$[0],"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday";
setarray .Regions$[0],"Prontera","Payon","Geffen","Aldebaran","Arunafeltz","Schwaltzvalt";
setarray .Map$[0],"prt_gld","pay_gld","gef_fild13","alde_gld","aru_gld","sch_gld";
setarray .MapX[0],134,240,153,111,208,121,295,317,140,204,214,308,143,193,305,48, 95,142,239,264,158,83, 68,299,292,293,288, 97,137, 71;
setarray .MapY[0], 65,128,137,240,240,233,116,293,160,266, 75,240,240,278, 87,83,249, 85,242, 90,272,47,155,345,107,100,252,196, 90,315;
// -----------------------------------------------------------
set .Size, getarraysize($WOE_CONTROL);
if (.AutoKick || .NoOwner)
for(set .@i,0; .@i<30; set .@i,.@i+1) {
setmapflag .Castles$[.@i], mf_loadevent;
setd "."+.Castles$[.@i], .@i;
}
if (!agitcheck() && !agitcheck2()) sleep 4000;
set .Init,1;
OnMinute00:
freeloop(1);
if (agitcheck() || agitcheck2()) {
for(set .@i,0; .@i<.Size; set .@i,.@i+4)
if (gettime(4) == $WOE_CONTROL[.@i] && gettime(3) == $WOE_CONTROL[.@i+2]) {
OnWOEEnd:
announce "The War Of Emperium is over!",bc_all|bc_woe;
AgitEnd; AgitEnd2;
sleep 1000;
for(set .@j,0; .@j<30; set .@j,.@j+1) {
if (.Active[0]&(1<<.@j)) Disp_Owner(.Castles$[.@j],1);
if (.ExitWarp) maprespawnguildid .Castles$[.@j],0,3;
}
if (.Options&1 && .Active[0] && .ForceEnd != 2) callsub OnReward, .Active[0];
deletearray .Active[0],2;
if (.ForceEnd) { set .ForceEnd,0; end; }
break;
}
}
if ((!agitcheck() && !agitcheck2()) || .Init) {
if (!agitcheck() && !agitcheck2()) set .Init,0;
for(set .@i,0; .@i<.Size; set .@i,.@i+4)
if (gettime(4) == $WOE_CONTROL[.@i] && gettime(3) >= $WOE_CONTROL[.@i+1] && gettime(3) < $WOE_CONTROL[.@i+2]) {
deletearray .Active[0],2;
set .Active[0], $WOE_CONTROL[.@i+3];
if (.Init) { AgitEnd; AgitEnd2; }
else announce "The War Of Emperium has begun!",bc_all|bc_woe;
sleep 1000;
AgitStart; AgitStart2;
for(set .@j,0; .@j<30; set .@j,.@j+1) {
if (.Active[0]&(1<<.@j)) {
if (!.Init) Disp_Owner(.Castles$[.@j],0);
set .Active[1], .Active[1] | (1<<((.@j/5)+1));
} else {
if (.@j<20) {
donpcevent "Agit#"+.Castles$[.@j]+"::OnAgitEnd";
killmonster .Castles$[.@j], "Agit#"+.Castles$[.@j]+"::OnAgitBreak";
} else {
donpcevent "Manager#"+.Castles$[.@j]+"::OnAgitEnd2";
killmonster .Castles$[.@j], "Steward#"+.EndLabel$[.@j-20]+"::OnStartArena";
}
}
}
break;
}
}
set .Init,0;
end;
function Disp_Owner {
set .@o, getcastledata(getarg(0),1);
if (.@o) announce "The ["+getcastlename(getarg(0))+"] castle "+((getarg(1))?"has been conquered":"is currently held")+" by the ["+getguildname(.@o)+"] guild.",bc_all|bc_woe;
else announce "The ["+getcastlename(getarg(0))+"] castle is currently unoccupied.",bc_all|bc_woe;
return;
}
function Add_Zero {
return ((getarg(0)<10)?"0":"")+getarg(0)+(getarg(1,0)?".":":")+"00";
}
OnReward:
set .@sql$, ((.Options&4)?"position = 0":"online = 1");
if (.Options&2) set .@str$,gettimestr("%B %d, %Y",21);
freeloop(1);
for(set .@i,0; .@i<30; set .@i,.@i+1)
if (getarg(0)&(1<<.@i)) {
set .@gid, getcastledata(.Castles$[.@i],1);
if (!.@gid) continue;
set .@size, query_sql("SELECT account_id,char_id FROM `guild_member` WHERE guild_id = '"+.@gid+"' AND "+.@sql$,.@aid,.@cid);
for(set .@j,0; .@j<.@size; set .@j,.@j+1) {
if (.Options&8 && !(.Options&4)) {
set .@ip$, replacestr(getcharip(.@aid[.@j]),".","a");
if (getd(".@ip_"+.@i+"_"+.@ip$)) continue;
setd ".@ip_"+.@i+"_"+.@ip$,1;
}
if (.Options&2) {
query_sql("INSERT INTO `mail` (send_name,dest_id,title,message,nameid,amount,identify,zeny,time) VALUES ("+
"'no-reply',"+.@cid[.@j]+",'** Siege Reward: "+getcastlename(.Castles$[.@i])+" **',"+
"'Brave one,% % Congratulations!% Your guild has successfully occupied% territory in the War of Emperium on% "+.@str$+".% % % % % [ Your reward is attached. ]',"+
.Reward[0]+","+.Reward[1]+",0,"+.Reward[2]+",UNIX_TIMESTAMP(NOW()))");
if (!getd(".@str_"+.@cid[.@j]) && isloggedin(.@aid[.@j],.@cid[.@j])) {
setd ".@str_"+.@cid[.@j],1;
message rid2name(.@aid[.@j]),"You've got mail! Please re-login to update your mailing list.";
}
} else if (isloggedin(.@aid[.@j])) {
for(set .@k,0; .@k<getarraysize(.Reward); set .@k,.@k+2)
getitem .Reward[.@k], .Reward[.@k+1], .@aid[.@j];
message rid2name(.@aid[.@j]),"You have been rewarded for conquering "+getcastlename(.Castles$[.@i])+".";
}
}
}
if (.Options&2) query_sql("UPDATE `mail` SET message = REPLACE(message,'%',CHAR(13)) WHERE send_name = 'no-reply'");
return;
OnPCLoadMapEvent:
if (!compare(strcharinfo(3),"g_cas")) end;
if (((.AutoKick && .Active[0]) || (.NoOwner && !getcastledata(strcharinfo(3),1))) && !(.Active[0]&(1<<getd("."+strcharinfo(3))))) {
if (getcharid(2) && getcastledata(strcharinfo(3),1) == getcharid(2)) end;
sleep2 1000;
message strcharinfo(0), getcastlename(strcharinfo(3))+" is currently inactive.";
sleep2 5000;
if (compare(strcharinfo(3),"g_cas")) warp "SavePoint",0,0;
}
end;
OnMenu:
while(1) {
mes "[WOE Information]";
if (agitcheck() || agitcheck2()) {
if (.Active[0]) {
for(set .@i,0; .@i<.Size; set .@i,.@i+4)
if (gettime(4) == $WOE_CONTROL[.@i] && gettime(3) >= $WOE_CONTROL[.@i+1] && gettime(3) < $WOE_CONTROL[.@i+2]) {
set .@i, $WOE_CONTROL[.@i+2];
break;
}
mes "The War of Emperium is ^0055FFactive^000000 until ^FF0000"+Add_Zero(.@i)+"^000000 in the following regions:";
mes " ";
for(set .@i,0; .@i<6; set .@i,.@i+1)
if (.Active[1]&(1<<(.@i+1))) mes " > ^777777"+.Regions$[.@i]+"^000000";
} else
mes "The War of Emperium is ^0055FFactive^000000.";
} else {
for(set .@i,0; .@i<.Size; set .@i,.@i+4)
if ((gettime(4) == $WOE_CONTROL[.@i] && gettime(3) <= $WOE_CONTROL[.@i+1]) || gettime(4) < $WOE_CONTROL[.@i]) {
setarray .@time[0],$WOE_CONTROL[.@i],$WOE_CONTROL[.@i+1];
break;
}
if (!getarraysize(.@time))
setarray .@time[0],$WOE_CONTROL[0],$WOE_CONTROL[1];
mes "The War of Emperium is ^777777inactive^000000.";
if (.Size) {
mes " ";
mes "The next session will begin";
mes "on ^0055FF"+.Days$[.@time[0]]+"^000000 at "+Add_Zero(.@time[1])+"^000000.";
}
}
next;
switch(select(""+((.CastleWarp || .Active[1])?" ~ Warp to castles...":"")+": ~ Check schedule...: ~ View castle owners...:"+((getgmlevel()<.GMAccess || !getgmlevel())?"":" ~ Manage sessions...")+": ~ ^777777Cancel^000000")) {
case 1:
if (.CastleWarp) set .@clr$,"^0055FF";
set .@menu$,"";
for(set .@i,0; .@i<6; set .@i,.@i+1) {
if (.CastleWarp || .Active[1]&(1<<(.@i+1)))
set .@menu$, .@menu$+" ~ "+((.Active[1]&(1<<(.@i+1)))?.@clr$:"^777777")+.Regions$[.@i]+" Castles^000000";
set .@menu$, .@menu$+":";
}
set .@i, select(.@menu$)-1;
set .@menu$,"";
for(set .@j,.@i*5; .@j<(.@i*5)+5; set .@j,.@j+1) {
if (.CastleWarp || .Active[0]&(1<<.@j))
set .@menu$, .@menu$+" ~ "+((.Active[0]&(1<<.@j))?.@clr$:"^777777")+getcastlename(.Castles$[.@j])+"^000000";
set .@menu$, .@menu$+":";
}
set .@j, select(.@menu$)-1;
warp .Map$[.@i],.MapX[(.@i*5)+.@j],.MapY[(.@i*5)+.@j];
close;
case 2:
mes "[Schedule]";
if (.Size) {
freeloop(1);
for(set .@i,0; .@i<.Size; set .@i,.@i+4) {
mes "> ^FF0000"+.Days$[$WOE_CONTROL[.@i]]+" ("+Add_Zero($WOE_CONTROL[.@i+1])+"-"+Add_Zero($WOE_CONTROL[.@i+2])+")^000000";
for(set .@j,0; .@j<30; set .@j,.@j+1)
if ($WOE_CONTROL[.@i+3]&(1<<.@j)) mes " ~ "+getcastlename(.Castles$[.@j])+" ^777777("+.Castles$[.@j]+")^000000";
if (.@i+4 < .Size) mes " ";
}
freeloop(0);
} else
mes "No times are configured.";
next;
break;
case 3:
mes "[Castle Ownership]";
for(set .@i,0; .@i<6; set .@i,.@i+1) {
set .@k, .@i*5;
mes "> ^FF0000"+.Regions$[.@i]+"^000000";
for(set .@j,.@k; .@j<(.@k+5); set .@j,.@j+1) {
set .@t, getcastledata(.Castles$[.@j],1);
mes " ~ "+getcastlename(.Castles$[.@j])+": "+((.@t)?"^0055FF"+getguildname(.@t):"^777777unoccupied")+"^000000";
}
if (.@i < 5) mes " ";
}
next;
break;
case 4:
while(1) {
mes "[Session Manager]";
mes "There are ^0055FF"+(.Size/4)+" session(s)^000000 configured.";
mes "What would you like to do?";
next;
switch(select(" ~ Add a session...: ~ Delete a session...: ~ Reload settings...:"+((agitcheck() || agitcheck2())?" ~ End WOE session...":"")+": ~ ^777777Go back^000000")) {
case 1:
mes "[New Session]";
if (.Size > 127) {
mes "You have already reached the maximum of 32 sessions.";
next;
break;
}
mes "Select a day.";
next;
set .@Day, select(" ~ "+implode(.Days$,": ~ "))-1;
mes "[New Session]";
mes "Select a start time for ^0055FF"+.Days$[.@Day]+"^000000.";
next;
set .@menu$,"";
for(set .@i,0; .@i<23; set .@i,.@i+1)
set .@menu$, .@menu$+" ~ "+Add_Zero(.@i,1)+":";
set .@Start, select(.@menu$)-1;
mes "[New Session]";
mes "Select an end time for ^0055FF"+.Days$[.@Day]+"^000000.";
next;
set .@menu$,"";
for(set .@i,.@Start+1; .@i<24; set.@i,.@i+1)
set .@menu$, .@menu$+" ~ "+Add_Zero(.@i,1)+":";
set .@End, select(.@menu$)+.@Start;
for(set .@i,0; .@i<.Size; set .@i,.@i+4)
if (.@Day == $WOE_CONTROL[.@i] &&
((.@Start >= $WOE_CONTROL[.@i+1] && .@Start < $WOE_CONTROL[.@i+2]) ||
(.@End > $WOE_CONTROL[.@i+1] && .@End <= $WOE_CONTROL[.@i+2]) ||
(.@Start <= $WOE_CONTROL[.@i+1] && .@End >= $WOE_CONTROL[.@i+2]))) {
mes "[New Session]";
mes "The chosen times overlap with an existing session.";
next;
set .@d,1;
break;
}
if (.@d) { set .@d,0; break; }
set .@Castle,0;
while(1) {
mes "[New Session]";
mes "^0055FF"+.Days$[.@Day]+" ("+Add_Zero(.@Start)+"-"+Add_Zero(.@End)+")^000000";
mes " > Castles:";
if (!.@Castle)
mes " ~ ^777777(none selected)^000000";
else for(set .@i,0; .@i<30; set .@i,.@i+1)
if (.@Castle&(1<<.@i)) mes " ~ "+getcastlename(.Castles$[.@i])+" ("+.Castles$[.@i]+")";
next;
set .@menu$,((.@Castle)?" ~ ^FF0000Finished...^000000":"")+":";
for(set .@i,0; .@i<30; set .@i,.@i+1)
set .@menu$, .@menu$+" ~ "+((.@Castle&(1<<.@i))?"^0055FF":"")+getcastlename(.Castles$[.@i])+" ("+.Castles$[.@i]+")^000000:";
set .@i, select(.@menu$)-1;
if (.@i)
set .@Castle, .@Castle^(1<<(.@i-1));
else {
mes "[New Session]";
mes "Are you sure?";
next;
switch(select(" ~ ^0055FFAdd session...^000000: ~ Continue selecting castles...: ~ ^777777Cancel^000000")) {
case 1:
for(set .@i,0; .@i<.Size; set .@i,.@i+4)
if ((.@Day == $WOE_CONTROL[.@i] && .@End <= $WOE_CONTROL[.@i+1]) || .@Day < $WOE_CONTROL[.@i]) {
set .@d,1;
break;
}
if (!.@d) { set .@d,1; set .@i,.Size; }
copyarray $WOE_CONTROL[.@i+4], $WOE_CONTROL[.@i], .Size-.@i;
setarray $WOE_CONTROL[.@i], .@Day, .@Start, .@End, .@Castle;
set .Size, getarraysize($WOE_CONTROL);
case 3:
mes "[New Session]";
mes ((.@d)?"Session added.":"Cancelled.");
next;
set .@d,1;
case 2:
break;
}
if (.@d) { set .@d,0; break; }
}
}
break;
case 2:
mes "[Remove Session]";
if (!.Size) {
mes "There are no sessions configured.";
next;
break;
}
mes "Select a session to remove.";
next;
set .@menu$,"";
for(set .@i,0; .@i<.Size; set .@i,.@i+4)
set .@menu$, .@menu$+" ~ "+.Days$[$WOE_CONTROL[.@i]]+" ("+Add_Zero($WOE_CONTROL[.@i+1],1)+"-"+Add_Zero($WOE_CONTROL[.@i+2],1)+"):";
set .@menu$, .@menu$+" ~ ^777777Cancel^000000";
set .@i, select(.@menu$)-1;
if (.@i == (.Size/4)) break;
mes "[Remove Session]";
mes "Delete ^0055FF"+.Days$[$WOE_CONTROL[.@i*4]]+"'s^000000 session?";
mes "This action cannot be undone.";
next;
set .@j, select(" ~ ^FF0000Delete session...^000000: ~ ^777777Cancel^000000");
mes "[Remove Session]";
if (.@j == 2)
mes "Cancelled.";
else {
deletearray $WOE_CONTROL[.@i*4],4;
set .Size, getarraysize($WOE_CONTROL);
mes "Session deleted.";
}
next;
break;
case 3:
mes "[Reload Settings]";
mes "This will trigger all events related to new session configurations, if any.";
if (agitcheck() || agitcheck2()) {
mes " ";
mes "Be aware that this will disrupt the current WOE session.";
}
next;
set .@i, select(" ~ ^0055FFReload settings...^000000: ~ ^777777Cancel^000000");
mes "[Reload Settings]";
if (.@i == 2) mes "Cancelled.";
else {
set .Init,1;
donpcevent "WOE_CONTROL::OnMinute00";
mes "Variables have been re-initialized.";
}
next;
break;
case 4:
mes "[Force Agit End]";
if (!agitcheck() && !agitcheck2()) {
mes "WOE has already ended.";
next;
break;
}
mes "This command will safely execute all AgitEnd events.";
mes " ";
mes "Kill the current WOE session?";
next;
set .@i, select(" ~ ^FF0000End session...^000000:"+((.Options&1)?" ~ ^FF0000End session without rewards...^000000":"")+": ~ ^777777Cancel^000000");
mes "[Force Agit End]";
if (.@i == 3)
mes "Cancelled.";
else {
set .ForceEnd, .@i;
donpcevent "WOE_CONTROL::OnWOEEnd";
mes "WOE session terminated.";
}
next;
break;
case 5:
set .@d,1; break;
}
if (.@d) { set .@d,0; break; }
} break;
case 5:
close;
} }
}
//Duplicates
payon,86,225,5 duplicate(WOE Information) WOE Information#28 835
gonryun,81,275,5 duplicate(WOE Information) WOE Information#29 835
hugel,178,105,5 duplicate(WOE Information) WOE Information#30 835
veins,322,255,5 duplicate(WOE Information) WOE Information#31 835
umbala,145,226,5 duplicate(WOE Information) WOE Information#32 835
I think you can use callfunc on this one on the item, make it usable and when it does, you call the function you want, for example the auto 99/70 or max level.
function script jobchange {
and then you can add the script as follows
if( Class != 0 ){ mes "[ Goddess of War ]"; mes "You are not a novice."; set NPCTalk1, 1; close; }
mes "[Ragnarok Online: ^FF0000 Flames of War^000000]";
mes "I was sent by ^FF0000 Admin Dusk ^000000 to assist you.";
mes "Choose your class and join the war.";
next;
.@i = select( .Menu$ ) - 1;
if( select( "Change to "+jobname( .JobList[.@i] )+"?:Cancel" ) == 1 ){
jobchange .JobList[.@i];
BaseLevel = .BaseLevel;
JobLevel = .JobLevel;
resetskill;
resetstatus;
SkillPoint = .SkillPoints;
mes "[ Goddess of War ]";
mes "Now to talk to the ^0000FFGoddess of Fortune^000000";
set TalkNPC1, 1;
close;
}
end;
OnInit:
setarray .JobList[0],4008,4009,4010,4011,4012,4013,4015,4016,4017,4018,4019,4020,4021,4046,4047,4049,24,25,23;
.BaseLevel = 99;
.JobLevel = 70;
.SkillPoints = 127; //( 9 + 49 + 69 )
//waitingroom "Job Changer",0;
.@size = getarraysize( .JobList );
for( .@i = 0; .@i < .@size; .@i++ )
.Menu$ = .Menu$ + jobname( .JobList[.@i] )+":";
end;
}
Now you're set. Just set up an item to make it a consumable or usable item and just add callfunc to it and that should do it.
As for the Refine Ticket, you can check out Euphy's. It's the one I'm using and is very well pleased with it. It's a really good script.
Forgot to add, you might want to REFUND the ticket if ever the player clicks cancel.