Support ✅ ayuda necesito informacion para ampliar script

N

neowtwo

Invited
hola este script es para poteciar las armas, escudos. armaduras, etc. mi problema radica en que yo quiero que tambien de MAGICLEVEL, ABsorcion de fuego y todos los demas, solo me acepta Attack, defense, extradefense, armor y hitchance.... el script funciona perfectamente, pero cuando pongo magiclevel, (que lo pongo mal seguro) no me funciona. he puesto con el nombre de magicpoints, magiclevle. magicLevel. de to lo que se me ha ocurrido, he buscado por todos lados pero no doy con esto... gracias por todo de antemano.

local stones = {
[27867] = {
minLevel = 0, -- minimum level to use
maxLevel = 500, -- maximum level to you can use
chance = 75, -- probability of leveling up
extraPercent = 0 -- extra attribute increase percentage
},
[27868] = {
minLevel = 15,
maxLevel = 500,
chance = 50,
extraPercent = 1
},
[27869] = {
minLevel = 30,
maxLevel = 500,
chance = 25,
extraPercent = 2
}
}

local attributes = {
[ITEM_ATTRIBUTE_ATTACK] = {
getValue = ItemType.getAttack,
percent = 2 -- attribute increase percentage in this case for attack
},
[ITEM_ATTRIBUTE_DEFENSE] = {
getValue = ItemType.getDefense,
percent = 2 -- attribute increase percentage in this case for defense
},
[ITEM_ATTRIBUTE_EXTRADEFENSE] = {
getValue = ItemType.getExtraDefense,
percent = 2 -- attribute increase percentage in this case for extraDefense
},
[ITEM_ATTRIBUTE_ARMOR] = {
getValue = ItemType.getArmor,
percent = 2 -- attribute increase percentage in this case for armor
},
[ITEM_ATTRIBUTE_HITCHANCE] = {
getValue = ItemType.getHitChance,
percent = 2 -- attribute increase percentage in this case for hitChance
}

}

local function onUpgradeLvl(level, chance, config)
local nextLevel = math.min(config.maxLevel, level +1)
if math.random(1, chance) <= config.chance then
return nextLevel
end
return level
end

local function isUpgradeable(item)
local it = item:getType()
return it:getAttack() > 0 or it:getDefense() > 0 or it:getArmor() > 0 or it:getExtraDefense() > 0
end


local function getItemLevel(item)
return item:getCustomAttribute("upgradeLevel") or 0
end

local function setItemLevel(item, level)
return item:setCustomAttribute("upgradeLevel", level)
end

local function upgradeValue(value, level, info, stone)
return value * ((1.0 + ((info.percent + stone.extraPercent) / 100)) * level)
end

local function doUpgrade(item, level, stone)
local itemType = item:getType()
if level <= 0 then
setItemLevel(item, level)
item:setAttribute(ITEM_ATTRIBUTE_NAME, itemType:getName())
for attribute, info in pairs(attributes) do
item:setAttribute(attribute, info.getValue(itemType))
end
return true
end
setItemLevel(item, level)
item:setAttribute(ITEM_ATTRIBUTE_NAME, string.format("%s +%u", itemType:getName(), level))
for attribute, info in pairs(attributes) do
local value = info.getValue(itemType)
if value ~= 0 then
item:setAttribute(attribute, upgradeValue(value, level, info, stone))
end
end
return true
end

