• SiteAnalyzer, технический и SEO-анализ сайтов

заточка шмоток водой

nokiafan1111

Ефрейтор
Всем привет, столкнулся с проблемой заточки шмоток/пушек водой. (сборка 4.9)
Немного подумав, на основе простой заточки сделал вот это
Код:
private int getArmorAuthorizeMod(int autorizeLvl, Stat2 applyStat) {
		ArmorType armorType = item.getItemTemplate().getArmorType();
		if (armorType == null) {
			log.warn("Missing item ArmorType itemId: " + item.getItemId() + " EquipmentSlot: " + item.getEquipmentSlot() + " playerObjectId: "
					+ applyStat.getOwner().getObjectId());
			return 0;
		}

		int equipmentSlot = (int) (item.getEquipmentSlot() & 0xFFFFFFFF);
		switch (item.getItemTemplate().getArmorType()) {
			case ROBE: // 4.9 check
				switch (equipmentSlot) {
					case 1 << 5:
					case 1 << 11:
					case 1 << 4:
						switch (stat) {
							case PHYSICAL_ATTACK:
								return 1 * autorizeLvl;
							case BOOST_MAGICAL_SKILL:
								return 4 * autorizeLvl;
							case PHYSICAL_DEFENSE:
								return autorizeLvl;
							case MAXHP:
								return 20 * autorizeLvl;
							case PHYSICAL_CRITICAL_RESIST:
								return 2 * autorizeLvl;
							case MAGICAL_DEFEND:
								return 2 * autorizeLvl;
						default:
							break;
						}
						return 0;
					case 1 << 12:
						switch (stat) {
							case PHYSICAL_ATTACK:
								return 1 * autorizeLvl;
							case BOOST_MAGICAL_SKILL:
								return 4 * autorizeLvl;
							case PHYSICAL_DEFENSE:
								return 2 * autorizeLvl;
							case MAXHP:
								return 22 * autorizeLvl;
							case PHYSICAL_CRITICAL_RESIST:
								return 3 * autorizeLvl;
							case MAGICAL_DEFEND:
								return 2 * autorizeLvl;
						default:
							break;
						}
						return 0;
					case 1 << 3:
						switch (stat) {
							case PHYSICAL_ATTACK:
								return 1 * autorizeLvl;
							case BOOST_MAGICAL_SKILL:
								return 4 * autorizeLvl;
							case PHYSICAL_DEFENSE:
								return 3 * autorizeLvl;
							case MAXHP:
								return 24 * autorizeLvl;
							case PHYSICAL_CRITICAL_RESIST:
								return 4 * autorizeLvl;
							case MAGICAL_DEFEND:
								return 3 * autorizeLvl;
						default:
							break;
						}
						return 0;
				}
				return 0;
			case LEATHER: // 4.9 check
				switch (equipmentSlot) {
					case 1 << 5:
					case 1 << 11:
					case 1 << 4:
						switch (stat) {
							case PHYSICAL_ATTACK:
								return 1 * autorizeLvl;
							case BOOST_MAGICAL_SKILL:
								return 4 * autorizeLvl;
							case PHYSICAL_DEFENSE:
								return 2 * autorizeLvl;
							case MAXHP:
								return 18 * autorizeLvl;
							case PHYSICAL_CRITICAL_RESIST:
								return 2 * autorizeLvl;
							case MAGICAL_DEFEND:
								return 2 * autorizeLvl;
						default:
							break;
						}
						return 0;
					case 1 << 12:
						switch (stat) {
							case PHYSICAL_ATTACK:
								return 1 * autorizeLvl;
							case BOOST_MAGICAL_SKILL:
								return 4 * autorizeLvl;
							case PHYSICAL_DEFENSE:
								return 3 * autorizeLvl;
							case MAXHP:
								return 20 * autorizeLvl;
							case PHYSICAL_CRITICAL_RESIST:
								return 3 * autorizeLvl;
							case MAGICAL_DEFEND:
								return 2 * autorizeLvl;
						default:
							break;
						}
						return 0;
					case 1 << 3:
						switch (stat) {
							case PHYSICAL_ATTACK:
								return 1 * autorizeLvl;
							case BOOST_MAGICAL_SKILL:
								return 4 * autorizeLvl;
							case PHYSICAL_DEFENSE:
								return 4 * autorizeLvl;
							case MAXHP:
								return 22 * autorizeLvl;
							case PHYSICAL_CRITICAL_RESIST:
								return 4 * autorizeLvl;
							case MAGICAL_DEFEND:
								return 3 * autorizeLvl;
						default:
							break;
						}
						return 0;
				}
				return 0;
			case CHAIN: // 4.9 check
				switch (equipmentSlot) {
					case 1 << 5:
					case 1 << 11:
					case 1 << 4:
						switch (stat) {
							case PHYSICAL_ATTACK:
								return 1 * autorizeLvl;
							case BOOST_MAGICAL_SKILL:
								return 4 * autorizeLvl;
							case PHYSICAL_DEFENSE:
								return 3 * autorizeLvl;
							case MAXHP:
								return 16 * autorizeLvl;
							case PHYSICAL_CRITICAL_RESIST:
								return 2 * autorizeLvl;
							case MAGICAL_DEFEND:
								return 2 * autorizeLvl;
						default:
							break;
						}
						return 0;
					case 1 << 12:
						switch (stat) {
							case PHYSICAL_ATTACK:
								return 1 * autorizeLvl;
							case BOOST_MAGICAL_SKILL:
								return 4 * autorizeLvl;
							case PHYSICAL_DEFENSE:
								return 4 * autorizeLvl;
							case MAXHP:
								return 18 * autorizeLvl;
							case PHYSICAL_CRITICAL_RESIST:
								return 3 * autorizeLvl;
							case MAGICAL_DEFEND:
								return 2 * autorizeLvl;
						default:
							break;
						}
						return 0;
					case 1 << 3:
						switch (stat) {
							case PHYSICAL_ATTACK:
								return 1 * autorizeLvl;
							case BOOST_MAGICAL_SKILL:
								return 4 * autorizeLvl;
							case PHYSICAL_DEFENSE:
								return 5 * autorizeLvl;
							case MAXHP:
								return 20 * autorizeLvl;
							case PHYSICAL_CRITICAL_RESIST:
								return 4 * autorizeLvl;
							case MAGICAL_DEFEND:
								return 3 * autorizeLvl;
						default:
							break;
						}
						return 0;
				}
				return 0;
			case PLATE: // 4.9 check
				switch (equipmentSlot) {
					case 1 << 5:
					case 1 << 11:
					case 1 << 4:
						switch (stat) {
							case PHYSICAL_ATTACK:
								return 1 * autorizeLvl;
							case BOOST_MAGICAL_SKILL:
								return 4 * autorizeLvl;
							case PHYSICAL_DEFENSE:
								return 4 * autorizeLvl;
							case MAXHP:
								return 14 * autorizeLvl;
							case PHYSICAL_CRITICAL_RESIST:
								return 2 * autorizeLvl;
							case MAGICAL_DEFEND:
								return 2 * autorizeLvl;
						default:
							break;
						}
						return 0;
					case 1 << 12:
						switch (stat) {
							case PHYSICAL_ATTACK:
								return 1 * autorizeLvl;
							case BOOST_MAGICAL_SKILL:
								return 4 * autorizeLvl;
							case PHYSICAL_DEFENSE:
								return 5 * autorizeLvl;
							case MAXHP:
								return 16 * autorizeLvl;
							case PHYSICAL_CRITICAL_RESIST:
								return 3 * autorizeLvl;
							case MAGICAL_DEFEND:
								return 2 * autorizeLvl;
						default:
							break;
						}
						return 0;
					case 1 << 3:
						switch (stat) {
							case PHYSICAL_ATTACK:
								return 1 * autorizeLvl;
							case BOOST_MAGICAL_SKILL:
								return 4 * autorizeLvl;
							case PHYSICAL_DEFENSE:
								return 6 * autorizeLvl;
							case MAXHP:
								return 18 * autorizeLvl;
							case PHYSICAL_CRITICAL_RESIST:
								return 4 * autorizeLvl;
							case MAGICAL_DEFEND:
								return 3 * autorizeLvl;
						default:
							break;
						}
						return 0;
				}
				return 0;
			case SHIELD:
				switch (stat) {
					case DAMAGE_REDUCE:
						float reduceRate = autorizeLvl > 10 ? 0.2f : autorizeLvl * 0.02f;
						return Math.round(reduceRate * applyStat.getBase());
					case BLOCK:
						if (autorizeLvl > 10) {
							return 30 * (autorizeLvl - 10);
						}
						return 0;
					case MAXHP:
					if (autorizeLvl > 20) {
							return 100 * (autorizeLvl - 20);
						}
						return 0;
					case PHYSICAL_DEFENSE:
						if (autorizeLvl > 20) {
							return 50 * (autorizeLvl - 20);
						}
						return 0;
					case MAGIC_SKILL_BOOST_RESIST:
					if (autorizeLvl > 20) {
							return 20 * (autorizeLvl - 20);
						}
						return 0;
				default:
					break;
				}
		}
		return 0;
	}
