- Added svn:eol-style=native property on some recently added text files.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16534 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
brianluau
2012-07-30 07:32:24 +00:00
parent c7e670e26f
commit a70cabd131
25 changed files with 14979 additions and 14985 deletions

View File

@@ -1,30 +1,30 @@
// SA_CLASSCHANGE Summonable Monsters Database
//
// Structure of Database:
// MobID,DummyName,Rate
0,Baphomet,1039
1038,Osiris,1000000
1039,Baphomet,1000000
1046,Doppelganger,1000000
1059,Mistress,1000000
1086,Golden Thief Bug,1000000
1087,Orc Hero,1000000
1112,Drake,1000000
1115,Eddga,1000000
1147,Maya,1000000
1150,Moonlight Flower,1000000
1157,Pharaoh,1000000
1159,Phreeoni,1000000
1190,Orc Lord,1000000
1251,Stormy Knight,1000000
1252,Garm,1000000
1272,Dark Lord,1000000
1312,Turtle General,1000000
1373,Lord of the Dead,1000000
1388,Arc Angeling,1000000
1389,Dracula,1000000
1418,Evil Snake Lord,1000000
1492,Samurai Specter,1000000
1511,Amon Ra,1000000
1583,Tao Gunka,1000000
// SA_CLASSCHANGE Summonable Monsters Database
//
// Structure of Database:
// MobID,DummyName,Rate
0,Baphomet,1039
1038,Osiris,1000000
1039,Baphomet,1000000
1046,Doppelganger,1000000
1059,Mistress,1000000
1086,Golden Thief Bug,1000000
1087,Orc Hero,1000000
1112,Drake,1000000
1115,Eddga,1000000
1147,Maya,1000000
1150,Moonlight Flower,1000000
1157,Pharaoh,1000000
1159,Phreeoni,1000000
1190,Orc Lord,1000000
1251,Stormy Knight,1000000
1252,Garm,1000000
1272,Dark Lord,1000000
1312,Turtle General,1000000
1373,Lord of the Dead,1000000
1388,Arc Angeling,1000000
1389,Dracula,1000000
1418,Evil Snake Lord,1000000
1492,Samurai Specter,1000000
1511,Amon Ra,1000000
1583,Tao Gunka,1000000

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,18 +1,18 @@
// Poring Box Summonable Monsters Database
//
// Structure of Database:
// MobID,DummyName,Rate
0,Poring,1002
1002,Poring,1000000
1031,Poporing,1000000
1062,Santa Poring,200000
1090,Mastering,400000
1096,Angeling,200000
1113,Drops,1000000
1120,Ghostring,200000
1242,Marin,1000000
1388,Arc Angeling,200000
1582,Deviling,200000
1613,Metaling,1000000
1784,Stapo,1000000
// Poring Box Summonable Monsters Database
//
// Structure of Database:
// MobID,DummyName,Rate
0,Poring,1002
1002,Poring,1000000
1031,Poporing,1000000
1062,Santa Poring,200000
1090,Mastering,400000
1096,Angeling,200000
1113,Drops,1000000
1120,Ghostring,200000
1242,Marin,1000000
1388,Arc Angeling,200000
1582,Deviling,200000
1613,Metaling,1000000
1784,Stapo,1000000

File diff suppressed because it is too large Load Diff

View File

@@ -196,4 +196,4 @@
//5470:5653,{ bonus bDex,1; bonus bLongAtkRate,3; }
13027:15044,{ bonus3 bAddMonsterDropItem,929,RC_Brute,100+(getrefine()*10); bonus3 bAddMonsterDropItem,929,RC_DemiHuman,100+(getrefine()*10); bonus3 bAddMonsterDropItem,970,RC_Brute,20+(getrefine()*2); bonus3 bAddMonsterDropItem,970,RC_DemiHuman,20+(getrefine()*2); }
13034:13035,{ bonus bMaxSP,20; bonus bMaxHPRate,5; bonus bHit,10; bonus2 bAddSize,2,30; autobonus "{ bonus bAspdRate,100; }",1,7000,0,"{ specialeffect2 EF_POTION_BERSERK; }"; }
18507:18539,{ bonus bUseSPrate,-3; }
18507:18539,{ bonus bUseSPrate,-3; }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,19 +1,19 @@
// Poring Box Summonable Monsters Database
//
// Structure of Database:
// MobID,DummyName,Rate
0,Poring,1002
1002,Poring,1000000
1031,Poporing,1000000
1062,Santa Poring,200000
1090,Mastering,400000
1096,Angeling,200000
1113,Drops,1000000
1120,Ghostring,200000
1242,Marin,1000000
1388,Arc Angeling,200000
1582,Deviling,200000
1613,Metaling,1000000
1784,Stapo,1000000
2093,Botaring,400000
// Poring Box Summonable Monsters Database
//
// Structure of Database:
// MobID,DummyName,Rate
0,Poring,1002
1002,Poring,1000000
1031,Poporing,1000000
1062,Santa Poring,200000
1090,Mastering,400000
1096,Angeling,200000
1113,Drops,1000000
1120,Ghostring,200000
1242,Marin,1000000
1388,Arc Angeling,200000
1582,Deviling,200000
1613,Metaling,1000000
1784,Stapo,1000000
2093,Botaring,400000

View File

@@ -1,114 +1,114 @@
//===== rAthena Script =======================================
//= Cluck! Cluck! Boom!
//===== By: ==================================================
//= Keale
//===== Current Version: =====================================
//= 1.2
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Click the chicken and try retrieve the item at a low
//= chance. If you fail he will nuke, freeze, stone,
//= stun, or make you fall asleep.
//= The prize is configurable and triggered by the NPC.
//===== Additional Comments: =================================
//= 1.0 First release.
//= 1.1 Using 'switch rand' instead.
//= 1.2 Cleaned and standardized. [Euphy]
//============================================================
prontera,156,219,4 script Cluckers 800,{
set .@GMAccess,80; // GM level required to access NPC
if (.startcluck) {
specialeffect2 2;
switch(rand(15)) {
case 0: npctalk "CLUUUUUUCK!!!"; atcommand "@nuke "+strcharinfo(0); emotion 23; break;
case 1: npctalk "Cluuuuuck!~"; break;
case 2: atcommand "@nuke "+strcharinfo(0); break;
case 3: sc_start SC_Freeze,10000,0; break;
case 4: npctalk "CLUUUUUUUUUCK!!!"; atcommand "@nuke "+strcharinfo(0); emotion 23; break;
case 5: sc_start SC_Sleep,10000,0; break;
case 6: sc_start SC_Stone,10000,0; emotion 29; break;
case 7: npctalk "CLUUUUUUCK!!!"; atcommand "@nuke "+strcharinfo(0); emotion 23; break;
case 8: npctalk "Cluck! CLUUUCK!!"; atcommand "@nuke "+strcharinfo(0); emotion 23; break;
case 9: sc_start SC_Stun,10000,0; break;
case 10: sc_start SC_Sleep,10000,0; emotion 29; break;
case 11: npctalk "Cluck! Cluck!"; break;
case 12: sc_start SC_Stun,10000,0; break;
case 13: atcommand "@nuke "+strcharinfo(0); break;
default:
if (rand(50) < 4) {
npctalk "WOOF!...........";
specialeffect2 72;
announce "[Cluck! Cluck! Boom!] " + strcharinfo(0) + " squeezed out the prize! Well done!",0;
getitem $cluck_item_id,$cluck_item_amount;
set .startcluck,0;
} else {
npctalk "Cluck! CLUUUCK!!";
atcommand "@nuke "+strcharinfo(0);
}
break;
}
end;
}
mes "[Cluckers]";
if (getgmlevel() >= .@GMAccess) {
mes "Cluck cluck! Cluuuuuck? ^FF0000~Hi GM " + strcharinfo(0) + ", Wanna play today?~^000000";
mes "Cluck cluck... CLUCK! ^FF0000~Just tell me what to do!~^000000";
next;
while(1) switch(select("Start Event:Check Prize:Set Prize:Not today Cluckers")) {
case 1:
mes "[Cluckers]";
mes "CLUCK! ^FF0000~Sure thing!~^000000";
emotion 33;
close2;
announce "[Cluck! Cluck! Boom!] is about to start in Prontera!",bc_blue;
initnpctimer;
end;
case 2:
mes "[Cluckers]";
mes "Cluck, cluck cluck... Cluck! ^FF0000~The current prize is^000000 ^008000"+ $cluck_item_amount +" "+ getitemname($cluck_item_id) +".^000000";
next;
break;
case 3:
mes "[Cluckers]";
mes "Cluck cluck? Cluck??? ^FF0000~What should the prize for winning be? Please input the ID.~^000000";
input $cluck_item_id;
next;
mes "[Cluckers]";
mes "Cluck? cluuuck? ^FF0000~How many if this item should I give away?~^000000";
input $cluck_item_amount;
next;
mes "[Cluckers]";
mes "Cluck cluck..? Cluck. ^FF0000~So, the prize is^000000 ^008000"+ $cluck_item_amount +" "+ getitemname($cluck_item_id) +"^000000? ^FF0000Great.~^000000";
emotion 33;
next;
break;
case 4:
mes "[Cluckers]";
mes "Cluck cluck cluck...";
close;
}
}
mes "Cluck cluck! Cluuuuuck?";
mes "Cluck....";
close;
OnTimer10000:
announce "Please hurry behind the fountain if you want to play with the crazy chicken!",bc_blue;
end;
OnTimer20000:
announce "Cluckers has eaten one of my items! I'm too scared to retrieve it!",bc_blue;
end;
OnTimer30000:
announce "Click the insane chicken and try squeeze out the item, if you're lucky you'll win! Are you ready?",bc_blue;
end;
OnTimer40000:
announce "GO! Click the chicken to get the prize!",bc_blue;
if (!$cluck_item_id) set $cluck_item_id,512;
if (!$cluck_item_amount) set $cluck_item_amount,1;
set .startcluck,1;
end;
}
//===== rAthena Script =======================================
//= Cluck! Cluck! Boom!
//===== By: ==================================================
//= Keale
//===== Current Version: =====================================
//= 1.2
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Click the chicken and try retrieve the item at a low
//= chance. If you fail he will nuke, freeze, stone,
//= stun, or make you fall asleep.
//= The prize is configurable and triggered by the NPC.
//===== Additional Comments: =================================
//= 1.0 First release.
//= 1.1 Using 'switch rand' instead.
//= 1.2 Cleaned and standardized. [Euphy]
//============================================================
prontera,156,219,4 script Cluckers 800,{
set .@GMAccess,80; // GM level required to access NPC
if (.startcluck) {
specialeffect2 2;
switch(rand(15)) {
case 0: npctalk "CLUUUUUUCK!!!"; atcommand "@nuke "+strcharinfo(0); emotion 23; break;
case 1: npctalk "Cluuuuuck!~"; break;
case 2: atcommand "@nuke "+strcharinfo(0); break;
case 3: sc_start SC_Freeze,10000,0; break;
case 4: npctalk "CLUUUUUUUUUCK!!!"; atcommand "@nuke "+strcharinfo(0); emotion 23; break;
case 5: sc_start SC_Sleep,10000,0; break;
case 6: sc_start SC_Stone,10000,0; emotion 29; break;
case 7: npctalk "CLUUUUUUCK!!!"; atcommand "@nuke "+strcharinfo(0); emotion 23; break;
case 8: npctalk "Cluck! CLUUUCK!!"; atcommand "@nuke "+strcharinfo(0); emotion 23; break;
case 9: sc_start SC_Stun,10000,0; break;
case 10: sc_start SC_Sleep,10000,0; emotion 29; break;
case 11: npctalk "Cluck! Cluck!"; break;
case 12: sc_start SC_Stun,10000,0; break;
case 13: atcommand "@nuke "+strcharinfo(0); break;
default:
if (rand(50) < 4) {
npctalk "WOOF!...........";
specialeffect2 72;
announce "[Cluck! Cluck! Boom!] " + strcharinfo(0) + " squeezed out the prize! Well done!",0;
getitem $cluck_item_id,$cluck_item_amount;
set .startcluck,0;
} else {
npctalk "Cluck! CLUUUCK!!";
atcommand "@nuke "+strcharinfo(0);
}
break;
}
end;
}
mes "[Cluckers]";
if (getgmlevel() >= .@GMAccess) {
mes "Cluck cluck! Cluuuuuck? ^FF0000~Hi GM " + strcharinfo(0) + ", Wanna play today?~^000000";
mes "Cluck cluck... CLUCK! ^FF0000~Just tell me what to do!~^000000";
next;
while(1) switch(select("Start Event:Check Prize:Set Prize:Not today Cluckers")) {
case 1:
mes "[Cluckers]";
mes "CLUCK! ^FF0000~Sure thing!~^000000";
emotion 33;
close2;
announce "[Cluck! Cluck! Boom!] is about to start in Prontera!",bc_blue;
initnpctimer;
end;
case 2:
mes "[Cluckers]";
mes "Cluck, cluck cluck... Cluck! ^FF0000~The current prize is^000000 ^008000"+ $cluck_item_amount +" "+ getitemname($cluck_item_id) +".^000000";
next;
break;
case 3:
mes "[Cluckers]";
mes "Cluck cluck? Cluck??? ^FF0000~What should the prize for winning be? Please input the ID.~^000000";
input $cluck_item_id;
next;
mes "[Cluckers]";
mes "Cluck? cluuuck? ^FF0000~How many if this item should I give away?~^000000";
input $cluck_item_amount;
next;
mes "[Cluckers]";
mes "Cluck cluck..? Cluck. ^FF0000~So, the prize is^000000 ^008000"+ $cluck_item_amount +" "+ getitemname($cluck_item_id) +"^000000? ^FF0000Great.~^000000";
emotion 33;
next;
break;
case 4:
mes "[Cluckers]";
mes "Cluck cluck cluck...";
close;
}
}
mes "Cluck cluck! Cluuuuuck?";
mes "Cluck....";
close;
OnTimer10000:
announce "Please hurry behind the fountain if you want to play with the crazy chicken!",bc_blue;
end;
OnTimer20000:
announce "Cluckers has eaten one of my items! I'm too scared to retrieve it!",bc_blue;
end;
OnTimer30000:
announce "Click the insane chicken and try squeeze out the item, if you're lucky you'll win! Are you ready?",bc_blue;
end;
OnTimer40000:
announce "GO! Click the chicken to get the prize!",bc_blue;
if (!$cluck_item_id) set $cluck_item_id,512;
if (!$cluck_item_amount) set $cluck_item_amount,1;
set .startcluck,1;
end;
}