local upgradeone = Action()
function upgradeone.onUse(player, item, fromPos, target, toPos, isHotkey)
if not target or not target:isItem() then
player:sendCancelMessage("You cannot use this object.")
return true
end
local stone = stones[item:getId()]
if not stone then
return false
end
if not isUpgradeable(target) then
player:sendCancelMessage("This item cannot be upgrade.")
return true
end
local level = getItemLevel(target)
if level < stone.minLevel then
player:sendCancelMessage(string.format("The minimum level to use is %d.", stone.minLevel))
return true
end
local newLevel = onUpgradeLvl(level, 100, stone)
if level >= stone.maxLevel then
player:getPosition():sendMagicEffect(CONST_ME_POFF, player)
player:sendCancelMessage("This item is already at its maximum level.")
return true
elseif newLevel == level then
player:say("Failed!", TALKTYPE_MONSTER_SAY)
player:getPosition():sendMagicEffect(CONST_ME_POFF)
elseif newLevel > level then
player:say("Success!", TALKTYPE_MONSTER_SAY)
player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_YELLOW)
end
doUpgrade(target, newLevel, stone)
item:remove(1)
return true
end
for aid, _ in pairs(stones) do
upgradeone:id(aid)
end
upgradeone:register()

He marcado con azul las areas donde imagino que se haria el cambio, o si hay alguna manera de poner que te de los atributos random.

gracias por todo!!
 
Solution
hola este script es para poteciar las armas, escudos. armaduras, etc. mi problema radica en que yo quiero que tambien de MAGICLEVEL, ABsorcion de fuego y todos los demas, solo me acepta Attack, defense, extradefense, armor y hitchance.... el script funciona perfectamente, pero cuando pongo magiclevel, (que lo pongo mal seguro) no me funciona. he puesto con el nombre de magicpoints, magiclevle. magicLevel. de to lo que se me ha ocurrido, he buscado por todos lados pero no doy con esto... gracias por todo de antemano.



He marcado con azul las areas donde imagino que se haria el cambio, o si hay alguna manera de poner que te de los atributos random.

gracias por todo!!
Hola,

los attributos de las armas podras encontrar en item.h...
hola este script es para poteciar las armas, escudos. armaduras, etc. mi problema radica en que yo quiero que tambien de MAGICLEVEL, ABsorcion de fuego y todos los demas, solo me acepta Attack, defense, extradefense, armor y hitchance.... el script funciona perfectamente, pero cuando pongo magiclevel, (que lo pongo mal seguro) no me funciona. he puesto con el nombre de magicpoints, magiclevle. magicLevel. de to lo que se me ha ocurrido, he buscado por todos lados pero no doy con esto... gracias por todo de antemano.



He marcado con azul las areas donde imagino que se haria el cambio, o si hay alguna manera de poner que te de los atributos random.

gracias por todo!!
Hola,

los attributos de las armas podras encontrar en item.h ( sources ) si usas visual studio code y abres la carpeta de tu servidor, buscando por las funciones de tu script, ejemplo getAttack,

int32_t getAttack() const {
if (hasAttribute(ITEM_ATTRIBUTE_ATTACK)) {
return getIntAttr(ITEM_ATTRIBUTE_ATTACK);
}
return items[id].attack;
}
int32_t getArmor() const {
if (hasAttribute(ITEM_ATTRIBUTE_ARMOR)) {
return getIntAttr(ITEM_ATTRIBUTE_ARMOR);
}
return items[id].armor;
}
int32_t getDefense() const {
if (hasAttribute(ITEM_ATTRIBUTE_DEFENSE)) {
return getIntAttr(ITEM_ATTRIBUTE_DEFENSE);
}
return items[id].defense;
}
int32_t getExtraDefense() const {
if (hasAttribute(ITEM_ATTRIBUTE_EXTRADEFENSE)) {
return getIntAttr(ITEM_ATTRIBUTE_EXTRADEFENSE);
}
return items[id].extraDefense;
}

int8_t getHitChance() const {
if (hasAttribute(ITEM_ATTRIBUTE_HITCHANCE)) {
return static_cast<uint8_t>(getIntAttr(ITEM_ATTRIBUTE_HITCHANCE));
}
return items[id].hitChance;
}

Me baso en las sources 12.72, contienen unicamente estos atributos, por lo cual tu script no podrias dar Magic level, u otro tipo de stat.

