06-07-2011, 07:09 AM
от балды
ЗЫ: Инфа от дяди vistall`а. Для простых типов (int, byte, etc) есть представления вроде Integer.TYPE, Byte.TYPE. Соответственно можно f.getGenericType() == Integer.TYPE
Никто правда не запрещает извращений вроде карты (Map) и вытаскивать его в ai, но как-то совсем не тру
А как-то так
Код:
L2Npc npc = null;
...
for(Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
...
if("ai".equalsIgnoreCase(n.getNodeName()))
{
String clazz_name = n.getAttributes().getNamedItem("class").getNodeValue();
try
{
Class<?> clazz = getClass().getClassLoader().loadClass("l2.scripts.npc.ai." + clazz_name);
Object ai = clazz.newInstance();
for(Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
if("set".equalsIgnoreCase(d.getNodeName()))
{
String var_name = d.getAttributes().getNamedItem("name").getNodeValue();
String var_val = d.getAttributes().getNamedItem("val").getNodeValue();
for(Field f : clazz.getFields())
if(Modifier.isPublic(f.getModifiers()) && var_name.equals(f.getName()))
{
if(f.getType().getName().equals("int"))
f.setInt(ai, Integer.parseInt(var_val));
else if(f.getType().getName().equals("long"))
f.setLong(ai, Long.parseLong(var_val));
else if(f.getType().getName().equals("double"))
f.setDouble(ai, Double.parseDouble(var_val));
else if(f.getGenericType() == String.class)
f.set(ai, var_val);
else
// ... etc types
}
}
npc.setAI(ai);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
ЗЫ: Инфа от дяди vistall`а. Для простых типов (int, byte, etc) есть представления вроде Integer.TYPE, Byte.TYPE. Соответственно можно f.getGenericType() == Integer.TYPE
Никто правда не запрещает извращений вроде карты (Map) и вытаскивать его в ai, но как-то совсем не тру
