* Added Guillotine Cross job quest, again thanks to Muad_Dib! (bugreport:5834)

* Follow-up r16941: added documentation.
* Updated WOE Controller script to v1.4, which modifies LoadEvent mapflag settings for easier cross-compatibility and standardizes script format.
* Minor tweaks here and there.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16947 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
euphyy 2012-11-23 03:22:28 +00:00
parent 1fae8bcda4
commit 7630c7eb61
12 changed files with 4256 additions and 219 deletions

View File

@ -36,7 +36,7 @@ packet_ver_flag: 0xFFFFFF
// Messages that break this threshold are silently omitted.
min_chat_delay: 0
// valid range of dye's and styles on the client
// Valid range of dyes and styles on the client.
min_hair_style: 0
max_hair_style: 27
min_hair_color: 0

View File

@ -2,7 +2,7 @@
//
// Structure of Database :
// ID,Sprite_Name,kROName,iROName,LV,HP,SP,EXP,JEXP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Mode,Speed,aDelay,aMotion,dMotion,MEXP,MVP1id,MVP1per,MVP2id,MVP2per,MVP3id,MVP3per,Drop1id,Drop1per,Drop2id,Drop2per,Drop3id,Drop3per,Drop4id,Drop4per,Drop5id,Drop5per,Drop6id,Drop6per,Drop7id,Drop7per,Drop8id,Drop8per,Drop9id,Drop9per,DropCardid,DropCardper
// Note: Keep the Sprite_Name field as it is (in the game client). You may change Name,JName field tough
// Note: Keep the Sprite_Name field as it is in the game client.
1001,SCORPION,Scorpion,Scorpion,24,1109,0,287,176,1,80,135,30,0,1,24,24,5,52,5,10,12,0,4,23,0x3195,200,1564,864,576,0,0,0,0,0,0,0,990,70,904,5500,757,57,943,210,7041,100,508,200,625,20,0,0,0,0,4068,1
1002,PORING,Poring,Poring,1,50,0,2,1,1,7,10,0,5,1,1,1,0,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,909,7000,1202,100,938,400,512,1000,713,1500,512,150,619,20,0,0,0,0,4001,1
@ -1083,8 +1083,8 @@
2027,G_DARK_SHADOW,Dark Shadow,Dark Shadow,114,42900,0,0,0,1,10000,15000,35,44,1,23,12,145,102,60,10,12,0,0,47,0x3795,220,768,1776,648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
//2028,E_MINOROUS,Minorous,Minorous,1,741,0,0,0,1,30,48,2,5,6,4,6,6,5,3,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,7606,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
//2029,E_MINOROUS_,Minorous,Minorous,10,15,0,10,0,1,100,150,100,99,1,1,1,1,100,100,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,941,10,11708,2000,11708,4000,11708,1000,516,1000,2289,1,577,1000,0,0,0,0,644,1
//2030,HIDEN_PRIEST,Hiden Priest,Hiden Priest,90,240000,0,0,0,2,1300,1983,0,30,1,32,40,100,82,40,10,12,2,6,89,0x120,150,432,432,360,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
//2031,DANDELION_H,Dandelion,Dandelion,80,120000,0,0,0,1,305,610,0,10,1,19,32,0,63,20,10,12,1,7,47,0x120,250,1772,72,384,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2030,HIDEN_PRIEST,Hiden Priest,Hiden Priest,90,240000,0,0,0,2,1300,1983,0,30,1,32,40,100,82,40,10,12,2,6,89,0x120,150,432,432,360,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2031,DANDELION_H,Dandelion,Dandelion,80,120000,0,0,0,1,305,610,0,10,1,19,32,0,63,20,10,12,1,7,47,0x120,250,1772,72,384,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
//2032,GUARDIAN_FOREST,Forest Guardian,Forest Guardian,50,8578,0,0,0,1,1000,1103,15,25,1,75,55,1,93,45,10,12,0,6,27,0x120,100,868,480,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
//2033,GOLDEN_TULIP,Golden Tulip,Golden Tulip,1,299,0,0,0,1,1,2,100,99,0,0,0,0,0,0,7,12,0,3,22,0x120,2000,1,1,1,0,0,0,0,0,0,0,7951,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
//2034,M_DESERT_WOLF_B,Baby Desert Wolf,Baby Desert Wolf,9,164,15,0,0,1,500,600,0,0,1,9,9,5,40,40,10,12,0,2,23,0x120,100,1600,900,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

View File

