HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 07.08.2015, 13:53
kick
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами: 5952720

Репутация: 6527


По умолчанию

Как я говорил про аугментацию в том посте? Так а что там изменилось, ничего осталось на том же уровне.

[QUOTE="Спойлер"]
[COLOR="#363940"]
package core.gameserver.tables;

import gnu.trove.list.array.TDoubleArrayList;

import gnu.trove.map.hash.TIntObjectHashMap;

import java.io.ByteArrayInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import java.util.StringTokenizer;

import javax.xml.parsers.DocumentBuilderFactory;

import core.commons.crypt.CryptUtil;

import core.commons.util.Rnd;

import core.gameserver.Config;

import core.gameserver.stats.Stats;

import core.gameserver.stats.funcs.Func;

import core.gameserver.stats.funcs.FuncAdd;

import core.gameserver.stats.triggers.TriggerInfo;

import core.gameserver.stats.triggers.TriggerType;

import core.gameserver.templates.item.ItemTemplate;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.w3c.dom.Document;

import org.w3c.dom.NamedNodeMap;

import org.w3c.dom.Node;

public class AugmentationData

{

private static final Logger _log = LoggerFactory.getLogger(AugmentationData.class);

private static AugmentationData _Instance;

public static AugmentationData getInstance()

{

if(_Instance == null)

_Instance = new AugmentationData();

return _Instance;

}

// stats

private static final int STAT_START = 1;

private static final int STAT_END = 14560;

private static final int STAT_BLOCKSIZE = 3640;

//private static final int STAT_NUMBEROF_BLOCKS = 4;

private static final int STAT_SUBBLOCKSIZE = 91;

//private static final int STAT_NUMBEROF_SUBBLOCKS = 40;

private static final int STAT_NUM = 13;

private static final byte[] STATS1_MAP = new byte[STAT_SUBBLOCKSIZE];

private static final byte[] STATS2_MAP = new byte[STAT_SUBBLOCKSIZE];

// skills

private static final int BLUE_START = 14561;

// private static final int PURPLE_START = 14578;

// private static final int RED_START = 14685;

private static final int SKILLS_BLOCKSIZE = 178;

// basestats

private static final int BASESTAT_STR = 16341;

private static final int BASESTAT_CON = 16342;

private static final int BASESTAT_INT = 16343;

private static final int BASESTAT_MEN = 16344;

// accessory

private static final int ACC_START = 16669;

private static final int ACC_BLOCKS_NUM = 10;

private static final int ACC_STAT_SUBBLOCKSIZE = 21;

private static final int ACC_STAT_NUM = 6;

private static final int ACC_RING_START = ACC_START;

private static final int ACC_RING_SKILLS = 18;

private static final int ACC_RING_BLOCKSIZE = ACC_RING_SKILLS + 4 * ACC_STAT_SUBBLOCKSIZE;

private static final int ACC_RING_END = ACC_RING_START + ACC_BLOCKS_NUM * ACC_RING_BLOCKSIZE - 1;

private static final int ACC_EAR_START = ACC_RING_END + 1;

private static final int ACC_EAR_SKILLS = 18;

private static final int ACC_EAR_BLOCKSIZE = ACC_EAR_SKILLS + 4 * ACC_STAT_SUBBLOCKSIZE;

private static final int ACC_EAR_END = ACC_EAR_START + ACC_BLOCKS_NUM * ACC_EAR_BLOCKSIZE - 1;

private static final int ACC_NECK_START = ACC_EAR_END + 1;

private static final int ACC_NECK_SKILLS = 24;

private static final int ACC_NECK_BLOCKSIZE = ACC_NECK_SKILLS + 4 * ACC_STAT_SUBBLOCKSIZE;

private static final int ACC_END = ACC_NECK_START + ACC_BLOCKS_NUM * ACC_NECK_BLOCKSIZE;

private static final byte[] ACC_STATS1_MAP = new byte[ACC_STAT_SUBBLOCKSIZE];

private static final byte[] ACC_STATS2_MAP = new byte[ACC_STAT_SUBBLOCKSIZE];

private List[] _augStats = new ArrayList[4];

private List[] _augAccStats = new ArrayList[4];

private List[] _blueSkills = new ArrayList[10];

private List[] _purpleSkills = new ArrayList[10];

private List[] _redSkills = new ArrayList[10];

private List[] _yellowSkills = new ArrayList[10];

private TIntObjectHashMap _allSkills = new TIntObjectHashMap();

public AugmentationData()

{

_log.info("Initializing AugmentationData.");

_augStats[0] = new ArrayList();

_augStats[1] = new ArrayList();

_augStats[2] = new ArrayList();

_augStats[3] = new ArrayList();

_augAccStats[0] = new ArrayList();

_augAccStats[1] = new ArrayList();

_augAccStats[2] = new ArrayList();

_augAccStats[3] = new ArrayList();

// Lookup tables structure: STAT1 represent first stat, STAT2 - second.

// If both values are the same - use solo stat, if different - combined.

int idx;

// weapon augmentation block: solo values first

// 00-00, 01-01 ... 11-11,12-12

for(idx = 0; idx ();

_purpleSkills[I]= new ArrayList();

_redSkills[I]= new ArrayList();

_yellowSkills[I]= new ArrayList();

}

load();

// Use size*4: since theres 4 blocks of stat-data with equivalent size

_log.info("AugmentationData: Loaded: " + _augStats[0].size() * 4 + " augmentation stats.");

_log.info("AugmentationData: Loaded: " + _augAccStats[0].size() * 4 + " accessory augmentation stats.");

for(int i = 0; i = _singleSize || i = _combinedSize || i ) _blueSkills[k]).add(augmentationId);

else if(type.equalsIgnoreCase("purple"))

((List) _purpleSkills[k]).add(augmentationId);

else if(type.equalsIgnoreCase("red"))

((List) _redSkills[k]).add(augmentationId);

_allSkills.put(augmentationId, new TriggerInfo(skillId, skillLvL, t, chance));

}

