Hmm, it ate the tabs yet again. I have absolutely no idea what I'm doing wrong to get that behavior. They are in the diff file, they are in the message before I hit post, they are in the preview post version, but as soon as I hit post they seem to go bye bye.
Trying one more time.
Code:
Index: spells.cpp
===================================================================
--- spells.cpp (revision 1944)
+++ spells.cpp (working copy)
@@ -933,13 +933,14 @@
// first check for component reduction
if(IsClient()) {
int reg_focus = CastToClient()->GetFocusEffect(focusReagentCost,spell_id);
- if(MakeRandomInt(0, 100) <= reg_focus) {
+ if(MakeRandomInt(1, 100) <= reg_focus) {
mlog(SPELLS__CASTING, "Spell %d: Reagent focus item prevented reagent consumption (%d chance)", spell_id, reg_focus);
} else {
if(reg_focus > 0)
mlog(SPELLS__CASTING, "Spell %d: Reagent focus item failed to prevent reagent consumption (%d chance)", spell_id, reg_focus);
Client *c = this->CastToClient();
int component, component_count, inv_slot_id;
+ bool missingreags = false;
for(int t_count = 0; t_count < 4; t_count++) {
component = spells[spell_id].components[t_count];
component_count = spells[spell_id].component_counts[t_count];
@@ -1008,7 +1009,11 @@
else {
if(c->GetInv().HasItem(component, component_count, invWhereWorn|invWherePersonal) == -1) // item not found
{
- c->Message_StringID(13, MISSING_SPELL_COMP);
+ if (!missingreags)
+ {
+ c->Message_StringID(13, MISSING_SPELL_COMP);
+ missingreags=true;
+ }
const Item_Struct *item = database.GetItem(component);
if(item) {
@@ -1020,35 +1025,42 @@
strcpy((char*)&TempItemName, "UNKNOWN");
mlog(SPELLS__CASTING_ERR, "Spell %d: Canceled. Missing required reagent %s (%d)", spell_id, TempItemName, component);
}
+ }
+ } // end bard/not bard ifs
+ } // end reagent loop
- if(c->GetGM())
- c->Message(0, "Your GM status allows you to finish casting even though you're missing required components.");
- else {
- InterruptSpell();
- return;
- }
-
- }
- else
+ if (missingreags) {
+ if(c->GetGM())
+ c->Message(0, "Your GM status allows you to finish casting even though you're missing required components.");
+ else {
+ InterruptSpell();
+ return;
+ }
+ }
+ else
+ {
+ for(int t_count = 0; t_count < 4; t_count++) {
+ component = spells[spell_id].components[t_count];
+ if (component == -1)
+ continue;
+ component_count = spells[spell_id].component_counts[t_count];
+ mlog(SPELLS__CASTING_ERR, "Spell %d: Consuming %d of spell component item id %d", spell_id, component, component_count);
+ // Components found, Deleteing
+ // now we go looking for and deleting the items one by one
+ for(int s = 0; s < component_count; s++)
{
- mlog(SPELLS__CASTING_ERR, "Spell %d: Consuming %d of spell component item id %d", spell_id, component, component_count);
- // Components found, Deleteing
- // now we go looking for and deleting the items one by one
- for(int s = 0; s < component_count; s++)
+ inv_slot_id = c->GetInv().HasItem(component, 1, invWhereWorn|invWherePersonal);
+ if(inv_slot_id != -1)
{
- inv_slot_id = c->GetInv().HasItem(component, 1, invWhereWorn|invWherePersonal);
- if(inv_slot_id != -1)
- {
- c->DeleteItemInInventory(inv_slot_id, 1, true);
- }
- else
- { // some kind of error in the code if this happens
- c->Message(13, "ERROR: reagent item disappeared while processing?");
- }
+ c->DeleteItemInInventory(inv_slot_id, 1, true);
}
+ else
+ { // some kind of error in the code if this happens
+ c->Message(13, "ERROR: reagent item disappeared while processing?");
+ }
}
- } // end bard/not bard ifs
- } // end reagent loop
+ }
+ } // end missingreags/consumption
} // end `focus did not help us`
} // end IsClient() for reagents