@ -2,7 +2,7 @@
//
// Structure of Database :
// ID,Sprite_Name,kROName,iROName,LV,HP,SP,EXP,JEXP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Mode,Speed,aDelay,aMotion,dMotion,MEXP,MVP1id,MVP1per,MVP2id,MVP2per,MVP3id,MVP3per,Drop1id,Drop1per,Drop2id,Drop2per,Drop3id,Drop3per,Drop4id,Drop4per,Drop5id,Drop5per,Drop6id,Drop6per,Drop7id,Drop7per,Drop8id,Drop8per,Drop9id,Drop9per,DropCardid,DropCardper
// Note: Keep the Sprite_Name field as it is (in the game client). You may change Name,JName field though
// Note: Keep the Sprite_Name field as it is in the game client.
1001,SCORPION,Scorpion,Scorpion,16,153,1,108,81,1,33,40,16,5,12,15,10,5,19,5,10,12,0,4,23,0x3195,200,1564,864,576,0,0,0,0,0,0,0,990,70,904,5500,757,57,943,210,7041,100,508,200,625,20,0,0,0,0,4068,1
1002,PORING,Poring,Poring,1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,909,7000,1202,100,938,400,512,1000,713,1500,512,150,619,20,0,0,0,0,4001,1
@ -1130,8 +1130,8 @@
// Additional Monsters
//2028,E_MINOROUS,Minorous,Minorous,1,741,0,0,0,1,30,48,4,5,6,4,6,6,5,3,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,7606,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
//2029,E_MINOROUS_,Minorous,Minorous,10,15,0,9,0,1,100,150,160,99,1,1,1,1,100,100,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,941,10,6119,2000,6119,4000,6119,1000,516,1000,2289,1,577,1000,0,0,0,0,644,1
//2030,HIDEN_PRIEST,Hiden Priest,Hiden Priest,90,240500,0,0,0,2,1300,1983,0,30,1,32,40,100,82,40,10,12,2,6,89,0x120,150,432,432,360,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
//2031,DANDELION_H,Dandelion,Dandelion,80,120000,0,0,0,1,305,610,0,10,1,19,32,0,63,20,10,12,1,7,47,0x120,250,1772,72,384,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2030,HIDEN_PRIEST,Hiden Priest,Hiden Priest,90,240500,0,0,0,2,1300,1983,0,30,1,32,40,100,82,40,10,12,2,6,89,0x120,150,432,432,360,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2031,DANDELION_H,Dandelion,Dandelion,80,120000,0,0,0,1,305,610,0,10,1,19,32,0,63,20,10,12,1,7,47,0x120,250,1772,72,384,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
//2032,GUARDIAN_FOREST,Forest Guardian,Forest Guardian,50,99999,0,0,0,1,3000,6000,160,99,100,100,100,100,100,100,10,12,0,6,27,0x120,200,868,480,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
//2033,GOLDEN_TULIP,Golden Tulip,Golden Tulip,1,100,0,0,0,1,1,2,160,99,0,0,0,0,0,0,7,12,0,3,22,0x120,2000,1,1,1,0,0,0,0,0,0,0,7951,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
//2034,M_DESERT_WOLF_B,Baby Desert Wolf,Baby Desert Wolf,9,164,15,0,0,1,500,600,0,0,1,9,9,5,40,40,10,12,0,2,23,0x120,100,1600,900,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

View File