if(badAugmantData != 0)

_log.info("AugmentationData: " + badAugmantData + " bad skill(s) were skipped.");

}

catch(Exception e)

{

_log.error("Error parsing augmentation_skillmap.xml.", e);

return;

}

// Load the stats from xml

for(int i = 1; i ) _augStats[(i - 1)]).add(new augmentationStat(Stats.valueOfXml(statName), soloValues, combinedValues));

}

}

catch(Exception e)

{

_log.error("Error parsing augmentation_stats" + i + ".xml.", e);

return;

}

try

{

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

factory.setValidating(false);

factory.setIgnoringComments(true);

File file = new File(Config.DATAPACK_ROOT, "data/xml/augmentation/augmentation_jewel_stats" + i + ".xml");

FileInputStream stream = new FileInputStream(file);

InputStream output;

if((byte)stream.read() == 0x00)

{

byte[] bytes = new byte[0];

output = new ByteArrayInputStream(bytes);

output = CryptUtil.decrypt(stream, output);

}

else

output = new FileInputStream(file);

Document doc = factory.newDocumentBuilder().parse(output);

for(Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())

if("list".equalsIgnoreCase(n.getNodeName()))

for(Node d = n.getFirstChild(); d != null; d = d.getNextSibling())

if("stat".equalsIgnoreCase(d.getNodeName()))

{

NamedNodeMap attrs = d.getAttributes();

String statName = attrs.getNamedItem("name").getNodeValue();

double soloValues[] = null, combinedValues[] = null;

for(Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling())

if("table".equalsIgnoreCase(cd.getNodeName()))

{

attrs = cd.getAttributes();

String tableName = attrs.getNamedItem("name").getNodeValue();

StringTokenizer data = new StringTokenizer(cd.getFirstChild().getNodeValue()) ;

TDoubleArrayList array = new TDoubleArrayList();

while(data.hasMoreTokens())

array.add(Double.parseDouble(data.nextToken()));

if(tableName.equalsIgnoreCase("#soloValues"))

{

soloValues = new double[array.size()];

int x = 0;

for(double value : array.toArray())

soloValues[x++] = value;

}

else

{

combinedValues = new double[array.size()];

int x = 0;

for(double value : array.toArray())

combinedValues[x++] = value;

}

}

// store this stat

((List) _augAccStats[(i - 1)]).add(new augmentationStat(Stats.valueOfXml(statName), soloValues, combinedValues));

}

}

