int ruby_create_item(struct ruby_aston_npc *me) { int sprite,dam,flags,in; char *name,*desc; //xlog("skl=%d, level=%d, mod1=%d, mod2=%d, add=%d",me->skl,me->level,me->mod1,me->mod2,me->add); switch(me->skl) { case V_TWOHAND: sprite=10373; dam=3; flags=IF_TWOHAND|IF_WNTWOHANDED; name="Two-Handed Sword"; desc="two-handed sword"; break; case V_SWORD: sprite=10384; dam=0; flags=IF_SWORD; name="Sword"; desc="sword"; break; case V_DAGGER: sprite=10395; dam=-3; flags=IF_DAGGER; name="Dagger"; desc="dagger"; break; case V_STAFF: sprite=10406; dam=-2; flags=IF_STAFF|IF_WNTWOHANDED; name="Staff"; desc="staff"; break; case V_HAND: sprite=51616; dam=0; flags=0; name="Gloves"; desc="pair of gloves"; break; default: return 0; } in=create_item("ruby_weapon"); if (!in) return 0; it[in].sprite=sprite; if (me->skl!=V_HAND) { it[in].mod_index[0]=V_WEAPON; it[in].mod_value[0]=dam+10+(me->level/10)*10+4; it[in].mod_index[1]=-me->skl; it[in].mod_value[1]=me->level; } it[in].flags|=flags|IF_WNRHAND; it[in].mod_index[2]=me->mod1; it[in].mod_index[3]=me->mod2; it[in].mod_value[2]=it[in].mod_value[3]=me->add; set_item_requirements(in); strcpy(it[in].name,name); sprintf(it[in].description,"A %s, bearing the inscription 'Ruby'.",desc); return in; }
int enhance_item(int in,int cn) { int in2,spr,m,need,price; if (!(in2=ch[cn].citem)) return 0; if (it[in2].flags&IF_NOENHANCE) return 0; if (!(spr=enhance_item_sprite(in2))) return 0; if ((spr>=59200 && spr<59299) || spr==59474) { // silver item if (it[in].drdata[0]!=2) { // needs gold log_char(cn,LOG_SYSTEM,0,"This item has already been enhanced once. For further enhancements, you need gold."); return 1; } } else { // normal item if (it[in].drdata[0]!=1) { // needs silver log_char(cn,LOG_SYSTEM,0,"To enhance this item, you need silver."); return 1; } } need=enhance_item_price(in2); if (need>*(unsigned int*)(it[in].drdata+1)) { log_char(cn,LOG_SYSTEM,0,"You do not have enough %s to enhance this item. You need %d units.",it[in].name,need); return 1; } if (enhance_cannot_use(in2,cn) && (*(unsigned int *)(it[in].drdata+8)!=in2 || realtime-*(unsigned int *)(it[in].drdata+12)>15)) { log_char(cn,LOG_SYSTEM,0,"Enhancing this item would make it unusable for you. Click again if this is what you want."); *(unsigned int *)(it[in].drdata+8)=in2; *(unsigned int *)(it[in].drdata+12)=realtime; return 1; } price=it[in].value*need/(*(unsigned int*)(it[in].drdata+1)); *(unsigned int*)(it[in].drdata+1)-=need; if (*(unsigned int*)(it[in].drdata+1)<1) { if (ch[cn].flags&CF_PLAYER) dlog(cn,in,"dropped because it was used to enhance item"); remove_item_char(in); destroy_item(in); } else { it[in].value-=price; //it[in].value*(*(unsigned int*)(it[in].drdata+1))/(need+(*(unsigned int*)(it[in].drdata+1))); sprintf(it[in].description,"%d units of %s.",*(unsigned int*)(it[in].drdata+1),it[in].name); } it[in2].sprite=spr; it[in2].value=it[in2].value+price; for (m=0; m<MAXMOD; m++) { if (it[in2].mod_value[m]) { switch(it[in2].mod_index[m]) { case -V_ARMORSKILL: it[in2].mod_value[m]+=10; break; case -V_DAGGER: it[in2].mod_value[m]+=10; break; case -V_STAFF: it[in2].mod_value[m]+=10; break; case -V_SWORD: it[in2].mod_value[m]+=10; break; case -V_TWOHAND: it[in2].mod_value[m]+=10; break; case V_ARMOR: it[in2].mod_value[m]+=armorbonus(in2); break; case V_WEAPON: it[in2].mod_value[m]+=10; break; default: if (it[in2].mod_index[m]>=0 && it[in2].mod_value[m]<20) it[in2].mod_value[m]++; break; } } } set_item_requirements(in2); ch[cn].flags|=CF_ITEMS; look_item(cn,it+in2); log_char(cn,LOG_SYSTEM,0,"You used %d units to enhance your %s.",need,it[in2].name); return 1; }