@ -1,14 +1,14 @@
//===== rAthena Script =======================================
//= Sample: ChekWeight
//= Sample: CheckWeight
//===== By: ==================================================
//= rAthena Dev Team
//===== Current Version: =====================================
//= 20121113
//===== Description: =========================================
//= Demonstrates ChekWeight commands.
//= Demonstrates 'checkweight' command.
//============================================================
new_1-1,56,106,5 script ChkSpace 763,{
prontera,161,181,6 script ChkSpace 763,{
function ChkResult;
function FinalReport;

View File

@ -3316,39 +3316,41 @@ aren't. You can also pass the char_id to check for both account and char id.
---------------------------------------
*checkweight(<item id>,<amount>)
*checkweight("<item name>",<amount>)
*checkweight(<item id>,<amount>{,<item id>,<amount>,<item id>,<amount>,...});
*checkweight("<item name>",<amount>{,"<item name>",<amount>,"<item name>",<amount>,...});
*checkweight2(<id_array>,<amount_array>);
This function will compute and return 1 if the total weight of a specified
These functions will compute and return 1 if the total weight of the specified
number of specific items does not exceed the invoking character's carrying
capacity, and 0 otherwise. It is important to see if a player can carry the
items you expect to give them, failing to do that may open your script up to
abuse or create some very unfair errors.
This function, in addition to checking to see if the player is capable of
holding a set amount of items, also ensures the player has room in their
The second function will check an array of items and amounts, and also
returns 1 on success and 0 on failure.
The functions, in addition to checking to see if the player is capable of
holding a set amount of items, also ensure the player has room in their
inventory for the item(s) they will be receiving.
Like 'getitem', this function will also accept an 'english name' from the
database as an argument.
Example 1:
if (checkweight(512,10)) {
getitem 512,10;
} else {
mes "Sorry you cannot hold this amount of apples";
mes "Sorry, you cannot hold this amount of apples!";
}
close;
Or to put this another way:
Example 2:
if (checkweight("Apple",10) == 0) {
mes "Sorry you cannot hold this amount of apples";
} else {
getitem 512,10;
setarray .@item[0],512,513,514;
setarray .@amount[0],10,5,5;
if (!checkweight(.@item,.@amount)) {
mes "Sorry, you cannot hold this amount of fruit!";
}
close;
Both examples have the same effect.
---------------------------------------

View File

@ -3,7 +3,7 @@
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.3b
//= 1.4
//===== Compatible With: =====================================
//= rAthena SVN r16571+
//===== Description: =========================================
@ -27,8 +27,9 @@ OnInit:
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 (cannot be 0)
set .GMAccess,99; // GM level required to access Session Manager.
setarray .Reward[0],14001,1; // Reward for all members of conquering guilds, per castle: <ID>,<Count>{,...} (0 to disable)
// --------------------------------------------------------------------------------------------------------------------------
@ -46,29 +47,35 @@ OnInit:
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;
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]) {
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);
else if (.AutoKick) removemapflag .Castles$[.@j], mf_loadevent;
if (.ExitWarp) maprespawnguildid .Castles$[.@j],0,3; }
if (.ExitWarp) maprespawnguildid .Castles$[.@j],0,3;
}
if (.Reward[0] && .Active[0] && .ForceEnd != 2) callsub OnReward, .Active[0];
deletearray .Active[0],2;
if (.ForceEnd) { set .ForceEnd,0; end; }
break; } }
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]) {
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; }
@ -80,14 +87,18 @@ OnMinute00:
if (!.Init) Disp_Owner(.Castles$[.@j],0);
set .Active[1], .Active[1] | (1<<((.@j/5)+1));
} else {
if (.AutoKick) setmapflag .Castles$[.@j], mf_loadevent;
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; } }
killmonster .Castles$[.@j], "Steward#"+.EndLabel$[.@j-20]+"::OnStartArena";
}
}
}
break;
}
}
set .Init,0;
freeloop(0);
end;
@ -96,10 +107,11 @@ 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; }
return;
}
function Add_Zero {
return ((getarg(0)<10)?"0":"")+getarg(0)+(getarg(1,0)?".":":")+"00"; }
return ((getarg(0)<10)?"0":"")+getarg(0)+(getarg(1,0)?".":":")+"00";
}
OnReward:
for(set .@i,0; .@i<30; set .@i,.@i+1)
@ -112,15 +124,21 @@ OnReward:
if (isloggedin(.@acc[.@j],.@char[.@j])) {
for(set .@k,0; .@k<getarraysize(.Reward); set .@k,.@k+2)
getitem .Reward[.@k], .Reward[.@k+1], .@acc[.@j];
message rid2name(.@acc[.@j]),"You have been rewarded for conquering "+getcastlename(.Castles$[.@i])+"."; } } }
message rid2name(.@acc[.@j]),"You have been rewarded for conquering "+getcastlename(.Castles$[.@i])+".";
}
}
}
return;
OnPCLoadMapEvent:
if (!compare(strcharinfo(3),"g_cas")) end;
sleep2 1000;
message strcharinfo(0), getcastlename(strcharinfo(3))+" is inactive during this WOE session.";
sleep2 5000;
if (compare(strcharinfo(3),"g_cas")) warp "SavePoint",0,0;
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:
@ -130,198 +148,238 @@ while(1) {
if (!.Size) 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(3)<$WOE_CONTROL[.@i+2]) {
set .@i, $WOE_CONTROL[.@i+2]; break; }
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"; }
if (.Active[1]&(1<<(.@i+1))) mes " > ^777777"+.Regions$[.@i]+"^000000";
}
} else {
set .@j,0; set .@k,0;
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]) {
set .@j, $WOE_CONTROL[.@i]; set .@k, $WOE_CONTROL[.@i+1]; break; }
if ((gettime(4) == $WOE_CONTROL[.@i] && gettime(3) <= $WOE_CONTROL[.@i+1]) || gettime(4) < $WOE_CONTROL[.@i]) {
set .@j, $WOE_CONTROL[.@i]; set .@k, $WOE_CONTROL[.@i+1];
break;
}
if (!.@j && !.@k) {
set .@j, $WOE_CONTROL[0]; set .@k, $WOE_CONTROL[1]; }
set .@j, $WOE_CONTROL[0];
set .@k, $WOE_CONTROL[1];
}
mes "The War of Emperium is ^777777inactive^000000.";
if (.Size) {
mes " ";
mes "The next session will begin";
mes "on ^0055FF"+.Days$[.@j]+"^000000 at "+Add_Zero(.@k)+"^000000."; } }
mes "on ^0055FF"+.Days$[.@j]+"^000000 at "+Add_Zero(.@k)+"^000000.";
}
}
next;
switch(select(""+((.CastleWarp || .Active[1])?" ~ Warp to castles...":"")+": ~ Check schedule...: ~ View castle owners...:"+((getgmlevel()<.GMAccess || !getgmlevel())?"":" ~ Manage sessions...")+": ~ ^777777Cancel^000000")) {
case 1:
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)))?"^0055FF":"^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))?"^0055FF":"^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<6; set .@i,.@i+1) {
if (.CastleWarp || .Active[1]&(1<<(.@i+1))) set .@menu$, .@menu$+" ~ "+((.Active[1]&(1<<(.@i+1)))?"^0055FF":"^777777")+.Regions$[.@i]+" Castles^000000";
set .@menu$, .@menu$+":"; }
set .@i, select(.@menu$)-1;
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 .@j,.@i*5; .@j<(.@i*5)+5; set .@j,.@j+1) {
if (.CastleWarp || .Active[0]&(1<<.@j)) set .@menu$, .@menu$+" ~ "+((.Active[0]&(1<<.@j))?"^0055FF":"^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;
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 "[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.";
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 "[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 " "; }
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:
while(1) {
mes "[Session Manager]";
mes "There are ^0055FF"+(.Size/4)+" session(s)^000000 configured.";
mes "What would you like to do?";
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:"+((.Reward[0])?" ~ ^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;
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:"+((.Reward[0])?" ~ ^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; }
}
set .@d,1; break;
}
if (.@d) { set .@d,0; break; }
} break;
case 5:
close;
} }
}