View File

@@ -1,242 +1,242 @@
//===== rAthena Script =======================================
//= Disguise Event
//===== By: ==================================================
//= GmOcean
//===== Current Version: =====================================
//= 5.1
//===== Compatible With: =====================================
//= rAthena SVN
//===== Additional Comments: =================================
//= 5.0 Last update by GmOcean.
//= 5.1 Cleaned and standardized, mostly. [Euphy]
//============================================================
prontera,160,155,4 script Disguise Event 795,{
// Currently set to run every two hours.
// To change times, edit the OnClock labels below.
set .@GMLevel,60; // GM level required to access NPC.
set .@n$,"[^0000FFDisguise NPC^000000]";
if (getgmlevel()>=.@GMLevel) {
mes .@n$;
mes "Select an option.";
next;
switch(select("Turn ON/OFF Event:Event Settings")) {
case 1:
mes .@n$;
if ($@EventON) {
mes "The Event is currently: [^0000FFON^000000]";
mes "Would you like to turn it OFF?"; }
else {
mes "The Event is currently: [^FF0000OFF^000000]";
mes "Would you like to turn it ON?"; }
if(select("Yes:No")==2) close;
if ($@EventON) {
set $@EventON,0; set $@Timer,0;
setnpctimer 0; stopnpctimer;
announce "A GM has decided to turn the Disguise Event off. As a result no further prizes will be given.",bc_map | bc_blue;
deletepset 1;
setnpcdisplay "Disguise Event",795;
close; }
set $@EventON,1; set $@Timer,1; setnpctimer 0; initnpctimer;
set $@ResetCounter,$@ResetCounter+1;
announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
close;
case 2:
mes .@n$;
mes "Pick a setting to modify.";
next;
switch(select("Monster Display:Number of Rounds:Prize Settings")) {
case 1:
setarray .@r$[0],"Disguise as all monsters.","Disguise as MVPs only.";
mes .@n$;
mes "Choose a disguise rule.";
next;
set $Rule, select(implode(.@r$,":"));
mes .@n$;
mes "The Disguise Rule has been set:";
mes " > ^0055FF"+.@r$[$Rule-1]+"^000000";
close;
case 2:
mes .@n$;
mes "Input the number of rounds you want the event to last.";
mes "Current number: [^0000FF"+$Rounds+"^000000]";
next;
input .@Rounds;
set $Rounds,.@Rounds;
mes .@n$;
mes "The number of rounds has been changed to "+$Rounds+".";
close;
case 3:
mes .@n$;
mes "Input the Item ID of the prize given each round.";
mes "Current item: [^0000FF"+getitemname($Prize)+"^000000] (ID #"+$Prize+")";
next;
input .@Prize;
mes .@n$;
if (getitemname(.@Prize)=="" || getitemname(.@Prize)=="null") {
mes "That item does not exist. Please try again.";
close; }
set $Prize,.@Prize;
mes "Input the amount to be given.";
next;
input .@amount;
mes .@n$;
if (.@amount<=0 || .@amount>=10000) {
mes "That amount is invalid. Using default ammount of 1.";
set .@amount,1;
next;
mes .@n$; }
set $PrizeAmt,.@amount;
mes "The Prize has been changed successfully.";
mes "Prize: "+$PrizeAmt+"x [^0000FF"+getitemname($Prize)+"^000000]";
close;
}
}
}
if ($@EventON) end;
mes .@n$;
mes "Welcome.";
mes "How may I be of assistance?";
if(select("Information:Nothing, just passing through.")==2) close;
next;
mes .@n$;
mes "This event is quite simple.";
mes "At the start of the event, I will";
mes "disguise myself as a random";
mes "monster. You have to shout";
mes "that monter's name out loud.";
next;
mes "If you are correct, you will receive";
mes "a prize. If not, keep trying!";
mes "That's all that there is to this event.";
close;
OnInit:
set $@EventON,0;
set $@Wait,0;
set $@Winner,0;
set $@ResetCounter,0;
set $Points,$Points;
if (!$Rounds) set $Rounds,10;
else set $Rounds,$Rounds;
if (!$Prize) set $Prize,512;
else set $Prize,$Prize;
if (!$PrizeAmt) set $PrizeAmt,1;
else set $PrizeAmt,$PrizeAmt;
if ($Rule) set $Rule,1;
else set $Rule,$Rule;
setarray $@MVP[0],1038,1039,1046,1059,1086,1087,1112,1115,1147,1150,1157,1159,1190,1251,1252,1272,1312,1373,
1389,1399,1418,1492,1502,1511,1583,1623,1630,1646,1647,1648,1649,1650,1651,1658,1685,1688,
1708,1719,1734,1751,1768,1779,1785,1802,1832,1871,1874,1885,1917,1980,2022,2068,2087,2131,
2156,2165;
setarray $@BlackList[0], 1003,1006,1017,1021,1022,1027,1043,1075,1136,1137,1168,1171,1172,1173,1181,1210,1217,1218,
1222,1223,1224,1225,1226,1227,1228,1233,1284,1407,1411,1414,1495,1501,1900,1996,2000,2001,
2002,2003,2004,2005,2006,2007,2011,2012,2025,2028,2029,2030,2031,2032,2033,2034,2035,2036,
2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,
2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2075,2076,2077,2078,2079,
2080,2081,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,
2099,2100,2101,2012,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,
2117,2118;
setarray $@BlackList2[0],2119,2120,2121,2123,2124,2125,1496;
end;
OnClock0000:
OnClock0200:
OnClock0400:
OnClock0600:
OnClock0800:
OnClock1000:
OnClock1200:
OnClock1400:
OnClock1600:
OnClock1800:
OnClock2000:
OnClock2200:
set $@ResetCounter,$@ResetCounter+1;
set $@EventON,1;
set $@Timer,1;
set $@Wait,1;
announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
setnpctimer 0;
initnpctimer;
end;
OnTimer10000:
if ($@Timer || $@Change) end;
set $@Wait,0;
goto iDisguise;
end;
OnTimer30000:
if ($@Timer) end;
set $@Change,0;
setnpcdisplay "Disguise Event",795;
npctalk "You took too long to guess what I was. Please wait 10 seconds while I disguise again.";
specialeffect 725;
set $MonsterName$,"";
deletepset 1;
stopnpctimer;
setnpctimer 0;
initnpctimer;
end;
OnTimer60000:
if ($@Timer!=1) end;
announce "The Disguise Event will begin in 2 minutes.",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
end;
OnTimer120000:
if ($@Timer!=1) end;
announce "The Disguise Event will begin 1 minute.",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
end;
OnTimer180000:
if ($@Timer!=1) end;
announce "The Disguise Event has begun!",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
set $@Timer,0; stopnpctimer;
setnpctimer 0; initnpctimer;
goto iDisguise;
end;
iDisguise:
if ($Rule==1) {
set $@Winner,0;
set $@Monster,1000+rand(1,995);
for(set .@BL,0; .@BL<getarraysize($@BlackList); set .@BL,.@BL+1)
if ($@Monster==$@BlackList[.@BL] || $@Monster==$@BlackList2[.@BL]) goto iDisguise;
if ($@Monster==$@LastMonster) goto iDisguise;
set $@LastMonster,$@Monster;
set $MonsterName$,getmonsterinfo($@Monster,0); }
if ($Rule==2) {
set $@Winner,0;
set $@Monster,rand(49);
set $MonsterName$,getmonsterinfo($@MVP[$@Monster],0); }
deletepset 1;
defpattern 1,"([^:]+):.\\s*"+$MonsterName$+".*", "iCorrect";
activatepset 1;
if ($Rule==1) setnpcdisplay "Disguise Event",$@Monster;
if ($Rule==2) setnpcdisplay "Disguise Event",$@MVP[$@Monster];
set $@Change,1;
setnpctimer 0;
end;
iCorrect:
if ($@Winner) {
dispbottom "Someone has already won this round."; end; }
set $@Winner,1;
set $@RoundCount,$@RoundCount+1;
deletepset 1;
activatepset 1;
getitem $Prize,$PrizeAmt;
announce strcharinfo(0)+" is correct! I was disguised as: "+$MonsterName$+"",bc_map | bc_blue;
if ($@RoundCount>=$Rounds) {
setnpcdisplay "Disguise Event",795;
set $@RoundCount,0; set $@Change,0; set $@EventON,0;
setnpctimer 0; stopnpctimer;
npctalk "Thank you all for playing. That was the last round of the Disguise Event. Come play again later.";
end; }
setnpcdisplay "Disguise Event",795;
set $@Change,0;
setnpctimer 0;
end;
}
//===== rAthena Script =======================================
//= Disguise Event
//===== By: ==================================================
//= GmOcean
//===== Current Version: =====================================
//= 5.1
//===== Compatible With: =====================================
//= rAthena SVN
//===== Additional Comments: =================================
//= 5.0 Last update by GmOcean.
//= 5.1 Cleaned and standardized, mostly. [Euphy]
//============================================================
prontera,160,155,4 script Disguise Event 795,{
// Currently set to run every two hours.
// To change times, edit the OnClock labels below.
set .@GMLevel,60; // GM level required to access NPC.
set .@n$,"[^0000FFDisguise NPC^000000]";
if (getgmlevel()>=.@GMLevel) {
mes .@n$;
mes "Select an option.";
next;
switch(select("Turn ON/OFF Event:Event Settings")) {
case 1:
mes .@n$;
if ($@EventON) {
mes "The Event is currently: [^0000FFON^000000]";
mes "Would you like to turn it OFF?"; }
else {
mes "The Event is currently: [^FF0000OFF^000000]";
mes "Would you like to turn it ON?"; }
if(select("Yes:No")==2) close;
if ($@EventON) {
set $@EventON,0; set $@Timer,0;
setnpctimer 0; stopnpctimer;
announce "A GM has decided to turn the Disguise Event off. As a result no further prizes will be given.",bc_map | bc_blue;
deletepset 1;
setnpcdisplay "Disguise Event",795;
close; }
set $@EventON,1; set $@Timer,1; setnpctimer 0; initnpctimer;
set $@ResetCounter,$@ResetCounter+1;
announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
close;
case 2:
mes .@n$;
mes "Pick a setting to modify.";
next;
switch(select("Monster Display:Number of Rounds:Prize Settings")) {
case 1:
setarray .@r$[0],"Disguise as all monsters.","Disguise as MVPs only.";
mes .@n$;
mes "Choose a disguise rule.";
next;
set $Rule, select(implode(.@r$,":"));
mes .@n$;
mes "The Disguise Rule has been set:";
mes " > ^0055FF"+.@r$[$Rule-1]+"^000000";
close;
case 2:
mes .@n$;
mes "Input the number of rounds you want the event to last.";
mes "Current number: [^0000FF"+$Rounds+"^000000]";
next;
input .@Rounds;
set $Rounds,.@Rounds;
mes .@n$;
mes "The number of rounds has been changed to "+$Rounds+".";
close;
case 3:
mes .@n$;
mes "Input the Item ID of the prize given each round.";
mes "Current item: [^0000FF"+getitemname($Prize)+"^000000] (ID #"+$Prize+")";
next;
input .@Prize;
mes .@n$;
if (getitemname(.@Prize)=="" || getitemname(.@Prize)=="null") {
mes "That item does not exist. Please try again.";
close; }
set $Prize,.@Prize;
mes "Input the amount to be given.";
next;
input .@amount;
mes .@n$;
if (.@amount<=0 || .@amount>=10000) {
mes "That amount is invalid. Using default ammount of 1.";
set .@amount,1;
next;
mes .@n$; }
set $PrizeAmt,.@amount;
mes "The Prize has been changed successfully.";
mes "Prize: "+$PrizeAmt+"x [^0000FF"+getitemname($Prize)+"^000000]";
close;
}
}
}
if ($@EventON) end;
mes .@n$;
mes "Welcome.";
mes "How may I be of assistance?";
if(select("Information:Nothing, just passing through.")==2) close;
next;
mes .@n$;
mes "This event is quite simple.";
mes "At the start of the event, I will";
mes "disguise myself as a random";
mes "monster. You have to shout";
mes "that monter's name out loud.";
next;
mes "If you are correct, you will receive";
mes "a prize. If not, keep trying!";
mes "That's all that there is to this event.";
close;
OnInit:
set $@EventON,0;
set $@Wait,0;
set $@Winner,0;
set $@ResetCounter,0;
set $Points,$Points;
if (!$Rounds) set $Rounds,10;
else set $Rounds,$Rounds;
if (!$Prize) set $Prize,512;
else set $Prize,$Prize;
if (!$PrizeAmt) set $PrizeAmt,1;
else set $PrizeAmt,$PrizeAmt;
if ($Rule) set $Rule,1;
else set $Rule,$Rule;
setarray $@MVP[0],1038,1039,1046,1059,1086,1087,1112,1115,1147,1150,1157,1159,1190,1251,1252,1272,1312,1373,
1389,1399,1418,1492,1502,1511,1583,1623,1630,1646,1647,1648,1649,1650,1651,1658,1685,1688,
1708,1719,1734,1751,1768,1779,1785,1802,1832,1871,1874,1885,1917,1980,2022,2068,2087,2131,
2156,2165;
setarray $@BlackList[0], 1003,1006,1017,1021,1022,1027,1043,1075,1136,1137,1168,1171,1172,1173,1181,1210,1217,1218,
1222,1223,1224,1225,1226,1227,1228,1233,1284,1407,1411,1414,1495,1501,1900,1996,2000,2001,
2002,2003,2004,2005,2006,2007,2011,2012,2025,2028,2029,2030,2031,2032,2033,2034,2035,2036,
2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,
2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2075,2076,2077,2078,2079,
2080,2081,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,
2099,2100,2101,2012,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,
2117,2118;
setarray $@BlackList2[0],2119,2120,2121,2123,2124,2125,1496;
end;
OnClock0000:
OnClock0200:
OnClock0400:
OnClock0600:
OnClock0800:
OnClock1000:
OnClock1200:
OnClock1400:
OnClock1600:
OnClock1800:
OnClock2000:
OnClock2200:
set $@ResetCounter,$@ResetCounter+1;
set $@EventON,1;
set $@Timer,1;
set $@Wait,1;
announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
setnpctimer 0;
initnpctimer;
end;
OnTimer10000:
if ($@Timer || $@Change) end;
set $@Wait,0;
goto iDisguise;
end;
OnTimer30000:
if ($@Timer) end;
set $@Change,0;
setnpcdisplay "Disguise Event",795;
npctalk "You took too long to guess what I was. Please wait 10 seconds while I disguise again.";
specialeffect 725;
set $MonsterName$,"";
deletepset 1;
stopnpctimer;
setnpctimer 0;
initnpctimer;
end;
OnTimer60000:
if ($@Timer!=1) end;
announce "The Disguise Event will begin in 2 minutes.",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
end;
OnTimer120000:
if ($@Timer!=1) end;
announce "The Disguise Event will begin 1 minute.",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
end;
OnTimer180000:
if ($@Timer!=1) end;
announce "The Disguise Event has begun!",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
set $@Timer,0; stopnpctimer;
setnpctimer 0; initnpctimer;
goto iDisguise;
end;
iDisguise:
if ($Rule==1) {
set $@Winner,0;
set $@Monster,1000+rand(1,995);
for(set .@BL,0; .@BL<getarraysize($@BlackList); set .@BL,.@BL+1)
if ($@Monster==$@BlackList[.@BL] || $@Monster==$@BlackList2[.@BL]) goto iDisguise;
if ($@Monster==$@LastMonster) goto iDisguise;
set $@LastMonster,$@Monster;
set $MonsterName$,getmonsterinfo($@Monster,0); }
if ($Rule==2) {
set $@Winner,0;
set $@Monster,rand(49);
set $MonsterName$,getmonsterinfo($@MVP[$@Monster],0); }
deletepset 1;
defpattern 1,"([^:]+):.\\s*"+$MonsterName$+".*", "iCorrect";
activatepset 1;
if ($Rule==1) setnpcdisplay "Disguise Event",$@Monster;
if ($Rule==2) setnpcdisplay "Disguise Event",$@MVP[$@Monster];
set $@Change,1;
setnpctimer 0;
end;
iCorrect:
if ($@Winner) {
dispbottom "Someone has already won this round."; end; }
set $@Winner,1;
set $@RoundCount,$@RoundCount+1;
deletepset 1;
activatepset 1;
getitem $Prize,$PrizeAmt;
announce strcharinfo(0)+" is correct! I was disguised as: "+$MonsterName$+"",bc_map | bc_blue;
if ($@RoundCount>=$Rounds) {
setnpcdisplay "Disguise Event",795;
set $@RoundCount,0; set $@Change,0; set $@EventON,0;
setnpctimer 0; stopnpctimer;
npctalk "Thank you all for playing. That was the last round of the Disguise Event. Come play again later.";
end; }
setnpcdisplay "Disguise Event",795;
set $@Change,0;
setnpctimer 0;
end;
}

View File

@@ -1,62 +1,62 @@
//===== rAthena Script =======================================
//= Find the Mushroom
//===== By: ==================================================
//= Mysterious
//===== Current Version: =====================================
//= 3.6a
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Find the Mushroom - random amount of Mushrooms spawns in random maps.
//= Players need to find these mushrooms and kill them to gain prizes!
//===== Additional Comments: =================================
//= 3.0 Fully Functional with Rewritten script. [Mysterious]
//= 3.6a Slightly edited. [Euphy]
//============================================================
prontera,142,228,6 script Find the Mushroom 1084,{
mes "[ Find The Mushroom ]";
if (!.Status)
mes "There is no event at the moment!";
else {
mes "There are "+.Spawn+" Mushrooms left in "+.Map$+"!";
mes "Find and kill the mushrooms to gain "+getitemname(.Prize)+"!";
}
if (.Status || getgmlevel() < .GM) close;
mes "Start the event?";
next;
if(select("- No:- Yes") == 1) close;
donpcevent strnpcinfo(0)+"::OnMinute10";
mes "[ Find The Mushroom ]";
mes "Event started!";
close;
OnInit:
set .Prize,512; // Reward item ID
set .Amount,10; // Reward item amount
set .GM,60; // GM level required to access NPC
setarray .Maps$[0],"izlude","geffen","morocc","prontera"; // Possible maps
end;
OnMinute10: // Start time (every hour)
if (.Status) end;
set .Status,1;
set .Spawn,rand(1,10); // How many Mushrooms should spawn?
set .Map$,.Maps$[rand(getarraysize(.Maps$))];
killmonster .Map$,"All";
monster .Map$,0,0,"Please don't kill me!",1084,.Spawn,strnpcinfo(0)+"::OnMobKilled";
announce "Find the Mushroom : Total of "+.Spawn+" Mushrooms have been spawned in "+.Map$+"!",0;
sleep 2500;
announce "Find the Mushroom : Every Mushroom you kill will give you "+getitemname(.Prize)+"!",0;
end;
OnMobKilled:
set .Spawn, .Spawn - 1;
getitem .Prize, .Amount;
if (.Spawn) announce "[ "+strcharinfo(0)+" ] has killed a Mushroom. There are now "+.Spawn+" Mushroom(s) left.",bc_map;
else {
announce "The Find the Mushroom Event has ended. All the Mushrooms have been killed.",0;
set .Status,0;
}
end;
}
//===== rAthena Script =======================================
//= Find the Mushroom
//===== By: ==================================================
//= Mysterious
//===== Current Version: =====================================
//= 3.6a
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Find the Mushroom - random amount of Mushrooms spawns in random maps.
//= Players need to find these mushrooms and kill them to gain prizes!
//===== Additional Comments: =================================
//= 3.0 Fully Functional with Rewritten script. [Mysterious]
//= 3.6a Slightly edited. [Euphy]
//============================================================
prontera,142,228,6 script Find the Mushroom 1084,{
mes "[ Find The Mushroom ]";
if (!.Status)
mes "There is no event at the moment!";
else {
mes "There are "+.Spawn+" Mushrooms left in "+.Map$+"!";
mes "Find and kill the mushrooms to gain "+getitemname(.Prize)+"!";
}
if (.Status || getgmlevel() < .GM) close;
mes "Start the event?";
next;
if(select("- No:- Yes") == 1) close;
donpcevent strnpcinfo(0)+"::OnMinute10";
mes "[ Find The Mushroom ]";
mes "Event started!";
close;
OnInit:
set .Prize,512; // Reward item ID
set .Amount,10; // Reward item amount
set .GM,60; // GM level required to access NPC
setarray .Maps$[0],"izlude","geffen","morocc","prontera"; // Possible maps
end;
OnMinute10: // Start time (every hour)
if (.Status) end;
set .Status,1;
set .Spawn,rand(1,10); // How many Mushrooms should spawn?
set .Map$,.Maps$[rand(getarraysize(.Maps$))];
killmonster .Map$,"All";
monster .Map$,0,0,"Please don't kill me!",1084,.Spawn,strnpcinfo(0)+"::OnMobKilled";
announce "Find the Mushroom : Total of "+.Spawn+" Mushrooms have been spawned in "+.Map$+"!",0;
sleep 2500;
announce "Find the Mushroom : Every Mushroom you kill will give you "+getitemname(.Prize)+"!",0;
end;
OnMobKilled:
set .Spawn, .Spawn - 1;
getitem .Prize, .Amount;
if (.Spawn) announce "[ "+strcharinfo(0)+" ] has killed a Mushroom. There are now "+.Spawn+" Mushroom(s) left.",bc_map;
else {
announce "The Find the Mushroom Event has ended. All the Mushrooms have been killed.",0;
set .Status,0;
}
end;
}

View File