Los que si que existen en attributos, pero no se como lo manejaria el script:
ITEM_ATTRIBUTE_WEIGHT
ITEM_ATTRIBUTE_SHOOTRANGE
ITEM_ATTRIBUTE_CHARGES
ITEM_ATTRIBUTE_DURATION

En items.cpp podremos ver:

if (hasAttribute(ITEM_ATTRIBUTE_WEIGHT)) {
propWriteStream.write<uint8_t>(ATTR_WEIGHT);
propWriteStream.write<uint32_t>(getIntAttr(ITEM_ATTRIBUTE_WEIGHT));
}
if (hasAttribute(ITEM_ATTRIBUTE_ATTACK)) {
propWriteStream.write<uint8_t>(ATTR_ATTACK);
propWriteStream.write<int32_t>(getIntAttr(ITEM_ATTRIBUTE_ATTACK));
}
if (hasAttribute(ITEM_ATTRIBUTE_DEFENSE)) {
propWriteStream.write<uint8_t>(ATTR_DEFENSE);
propWriteStream.write<int32_t>(getIntAttr(ITEM_ATTRIBUTE_DEFENSE));
}
if (hasAttribute(ITEM_ATTRIBUTE_EXTRADEFENSE)) {
propWriteStream.write<uint8_t>(ATTR_EXTRADEFENSE);
propWriteStream.write<int32_t>(getIntAttr(ITEM_ATTRIBUTE_EXTRADEFENSE));
}
if (hasAttribute(ITEM_ATTRIBUTE_IMBUEMENT_SLOT)) {
propWriteStream.write<uint8_t>(ATTR_IMBUEMENT_SLOT);
propWriteStream.write<int32_t>(getIntAttr(ITEM_ATTRIBUTE_IMBUEMENT_SLOT));
}
if (hasAttribute(ITEM_ATTRIBUTE_OPENCONTAINER)) {
propWriteStream.write<uint8_t>(ATTR_OPENCONTAINER);
propWriteStream.write<uint8_t>(getIntAttr(ITEM_ATTRIBUTE_OPENCONTAINER));
}
if (hasAttribute(ITEM_ATTRIBUTE_ARMOR)) {
propWriteStream.write<uint8_t>(ATTR_ARMOR);
propWriteStream.write<int32_t>(getIntAttr(ITEM_ATTRIBUTE_ARMOR));
}
if (hasAttribute(ITEM_ATTRIBUTE_HITCHANCE)) {
propWriteStream.write<uint8_t>(ATTR_HITCHANCE);
propWriteStream.write<int8_t>(getIntAttr(ITEM_ATTRIBUTE_HITCHANCE));
}
if (hasAttribute(ITEM_ATTRIBUTE_SHOOTRANGE)) {
propWriteStream.write<uint8_t>(ATTR_SHOOTRANGE);
propWriteStream.write<uint8_t>(getIntAttr(ITEM_ATTRIBUTE_SHOOTRANGE));
}
if (hasAttribute(ITEM_ATTRIBUTE_SPECIAL)) {
propWriteStream.write<uint8_t>(ATTR_SPECIAL);
propWriteStream.writeString(getStrAttr(ITEM_ATTRIBUTE_SPECIAL));
}
if (hasAttribute(ITEM_ATTRIBUTE_CUSTOM)) {
const ItemAttributes::CustomAttributeMap* customAttrMap = attributes->getCustomAttributeMap();
propWriteStream.write<uint8_t>(ATTR_CUSTOM_ATTRIBUTES);
propWriteStream.write<uint64_t>(static_cast<uint64_t>(customAttrMap->size()));
for (const auto &entry : *customAttrMap) {
// Serializing key type and value
propWriteStream.writeString(entry.first);
// Serializing value type and value
entry.second.serialize(propWriteStream);
}
}
if (hasAttribute(ITEM_ATTRIBUTE_QUICKLOOTCONTAINER)) {
propWriteStream.write<uint8_t>(ATTR_QUICKLOOTCONTAINER);
propWriteStream.write<uint32_t>(getQuicklootAttr());
}
if (hasAttribute(ITEM_ATTRIBUTE_IMBUEMENT_TYPE)) {
propWriteStream.write<uint8_t>(ATTR_IMBUEMENT_TYPE);
propWriteStream.writeString(getStrAttr(ITEM_ATTRIBUTE_IMBUEMENT_TYPE));
}

