У меня все ядра на 100% напряглись.хочу поменять сколько поинтов добавляется при заточке не 1 при заточке от 0 до 3х и не 3 от 3х и выше, а другой вариант, который описывается какой-нибудь арифметической прогрессией
/*
* Copyright © 2004-2021 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.clientpackets;
import static com.l2jserver.gameserver.config.Configuration.general;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.l2jserver.gameserver.data.xml.impl.EnchantItemData;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.items.L2Item;
import com.l2jserver.gameserver.model.items.enchant.EnchantResultType;
import com.l2jserver.gameserver.model.items.enchant.EnchantScroll;
import com.l2jserver.gameserver.model.items.enchant.EnchantSupportItem;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.model.skills.CommonSkill;
import com.l2jserver.gameserver.model.skills.Skill;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.EnchantResult;
import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
import com.l2jserver.gameserver.network.serverpackets.ItemList;
import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.gameserver.util.Util;
public final class RequestEnchantItem extends L2GameClientPacket {
private static final Logger LOG_ENCHANT_ITEM = LoggerFactory.getLogger("enchant_item");
private static final String _C__5F_REQUESTENCHANTITEM = "[C] 5F RequestEnchantItem";
private int _objectId;
private int _supportId;
@Override
protected void readImpl() {
_objectId = readD();
_supportId = readD();
}
@Override
protected void runImpl() {
final L2PcInstance activeChar = getClient().getActiveChar();
if ((activeChar == null) || (_objectId == 0)) {
return;
}
if (!activeChar.isOnline() || getClient().isDetached()) {
activeChar.setActiveEnchantItemId(L2PcInstance.ID_NONE);
return;
}
if (activeChar.isProcessingTransaction() || activeChar.isInStoreMode()) {
activeChar.sendPacket(SystemMessageId.CANNOT_ENCHANT_WHILE_STORE);
activeChar.setActiveEnchantItemId(L2PcInstance.ID_NONE);
return;
}
L2ItemInstance item = activeChar.getInventory().getItemByObjectId(_objectId);
L2ItemInstance scroll = activeChar.getInventory().getItemByObjectId(activeChar.getActiveEnchantItemId());
L2ItemInstance support = activeChar.getInventory().getItemByObjectId(activeChar.getActiveEnchantSupportItemId());
if ((item == null) || (scroll == null)) {
activeChar.setActiveEnchantItemId(L2PcInstance.ID_NONE);
return;
}
// template for scroll
final EnchantScroll scrollTemplate = EnchantItemData.getInstance().getEnchantScroll(scroll);
// scroll not found in list
if (scrollTemplate == null) {
return;
}
// template for support item, if exist
EnchantSupportItem supportTemplate = null;
if (support != null) {
if (support.getObjectId() != _supportId) {
activeChar.setActiveEnchantItemId(L2PcInstance.ID_NONE);
return;
}
supportTemplate = EnchantItemData.getInstance().getSupportItem(support);
}
// first validation check
if (!scrollTemplate.isValid(item, supportTemplate)) {
activeChar.sendPacket(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION);
activeChar.setActiveEnchantItemId(L2PcInstance.ID_NONE);
activeChar.sendPacket(new EnchantResult(2, 0, 0));
return;
}
// fast auto-enchant cheat check
if ((activeChar.getActiveEnchantTimestamp() == 0) || ((System.currentTimeMillis() - activeChar.getActiveEnchantTimestamp()) < 2000)) {
Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " use autoenchant program ");
activeChar.setActiveEnchantItemId(L2PcInstance.ID_NONE);
activeChar.sendPacket(new EnchantResult(2, 0, 0));
return;
}
// attempting to destroy scroll
scroll = activeChar.getInventory().destroyItem("Enchant", scroll.getObjectId(), 1, activeChar, item);
if (scroll == null) {
activeChar.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS);
Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to enchant with a scroll he doesn't have");
activeChar.setActiveEnchantItemId(L2PcInstance.ID_NONE);
activeChar.sendPacket(new EnchantResult(2, 0, 0));
return;
}
// attempting to destroy support if exist
if (support != null) {
support = activeChar.getInventory().destroyItem("Enchant", support.getObjectId(), 1, activeChar, item);
if (support == null) {
activeChar.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS);
Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to enchant with a support item he doesn't have");
activeChar.setActiveEnchantItemId(L2PcInstance.ID_NONE);
activeChar.sendPacket(new EnchantResult(2, 0, 0));
return;
}
}
final InventoryUpdate iu = new InventoryUpdate();
synchronized (item) {
// last validation check
if ((item.getOwnerId() != activeChar.getObjectId()) || (item.isEnchantable() == 0)) {
activeChar.sendPacket(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION);
activeChar.setActiveEnchantItemId(L2PcInstance.ID_NONE);
activeChar.sendPacket(new EnchantResult(2, 0, 0));
return;
}
final EnchantResultType resultType = scrollTemplate.calculateSuccess(activeChar, item, supportTemplate);
switch (resultType) {
case ERROR -> {
activeChar.sendPacket(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION);
activeChar.setActiveEnchantItemId(L2PcInstance.ID_NONE);
activeChar.sendPacket(new EnchantResult(2, 0, 0));
}
case SUCCESS -> {
L2Item it = item.getItem();
// Increase enchant level only if scroll's base template has chance, some armors can success over +20 but they shouldn't have increased.
if (scrollTemplate.getChance(activeChar, item) > 0) {
item.setEnchantLevel(item.getEnchantLevel() + 1);
item.updateDatabase();
}
activeChar.sendPacket(new EnchantResult(0, 0, 0));
if (general().logItemEnchants()) {
LOG_ENCHANT_ITEM.info("ENCHANTED {} using {} and {} by {}.", item, scroll, support, activeChar);
}
// announce the success
int minEnchantAnnounce = item.isArmor() ? 6 : 7;
int maxEnchantAnnounce = item.isArmor() ? 0 : 15;
if ((item.getEnchantLevel() == minEnchantAnnounce) || (item.getEnchantLevel() == maxEnchantAnnounce)) {
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_SUCCESSFULY_ENCHANTED_A_S2_S3);
sm.addCharName(activeChar);
sm.addInt(item.getEnchantLevel());
sm.addItemName(item);
activeChar.broadcastPacket(sm);
Skill skill = CommonSkill.FIREWORK.getSkill();
if (skill != null) {
activeChar.broadcastPacket(new MagicSkillUse(activeChar, activeChar, skill.getId(), skill.getLevel(), skill.getHitTime(), skill.getReuseDelay()));
}
}
if ((item.isArmor()) && (item.getEnchantLevel() == 4) && item.isEquipped()) {
Skill enchant4Skill = it.getEnchant4Skill();
if (enchant4Skill != null) {
// add skills bestowed from +4 armor
activeChar.addSkill(enchant4Skill, false);
activeChar.sendSkillList();
}
}
}
case FAILURE -> {
if (scrollTemplate.isSafe()) {
// safe enchant - remain old value
activeChar.sendPacket(SystemMessageId.SAFE_ENCHANT_FAILED);
activeChar.sendPacket(new EnchantResult(5, 0, 0));
if (general().logItemEnchants()) {
LOG_ENCHANT_ITEM.info("FAILED_SAFE_ENCHANTING {} using {} and {} by {}.", item, scroll, support, activeChar);
}
} else {
// unequip item on enchant failure to avoid item skills stack
if (item.isEquipped()) {
if (item.getEnchantLevel() > 0) {
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED);
sm.addInt(item.getEnchantLevel());
sm.addItemName(item);
activeChar.sendPacket(sm);
} else {
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISARMED);
sm.addItemName(item);
activeChar.sendPacket(sm);
}
L2ItemInstance[] unequiped = activeChar.getInventory().unEquipItemInSlotAndRecord(item.getLocationSlot());
for (L2ItemInstance itm : unequiped) {
iu.addModifiedItem(itm);
}
activeChar.sendPacket(iu);
activeChar.broadcastUserInfo();
}
if (scrollTemplate.isBlessed()) {
// blessed enchant - clear enchant value
activeChar.sendPacket(SystemMessageId.BLESSED_ENCHANT_FAILED);
item.setEnchantLevel(0);
item.updateDatabase();
activeChar.sendPacket(new EnchantResult(3, 0, 0));
if (general().logItemEnchants()) {
LOG_ENCHANT_ITEM.info("FAILED_BLESSED_ENCHANTING {} using {} and {} by {}.", item, scroll, support, activeChar);
}
} else {
// enchant failed, destroy item
item = activeChar.getInventory().destroyItem("Enchant", item, activeChar, null);
if (item == null) {
// unable to destroy item, cheater ?
Util.handleIllegalPlayerAction(activeChar, "Unable to delete item on enchant failure from player " + activeChar.getName() + ", possible cheater !");
activeChar.setActiveEnchantItemId(L2PcInstance.ID_NONE);
activeChar.sendPacket(new EnchantResult(2, 0, 0));
if (general().logItemEnchants()) {
LOG_ENCHANT_ITEM.warn("CANNOT_DESTROY {} using {} and {} by {}.", item, scroll, support, activeChar);
}
return;
}
L2World.getInstance().removeObject(item);
final int crystalId = item.getItem().getCrystalItemId();
if ((crystalId != 0) && item.getItem().isCrystallizable()) {
int count = item.getCrystalCount() - ((item.getItem().getCrystalCount() + 1) / 2);
count = Math.max(count, 1);
activeChar.getInventory().addItem("Enchant", crystalId, count, activeChar, item);
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S);
sm.addItemName(crystalId);
sm.addLong(count);
activeChar.sendPacket(sm);
activeChar.sendPacket(new EnchantResult(1, crystalId, count));
} else {
activeChar.sendPacket(new EnchantResult(4, 0, 0));
}
if (general().logItemEnchants()) {
LOG_ENCHANT_ITEM.warn("FAILED_ENCHANTING {} using {} and {} by {}.", item, scroll, support, activeChar);
}
}
}
}
}
final StatusUpdate su = new StatusUpdate(activeChar);
su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad());
activeChar.sendPacket(su);
if (!general().forceInventoryUpdate()) {
if (scroll.getCount() == 0) {
iu.addRemovedItem(scroll);
} else {
iu.addModifiedItem(scroll);
}
if (item.getCount() == 0) {
iu.addRemovedItem(item);
} else {
iu.addModifiedItem(item);
}
if (support != null) {
if (support.getCount() == 0) {
iu.addRemovedItem(support);
} else {
iu.addModifiedItem(support);
}
}
activeChar.sendPacket(iu);
} else {
activeChar.sendPacket(new ItemList(activeChar, true));
}
activeChar.broadcastUserInfo();
activeChar.setActiveEnchantItemId(L2PcInstance.ID_NONE);
}
}
@Override
public String getType() {
return _C__5F_REQUESTENCHANTITEM;
}
}
Посмотреть вложение 54512
бонус Ф.Атаки и М.Атаки
я хочу поменять сколько поинтов этих параметров добавляется при заточке перечисленных в описании предметов
в xml файлах этих параметров я не нашёл, у меня в них указаны доп.шансы до 9 включительно , также указаны доп. шансы которые плюсуются при добавлении камней
поиск в исходниках по EnchantItem ничего не дал
в xml файла добавлены предметы, которые не подпадают под общие правила, такие как
<item id="21580"> <!-- Olf's T-shirt -->
<options level="0" option1="24965" />
<options level="1" option1="24966" />
<options level="2" option1="24967" />
<options level="3" option1="24968" />
<options level="4" option1="24969" option2="24975" />
<options level="5" option1="24970" option2="24976" />
<options level="6" option1="24971" option2="24977" />
<options level="7" option1="24972" option2="24978" option3="24982" />
<options level="8" option1="24973" option2="24979" option3="24982" />
<options level="9" option1="24974" option2="24980" option3="24983" />
<options level="10" option1="24984" option2="24985" option3="24983" />
</item>
/*
* Copyright (C) 2004-2016 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.model.stats.functions;
import com.l2jserver.Config;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.conditions.Condition;
import com.l2jserver.gameserver.model.items.L2Item;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.model.items.type.WeaponType;
import com.l2jserver.gameserver.model.skills.Skill;
import com.l2jserver.gameserver.model.stats.Stats;
public class FuncEnchant extends AbstractFunction
{
public FuncEnchant(Stats stat, int order, Object owner, double value, Condition applayCond)
{
super(stat, order, owner, value, applayCond);
}
@Override
public double calc(L2Character effector, L2Character effected, Skill skill, double initVal)
{
double value = initVal;
if ((getApplayCond() != null) && !getApplayCond().test(effector, effected, skill))
{
return value;
}
L2ItemInstance item = (L2ItemInstance) getFuncOwner();
int enchant = item.getEnchantLevel();
if (enchant <= 0)
{
return value;
}
int overenchant = 0;
if (enchant > 3)
{
overenchant = enchant - 3;
enchant = 3;
}
if (effector.isPlayer())
{
if (effector.getActingPlayer().isInOlympiadMode() && (Config.ALT_OLY_ENCHANT_LIMIT >= 0) && ((enchant + overenchant) > Config.ALT_OLY_ENCHANT_LIMIT))
{
if (Config.ALT_OLY_ENCHANT_LIMIT > 3)
{
overenchant = Config.ALT_OLY_ENCHANT_LIMIT - 3;
}
else
{
overenchant = 0;
enchant = Config.ALT_OLY_ENCHANT_LIMIT;
}
}
}
if ((getStat() == Stats.MAGIC_DEFENCE) || (getStat() == Stats.POWER_DEFENCE))
{
return value + enchant + (3 * overenchant);
}
if (getStat() == Stats.MAGIC_ATTACK)
{
switch (item.getItem().getItemGradeSPlus())
{
case S:
// M. Atk. increases by 4 for all weapons.
// Starting at +4, M. Atk. bonus double.
value += (4 * enchant) + (8 * overenchant);
break;
case A:
case B:
case C:
// M. Atk. increases by 3 for all weapons.
// Starting at +4, M. Atk. bonus double.
value += (3 * enchant) + (6 * overenchant);
break;
case D:
case NONE:
// M. Atk. increases by 2 for all weapons. Starting at +4, M. Atk. bonus double.
// Starting at +4, M. Atk. bonus double.
value += (2 * enchant) + (4 * overenchant);
break;
}
return value;
}
if (item.isWeapon())
{
final WeaponType type = (WeaponType) item.getItemType();
switch (item.getItem().getItemGradeSPlus())
{
case S:
if (item.getWeaponItem().getBodyPart() == L2Item.SLOT_LR_HAND)
{
if ((type == WeaponType.BOW) || (type == WeaponType.CROSSBOW))
{
// P. Atk. increases by 10 for bows.
// Starting at +4, P. Atk. bonus double.
value += (10 * enchant) + (20 * overenchant);
}
else
{
// P. Atk. increases by 6 for two-handed swords, two-handed blunts, dualswords, and two-handed combat weapons.
// Starting at +4, P. Atk. bonus double.
value += (6 * enchant) + (12 * overenchant);
}
}
else
{
// P. Atk. increases by 5 for one-handed swords, one-handed blunts, daggers, spears, and other weapons.
// Starting at +4, P. Atk. bonus double.
value += (5 * enchant) + (10 * overenchant);
}
break;
case A:
if (item.getWeaponItem().getBodyPart() == L2Item.SLOT_LR_HAND)
{
if ((type == WeaponType.BOW) || (type == WeaponType.CROSSBOW))
{
// P. Atk. increases by 8 for bows.
// Starting at +4, P. Atk. bonus double.
value += (8 * enchant) + (16 * overenchant);
}
else
{
// P. Atk. increases by 5 for two-handed swords, two-handed blunts, dualswords, and two-handed combat weapons.
// Starting at +4, P. Atk. bonus double.
value += (5 * enchant) + (10 * overenchant);
}
}
else
{
// P. Atk. increases by 4 for one-handed swords, one-handed blunts, daggers, spears, and other weapons.
// Starting at +4, P. Atk. bonus double.
value += (4 * enchant) + (8 * overenchant);
}
break;
case B:
case C:
if (item.getWeaponItem().getBodyPart() == L2Item.SLOT_LR_HAND)
{
if ((type == WeaponType.BOW) || (type == WeaponType.CROSSBOW))
{
// P. Atk. increases by 6 for bows.
// Starting at +4, P. Atk. bonus double.
value += (6 * enchant) + (12 * overenchant);
}
else
{
// P. Atk. increases by 4 for two-handed swords, two-handed blunts, dualswords, and two-handed combat weapons.
// Starting at +4, P. Atk. bonus double.
value += (4 * enchant) + (8 * overenchant);
}
}
else
{
// P. Atk. increases by 3 for one-handed swords, one-handed blunts, daggers, spears, and other weapons.
// Starting at +4, P. Atk. bonus double.
value += (3 * enchant) + (6 * overenchant);
}
break;
case D:
case NONE:
switch (type)
{
case BOW:
case CROSSBOW:
{
// Bows increase by 4.
// Starting at +4, P. Atk. bonus double.
value += (4 * enchant) + (8 * overenchant);
break;
}
default:
// P. Atk. increases by 2 for all weapons with the exception of bows.
// Starting at +4, P. Atk. bonus double.
value += (2 * enchant) + (4 * overenchant);
break;
}
break;
}
}
return value;
}
}
/*
* Copyright © 2004-2021 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.model.stats.functions;
import static com.l2jserver.gameserver.config.Configuration.olympiad;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.conditions.Condition;
import com.l2jserver.gameserver.model.items.L2Item;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.model.items.type.WeaponType;
import com.l2jserver.gameserver.model.skills.Skill;
import com.l2jserver.gameserver.model.stats.Stats;
public class FuncEnchant extends AbstractFunction {
public FuncEnchant(Stats stat, int order, Object owner, double value, Condition applyCond) {
super(stat, order, owner, value, applyCond);
}
@Override
public double calc(L2Character effector, L2Character effected, Skill skill, double initVal) {
double value = initVal;
if ((getApplyCond() != null) && !getApplyCond().test(effector, effected, skill)) {
return value;
}
L2ItemInstance item = (L2ItemInstance) getFuncOwner();
int enchant = item.getEnchantLevel();
if (enchant <= 0) {
return value;
}
int overEnchant = 0;
if (enchant > 3) {
overEnchant = enchant - 3;
enchant = 3;
}
if (effector.isPlayer()) {
if (effector.getActingPlayer().isInOlympiadMode() && (olympiad().getEnchantLimit() >= 0) && ((enchant + overEnchant) > olympiad().getEnchantLimit())) {
if (olympiad().getEnchantLimit() > 3) {
overEnchant = olympiad().getEnchantLimit() - 3;
} else {
overEnchant = 0;
enchant = olympiad().getEnchantLimit();
}
}
}
if ((getStat() == Stats.MAGIC_DEFENCE) || (getStat() == Stats.POWER_DEFENCE)) {
return value + enchant + (3 * overEnchant);
}
if (getStat() == Stats.MAGIC_ATTACK) {
// M. Atk. increases by 4 for all weapons.
// Starting at +4, M. Atk. bonus double.
// M. Atk. increases by 3 for all weapons.
// Starting at +4, M. Atk. bonus double.
// M. Atk. increases by 2 for all weapons. Starting at +4, M. Atk. bonus double.
// Starting at +4, M. Atk. bonus double.
switch (item.getItem().getItemGradeSPlus()) {
case S -> value += (4 * enchant) + (8 * overEnchant);
case A, B, C -> value += (3 * enchant) + (6 * overEnchant);
case D, NONE -> value += (2 * enchant) + (4 * overEnchant);
}
return value;
}
if (item.isWeapon()) {
final WeaponType type = (WeaponType) item.getItemType();
switch (item.getItem().getItemGradeSPlus()) {
case S:
if (item.getWeaponItem().getBodyPart() == L2Item.SLOT_LR_HAND) {
if ((type == WeaponType.BOW) || (type == WeaponType.CROSSBOW)) {
// P. Atk. increases by 10 for bows.
// Starting at +4, P. Atk. bonus double.
value += (10 * enchant) + (20 * overEnchant);
} else {
// P. Atk. increases by 6 for two-handed swords, two-handed blunts, dualswords, and two-handed combat weapons.
// Starting at +4, P. Atk. bonus double.
value += (6 * enchant) + (12 * overEnchant);
}
} else {
// P. Atk. increases by 5 for one-handed swords, one-handed blunts, daggers, spears, and other weapons.
// Starting at +4, P. Atk. bonus double.
value += (5 * enchant) + (10 * overEnchant);
}
break;
case A:
if (item.getWeaponItem().getBodyPart() == L2Item.SLOT_LR_HAND) {
if ((type == WeaponType.BOW) || (type == WeaponType.CROSSBOW)) {
// P. Atk. increases by 8 for bows.
// Starting at +4, P. Atk. bonus double.
value += (8 * enchant) + (16 * overEnchant);
} else {
// P. Atk. increases by 5 for two-handed swords, two-handed blunts, dualswords, and two-handed combat weapons.
// Starting at +4, P. Atk. bonus double.
value += (5 * enchant) + (10 * overEnchant);
}
} else {
// P. Atk. increases by 4 for one-handed swords, one-handed blunts, daggers, spears, and other weapons.
// Starting at +4, P. Atk. bonus double.
value += (4 * enchant) + (8 * overEnchant);
}
break;
case B:
case C:
if (item.getWeaponItem().getBodyPart() == L2Item.SLOT_LR_HAND) {
if ((type == WeaponType.BOW) || (type == WeaponType.CROSSBOW)) {
// P. Atk. increases by 6 for bows.
// Starting at +4, P. Atk. bonus double.
value += (6 * enchant) + (12 * overEnchant);
} else {
// P. Atk. increases by 4 for two-handed swords, two-handed blunts, dualswords, and two-handed combat weapons.
// Starting at +4, P. Atk. bonus double.
value += (4 * enchant) + (8 * overEnchant);
}
} else {
// P. Atk. increases by 3 for one-handed swords, one-handed blunts, daggers, spears, and other weapons.
// Starting at +4, P. Atk. bonus double.
value += (3 * enchant) + (6 * overEnchant);
}
break;
case D:
case NONE:
// P. Atk. increases by 2 for all weapons with the exception of bows.
// Starting at +4, P. Atk. bonus double.
switch (type) {
case BOW, CROSSBOW -> {
// Bows increase by 4.
// Starting at +4, P. Atk. bonus double.
value += (4 * enchant) + (8 * overEnchant);
}
default -> value += (2 * enchant) + (4 * overEnchant);
}
break;
}
}
return value;
}
}
Он имел ввиду визуально в тултипе будет все как и было ранее, это вшито на уровне клиента NWindow.dllили же имелось ввиду, что дамаг будет выдаваться учитывая изменения в FuncEnchant.java но при наведении курсора на предмет P.Atck в описании будет из dll (точно dll или может всё таки какая-то датка, ведь их можно редактировать)
делается через интерфейс.jois, - в описании предмета ничего не поменялось, но в статусе персонажа пересчитало согласно изменениям в FuncEnchant.java
при изменении численных значений всё скомпилилось и запустилось, в описании предмета ничего не поменялось, но в статусе персонажа пересчитало согласно изменениям в FuncEnchant.java, на днях попробую прописать прирост характеристик при точке формулами арифметических прогрессий в FuncEnchant.java , а не так как реализовано сейчас, только два режима enchant и overEnchant
если кто знает как ковырять NWindow.dll - буду благодарен, ибо идой с нахрапу не смог , а хех редактором пока не смог распознать нужные места.
class Tooltip extends UICommonAPI;
const TOOLTIP_MINIMUM_WIDTH = 250;
const TOOLTIP_SETITEM_MAX = 3;
const ATTRIBUTE_FIRE = 0;
const ATTRIBUTE_WATER = 1;
const ATTRIBUTE_WIND = 2;
const ATTRIBUTE_EARTH = 3;
const ATTRIBUTE_HOLY = 4;
const ATTRIBUTE_UNHOLY = 5;
const DEFAULT_ATTACK = 10;
var CustomTooltip m_Tooltip;
var DrawItemInfo m_Info;
var Array<int> AttackAttLevel;
var Array<int> AttackAttCurrValue;
var Array<int> AttackAttMaxValue; //모든 공격 속성의 레벨, 현재레벨에서의 값, 현재레벨에서의 최대값을 여기에 저장한다.
var Array<int> DefAttLevel;
var Array<int> DefAttCurrValue;
var Array<int> DefAttMaxValue; //모든 방어 속성의 레벨, 현재레벨에서의 값, 현재레벨에서의 최대값을 여기에 저장한다.
var int NowAttrLv;
var int NowMaxValue;
var int NowValue;
var bool BoolSelect;
function OnRegisterEvent()
{
RegisterEvent( EV_RequestTooltipInfo );
}
function OnLoad()
{
BoolSelect = true; // 숏컷 툴팁 켜기/끄기 기본값을 켜기로(TTP#41925) 2010.8.23 - winkey
if(CREATE_ON_DEMAND==0)
OnRegisterEvent();
}
function OnEvent(int Event_ID, string param)
{
switch( Event_ID )
{
case EV_RequestTooltipInfo:
//debug("툴팁이벤트 넘어오냐");
HandleRequestTooltipInfo(param);
break;
}
}
function setBoolSelect( bool b )
{
BoolSelect = b;
}
function HandleRequestTooltipInfo(string param)
{
local String TooltipType;
local int SourceType;
local ETooltipSourceType eSourceType;
ClearTooltip();
if (!ParseString(param, "TooltipType", TooltipType))
return;
if (!ParseInt(param, "SourceType", SourceType))
return;
//GetChatWindowHandle( "ChatWnd.NormalChat" ).AddStringToChatWindow("TT:" $ TooltipType, GetChatColorByType(0) );
eSourceType = ETooltipSourceType(SourceType);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////// Normal Tooltip /////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//debug("Tooltip타입:"$TooltipType);
if (TooltipType == "Text")
{
ReturnTooltip_NTT_TEXT(param, eSourceType, false);
}
else if (TooltipType == "Description")
{
ReturnTooltip_NTT_TEXT(param, eSourceType, true);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////// ItemWnd Tooltip ////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
else if (TooltipType == "Action")
{
ReturnTooltip_NTT_ACTION(param, eSourceType);
}
else if (TooltipType == "Skill")
{
ReturnTooltip_NTT_SKILL(param, eSourceType);
}
else if (TooltipType == "NormalItem")
{
ReturnTooltip_NTT_NORMALITEM(param, eSourceType);
}
else if (TooltipType == "Shortcut")
{
ReturnTooltip_NTT_SHORTCUT(param, eSourceType);
}
else if (TooltipType == "AbnormalStatus")
{
ReturnTooltip_NTT_ABNORMALSTATUS(param, eSourceType);
}
else if (TooltipType == "RecipeManufacture")
{
ReturnTooltip_NTT_RECIPE_MANUFACTURE(param, eSourceType);
}
else if (TooltipType == "Recipe")
{
ReturnTooltip_NTT_RECIPE(param, eSourceType, false);
}
else if (TooltipType == "RecipePrice")
{
ReturnTooltip_NTT_RECIPE(param, eSourceType, true);
}
else if (TooltipType == "Inventory"
|| TooltipType == "InventoryPrice1"
|| TooltipType == "InventoryPrice2"
|| TooltipType == "InventoryPrice1HideEnchant"
|| TooltipType == "InventoryPrice1HideEnchantStackable"
|| TooltipType == "InventoryPrice2PrivateShop"
|| TooltipType == "InventoryWithIcon"
|| TooltipType == "InventoryPawnViewer") // PawnViewer용 추가 - lancelot 2007. 10. 16.
{
//~ debug("툴팁보여주세요.");
ReturnTooltip_NTT_ITEM(param, TooltipType, eSourceType);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////// ListCtrl Tooltip ///////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//선준 수정(2010.02.22 ~ 03.08) 완료
else if ( TooltipType == "RoomList" )
{
ReturnTooltip_NTT_ROOMLIST(param, eSourceType);
}
else if ( TooltipType == "UserList" )
{
ReturnTooltip_NTT_USERLIST(param, eSourceType);
}
else if (TooltipType == "PartyMatch")
{
ReturnTooltip_NTT_PARTYMATCH(param, eSourceType);
}
else if (TooltipType == "UnionList")
{
ReturnTooltip_NTT_UNIONLIST(param, eSourceType);
}
else if (TooltipType == "QuestInfo")
{
ReturnTooltip_NTT_QUESTINFO(param, eSourceType);
}
else if (TooltipType == "QuestList")
{
ReturnTooltip_NTT_QUESTLIST(param, eSourceType);
}
else if (TooltipType == "RaidList")
{
ReturnTooltip_NTT_RAIDLIST(param, eSourceType);
}
else if (TooltipType == "ClanInfo")
{
ReturnTooltip_NTT_CLANINFO(param, eSourceType);
}
//선준 수정( 10.03.30 ) 완료
//우편함에 툴팁 추가.
else if (TooltipType == "PostInfo")
{
ReturnTooltip_NTT_POSTINFO(param, eSourceType);
}
/////////////////////////////////////////////////////
// MANOR
else if (TooltipType == "ManorSeedInfo"
|| TooltipType == "ManorCropInfo"
|| TooltipType == "ManorSeedSetting"
|| TooltipType == "ManorCropSetting"
|| TooltipType == "ManorDefaultInfo"
|| TooltipType == "ManorCropSell")
{
ReturnTooltip_NTT_MANOR(param, TooltipType, eSourceType);
}
// [퀘스트 아이템 툴팁 추가]
else if (TooltipType == "QuestItem")
{
ReturnTooltip_NTT_QUESTREWARDS(param, eSourceType);
}
}
function bool IsEnchantableItem(EItemParamType Type)
{
return (Type == ITEMP_WEAPON || Type == ITEMP_ARMOR || Type == ITEMP_ACCESSARY || Type == ITEMP_SHIELD);
}
function ClearTooltip()
{
m_Tooltip.SimpleLineCount = 0;
m_Tooltip.MinimumWidth = 0;
m_Tooltip.DrawList.Remove(0, m_Tooltip.DrawList.Length);
}
function StartItem()
{
local DrawItemInfo infoClear;
m_Info = infoClear;
}
function EndItem()
{
m_Tooltip.DrawList.Length = m_Tooltip.DrawList.Length + 1;
m_Tooltip.DrawList[m_Tooltip.DrawList.Length-1] = m_Info;
}
function TooltipInsertItemLine()
{
AddTooltipItemBlank(4);
StartItem();
m_Info.eType = DIT_SPLITLINE;
m_Info.u_nTextureUWidth = 50;
m_Info.u_nTextureWidth = 200;
m_Info.u_nTextureHeight = 1;
m_Info.u_strTexture ="L2ui_ch3.tooltip_line";
EndItem();
AddTooltipItemBlank(4);
}
function TooltipInsertItemLine2()
{
StartItem();
m_Info.eType = DIT_SPLITLINE;
m_Info.u_nTextureUWidth = 50;
m_Info.u_nTextureWidth = 200;
//m_Info.u_nTextureHeight = 1;
m_Info.u_strTexture ="L2ui_ch3.tooltip_line";
EndItem();
}
/////////////////////////////////////////////////////////////////////////////////
// TEXT
function ReturnTooltip_NTT_TEXT(string param, ETooltipSourceType eSourceType, bool bDesc)
{
local string strText;
local int ID;
if (eSourceType == NTST_TEXT)
{
if (ParseString( param, "Text", strText))
{
if (Len(strText)>0)
{
if (bDesc)
{
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_color.R = 178;
m_Info.t_color.G = 190;
m_Info.t_color.B = 207;
m_Info.t_color.A = 255;
m_Info.t_strText = strText;
EndItem();
}
else
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = strText;
EndItem();
}
}
}
else if (ParseInt( param, "ID", ID))
{
if (ID>0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_ID = ID;
EndItem();
}
}
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// INVENTORY Etc
function ReturnTooltip_NTT_ITEM(string param, String TooltipType, ETooltipSourceType eSourceType)
{
local ItemInfo Item;
local EItemType eItemType;
local EEtcItemType eEtcItemType;
local bool bLargeWidth;
local string SlotString;
local string strTmp;
local int nTmp;
local int idx;
//제련효과
local string ItemName;
local int Quality;
local int ColorR;
local int ColorG;
local int ColorB;
local string strDesc1;
local string strDesc2;
local string strDesc3;
// 보급형 아이템
local int ItemNameClass;
//셋트아이템
//~ local array<ItemID> arrItemID;
local int SetID;
//~ local int SetID2;
//아데나읽어주기
local string strAdena;
local string strAdenaComma;
local color AdenaColor;
local ItemID tmpItemID;
local ItemInfo info;
if (eSourceType == NTST_ITEM)
{
ParamToItemInfo(param, Item);
eItemType = EItemType(Item.ItemType);
eEtcItemType = EEtcItemType(Item.ItemSubType);
//아이콘 표시
if (TooltipType == "InventoryWithIcon")
{
StartItem();
m_Info.eType = DIT_TEXTURE;
m_Info.u_nTextureWidth = 32;
m_Info.u_nTextureHeight = 32;
m_Info.u_strTexture = Item.IconName;
EndItem();
AddTooltipItemBlank(4);
}
//아이템 이름 취득
ItemName = class'UIDATA_ITEM'.static.GetRefineryItemName( Item.Name, Item.RefineryOp1, Item.RefineryOp2 );
ItemNameClass = class'UIDATA_ITEM'.static.GetItemNameClass(Item.ID);
//GetChatWindowHandle( "ChatWnd.NormalChat" ).AddStringToChatWindow("NTT_ITEM:" $ ItemNameClass, GetChatColorByType(0) );
//branch
AddPrimeItemSymbol(Item);
//end of branch
//TooltipInsertItemLine2();
//인첸트 ex) "+10"
if (TooltipType != "InventoryPrice1HideEnchant"
&& TooltipType != "InventoryPrice1HideEnchantStackable")
AddTooltipItemEnchant(Item);
//아이템 이름
AddTooltipItemName(ItemName, Item, ItemNameClass);
//Grade Mark
AddTooltipItemGrade(Item);
//아이템 갯수
if (TooltipType != "InventoryPrice1HideEnchantStackable")
{
// 2009 10. 15
// 퀘스트 보상 아이템 타입이면 아이템 개수를 표기 하지 않는다.
if (TooltipType != "QuestReward")
{
AddTooltipItemCount(Item);
}
}
//아이템이 아데나면, 읽어주기 스트링
if (IsAdena(Item.ID))
{
//SimpleTooltip을 읽어주기스트링까지 보여준다.
m_Tooltip.SimpleLineCount = 2;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = "(" $ ConvertNumToText(Int64ToString(Item.ItemNum)) $ ")";
EndItem();
}
//InventoryPrice1 타입
if (TooltipType == "InventoryPrice1"
|| TooltipType == "InventoryPrice1HideEnchant"
|| TooltipType == "InventoryPrice1HideEnchantStackable")
{
strAdena = Int64ToString(Item.Price);
strAdenaComma = MakeCostString(strAdena);
AdenaColor = GetNumericColor(strAdenaComma);
//가격 : xxx,xxx,xxx
AddTooltipItemOption(322, strAdenaComma $ " ", true, true, false);
SetTooltipItemColor(AdenaColor.R, AdenaColor.G, AdenaColor.B, 0);
//"아데나"
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color = AdenaColor;
m_Info.t_ID= 469;
EndItem();
//SimpleTooltip을 가격까지 보여준다.
m_Tooltip.SimpleLineCount = 2;
//읽어주기 스트링
if (Item.Price>IntToInt64(0))
{
m_Tooltip.SimpleLineCount = 3;
AddTooltipItemOption(0, "(" $ ConvertNumToText(strAdena) $ ")", false, true, false);
SetTooltipItemColor(AdenaColor.R, AdenaColor.G, AdenaColor.B, 0);
}
}
//InventoryPrice2 타입
if (TooltipType == "InventoryPrice2"
|| TooltipType == "InventoryPrice2PrivateShop")
{
strAdena = Int64ToString(Item.Price);
strAdenaComma = MakeCostString(strAdena);
AdenaColor = GetNumericColor(strAdenaComma);
//가격 : 1개당
AddTooltipItemOption2(322, 468, true, true, false);
SetTooltipItemColor(AdenaColor.R, AdenaColor.G, AdenaColor.B, 0);
//"xxx,xxx,xxx "
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color = AdenaColor;
m_Info.t_strText = " " $ strAdenaComma $ " ";
EndItem();
//"아데나"
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color = AdenaColor;
m_Info.t_ID= 469;
EndItem();
//SimpleTooltip을 가격까지 보여준다.
m_Tooltip.SimpleLineCount = 2;
//읽어주기 스트링
if (Item.Price>IntToInt64(0))
{
m_Tooltip.SimpleLineCount = 3;
//"("
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color = AdenaColor;
m_Info.t_strText = "(";
EndItem();
//"1개당"
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color = AdenaColor;
m_Info.t_ID = 468;
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color = AdenaColor;
m_Info.t_strText = " " $ ConvertNumToText(strAdena) $ ")";
EndItem();
}
}
//InventoryPrice2PrivateShop 타입
if (TooltipType == "InventoryPrice2PrivateShop")
{
if (IsStackableItem(Item.ConsumeType) && Item.Reserved64 > IntToInt64(0))
{
//"구매개수 : xx"
AddTooltipItemOption(808, Int64ToString(Item.Reserved64), true, true, false);
}
}
/////////////////////////////////////////////////////////////////////////////////////////
// 아이템에 따른 각종 정보
//SlotString = GetSlotTypeString(Item.ItemType, Item.SlotBitType, Item.ArmorType);
SlotString = GetSlotTypeString2(Item.ItemType, Item.SlotBitType, Item.ArmorType);
switch (eItemType)
{
// 1. WEAPON
case ITEM_WEAPON:
bLargeWidth = true;
//Slot Type
strTmp = GetWeaponTypeString(Item.WeaponType);
if (Len(strTmp)>0)
{
AddTooltipItemOption(0, strTmp $ " / " $ SlotString, false, true, false);
}
//D Качество : 1/5 Дешовый
addTooltipItemQuality(Item);
if(DEFAULT_ATTACK != Item.PhysicalDamage)
{
//D Добавить пустое место.
//AddTooltipItemBlank(12);
TooltipInsertItemLine();
// ################################### Физ. Характеристики ########################################
//5092 u,<Физ. Характеристики>\0
AddTooltipItemOption(5092, "", true, false, false);
SetTooltipItemColor(255, 255, 255, 0);
//Physical Damage
//AddTooltipItemOption(94, String(GetPhysicalDamage(Item.WeaponType, Item.SlotBitType, Item.CrystalType, Item.Enchanted, Item.PhysicalDamage)), true, true, false);
AddNewPhysicalDamage(Item.WeaponType, Item.SlotBitType, Item.CrystalType, Item.Enchanted, Item.PhysicalDamage);
// 96 u,Физ. Точность\0
AddTooltipItemOption(96, String((0x0000FFFF & Item.SoulshotCount)), true, true, false);
// 113 u,Физ. Крит. Атк.\0
AddTooltipItemOption(113, String((Item.SoulshotCount >> 16)), true, true, false);
// P Attack Speed 111 u,Скор. Атк.\0
AddTooltipItemOption(111, String((0x0000FFFF & Item.AttackSpeed)), true, true, false);
}
//SoulShot Count if (Item.SoulshotCount>0){//D 404 u,Исп. Заряд Души\0// AddTooltipItemOption(404, "X " $ Item.SoulshotCount, true, true, false);}
//SpiritShot Count if (Item.SpiritShotCount>0){// AddTooltipItemOption(496, "X " $ Item.SpiritshotCount, true, true, false);}
if(DEFAULT_ATTACK != Item.MagicalDamage)
{
//AddTooltipItemBlank(12);
TooltipInsertItemLine();
// ################################### Маг. Характеристики ########################################
// 5093 u,<Маг. Характеристики>\0
AddTooltipItemOption(5093, "", true, false, false);
SetTooltipItemColor(255, 255, 255, 0);
//Masical Damage
//AddTooltipItemOption(98, String(GetMagicalDamage(Item.WeaponType, Item.SlotBitType, Item.CrystalType, Item.Enchanted, Item.MagicalDamage)), true, true, false);
AddNewMagicalDamage(Item.WeaponType, Item.SlotBitType, Item.CrystalType, Item.Enchanted, Item.MagicalDamage);
//5076 u,Маг. Точность\0
AddTooltipItemOption(5076, String((0x0000FFFF & Item.SpiritShotCount)), true, true, false);
//5078 u,Маг. Крит. Атк.\0
AddTooltipItemOption(5078, String((Item.SpiritShotCount >> 16)), true, true, false);
// M Attack Speed 112 u,Скор. Маг.\0
AddTooltipItemOption(112, String((Item.AttackSpeed >> 16)), true, true, false);
//################################################################################################
//AddTooltipItemBlank(12);
}
TooltipInsertItemLine();
//Weight
if (Item.Weight==0)
{
AddTooltipItemOption(52, " 0 ", true, true, false);
AddTooltipItemBlank(4);
}
else
{
AddTooltipItemOption(52, String(Item.Weight), true, true, false);
AddTooltipItemBlank(4);
//AddTooltipItemOption(52, String(Item.Weight), true, true, false);
}
//MP Consume
if (Item.MpConsume != 0)
{
AddTooltipItemOption(320, String(Item.MpConsume), true, true, false);
}
// Уровень использования
//.AddTooltipItemBlank(4);
AddTooltipItemUseLevel(Item);
//AddTooltipItemBlank(4);
//제련효과
if (Item.RefineryOp1 != 0 || Item.RefineryOp2 != 0)
{
//빈공간
//AddTooltipItemBlank(12);
TooltipInsertItemLine();
// 1490 u,<Особое Свойство>\0
AddTooltipItemOption(1490, "", true, false, false);
SetTooltipItemColor(255, 255, 255, 0);
//컬러값 취득
if (Item.RefineryOp2 != 0)
{
Quality = class'UIDATA_REFINERYOPTION'.static.GetQuality( Item.RefineryOp2 );
GetRefineryColor(Quality, ColorR, ColorG, ColorB);
}
if (Item.RefineryOp1 != 0)
{
strDesc1 = "";
strDesc2 = "";
strDesc3 = "";
if (class'UIDATA_REFINERYOPTION'.static.GetOptionDescription( Item.RefineryOp1, strDesc1, strDesc2, strDesc3 ))
{
if (Len(strDesc1)>0)
{
AddTooltipItemOption(0, strDesc1, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc2)>0)
{
AddTooltipItemOption(0, strDesc2, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc3)>0)
{
AddTooltipItemOption(0, strDesc3, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
}
}
//TooltipInsertItemLine();
if (Item.RefineryOp2 != 0)
{
strDesc1 = "";
strDesc2 = "";
strDesc3 = "";
if (class'UIDATA_REFINERYOPTION'.static.GetOptionDescription( Item.RefineryOp2, strDesc1, strDesc2, strDesc3 ))
{
if (Len(strDesc1)>0)
{
AddTooltipItemOption(0, strDesc1, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc2)>0)
{
AddTooltipItemOption(0, strDesc2, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc3)>0)
{
AddTooltipItemOption(0, strDesc3, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
}
}
// 1491 u,Невозможно продать/выбросить\0
AddTooltipItemOption(1491, "", true, false, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
//TooltipInsertItemLine();
//빈공간
if (Len(Item.Description)>0)
{
//AddTooltipItemBlank(12);
TooltipInsertItemLine();
}
}
break;
// 2. ARMOR
case ITEM_ARMOR:
bLargeWidth = true;
// Sheild
if ( Item.SlotBitType == 256 && Item.ArmorType == 4 ) // ArmorType == 4 is sigil..
{
if (Len(SlotString)>0)
{
AddTooltipItemOption(0, SlotString, false, true, false);
//D Качество : 1/5 Дешовый
addTooltipItemQuality(Item);
}
if (Item.PhysicalDefense != 0)
{
//AddTooltipItemOption(95, String(GetPhysicalDefense(Item.CrystalType, Item.Enchanted, Item.PhysicalDefense)), true, true, false);
AddNewPhysicalDefense(Item.CrystalType, Item.Enchanted, Item.PhysicalDefense);
}
//Avoid Modify
if (Item.AvoidModify != 0)
{
// 97 u,Физ. Уклонение\0
AddTooltipItemOption(97, String(Item.AvoidModify), true, true, false);
}
if (Item.Weight != 0)
{
// 52 u,Вес\0
AddTooltipItemOption(52, String(Item.Weight), true, true, false);
}
AddTooltipItemUseLevel(Item);
}
else if (Item.SlotBitType == 256 || Item.SlotBitType == 128) //SBT_LHAND or SBT_RHAND
{
if (Len(SlotString)>0)
{
AddTooltipItemOption(0, SlotString, false, true, false);
//D Качество : 1/5 Дешовый
addTooltipItemQuality(Item);
}
//Shield Defense
//debug("Shield Defense" $ Item.ShieldDefense);
if (Item.ShieldDefense != 0)
{
// 95 u,Физ. Защ.\0
//AddTooltipItemOption(95, String(GetShieldDefense(Item.CrystalType, Item.Enchanted, Item.ShieldDefense)), true, true, false);
AddNewPhysicalDefense(Item.CrystalType, Item.Enchanted, Item.ShieldDefense);
}
//Shield Defense Rate
//debug("Shield Defense Rate" $ Item.ShieldDefenseRate);
if (Item.ShieldDefenseRate != 0)
AddTooltipItemOption(317, String(Item.ShieldDefenseRate), true, true, false);
//Avoid Modify
//debug("Avoid Modify" $ Item.AvoidModify);
if (Item.AvoidModify != 0)
AddTooltipItemOption(97, String(Item.AvoidModify), true, true, false);
//Weight
//debug("Weight" $ Item.Weight);
if (Item.Weight != 0)
{
AddTooltipItemOption(52, String(Item.Weight), true, true, false);
}
AddTooltipItemUseLevel(Item);
}
// Magical Armor
else if (IsMagicalArmor(Item.ID))
{
//Slot Type
if (Len(SlotString)>0)
{
AddTooltipItemOption(0, SlotString, false, true, false);
//D Качество : 1/5 Дешовый
addTooltipItemQuality(Item);
}
//MP Bonus
AddTooltipItemOption(388, String(Item.MpBonus), true, true, false);
//Physical Defense
if (Item.SlotBitType == 65536)
{
}
else if ( Item.SlotBitType == 524288)
{
}
else if ( Item.SlotBitType == 262144)
{
}
else
{
if (Item.PhysicalDefense != 0)
{
//AddTooltipItemOption(95, String(GetPhysicalDefense(Item.CrystalType, Item.Enchanted, Item.PhysicalDefense)), true, true, false);
AddNewPhysicalDefense(Item.CrystalType, Item.Enchanted, Item.PhysicalDefense);
}
}
//Weight
if (Item.Weight != 0)
{
AddTooltipItemOption(52, String(Item.Weight), true, true, false);
}
AddTooltipItemUseLevel(Item);
}
// Physical Armor
else
{
//Slot Type
//debug("Physical Armor1 " $ Item.SlotBitType $ Item.PhysicalDefense);
if (Len(SlotString)>0)
{
AddTooltipItemOption(0, SlotString, false, true, false);
}
//Physical Defense
if (Item.SlotBitType == 65536)
{
}
else if ( Item.SlotBitType == 524288)
{
}
else if ( Item.SlotBitType == 262144)
{
}
else
{
if (Item.PhysicalDefense != 0)
{
//D Качество : 1/5 Дешовый
addTooltipItemQuality(Item);
//AddTooltipItemOption(95, String(GetPhysicalDefense(Item.CrystalType, Item.Enchanted, Item.PhysicalDefense)), true, true, false);
AddNewPhysicalDefense(Item.CrystalType, Item.Enchanted, Item.PhysicalDefense);
}
}
//Weight
if (Item.Weight != 0)
{
AddTooltipItemOption(52, String(Item.Weight), true, true, false);
}
AddTooltipItemUseLevel(Item);
}
//제련효과
if (Item.RefineryOp1 != 0 || Item.RefineryOp2 != 0)
{
//빈공간
AddTooltipItemBlank(12);
//"[제련효과]"
AddTooltipItemOption(1490, "", true, false, false);
SetTooltipItemColor(255, 255, 255, 0);
//컬러값 취득
if (Item.RefineryOp2 != 0)
{
Quality = class'UIDATA_REFINERYOPTION'.static.GetQuality( Item.RefineryOp2 );
GetRefineryColor(Quality, ColorR, ColorG, ColorB);
}
if (Item.RefineryOp1 != 0)
{
strDesc1 = "";
strDesc2 = "";
strDesc3 = "";
if (class'UIDATA_REFINERYOPTION'.static.GetOptionDescription( Item.RefineryOp1, strDesc1, strDesc2, strDesc3 ))
{
if (Len(strDesc1)>0)
{
AddTooltipItemOption(0, strDesc1, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc2)>0)
{
AddTooltipItemOption(0, strDesc2, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc3)>0)
{
AddTooltipItemOption(0, strDesc3, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
}
}
if (Item.RefineryOp2 != 0)
{
strDesc1 = "";
strDesc2 = "";
strDesc3 = "";
if (class'UIDATA_REFINERYOPTION'.static.GetOptionDescription( Item.RefineryOp2, strDesc1, strDesc2, strDesc3 ))
{
if (Len(strDesc1)>0)
{
AddTooltipItemOption(0, strDesc1, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc2)>0)
{
AddTooltipItemOption(0, strDesc2, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc3)>0)
{
AddTooltipItemOption(0, strDesc3, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
}
}
//빈공간
AddTooltipItemBlank(12);
}
break;
// 3. ACCESSARY
case ITEM_ACCESSARY:
bLargeWidth = true;
//Slot Type
if (Len(SlotString)>0)
AddTooltipItemOption(0, SlotString, false, true, false);
//D Качество : 1/5 Дешовый
addTooltipItemQuality(Item);
//Magical Defense
// 탈리스만은 아이템 마방을 보여주지 않는다.
// 왼팔찌 오른팔찌도 마방을 보여주지 않는다.
if ((Item.SlotBitType != 4194304 ) && (Item.SlotBitType != 1048576 ) && (Item.SlotBitType != 2097152 ))
{
if((Item.SlotBitType == 6)||(Item.SlotBitType == 8)||(Item.SlotBitType == 48))
{
AddNewMagicalDefense(Item.CrystalType, Item.Enchanted, Item.MagicalDefense);
}
else
{
AddTooltipItemOption(99, String(GetMagicalDefense(Item.CrystalType, Item.Enchanted, Item.MagicalDefense)), true, true, false);
}
// Debug2("ITEM_ACCESSARY: " $ Item.SlotBitType);
}
if (Item.Weight == 0)
{
AddTooltipItemOption(52, " 0 ", true, true, false);
}
else
{
AddTooltipItemOption(52, String(Item.Weight), true, true, false);
}
AddTooltipItemUseLevel(Item);
//debug ("Refinery Result Accessotires" @ Item.RefineryOp1);
//제련효과
if (Item.RefineryOp1 != 0 || Item.RefineryOp2 != 0)
{
//빈공간
AddTooltipItemBlank(12);
//"[제련효과]"
AddTooltipItemOption(1490, "", true, false, false);
SetTooltipItemColor(255, 255, 255, 0);
//컬러값 취득
if (Item.RefineryOp2 != 0)
{
Quality = class'UIDATA_REFINERYOPTION'.static.GetQuality( Item.RefineryOp2 );
GetRefineryColor(Quality, ColorR, ColorG, ColorB);
}
if (Item.RefineryOp1 != 0)
{
strDesc1 = "";
strDesc2 = "";
strDesc3 = "";
if (class'UIDATA_REFINERYOPTION'.static.GetOptionDescription( Item.RefineryOp1, strDesc1, strDesc2, strDesc3 ))
{
if (Len(strDesc1)>0)
{
AddTooltipItemOption(0, strDesc1, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc2)>0)
{
AddTooltipItemOption(0, strDesc2, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc3)>0)
{
AddTooltipItemOption(0, strDesc3, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
}
}
if (Item.RefineryOp2 != 0)
{
strDesc1 = "";
strDesc2 = "";
strDesc3 = "";
if (class'UIDATA_REFINERYOPTION'.static.GetOptionDescription( Item.RefineryOp2, strDesc1, strDesc2, strDesc3 ))
{
if (Len(strDesc1)>0)
{
AddTooltipItemOption(0, strDesc1, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc2)>0)
{
AddTooltipItemOption(0, strDesc2, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc3)>0)
{
AddTooltipItemOption(0, strDesc3, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
}
}
//빈공간
AddTooltipItemBlank(12);
}
break;
// 4. QUEST
case ITEM_QUESTITEM:
bLargeWidth = true;
//Slot Type
if (Len(SlotString)>0)
AddTooltipItemOption(0, SlotString, false, true, false);
break;
// 5. ETC
case ITEM_ETCITEM:
bLargeWidth = true;
if (eEtcItemType == ITEME_PET_COLLAR)
{
//Pet Name
if (Item.Damaged == 0)
nTmp = 971;
else
nTmp = 970;
AddTooltipItemOption2(969, nTmp, true, true, false);
//Pet Level
AddTooltipItemOption(88, String(Item.Enchanted), true, true, false);
}
else if (eEtcItemType == ITEME_TICKET_OF_LORD)
{
AddTooltipItemOption(972, String(Item.Enchanted), true, true, false);
}
else if (eEtcItemType == ITEME_LOTTO)
{
// 복권에서는 bless가 회차, 몬스터레이스에서는 Enchant가 회차입니다. 주의하세요! - lancelot 2008. 11. 11.
// 회차
AddTooltipItemOption(670, String(Item.Blessed), true, true, false);
// 선택번호
AddTooltipItemOption(671, GetLottoString(Item.Enchanted, Item.Damaged), true, true, false);
}
else if (eEtcItemType == ITEME_RACE_TICKET)
{
// 회차
AddTooltipItemOption(670, String(Item.Enchanted), true, true, false);
// 선택번호
AddTooltipItemOption(671, GetRaceTicketString(Item.Blessed), true, true, false);
//Money
AddTooltipItemOption(744, String(Item.Damaged*100), true, true, false);
}
//Weight
//~ if (Item.Price!=0)
if (Item.Weight==0)
AddTooltipItemOption(52, " 0 ", true, true, false);
else
AddTooltipItemOption(52, String(Item.Weight), true, true, false);
break;
}
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
// [칠월칠석, 방어구 각인] item enchant option - by jin 09/08/05
if (Item.EnchantOption1 != 0 || Item.EnchantOption2 != 0 || Item.EnchantOption3 != 0)
{
//빈공간
AddTooltipItemBlank(12);
//TooltipInsertItemLine();
// 2214 u,<Эффект Модификации>\0
AddTooltipItemOption(2214, "", true, false, false);
SetTooltipItemColor(255, 255, 255, 0);
//컬러값 취득
if (Item.EnchantOption1 != 0)
{
// [칠월칠석, 방어구각인] 각인 효과는 일단 무조건 1번 색상을 사용. - by jin 09/08/06
GetRefineryColor(1, ColorR, ColorG, ColorB);
}
if (Item.EnchantOption1 != 0)
{
strDesc1 = "";
strDesc2 = "";
strDesc3 = "";
if (class'UIDATA_REFINERYOPTION'.static.GetOptionDescription( Item.EnchantOption1, strDesc1, strDesc2, strDesc3 ))
{
if (Len(strDesc1)>0)
{
AddTooltipItemOption(0, strDesc1, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc2)>0)
{
AddTooltipItemOption(0, strDesc2, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc3)>0)
{
AddTooltipItemOption(0, strDesc3, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
}
}
if (Item.EnchantOption2 != 0)
{
strDesc1 = "";
strDesc2 = "";
strDesc3 = "";
if (class'UIDATA_REFINERYOPTION'.static.GetOptionDescription( Item.EnchantOption2, strDesc1, strDesc2, strDesc3 ))
{
if (Len(strDesc1)>0)
{
AddTooltipItemOption(0, strDesc1, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc2)>0)
{
AddTooltipItemOption(0, strDesc2, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc3)>0)
{
AddTooltipItemOption(0, strDesc3, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
}
}
if (Item.EnchantOption3 != 0)
{
strDesc1 = "";
strDesc2 = "";
strDesc3 = "";
if (class'UIDATA_REFINERYOPTION'.static.GetOptionDescription( Item.EnchantOption3, strDesc1, strDesc2, strDesc3 ))
{
if (Len(strDesc1)>0)
{
AddTooltipItemOption(0, strDesc1, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc2)>0)
{
AddTooltipItemOption(0, strDesc2, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
if (Len(strDesc3)>0)
{
AddTooltipItemOption(0, strDesc3, false, true, false);
SetTooltipItemColor(ColorR, ColorG, ColorB, 0);
}
}
}
//빈공간
AddTooltipItemBlank(12);
//TooltipInsertItemLine();
}
//내구도 아이템
if (Item.CurrentDurability >= 0 && Item.Durability > 0)
{
bLargeWidth = true;
//빈공간
AddTooltipItemBlank(12);
//<투영 병기 정보>
AddTooltipItemOption(1492, "", true, false, false);
SetTooltipItemColor(255, 255, 255, 0);
//사용가능 시간
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 1493;
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
if (Item.CurrentDurability+1 <= 5)
{
m_Info.t_color.R = 255;
m_Info.t_color.G = 0;
m_Info.t_color.B = 0;
}
else
{
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
}
m_Info.t_color.A = 255;
m_Info.t_strText = " " $ Item.CurrentDurability $ "/" $ Item.Durability;
EndItem();
//"교환/드롭 불가"
AddTooltipItemOption(1491, "", true, false, false);
//빈공간
if (Len(Item.Description)>0)
{
AddTooltipItemBlank(12);
}
}
//branch
//에너지 정보
if (Item.BR_MaxEnergy > 0)
{
//bLargeWidth = true;
//빈공간
AddTooltipItemBlank(12);
//<에너지 정보>
AddTooltipItemOption(5065, "", true, false, false);
SetTooltipItemColor(255, 255, 255, 0);
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 5066;
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.bLineBreak = true;
if ( Item.BR_CurrentEnergy==0 || (Item.BR_MaxEnergy / Item.BR_CurrentEnergy > 10) )
{
m_Info.t_color.R = 255;
m_Info.t_color.G = 0;
m_Info.t_color.B = 0;
}
else
{
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
}
m_Info.t_color.A = 255;
//m_Info.t_strText = " " $ Item.BR_CurrentEnergy $ "/" $ Item.BR_MaxEnergy;
m_Info.t_strText = " " ;
ParamAdd(m_Info.Condition, "Type", "CurrentEnergy");
EndItem();
}
//end of branch
//설명
if (Len(Item.Description)>0)
{
bLargeWidth = true;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_color.R = 178;
m_Info.t_color.G = 190;
m_Info.t_color.B = 207;
m_Info.t_color.A = 255;
m_Info.t_strText = Item.Description;
EndItem();
}
//TooltipInsertItemLine();
/////////////////////////////////////////////////////////////////////////////////////////
// 셋트 아이템 정보
if (IsValidItemID(Item.ID))
{
for (idx=0; idx<TOOLTIP_SETITEM_MAX; idx++)
{
//셋트아이템 리스트
for (SetID=0; SetID<class'UIDATA_ITEM'.static.GetSetItemNum(Item.ID, idx); SetID++) //0,1,2번 세트아이템효과 에 대해서 각각 몇가지의 세트가 완비되야하나..
{
bLargeWidth = true;
if (!class'UIDATA_ITEM'.static.IsExistSetItem(Item.ID, idx, SetID))
{
tmpItemID.classID = class'UIDATA_ITEM'.static.GetSetItemFirstID(Item.ID, idx, SetID);
if (tmpItemID.classID > 0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 2;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
EndItem();
class'UIDATA_ITEM'.static.GetItemInfo(tmpItemID, info );
addItemIconSmallType(info,"");
strTmp = class'UIDATA_ITEM'.static.GetItemName(tmpItemID);
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetX = 4;
m_Info.nOffSetY = 4;
//m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 112;
m_Info.t_color.G = 115;
m_Info.t_color.B = 123;
m_Info.t_color.A = 255;
m_Info.t_strText = strTmp;
ParamAdd(m_info.Condition, "SetItemNum", string(idx));
ParamAdd(m_Info.Condition, "Type", "Equip");
ParamAddItemID(m_Info.Condition, Item.ID);
ParamAdd(m_Info.Condition, "CurTypeID", string(SetID)); //비교할 아이템의 Type 예(0번:흉갑 1번:각반 2번:헬멧 3번:팔 4번 다리 ..ItemName.txt에 들어있는순서
ParamAdd(m_Info.Condition, "NormalColor", "112,115,123");
ParamAdd(m_Info.Condition, "EnableColor", "176,185,205");
EndItem();
}
}else
{
TooltipInsertItemLine();
AddTooltipItemOption(5098, "", true, false, false);
AddTooltipItemBlank(4);
}
}
//셋트효과
strTmp = class'UIDATA_ITEM'.static.GetSetItemEffectDescription(Item.ID, idx);
if (Len(strTmp)>0)
{
bLargeWidth = true;
// оставить - полоска перед описание бонусов сета
TooltipInsertItemLine();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_color.R = 128;
m_Info.t_color.G = 127;
m_Info.t_color.B = 103;
m_Info.t_color.A = 255;
m_Info.t_strText = strTmp;
ParamAdd(m_Info.Condition, "Type", "SetEffect");
ParamAddItemID(m_Info.Condition, Item.ID);
ParamAdd(m_Info.Condition, "EffectID", String(idx));
ParamAdd(m_Info.Condition, "NormalColor", "128,127,103");
ParamAdd(m_Info.Condition, "EnableColor", "183,178,122");
EndItem();
}
}
//인첸트 셋트효과
strTmp = class'UIDATA_ITEM'.static.GetSetItemEnchantEffectDescription(Item.ID);
if (Len(strTmp)>0)
{
bLargeWidth = true;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_color.R = 74;
m_Info.t_color.G = 92;
m_Info.t_color.B = 104;
m_Info.t_color.A = 255;
m_Info.t_strText = strTmp;
ParamAdd(m_Info.Condition, "Type", "EnchantEffect");
ParamAddItemID(m_Info.Condition, Item.ID);
ParamAdd(m_Info.Condition, "NormalColor", "74,92,104");
ParamAdd(m_Info.Condition, "EnableColor", "111,146,169");
EndItem();
}
}
//퀘스트 정보를 표시한다.
AddTooltipItemQuestList(Item);
// 속성 게이지를 그려준다.
AddTooltipItemAttributeGage(Item);
// 기간제 아이템
if ( Item.CurrentPeriod > 0)
{
//빈공간
AddTooltipItemBlank(12);
//<기간제 아이템>
AddTooltipItemOption(1739, "", true, false, false);
SetTooltipItemColor(255, 255, 255, 0);
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 1199;
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = " : ";
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_color.R = 178;
m_Info.t_color.G = 190;
m_Info.t_color.B = 207;
m_Info.t_color.A = 255;
m_Info.t_strText = "" $ MakeTimeStr(Item.CurrentPeriod);
ParamAdd(m_Info.Condition, "Type", "PeriodTime");
EndItem();
}
}
else
{
return;
}
if (bLargeWidth)
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH;
if(TooltipType == "InventoryPawnViewer") // PawnViewer용 추가 - lancelot 2007. 10. 16.
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.bLineBreak = true;
m_Info.t_strText ="ID : "$string(Item.Id.classID);
EndItem();
}
ReturnTooltipInfo(m_Tooltip);
}
function addItemIconSmallType (ItemInfo item, string ForeTexture)
{
StartItem();
m_Info.eType = DIT_TEXTURE;
m_Info.u_nTextureWidth = 16;
m_Info.u_nTextureHeight = 16;
m_Info.u_nTextureUWidth = 32;
m_Info.u_nTextureUHeight = 32;
m_Info.nOffSetX = 4;
m_Info.nOffSetY = 2;
m_Info.u_strTexture = item.IconName;
EndItem();
StartItem();
m_Info.eType = DIT_TEXTURE;
m_Info.u_nTextureWidth = 16;
m_Info.u_nTextureHeight = 16;
m_Info.u_nTextureUWidth = 32;
m_Info.u_nTextureUHeight = 32;
m_Info.nOffSetX = -16;
m_Info.nOffSetY = 2;
m_Info.u_strTexture = item.IconPanel;
EndItem();
if ( ForeTexture != "" )
{
StartItem();
m_Info.eType = DIT_TEXTURE;
m_Info.u_nTextureWidth = 14;
m_Info.u_nTextureHeight = 14;
m_Info.u_nTextureUWidth = 32;
m_Info.u_nTextureUHeight = 32;
m_Info.nOffSetX = -20;
m_Info.nOffSetY = 2;
m_Info.u_strTexture = ForeTexture;
EndItem();
}
}
function string GetSlotTypeString2(int ItemType, int SlotBitType, int ArmorType )
{
local string SlotString;
// SlotString = GetSlotTypeString(ItemType, SlotBitType, ArmorType );
// Debug2("SlotString:" $ SlotString $" ItemType:" $ string(ItemType) $ " SlotBitType:" $ string(SlotBitType) $ " ArmorType:" $ string(ArmorType));
if(( ArmorType== 1 || ArmorType == 2 || ArmorType == 3 ) && ( SlotBitType == 1024 || SlotBitType == 2048 || SlotBitType == 32768 || SlotBitType == 512 || SlotBitType == 4096 ))
{
switch(SlotBitType)
{
case 1024:
SlotString = GetSystemString(235); // 235 Верх. доспех
break;
case 2048:
SlotString = GetSystemString(236); // 236 Ниж. доспех
break;
case 32768:
SlotString = GetSystemString(542); // 542 Ниж. и верх. доспехи
break;
case 512:
SlotString = GetSystemString(232); // 232 Перчатки
break;
case 4096:
SlotString = GetSystemString(233); // 233 Сапоги
break;
}
switch(ArmorType)
{
case 1:
SlotString = SlotString $ " / " $ GetSystemString(245); // 245 Легкий
break;
case 2:
SlotString = SlotString $ " / " $ GetSystemString(246); // 246 Тяжелый
break;
case 3:
SlotString = SlotString $ " / " $ GetSystemString(244); // 244 Роба
break;
}
return SlotString;
}
return GetSlotTypeString(ItemType, SlotBitType, ArmorType );
}
/////////////////////////////////////////////////////////////////////////////////
// ACTION
function ReturnTooltip_NTT_ACTION(string param, ETooltipSourceType eSourceType)
{
local ItemInfo Item;
if (eSourceType == NTST_ITEM)
{
ParseString( param, "Name", Item.Name);
ParseString( param, "Description", Item.Description);
//액션 이름
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = Item.Name;
EndItem();
//액션 설명
if (Len(Item.Description)>0)
{
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = false;
m_Info.bLineBreak = true;
m_Info.t_color.R = 178;
m_Info.t_color.G = 190;
m_Info.t_color.B = 207;
m_Info.t_color.A = 255;
m_Info.t_strText = Item.Description;
EndItem();
}
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// SKILL
function ReturnTooltip_NTT_SKILL(string param, ETooltipSourceType eSourceType)
{
local ItemInfo Item;
local EItemParamType eItemParamType;
local EShortCutItemType eShortCutType;
local int nTmp;
local int hitTime;
local int reuseDelay;
local int SkillLevel;
//Debug2(param);
if (eSourceType == NTST_ITEM)
{
ParseItemID( param, Item.ID );
ParseString( param, "Name", Item.Name);
ParseString( param, "AdditionalName", Item.AdditionalName);
ParseString( param, "Description", Item.Description);
ParseInt( param, "Level", Item.Level);
eShortCutType = EShortCutItemType(Item.ItemSubType);
eItemParamType = EItemParamType(Item.ItemType);
SkillLevel = Item.Level;
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH;
//아이템 이름
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = Item.Name;
EndItem();
// 인챈트시 변환된 레벨을 원래 레벨로 변환시켜준다.
if (Len(Item.AdditionalName)>0)
{
SkillLevel = class'UIDATA_SKILL'.static.GetEnchantSkillLevel( Item.ID, Item.Level );
}
//ex) " Lv "
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = " ";
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 88;
EndItem();
//스킬 레빌
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_strText = " " $ SkillLevel;
EndItem();
// 인챈트 내용을 뿌려주는 곳은 이곳
if (Len(Item.AdditionalName)>0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetX = 5;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 255;
m_Info.t_color.G = 217;
m_Info.t_color.B = 105;
m_Info.t_color.A = 255;
m_Info.t_strText = Item.AdditionalName;
EndItem();
}
//Operate Type
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_strText = class'UIDATA_SKILL'.static.GetOperateType( Item.ID, Item.Level );
EndItem();
nTmp = class'UIDATA_SKILL'.static.GetHpConsume( Item.ID, Item.Level );
if (nTmp>0)
{
// 1195 u,Затрата HP\0 AddTooltipItemOption(1195, String(nTmp), true, true, false);
// 5095 u,Время применения\0 milliseconds'
hitTime = ( 0x0000FFFF & nTmp );
if( hitTime > 0 ) {
AddTooltipItemOption(5095, MakeTimeStringsFloat((hitTime * 100)/1000), true, true, false);
}
// 5096 u,Время перезарядки\0 second
reuseDelay = ( nTmp >> 16 );
if( reuseDelay > 0 ) {
AddTooltipItemOption(5096, MakeTimeStringSecond(reuseDelay), true, true, false);
}
}
nTmp = class'UIDATA_SKILL'.static.GetMpConsume( Item.ID, Item.Level );
if (nTmp>0)
{
// 320 a,MP\0
AddTooltipItemOption(320, String(nTmp), true, true, false);
}
nTmp = class'UIDATA_SKILL'.static.GetCastRange( Item.ID, Item.Level );
if (nTmp>=0)
{
// 321 u,Радиус\0
AddTooltipItemOption(321, String(nTmp), true, true, false);
}
//설명
if (Len(Item.Description)>0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_color.R = 178;
m_Info.t_color.G = 190;
m_Info.t_color.B = 207;
m_Info.t_color.A = 255;
m_Info.t_strText = Item.Description;
EndItem();
}
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// ABNORMALSTATUS
function ReturnTooltip_NTT_ABNORMALSTATUS(string param, ETooltipSourceType eSourceType)
{
local ItemInfo Item;
local int ShowLevel;
local EItemParamType eItemParamType;
local EShortCutItemType eShortCutType;
if (eSourceType == NTST_ITEM)
{
ParseItemID( param, Item.ID );
ParseString( param, "Name", Item.Name);
ParseString( param, "AdditionalName", Item.AdditionalName);
ParseString( param, "Description", Item.Description);
ParseInt( param, "Level", Item.Level);
ParseInt( param, "Reserved", Item.Reserved);
eShortCutType = EShortCutItemType(Item.ItemSubType);
eItemParamType = EItemParamType(Item.ItemType);
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH;
//아이템 이름
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = Item.Name;
EndItem();
ShowLevel = Item.Level;
if (Len(Item.AdditionalName)>0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetX = 5;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 255;
m_Info.t_color.G = 217;
m_Info.t_color.B = 105;
m_Info.t_color.A = 255;
m_Info.t_strText = Item.AdditionalName;
EndItem();
ShowLevel = class'UIDATA_SKILL'.static.GetEnchantSkillLevel( Item.ID, Item.Level );
}
//ex) " Lv "
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = " ";
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 88;
EndItem();
//스킬 레벨
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_strText = " " $ ShowLevel;
EndItem();
//남은시간
if (!IsDeBuff(Item.ID, Item.Level) && Item.Reserved>=0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 1199;
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = " : ";
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_strText = MakeBuffTimeStr(Item.Reserved);
ParamAdd(m_Info.Condition, "Type", "RemainTime");
EndItem();
}
//설명
if (Len(Item.Description)>0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_color.R = 178;
m_Info.t_color.G = 190;
m_Info.t_color.B = 207;
m_Info.t_color.A = 255;
m_Info.t_strText = Item.Description;
EndItem();
}
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// NORMALITEM
function ReturnTooltip_NTT_NORMALITEM(string param, ETooltipSourceType eSourceType)
{
local ItemInfo Item;
if (eSourceType == NTST_ITEM)
{
ParseString( param, "Name", Item.Name);
ParseString( param, "Description", Item.Description);
ParseString( param, "AdditionalName", Item.AdditionalName);
ParseInt( param, "CrystalType", Item.CrystalType);
// Цвет Название предметов
AddTooltipItemName(Item.Name, Item, 1);
//Grade Mark
AddTooltipItemGrade(Item);
//설명
if (Len(Item.Description)>0)
{
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_color.R = 178;
m_Info.t_color.G = 190;
m_Info.t_color.B = 207;
m_Info.t_color.A = 255;
m_Info.t_strText = Item.Description;
EndItem();
}
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// RECIPE
function ReturnTooltip_NTT_RECIPE(string param, ETooltipSourceType eSourceType, bool bShowPrice)
{
local ItemInfo Item;
local string strAdena;
local string strAdenaComma;
local color AdenaColor;
local int ItemNameClass;
if (eSourceType == NTST_ITEM)
{
ParseItemID(param, Item.ID);
ParseString( param, "Name", Item.Name);
ParseString( param, "Description", Item.Description);
ParseString( param, "AdditionalName", Item.AdditionalName);
ParseInt( param, "CrystalType", Item.CrystalType);
ParseInt( param, "Weight", Item.Weight);
ParseINT64( param, "Price", Item.Price);
ItemNameClass = class'UIDATA_ITEM'.static.GetItemNameClass(Item.ID);
// Цвет Название предметов
// AddTooltipItemName(Item.Name, Item, 1);
AddTooltipItemName(Item.Name, Item, ItemNameClass);
//GetChatWindowHandle( "ChatWnd.NormalChat" ).AddStringToChatWindow("RECIPE:" $ ItemNameClass, GetChatColorByType(0) );
//Grade Mark
AddTooltipItemGrade(Item);
//D Качество : 1/5 Дешовый
addTooltipItemQuality(Item);
//가격
if (bShowPrice)
{
strAdena = Int64ToString(Item.Price);
strAdenaComma = MakeCostString(strAdena);
AdenaColor = GetNumericColor(strAdenaComma);
//가격 : xxx,xxx,xxx
AddTooltipItemOption(641, strAdenaComma $ " ", true, true, false);
SetTooltipItemColor(AdenaColor.R, AdenaColor.G, AdenaColor.B, 0);
//"아데나"
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color = AdenaColor;
m_Info.t_ID= 469;
EndItem();
//읽어주기 스트링
AddTooltipItemOption(0, "(" $ ConvertNumToText(strAdena) $ ")", false, true, false);
SetTooltipItemColor(AdenaColor.R, AdenaColor.G, AdenaColor.B, 0);
}
//Weight
AddTooltipItemOption(52, String(Item.Weight), true, true, false);
//설명
if (Len(Item.Description)>0)
{
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_color.R = 178;
m_Info.t_color.G = 190;
m_Info.t_color.B = 207;
m_Info.t_color.A = 255;
m_Info.t_strText = Item.Description;
EndItem();
}
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// SHORTCUT
function ReturnTooltip_NTT_SHORTCUT(string param, ETooltipSourceType eSourceType)
{
local ItemInfo Item;
local EItemParamType eItemParamType;
local EShortCutItemType eShortCutType;
local string ItemName;
local ShortcutCommandItem commandItem;
local int shortcutID;
local string strShort;
local ShortcutAssignWnd Script;
Script = ShortcutAssignWnd( GetScript( "OptionWnd.ShortcutTab" ) );
strShort = "<" $ GetSystemString(1523) $ ": ";
if (eSourceType == NTST_ITEM)
{
if( BoolSelect )
{
ParseInt( param, "ItemSubType", Item.ItemSubType);
ParseString( param, "Name", Item.Name);
ParseInt( param, "RefineryOp1", Item.RefineryOp1);
ParseInt( param, "RefineryOp2", Item.RefineryOp2);
eShortCutType = EShortCutItemType(Item.ItemSubType);
//아이템 이름 취득
ItemName = class'UIDATA_ITEM'.static.GetRefineryItemName( Item.Name, Item.RefineryOp1, Item.RefineryOp2 );
switch (eShortCutType)
{
case SCIT_ITEM:
ReturnTooltip_NTT_ITEM(param, "inventory", eSourceType);
break;
case SCIT_SKILL:
ReturnTooltip_NTT_SKILL(param, eSourceType);
break;
case SCIT_ACTION:
case SCIT_MACRO:
if (eSourceType == NTST_ITEM)
{
ParseString( param, "Name", Item.Name);
ParseString( param, "Description", Item.Description);
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH;
//액션 이름
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = Item.Name;
EndItem();
//액션 설명
if (Len(Item.Description)>0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = false;
m_Info.bLineBreak = true;
m_Info.t_color.R = 178;
m_Info.t_color.G = 190;
m_Info.t_color.B = 207;
m_Info.t_color.A = 255;
m_Info.t_strText = Item.Description;
EndItem();
}
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
break;
case SCIT_RECIPE:
case SCIT_BOOKMARK:
//아이템 이름
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH;
StartItem();
m_Info.eType = DIT_TEXT;
//m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = ItemName;
EndItem();
break;
default:
break;
}
ParseINT(param, "ShortcutID", shortcutID);
if( GetOptionBool( "Game", "EnterChatting" ) )
{
class'ShortcutAPI'.static.GetAssignedKeyFromCommand("TempStateShortcut", "UseShortcutItem Num=" $ shortcutID, commandItem);
}
else
{
class'ShortcutAPI'.static.GetAssignedKeyFromCommand("GamingStateShortcut", "UseShortcutItem Num=" $ shortcutID, commandItem);
}
//단축키 설명...
if( commandItem.subkey1 != "" )
{
strShort = strShort $ Script.GetUserReadableKeyName( commandItem.subkey1 ) $ "+";
}
if( commandItem.subkey2 != "" )
{
strShort = strShort $ Script.GetUserReadableKeyName( commandItem.subkey2 ) $ "+";
}
if( commandItem.Key != "" )
{
strShort = strShort $ Script.GetUserReadableKeyName( commandItem.Key ) $ ">";
}
if( commandItem.subkey1 == "" && commandItem.subkey2 == "" && commandItem.Key == "" )
{
strShort = strShort $ GetSystemString(27) $">";
}
//줄추가~
AddTooltipItemBlank(6);
StartItem();
m_Info.eType = DIT_SPLITLINE;
m_Info.u_nTextureWidth = TOOLTIP_MINIMUM_WIDTH;
m_Info.u_nTextureHeight = 1;
m_Info.u_strTexture ="L2ui_ch3.tooltip_line";
EndItem();
if( ItemName != "" )
{
AddTooltipItemBlank(5);
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_strText = strShort;
EndItem();
AddTooltipItemBlank(4);
ReturnTooltipInfo(m_Tooltip);
}
return;
}
else
{
ParseItemID( param, Item.ID );
ParseString( param, "Name", Item.Name);
ParseString( param, "AdditionalName", Item.AdditionalName);
ParseInt( param, "Level", Item.Level);
ParseInt( param, "Reserved", Item.Reserved);
ParseInt( param, "Enchanted", Item.Enchanted);
ParseInt( param, "ItemType", Item.ItemType);
ParseInt( param, "ItemSubType", Item.ItemSubType);
ParseInt( param, "CrystalType", Item.CrystalType);
ParseInt( param, "ConsumeType", Item.ConsumeType);
ParseInt( param, "RefineryOp1", Item.RefineryOp1);
ParseInt( param, "RefineryOp2", Item.RefineryOp2);
ParseINT64( param, "ItemNum", Item.ItemNum);
ParseInt( param, "MpConsume", Item.MpConsume);
//branch
ParseInt ( param, "IsBRPremium", Item.IsBRPremium);
//end of branch
eShortCutType = EShortCutItemType(Item.ItemSubType);
eItemParamType = EItemParamType(Item.ItemType);
//아이템 이름 취득
ItemName = class'UIDATA_ITEM'.static.GetRefineryItemName( Item.Name, Item.RefineryOp1, Item.RefineryOp2 );
switch (eShortCutType)
{
case SCIT_ITEM:
//branch
AddPrimeItemSymbol(Item);
//end of branch
//인첸트 ex) "+10"
AddTooltipItemEnchant(Item);
//아이템 이름
AddTooltipItemName(ItemName, Item, 1);
//Grade Mark
AddTooltipItemGrade(Item);
//아이템 갯수
AddTooltipItemCount(Item);
break;
case SCIT_SKILL:
//아이템 이름
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = ItemName;
EndItem();
if (Len(Item.AdditionalName)>0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetX = 5;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 255;
m_Info.t_color.G = 217;
m_Info.t_color.B = 105;
m_Info.t_color.A = 255;
m_Info.t_strText = Item.AdditionalName;
EndItem();
Item.Level = class'UIDATA_SKILL'.static.GetEnchantSkillLevel( Item.ID, Item.Level );
}
//ex) " Lv "
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = " ";
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 88;
EndItem();
//스킬 레빌
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_strText = " " $ Item.Level;
EndItem();
//MP소모량
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = " (";
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_ID = 91;
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = ":" $ Item.MpConsume $ ")";
EndItem();
break;
case SCIT_ACTION:
case SCIT_MACRO:
case SCIT_RECIPE:
case SCIT_BOOKMARK:
//아이템 이름
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = ItemName;
EndItem();
break;
}
}
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// RECIPE_MANUFACTURE
function ReturnTooltip_NTT_RECIPE_MANUFACTURE(string param, ETooltipSourceType eSourceType)
{
local ItemInfo Item;
local int ItemNameClass;
if (eSourceType == NTST_ITEM)
{
ParseItemID(param, Item.ID);
ParseString( param, "Name", Item.Name);
ParseString( param, "Description", Item.Description);
ParseString( param, "AdditionalName", Item.AdditionalName);
ParseINT64( param, "Reserved64", Item.Reserved64);
ParseInt( param, "CrystalType", Item.CrystalType);
ParseINT64( param, "ItemNum", Item.ItemNum);
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH;
ItemNameClass = class'UIDATA_ITEM'.static.GetItemNameClass(Item.ID);
//GetChatWindowHandle( "ChatWnd.NormalChat" ).AddStringToChatWindow("MANUFACTURE:" $ ItemNameClass, GetChatColorByType(0) );
//GetChatWindowHandle( "ChatWnd.NormalChat" ).AddStringToChatWindow("MANUFACTURE:" $ param, GetChatColorByType(0) );
// Цвет Название предметов
// AddTooltipItemName(Item.Name, Item, 1);
AddTooltipItemName(Item.Name, Item, ItemNameClass);
//Grade Mark
AddTooltipItemGrade(Item);
//D Качество : 1/5 Дешовый
addTooltipItemQuality(Item);
//ex) "필요수 : 2"
AddTooltipItemOption(736, Int64ToString(Item.Reserved64), true, true, false);
//ex) "보유수 : 0"
AddTooltipItemOption(737, Int64ToString(Item.ItemNum), true, true, false);
//설명
if (Len(Item.Description)>0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_color.R = 178;
m_Info.t_color.G = 190;
m_Info.t_color.B = 207;
m_Info.t_color.A = 255;
m_Info.t_strText = Item.Description;
EndItem();
}
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// PLEDGEINFO
function ReturnTooltip_NTT_CLANINFO(string param, ETooltipSourceType eSourceType)
{
local LVDataRecord record;
if (eSourceType == NTST_LIST)
{
ParamToRecord( param, record );
//ex) "직업 : 엘븐메이지"
AddTooltipItemOption(391, GetClassType(int(record.LVDataList[2].szData)), true, true, true);
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
//선준 수정(2010.03.30) 완료
function ReturnTooltip_NTT_POSTINFO(string param, ETooltipSourceType eSourceType)
{
local LVDataRecord record;
if (eSourceType == NTST_LIST)
{
ParamToRecord( param, record );
//ex) "직업 : 엘븐메이지"
AddTooltipItemOption(391, GetClassType(int(record.LVDataList[1].szData)), true, true, true);
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
//선준 수정(2010.02.22 ~ 03.08) 완료
/////////////////////////////////////////////////////////////////////////////////
// ROOMLIST
function ReturnTooltip_NTT_ROOMLIST(string param, ETooltipSourceType eSourceType)
{
local int i;
local LVDataRecord record;
local int len;
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH + 40;
if (eSourceType == NTST_LIST)
{
ParamToRecord( param, record );
len = int( record.LVDataList[6].szData );
for( i = 0 ; i < len ; i++ )
{
StartItem();
m_Info.eType = DIT_TEXTURE;
m_Info.u_nTextureWidth = 11;
m_Info.u_nTextureHeight = 11;
m_Info.u_strTexture = GetClassIconName2( record.LVDataList[7 + i].nReserved1 );
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = false;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = " " $ record.LVDataList[7 + i].szData;
EndItem();
if( i != len - 1 )
{
AddTooltipItemBlank(2);
}
}
//ex) "직업 : 엘븐메이지"
//AddTooltipItemOption(391, GetClassType(int(record.LVDataList[2].szData)), true, true, true);
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// USERLIST
function ReturnTooltip_NTT_USERLIST(string param, ETooltipSourceType eSourceType)
{
local LVDataRecord record;
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH + 80;
if (eSourceType == NTST_LIST)
{
ParamToRecord( param, record );
//ex) "직업 : 엘븐메이지"
AddTooltipItemOption(391, GetClassType(int(record.LVDataList[1].szData)), true, true, true);
AddTooltipItemBlank(0);
//ex)귀속 지역 :
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = GetSystemString( 2276 ) $ " : ";
EndItem();
//설명
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
if( record.LVDataList[5].szData == "" )
{
m_Info.t_strText = GetSystemString( 27 );
}
else
{
m_Info.t_strText = record.LVDataList[5].szData;
}
EndItem();
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// PARTYMATCH
function ReturnTooltip_NTT_PARTYMATCH(string param, ETooltipSourceType eSourceType)
{
local LVDataRecord record;
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH + 80;
if (eSourceType == NTST_LIST)
{
ParamToRecord( param, record );
//ex) "직업 : 엘븐메이지"
AddTooltipItemOption(391, GetClassType(int(record.LVDataList[1].szData)), true, true, true);
//선준 수정(2010.02.22 ~ 03.08) 완료
//ex)현재 위치 : 글루디오
AddTooltipItemOption(471, GetZoneNameWithZoneID(int(record.LVDataList[3].szReserved)), true, true, true);
/*
AddTooltipItemBlank(0);
//귀속지역
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = false;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = GetSystemString( 2276 ) @ ":";
EndItem();
//설명
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
if( record.LVDataList[4].szData == "" )
{
//m_Info.bLineBreak = true;
m_Info.t_strText = "" @ GetSystemString( 27 );
}
else
{
m_Info.bLineBreak = true;
m_Info.t_strText = record.LVDataList[4].szData;
}
EndItem();
*/
AddTooltipItemBlank(0);
//ex)귀속 지역 :
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = GetSystemString( 2276 ) $ " : ";
//m_Info.t_strText = "귀속 지역 : ";
EndItem();
//설명
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
if( record.LVDataList[4].szReserved == "" )
{
m_Info.t_strText = GetSystemString( 27 );
}
else
{
m_Info.t_strText = record.LVDataList[4].szReserved;
}
EndItem();
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
//선준 추가 UNION 예전 직업만 나오는 경우.
/////////////////////////////////////////////////////////////////////////////////
// UINONLIST
function ReturnTooltip_NTT_UNIONLIST(string param, ETooltipSourceType eSourceType)
{
local LVDataRecord record;
if (eSourceType == NTST_LIST)
{
ParamToRecord( param, record );
//ex) "직업 : 엘븐메이지"
AddTooltipItemOption(391, GetClassType(int(record.LVDataList[1].szData)), true, true, true);
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// QUESTLIST
function ReturnTooltip_NTT_QUESTLIST(string param, ETooltipSourceType eSourceType)
{
local LVDataRecord record;
local int nTmp;
if (eSourceType == NTST_LIST)
{
ParamToRecord( param, record );
//퀘스트 이름
AddTooltipItemOption(1200, record.LVDataList[0].szData, true, true, true);
//반복성
switch(record.LVDataList[3].nReserved1)
{
case 0:
case 2:
nTmp = 861;
break;
case 1:
case 3:
nTmp = 862;
break;
}
AddTooltipItemOption2(1202, nTmp, true, true, false);
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// RAIDLIST
function ReturnTooltip_NTT_RAIDLIST(string param, ETooltipSourceType eSourceType)
{
local LVDataRecord record;
if (eSourceType == NTST_LIST)
{
ParamToRecord( param, record );
if (Len(record.szReserved)<1)
return;
m_Tooltip.MinimumWidth = TOOLTIP_MINIMUM_WIDTH;
//레이드 설명
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = false;
m_Info.t_color.R = 178;
m_Info.t_color.G = 190;
m_Info.t_color.B = 207;
m_Info.t_color.A = 255;
m_Info.t_strText = record.szReserved;
EndItem();
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// QUESTINFO
function ReturnTooltip_NTT_QUESTINFO(string param, ETooltipSourceType eSourceType)
{
local LVDataRecord record;
local int nTmp;
local int Width1;
local int Width2;
local int Height;
if (eSourceType == NTST_LIST)
{
ParamToRecord( param, record );
//퀘스트 이름
AddTooltipItemOption(1200, record.LVDataList[0].szData, true, true, true);
//수행조건
AddTooltipItemOption(1201, record.LVDataList[1].szData, true, true, false);
//Width결정!
GetTextSizeDefault(GetSystemString(1200) $ " : " $ record.LVDataList[0].szData, Width1, Height);
GetTextSizeDefault(GetSystemString(1201) $ " : " $ record.LVDataList[1].szData, Width2, Height);
if (Width2>Width1)
Width1 = Width2;
if (TOOLTIP_MINIMUM_WIDTH>Width1)
Width1 = TOOLTIP_MINIMUM_WIDTH;
m_Tooltip.MinimumWidth = Width1 + 30;
//추천레벨
AddTooltipItemOption(922, record.LVDataList[2].szData, true, true, false);
//반복성
switch(record.LVDataList[3].nReserved1)
{
case 0:
case 2:
nTmp = 861;
break;
case 1:
case 3:
nTmp = 862;
break;
}
AddTooltipItemOption2(1202, nTmp, true, true, false);
//퀘스트설명
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = false;
m_Info.bLineBreak = true;
m_Info.t_color.R = 178;
m_Info.t_color.G = 190;
m_Info.t_color.B = 207;
m_Info.t_color.A = 255;
m_Info.t_strText = record.szReserved;
EndItem();
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
/////////////////////////////////////////////////////////////////////////////////
// MANOR
function ReturnTooltip_NTT_MANOR(string param, string TooltipType, ETooltipSourceType eSourceType)
{
local LVDataRecord record;
local int idx1;
local int idx2;
local int idx3;
if (eSourceType == NTST_LIST)
{
ParamToRecord( param, record );
if (TooltipType == "ManorSeedInfo")
{
idx1 = 4;
idx2 = 5;
idx3 = 6;
}
else if (TooltipType == "ManorCropInfo")
{
idx1 = 5;
idx2 = 6;
idx3 = 7;
}
else if (TooltipType == "ManorSeedSetting")
{
idx1 = 7;
idx2 = 8;
idx3 = 9;
}
else if (TooltipType == "ManorCropSetting")
{
idx1 = 9;
idx2 = 10;
idx3 = 11;
}
else if (TooltipType == "ManorDefaultInfo")
{
idx1 = 1;
idx2 = 4;
idx3 = 5;
}
else if (TooltipType == "ManorCropSell")
{
idx1 = 7;
idx2 = 8;
idx3 = 9;
}
// 씨앗 or 작물 이름
AddTooltipItemOption(0, record.LVDataList[0].szData, false, true, true);
// 레벨
AddTooltipItemOption(537, record.LVDataList[idx1].szData, true, true, false);
// 보상 타입1
AddTooltipItemOption(1134, record.LVDataList[idx2].szData, true, true, false);
// 보상 타입2
AddTooltipItemOption(1135, record.LVDataList[idx3].szData, true, true, false);
}
else
{
return;
}
ReturnTooltipInfo(m_Tooltip);
}
// [퀘스트 아이템 툴팁 추가]
function ReturnTooltip_NTT_QUESTREWARDS(string param, ETooltipSourceType eSourceType)
{
// [퀘스트 아이템 툴팁 추가] 이 부분에 퀘스트 아이템 툴팁에 걸맞는 코드가 들어가면 될 것 같습니다.
// 2009.10.14
// ReturnTooltip_NTT_ITEM(param, "Inventoty", eSourceType);
ReturnTooltip_NTT_ITEM(param, "QuestReward", eSourceType);
}
//"XXX : YYYY" 형태의 TooltipItem을 편하게 추가해 준다.
function AddTooltipItemOption(int TitleID, string Content, bool bTitle, bool bContent, bool IamFirst)
{
if (bTitle)
{
StartItem();
m_Info.eType = DIT_TEXT;
if (!IamFirst)
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = TitleID;
EndItem();
}
if (Content != "0")
{
if (bContent)
{
if (bTitle)
{
StartItem();
m_Info.eType = DIT_TEXT;
if (!IamFirst)
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = " : ";
EndItem();
}
StartItem();
m_Info.eType = DIT_TEXT;
if (!IamFirst)
m_Info.nOffSetY = 6;
if (!bTitle)
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_strText = Content;
EndItem();
}
}
}
// Уровень Использования
function AddTooltipItemUseLevel(ItemInfo Item)
{
local int myLevel;
local int minLevel;
local int ColorR;
local int ColorG;
local int ColorB;
local int ColorA;
// 5099 u,Мин. Уровень\0
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 5099;
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = " : ";
EndItem();
myLevel = GetMyUserLevel();
minLevel = getItemMinLevel(Item);
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
isUseLevelColor(myLevel, minLevel, ColorR, ColorG, ColorB, ColorA);
m_Info.t_color.R = ColorR;
m_Info.t_color.G = ColorG;
m_Info.t_color.B = ColorB;
m_Info.t_color.A = ColorA;
m_Info.t_strText = String(minLevel);
EndItem();
}
// уровень персонажа
function int GetMyUserLevel()
{
local UserInfo PlayerInfo;
local int Level;
if( GetPlayerInfo( PlayerInfo ) )
{
Level = PlayerInfo.nLevel;
}
else
{
Level = 0;
}
return Level;
}
// Минимальный уровень использование предмета
function int getItemMinLevel(ItemInfo Item)
{
local int value;
value = 1;
switch (Item.CrystalType)
{
case 5: // S
value = 120;
break;
case 4: // A
value = 120;
break;
case 3: // B
value = 120;
break;
case 2: // C
value = 120;
break;
case 1: // D
value = getItemMinLevelD(Item);
break;
}
return value;
}
// мин лвл для д
function int getItemMinLevelD(ItemInfo Item)
{
local int value;
value = 1;
switch (class'UIDATA_ITEM'.static.GetItemNameClass(Item.ID))
{
case 0: // 0 Дешовый Тёмно бел 898989 137,137,137
value = 1;
break;
case 1: // 1 Обычный Белый FFFFFF 255,255,255
value = 20;
break;
case 2: // 2 Эпический Зеленый 00FF00 000,255,000
value = 40;
break;
case 3: // 3 Легендарный Жёлтый FFFF00 255,255,000
value = 60;
break;
case 4: // 4 Мифический Красный FF0000 255,000,000
value = 70;
break;
}
return value;
}
// зеленым возможно использование иначе красным нет
function isUseLevelColor(int myLevel, int minLevel, out int R, out int G, out int B, out int A)
{
if( myLevel >= minLevel )
{
// Зеленый 00FF00 000,255,000
R = 000;
G = 255;
B = 000;
A = 255;
}
else
{
// Красный FF0000 255,000,000
R = 255;
G = 000;
B = 000;
A = 255;
}
}
//"XXX : YYYY" 형태의 TooltipItem을 편하게 추가해 준다.
//SYSSTRING : SYSSTRING
function AddTooltipItemOption2(int TitleID, int ContentID, bool bTitle, bool bContent, bool IamFirst)
{
if (bTitle)
{
StartItem();
m_Info.eType = DIT_TEXT;
if (!IamFirst)
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = TitleID;
EndItem();
}
if (bContent)
{
if (bTitle)
{
StartItem();
m_Info.eType = DIT_TEXT;
if (!IamFirst)
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = " : ";
EndItem();
}
StartItem();
m_Info.eType = DIT_TEXT;
if (!IamFirst)
m_Info.nOffSetY = 6;
if (!bTitle)
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_ID = ContentID;
EndItem();
}
}
//아이템의 색상을 다시 설정해준다.
function SetTooltipItemColor(int R, int G, int B, int Offset)
{
local int idx;
idx = m_Tooltip.DrawList.Length-1-Offset;
m_Tooltip.DrawList[idx].t_color.R = R;
m_Tooltip.DrawList[idx].t_color.G = G;
m_Tooltip.DrawList[idx].t_color.B = B;
m_Tooltip.DrawList[idx].t_color.A = 255;
}
//D TooltipItem Добавить пустое место.
function AddTooltipItemBlank(int Height)
{
StartItem();
m_Info.eType = DIT_BLANK;
m_Info.b_nHeight = Height;
EndItem();
}
//인첸트
function AddTooltipItemEnchant(ItemInfo Item)
{
local EItemParamType eItemParamType;
eItemParamType = EItemParamType(Item.ItemType);
if (Item.Enchanted>0 && IsEnchantableItem(eItemParamType))
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_strText = "+" $ Item.Enchanted $ " ";
EndItem();
}
}
//D Цвет Название предметов (качество) + AdditionalName
function AddTooltipItemName(string Name, ItemInfo Item, int AddTooltipItemName)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
switch (AddTooltipItemName)
{
case 0: // 0 Дешовый Тёмно бел 898989 137,137,137
m_Info.t_color.R = 137;
m_Info.t_color.G = 137;
m_Info.t_color.B = 137;
m_Info.t_color.A = 255;
break;
case 1: // 1 Обычный Белый FFFFFF 255,255,255
m_Info.t_color.R = 255;
m_Info.t_color.G = 255;
m_Info.t_color.B = 255;
m_Info.t_color.A = 255;
break;
case 2: // 2 Эпический Зеленый 00FF00 000,255,000
m_Info.t_color.R = 000;
m_Info.t_color.G = 255;
m_Info.t_color.B = 000;
m_Info.t_color.A = 255;
break;
case 3: // 3 Легендарный Жёлтый FFFF00 255,255,000
m_Info.t_color.R = 255;
m_Info.t_color.G = 255;
m_Info.t_color.B = 000;
m_Info.t_color.A = 255;
break;
case 4: // 4 Мифический Красный FF0000 255,000,000
m_Info.t_color.R = 255;
m_Info.t_color.G = 000;
m_Info.t_color.B = 000;
m_Info.t_color.A = 255;
break;
}
m_Info.t_strText = Name;
EndItem();
//Additional Name
if (Len(Item.AdditionalName)>0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 255;
m_Info.t_color.G = 217;
m_Info.t_color.B = 105;
m_Info.t_color.A = 255;
m_Info.t_strText = " " $ Item.AdditionalName;
EndItem();
}
}
function GetQualityColor(ItemInfo Item, out int R, out int G, out int B, out int A)
{
switch (class'UIDATA_ITEM'.static.GetItemNameClass(Item.ID))
{
case 0: // 0 Дешовый Тёмно бел 898989 137,137,137
R = 137;
G = 137;
B = 137;
A = 255;
break;
case 1: // 1 Обычный Белый FFFFFF 255,255,255
R = 255;
G = 255;
B = 255;
A = 255;
break;
case 2: // 2 Эпический Зеленый 00FF00 000,255,000
R = 000;
G = 255;
B = 000;
A = 255;
break;
case 3: // 3 Легендарный Жёлтый FFFF00 255,255,000
R = 255;
G = 255;
B = 000;
A = 255;
break;
case 4: // 4 Мифический Красный FF0000 255,000,000
R = 255;
G = 000;
B = 000;
A = 255;
break;
default:
R = 137;
G = 137;
B = 137;
A = 255;
break;
}
}
//D Качество : 1/5 Дешовый
function addTooltipItemQuality(ItemInfo Item)
{
local string Content;
local int ColorR;
local int ColorG;
local int ColorB;
local int ColorA;
//D 5084 Качество
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 5084;
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = " : ";
EndItem();
//D 1/5 Дешовый
Content = getInfoQualityType(Item) $ "/5 " ;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_strText = Content;
EndItem();
//D
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
//m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
// m_Info.t_color.R = 163;
// m_Info.t_color.G = 163;
// m_Info.t_color.B = 163;
// m_Info.t_color.A = 255;
GetQualityColor(Item, ColorR, ColorG, ColorB, ColorA);
m_Info.t_color.R = ColorR;
m_Info.t_color.G = ColorG;
m_Info.t_color.B = ColorB;
m_Info.t_color.A = ColorA;
m_Info.t_ID = getSysStringQualityType(Item);
EndItem();
}
function int getSysStringQualityType(ItemInfo Item)
{
local int SysString;
switch (class'UIDATA_ITEM'.static.GetItemNameClass(Item.ID))
{
//D 5079 Дешовый
case 0:
SysString = 5079;
break;
//D 5080 Обычный
case 1:
SysString = 5080;
break;
//D 5081 Эпический
case 2:
SysString = 5081;
break;
//D 5082 Легендарный
case 3:
SysString = 5082;
break;
//D 5083 Мифический
case 4:
SysString = 5083;
break;
default:
SysString = 5079;
break;
}
return SysString;
}
function string getInfoQualityType(ItemInfo Item)
{
local string SysString;
switch (class'UIDATA_ITEM'.static.GetItemNameClass(Item.ID))
{
//D 5079 Дешовый
case 0:
SysString = "1";
break;
//D 5080 Обычный
case 1:
SysString = "2";
break;
//D 5081 Эпический
case 2:
SysString = "3";
break;
//D 5082 Легендарный
case 3:
SysString = "4";
break;
//D 5083 Мифический
case 4:
SysString = "5";
break;
default:
SysString = "1";
break;
}
return SysString;
}
// 95 u,Физ. Защ.\0
function AddNewPhysicalDefense(int CrystalType, int Enchanted, int PhysicalDefense)
{
//AddNewPhysicalDefense(Item.CrystalType, Item.Enchanted, Item.PhysicalDefense);
//AddTooltipItemOption(95, String(GetPhysicalDefense(Item.CrystalType, Item.Enchanted, Item.PhysicalDefense)), true, true, false);
local string Content;
local int overenchant;
local int enchant;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 95; // 95 u,Физ. Защ.\0
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = " : ";
EndItem();
if(Enchanted > 0)
{
enchant = Enchanted;
overenchant = 0;
if (Enchanted > 3)
{
overenchant = Enchanted - 3;
enchant = 3;
}
Content = string(PhysicalDefense + enchant + (3 * overenchant)) $ " (" $ string(PhysicalDefense) $ " +" $ string(enchant + (3 * overenchant)) $ ")";
}
else
{
Content = string(PhysicalDefense);
}
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_strText = Content;
EndItem();
}
// 99 u,Маг. Защ.\0
function AddNewMagicalDefense(int CrystalType, int Enchanted, int MagicalDefense)
{
//AddTooltipItemOption(99, String(GetMagicalDefense(Item.CrystalType, Item.Enchanted, Item.MagicalDefense)), true, true, false);
local string Content;
local int overenchant;
local int enchant;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 99; // 99 u,Маг. Защ.\0
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = " : ";
EndItem();
if(Enchanted > 0)
{
enchant = Enchanted;
overenchant = 0;
if (Enchanted > 3)
{
overenchant = Enchanted - 3;
enchant = 3;
}
Content = string(MagicalDefense + enchant + (3 * overenchant)) $ " (" $ string(MagicalDefense) $ " +" $ string(enchant + (3 * overenchant)) $ ")";
}
else
{
Content = string(MagicalDefense);
}
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_strText = Content;
EndItem();
}
// 94 u,Физ. Атк.\0
function AddNewPhysicalDamage( int WeaponType, int SlotBitType, int CrystalType, int Enchanted, int PhysicalDamage )
{
local string Content;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 94; // 94 u,Физ. Атк.\0
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = " : ";
EndItem();
if(Enchanted > 0)
{
Content = string(PhysicalDamage + getScrollEnchantBonus( CrystalType, Enchanted)) $ " (" $ string(PhysicalDamage) $ " +" $ string(getScrollEnchantBonus( CrystalType, Enchanted)) $ ")";
}
else
{
Content = string(PhysicalDamage);
}
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_strText = Content;
EndItem();
}
// 98 u,Маг. Атк.\0
function AddNewMagicalDamage( int WeaponType, int SlotBitType, int CrystalType, int Enchanted, int MagicalDamage )
{
local string Content;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_ID = 98; // 98 u,Маг. Атк.\0
EndItem();
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.t_strText = " : ";
EndItem();
if(Enchanted > 0)
{
Content = string(MagicalDamage + getScrollEnchantBonus( CrystalType, Enchanted)) $ " (" $ string(MagicalDamage) $ " +" $ string(getScrollEnchantBonus( CrystalType, Enchanted)) $ ")";
}
else
{
Content = string(MagicalDamage);
}
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_bDrawOneLine = true;
m_Info.t_color.R = 176;
m_Info.t_color.G = 155;
m_Info.t_color.B = 121;
m_Info.t_color.A = 255;
m_Info.t_strText = Content;
EndItem();
}
function int getScrollEnchantBonus(int CrystalType, int Enchanted)
{
local int overenchant;
overenchant = 0;
if (Enchanted > 3)
{
overenchant = Enchanted - 3;
Enchanted = 3;
}
return (getWeaponCrystalEnchantP(CrystalType) * Enchanted) + ((getWeaponCrystalEnchantP(CrystalType) * 2) * overenchant);
}
function int getWeaponCrystalEnchantP(int CrystalType)
{
local int enchant;
switch (CrystalType)
{
case 5: // S
enchant = 10;
break;
case 4: // A
enchant = 8;
break;
case 3: // B
enchant = 6;
break;
case 2: // C
enchant = 4;
break;
case 0: // NONE
case 1: // D
enchant = 2;
break;
default:
enchant = 0;
break;
}
return enchant;
}
//Grade Mark
function AddTooltipItemGrade(ItemInfo Item)
{
local string TextureName;
TextureName = GetItemGradeTextureName(Item.CrystalType);
//debug ("TextureName" @ TextureName);
//debug (TextureName @ Item.CrystalType @ GetItemGradeTextureName(Item.CrystalType));
if (Len(TextureName)>0)
{
StartItem();
m_Info.eType = DIT_TEXTURE;
m_Info.nOffSetX = 2;
m_Info.nOffSetY = 0;
//S80 그레이드일 경우에 한해 아이콘 텍스쳐 크기를 2배로 늘린다.
//debug ("텍스쳐 이름"@ Item.CrystalType );
if (Item.CrystalType == 6 || Item.CrystalType == 7)
{
m_Info.u_nTextureWidth = 32;
m_Info.u_nTextureHeight = 16;
m_Info.u_nTextureUWidth = 32;
m_Info.u_nTextureUHeight = 16;
//debug (TextureName @ Item.CrystalType @ GetItemGradeTextureName(Item.CrystalType));
}
//기타 그레이드에 대해 아이콘 텍스쳐 크기를 세팅한다.
else
{
m_Info.u_nTextureWidth = 16;
m_Info.u_nTextureHeight = 16;
m_Info.u_nTextureUWidth = 16;
m_Info.u_nTextureUHeight = 16;
}
m_Info.u_strTexture = TextureName;
EndItem();
}
}
//Stackable Count
function AddTooltipItemCount(ItemInfo Item)
{
if (IsStackableItem(Item.ConsumeType))
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = " (" $ MakeCostString(Int64ToString(Item.ItemNum)) $ ")";
EndItem();
}
}
//제련 색상
function GetRefineryColor(int Quality, out int R, out int G, out int B)
{
switch (Quality)
{
case 1:
R = 187;
G = 181;
B = 138;
break;
case 2:
R = 132;
G = 174;
B = 216;
break;
case 3:
R = 193;
G = 112;
B = 202;
break;
case 4:
R = 225;
G = 109;
B = 109;
break;
default:
R = 187;
G = 181;
B = 138;
break;
}
}
//속성 게이지 그려주기
function AddTooltipItemAttributeGage(ItemInfo Item)
{
local int i;
//local int highAttrValue[6];
local Array<string> textureName, tooltipStr;
for(i = 0; i < 6; i++)
{
textureName[i] = "";
tooltipStr[i] = "";
}
NowAttrLv =0;
NowMaxValue =0;
NowValue =0;
// 공격 아이템 속성
if (Item.AttackAttributeValue > 0)
{
SetAttackAttribute(Item.AttackAttributeValue,ATTRIBUTE_FIRE);
SetAttackAttribute(Item.AttackAttributeValue,ATTRIBUTE_WATER);
SetAttackAttribute(Item.AttackAttributeValue,ATTRIBUTE_WIND);
SetAttackAttribute(Item.AttackAttributeValue,ATTRIBUTE_EARTH);
SetAttackAttribute(Item.AttackAttributeValue,ATTRIBUTE_HOLY);
SetAttackAttribute(Item.AttackAttributeValue,ATTRIBUTE_UNHOLY); //레벨과 현제값등을 구한다.
switch(Item.AttackAttributeType)
{
case ATTRIBUTE_FIRE:
textureName[ATTRIBUTE_FIRE] = "L2UI_CT1.Gauges.Gauge_DF_Attribute_FIRE";
tooltipStr[ATTRIBUTE_FIRE] =GetSystemString(1622) $ " Lv " $ String(AttackAttLevel[ATTRIBUTE_FIRE]) $ " ("$ GetSystemString(1622) $ " " $ GetSystemString(55) $ " " $ String(Item.AttackAttributeValue) $")";
break;
case ATTRIBUTE_WATER:
textureName[ATTRIBUTE_WATER] = "L2UI_CT1.Gauges.Gauge_DF_Attribute_WATER";
tooltipStr[ATTRIBUTE_WATER] =GetSystemString(1623) $ " Lv " $ String(AttackAttLevel[ATTRIBUTE_WATER]) $ " ("$ GetSystemString(1623) $ " " $ GetSystemString(55) $ " " $String(Item.AttackAttributeValue) $ ")";
break;
case ATTRIBUTE_WIND:
textureName[ATTRIBUTE_WIND] = "L2UI_CT1.Gauges.Gauge_DF_Attribute_WIND";
tooltipStr[ATTRIBUTE_WIND] =GetSystemString(1624) $ " Lv " $ String(AttackAttLevel[ATTRIBUTE_WIND]) $ " ("$ GetSystemString(1624) $ " " $ GetSystemString(55) $ " " $String(Item.AttackAttributeValue) $ ")";
break;
case ATTRIBUTE_EARTH:
textureName[ATTRIBUTE_EARTH] = "L2UI_CT1.Gauges.Gauge_DF_Attribute_EARTH";
tooltipStr[ATTRIBUTE_EARTH] =GetSystemString(1625) $ " Lv " $ String(AttackAttLevel[ATTRIBUTE_EARTH]) $ " ("$ GetSystemString(1625) $ " " $ GetSystemString(55) $ " " $ String(Item.AttackAttributeValue) $")";
break;
case ATTRIBUTE_HOLY:
textureName[ATTRIBUTE_HOLY] = "L2UI_CT1.Gauges.Gauge_DF_Attribute_DIVINE";
tooltipStr[ATTRIBUTE_HOLY] =GetSystemString(1626) $ " Lv " $ String(AttackAttLevel[ATTRIBUTE_HOLY]) $ " ("$ GetSystemString(1626) $ " " $ GetSystemString(55) $ " " $String(Item.AttackAttributeValue) $ ")";
break;
case ATTRIBUTE_UNHOLY:
textureName[ATTRIBUTE_UNHOLY] = "L2UI_CT1.Gauges.Gauge_DF_Attribute_DARK";
tooltipStr[ATTRIBUTE_UNHOLY] =GetSystemString(1627) $ " Lv " $ String(AttackAttLevel[ATTRIBUTE_UNHOLY]) $ " ("$ GetSystemString(1627) $ " " $ GetSystemString(55) $ " " $String(Item.AttackAttributeValue) $ ")";
break;
}
}
else // 방어 아이템 속성
{
SetDefAttribute(Item.DefenseAttributeValueFire,ATTRIBUTE_FIRE);
SetDefAttribute(Item.DefenseAttributeValueWater,ATTRIBUTE_WATER);
SetDefAttribute(Item.DefenseAttributeValueWind,ATTRIBUTE_WIND);
SetDefAttribute(Item.DefenseAttributeValueEarth,ATTRIBUTE_EARTH);
SetDefAttribute(Item.DefenseAttributeValueHoly,ATTRIBUTE_HOLY);
SetDefAttribute(Item.DefenseAttributeValueUnholy,ATTRIBUTE_UNHOLY); //레벨과 현제값등을 구한다.
if(Item.DefenseAttributeValueFire != 0) //파이어 속성 툴팁 그리기
{
textureName[ATTRIBUTE_FIRE] = "L2UI_CT1.Gauges.Gauge_DF_Attribute_FIRE";
tooltipStr[ATTRIBUTE_FIRE] =GetSystemString(1623) $ " Lv " $ String(DefAttLevel[ATTRIBUTE_FIRE]) $ " ("$ GetSystemString(1622) $ " " $ GetSystemString(54) $ " " $ String(Item.DefenseAttributeValueFire) $")";
}
if(Item.DefenseAttributeValueWater != 0) //물 속성 툴팁 그리기
{
textureName[ATTRIBUTE_WATER] = "L2UI_CT1.Gauges.Gauge_DF_Attribute_WATER";
tooltipStr[ATTRIBUTE_WATER] =GetSystemString(1622) $ " Lv " $ String(DefAttLevel[ATTRIBUTE_WATER]) $ " ("$ GetSystemString(1623) $ " " $ GetSystemString(54) $ " " $String(Item.DefenseAttributeValueWater) $ ")";
}
if(Item.DefenseAttributeValueWind != 0) //바람 속성 툴팁 그리기
{
textureName[ATTRIBUTE_WIND] = "L2UI_CT1.Gauges.Gauge_DF_Attribute_WIND";
tooltipStr[ATTRIBUTE_WIND] =GetSystemString(1625) $ " Lv " $ String(DefAttLevel[ATTRIBUTE_WIND]) $ " ("$ GetSystemString(1624) $ " " $ GetSystemString(54) $ " " $String(Item.DefenseAttributeValueWind) $")";
}
if(Item.DefenseAttributeValueEarth != 0) //땅 속성 툴팁 그리기
{
textureName[ATTRIBUTE_EARTH] = "L2UI_CT1.Gauges.Gauge_DF_Attribute_EARTH";
tooltipStr[ATTRIBUTE_EARTH] =GetSystemString(1624) $ " Lv " $ String(DefAttLevel[ATTRIBUTE_EARTH]) $ " ("$ GetSystemString(1625) $ " " $ GetSystemString(54) $ " " $String(Item.DefenseAttributeValueEarth) $ ")";
}
if(Item.DefenseAttributeValueHoly != 0) //신성 속성 툴팁 그리기
{
textureName[ATTRIBUTE_HOLY] = "L2UI_CT1.Gauges.Gauge_DF_Attribute_DIVINE";
tooltipStr[ATTRIBUTE_HOLY] =GetSystemString(1627) $ " Lv " $ String(DefAttLevel[ATTRIBUTE_HOLY]) $ " ("$ GetSystemString(1626) $ " " $ GetSystemString(54) $ " " $ String(Item.DefenseAttributeValueHoly) $")";
}
if(Item.DefenseAttributeValueUnholy != 0) //암흑 속성 툴팁 그리기
{
textureName[ATTRIBUTE_UNHOLY] = "L2UI_CT1.Gauges.Gauge_DF_Attribute_DARK";
tooltipStr[ATTRIBUTE_UNHOLY] =GetSystemString(1626) $ " Lv " $ String(DefAttLevel[ATTRIBUTE_UNHOLY]) $ " ("$ GetSystemString(1627) $ " " $ GetSystemString(54) $ " " $String(Item.DefenseAttributeValueUnholy) $ ")";
}
// 방어 아이템 속성
}
if (Item.AttackAttributeValue > 0)//공격속성일경우
{
for(i = 0; i < 6; i++)
{
if(tooltipStr[i] == "") continue;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 10;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = tooltipStr[i];
EndItem();
//텍스쳐 두장을 겹쳐 그려야 한다.
StartItem();
m_Info.eType = DIT_TEXTURE;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.nOffSetX = 0;
m_Info.nOffSetY = 2;
m_Info.u_nTextureWidth = 140;
m_Info.u_nTextureHeight = 7;
m_Info.u_strTexture = textureName[i] $ "_BG";
EndItem();
StartItem();
m_Info.eType = DIT_TEXTURE;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.nOffSetX = 0;
m_Info.nOffSetY = -7;
m_Info.u_nTextureWidth = AttackAttCurrValue[i] * 140 / AttackAttMaxValue[i] ;
if( m_Info.u_nTextureWidth > 140) m_Info.u_nTextureWidth = 140; //넘어가면 걍 140이라는.. ㅋ
m_Info.u_nTextureHeight = 7;
m_Info.u_strTexture = textureName[i];
EndItem();
}
}
else{ //방어 속성일 경우
for(i = 0; i < 6; i++)
{
if(tooltipStr[i] == "") continue;
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 10;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = tooltipStr[i];
EndItem();
//텍스쳐 두장을 겹쳐 그려야 한다.
StartItem();
m_Info.eType = DIT_TEXTURE;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.nOffSetX = 0;
m_Info.nOffSetY = 2;
m_Info.u_nTextureWidth = 140;
m_Info.u_nTextureHeight = 7;
m_Info.u_strTexture = textureName[i] $ "_BG";
EndItem();
StartItem();
m_Info.eType = DIT_TEXTURE;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.nOffSetX = 0;
m_Info.nOffSetY = -7;
m_Info.u_nTextureWidth = DefAttCurrValue[i] * 140 / DefAttMaxValue[i] ;
if( m_Info.u_nTextureWidth > 140) m_Info.u_nTextureWidth = 140; //넘어가면 걍 140이라는.. ㅋ
m_Info.u_nTextureHeight = 7;
m_Info.u_strTexture = textureName[i];
EndItem();
}
}
}
// function StartItem()
// {
// local DrawItemInfo infoClear;
// m_Info = infoClear;
// }
//
// function EndItem()
// {
// m_Tooltip.DrawList.Length = m_Tooltip.DrawList.Length + 1;
// m_Tooltip.DrawList[m_Tooltip.DrawList.Length-1] = m_Info;
// }
//퀘스트 아이템의 퀘스트 이름 표시
function AddTooltipItemQuestList(ItemInfo Item)
{
local int i;
//<관련 퀘스트>
if(Item.RelatedQuestID[0] != 0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 10;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = GetSystemString(1721);
EndItem();
}
for(i = 0 ; i<MAX_RELATED_QUEST ; i++)
{
if(Item.RelatedQuestID[i] != 0)
{
StartItem();
m_Info.eType = DIT_TEXT;
m_Info.nOffSetY = 6;
m_Info.t_color.R = 163;
m_Info.t_color.G = 163;
m_Info.t_color.B = 163;
m_Info.t_color.A = 255;
m_Info.bLineBreak = true;
m_Info.t_bDrawOneLine = true;
m_Info.t_strText = class'UIDATA_QUEST'.static.GetQuestName(Item.RelatedQuestID[i]);;
EndItem();
}
}
}
// 속성의 레벨값을 전역변수에 저장 //자료가 많아서 전역변수에 집어넣는다.
function SetAttackAttribute(int Attvalue, int type)
{
if( AttValue >= 375) // 9렙 375 ~ 450
{
AttackAttLevel[type] = 9;
AttackAttMaxValue[type] = 75;
AttackAttCurrValue[type] = AttValue - 375;
}
else if( AttValue >= 325) // 8렙 325 ~ 375
{
AttackAttLevel[type] = 8;
AttackAttMaxValue[type] = 50;
AttackAttCurrValue[type] = AttValue - 325;
}
else if( AttValue >= 300) // 7렙 300 ~ 325
{
AttackAttLevel[type] = 7;
AttackAttMaxValue[type] = 25;
AttackAttCurrValue[type] = AttValue - 300;
}
else if( AttValue >= 225) // 6렙 225 ~ 300
{
AttackAttLevel[type] = 6;
AttackAttMaxValue[type] = 75;
AttackAttCurrValue[type] = AttValue - 225;
}
else if( AttValue >= 175) // 5렙 175 ~ 225
{
AttackAttLevel[type] = 5;
AttackAttMaxValue[type] = 50;
AttackAttCurrValue[type] = AttValue - 175;
}
else if( AttValue >= 150) // 4렙 150 ~ 175
{
AttackAttLevel[type] = 4;
AttackAttMaxValue[type] = 25;
AttackAttCurrValue[type] = AttValue - 150;
}
else if( AttValue >= 75) // 3렙 75 ~ 150
{
AttackAttLevel[type] = 3;
AttackAttMaxValue[type] = 75;
AttackAttCurrValue[type] = AttValue - 75;
}
else if( AttValue >= 25) // 2렙 25~ 75
{
AttackAttLevel[type] = 2;
AttackAttMaxValue[type] = 50;
AttackAttCurrValue[type] = AttValue - 25;
}
else // else 0~ 25
{
AttackAttLevel[type] = 1;
AttackAttMaxValue[type] = 25;
AttackAttCurrValue[type] = AttValue;
}
}
// 속성의 레벨값을 전역변수에 저장 //자료가 많아서 전역변수에 집어넣는다.
function SetDefAttribute(int Defvalue, int type)
{
if( DefValue >= 150) // 9렙 150~180
{
DefAttLevel[type] = 9;
DefAttMaxValue[type] = 30;
DefAttCurrValue[type] = DefValue - 150;
}
else if( DefValue >= 132) // 8렙 132 ~ 150
{
DefAttLevel[type] = 8;
DefAttMaxValue[type] = 18;
DefAttCurrValue[type] = DefValue - 132;
}
else if( DefValue >= 120) // 7렙 120 ~ 132
{
DefAttLevel[type] = 7;
DefAttMaxValue[type] = 12;
DefAttCurrValue[type] = DefValue - 120;
}
else if( DefValue >= 90) // 6렙 90 ~ 120
{
DefAttLevel[type] = 6;
DefAttMaxValue[type] = 30;
DefAttCurrValue[type] = DefValue - 90;
}
else if( DefValue >= 72) // 5렙 72 ~ 90
{
DefAttLevel[type] = 5;
DefAttMaxValue[type] = 18;
DefAttCurrValue[type] = DefValue - 72;
}
else if( DefValue >= 60) // 4렙 60 ~ 72
{
DefAttLevel[type] = 4;
DefAttMaxValue[type] = 12;
DefAttCurrValue[type] = DefValue - 60;
}
else if( DefValue >= 30) // 3렙 30 ~ 60
{
DefAttLevel[type] = 3;
DefAttMaxValue[type] = 30;
DefAttCurrValue[type] = DefValue - 30;
}
else if( DefValue >= 12) // 2렙 // 12 ~ 30
{
DefAttLevel[type] = 2;
DefAttMaxValue[type] = 18;
DefAttCurrValue[type] = DefValue - 12;
}
else // else // 0~ 12
{
DefAttLevel[type] = 1;
DefAttMaxValue[type] = 12;
DefAttCurrValue[type] = DefValue;
}
}
//branch
function AddPrimeItemSymbol(ItemInfo Item)
{
local string TextureName;
if (Item.IsBRPremium != 2)
return;
TextureName = GetPrimeItemSymbolName();
if (Len(TextureName)>0)
{
StartItem();
m_Info.eType = DIT_TEXTURE;
m_Info.nOffSetX = 2;
m_Info.nOffSetY = 0;
m_Info.u_nTextureWidth = 16;
m_Info.u_nTextureHeight = 16;
m_Info.u_nTextureUWidth = 16;
m_Info.u_nTextureUHeight = 16;
m_Info.u_strTexture = TextureName;
EndItem();
}
}
//end of branch
defaultproperties
{
}
Качаешь компилятор интерфейса ХФ из интернета, там же есть исходники.если кто знает как ковырять NWindow.dll - буду благодарен, ибо идой с нахрапу не смог , а хех редактором пока не смог распознать нужные места.
//Physical Damage
AddTooltipItemOption(94, String(GetPhysicalDamage(Item.WeaponType, Item.SlotBitType, Item.CrystalType, Item.Enchanted, Item.PhysicalDamage)), true, true, false);
//Masical Damage
AddTooltipItemOption(98, String(GetMagicalDamage(Item.WeaponType, Item.SlotBitType, Item.CrystalType, Item.Enchanted, Item.MagicalDamage)), true, true, false);
Вам ничего не мешает в клиенте, в ToolTip для типа предметов написать такую же функцию прогрессии, которая будет переопределять стандартные клиентские цифры на нужные вампоискал по сети, нашёл для компиляции интерфейса Компилятор LUSE (Interface.u) иВы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрацияпод видеоВы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрациядля нескольких хроник, также отдельно скачал исходники из этой темы, на всякий случай пусть будут.
пока что попробую реализовать прирост характеристик при точке формулами арифметических прогрессий в FuncEnchant.java, интерфейс ковырять начну после, так как навыков нет, то на это придётся выделить много времени, которого пока что у меня нет в таком количестве, поэтому прошу пока не закрывать тему, думаю в течении нескольких месяцев всё доковыряю.
так и думал делать, но после серверной части.Вам ничего не мешает в клиенте, в ToolTip для типа предметов написать такую же функцию прогрессии, которая будет переопределять стандартные клиентские цифры на нужные вам
@KID,
Возможно будет проще легче и правильнее, если сможете сделать обработку пакетов скриптом интерфейса, который примет от сервера список параметров для заточки
отображении характеристик при наведении курсора на предмет - реализуется черезя ещё плохо понимаю место, позицию скриптов интерфейса, о которых речь, но мне проще тогда отказаться от редактирования интерфейса клиента, чем реализовывать обработку пакетов скриптом интерфейса. На серверной стороне FuncEnchant.java задаёт алгоритм точки, который в клиенте вшит в nwindow.dll и Interface.u (со слов пользователей форума в сообщениях выше в этой теме), поэтому место скриптов интерфейса я сейчас не могу представить и к чему сопоставить термин "ToolTip", но редактируя FuncEnchant.java я получаю новый алгоритм точки предметов и там я могу реализовать задумку, и она будет полностью рабочей, только проблема в отображении характеристик при наведении курсора на предмет, но вся игровая механика будет брать значения из FuncEnchant.class
ToolTip
C#:// 98 u,Маг. Атк.\0 function AddNewMagicalDamage( int WeaponType, int SlotBitType, int CrystalType, int Enchanted, int MagicalDamage ) { local string Content; StartItem(); m_Info.eType = DIT_TEXT; m_Info.nOffSetY = 6; m_Info.bLineBreak = true; m_Info.t_bDrawOneLine = true; m_Info.t_color.R = 163; m_Info.t_color.G = 163; m_Info.t_color.B = 163; m_Info.t_color.A = 255; m_Info.t_ID = 98; // 98 u,Маг. Атк.\0 EndItem(); StartItem(); m_Info.eType = DIT_TEXT; m_Info.nOffSetY = 6; m_Info.t_bDrawOneLine = true; m_Info.t_color.R = 163; m_Info.t_color.G = 163; m_Info.t_color.B = 163; m_Info.t_color.A = 255; m_Info.t_strText = " : "; EndItem(); if(Enchanted > 0) { Content = string(MagicalDamage + getScrollEnchantBonus( CrystalType, Enchanted)) $ " (" $ string(MagicalDamage) $ " +" $ string(getScrollEnchantBonus( CrystalType, Enchanted)) $ ")"; } else { Content = string(MagicalDamage); } StartItem(); m_Info.eType = DIT_TEXT; m_Info.nOffSetY = 6; m_Info.t_bDrawOneLine = true; m_Info.t_color.R = 176; m_Info.t_color.G = 155; m_Info.t_color.B = 121; m_Info.t_color.A = 255; m_Info.t_strText = Content; EndItem(); } function int getScrollEnchantBonus(int CrystalType, int Enchanted) { local int overenchant; overenchant = 0; if (Enchanted > 3) { overenchant = Enchanted - 3; Enchanted = 3; } return (getWeaponCrystalEnchantP(CrystalType) * Enchanted) + ((getWeaponCrystalEnchantP(CrystalType) * 2) * overenchant); } function int getWeaponCrystalEnchantP(int CrystalType) { local int enchant; switch (CrystalType) { case 5: // S enchant = 10; break; case 4: // A enchant = 8; break; case 3: // B enchant = 6; break; case 2: // C enchant = 4; break; case 0: // NONE case 1: // D enchant = 2; break; default: enchant = 0; break; } return enchant; }
у меня немного другой ToolTip.uc чем приведённый код у васотображении характеристик при наведении курсора на предмет - реализуется через ToolTip
AddTooltipItemOption(95, String(GetPhysicalDefense(Item.CrystalType, Item.Enchanted, Item.PhysicalDefense)), true, true, false);
AddTooltipItemOption(99, String(GetMagicalDefense(Item.CrystalType, Item.Enchanted, Item.MagicalDefense)), true, true, false);
AddTooltipItemOption(94, String(GetPhysicalDamage(Item.WeaponType, Item.SlotBitType, Item.CrystalType, Item.Enchanted, Item.PhysicalDamage)), true, true, false);
AddTooltipItemOption(98, String(GetMagicalDamage(Item.WeaponType, Item.SlotBitType, Item.CrystalType, Item.Enchanted, Item.MagicalDamage)), true, true, false);
да вам нужно написать новые методы расчета atk def . по вашим формулам для соответствия с сервером.LifeGame32,
у меня немного другой ToolTip.uc чем приведённый код у вас
я так понял мне нужно будет вписать свой алгоритм заточки в следующие места:
и скомпилить Interface.uC#:AddTooltipItemOption(95, String(GetPhysicalDefense(Item.CrystalType, Item.Enchanted, Item.PhysicalDefense)), true, true, false); AddTooltipItemOption(99, String(GetMagicalDefense(Item.CrystalType, Item.Enchanted, Item.MagicalDefense)), true, true, false); AddTooltipItemOption(94, String(GetPhysicalDamage(Item.WeaponType, Item.SlotBitType, Item.CrystalType, Item.Enchanted, Item.PhysicalDamage)), true, true, false); AddTooltipItemOption(98, String(GetMagicalDamage(Item.WeaponType, Item.SlotBitType, Item.CrystalType, Item.Enchanted, Item.MagicalDamage)), true, true, false);
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?