View File

@ -307,14 +307,14 @@ mora,55,124,2 script Cat Traveler 495,{
}
mora,131,165,4 script Bifrost Resident#1 520,{
mes "[Bifrost resident]";
mes "[Bifrost Resident]";
mes "Welcome to the workshop";
mes "of the west clan. If you";
mes "want your Loki Muffler";
mes "enchanted, please contact";
mes "my boss. He makes miracles!";
next;
mes "[Bifrost resident]";
mes "[Bifrost Resident]";
mes "On a side note... I think I'm";
mes "really cute, don't you agree?";
close;

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
//= L0ne_W0lf
//= Credits: Gepard, Muad_Dib
//===== Current Version: =====================================
//= 1.1
//= 1.2
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================

View File

@ -16,7 +16,7 @@ npc: npc/re/jobs/3-1/mechanic.txt
npc: npc/re/jobs/3-1/ranger.txt
npc: npc/re/jobs/3-1/rune_knight.txt
npc: npc/re/jobs/3-1/warlock.txt
//npc: npc/re/jobs/3-1/guillotine.txt
npc: npc/re/jobs/3-1/guillotine_cross.txt
// - 3-2
npc: npc/re/jobs/3-2/genetic.txt
npc: npc/re/jobs/3-2/minstrel.txt

View File

