Ir para conteúdo

jhon992

Conde
  • Total de itens

    631
  • Registro em

  • Última visita

  • Dias Ganhos

    13

Tudo que jhon992 postou

  1. achei num fórum gringo dae nem tinha créditos, acabei que testando agora pra ver se funfa e aqui n funfou, acho que é pq nas versões que possuem o market system o script tem que ser readaptado.
  2. function doPlayerAddDepotItem(cid, item, count) local item,count,pid = type(item)=="table" and item or {item},type(count)=="table" and count or {(count or 1)},getPlayerGUID(cid) doRemoveCreature(cid) for k,v in ipairs(item) do local ls = db.getResult("SELECT `sid` FROM `player_depotitems` WHERE `player_id` = "..pid.." ORDER BY `sid` DESC LIMIT 1") return db.executeQuery("INSERT INTO `player_depotitems` (`player_id`, `sid`, `pid`, `itemtype`, `count`, `attributes`) VALUES ("..pid..", "..(ls:getDataInt("sid")+1)..", 101, "..v..", "..count[k]..", '"..(count[k] > 1 and string.format("%x",count[k]) or '').."')") or false end end function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Comando precisa de parametros: nomedoplayer, iddoitem, quantidade.") return true end local t = string.explode(param, ",") local player = getPlayerByNameWildcard(tostring(t[1])) if(not isPlayer(player)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player não existe.") return true end local playername = tostring(t[1]) local itemid = tonumber(t[2]) local quant = tonumber(t[3]) if quant == nil then quant = 1 end doPlayerAddDepotItem(player, itemid, quant) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..quant.." "..(getItemNameById(itemid)).." ao jogador: "..playername..".") return true end
  3. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid 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 greetCallback(cid) talkState[talkUser] = 0 return true end local vocationsId = {1,2,5,6} -- id's das vocations que podem viajar com esse npc. local viagemNpc = { {lugar = "thais", pos = {x=160,y=54,z=7}, preco = 100}, -- nome da city, posição e preço da viagem. {lugar = "carlin", pos = {x=1845,y=645,z=7}, preco = 50}, {lugar = "port hope", pos = {x=1478,y=35,z=7}, preco = 200} } function creatureSayCallback(cid, type, msg) local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if(not npcHandler:isFocused(cid)) then return false end local msg = string.lower(msg) if not isInArray(vocationsId,getPlayerVocation(cid)) then selfSay("Você não pode viajar comigo.", cid) npcHandler:onCreatureDisappear(cid) end if msgcontains(msg, 'go') or msgcontains(msg, 'travel') then local text = "" for i=1, #viagemNpc do if i == 1 then text = text.." {"..(viagemNpc[i].lugar).."}["..(viagemNpc[i].preco).." gps], " elseif i == #viagemNpc then text = text.."{"..(viagemNpc[i].lugar).."}["..(viagemNpc[i].preco).." gps]." else text = text.."{"..(viagemNpc[i].lugar).."}["..(viagemNpc[i].preco).." gps], " end end selfSay("Eu posso te levar para"..text.." Onde você deseja ir?", cid) talkState[talkUser] = 2 elseif talkState[talkUser] == 2 then local cont = 0 for i=1, #viagemNpc do if viagemNpc[i].lugar == msg then if doPlayerRemoveMoney(cid, viagemNpc[i].preco) then selfSay("Boa viajem!", cid) doTeleportThing(cid, viagemNpc[i].pos) talkState[talkUser] = 0 else selfSay("Você não tem dinheiro suficiente para viajar.", cid) end else cont = cont+1 end end if cont == #viagemNpc then selfSay("Este lugar é invalido!", cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  4. Abre tua database e procura pelos players que você acha que esta causando esse erro e vai na aba vocations da database e muda o numero da vocationid pra um apropriado. Antes que pergunte a database é onde você edita os players.
  5. Seleciona o executável e aperta "Enter"? ashduadsa Oque pode ocorrer é de aparecer a lista de character e o char não logar, dae você deve ir nas propriedades do executável e muda a compatibilidade.
  6. Na minha opinião 9.6, por ser a versão mais atual além de possuir todos os novos sistemas, novos items, novas mounts, novos outifits e etc...
  7. Acabei de testar cara e ta funcionando perfeitamente, você só precisa configurar a variável "trapId = 3456" para o id do item que é criado no trap, ou seja, "trapId = 2711".
  8. Se eh no target fica assim: local config = { exhaustionSeconds = 15, -- exausted em segundos trapId = 3456, -- id do item do trap timeRemove = 30, -- segundos para remover o trap storageUse = 34538 -- storage usado. } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 10) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 2711) local arr = { { 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, }, { 0, 0, 1, 1, 1, 0, }, { 0, 0, 1, 2, 1, 0, }, { 0, 0, 1, 1, 1, 0, }, { 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, }, } local area = createCombatArea(arr) setCombatArea(combat, area) function onCastSpell(cid, var) if(exhaustion.check(cid, config.storageUse) == TRUE) then if (exhaustion.get(cid, config.storageUse) >= 60) then doPlayerSendCancel(cid, "Voçê só pode usar após [" .. math.floor(exhaustion.get(cid, config.storageUse) / 60 + 1) .."] minutos.") end if (exhaustion.get(cid, config.storageUse) <= 60) then doPlayerSendCancel(cid, "Voçê só pode usar após [" .. exhaustion.get(cid, config.storageUse).."] segundos.") end return false end doCombat(cid, combat, var) local pos = getCreaturePosition(getCreatureTarget(cid)) posTile1 = {x=pos.x+1,y=pos.y+1,z=pos.z,stackpos=1} posTile2 = {x=pos.x+1,y=pos.y,z=pos.z,stackpos=1} posTile3 = {x=pos.x+1,y=pos.y-1,z=pos.z,stackpos=1} posTile4 = {x=pos.x,y=pos.y-1,z=pos.z,stackpos=1} posTile5 = {x=pos.x-1,y=pos.y-1,z=pos.z,stackpos=1} posTile6 = {x=pos.x-1,y=pos.y,z=pos.z,stackpos=1} posTile7 = {x=pos.x-1,y=pos.y+1,z=pos.z,stackpos=1} posTile8 = {x=pos.x,y=pos.y+1,z=pos.z,stackpos=1} posAll = {posTile1,posTile2,posTile3,posTile4,posTile5,posTile6,posTile7,posTile8} exhaustion.set(cid, config.storageUse, config.exhaustionSeconds) addEvent(removeTrap, config.timeRemove*1000, posAll) return true end function removeTrap(posAll) for i=1, #posAll do for j=0, 255 do pos_stack = {x=posAll[i].x,y=posAll[i].y,z=posAll[i].z,stackpos=j} removeTile = getThingfromPos(pos_stack) if removeTile.itemid == config.trapId then doRemoveItem(removeTile.uid) end end end end
  9. Essa magia cria os items em volta do jogador que soltou ou do target?
  10. local config = { exhaustionSeconds = 15, -- exausted em segundos trapId = 3456, -- id do item do trap timeRemove = 30, -- segundos para remover o trap storageUse = 34538 -- storage usado. } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 10) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 2711) local arr = { { 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, }, { 0, 0, 1, 1, 1, 0, }, { 0, 0, 1, 2, 1, 0, }, { 0, 0, 1, 1, 1, 0, }, { 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, }, } local area = createCombatArea(arr) setCombatArea(combat, area) function onCastSpell(cid, var) if(exhaustion.check(cid, config.storageUse) == TRUE) then if (exhaustion.get(cid, config.storageUse) >= 60) then doPlayerSendCancel(cid, "Voçê só pode usar após [" .. math.floor(exhaustion.get(cid, config.storageUse) / 60 + 1) .."] minutos.") end if (exhaustion.get(cid, config.storageUse) <= 60) then doPlayerSendCancel(cid, "Voçê só pode usar após [" .. exhaustion.get(cid, config.storageUse).."] segundos.") end return false end doCombat(cid, combat, var) local pos = getCreaturePosition(cid) posTile1 = {x=pos.x+1,y=pos.y+1,z=pos.z,stackpos=1} posTile2 = {x=pos.x+1,y=pos.y,z=pos.z,stackpos=1} posTile3 = {x=pos.x+1,y=pos.y-1,z=pos.z,stackpos=1} posTile4 = {x=pos.x,y=pos.y-1,z=pos.z,stackpos=1} posTile5 = {x=pos.x-1,y=pos.y-1,z=pos.z,stackpos=1} posTile6 = {x=pos.x-1,y=pos.y,z=pos.z,stackpos=1} posTile7 = {x=pos.x-1,y=pos.y+1,z=pos.z,stackpos=1} posTile8 = {x=pos.x,y=pos.y+1,z=pos.z,stackpos=1} posAll = {posTile1,posTile2,posTile3,posTile4,posTile5,posTile6,posTile7,posTile8} exhaustion.set(cid, config.storageUse, config.exhaustionSeconds) addEvent(removeTrap, config.timeRemove*1000, posAll) return true end function removeTrap(posAll) for i=1, #posAll do for j=0, 255 do pos_stack = {x=posAll[i].x,y=posAll[i].y,z=posAll[i].z,stackpos=j} removeTile = getThingfromPos(pos_stack) if removeTile.itemid == config.trapId then doRemoveItem(removeTile.uid) end end end end
  11. Adicionei um "isCreature(cid)" na função "onCastSpellDelayed" para quando ela for executada verifica se a criatura ainda é uma criatura, ou seja, ela não morreu.
  12. Não precisa por as informações da posição do teleport com o mapa editor, o script já se encarrega disso pasta alterar a "posTp". E para trocar as cores dos times altere o numero em "lookHead = 79, lookBody = 91, lookLegs = 91, lookFeet = 91" para os desejados.
  13. @Tchubaka, quando criar um script pra alguém tenta explicar ao máximo possível a instalação do mesmo para não precisar ficar floodando e respondendo o mesmo tópico varias e varias vezes. Assim - Em data/movements/movements.xml e cole essas tags: <movevent type="StepIn" actionid="20302" event="script" value="Time1.lua"/> <movevent type="StepIn" actionid="20303" event="script" value="Time2.lua"/> Depois na pasta data/movements/scripts, duplica um arquivo nomeia pra "Time1" sem as aspas e cole: local outfit = {lookType = 268, lookHead = 79, lookBody = 91, lookLegs = 91, lookFeet = 91, lookTypeEx = 0, lookAddons = 3} -- outfit time 1. local posTp = {x=123,y=356,z=7} -- posição que sera teleportado time 1. function onStepIn(cid, item, pos) if isPlayer(cid) then doCreatureChangeOutfit(cid, outfit) doTeleportThing(cid, posTp) doSendMagicEffect(posTp, 10) end return true end E novamente na pasta data/movements/scripts, duplica um arquivo nomeia pra "Time2" sem as aspas e cole: local outfit = {lookType = 268, lookHead = 79, lookBody = 91, lookLegs = 91, lookFeet = 91, lookTypeEx = 0, lookAddons = 3} -- outfit time 2. local posTp = {x=123,y=356,z=7} -- posição que sera teleportado time 2. function onStepIn(cid, item, pos) if isPlayer(cid) then doCreatureChangeOutfit(cid, outfit) doTeleportThing(cid, posTp) doSendMagicEffect(posTp, 10) end return true end Depois basta adicionar os 2 teleports pelo mapa editor e no teleport do time 1 poe o actionid = "20302" e no do time 2 o actionid = "20303". ~~ Créditos pro @Tchubaka.
  14. Tenta tirar base nesse link: http://www.xtibia.com/forum/topic/137248-passando-um-otserv-para-860/ Só que muda apenas a parte de "CLIENT_VERSION" possibilitando o login com o client que você desejar.
  15. -- Trap local config = { exhaustionSeconds = 15, -- exausted em segundos storageUse = 34538 -- storage usado. } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 10) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 2711) local arr = { { 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, }, { 0, 0, 1, 1, 1, 0, }, { 0, 0, 1, 2, 1, 0, }, { 0, 0, 1, 1, 1, 0, }, { 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, }, } local area = createCombatArea(arr) setCombatArea(combat, area) function onCastSpell(cid, var) if(exhaustion.check(cid, config.storageUse) == TRUE) then if (exhaustion.get(cid, config.storageUse) >= 60) then doPlayerSendCancel(cid, "Voçê só pode usar após [" .. math.floor(exhaustion.get(cid, config.storageUse) / 60 + 1) .."] minutos.") end if (exhaustion.get(cid, config.storageUse) <= 60) then doPlayerSendCancel(cid, "Voçê só pode usar após [" .. exhaustion.get(cid, config.storageUse).."] segundos.") end return false end doCombat(cid, combat, var) exhaustion.set(cid, config.storageUse, config.exhaustionSeconds) return true end -- Paralyze local config = { exhaustionSeconds = 20, -- exausted em segundos storageUse = 34539 -- storage usado. } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) local condition = createConditionObject(CONDITION_PARALYZE) setConditionParam(condition, CONDITION_PARAM_TICKS, 10000) -- aqui vai o tempo de paralyze, 1000 = 1 segundo setConditionParam(condition, CONDITION_PARAM_SPEED, -400) -- velocidade que o player irá perder setConditionFormula(condition, 0, 0, 0, 0) setCombatCondition(combat, condition) function onCastSpell(cid, var) if(exhaustion.check(cid, config.storageUse) == TRUE) then if (exhaustion.get(cid, config.storageUse) >= 60) then doPlayerSendCancel(cid, "Voçê só pode usar após [" .. math.floor(exhaustion.get(cid, config.storageUse) / 60 + 1) .."] minutos.") end if (exhaustion.get(cid, config.storageUse) <= 60) then doPlayerSendCancel(cid, "Voçê só pode usar após [" .. exhaustion.get(cid, config.storageUse).."] segundos.") end return false end local target = getCreatureTarget(cid) if target > 0 then doAddCondition(target, condition) exhaustion.set(cid, config.storageUse, config.exhaustionSeconds) return true end return false end
  16. local combats = {} local count = 5 local combatTypes = {1,3} local combatEffects = {340} local combatDistanceEffects = {1} local combatFormulas = {{-99, -9, -9, -99}} local delays = {300,100, 100, 100,100,200,200,200} for i = 1, count do local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, combatTypes[((i-1) % #combatTypes)+1]) setCombatParam(combat, COMBAT_PARAM_EFFECT, combatEffects[((i-1) % #combatEffects)+1]) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, combatDistanceEffects[((i-1) % #combatDistanceEffects)+1]) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, unpack(combatFormulas[((i-1) % #combatFormulas)+1])) combats[i] = combat end local function onCastSpellDelayed(cid, combat, var, combat_id) if(isCreature(variantToNumber(var)) and isCreature(cid) and not getTileInfo(getThingPosition(variantToNumber(var))).protection) then doCombat(cid, combat[combat_id], var) if(combat[combat_id+1] ~= nil) then addEvent(onCastSpellDelayed, delays[((combat_id-1) % #delays)+1], cid, combats, var, combat_id+1) end end end function onCastSpell(cid, var) onCastSpellDelayed(cid, combats, var, 1) return true end
  17. Reportado para moverem, área correta seria "Pedidos e dúvidas - Websites".
  18. function getPlayersInRange(position, radiusx, radiusy) local creaturesList = {} for x = -radiusx, radiusx do for y = -radiusy, radiusy do if not (x == 0 and y == 0) then local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z}) if creature.type == 1 then table.insert(creaturesList, creature.uid) end end end end local creature = getTopCreature(position) if creature.type == 1 then if not(table.find(creaturesList, creature.uid)) then table.insert(creaturesList, creature.uid) end end return creaturesList end function isPositionInArray(haystack, needle) for i = 1, #haystack do if haystack[i].x == needle.x and haystack[i].y == needle.y and haystack[i].z == needle.z then return true end end return false end local t = { from = {x=168, y=28, z=7}, to = {x=182, y=38, z=7}, storage = { placed = 10001, max = 10002, radius = 10003}, delay = 3000, bombID = 10570, effect = CONST_ME_FIREAREA, blockID = 9421, text = "BOOM!", temple = {x=125, y=31, z=7}, exceptions = { {x=168, y=28, z=7}, {x=169, y=28, z=7}, {x=168, y=27, z=7}, {x=168, y=37, z=7}, {x=169, y=37, z=7}, {x=168, y=36, z=7}, {x=181, y=28, z=7}, {x=182, y=28, z=7}, {x=181, y=27, z=7}, {x=181, y=181, z=7}, {x=182, y=37, z=7}, {x=181, y=36, z=7} } } function reset() local dummy = doCreateItem(10570, 1, {x=175,y=33,z=7}) for x = t.from.x, t.to.x do for y = t.from.y, t.to.y do local pos = {x=x,y=y,z=t.from.z} local i1, i2, i3 = getTileItemById(pos, 8304).uid, getTileItemById(pos, 8306).uid, getTileItemById(pos, 8310).uid if i1 > 0 then doRemoveItem(i1) end if i2 > 0 then doRemoveItem(i2) end if i3 > 0 then doRemoveItem(i3) end if queryTileAddThing(dummy, pos, 4) == RETURNVALUE_NOERROR and not isPositionInArray(t.exceptions, pos) then doCreateItem(t.blockID, 1, pos) end end end doRemoveItem(dummy) end local function boom(pos, cid) local v = getTileItemById(pos, t.bombID).uid if isPlayer(cid) and isInRange(getThingPos(cid), t.from, t.to) then setPlayerStorageValue(cid, t.storage.placed, getPlayerStorageValue(cid, t.storage.placed) - 1) doCreatureSay(cid, t.text, TALKTYPE_ORANGE_2, false, nil, pos) doSendMagicEffect(pos, t.effect) local c = getTopCreature(pos).uid if isPlayer(cid) and isInRange(getThingPos(cid), t.from, t.to) then doSendMagicEffect(pos, CONST_ME_GIFT_WRAPS) doTeleportThing(c, t.temple) doSendMagicEffect(t.temple, CONST_ME_MORTAREA) local n1, n2 = getPlayerName(cid), getPlayerName(cid) doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex(cid) == 0 and "her" or "him") .. "self!" or n1 .. " was killed by " .. n2 .. " in bomberman!", MESSAGE_STATUS_WARNING) local a = getPlayersInRange({x=125, y=31, z=7}, 7, 5) if #a < 2 then doBroadcastMessage(getPlayerName(a[1]) .. " has won the bomberman match!", MESSAGE_STATUS_WARNING) doPlayerAddExperience(a[1], 15000) doTeleportThing(a[1], t.temple) doSendMagicEffect(t.temple, CONST_ME_FIREWORK_RED) reset() reset() end else local b = getTileItemById(pos, t.blockID).uid if b > 0 then doSendMagicEffect(pos, CONST_ME_BLOCKHIT) doRemoveItem(b) local r = math.random(10) if r < 4 then doCreateItem(r==1 and 8304 or r==2 and 8306 or r==3 and 8310, 1, _pos) end end end local N, E, W, S, l = 1, 1, 1, 1, getPlayerStorageValue(cid, t.storage.radius) function loopDir(dir) local _pos = {x=pos.x+(dir=="E" and E or dir=="W" and -W or 0), y=pos.y+(dir=="N" and -N or dir=="S" and S or 0), z=pos.z} if queryTileAddThing(v, _pos, 4) == RETURNVALUE_NOERROR or getTileItemById(_pos, t.blockID).uid > 0 then doSendMagicEffect(_pos, t.effect) local c = getTopCreature(_pos).uid if isPlayer(cid) and isInRange(getThingPos(cid), t.from, t.to) then doSendMagicEffect(_pos, CONST_ME_GIFT_WRAPS) doTeleportThing(c, t.temple) doSendMagicEffect(t.temple, CONST_ME_MORTAREA) local n1, n2 = getPlayerName(cid), getPlayerName(cid) doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex(cid) == 0 and "her" or "him") .. "self in bomberman!" or n1 .. " was killed by " .. n2 .. " in bomberman!", MESSAGE_STATUS_WARNING) local a = getPlayersInRange({x=131, y=25, z=7}, 7, 5) if #a < 2 then doBroadcastMessage(getPlayerName(a[1]) .. " has won the bomberman match!", MESSAGE_STATUS_WARNING) doPlayerAddExperience(a[1], 15000) doTeleportThing(a[1], t.temple) doSendMagicEffect(t.temple, CONST_ME_FIREWORK_RED) reset() reset() return "endgame" end else local b = getTileItemById(_pos, t.blockID).uid if b > 0 then doSendMagicEffect(_pos, CONST_ME_BLOCKHIT) doRemoveItem(b) local r = math.random(10) if r < 4 then doCreateItem(r==1 and 8304 or r==2 and 8306 or r==3 and 8310, 1, _pos) end return false end end elseif queryTileAddThing(v, _pos, 4) == 3 then return false end return true end while N <= l do local q = loopDir("N") if q == "endgame" then return doRemoveItem(v, 1) elseif not q then break else N = N + 1 end end while E <= l do local q = loopDir("E") if q == "endgame" then return doRemoveItem(v, 1) elseif not q then break else E = E + 1 end end while W <= l do local q = loopDir("W") if q == "endgame" then return doRemoveItem(v, 1) elseif not q then break else W = W + 1 end end while S <= l do local q = loopDir("S") if q == "endgame" then return doRemoveItem(v, 1) elseif not q then break else S = S + 1 end end end doRemoveItem(v, 1) end function onSay(cid, words, param, channel) if isInRange(getThingPos(cid), t.from, t.to) then setPlayerStorageValue(cid, t.storage.placed, math.max(getPlayerStorageValue(cid, t.storage.placed), 0)) setPlayerStorageValue(cid, t.storage.max, math.max(getPlayerStorageValue(cid, t.storage.max), 1)) setPlayerStorageValue(cid, t.storage.radius, math.max(getPlayerStorageValue(cid, t.storage.radius), 1)) if getPlayerStorageValue(cid, t.storage.placed) < getPlayerStorageValue(cid, t.storage.max) then doCreateItem(t.bombID, 1, getThingPos(cid)) addEvent(boom, t.delay, getThingPos(cid), cid) setPlayerStorageValue(cid, t.storage.placed, getPlayerStorageValue(cid, t.storage.placed) + 1) end return true end end
  19. Quem sabe resolve sua dúvida. http://www.xtibia.com/forum/topic/137748-tutorialadicionando-efeitos/
  20. Não vou analisar o código todo mais dei uma passada de olho por cima e parece que tem algumas variáveis que não faz sentido, testa isso: function getPlayersInRange(position, radiusx, radiusy) local creaturesList = {} for x = -radiusx, radiusx do for y = -radiusy, radiusy do if not (x == 0 and y == 0) then local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z}) if creature.type == 1 then table.insert(creaturesList, creature.uid) end end end end local creature = getTopCreature(position) if creature.type == 1 then if not(table.find(creaturesList, creature.uid)) then table.insert(creaturesList, creature.uid) end end return creaturesList end function isPositionInArray(haystack, needle) for i = 1, #haystack do if haystack[i].x == needle.x and haystack[i].y == needle.y and haystack[i].z == needle.z then return true end end return false end local t = { from = {x=168, y=28, z=7}, to = {x=182, y=38, z=7}, storage = { placed = 10001, max = 10002, radius = 10003}, delay = 3000, bombID = 10570, effect = CONST_ME_FIREAREA, blockID = 9421, text = "BOOM!", temple = {x=125, y=31, z=7}, exceptions = { {x=168, y=28, z=7}, {x=169, y=28, z=7}, {x=168, y=27, z=7}, {x=168, y=37, z=7}, {x=169, y=37, z=7}, {x=168, y=36, z=7}, {x=181, y=28, z=7}, {x=182, y=28, z=7}, {x=181, y=27, z=7}, {x=181, y=181, z=7}, {x=182, y=37, z=7}, {x=181, y=36, z=7} } } function reset() local dummy = doCreateItem(10570, 1, {x=175,y=33,z=7}) for x = t.from.x, t.to.x do for y = t.from.y, t.to.y do local pos = {x=x,y=y,z=t.from.z} local i1, i2, i3 = getTileItemById(pos, 8304).uid, getTileItemById(pos, 8306).uid, getTileItemById(pos, 8310).uid if i1 > 0 then doRemoveItem(i1) end if i2 > 0 then doRemoveItem(i2) end if i3 > 0 then doRemoveItem(i3) end if queryTileAddThing(dummy, pos, 4) == RETURNVALUE_NOERROR and not isPositionInArray(t.exceptions, pos) then doCreateItem(t.blockID, 1, pos) end end end doRemoveItem(dummy) end local function boom(pos, cid) local v = getTileItemById(pos, t.bombID).uid if isPlayer(cid) and isInRange(getThingPos(cid), t.from, t.to) then setPlayerStorageValue(cid, t.storage.placed, getPlayerStorageValue(cid, t.storage.placed) - 1) doCreatureSay(cid, t.text, TALKTYPE_ORANGE_2, false, nil, pos) doSendMagicEffect(pos, t.effect) local c = getTopCreature(pos).uid if isPlayer(cid) and isInRange(getThingPos(cid), t.from, t.to) then doSendMagicEffect(pos, CONST_ME_GIFT_WRAPS) doTeleportThing(c, t.temple) doSendMagicEffect(t.temple, CONST_ME_MORTAREA) local n1, n2 = getPlayerName(cid), getPlayerName(cid) doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex© == 0 and "her" or "him") .. "self!" or n1 .. " was killed by " .. n2 .. " in bomberman!", MESSAGE_STATUS_WARNING) local a = getPlayersInRange({x=125, y=31, z=7}, 7, 5) if #a < 2 then doBroadcastMessage(getPlayerName(a[1]) .. " has won the bomberman match!", MESSAGE_STATUS_WARNING) doPlayerAddExperience(a[1], 15000) doTeleportThing(a[1], t.temple) doSendMagicEffect(t.temple, CONST_ME_FIREWORK_RED) reset() reset() end else local b = getTileItemById(pos, t.blockID).uid if b > 0 then doSendMagicEffect(pos, CONST_ME_BLOCKHIT) doRemoveItem(b) local r = math.random(10) if r < 4 then doCreateItem(r==1 and 8304 or r==2 and 8306 or r==3 and 8310, 1, _pos) end end end local N, E, W, S, l = 1, 1, 1, 1, getPlayerStorageValue(cid, t.storage.radius) function loopDir(dir) local _pos = {x=pos.x+(dir=="E" and E or dir=="W" and -W or 0), y=pos.y+(dir=="N" and -N or dir=="S" and S or 0), z=pos.z} if queryTileAddThing(v, _pos, 4) == RETURNVALUE_NOERROR or getTileItemById(_pos, t.blockID).uid > 0 then doSendMagicEffect(_pos, t.effect) local c = getTopCreature(_pos).uid if isPlayer(cid) and isInRange(getThingPos(cid), t.from, t.to) then doSendMagicEffect(_pos, CONST_ME_GIFT_WRAPS) doTeleportThing(c, t.temple) doSendMagicEffect(t.temple, CONST_ME_MORTAREA) local n1, n2 = getPlayerName(cid), getPlayerName(cid) doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex(cid) == 0 and "her" or "him") .. "self in bomberman!" or n1 .. " was killed by " .. n2 .. " in bomberman!", MESSAGE_STATUS_WARNING) local a = getPlayersInRange({x=131, y=25, z=7}, 7, 5) if #a < 2 then doBroadcastMessage(getPlayerName(a[1]) .. " has won the bomberman match!", MESSAGE_STATUS_WARNING) doPlayerAddExperience(a[1], 15000) doTeleportThing(a[1], t.temple) doSendMagicEffect(t.temple, CONST_ME_FIREWORK_RED) reset() reset() return "endgame" end else local b = getTileItemById(_pos, t.blockID).uid if b > 0 then doSendMagicEffect(_pos, CONST_ME_BLOCKHIT) doRemoveItem(b) local r = math.random(10) if r < 4 then doCreateItem(r==1 and 8304 or r==2 and 8306 or r==3 and 8310, 1, _pos) end return false end end elseif queryTileAddThing(v, _pos, 4) == 3 then return false end return true end while N <= l do local q = loopDir("N") if q == "endgame" then return doRemoveItem(v, 1) elseif not q then break else N = N + 1 end end while E <= l do local q = loopDir("E") if q == "endgame" then return doRemoveItem(v, 1) elseif not q then break else E = E + 1 end end while W <= l do local q = loopDir("W") if q == "endgame" then return doRemoveItem(v, 1) elseif not q then break else W = W + 1 end end while S <= l do local q = loopDir("S") if q == "endgame" then return doRemoveItem(v, 1) elseif not q then break else S = S + 1 end end end doRemoveItem(v, 1) end function onSay(cid, words, param, channel) if isInRange(getThingPos(cid), t.from, t.to) then setPlayerStorageValue(cid, t.storage.placed, math.max(getPlayerStorageValue(cid, t.storage.placed), 0)) setPlayerStorageValue(cid, t.storage.max, math.max(getPlayerStorageValue(cid, t.storage.max), 1)) setPlayerStorageValue(cid, t.storage.radius, math.max(getPlayerStorageValue(cid, t.storage.radius), 1)) if getPlayerStorageValue(cid, t.storage.placed) < getPlayerStorageValue(cid, t.storage.max) then doCreateItem(t.bombID, 1, getThingPos(cid)) addEvent(boom, t.delay, getThingPos(cid), cid) setPlayerStorageValue(cid, t.storage.placed, getPlayerStorageValue(cid, t.storage.placed) + 1) end return true end end
  21. Olha meu script aew e parte da minha sign, tenho fãns \o. Como o @Tchubaka escreveu esse script resolvera seu problema, quiser acessar o link completo do script: http://www.xtibia.com/forum/topic/175370-creaturescript-weapons-paralyze/ E só pra constar escrevi "weapons paralyze otserv" na pesquisa do nosso senhor da sabedoria e foi o primeiro script que apareceu. sauhdadsa
  22. Eu particularmente acho que seria muito bom uma área de venda de scripts. É um meio a mais de um bom scripter ser valorizado, vários scripters desse fórum já contribuíram com grandes servidores ajudando eles a ganharem seu próprio lucro, más creio que poucos até hoje tenham sido remunerados com algum tipo de pagamento em dinheiro. Com esse meio de venda de scripts o scripter também ia sair beneficiado, e isso não acabaria com a contribuição com a comunidade pois como o Gustavo disse a pessoa que comprou o script vai ter a oportunidade de liberar ele para a comunidade, o scripter também pode liberar versões antigas para a comunidade, contribuindo cada vez mais com coisas inovadoras... Acho que as restrições de vendedor poderiam ser essas: uma boa quantidade de pontos de reputação, uma certa quantidade de post, ter a conta na comunidade a um tempo e possuir aprovação da equipe xtibia. Ta ae minha humilde opinião.
  23. @HarpiaLOOK, leia as regras de "Pedidos e duvidas - scripting". http://www.xtibia.com/forum/topic/185353-importante-leia-regras/ Seu tópico cai no primeiro *. Das próximas vezes espero que não tenha este mesmo erro, que além de te prejudicar também dificulta quem vai pesquisar algo relacionado com a sua dúvida.
  24. @gustavo010, você não pode xingar outros membros do fórum! E oque o @Tchubaka escreveu no último post faz todo sentido além do globalevents do @PedroCazzi ser todo embaralhado ainda tem coisas duplicadas que só prejudicam o ot. Provavelmente oque o @Tchubaka falou resolvera o problema do @PedroCazzi. Agora os dois, parem de floodar, quiserem discutir enviem "pm" um para o outro sem poluir o tópico, quiser me contra argumentar envie "pm" pra min! E caro usuário @PedroCazzi se você deseja que continue aparecendo só as mensagenzinhas e não os effects, então não apague o teu globalevents, você deve ir em cada um dos scripts na pasta data/globalevents/scripts que tem o nome relacionado com "placa" e excluir toda a linha que esta escrito: doSendMagicEffect(positions[1],
  • Quem Está Navegando   0 membros estão online

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