Ir para conteúdo

zipter98

Herói
  • Total de itens

    2553
  • Registro em

  • Última visita

  • Dias Ganhos

    72

Tudo que zipter98 postou

  1. Action: local config = { reflectBonus = 2, --Bônus de reflect, em %. failChance = 50, --Chance de falhar, em porcentagem. types = {"armor", "legs", "helmet", "boots"}, noReflect = {1, 2, 3, 5, 6} --Tipos de armamento bloqueados (valores podem ser conferidos em 000-constant.lua, data/lib) } function onUse(cid, item, fromPos, itemEx, toPos) if itemEx.itemid < 100 then return doPlayerSendCancel(cid, "Use this in valid itens.") elseif isInArray(config.noReflect, getItemWeaponType(itemEx.uid)) then return doPlayerSendCancel(cid, "Use this in valid itens.") elseif getItemAttribute(itemEx.uid, "reflect") then return doPlayerSendCancel(cid, "This item has already a reflect bonus.") elseif math.random(1, 100) > config.failChance then return doPlayerSendTextMessage(cid, 27, "Sorry, your item didn't get a reflect bonus. Good luck at the next try! =]"), doRemoveItem(item.uid, 1) end local checkItemName for i = 1, #config.types do if getItemNameById(itemEx.itemid):find(config.types[i]) then checkItemName = true break end end if not checkItemName then return doPlayerSendCancel(cid, "Use this in valid itens.") end doPlayerSendTextMessage(cid, 27, "Congratulations, now your item has a reflect bonus of "..config.reflectBonus.."%!") doItemSetAttribute(itemEx.uid, "reflect", config.reflectBonus) doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).." ref "..config.reflectBonus.."%") doRemoveItem(item.uid, 1) return true end Creaturescript (não se esqueça de registrar o evento em login.lua): function onStatsChange(cid, attacker, type, combat, value) if isPlayer(cid) and isCreature(attacker) and type == STATSCHANGE_HEALTHLOSS then local bonusReflect = 0 for i = 1, 10 do local item = getPlayerSlotItem(cid, i).uid if item > 0 and getItemAttribute(item, "reflect") then bonusReflect = bonusReflect + getItemAttribute(item, "reflect") end end if bonusReflect > 0 then local damage = value * bonusReflect / 100 doSendAnimatedText(getThingPos(attacker), -damage, COLOR_RED) doCreatureAddHealth(attacker, -damage) end end return true end
  2. Há algum outro evento com nome "tp"?
  3. Tente esse e informe se alguma coisa é imprimida no console (1/2): local tpId = 1387 local tps = { ["Little Corym Charlatan"] = {pos = {x=414, y=91, z=11}, toPos = {x=409, y=93, z=11}, time = 30}, } function removeTp(tp) local t = getTileItemById(tp.pos, tpId) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(tp.pos, CONST_ME_POFF) end end function onKill(cid, target) print(1) local tp = tps[getCreatureName(target)] if isPlayer(cid) and isMonster(target) and tp then print(2) doCreateTeleport(tpId, tp.toPos, tp.pos) doCreatureSay(target, "A teleport appeared near and will disappear in "..tp.time.." seconds.", TALKTYPE_ORANGE_1) doCreatureSay(target, "You have killed the disorder and proved be trustworthy", TALKTYPE_ORANGE_1) setPlayerStorageValue(cid, 21321, 1) addEvent(removeTp, tp.time*1000, tp) end return true end
  4. Sobre meu código, você disse que não estava acontecendo nada quando o monstro morria, certo? Modifiquei o script. Agora vai funcionar direitinho.
  5. Ah sim, esqueci de modificar o parâmetro. Bem lembrado. Sobre o uso de metamétodos e afins do TFS 1.x+, não adaptei pois, como o autor mesmo disse, o problema era só na storage.
  6. Registre esse evento em login.lua, não no arquivo do monstro. Esqueci de avisar, foi mal.
  7. Uma opção é converter o código para outro callback, como, por exemplo, onKill. local tpId = 1387 local tps = { ["Little Corym Charlatan"] = {pos = {x=414, y=91, z=11}, toPos = {x=409, y=93, z=11}, time = 30}, } function removeTp(tp) local t = getTileItemById(tp.pos, tpId) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(tp.pos, CONST_ME_POFF) end end function onKill(cid, target) local tp = tps[getCreatureName(target)] if isPlayer(cid) and isMonster(target) and tp then doCreateTeleport(tpId, tp.toPos, tp.pos) doCreatureSay(target, "A teleport appeared near and will disappear in "..tp.time.." seconds.", TALKTYPE_ORANGE_1) doCreatureSay(target, "You have killed the disorder and proved be trustworthy", TALKTYPE_ORANGE_1) setPlayerStorageValue(cid, 21321, 1) addEvent(removeTp, tp.time*1000, tp) end return true end É possível fazer por onStatsChange também.
  8. Você está setando a storage no monstro que está morrendo (cid). local tpId = 1387 local tps = { ["Little Corym Charlatan"] = {pos = {x=414, y=91, z=11}, toPos = {x=409, y=93, z=11}, time = 30}, } function removeTp(tp) local t = getTileItemById(tp.pos, tpId) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(tp.pos, CONST_ME_POFF) end end function onDeath(cid, corpse, deathList) local tp = tps[getCreatureName(cid)] if tp then doCreateTeleport(tpId, tp.toPos, tp.pos) doCreatureSay(cid, "A teleport appeared near and will disappear in "..tp.time.." seconds.", TALKTYPE_ORANGE_1) doCreatureSay(cid, "You have killed the disorder and proved be trustworthy", TALKTYPE_ORANGE_1) setPlayerStorageValue(deathList[1], 21321, 1) addEvent(removeTp, tp.time*1000, tp) end return true end
  9. Para ser sincero, não li por inteiro esses códigos, então talvez hajam mais erros. Corrigido.
  10. local Config = { Monsters = { -- ["Name"] = {amount = quantidade} ["Demon"] = {amount = 5}, ["Hydra"] = {amount = 10}, }, StoragePro = 54661, -- Não mexer se não souber editar Money = 100 -- Dinheiro } function onKill(cid, target) if not isMonster(target) and getPlayerStorageValue(cid, Config.StoragePro) >= (2 + #Config.StoragePro) then return false end local monster = Config.Monsters[getCreatureName(target):lower()] if monster then local sto = getPlayerStorageValue(cid, monster) if sto < (monster.amount - 1) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Task message: [" .. (sto + 1) .. "/" .. monster.amount .. "] of " .. getCreatureName(target) .. ".") setPlayerStorageValue(cid, monster, (sto + 1)) elseif sto == (monster.amount - 1) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations!! you have killed" .. (sto + 1) .. "/" .. monster.amount .. "] of " .. getCreatureName(target) .. "s ands and completed the task.") setPlayerStorageValue(cid, monster, (sto + 1)) setPlayerStorageValue(cid, Config.StoragePro, (getPlayerStorageValue(cid, Config.StoragePro) + 1)) end end return true end function onLogin(cid) registerCreatureEvent(cid, 'taskNpc') return true end NPC: local Config = { Monsters = { -- ["Name"] = {amount = quantidade} ["Demon"] = {amount = 30}, ["Hydra"] = {amount = 10}, }, StoragePro = 54661, -- Não mexer se não souber editar Money = 100 -- Dinheiro } local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if not npcHandler:isFocused(cid) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid local msg = msg:lower() if msgcontains(msg, "mission") then if getPlayerStorageValue(cid, Config.StoragePro) < 1 then selfSay("A missão para promovido custa " .. Config.Money .. " você aceita fazer ?", cid) talkState[talkUser] = 1 elseif getPlayerStorageValue(cid, Config.StoragePro) == (2 + #Config.Monsters) then selfSay("Você já cumpriu a missão peça pra ser {promovido}.", cid) talkState[talkUser] = 2 elseif getPlayerStorageValue(cid, Config.StoragePro) == (3 + #Config.Monsters) then selfSay("Voce já terminou as missões, pode ir em embora!", cid) talkState[talkUser] = 0 end elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then if doPlayerRemoveMoney(cid, Config.Money) then local text = "" for monsters, v in pairs(Config.Monsters) do text = text .. ", " text = text .. v.amount .. " {" .. monsters .. "}" end npcHandler:say("A missão é matar esses monstros para mim" .. text .. ".", cid) for i, _ in pairs(Config.Monsters) do setPlayerStorageValue(cid, i, 0) end setPlayerStorageValue(cid, Config.StoragePro, 1) talkState[talkUser] = 0 else selfSay("Você não tem money suficiente!", cid) talkState[talkUser] = 0 end elseif msgcontains(msg, "no") and talkState[talkUser] == 2 then selfSay("Até logo!", cid) talkState[talkUser] = 0 end if msgcontains(msg, "lista") and getPlayerStorageValue(cid, Config.StoragePro) < (#Config.Monsters + 3) then local text, n = "", 0 for monsters, v in pairs(Config.Monsters) do local sto = getPlayerStorageValue(cid, monsters) if sto < v.amount then n = n + 1 text = text .. ", " text = text .. (tostring(sto) < tostring(1) and v.amount or (tostring(v.amount) - tostring(sto))) .. " {" .. monsters .. "}" end end text = text:sub(3) if n > 1 then selfSay("Para terminar sua missão você ainda tem que matar esses monstros : " .. text, cid) talkState[talkUser] = 0 elseif n == 1 then selfSay("Você só tem mais um monstro à matar : " .. text, cid) talkState[talkUser] = 0 else selfSay("Você já terminou de matar os monstro que lhe pedi, agora sim tu é digno de ser {promovido}.", cid) talkState[talkUser] = 2 end elseif msgcontains(msg, "promovido") and talkState[talkUser] == 2 then selfSay("Aqui está sua promoção jovem soldado!!", cid) setPlayerVocation(cid, (getPlayerVocation(cid) + 4)) setPlayerStorageValue(cid, Config.StoragePro, (#Config.Monsters + 3)) -- Para deixar em utilizavel a storage para outras coisas for monsters, _ in pairs(Config.Monsters) do setPlayerStorageValue(cid, monsters, -1) end talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  11. Na linha 55, troque: (#Config.Monster + 3) por: (#Config.Monsters + 3)
  12. Seu pokémon lhe abandonou. Lamento. Enfim, tente trocar: table.remove(randomPosis, index) por: for i = index, #randomPosis do randomPosis[i] = randomPosis[i + 1] or nil end
  13. Troque: local monster = Config.Monsters[getCreatureName(target):lower] por: local monster = Config.Monsters[getCreatureName(target):lower()]
  14. Ops, errei outra letra. Corrigido.
  15. Nesse caso, teste o código configurando o evento manualmente.
  16. Ops, coloquei sem querer uma letra minúscula onde não devia. Corrigido.
  17. <event type="death" name="deathEffect" event="script" value="nome_do_arquivo.lua"/>
  18. O primeiro, que eu também particularmente escolheria por ter um processo menos cansativo de configuração.
  19. Tags: <event type="logout" name="skullLogin" event="script" value="nome_do_arquivo.lua"/> <event type="statschange" name="skullStatsChange" event="script" value="nome_do_arquivo.lua"/> <event type="target" name="skullTarget" event="script" value="nome_do_arquivo.lua"/> Código (data/creaturescripts/scripts): local monsterName = "nome_do_monstro" function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and getCreatureSkullType(attacker) ~= SKULL_WHITE and isMonster(cid) and getCreatureName(cid) == monsterName and type == STATSCHANGE_HEALTHLOSS then doCreatureSetSkullType(attacker, SKULL_WHITE) end return true end function onTarget(cid, target) if isPlayer(cid) and getCreatureSkullType(cid) ~= SKULL_WHITE and isMonster(target) and getCreatureName(target) == monsterName then doCreatureSetSkullType(cid, SKULL_WHITE) end return true end function onLogin(cid) registerCreatureEvent(cid, "skullStatsChange") registerCreatureEvent(cid, "skullTarget") return true end
  20. data/lib/pokemon moves.lua: elseif spell == "Iron Body" then local ironBody = { outfit = xxx, --Outfit. duration = 5, --Duração. } doSetCreatureOutfit(cid, {lookType = ironBody.outfit}, ironBody.duration * 1000) setPlayerStorageValue(cid, 9658783, 1) addEvent(function() if isCreature(cid) then setPlayerStorageValue(cid, 9658783, -1) end end, ironBody.duration * 1000)
  21. Não se esqueça de registrar o evento no arquivo .XML dos monstros. local config = { --["monster_name"] = effect, ["Dragon"] = 28, ["Orc"] = 13, --etc } function onDeath(cid) local effect = config[getCreatureName(cid)] if effect then doSendMagicEffect(getThingPos(cid), effect) end return true end
  22. function onStatsChange(cid, attacker, type, combat, value) if isMonster(attacker) and isMonster(cid) then return false end return true end Entretanto, você terá que registrar o evento no arquivo .XML de todos os monstros. Ou, caso não queira realizar a cansativa tarefa acima, você pode tentar: Nas sources do servidor, monster.cpp: Abaixo de: if(isSummon()) isMasterInRange = canSee(getMaster()->getPosition()); coloque: std::string event = "NOME_DO_EVENT0"; //Nome do evento configurado em creaturescripts.xml. creature->registerCreatureEvent(event);
  23. Não testei a spell. data/lib, areas.lua: spell_area = { --Área de posições que o pokémon pode teleportar. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 3, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } data/lib, pokemon moves.lua: elseif spell == "NOME_DA_SPELL" then local config = { times = 4, --Vezes que o pokémon irá se teleportar. appearEffect = xxx, --Efeito que vai aparecer no pokémon ao aparecer. effect = xxx, --Efeito de corte de garras. combat = STEELDAMAGE, --Elemento. disappearInterval = 200, --Tempo para, depois de reaparecer, o pokémon desaparecer novamente. (em milésimos de segundo) teleportInterval = 400 --Intervalo de tempo entre cada teleporte do pokémon. (em milésimos de segundo) } local pos = getPosfromArea(cid, spell_area) local randomPosis = {} for i = 1, config.times do randomPosis[i] = pos[math.random(#pos)] if not isWalkable(randomPosis[i]) or getTileInfo(randomPosis[i]).protection then while not isWalkable(randomPosis[i]) do randomPosis[i] = pos[math.random(#pos)] end end end local function doTeleport(cid, time) if not isCreature(cid) then return true end if not isCreature(target) or time <= 0 then doAppear(cid) doCreatureSetNoMove(cid, false) doRegainSpeed(cid) end local index = math.random(#randomPosis) doTeleportThing(cid, randomPosis[index]) for i = index, #randomPosis do randomPosis[i] = randomPosis[i + 1] or nil end doAppear(cid) doSendMagicEffect(getThingPos(cid), config.appearEffect) doDanoWithProtect(cid, config.combat, getThingPos(target), 0, -min, -max, config.effect) addEvent(doDisapear, config.disappearInterval, cid) addEvent(doTeleport, config.teleportInterval, cid, time - 1) end doDisapear(cid) doCreatureSetNoMove(cid, true) doChangeSpeed(cid, -getCreatureSpeed(cid)) addEvent(doTeleport, config.teleportInterval, cid, config.times)
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...