@@ -1,148 +1,148 @@
//===== rAthena Script =======================================
//= Euphy's Quest Shop
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.4a
//===== Compatible With: =====================================
//= rAthena SVN r15340+
//===== Description: =========================================
//= A dynamic quest shop based on Lunar's, with easier config.
//= Includes support for multiple shops & cashpoints.
//= Item Preview script by ToastOfDoom.
//============================================================
prontera,164,203,6 script Quest Shop 998,{
function Add; function Chk; function Slot; function A_An;
if(.Shops$ != "") set .@i,1;
else {
set .@menu$,"";
for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1)
set .@menu$, .@menu$+.Shops$[.@i]+":";
set .@i, select(.@menu$); }
dispbottom "Select one item at a time.";
callshop "qshop"+.@i,1;
npcshopattach "qshop"+.@i;
end;
function Add {
if (getitemname(getarg(1))=="null") {
debugmes "Quest reward #"+getarg(1)+" invalid (skipped)."; return; }
for(set .@n,5; .@n<127; set .@n,.@n+2) {
if (!getarg(.@n,0)) break;
if (getitemname(getarg(.@n))=="null") {
debugmes "Quest requirement #"+getarg(.@n)+" invalid (skipped)."; return; } }
for(set .@i,2; .@i<.@n; set .@i,.@i+1)
set getd(".q_"+getarg(1)+"["+(.@i-2)+"]"), getarg(.@i);
npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
return; }
function Chk {
if (getarg(0)<getarg(1)) { set @qe0,1; return "^FF0000"; }
else return "^00FF00"; }
function Slot {
set .@s$,getitemname(getarg(0));
switch(.ShowSlot){
case 1: if (!getitemslots(getarg(0))) return .@s$;
case 2: if (getiteminfo(getarg(0),11)>0) return .@s$+" ["+getitemslots(getarg(0))+"]";
default: return .@s$; } }
function A_An {
setarray .@A$[0],"a","e","i","o","u";
set .@B$, "_"+getarg(0);
for(set .@i,0; .@i<5; set .@i,.@i+1)
if (compare(.@B$,"_"+.@A$[.@i])) return "an "+getarg(0);
return "a "+getarg(0); }
OnBuyItem:
set .@q[0],@bought_nameid;
copyarray .@q[1],getd(".q_"+@bought_nameid+"[0]"),getarraysize(getd(".q_"+@bought_nameid+"[0]"));
if (!.@q[1]) { message strcharinfo(0),"An error has occurred."; end; }
mes "[Quest Shop]";
mes "Reward: ^0055FF"+((.@q[1]>1)?.@q[1]+"x ":"")+Slot(.@q[0])+"^000000";
mes "Requirements:";
if (.@q[2]) mes " > "+Chk(Zeny,.@q[2])+.@q[2]+" Zeny^000000";
if (.@q[3]) mes " > "+Chk(getd(.Points$[0]),.@q[3])+.@q[3]+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+.@q[3]+")^000000";
if (.@q[4]) for(set .@i,4; .@i<getarraysize(.@q); set .@i,.@i+2)
mes " > "+Chk(countitem(.@q[.@i]),.@q[.@i+1])+((.DisplayID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+.@q[.@i+1]+")^000000";
next;
set @qe1, getiteminfo(.@q[0],5); set @qe2, getiteminfo(.@q[0],11);
addtimer 1000, strnpcinfo(1)+"::OnEnd";
while(1){
switch(select(" ~ Purchase ^0055FF"+getitemname(.@q[0])+"^000000:"+((((@qe1&1) || (@qe1&256) || (@qe1&512)) && @qe2>0 && !@qe6)?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) {
case 1:
if (@qe0) {
mes "[Quest Shop]";
mes "You're missing one or more quest requirements.";
close; }
if (!checkweight(.@q[0],.@q[1])) {
mes "[Quest Shop]";
mes "^FF0000You need "+(((.@q[1]*getiteminfo(.@q[0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
close; }
if (.@q[2]) set Zeny, Zeny-.@q[2];
if (.@q[3]) setd .Points$[0], getd(.Points$[0])-.@q[3];
if (.@q[4]) for(set .@i,4; .@i<getarraysize(.@q); set .@i,.@i+2)
delitem .@q[.@i],.@q[.@i+1];
getitem .@q[0],.@q[1];
if (.Announce) announce strcharinfo(0)+" has created "+A_An(getitemname(.@q[0]))+"!",0;
specialeffect2 699;
close;
case 2:
set @qe3, getlook(3); set @qe4, getlook(4); set @qe5, getlook(5);
if (@qe1&1) atcommand "@changelook 3 "+@qe2;
if (@qe1&256) atcommand "@changelook 1 "+@qe2;
if (@qe1&512) atcommand "@changelook 2 "+@qe2;
set @qe6,1;
break;
case 3:
close; } }
OnEnd:
if (@qe6) { atcommand "@changelook 3 "+@qe3; atcommand "@changelook 1 "+@qe4; atcommand "@changelook 2 "+@qe5; }
for(set .@i,0; .@i<7; set .@i,.@i+1) setd "@qe"+.@i,0;
end;
OnInit:
freeloop(1);
// --------------------- Config ---------------------
// Custom points, if needed: "<variable>","<name to display>"
setarray .Points$[0],"#CASHPOINTS","Cash Points";
set .Announce,1; // Announce quest completion? (1: yes / 0: no)
set .ShowSlot,1; // Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
set .DisplayID,0; // Show item IDs? (1: yes / 0: no)
set .ShowZeny,0; // Show Zeny cost, if any? (1: yes / 0: no)
// Shop categories, if needed: "<Shop 1>","<Shop 2>"{,...};
// Duplicate dummy data for any additional shops (bottom of script).
// If no categories, use the second line instead (remove //).
setarray .Shops$[1],"Headgears","Weapons","Other";
// set .Shops$,"n/a";
// Add(<shop number>,<reward ID>,<reward amount>,<Zeny cost>,<point cost>,
// <required item ID>,<required item amount>{,...});
// Shop number corresponds with order above (default is 1).
// Note: Do NOT use a reward item more than once!
Add(1,5022,1,0,0,7086,1,969,10,999,40,1003,50,984,2);
Add(1,5032,1,0,0,1059,250,2221,1,2227,1,7063,600);
Add(1,5027,1,0,0,2252,1,1036,400,7001,50,4052,1);
Add(1,5045,1,0,0,2252,1,1054,450,943,1200);
Add(2,1224,1,0,0,7297,30,969,10,999,50,714,10);
Add(2,1225,1,0,0,7292,30,969,10,999,50,714,10);
Add(3,531,1,3,0,512,1,713,1);
Add(3,532,1,3,0,513,1,713,1);
Add(3,533,1,3,0,514,1,713,1);
Add(3,534,1,3,0,515,1,713,1);
// --------------------------------------------------
freeloop(0);
for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1)
npcshopdelitem "qshop"+.@i,909;
end;
}
// -------- Dummy data (duplicate as needed) --------
- shop qshop1 -1,909:-1
- shop qshop2 -1,909:-1
- shop qshop3 -1,909:-1
//===== rAthena Script =======================================
//= Euphy's Quest Shop
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.4a
//===== Compatible With: =====================================
//= rAthena SVN r15340+
//===== Description: =========================================
//= A dynamic quest shop based on Lunar's, with easier config.
//= Includes support for multiple shops & cashpoints.
//= Item Preview script by ToastOfDoom.
//============================================================
prontera,164,203,6 script Quest Shop 998,{
function Add; function Chk; function Slot; function A_An;
if(.Shops$ != "") set .@i,1;
else {
set .@menu$,"";
for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1)
set .@menu$, .@menu$+.Shops$[.@i]+":";
set .@i, select(.@menu$); }
dispbottom "Select one item at a time.";
callshop "qshop"+.@i,1;
npcshopattach "qshop"+.@i;
end;
function Add {
if (getitemname(getarg(1))=="null") {
debugmes "Quest reward #"+getarg(1)+" invalid (skipped)."; return; }
for(set .@n,5; .@n<127; set .@n,.@n+2) {
if (!getarg(.@n,0)) break;
if (getitemname(getarg(.@n))=="null") {
debugmes "Quest requirement #"+getarg(.@n)+" invalid (skipped)."; return; } }
for(set .@i,2; .@i<.@n; set .@i,.@i+1)
set getd(".q_"+getarg(1)+"["+(.@i-2)+"]"), getarg(.@i);
npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
return; }
function Chk {
if (getarg(0)<getarg(1)) { set @qe0,1; return "^FF0000"; }
else return "^00FF00"; }
function Slot {
set .@s$,getitemname(getarg(0));
switch(.ShowSlot){
case 1: if (!getitemslots(getarg(0))) return .@s$;
case 2: if (getiteminfo(getarg(0),11)>0) return .@s$+" ["+getitemslots(getarg(0))+"]";
default: return .@s$; } }
function A_An {
setarray .@A$[0],"a","e","i","o","u";
set .@B$, "_"+getarg(0);
for(set .@i,0; .@i<5; set .@i,.@i+1)
if (compare(.@B$,"_"+.@A$[.@i])) return "an "+getarg(0);
return "a "+getarg(0); }
OnBuyItem:
set .@q[0],@bought_nameid;
copyarray .@q[1],getd(".q_"+@bought_nameid+"[0]"),getarraysize(getd(".q_"+@bought_nameid+"[0]"));
if (!.@q[1]) { message strcharinfo(0),"An error has occurred."; end; }
mes "[Quest Shop]";
mes "Reward: ^0055FF"+((.@q[1]>1)?.@q[1]+"x ":"")+Slot(.@q[0])+"^000000";
mes "Requirements:";
if (.@q[2]) mes " > "+Chk(Zeny,.@q[2])+.@q[2]+" Zeny^000000";
if (.@q[3]) mes " > "+Chk(getd(.Points$[0]),.@q[3])+.@q[3]+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+.@q[3]+")^000000";
if (.@q[4]) for(set .@i,4; .@i<getarraysize(.@q); set .@i,.@i+2)
mes " > "+Chk(countitem(.@q[.@i]),.@q[.@i+1])+((.DisplayID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+.@q[.@i+1]+")^000000";
next;
set @qe1, getiteminfo(.@q[0],5); set @qe2, getiteminfo(.@q[0],11);
addtimer 1000, strnpcinfo(1)+"::OnEnd";
while(1){
switch(select(" ~ Purchase ^0055FF"+getitemname(.@q[0])+"^000000:"+((((@qe1&1) || (@qe1&256) || (@qe1&512)) && @qe2>0 && !@qe6)?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) {
case 1:
if (@qe0) {
mes "[Quest Shop]";
mes "You're missing one or more quest requirements.";
close; }
if (!checkweight(.@q[0],.@q[1])) {
mes "[Quest Shop]";
mes "^FF0000You need "+(((.@q[1]*getiteminfo(.@q[0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
close; }
if (.@q[2]) set Zeny, Zeny-.@q[2];
if (.@q[3]) setd .Points$[0], getd(.Points$[0])-.@q[3];
if (.@q[4]) for(set .@i,4; .@i<getarraysize(.@q); set .@i,.@i+2)
delitem .@q[.@i],.@q[.@i+1];
getitem .@q[0],.@q[1];
if (.Announce) announce strcharinfo(0)+" has created "+A_An(getitemname(.@q[0]))+"!",0;
specialeffect2 699;
close;
case 2:
set @qe3, getlook(3); set @qe4, getlook(4); set @qe5, getlook(5);
if (@qe1&1) atcommand "@changelook 3 "+@qe2;
if (@qe1&256) atcommand "@changelook 1 "+@qe2;
if (@qe1&512) atcommand "@changelook 2 "+@qe2;
set @qe6,1;
break;
case 3:
close; } }
OnEnd:
if (@qe6) { atcommand "@changelook 3 "+@qe3; atcommand "@changelook 1 "+@qe4; atcommand "@changelook 2 "+@qe5; }
for(set .@i,0; .@i<7; set .@i,.@i+1) setd "@qe"+.@i,0;
end;
OnInit:
freeloop(1);
// --------------------- Config ---------------------
// Custom points, if needed: "<variable>","<name to display>"
setarray .Points$[0],"#CASHPOINTS","Cash Points";
set .Announce,1; // Announce quest completion? (1: yes / 0: no)
set .ShowSlot,1; // Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
set .DisplayID,0; // Show item IDs? (1: yes / 0: no)
set .ShowZeny,0; // Show Zeny cost, if any? (1: yes / 0: no)
// Shop categories, if needed: "<Shop 1>","<Shop 2>"{,...};
// Duplicate dummy data for any additional shops (bottom of script).
// If no categories, use the second line instead (remove //).
setarray .Shops$[1],"Headgears","Weapons","Other";
// set .Shops$,"n/a";
// Add(<shop number>,<reward ID>,<reward amount>,<Zeny cost>,<point cost>,
// <required item ID>,<required item amount>{,...});
// Shop number corresponds with order above (default is 1).
// Note: Do NOT use a reward item more than once!
Add(1,5022,1,0,0,7086,1,969,10,999,40,1003,50,984,2);
Add(1,5032,1,0,0,1059,250,2221,1,2227,1,7063,600);
Add(1,5027,1,0,0,2252,1,1036,400,7001,50,4052,1);
Add(1,5045,1,0,0,2252,1,1054,450,943,1200);
Add(2,1224,1,0,0,7297,30,969,10,999,50,714,10);
Add(2,1225,1,0,0,7292,30,969,10,999,50,714,10);
Add(3,531,1,3,0,512,1,713,1);
Add(3,532,1,3,0,513,1,713,1);
Add(3,533,1,3,0,514,1,713,1);
Add(3,534,1,3,0,515,1,713,1);
// --------------------------------------------------
freeloop(0);
for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1)
npcshopdelitem "qshop"+.@i,909;
end;
}
// -------- Dummy data (duplicate as needed) --------
- shop qshop1 -1,909:-1
- shop qshop2 -1,909:-1
- shop qshop3 -1,909:-1

View File

@@ -1,324 +1,324 @@
//===== rAthena Script =======================================
//= tr0n's Questboard
//===== By: ==================================================
//= tr0n
//===== Current Version: =====================================
//= 1.4.4
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Easily add collection and hunting quests.
//===== Additional Comments: =================================
// 1.0.0 Release
// 1.1.0 Added zeny reward
// 1.2.0 Rewrote checkmob and killcounter
// 1.3.1 Added level restriction
// 1.3.4 Added Reward Item Amount
// 1.4.4 Added Quest delay
//============================================================
prontera,129,215,5 script Questboard 857,{
if(c_run==1){
mes "[^FF7700Questboard^000000]";
mes "^0000FF"+getd("." + currentquest$ + "_collectionname$")+"^000000";
mes "--------------------------------";
for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_collectionitem")); set .@j,.@j+2) {
mes "^FF0000"+getitemname(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+" - "+countitem(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+"/"+getd("."+currentquest$+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
}
mes "--------------------------------";
mes "[Reward]";
mes "Item: ^0000FF"+((getd("." +currentquest$+"_collectionprize"))?getitemname(getd("." +currentquest$+"_collectionprize"))+" - "+getd("." +currentquest$+"_collectionamount")+" ea.^000000":"Nothing^000000");
mes "Zeny: ^0000FF"+getd("." +currentquest$+"_collectionzeny")+"^000000";
mes "Base EXP: ^0000FF"+getd("." +currentquest$+"_collectionexp["+0+"]")+"^000000";
mes "Job EXP: ^0000FF"+getd("." +currentquest$+"_collectionexp["+1+"]")+"^000000";
next;
if(select("Finish:Abort") == 2){
mes "[^FF7700Questboard^000000]";
mes "Quest aborted.";
set currentquest$, "";
set c_run, 0;
close;
}
goto L_checkitems;
}
if(h_run==1){
mes "[^FF7700Questboard^000000]";
mes "^0000FF"+getd("." + currentquest$ + "_huntingname$")+"^000000";
mes "--------------------------------";
for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_huntingmob")); set .@j,.@j+2) {
set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@j)+"]");
mes "^FF0000"+strmobinfo(1,getd("."+currentquest$+"_huntingmob["+.@j+"]"))+" - "+getd(currentquest$+"_"+.@currentmob+"_"+(.@j+1)+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
}
mes "--------------------------------";
mes "[Reward]";
mes "Item: ^0000FF"+((getd("." +currentquest$+"_huntingprize"))?getitemname(getd("." +currentquest$+"_huntingprize"))+" - "+getd("." +currentquest$+"_huntingamount")+" ea.^000000":"Nothing^000000");
mes "Zeny: ^0000FF"+getd("." +currentquest$+"_huntingzeny")+"^000000";
mes "Base EXP: ^0000FF"+getd("." +currentquest$+"_huntingexp["+0+"]")+"^000000";
mes "Job EXP: ^0000FF"+getd("." +currentquest$+"_huntingexp["+1+"]")+"^000000";
next;
if(select("Finish:Abort") == 2){
mes "[^FF7700Questboard^000000]";
mes "Quest aborted.";
for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
}
set currentquest$, "";
set h_run, 0;
close;
}
goto L_checkmobs;
}
L_questmenu:
mes "[^FF7700Questboard^000000]";
mes "Select category:";
next;
switch(select((.collection)?"Collection Quests":"",
(.hunting)?"Hunting Quests":"",
"Exit")) {
case 1:
set .@collectmenu$, "";
for( set .@i,0; .@i < .collectionquestcount; set .@i,.@i+1) {
if (.@i) set .@collectmenu$,.@collectmenu$+":";
set .@collectmenu$, .@collectmenu$ + "[" + getd("." +(.@i+1)+"_collectionmin") + " - " + getd("." +(.@i+1)+"_collectionmax") + "] " + getd("." + (.@i+1) + "_collectionname$");
}
set .@selection,select(.@collectmenu$);
if(gettimetick(2) < getd(.@selection + "_collection_delay")){
set .@time_left, getd(.@selection + "_collection_delay")-gettimetick(2);
mes "[^FF7700Questboard^000000]";
if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again.";
if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again.";
mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again.";
close;
}
mes "[^FF7700Questboard^000000]";
mes "^0000FF"+getd("." + .@selection + "_collectionname$")+"^000000";
mes "--------------------------------";
for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_collectionitem")); set .@j,.@j+2) {
mes "^FF0000"+getitemname(getd("."+.@selection+"_collectionitem["+.@j+"]"))+" - "+getd("."+.@selection+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
}
mes "--------------------------------";
mes "[Reward]";
mes "Item: ^0000FF"+((getd("." +.@selection+"_collectionprize"))?getitemname(getd("." +.@selection+"_collectionprize"))+" - "+getd("." +.@selection+"_collectionamount")+" ea.^000000":"Nothing^000000");
mes "Zeny: ^0000FF"+getd("." +.@selection+"_collectionzeny")+"^000000";
mes "Base EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+0+"]")+"^000000";
mes "Job EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+1+"]")+"^000000";
next;
if(select("Accept:Decline") == 2){
close;
}
if(BaseLevel >= getd("." +.@selection+"_collectionmin") && BaseLevel <= getd("." +.@selection+"_collectionmax"))
{
mes "[^FF7700Questboard^000000]";
mes "Quest accepted.";
set c_run, 1;
set currentquest$, .@selection;
close;
}
else
{
mes "[^FF7700Questboard^000000]";
mes "You don't have the required";
mes "level to do this quest.";
close;
}
case 2:
set .@huntmenu$, "";
for( set .@i,0; .@i < .huntingquestcount; set .@i,.@i+1) {
if (.@i) set .@huntmenu$,.@huntmenu$+":";
set .@huntmenu$, .@huntmenu$ + "[" + getd("." +(.@i+1)+"_huntingmin") + " - " + getd("." +(.@i+1)+"_huntingmax") + "] " + getd("." + (.@i+1) + "_huntingname$");
}
set .@selection,select(.@huntmenu$);
if(gettimetick(2) < getd(.@selection + "_hunting_delay")){
set .@time_left, getd(.@selection + "_hunting_delay")-gettimetick(2);
mes "[^FF7700Questboard^000000]";
if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again.";
if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again.";
mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again.";
close;
}
mes "[^FF7700Questboard^000000]";
mes "^0000FF"+getd("." + .@selection + "_huntingname$")+"^000000";
mes "--------------------------------";
for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_huntingmob")); set .@j,.@j+2) {
mes "^FF0000"+strmobinfo(1,getd("."+.@selection+"_huntingmob["+.@j+"]"))+" - "+getd("."+.@selection+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
}
mes "--------------------------------";
mes "[Reward]";
mes "Item: ^0000FF"+((getd("." +.@selection+"_huntingprize"))?getitemname(getd("." +.@selection+"_huntingprize"))+" - "+getd("." +.@selection+"_huntingamount")+" ea.^000000":"Nothing^000000");
mes "Zeny: ^0000FF"+getd("." +.@selection+"_huntingzeny")+"^000000";
mes "Base EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+0+"]")+"^000000";
mes "Job EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+1+"]")+"^000000";
next;
if(select("Accept:Decline") == 2){
close;
}
if(BaseLevel >= getd("." +.@selection+"_huntingmin") && BaseLevel <= getd("." +.@selection+"_huntingmax"))
{
mes "[^FF7700Questboard^000000]";
mes "Quest accepted.";
set h_run, 1;
set currentquest$, .@selection;
close;
}
else
{
mes "[^FF7700Questboard^000000]";
mes "You don't have the required";
mes "level to do this quest.";
close;
}
case 3:
close;
}
L_checkitems:
for( set .@k,0; .@k < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@k,.@k+2) {
if(countitem(getd("."+currentquest$+"_collectionitem["+.@k+"]"))>=getd("."+currentquest$+"_collectionitem["+(.@k+1)+"]")){
set .@checkitem,.@checkitem+2;
}
}
if(.@checkitem<getarraysize(getd("."+currentquest$+"_collectionitem"))){
mes "[^FF7700Questboard^000000]";
mes "You don't have everything.";
close;
}
for( set .@delcount,0; .@delcount < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@delcount,.@delcount+2) {
delitem getd("."+currentquest$+"_collectionitem["+.@delcount+"]"),getd("."+currentquest$+"_collectionitem["+(.@delcount+1)+"]");
}
mes "[^FF7700Questboard^000000]";
mes "Congratulation! Here is your Reward.";
if(getd("." +currentquest$+"_collectionprize")!=0) getitem(getd("." +currentquest$+"_collectionprize"),getd("." +currentquest$+"_collectionamount"));
set Zeny,Zeny+getd("." +currentquest$+"_collectionzeny");
getexp getd("." +currentquest$+"_collectionexp["+0+"]"),getd("." +currentquest$+"_collectionexp["+1+"]");
setd(currentquest$ + "_collection_delay"),gettimetick(2)+.quest_delay;
set currentquest$, "";
set c_run, 0;
close;
L_checkmobs:
set .@goal, (getarraysize(getd("."+currentquest$+"_huntingmob"))/2);
for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){
set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")==getd("."+currentquest$+"_huntingmob["+.@i+"]")){
set .@checkmonster, .@checkmonster+1;
if(.@checkmonster==.@goal){
goto L_checkmobs2;
}
continue;
}
goto L_checkmobs2;
}
L_checkmobs2:
if(.@checkmonster<.@goal){
mes "[^FF7700Questboard^000000]";
mes "You didn't kill everything.";
close;
}
mes "[^FF7700Questboard^000000]";
mes "Congratulation! Here is your Reward.";
for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
}
if(getd("." +currentquest$+"_huntingprize")!=0) getitem(getd("." +currentquest$+"_huntingprize"),getd("." +currentquest$+"_huntingamount"));
set Zeny, Zeny+getd("." +currentquest$+"_huntingzeny");
getexp getd("." +currentquest$+"_huntingexp["+0+"]"),getd("." +currentquest$+"_huntingexp["+1+"]");
setd(currentquest$ + "_hunting_delay"),gettimetick(2)+.quest_delay;
set currentquest$, "";
set h_run, 0;
close;
OnNPCKillEvent:
if(h_run!=1) end;
for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){
if(killedrid==getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]")){
set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")>=getd("."+currentquest$+"_huntingmob["+.@i+"]")) end;
setd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+1);
dispbottom getd("."+currentquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+ getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+.@i+"]")+")";
end;
}
continue;
}
end;
OnInit:
function AddCollection;
function AddHunting;
//Activate/Deactive quest categories here
set .collection, 1;
set .hunting, 1;
//Quest Delay (seconds)
//24 hours = 86400 seconds
set .quest_delay, 0;
//Checks if quests are loaded (prevents out of index)
if(.questsloaded==1) end;
set .questsloaded, 1;
//Add Collection Quests here
//AddCollection("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Item ID>,<Item Amount>,...);
//Add Hunting Quests here
//AddHunting("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Monster ID>,<Monster Amount>,...);
end;
function AddCollection {
set .collectionquestcount,.collectionquestcount+1;
setd ("." +.collectionquestcount+"_collectionname$", getarg(0));
setd ("." +.collectionquestcount+"_collectionmin", getarg(1));
setd ("." +.collectionquestcount+"_collectionmax", getarg(2));
setd ("." +.collectionquestcount+"_collectionprize", getarg(3));
setd ("." +.collectionquestcount+"_collectionamount", getarg(4));
setd ("." +.collectionquestcount+"_collectionzeny", getarg(5));
set .@argcount, 6;
set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionexp"));
setd ("." +.collectionquestcount+"_collectionexp["+.@size+"]",getarg(.@argcount));
setd ("." +.collectionquestcount+"_collectionexp["+(.@size+1)+"]",getarg(.@argcount+1));
set .@argcount, .@argcount+2;
while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionitem"));
setd ("."+.collectionquestcount+"_collectionitem["+.@size+"]",getarg(.@argcount));
setd ("."+.collectionquestcount+"_collectionitem["+(.@size+1)+"]",getarg(.@argcount+1));
set .@argcount,.@argcount+2;
}
return;
}
function AddHunting {
set .huntingquestcount,.huntingquestcount+1;
setd ("." +.huntingquestcount+"_huntingname$", getarg(0));
setd ("." +.huntingquestcount+"_huntingmin", getarg(1));
setd ("." +.huntingquestcount+"_huntingmax", getarg(2));
setd ("." +.huntingquestcount+"_huntingprize", getarg(3));
setd ("." +.huntingquestcount+"_huntingamount", getarg(4));
setd ("." +.huntingquestcount+"_huntingzeny", getarg(5));
set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingexp"));
set .@argcount, 6;
setd ("." +.huntingquestcount+"_huntingexp["+.@size+"]",getarg(.@argcount));
setd ("." +.huntingquestcount+"_huntingexp["+(.@size+1)+"]",getarg(.@argcount+1));
set .@argcount, .@argcount+2;
while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingmob"));
setd ("."+.huntingquestcount+"_huntingmob["+.@size+"]",getarg(.@argcount));
setd ("."+.huntingquestcount+"_huntingmob["+(.@size+1)+"]",getarg(.@argcount+1));
set .@argcount, .@argcount+2;
}
return;
}
}
//===== rAthena Script =======================================
//= tr0n's Questboard
//===== By: ==================================================
//= tr0n
//===== Current Version: =====================================
//= 1.4.4
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Easily add collection and hunting quests.
//===== Additional Comments: =================================
// 1.0.0 Release
// 1.1.0 Added zeny reward
// 1.2.0 Rewrote checkmob and killcounter
// 1.3.1 Added level restriction
// 1.3.4 Added Reward Item Amount
// 1.4.4 Added Quest delay
//============================================================
prontera,129,215,5 script Questboard 857,{
if(c_run==1){
mes "[^FF7700Questboard^000000]";
mes "^0000FF"+getd("." + currentquest$ + "_collectionname$")+"^000000";
mes "--------------------------------";
for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_collectionitem")); set .@j,.@j+2) {
mes "^FF0000"+getitemname(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+" - "+countitem(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+"/"+getd("."+currentquest$+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
}
mes "--------------------------------";
mes "[Reward]";
mes "Item: ^0000FF"+((getd("." +currentquest$+"_collectionprize"))?getitemname(getd("." +currentquest$+"_collectionprize"))+" - "+getd("." +currentquest$+"_collectionamount")+" ea.^000000":"Nothing^000000");
mes "Zeny: ^0000FF"+getd("." +currentquest$+"_collectionzeny")+"^000000";
mes "Base EXP: ^0000FF"+getd("." +currentquest$+"_collectionexp["+0+"]")+"^000000";
mes "Job EXP: ^0000FF"+getd("." +currentquest$+"_collectionexp["+1+"]")+"^000000";
next;
if(select("Finish:Abort") == 2){
mes "[^FF7700Questboard^000000]";
mes "Quest aborted.";
set currentquest$, "";
set c_run, 0;
close;
}
goto L_checkitems;
}
if(h_run==1){
mes "[^FF7700Questboard^000000]";
mes "^0000FF"+getd("." + currentquest$ + "_huntingname$")+"^000000";
mes "--------------------------------";
for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_huntingmob")); set .@j,.@j+2) {
set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@j)+"]");
mes "^FF0000"+strmobinfo(1,getd("."+currentquest$+"_huntingmob["+.@j+"]"))+" - "+getd(currentquest$+"_"+.@currentmob+"_"+(.@j+1)+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
}
mes "--------------------------------";
mes "[Reward]";
mes "Item: ^0000FF"+((getd("." +currentquest$+"_huntingprize"))?getitemname(getd("." +currentquest$+"_huntingprize"))+" - "+getd("." +currentquest$+"_huntingamount")+" ea.^000000":"Nothing^000000");
mes "Zeny: ^0000FF"+getd("." +currentquest$+"_huntingzeny")+"^000000";
mes "Base EXP: ^0000FF"+getd("." +currentquest$+"_huntingexp["+0+"]")+"^000000";
mes "Job EXP: ^0000FF"+getd("." +currentquest$+"_huntingexp["+1+"]")+"^000000";
next;
if(select("Finish:Abort") == 2){
mes "[^FF7700Questboard^000000]";
mes "Quest aborted.";
for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
}
set currentquest$, "";
set h_run, 0;
close;
}
goto L_checkmobs;
}
L_questmenu:
mes "[^FF7700Questboard^000000]";
mes "Select category:";
next;
switch(select((.collection)?"Collection Quests":"",
(.hunting)?"Hunting Quests":"",
"Exit")) {
case 1:
set .@collectmenu$, "";
for( set .@i,0; .@i < .collectionquestcount; set .@i,.@i+1) {
if (.@i) set .@collectmenu$,.@collectmenu$+":";
set .@collectmenu$, .@collectmenu$ + "[" + getd("." +(.@i+1)+"_collectionmin") + " - " + getd("." +(.@i+1)+"_collectionmax") + "] " + getd("." + (.@i+1) + "_collectionname$");
}
set .@selection,select(.@collectmenu$);
if(gettimetick(2) < getd(.@selection + "_collection_delay")){
set .@time_left, getd(.@selection + "_collection_delay")-gettimetick(2);
mes "[^FF7700Questboard^000000]";
if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again.";
if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again.";
mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again.";
close;
}
mes "[^FF7700Questboard^000000]";
mes "^0000FF"+getd("." + .@selection + "_collectionname$")+"^000000";
mes "--------------------------------";
for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_collectionitem")); set .@j,.@j+2) {
mes "^FF0000"+getitemname(getd("."+.@selection+"_collectionitem["+.@j+"]"))+" - "+getd("."+.@selection+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
}
mes "--------------------------------";
mes "[Reward]";
mes "Item: ^0000FF"+((getd("." +.@selection+"_collectionprize"))?getitemname(getd("." +.@selection+"_collectionprize"))+" - "+getd("." +.@selection+"_collectionamount")+" ea.^000000":"Nothing^000000");
mes "Zeny: ^0000FF"+getd("." +.@selection+"_collectionzeny")+"^000000";
mes "Base EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+0+"]")+"^000000";
mes "Job EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+1+"]")+"^000000";
next;
if(select("Accept:Decline") == 2){
close;
}
if(BaseLevel >= getd("." +.@selection+"_collectionmin") && BaseLevel <= getd("." +.@selection+"_collectionmax"))
{
mes "[^FF7700Questboard^000000]";
mes "Quest accepted.";
set c_run, 1;
set currentquest$, .@selection;
close;
}
else
{
mes "[^FF7700Questboard^000000]";
mes "You don't have the required";
mes "level to do this quest.";
close;
}
case 2:
set .@huntmenu$, "";
for( set .@i,0; .@i < .huntingquestcount; set .@i,.@i+1) {
if (.@i) set .@huntmenu$,.@huntmenu$+":";
set .@huntmenu$, .@huntmenu$ + "[" + getd("." +(.@i+1)+"_huntingmin") + " - " + getd("." +(.@i+1)+"_huntingmax") + "] " + getd("." + (.@i+1) + "_huntingname$");
}
set .@selection,select(.@huntmenu$);
if(gettimetick(2) < getd(.@selection + "_hunting_delay")){
set .@time_left, getd(.@selection + "_hunting_delay")-gettimetick(2);
mes "[^FF7700Questboard^000000]";
if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again.";
if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again.";
mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again.";
close;
}
mes "[^FF7700Questboard^000000]";
mes "^0000FF"+getd("." + .@selection + "_huntingname$")+"^000000";
mes "--------------------------------";
for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_huntingmob")); set .@j,.@j+2) {
mes "^FF0000"+strmobinfo(1,getd("."+.@selection+"_huntingmob["+.@j+"]"))+" - "+getd("."+.@selection+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
}
mes "--------------------------------";
mes "[Reward]";
mes "Item: ^0000FF"+((getd("." +.@selection+"_huntingprize"))?getitemname(getd("." +.@selection+"_huntingprize"))+" - "+getd("." +.@selection+"_huntingamount")+" ea.^000000":"Nothing^000000");
mes "Zeny: ^0000FF"+getd("." +.@selection+"_huntingzeny")+"^000000";
mes "Base EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+0+"]")+"^000000";
mes "Job EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+1+"]")+"^000000";
next;
if(select("Accept:Decline") == 2){
close;
}
if(BaseLevel >= getd("." +.@selection+"_huntingmin") && BaseLevel <= getd("." +.@selection+"_huntingmax"))
{
mes "[^FF7700Questboard^000000]";
mes "Quest accepted.";
set h_run, 1;
set currentquest$, .@selection;
close;
}
else
{
mes "[^FF7700Questboard^000000]";
mes "You don't have the required";
mes "level to do this quest.";
close;
}
case 3:
close;
}
L_checkitems:
for( set .@k,0; .@k < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@k,.@k+2) {
if(countitem(getd("."+currentquest$+"_collectionitem["+.@k+"]"))>=getd("."+currentquest$+"_collectionitem["+(.@k+1)+"]")){
set .@checkitem,.@checkitem+2;
}
}
if(.@checkitem<getarraysize(getd("."+currentquest$+"_collectionitem"))){
mes "[^FF7700Questboard^000000]";
mes "You don't have everything.";
close;
}
for( set .@delcount,0; .@delcount < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@delcount,.@delcount+2) {
delitem getd("."+currentquest$+"_collectionitem["+.@delcount+"]"),getd("."+currentquest$+"_collectionitem["+(.@delcount+1)+"]");
}
mes "[^FF7700Questboard^000000]";
mes "Congratulation! Here is your Reward.";
if(getd("." +currentquest$+"_collectionprize")!=0) getitem(getd("." +currentquest$+"_collectionprize"),getd("." +currentquest$+"_collectionamount"));
set Zeny,Zeny+getd("." +currentquest$+"_collectionzeny");
getexp getd("." +currentquest$+"_collectionexp["+0+"]"),getd("." +currentquest$+"_collectionexp["+1+"]");
setd(currentquest$ + "_collection_delay"),gettimetick(2)+.quest_delay;
set currentquest$, "";
set c_run, 0;
close;
L_checkmobs:
set .@goal, (getarraysize(getd("."+currentquest$+"_huntingmob"))/2);
for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){
set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")==getd("."+currentquest$+"_huntingmob["+.@i+"]")){
set .@checkmonster, .@checkmonster+1;
if(.@checkmonster==.@goal){
goto L_checkmobs2;
}
continue;
}
goto L_checkmobs2;
}
L_checkmobs2:
if(.@checkmonster<.@goal){
mes "[^FF7700Questboard^000000]";
mes "You didn't kill everything.";
close;
}
mes "[^FF7700Questboard^000000]";
mes "Congratulation! Here is your Reward.";
for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
}
if(getd("." +currentquest$+"_huntingprize")!=0) getitem(getd("." +currentquest$+"_huntingprize"),getd("." +currentquest$+"_huntingamount"));
set Zeny, Zeny+getd("." +currentquest$+"_huntingzeny");
getexp getd("." +currentquest$+"_huntingexp["+0+"]"),getd("." +currentquest$+"_huntingexp["+1+"]");
setd(currentquest$ + "_hunting_delay"),gettimetick(2)+.quest_delay;
set currentquest$, "";
set h_run, 0;
close;
OnNPCKillEvent:
if(h_run!=1) end;
for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){
if(killedrid==getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]")){
set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")>=getd("."+currentquest$+"_huntingmob["+.@i+"]")) end;
setd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+1);
dispbottom getd("."+currentquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+ getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+.@i+"]")+")";
end;
}
continue;
}
end;
OnInit:
function AddCollection;
function AddHunting;
//Activate/Deactive quest categories here
set .collection, 1;
set .hunting, 1;
//Quest Delay (seconds)
//24 hours = 86400 seconds
set .quest_delay, 0;
//Checks if quests are loaded (prevents out of index)
if(.questsloaded==1) end;
set .questsloaded, 1;
//Add Collection Quests here
//AddCollection("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Item ID>,<Item Amount>,...);
//Add Hunting Quests here
//AddHunting("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Monster ID>,<Monster Amount>,...);
end;
function AddCollection {
set .collectionquestcount,.collectionquestcount+1;
setd ("." +.collectionquestcount+"_collectionname$", getarg(0));
setd ("." +.collectionquestcount+"_collectionmin", getarg(1));
setd ("." +.collectionquestcount+"_collectionmax", getarg(2));
setd ("." +.collectionquestcount+"_collectionprize", getarg(3));
setd ("." +.collectionquestcount+"_collectionamount", getarg(4));
setd ("." +.collectionquestcount+"_collectionzeny", getarg(5));
set .@argcount, 6;
set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionexp"));
setd ("." +.collectionquestcount+"_collectionexp["+.@size+"]",getarg(.@argcount));
setd ("." +.collectionquestcount+"_collectionexp["+(.@size+1)+"]",getarg(.@argcount+1));
set .@argcount, .@argcount+2;
while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionitem"));
setd ("."+.collectionquestcount+"_collectionitem["+.@size+"]",getarg(.@argcount));
setd ("."+.collectionquestcount+"_collectionitem["+(.@size+1)+"]",getarg(.@argcount+1));
set .@argcount,.@argcount+2;
}
return;
}
function AddHunting {
set .huntingquestcount,.huntingquestcount+1;
setd ("." +.huntingquestcount+"_huntingname$", getarg(0));
setd ("." +.huntingquestcount+"_huntingmin", getarg(1));
setd ("." +.huntingquestcount+"_huntingmax", getarg(2));
setd ("." +.huntingquestcount+"_huntingprize", getarg(3));
setd ("." +.huntingquestcount+"_huntingamount", getarg(4));
setd ("." +.huntingquestcount+"_huntingzeny", getarg(5));
set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingexp"));
set .@argcount, 6;
setd ("." +.huntingquestcount+"_huntingexp["+.@size+"]",getarg(.@argcount));
setd ("." +.huntingquestcount+"_huntingexp["+(.@size+1)+"]",getarg(.@argcount+1));
set .@argcount, .@argcount+2;
while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingmob"));
setd ("."+.huntingquestcount+"_huntingmob["+.@size+"]",getarg(.@argcount));
setd ("."+.huntingquestcount+"_huntingmob["+(.@size+1)+"]",getarg(.@argcount+1));
set .@argcount, .@argcount+2;
}
return;
}
}

View File

@@ -1,56 +1,56 @@
//===== rAthena Script =======================================
//= Umbala Dungeon Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
//= 1.4
//===== Compatible With: =====================================
//= Any rAthena Version; RO Ep6+
//===== Additional Comments: =================================
//= 1.2 Official kRO 10.1 spawns [Playtester]
//= 1.3 Some 11.1 spawn updates [Playtester]
//= 1.4 More accurate spawns [Playtester]
//============================================================
//==================================================
// um_dun01 - Carpenter's Shop in the Tree
//==================================================
um_dun01,0,0,0,0 monster Stone Shooter 1495,70,0,0,0
um_dun01,0,0,0,0 monster Wootan Fighter 1499,10,0,0,0
um_dun01,0,0,0,0 monster Wootan Shooter 1498,10,0,0,0
um_dun01,0,0,0,0 monster Yellow Plant 1081,5,180000,90000,1
um_dun01,0,0,0,0 monster Green Plant 1080,5,180000,90000,1
//==================================================
// um_dun02 - Passage to a Foreign World
//==================================================
um_dun02,0,0,0,0 monster Wooden Golem 1497,50,0,0,0
um_dun02,79,227,10,10 monster Wooden Golem 1497,2,240000,60000,0
um_dun02,87,189,10,10 monster Wooden Golem 1497,2,240000,60000,0
um_dun02,170,145,10,10 monster Wooden Golem 1497,2,240000,60000,0
um_dun02,196,131,14,14 monster Wooden Golem 1497,2,240000,60000,0
um_dun02,244,129,15,15 monster Wooden Golem 1497,2,360000,60000,0
um_dun02,90,97,10,15 monster Wooden Golem 1497,2,360000,60000,0
um_dun02,90,97,10,15 monster Wooden Golem 1497,2,240000,60000,0
um_dun02,32,83,10,15 monster Wooden Golem 1497,2,360000,60000,0
um_dun02,32,83,10,15 monster Wooden Golem 1497,2,240000,60000,0
um_dun02,180,238,15,15 monster Wooden Golem 1497,2,180000,60000,0
um_dun02,144,277,15,15 monster Wooden Golem 1497,2,360000,60000,0
um_dun02,144,277,15,15 monster Wooden Golem 1497,2,180000,60000,0
um_dun02,272,163,15,15 monster Wooden Golem 1497,2,360000,60000,0
um_dun02,272,163,15,15 monster Wooden Golem 1497,2,180000,60000,0
um_dun02,232,156,15,15 monster Wooden Golem 1497,2,300000,60000,0
um_dun02,232,156,15,15 monster Wooden Golem 1497,2,180000,60000,0
um_dun02,0,0,0,0 monster Driller 1380,5,0,0,0
um_dun02,0,0,0,0 monster Wootan Shooter 1498,10,0,0,0
um_dun02,213,217,15,15 monster Wootan Shooter 1498,2,120000,60000,0
um_dun02,72,258,15,15 monster Wootan Shooter 1498,3,120000,60000,0
um_dun02,79,227,10,10 monster Wootan Shooter 1498,1,120000,60000,0
um_dun02,170,145,10,10 monster Wootan Shooter 1498,1,120000,60000,0
um_dun02,209,34,15,15 monster Wootan Shooter 1498,1,120000,60000,0
um_dun02,272,163,15,15 monster Wootan Shooter 1498,1,120000,60000,0
um_dun02,232,156,15,15 monster Wootan Shooter 1498,1,120000,60000,0
um_dun02,0,0,0,0 monster Dryad 1493,25,0,0,0
um_dun02,0,0,0,0 monster Yellow Plant 1081,5,180000,90000,1
um_dun02,0,0,0,0 monster Red Plant 1078,5,180000,90000,1
um_dun02,0,0,0,0 monster Shining Plant 1083,6,180000,90000,1
//===== rAthena Script =======================================
//= Umbala Dungeon Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
//= 1.4
//===== Compatible With: =====================================
//= Any rAthena Version; RO Ep6+
//===== Additional Comments: =================================
//= 1.2 Official kRO 10.1 spawns [Playtester]
//= 1.3 Some 11.1 spawn updates [Playtester]
//= 1.4 More accurate spawns [Playtester]
//============================================================
//==================================================
// um_dun01 - Carpenter's Shop in the Tree
//==================================================
um_dun01,0,0,0,0 monster Stone Shooter 1495,70,0,0,0
um_dun01,0,0,0,0 monster Wootan Fighter 1499,10,0,0,0
um_dun01,0,0,0,0 monster Wootan Shooter 1498,10,0,0,0
um_dun01,0,0,0,0 monster Yellow Plant 1081,5,180000,90000,1
um_dun01,0,0,0,0 monster Green Plant 1080,5,180000,90000,1
//==================================================
// um_dun02 - Passage to a Foreign World
//==================================================
um_dun02,0,0,0,0 monster Wooden Golem 1497,50,0,0,0
um_dun02,79,227,10,10 monster Wooden Golem 1497,2,240000,60000,0
um_dun02,87,189,10,10 monster Wooden Golem 1497,2,240000,60000,0
um_dun02,170,145,10,10 monster Wooden Golem 1497,2,240000,60000,0
um_dun02,196,131,14,14 monster Wooden Golem 1497,2,240000,60000,0
um_dun02,244,129,15,15 monster Wooden Golem 1497,2,360000,60000,0
um_dun02,90,97,10,15 monster Wooden Golem 1497,2,360000,60000,0
um_dun02,90,97,10,15 monster Wooden Golem 1497,2,240000,60000,0
um_dun02,32,83,10,15 monster Wooden Golem 1497,2,360000,60000,0
um_dun02,32,83,10,15 monster Wooden Golem 1497,2,240000,60000,0
um_dun02,180,238,15,15 monster Wooden Golem 1497,2,180000,60000,0
um_dun02,144,277,15,15 monster Wooden Golem 1497,2,360000,60000,0
um_dun02,144,277,15,15 monster Wooden Golem 1497,2,180000,60000,0
um_dun02,272,163,15,15 monster Wooden Golem 1497,2,360000,60000,0
um_dun02,272,163,15,15 monster Wooden Golem 1497,2,180000,60000,0
um_dun02,232,156,15,15 monster Wooden Golem 1497,2,300000,60000,0
um_dun02,232,156,15,15 monster Wooden Golem 1497,2,180000,60000,0
um_dun02,0,0,0,0 monster Driller 1380,5,0,0,0
um_dun02,0,0,0,0 monster Wootan Shooter 1498,10,0,0,0
um_dun02,213,217,15,15 monster Wootan Shooter 1498,2,120000,60000,0
um_dun02,72,258,15,15 monster Wootan Shooter 1498,3,120000,60000,0
um_dun02,79,227,10,10 monster Wootan Shooter 1498,1,120000,60000,0
um_dun02,170,145,10,10 monster Wootan Shooter 1498,1,120000,60000,0
um_dun02,209,34,15,15 monster Wootan Shooter 1498,1,120000,60000,0
um_dun02,272,163,15,15 monster Wootan Shooter 1498,1,120000,60000,0
um_dun02,232,156,15,15 monster Wootan Shooter 1498,1,120000,60000,0
um_dun02,0,0,0,0 monster Dryad 1493,25,0,0,0
um_dun02,0,0,0,0 monster Yellow Plant 1081,5,180000,90000,1
um_dun02,0,0,0,0 monster Red Plant 1078,5,180000,90000,1
um_dun02,0,0,0,0 monster Shining Plant 1083,6,180000,90000,1

View File

@@ -1,33 +1,33 @@
//===== rAthena Script =======================================
//= Splendide Fields Monster Spawn Script
//===== By: ==================================================
//= alexx, MaC
//===== Current Version: =====================================
//= 1.1
//===== Compatible With: =====================================
//= Any Athena Version
//===== Additional Comments: =================================
//= 1.0 Official spawn ammounts from Aegis script [alexx]
//= 1.1 Added 13.2 mob spawn update [scriptor]
//============================================================
//==================================================
// spl_fild01 - Splendide Field
//==================================================
spl_fild01,0,0,0,0 monster Dark Pinguicula 2015,50,5000,0,0
spl_fild01,0,0,0,0 monster Naga 1993,35,5000,0,0
spl_fild01,0,0,0,0 monster Cornus 1992,25,5000,0,0
//==================================================
// spl_fild02 - Splendide Field
//==================================================
spl_fild02,0,0,0,0 monster Pinguicula 1995,75,5000,0,0
spl_fild02,0,0,0,0 monster Luciola Vespa 1994,15,5000,0,0
//==================================================
// spl_fild03 - Splendide Field
//==================================================
spl_fild03,0,0,0,0 monster Luciola Vespa 1994,35,5000,0,0
spl_fild03,0,0,0,0 monster Cornus 1992,25,5000,0,0
spl_fild03,0,0,0,0 monster Naga 1993,20,5000,0,0
spl_fild03,0,0,0,0 monster Tendrilion 1991,1,3600000,0,0
//===== rAthena Script =======================================
//= Splendide Fields Monster Spawn Script
//===== By: ==================================================
//= alexx, MaC
//===== Current Version: =====================================
//= 1.1
//===== Compatible With: =====================================
//= Any Athena Version
//===== Additional Comments: =================================
//= 1.0 Official spawn ammounts from Aegis script [alexx]
//= 1.1 Added 13.2 mob spawn update [scriptor]
//============================================================
//==================================================
// spl_fild01 - Splendide Field
//==================================================
spl_fild01,0,0,0,0 monster Dark Pinguicula 2015,50,5000,0,0
spl_fild01,0,0,0,0 monster Naga 1993,35,5000,0,0
spl_fild01,0,0,0,0 monster Cornus 1992,25,5000,0,0
//==================================================
// spl_fild02 - Splendide Field
//==================================================
spl_fild02,0,0,0,0 monster Pinguicula 1995,75,5000,0,0
spl_fild02,0,0,0,0 monster Luciola Vespa 1994,15,5000,0,0
//==================================================
// spl_fild03 - Splendide Field
//==================================================
spl_fild03,0,0,0,0 monster Luciola Vespa 1994,35,5000,0,0
spl_fild03,0,0,0,0 monster Cornus 1992,25,5000,0,0
spl_fild03,0,0,0,0 monster Naga 1993,20,5000,0,0
spl_fild03,0,0,0,0 monster Tendrilion 1991,1,3600000,0,0