En el caso, utiliza este script de una forma y encuentra uno que haga upgrade con Magic si es que hay otra forma de llamarlo.
 
Solution
Hola,

los attributos de las armas podras encontrar en item.h ( sources ) si usas visual studio code y abres la carpeta de tu servidor, buscando por las funciones de tu script, ejemplo getAttack,



Me baso en las sources 12.72, contienen unicamente estos atributos, por lo cual tu script no podrias dar Magic level, u otro tipo de stat.

Los que si que existen en attributos, pero no se como lo manejaria el script:


En items.cpp podremos ver:



En el caso, utiliza este script de una forma y encuentra uno que haga upgrade con Magic si es que hay otra forma de llamarlo.
ni idea bueno ya esta bien asi , he bajado el ratio de que te funcione porque siempre da el doble de atake y de defensa, lo he puesto que funcione en un 20 % de posibilidades que sino la gente iria con ataque 300 xD
 
ni idea bueno ya esta bien asi , he bajado el ratio de que te funcione porque siempre da el doble de atake y de defensa, lo he puesto que funcione en un 20 % de posibilidades que sino la gente iria con ataque 300 xD
Code:
return value * ((1.0 + ((info.percent + stone.extraPercent) / 100)) * level)
end

Se configura aquí de base el cálculo, si 1+ 1+2/100 *nivel, es muy alto, hay que bajar en ese caso algún stat
 
Code:
return value * ((1.0 + ((info.percent + stone.extraPercent) / 100)) * level)
end

Se configura aquí de base el cálculo, si 1+ 1+2/100 *nivel, es muy alto, hay que bajar en ese caso algún stat
woooo imagino que si lo pongo en vez de 100 con 50 seria la mitad me daria entonces si tengo arm: 2 no me dara otras 2 sino 1 mas

ah son multiplicaciones? sera el 1+1+1/100 puede que el 2 sea por lo que multiplica mi armadura? si tengo 40 de arm, me daria 60 en vez de 80, no se probare... toy exo polvo to la noche para reformular el "A Sweaty Cyclops".... sin que me salgan errores y me de las cosas sin storages....
 
woooo imagino que si lo pongo en vez de 100 con 50 seria la mitad me daria entonces si tengo arm: 2 no me dara otras 2 sino 1 mas

ah son multiplicaciones? sera el 1+1+1/100 puede que el 2 sea por lo que multiplica mi armadura? si tengo 40 de arm, me daria 60 en vez de 80, no se probare... toy exo polvo to la noche para reformular el "A Sweaty Cyclops".... sin que me salgan errores y me de las cosas sin storages....
Los scripts parecen muy complicados para todos, pero si sabemos el inglés, es un poco como leer frases. Ejemplo,
Function neowtwo.onUse(player, item) Local bonito = playera:getStorageValue(15000, 1) If player bonito and player:getLevel(300) >= 1 then Player:addItem(2160) End End

Aquí lo leeremos:
Función neowtwo.alUsar(jugador,objeto) Local idéntico Si el player bonito (llama el local bonito) y el jugador:tiene el nivel(300) entonces AgregarObjeto(2160) Final Final

Es bastante simple, solamente creo que o la mayoría no hablan / leen inglés o porque no quieren esforzarse.
Si, cuando hay trozos estilo for i pairs.. no digo es complicado, pero aquí, tenemos matemáticas simples, como a la escuela 1+1+1+1+1 , da el result, resultado en el caso.
Entonces si puedes jugar en varios scripts con muchas cosas.
 

