Example #1
0
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;
}
Example #2
0
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;
}