Ir para conteúdo

Featured Replies

Postado

Galera estou com uma Dúvida/Problema

 

estou montando um servidor 100% RPG (sem treiners sem nada) bagui ta ficando loko só q eu percebi um baita problema no slot

esse slot system é do Mock's e ele lhe proporciona algumas coisa a maias (CAS = club, axe, sword, ML, HP, MP,SHIELD)

o problema é oq quando euuso o item que adiciona 1 slot a um determinado item exemplo (Magic Sword +10 [ml + 9%]), esse ml ele fica loko...mas como loko? bem se vc tiver com 1 de ml e usa este item ele te deixa com 101 de ml ou seja ele te da com 9% 100 skills de magic level, mas não precisa ser necessáriamente com 9%, pode ser com 1%, 2%,3% de ml e asism vai ele vai ter resultar em 100 skills de ml, se de acordo com esse script alguém puder se POSSÍVEL deixar para que se for +9% no dano do ml que seja de acordo com esses 9% (ou qualquer outro valor que for gerado pelo slot em relação ao magic level), ou se caso der pra restruturar o script pra que seja ( ml +5, CAS + 8), etc... fico muito agradecido... futuramente vou vir aqui mendigar a ajuda pra alguem dar uma olhada em todos meus scripts e systems, mods etc... pra deixar zero bala pra quando abrir o servidor n ter dor de cabeça, pq eu sinceramente sou meio leigo disso e n entendo bulhufas de nada. amos vcs :)

 

Slot system 100% by mock \o
]]
---Config
local conf = {
	maxSlotCount=2,
	ignoredIds={}
}
--End