Tibia Server Lists

#1 FEATURED US Ultron OT 1,433 / 5,000 EXPStages PROTO8.6 ENGINEUltron OT RANK PTS6.6 -10% VOTES0 #2 FEATURED US Nefera 170 / 0 EXPx1 PROTO15.20 ENGINECrystal Server RANK PTS5.9 +20% VOTES0 #3 FEATURED CL ZHYRAVEX 7 / 500 EXPx5 PROTO10.98 ENGINETFS 1.4.2 RANK PTS4.9 +100% VOTES0 #4 FEATURED ES Deixis 0 / 0 EXPStages PROTO1098 ENGINETFS RANK PTS4.0 -71% VOTES1 #5 DE DBU Online 186 / 400 EXP11 PROTO8.6 ENGINETFS 1.0 RANK PTS6.1 +1,000% VOTES0 #6 BR Exordion Legacy 65 / 2,000 EXPx2 PROTO7.72 ENGINEExordion RANK PTS5.7 +2% VOTES0 #7 MX Marlboro War 22 / 300 EXP999 PROTO8.6 ENGINETFS 0.3.7 RANK PTS5.5 -24% VOTES0 #8 BR Tibinha YurOts 29 / 150 EXPStages PROTO7.4 ENGINEYurOTS 1.5 RANK PTS5.5 +10% VOTES0 #9 US Wiki Ots 48 / 1,000 EXPx9999 PROTOcustom client ENGINETFS 1.4.2 RANK PTS5.2 +100% VOTES0 #10 ES JustRL FreeTC 1530 27 / 250 EXPx2 PROTO15.30 ENGINECrystal Server RANK PTS5.0 +2% VOTES0 #11 PL Lubelski 15 / 1,000 EXP200 PROTO7.6 ENGINELubelskiOTS 2.56.0 RANK PTS4.9 -12% VOTES0 #12 PL ReWar 0 / 2,000 EXPcustom PROTO8.6 ENGINEOther RANK PTS4.6 +100% VOTES0 #13 US Halera 0 / 0 EXPStages PROTO10.98 ENGINETFS 1.4.2 RANK PTS4.4 -83% VOTES0 #14 PL Velesta 0 / 1,000 EXP20 PROTO8.0 ENGINETFS 1.4.2 RANK PTS4.4 -100% VOTES0 #15 US BerethaOnline 0 / 2,000 EXPStages PROTO15.0 ENGINETFS RANK PTS4.3 -59% VOTES0 #16 BR Turion Server 0 / 2,000 EXPx1 PROTO7.4 ENGINETurion 7.7 Project RANK PTS4.1 +23% VOTES0 #17 ES Farlia Global 2026 0 / 333 EXPx5 PROTO15.25 ENGINEFarliaServ 1.525 RANK PTS4.0 -100% VOTES0 #18 SE MortalisOT Custom 0 / 500 EXP100x -1.2x PROTO10.98 ENGINEMortalisOT V1 RANK PTS4.0 -100% VOTES0 #19 RU Oldavia | 8.60 0 / 0 EXPx9999 PROTO8.6 ENGINETFS 1.3 RANK PTS3.9 -98% VOTES0 #20 BR Rethoria OpenToday 7.4 Custom 4 / 0 EXPx10 PROTO10.98 ENGINEOther RANK PTS3.9 +100% VOTES0 #21 US Rommania 0 / 3,000 EXPstages, x10 PROTO7.4 ENGINETFS 0.4 RANK PTS3.7 -86% VOTES0 #22 MX Maeli 1 / 150 EXPx10 PROTO10.98 ENGINETFS 1.4.2 RANK PTS3.5 -41% VOTES0 #23 ES DarkDragon EXPx10 PROTO8.6 ENGINECanary RANK PTS0.0 0% VOTES0 #24 US MasterRunes EXPx10 PROTO15.20 ENGINECanary 3.x RANK PTS0.0 0% VOTES0
Top