Код:
if (item.getItemTemplate().getCategory() == ItemCategory.JACKET) {
					int id = item.getItemTemplate().getAuthorizeName();
					switch (id) {
						case 10086:
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_ATTACK, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.BOOST_MAGICAL_SKILL, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.MAXHP, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_DEFENSE, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_CRITICAL_RESIST, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.MAGICAL_CRITICAL_RESIST, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO_PHYSICAL, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO_MAGICAL, 0));
							break;
						default:
							break;
					if (item.getItemTemplate().getCategory() == ItemCategory.PANTS) {
					int id = item.getItemTemplate().getAuthorizeName();
					switch (id) {
						case 10087:
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_ATTACK, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.BOOST_MAGICAL_SKILL, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.MAXHP, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_DEFENSE, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_CRITICAL_RESIST, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.MAGICAL_CRITICAL_RESIST, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO_PHYSICAL, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO_MAGICAL, 0));
							break;
						default:
							break;
					}
					if (item.getItemTemplate().getCategory() == ItemCategory.SHOULDERS) {
					int id = item.getItemTemplate().getAuthorizeName();
					switch (id) {
						case 10088:
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_ATTACK, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.BOOST_MAGICAL_SKILL, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.MAXHP, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_DEFENSE, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_CRITICAL_RESIST, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.MAGICAL_CRITICAL_RESIST, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO_PHYSICAL, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO_MAGICAL, 0));
							break;
						default:
							break;
					}
					if (item.getItemTemplate().getCategory() == ItemCategory.GLOVES) {
					int id = item.getItemTemplate().getAuthorizeName();
					switch (id) {
						case 10089:
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_ATTACK, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.BOOST_MAGICAL_SKILL, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.MAXHP, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_DEFENSE, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_CRITICAL_RESIST, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.MAGICAL_CRITICAL_RESIST, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO_PHYSICAL, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO_MAGICAL, 0));
							break;
						default:
							break;
					}
					if (item.getItemTemplate().getCategory() == ItemCategory.SHOES) {
					int id = item.getItemTemplate().getAuthorizeName();
					switch (id) {
						case 10090:
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_ATTACK, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.BOOST_MAGICAL_SKILL, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.MAXHP, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_DEFENSE, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PHYSICAL_CRITICAL_RESIST, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.MAGICAL_CRITICAL_RESIST, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO_PHYSICAL, 0));
							modifiers.add(new StatEnchantFunction(item, StatEnum.PVP_DEFEND_RATIO_MAGICAL, 0));
							break;
						default:
							break;
					}

Все скомпилировалось удачно, но заточка все равно не засчитывается, статы отображаются в клиенте, но вот не прибавляют при заточке, т.е "на вид" все есть. На еделе статы самой шмотки в 0 заточке висят.
Может кто помочь с этим? куда еще нужно что-то прописать, чтобы заработало все?
 
enchant_tables или enchant_templates ? в котором надо прописать? и как потом закрепить итем под эти статы, в итем тамплейтс я просто не нашел параметр который берется с этих файлов.
 
чтобы найти это значение в клиенте case 10086: открываешь файл client_item_authorizetable.xml и оно тут, чтобы найти у какого итема <name>lt_torso_master</name>, открываешь client_items_armor.xml или client_items_etc.xml и ищешь <authorize_name>lt_torso_master</authorize_name>, а вообще у тебя в item_template.xml это 10086 должно присвоено быть итему
 
чтобы найти это значение в клиенте case 10086: открываешь файл client_item_authorizetable.xml и оно тут, чтобы найти у какого итема <name>lt_torso_master</name>, открываешь client_items_armor.xml или client_items_etc.xml и ищешь <authorize_name>lt_torso_master</authorize_name>, а вообще у тебя в item_template.xml это 10086 должно присвоено быть итему
Оно у меня присвоено итемам, вот один из них
Код:
<item_template id="110301918" name="Purified Marchutan Protector's Magic Jerkin" desc="1697041" name_desc="lt_torso_d_v_m3_q_65b" level="65" mask="36926" category="JACKET" armor_type="LEATHER" max_authorize="5" authorize_name="10086" max_stack_count="1" item_type="DEVANION" quality="MYTHIC" price="1612381" race="PC_ALL" restrict="65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65" bonus_apply="EQUIP" equipment_type="ARMOR" slot="8" max_enchant_bonus="0" m_slots="6">
		<modifiers>
			<add name="EVASION" value="320"/>
			<add name="MAGIC_SKILL_BOOST_RESIST" value="214"/>
			<add name="MAGICAL_RESIST" value="164"/>
			<add name="PHYSICAL_DEFENSE" value="335"/>
			<add name="MAXHP" value="594" bonus="true"/>
			<add name="PHYSICAL_DEFENSE" value="195" bonus="true"/>
			<add name="MAGIC_SKILL_BOOST_RESIST" value="77" bonus="true"/>
			<add name="MAGICAL_RESIST" value="49" bonus="true"/>
			<add name="PHYSICAL_CRITICAL_RESIST" value="40" bonus="true"/>
			<add name="BOOST_MAGICAL_SKILL" value="125" bonus="true"/>
			<rate name="FLY_SPEED" value="10" bonus="true"/>
			<rate name="BOOST_HATE" value="-38" bonus="true"/>
			<add name="PHYSICAL_ATTACK" value="10" bonus="true"/>
			<add name="PVP_DEFEND_RATIO" value="50" bonus="true"/>
		</modifiers>
		<actions>
			<remodel type="1"/>
		</actions>
	</item_template>
