AndMetal |
06-28-2009 12:16 AM |
Just a quick thought on how to implement this...
Code:
ScribeSpells(max_level, min_level = 1)
That way we default from 1 through max_level if we don't provide the second argument. So, to scribe spells for just level 71:
Code:
quest::scribespells(71, 71)
Should be pretty easy to implement in the server code. I haven't compiled or tested this, but this should do it:
Code:
Index: Y:/svn/trunk/EQEmuServer/zone/command.cpp
===================================================================
--- Y:/svn/trunk/EQEmuServer/zone/command.cpp (revision 700)
+++ Y:/svn/trunk/EQEmuServer/zone/command.cpp (working copy)
@@ -5694,7 +5695,7 @@
void command_scribespells(Client *c, const Seperator *sep)
{
- int level;
+ uint8 max_level, min_level;
int16 book_slot;
int16 curspell;
Client *t=c;
@@ -5704,29 +5705,36 @@
if(!sep->arg[1][0])
{
- c->Message(0, "FORMAT: #scribespells <level>");
+ c->Message(0, "FORMAT: #scribespells <max level> <min level>");
return;
}
- level = atoi(sep->arg[1]);
+ max_level = (uint8)atoi(sep->arg[1]);
+ min_level = sep->arg[2][0] ? (uint8)atoi(sep->arg[2]) : 1;
- if(level < 1)
+ if(max_level < 1)
{
c->Message(0, "ERROR: Enter a level greater than 1.");
return;
}
+ if (max_level < min_level) {
+ c->Message(0, "ERROR: Min Level can't be greater than Max Level.");
+ return;
+ }
+
t->Message(0, "Scribing spells to spellbook.");
if(t != c)
c->Message(0, "Scribing spells for %s.", t->GetName());
- LogFile->write(EQEMuLog::Normal, "Scribe spells request for %s from %s, level: %d", t->GetName(), c->GetName(), level);
+ LogFile->write(EQEMuLog::Normal, "Scribe spells request for %s from %s (min level: %u, max_level: %u)", t->GetName(), c->GetName(), min_level, max_level);
for(curspell = 0, book_slot = 0; curspell < SPDAT_RECORDS && book_slot < MAX_PP_SPELLBOOK; curspell++)
{
if
(
spells[curspell].classes[WARRIOR] != 0 && // check if spell exists
- spells[curspell].classes[t->GetPP().class_-1] <= level &&
+ spells[curspell].classes[t->GetPP().class_-1] <= max_level && //maximum level
+ spells[curspell].classes[t->GetPP().class_-1] >= min_level && //minimum level
spells[curspell].skill != 52
)
{
Index: Y:/svn/trunk/EQEmuServer/zone/perlparser.cpp
===================================================================
--- Y:/svn/trunk/EQEmuServer/zone/perlparser.cpp (revision 700)
+++ Y:/svn/trunk/EQEmuServer/zone/perlparser.cpp (working copy)
@@ -789,12 +789,16 @@
XS(XS__scribespells)
{
dXSARGS;
- if (items != 1)
+ if (items < 1)
Perl_croak(aTHX_ "Usage: scribespells(spell_level)");
- int spell_level = (int)SvIV(ST(0));
+ uint8 max_level = (uint8)SvIV(ST(0));
+ uint8 min_level = (uint8)SvIV(ST(1));
- quest_manager.scribespells(spell_level);
+ if (min_level)
+ quest_manager.scribespells(max_level, min_level);
+ else
+ quest_manager.scribespells(max_level);
XSRETURN_EMPTY;
}
Index: Y:/svn/trunk/EQEmuServer/zone/questmgr.cpp
===================================================================
--- Y:/svn/trunk/EQEmuServer/zone/questmgr.cpp (revision 701)
+++ Y:/svn/trunk/EQEmuServer/zone/questmgr.cpp (working copy)
@@ -624,7 +624,7 @@
initiator->Kick();
}
-void QuestManager::scribespells(int spell_level) {
+void QuestManager::scribespells(uint8 max_level, uint8 min_level = 1) {
//Cofruben:-Scribe spells for user up to his actual level.
int16 book_slot;
int16 curspell;
@@ -633,7 +633,8 @@
if
(
spells[curspell].classes[WARRIOR] != 0 &&
- spells[curspell].classes[initiator->GetPP().class_-1] <= spell_level &&
+ spells[curspell].classes[initiator->GetPP().class_-1] <= max_level && //maximum level
+ spells[curspell].classes[initiator->GetPP().class_-1] <= min_level && //minimum level
spells[curspell].skill != 52
)
{
|