Сообщений: 320
Тем: 37
Зарегистрирован: Aug 2010
Репутация:
76
Доброго времени суток, подниму довольно сложную тему.
Создаю собственные крафт рецепты, и наткнулся на такой косяк
У крафт рецептов не работает свойство, race="ALL" можно указать только конкретно одну из двух расс, причём все XML поддерживаю свойство race="ALL", но видимо не хватает либо поддержки пакета в ядре, либо подходящей функции, уже всё перекопал, мб кто видел?
Код: <recipe_template id="155090006" nameid="1504773" skillid="40002" race="ALL" skillpoint="399" productid="100000904"
quantity="1" componentquantity="1">
<component quantity="1" itemid="152000911"/>
<comboproduct itemid="100000905"/>
<comboproduct itemid="100000906"/>
<comboproduct itemid="100000907"/>
<comboproduct itemid="100000908"/>
</recipe_template>
Консоль GameServer не советует:"Вы настраивайте сервер уже 1 час. Советуем вам немного отдохнуть".
Сообщений: 320
Тем: 37
Зарегистрирован: Aug 2010
Репутация:
76
Заплачу ядом, если кто сможет решить)
Консоль GameServer не советует:"Вы настраивайте сервер уже 1 час. Советуем вам немного отдохнуть".
Сообщений: 320
Тем: 37
Зарегистрирован: Aug 2010
Репутация:
76
Нашёл способ решения данной проблемы, необходимо в документе
SkillRace.java установить значение параметра ALL равным ELYOS и ASMODIANS, относительно скрипта в документе Race.java
Но как бы это написать...
Консоль GameServer не советует:"Вы настраивайте сервер уже 1 час. Советуем вам немного отдохнуть".
Сообщений: 45
Тем: 3
Зарегистрирован: Feb 2011
Репутация:
22
Wolfas, выложи куски кода (под спойлером) с твоими пояснениями, если что - будем дополнять. Честно говоря лично я не совсем понял что именно ты сделал.
Сообщений: 320
Тем: 37
Зарегистрирован: Aug 2010
Репутация:
76
Свиток в клиенте:
client_items.xml
<client_item>
<id>152291101</id>
<name>RES_WERAPON_1_01</name>
<desc>STR_REC_D_WS_SWORD_D_N_L2_P_50A</desc>
<desc_long>STR_REC_D_WS_SWORD_D_N_L2_P_50A_DESC</desc_long>
<item_type>ABYSS</item_type>
<icon_name>cr_01</icon_name>
<abyss_point>50000</abyss_point>
<abyss_item>medal_01</abyss_item>
<abyss_item_count>50</abyss_item_count>
<price>50</price>
<activation_mode>Both</activation_mode>
<activation_count>1</activation_count>
<breakdown>1</breakdown>
<activate_target>standalone</activate_target>
<use_delay_type_id>52</use_delay_type_id>
<use_delay>0</use_delay>
<max_stack_count>20</max_stack_count>
<equipment_slots>none</equipment_slots>
<quality>MYTHIC</quality>
<level>50</level>
<lore>FALSE</lore>
<can_exchange>TRUE</can_exchange>
<can_sell_to_npc>TRUE</can_sell_to_npc>
<can_deposit_to_character_warehouse>TRUE</can_deposit_to_character_warehouse>
<can_deposit_to_account_warehouse>TRUE</can_deposit_to_account_warehouse>
<can_deposit_to_guild_warehouse>TRUE</can_deposit_to_guild_warehouse>
<breakable>TRUE</breakable>
<soul_bind>FALSE</soul_bind>
<remove_when_logout>FALSE</remove_when_logout>
<gender_permitted>all</gender_permitted>
<warrior>1</warrior>
<scout>1</scout>
<mage>1</mage>
<cleric>1</cleric>
<fighter>1</fighter>
<knight>1</knight>
<assassin>1</assassin>
<ranger>1</ranger>
<wizard>1</wizard>
<elementalist>1</elementalist>
<chanter>1</chanter>
<priest>1</priest>
<bonus_apply>inventory</bonus_apply>
<motion_name>useup</motion_name>
<use_fx>sys_useitem.fire_potion.fire</use_fx>
<use_fx_bone>Bip01 Spine1</use_fx_bone>
<craft_recipe_info>CR_WERAPON_1_01</craft_recipe_info>
<ui_sound_type>Sounds/item/item_pap_parchment</ui_sound_type>
<cash_item>0</cash_item>
<can_split>TRUE</can_split>
<item_drop_permitted>FALSE</item_drop_permitted>
<disassembly_item>0</disassembly_item>
<race_permitted>pc_light pc_dark</race_permitted>
</client_item>
Свиток на сервере:
item_templates.xml
<item_template id="152291101" level="50" mask="12414" max_stack_count="10" item_type="ABYSS" item_category="SCROLL" quality="MYTHIC" aic="50" ap="50000" ai="186000030" price="50" race="ALL" restrict="1,1,1,1,1,1,1,1,1,1,1,1" desc="1472763" usedelayid="52">
<actions>
<craftlearn recipeid="155901101"/>
</actions>
</item_template>
Рецепт в клиенте:
client_combine_recipe.xml
<client_combine_recipe>
<id>155901101</id>
<name>CR_WERAPON_1_01</name>
<desc>STR_D_WS_SWORD_D_N_L2_P_50A</desc>
<combineskill>weaponsmith</combineskill>
<qualification_race>all</qualification_race>
<required_skillpoint>1</required_skillpoint>
<auto_learn>0</auto_learn>
<product>WN_02_01</product>
<product_quantity>1</product_quantity>
<component_quantity>3</component_quantity>
<component1>WN_01_01</component1>
<compo1_quantity>1</compo1_quantity>
<component2>medal_01</component2>
<compo2_quantity>100</compo2_quantity>
<component3>medal_02</component3>
<compo3_quantity>100</compo3_quantity>
<combo1_product>WN_02_01</combo1_product>
</client_combine_recipe>
Рецепт на сервере:
recipe_template.xml
<recipe_template id="155901101" nameid="1469795" skillid="40002" skillpoint="1" race="ALL"
productid="100009201" quantity="1" componentquantity="3">
<component quantity="1" itemid="100009101"/>
<component quantity="100" itemid="186000030"/>
<component quantity="100" itemid="186000031"/>
<comboproduct itemid="100009201"/>
</recipe_template>
Где я вижу проблему:
skillRace.java
package com.aionjava.gameserver.skillengine.model.learn;
/**
* @author ATracer
* @param Light ol dark side of skill, or both.
*/
public enum SkillRace {
/**
* Positioning in enum should correspond to com.aionemu.gameserver.model.Race *
*/
PC_LIGHT,
PC_DARK,
ALL
}
Race.java
package com.aionjava.gameserver.model;
import javax.xml.bind.annotation.XmlEnum;
/**
* Basic enum with races.<br>
* I believe that NPCs will have their own rances, so it's quite comfortable to have it in the same place
*
* @author SoulKeeper
*/
@XmlEnum
public enum Race {
/**
* Playable race
*/
ELYOS(0),
/**
* Playable races
*/
ASMODIANS(1),
/**
* Npc races
*/
LYCAN(2),
CONSTRUCT(3),
CARRIER(4),
DRAKAN(5),
LIZARDMAN(6),
TELEPORTER(7),
NAGA(8),
BROWNIE(9),
KRALL(10),
SHULACK(11),
BARRIER(12),
PC_LIGHT_CASTLE_DOOR(13),
PC_DARK_CASTLE_DOOR(14),
DRAGON_CASTLE_DOOR(15),
GCHIEF_LIGHT(16),
GCHIEF_DARK(17),
DRAGON(18),
OUTSIDER(19),
RATMAN(20),
DEMIHUMANOID(21),
UNDEAD(22),
BEAST(23),
MAGICALMONSTER(24),
ELEMENTAL(25),
/**
* Special races
*/
NONE(26),
PC_ALL(27),
/**
* id of race
*/
private int raceId;
/**
* Constructor.
*
* @param raceId id of the message
*/
private Race(int raceId) {
this.raceId = raceId;
}
/**
* Get id of this race.
*
* @return race id
*/
public int getRaceId() {
return raceId;
}
}
Консоль GameServer не советует:"Вы настраивайте сервер уже 1 час. Советуем вам немного отдохнуть".
Сообщений: 202
Тем: 7
Зарегистрирован: Dec 2010
Репутация:
54
На сколько я понял за добавление рецептов в книгу рецептов отвечает CraftLearnAction (путь package com.aionengine.gameserver.itemengine.actions;) , там как раз есть проверка SkillRace и Race она там идёт таким образом:
PHP код: <?php
if (template.getRace().ordinal() != player.getCommonData().getRace().getRaceId())
return false;
как видно сверка идёт по значениям констант в обохи перечислителях(enum`ax) , но как мы знаем раса игрока не может быть ALL, поэтому та проверка и не пропускает далее если у рецепта стоит раса ALL.
Её можно замеить сделующим образом:
PHP код: <?php
switch(template.getRace())
{
case ALL:
break;
default:
if (template.getRace().ordinal() != player.getCommonData().getRace().getRaceId())
return false;
}
Дверь запили!
Сообщений: 320
Тем: 37
Зарегистрирован: Aug 2010
Репутация:
76
flashman Спасибо! Вы меня спасли)
Консоль GameServer не советует:"Вы настраивайте сервер уже 1 час. Советуем вам немного отдохнуть".
|