function choose(...) --- Function by mock.
	local arg = {...}
	return arg[math.random(1, #arg)]
end

if not getItemAttack then
	function getItemAttack(uid)
		return getItemAttribute(uid,'attack')
	end
	function getItemDefense(uid)
		return getItemAttribute(uid,'defense')
	end
end

local function isArmor(uid) -- Function by Mock the bear.
	if (getItemInfo(uid.itemid).armor ~= 0) and (getItemWeaponType(uid.uid) == 0) then
		return true
	end
	return false
end

local function isWeapon(uid) -- Function by Mock the bear.
	uid = uid or 0
	local f = getItemWeaponType(uid)
	if f == 1 or f == 2 or f == 3 then
		return true
	end
	return false
end

local function isShield(uid) -- Function by Mock the bear.
	uid = uid or 0
	if getItemWeaponType(uid) == 4 then
		return true
	end
	return false
end

local function isBow(uid) -- Function by Mock the bear.
	uid = uid or 0
	if getItemWeaponType(uid) == 5 and not isItemStackable(uid) then
		return true
	end
	return false
end

function onUse(cid, item, fromPosition, itemEx, toPosition) -- Script by mock the bear (MTB)
	if item.uid == 0 or item.itemid == 0 then return false end
	toPosition.stackpos = 255
	if item.uid == 0 or item.itemid == 0 then return false end
	toPosition.stackpos = 255
	if isInArray(conf.ignoredIds, itemEx.itemid)
	or (not getItemWeaponType(itemEx.uid) or getItemWeaponType(itemEx.uid) > 5)
	or (getItemWeaponType(itemEx.uid) == 0 and not isArmor(itemEx))
	or itemEx.itemid == 0 or itemEx.type > 1 or isItemStackable(itemEx.uid) then
		doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.")
		return true
	end
	if isCreature(itemEx.uid) then
		return false
	end
	
	local nam = getItemName(itemEx.uid)
	function getper()
		local n = 1
		for i=1,10 do
			n = n+math.random(0,10)
			if n < 8*i then
				break
			end
		end
		return n
	end
	
	function getSlotCount(nam)
		local c = 0
		for _ in nam:gmatch('%[(.-)%]') do
			c = c+1
		end
		return c
	end
	
	if getSlotCount(nam) < conf.maxSlotCount then
		local l = choose('hp','mp','ml','cas','shield','dist')
		local p = getper()

		doSendMagicEffect(toPosition,30)
		nam = nam..' ['..l..'.+'..p..'%]'
		doSendAnimatedText(toPosition,l..' '..p..'%',120)
		doItemSetAttribute(itemEx.uid,'name',nam)
		doRemoveItem(item.uid,1)
	else
		doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.")
	end
	return true
end

 

  • Respostas 10
  • Visualizações 888
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • tem certeza q é só esse script q é utilizado no sistema?      if getSlotCount(nam) < conf.maxSlotCount then         local l = choose('hp','mp','ml','cas','shield','dist')         local p = getp

  • cara, ce n quer me passar o link de onde ce pegou n? pq isso daí n tá identado e tem ums 200 linhas de código q eu não to afim de identar só pra descobrir oque faz. Provavelmente onde ele postou tá id

  • da segunda maneira funciona, da primeira eu acredito q vc pegou o shield e só deu ctrl +c, ctrl +v, certo? pq se for vai dar erro por causa de já existir uma conditionSHI.. vc vai substituir ela pelo

Postado

tem certeza q é só esse script q é utilizado no sistema? 

    if getSlotCount(nam) < conf.maxSlotCount then
        local l = choose('hp','mp','ml','cas','shield','dist')
        local p = getper()
        doSendMagicEffect(toPosition,30)
        nam = nam..' ['..l..'.+'..p..'%]'
        doSendAnimatedText(toPosition,l..' '..p..'%',120)
        doItemSetAttribute(itemEx.uid,'name',nam)
        doRemoveItem(item.uid,1)


aparentemente não tem nada aí que edite a leitura dos atributos, somente muda o nome.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Postado
  • Autor

ha foi mal White tinha a outra parte nem percebi ta tenso ultimamente tenta entender o script pra ultimo caso perguntar aqui no forum kkkkkkkk

---Script by mock the bear!
local conditionMP,conditionHP,conditionML,conditionCLUB,conditionSHI,conditionDIST,conditionAMP = {},{},{},{},{},{},{}
for i=1,100 do ---Carrega as conditions
--- HP
conditionHP[i] = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionHP[i], CONDITION_PARAM_TICKS, -1)
setConditionParam(conditionHP[i], CONDITION_PARAM_STAT_MAXHEALTHPERCENT, 100+i)
setConditionParam(conditionHP[i], CONDITION_PARAM_BUFF, true)
setConditionParam(conditionHP[i], CONDITION_PARAM_SUBID, 50)
--MANA
conditionMP[i] = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionMP[i], CONDITION_PARAM_TICKS, -1)
setConditionParam(conditionMP[i], CONDITION_PARAM_STAT_MAXMANAPERCENT, 100+i)
setConditionParam(conditionMP[i], CONDITION_PARAM_BUFF, true)
setConditionParam(conditionMP[i], CONDITION_PARAM_SUBID, 51)
--Magic level
conditionML[i] = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionML[i], CONDITION_PARAM_TICKS, -1)
setConditionParam(conditionML[i], CONDITION_PARAM_STAT_MAGICLEVEL, 100+i)
setConditionParam(conditionML[i], CONDITION_PARAM_BUFF, true)
setConditionParam(conditionML[i], CONDITION_PARAM_SUBID, 52)
--club axe sword
conditionCLUB[i] = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionCLUB[i], CONDITION_PARAM_TICKS, -1)
setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_CLUBPERCENT, 100+i)
setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_SWORDPERCENT, 100+i)
setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_AXEPERCENT, 100+i)
setConditionParam(conditionCLUB[i], CONDITION_PARAM_BUFF, true)
setConditionParam(conditionCLUB[i], CONDITION_PARAM_SUBID, 53)
--- shield
conditionSHI[i] = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionSHI[i], CONDITION_PARAM_TICKS, -1)
setConditionParam(conditionSHI[i], CONDITION_PARAM_SKILL_SHIELDPERCENT, 100+i)
setConditionParam(conditionSHI[i], CONDITION_PARAM_BUFF, true)
setConditionParam(conditionSHI[i], CONDITION_PARAM_SUBID, 54)
--- dist
conditionDIST[i] = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(conditionDIST[i], CONDITION_PARAM_TICKS, -1)
setConditionParam(conditionDIST[i], CONDITION_PARAM_SKILL_DISTANCEPERCENT, 100+i)
setConditionParam(conditionDIST[i], CONDITION_PARAM_BUFF, true)
setConditionParam(conditionDIST[i], CONDITION_PARAM_SUBID, 55)
end
function getSlotType(n) --By mock the bear
if not n then
return false
end
if n:match('%[(.+)%]') then
n = n:match('%[(.+)%]')
if n == '?' then
return 0,n
else
return n:match('(.-)%.([+-])(%d+)%%')
end
else
return false
end


end
local function loadSet(cid)
local t = {}
for slot=1,9 do
t[slot] = ''


