- ··¤Ledtheron¤··Miembro
- Mensajes : 32
[MOD] Random Item Stats
Vie Jun 29, 2012 9:41 pm
Hola, les traigo un script que a mi me encanto en lo personal!!
se trata que al matar un monster hay un chance de que el item salga +1 por ejemplo el +1 (en mi script) aumenta entre el 40 y 50% de ataque osea un spike sword normal es algo asi
spike sword atk 24
con este sistema, si sale reforzada (+1, +2 etc)
puede salir algo asi
+1 spike sword atk 24 + 12
puede subir defensa atk y velocidad de ataque... tambien sirve para las armor... por sierto no es necesario un item sino que solo funciona al lootear!! les encantara!! este script esta un poco configurado por mi, si el item sale +6 podria aumentar hasta 4.4 veces su atk original osea una spike sword podria salir asta con atk 24 + 96 pero el +6 es muuy dificil que salga!! en todo caso ustedes lo pueden modificar... ok aqui va
CREAN UN .XML LLAMADO RIS.xml EN LA CARPETA MODS Y LE PEGAN ESTO
Creditos
Cykotitan 99%
Ledtheron 1%
Por sierto vayan a config.lua
y donde dice
monsterLootMessage = 3
ponganle
monsterLootMessage = 2
Ok eso es todo adios
se trata que al matar un monster hay un chance de que el item salga +1 por ejemplo el +1 (en mi script) aumenta entre el 40 y 50% de ataque osea un spike sword normal es algo asi
spike sword atk 24
con este sistema, si sale reforzada (+1, +2 etc)
puede salir algo asi
+1 spike sword atk 24 + 12
puede subir defensa atk y velocidad de ataque... tambien sirve para las armor... por sierto no es necesario un item sino que solo funciona al lootear!! les encantara!! este script esta un poco configurado por mi, si el item sale +6 podria aumentar hasta 4.4 veces su atk original osea una spike sword podria salir asta con atk 24 + 96 pero el +6 es muuy dificil que salga!! en todo caso ustedes lo pueden modificar... ok aqui va
CREAN UN .XML LLAMADO RIS.xml EN LA CARPETA MODS Y LE PEGAN ESTO
- Código:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Random Item Stats" enabled="1">
<config name="itemstats_conf"><![CDATA[
-- //
extra_loot_key = 123 --: optional storage for higher loot rate
vocation_base_attackspeed = getVocationInfo(1).attackSpeed --: used for attackSpeed stat
-- //
tiers, attr = {}, {}
tiers['+1'] = {
color = TEXTCOLOR_LIGHTBLUE, -- color of 'RARE' text
extra = {10, 10},
effect = 10,
chance = {
[1] = 30000,
[2] = 100000000,
[3] = 100000000
}
}
tiers['+2'] = {
color = TEXTCOLOR_LIGHTBLUE,
effect = 17,
extra = {40, 40}, -- additional percent bonus
chance = {
[1] = 9333,
[2] = 1000000000,
[3] = 1000000000
}
}
tiers['+3'] = {
color = TEXTCOLOR_LIGHTBLUE,
effect = 39,
extra = {100, 100},
chance = {
[1] = 5000,
[2] = 10000000000,
[3] = 1000000000
}
}
tiers['+4'] = {
color = TEXTCOLOR_LIGHTBLUE,
extra = {170, 170},
effect = 49,
chance = {
[1] = 2500,
[2] = 100000000000,
[3] = 1000000000
}
}
tiers['+5'] = {
color = TEXTCOLOR_LIGHTBLUE,
extra = {300, 300},
effect = 37,
chance = {
[1] = 1000,
[2] = 1000000000,
[3] = 1000000000
}
}
tiers['+6'] = {
color = TEXTCOLOR_LIGHTBLUE,
extra = {425, 425},
effect = 53,
chance = {
[1] = 800,
[2] = 1000000000,
[3] = 1000000000
}
}
MELEE = 0
DISTANCE = 1
ARMOR = 2
SHIELD = 3
WAND = 4
DURATION_RING = 5
CHARGES = 6
--! attributes
attr['rapido'] = {
attr = 'attackSpeed',
name = 'Velocidad de Ataque',
percent = {20, 40},
types = {MELEE, DISTANCE, WAND}
}
attr['fortificado'] = {
attr = 'extraDefense',
base = 'defense',
name = 'Defensa',
percent = {20, 40},
types = {MELEE, SHIELD}
}
attr['mounstroso'] = {
attr = 'extraAttack',
base = 'attack',
name = 'Ataque',
types = {MELEE},
percent = {20, 40}
}
attr['fuerte'] = {
attr = 'armor',
name = 'Armor',
percent = {20, 40},
types = {ARMOR}
}
attr['dinamico'] = {
attr = 'hitChance',
name = 'Hit Chance',
percent = {20, 40},
types = {DISTANCE}
}
attr['cargado'] = {
attr = 'charges',
name = 'Cargas',
percent = {20, 40},
types = {CHARGES}
}
attr['divino'] = {
attr = 'duration',
name = 'Duracion',
percent = {35, 50},
types = {DURATION_RING}
}
--/ attributes
rate = getConfigInfo('rateLoot')
]]></config>
<event type="kill" name="itemstats" event="script"><![CDATA[
domodlib('itemstats_conf')
function round(n, s)
return tonumber(('%.' .. (s or 0) .. 'f'):format(n))
end
function getContentDescription(uid, sep)
local ret, i, containers = '', 0, {}
while( i < getContainerSize(uid) )do
local v, s = getContainerItem(uid, i), ''
local k = getItemInfo(v.itemid)
k.name = getItemAttribute(v.uid, 'name') or k.name
if( k.name ~= '' )then
if( v.type > 1 and k.stackable and k.showCount )then
s = v.type .. ' ' .. k.plural
else
local article = getItemAttribute(v.uid, 'article') or k.article
s = (article == '' and '' or article .. ' ') .. k.name
end
ret = ret .. (i == 0 and not sep and '' or ', ') .. s
if( isContainer(v.uid) and getContainerSize(v.uid) ~= 0 )then
table.insert(containers, v.uid)
end
else
ret = ret .. (i == 0 and not sep and '' or ', ') .. 'an item of type ' .. v.itemid .. ', please report it to gamemaster'
end
i = i + 1
end
for i = 1, #containers do
ret = ret .. getContentDescription(containers[i], true)
end
return ret
end
local function send(cid, corpse, monster)
if( isPlayer(cid) )then
local ret = corpse and isContainer(corpse) and getContentDescription(corpse)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'))
local party = getPlayerParty(cid)
if( party )then
for _, pid in ipairs(getPartyMembers(party)) do
doPlayerSendChannelMessage(pid, '', 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'), TALKTYPE_CHANNEL_W, CHANNEL_PARTY)
end
end
end
end
local function createLoot(i, ext)
local item = type(i.id) == 'table' and i.id[math.random(#i.id)] or i.id
local random = math.ceil(math.random(100000) / ext)
local tmpItem, f
if( random < i.chance )then
if i.subType == -1 then
f = getItemInfo(item)
end
tmpItem = doCreateItemEx(item,
i.subType ~= -1 and i.subType or
f.stackable and random % i.count + 1 or
f.charges ~= 0 and f.charges or
1
)
end
if( not tmpItem )then
return
end
if( i.actionId ~= -1 )then
doItemSetAttribute(tmpItem, 'aid', i.actionId)
end
if( i.uniqueId ~= -1 )then
doItemSetAttribute(tmpItem, 'uid', i.uniqueId)
end
if( i.text ~= '' )then
doItemSetAttribute(tmpItem, 'text', i.text)
end
local ret, done
for k, v in pairs(tiers) do
local cur, used = {}, {}
for i = 1, #v.chance do
if( math.random(100000) <= v.chance[i] )then
if( f )then
f = getItemInfo(item)
end
if( not f.stackable )then
for m, n in pairs(attr) do
if( not table.find(used, m) and
(
( table.find(n.types, MELEE) and table.find({WEAPON_SWORD, WEAPON_CLUB, WEAPON_AXE}, f.weaponType) ) or
( table.find(n.types, DISTANCE) and f.weaponType == WEAPON_DIST and f.ammoType ~= 0 ) or
( table.find(n.types, ARMOR) and f.armor ~= 0 and f.wieldPosition ~= CONST_SLOT_NECKLACE ) or
( table.find(n.types, SHIELD) and f.defense ~= 0 and f.weaponType == WEAPON_SHIELD ) or
( table.find(n.types, WAND) and f.weaponType == WEAPON_WAND ) or
( table.find(n.types, DURATION_RING) and f.wieldPosition == CONST_SLOT_RING and f.transformEquipTo ~= 0 ) or
( table.find(n.types, CHARGES) and table.find({CONST_SLOT_RING, CONST_SLOT_NECKLACE}, f.wieldPosition) and f.charges ~= 0 )
) )then
table.insert(cur, m)
end
end
if( #cur ~= 0 )then
local n = cur[math.random(#cur)]
table.insert(used, n)
n = attr[n]
local percent, new, tmp = math.random(n.percent[1] + (v.extra[1] or 0), n.percent[2] + (v.extra[2] or 0))
-- hacks
if( n.attr == 'duration' )then
tmp = getItemInfo(f.transformEquipTo)
if tmp.transformDeEquipTo ~= item then
break
end
new = round( tmp.decayTime * (1 + percent / 100) * 1000 )
elseif( n.attr == 'attackSpeed' )then
new = round( vocation_base_attackspeed / (1 + percent / 100) )
elseif( n.attr == 'hitChance' ) then
new = round(
f.hitChance == -1 and
percent
or
f.hitChance * (1 + percent / 100)
)
else
new = round(
n.base and
f[n['attr']] + f[n['base']] * (percent / 100)
or
f[n['attr']] * (1 + percent / 100)
)
if( new == f[n[n.base and 'base' or 'attr']] )then -- no improvement
break
end
end
doItemSetAttribute(tmpItem, n.attr:lower(), new)
local name = getItemAttribute(tmpItem, 'name')
if( v.attrNames or not name )then
local name = (v.attrNames and used[#used] or k) .. ' ' .. (name or f.name)
doItemSetAttribute(tmpItem, 'name', name)
if( f.article ~= '' )then
local article = getArticle(name)
if( article ~= f.article )then
doItemSetAttribute(tmpItem, 'article', article)
end
end
end
local desc = getItemAttribute(tmpItem, 'description') or f.description
doItemSetAttribute(tmpItem, 'description', '[' .. n.name .. ': +' .. percent .. '%]' .. (desc == '' and '' or '\n' .. desc))
ret = k
end
cur = {}
if( #v.chance == i )then
done = true
end
end
else
done = i ~= 1
break
end
end
if( done )then
break
end
end
return tmpItem, ret
end
local function createChildLoot(parent, i, ext, pos)
if( not i or #i == 0 )then
return true
end
local size, cap = 0, getContainerCap(parent)
for k = 1, #i do
if( size == cap )then
break
end
local tmp, ret = createLoot(i[k], ext)
if( tmp )then
if( isContainer(tmp) )then
if( createChildLoot(tmp, i[k].child, ext, pos) )then
doAddContainerItemEx(parent, tmp)
size = size + 1
else
doRemoveItem(tmp)
end
else
if( ret )then
doSendMagicEffect(pos, tiers[ret].effect)
doSendAnimatedText(pos, ret:upper(), tiers[ret].color)
end
doAddContainerItemEx(parent, tmp)
size = size + 1
end
end
end
return size > 0
end
local function dropLoot(pos, v, ext, master, cid, target)
local corpse
if( not master or master == target )then -- 0.3/4
corpse = getTileItemById(pos, v.lookCorpse).uid
if( isContainer(corpse) )then
for i = 1, getContainerSize(corpse) do
doRemoveItem(getContainerItem(corpse, 0).uid)
end
local size, cap = 0, getContainerCap(corpse)
for i = 1, #v.loot do
if( size == cap )then
break
end
local tmp, ret = createLoot(v.loot[i], ext)
if( tmp )then
if( isContainer(tmp) )then
if( createChildLoot(tmp, v.loot[i].child, ext, pos) )then
doAddContainerItemEx(corpse, tmp)
size = size + 1
else
doRemoveItem(tmp)
end
else
if( ret )then
doSendMagicEffect(pos, tiers[ret].effect)
doSendAnimatedText(pos, ret:upper(), tiers[ret].color)
end
doAddContainerItemEx(corpse, tmp)
size = size + 1
end
end
end
end
end
send(cid, corpse, v.description)
end
function onKill(cid, target, damage, flags)
if( (damage == true or bit.band(flags, 1) == 1) and isMonster(target) )then -- 0.3/4
local v = getMonsterInfo(getCreatureName(target))
if( v and v.lookCorpse ~= 0 )then
local s = getCreatureStorage(cid, extra_loot_key)
addEvent(dropLoot, 0, getThingPos(target), v, s == -1 and rate or s, getCreatureMaster(target), cid, target)
end
end
return true
end
]]></event>
<event type="login" name="itemstats_login" event="buffer"><![CDATA[
registerCreatureEvent(cid, 'itemstats')
]]></event>
</mod>
Creditos
Cykotitan 99%
Ledtheron 1%
Por sierto vayan a config.lua
y donde dice
monsterLootMessage = 3
ponganle
monsterLootMessage = 2
Ok eso es todo adios
Permisos de este foro:
No puedes responder a temas en este foro.
|
|