eACC scripts.
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5429 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
a9cc1889c2
commit
2ccf291664
33
npc/custom/eAAC_Scripts/Kafra_Express_files.conf
Normal file
33
npc/custom/eAAC_Scripts/Kafra_Express_files.conf
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
//|-----------------------------------------------------------------|
|
||||||
|
//|- English Athena Approved Certified Script: Kafra Express Set -|
|
||||||
|
//|-----------------------------------------------------------------|
|
||||||
|
//| Under this is the global_functions.txt needed for this set to work.
|
||||||
|
//| Note that if you enable this, you will have to go to the scripts_main.conf
|
||||||
|
//| and disable the original one.
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/global_functionsKE.txt
|
||||||
|
//|
|
||||||
|
//| The configuration file.
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/config.txt
|
||||||
|
|
||||||
|
//| The files for this npc.
|
||||||
|
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/kafras.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_broadcast.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_jobchange.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_jobswap.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_rent.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_shop.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_statmarket.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_warp_pvp.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_warp_town.txt
|
||||||
|
npc: npc/custom/eAAC_Scripts/kafraExpress/ke_warp_woe.txt
|
||||||
|
|
||||||
|
//| For more info referring this script, open the provided readme.txt in this folder.
|
||||||
|
//| Copyright © 2004 - 2006 Skotlex. All Rights Reserved for him (this is almost a trademark =X)
|
||||||
157
npc/custom/eAAC_Scripts/clonearena.txt
Normal file
157
npc/custom/eAAC_Scripts/clonearena.txt
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
<html>
|
||||||
|
<head><title>RapidShare Webhosting + Webspace</title>
|
||||||
|
<meta name="keywords" content="hosting, webhosting, webspace, kostenlos, webserver">
|
||||||
|
<meta name="description" content="RapidShare - Webhosting + Webspace">
|
||||||
|
<Style>
|
||||||
|
body {
|
||||||
|
font-family: Verdana;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
font-family: Verdana;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
</Style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body bgcolor="#FFFFFF" text="#000000" alink="#555555" vlink="#555555" link="#555555" topmargin=0 leftmargin=0 bottommargin=0 rightmargin=0>
|
||||||
|
<script>if (self != top) { top.location.replace(window.location.href) }</script>
|
||||||
|
|
||||||
|
<Table width=100% height=100% border=0 cellspacing=0 cellpadding=0>
|
||||||
|
<TR><TD nowrap colspan=2 height=20 align=center valign=top bgcolor=#E2E6ED></TD></TR>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td width="50%" align="right" style="background-image:url(http://images.rapidforum.com/rapidshare/logobg.jpg); background-repeat:repeat-x;"><img src="http://images.rapidforum.com/rapidshare/logo-left.jpg"></td>
|
||||||
|
<td width="50%" align="left" style="background-image:url(http://images.rapidforum.com/rapidshare/logobg2.jpg); background-repeat:repeat-x;"><img src="http://images.rapidforum.com/rapidshare/logo-right.jpg"></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<TR><TD colspan=2 height=100% align=center valign=top bgcolor=#E2E6ED>
|
||||||
|
<BR><BR>
|
||||||
|
|
||||||
|
<!-- Inhalt !-->
|
||||||
|
<Table width=90% height=90% border=0 cellspacing=0 cellpadding=0>
|
||||||
|
<TR><TD nowrap colspan=5 height=1 bgcolor=#000000></TD></TR>
|
||||||
|
|
||||||
|
<TR>
|
||||||
|
<TD nowrap width=1 bgcolor=#000000></TD>
|
||||||
|
<TD nowrap width=5 bgcolor=#FCFEFE></TD>
|
||||||
|
<TD width=100% height=100% valign=top align=center bgcolor=#FCFEFE>
|
||||||
|
|
||||||
|
<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td>
|
||||||
|
<a href="https://ssl.rapidshare.de/cgi-bin/premiumzone.cgi">PREMIUM-Zone (privileged Area)</a><br>
|
||||||
|
<b>NEW:</b> <a href="http://rapidshare.de/en/freefolders.html">Create your own RapidShare-folders!</a> <font color="red">FREE</font>
|
||||||
|
</td><td align="right">
|
||||||
|
<a href="http://rapidshare.de/en/premium.html"><b>PREMIUM-Downloads</b></a>
|
||||||
|
<a href="http://rapidshare.de/en/banners.html">Banners</a>
|
||||||
|
<a href="http://rapidshare.de/en/faq.html">Frequently Asked Questions (FAQ)</a>
|
||||||
|
<a href="http://rapidshare.de/en/impressum.html">Imprint</a><br>
|
||||||
|
<b><a href="http://rapidshare.de/en/forgotpw.html">Forgot Premium-password?</a></b>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<p><h2>RapidShare - The world's biggest 1-Click Webhoster</h2></p>
|
||||||
|
|
||||||
|
<!-- GOOGLE PART 1 START -->
|
||||||
|
<div id='my_g_head' ></div>
|
||||||
|
<script language="JavaScript"><!--
|
||||||
|
function google_ad_request_done(google_ads) {
|
||||||
|
if (google_ads.length < 1 ) return;
|
||||||
|
|
||||||
|
var my_g_feetback = '';
|
||||||
|
|
||||||
|
if (google_info.feedback_url) {
|
||||||
|
my_g_feetback += '<tr><td align="center"><a target="_blank" style="text-decoration:none;font-size:14px;color:blue;" href="' + google_info.feedback_url + '">Ads by Google</a></td></tr>';
|
||||||
|
} else {
|
||||||
|
my_g_feetback += 'Ads by Google';
|
||||||
|
}
|
||||||
|
|
||||||
|
var my_g_head = '<table width="720">'+my_g_feetback;
|
||||||
|
|
||||||
|
if(google_ads.length>1){ var my_g_first = '<table width="200">'+my_g_feetback } else { var my_g_first = '<table width="200">' }
|
||||||
|
|
||||||
|
if (google_ads[0].type == 'text') {
|
||||||
|
for(i = 0; i < google_ads.length; ++i) {
|
||||||
|
if(i==0){
|
||||||
|
my_g_head += '<tr><td><div align="center"><a target="_blank" href="' + google_ads[i].url + '" style="text-decoration:none;font-size:16px;" onmouseover="window.status=\'Go to ' + google_ads[i].visible_url + '\';return true;" onmouseout="window.status=\'\'; return true;"><font color="blue"> <b><u>' + google_ads[i].line1 + '</u></b> <span>' + google_ads[i].line2 + ' ' + google_ads[i].line3+'</a></span></div></td></tr><tr><td colspan=2><br><div align="center"><img src="http://images.rapidforum.com/rapidshare/line001.gif" width="100%" height="1"></br><br></font></div></td></tr>';
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(i<3){
|
||||||
|
s = '<tr><td nowrap style="text-align:left;font-family:arial;padding-top:16px;">' +
|
||||||
|
'<a target="_blank" style="cursor:pointer;cursor:hand;text-decoration:underline" href="' + google_ads[i].url + '" onmouseover="window.status=\'Go to ' + google_ads[i].visible_url + '\';return true;" onmouseout="window.status=\'\'; return true;">' +
|
||||||
|
'<span style="text-decoration:none;font-size:16px"><font color="red"><b>' + google_ads[i].line1 + '</font></b><br></span>' +
|
||||||
|
'<a target="_blank" style="cursor:pointer;cursor:hand;text-decoration:none" href="' + google_ads[i].url + '" onmouseover="window.status=\'Go to ' + google_ads[i].visible_url + '\';return true;" onmouseout="window.status=\'\'; return true;">' +
|
||||||
|
'<font size="3" face="Times New Roman, Times, serif"><font color="black">' + google_ads[i].line2 + ' ' + google_ads[i].line3 + '<br></span>' +
|
||||||
|
'</font></td></tr>';
|
||||||
|
my_g_first += s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// For an image ad, display the image; there will be only one .
|
||||||
|
if (google_ads[0].type == 'image') {
|
||||||
|
s = '<tr><td align="center"><a target="_blank" href="' + google_ads[0].url + '"style="text-decoration: none"><img src="' + google_ads[0].image_url +
|
||||||
|
'" height="' + google_ads[0].height + '" width="' + google_ads[0].width + '" border="0"></a></td></tr>';
|
||||||
|
my_g_first += s;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finish up anything that needs finishing up
|
||||||
|
my_g_head =my_g_head+'</table>';
|
||||||
|
my_g_first =my_g_first+ '</table>';
|
||||||
|
|
||||||
|
document.getElementById("my_g_head").innerHTML += my_g_head;
|
||||||
|
document.getElementById("my_g_first").innerHTML += my_g_first;
|
||||||
|
}
|
||||||
|
--></script>
|
||||||
|
<!-- GOOGLE PART 1 END -->
|
||||||
|
|
||||||
|
|
||||||
|
<iframe src="http://dl23.rapidshare.de/en/progress.html?uploadid=139630255722573376" width="600" height="85" frameborder="0" marginwidth="0" marginheight="0" scrolling="NO"></iframe>
|
||||||
|
<form method="post" action="http://ul23.rapidshare.de/cgi-bin/upload.cgi?rsuploadid=139630255722573376" enctype="multipart/form-data" onsubmit="this.u.value='Please wait ...';this.u.disabled=true">
|
||||||
|
<input type="file" size="48" name="filecontent"> <input type="submit" name="u" value="Upload!"></form>
|
||||||
|
|
||||||
|
|
||||||
|
<table><tr><td>
|
||||||
|
<b>Upload-limit: <font color="red">Unlimited!</font></b> (Max. <b><u>100 MB</u></b> per file! Split-archives allowed!)<br>
|
||||||
|
<b>Download-limit: <font color="red">Unlimited!</font></b> (Some files have more than 100.000 downloads!)<br>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<p><table><tr><td align="left">RapidShare, the world's biggest (<font color="red"><b>over 15 million files uploaded!</b></font>)
|
||||||
|
and fastest (<font color="red"><b>45 Gigabit/s up/down!</b></font>) 1-click file-hoster.<br>
|
||||||
|
Burning the net with 200 Terabytes of hard-drive capacity right now and growing! Millions of users just can't be wrong.<br>
|
||||||
|
Get your own <a href="http://rapidshare.de/en/premium.html">PREMIUM-ACCOUNT</a> to use ALL advantages of RapidShare!</td></tr></table></p>
|
||||||
|
|
||||||
|
<p><b>NEW:</b> Premium-users try out <a href="http://rapidshare.de/en/rapidget.html">RapidGet</a>, a free tool especially coded for RapidShare!</p>
|
||||||
|
|
||||||
|
<p><hr>Access-code <b></b> wrong. Only Free-users have to enter an access-code to prevent abuse.<br>
|
||||||
|
Premium-users don't have to! Get your own <a href="http://rapidshare.de/en/premium.html">PREMIUM-Account</a> now.</p>
|
||||||
|
|
||||||
|
<!-- GOOGLE PART 2 START -->
|
||||||
|
<div id='my_g_first'></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
google_ad_client = "pub-4001973908297822";
|
||||||
|
google_max_num_ads = 3;
|
||||||
|
google_feedback = "on";
|
||||||
|
google_ad_output = "js";
|
||||||
|
google_ad_type = "text_image";
|
||||||
|
google_image_size = "728x90";
|
||||||
|
google_encoding = "latin1";
|
||||||
|
google_kw_type = "broad";
|
||||||
|
google_kw = "sync folders";
|
||||||
|
google_ad_channel = "8199693586";
|
||||||
|
|
||||||
|
//--></script>
|
||||||
|
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
|
||||||
|
<!-- GOOGLE PART 2 END -->
|
||||||
|
|
||||||
|
</TD>
|
||||||
|
<TD nowrap width=5 bgcolor=#FCFEFE></TD>
|
||||||
|
<TD nowrap width=1 bgcolor=#000000></TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR><TD nowrap colspan=5 height=1 bgcolor=#000000></TD></TR>
|
||||||
|
</Table>
|
||||||
|
|
||||||
|
<BR><BR>
|
||||||
|
<!--Inhalt Ende 1-->
|
||||||
|
</TD></TR></Table>
|
||||||
|
|
||||||
|
</body></html>
|
||||||
305
npc/custom/eAAC_Scripts/disguiser_SQL.txt
Normal file
305
npc/custom/eAAC_Scripts/disguiser_SQL.txt
Normal file
@ -0,0 +1,305 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Disguiser Quesr
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= PalasX (http://cashaan.dontexist.org)
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= v1.10 SQL
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= SVN 5200+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Baphomet disguises you if you find all his brothers.
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= Gotta find them all in order
|
||||||
|
//= Dynamically edits item 2614(eye of dullahan) with
|
||||||
|
//= setitemscript 2614,"{bonus bdisguise,var_disguise;}";
|
||||||
|
//= so your SVN better support it
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
prt_fild05.gat,277,226,5 script Dullahan Master 736,{
|
||||||
|
|
||||||
|
if(var_disguise > 1) goto Complete;
|
||||||
|
if(quest_disguise == 0) goto Quest;
|
||||||
|
|
||||||
|
NotMe:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "You must visit us in the proper order, as is Thor's will. Only then can we teach you the power of self-transmutation! Hunt around Morocc Next!";
|
||||||
|
close;
|
||||||
|
|
||||||
|
Cancel:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Later.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
Quest:
|
||||||
|
set quest_disguise,1;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "What am I doing here? Find my brothers and you shall learn a great secret. Search around Morocc next!";
|
||||||
|
next;
|
||||||
|
close;
|
||||||
|
|
||||||
|
Complete:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Several millenia ago, Thor, the creator breathed life onto Midgar. In the beginning, all was well, but Thor's left eye proved to be the bane of our existance. As it's gaze set upon our land, all the monsters were let loose from within Thor's soul. Thor cast out his own eye, the only thing that could control the monsters. Your ring is made from his eye, and will give you the same powers.";
|
||||||
|
next;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "I can change its mystical properties, which monster you wanna be?";
|
||||||
|
next;
|
||||||
|
callfunc "PXC_Disguiser",1;
|
||||||
|
|
||||||
|
Close;
|
||||||
|
}
|
||||||
|
moc_fild10.gat,34,283,4 script Dullahan Master 736,{
|
||||||
|
|
||||||
|
if(var_disguise > 1) goto Complete;
|
||||||
|
if(quest_disguise == 1) goto Quest;
|
||||||
|
|
||||||
|
NotMe:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "You must visit us in the proper order, as is Thor's will. Only then can we teach you the power of self-transmutation! Hunt around Geffen Next!";
|
||||||
|
close;
|
||||||
|
|
||||||
|
Cancel:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Later.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
Quest:
|
||||||
|
set quest_disguise,2;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "What am I doing here? Find my brothers and you shall learn a great secret. Search outside Geffen next!";
|
||||||
|
next;
|
||||||
|
close;
|
||||||
|
|
||||||
|
|
||||||
|
Complete:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Several millenia ago, Thor, the creator breathed life onto Midgar. In the beginning, all was well, but Thor's left eye proved to be the bane of our existance. As it's gaze set upon our land, all the monsters were let loose from within Thor's soul. Thor cast out his own eye, the only thing that could control the monsters. Your ring is made from his eye, and will give you the same powers.";
|
||||||
|
next;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "I can change its mystical properties, which monster you wanna be?";
|
||||||
|
next;
|
||||||
|
callfunc "PXC_Disguiser",2;
|
||||||
|
|
||||||
|
close;
|
||||||
|
}
|
||||||
|
gef_fild00.gat,97,123,4 script Dullahan Master 736,{
|
||||||
|
|
||||||
|
if(var_disguise > 1) goto Complete;
|
||||||
|
if(quest_disguise == 2) goto Quest;
|
||||||
|
|
||||||
|
NotMe:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "You must visit us in the proper order, as is Thor's will. Only then can we teach you the power of self-transmutation! Hunt around Payon Next!";
|
||||||
|
close;
|
||||||
|
|
||||||
|
Cancel:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Later.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
Quest:
|
||||||
|
set quest_disguise,3;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "What am I doing here? Find my brothers and you shall learn a great secret. Search outside Payon next!";
|
||||||
|
next;
|
||||||
|
close;
|
||||||
|
|
||||||
|
Complete:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Several millenia ago, Thor, the creator breathed life onto Midgar. In the beginning, all was well, but Thor's left eye proved to be the bane of our existance. As it's gaze set upon our land, all the monsters were let loose from within Thor's soul. Thor cast out his own eye, the only thing that could control the monsters. Your ring is made from his eye, and will give you the same powers.";
|
||||||
|
next;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "I can change its mystical properties, which monster you wanna be?";
|
||||||
|
next;
|
||||||
|
callfunc "PXC_Disguiser",3;
|
||||||
|
|
||||||
|
close;
|
||||||
|
}
|
||||||
|
pay_fild01.gat,369,305,4 script Dullahan Master 736,{
|
||||||
|
|
||||||
|
if(var_disguise > 1) goto Complete;
|
||||||
|
if(quest_disguise == 3) goto Quest;
|
||||||
|
|
||||||
|
NotMe:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "You must visit us in the proper order, as is Thor's will. Only then can we teach you the power of self-transmutation! Hunt around Alberta Next!";
|
||||||
|
close;
|
||||||
|
|
||||||
|
Cancel:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Later.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
Quest:
|
||||||
|
set quest_disguise,4;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "What am I doing here? Find my brothers and you shall learn a great secret. Search outside Alberta next!";
|
||||||
|
next;
|
||||||
|
close;
|
||||||
|
|
||||||
|
Complete:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Several millenia ago, Thor, the creator breathed life onto Midgar. In the beginning, all was well, but Thor's left eye proved to be the bane of our existance. As it's gaze set upon our land, all the monsters were let loose from within Thor's soul. Thor cast out his own eye, the only thing that could control the monsters. Your ring is made from his eye, and will give you the same powers.";
|
||||||
|
next;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "I can change its mystical properties, which monster you wanna be?";
|
||||||
|
next;
|
||||||
|
callfunc "PXC_Disguiser",4;
|
||||||
|
|
||||||
|
close;
|
||||||
|
}
|
||||||
|
pay_fild03.gat,313,40,4 script Dullahan Master 736,{
|
||||||
|
|
||||||
|
if(var_disguise > 1) goto Complete;
|
||||||
|
if(quest_disguise == 4) goto Quest;
|
||||||
|
|
||||||
|
NotMe:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "You must visit us in the proper order, as is Thor's will. Only then can we teach you the power of self-transmutation! Hunt around Izlude Next!";
|
||||||
|
close;
|
||||||
|
|
||||||
|
Cancel:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Later.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
Quest:
|
||||||
|
set quest_disguise,5;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "What am I doing here? Find my brothers and you shall learn a great secret. Search outside Izlude next!";
|
||||||
|
next;
|
||||||
|
close;
|
||||||
|
|
||||||
|
Complete:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Several millenia ago, Thor, the creator breathed life onto Midgar. In the beginning, all was well, but Thor's left eye proved to be the bane of our existance. As it's gaze set upon our land, all the monsters were let loose from within Thor's soul. Thor cast out his own eye, the only thing that could control the monsters. Your ring is made from his eye, and will give you the same powers.";
|
||||||
|
next;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "I can change its mystical properties, which monster you wanna be?";
|
||||||
|
next;
|
||||||
|
callfunc "PXC_Disguiser",5;
|
||||||
|
|
||||||
|
close;
|
||||||
|
}
|
||||||
|
prt_fild08.gat,362,185,4 script Dullahan Master 736,{
|
||||||
|
|
||||||
|
if(quest_disguise == 5) goto Quest;
|
||||||
|
if(countitem(2614) < 1) goto NeedRing;
|
||||||
|
if(var_disguise > 1) goto Complete;
|
||||||
|
|
||||||
|
NotMe:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "You must visit us in the proper order, as is Thor's will. Only then can we teach you the power of self-transmutation! Hunt around Culvert's Next!";
|
||||||
|
close;
|
||||||
|
|
||||||
|
Cancel:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Later.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
Quest:
|
||||||
|
set quest_disguise,0;
|
||||||
|
set var_disguise,1002;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "I am the last of the six. Forgive us for giving such horrible directions, for we, too, are born from Thor's left eye, and have a terrible mean streak. Plus, being monsters, we're complete and total idiots with a shoddy A.I.! You shall now receive your reward.";
|
||||||
|
next;
|
||||||
|
if(countitem(2614) < 1) goto NeedRing;
|
||||||
|
goto Complete;
|
||||||
|
close;
|
||||||
|
|
||||||
|
NeedRing:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "You will need an Eye of Dullahan ring in order to obtain our secret. I alone can sell you one for 500,000 zeny. None of my brothers have any left to sell! Simply bring me the money, and I'll make the trade!";
|
||||||
|
next;
|
||||||
|
menu "Buy Ring",-,"Forget it!",Cancel;
|
||||||
|
if(Zeny < 500000) goto Cancel;
|
||||||
|
set Zeny,Zeny-500000;
|
||||||
|
getitem 2614,1;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Here is your ring.";
|
||||||
|
goto Complete;
|
||||||
|
close;
|
||||||
|
|
||||||
|
Complete:
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "Several millenia ago, Thor, the creator breathed life onto Midgar. In the beginning, all was well, but Thor's left eye proved to be the bane of our existance. As it's gaze set upon our land, all the monsters were let loose from within Thor's soul. Thor cast out his own eye, the only thing that could control the monsters. Your ring is made from his eye, and will give you the same powers.";
|
||||||
|
next;
|
||||||
|
mes "[Baphomet]";
|
||||||
|
mes "I can change its mystical properties, which monster you wanna be?";
|
||||||
|
next;
|
||||||
|
callfunc "PXC_Disguiser",6;
|
||||||
|
|
||||||
|
close;
|
||||||
|
|
||||||
|
|
||||||
|
OnInit:
|
||||||
|
//EDIT EYE OF DULLAHAN
|
||||||
|
setitemscript 2614,"{ bonus bdisguise,var_disguise; }";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function script PXC_Disguiser {
|
||||||
|
if(getarg(0)==1) goto MenuSet_A;
|
||||||
|
if(getarg(0)==2) goto MenuSet_B;
|
||||||
|
if(getarg(0)==3) goto MenuSet_C;
|
||||||
|
if(getarg(0)==4) goto MenuSet_D;
|
||||||
|
if(getarg(0)==5) goto MenuSet_E;
|
||||||
|
if(getarg(0)==6) goto MenuSet_F;
|
||||||
|
|
||||||
|
|
||||||
|
MenuSet_A:
|
||||||
|
query_sql "SELECT ID FROM `mob_db` where ((ID > 1000) AND (ID < 1126)) order by ID ASC",$@mob_IDs$;
|
||||||
|
query_sql "SELECT Name2 FROM `mob_db` where ((ID > 1000) AND (ID < 1126)) order by ID ASC",$@mob_names$;
|
||||||
|
goto DoMenu;
|
||||||
|
|
||||||
|
MenuSet_B:
|
||||||
|
query_sql "SELECT ID FROM `mob_db` where ((ID > 1125) AND (ID < 1250)) order by ID ASC",$@mob_IDs$;
|
||||||
|
query_sql "SELECT Name2 FROM `mob_db` where ((ID > 1125) AND (ID < 1250)) order by ID ASC",$@mob_names$;
|
||||||
|
goto DoMenu;
|
||||||
|
|
||||||
|
MenuSet_C:
|
||||||
|
query_sql "SELECT ID FROM `mob_db` where ((ID > 1250) AND (ID < 1376)) order by ID ASC",$@mob_IDs$;
|
||||||
|
query_sql "SELECT Name2 FROM `mob_db` where ((ID > 1250) AND (ID < 1376)) order by ID ASC",$@mob_names$;
|
||||||
|
goto DoMenu;
|
||||||
|
|
||||||
|
MenuSet_D:
|
||||||
|
query_sql "SELECT ID FROM `mob_db` where ((ID > 1375) AND (ID < 1501)) order by ID ASC",$@mob_IDs$;
|
||||||
|
query_sql "SELECT Name2 FROM `mob_db` where ((ID > 1375) AND (ID < 1501)) order by ID ASC",$@mob_names$;
|
||||||
|
goto DoMenu;
|
||||||
|
|
||||||
|
MenuSet_E:
|
||||||
|
query_sql "SELECT ID FROM `mob_db` where ((ID > 1500) AND (ID < 1626)) order by ID ASC",$@mob_IDs$;
|
||||||
|
query_sql "SELECT Name2 FROM `mob_db` where ((ID > 1500) AND (ID < 1626)) order by ID ASC",$@mob_names$;
|
||||||
|
goto DoMenu;
|
||||||
|
|
||||||
|
MenuSet_F:
|
||||||
|
query_sql "SELECT ID FROM `mob_db` where ((ID > 1625) AND (ID < 1751)) order by ID ASC",$@mob_IDs$;
|
||||||
|
query_sql "SELECT Name2 FROM `mob_db` where ((ID > 1625) AND (ID < 1751)) order by ID ASC",$@mob_names$;
|
||||||
|
goto DoMenu;
|
||||||
|
|
||||||
|
DoMenu:
|
||||||
|
//first menu option
|
||||||
|
set $@menu$, $@mob_names$[0];
|
||||||
|
|
||||||
|
//set menu options to mob names
|
||||||
|
for(set $@i, 1; $@i < 125; set $@i, $@i + 1){
|
||||||
|
set $@menu$, $@menu$ + ":" + $@mob_names$[$@i];
|
||||||
|
}
|
||||||
|
|
||||||
|
//Fire our menu
|
||||||
|
set @menu, select($@menu$);
|
||||||
|
|
||||||
|
//Zero deliminated (off-by-one errors sux0r!!!)
|
||||||
|
set @menu, @menu-1;
|
||||||
|
|
||||||
|
//congratulate our user
|
||||||
|
mes "Behold, whilst you wear this ring, your form shall become that of a "+$@mob_names$[@menu];
|
||||||
|
|
||||||
|
//update our variable
|
||||||
|
set var_disguise, $@mob_IDs$[@menu];
|
||||||
|
|
||||||
|
close;
|
||||||
|
end;
|
||||||
|
|
||||||
|
}
|
||||||
1664
npc/custom/eAAC_Scripts/disguiser_TXT.txt
Normal file
1664
npc/custom/eAAC_Scripts/disguiser_TXT.txt
Normal file
File diff suppressed because it is too large
Load Diff
483
npc/custom/eAAC_Scripts/kafraExpress/Changelog.txt
Normal file
483
npc/custom/eAAC_Scripts/kafraExpress/Changelog.txt
Normal file
@ -0,0 +1,483 @@
|
|||||||
|
09/February/2006
|
||||||
|
* Refine v2.7
|
||||||
|
- Fixed buying of ores being free.
|
||||||
|
05/February/2006
|
||||||
|
* Readme v1.8
|
||||||
|
- Added Kafra Shop section
|
||||||
|
* Config v1.9
|
||||||
|
- Added Kafra Shop section
|
||||||
|
* Shop v0.1
|
||||||
|
- Initial release
|
||||||
|
* Main v5.4
|
||||||
|
- Added support for the Kafra Shop
|
||||||
|
* Refine v2.6
|
||||||
|
- Inverted order of item processing to prevent overweight problems (first the
|
||||||
|
items are charged, then you get the refined ones)
|
||||||
|
|
||||||
|
08/January/2006
|
||||||
|
* Job Swap v3.1
|
||||||
|
- Fixed incorrect menu entry causing crash in the 2nd job menu for female classes.
|
||||||
|
- Fixed job names from the menu not matching the job you were about to change
|
||||||
|
into (bard/dancer adjust was broken)
|
||||||
|
- Fixed job revert saying your previous class was always the same as the current.
|
||||||
|
|
||||||
|
04/January/2006
|
||||||
|
* readme.txt v1.7
|
||||||
|
- Added information about the new stat reset variables.
|
||||||
|
|
||||||
|
30/December/2005
|
||||||
|
* Main v5.3
|
||||||
|
- Fixed NPC dialog freezing after healing both HP/SP
|
||||||
|
* Stats v2.2
|
||||||
|
- Added option to charge reset based on base/job levels.
|
||||||
|
* Config v1.8
|
||||||
|
- Added reset by level cost options.
|
||||||
|
|
||||||
|
20/December/2005
|
||||||
|
* Stats v2.1
|
||||||
|
- Fixed resets charging you again when selecting return.
|
||||||
|
|
||||||
|
12/December/2005
|
||||||
|
* Bank v2.7
|
||||||
|
- Fixed inifite loop that would trigger on year change.
|
||||||
|
|
||||||
|
08/November/2005
|
||||||
|
* Dungeon Warping v3.1
|
||||||
|
- Fixed a crash when warping to GonRyun
|
||||||
|
|
||||||
|
02/November/2005
|
||||||
|
* Config v1.7
|
||||||
|
- Added Taekwon equipment variables
|
||||||
|
- Added dungeon variables for Abyss/Thanatos/Juperos
|
||||||
|
|
||||||
|
01/November/2005
|
||||||
|
* Job Changer v3.5
|
||||||
|
- Clean up and optimized to the new scripting engine.
|
||||||
|
- Added Taekwon Class support
|
||||||
|
- Acquired items will now display the slot count they have.
|
||||||
|
|
||||||
|
31/October/2005
|
||||||
|
* Pvp Warps v1.7, Woe Warps v1.7
|
||||||
|
- Clean up and optimized to the new scripting engine.
|
||||||
|
|
||||||
|
30/October/2005
|
||||||
|
* Dungeon Warps v3.0
|
||||||
|
- Added Abyss Lake, Thanatos Tower and Juperos.
|
||||||
|
|
||||||
|
29/October/2005
|
||||||
|
* Dungeon Warps v2.9
|
||||||
|
- Clean up and optimized to the new scripting engine.
|
||||||
|
|
||||||
|
28/October/2005
|
||||||
|
* Refine v2.5, Renter v1.8, Stat Market v2.0, Stats v2.0, Uncard v1.5
|
||||||
|
- Clean up and optimized to the new scripting engine.
|
||||||
|
|
||||||
|
27/October/2005
|
||||||
|
* Broadcast v3.0, Bank v2.6, Dye v1.9, Job Swapper v3.0, Main v5.2
|
||||||
|
- Clean up and optimized to the new scripting engine.
|
||||||
|
|
||||||
|
14/October/2005
|
||||||
|
* Pvp Warps v1.6
|
||||||
|
- Fixed standard pvp mode warps.
|
||||||
|
|
||||||
|
07/October/2005
|
||||||
|
* JobSwapper v2.5
|
||||||
|
- Updated to work on the new script engine.
|
||||||
|
|
||||||
|
06/October/2005
|
||||||
|
* Broadcast v2.8
|
||||||
|
- Fixed a bug when broadcasting to Room Four.
|
||||||
|
|
||||||
|
17/September/2005
|
||||||
|
* Pvp Warps v1.5
|
||||||
|
- Made warps random.
|
||||||
|
|
||||||
|
04/September/2005
|
||||||
|
* Town Warps v1.6
|
||||||
|
- Label fix.
|
||||||
|
|
||||||
|
11/August/2005
|
||||||
|
* PvP Warps v1.4
|
||||||
|
- Removed the obtained item, the pvp maps are "no return" areas afterall.
|
||||||
|
|
||||||
|
02/August/2005
|
||||||
|
* Job Changer v3.2
|
||||||
|
- Fixed issues with UpperPolicy = 1 and SkipNovice = 1 not working correctly.
|
||||||
|
|
||||||
|
* readme.txt v1.6
|
||||||
|
- Updated to reflect current changes.
|
||||||
|
|
||||||
|
* Bank v2.5, Broadcast v2.7, Dye v1.7, Job Changer v3,1, Job Swapper v2.4,
|
||||||
|
Main v5.0, Refine v2.3, Renting v1.7, StatMarket v1.9, Stats v1.8,
|
||||||
|
Uncarder v1.3, Warp Dungeon v2.7, Warp PvP v1.3, Warp Town v1.5, Warp WoE v1.6
|
||||||
|
- Updated all 'emotion's to use a e_* constant instead of numbers.
|
||||||
|
- Updated function F_keIntro to simplify code.
|
||||||
|
- Updated headers to reflect actual script requirements.
|
||||||
|
|
||||||
|
* Job Changer v3.0, Job Swapper v2.6, Config v1.6
|
||||||
|
- Removed Upper type related code as this is not really implemented in eA.
|
||||||
|
|
||||||
|
07/July/2005
|
||||||
|
* readme v1.5
|
||||||
|
- Updated documentation regarding traveller's mode.
|
||||||
|
- Added descriptions for the new variables in the Stat Market.
|
||||||
|
|
||||||
|
* Config v1.5
|
||||||
|
- Updated comments for Traveller's warp mode.
|
||||||
|
- Added variables kesm_skTradeCost, kesm_stTradeCost
|
||||||
|
- Removed Gefenia
|
||||||
|
|
||||||
|
* Stat Market v1.8
|
||||||
|
- Added support for trading directly skills->stats or stats->skills.
|
||||||
|
|
||||||
|
* Town Warps v1.4
|
||||||
|
- Added again Einbech
|
||||||
|
- Added Traveller's Warp mode 2
|
||||||
|
|
||||||
|
* Dungeon Warps v2.6
|
||||||
|
- Added Traveller's Warp mode 2
|
||||||
|
- Sunken Ship Traveller mode bugfix.
|
||||||
|
- Removed Gefenia
|
||||||
|
|
||||||
|
* Kafras v1.9
|
||||||
|
- Readded Einbech's town Kafra
|
||||||
|
- Removed Gefenia
|
||||||
|
|
||||||
|
05/July/2005
|
||||||
|
* Town Warps v1.3
|
||||||
|
- Fixed warps being free.
|
||||||
|
- Some optimizations.
|
||||||
|
|
||||||
|
04/July/2005
|
||||||
|
* Job Swap v2.2
|
||||||
|
- Fixed script 'freeze' when you don't have enough to revert to the previous job.
|
||||||
|
- Fixed job-swapping being free if you did not have enough zeny.
|
||||||
|
|
||||||
|
29/June/2005
|
||||||
|
* Config v1.4
|
||||||
|
- Added LightHalzen Rekkeben Cost
|
||||||
|
|
||||||
|
* Dungeon Warps v2.5
|
||||||
|
- Added LightHalzen
|
||||||
|
- Miscellanous name corrections
|
||||||
|
|
||||||
|
* Town Warps v1.2
|
||||||
|
- Removed Einbech (it is just a Einbroch Station?)
|
||||||
|
- Added LightHalzen
|
||||||
|
|
||||||
|
* Kafras v1.8
|
||||||
|
- Removed Einbech
|
||||||
|
- Added LightHalzen (Town + Dungeon)
|
||||||
|
|
||||||
|
* Broadcast v2.6
|
||||||
|
- Added variable kebc_showOnline to display count of recipients.
|
||||||
|
|
||||||
|
* Woe Warps v1.5, Town Warps v1.1, Pvp Warps v1.2, Dungeon Warps v1.4, Config v1.2
|
||||||
|
- Changed variable kewd_onlineStr to ked_users
|
||||||
|
|
||||||
|
* Main v4.9
|
||||||
|
- Updated to use the new warp dungeon file.
|
||||||
|
- Some cleanup and reorganization of menus.
|
||||||
|
|
||||||
|
* Warp Dungeon v2.3
|
||||||
|
- Merged Short Warps & Deep Warps into a single file.
|
||||||
|
|
||||||
|
* Main v4.8
|
||||||
|
- Moved the warping function here.
|
||||||
|
- ke_warp_core.txt no longer needed (removed)
|
||||||
|
|
||||||
|
* Job Changer v2.9, Job Swapper v2.1
|
||||||
|
- Some cleaning
|
||||||
|
|
||||||
|
* Config v1.1
|
||||||
|
- Reorganized, some cleaning.
|
||||||
|
|
||||||
|
28/June/2005
|
||||||
|
* readme.txt v1.3
|
||||||
|
- Updated and cleaned documentation.
|
||||||
|
|
||||||
|
* Warp Town v1.0
|
||||||
|
- Branched off Warp Core v3.1
|
||||||
|
|
||||||
|
* Warp Core v3.2
|
||||||
|
- Removed the Town warp code.
|
||||||
|
|
||||||
|
* Main v4.7
|
||||||
|
- Reorganized Menus
|
||||||
|
|
||||||
|
* Bank v2.4, Broadcast v2.5, Dye v1.6, Job Changer v2.8, Job Swap v2.0,
|
||||||
|
Main v4.6, Refine v2.2, Rent v1.6, Stat Market v1.7, Stats v1.7,
|
||||||
|
Uncard v1.2, Warp Core v3.1, Warp Deep v2.2, Warp Short v2.1, Warp WoE v1.4
|
||||||
|
- Upgraded to use config.txt
|
||||||
|
|
||||||
|
27/June/2005
|
||||||
|
* Job Swap v1.9
|
||||||
|
- Fixed another stupid bug when job-reverting
|
||||||
|
|
||||||
|
14/June/2005
|
||||||
|
* Job Changer v2.7
|
||||||
|
- Stupid fix for changing from adv 1st class to adv 2nd...
|
||||||
|
|
||||||
|
10/June/2005
|
||||||
|
* Job Swap v1.8
|
||||||
|
- Fixed a silly bug with the announce option.
|
||||||
|
|
||||||
|
05/June/2005
|
||||||
|
* Core Warps v3.0, Short Warps v2.0
|
||||||
|
- Bug Fix. kewd_pyramids -> kewd_pyramid
|
||||||
|
- kewd_turtle -> kewd_turtleIsland
|
||||||
|
|
||||||
|
04/June/2005
|
||||||
|
* Core Warps v2.9, Deep Warps v2.1
|
||||||
|
- Bug fix related to deep warps.
|
||||||
|
- Fixed town warp costs being always zero.
|
||||||
|
- Fixed Niflheim cost display when online count is on.
|
||||||
|
|
||||||
|
02/June/2005
|
||||||
|
* Core Warps v2.7, Short Warps 1.9, Deep Warps 2.0, Kafras v1.7
|
||||||
|
- Added Einbech Mines
|
||||||
|
|
||||||
|
* Kafras v1.6
|
||||||
|
- Updated Kafras with Type 2
|
||||||
|
|
||||||
|
* Deep Warp v1.9, Short Warps v1.8
|
||||||
|
- Added support for kewd_travel
|
||||||
|
|
||||||
|
* Main v4.5
|
||||||
|
- Added kewd_travel for traveller's warp system.
|
||||||
|
- Moved Warp Menu into this module.
|
||||||
|
|
||||||
|
* Pvp Warp v1.0
|
||||||
|
- Branched off ke_warp.txt v2.4
|
||||||
|
|
||||||
|
* Core Warp v2.5:
|
||||||
|
- Added kewt_discount for town warps discount
|
||||||
|
- Added kewd_travel for traveller's warp system.
|
||||||
|
- Changed cost display for towns, implemented Kafra Pass discount value
|
||||||
|
|
||||||
|
1/June/2005
|
||||||
|
* Bank v 2.3
|
||||||
|
- Added kebk_capacity variable for limited account size.
|
||||||
|
- Added kebk_useGlobalBank variable for enabling global counter.
|
||||||
|
|
||||||
|
31/May/2005
|
||||||
|
* Job Changer v2.5, Job Swapper v1.7
|
||||||
|
- Modified code to work around the callfunc/menu bug
|
||||||
|
|
||||||
|
* Main v2.4
|
||||||
|
- Added SaveOnSpot option
|
||||||
|
|
||||||
|
26/May/2005
|
||||||
|
* Short Warps v1.7
|
||||||
|
- Added option kewd_turtleCave for toggling island/cave warp (Turtle Island)
|
||||||
|
|
||||||
|
* Bank v2.1, Broadcast v2.4, Dye v1.5, Main v4.2, Refine v2.1, Renting v1.5
|
||||||
|
StatMarket v1.6, Stats v1.6, Uncarder v1.1, Warp Core v2.3, Deep Warps v1.8
|
||||||
|
Short Warps v1.6, WoE Warps v1.3, JobSwapper 1.6, JobChanger 2.4
|
||||||
|
- Label cleaning & standarization
|
||||||
|
|
||||||
|
* JobChanger v2.3
|
||||||
|
- Replaced functions with subfunctions
|
||||||
|
- Implemented use of new global function GF_getJobId
|
||||||
|
|
||||||
|
* JobSwapper v1.5
|
||||||
|
- Replaced functions with subfunctions
|
||||||
|
- Implemented use of new global function GF_getJobId
|
||||||
|
- Added Support for Baby Classes
|
||||||
|
|
||||||
|
25/May/2005
|
||||||
|
* Kafras v1.5, Bank v2.0, Broadcast v2.3, Dye v1.4, JobChange v2.1,
|
||||||
|
JobSwapper v1.3, Main v4.1, Refine v2.0, Renting v1.4, StatMarket v1.5,
|
||||||
|
Stats & Resets v1.5, Warp Core v2.2, Deep Warps v1.7, WoE Warps v1.2
|
||||||
|
- Header Cleanup
|
||||||
|
- Global Variables standarized
|
||||||
|
|
||||||
|
* Bank v1.9, Refine v1.8, Warp Core v2.1, Deep Warps v1.6
|
||||||
|
- Changed callfunc's to callsub where applicable.
|
||||||
|
|
||||||
|
* Broadcast v2.2
|
||||||
|
- Changed callfunc's to callsub where applicable.
|
||||||
|
- Updated calls to global functions file new version.
|
||||||
|
|
||||||
|
* Dye v1.3
|
||||||
|
- New variable kedy_clothJWED specifies max dye count for wedding class
|
||||||
|
- Changed callfunc's to callsub where applicable.
|
||||||
|
- Updated calls to global functions file new version.
|
||||||
|
|
||||||
|
* Rent v1.3
|
||||||
|
- Removed cost of GrandPeco, simplified script to enable all classes to rent
|
||||||
|
anything (as long as they have the required skill)
|
||||||
|
- Updated calls to global functions file new version.
|
||||||
|
|
||||||
|
* Statmarket v1.4
|
||||||
|
- Added some more overflow checks
|
||||||
|
|
||||||
|
* Stats v1.4
|
||||||
|
- Added ke_resetbasic, specifies if basic skills are reset as well.
|
||||||
|
|
||||||
|
* JobChanger v2.0
|
||||||
|
- Restructured, updated to work with Baby Classes
|
||||||
|
|
||||||
|
* UnCarder v1.0
|
||||||
|
- Initial Release
|
||||||
|
|
||||||
|
01/Apr/2005
|
||||||
|
* Kafras v1.5
|
||||||
|
- Updated Niflheim Kafra type
|
||||||
|
|
||||||
|
* Warp Core v2.0
|
||||||
|
- Added Nifflheim Quest Support
|
||||||
|
- Added Ayothaya Dungeon Cost
|
||||||
|
|
||||||
|
* Warp Short v1.5, Warp Deep v1.5
|
||||||
|
- Added Ayothaya Dungeon
|
||||||
|
- Changed callfunc's to callsub where appliable.
|
||||||
|
|
||||||
|
31/Mar/2005
|
||||||
|
* Core Module v4.0
|
||||||
|
- Added charge functions for Kafra Pass calculations
|
||||||
|
- Added Nifflheim Quest Support
|
||||||
|
|
||||||
|
* Broadcast v2.1, JobSwaper v1.2, Renting v1.1, StatMarket v1.3,
|
||||||
|
* Stats v1.3, Core Warping v1.9, Deep Warping v1.4, Short Warping v1.4,
|
||||||
|
* Woe Warping v1.1
|
||||||
|
- Updated to new charge functions
|
||||||
|
|
||||||
|
* Banker v1.8
|
||||||
|
- Updated to new charge functions
|
||||||
|
- Refined messages when charging monthly and not having enough
|
||||||
|
|
||||||
|
* Refiner v1.8
|
||||||
|
- Updated to new charge functions
|
||||||
|
- Fixed bug where Kafra Pass discount was ignored when repairing equipment
|
||||||
|
|
||||||
|
30/Mar/2005
|
||||||
|
|
||||||
|
* Warper v1.8
|
||||||
|
- Added Cities: Ayothaya, Einbroch, Einbech
|
||||||
|
|
||||||
|
* Kafras v1.4
|
||||||
|
- Added Kafras for towns: Ayothaya, Einbroch, Einbech
|
||||||
|
|
||||||
|
26/Mar/2005
|
||||||
|
* Job Changer v1.6
|
||||||
|
- Shortened label lengths
|
||||||
|
|
||||||
|
15/Mar/2005
|
||||||
|
* Job Changer v1.5
|
||||||
|
- Fixed infinite loop bug on change from High Novice to High First Class
|
||||||
|
|
||||||
|
03/Mar/2005
|
||||||
|
* Job Swapper v1.1
|
||||||
|
- Added support for saving dye on revert
|
||||||
|
- Added support to reset dye on swap
|
||||||
|
|
||||||
|
* Job Changer v1.4
|
||||||
|
- Added support for dye reset on change
|
||||||
|
|
||||||
|
* Stylist v1.2
|
||||||
|
- Added support for independent dye ranges per job-class
|
||||||
|
|
||||||
|
24/Feb/2005
|
||||||
|
* Job Swapper v1.0
|
||||||
|
- Initial Release
|
||||||
|
|
||||||
|
* Job Changer v1.3
|
||||||
|
- Updated to work with the latest GF_getJob version
|
||||||
|
|
||||||
|
* BroadCast Module v2.0
|
||||||
|
- Updated to work with the latest GF_getJob version
|
||||||
|
- Added confirmation before broadcasting
|
||||||
|
|
||||||
|
* Core Module v3.8
|
||||||
|
- Added support for the Job Swap entry
|
||||||
|
- The Kafra image is now removed after the close
|
||||||
|
- Added option to not expire Kafra Pass on exit
|
||||||
|
|
||||||
|
23/Feb/2005
|
||||||
|
* Job Changer v1.2
|
||||||
|
- Added alternate weapons when changing at high job levels
|
||||||
|
- Added "show details" to display detailed information of what will happen when you change jobs.
|
||||||
|
- Added missing '-' on female (archer/thief) raising menu
|
||||||
|
- Fixed a typo by which first High Classes could change regardless of job level
|
||||||
|
|
||||||
|
19/Feb/2005
|
||||||
|
* Job Changer v1.0
|
||||||
|
- Initial Release
|
||||||
|
|
||||||
|
* Core Module v3.6
|
||||||
|
- Added support for the Job change entry
|
||||||
|
|
||||||
|
18/Feb/2005
|
||||||
|
* Dye v1.1
|
||||||
|
- Added a missing 'end;' on the OnInit event
|
||||||
|
|
||||||
|
* Stat Market v1.2
|
||||||
|
- Added a missing 'end;' on the OnInit event
|
||||||
|
|
||||||
|
* Stat/Reset System v1.2
|
||||||
|
- Added a missing 'end;' on the OnInit event
|
||||||
|
|
||||||
|
16/Feb/2005
|
||||||
|
* Broadcasting v1.8
|
||||||
|
- Updated use of GF_getJob
|
||||||
|
|
||||||
|
11/Feb/2005
|
||||||
|
* Warping Deep/Short v1.3
|
||||||
|
- Updated Amatsu Entrance Warp
|
||||||
|
|
||||||
|
01/Feb/2005
|
||||||
|
* Bank Module v1.7
|
||||||
|
- Fixed Monthly costs
|
||||||
|
- Added overflow protection
|
||||||
|
|
||||||
|
26/Jan/2005
|
||||||
|
* Stat Market v1.1
|
||||||
|
- Fixed overflow exploit when qty*price overflows.
|
||||||
|
|
||||||
|
* Refining System v1.7
|
||||||
|
- Fixed overflow exploit when qty*price overflows.
|
||||||
|
|
||||||
|
* Banking Module v1.6
|
||||||
|
- Added maximum transaction costs
|
||||||
|
|
||||||
|
12/Jan/2005
|
||||||
|
* Core Module v3.5
|
||||||
|
- Fixed Negative Bug exploit on regular storage
|
||||||
|
- Added Guild Storage Support
|
||||||
|
|
||||||
|
* Banking Module v1.5
|
||||||
|
- Fixed bug when gaining interests between years
|
||||||
|
- Added monthly maintenance fees
|
||||||
|
- Added minimum transaction costs
|
||||||
|
|
||||||
|
* Refine Module v1.6
|
||||||
|
- Added option to display success/failure chances
|
||||||
|
- Item names are displayed now using getitemname()
|
||||||
|
|
||||||
|
* Core Warping Module v.1.7
|
||||||
|
- Minor name corrections
|
||||||
|
- Added entry for Guild Wars warping
|
||||||
|
|
||||||
|
* Deep Warping Module v1.2
|
||||||
|
- Minor name corrections
|
||||||
|
- Changed Orcs Dungeon warping location
|
||||||
|
|
||||||
|
* Short Warping Module v.1.2
|
||||||
|
- Minor name corrections
|
||||||
|
- Changed Orcs Dungeon warping location
|
||||||
|
|
||||||
|
* WoE Warping Module v1.0
|
||||||
|
- Initial Release
|
||||||
|
|
||||||
|
20/Nov/2004
|
||||||
|
* Core Module v3.2
|
||||||
|
- Fixed Kafra Image not being removed when opening storage
|
||||||
|
|
||||||
|
* Warp Core Module v1.6
|
||||||
|
- Expanded PvP system to use 8x5 rooms
|
||||||
|
|
||||||
|
* Broadcast Module v1.7
|
||||||
|
- Expanded to include new PvP rooms
|
||||||
|
|
||||||
|
-- Too old to remember :P
|
||||||
400
npc/custom/eAAC_Scripts/kafraExpress/config.txt
Normal file
400
npc/custom/eAAC_Scripts/kafraExpress/config.txt
Normal file
@ -0,0 +1,400 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Config Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 1.8
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= Any eAthena Version with function support
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= This module contains the configuration of all modules.
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See <http://www.eathena.deltaanime.net/board/index.php?showtopic=20290>
|
||||||
|
//= for indepth explanation of the Kafra Express Script Package.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keConfig -1,{
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Main Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnInit:
|
||||||
|
set $@ke_saveOnSpot,0; //If 1, the respawn point is saved where the char is standing.
|
||||||
|
set $@keh_hpCost,10; //Cost of HP healing (per 10HP)
|
||||||
|
set $@keh_spCost,100; //Cost of SP healing (per 10SP)
|
||||||
|
set $@kes_cost,50; //Cost of opening the storage
|
||||||
|
set $@kegs_cost,500; //Cost of opening the guild storage
|
||||||
|
|
||||||
|
//Kafra Pass Options:
|
||||||
|
set $@kekp_reset,1; //Kafra passes Expire when you speak to a Kafra?
|
||||||
|
//(otherwise duration is as long as a temporary variable)
|
||||||
|
set $@kekp_reserveCost,100; //Cost of each Reserve Point in Zeny (0 disable)
|
||||||
|
set $@kekp_minReserve,1; //Min Reserve Points you can earn in a single transaction
|
||||||
|
set $@kekp_maxReserve,150; //Max Reserve Points you can earn in a single transaction
|
||||||
|
|
||||||
|
//Display Options
|
||||||
|
set $@ked_users$,"people"; //String used when referring to people (player count).
|
||||||
|
// Values like "ppl", "users" or "on" are also recommended.
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Bank Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadBank:
|
||||||
|
set $@kebk_depositCost,0; //Fee for bank deposits in % (10 = 10%)
|
||||||
|
set $@kebk_withdrawCost,5; //Fee for bank withdrawals in % (10 = 10%)
|
||||||
|
set $@kebk_minTransact,1000; //Value of the Minimum Transaction (deposit/withdraw)
|
||||||
|
set $@kebk_maxTransact,999999; //Value of the Maximum Transaction (deposit/withdraw)
|
||||||
|
set $@kebk_capacity,99999999; //Account capacity: Max zeny that can be held.
|
||||||
|
set $@kebk_dayInterest,10; //Savings daily interests in 0.01% units (100 = 1%)
|
||||||
|
set $@kebk_monMaintenance,1000; //Monthly flat fee charged for account maintenance
|
||||||
|
set $@kebk_useGlobalBank,0; //When 1, all charged fees go to $ke_globalbank
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Broadcast Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadBroadcast:
|
||||||
|
//Following costs are for current map costs:
|
||||||
|
set $@kebc_showOnline,0; //if 1, count of recipients will be listed.
|
||||||
|
set $@kebc_partyCost,2500; //party request broadcast cost
|
||||||
|
set $@kebc_pvpCost,5000; //pvp request broadcast cost
|
||||||
|
set $@kebc_cost,10000; //general broadcast cost
|
||||||
|
set $@kebc_anonCost,100000; //anonymous broadcast cost
|
||||||
|
set $@kebc_globalFactor,1000; //When doing server bcs, the prices are increased by this amount (500 = 500% = 5x)
|
||||||
|
set $@kebc_discount,15; //% Discount to apply when the KafraPass is active
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Dye and Stylist Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadDye:
|
||||||
|
set $@kedy_enableHairstyle,0; //Set to 1 to enable haircut style change.
|
||||||
|
set $@kedy_styles,23; //Highest available haircut style (default 23)
|
||||||
|
set $@kedy_hair,8; //Highest available hair dye (RO default is 8)
|
||||||
|
|
||||||
|
//Highest available cloth dye depending on job-class
|
||||||
|
set $@kedy_clothJN,77; //Novice (+High/Baby)
|
||||||
|
set $@kedy_clothJ1ST,77; //1st Jobs (+High/Baby)
|
||||||
|
set $@kedy_clothJ2ND,77; //2nd Jobs (+High/Baby)
|
||||||
|
set $@kedy_clothJSN,77; //Super Novice (+Baby)
|
||||||
|
set $@kedy_clothJWED,77; //Wedding Class
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Job Changer Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadJobChange:
|
||||||
|
set $@kejc_skillsPolicy,0; //Remaining Skill Points Policy:
|
||||||
|
//0: Do not allow job changing until points are used up
|
||||||
|
//1: Discard the remaining skill points
|
||||||
|
//2: Let extra skill points be carried to next job
|
||||||
|
|
||||||
|
set $@kejc_upperPolicy,0; //Upper Job management policy:
|
||||||
|
//0: Ignore Mode: People can change in any order
|
||||||
|
//1: Force Mode: Job changes are forced on the correct path.
|
||||||
|
|
||||||
|
set $@kejc_announce,1; //Do a global announce when someone changes job.
|
||||||
|
set $@kejc_resetDye,1; //Set to 1 to reset cloth dye upon change
|
||||||
|
set $@kejc_skipNovice,0; //0: Novice needs Job 10 to change, 1: Can Skip Novice Class
|
||||||
|
set $@kejc_baseSN,30; //Base lv required to become a Super Novice
|
||||||
|
|
||||||
|
//Note that the change costs can be converted into rewards by specifying a negative amount.
|
||||||
|
set $@kejc_base2ND,1; //Base lv required to change into a second class
|
||||||
|
set $@kejc_job2ND,40; //Job Lv required to change into a second Class
|
||||||
|
set $@kejc_cost2ND,-25000; //Zeny cost when changing into a second Class
|
||||||
|
|
||||||
|
set $@kejc_baseRebirth,99; //Base lv required to do the Rebirth
|
||||||
|
set $@kejc_jobRebirth,50; //Job Lv required to do the Rebirth
|
||||||
|
set $@kejc_costRebirth,1000000; //Zeny cost required to do the Rebirth
|
||||||
|
|
||||||
|
set $@kejc_rebirthReset,1; //When changing to a high novice, reset base level to 1?
|
||||||
|
set $@kejc_weaponPolicy,1; //Set to 1 to give a weapon upon job change
|
||||||
|
|
||||||
|
if ($@kejc_weaponPolicy == 0) //don't touch
|
||||||
|
end;
|
||||||
|
|
||||||
|
set $@kejc_wBonusLv,50; //Job level for upgraded weapon version, use 0 to disable
|
||||||
|
|
||||||
|
//Weapons awarded to each job upon change (use 0 to disable for a particular class)
|
||||||
|
//First classes:
|
||||||
|
set $@kejc_wAcolyte,1501; //Club
|
||||||
|
set $@kejc_wArcher,1701; //Bow
|
||||||
|
set $@kejc_wMage,1601; //Rod
|
||||||
|
set $@kejc_wMerchant,1301; //Axe
|
||||||
|
set $@kejc_wSwordman,1101; //Sword
|
||||||
|
set $@kejc_wThief,1201; //Knife
|
||||||
|
set $@kejc_wTaekwon,0; //Nothing (they don't wield weapons)
|
||||||
|
set $@kejc_wSuperNovice,1202; //Knife
|
||||||
|
|
||||||
|
//Normal Weapons for Second classes
|
||||||
|
set $@kejc_wPriest,1551; //Bible
|
||||||
|
set $@kejc_wMonk,1801; //Waghnak
|
||||||
|
set $@kejc_wHunter,1704; //Composite Bow
|
||||||
|
set $@kejc_wBard,1901; //Violin
|
||||||
|
set $@kejc_wDancer,1950; //Rope
|
||||||
|
set $@kejc_wWizard,1602; //Rod
|
||||||
|
set $@kejc_wSage,1550; //Book
|
||||||
|
set $@kejc_wBlacksmith,1351; //Battle Axe
|
||||||
|
set $@kejc_wAlchemist,1351; //Battle Axe
|
||||||
|
set $@kejc_wKnight,1116; //Katana
|
||||||
|
set $@kejc_wCrusader,1107; //Blade
|
||||||
|
set $@kejc_wAssassin,1250; //Jur
|
||||||
|
set $@kejc_wRogue,1210; //Cutter
|
||||||
|
set $@kejc_wStarGladiator,1550; //Book
|
||||||
|
set $@kejc_wSoulLinker,1602; //Rod
|
||||||
|
|
||||||
|
if ($@kejc_wBonusLv == 0) //Don't touch.
|
||||||
|
end;
|
||||||
|
|
||||||
|
//Improved versions awarded to second classes
|
||||||
|
set $@kejc_w2Priest,1519; //Chain
|
||||||
|
set $@kejc_w2Monk,1811; //Finger
|
||||||
|
set $@kejc_w2Hunter,1714; //Gakkung
|
||||||
|
set $@kejc_w2Bard,1911; //Guh Moon Goh
|
||||||
|
set $@kejc_w2Dancer,1960; //Whip
|
||||||
|
set $@kejc_w2Wizard,1610; //Arc Wand
|
||||||
|
set $@kejc_w2Sage,1552; //Tablet
|
||||||
|
set $@kejc_w2Blacksmith,1360; //Two-Handed Axe
|
||||||
|
set $@kejc_w2Alchemist,1360; //Two-Handed Axe
|
||||||
|
set $@kejc_w2Knight,1160; //Broad-Sword
|
||||||
|
set $@kejc_w2Crusader,1119; //Tsurugi
|
||||||
|
set $@kejc_w2Assassin,1254; //Jamadhar
|
||||||
|
set $@kejc_w2Rogue,1222; //Damascus
|
||||||
|
set $@kejc_w2StarGladiator,1552; //Tablet
|
||||||
|
set $@kejc_w2SoulLinker,1610; //Arc Wand
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Job Swapping Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadJobSwap:
|
||||||
|
set $@kejs_SNpolicy,0; //Super Novice is considered as...
|
||||||
|
//0: Super Novices can't swap job.
|
||||||
|
//1: 1st Class Range: Can only be swapped with First classes (including baby)
|
||||||
|
|
||||||
|
set $@kejs_revertPolicy,1; //Allows reverting to the last Class one changed from...
|
||||||
|
// 0: do not allow reverting
|
||||||
|
// 1: Can revert to last Job ONLY when the last job belongs to the same "level" as
|
||||||
|
// the current one. (ie: it is lost on job change/upgrade)
|
||||||
|
// 2: Can revert to the last job regardless of situation.
|
||||||
|
|
||||||
|
set $@kejs_announce,0; //Do a global announce when someone swaps job.
|
||||||
|
set $@kejs_revertCost,100000; //Cost of reverting back to previous Job.
|
||||||
|
set $@kejs_saveDye,1; //Set to 1 to save and restore previous dye when reverting
|
||||||
|
set $@kejs_resetDye,0; //Set to 1 to reset cloth dye when swapping
|
||||||
|
set $@kejs_swapDiscount, 20; //Kafra Pass % Discount when swapping jobs
|
||||||
|
set $@kejs_revertDiscount, 20; //Kafra Pass % Discount when reverting to a previous job.
|
||||||
|
|
||||||
|
//Minimum Job level required for swapping
|
||||||
|
set $@kejs_job1ST,20; //among 1st classes
|
||||||
|
set $@kejs_job2ND,50; //among 2nd classes
|
||||||
|
|
||||||
|
//Base Cost for swapping job at min job level required
|
||||||
|
set $@kejs_cost1ST,25000; //among 1st jobs
|
||||||
|
set $@kejs_cost2ND,250000; //among 2nd jobs
|
||||||
|
|
||||||
|
//Percentage discount for every level over the minimum
|
||||||
|
set $@kejs_discount1ST,3; //among 1st jobs
|
||||||
|
set $@kejs_discount2ND,3; //among 2nd jobs
|
||||||
|
|
||||||
|
//How much to preserve of the previous Job in %?
|
||||||
|
//(25% means that if you change at Lv100, you will become a Lv25 upon swap)
|
||||||
|
set $@kejs_preserve1ST,50; //among 1st jobs
|
||||||
|
set $@kejs_preserve2ND,0; //among 2nd jobs
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Refining Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadRefine:
|
||||||
|
set $@kerf_maxLv,10; //Max refinement level for equipment
|
||||||
|
set $@kerf_safe,0; //Set to 1 to enable 100% safe refinement.
|
||||||
|
set $@kerf_showChance,0; //Set to 1 to see the refine Success Chance
|
||||||
|
set $@kerf_refineAll,0; //Set to 1 to enable refinement of anything (ie: accesories)
|
||||||
|
set $@kerf_discount,0; //Discount % rate for forging when Kafra Pass is active.
|
||||||
|
set $@kerf_armorCost,2000; //Cost to refine armor (default 2000z)
|
||||||
|
set $@kerf_weaponLv1Cost,50; //Cost to refine lv1 weapons (default 50z)
|
||||||
|
set $@kerf_weaponLv2Cost,200; //Cost to refine lv2 weapons (default 200z)
|
||||||
|
set $@kerf_weaponLv3Cost,5000; //Cost to refine lv3 weapons (default 5000z)
|
||||||
|
set $@kerf_weaponLv4Cost,20000; //Cost to refine lv4 weapons (default 20000z)
|
||||||
|
set $@kerf_purifyAll,0; //Set to 1 to enable purifying elemental stones and the like
|
||||||
|
set $@kerf_repairCost,10000; //Cost to repair broken equipment.
|
||||||
|
set $@kerf_repairDiscount,25; //Discount % rate for repairing when Kafra Pass is active
|
||||||
|
set $@kerf_repairSteel,1; //Set to 1 to make repairing equipment require 1 Steel.
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Renting Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadRent:
|
||||||
|
set $@kert_cartOnly, 0; //Set to 1 to enable only cart rental, 0 enables all add-ons.
|
||||||
|
set $@kert_cartCost, 1000; //Cost to rent a Cart.
|
||||||
|
set $@kert_falconCost, 2000; //Cost to rent a Falcon.
|
||||||
|
set $@kert_pecoCost, 2000; //Cost to rent a PecoPeco.
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Kafra Shop Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadShop:
|
||||||
|
set $@kesh_towntype, 0; //Town shop type (1: buy, 2: sell, Other: both)
|
||||||
|
set $@kesh_duntype, 2; //Dungeon shop type (1: buy, 2: sell, Other: both)
|
||||||
|
set $@kesh_townshop$, "ke_townshop"; //Name of town shop to invoke.
|
||||||
|
set $@kesh_dunshop$, "ke_dunshop"; //Name of dungeon shop to invoke.
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Stat Market Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadStatMarket:
|
||||||
|
set $@kesm_stBuyPrice,10000; //Cost of buying stat points
|
||||||
|
set $@kesm_stSellPrice,0; //Return cash for selling stat points
|
||||||
|
set $@kesm_skBuyPrice,1000000; //Cost of buying skill points
|
||||||
|
set $@kesm_skSellPrice,50000; //Return cash for selling skill points
|
||||||
|
set $@kesm_skTradePrice, 20; //Stats needed to trade for a skill. (Stat->Skill)
|
||||||
|
set $@kesm_stTradePrice, 15; //Stats received per Skill traded. (Skill->Stat)
|
||||||
|
set $@kesm_discount,0; //Discount % applied when buying if Kafra Pass is active
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Stats Reset/Raising Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadStats:
|
||||||
|
set $@kest_stResetCost,50000; //Cost to reset stats
|
||||||
|
set $@kest_skResetCost,50000; //Cost to reset skills
|
||||||
|
set $@kest_resetCost,75000; //Cost to reset both
|
||||||
|
set $@kest_BaseLvCost,25000; //Additional cost per base level to reset stats
|
||||||
|
set $@kest_JobLvCost,25000; //Additional cost per job level to reset skills
|
||||||
|
set $@kest_BothLvCost,20000; //Additional cost per base+job level to reset both
|
||||||
|
|
||||||
|
set $@kest_discount,15; //Discount % to be applied when Kafra Pass is active.
|
||||||
|
set $@kest_resetBasic,0; //Set to 1 if you want basic skills resetted as well.
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Uncarding Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadUncard:
|
||||||
|
set $@keuc_BaseCost, 100000; //Base Cost
|
||||||
|
set $@keuc_CardCost, 25000; //Extra Cost per Card
|
||||||
|
set $@keuc_UpgradeCostA, 1000; //Extra Cost per Upgrade, Armor
|
||||||
|
set $@keuc_UpgradeCostW1, 1000; //Extra Cost per Upgrade, Weapons Lv1
|
||||||
|
set $@keuc_UpgradeCostW2, 2000; //Extra Cost per Upgrade, Weapons Lv2
|
||||||
|
set $@keuc_UpgradeCostW3, 3000; //Extra Cost per Upgrade, Weapons Lv3
|
||||||
|
set $@keuc_UpgradeCostW4, 5000; //Extra Cost per Upgrade, Weapons Lv4
|
||||||
|
set $@keuc_discount, 10; //% Discount when using a Kafra Pass
|
||||||
|
set $@keuc_Mat1,1000; //Material #1 needed (Star Crumb)
|
||||||
|
set $@keuc_Qty1,1; //Qty of material #1 needed (use 0 to disable)
|
||||||
|
set $@keuc_Mat2,715; //Material #2 needed (Yellow Gemstone)
|
||||||
|
set $@keuc_Qty2,1; //Qty of material #2 needed (use 0 to disable)
|
||||||
|
|
||||||
|
//Failure Chances. 1000 = 100.0%, set to 0 to disable failing chance.
|
||||||
|
set $@keuc_Fail0Chance, 250; //Chance of harmless failure
|
||||||
|
set $@keuc_Fail1Chance, 100; //Chance of losing item OR card
|
||||||
|
set $@keuc_Fail2Chance, 25; //Chance of losing both
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Town Warps Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadWarpTown:
|
||||||
|
set $@kewt_showOnline,1; //Set to 1 to show online count on cities
|
||||||
|
set $@kewt_cost, 1000; //Cost of warping to a town
|
||||||
|
set $@kewt_niflCost, 5000; //Cost of warping to Niflheim
|
||||||
|
set $@kewt_travel, 0; //Traveller's Mode type for towns:
|
||||||
|
//0: Disabled (normal warping)
|
||||||
|
//1: You can only warp to towns you've been before (per character basis)
|
||||||
|
//2: You can only warp to towns you've been before (per account basis)
|
||||||
|
set $@kewt_free, 0; //Set to 1 to let people warp to towns even when poor
|
||||||
|
set $@kewt_discount, 100; //Discount % to apply when the Kafra Pass is active (towns)
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Dungeons Warps Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadWarpDungeon:
|
||||||
|
set $@kewd_showOnline,0; //Set to 1 to show online count on dungeons
|
||||||
|
set $@kewd_discount, 50; //Discount % to apply when the Kafra Pass is active
|
||||||
|
set $@kewd_travel, 0; //Traveller's mode type for dungeons:
|
||||||
|
//0: Disabled (normal warping)
|
||||||
|
//1: You can only warp to dungeons you've been before (per character basis)
|
||||||
|
//2: You can only warp to dungeons you've been before (per account basis)
|
||||||
|
set $@kewd_deep, 1; //If 1, people can warp to all levels of dungeons.
|
||||||
|
//If 0, people can only warp to the entrance of dungeons.
|
||||||
|
|
||||||
|
//Variables for Deep Warping
|
||||||
|
set $@kewd_levelCost, 30; // cost % increase for warping to floors deep into the dungeon
|
||||||
|
set $@kewd_entryDiscount, 25; //Discount % when using the Kafra right next to the dungeon one is warping into
|
||||||
|
|
||||||
|
//Variables for Short Warping
|
||||||
|
set $@kewd_turtleCave,0; //If 1, Turtle Island's warp leads to the
|
||||||
|
//entrance of the cave, not the Island's shore.
|
||||||
|
|
||||||
|
//Dungeon Costs
|
||||||
|
set $@kewd_abyssLake,5000; //Abyss Lake base cost
|
||||||
|
set $@kewd_amatsu,2500; //Amatsu Dungeon base cost
|
||||||
|
set $@kewd_antHell,1750; //Anthell base cost
|
||||||
|
set $@kewd_ayothaya,1750; //Ayothaya Dungeon base cost
|
||||||
|
set $@kewd_byalan,1250; //Byalan base cost
|
||||||
|
set $@kewd_comodo,2500; //Comodo Caves base cost
|
||||||
|
set $@kewd_clockTower,6250; //Clock Tower base cost
|
||||||
|
set $@kewd_coalMines,3750; //Coal Mines base cost
|
||||||
|
set $@kewd_culvert,500; //Prontera Culvert base cost
|
||||||
|
set $@kewd_einbech,5000; //Einbech Mines base cost
|
||||||
|
set $@kewd_gefenia,25000; //Gefenia base cost
|
||||||
|
set $@kewd_geffen,5000; //Geffen Dungeon base cost
|
||||||
|
set $@kewd_glastHeim,10000; //Glast Heim base cost
|
||||||
|
set $@kewd_gonRyun,3750; //Gonryun Dungeon base cost
|
||||||
|
set $@kewd_hiddenTemple,250; //Hidden Temple base cost
|
||||||
|
set $@kewd_juperos,7500; //Juperos base cost
|
||||||
|
set $@kewd_lightHalzen,15000; //LightHalzen Rekkenber base cost
|
||||||
|
set $@kewd_louYang,2500; //Louyang Dungeon base cost
|
||||||
|
set $@kewd_magma,3750; //Magma Dungeon base cost
|
||||||
|
set $@kewd_orc,2500; //Orc Dungeon base cost
|
||||||
|
set $@kewd_payon,1100; //Payon Dungeon base cost
|
||||||
|
set $@kewd_pyramid,2500; //Pyramids base cost
|
||||||
|
set $@kewd_sphinx,1750; //Sphinx base cost
|
||||||
|
set $@kewd_sunkenShip,1000; //Sunken Ship base cost
|
||||||
|
set $@kewd_thanatosTower,15000; //Thanatos Tower base cost
|
||||||
|
set $@kewd_toyFactory,2500; //Toy Factory base cost
|
||||||
|
set $@kewd_turtleIsland,12500; //Turtle Island base cost
|
||||||
|
set $@kewd_umbala,3550; //Umbala Dungeon base cost
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the Pvp Warps Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadWarpPvp:
|
||||||
|
set $@kewp_showOnline,1; //Set to 1 to show online count on pvp maps
|
||||||
|
set $@kewp_advanced,0; //Set to 0 to enable a single group of pvp rooms
|
||||||
|
//(no level restrictions, kewp_cost is used)
|
||||||
|
set $@kewp_cost, 1000; //Cost for Free For All (no level restrictions)
|
||||||
|
|
||||||
|
if ($@kewp_advanced == 0) //Don't touch
|
||||||
|
end;
|
||||||
|
|
||||||
|
set $@kewp_cost1, 100; //Cost of warping to a pvp arena, lvls group 1
|
||||||
|
set $@kewp_cost2, 250; //Cost for lvls group 2
|
||||||
|
set $@kewp_cost3, 500; //Cost for lvls group 3
|
||||||
|
set $@kewp_cost4, 1000; //Cost for lvls group 4
|
||||||
|
set $@kewp_cost5, 2000; //Cost for lvls group 5
|
||||||
|
set $@kewp_cost6, 4000; //Cost for lvls group 6
|
||||||
|
set $@kewp_cost7, 8000; //Cost for lvls group 7
|
||||||
|
set $@kewp_baseLv1, 35; //Level required for pvp, lv1
|
||||||
|
set $@kewp_baseLv2, 45; //Level required for pvp, lv2
|
||||||
|
set $@kewp_baseLv3, 55; //Level required for pvp, lv3
|
||||||
|
set $@kewp_baseLv4, 65; //Level required for pvp, lv4
|
||||||
|
set $@kewp_baseLv5, 75; //Level required for pvp, lv5
|
||||||
|
set $@kewp_baseLv6, 85; //Level required for pvp, lv6
|
||||||
|
set $@kewp_baseLv7, 95; //Level required for pvp, lv7
|
||||||
|
set $@kewp_range, 5; //Range of levels allowed (ie: Warp to Lv1: levels 10+/-5)
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
//Config for the WoE Warps Module
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
OnLoadWarpWoe:
|
||||||
|
//Note: See ke_warp_woe.txt for instructions on how to unlock the Guild Dungeons.
|
||||||
|
set $@kewg_check,1; //If 0, people don't need to belong to a Guild to warp
|
||||||
|
set $@kewg_checkAgit,1; //If 1, you can't warp until WoE starts
|
||||||
|
set $@kewg_showOnline,0; //Set to 1 to show online count and Castle Status
|
||||||
|
set $@kewg_discount,20; //Kafra Pass discount for WoE warps
|
||||||
|
|
||||||
|
set $@kewg_baldur, 25000; //Guild Dungeon - Baldur
|
||||||
|
set $@kewg_luina, 25000; //Guild Dungeon - Luina
|
||||||
|
set $@kewg_valkyrie, 25000; //Guild Dungeon - Valkyrie
|
||||||
|
set $@kewg_britoniah, 25000; //Guild Dungeon - Britoniah
|
||||||
|
|
||||||
|
set $@kewg_alDeBaran, 2500; //Al De Baran Guild
|
||||||
|
set $@kewg_geffen, 2500; //Geffen Guild
|
||||||
|
set $@kewg_payon, 2500; //Payon Guild
|
||||||
|
set $@kewg_prontera, 2500; //Prontera Guild
|
||||||
|
end;
|
||||||
|
//-------------------------------------------------------------------------------
|
||||||
|
}
|
||||||
39
npc/custom/eAAC_Scripts/kafraExpress/global_functionsKE.txt
Normal file
39
npc/custom/eAAC_Scripts/kafraExpress/global_functionsKE.txt
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Global functions
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 1.5
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3424+, RO Ep6+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Global Functions
|
||||||
|
//=
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= GF_getJobName= function for getting a job's name
|
||||||
|
//= GF_getJobName2= gets a jobs name modified by Type (see below)
|
||||||
|
//= GF_getJobId= gets a jobs number modified by Type (see below)
|
||||||
|
//= GF_getJobLevel= identifies novices/1st/2nd among classes
|
||||||
|
//= GF_getJobType= identifies normal/advanced/babies classes
|
||||||
|
//= - GF_getJobClass= identifies job class (swordie, mage, etc)
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
function script GF_getJobName {
|
||||||
|
|
||||||
|
switch (getarg(0)) {
|
||||||
|
|
||||||
|
case Job_Novice:
|
||||||
|
return "novice";
|
||||||
|
case Job_Acolyte:
|
||||||
|
return "acolyte";
|
||||||
|
case Job_Archer:
|
||||||
|
return "archer";
|
||||||
|
case Job_Mage:
|
||||||
|
return "mage";
|
||||||
|
case Job_Merchant:
|
||||||
|
return "merchant";
|
||||||
|
case Job_Swordman:
|
||||||
|
return "swordsman";
|
||||||
|
case Job_Thief:
|
||||||
|
return "thief";
|
||||||
|
case Job_Taekwon:
|
||||||
292
npc/custom/eAAC_Scripts/kafraExpress/kafras.txt
Normal file
292
npc/custom/eAAC_Scripts/kafraExpress/kafras.txt
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - NPC definitions
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 1.9
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= Any eAthena Version with function support; RO Episode 8+ (LightHalzen)
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Here is where the npcs are defined.
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= To define your own Kafra, keep in mind the order and meaning
|
||||||
|
//= of the arguments for the main function.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
//This is the model for the call: Type is 0 for towns, 1 for dungeons (2 for both)
|
||||||
|
//callfunc "F_KafraExpress","NPC Name","Image File", type, "Save Map", Save X, Save Y;
|
||||||
|
|
||||||
|
//Town Kafras
|
||||||
|
alberta.gat,113,53,7 script Kafra Express 116,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_02",0,"alberta.gat",116,57;
|
||||||
|
}
|
||||||
|
|
||||||
|
aldebaran.gat,133,124,5 script Kafra Express 115,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_03",2,"aldebaran.gat",139,131;
|
||||||
|
}
|
||||||
|
|
||||||
|
amatsu.gat,201,80,8 script Kafra Express 114,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_04",0,"amatsu.gat",197,81;
|
||||||
|
}
|
||||||
|
|
||||||
|
ayothaya.gat,195,160,8 script Kafra Express 112,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_06",0,"ayothaya.gat",194,173;
|
||||||
|
}
|
||||||
|
|
||||||
|
comodo.gat,190,153,5 script Kafra Express 721,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_07",0,"comodo.gat",189,166;
|
||||||
|
}
|
||||||
|
|
||||||
|
geffen.gat,121,62,8 script Kafra Express 113,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_05",0,"geffen.gat",119,56;
|
||||||
|
}
|
||||||
|
|
||||||
|
gonryun.gat,169,188,2 script Kafra Express 117,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_01",2,"gonryun.gat",168,199;
|
||||||
|
}
|
||||||
|
|
||||||
|
einbech.gat,182,124,3 script Kafra Express 117,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_01",0,"einbech.gat",182,133;
|
||||||
|
}
|
||||||
|
|
||||||
|
einbroch.gat,58,207,4 script Kafra Express 115,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_03",0,"einbroch.gat",64,184;
|
||||||
|
}
|
||||||
|
|
||||||
|
izlude.gat,136,94,2 script Kafra Express 115,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_03",0,"izlude.gat",147,99;
|
||||||
|
}
|
||||||
|
|
||||||
|
jawaii.gat,208,217,7 script Kafra Express 721,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_07",0,"jawaii.gat",213,209;
|
||||||
|
}
|
||||||
|
|
||||||
|
lighthalzen.gat,165,106,3 script Kafra Express 114,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_04",0,"lighthalzen.gat",152,106;
|
||||||
|
}
|
||||||
|
|
||||||
|
louyang.gat,220,123,3 script Kafra Express 117,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_01",0,"louyang.gat",221,128;
|
||||||
|
}
|
||||||
|
|
||||||
|
xmas.gat,148,126,4 script Kafra Express 112,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_06",0,"xmas.gat",149,117;
|
||||||
|
}
|
||||||
|
|
||||||
|
morocc.gat,156,97,3 script Kafra Express 721,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_07",0,"morocc.gat",156,91;
|
||||||
|
}
|
||||||
|
|
||||||
|
niflheim.gat,196,192,3 script Kafra Express 791,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","",3,"niflheim.gat",194,185;
|
||||||
|
}
|
||||||
|
|
||||||
|
payon.gat,152,181,5 script Kafra Express 114,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_04",0,"payon.gat",162,182;
|
||||||
|
}
|
||||||
|
|
||||||
|
prontera.gat,157,187,4 script Kafra Express 116,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_02",0,"prontera.gat",156,195;
|
||||||
|
}
|
||||||
|
|
||||||
|
umbala.gat,89,159,4 script Kafra Express 112,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_06",0,"umbala.gat",91,159;
|
||||||
|
}
|
||||||
|
|
||||||
|
yuno.gat,159,87,5 script Kafra Express 113,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_05",0,"yuno.gat",159,52;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Dungeon Kafras
|
||||||
|
//Abyss Lake
|
||||||
|
hu_fild05.gat,170,305,7 script Kafra Express 721,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_07",1,"hu_fild05.gat",160,302;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Amatsu D
|
||||||
|
ama_in02.gat,115,184,6 script Kafra Express 117,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"ama_in02.gat",118,184;
|
||||||
|
}
|
||||||
|
|
||||||
|
//AntHell North
|
||||||
|
moc_fild04.gat,231,332,5 script Kafra Express 114,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_04",1,"moc_fild04.gat",232,322;
|
||||||
|
}
|
||||||
|
|
||||||
|
//AntHell South
|
||||||
|
moc_fild15.gat,251,243,3 script Kafra Express 114,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_04",1,"moc_fild15.gat",246,251;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Ayothaya Dungeon
|
||||||
|
ayo_fild02.gat,289,144,3 script Kafra Express 116,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"ayo_fild02.gat",289,155;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Byalan Island
|
||||||
|
izlu2dun.gat,101,82,7 script Kafra Express 112,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_06",1,"izlu2dun.gat",112,84;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Comodo East Cave
|
||||||
|
cmd_fild01.gat,33,321,4 script Kafra Express 721,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_07",1,"cmd_fild01.gat",34,325;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Comodo West Cave
|
||||||
|
comodo.gat,31,218,4 script Kafra Express 721,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_07",1,"comodo.gat",32,209;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Comodo North Cave
|
||||||
|
comodo.gat,182,347,2 script Kafra Express 721,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_07",1,"comodo.gat",180,352;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Coal Mines
|
||||||
|
mjolnir_02.gat,85,365,4 script Kafra Express 114,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_04",1,"mjolnir_02.gat",89,358;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Culvert
|
||||||
|
prt_fild05.gat,275,219,5 script Kafra Express 112,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_06",1,"prt_fild05.gat",274,208;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Einbroch Station
|
||||||
|
einbech.gat,182,124,3 script Kafra Express 117,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"einbech.gat",182,133;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Gefenia
|
||||||
|
gefenia01.gat,56,171,6 script Kafra Express 116,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"gefenia01.gat",59,169;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Geffen Dungeon
|
||||||
|
gef_tower.gat,156,33,3 script Kafra Express 113,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"gef_tower.gat",147,35;
|
||||||
|
}
|
||||||
|
|
||||||
|
//GH: Church
|
||||||
|
glast_01.gat,193,136,5 script Kafra Express 791,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","",1,"glast_01.gat",206,136;
|
||||||
|
}
|
||||||
|
|
||||||
|
//GH: Castle
|
||||||
|
glast_01.gat,200,350,4 script Kafra Express 791,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","",1,"glast_01.gat",200,347;
|
||||||
|
}
|
||||||
|
|
||||||
|
//GH: Staircase
|
||||||
|
glast_01.gat,58,103,7 script Kafra Express 791,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","",1,"glast_01.gat",62,107;
|
||||||
|
}
|
||||||
|
|
||||||
|
//GH: Chivalry
|
||||||
|
glast_01.gat,62,198,6 script Kafra Express 791,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","",1,"glast_01.gat",69,193;
|
||||||
|
}
|
||||||
|
|
||||||
|
//LightHalzen Rekkenber
|
||||||
|
lighthalzen.gat,69,57,7 script Kafra Express 113,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"lighthalzen.gat",78,57;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Juperos
|
||||||
|
jupe_cave.gat,45,55,5 script Kafra Express 115,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"jupe_cave.gat",45,48;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Laberynth
|
||||||
|
prt_fild01.gat,143,365,3 script Kafra Express 112,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_06",1,"prt_fild01.gat",136,361;
|
||||||
|
}
|
||||||
|
|
||||||
|
//LouYang D
|
||||||
|
louyang.gat,35,276,6 script Kafra Express 117,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"louyang.gat",41,267;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Magma D
|
||||||
|
yuno_fild03.gat,34,143,5 script Kafra Express 115,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"yuno_fild03.gat",35,135;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Orc D North
|
||||||
|
in_orcs01.gat,24,165,5 script Kafra Express 116,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"in_orcs01.gat",34,165;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Orc D South
|
||||||
|
in_orcs01.gat,103,99,5 script Kafra Express 116,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"in_orcs01.gat",112,99;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Payon D
|
||||||
|
pay_arche.gat,38,138,6 script Kafra Express 112,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_06",1,"pay_arche.gat",41,133;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Pyramids D
|
||||||
|
moc_ruins.gat,60,166,5 script Kafra Express 115,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"moc_ruins.gat",62,162;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Sphinx D
|
||||||
|
moc_fild19.gat,106,97,8 script Kafra Express 115,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"moc_fild19.gat",107,100;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Sunken Ship
|
||||||
|
alb2trea.gat,75,101,5 script Kafra Express 114,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_04",1,"alb2trea.gat",87,103;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Thanatos Tower
|
||||||
|
tha_t01.gat,155,33,4 script Kafra Express 113,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"tha_t01.gat",144,33;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Toy Factory
|
||||||
|
xmas.gat,138,307,6 script Kafra Express 116,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"xmas.gat",144,306;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Turtle Cave Entrance
|
||||||
|
tur_dun01.gat,147,237,6 script Kafra Express 113,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"tur_dun01.gat",155,234;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Turtle Island Entrance
|
||||||
|
tur_dun01.gat,148,54,6 script Kafra Express 113,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"tur_dun01.gat",153,47;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Umbala D
|
||||||
|
umbala.gat,120,284,3 script Kafra Express 117,{
|
||||||
|
callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"umbala.gat",113,282;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Guild War Kafras: Disabled by Default!
|
||||||
|
|
||||||
|
//Al De Baran Guild Grounds
|
||||||
|
//alde_gld.gat,156,165,3 script Kafra Express 116,{
|
||||||
|
// callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"alde_gld.gat",156,157;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//Geffen Guild Grounds
|
||||||
|
//gef_fild13.gat,237,182,6 script Kafra Express 113,{
|
||||||
|
// callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"gef_fild13.gat",231,181;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//Payon Guild Grounds
|
||||||
|
//pay_gld.gat,243,172,6 script Kafra Express 117,{
|
||||||
|
// callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"pay_gld.gat",243,178;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//Prontera Guild Grounds
|
||||||
|
//prt_gld.gat,127,163,5 script Kafra Express 115,{
|
||||||
|
// callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"prt_gld.gat",129,170;
|
||||||
|
//}
|
||||||
175
npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt
Normal file
175
npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Bank Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 2.7
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3524+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Offers banking services with daily interests, and
|
||||||
|
//= withdrawal/deposit fees.
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_bank {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadBank";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_keBank {
|
||||||
|
|
||||||
|
function SF_calcInterest;
|
||||||
|
SF_calcInterest();
|
||||||
|
|
||||||
|
do {
|
||||||
|
set @feeD,callfunc("F_keCost",$@kebk_depositCost,100);
|
||||||
|
set @maxDep,Zeny;
|
||||||
|
if (@maxDep > $@kebk_maxTransact)
|
||||||
|
set @maxDep,$@kebk_maxTransact;
|
||||||
|
if (#ke_bank + @maxDep > $@kebk_capacity)
|
||||||
|
set @maxDep,$@kebk_capacity-#ke_bank;
|
||||||
|
|
||||||
|
set @feeW,callfunc("F_keCost",$@kebk_withdrawCost,100);
|
||||||
|
set @maxWith,#ke_bank-(#ke_bank*@feeW/100);
|
||||||
|
if (@maxWith > $@kebk_maxTransact)
|
||||||
|
set @maxWith,$@kebk_maxTransact;
|
||||||
|
|
||||||
|
if (#ke_bank < $@kebk_capacity) {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Return (balance is "+#ke_bank+"z)",
|
||||||
|
"- Deposit (up to "+@maxDep+"z - "+@feeD+"% fee)",
|
||||||
|
"- Withdraw (up to "+@maxWith+"z + "+@feeW+"% fee)",
|
||||||
|
"- Transfer from 1st B.o.P. ("+#bankstorage+"z)",
|
||||||
|
"- Transfer from 2nd B.o.P. ("+#kafrabank+"z)"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Return (balance is "+#ke_bank+"z)",
|
||||||
|
"- Withdraw (up to "+@maxWith+"z + "+@feeW+"% fee)",
|
||||||
|
"- Transfer from 1st B.o.P. ("+#bankstorage+"z)",
|
||||||
|
"- Transfer from 2nd B.o.P. ("+#kafrabank+"z)"
|
||||||
|
);
|
||||||
|
if (@kmenu > 1)
|
||||||
|
set @kmenu, @kmenu+1;
|
||||||
|
}
|
||||||
|
switch (@kmenu) {
|
||||||
|
case 2: //Deposit
|
||||||
|
input @amount;
|
||||||
|
if (@amount < $@kebk_minTransact) {
|
||||||
|
callfunc "F_keIntro", -1, "Sorry, the minimum transaction value is "+$@kebk_minTransact+"z.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (@amount > @maxDep) {
|
||||||
|
callfunc "F_keIntro", e_an, "You can't deposit that quantity!";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
set #ke_bank,#ke_bank+@amount-(@amount*@feeD/100);
|
||||||
|
if ($@kebk_useGlobalBank)
|
||||||
|
set $ke_globalbank, $ke_globalbank +@amount*@feeD/100;
|
||||||
|
set Zeny,Zeny-@amount;
|
||||||
|
emotion e_cash;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3: //Withdraw
|
||||||
|
input @amount;
|
||||||
|
if (@amount < $@kebk_minTransact) {
|
||||||
|
callfunc "F_keIntro", -1, "Sorry, the minimum transaction value is "+$@kebk_minTransact+"z.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (@amount > @maxWith) {
|
||||||
|
callfunc "F_keIntro", e_X, "You can't withdraw that quantity!";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
set #ke_bank,#ke_bank-@amount-(@amount*@feeW/100);
|
||||||
|
if ($@kebk_useGlobalBank)
|
||||||
|
set $ke_globalbank, $ke_globalbank +@amount*@feeW/100;
|
||||||
|
set Zeny,Zeny+@amount;
|
||||||
|
emotion e_oh;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4: //1st B.o.P.
|
||||||
|
if (#bankstorage==0) {
|
||||||
|
callfunc "F_keIntro", -1, "Sorry, there is nothing left to transfer.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
callfunc "F_keIntro", -1, #bankstorage+"z have been transferred from your account in the First Bank of Prontera.";
|
||||||
|
set #ke_bank,#ke_bank+#bankstorage;
|
||||||
|
set #bankstorage,0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5: //2nd B.o.P.
|
||||||
|
if (#kafrabank==0) {
|
||||||
|
callfunc "F_keIntro", -1, "Sorry, there is nothing left to transfer.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
callfunc "F_keIntro", -1, #kafrabank+"z have been transferred from your account in the Second Bank of Prontera.";
|
||||||
|
set #ke_bank,#ke_bank+#kafrabank;
|
||||||
|
set #kafrabank,0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (@kmenu > 1);
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Subfunction: SF_calcInterest
|
||||||
|
//Calculates the interests gained on the account. Uses 30-day months
|
||||||
|
function SF_calcInterest {
|
||||||
|
set @day,gettime(5);
|
||||||
|
if (@day>30)
|
||||||
|
set @day,30; //Use 30 day-months
|
||||||
|
set @month,gettime(6);
|
||||||
|
if (#ke_banktick == 0) { //Init bank.
|
||||||
|
set #ke_banktick,gettime(6)*30+@day;
|
||||||
|
if ($@kebk_monMaintenance < 1) return;
|
||||||
|
set #ke_bankmtick,@month;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
set @banktick,gettime(6)*30+@day;
|
||||||
|
if (@banktick == #ke_banktick) return;
|
||||||
|
if (@banktick < #ke_banktick) { //Year change.
|
||||||
|
do {
|
||||||
|
set #ke_banktick,#ke_banktick-360;
|
||||||
|
if ($@kebk_monMaintenance > 0) set #ke_bankmtick,#ke_bankmtick-12;
|
||||||
|
} while (@banktick < #ke_banktick);
|
||||||
|
}
|
||||||
|
if ($@kebk_monMaintenance > 0 && #ke_bankmtick < @month){ //Month change
|
||||||
|
set @qty,0;
|
||||||
|
do {
|
||||||
|
if (#ke_bank < $@kebk_monMaintenance) {
|
||||||
|
if (@qty>0)
|
||||||
|
mes "You've been charged "+@qty+"z for account maintenance, but it was not enough.";
|
||||||
|
if ($@kebk_useGlobalBank)
|
||||||
|
set $ke_globalbank, $ke_globalbank + @qty;
|
||||||
|
mes "You owe the Bank "+($@kebk_monMaintenance*(#ke_bankmtick-@month))+"z for maintenance costs. Until paid you won't earn interests...";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
set @qty, @qty+$@kebk_monMaintenance;
|
||||||
|
set #ke_bankmtick,#ke_bankmtick+1;
|
||||||
|
set #ke_bank, #ke_bank-$@kebk_monMaintenance;
|
||||||
|
} while (#ke_bankmtick < @month);
|
||||||
|
mes "You've been charged "+@qty+"z for account maintenance.";
|
||||||
|
if ($@kebk_useGlobalBank)
|
||||||
|
set $ke_globalbank, $ke_globalbank + @qty;
|
||||||
|
}
|
||||||
|
set @qty,0;
|
||||||
|
if (#ke_bank > $@kebk_monMaintenance && #ke_bank < $@kebk_capacity)
|
||||||
|
set @qty,#ke_bank*$@kebk_dayInterest*(@banktick-#ke_banktick)/10000;
|
||||||
|
set #ke_banktick,@banktick;
|
||||||
|
if (@qty == 0) return;
|
||||||
|
if (@qty < 0) {
|
||||||
|
callfunc "F_keIntro", -1, "Sorry, your gained interests have been cancelled for being way too much.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (#ke_bank + @qty > $@kebk_capacity)
|
||||||
|
set #ke_bank, $@kebk_capacity;
|
||||||
|
else
|
||||||
|
set #ke_bank,#ke_bank+@qty;
|
||||||
|
|
||||||
|
callfunc "F_keIntro", -1, "Since your last visit, you've earned an interest of "+@qty+"z!";
|
||||||
|
} //SF end
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
224
npc/custom/eAAC_Scripts/kafraExpress/ke_broadcast.txt
Normal file
224
npc/custom/eAAC_Scripts/kafraExpress/ke_broadcast.txt
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Broadcasting Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 3.0
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN3424+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Offers broadcasting for party requests, pvp, general
|
||||||
|
//= and anonymous. Broadcasts can be to the current map
|
||||||
|
//= or server-wide
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//= For the PVP broadcasts, variables from the Pvp Warping
|
||||||
|
//= Module are used.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_broadcast {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadBroadcast";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Function F_keBroadcast(String currentMapName)
|
||||||
|
function script F_keBroadcast {
|
||||||
|
|
||||||
|
function SF_calcPrice;
|
||||||
|
function SF_broadcasts;
|
||||||
|
function SF_bcPvp;
|
||||||
|
function SF_doBroadcast;
|
||||||
|
|
||||||
|
if ($@kebc_showOnline) {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Map Broadcasts ("+getarg(0)+"/"+getmapusers(getarg(0))+" "+$@ked_users$+")",
|
||||||
|
"- Global Broadcasts ("+getusers(1)+" "+$@ked_users$+")"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Map Broadcasts ("+getarg(0)+")",
|
||||||
|
"- Global Broadcasts"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
switch(@kmenu) {
|
||||||
|
case 2:
|
||||||
|
SF_calcPrice(0);
|
||||||
|
set @map$,getarg(0);
|
||||||
|
SF_broadcasts("Map ("+getarg(0)+")");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
SF_calcPrice(1);
|
||||||
|
set @map$,"";
|
||||||
|
SF_broadcasts("Global");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Sub Function SF_broadcasts: Handles main broadcast menu.
|
||||||
|
function SF_broadcasts {
|
||||||
|
|
||||||
|
do {
|
||||||
|
switch (select (
|
||||||
|
"- Cancel "+getarg(0)+" Broadcast",
|
||||||
|
"- Party request Broadcast ("+@partycost+"z)",
|
||||||
|
"- PvP challenge Broadcast ("+@pvpcost+"z)",
|
||||||
|
"- General Broadcast ("+@cost+"z)",
|
||||||
|
"- General Anonymous Broadcast ("+@anoncost+"z)"
|
||||||
|
)) {
|
||||||
|
case 2: //Party
|
||||||
|
SF_doBroadcast $@kebc_partyCost,@map$,"The "+callfunc("GF_getJobName",class)+" "+strcharinfo(0)+" (levels "+baselevel+"/"+joblevel+") is looking for a party to join.",0;
|
||||||
|
break;
|
||||||
|
case 3: //Pvp
|
||||||
|
if ($@kewp_advanced == 0)
|
||||||
|
SF_bcPvp $@kebc_pvpCost,@map$,0,0;
|
||||||
|
else {
|
||||||
|
do {
|
||||||
|
set @kmenu, select (
|
||||||
|
"- Cancel",
|
||||||
|
"- advertise all levels rooms",
|
||||||
|
"- advertise levels "+($@kewp_baseLv1-$@kewp_range)+"-"+($@kewp_baseLv1+$@kewp_range)+" rooms",
|
||||||
|
"- advertise levels "+($@kewp_baseLv2-$@kewp_range)+"-"+($@kewp_baseLv2+$@kewp_range)+" rooms",
|
||||||
|
"- advertise levels "+($@kewp_baseLv3-$@kewp_range)+"-"+($@kewp_baseLv3+$@kewp_range)+" rooms",
|
||||||
|
"- advertise levels "+($@kewp_baseLv4-$@kewp_range)+"-"+($@kewp_baseLv4+$@kewp_range)+" rooms",
|
||||||
|
"- advertise levels "+($@kewp_baseLv5-$@kewp_range)+"-"+($@kewp_baseLv5+$@kewp_range)+" rooms",
|
||||||
|
"- advertise levels "+($@kewp_baseLv6-$@kewp_range)+"-"+($@kewp_baseLv6+$@kewp_range)+" rooms",
|
||||||
|
"- advertise levels "+($@kewp_baseLv7-$@kewp_range)+"-"+($@kewp_baseLv7+$@kewp_range)+" rooms"
|
||||||
|
);
|
||||||
|
switch (@kmenu) {
|
||||||
|
case 2: //All levels
|
||||||
|
SF_bcPvp $@kebc_pvpCost,@map$,0,0;
|
||||||
|
break;
|
||||||
|
case 3: //Lv1
|
||||||
|
SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv1-$@kewp_range,$@kewp_baseLv1+$@kewp_range;
|
||||||
|
break;
|
||||||
|
case 4: //Lv2
|
||||||
|
SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv2-$@kewp_range,$@kewp_baseLv2+$@kewp_range;
|
||||||
|
break;
|
||||||
|
case 5: //Lv3
|
||||||
|
SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv3-$@kewp_range,$@kewp_baseLv3+$@kewp_range;
|
||||||
|
break;
|
||||||
|
case 6: //Lv4
|
||||||
|
SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv4-$@kewp_range,$@kewp_baseLv4+$@kewp_range;
|
||||||
|
break;
|
||||||
|
case 7: //Lv5
|
||||||
|
SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv5-$@kewp_range,$@kewp_baseLv5+$@kewp_range;
|
||||||
|
break;
|
||||||
|
case 8: //Lv6
|
||||||
|
SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv6-$@kewp_range,$@kewp_baseLv6+$@kewp_range;
|
||||||
|
break;
|
||||||
|
case 9: //Lv7
|
||||||
|
SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv7-$@kewp_range,$@kewp_baseLv7+$@kewp_range;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (@kmenu > 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4: //General
|
||||||
|
SF_doBroadcast $@kebc_cost,@map$,"(From "+strcharinfo(0)+") ",1;
|
||||||
|
break;
|
||||||
|
case 5: //Anonymous
|
||||||
|
SF_doBroadcast $@kebc_anonCost,@map$,"(Anonymous) ",1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} while (1);
|
||||||
|
} //SF_ end
|
||||||
|
|
||||||
|
//SubFunction: Calculates prices for Broadcast services (argument 0 == 1 for global bc, 0 for map bc
|
||||||
|
function SF_calcPrice {
|
||||||
|
set @partycost,callfunc("F_keCost",$@kebc_partyCost,$@kebc_discount);
|
||||||
|
set @pvpcost,callfunc("F_keCost",$@kebc_pvpCost,$@kebc_discount);
|
||||||
|
set @cost,callfunc("F_keCost",$@kebc_cost,$@kebc_discount);
|
||||||
|
set @anoncost,callfunc("F_keCost",$@kebc_anonCost,$@kebc_discount);
|
||||||
|
if (getarg(0)) { //Global fix
|
||||||
|
set @partycost,@partycost*$@kebc_globalFactor/100;
|
||||||
|
set @pvpcost,@pvpcost*$@kebc_globalFactor/100;
|
||||||
|
set @cost,@cost*$@kebc_globalFactor/100;
|
||||||
|
set @anoncost,@anoncost*$@kebc_globalFactor/100;
|
||||||
|
}
|
||||||
|
} //SF_ end
|
||||||
|
|
||||||
|
//SubFunction SF_doBroadcast(int cost, String map, String message, int input)
|
||||||
|
//If map is "", do a global broadcast
|
||||||
|
//If input is 1, concat a user string to message.
|
||||||
|
function SF_doBroadcast {
|
||||||
|
set @cost, getarg(0);
|
||||||
|
if (getarg(1)=="")
|
||||||
|
set @cost, @cost*$@kebc_globalFactor/100;
|
||||||
|
if (getarg(3)) { //Input message
|
||||||
|
input @msg$;
|
||||||
|
set @msg$,getarg(2)+@msg$;
|
||||||
|
} else
|
||||||
|
set @msg$,getarg(2);
|
||||||
|
|
||||||
|
mes "Broadcast '"+@msg$+"'?";
|
||||||
|
switch (select(
|
||||||
|
"- Cancel Broadcast",
|
||||||
|
"- Broadcast Message"
|
||||||
|
)) {
|
||||||
|
case 2:
|
||||||
|
if (!(callfunc("F_keCharge",@cost,$@kebc_discount,1))) {
|
||||||
|
callfunc "F_keIntro", e_pif, "You don't have enough Zeny...";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
callfunc "F_keIntro", e_what, "Broadcasting...";
|
||||||
|
if (getarg(1)=="")
|
||||||
|
announce @msg$,16;
|
||||||
|
else
|
||||||
|
mapannounce getarg(1),@msg$,3;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
callfunc "F_keIntro", -1, "Ok...";
|
||||||
|
}
|
||||||
|
} //SF_ end
|
||||||
|
|
||||||
|
//SubFunction SF_bcPvp (int cost, String map, int min level, int max level)
|
||||||
|
//Does the second part of PvP Room Advertising. Level is the level group to
|
||||||
|
//advertise (1->8 where 8 is free for all)
|
||||||
|
function SF_bcPvp {
|
||||||
|
set @msg$, "advertising";
|
||||||
|
set @lvls$, "";
|
||||||
|
if (getarg(3)) {
|
||||||
|
if (BaseLevel < getarg(2) || BaseLevel > getarg(3)) {
|
||||||
|
callfunc "F_keIntro", e_bzz, "You can only broadcast requests for PvP rooms you can enter!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
set @msg$,"levels "+getarg(2)+"-"+getarg(3);
|
||||||
|
set @lvls$,"(levels "+getarg(2)+"-"+getarg(3)+") ";
|
||||||
|
}
|
||||||
|
set @pvpcost,getarg(0);
|
||||||
|
switch(select(
|
||||||
|
"- Cancel (PvP Rooms "+@msg$+")",
|
||||||
|
"- advertise 'Room Sandwich'",
|
||||||
|
"- advertise 'Room Rock On'",
|
||||||
|
"- advertise 'Four Room'",
|
||||||
|
"- advertise 'Room Undercross'",
|
||||||
|
"- advertise 'Room Compass'"
|
||||||
|
)) {
|
||||||
|
case 2: //Sandwich
|
||||||
|
SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Sandwich'!",0;
|
||||||
|
break;
|
||||||
|
case 3: //Rockon
|
||||||
|
SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Rock On'!",0;
|
||||||
|
break;
|
||||||
|
case 4: //Room Four
|
||||||
|
SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Four Room'!",0;
|
||||||
|
break;
|
||||||
|
case 5: //Undercross
|
||||||
|
SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Undercross'!",0;
|
||||||
|
break;
|
||||||
|
case 6: //Compass
|
||||||
|
SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Compass'!",0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} //SF_ end
|
||||||
|
|
||||||
|
}
|
||||||
139
npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt
Normal file
139
npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Stylist Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 1.9
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN 3424+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Offers dying of hair, clothes and hair-style adjusts
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_dye {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadDye";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_keStylist {
|
||||||
|
|
||||||
|
function SF_inputpalette;
|
||||||
|
function SF_wheelpalette;
|
||||||
|
|
||||||
|
set @jobClass,callfunc("GF_getJobLevel",class);
|
||||||
|
set @maxCDye,0;
|
||||||
|
|
||||||
|
switch (@jobClass) {
|
||||||
|
case 0:
|
||||||
|
set @maxCDye, $@kedy_clothJN;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
set @maxCDye, $@kedy_clothJ1ST;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
set @maxCDye, $@kedy_clothJ2ND;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
set @maxCDye, $@kedy_clothJSN;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
set @maxCDye, $@kedy_clothJWED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
do {
|
||||||
|
if ($@kedy_enableHairstyle) {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Change hairstyle (current is "+getlook(1)+"/max is "+$@kedy_styles+")",
|
||||||
|
"- Change hairstyle (by wheel)",
|
||||||
|
"- Dye hair (current is "+getlook(6)+"/max is "+$@kedy_hair+")",
|
||||||
|
"- Dye hair (by wheel)",
|
||||||
|
"- Dye clothes (current is "+getlook(7)+"/max is "+@maxCDye+")",
|
||||||
|
"- Dye clothes (by wheel)"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Dye hair (current is "+getlook(6)+"/max is "+$@kedy_hair+")",
|
||||||
|
"- Dye hair (by wheel)",
|
||||||
|
"- Dye clothes (current is "+getlook(7)+"/max is "+@maxCDye+")",
|
||||||
|
"- Dye clothes (by wheel)"
|
||||||
|
);
|
||||||
|
if (@kmenu > 1)
|
||||||
|
set @kmenu, @kmenu+2;
|
||||||
|
}
|
||||||
|
switch (@kmenu) {
|
||||||
|
case 2: //Hair Style Input
|
||||||
|
SF_inputpalette 1,$@kedy_styles;
|
||||||
|
break;
|
||||||
|
case 3: //Hair Style Wheel
|
||||||
|
SF_wheelpalette 1,$@kedy_styles;
|
||||||
|
break;
|
||||||
|
case 4: //Hair Dye Input
|
||||||
|
SF_inputpalette 6,$@kedy_hair;
|
||||||
|
break;
|
||||||
|
case 5: //Hair Dye Wheel
|
||||||
|
SF_wheelpalette 6,$@kedy_hair;
|
||||||
|
break;
|
||||||
|
case 6: //Clothes Input
|
||||||
|
SF_inputpalette 7,@maxCDye;
|
||||||
|
break;
|
||||||
|
case 7: //Clothes Wheel
|
||||||
|
SF_wheelpalette 7,@maxCDye ;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (@kmenu > 1);
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Subfunction: SF_inputpalette(int part, int maxPalette)
|
||||||
|
//Sets a palette from the user's request.
|
||||||
|
function SF_inputpalette {
|
||||||
|
input @pal;
|
||||||
|
if (@pal < 0 || @pal > getarg(1)) {
|
||||||
|
callfunc "F_keIntro", e_swt2, "Sorry, we do not have that dye available.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setlook getarg(0),@pal;
|
||||||
|
emotion e_lv;
|
||||||
|
} //SF_ end
|
||||||
|
|
||||||
|
//Subfunction: SF_wheelpalette(int part, int maxPalette)
|
||||||
|
//Sets a palette through browsing.
|
||||||
|
function SF_wheelpalette {
|
||||||
|
set @loc, getarg(0);
|
||||||
|
set @max, getarg(1);
|
||||||
|
set @pal, getlook(@loc);
|
||||||
|
set @dir, 1;
|
||||||
|
do {
|
||||||
|
if (@dir > 0)
|
||||||
|
set @submenu, select(
|
||||||
|
"Next",
|
||||||
|
"Previous",
|
||||||
|
"Done (current is "+@pal+")"
|
||||||
|
);
|
||||||
|
else
|
||||||
|
set @submenu, select(
|
||||||
|
"Previous",
|
||||||
|
"Next",
|
||||||
|
"Done (current is "+@pal+")"
|
||||||
|
);
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2: //Swap direction
|
||||||
|
set @dir, @dir*-1;
|
||||||
|
case 1:
|
||||||
|
set @pal, @pal+@dir;
|
||||||
|
if (@pal < 0)
|
||||||
|
set @pal, @max;
|
||||||
|
else if (@pal > @max)
|
||||||
|
set @pal, 0;
|
||||||
|
setlook @loc,@pal;
|
||||||
|
}
|
||||||
|
} while (@submenu != 3);
|
||||||
|
emotion e_lv2;
|
||||||
|
} //SF_ end
|
||||||
|
|
||||||
|
}
|
||||||
533
npc/custom/eAAC_Scripts/kafraExpress/ke_jobchange.txt
Normal file
533
npc/custom/eAAC_Scripts/kafraExpress/ke_jobchange.txt
Normal file
@ -0,0 +1,533 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Job Changing Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 3.5
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3579+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Enables job changing through the class trees.
|
||||||
|
//= Novice -> 1st Class, 1st Class -> 2nd Class, rebirths, etc
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//= When using Upper Job policy, previous jobs are stored in
|
||||||
|
//= the server wide variables kej_class1 and kej_class2
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_jobchange {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadJobChange";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_keJobChange {
|
||||||
|
|
||||||
|
function SF_to1stJob;
|
||||||
|
function SF_to2ndJob;
|
||||||
|
function SF_getJobNames;
|
||||||
|
function SF_testChangeJob;
|
||||||
|
function SF_changeJob;
|
||||||
|
|
||||||
|
set @job, callfunc("GF_getJobLevel", class);
|
||||||
|
set @upper, Upper; //Because it is changed when rebirthing
|
||||||
|
set @reset, 0; //Base Level is reset only on rebirths
|
||||||
|
switch (@job) {
|
||||||
|
case 0: //Novices
|
||||||
|
if ($@kejc_skipNovice)
|
||||||
|
set @jobLv, 0; //jobLv is used again when checking for S.Novice's base level restriction.
|
||||||
|
else
|
||||||
|
set @jobLv, 10;
|
||||||
|
if (SF_testChangeJob(0,0,@jobLv))
|
||||||
|
SF_to1stJob(0);
|
||||||
|
break;
|
||||||
|
case 1: //First Classes
|
||||||
|
if (SF_testChangeJob($@kejc_cost2ND,$@kejc_base2ND,$@kejc_job2ND))
|
||||||
|
SF_to2ndJob();
|
||||||
|
break;
|
||||||
|
case 2: //Second Classes
|
||||||
|
if (Upper == 0 && BaseClass != Job_Taekwon) {
|
||||||
|
if (SF_testChangeJob($@kejc_costRebirth,$@kejc_baseRebirth,$@kejc_jobRebirth)) {
|
||||||
|
set @upper, 1;
|
||||||
|
if ($@kejc_skipNovice)
|
||||||
|
SF_to1stJob(1);
|
||||||
|
else
|
||||||
|
SF_changeJob @job,Upper,Job_Novice,1,0,0,$@kejc_costRebirth,1,$@kejc_rebirthReset;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: //Dead End
|
||||||
|
callfunc "F_keIntro", e_swt2, "I cannot change you from your current job.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Handles changing to 1st job.
|
||||||
|
function SF_to1stJob {
|
||||||
|
do {
|
||||||
|
set @submenu, 1;
|
||||||
|
if (@upper == 1 && $@kejc_upperPolicy && kej_class1) {
|
||||||
|
switch (kej_class1) {
|
||||||
|
case Job_Acolyte:
|
||||||
|
set @submenu, 2;
|
||||||
|
break;
|
||||||
|
case Job_Archer:
|
||||||
|
set @submenu, 3;
|
||||||
|
break;
|
||||||
|
case Job_Mage:
|
||||||
|
set @submenu, 4;
|
||||||
|
break;
|
||||||
|
case Job_Merchant:
|
||||||
|
set @submenu, 5;
|
||||||
|
break;
|
||||||
|
case Job_Swordman:
|
||||||
|
set @submenu, 6;
|
||||||
|
break;
|
||||||
|
case Job_Thief:
|
||||||
|
set @submenu, 7;
|
||||||
|
break;
|
||||||
|
case Job_Taekwon:
|
||||||
|
set @submenu, 8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (@submenu == 1) {
|
||||||
|
SF_getJobNames 8,Job_Acolyte,Job_Archer,Job_Mage,Job_Merchant,Job_Swordman,Job_Thief,Job_Taekwon,Job_SuperNovice;
|
||||||
|
switch (@upper) {
|
||||||
|
case 0: //All
|
||||||
|
set @submenu, select(
|
||||||
|
"- Cancel job change",
|
||||||
|
"- "+@name1$,
|
||||||
|
"- "+@name2$,
|
||||||
|
"- "+@name3$,
|
||||||
|
"- "+@name4$,
|
||||||
|
"- "+@name5$,
|
||||||
|
"- "+@name6$,
|
||||||
|
"- "+@name7$,
|
||||||
|
"- "+@name8$
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case 1: //No Taekwon/S.Novice
|
||||||
|
set @submenu, select(
|
||||||
|
"- Cancel job change",
|
||||||
|
"- "+@name1$,
|
||||||
|
"- "+@name2$,
|
||||||
|
"- "+@name3$,
|
||||||
|
"- "+@name4$,
|
||||||
|
"- "+@name5$,
|
||||||
|
"- "+@name6$
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case 2: //No Taekwon
|
||||||
|
set @submenu, select(
|
||||||
|
"- Cancel job change",
|
||||||
|
"- "+@name1$,
|
||||||
|
"- "+@name2$,
|
||||||
|
"- "+@name3$,
|
||||||
|
"- "+@name4$,
|
||||||
|
"- "+@name5$,
|
||||||
|
"- "+@name6$,
|
||||||
|
"- "+@name8$
|
||||||
|
);
|
||||||
|
if (@submenu == 8)
|
||||||
|
set @submenu, 9;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2: //Acolyte
|
||||||
|
set @newJob,Job_Acolyte;
|
||||||
|
set @weapon, $@kejc_wAcolyte;
|
||||||
|
break;
|
||||||
|
case 3: //Archer
|
||||||
|
set @newJob,Job_Archer;
|
||||||
|
set @weapon, $@kejc_wArcher;
|
||||||
|
break;
|
||||||
|
case 4: //Mage
|
||||||
|
set @newJob,Job_Mage;
|
||||||
|
set @weapon, $@kejc_wMage;
|
||||||
|
break;
|
||||||
|
case 5: //Merchant
|
||||||
|
set @newJob,Job_Merchant;
|
||||||
|
set @weapon, $@kejc_wMerchant;
|
||||||
|
break;
|
||||||
|
case 6: //Swordman
|
||||||
|
set @newJob,Job_Swordman;
|
||||||
|
set @weapon, $@kejc_wSwordman;
|
||||||
|
break;
|
||||||
|
case 7: //Thief
|
||||||
|
set @newJob,Job_Thief;
|
||||||
|
set @weapon, $@kejc_wThief;
|
||||||
|
break;
|
||||||
|
case 8: //Taekwon
|
||||||
|
set @newJob,Job_Taekwon;
|
||||||
|
set @weapon, $@kejc_wTaekwon;
|
||||||
|
break;
|
||||||
|
case 9: //S. Novice
|
||||||
|
set @newJob,Job_SuperNovice;
|
||||||
|
set @weapon, $@kejc_wSuperNovice;
|
||||||
|
if (SF_testChangeJob(0,$@kejc_baseSN,@jobLv) == 0)
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (@submenu > 1) {
|
||||||
|
if (getarg(0)) { //Skipping High Novice, charge rebirth costs.
|
||||||
|
if (SF_changeJob(@job,Upper,@newJob,1,@weapon,0,$@kejc_costRebirth,2,$@kejc_rebirthReset))
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
if (SF_changeJob(@job,Upper,@newJob,@upper,@weapon,0,0,2,0))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (@submenu > 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function SF_to2ndJob {
|
||||||
|
do {
|
||||||
|
set @submenu, 1;
|
||||||
|
if (@upper == 1 && $@kejc_upperPolicy && kej_class2) {
|
||||||
|
switch (kej_class2) {
|
||||||
|
case Job_Priest:
|
||||||
|
case Job_Hunter:
|
||||||
|
case Job_Wizard:
|
||||||
|
case Job_Blacksmith:
|
||||||
|
case Job_Knight:
|
||||||
|
case Job_Knight2:
|
||||||
|
case Job_Assassin:
|
||||||
|
case Job_Star_Gladiator:
|
||||||
|
case Job_Star_Gladiator2:
|
||||||
|
set @submenu, 2;
|
||||||
|
break;
|
||||||
|
case Job_Monk:
|
||||||
|
case Job_Bard:
|
||||||
|
case Job_Dancer:
|
||||||
|
case Job_Sage:
|
||||||
|
case Job_Alchem:
|
||||||
|
case Job_Crusader:
|
||||||
|
case Job_Crusader2:
|
||||||
|
case Job_Rogue:
|
||||||
|
case Job_Soul_Linker:
|
||||||
|
set @submenu, 3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (@submenu == 1) { //Fetch from menu.
|
||||||
|
switch (BaseClass) {
|
||||||
|
case Job_Acolyte:
|
||||||
|
SF_getJobNames 2,Job_Priest,Job_Monk;
|
||||||
|
break;
|
||||||
|
case Job_Archer:
|
||||||
|
SF_getJobNames 3,Job_Hunter,Job_Bard,Job_Dancer;
|
||||||
|
if (sex == 0)
|
||||||
|
set @name2$, @name3$;
|
||||||
|
break;
|
||||||
|
case Job_Mage:
|
||||||
|
SF_getJobNames 2,Job_Wizard,Job_Sage;
|
||||||
|
break;
|
||||||
|
case Job_Merchant:
|
||||||
|
SF_getJobNames 2,Job_Blacksmith,Job_Alchem;
|
||||||
|
break;
|
||||||
|
case Job_Swordman:
|
||||||
|
SF_getJobNames 2,Job_Knight,Job_Crusader;
|
||||||
|
break;
|
||||||
|
case Job_Thief:
|
||||||
|
SF_getJobNames 2,Job_Assassin,Job_Rogue;
|
||||||
|
break;
|
||||||
|
case Job_Taekwon:
|
||||||
|
SF_getJobNames 2,Job_Star_Gladiator,Job_Soul_Linker;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
callfunc "F_keIntro", e_swt2, "I don't know how to change you from your current job.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
set @submenu, select(
|
||||||
|
"- Cancel job change",
|
||||||
|
"- "+@name1$,
|
||||||
|
"- "+@name2$
|
||||||
|
);
|
||||||
|
}
|
||||||
|
switch (BaseClass) {
|
||||||
|
case Job_Acolyte:
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2: //Priest
|
||||||
|
set @newJob,Job_Priest;
|
||||||
|
set @weapon,$@kejc_wPriest;
|
||||||
|
set @weapon2,$@kejc_w2Priest;
|
||||||
|
break;
|
||||||
|
case 3: //Monk
|
||||||
|
set @newJob,Job_Monk;
|
||||||
|
set @weapon,$@kejc_wMonk;
|
||||||
|
set @weapon2,$@kejc_w2Monk;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Job_Archer:
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2: //Hunter
|
||||||
|
set @newJob,Job_Hunter;
|
||||||
|
set @weapon,$@kejc_wHunter;
|
||||||
|
set @weapon2,$@kejc_w2Hunter;
|
||||||
|
break;
|
||||||
|
case 3: //Bard/Dancer
|
||||||
|
if (sex == 1) { //Bard
|
||||||
|
set @newJob,Job_Bard;
|
||||||
|
set @weapon,$@kejc_wBard;
|
||||||
|
set @weapon2,$@kejc_w2Bard;
|
||||||
|
} else { //Dancer
|
||||||
|
set @newJob,Job_Dancer;
|
||||||
|
set @weapon,$@kejc_wDancer;
|
||||||
|
set @weapon2,$@kejc_w2Dancer;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Job_Mage:
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2: //Wizard
|
||||||
|
set @newJob,Job_Wizard;
|
||||||
|
set @weapon,$@kejc_wWizard;
|
||||||
|
set @weapon2,$@kejc_w2Wizard;
|
||||||
|
break;
|
||||||
|
case 3: //Sage
|
||||||
|
set @newJob,Job_Sage;
|
||||||
|
set @weapon,$@kejc_wSage;
|
||||||
|
set @weapon2,$@kejc_w2Sage;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Job_Merchant:
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2: //Blacksmith
|
||||||
|
set @newJob,Job_Blacksmith;
|
||||||
|
set @weapon,$@kejc_wBlacksmith;
|
||||||
|
set @weapon2,$@kejc_w2Blacksmith;
|
||||||
|
break;
|
||||||
|
case 3: //Alchemist
|
||||||
|
set @newJob,Job_Alchem;
|
||||||
|
set @weapon,$@kejc_wAlchemist;
|
||||||
|
set @weapon2,$@kejc_w2Alchemist;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Job_Swordman:
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2: //Knight
|
||||||
|
set @newJob,Job_Knight;
|
||||||
|
set @weapon,$@kejc_wKnight;
|
||||||
|
set @weapon2,$@kejc_w2Knight;
|
||||||
|
break;
|
||||||
|
case 3: //Crusader
|
||||||
|
set @newJob,Job_Crusader;
|
||||||
|
set @weapon,$@kejc_wCrusader;
|
||||||
|
set @weapon2,$@kejc_w2Crusader;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
mes "uh oh";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Job_Thief:
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2: //Assassin
|
||||||
|
set @newJob,Job_Assassin;
|
||||||
|
set @weapon,$@kejc_wAssassin;
|
||||||
|
set @weapon2,$@kejc_w2Assassin;
|
||||||
|
break;
|
||||||
|
case 3: //Rogue
|
||||||
|
set @newJob,Job_Rogue;
|
||||||
|
set @weapon,$@kejc_wRogue;
|
||||||
|
set @weapon2,$@kejc_w2Rogue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Job_Taekwon:
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2: //Star Gladiator
|
||||||
|
set @newJob,Job_Star_Gladiator;
|
||||||
|
set @weapon,$@kejc_wStarGladiator;
|
||||||
|
set @weapon2,$@kejc_w2StarGladiator;
|
||||||
|
break;
|
||||||
|
case 3: //Soul Linker
|
||||||
|
set @newJob,Job_Soul_Linker;
|
||||||
|
set @weapon,$@kejc_wSoulLinker;
|
||||||
|
set @weapon2,$@kejc_w2SoulLinker;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (@submenu > 1) {
|
||||||
|
if (SF_changeJob(@job,Upper,@newJob,@upper,@weapon,@weapon2,$@kejc_cost2ND,0,0))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} while (@submenu > 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//SubFunction: SF_testChangeJob(Zeny, BaseLv, JobLv)
|
||||||
|
//Function that checks if the player qualifies for job changing.
|
||||||
|
function SF_testChangeJob {
|
||||||
|
set @fail, 0;
|
||||||
|
if (Zeny < getarg(0))
|
||||||
|
set @fail, 1;
|
||||||
|
if (BaseLevel < getarg(1))
|
||||||
|
set @fail, @fail+2;
|
||||||
|
if (JobLevel < getarg(2))
|
||||||
|
set @fail, @fail+4;
|
||||||
|
if (@fail > 0) {
|
||||||
|
if (@fail&1)
|
||||||
|
mes "You need "+getarg(0)+"z for the conversion process.";
|
||||||
|
if (@fail&2)
|
||||||
|
mes "You need to be at least Lv "+getarg(1)+".";
|
||||||
|
if (@fail&4)
|
||||||
|
mes "You need at least job Lv "+getarg(2)+".";
|
||||||
|
callfunc "F_keIntro", e_pif, "Sorry, you don't qualify for a job change yet.";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SkillPoint > 0 && $@kejc_skillsPolicy == 0) {
|
||||||
|
callfunc "F_keIntro", e_dots, "Sorry, use your remaining Skill points before being able to change class.";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//SubFunction: SF_changeJob (CurrentJobLv, CurrentJobType, NewJobBase, NewJobType
|
||||||
|
//Weapon, Weapon2, Zeny, WipeSkills, ResetLv)
|
||||||
|
//Attempts to change to the Jobgiven.
|
||||||
|
//CurrentJobLv is 0-3 (novice, 1st class, 2nd class, s.novice)
|
||||||
|
//Type is 0-2 (Normal, Advanced Class, Baby)
|
||||||
|
//Weapon is the ID of the weapon to grant
|
||||||
|
//Weapon2 is the alternative weapon granted when your job level is above $@kejc_wBonusLv
|
||||||
|
//Zeny is the money required (if negative, it is money awarded)
|
||||||
|
//WipeSkills if 1, indicates that skills should be wiped,
|
||||||
|
//if 2, it means basic skills have to be given back
|
||||||
|
//Reset Level indicates the base lv must be reset to 1.
|
||||||
|
//Note: Zeny/Base/Job requirements should had been checked with SF_testChangeJob already!
|
||||||
|
function SF_changeJob {
|
||||||
|
set @newjob,getarg(2);
|
||||||
|
set @newtype,getarg(3);
|
||||||
|
set @weapon,getarg(4);
|
||||||
|
set @weapon2,getarg(5);
|
||||||
|
set @cost,getarg(6);
|
||||||
|
set @wipeSkill,getarg(7);
|
||||||
|
set @resetLv,getarg(8);
|
||||||
|
|
||||||
|
set @jobStr$, callfunc("GF_getJobName2",@newjob, @newtype);
|
||||||
|
if (@wipeSkill == 0 && SkillPoint > 0 && $@kejc_skillsPolicy == 1) {
|
||||||
|
set @selection, select(
|
||||||
|
"- Do not change yet",
|
||||||
|
"- Change to "+@jobStr$+" (skill points lost)",
|
||||||
|
"- View details"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
set @selection, select(
|
||||||
|
"- Cancel",
|
||||||
|
"- Change to "+@jobStr$,
|
||||||
|
"- View details"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
switch (@selection) {
|
||||||
|
case 3: //Details
|
||||||
|
mes "Okay.. listen up:";
|
||||||
|
next;
|
||||||
|
mes "["+@name$+"]";
|
||||||
|
mes "Changing to "+@jobStr$+" now means:";
|
||||||
|
if (@wipeSkill == 0 && SkillPoint > 0 && $@kejc_skillsPolicy == 1)
|
||||||
|
mes "- You will lose your "+SkillPoint+" unused skill points.";
|
||||||
|
else if (@wipeSkill == 1)
|
||||||
|
mes "- You will lose all your skills.";
|
||||||
|
if (@resetLv)
|
||||||
|
mes "- Your base level will be reset to 1.";
|
||||||
|
if (@cost > 0)
|
||||||
|
mes "- You will be charged "+@cost+"z.";
|
||||||
|
else if (@cost < 0)
|
||||||
|
mes "- You will be aided with "+(0-@cost)+"z.";
|
||||||
|
if (@weapon > 0) {
|
||||||
|
if (@weapon2 > 0 && $@kejc_wBonusLv) {
|
||||||
|
if (JobLevel < $@kejc_wBonusLv) {
|
||||||
|
mes "- You will receive a "+getitemname(@weapon)+"["+getitemslots(@weapon)+"].";
|
||||||
|
mes "- If you wait until Job Lv"+$@kejc_wBonusLv+", you can receive instead a "+getitemname(@weapon2)+"["+getitemslots(@weapon)+"].";
|
||||||
|
} else {
|
||||||
|
mes "- You will receive a "+getitemname(@weapon2)+"["+getitemslots(@weapon)+"] for reaching Job Lv"+$@kejc_wBonusLv+".";
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
mes "- You will receive a "+getitemname(@weapon)+".";
|
||||||
|
}
|
||||||
|
mes "So... will you change?";
|
||||||
|
if (select(
|
||||||
|
"- Cancel",
|
||||||
|
"- Change to "+@jobStr$
|
||||||
|
) != 2) {
|
||||||
|
callfunc "F_keIntro", e_dots, "...alright.";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
callfunc "F_keIntro", -1, "Enjoy your new Job.";
|
||||||
|
case 2: //Change
|
||||||
|
//Set/Unset job path variables as needed.
|
||||||
|
if($@kejc_upperPolicy) {
|
||||||
|
set @class,getarg(0);
|
||||||
|
set @type, getarg(1);
|
||||||
|
if(@class == 1 && @type == 0)
|
||||||
|
set kej_class1,class; //Advancing to second class, so...
|
||||||
|
if(@class == 2)
|
||||||
|
set kej_class2,class; //Only way of being here is by doing a rebirth
|
||||||
|
if(@type > 0)
|
||||||
|
set kej_class1,0; //Clear when one is a high class
|
||||||
|
if(@type > 0 && @class == 1)
|
||||||
|
set kej_class2,0; //Clear when leaving high 1st class
|
||||||
|
}
|
||||||
|
if (@resetLv) {
|
||||||
|
jobchange Job_Novice_High; //Done to give players those 100 points from High classes
|
||||||
|
resetlvl(1);
|
||||||
|
}
|
||||||
|
if (@wipeSkill) {
|
||||||
|
resetskill;
|
||||||
|
setoption(0);
|
||||||
|
set SkillPoint,0;
|
||||||
|
} else if ($@kejc_skillsPolicy == 1)
|
||||||
|
set SkillPoint,0;
|
||||||
|
if (@wipeSkill>1)
|
||||||
|
skill 1,9,0;
|
||||||
|
if($@kejc_resetDye)
|
||||||
|
setlook 7,0;
|
||||||
|
jobchange @newjob, @newtype;
|
||||||
|
if ($@kejc_announce)
|
||||||
|
announce strcharinfo(0)+" has been promoted to "+@jobStr$+"!",8;
|
||||||
|
set Zeny,Zeny-@cost;
|
||||||
|
if ($@kejc_weaponPolicy && @weapon > 0) {
|
||||||
|
if ($@kejc_wBonusLv && @weapon2 > 0) {
|
||||||
|
if (JobLevel < $@kejc_wBonusLv)
|
||||||
|
getitem @weapon,1;
|
||||||
|
else
|
||||||
|
getitem @weapon2,1;
|
||||||
|
} else
|
||||||
|
getitem @weapon,1;
|
||||||
|
}
|
||||||
|
emotion e_grat;
|
||||||
|
return 1;
|
||||||
|
default: //Cancel...
|
||||||
|
callfunc "F_keIntro", e_dots, "...alright.";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//SubFunction: SF_getJobNames(Qty, Jobid1, Jobid2,...)
|
||||||
|
//Workaround until eA gets a fix for the bug where you can't use callfunc or
|
||||||
|
//callsub within a menu
|
||||||
|
function SF_getJobNames {
|
||||||
|
switch (getarg(0)) {
|
||||||
|
case 8:
|
||||||
|
set @name8$, callfunc("GF_getJobName2",getarg(8),@upper);
|
||||||
|
set @name7$, callfunc("GF_getJobName2",getarg(7),@upper);
|
||||||
|
set @name6$, callfunc("GF_getJobName2",getarg(6),@upper);
|
||||||
|
set @name5$, callfunc("GF_getJobName2",getarg(5),@upper);
|
||||||
|
set @name4$, callfunc("GF_getJobName2",getarg(4),@upper);
|
||||||
|
case 3:
|
||||||
|
set @name3$, callfunc("GF_getJobName2",getarg(3),@upper);
|
||||||
|
case 2:
|
||||||
|
set @name2$, callfunc("GF_getJobName2",getarg(2),@upper);
|
||||||
|
set @name1$, callfunc("GF_getJobName2",getarg(1),@upper);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
409
npc/custom/eAAC_Scripts/kafraExpress/ke_jobswap.txt
Normal file
409
npc/custom/eAAC_Scripts/kafraExpress/ke_jobswap.txt
Normal file
@ -0,0 +1,409 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Job Swapping Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 3.1
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3424+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Enables job changing among classes of the same 'type'
|
||||||
|
//= (ie among 1st classes, or among 2nd classes)
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//= * The previous Job, when enabled, is stored in:
|
||||||
|
//= kej_prev_job (job id)
|
||||||
|
//= kej_prev_joblv (job level)
|
||||||
|
//= kej_prev_skills (skill count)
|
||||||
|
//= kej_prev_dye (cloth dye)
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_jobSwap {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadJobSwap";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_keJobSwap {
|
||||||
|
|
||||||
|
function SF_canRevert;
|
||||||
|
function SF_canSwitch;
|
||||||
|
function SF_revertJob;
|
||||||
|
function SF_switch;
|
||||||
|
function SF_calcSwapCost;
|
||||||
|
function SF_testSwap;
|
||||||
|
function SF_swapJob;
|
||||||
|
function SF_getJobNames;
|
||||||
|
|
||||||
|
set @thisLevel, callfunc("GF_getJobLevel", Class);
|
||||||
|
|
||||||
|
set @prevId, kej_prev_job;
|
||||||
|
set @prevLv, kej_prev_joblv;
|
||||||
|
set @prevLevel, 0;
|
||||||
|
set @prevType, 0;
|
||||||
|
|
||||||
|
if ($@kejs_revertPolicy && @prevId && @prevLv) {
|
||||||
|
set @prevLevel, callfunc("GF_getJobLevel", @prevId);
|
||||||
|
set @prevType, callfunc("GF_getJobType", @prevId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SF_canRevert())
|
||||||
|
{ //Qualifies for Reverting
|
||||||
|
do {
|
||||||
|
set @revertmenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Return to previous class",
|
||||||
|
"- Change into another class"
|
||||||
|
);
|
||||||
|
switch (@revertmenu) {
|
||||||
|
case 2: //Revert
|
||||||
|
if (SF_revertJob())
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
case 3: //Switch
|
||||||
|
if (SF_switch() == 0)
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (@revertmenu > 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (SF_canSwitch())
|
||||||
|
{
|
||||||
|
SF_switch();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
callfunc "F_keIntro", e_swt2, "There are no available jobs of your level.";
|
||||||
|
return;
|
||||||
|
|
||||||
|
//SubFunction SF_canRevert, specifies if the character can revert to previous job.
|
||||||
|
function SF_canRevert {
|
||||||
|
if ($@kejs_revertPolicy == 0 || @prevId == 0 || (Upper == 2 && @prevType != 2))
|
||||||
|
return 0;
|
||||||
|
if((@thisLevel == @prevLevel && Upper == @prevType) || $@kejs_revertPolicy == 2)
|
||||||
|
return 1;
|
||||||
|
if ($@kejs_SNpolicy && @prevType == Upper && ((@prevLevel == 3 && @thisLevel == 1) || (@prevLevel == 1 && @thisLevel == 3)))
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//SubFunction SF_canSwitch, specifies if character can change to another job.
|
||||||
|
function SF_canSwitch {
|
||||||
|
if (@thisLevel == 3)
|
||||||
|
return $@kejs_SNpolicy;
|
||||||
|
if (@thisLevel == 1 || @thisLevel == 2)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Sub Function SF_switch. Presents the switch job menu. Returns 1 only if the
|
||||||
|
//menu was left by picking "Cancel".
|
||||||
|
function SF_switch {
|
||||||
|
switch (@thisLevel) {
|
||||||
|
case 1:
|
||||||
|
case 3: //First Classes
|
||||||
|
set @cost, SF_calcSwapCost($@kejs_job1ST, $@kejs_cost1ST, $@kejs_discount1ST);
|
||||||
|
set @preserve, $@kejs_preserve1ST;
|
||||||
|
if (SF_testSwap($@kejs_job1ST, @cost)) {
|
||||||
|
do {
|
||||||
|
if ($@kejs_SNpolicy && Upper != 1) { //S. Novice Menu
|
||||||
|
SF_getJobNames 7,Job_Acolyte,Job_Archer,Job_Mage,Job_Merchant,Job_Swordman,Job_Thief,Job_SuperNovice;
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Cancel job swap",
|
||||||
|
"- "+@name1$,"- "+@name2$,"- "+@name3$,"- "+@name4$,"- "+@name5$,"- "+@name6$,"- "+@name7$
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
SF_getJobNames 6,Job_Acolyte,Job_Archer,Job_Mage,Job_Merchant,Job_Swordman,Job_Thief;
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Cancel job swap",
|
||||||
|
"- "+@name1$,"- "+@name2$,"- "+@name3$,"- "+@name4$,"- "+@name5$,"- "+@name6$
|
||||||
|
);
|
||||||
|
}
|
||||||
|
switch (@kmenu) {
|
||||||
|
case 2: //Acolyte
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Acolyte, Upper),@cost,@preserve))
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 3: //Archer
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Archer, Upper),@cost,@preserve))
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 4: //Mage
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Mage, Upper),@cost,@preserve))
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 5: //Merchant
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Merchant, Upper),@cost,@preserve))
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 6: //Swordman
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Swordman, Upper),@cost,@preserve))
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 7: //Thief
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Thief, Upper),@cost,@preserve))
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 8: //S. Novice
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_SuperNovice, Upper),@cost,@preserve))
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (@kmenu > 1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2: //Second Classes
|
||||||
|
set @cost, SF_calcSwapCost($@kejs_job2ND, $@kejs_cost2ND, $@kejs_discount2ND);
|
||||||
|
set @preserve, $@kejs_preserve2ND;
|
||||||
|
if (SF_testSwap($@kejs_job2ND, @cost)) {
|
||||||
|
do {
|
||||||
|
if (sex == 1) {
|
||||||
|
SF_getJobNames 12,Job_Alchem,Job_Assassin,Job_Bard,Job_Blacksmith,Job_Crusader,Job_Hunter,Job_Knight,Job_Monk,Job_Priest,Job_Rogue,Job_Sage,Job_Wizard;
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Cancel job change",
|
||||||
|
"- "+@name1$,"- "+@name2$,"- "+@name3$,"- "+@name4$,"- "+@name5$,"- "+@name6$,
|
||||||
|
"- "+@name7$,"- "+@name8$,"- "+@name9$,"- "+@name10$,"- "+@name11$,"- "+@name12$
|
||||||
|
);
|
||||||
|
if (@kmenu >= 7) //Dancer should be at pos 7.
|
||||||
|
set @kmenu, @kmenu+1;
|
||||||
|
} else {
|
||||||
|
SF_getJobNames 12,Job_Alchem,Job_Assassin,Job_Blacksmith,Job_Crusader,Job_Dancer,Job_Hunter,Job_Knight,Job_Monk,Job_Priest,Job_Rogue,Job_Sage,Job_Wizard;
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Cancel job change",
|
||||||
|
"- "+@name1$,"- "+@name2$,"- "+@name3$,"- "+@name4$,"- "+@name5$,"- "+@name6$,
|
||||||
|
"- "+@name7$,"- "+@name8$,"- "+@name9$,"- "+@name10$,"- "+@name11$,"- "+@name12$
|
||||||
|
);
|
||||||
|
if (@kmenu >= 4) //Bard should be at pos 4.
|
||||||
|
set @kmenu, @kmenu+1;
|
||||||
|
}
|
||||||
|
switch (@kmenu)
|
||||||
|
{
|
||||||
|
case 2: //ALCHEMIST
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Alchem, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 3: //ASSASSIN
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Assassin, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 4: //BARD
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Bard, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 5: //BLACKSMITH
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Blacksmith, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 6: //CRUSADER
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Crusader, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 7: //DANCER
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Dancer, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 8: //HUNTER
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Hunter, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 9: //KNIGHT
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Knight, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 10: //MONK
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Monk, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 11: //PRIEST
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Priest, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 12: //ROGUE
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Rogue, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 13: //SAGE
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Sage, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 14: //WIZARD
|
||||||
|
if (SF_swapJob(callfunc("GF_getJobId", Job_Wizard, Upper),@cost,@preserve) == 0)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (@kmenu > 1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//SubFunction: SF_calcSwapCost (MinJob, BaseCost, Discount)
|
||||||
|
//Calculates cost to swap jobs
|
||||||
|
function SF_calcSwapCost {
|
||||||
|
set @cost, getarg(1);
|
||||||
|
set @cost, @cost - @cost*getarg(2)*(JobLevel-getarg(0))/100;
|
||||||
|
if (@cost < 0)
|
||||||
|
set @cost,0; //Free Change
|
||||||
|
return @cost;
|
||||||
|
}
|
||||||
|
|
||||||
|
//SubFunction: SF_testSwap(MinJobLv, Cost)
|
||||||
|
//Checks if the player qualifies for job changing.
|
||||||
|
function SF_testSwap {
|
||||||
|
if (JobLevel < getarg(0)) {
|
||||||
|
callfunc "F_keIntro", e_dots, "You need to be at least Job Lv "+getarg(0)+" before exchanging.";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
set @cost, callfunc("F_keCost",getarg(1),$@kejs_swapDiscount);
|
||||||
|
if (Zeny < @cost) {
|
||||||
|
callfunc "F_keIntro", e_dots, "You need "+@cost+"z to be able to change.";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//SubFunction: SF_swapJob (JobNumber, Zeny, PreserveRate)
|
||||||
|
//Attempts to swap to the Jobgiven.
|
||||||
|
//Zeny is the money cost
|
||||||
|
//Preserve is how much of the previous job to preserve.
|
||||||
|
function SF_swapJob {
|
||||||
|
set @newjobId, getarg(0);
|
||||||
|
set @cost, callfunc("F_keCost",getarg(1),$@kejs_swapDiscount);
|
||||||
|
set @preserve, getarg(2);
|
||||||
|
|
||||||
|
if (Class == @newjobId) {
|
||||||
|
callfunc "F_keIntro", e_meh, "Um... you are already that class!";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
set @newJob$, callfunc("GF_getJobName",@newjobId);
|
||||||
|
set @oldJob$, callfunc("GF_getJobName",Class);
|
||||||
|
set @newjoblv, JobLevel*@preserve/100;
|
||||||
|
|
||||||
|
if (@newjoblv > 1) {
|
||||||
|
if (select("- Cancel", "- Change to a Lv"+@newjoblv+" "+@newJob$+" ("+@cost+"z)") != 2)
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
set @newjoblv,1;
|
||||||
|
if (select("- Cancel", "- Change to "+@newJob$+" ("+@cost+"z)") != 2)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
set @basic, getSkilllv(1);
|
||||||
|
set @thisJoblevel, JobLevel;
|
||||||
|
resetSkill;
|
||||||
|
//Set previous job as needed.
|
||||||
|
if ($@kejs_revertPolicy) {
|
||||||
|
set kej_prev_job, Class;
|
||||||
|
set kej_prev_joblv, @thisJoblevel;
|
||||||
|
set kej_prev_skills, SkillPoint;
|
||||||
|
}
|
||||||
|
if ($@kejs_announce)
|
||||||
|
announce strcharinfo(0)+" has changed from "+@oldJob$+" to "+@newJob$+"...",16;
|
||||||
|
|
||||||
|
if ($@kejs_resetDye)
|
||||||
|
setlook 7,0;
|
||||||
|
jobchange @newjobId, 0;
|
||||||
|
skill 1,@basic,0;
|
||||||
|
set SkillPoint, SkillPoint-@thisJoblevel+1-@basic;
|
||||||
|
|
||||||
|
set JobLevel, @newjoblv;
|
||||||
|
setoption(0);
|
||||||
|
callfunc "F_keCharge",getarg(2),$@kejs_swapDiscount,1;
|
||||||
|
|
||||||
|
emotion e_ok;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//SubFunction: SF_revertJob (cost)
|
||||||
|
//Reverts to the previous job.
|
||||||
|
function SF_revertJob {
|
||||||
|
if (Class == kej_prev_job) {
|
||||||
|
callfunc "F_keIntro", e_no, "Hmm... You can't go back, because your previous class is the same as your current one??";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
set @newjob$, callfunc ("GF_getJobName",kej_prev_job);
|
||||||
|
|
||||||
|
set @cost,callfunc("F_keCost",$@kejs_revertCost,$@kejs_revertDiscount);
|
||||||
|
|
||||||
|
if (select("- Cancel","- Return to a Lv"+kej_prev_joblv+" "+@newjob$+" ("+@cost+"z)") != 2)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!(callfunc("F_keCharge",$@kejs_revertCost,$@kejs_revertDiscount,1))) {
|
||||||
|
callfunc "F_keIntro", -1, "Sorry, you need "+@cost+"z before you can revert to a Lv"+kej_prev_joblv+" "+@newjob$+".";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
set @thisJobId, Class;
|
||||||
|
set @thisJobLv, JobLevel;
|
||||||
|
|
||||||
|
set @basic, getSkilllv(1);
|
||||||
|
resetSkill;
|
||||||
|
set @skill, SkillPoint;
|
||||||
|
if($@kejs_saveDye) {
|
||||||
|
set @prevDye, getlook(7);
|
||||||
|
setlook 7,0;
|
||||||
|
}
|
||||||
|
if ($@kejs_resetDye)
|
||||||
|
setlook 7,0;
|
||||||
|
jobchange kej_prev_job, 0;
|
||||||
|
if($@kejs_saveDye) {
|
||||||
|
setlook 7,kej_prev_dye;
|
||||||
|
set kej_prev_dye,@prevDye;
|
||||||
|
}
|
||||||
|
set JobLevel, kej_prev_joblv;
|
||||||
|
set SkillPoint, kej_prev_skills;
|
||||||
|
|
||||||
|
skill 1, @basic, 0;
|
||||||
|
set SkillPoint, SkillPoint-@basic;
|
||||||
|
|
||||||
|
set kej_prev_job, @thisJobId;
|
||||||
|
set kej_prev_joblv, @thisJobLv;
|
||||||
|
set kej_prev_skills, @skill;
|
||||||
|
setoption(0);
|
||||||
|
|
||||||
|
if ($@kejs_announce)
|
||||||
|
announce strcharinfo(0)+" has changed from "+callfunc ("GF_getJobName",@thisJobId)+" to "+@newjob$+"...",16;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//SubFunction: SF_getJobNames(Qty, Jobid1, Jobid2,...)
|
||||||
|
//Workaround until eA gets a fix for the bug where you can't use callfunc or
|
||||||
|
//callsub within a menu
|
||||||
|
function SF_getJobNames {
|
||||||
|
switch (getarg(0)) {
|
||||||
|
case 12:
|
||||||
|
set @name12$, callfunc("GF_getJobName2",getarg(12),Upper);
|
||||||
|
case 11:
|
||||||
|
set @name11$, callfunc("GF_getJobName2",getarg(11),Upper);
|
||||||
|
case 10:
|
||||||
|
set @name10$, callfunc("GF_getJobName2",getarg(10),Upper);
|
||||||
|
case 9:
|
||||||
|
set @name9$, callfunc("GF_getJobName2",getarg(9),Upper);
|
||||||
|
case 8:
|
||||||
|
set @name8$, callfunc("GF_getJobName2",getarg(8),Upper);
|
||||||
|
case 7:
|
||||||
|
set @name7$, callfunc("GF_getJobName2",getarg(7),Upper);
|
||||||
|
case 6:
|
||||||
|
set @name6$, callfunc("GF_getJobName2",getarg(6),Upper);
|
||||||
|
case 5:
|
||||||
|
set @name5$, callfunc("GF_getJobName2",getarg(5),Upper);
|
||||||
|
case 4:
|
||||||
|
set @name4$, callfunc("GF_getJobName2",getarg(4),Upper);
|
||||||
|
case 3:
|
||||||
|
set @name3$, callfunc("GF_getJobName2",getarg(3),Upper);
|
||||||
|
case 2:
|
||||||
|
set @name2$, callfunc("GF_getJobName2",getarg(2),Upper);
|
||||||
|
case 1:
|
||||||
|
set @name1$, callfunc("GF_getJobName2",getarg(1),Upper);
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
405
npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
Normal file
405
npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
Normal file
@ -0,0 +1,405 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Main Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 5.4
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3424+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= This module contains the main menu, plus the healing and
|
||||||
|
//= storage services.
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See <http://www.eathena.deltaanime.net/board/index.php?showtopic=20290>
|
||||||
|
//= for indepth explanation of the Kafra Express Script Package.
|
||||||
|
//= Services available: comment/uncomment what you want (lines 37-104)
|
||||||
|
//= See config.txt for per-module configuration.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
// F_KafraExpress (String "Kafra's name", String "kafra image file",
|
||||||
|
//int location (0 = Town Kafra, 1 = Dungeon Kafra, 2 = Both),
|
||||||
|
//String "save map", int save x, int save y)
|
||||||
|
function script F_KafraExpress {
|
||||||
|
set @name$,getarg(0);
|
||||||
|
set @ke_type,getarg(2);
|
||||||
|
if ($@kekp_reset)
|
||||||
|
set @kafraPass,0;
|
||||||
|
if (getarg(1) != "")
|
||||||
|
cutin getarg(1),2;
|
||||||
|
callfunc "F_keIntro",-1,"";
|
||||||
|
|
||||||
|
M_INIT:
|
||||||
|
set @discount, callfunc("F_keCost",1,100);
|
||||||
|
|
||||||
|
if (@ke_type == 1) goto MD_INIT;
|
||||||
|
menu
|
||||||
|
"- Leave",L_END,
|
||||||
|
"- Heal Service ("+($@keh_hpCost*@discount)+"z/10HP - "+($@keh_spCost*@discount)+"z/10SP)",L_HEAL,
|
||||||
|
"- Warp Service",M_WARP,
|
||||||
|
"- Use Storage ("+($@kes_cost*@discount)+"z)",L_STORAGE,
|
||||||
|
"- Use Guild Storage ("+($@kegs_cost*@discount)+"z)",L_GUILD_STORAGE,
|
||||||
|
"- Job Services",M_JOB,
|
||||||
|
"- Other Services",M_OTHER,
|
||||||
|
"- Save Respawn point",L_SAVE;
|
||||||
|
|
||||||
|
MD_INIT:
|
||||||
|
menu
|
||||||
|
"- Leave",L_END,
|
||||||
|
"- Heal Service ("+($@keh_hpCost*@discount)+"z/10HP - "+($@keh_spCost*@discount)+"z/10SP)",L_HEAL,
|
||||||
|
"- Warp Service",M_WARP,
|
||||||
|
"- Use Storage ("+($@kes_cost*@discount)+"z)",L_STORAGE,
|
||||||
|
"- Use Guild Storage ("+($@kegs_cost*@discount)+"z)",L_GUILD_STORAGE,
|
||||||
|
"- Job Services",M_JOB,
|
||||||
|
"- Other Services",M_OTHER,
|
||||||
|
"- Save Respawn point",L_SAVE;
|
||||||
|
|
||||||
|
M_WARP:
|
||||||
|
if (@ke_type == 3 && nif_q_done != 1)
|
||||||
|
goto L_DENIED;
|
||||||
|
if (@ke_type == 1)
|
||||||
|
goto MD_WARP;
|
||||||
|
menu
|
||||||
|
"- Return",M_INIT,
|
||||||
|
"- Dungeons",L_DUNGEON,
|
||||||
|
"- PvP Arena",L_PVP,
|
||||||
|
"- Guild Wars",L_GUILD_DUNGEON,
|
||||||
|
"- Towns",L_TOWN;
|
||||||
|
|
||||||
|
MD_WARP:
|
||||||
|
menu
|
||||||
|
"- Return",M_INIT,
|
||||||
|
"- Dungeons",L_DUNGEON,
|
||||||
|
"- PvP Arena",L_PVP,
|
||||||
|
"- Guild Wars",L_GUILD_DUNGEON,
|
||||||
|
"- Towns",L_TOWN;
|
||||||
|
|
||||||
|
M_JOB:
|
||||||
|
if (@ke_type == 1) goto MD_JOB;
|
||||||
|
menu
|
||||||
|
"- Return", M_INIT,
|
||||||
|
"- Change Job",L_JOB_CHANGE,
|
||||||
|
"- Swap Job",L_JOB_SWAP,
|
||||||
|
"- Stat/Skill Services",L_STATS,
|
||||||
|
"- Stat/Skill Market",L_STAT_MARKET,
|
||||||
|
"- Rental Service",L_RENT;
|
||||||
|
|
||||||
|
MD_JOB:
|
||||||
|
menu
|
||||||
|
"- Return", M_INIT,
|
||||||
|
"- Change Job",L_JOB_CHANGE,
|
||||||
|
"- Swap Job",L_JOB_SWAP,
|
||||||
|
"- Stat/Skill Services",L_STATS,
|
||||||
|
"- Stat/Skill Market",L_STAT_MARKET,
|
||||||
|
"- Rental Service",L_RENT;
|
||||||
|
|
||||||
|
M_OTHER:
|
||||||
|
if (@ke_type == 1) goto MD_OTHER;
|
||||||
|
menu
|
||||||
|
"- Return",M_INIT,
|
||||||
|
"- Bank Services",L_BANK,
|
||||||
|
"- Use Kafra Shop",L_SHOP,
|
||||||
|
"- Broadcast a message",L_BROADCAST,
|
||||||
|
"- Refine Services",L_REFINE,
|
||||||
|
"- Uncard Services",L_UNCARD,
|
||||||
|
"- Stylist Service",L_STYLE,
|
||||||
|
"- Use a Kafra Pass",L_PASS;
|
||||||
|
|
||||||
|
MD_OTHER:
|
||||||
|
menu
|
||||||
|
"- Return",M_INIT,
|
||||||
|
"- Bank Services",L_BANK,
|
||||||
|
"- Use Kafra Shop",L_SHOP,
|
||||||
|
"- Broadcast a message",L_BROADCAST,
|
||||||
|
"- Refine Services",L_REFINE,
|
||||||
|
"- Uncard Services",L_UNCARD,
|
||||||
|
"- Stylist Service",L_STYLE,
|
||||||
|
"- Use a Kafra Pass",L_PASS;
|
||||||
|
|
||||||
|
L_HEAL:
|
||||||
|
callfunc "F_keHeal";
|
||||||
|
goto M_INIT;
|
||||||
|
|
||||||
|
L_TOWN:
|
||||||
|
callfunc "F_keWarpTown";
|
||||||
|
goto M_WARP;
|
||||||
|
|
||||||
|
L_DUNGEON:
|
||||||
|
callfunc "F_keDungeonWarps", getarg(3);
|
||||||
|
goto M_WARP;
|
||||||
|
|
||||||
|
L_GUILD_DUNGEON:
|
||||||
|
callfunc "F_keWarpWOE";
|
||||||
|
goto M_WARP;
|
||||||
|
|
||||||
|
L_PVP:
|
||||||
|
callfunc "F_keWarpPvp";
|
||||||
|
goto M_WARP;
|
||||||
|
|
||||||
|
L_STORAGE:
|
||||||
|
callfunc "F_keStorage", getarg(1);
|
||||||
|
goto M_INIT;
|
||||||
|
|
||||||
|
L_GUILD_STORAGE:
|
||||||
|
callfunc "F_keGuildStorage", getarg(1);
|
||||||
|
goto M_INIT;
|
||||||
|
|
||||||
|
L_BANK:
|
||||||
|
callfunc "F_keBank";
|
||||||
|
goto M_OTHER;
|
||||||
|
|
||||||
|
L_SHOP:
|
||||||
|
callfunc "F_keShop",@ke_type, getarg(1);
|
||||||
|
goto M_OTHER;
|
||||||
|
|
||||||
|
L_BROADCAST:
|
||||||
|
callfunc "F_keBroadcast",getarg(3);
|
||||||
|
goto M_OTHER;
|
||||||
|
|
||||||
|
L_PASS:
|
||||||
|
callfunc "F_kePass";
|
||||||
|
goto M_OTHER;
|
||||||
|
|
||||||
|
L_REFINE:
|
||||||
|
callfunc "F_keRefine";
|
||||||
|
goto M_OTHER;
|
||||||
|
|
||||||
|
L_UNCARD:
|
||||||
|
callfunc "F_keUncard";
|
||||||
|
goto M_OTHER;
|
||||||
|
|
||||||
|
L_STYLE:
|
||||||
|
callfunc "F_keStylist";
|
||||||
|
goto M_OTHER;
|
||||||
|
|
||||||
|
L_JOB_CHANGE:
|
||||||
|
callfunc "F_keJobChange";
|
||||||
|
goto M_JOB;
|
||||||
|
|
||||||
|
L_JOB_SWAP:
|
||||||
|
callfunc "F_keJobSwap";
|
||||||
|
goto M_JOB;
|
||||||
|
|
||||||
|
L_STATS:
|
||||||
|
callfunc "F_keStats";
|
||||||
|
goto M_JOB;
|
||||||
|
|
||||||
|
L_STAT_MARKET:
|
||||||
|
callfunc "F_keStatMarket";
|
||||||
|
goto M_JOB;
|
||||||
|
|
||||||
|
L_RENT:
|
||||||
|
callfunc "F_keRent";
|
||||||
|
goto M_JOB;
|
||||||
|
|
||||||
|
L_SAVE:
|
||||||
|
if (@ke_type == 3 && nif_q_done != 1)
|
||||||
|
goto L_DENIED;
|
||||||
|
if ($@kewt_travel && @ke_type != 1) {
|
||||||
|
callfunc "F_keAddTravelTown", getarg(3);
|
||||||
|
}
|
||||||
|
if ($@kewd_travel && @ke_type != 0) {
|
||||||
|
callfunc "F_keAddTravelDungeon", getarg(3);
|
||||||
|
}
|
||||||
|
if ($@ke_saveOnSpot) {
|
||||||
|
getmapxy @map$,@x,@y,0;
|
||||||
|
savepoint @map$,@x,@y;
|
||||||
|
} else {
|
||||||
|
savepoint getarg(3),getarg(4),getarg(5);
|
||||||
|
}
|
||||||
|
emotion e_scissors;
|
||||||
|
goto M_INIT;
|
||||||
|
|
||||||
|
L_DENIED:
|
||||||
|
callfunc "F_keIntro", e_gg, "...no.";
|
||||||
|
goto M_INIT;
|
||||||
|
|
||||||
|
L_END:
|
||||||
|
mes "Thank you for using Kafra Services.";
|
||||||
|
close2;
|
||||||
|
cutin getarg(1), 255;
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Function F_keIntro (emotion, message)
|
||||||
|
//Displays a message followed by an emotion, then a next button, and finally
|
||||||
|
//shows the intro message.
|
||||||
|
function script F_keIntro {
|
||||||
|
if (getarg(0) >= 0)
|
||||||
|
emotion getarg(0);
|
||||||
|
if (getarg(1) != "") {
|
||||||
|
mes getarg(1);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
mes "["+@name$+"]";
|
||||||
|
mes "Welcome to Kafra Corp. Always by your side, wherever you go.";
|
||||||
|
if(@kafraPass) mes "Your Kafra Pass is active,";
|
||||||
|
mes "How may I be of help?";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Function Heal, offers the heal subsystem.
|
||||||
|
function script F_keHeal {
|
||||||
|
set @qtyHP,MaxHp-Hp;
|
||||||
|
set @qtySP,MaxSp-Sp;
|
||||||
|
set @costHP, $@keh_hpCost*(MaxHp-Hp)/10;
|
||||||
|
set @costSP, $@keh_spCost*(MaxSp-Sp)/10;
|
||||||
|
set @costHPSP, @costHP+@costSP;
|
||||||
|
set @discount, callfunc("F_keCost",1,100);
|
||||||
|
|
||||||
|
if (@qtyHP + @qtySP == 0) {
|
||||||
|
callfunc "F_keIntro", -1, "...you don't need to be healed.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (@qtyHP == 0) goto M_NO_HP;
|
||||||
|
if (@qtySP == 0) goto M_NO_SP;
|
||||||
|
menu "- Cancel",-,
|
||||||
|
"- Heal HP ("+(@costHP*@discount)+"z)",L_HEAL_HP,
|
||||||
|
"- Heal SP ("+(@costSP*@discount)+"z)",L_HEAL_SP,
|
||||||
|
"- Heal Both ("+(@costHPSP*@discount)+"z)",L_HEAL_ALL;
|
||||||
|
return;
|
||||||
|
|
||||||
|
M_NO_HP:
|
||||||
|
menu "- Cancel",-,
|
||||||
|
"- Heal SP ("+(@costSP*@discount)+"z)",L_HEAL_SP;
|
||||||
|
return;
|
||||||
|
|
||||||
|
M_NO_SP:
|
||||||
|
menu "- Cancel",-,
|
||||||
|
"- Heal HP ("+(@costHP*@discount)+"z)",L_HEAL_HP;
|
||||||
|
return;
|
||||||
|
|
||||||
|
L_HEAL_HP:
|
||||||
|
if (!(callfunc("F_keCharge",@costHP,100,0))) {
|
||||||
|
callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
emotion e_no1;
|
||||||
|
heal @qtyHP,0;
|
||||||
|
return;
|
||||||
|
|
||||||
|
L_HEAL_SP:
|
||||||
|
if (!(callfunc("F_keCharge",@costSP,100,0))) {
|
||||||
|
callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
emotion e_no1;
|
||||||
|
heal 0,@qtySP;
|
||||||
|
return;
|
||||||
|
|
||||||
|
L_HEAL_ALL:
|
||||||
|
if (!(callfunc("F_keCharge",@costHPSP,100,0))) {
|
||||||
|
callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
emotion e_no1;
|
||||||
|
heal @qtyHP,@qtySP;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Function storage: allows access to the storage facility
|
||||||
|
//The sent argument is the displaying image, so we can clear it afterwards.
|
||||||
|
function script F_keStorage {
|
||||||
|
if(basicskillcheck(0) > 0 && getskilllv(1) < 6) {
|
||||||
|
callfunc "F_keIntro", -1, "I am sorry, but you beed basic skill level 6 to use the storage.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!(callfunc("F_keCharge",$@kes_cost,100,1))) {
|
||||||
|
callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mes "Thank for you using Kafra services.";
|
||||||
|
emotion e_thx;
|
||||||
|
close2;
|
||||||
|
openstorage;
|
||||||
|
cutin getarg(0), 255;
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Function G Storage: Allows access to the Guild Storage
|
||||||
|
function script F_keGuildStorage {
|
||||||
|
if(basicskillcheck(0) > 0 && getskilllv(1) < 6) {
|
||||||
|
callfunc "F_keIntro", -1, "I am sorry, but you beed basic skill level 6 to use the storage.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(getcharid(2) < 1) {
|
||||||
|
callfunc "F_keIntro", e_swt, "You can't use the Guild Storage if you don't belong to a guild!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (callfunc("F_keCost",$@kegs_cost,100) > Zeny) {
|
||||||
|
callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (guildopenstorage(0) == 1) {
|
||||||
|
callfunc "F_keIntro", -1, "Sorry, the guild storage is currently in use by someone else. Try again later.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
callfunc "F_keCharge",$@kegs_cost,100,1;
|
||||||
|
mes "Thank for you using Kafra services.";
|
||||||
|
emotion e_thx;
|
||||||
|
close2;
|
||||||
|
cutin getarg(0), 255;
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_kePass {
|
||||||
|
if (@kafraPass) {
|
||||||
|
callfunc "F_keIntro", -1, "You already are using a Kafra Pass...";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (countitem(1084)<1) {
|
||||||
|
callfunc "F_keIntro", -1, "You obviously need a 'Kafra Pass' if you want to activate it.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
delitem 1084,1;
|
||||||
|
set @kafraPass,1;
|
||||||
|
callfunc "F_keIntro", e_lv, "Your Kafra Pass has been activated.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//F_keCost(int cost, int discount%)
|
||||||
|
//Returns what would be the cost of a service considering the KafraPass.
|
||||||
|
//The discount value should be between 0 and 100
|
||||||
|
function script F_keCost {
|
||||||
|
if (@kafraPass) {
|
||||||
|
return getarg(0)*(100-getarg(1))/100;
|
||||||
|
}
|
||||||
|
return getarg(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//F_keCharge(int cost, int discount%, bool appliesKP)
|
||||||
|
//Charges for a service, using the KafraPass state and discount value.
|
||||||
|
//appliesKP marks if the cost savings apply for stocking Kafra Reserve Points
|
||||||
|
//Function returns 1 if successful, 0 if there's not enough zeny.
|
||||||
|
function script F_keCharge {
|
||||||
|
set @savings, 0;
|
||||||
|
if (@kafraPass)
|
||||||
|
set @savings, getarg(0)*getarg(1)/100;
|
||||||
|
set @cost, getarg(0)-@savings;
|
||||||
|
if (@cost > Zeny || @cost < 0) { // (@cost < 0) for overflow protection
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
set Zeny, Zeny-@cost;
|
||||||
|
|
||||||
|
if (getarg(2) && @savings > 0 && $@kekp_reserveCost > 0) {
|
||||||
|
set @savings, @savings/$@kekp_reserveCost;
|
||||||
|
if (@savings < $@kekp_minReserve)
|
||||||
|
set @savings, $@kekp_minReserve;
|
||||||
|
if (@savings > $@kekp_maxReserve)
|
||||||
|
set @savings, $@kekp_maxReserve;
|
||||||
|
|
||||||
|
set RESRVPTS, RESRVPTS + @savings;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Function F_keWarp (int cost, int discount, int emotion, String map, int x, int y)
|
||||||
|
function script F_keWarp {
|
||||||
|
if (!(callfunc("F_keCharge",getarg(0),getarg(1),1))) {
|
||||||
|
callfunc "F_keIntro", e_an, "You don't have enough Zeny...";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
emotion getarg(2);
|
||||||
|
warp getarg(3),getarg(4),getarg(5);
|
||||||
|
end;
|
||||||
|
}
|
||||||
339
npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt
Normal file
339
npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt
Normal file
@ -0,0 +1,339 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Refining Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 2.7
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3424+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Does item forging, ore purifying and repairing.
|
||||||
|
//= Can also sell phracon/emveretarcon
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_refine {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadRefine";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_keRefine {
|
||||||
|
|
||||||
|
function SF_refine;
|
||||||
|
function SF_repair;
|
||||||
|
function SF_purify;
|
||||||
|
function SF_sellOres;
|
||||||
|
|
||||||
|
do {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Refine Equipment",
|
||||||
|
"- Repair Equipment",
|
||||||
|
"- Buy Ores",
|
||||||
|
"- Purify Ores",
|
||||||
|
);
|
||||||
|
switch(@kmenu) {
|
||||||
|
case 2: //Refine
|
||||||
|
SF_refine();
|
||||||
|
break;
|
||||||
|
case 3: //Repair
|
||||||
|
SF_repair();
|
||||||
|
break;
|
||||||
|
case 4: //Buy Ore
|
||||||
|
SF_sellOres();
|
||||||
|
break;
|
||||||
|
case 5: //Purify Ore
|
||||||
|
SF_purify();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (@kmenu > 1);
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Subfunction SF_refine, presents the refining menu.
|
||||||
|
function SF_refine {
|
||||||
|
do {
|
||||||
|
set @part, select(
|
||||||
|
"- Cancel upgrading",
|
||||||
|
"- "+getequipname(1),
|
||||||
|
"- "+getequipname(2),
|
||||||
|
"- "+getequipname(3),
|
||||||
|
"- "+getequipname(4),
|
||||||
|
"- "+getequipname(5),
|
||||||
|
"- "+getequipname(6),
|
||||||
|
"- "+getequipname(7),
|
||||||
|
"- "+getequipname(8),
|
||||||
|
"- "+getequipname(9),
|
||||||
|
"- "+getequipname(10)
|
||||||
|
);
|
||||||
|
set @part, @part-1;
|
||||||
|
if (@part == 0)
|
||||||
|
break;
|
||||||
|
if (getequipisequiped(@part) == 0) {
|
||||||
|
callfunc "F_keIntro", e_swt, "There is nothing to refine there...";
|
||||||
|
} else
|
||||||
|
if(getequipisenableref(@part) == 0 && $@kerf_refineAll == 0) {
|
||||||
|
callfunc "F_keIntro", -1, "Sorry, this item cannot be refined.";
|
||||||
|
} else
|
||||||
|
if(getequiprefinerycnt(@part) >= $@kerf_maxLv) {
|
||||||
|
callfunc "F_keIntro", -1, "This item cannot be refined further.";
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
switch (getequipweaponlv(@part))
|
||||||
|
{
|
||||||
|
case 0: //Armor
|
||||||
|
set @mat,985;
|
||||||
|
set @cost,$@kerf_armorCost;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
set @mat,1010;
|
||||||
|
set @cost,$@kerf_weaponLv1Cost;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
set @mat,1011;
|
||||||
|
set @cost,$@kerf_weaponLv2Cost;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
set @mat,984;
|
||||||
|
set @cost,$@kerf_weaponLv3Cost;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
set @mat,984;
|
||||||
|
set @cost,$@kerf_weaponLv4Cost;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
set @cost, callfunc("F_keCost",@cost,$@kerf_discount);
|
||||||
|
do {
|
||||||
|
if ($@kerf_safe==0 && getequippercentrefinery(@part) < 100) {
|
||||||
|
if ($@kerf_showChance) {
|
||||||
|
if (select(
|
||||||
|
"- Return ("+(100-getequippercentrefinery(@part))+"% chance refine will fail)",
|
||||||
|
"- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)") != 2)
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
if (select(
|
||||||
|
"- Return (Upgrade not safe, item might break!)",
|
||||||
|
"- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)") != 2)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (select(
|
||||||
|
"- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)",
|
||||||
|
"- Cancel") != 1)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (getequiprefinerycnt(@part) >= $@kerf_maxLv) {
|
||||||
|
callfunc "F_keIntro", e_ok, "This item has reached it's maximum level.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (countitem(@mat) < 1) {
|
||||||
|
callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!(callfunc("F_keCharge",@cost,$@kerf_discount,1))) {
|
||||||
|
callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
delitem @mat,1;
|
||||||
|
if ($@kerf_safe || getequippercentrefinery(@part)>rand(100)) {
|
||||||
|
successrefitem @part;
|
||||||
|
emotion e_rock;
|
||||||
|
} else {
|
||||||
|
failedrefitem @part;
|
||||||
|
callfunc "F_keIntro", e_swt, "...sorry.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (1);
|
||||||
|
}
|
||||||
|
} while (@part > 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Subfunction: SF_repair()
|
||||||
|
function SF_repair {
|
||||||
|
set @cost,callfunc("F_keCost",$@kerf_repairCost,$@kerf_repairDiscount);
|
||||||
|
do {
|
||||||
|
set @broken1,getbrokenid(1);
|
||||||
|
if(@broken1==NULL) {
|
||||||
|
callfunc "F_keIntro", -1, "You don't need anything repaired for now.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
set @broken2,getbrokenid(2);
|
||||||
|
set @broken3,getbrokenid(3);
|
||||||
|
set @broken4,getbrokenid(4);
|
||||||
|
set @broken5,getbrokenid(5);
|
||||||
|
set @broken6,getbrokenid(6);
|
||||||
|
set @broken7,getbrokenid(7);
|
||||||
|
set @broken8,getbrokenid(8);
|
||||||
|
set @broken9,getbrokenid(9);
|
||||||
|
set @broken10,getbrokenid(10);
|
||||||
|
|
||||||
|
if ($@kerf_repairSteel)
|
||||||
|
set @str$,"- Cancel (Repairing costs "+@cost+"z and 1 "+getitemname(999);
|
||||||
|
else
|
||||||
|
set @str$,"- Cancel (Repairing costs "+@cost+"z)";
|
||||||
|
|
||||||
|
set @idRepair, select(
|
||||||
|
@str$,
|
||||||
|
getitemname(@broken1),
|
||||||
|
getitemname(@broken2),
|
||||||
|
getitemname(@broken3),
|
||||||
|
getitemname(@broken4),
|
||||||
|
getitemname(@broken5),
|
||||||
|
getitemname(@broken6),
|
||||||
|
getitemname(@broken7),
|
||||||
|
getitemname(@broken8),
|
||||||
|
getitemname(@broken9),
|
||||||
|
getitemname(@broken10)
|
||||||
|
);
|
||||||
|
set @idRepair, @idRepair-1;
|
||||||
|
if (@idRepair == 0) break;
|
||||||
|
if ($@kerf_repairSteel && countitem(999) < 1) {
|
||||||
|
callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!(callfunc("F_keCharge", $@kerf_repairCost, $@kerf_repairDiscount,1))) {
|
||||||
|
callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ($@kerf_repairSteel) delitem 999,1;
|
||||||
|
repair(@idRepair);
|
||||||
|
emotion e_lv2;
|
||||||
|
} while (@idRepair > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Subfunction: SF_purify()
|
||||||
|
function SF_purify {
|
||||||
|
if ($@kerf_purifyAll) {
|
||||||
|
set @submenu, select (
|
||||||
|
"- Return",
|
||||||
|
"- Purify "+getitemname(984)+" (need 5 "+getitemname(756)+")",
|
||||||
|
"- Purify "+getitemname(985)+" (need 5 "+getitemname(757)+")",
|
||||||
|
"- Purify "+getitemname(998)+" (need 2 "+getitemname(1002)+")",
|
||||||
|
"- Temper "+getitemname(999)+" (need 5 "+getitemname(998)+", 1 "+getitemname(1003)+")",
|
||||||
|
"- Temper "+getitemname(994)+" (need 10 "+getitemname(990)+")",
|
||||||
|
"- Temper "+getitemname(995)+" (need 10 "+getitemname(991)+")",
|
||||||
|
"- Temper "+getitemname(996)+" (need 10 "+getitemname(992)+")",
|
||||||
|
"- Temper "+getitemname(997)+" (need 10 "+getitemname(993)+")",
|
||||||
|
"- Temper "+getitemname(1000)+" (need 10 "+getitemname(1001)+")"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
set @submenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Purify "+getitemname(984)+" (need 5 "+getitemname(756)+")",
|
||||||
|
"- Purify "+getitemname(985)+" (need 5 "+getitemname(757)+")"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2: //Oridecon
|
||||||
|
set @item, 984;
|
||||||
|
set @rough, 756;
|
||||||
|
set @qty, 5;
|
||||||
|
break;
|
||||||
|
case 3: //Elunium
|
||||||
|
set @item, 985;
|
||||||
|
set @rough, 757;
|
||||||
|
set @qty, 5;
|
||||||
|
break;
|
||||||
|
case 4: //Iron
|
||||||
|
set @item, 998;
|
||||||
|
set @rough, 1002;
|
||||||
|
set @qty, 2;
|
||||||
|
break;
|
||||||
|
case 5: //Steel
|
||||||
|
set @item,999;
|
||||||
|
set @rough,998;
|
||||||
|
set @qty,5;
|
||||||
|
set @rough2,1003;
|
||||||
|
set @qty2,1;
|
||||||
|
|
||||||
|
set @count,countitem(@rough1);
|
||||||
|
set @count2,countitem(@rough2);
|
||||||
|
if (@count < @qty || @count2 < @qty2) {
|
||||||
|
callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
set @count, @count/@qty;
|
||||||
|
set @count2, @count2/@qty2;
|
||||||
|
if (@count2 < @count)
|
||||||
|
set @count,@count2;
|
||||||
|
delitem @rough2,@qty2*@count;
|
||||||
|
break;
|
||||||
|
case 6: //Fire
|
||||||
|
set @item, 994;
|
||||||
|
set @rough, 990;
|
||||||
|
set @qty, 10;
|
||||||
|
break;
|
||||||
|
case 7: //Ice
|
||||||
|
set @item, 995;
|
||||||
|
set @rough, 991;
|
||||||
|
set @qty, 10;
|
||||||
|
break;
|
||||||
|
case 8: //Wind
|
||||||
|
set @item, 996;
|
||||||
|
set @rough, 992;
|
||||||
|
set @qty, 10;
|
||||||
|
break;
|
||||||
|
case 9: //Earth
|
||||||
|
set @item, 997;
|
||||||
|
set @rough, 993;
|
||||||
|
set @qty, 10;
|
||||||
|
break;
|
||||||
|
case 10: //Star
|
||||||
|
set @item, 1000;
|
||||||
|
set @rough, 1001;
|
||||||
|
set @qty, 10;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
set @count,countitem(@rough);
|
||||||
|
if (@count < @qty) {
|
||||||
|
callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
set @count, @count/@qty;
|
||||||
|
delitem @rough,@qty*@count;
|
||||||
|
getitem @item,@count;
|
||||||
|
emotion e_paper;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Subfunction: SF_sellOres()
|
||||||
|
function SF_sellOres {
|
||||||
|
do {
|
||||||
|
set @submenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Buy "+getitemname(1010)+" (200z each)",
|
||||||
|
"- Buy "+getitemname(1011)+" (1000z each)"
|
||||||
|
);
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2: //Phracon
|
||||||
|
set @mat, 1010;
|
||||||
|
set @cost, 200;
|
||||||
|
break;
|
||||||
|
case 3: //Emveratarcon
|
||||||
|
set @mat, 1011;
|
||||||
|
set @cost, 1000;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
input @qty;
|
||||||
|
set @cost,@cost*@qty;
|
||||||
|
if (@qty < 1) {
|
||||||
|
callfunc "F_keIntro", e_pif, "That is NOT a valid quantity...";
|
||||||
|
} else if (@cost > Zeny) {
|
||||||
|
callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
|
||||||
|
} else if (@cost < 0) {
|
||||||
|
callfunc "F_keIntro", e_swt2, "Sorry, that's too much! Try buying less...";
|
||||||
|
} else {
|
||||||
|
set Zeny,Zeny-@cost;
|
||||||
|
getitem @mat,@qty;
|
||||||
|
emotion e_paper;
|
||||||
|
}
|
||||||
|
} while (@submenu > 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
81
npc/custom/eAAC_Scripts/kafraExpress/ke_rent.txt
Normal file
81
npc/custom/eAAC_Scripts/kafraExpress/ke_rent.txt
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Rental Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 1.8
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3424+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Rents PecoPecos, Falcons, Carts
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_rent {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadRent";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_keRent {
|
||||||
|
set @cartCost,callfunc("F_keCost",$@kert_cartCost,100);
|
||||||
|
if(@kert_cartOnly) {
|
||||||
|
set @kmenu, 2;
|
||||||
|
} else {
|
||||||
|
set @falconCost,callfunc("F_keCost",$@kert_falconCost,100);
|
||||||
|
set @pecoCost,callfunc("F_keCost",$@kert_pecoCost,100);
|
||||||
|
set @kmenu, select (
|
||||||
|
"- Cancel",
|
||||||
|
"- Rent a Cart ("+@cartCost+"z)",
|
||||||
|
"- Rent a Falcon ("+@falconCost+"z)",
|
||||||
|
"- Rent a PecoPeco ("+@pecoCost+"z)"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
switch (@kmenu) {
|
||||||
|
case 2: //Cart
|
||||||
|
if (getskilllv(39)==0) {
|
||||||
|
callfunc "F_keIntro", -1, "Sorry, only those with the skill 'Pushcart' may rent a Cart.";
|
||||||
|
} else
|
||||||
|
if (checkcart()) {
|
||||||
|
callfunc "F_keIntro", -1, "You are already equipped.";
|
||||||
|
} else
|
||||||
|
if (!(callfunc("F_keCharge",$@kert_cartCost,100,1))) {
|
||||||
|
callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
|
||||||
|
} else {
|
||||||
|
setcart;
|
||||||
|
emotion e_ok;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3: //Falcon
|
||||||
|
if (getskilllv(127)==0) {
|
||||||
|
callfunc "F_keIntro", -1, "Sorry, only those with the skill 'Falcon Taming' may rent a Falcon.";
|
||||||
|
} else
|
||||||
|
if (checkfalcon()) {
|
||||||
|
callfunc "F_keIntro", -1, "You are already equipped.";
|
||||||
|
} else
|
||||||
|
if (!(callfunc("F_keCharge",$@kert_falconCost,100,1))) {
|
||||||
|
callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
|
||||||
|
} else {
|
||||||
|
setfalcon;
|
||||||
|
emotion e_ok;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4: //pecopeco
|
||||||
|
if (getskilllv(63)==0) {
|
||||||
|
callfunc "F_keIntro", -1, "Sorry, only those with the skill 'PecoPeco Riding' may rent a PecoPeco.";
|
||||||
|
} else
|
||||||
|
if (checkriding()) {
|
||||||
|
callfunc "F_keIntro", -1, "You are already equipped.";
|
||||||
|
} else
|
||||||
|
if (!(callfunc("F_keCharge",$@kert_pecoCost,100,1))) {
|
||||||
|
callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
|
||||||
|
} else {
|
||||||
|
setriding;
|
||||||
|
emotion e_ok;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
66
npc/custom/eAAC_Scripts/kafraExpress/ke_shop.txt
Normal file
66
npc/custom/eAAC_Scripts/kafraExpress/ke_shop.txt
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Portable Shop Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 0.1
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R5195+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Offers buying/selling shop.
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_shop {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadShop";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Sample shops, adjust as needed!
|
||||||
|
- shop ke_townshop -,611:-1,1750:-1,501:-1,502:-1,503:-1,504:-1,506:-1,525:-1,601:-1,602:-1,1065:-1,645:-1,656:-1,657:-1
|
||||||
|
- shop ke_dunshop -,611:-1,1750:-1,501:-1,502:-1,503:-1,504:-1,506:-1,525:-1,601:-1,602:-1,1065:-1
|
||||||
|
|
||||||
|
function script F_keShop {
|
||||||
|
|
||||||
|
if (getarg(0) == 0) { //Town shop
|
||||||
|
set @type, $@kesh_towntype;
|
||||||
|
set @shop$, $@kesh_townshop$;
|
||||||
|
} else {
|
||||||
|
set @type, $@kesh_duntype;
|
||||||
|
set @shop$, $@kesh_dunshop$;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (@type) {
|
||||||
|
case 1:
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Buy items"
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Sell items"
|
||||||
|
);
|
||||||
|
if (@kmenu > 1)
|
||||||
|
set @kmenu,3;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Buy items",
|
||||||
|
"- Sell items"
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (@kmenu == 1)
|
||||||
|
return;
|
||||||
|
mes "Thank you for using Kafra Services.";
|
||||||
|
close2;
|
||||||
|
cutin getarg(1), 255;
|
||||||
|
callshop @shop$, @kmenu-1;
|
||||||
|
end;
|
||||||
|
}
|
||||||
128
npc/custom/eAAC_Scripts/kafraExpress/ke_statmarket.txt
Normal file
128
npc/custom/eAAC_Scripts/kafraExpress/ke_statmarket.txt
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Expres - Stat/Skill Market Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 2.0
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3579+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Lets players buy/sell skill points/stat points
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_statmarket {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadStatMarket";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_keStatMarket {
|
||||||
|
set @discount,callfunc("F_keCost",100,$@kesm_discount);
|
||||||
|
do {
|
||||||
|
set @kmenu, select (
|
||||||
|
"- Return",
|
||||||
|
"- Buy Stat points ("+($@kesm_stBuyPrice*@discount/100)+"z each)",
|
||||||
|
"- Sell Stat points (up to "+StatusPoint+"/"+$@kesm_stSellPrice+"z each)",
|
||||||
|
"- Buy Skill points ("+($@kesm_skBuyPrice*@discount/100)+"z each)",
|
||||||
|
"- Sell Skill points (up to "+SkillPoint+"/"+$@kesm_skSellPrice+"z each)",
|
||||||
|
"- Trade Stats -> Skill ("+$@kesm_skTradePrice+" stats/skill)",
|
||||||
|
"- Trade Skills -> Stats ("+$@kesm_stTradePrice+" stats/skill)"
|
||||||
|
);
|
||||||
|
if (@kmenu > 1)
|
||||||
|
input @qty;
|
||||||
|
switch (@kmenu) {
|
||||||
|
case 2: //Buy Stat
|
||||||
|
set @min, 1;
|
||||||
|
set @max, 9999;
|
||||||
|
set @cost, @qty*$@kesm_stBuyPrice;
|
||||||
|
break;
|
||||||
|
case 3: //Sell Stat
|
||||||
|
input @qty;
|
||||||
|
set @min, 1;
|
||||||
|
set @max, StatusPoint;
|
||||||
|
set @cost, @qty*$@kesm_stSellPrice;
|
||||||
|
break;
|
||||||
|
case 4: //Buy Skill
|
||||||
|
set @min, 1;
|
||||||
|
set @max, 9999;
|
||||||
|
set @cost, @qty*$@kesm_skBuyPrice;
|
||||||
|
break;
|
||||||
|
case 5: //Sell Skill
|
||||||
|
set @min, 1;
|
||||||
|
set @max, SkillPoint;
|
||||||
|
set @cost, @qty*$@kesm_skSellPrice;
|
||||||
|
break;
|
||||||
|
case 6: //Convert stats -> skills
|
||||||
|
set @min, $@kesm_skTradePrice;
|
||||||
|
set @max, StatusPoint;
|
||||||
|
set @cost, @qty/$@kesm_skTradePrice;
|
||||||
|
break;
|
||||||
|
case 7: //Convert skills -> stats
|
||||||
|
set @min, 1;
|
||||||
|
set @max, SkillPoint;
|
||||||
|
set @cost, @qty*$@kesm_stTradePrice;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (@qty < @min) {
|
||||||
|
if (@min == 1)
|
||||||
|
callfunc "F_keIntro", e_dots, "Was that supposed to be funny?";
|
||||||
|
else
|
||||||
|
callfunc "F_keIntro", e_dots, "That is not enough to buy a single skill...";
|
||||||
|
} else
|
||||||
|
if (@qty > @max) {
|
||||||
|
if (@max == 9999)
|
||||||
|
callfunc "F_keIntro", e_X, "You can't buy that much!";
|
||||||
|
else
|
||||||
|
callfunc "F_keIntro", e_X, "You don't have that many to sell...";
|
||||||
|
} else
|
||||||
|
if (@cost < 0) {
|
||||||
|
callfunc "F_keIntro", e_swt2, "That is too much for a single transaction! Try a smaller quantity... please?";
|
||||||
|
} else {
|
||||||
|
switch(@kmenu) {
|
||||||
|
case 2: //Buy Stat
|
||||||
|
if (!(callfunc("F_keCharge",@cost,$@kesm_discount,1))) {
|
||||||
|
callfunc "F_keIntro", e_X, "You do not have enough zeny to buy that much.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
set StatusPoint,StatusPoint+@qty;
|
||||||
|
emotion e_oh;
|
||||||
|
break;
|
||||||
|
case 3: //Sell Stat
|
||||||
|
set StatusPoint,StatusPoint-@qty;
|
||||||
|
set Zeny,Zeny+@cost;
|
||||||
|
emotion e_oh;
|
||||||
|
break;
|
||||||
|
case 4: //Buy Skill
|
||||||
|
if (!(callfunc("F_keCharge",@cost,$@kesm_discount,1))) {
|
||||||
|
callfunc "F_keIntro", e_X, "You do not have enough zeny to buy that much.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
set SkillPoint,SkillPoint+@qty;
|
||||||
|
emotion e_oh;
|
||||||
|
break;
|
||||||
|
case 5: //Sell Skill
|
||||||
|
set SkillPoint,SkillPoint-@qty;
|
||||||
|
set Zeny,Zeny+@cost;
|
||||||
|
emotion e_oh;
|
||||||
|
break;
|
||||||
|
case 6: //Convert stats -> skills
|
||||||
|
set @qty, @cost*$@kesm_skTradePrice;
|
||||||
|
set StatusPoint,StatusPoint-@qty;
|
||||||
|
set SkillPoint,SkillPoint+@cost;
|
||||||
|
emotion e_oh;
|
||||||
|
break;
|
||||||
|
case 7: //Convert skills -> stats
|
||||||
|
set SkillPoint,SkillPoint-@qty;
|
||||||
|
set StatusPoint,StatusPoint+@cost;
|
||||||
|
emotion e_oh;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (@kmenu > 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
130
npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt
Normal file
130
npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Stat/Reset Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 2.2
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3424+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Offers stat raising and Stat/Reset skills
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_stats {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadStats";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_keStats {
|
||||||
|
|
||||||
|
function SF_statRaise;
|
||||||
|
|
||||||
|
set @discount,callfunc("F_keCost",100,$@kest_discount);
|
||||||
|
do {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Raise Stats",
|
||||||
|
"- Reset Stats ("+$@kest_stResetCost+"z+"+$@kest_BaseLvCost+"/blv)",
|
||||||
|
"- Reset Skills ("+$@kest_skResetCost+"z+"+$@kest_JobLvCost+"/jlv)",
|
||||||
|
"- Reset Both ("+$@kest_resetCost+"z+"+$@kest_BothLvCost+"/lv)"
|
||||||
|
);
|
||||||
|
switch (@kmenu) {
|
||||||
|
case 2: //Stat raising
|
||||||
|
SF_statRaise();
|
||||||
|
set @cost, 0;
|
||||||
|
set @reset, 0;
|
||||||
|
break;
|
||||||
|
case 3: //Reset Stat
|
||||||
|
set @cost, $@kest_stResetCost+BaseLevel*$@kest_BaseLvCost;
|
||||||
|
set @reset, 1;
|
||||||
|
break;
|
||||||
|
case 4: //Reset Skills
|
||||||
|
set @cost, $@kest_skResetCost+(JobLevel+jobchange_level)*$@kest_JobLvCost;
|
||||||
|
set @reset, 2;
|
||||||
|
break;
|
||||||
|
case 5: //Reset Both
|
||||||
|
set @cost, $@kest_resetCost+(BaseLevel+JobLevel+jobchange_level)*$@kest_BothLvCost;
|
||||||
|
set @reset, 3;
|
||||||
|
break;
|
||||||
|
default: //Cancel
|
||||||
|
set @cost, 0;
|
||||||
|
set @reset, 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (@reset > 0) {
|
||||||
|
if (select("- Cancel","- Reset for "+(@cost*@discount/100)+"z") == 2) {
|
||||||
|
if (!(callfunc("F_keCharge",@cost,$@kest_discount,1))) {
|
||||||
|
callfunc "F_keIntro", e_an, "Sorry, you don't have enough Zeny.";
|
||||||
|
} else {
|
||||||
|
if (@reset&1)
|
||||||
|
ResetStatus;
|
||||||
|
if (@reset&2) {
|
||||||
|
if ($@kest_resetBasic)
|
||||||
|
ResetSkill;
|
||||||
|
else {
|
||||||
|
set @skill1,getskilllv(1);
|
||||||
|
ResetSkill;
|
||||||
|
skill 1,@skill1,0;
|
||||||
|
set SkillPoint,SkillPoint-@skill1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
emotion e_hmm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (@kmenu > 1);
|
||||||
|
return;
|
||||||
|
|
||||||
|
function SF_statRaise {
|
||||||
|
do {
|
||||||
|
set @submenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- Raise Strength",
|
||||||
|
"- Raise Agility",
|
||||||
|
"- Raise Vitality",
|
||||||
|
"- Raise Intelligence",
|
||||||
|
"- Raise Dexterity",
|
||||||
|
"- Raise Luck"
|
||||||
|
);
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2:
|
||||||
|
set @stat,bStr;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
set @stat,bAgi;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
set @stat,bVit;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
set @stat,bInt;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
set @stat,bDex;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
set @stat,bLuk;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
input @qty;
|
||||||
|
if (@qty <1) {
|
||||||
|
callfunc "F_keIntro", e_swt, "I don't lower stats, try resetting them.";
|
||||||
|
} else if (@qty >100) {
|
||||||
|
callfunc "F_keIntro", e_swt2, "Sorry... I can only raise stats up to 100 at a time.";
|
||||||
|
} else {
|
||||||
|
do {
|
||||||
|
statusup @stat;
|
||||||
|
set @qty,@qty-1;
|
||||||
|
} while (@qty > 0);
|
||||||
|
emotion e_ok;
|
||||||
|
}
|
||||||
|
} while (@submenu > 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
165
npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt
Normal file
165
npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Uncarder Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 1.5
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3424+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Offers uncarding services.
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_uncard {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadUncard";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_keUncard {
|
||||||
|
|
||||||
|
function SF_uncard;
|
||||||
|
|
||||||
|
do {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Return",
|
||||||
|
"- See Price Specifics",
|
||||||
|
"- "+getequipname(1),
|
||||||
|
"- "+getequipname(2),
|
||||||
|
"- "+getequipname(3),
|
||||||
|
"- "+getequipname(4),
|
||||||
|
"- "+getequipname(5),
|
||||||
|
"- "+getequipname(6),
|
||||||
|
"- "+getequipname(7),
|
||||||
|
"- "+getequipname(8),
|
||||||
|
"- "+getequipname(9),
|
||||||
|
"- "+getequipname(10)
|
||||||
|
);
|
||||||
|
if (@kmenu == 1)
|
||||||
|
return;
|
||||||
|
if (@kmenu == 2) { //Details
|
||||||
|
mes "Okay, listen up...";
|
||||||
|
next;
|
||||||
|
mes "["+@name$+"]";
|
||||||
|
if ($@keuc_BaseCost)
|
||||||
|
mes "The base cost is of "+$@keuc_BaseCost+"z.";
|
||||||
|
mes "Each card to be removed incurs a cost of +"+$@keuc_CardCost+"z.";
|
||||||
|
mes "The refine level of the compounded equipment can incur an additional cost:";
|
||||||
|
mes "Armors: "+$@keuc_UpgradeCostA+"z per level.";
|
||||||
|
mes "Lv1 Weapons: "+$@keuc_UpgradeCostW1+"z per level.";
|
||||||
|
mes "Lv2 Weapons: "+$@keuc_UpgradeCostW2+"z per level.";
|
||||||
|
mes "Lv3 Weapons: "+$@keuc_UpgradeCostW3+"z per level.";
|
||||||
|
mes "Lv4 Weapons: "+$@keuc_UpgradeCostW4+"z per level.";
|
||||||
|
|
||||||
|
if ($@keuc_Mat1 && $@keuc_Qty1) {
|
||||||
|
mes "The materials needed are:";
|
||||||
|
mes "- "+$@keuc_Qty1+" "+getitemname($@keuc_Mat1)+".";
|
||||||
|
}
|
||||||
|
if ($@keuc_Mat2 && $@keuc_Qty2)
|
||||||
|
mes "- "+$@keuc_Qty2+" "+getitemname($@keuc_Mat2)+".";
|
||||||
|
|
||||||
|
if ($@keuc_Fail1Chance || $@keuc_Fail2Chance)
|
||||||
|
mes "There is a chance the process might fail and you'll lose your items.";
|
||||||
|
|
||||||
|
next;
|
||||||
|
callfunc "F_keIntro", -1, "";
|
||||||
|
} else {
|
||||||
|
if (SF_uncard(@kmenu-2))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} while (@kmenu >1);
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Subfunction SF_uncard (equipment-position)
|
||||||
|
//Attempts to uncard the equipment.
|
||||||
|
function SF_uncard {
|
||||||
|
set @part, getarg(0);
|
||||||
|
if(getequipcardcnt(@part) == 0) {
|
||||||
|
callfunc "F_keIntro", e_ag, "There are no cards to remove there!";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
set @cost, $@keuc_BaseCost;
|
||||||
|
set @cost, @cost + $@keuc_CardCost*getequipcardcnt(@part);
|
||||||
|
|
||||||
|
switch (getequipweaponlv(@part)) {
|
||||||
|
case 0: //Armor
|
||||||
|
set @upgradeCost, $@keuc_UpgradeCostA;
|
||||||
|
break;
|
||||||
|
case 1: //Lv1 Weapons
|
||||||
|
set @upgradeCost, $@keuc_UpgradeCostW1;
|
||||||
|
break;
|
||||||
|
case 2: //Lv2 Weapons
|
||||||
|
set @upgradeCost, $@keuc_UpgradeCostW2;
|
||||||
|
break;
|
||||||
|
case 3: //Lv3 Weapons
|
||||||
|
set @upgradeCost, $@keuc_UpgradeCostW3;
|
||||||
|
break;
|
||||||
|
default: //Lv4 Weapons
|
||||||
|
set @upgradeCost, $@keuc_UpgradeCostW4;
|
||||||
|
}
|
||||||
|
|
||||||
|
set @cost, @cost + @upgradeCost*getequiprefinerycnt(@part);
|
||||||
|
|
||||||
|
set @price, callfunc("F_keCost",@cost,$@keuc_discount);
|
||||||
|
|
||||||
|
if ($@keuc_Fail1Chance) {
|
||||||
|
set @failsave, select(
|
||||||
|
"- Cancel",
|
||||||
|
"- Remove cards ("+@price+"z, item gets priority)",
|
||||||
|
"- Remove cards ("+@price+"z, cards get priority)",
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
set @failsave, select(
|
||||||
|
"- Cancel",
|
||||||
|
"- Remove cards ("+@price+"z)"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (@failsave == 1)
|
||||||
|
return 0;
|
||||||
|
set @failsave, @failsave-1; //1: Save item, 2: Save Card
|
||||||
|
|
||||||
|
if (($@keuc_Mat1 && countitem($@keuc_Mat1) < $@keuc_Qty1)
|
||||||
|
|| ($@keuc_Mat2 && countitem($@keuc_Mat2) < $@keuc_Qty2)) {
|
||||||
|
callfunc "F_keIntro", e_pif, "You do not have all the materials I need...";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(callfunc("F_keCharge",@cost,$@keuc_discount,1))) {
|
||||||
|
callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($@keuc_Mat1 && $@keuc_Qty1)
|
||||||
|
delitem $@keuc_Mat1, $@keuc_Qty1;
|
||||||
|
if ($@keuc_Mat2 && $@keuc_Qty2)
|
||||||
|
delitem $@keuc_Mat2, $@keuc_Qty2;
|
||||||
|
|
||||||
|
set @failtype,-1;
|
||||||
|
//Recycling cost...
|
||||||
|
set @cost, rand(1000);
|
||||||
|
if (@cost < $@keuc_Fail2Chance) //Total Failure
|
||||||
|
set @failtype, 0;
|
||||||
|
else if (@cost < $@keuc_Fail1Chance) //Partial Failure
|
||||||
|
set @failtype, @failsave;
|
||||||
|
else if (@cost < $@keuc_Fail0Chance) //Harmless Failure
|
||||||
|
set @failtype, 3;
|
||||||
|
else { //Success
|
||||||
|
successremovecards @part;
|
||||||
|
emotion e_ho;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
failedremovecards @part,@failtype;
|
||||||
|
if (@failtype == 1)
|
||||||
|
mes "The cards were lost...";
|
||||||
|
if (@failtype == 2)
|
||||||
|
mes "The item was lost...";
|
||||||
|
if (@failtype == 0)
|
||||||
|
mes "Lost the cards and item...";
|
||||||
|
callfunc "F_keIntro", e_swt, "...oops.";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
1508
npc/custom/eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt
Normal file
1508
npc/custom/eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt
Normal file
File diff suppressed because it is too large
Load Diff
156
npc/custom/eAAC_Scripts/kafraExpress/ke_warp_pvp.txt
Normal file
156
npc/custom/eAAC_Scripts/kafraExpress/ke_warp_pvp.txt
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Pvp Warping Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 1.7
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3424+
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Offers warping to the PvP arenas.
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_warpPvp {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadWarpPvp";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_keWarpPvp {
|
||||||
|
|
||||||
|
function SF_pvpMenu;
|
||||||
|
|
||||||
|
set @cost,callfunc("F_keCost",1,100);
|
||||||
|
if ($@kewp_advanced == 0) {
|
||||||
|
SF_pvpMenu 1,$@kewp_cost,100,0,0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
if ($@kewp_showOnline) {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Cancel",
|
||||||
|
"- All Levels Rooms ("+($@kewp_cost*@cost)+"z/"+(getmapusers("pvp_n_8-1.gat")+getmapusers("pvp_n_8-2.gat")
|
||||||
|
+getmapusers("pvp_n_8-3.gat")+getmapusers("pvp_n_8-4.gat")+getmapusers("pvp_n_8-5.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Levels "+($@kewp_baseLv1-$@kewp_range)+"-"+($@kewp_baseLv1+$@kewp_range)+" Rooms ("+($@kewp_cost1*@cost)+"z/"
|
||||||
|
+(getmapusers("pvp_n_1-1.gat")+getmapusers("pvp_n_1-2.gat")+getmapusers("pvp_n_1-3.gat")
|
||||||
|
+getmapusers("pvp_n_1-4.gat")+getmapusers("pvp_n_1-5.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Levels "+($@kewp_baseLv2-$@kewp_range)+"-"+($@kewp_baseLv2+$@kewp_range)+" Rooms ("+($@kewp_cost2*@cost)+"z/"
|
||||||
|
+(getmapusers("pvp_n_2-1.gat")+getmapusers("pvp_n_2-2.gat")+getmapusers("pvp_n_2-3.gat")
|
||||||
|
+getmapusers("pvp_n_2-4.gat")+getmapusers("pvp_n_2-5.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Levels "+($@kewp_baseLv3-$@kewp_range)+"-"+($@kewp_baseLv3+$@kewp_range)+" Rooms ("+($@kewp_cost3*@cost)+"z/"
|
||||||
|
+(getmapusers("pvp_n_3-1.gat")+getmapusers("pvp_n_3-2.gat")+getmapusers("pvp_n_3-3.gat")
|
||||||
|
+getmapusers("pvp_n_3-4.gat")+getmapusers("pvp_n_3-5.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Levels "+($@kewp_baseLv4-$@kewp_range)+"-"+($@kewp_baseLv4+$@kewp_range)+" Rooms ("+($@kewp_cost4*@cost)+"z/"
|
||||||
|
+(getmapusers("pvp_n_4-1.gat")+getmapusers("pvp_n_4-2.gat")+getmapusers("pvp_n_4-3.gat")
|
||||||
|
+getmapusers("pvp_n_4-4.gat")+getmapusers("pvp_n_4-5.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Levels "+($@kewp_baseLv5-$@kewp_range)+"-"+($@kewp_baseLv5+$@kewp_range)+" Rooms ("+($@kewp_cost5*@cost)+"z/"
|
||||||
|
+(getmapusers("pvp_n_5-1.gat")+getmapusers("pvp_n_5-2.gat")+getmapusers("pvp_n_5-3.gat")
|
||||||
|
+getmapusers("pvp_n_5-4.gat")+getmapusers("pvp_n_5-5.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Levels "+($@kewp_baseLv6-$@kewp_range)+"-"+($@kewp_baseLv6+$@kewp_range)+" Rooms ("+($@kewp_cost6*@cost)+"z/"
|
||||||
|
+(getmapusers("pvp_n_6-1.gat")+getmapusers("pvp_n_6-2.gat")+getmapusers("pvp_n_6-3.gat")
|
||||||
|
+getmapusers("pvp_n_6-4.gat")+getmapusers("pvp_n_6-5.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Levels "+($@kewp_baseLv7-$@kewp_range)+"-"+($@kewp_baseLv7+$@kewp_range)+" Rooms ("+($@kewp_cost7*@cost)+"z/"
|
||||||
|
+(getmapusers("pvp_n_7-1.gat")+getmapusers("pvp_n_7-2.gat")+getmapusers("pvp_n_7-3.gat")
|
||||||
|
+getmapusers("pvp_n_7-4.gat")+getmapusers("pvp_n_7-5.gat"))+" "+$@ked_users$+")"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Cancel",
|
||||||
|
"- No Level Restriction Rooms ("+($@kewp_cost*@cost)+"z)",
|
||||||
|
"- Levels "+($@kewp_baseLv1-$@kewp_range)+"-"+($@kewp_baseLv1+$@kewp_range)+" Rooms ("+($@kewp_cost1*@cost)+"z)",
|
||||||
|
"- Levels "+($@kewp_baseLv2-$@kewp_range)+"-"+($@kewp_baseLv2+$@kewp_range)+" Rooms ("+($@kewp_cost2*@cost)+"z)",
|
||||||
|
"- Levels "+($@kewp_baseLv3-$@kewp_range)+"-"+($@kewp_baseLv3+$@kewp_range)+" Rooms ("+($@kewp_cost3*@cost)+"z)",
|
||||||
|
"- Levels "+($@kewp_baseLv4-$@kewp_range)+"-"+($@kewp_baseLv4+$@kewp_range)+" Rooms ("+($@kewp_cost4*@cost)+"z)",
|
||||||
|
"- Levels "+($@kewp_baseLv5-$@kewp_range)+"-"+($@kewp_baseLv5+$@kewp_range)+" Rooms ("+($@kewp_cost5*@cost)+"z)",
|
||||||
|
"- Levels "+($@kewp_baseLv6-$@kewp_range)+"-"+($@kewp_baseLv6+$@kewp_range)+" Rooms ("+($@kewp_cost6*@cost)+"z)",
|
||||||
|
"- Levels "+($@kewp_baseLv7-$@kewp_range)+"-"+($@kewp_baseLv7+$@kewp_range)+" Rooms ("+($@kewp_cost7*@cost)+"z)"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
switch(@kmenu) {
|
||||||
|
case 2: //No restrictions
|
||||||
|
SF_pvpMenu 8,$@kewp_cost,100,0,0;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
SF_pvpMenu 1,$@kewp_cost1,100,$@kewp_baseLv1-$@kewp_range,$@kewp_baseLv1+$@kewp_range;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
SF_pvpMenu 2,$@kewp_cost2,100,$@kewp_baseLv2-$@kewp_range,$@kewp_baseLv2+$@kewp_range;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
SF_pvpMenu 3,$@kewp_cost3,100,$@kewp_baseLv3-$@kewp_range,$@kewp_baseLv3+$@kewp_range;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
SF_pvpMenu 4,$@kewp_cost4,100,$@kewp_baseLv4-$@kewp_range,$@kewp_baseLv4+$@kewp_range;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
SF_pvpMenu 5,$@kewp_cost5,100,$@kewp_baseLv5-$@kewp_range,$@kewp_baseLv5+$@kewp_range;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
SF_pvpMenu 6,$@kewp_cost6,100,$@kewp_baseLv6-$@kewp_range,$@kewp_baseLv6+$@kewp_range;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
SF_pvpMenu 7,$@kewp_cost7,100,$@kewp_baseLv7-$@kewp_range,$@kewp_baseLv7+$@kewp_range;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (@kmenu > 1);
|
||||||
|
return;
|
||||||
|
|
||||||
|
//SubFunction: SF_pvpMenu (int map-group, int cost, int min level, int max level)
|
||||||
|
//Displays the list of the five available Pvp rooms to warp to.
|
||||||
|
//map-group is the first index of the pvp map names (in pvp_n_2-3.gat it would be 2)
|
||||||
|
function SF_pvpMenu {
|
||||||
|
if (getarg(4)) {
|
||||||
|
if (BaseLevel < getarg(3)) {
|
||||||
|
callfunc "F_keIntro", e_sry, "Sorry, you need at least level "+getarg(2)+" to enter these arenas.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (BaseLevel > getarg(4)) {
|
||||||
|
callfunc "F_keIntro", e_bzz, "Sorry, people above level "+getarg(3)+" are not allowed within these arenas.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
set @msg$,"levels "+getarg(3)+"-"+getarg(3);
|
||||||
|
} else
|
||||||
|
set @msg$,"all levels";
|
||||||
|
if ($@kewp_showOnline) {
|
||||||
|
set @submenu, select(
|
||||||
|
"- Cancel Warp (Rooms for "+@msg$+"/"+(getarg(1)*@cost)+"z)",
|
||||||
|
"- Room Sandwich ("+getmapusers("pvp_n_"+getarg(0)+"-1.gat")+" "+$@ked_users$+")",
|
||||||
|
"- Room Rock On ("+getmapusers("pvp_n_"+getarg(0)+"-2.gat")+" "+$@ked_users$+")",
|
||||||
|
"- Four Room ("+getmapusers("pvp_n_"+getarg(0)+"-3.gat")+" "+$@ked_users$+")",
|
||||||
|
"- Room Undercross ("+getmapusers("pvp_n_"+getarg(0)+"-4.gat")+" "+$@ked_users$+")",
|
||||||
|
"- Room Compass ("+getmapusers("pvp_n_"+getarg(0)+"-5.gat")+" "+$@ked_users$+")"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
set @submenu, select(
|
||||||
|
"- Cancel Warp (Rooms for "+@msg$+"/"+(getarg(1)*@cost)+"z)",
|
||||||
|
"- Room Sandwich",
|
||||||
|
"- Room Rock On",
|
||||||
|
"- Four Room",
|
||||||
|
"- Room Undercross",
|
||||||
|
"- Room Compass"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2:
|
||||||
|
callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-1.gat",-1,-1;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-2.gat",-1,-1;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-3.gat",-1,-1;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-4.gat",-1,-1;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-5.gat",-1,-1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
295
npc/custom/eAAC_Scripts/kafraExpress/ke_warp_town.txt
Normal file
295
npc/custom/eAAC_Scripts/kafraExpress/ke_warp_town.txt
Normal file
@ -0,0 +1,295 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - Warping Town Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 1.8
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3424+, RO Episode 8+ (LightHalzen)
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Offers warp services to towns.
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_warpTown {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadWarpTown";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_keWarpTown {
|
||||||
|
|
||||||
|
function SF_check;
|
||||||
|
function SF_warp;
|
||||||
|
|
||||||
|
set @cost,callfunc("F_keCost",$@kewt_cost,$@kewt_discount);
|
||||||
|
set @niflcost,callfunc("F_keCost",$@kewt_niflCost,$@kewd_discount);
|
||||||
|
if (@cost > Zeny && $@kewt_free)
|
||||||
|
set @cost, Zeny;
|
||||||
|
do {
|
||||||
|
if ($@kewt_showOnline) {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Cancel",
|
||||||
|
"- Alberta ("+@cost+"z/"+(getmapusers("alberta.gat")+getmapusers("alberta_in.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Al De Baran ("+@cost+"z/"+(getmapusers("aldebaran.gat")+getmapusers("aldeba_in.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Amatsu ("+@cost+"z/"+(getmapusers("amatsu.gat")+getmapusers("ama_in01.gat")+getmapusers("ama_in02.gat"))
|
||||||
|
+" "+$@ked_users$+")",
|
||||||
|
"- Ayothaya ("+@cost+"z/"+(getmapusers("ayothaya.gat")+getmapusers("ayo_in01.gat")+getmapusers("ayo_in02.gat"))
|
||||||
|
+" "+$@ked_users$+")",
|
||||||
|
"- Comodo ("+@cost+"z/"+(getmapusers("comodo.gat")+getmapusers("cmd_in01.gat")+getmapusers("cmd_in02.gat"))
|
||||||
|
+" "+$@ked_users$+")",
|
||||||
|
"- Einbech ("+@cost+"z/"+(getmapusers("einbech.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Einbroch ("+@cost+"z/"+(getmapusers("einbroch.gat")+getmapusers("ein_in01.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Geffen ("+@cost+"z/"+(getmapusers("geffen.gat")+getmapusers("geffen_in.gat")+getmapusers("gef_tower.gat"))
|
||||||
|
+" "+$@ked_users$+")",
|
||||||
|
"- Gon Ryun ("+@cost+"z/"+(getmapusers("gonryun.gat")+getmapusers("gon_in.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Izlude ("+@cost+"z/"+(getmapusers("izlude.gat")+getmapusers("izlude_in.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Jawaii ("+@cost+"z/"+(getmapusers("jawaii.gat")+getmapusers("jawaii_in.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- LightHalzen ("+@cost+"z/"+(getmapusers("lighthalzen.gat")+getmapusers("lhz_in01.gat")
|
||||||
|
+getmapusers("lhz_in02.gat")+getmapusers("lhz_in03.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Lou Yang ("+@cost+"z/"+(getmapusers("louyang.gat")+getmapusers("lou_in01.gat")+getmapusers("lou_in02.gat"))
|
||||||
|
+" "+$@ked_users$+")",
|
||||||
|
"- Lutie ("+@cost+"z/"+(getmapusers("xmas.gat")+getmapusers("xmas_in.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Morroc ("+@cost+"z/"+(getmapusers("morocc.gat")+getmapusers("morocc_in.gat")+getmapusers("moc_castle.gat"))
|
||||||
|
+" "+$@ked_users$+")",
|
||||||
|
"- Niflheim ("+@niflcost+"z/"+(getmapusers("niflheim.gat")+getmapusers("nif_in.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Payon ("+@cost+"z/"+(getmapusers("payon.gat")+getmapusers("payon_in01.gat")+getmapusers("payon_in02.gat"))
|
||||||
|
+" "+$@ked_users$+")",
|
||||||
|
"- Prontera ("+@cost+"z/"+(getmapusers("prontera.gat")+getmapusers("prt_castle.gat")
|
||||||
|
+getmapusers("prt_church.gat")+getmapusers("prt_in.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Umbala ("+@cost+"z/"+(getmapusers("umbala.gat")+getmapusers("um_in.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Yuno ("+@cost+"z/"+(getmapusers("yuno.gat")+getmapusers("yuno_in01.gat")+getmapusers("yuno_in02.gat")
|
||||||
|
+getmapusers("yuno_in03.gat")+getmapusers("yuno_in04.gat")+getmapusers("yuno_in05.gat"))+" "+$@ked_users$+")"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Cancel",
|
||||||
|
"- Alberta ("+@cost+"z)",
|
||||||
|
"- Al De Baran ("+@cost+"z)",
|
||||||
|
"- Amatsu ("+@cost+"z)",
|
||||||
|
"- Ayothaya ("+@cost+"z)",
|
||||||
|
"- Comodo ("+@cost+"z)",
|
||||||
|
"- Einbech ("+@cost+"z)",
|
||||||
|
"- Einbroch ("+@cost+"z)",
|
||||||
|
"- Geffen ("+@cost+"z)",
|
||||||
|
"- Gon Ryun ("+@cost+"z)",
|
||||||
|
"- Izlude ("+@cost+"z)",
|
||||||
|
"- Jawaii ("+@cost+"z)",
|
||||||
|
"- LightHalzen ("+@cost+"z)",
|
||||||
|
"- Lou Yang ("+@cost+"z)",
|
||||||
|
"- Lutie ("+@cost+"z)",
|
||||||
|
"- Morroc ("+@cost+"z)",
|
||||||
|
"- Niflheim ("+@niflcost+"z)",
|
||||||
|
"- Payon ("+@cost+"z)",
|
||||||
|
"- Prontera ("+@cost+"z)",
|
||||||
|
"- Umbala ("+@cost+"z)",
|
||||||
|
"- Yuno ("+@cost+"z)"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
switch (@kmenu) {
|
||||||
|
case 2: //Alberta
|
||||||
|
if (SF_check(ketw_alberta, #ketw_alberta))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"alberta.gat",117,56;
|
||||||
|
break;
|
||||||
|
case 3: //AlDeBaran
|
||||||
|
if (SF_check(ketw_aldebaran, #ketw_aldebaran))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"aldebaran.gat",139,124;
|
||||||
|
break;
|
||||||
|
case 4: //Amatsu
|
||||||
|
if (SF_check(ketw_amatsu, #ketw_amatsu))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"amatsu.gat",197,88;
|
||||||
|
break;
|
||||||
|
case 5: //Ayathoya
|
||||||
|
if (SF_check(ketw_ayothaya, #ketw_ayothaya))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"ayothaya.gat",202,174;
|
||||||
|
break;
|
||||||
|
case 6: //Comodo
|
||||||
|
if (SF_check(ketw_comodo, #ketw_comodo))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"comodo.gat",189,150;
|
||||||
|
break;
|
||||||
|
case 7: //Einbech
|
||||||
|
if (SF_check(ketw_einbech, #ketw_einbech))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"einbech.gat",165,127;
|
||||||
|
break;
|
||||||
|
case 8: //Einbroch
|
||||||
|
if (SF_check(ketw_einbroch, #ketw_einbroch))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"einbroch.gat",64,199;
|
||||||
|
break;
|
||||||
|
case 9: //Geffen
|
||||||
|
if (SF_check(ketw_geffen, #ketw_geffen))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"geffen.gat",120,66;
|
||||||
|
break;
|
||||||
|
case 10: //GonRyun
|
||||||
|
if (SF_check(ketw_gonryun, #ketw_gonryun))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"gonryun.gat",160,180;
|
||||||
|
break;
|
||||||
|
case 11: //Izlude
|
||||||
|
if (SF_check(ketw_izlude, #ketw_izlude))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"izlude.gat",127,97;
|
||||||
|
break;
|
||||||
|
case 12: //Jawaii
|
||||||
|
if (SF_check(ketw_jawaii, #ketw_jawaii))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"jawaii.gat",214,223;
|
||||||
|
break;
|
||||||
|
case 13: //LightHalzen
|
||||||
|
if (SF_check(ketw_lighthalzen, #ketw_lighthalzen))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"lighthalzen.gat",158,92;
|
||||||
|
break;
|
||||||
|
case 14: //LouYang
|
||||||
|
if (SF_check(ketw_louyang, #ketw_louyang))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"louyang.gat",218,118;
|
||||||
|
break;
|
||||||
|
case 15: //Lutie
|
||||||
|
if (SF_check(ketw_lutie, #ketw_lutie))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"xmas.gat",148,133;
|
||||||
|
break;
|
||||||
|
case 16: //Morroc
|
||||||
|
if (SF_check(ketw_morroc, #ketw_morroc))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"morocc.gat",162,91;
|
||||||
|
break;
|
||||||
|
case 17: //Niflheim
|
||||||
|
if (SF_check(ketw_niflheim, #ketw_niflheim)) {
|
||||||
|
if (nif_q_done != 1) {
|
||||||
|
mes "...?";
|
||||||
|
callfunc "F_keIntro", e_no, "For some reason I can't warp you there!";
|
||||||
|
} else
|
||||||
|
callfunc "F_keWarp",$@kewt_niflCost,$@kewd_discount,e_yawn,"niflheim.gat",194,185;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 18: //Payon
|
||||||
|
if (SF_check(ketw_payon, #ketw_payon))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"payon.gat",159,181;
|
||||||
|
case 19: //Prontera
|
||||||
|
if (SF_check(ketw_prontera, #ketw_prontera))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"prontera.gat",156,175;
|
||||||
|
break;
|
||||||
|
case 20: //Umbala
|
||||||
|
if (SF_check(ketw_umbala, #ketw_umbala))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"umbala.gat",88,153;
|
||||||
|
break;
|
||||||
|
case 21: //Yuno
|
||||||
|
if (SF_check(ketw_yuno, #ketw_yuno))
|
||||||
|
SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"yuno.gat",158,77;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (@kmenu > 1);
|
||||||
|
return;
|
||||||
|
|
||||||
|
//SubFunction SF_check(char-flag, account_flag)
|
||||||
|
//Checks if the character can warp to that town taking into consideration
|
||||||
|
//traveller's mode.
|
||||||
|
function SF_check {
|
||||||
|
if ($@kewt_travel && getarg(0) == 0 && getarg(1) == 0) {
|
||||||
|
callfunc "F_keIntro", e_sry, "Sorry, but we can only warp you to towns you have saved in at least once.";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//SubFunction SF_warp (int cost, int discount, int emotion, String map, int x, int y)
|
||||||
|
//Modded from F_keWarp to allow free warping to towns when not enough zeny.
|
||||||
|
function SF_warp {
|
||||||
|
set @cost, getarg(0);
|
||||||
|
if (@cost > Zeny && $@kewt_free)
|
||||||
|
set @cost, Zeny;
|
||||||
|
if (!(callfunc("F_keCharge",@cost,getarg(1),1))) {
|
||||||
|
callfunc "F_keIntro", e_an, "You don't have enough Zeny...";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
emotion getarg(2);
|
||||||
|
warp getarg(3),getarg(4),getarg(5);
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Invoked when we want to add a map to the list of travelled-to towns
|
||||||
|
function script F_keAddTravelTown {
|
||||||
|
set @map$, getarg(0);
|
||||||
|
if ($@kewt_travel > 1) {
|
||||||
|
if (@map$ == "alberta.gat" || ketw_alberta)
|
||||||
|
set #ketw_alberta,1;
|
||||||
|
if (@map$ == "aldebaran.gat" || ketw_aldebaran)
|
||||||
|
set #ketw_aldebaran,1;
|
||||||
|
if (@map$ == "amatsu.gat" || ketw_amatsu)
|
||||||
|
set #ketw_amatsu,1;
|
||||||
|
if (@map$ == "ayothaya.gat" || ketw_ayothaya)
|
||||||
|
set #ketw_ayothaya,1;
|
||||||
|
if (@map$ == "comodo.gat" || ketw_comodo)
|
||||||
|
set #ketw_comodo,1;
|
||||||
|
if (@map$ == "einbech.gat" || ketw_einbech)
|
||||||
|
set #ketw_einbech,1;
|
||||||
|
if (@map$ == "einbroch.gat" || ketw_einbroch)
|
||||||
|
set #ketw_einbroch,1;
|
||||||
|
if (@map$ == "geffen.gat" || ketw_geffen)
|
||||||
|
set #ketw_geffen,1;
|
||||||
|
if (@map$ == "gonryun.gat" || ketw_gonryun)
|
||||||
|
set #ketw_gonryun,1;
|
||||||
|
if (@map$ == "izlude.gat" || ketw_izlude)
|
||||||
|
set #ketw_izlude,1;
|
||||||
|
if (@map$ == "jawaii.gat" || ketw_jawaii)
|
||||||
|
set #ketw_jawaii,1;
|
||||||
|
if (@map$ == "lighthalzen.gat" || ketw_lighthalzen)
|
||||||
|
set #ketw_lighthalzen,1;
|
||||||
|
if (@map$ == "louyang.gat" || ketw_louyang)
|
||||||
|
set #ketw_louyang,1;
|
||||||
|
if (@map$ == "xmas.gat" || ketw_lutie)
|
||||||
|
set #ketw_lutie,1;
|
||||||
|
if (@map$ == "morocc.gat" || ketw_morroc)
|
||||||
|
set #ketw_morroc,1;
|
||||||
|
if (@map$ == "niflheim.gat" || ketw_niflheim)
|
||||||
|
set #ketw_niflheim,1;
|
||||||
|
if (@map$ == "payon.gat" || ketw_payon)
|
||||||
|
set #ketw_payon,1;
|
||||||
|
if (@map$ == "prontera.gat" || ketw_prontera)
|
||||||
|
set #ketw_prontera,1;
|
||||||
|
if (@map$ == "umbala.gat" || ketw_umbala)
|
||||||
|
set #ketw_umbala,1;
|
||||||
|
if (@map$ == "yuno.gat" || ketw_yuno)
|
||||||
|
set #ketw_yuno,1;
|
||||||
|
} else {
|
||||||
|
if (@map$ == "alberta.gat")
|
||||||
|
set ketw_alberta,1;
|
||||||
|
if (@map$ == "aldebaran.gat")
|
||||||
|
set ketw_aldebaran,1;
|
||||||
|
if (@map$ == "amatsu.gat")
|
||||||
|
set ketw_amatsu,1;
|
||||||
|
if (@map$ == "ayothaya.gat")
|
||||||
|
set ketw_ayothaya,1;
|
||||||
|
if (@map$ == "comodo.gat")
|
||||||
|
set ketw_comodo,1;
|
||||||
|
if (@map$ == "einbech.gat")
|
||||||
|
set ketw_einbech,1;
|
||||||
|
if (@map$ == "einbroch.gat")
|
||||||
|
set ketw_einbroch,1;
|
||||||
|
if (@map$ == "geffen.gat")
|
||||||
|
set ketw_geffen,1;
|
||||||
|
if (@map$ == "gonryun.gat")
|
||||||
|
set ketw_gonryun,1;
|
||||||
|
if (@map$ == "izlude.gat")
|
||||||
|
set ketw_izlude,1;
|
||||||
|
if (@map$ == "jawaii.gat")
|
||||||
|
set ketw_jawaii,1;
|
||||||
|
if (@map$ == "lighthalzen.gat")
|
||||||
|
set ketw_lighthalzen,1;
|
||||||
|
if (@map$ == "louyang.gat")
|
||||||
|
set ketw_louyang,1;
|
||||||
|
if (@map$ == "xmas.gat")
|
||||||
|
set ketw_lutie,1;
|
||||||
|
if (@map$ == "morocc.gat")
|
||||||
|
set ketw_morroc,1;
|
||||||
|
if (@map$ == "niflheim.gat")
|
||||||
|
set ketw_niflheim,1;
|
||||||
|
if (@map$ == "payon.gat")
|
||||||
|
set ketw_payon,1;
|
||||||
|
if (@map$ == "prontera.gat")
|
||||||
|
set ketw_prontera,1;
|
||||||
|
if (@map$ == "umbala.gat")
|
||||||
|
set ketw_umbala,1;
|
||||||
|
if (@map$ == "yuno.gat")
|
||||||
|
set ketw_yuno,1;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
159
npc/custom/eAAC_Scripts/kafraExpress/ke_warp_woe.txt
Normal file
159
npc/custom/eAAC_Scripts/kafraExpress/ke_warp_woe.txt
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
//===== eAthena Script =======================================
|
||||||
|
//= Kafra Express - WoE Warping Module
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= Skotlex
|
||||||
|
//===== Current Version: =====================================
|
||||||
|
//= 1.7
|
||||||
|
//===== Compatible With: =====================================
|
||||||
|
//= eAthena SVN R3424+, RO Episode 4.1+ (War of Emperium)
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Part of the Kafra Express Script Package.
|
||||||
|
//= Offers warping to the War of Emperium grounds.
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= See config.txt for configuration.
|
||||||
|
//= Remove the comment on lines 52,53 and 63 to enable direct G. Dungeon warping
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
- script keInit_warpWoe {
|
||||||
|
OnInit: //Load Config
|
||||||
|
donpcevent "keConfig::OnLoadWarpWoe";
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_keWarpWOE {
|
||||||
|
if ($@kewg_check && getcharid(2) <= 0) {
|
||||||
|
callfunc "F_keIntro", e_srt, "Sorry, these warps are only available to people who belong to a Guild.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ($@kewg_checkAgit && agitcheck(0) == 0) {
|
||||||
|
callfunc "F_keIntro", e_srt, "Sorry, these warps are only enabled during the Guild Wars.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
function SF_dungeons;
|
||||||
|
set @cost, callfunc("F_keCost",100,$@kewg_discount);
|
||||||
|
|
||||||
|
do {
|
||||||
|
if ($@kewg_showOnline) {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Cancel",
|
||||||
|
"- Al De Baran Guild ("+($@kewg_alDeBaran*@cost/100)+"z/"+(getmapusers("alde_gld.gat")
|
||||||
|
+getmapusers("aldeg_cas01.gat")+getmapusers("aldeg_cas02.gat")+getmapusers("aldeg_cas03.gat")
|
||||||
|
+getmapusers("aldeg_cas04.gat")+getmapusers("aldeg_cas05.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Geffen Guild ("+($@kewg_geffen*@cost/100)+"z/"+(getmapusers("gef_fild13.gat")
|
||||||
|
+getmapusers("gefg_cas01.gat")+getmapusers("gefg_cas02.gat")+getmapusers("gefg_cas03.gat")
|
||||||
|
+getmapusers("gefg_cas04.gat")+getmapusers("gefg_cas05.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Payon Guild ("+($@kewg_payon*@cost/100)+"z/"+(getmapusers("pay_gld.gat")
|
||||||
|
+getmapusers("payg_cas01.gat")+getmapusers("payg_cas02.gat")+getmapusers("payg_cas03.gat")
|
||||||
|
+getmapusers("payg_cas04.gat")+getmapusers("payg_cas05.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- Prontera Guild ("+($@kewg_prontera*@cost/100)+"z/"+(getmapusers("prt_gld.gat")
|
||||||
|
+getmapusers("prtg_cas01.gat")+getmapusers("prtg_cas02.gat")+getmapusers("prtg_cas03.gat")
|
||||||
|
+getmapusers("prtg_cas04.gat")+getmapusers("prtg_cas05.gat"))+" "+$@ked_users$+")",
|
||||||
|
// "- Guild Dungeons ("+(getmapusers("gld_dun01.gat")+getmapusers("gld_dun02.gat")
|
||||||
|
// +getmapusers("gld_dun03.gat")+getmapusers("gld_dun04.gat"))+" "+$@ked_users$+")",
|
||||||
|
"- See "+$@ked_users$+" distribution"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
set @kmenu, select(
|
||||||
|
"- Cancel",
|
||||||
|
"- Al De Baran Guild ("+($@kewg_alDeBaran*@cost/100)+"z)",
|
||||||
|
"- Geffen Guild ("+($@kewg_geffen*@cost/100)+"z)",
|
||||||
|
"- Payon Guild ("+($@kewg_payon*@cost/100)+"z)",
|
||||||
|
"- Prontera Guild ("+($@kewg_prontera*@cost/100)+"z)"
|
||||||
|
// ,"- Guild Dungeons"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
switch (@kmenu) {
|
||||||
|
case 2: //Al De Baran
|
||||||
|
callfunc "F_keWarp",$@kewg_alDeBaran,$@kewg_discount,44,"alde_gld.gat",153,160;
|
||||||
|
break;
|
||||||
|
case 3: //Geffen
|
||||||
|
callfunc "F_keWarp",$@kewg_geffen,$@kewg_discount,44,"gef_fild13.gat",243,180;
|
||||||
|
break;
|
||||||
|
case 4: //Payon
|
||||||
|
callfunc "F_keWarp",$@kewg_payon,$@kewg_discount,44,"pay_gld.gat",249,177;
|
||||||
|
break;
|
||||||
|
case 5: //Prontera
|
||||||
|
callfunc "F_keWarp",$@kewg_prontera,$@kewg_discount,44,"prt_gld.gat",119,160;
|
||||||
|
break;
|
||||||
|
case 6: //Guild Dungeons
|
||||||
|
SF_dungeons();
|
||||||
|
break;
|
||||||
|
case 7: //Info
|
||||||
|
mes "The current distribution of "+$@ked_users$+" is as follows:";
|
||||||
|
next;
|
||||||
|
mes "[Al De Baran]";
|
||||||
|
mes "- Guild Grounds: "+getmapusers("alde_gld.gat");
|
||||||
|
mes "- Castle 1 - Noisyubantian: "+getmapusers("aldeg_cas01.gat");
|
||||||
|
mes "- Castle 2 - Hohensyubangawoo: "+getmapusers("aldeg_cas02.gat");
|
||||||
|
mes "- Castle 3 - Nyirenverk: "+getmapusers("aldeg_cas03.gat");
|
||||||
|
mes "- Castle 4 - Byirtsburi: "+getmapusers("aldeg_cas04.gat");
|
||||||
|
mes "- Castle 5 - Rotenburk: "+getmapusers("aldeg_cas05.gat");
|
||||||
|
next;
|
||||||
|
mes "[Geffen]";
|
||||||
|
mes "- Guild Grounds: "+getmapusers("gef_fild13.gat");
|
||||||
|
mes "- Castle 1 - Reprion: "+getmapusers("gefg_cas01.gat");
|
||||||
|
mes "- Castle 2 - Yolbriger: "+getmapusers("gefg_cas02.gat");
|
||||||
|
mes "- Castle 3 - Isinlife: "+getmapusers("gefg_cas03.gat");
|
||||||
|
mes "- Castle 4 - Berigel: "+getmapusers("gefg_cas04.gat");
|
||||||
|
mes "- Castle 5 - Melsedetsu: "+getmapusers("gefg_cas05.gat");
|
||||||
|
next;
|
||||||
|
mes "[Payon]";
|
||||||
|
mes "- Guild Grounds: "+getmapusers("pay_gld.gat");
|
||||||
|
mes "- Castle 1 - Mingting: "+getmapusers("payg_cas01.gat");
|
||||||
|
mes "- Castle 2 - Tiantan: "+getmapusers("payg_cas02.gat");
|
||||||
|
mes "- Castle 3 - Fuying: "+getmapusers("payg_cas03.gat");
|
||||||
|
mes "- Castle 4 - Honglou: "+getmapusers("payg_cas04.gat");
|
||||||
|
mes "- Castle 5 - Zhulinxian: "+getmapusers("payg_cas05.gat");
|
||||||
|
next;
|
||||||
|
mes "[Prontera]";
|
||||||
|
mes "- Guild Grounds: "+getmapusers("prt_gld.gat");
|
||||||
|
mes "- Castle 1 - Creamhilt: "+getmapusers("prtg_cas01.gat");
|
||||||
|
mes "- Castle 2 - Sbanhealt: "+getmapusers("prtg_cas02.gat");
|
||||||
|
mes "- Castle 3 - Lazrigees: "+getmapusers("prtg_cas03.gat");
|
||||||
|
mes "- Castle 4 - Squagul: "+getmapusers("prtg_cas04.gat");
|
||||||
|
mes "- Castle 5 - Guindull: "+getmapusers("prtg_cas05.gat");
|
||||||
|
next;
|
||||||
|
callfunc "F_keIntro", -1, "";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (@kmenu > 1);
|
||||||
|
return;
|
||||||
|
|
||||||
|
function SF_dungeons {
|
||||||
|
do {
|
||||||
|
if ($@kewg_showOnline) {
|
||||||
|
set @submenu, select(
|
||||||
|
"- Cancel",
|
||||||
|
"- Baldur Dungeon ("+($@kewg_baldur*@cost/100)+"z/"+getmapusers("gld_dun01.gat")+" "+$@ked_users$+")",
|
||||||
|
"- Luina Dungeon ("+($@kewg_luina*@cost/100)+"z/"+getmapusers("gld_dun02.gat")+" "+$@ked_users$+")",
|
||||||
|
"- Valkyrie Dungeon ("+($@kewg_valkyrie*@cost/100)+"z/"+getmapusers("gld_dun03.gat")+" "+$@ked_users$+")",
|
||||||
|
"- Britoniah Dungeon ("+($@kewg_britoniah*@cost/100)+"z/"+getmapusers("gld_dun04.gat")+" "+$@ked_users$+")"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
set @submenu, select(
|
||||||
|
"- Cancel",
|
||||||
|
"- Baldur Dungeon ("+($@kewg_baldur*@cost/100)+"z)",
|
||||||
|
"- Luina Dungeon ("+($@kewg_luina*@cost/100)+"z)",
|
||||||
|
"- Valkyrie Dungeon ("+($@kewg_valkyrie*@cost/100)+"z)",
|
||||||
|
"- Britoniah Dungeon ("+($@kewg_britoniah*@cost/100)+"z)"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
switch (@submenu) {
|
||||||
|
case 2: //Baldur
|
||||||
|
callfunc "F_keWarp",$@kewg_baldur,$@kewg_discount,44,"gld_dun01.gat",119,18;
|
||||||
|
break;
|
||||||
|
case 3: //Luina
|
||||||
|
callfunc "F_keWarp",$@kewg_luina,$@kewg_discount,44,"gld_dun02.gat",174,113;
|
||||||
|
break;
|
||||||
|
case 4: //Valkyrie
|
||||||
|
callfunc "F_keWarp",$@kewg_valkyrie,$@kewg_discount,44,"gld_dun03.gat",37,34;
|
||||||
|
break;
|
||||||
|
case 5: //Britoniah
|
||||||
|
callfunc "F_keWarp",$@kewg_britoniah,$@kewg_discount,44,"gld_dun04.gat",42,230;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (@submenu > 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
1173
npc/custom/eAAC_Scripts/kafraExpress/readme.txt
Normal file
1173
npc/custom/eAAC_Scripts/kafraExpress/readme.txt
Normal file
File diff suppressed because it is too large
Load Diff
421
npc/custom/eAAC_Scripts/messageboards.txt
Normal file
421
npc/custom/eAAC_Scripts/messageboards.txt
Normal file
@ -0,0 +1,421 @@
|
|||||||
|
geffen.gat,122,102,4 script Message Man 774,{
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "Hello, I am here to serve you. Enjoy my service. ^_-";
|
||||||
|
next;
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "Please keep in mind, that all messages are wiped once every two days";
|
||||||
|
mes "-Msg From Creator- In new version this will be set able, look forward to this! -End Msg From Creator-";
|
||||||
|
next;
|
||||||
|
L_Menu01:
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "What would you like to do??";
|
||||||
|
next;
|
||||||
|
if((getgmlevel(0) >= 90)) menu "Public board",L_pubgmmenu,"Gm Board",L_gmmenu,"Close Public Board",L_clospub,"Open Public Board",L_openpub;
|
||||||
|
if(($messagepubclose == 1)) goto L_pubclosed;
|
||||||
|
menu "Read messages!",L_readmsg,"Post a message!",L_Postmsg,"Leave",L_leave;
|
||||||
|
L_pubgmmenu:
|
||||||
|
if(($messagepubclose == 1)) goto L_pubclosed;
|
||||||
|
menu "Re-set the rotation",L_setrot,"Reset Message",L_Clearmsgs,"Read messages!",L_readmsg,"Post a message!",L_Postmsg,"Leave",L_leave;
|
||||||
|
L_gmmenu:
|
||||||
|
menu "Read messages!",L_gmboardread,"Post a Message!",L_gmboardpost,"Reset Messages",L_gmboardreset;
|
||||||
|
|
||||||
|
L_openpub:
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "Are you sure?";
|
||||||
|
menu "Yes",-,"No",L_openpubn;
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "It is done.";
|
||||||
|
close2;
|
||||||
|
set $messagepubclose,0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
L_openpubn:
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "Very well it shall remain closed.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_pubclosed:
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "Im sorry. The public boards are currently Closed.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_clospub:
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "Are you sure?";
|
||||||
|
next;
|
||||||
|
menu "Yes.",-,"No",L_closepubn;
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "Very well I will not allow anyone into the public board.";
|
||||||
|
close2;
|
||||||
|
set $messagepubclose,1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
L_closepubn:
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "Have a nice day";
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_gmboardreset:
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "This will require atleast 2 GM's approval to reset the gm board.";
|
||||||
|
mes "-Msg From Creator- This is bugged same gm can vote twice. Planned to revise in next version. -End Msg From Creator-";
|
||||||
|
next;
|
||||||
|
menu "Vote for reset.",L_gmboardresetvote,"Back to main.",L_Menu01,"Leave.",L_leave;
|
||||||
|
|
||||||
|
L_gmboardresetvote:
|
||||||
|
callfunc "F_gmresetcheck";
|
||||||
|
set @tempid,getcharid(0);
|
||||||
|
set $gmboardresetvotenumb,$gmboardresetvotenumb+1;
|
||||||
|
set $gmboardresetvoted[$gmboardresetvotenumb],1;
|
||||||
|
set $gmboardresetvoteid[$gmboardresetvotenumb],@tempid;
|
||||||
|
set @tempid,0;
|
||||||
|
set $gmboardreset,$gmboardreset-1;
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "Thank you.";
|
||||||
|
next;
|
||||||
|
if(($gmboardreset == 0)) goto L_gmresetdone;
|
||||||
|
if(($gmboardreset >= 1)) goto L_gmresetnotdone;
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_gmresetdone:
|
||||||
|
deletearray $gmmessageboardpost$[1],$gmmessageboardpostnumber;
|
||||||
|
deletearray $gmmessageboardpostdate$[1],$gmmessageboardpostnumber;
|
||||||
|
deletearray $gmmessageboardpostname$[1],$gmmessageboardpostnumber;
|
||||||
|
deletearray $gmmessageboardeditdate$[1],$gmmessageboardpostnumber;
|
||||||
|
deletearray $gmboardresetvoted[1],$gmboardresetvotenumber;
|
||||||
|
deletearray $gmboardresetvoted[1],$gmboardresetvotenumber;
|
||||||
|
deletearray $gmboardresetvoteid[1],$gmboardresetvotenumber;
|
||||||
|
set $gmboardresetvotenumber,0;
|
||||||
|
set $gmboardreset,2;
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "The reset has been done.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_gmresetnotdone:
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "There needs to be "+$gmboardreset+" more gm(s) approval to do the reset.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_gmboardread:
|
||||||
|
if(($gmmessageboardpostnumber == 0)) goto L_msgno;
|
||||||
|
callfunc "F_gmmessage";
|
||||||
|
end;
|
||||||
|
|
||||||
|
L_gmboardpost:
|
||||||
|
if(($gmmessageboardpostnumber >= 127)) goto L_postmsgyestm;
|
||||||
|
set @gmmessageboardpostername$,strcharinfo(0);
|
||||||
|
set @gmmessageboarddate$,gettimestr("%Y-%m/%d %H:%M:%S",21);
|
||||||
|
set $gmmessageboardpostnumber,$gmmessageboardpostnumber+1;
|
||||||
|
input @gmmsgboardmsgt$;
|
||||||
|
set $gmmessageboardpost$[$gmmessageboardpostnumber],@gmmsgboardmsgt$;
|
||||||
|
set $gmmessageboardpostdate$[$gmmessageboardpostnumber],@gmmessageboarddate$;
|
||||||
|
set $gmmessageboardpostname$[$gmmessageboardpostnumber],@gmmessageboardpostername$;
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "Here is what your message looks like";
|
||||||
|
next;
|
||||||
|
mes "Posted by: "+$gmmessageboardpostname$[$gmmessageboardpostnumber]+".";
|
||||||
|
mes "On: "+$gmmessageboardpostdate$[$gmmessageboardpostnumber]+".";
|
||||||
|
mes $gmmessageboardpost$[$gmmessageboardpostnumber];
|
||||||
|
close;
|
||||||
|
|
||||||
|
|
||||||
|
L_setrot:
|
||||||
|
set $@determinedayrotation,gettime(4); //this determines the day rotation for clearing messages.
|
||||||
|
if(($@determinedayrotation == 0)) set $rotation,0;
|
||||||
|
if(($@determinedayrotation == 1)) set $rotation,1;
|
||||||
|
if(($@determinedayrotation == 2)) set $rotation,0;
|
||||||
|
if(($@determinedayrotation == 3)) set $rotation,1;
|
||||||
|
if(($@determinedayrotation == 4)) set $rotation,0;
|
||||||
|
if(($@determinedayrotation == 5)) set $rotation,1;
|
||||||
|
if(($@determinedayrotation == 6)) set $rotation,0;
|
||||||
|
mes "It is done.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_Clearmsgs:
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "Are you sure?";
|
||||||
|
next;
|
||||||
|
menu "Yes",L_clearmsgsy,"No thanks.",L_Menu01;
|
||||||
|
|
||||||
|
L_clearmsgsy:
|
||||||
|
deletearray $messageboardpost$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostdate$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostname$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardeditdate$[1],$messageboardpostnumber;
|
||||||
|
deletearray $mymessage[1],$messageboardpostnumber;
|
||||||
|
set $messageboardpostnumber,0;
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "It is done.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_leave:
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_Postmsg:
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "What do you want to say in your message?";
|
||||||
|
next;
|
||||||
|
set @msgboardmsgt$,0;
|
||||||
|
input @msgboardmsgt$;
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "are you sure this is the message you want?";
|
||||||
|
mes @msgboardmsgt$;
|
||||||
|
next;
|
||||||
|
menu "Yes!",L_postmsgyes,"No let me re-do it!",L_Postmsg,"Ive changed my mind let me leave.",lleave;
|
||||||
|
|
||||||
|
L_postmsgyes:
|
||||||
|
if(($messageboardpostnumber >= 127)) goto L_postmsgyestm;
|
||||||
|
set @messageboardpostername$,strcharinfo(0);
|
||||||
|
set @messageboarddate$,gettimestr("%Y-%m/%d %H:%M:%S",21);
|
||||||
|
set $messageboardpostnumber,$messageboardpostnumber+1;
|
||||||
|
set @mymessage2,$messageboardpostnumber;
|
||||||
|
set $mymessage[$messageboardpostnumber],5;
|
||||||
|
set $messageboardpost$[$messageboardpostnumber],@msgboardmsgt$;
|
||||||
|
set $messageboardpostdate$[$messageboardpostnumber],@messageboarddate$;
|
||||||
|
set $messageboardpostname$[$messageboardpostnumber],@messageboardpostername$;
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "here is what your message looks like";
|
||||||
|
next;
|
||||||
|
mes "Posted by: "+$messageboardpostname$[$messageboardpostnumber]+".";
|
||||||
|
mes "On: "+$messageboardpostdate$[$messageboardpostnumber]+".";
|
||||||
|
mes $messageboardpost$[$messageboardpostnumber];
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_postmsgyestm:
|
||||||
|
set @mesboardmsgt$,0;
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "Im sorry your going to have to wait till more space opens up for messages, it should be in 1 or 2 days =)";
|
||||||
|
close;
|
||||||
|
|
||||||
|
lleave:
|
||||||
|
deletearray $messageboardpost$[@tempview],@tempview;
|
||||||
|
deletearray $messageboardpostname$[@tempview],@tempview;
|
||||||
|
deletearray $messageboardpostdate$[@tempview],@tempview;
|
||||||
|
deletearray $mymessage[@tempview],@tempview;
|
||||||
|
set $messageboardpostnumber,$messageboardpostnumber-1;
|
||||||
|
set @msgboardmsgt$,0;
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_readmsg:
|
||||||
|
if(($messageboardpostnumber == 0)) goto L_msgno;
|
||||||
|
callfunc "F_message";
|
||||||
|
end;
|
||||||
|
|
||||||
|
L_msgno:
|
||||||
|
mes "[Robert]";
|
||||||
|
mes "There are currently no messages.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
OnInit:
|
||||||
|
set $gmboardreset,2;
|
||||||
|
set $gmboardresetvotenumb,0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
OnInterIfInitOnce:
|
||||||
|
set $@determinedayrotation,gettime(4); //this determines the day rotation for clearing messages.
|
||||||
|
if(($@determinedayrotation == 0)) set $rotation,0;
|
||||||
|
if(($@determinedayrotation == 1)) set $rotation,1;
|
||||||
|
if(($@determinedayrotation == 2)) set $rotation,0;
|
||||||
|
if(($@determinedayrotation == 3)) set $rotation,1;
|
||||||
|
if(($@determinedayrotation == 4)) set $rotation,0;
|
||||||
|
if(($@determinedayrotation == 5)) set $rotation,1;
|
||||||
|
if(($@determinedayrotation == 6)) set $rotation,0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
OnSun1200:
|
||||||
|
if(($rotation == 1)) end;
|
||||||
|
deletearray $messageboardpost$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostdate$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostname$[1],$messageboardpostnumber;
|
||||||
|
deletearray $mymessage[1],$messageboardpostnumber;
|
||||||
|
set $messageboardpostnumber,0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
OnSat1200:
|
||||||
|
if(($rotation == 0)) end;
|
||||||
|
deletearray $messageboardpost$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostdate$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostname$[1],$messageboardpostnumber;
|
||||||
|
deletearray $mymessage[1],$messageboardpostnumber;
|
||||||
|
set $messageboardpostnumber,0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
OnMon1200:
|
||||||
|
if(($rotation == 1)) end;
|
||||||
|
deletearray $messageboardpost$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostdate$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostname$[1],$messageboardpostnumber;
|
||||||
|
deletearray $mymessage[1],$messageboardpostnumber;
|
||||||
|
set $messageboardpostnumber,0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
OnTue1200:
|
||||||
|
if(($rotation == 0)) end;
|
||||||
|
deletearray $messageboardpost$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostdate$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostname$[1],$messageboardpostnumber;
|
||||||
|
deletearray $mymessage[1],$messageboardpostnumber;
|
||||||
|
set $messageboardpostnumber,0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
OnWed1200:
|
||||||
|
if(($rotation == 1)) end;
|
||||||
|
deletearray $messageboardpost$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostdate$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostname$[1],$messageboardpostnumber;
|
||||||
|
deletearray $mymessage[1],$messageboardpostnumber;
|
||||||
|
set $messageboardpostnumber,0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
OnThu1200:
|
||||||
|
if(($rotation == 0)) end;
|
||||||
|
deletearray $messageboardpost$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostdate$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostname$[1],$messageboardpostnumber;
|
||||||
|
deletearray $mymessage[1],$messageboardpostnumber;
|
||||||
|
set $messageboardpostnumber,0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
OnFri1200:
|
||||||
|
if(($rotation == 1)) end;
|
||||||
|
deletearray $messageboardpost$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostdate$[1],$messageboardpostnumber;
|
||||||
|
deletearray $messageboardpostname$[1],$messageboardpostnumber;
|
||||||
|
deletearray $mymessage[@tempview],@tempview;
|
||||||
|
set $messageboardpostnumber,0;
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_gmresetcheck {
|
||||||
|
set @tempcheck,0;
|
||||||
|
L_top:
|
||||||
|
set @tempcheck,@tempcheck+1;
|
||||||
|
if(($gmboardresetvoted[@tempview] == 1)) goto L_votecheck;
|
||||||
|
if(($gmboardresetvoted[@tempview] == 0)) return;
|
||||||
|
goto L_top;
|
||||||
|
end;
|
||||||
|
|
||||||
|
L_votecheck:
|
||||||
|
set @tempcheckid,0;
|
||||||
|
set @tempcheckid,getcharid(0);
|
||||||
|
if(($gmboardresetvoteid[@tempview] != @tempcheckid)) goto L_top;
|
||||||
|
if(($gmboardresetvoteid[@tempview] == @tempcheckid)) goto L_voted;
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_gmmessage {
|
||||||
|
set @tempview,0;
|
||||||
|
L_top:
|
||||||
|
set @tempview,@tempview+1;
|
||||||
|
mes "Posted By: "+$gmmessageboardpostname$[@tempview]+".";
|
||||||
|
mes "On: "+$gmmessageboardpostdate$[@tempview]+".";
|
||||||
|
mes $gmmessageboardpost$[@tempview]+".";
|
||||||
|
menu "Next Message",L_top2;
|
||||||
|
|
||||||
|
L_top2:
|
||||||
|
if(($gmmessageboardpostnumber > @tempview)) goto L_top;
|
||||||
|
close;
|
||||||
|
}
|
||||||
|
|
||||||
|
function script F_message {
|
||||||
|
set @tempview,0;
|
||||||
|
L_top:
|
||||||
|
set @tempview,@tempview+1;
|
||||||
|
mes "Posted By: "+$messageboardpostname$[@tempview]+".";
|
||||||
|
mes "On: "+$messageboardpostdate$[@tempview]+".";
|
||||||
|
mes $messageboardpost$[@tempview]+".";
|
||||||
|
next;
|
||||||
|
if(($mymessage[@tempview] == 5) && (getgmlevel(99)>0)) menu "Next Message",L_top2,"Delete My Message",L_delmy,"Edit my message",L_editmy,"Delete This message",L_Del;
|
||||||
|
if((getgmlevel(99)>0)) menu "Next Message",L_top2,"Delete This message",L_Del;
|
||||||
|
if(($mymessage[@tempview] == 5)) menu "Next Message",L_top2,"Delete My Message",L_delmy,"Edit my message",L_editmy;
|
||||||
|
menu "Next message",L_top2;
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_editmy:
|
||||||
|
mes "Are you sure?";
|
||||||
|
next;
|
||||||
|
menu "Yes",L_editmyy,"No",L_editmyn;
|
||||||
|
|
||||||
|
L_editmyy:
|
||||||
|
mes "what do you want your new message to be?";
|
||||||
|
next;
|
||||||
|
mes "Current message!";
|
||||||
|
mes $messageboardpost$[@tempview];
|
||||||
|
set @tempeditmsg$,0;
|
||||||
|
input @tempeditmsg$;
|
||||||
|
next;
|
||||||
|
mes "is this what you want?";
|
||||||
|
mes @tempeditmsg$;
|
||||||
|
next;
|
||||||
|
menu "Yes!",L_editmyyy,"No.",L_editmyyn;
|
||||||
|
|
||||||
|
L_editmyyy:
|
||||||
|
deletearray $messageboardpost$[@tempview],@tempview;
|
||||||
|
set $messageboardpost$[@tempview],@tempeditmsg$;
|
||||||
|
mes "Here is what your new message looks like.";
|
||||||
|
next;
|
||||||
|
mes "Posted By: "+$messageboardpostname$[@tempview]+".";
|
||||||
|
mes "On: "+$messageboardpostdate$[@tempview]+".";
|
||||||
|
mes $messageboardpost$[@tempview]+".";
|
||||||
|
close2;
|
||||||
|
set @tempview,0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
L_editmyn:
|
||||||
|
Mes "So be it.";
|
||||||
|
set @tempview,0;
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_editmyyn:
|
||||||
|
mes "So be it!";
|
||||||
|
set @tempeditmsg$,0;
|
||||||
|
set @tempview,0;
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_delmy:
|
||||||
|
mes "Are you sure...?";
|
||||||
|
next;
|
||||||
|
menu "Yes",L_delmyy,"No thanks.",L_delmyn;
|
||||||
|
|
||||||
|
L_delmyy:
|
||||||
|
deletearray $messageboardpost$[@tempview],@tempview;
|
||||||
|
deletearray $messageboardpostname$[@tempview],@tempview;
|
||||||
|
deletearray $messageboardpostdate$[@tempview],@tempview;
|
||||||
|
deletearray $mymessage[@tempview],@tempview;
|
||||||
|
deletearray $messageboardeditdate$[@tempview],@tempview;
|
||||||
|
set $messageboardpostnumber,$messageboardpostnumber-1;
|
||||||
|
set @tempview,0;
|
||||||
|
mes "It is done.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_delmyn:
|
||||||
|
mes "Come back soon.";
|
||||||
|
set @tempview,0;
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_top2:
|
||||||
|
if(($messageboardpostnumber > @tempview)) goto L_top;
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_Del:
|
||||||
|
mes "Are you sure?";
|
||||||
|
next;
|
||||||
|
menu "Yes",L_Dely,"No",L_Deln;
|
||||||
|
|
||||||
|
L_Dely:
|
||||||
|
deletearray $messageboardpost$[@tempview],@tempview;
|
||||||
|
deletearray $messageboardpostname$[@tempview],@tempview;
|
||||||
|
deletearray $messageboardpostdate$[@tempview],@tempview;
|
||||||
|
deletearray $mymessage[@tempview],@tempview;
|
||||||
|
deletearray $messageboardeditdate$[@tempview],@tempview;
|
||||||
|
set $messageboardpostnumber,$messageboardpostnumber-1;
|
||||||
|
mes "It is done.";
|
||||||
|
set @tempview,0;
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_Deln:
|
||||||
|
mes "Come back soon!";
|
||||||
|
set @tempview,0;
|
||||||
|
close;
|
||||||
|
}
|
||||||
250
npc/custom/eAAC_Scripts/roll_a_dice.txt
Normal file
250
npc/custom/eAAC_Scripts/roll_a_dice.txt
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
//==========================================================
|
||||||
|
//Roll a Dice NPC
|
||||||
|
//==========================================================
|
||||||
|
//Made by birkiczd
|
||||||
|
//==========================================================
|
||||||
|
//This game lets you and the Dicer throw 3 dices.
|
||||||
|
//Whoever get's a higher number (the player or dealer) wins.
|
||||||
|
//==========================================================
|
||||||
|
//Version:1.0 - made script public
|
||||||
|
// 1.1 - fixed a few bugs,added dice emos =)
|
||||||
|
// 1.2 - made variables for the amount of zenys for
|
||||||
|
// each bet so it is easy for people to costumize
|
||||||
|
// the script
|
||||||
|
// 1.3 - added more emoticons,made an Info menu
|
||||||
|
// option which contains explanations and rules,
|
||||||
|
// added the amount of lost/won zeny on the end
|
||||||
|
// of each game,added more colors
|
||||||
|
//==========================================================
|
||||||
|
|
||||||
|
|
||||||
|
cmd_in02.gat,181,98,2 script Dicer 57,{
|
||||||
|
|
||||||
|
//These variables allow you to set the amount of zeny people can bet
|
||||||
|
set @betzeny1,500; //500 zeny
|
||||||
|
set @betzeny2,1000; //1000 zeny
|
||||||
|
set @betzeny3,2000; //2000 zeny
|
||||||
|
set @betzeny4,10000; //10000 zeny
|
||||||
|
|
||||||
|
//Variable for the number guess zeny bet
|
||||||
|
set @betnum, 1000; //1000 Zeny
|
||||||
|
|
||||||
|
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "Welcome to the Revolution Dice Game.You wanna check your luck with dices?Remember I am the dice expert and rarely someone was able to beat me.";
|
||||||
|
next;
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "What would you like to do?";
|
||||||
|
next;
|
||||||
|
menu "Play",L_play,"Info",L_info,"Go away",L_go;
|
||||||
|
|
||||||
|
L_go:
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "Please come again when you are ready.";
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_info:
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "Please choose one of the following options for more informations:";
|
||||||
|
next;
|
||||||
|
menu "Main Rules",L_main,"Bets and Wins",L_bet,"Extra Games",L_extra,"Go away",L_go;
|
||||||
|
|
||||||
|
L_main:
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "^0080FFRoll A Dice^000000 is a very simple game.The game allows you and the NPC to throw 3 dices.Whoever gets a higher total number wins.";
|
||||||
|
next;
|
||||||
|
goto L_info;
|
||||||
|
|
||||||
|
L_bet:
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "You have 4 zeny amounts to choose for your bet.If you choose a high bet your win will also be higher,it is that simple.Also various extra games can increase your win.";
|
||||||
|
next;
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "Example:";
|
||||||
|
mes "^0080FFBet^000000 ^0080FFWin^000000";
|
||||||
|
mes "500 1000";
|
||||||
|
mes "1000 2000";
|
||||||
|
mes "2000 4000";
|
||||||
|
mes "10000 20000";
|
||||||
|
next;
|
||||||
|
goto L_info;
|
||||||
|
|
||||||
|
L_extra:
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "You can also try increasing your win by playing extra games like guessing your total number at the end of the game.It will cost you an extra amount of zeny but if you guess the number your win will be tripled instead of doubled.";
|
||||||
|
next;
|
||||||
|
goto L_info;
|
||||||
|
|
||||||
|
L_play:
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "Ok,please choose the amount of zeny you want to bet:";
|
||||||
|
next;
|
||||||
|
menu ""+@betzeny1+" Zeny",L_zeny1,""+@betzeny2+" Zeny",L_zeny2,""+@betzeny3+" Zeny",L_zeny3,""+@betzeny4+" Zeny",L_zeny4,"Too rich for my blood...",L_go;
|
||||||
|
|
||||||
|
L_zeny1:
|
||||||
|
if(Zeny < @betzeny1) goto L_nzeny;
|
||||||
|
set @bet, @betzeny1;
|
||||||
|
goto L_gamea;
|
||||||
|
L_zeny2:
|
||||||
|
if(Zeny < @betzeny2) goto L_nzeny;
|
||||||
|
set @bet, @betzeny2;
|
||||||
|
goto L_gamea;
|
||||||
|
L_zeny3:
|
||||||
|
if(Zeny < @betzeny3) goto L_nzeny;
|
||||||
|
set @bet, @betzeny3;
|
||||||
|
goto L_gamea;
|
||||||
|
L_zeny4:
|
||||||
|
if(Zeny < @betzeny4) goto L_nzeny;
|
||||||
|
set @bet, @betzeny4;
|
||||||
|
goto L_gamea;
|
||||||
|
|
||||||
|
L_nzeny:
|
||||||
|
mes "[Dicer]";
|
||||||
|
emotion 20;
|
||||||
|
mes "Sorry but it seems you don't have enough zeny!";
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_gamea:
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "Would you like to try to increase your win by trying to guess the number you will get?";
|
||||||
|
mes "It will cost you another ^0080FF"+@betnum+"^000000 zeny.";
|
||||||
|
next;
|
||||||
|
menu "Yes",L_gamec,"No",L_gameb;
|
||||||
|
|
||||||
|
L_gamec:
|
||||||
|
if(Zeny < @betnum + @bet) goto L_nzeny;
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "Please input the number you think you will get (3-18).";
|
||||||
|
input @numg;
|
||||||
|
if(@numg<3) message strcharinfo(0),"Number is too low, input again.";
|
||||||
|
if(@numg>18) message strcharinfo(0),"Number is too high, input again.";
|
||||||
|
if(@numg<3||@numg>18) goto L_gamec;
|
||||||
|
set Zeny, Zeny - @betnum;
|
||||||
|
goto L_gameb;
|
||||||
|
|
||||||
|
L_gameb:
|
||||||
|
next;
|
||||||
|
set @number1,rand(1,6);
|
||||||
|
set @number2,rand(1,6);
|
||||||
|
set @number3,rand(1,6);
|
||||||
|
set @number4,rand(1,6);
|
||||||
|
set @number5,rand(1,6);
|
||||||
|
set @number6,rand(1,6);
|
||||||
|
set @dea1, @number1;
|
||||||
|
set @dea2, @number2;
|
||||||
|
set @dea3, @number3;
|
||||||
|
set @pla1, @number4;
|
||||||
|
set @pla2, @number5;
|
||||||
|
set @pla3, @number6;
|
||||||
|
set @deatot, @dea1+@dea2+@dea3;
|
||||||
|
set @platot, @pla1+@pla2+@pla3;
|
||||||
|
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "I will be the first one to roll the dices,and after that you will throw them.I am feeling lucky today, so you better go away before I take every zeny you have.";
|
||||||
|
next;
|
||||||
|
mes "[^0080FFDicer 1st Turn^000000]";
|
||||||
|
mes "Throwing first dice!";
|
||||||
|
mes ".....roll.....roll....roll....";
|
||||||
|
emotion 58;
|
||||||
|
mes " ";
|
||||||
|
mes "First throw: ^0080FF"+@dea1+" ^000000";
|
||||||
|
next;
|
||||||
|
mes "[^0080FFDicer 2nd Turn^000000]";
|
||||||
|
mes "Throwing second dice!";
|
||||||
|
emotion 58;
|
||||||
|
mes ".....roll.....roll....roll....";
|
||||||
|
mes " ";
|
||||||
|
mes "Second throw: ^0080FF"+@dea2+" ^000000";
|
||||||
|
next;
|
||||||
|
mes "[^0080FFDicer 3rd Turn^000000]";
|
||||||
|
mes "Throwing third dice!";
|
||||||
|
emotion 58;
|
||||||
|
mes ".....roll.....roll....roll....";
|
||||||
|
mes " ";
|
||||||
|
mes "Third throw: ^0080FF"+@dea3+" ^000000";
|
||||||
|
next;
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "Now it's your turn to throw the dices.I bet you can't get higher numbers then me.";
|
||||||
|
next;
|
||||||
|
mes "[^0080FFPlayer 1st Turn^000000]";
|
||||||
|
mes "Throwing first dice!";
|
||||||
|
mes ".....roll.....roll....roll....";
|
||||||
|
emotion 58;
|
||||||
|
mes " ";
|
||||||
|
mes "First throw: ^0080FF"+@pla1+" ^000000";
|
||||||
|
next;
|
||||||
|
mes "[^0080FFPlayer 2nd Turn^000000]";
|
||||||
|
mes "Throwing second dice!";
|
||||||
|
emotion 58;
|
||||||
|
mes ".....roll.....roll....roll....";
|
||||||
|
mes " ";
|
||||||
|
mes "Second throw: ^0080FF"+@pla2+" ^000000";
|
||||||
|
next;
|
||||||
|
mes "[^0080FFPlayer 3rd Turn^000000]";
|
||||||
|
mes "Throwing third dice!";
|
||||||
|
emotion 58;
|
||||||
|
mes ".....roll.....roll....roll....";
|
||||||
|
mes " ";
|
||||||
|
mes "Third throw: ^0080FF"+@pla3+" ^000000";
|
||||||
|
next;
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "Let's look at our total numbers:";
|
||||||
|
mes " ";
|
||||||
|
mes "Dicer Total: ^0080FF"+@deatot+" ^000000.";
|
||||||
|
mes "Player Total: ^0080FF"+@platot+" ^000000.";
|
||||||
|
next;
|
||||||
|
if (@platot < @deatot) goto L_lose;
|
||||||
|
if (@platot == @deatot) goto L_again;
|
||||||
|
if (@platot > @deatot && @platot == @numg) goto L_win2;
|
||||||
|
if (@platot > @deatot) goto L_win1;
|
||||||
|
|
||||||
|
L_lose:
|
||||||
|
mes "[Dicer]";
|
||||||
|
set Zeny, Zeny - @bet;
|
||||||
|
emotion 39;
|
||||||
|
mes "I got a higher number!!!";
|
||||||
|
mes "See I told you nobody can beat me!";
|
||||||
|
mes " ";
|
||||||
|
mes "You lost ^0080FF"+@bet+"^000000 Zeny.";
|
||||||
|
next;
|
||||||
|
goto L_againa;
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_again:
|
||||||
|
mes "[Dicer]";
|
||||||
|
emotion 54;
|
||||||
|
mes "It seems it's a draw.Let's play again.";
|
||||||
|
next;
|
||||||
|
goto L_play;
|
||||||
|
|
||||||
|
L_win1:
|
||||||
|
mes "[Dicer]";
|
||||||
|
set Zeny, Zeny + @bet*2;
|
||||||
|
set @wona, @bet*2;
|
||||||
|
emotion 36;
|
||||||
|
mes "I can't belive I lost. Here take your money.";
|
||||||
|
mes " ";
|
||||||
|
mes "You won ^0080FF"+@wona+"^000000 Zeny.";
|
||||||
|
next;
|
||||||
|
goto L_againa;
|
||||||
|
close;
|
||||||
|
|
||||||
|
L_win2:
|
||||||
|
mes "[Dicer]";
|
||||||
|
set Zeny, Zeny + @bet*3;
|
||||||
|
set @wonb, @bet*3;
|
||||||
|
emotion 36;
|
||||||
|
mes "You even guessed the total number you got.I can't belive I lost. Here is your money.";
|
||||||
|
mes " ";
|
||||||
|
mes "You won ^0080FF"+@wonb+"^000000 Zeny.";
|
||||||
|
next;
|
||||||
|
goto L_againa;
|
||||||
|
|
||||||
|
L_againa:
|
||||||
|
mes "[Dicer]";
|
||||||
|
mes "Would you like to play again?";
|
||||||
|
next;
|
||||||
|
menu "Yes",L_play,"No",L_go;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -91,7 +91,6 @@ npc: npc/custom/adoption.txt
|
|||||||
//npc: npc/custom/Lance/FR_MailSystem.c
|
//npc: npc/custom/Lance/FR_MailSystem.c
|
||||||
// --------------------------------------------------------------
|
// --------------------------------------------------------------
|
||||||
|
|
||||||
//
|
|
||||||
// --------------------------------------------------------------
|
// --------------------------------------------------------------
|
||||||
// ----------------------- Quests Scripts -----------------------
|
// ----------------------- Quests Scripts -----------------------
|
||||||
// -- Treasure Hunters Guild Quests (40 Quests + Special Guild Shop)
|
// -- Treasure Hunters Guild Quests (40 Quests + Special Guild Shop)
|
||||||
@ -125,3 +124,7 @@ npc: npc/custom/adoption.txt
|
|||||||
//npc: npc/custom/quests/tha_statues.txt
|
//npc: npc/custom/quests/tha_statues.txt
|
||||||
// -- A quest for Jewel Case for 99 Level Players of any 2nd Class
|
// -- A quest for Jewel Case for 99 Level Players of any 2nd Class
|
||||||
//npc: npc/custom/quests/lvl99_quest.txt
|
//npc: npc/custom/quests/lvl99_quest.txt
|
||||||
|
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
// ----------------------- eAAC Scripts -----------------------
|
||||||
|
//import: npc/scripts_eaac.conf
|
||||||
67
npc/scripts_eaac.conf
Normal file
67
npc/scripts_eaac.conf
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
// --------------------------------------------------------------
|
||||||
|
// - eAAC Scripts -
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
// All the custom scripts, remove the '//' to active...
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
// - Warning!! Acktung!! Awas!! gevaar!! peligro!! ÂûG<C3BB>EûG<C3BB>E -
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
// - All scripts here should be used at your own risk. If you -
|
||||||
|
// - have edited it yourself, we are not responsible for any -
|
||||||
|
// - Damages or whatsoever. Do not report any bugs unless you -
|
||||||
|
// - are sure they exist. Please provide evidence and proof. -
|
||||||
|
// - eAthena developmers are not responsible for any damages or -
|
||||||
|
// - disruptions of service during the service of the server -
|
||||||
|
// - caused by the included scripts or for any damages -
|
||||||
|
// - resulting in the use of the scripts. -
|
||||||
|
// - Thanks, -
|
||||||
|
// - eAthena Dev Team -
|
||||||
|
// - Files organized, sorted and compiled together by erKURITA -
|
||||||
|
// - To activate a script, simply remove the // in the -
|
||||||
|
// - corresponding npc: line. In case of the Kafra Express, -
|
||||||
|
// - just remove the // in the import: line -
|
||||||
|
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
// ----------------------- Kafra Express ------------------------
|
||||||
|
// Kafra Express scripts are all enabled by default in the conf.
|
||||||
|
// All you have to do is enable/uncomment the following line and
|
||||||
|
// edit the confi.txt file inside the kafraExpress folder. Read
|
||||||
|
// the readme.txt for further information. Also before enabling
|
||||||
|
// this, open and read the following conf file, since you have
|
||||||
|
// to de-activate the default Global_Functions.txt file and
|
||||||
|
// enable the custom global_functionsKE.txt files made by Skotlex
|
||||||
|
// Script made by Skotlex.
|
||||||
|
// Forum topic for support:
|
||||||
|
//| http://www.eathena.ws/board/index.php?showtopic=20290
|
||||||
|
//import: npc/custom/eAAC_Scripts/Kafra_Express_files.conf
|
||||||
|
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
// -------------------- Disguiser Quest NPC ---------------------
|
||||||
|
// Script made by palasx.
|
||||||
|
// Forum topic for support:
|
||||||
|
//| http://www.eathena.ws/board/index.php?showtopic=55584
|
||||||
|
//| Note: Only enable the version according to the SVN you're using.
|
||||||
|
//| SQL Version
|
||||||
|
//npc: npc/custom/eAAC_Scripts/disguiser_SQL.txt
|
||||||
|
//| TXT Version
|
||||||
|
//npc: npc/custom/eAAC_Scripts/disguiser_TXT.txt
|
||||||
|
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
// ---------------------- Roll A Dice NPC -----------------------
|
||||||
|
// Script made by birkiczd.
|
||||||
|
// Forum topic for support:
|
||||||
|
//| http://www.eathena.ws/board/index.php?showtopic=62483
|
||||||
|
//npc: npc/custom/eAAC_Scripts/roll_a_dice.txt
|
||||||
|
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
// ---------------------- Message Boards ------------------------
|
||||||
|
// Script made by cold
|
||||||
|
// Forum topic for support:
|
||||||
|
//| http://www.eathena.ws/board/index.php?showtopic=51051
|
||||||
|
//npc: npc/custom/eAAC_Scripts/messageboards.txt
|
||||||
|
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
// ----------------------- Clone Arena --------------------------
|
||||||
|
// Script made by Miir
|
||||||
|
// Forum topic for support:
|
||||||
|
//| http://www.eathena.ws/board/index.php?showtopic=75283
|
||||||
|
//npc: npc/custom/eAAC_Scripts/clonearena.txt
|
||||||
Loading…
x
Reference in New Issue
Block a user