@ -1149,8 +1149,8 @@ REPLACE INTO `mob_db` VALUES (2026,'DANDELION_','Runaway Dandelion Member','Runa
REPLACE INTO `mob_db` VALUES (2027,'G_DARK_SHADOW','Dark Shadow','Dark Shadow',114,42900,0,0,0,1,10000,15000,35,44,1,23,12,145,102,60,10,12,0,0,47,0x3795,220,768,1776,648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
# REPLACE INTO `mob_db` VALUES (2028,'E_MINOROUS','Minorous','Minorous',1,741,0,0,0,1,30,48,2,5,6,4,6,6,5,3,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,7606,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
# REPLACE INTO `mob_db` VALUES (2029,'E_MINOROUS_','Minorous','Minorous',10,15,0,10,0,1,100,150,100,99,1,1,1,1,100,100,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,941,10,11708,2000,11708,4000,11708,1000,516,1000,2289,1,577,1000,0,0,0,0,644,1);
# REPLACE INTO `mob_db` VALUES (2030,'HIDEN_PRIEST','Hiden Priest','Hiden Priest',90,240000,0,0,0,2,1300,1983,0,30,1,32,40,100,82,40,10,12,2,6,89,0x120,150,432,432,360,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
# REPLACE INTO `mob_db` VALUES (2031,'DANDELION_H','Dandelion','Dandelion',80,120000,0,0,0,1,305,610,0,10,1,19,32,0,63,20,10,12,1,7,47,0x120,250,1772,72,384,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2030,'HIDEN_PRIEST','Hiden Priest','Hiden Priest',90,240000,0,0,0,2,1300,1983,0,30,1,32,40,100,82,40,10,12,2,6,89,0x120,150,432,432,360,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2031,'DANDELION_H','Dandelion','Dandelion',80,120000,0,0,0,1,305,610,0,10,1,19,32,0,63,20,10,12,1,7,47,0x120,250,1772,72,384,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
# REPLACE INTO `mob_db` VALUES (2032,'GUARDIAN_FOREST','Forest Guardian','Forest Guardian',50,8578,0,0,0,1,1000,1103,15,25,1,75,55,1,93,45,10,12,0,6,27,0x120,100,868,480,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
# REPLACE INTO `mob_db` VALUES (2033,'GOLDEN_TULIP','Golden Tulip','Golden Tulip',1,299,0,0,0,1,1,2,100,99,0,0,0,0,0,0,7,12,0,3,22,0x120,2000,1,1,1,0,0,0,0,0,0,0,7951,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
# REPLACE INTO `mob_db` VALUES (2034,'M_DESERT_WOLF_B','Baby Desert Wolf','Baby Desert Wolf',9,164,15,0,0,1,500,600,0,0,1,9,9,5,40,40,10,12,0,2,23,0x120,100,1600,900,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);

View File

@ -1196,8 +1196,8 @@ REPLACE INTO `mob_db` VALUES (2027,'G_DARK_SHADOW','Dark Shadow','Dark Shadow',1
# Additional Monsters
# REPLACE INTO `mob_db` VALUES (2028,'E_MINOROUS','Minorous','Minorous',1,741,0,0,0,1,30,48,4,5,6,4,6,6,5,3,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,7606,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
# REPLACE INTO `mob_db` VALUES (2029,'E_MINOROUS_','Minorous','Minorous',10,15,0,9,0,1,100,150,160,99,1,1,1,1,100,100,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,941,10,6119,2000,6119,4000,6119,1000,516,1000,2289,1,577,1000,0,0,0,0,644,1);
# REPLACE INTO `mob_db` VALUES (2030,'HIDEN_PRIEST','Hiden Priest','Hiden Priest',90,240500,0,0,0,2,1300,1983,0,30,1,32,40,100,82,40,10,12,2,6,89,0x120,150,432,432,360,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
# REPLACE INTO `mob_db` VALUES (2031,'DANDELION_H','Dandelion','Dandelion',80,120000,0,0,0,1,305,610,0,10,1,19,32,0,63,20,10,12,1,7,47,0x120,250,1772,72,384,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2030,'HIDEN_PRIEST','Hiden Priest','Hiden Priest',90,240500,0,0,0,2,1300,1983,0,30,1,32,40,100,82,40,10,12,2,6,89,0x120,150,432,432,360,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2031,'DANDELION_H','Dandelion','Dandelion',80,120000,0,0,0,1,305,610,0,10,1,19,32,0,63,20,10,12,1,7,47,0x120,250,1772,72,384,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
# REPLACE INTO `mob_db` VALUES (2032,'GUARDIAN_FOREST','Forest Guardian','Forest Guardian',50,99999,0,0,0,1,3000,6000,160,99,100,100,100,100,100,100,10,12,0,6,27,0x120,200,868,480,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
# REPLACE INTO `mob_db` VALUES (2033,'GOLDEN_TULIP','Golden Tulip','Golden Tulip',1,100,0,0,0,1,1,2,160,99,0,0,0,0,0,0,7,12,0,3,22,0x120,2000,1,1,1,0,0,0,0,0,0,0,7951,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
# REPLACE INTO `mob_db` VALUES (2034,'M_DESERT_WOLF_B','Baby Desert Wolf','Baby Desert Wolf',9,164,15,0,0,1,500,600,0,0,1,9,9,5,40,40,10,12,0,2,23,0x120,100,1600,900,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);