File diff suppressed because it is too large Load Diff

View File

@@ -1,180 +1,180 @@
//===== rAthena Script =======================================
//= Renters
//===== By: ==================================================
//= rAthena Dev Team
//===== Current Version: =====================================
//= 2.1
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Renewal-specific breeder NPCs.
//===== Additional Comments: =================================
//= 2.1 Moved some renters to a separate renewal file. [Daegaladh]
//============================================================
// Dragon Breeder on the Rune Knight job change map, couldn't find NPC on iRO.
job3_rune01,88,62,5 script Dragon Breeder 105,{
mes "[Dragon Breeder]";
if (Class == Job_Rune_Knight || Class == Job_Rune_Knight_T || Class == Job_Baby_Rune) {
mes "Welcome. Would you like to rent a Dragon?";
next;
switch(select("Yes:No")) {
case 1:
//if (!getskilllv("RK_DRAGONTRAINING")) {
if (!getskilllv("KN_RIDING")) {
mes "[Dragon Breeder]";
mes "Please learn how to ride a Dragon first.";
close;
}
else if (checkriding()) {
mes "[Dragon Breeder]";
mes "You already have a Dragon.";
close;
}
else if(ismounting()) {
mes "[Dragon Breeder]";
mes "Please remove your cash mount.";
close;
}
setdragon;
close;
case 2:
mes "[Dragon Breeder]";
mes "I see. Then have a great day.";
close;
}
}
mes "What are you doing here?";
mes "Only Rune Knights can rent a Dragon.";
close;
}
// Dragon/Gryphon Master
prontera,130,213,5 script Riding Creature Master 105,{
mes "[Riding Creature Master]";
if (Class == Job_Rune_Knight || Class == Job_Rune_Knight_T || Class == Job_Baby_Rune) {
mes "Welcome. Would you like to rent a Dragon?";
next;
switch(select("Yes:No")) {
case 1:
//if (!getskilllv("RK_DRAGONTRAINING")) {
if (!getskilllv("KN_RIDING")) {
mes "[Riding Creature Master]";
mes "Please learn how to ride a Dragon first.";
close;
}
else if (checkriding()) {
mes "[Riding Creature Master]";
mes "You already have a Dragon.";
close;
}
else if(ismounting()) {
mes "[Riding Creature Master]";
mes "Please remove your cash mount.";
close;
}
setdragon;
close;
case 2:
mes "[Riding Creature Master]";
mes "I see. Then have a great day.";
close;
}
}
if (Class == Job_Royal_Guard || Class == Job_Royal_Guard_T || Class == Job_Baby_Guard) {
mes "Welcome. Would you like to rent a Gryphon?";
next;
switch(select("Yes:No")) {
case 1:
if(!getskilllv("KN_RIDING")) {
mes "[Riding Creature Master]";
mes "Please learn how to ride a Gryphon first.";
close;
}
else if (checkriding()) {
mes "[Riding Creature Master]";
mes "You already have a Gryphon.";
close;
}
else if(ismounting()) {
mes "[Riding Creature Master]";
mes "Please remove your cash mount.";
close;
}
setriding;
close;
case 2:
mes "[Riding Creature Master]";
mes "I see. Then have a great day.";
close;
}
}
mes "I'm here to provide Rune Knights and Royal Guards with riding creatures.";
close;
}
// Peco removing NPC
prontera,125,208,5 script Peco Peco Remover 105,{
mes "[Soldier]";
mes "If you're unable to dismount from a Peco Peco";
mes "for some unknown reason,";
mes "please feel free to use my services.";
if (checkriding()) {
next;
mes "[Soldier]";
mes "You're riding a Peco Peco.";
mes "Would you like to dismount?";
next;
switch(select("Yes:No")) {
case 1:
setriding 0;
mes "[Soldier]";
mes "Say, how does it feel to";
mes "step on the ground on your own";
mes "feet again?";
close;
case 2:
mes "[Soldier]";
mes "I see. Please feel free to ask me";
mes "if you change your mind.";
close;
}
}
close;
}
// Magic Gear Renter
prontera,163,178,4 script Magic Gear Master 105,{
mes "[Magic Gear Master]";
if (Class == Job_Mechanic || Class == Job_Mechanic_T || Class == Job_Baby_Mechanic) {
mes "Welcome. Would you like to rent a Magic Gear?";
next;
switch(select("Yes:No")) {
case 1:
if (!getskilllv("NC_MADOLICENCE")) {
mes "[Magic Gear Master]";
mes "Please learn how to use a Magic Gear first.";
close;
}
else if (checkmadogear()) {
mes "[Magic Gear Master]";
mes "You already have a Magic Gear.";
close;
}
else if(ismounting()) {
mes "[Magic Gear Master]";
mes "Please remove your cash mount.";
close;
}
setmadogear;
close;
case 2:
mes "[Magic Gear Master]";
mes "I see. Then have a great day.";
close;
}
}
mes "How may I help you?";
mes "Magic Gears are only available for Mechanics.";
close;
}
//===== rAthena Script =======================================
//= Renters
//===== By: ==================================================
//= rAthena Dev Team
//===== Current Version: =====================================
//= 2.1
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Renewal-specific breeder NPCs.
//===== Additional Comments: =================================
//= 2.1 Moved some renters to a separate renewal file. [Daegaladh]
//============================================================
// Dragon Breeder on the Rune Knight job change map, couldn't find NPC on iRO.
job3_rune01,88,62,5 script Dragon Breeder 105,{
mes "[Dragon Breeder]";
if (Class == Job_Rune_Knight || Class == Job_Rune_Knight_T || Class == Job_Baby_Rune) {
mes "Welcome. Would you like to rent a Dragon?";
next;
switch(select("Yes:No")) {
case 1:
//if (!getskilllv("RK_DRAGONTRAINING")) {
if (!getskilllv("KN_RIDING")) {
mes "[Dragon Breeder]";
mes "Please learn how to ride a Dragon first.";
close;
}
else if (checkriding()) {
mes "[Dragon Breeder]";
mes "You already have a Dragon.";
close;
}
else if(ismounting()) {
mes "[Dragon Breeder]";
mes "Please remove your cash mount.";
close;
}
setdragon;
close;
case 2:
mes "[Dragon Breeder]";
mes "I see. Then have a great day.";
close;
}
}
mes "What are you doing here?";
mes "Only Rune Knights can rent a Dragon.";
close;
}
// Dragon/Gryphon Master
prontera,130,213,5 script Riding Creature Master 105,{
mes "[Riding Creature Master]";
if (Class == Job_Rune_Knight || Class == Job_Rune_Knight_T || Class == Job_Baby_Rune) {
mes "Welcome. Would you like to rent a Dragon?";
next;
switch(select("Yes:No")) {
case 1:
//if (!getskilllv("RK_DRAGONTRAINING")) {
if (!getskilllv("KN_RIDING")) {
mes "[Riding Creature Master]";
mes "Please learn how to ride a Dragon first.";
close;
}
else if (checkriding()) {
mes "[Riding Creature Master]";
mes "You already have a Dragon.";
close;
}
else if(ismounting()) {
mes "[Riding Creature Master]";
mes "Please remove your cash mount.";
close;
}
setdragon;
close;
case 2:
mes "[Riding Creature Master]";
mes "I see. Then have a great day.";
close;
}
}
if (Class == Job_Royal_Guard || Class == Job_Royal_Guard_T || Class == Job_Baby_Guard) {
mes "Welcome. Would you like to rent a Gryphon?";
next;
switch(select("Yes:No")) {
case 1:
if(!getskilllv("KN_RIDING")) {
mes "[Riding Creature Master]";
mes "Please learn how to ride a Gryphon first.";
close;
}
else if (checkriding()) {
mes "[Riding Creature Master]";
mes "You already have a Gryphon.";
close;
}
else if(ismounting()) {
mes "[Riding Creature Master]";
mes "Please remove your cash mount.";
close;
}
setriding;
close;
case 2:
mes "[Riding Creature Master]";
mes "I see. Then have a great day.";
close;
}
}
mes "I'm here to provide Rune Knights and Royal Guards with riding creatures.";
close;
}
// Peco removing NPC
prontera,125,208,5 script Peco Peco Remover 105,{
mes "[Soldier]";
mes "If you're unable to dismount from a Peco Peco";
mes "for some unknown reason,";
mes "please feel free to use my services.";
if (checkriding()) {
next;
mes "[Soldier]";
mes "You're riding a Peco Peco.";
mes "Would you like to dismount?";
next;
switch(select("Yes:No")) {
case 1:
setriding 0;
mes "[Soldier]";
mes "Say, how does it feel to";
mes "step on the ground on your own";
mes "feet again?";
close;
case 2:
mes "[Soldier]";
mes "I see. Please feel free to ask me";
mes "if you change your mind.";
close;
}
}
close;
}
// Magic Gear Renter
prontera,163,178,4 script Magic Gear Master 105,{
mes "[Magic Gear Master]";
if (Class == Job_Mechanic || Class == Job_Mechanic_T || Class == Job_Baby_Mechanic) {
mes "Welcome. Would you like to rent a Magic Gear?";
next;
switch(select("Yes:No")) {
case 1:
if (!getskilllv("NC_MADOLICENCE")) {
mes "[Magic Gear Master]";
mes "Please learn how to use a Magic Gear first.";
close;
}
else if (checkmadogear()) {
mes "[Magic Gear Master]";
mes "You already have a Magic Gear.";
close;
}
else if(ismounting()) {
mes "[Magic Gear Master]";
mes "Please remove your cash mount.";
close;
}
setmadogear;
close;
case 2:
mes "[Magic Gear Master]";
mes "I see. Then have a great day.";
close;
}
}
mes "How may I help you?";
mes "Magic Gears are only available for Mechanics.";
close;
}