local s = getPlayerSlotItem(cid,slot).uid
if s ~= 0 then
t[slot] = getItemName(s)
end
end
return t
end
function isInArray2(arr,var) -- Because in some servers it return 1 and 0 and others true and false
for i,b in pairs(arr) do
if var == b then
return true
end
end
return false
end
function check2(cid,i)
if i == 5 or i == 6 then
if isInArray({'head','necklace','backpack','body','legs','feet','ring'},getItemValue(getPlayerSlotItem(cid,i).itemid,'slotType') or '') then
return false
end
end
return true
end
function chk(cid,f)
if not isPlayer(cid) then return end
local t = loadSet(cid)
for i=1,#f do
if f[i] ~= t[i] then
equip(cid,nil,slot)
break
end
end
addEvent(chk,2000,cid,t)
end
items = { ---- Only to get attr: slotType because getItemName dont return it -.-'
_VERSION='1.0 By mock',
XML_DIR='data/items/items.xml',
}
do
local ia = os.clock()
io.write('Loading items')
local i = io.open(items.XML_DIR,'r')
local u = i:read(-1)
i:close()
local u = u:match('<items>(.+)</items>')
for mi,id,mid,name,data,me in u:gmatch('<(%a-)%s*id%s*=%s*"(%d+)"%s*(.-)%s*name%s*=%s*"(.-)"%s*>(.-)</(%a*)>') do
if mi == 'item' and me == 'item' then
local td = {name=name,id=id,type=1}
for key,value in data:gmatch('<attribute key="(.-)" value="(.-)"/>') do
td[key] = value
end
for key,value in mid:gmatch('(.-)="(.-)"') do
td[key] = value
end
items[tonumber(id)] = td


items[name] = td
end
end
for mi,id,mid,name,data in u:gmatch('<(%a-)%s*id%s*=%s*"(%d*)"%s*(.-)%s*name%s*=%s*"(%a+)"%s*/>') do
if mi == 'item' then
local td = {name=name,id=id,type=2}
for key,value in mid:gmatch('(.-)="(.-)"') do
td[key] = value
end
items[tonumber(id)] = td
items[name] = td
end
end
io.write('[done '..os.clock()-ia..']\n')
end
function getItemValue(item,value)
return items[item] and items[item][value]
end
function equip(cid,item,slot) --By mock the bear
local HP = getCreatureHealth(cid)
local MP = getCreatureMana(cid)
local t = {}
if item then
local mm,sinal,qto = getSlotType(getItemName(item.uid))
t[mm] = tonumber(qto)
end
for i=1,9 do -- Not on slot 10 > arrow
if i ~= slot then
if getPlayerSlotItem(cid,i).itemid ~= 0 then
local aab = getPlayerSlotItem(cid,i).uid
if aab and check2(cid,i) then
for _ in getItemName(aab):gmatch('(%[.-%])') do
local mm,sinal,qto2 = getSlotType(_)
if mm then
if not t[mm] then
t[mm] = 0
end
t[mm] = t[mm]+tonumber(qto2)


t[mm] = t[mm] > 100 and 100 or t[mm]
end
end
end
end
end
end
local fu = 0
local ca = {}
local s = ''
for sl,n in pairs(t) do
fu = fu+1
s = s..''..n..'% more of '..sl..'\n'
if sl == 'hp' then
doAddCondition(cid,conditionHP[tonumber(n)])
doCreatureAddHealth(cid,HP-getCreatureHealth(cid))
ca[50] = 1
doPlayerSendTutorial(cid,19)
elseif sl == 'mp' then
doAddCondition(cid,conditionMP[tonumber(n)])
doCreatureAddMana(cid,HP-getCreatureMana(cid))
ca[51] = 1
doPlayerSendTutorial(cid,19)
elseif sl == 'ml' then
doAddCondition(cid,conditionML[tonumber(n)])
ca[52] = 1
elseif sl == 'cas' then
doAddCondition(cid,conditionCLUB[tonumber(n)])
ca[53] = 1
elseif sl == 'shield' then
doAddCondition(cid,conditionSHI[tonumber(n)])
ca[54] = 1
elseif sl == 'dist' then
doAddCondition(cid,conditionDIST[tonumber(n)])
ca[55] = 1
end
end
if fu > 0 then
addEvent(doPlayerSendTextMessage,100,cid,24,'You have:\n'..s)
for i=50,55 do
if not ca[i] then
doRemoveCondition(cid,CONDITION_ATTRIBUTES,i)
end
end
else
for i=50,55 do
doRemoveCondition(cid,CONDITION_ATTRIBUTES,i)
end
end
return true
end
function onLogin(cid) ---Script by mock the bear!
        equip(cid,nil,slot)
        addEvent(chk,2000,cid,loadSet(cid)) -- Here we check!
        return true
end

malz ae wolf o resto é esse aqui

Postado

cara, ce n quer me passar o link de onde ce pegou n? pq isso daí n tá identado e tem ums 200 linhas de código q eu não to afim de identar só pra descobrir oque faz. Provavelmente onde ele postou tá identado

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo