void affect_join_obj (OBJ_DATA * obj, AFFECT_DATA * paf)
{
AFFECT_DATA *paf_old;
bool found;
found = FALSE;
for (paf_old = obj->affected; paf_old != NULL; paf_old = paf_old->next)
{
if (paf_old->type == paf->type)
{
paf->level = (paf->level += paf_old->level) / 2;
paf->duration += paf_old->duration;
paf->modifier += paf_old->modifier;
// affect_remove_obj (obj, paf_old);
break;
}
}
affect_to_obj (obj, paf);
return;
}
for (i = 0; i < 5; i++)
{
p -= 10;
int affdec = number_range (0, 11);
if (number_chance(p))
{
pAf = new_affect ();
pAf->location = aff_values_table[affdec].afftype;
if(ch->level <= 20)
pAf->modifier = number_range(aff_values_table[affdec].min_value, aff_values_table[affdec].max_value);
if(ch->level <= 40)
pAf->modifier = number_range(aff_values_table[affdec].min_value * 1, aff_values_table[affdec].max_value * 2);
if(ch->level <= 60)
pAf->modifier = number_range(aff_values_table[affdec].min_value * 1, aff_values_table[affdec].max_value * 3);
if(ch->level <= 80)
pAf->modifier = number_range(aff_values_table[affdec].min_value * 1, aff_values_table[affdec].max_value * 4);
else
pAf->modifier = number_range(aff_values_table[affdec].min_value * 1, aff_values_table[affdec].max_value * 5);
pAf->where = TO_OBJECT;
pAf->type = 10;
pAf->duration = -1;
pAf->bitvector = 0;
pAf->level = ch->level;
pAf->next = weapon->affected;
weapon->affected = pAf;
affect_join_obj(weapon, pAf); //<—-Right here
}
}
CHAR_DATA a;
CHAR_DATA *b;
b = &a;
void affect_join_obj (OBJ_DATA * obj, AFFECT_DATA * paf)
void affect_join_obj (OBJ_DATA *obj, AFFECT_DATA *paf)
{
AFFECT_DATA *paf_old;
bool found;
found = FALSE;
for (paf_old = obj->affected; paf_old != NULL; paf_old = paf_old->next)
{
if (paf_old->type == paf->type)
{
paf->where = paf_old->where;
paf->level = paf_old->level;
paf->duration = paf_old->duration;
paf->location = paf_old->location;
paf->modifier += paf_old->modifier;
paf->bitvector = paf->bitvector;
// affect_to_obj (obj, paf);
// affect_remove_obj (obj, paf_old);
// free_affect (paf_old);
break;
}
}
affect_to_obj (obj, paf);
free_affect(paf_old);
affect_remove_obj (obj, paf_old);
return;
}
void affect_join_obj (OBJ_DATA *obj, AFFECT_DATA *affect_to_add) {
AFFECT_DATA *existing_affect;
for (existing_affect = obj->affected;existing_affect != NULL;existing_affect = existing_affect->next) {
if (existing_affect->type == affect_to_add->type) {
existing_affect->duration = affect_to_add->duration;
existing_affect->modifier = affect_to_add->modifier;
return;
}
}
affect_to_obj (obj, affect_to_add);
}
void affect_join(CHAR_DATA *ch, AFFECT_DATA *paf) {
AFFECT_DATA *paf_old;
for (paf_old = ch->affected;paf_old ;paf_old = paf_old->next) {
if (paf_old->type == paf->type) {
paf->duration += paf->level > paf_old->level ? paf_old->duration / 2 : paf->duration / 2;
paf->modifier += paf_old->modifier;
paf->level = paf->level > paf_old->level ? paf->level : paf_old->level;
affect_remove(ch, paf_old);
break;
}
}
affect_to_char(ch, paf);
}
void affect_to_obj(OBJ_DATA *obj, AFFECT_DATA *paf) {
if (objLogOn)
log_param("affect object:%s with %d", obj->keyword, paf->type);
short int slotUsed = obj->wear_loc;
//we remove the item from the char to get all affect properly applied
CHAR_DATA *ch = obj->carried_by;
if (slotUsed != -1 && ch)
unequip_char(ch, obj); // this is what I am talking about
I am trying to combine it with my random_armor and random_weapon code.
Also, since it is based off of affect_join…
… appears to be how I should define it, but it crashes the mud.