Вопрос был в том, что не так с тем кодом, который я скинул выше, или же где нужно что-то закрепить. Если это enchant_tables или enchant_templates , как правильно туда прописать?
 
Последнее редактирование:
знаю что сборки геров кривые, решил проверить authorize_name, открыл клиент и в файле как сказали выше <authorize_name>lt_torso_master</authorize_name> и сверил с item_template.xml.
authorize_name прописан
верно
открыл StatEnum, проверил прописаны ли статы, они оказались прописаны тоже.
SM_STATS_INFO открыл пакет, там тоже статы прописаны.

Не могу разобраться с логикой ItemEnchantBonus, ItemEnchantTemplate. этих двух файлов, точнее enchant_tables и enchant_templates
В файле enchant_tables есть вот такие строчки.
<enchant_table id="48" type="AUTHORIZE">

Вопрос, могу ли я например создать enchant_table id="49" type="AUTHORIZE" и записать туда статы с client_item_authorizetable?
Или же надо записывать в enchant_templates ?

Совсем в них запутался, немного не въезжаю:D Можете плиз "разжевать" по простенькому, мануалов нету просто.
Знаю что щас пару людей могут сказать "иди учи статику" вот я и до конца пытаюсь понять эти файлы.:minion_curious:
 
аа тогда делай дальше реализацию там криво
вот пытаюсь реализовать заточку даэваниона и водного дракона, код составил, все компилится но не идет. Есть ли еще какие пакеты кроме stats_info которые отвечают за статы при заточке?
 
допер в чем была проблема, забыл создать нов параметр в StatEnchantFunction.java на подобие getEnchantAdditionModifier.
Сэп всем за помощь) особенно за инфу с клиентской частью.:beer2-38:
 
Назад
Сверху