catch(Exception e)

{

_log.error("Error parsing jewel augmentation_stats" + i + ".xml.", e);

return;

}

}

}

public int generateRandomAugmentation(int lifeStoneLevel, int lifeStoneGrade, int bodyPart)

{

switch(bodyPart)

{

case ItemTemplate.SLOT_L_FINGER:

case ItemTemplate.SLOT_R_FINGER:

case ItemTemplate.SLOT_L_FINGER | ItemTemplate.SLOT_R_FINGER:

case ItemTemplate.SLOT_L_EAR:

case ItemTemplate.SLOT_R_EAR:

case ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR:

case ItemTemplate.SLOT_NECK:

return generateRandomAccessoryAugmentation(lifeStoneLevel , bodyPart);

default:

return generateRandomWeaponAugmentation(lifeStoneLevel, lifeStoneGrade);

}

}

private int generateRandomWeaponAugmentation(int lifeStoneLevel, int lifeStoneGrade)

{

// Note that stat12 stands for stat 1 AND 2 (same for stat34 ;p )

// this is because a value can contain up to 2 stat modifications

// (there are two int values packed in one integer value, meaning 4 stat modifications at max)

// for more info take a look at getAugStatsById(...)

// Note: lifeStoneGrade: (0 means low grade, 3 top grade)

// First: determine whether we will add a skill/baseStatModifier or not

// because this determine which color could be the result

int stat12 = 0;

int stat34 = 0;

boolean generateSkill = false;

boolean generateGlow = false;

//lifestonelevel is used for stat Id and skill level, but here the max level is 9

lifeStoneLevel = Math.min(lifeStoneLevel, 9);

switch(lifeStoneGrade)

{

case 0:

generateSkill = Rnd.chance(Config.AUGMENTATION_NG_SKILL_CHANCE);

generateGlow = Rnd.chance(Config.AUGMENTATION_NG_GLOW_CHANCE);

break;

case 1:

generateSkill = Rnd.chance(Config.AUGMENTATION_MID_SKILL_CHANCE);

generateGlow = Rnd.chance(Config.AUGMENTATION_MID_GLOW_CHANCE);

break;

case 2:

generateSkill = Rnd.chance(Config.AUGMENTATION_HIGH_SKILL_CHANCE);

generateGlow = Rnd.chance(Config.AUGMENTATION_HIGH_GLOW_CHANCE);

break;

case 3:

generateSkill = Rnd.chance(Config.AUGMENTATION_TOP_SKILL_CHANCE);

generateGlow = Rnd.chance(Config.AUGMENTATION_TOP_GLOW_CHANCE);

break;

}

if(!generateSkill && Rnd.get(1, 100) = 2)

offset = lifeStoneLevel * STAT_SUBBLOCKSIZE + (temp - 2) * STAT_BLOCKSIZE + lifeStoneGrade * 10 * STAT_SUBBLOCKSIZE + 1;

else

offset = lifeStoneLevel * STAT_SUBBLOCKSIZE + (temp - 2) * STAT_BLOCKSIZE + Rnd.get(0, 1) * 10 * STAT_SUBBLOCKSIZE + 1;

}

else if(!generateGlow)

offset = lifeStoneLevel * STAT_SUBBLOCKSIZE + Rnd.get(0, 1) * STAT_BLOCKSIZE + 1;

else

offset = lifeStoneLevel * STAT_SUBBLOCKSIZE + Rnd.get(0, 1) * STAT_BLOCKSIZE + (lifeStoneGrade + resultColor) / 2 * 10 * STAT_SUBBLOCKSIZE + 1;

stat12 = Rnd.get(offset, offset + STAT_SUBBLOCKSIZE - 1);

return ((stat34
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.