View File

@@ -1,144 +1,144 @@
//===== rAthena Script =======================================
//= Homunculus S Quest
//===== By: ==================================================
//= Masao
//===== Current Version: =====================================
//= 1.1
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Evolves an Homunculus which is at least Level 99 to the
//= new Homunculus S Class.
//===== Additional Comments: =================================
//= 1.0 First Version. The actual changing dialog is currently
//= customized. [Masao]
//= 1.1 Cleaning. [Euphy]
//============================================================
job3_gen01,12,44,4 script Viorel#job3_gen01 542,{
if((Class != Job_Genetic) && (Class != Job_Genetic_T) && (Class != Job_Baby_Genetic)){
mes "[Viorel]";
mes "^FF4800Homunculus^000000 research requires a lot of time and funding.";
mes "However, I believe passion is the most important factor.";
next;
switch(select("End conversation.:What are you talking about?:Why are you always standing there?")) {
case 1:
mes "[Viorel]";
mes "So long~!";
close;
case 2:
mes "[Viorel]";
mes "You see, ^006400Alchemists^000000 have an inquisitive nature.";
mes "People like me, especially, even think of creating life itself.";
next;
mes "[Viorel]";
mes "You'd have to research ^FF4800Homunculus^000000 to understand.";
mes "Now, if you'll excuse me~!";
close;
case 3:
emotion 4,0;
mes "[Viorel]";
mes "What, is it so strange to see an Alchemist in their own lab?";
mes "How so?";
close;
}
}
mes "[Viorel]";
mes "Hello "+strcharinfo(0)+",";
mes "what can I do for a fellow Alchemist like you?";
next;
switch(select("I want to evolve my Homunculus:About Homunculus S:Cancel")){
case 1:
mes "[Viorel]";
if(!getskilllv("AM_BIOETHICS")){
mes "I'm sorry, but you must know the Skill Bioethics! Otherwise I can't let your Homunculus evolve into a Homunculus S.";
close;
}
if(!gethominfo(1)){
mes "You don't even have a Homunculus!";
close;
}
if(gethominfo(1) < 6009){
mes "You must have an evolved Homunculus, or you can't turn it into the new Homunculus S.";
close;
}
if(gethominfo(6) < 99){
mes "Your Homunculus must be level 99 to evolve into a Homuculus S!";
mes "Come back after you've trained your Homunculus a little bit more.";
close;
}
if(gethominfo(1) == 6048 || gethominfo(1) == 6049 || gethominfo(1) == 6050 || gethominfo(1) == 6051 || gethominfo(1) == 6052){
mes "Your Homunculus S looks great!";
mes "I hope you will experience many great adventures with it!";
close;
}
mes "Great, it seems like you're all ready to get your Homunculus to the next level!";
next;
mes "[Viorel]";
mes "Now you can either directly change your Homunculus to a random Homunculus S or you can donate a little fee of 50,000z";
mes "to the Alchemist Guild. For this you'll be able to change your Homunculus into your desired Homunculus S Class!";
mes "So, what do you think?";
next;
switch(Select("I want to donate.:I don't want to donate.:Cancel")){
case 1:
if(Zeny < 50000){
mes "[Viorel]";
mes "Haha, nice try my friend! But you don't even have the 50,000z to donate!";
mes "Come back if you have the Zeny.";
close;
}
mes "[Viorel]";
mes "Alright, now please tell me which Homunculus you'd like to have:";
next;
set .@i, select("Eira:Bayeri:Sera:Dieter:Elanor:Cancel");
if (.@i == 6) {
mes "[Viorel]";
mes "So long~!";
close;
}
case 2:
mes "[Viorel]";
mes "Ok, it's all set! Now just give me a moment!";
next;
mes "[Viorel]";
mes "Abra...";
next;
mes "[Viorel]";
mes "Kadabra...";
next;
mes "[Viorel]";
mes "Simsala!";
mes "...";
mes "Oh, sorry... wrong game!";
next;
mes "[Viorel]";
mes "Here you go! Your new Homunculus S!";
if (.@i) {
hommutate 6047+.@i;
set Zeny,Zeny - 50000;
}
else hommutate;
close;
case 3:
mes "[Viorel]";
mes "So long~!";
close;
}
case 2:
mes "[Viorel]";
mes "The Homunculus S are the new and improved versions of the current Homunculus you know.";
mes "These new Homunculus have been made because the monsters in our world keep getting stronger and";
mes "stronger, and our current Homunculus are just not able to keep up with them anymore.";
next;
mes "[Viorel]";
mes "But since we're Alchemists and we don't want to abandon our precious Homunculus, we've discovered a way";
mes "to improve their skills and strength in order to keep them by our side, and joining us once more";
mes "in battle! Isn't that great?";
close;
case 3:
mes "[Viorel]";
mes "So long~!";
close;
}
}
//===== rAthena Script =======================================
//= Homunculus S Quest
//===== By: ==================================================
//= Masao
//===== Current Version: =====================================
//= 1.1
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Evolves an Homunculus which is at least Level 99 to the
//= new Homunculus S Class.
//===== Additional Comments: =================================
//= 1.0 First Version. The actual changing dialog is currently
//= customized. [Masao]
//= 1.1 Cleaning. [Euphy]
//============================================================
job3_gen01,12,44,4 script Viorel#job3_gen01 542,{
if((Class != Job_Genetic) && (Class != Job_Genetic_T) && (Class != Job_Baby_Genetic)){
mes "[Viorel]";
mes "^FF4800Homunculus^000000 research requires a lot of time and funding.";
mes "However, I believe passion is the most important factor.";
next;
switch(select("End conversation.:What are you talking about?:Why are you always standing there?")) {
case 1:
mes "[Viorel]";
mes "So long~!";
close;
case 2:
mes "[Viorel]";
mes "You see, ^006400Alchemists^000000 have an inquisitive nature.";
mes "People like me, especially, even think of creating life itself.";
next;
mes "[Viorel]";
mes "You'd have to research ^FF4800Homunculus^000000 to understand.";
mes "Now, if you'll excuse me~!";
close;
case 3:
emotion 4,0;
mes "[Viorel]";
mes "What, is it so strange to see an Alchemist in their own lab?";
mes "How so?";
close;
}
}
mes "[Viorel]";
mes "Hello "+strcharinfo(0)+",";
mes "what can I do for a fellow Alchemist like you?";
next;
switch(select("I want to evolve my Homunculus:About Homunculus S:Cancel")){
case 1:
mes "[Viorel]";
if(!getskilllv("AM_BIOETHICS")){
mes "I'm sorry, but you must know the Skill Bioethics! Otherwise I can't let your Homunculus evolve into a Homunculus S.";
close;
}
if(!gethominfo(1)){
mes "You don't even have a Homunculus!";
close;
}
if(gethominfo(1) < 6009){
mes "You must have an evolved Homunculus, or you can't turn it into the new Homunculus S.";
close;
}
if(gethominfo(6) < 99){
mes "Your Homunculus must be level 99 to evolve into a Homuculus S!";
mes "Come back after you've trained your Homunculus a little bit more.";
close;
}
if(gethominfo(1) == 6048 || gethominfo(1) == 6049 || gethominfo(1) == 6050 || gethominfo(1) == 6051 || gethominfo(1) == 6052){
mes "Your Homunculus S looks great!";
mes "I hope you will experience many great adventures with it!";
close;
}
mes "Great, it seems like you're all ready to get your Homunculus to the next level!";
next;
mes "[Viorel]";
mes "Now you can either directly change your Homunculus to a random Homunculus S or you can donate a little fee of 50,000z";
mes "to the Alchemist Guild. For this you'll be able to change your Homunculus into your desired Homunculus S Class!";
mes "So, what do you think?";
next;
switch(Select("I want to donate.:I don't want to donate.:Cancel")){
case 1:
if(Zeny < 50000){
mes "[Viorel]";
mes "Haha, nice try my friend! But you don't even have the 50,000z to donate!";
mes "Come back if you have the Zeny.";
close;
}
mes "[Viorel]";
mes "Alright, now please tell me which Homunculus you'd like to have:";
next;
set .@i, select("Eira:Bayeri:Sera:Dieter:Elanor:Cancel");
if (.@i == 6) {
mes "[Viorel]";
mes "So long~!";
close;
}
case 2:
mes "[Viorel]";
mes "Ok, it's all set! Now just give me a moment!";
next;
mes "[Viorel]";
mes "Abra...";
next;
mes "[Viorel]";
mes "Kadabra...";
next;
mes "[Viorel]";
mes "Simsala!";
mes "...";
mes "Oh, sorry... wrong game!";
next;
mes "[Viorel]";
mes "Here you go! Your new Homunculus S!";
if (.@i) {
hommutate 6047+.@i;
set Zeny,Zeny - 50000;
}
else hommutate;
close;
case 3:
mes "[Viorel]";
mes "So long~!";
close;
}
case 2:
mes "[Viorel]";
mes "The Homunculus S are the new and improved versions of the current Homunculus you know.";
mes "These new Homunculus have been made because the monsters in our world keep getting stronger and";
mes "stronger, and our current Homunculus are just not able to keep up with them anymore.";
next;
mes "[Viorel]";
mes "But since we're Alchemists and we don't want to abandon our precious Homunculus, we've discovered a way";
mes "to improve their skills and strength in order to keep them by our side, and joining us once more";
mes "in battle! Isn't that great?";
close;
case 3:
mes "[Viorel]";
mes "So long~!";
close;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1 @@
ALTER TABLE `char` ADD CONSTRAINT `name_key` UNIQUE (`name`);
ALTER TABLE `char` ADD CONSTRAINT `name_key` UNIQUE (`name`);

View File

@@ -191,7 +191,6 @@
<ClInclude Include="..\src\config\renewal.h" />
<ClInclude Include="..\src\config\secure.h" />
<ClInclude Include="..\src\config\classes\general.h" />
<ClInclude Include="..\src\config\classes\swordsman.h" />
<ClInclude Include="..\src\map\script.h" />
<ClInclude Include="..\src\map\searchstore.h" />
<ClInclude Include="..\src\map\skill.h" />

View File

@@ -356,7 +356,6 @@
<ClInclude Include="..\src\config\renewal.h" />
<ClInclude Include="..\src\config\secure.h" />
<ClInclude Include="..\src\config\classes\general.h" />
<ClInclude Include="..\src\config\classes\swordsman.h" />
<ClInclude Include="..\src\common\conf.h">
<Filter>common</Filter>
</ClInclude>

View File

@@ -751,10 +751,6 @@
RelativePath="..\src\map\storage.h"
>
</File>
<File
RelativePath="..\src\config\classes\swordsman.h"
>
</File>
<File
RelativePath="..\src\map\trade.c"
>