Ir para conteúdo

digo1040

Campones
  • Total de itens

    59
  • Registro em

  • Última visita

  • Dias Ganhos

    6

Tudo que digo1040 postou

  1. Bom, mudei os return, com isso não vai gastar charges quando nao troca, a menos que "quebre" conforme a chance de nao funcionar. Quanto o delay, está funcionando corretamente, verifica o time que voce colocou
  2. Eai pessoal, há alguns dias eu fiz o Buy House totalmente em lua, e hoje então resolvi postar o script: O que ele faz: Compra a house quando o player estiver olhando na porta da house. Script: local function getBoolean(x) local e = false if type(x) == "boolean" then e = x else e = getBooleanFromString(x) end return e end function onSay(cid, words, param, channel) if not isPlayer(cid) or getBoolean(getConfigValue('buyableAndSellableHouses')) == false then return true end local pos = getPlayerLookPos(cid) local tile = getTileInfo(pos) if not tile then doPlayerSendCancel(cid, "You have to be looking at door of flat you would like to purchase.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end local house = getHouseFromPos(pos) if not house then doPlayerSendCancel(cid, "You have to be looking at door of flat you would like to purchase.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end local doorPos = getThingFromPos({ x=pos.x, y=pos.y, z=pos.z, stackpos=1}).itemid if not isItemDoor(doorPos) then doPlayerSendCancel(cid, "You have to be looking at door of flat you would like to purchase.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end local houseInfo = getHouseInfo(house) local guild = houseInfo.guildHall local guid = getPlayerGUID(cid) if guild == false then if getHouseByPlayerGUID(guid) then doTeleportThing(cid,getHouseEntry(getHouseByPlayerGUID(guid))) doPlayerSendCancel(cid, "You already rent another house.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end local accountHouses = tonumber(getConfigValue('housesPerAccount')) local account = getPlayerAccountId(cid) local housesInAccountsql = db.getResult("SELECT `p`.`account_id` FROM `houses` h LEFT JOIN `players` p ON `h`.`owner` = `p`.`id` WHERE `p`.`account_id` = " .. account .. " AND `guild` = 0;") local housesInAccount = housesInAccountsql:getID() == -1 and 0 or housesInAccountsql:getRows(free) housesInAccountsql:free() if accountHouses > 0 and housesInAccount >= accountHouses then doPlayerSendCancel(cid, "You may own only " .. accountHouses .. " house\'s per account.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end if getBoolean(getConfigValue('houseNeedPremium')) == true and not isPremium(cid) then doPlayerSendCancel(cid, RETURNVALUE_YOUNEEDPREMIUMACCOUNT) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end local levelToBuyHouse = tonumber(getConfigValue('levelToBuyHouse')) if getPlayerLevel(cid) < levelToBuyHouse then doPlayerSendCancel(cid, "You have to be at least Level " .. levelToBuyHouse .. " to purchase a house.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end else if not getPlayerGuildId(cid) or getPlayerGuildLevel(cid) ~= GUILDLEVEL_LEADER then doPlayerSendCancel(cid, "You have to be at least a guild leader to purchase a hall.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end local guildHouses = getPlayerGuildId(cid) local housesInGuildsql = db.getResult("SELECT `owner` FROM `houses` WHERE `owner` = " .. guildHouses .. " AND `guild` = 1;"):getRows(free) local housesInGuild = housesInGuildsql:getID() == -1 and 0 or housesInGuildsql:getRows(free) housesInGuildsql:free() if housesInGuild ~= 0 then doPlayerSendCancel(cid, "Your guild rents already another hall.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end end if getHouseOwner(house) ~= 0 then doPlayerSendCancel(cid, "This flat is already owned by someone else.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end if getPlayerMoney(cid) < getHousePrice(house) or not doPlayerRemoveMoney(cid, getHousePrice(house)) then doPlayerSendCancel(cid, "You do not have enough money.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end setHouseOwner(house, guid, true) local ret = "You have successfully bought this " if guild == true then ret = ret .. "hall" else ret = ret .. "house" end ret = ret .. ", remember to leave money at " if guild == true then ret = ret .. "guild owner " end if getBoolean(getConfigValue('bankSystem')) then ret = ret .. "bank or " end ret = ret .. "depot of this town for rent." doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, ret) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_BLUE) return true end Tag XML: <talkaction words="!buyhouse" filter="word-spaced" event="script" value="nome do seu script.lua"/> Como Funciona: O player fica em frente a porta da house, fala o comando, se estiver tudo certo ele compra a house. Bom é isso xP
  3. Você ageitou todas as posições que tem nos scripts? Aparece algum erro no distro?
  4. @ Drdrake9 Nem havia percebido, vlw @ Lolksky Coloquei a versão instant spell e rune da mágia
  5. Eai, procure essa parte: elseif getCreatureName(cid) == "Weezing" then min = 55 end e mude para isso: elseif getCreatureName(cid) == "Weezing" then min = 55 else min = 0 end
  6. Eai, Adicionei a chance do item se quebrar: function onUse(cid, item, fromPosition, itemEx, toPosition) local exhaust = 1 local chance = 40 -- chance de quebrar/summir if (getPlayerStorageValue(cid, 10) <= os.time()) then doSummonCreature("War Wolf", getPlayerLookPos(cid)) setPlayerStorageValue(cid, 10, os.time()+exhaust) doSendMagicEffect(getPlayerLookPos(cid), 10) else doPlayerSendCancel(cid, "Desculpe, você so pode sumonar novamente depois de "..exhaust.." segundos.") end if math.random(1,100) <= 40 then doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "O item acaba de ser quebrado!") doRemoveItem(item.uid) doSendMagicEffect(getCreaturePosition(cid), 3) end return true end
  7. Bom, o arquivo talkactions/scripts/vipaccgod.lua na verdade são dois arquivos, na linha 59 tem isso: vipaccplayer.lua: , indicando que o código abaixo a essa linha faz parte do arquivo vipaccplayer.lua. E eu falei que os nomes possivelmente estão incorretos devido o erro no distro: [Error - LuaScriptInterface::loadFile] connot open ....: No such file or directory Ou seja, ele não conseguiu localizar o arquivo indicado na tag do xml.
  8. Change Corpse Eai pessoal, tava vendo alguns videos e encontrei um que falava sobre uma magia, change corpse, como procurei e não a encontrei resolvi fazer ela e ficou assim: Versão Instant Spell: Versão Rune: Bom vamos as configs da magia: storage => devido a natureza da magia recomendo que ela tenha um delay proprio (cd), entao coloque uma storage que ficara salvo esse delay. time => defina o tempo em segundos do delay, para nao ter delay coloque 0. player/monster/npc => voce define em quais creatures o char pode usar a magia, recomendo deixar somente os players como true; pois eles poderiam usá-la para entrar em alguma sala que tenha somente um npc, ou trocar de posição com um trainer. chance => é a chance da magia ter sucesso (0-100) para funcionar todas as vezes coloque 100. Bom é isso, espero que gostem Segue o video com a chance corpse:
  9. Eai, ou poderia fazer um cresturescripts do tipo onDeath, fiz ele assim: function onDeath(cid, corpse, deathList) local rand = math.random(1,100) if rand > 50 then local item = doCreateItemEx(2383, 1) --cria o item 2383 (spike sword) doItemSetAttribute(item,'name',"novo nome") -- muda o nome do item doItemSetAttribute(item,'attack',34) -- muda o ataque da arma doAddContainerItemEx(corpse.uid, item) -- adiciona o item no corpo morto end return true end E nos monstros que é para executar o creaturescripts registra ele: <script> <event name="nome do creaturescript" /> </script> Nos meus testes: 16:49 Loot of a orc: a bag, meat, 4 gold coins, 7 worms, a studded shield, a novo nome.
  10. Eai No arquivo lib/032-position.lua , coloque isso: function isInRange(position, fromPosition, toPosition) return (position.x >= fromPosition.x and position.y >= fromPosition.y and position.z >= fromPosition.z and position.x <= toPosition.x and position.y <= toPosition.y and position.z <= toPosition.z) end Tenho quase certeza que ocorrerá novos erros.
  11. Eai, Poste o arquivo talkactions/scripts/vipaccgod.lua para que possamos ver o erro. E os arquivos movements/scripts/viptile.lua - movements/scripts/vipe.lua e movements/scripts/tilevip.lua , não existe, provavelmente o nome dos arquivos estão incorretos na tag do movements.xml e verifique que os arquivos são os do seu system vip, como você disce que ocorre em outros sistem vip, verifique se quando voce troca de sistem remove todas as tag e arquivos destes.
  12. Eai, já fiz um tópico sobre isso: Deletador De Chars Inativos
  13. Provavelmente há um creaturescripts do tipo onAdvance/advance que faz isso Verifique eles
  14. Eai, o seu script todo tem essa função: isBr(cid) Você deve ter pegado esse script mas não pegou a função, faça isso, na primeira linha do seu script coloque isso: local function isBr(cid) return false end
  15. Eai, na linha 44 de enter e coloque isso: if isBr(cid) then Está assim: focus = cid talkState[talkUser] = 1 selfSay("Olá, "..getCreatureName(cid).."! Eu posso apelidar seu pokemon, você aceita?") Deixe assim: focus = cid talkState[talkUser] = 1 if isBr(cid) then selfSay("Olá, "..getCreatureName(cid).."! Eu posso apelidar seu pokemon, você aceita?") Creio que isso resolvera o problema ;P
  16. Os demais distro não sei, mas o TFS continua com o comando Animated Text.
  17. Eai, bom fiz a primeira spell, mas não cheguei a testá-la entao não sei se irá funcionar local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, -1) setConditionParam(condition, CONDITION_PARAM_STAT_MAXHEALTHPERCENT, 100+20) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setConditionParam(condition, CONDITION_PARAM_SUBID, 50) function onCastSpell(cid, var) doAddCondition(cid, condition) addEvent(doRemoveCondition, 10*60*1000, cid, CONDITION_ATTRIBUTES) return true end Bom é isso A segunda magia fiz assim: --< Copyleft by Digaao for xtibia >-- local area = { {-1, 0, 1}, {-1, "n", 1}, {-1, 0, 1} } function isNum(str) return tonumber(str) ~= nil end function onCastSpell(cid, var) local config = { monster = false, -- mover monster? player = true, -- mover player? npc = false, -- mover npcs? sqm = 3 -- numero de sqm para a afastar } local a = -2 local b = getCreaturePosition(cid) local cont = 0 for c, d in ipairs(area) do for _, e in ipairs(d) do if e ~= "n" and type(e) == "number" then local f = { x=b.x+e, y=b.y+a+c, z=b.z, stackpos=253 } local g = getThingFromPos(f).uid if (config.monster == true and isMonster(g)) or (config.player == true and isPlayer(g)) or (config.npc == true and isNpc(g)) and not isPlayerGhost(cid) then local h = { x=f.x, y=f.y, z=f.z } local i = config.sqm if a+c < 0 then h.y = h.y - i end if a+c > 0 then h.y = h.y + i end if e < 0 then h.x = h.x - i end if e > 0 then h.x = h.x + i end local j = getClosestFreeTile(g, h, true, true) if (j ~= false and isNum(j.x .. j.y .. j.z) and j.x > 0 and j.y > 0 and j.z >= 0 and j.z <= 15) then cont = cont + 1 doTeleportThing(g, j, true) end end end end end if cont > 0 then doPlayerSendCancel(cid, cont .. " creature foram afastadas de voce!") for i = 1, 30 do doSendDistanceShoot(b, {x = b.x + math.random(-7, 7), y = b.y + math.random(-5, 5), z = b.z}, 4) end else doPlayerSendCancel(cid, "Nao foi possivel afastar nenhuma creature de voce!") doSendMagicEffect(b, CONST_ME_POFF) end doCreatureSay(cid, "AFASTEM-SE", TALKTYPE_ORANGE_1, false) return true end Você só precisa a principio mudar o true/false no config Creio que funcionara
  18. digo1040

    Msg's

    Eai, no seu config.lua procure por: emoteSpells e deixe como false emoteSpells = false
  19. digo1040

    Canais

    UASUH, eai, vamos la então, Em talkactions/scripts crie um arquivo e coloque isso nele: local talk = { --[GroupId] = TIPO DA MENSAGEM [4] = TALKTYPE_CHANNEL_O, -- marrom [5] = TALKTYPE_CHANNEL_O, -- marrom [6] = TALKTYPE_CHANNEL_RA, -- vermelho } local canal = 6 -- id do trade channel function onSay(cid, words, param, channel) if param == "" or talk[getPlayerGroupId(cid)] == nil then return true end local user = getChannelUsers(canal) if talk[getPlayerGroupId(cid)] == TALKTYPE_CHANNEL_RA then param = getCreatureName(cid) .. ": " .. param end for _, a in pairs(user) do doPlayerSendToChannel(a, cid, talk[getPlayerGroupId(cid)], param, canal) end return true end E em talkactions.xml coloque esta tag: <talkaction log="no" words="/trade" access="4" event="script" value="nome do seu arquivo.lua"/> Com isso quando o char falar por exemplo: /trade Olá. Será enviada uma mensagem no trade channel na cor correspondente ao group id do char
  20. digo1040

    Vida/mana

    AUHSAUHSAHUS, eu tava na dúvida e testei num distro que iniciava mais rápido e deu isso kk agora se falo fui no tfs e nao adiciono a mais ;P mals ai kk
  21. digo1040

    Vida/mana

    Seria melhor utilizar assim: doCreatureAddMana(cid, getCreatureMaxMana(cid)-getCreatureMana(cid)) doCreatureAddHealth(cid, getCreatureMaxHealth(cid)-getCreatureHealth(cid)) Porque se nao remover a vida que ele ja tem vai dar problema, por exemplo, se a vida dele eh 300, e ele deslogar com 150, quando ele logar vai estar com 450, desloga denovo quando logar vai estar com 750 ;P
  22. Eai, tente executar esse sql: REPAIR TABLE `z_news_tickers` Se continuar não funcionando execute esse: DROP TABLE IF EXISTS `z_news_tickers`; CREATE TABLE IF NOT EXISTS `z_news_tickers` ( `date` int(11) NOT NULL DEFAULT '1', `author` int(11) NOT NULL, `image_id` int(3) NOT NULL DEFAULT '0', `text` text NOT NULL, `hide_ticker` tinyint(1) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; REPLACE INTO `z_news_tickers` (`date`, `author`, `image_id`, `text`, `hide_ticker`) VALUES (1275146803, 1, 1, 'Primeiro ticket', 0); Creio que irá funcionar
  23. Eai, Va em creaturescripts/scripts crie um arquivo e coloque isto: function onThink(cid, interval) local acesso = 5 -- acesso minimo para aparecer o efeito (groupid) if getPlayerGroupId(cid) >= acesso and not isPlayerGhost(cid) then local pp = getCreaturePosition(cid) local pos = { [1] = {x=(pp.x-1), y=(pp.y-1), z=pp.z}, [2] = {x=pp.x, y=(pp.y-1), z=pp.z}, [3] = {x=(pp.x+1), y=(pp.y-1), z=pp.z}, [4] = {x=(pp.x-1), y=pp.y, z=pp.z}, [5] = {x=(pp.x+1), y=pp.y, z=pp.z}, [6] = {x=(pp.x-1), y=(pp.y+1), z=pp.z}, [7] = {x=pp.x, y=(pp.y+1), z=pp.z}, [8] = {x=(pp.x+1), y=(pp.y+1), z=pp.z} } local efeito = math.random(28, 30) doSendMagicEffect(pos[math.random(1, 8)], efeito) end return true end No script coloque o groupid minimo para aparecer o efeito Vá em creaturescripts.xml e coloque essa tag: <event type="think" name="efeito" event="script" value="nome do seu script.lua"/> E por último vá em creaturescripts/scripts/login.lua e coloque isso: registerCreatureEvent(cid, "efeito") Bom é isso
  24. Eai, deixe a linha 6 assim: <parameter key="message_greet" value="ATENCAO!! |PLAYERNAME|!! Deseja fazer missoes {task} em troca de dinheiro, itens e experiencia?" /> O erro diz que há caracteres inseridos que não são do padrão UTF-8. É os caracteres com problemas, escritos em hexadecimal, no seu caso os caracteres com acento
  25. Eai, Fiz o script e coloquei dois tipos de delay, o delay1 é o tempo que o player deve esperar para mandar uma nova mensagem, por exemplo se o delay1 for 5 minutos, eu mandei uma mensagem então devo esperar 5 minutos para enviar uma nova mensagem, mas não interfere nada para os demais players. e o delay2 é considerado para todos os players, por exemplo se o delay2 for 30 segundos, quando um player mandar um chamado durante 30 segundos nao podera ser mandado nenhum chamado. Bom segui a ideia do StremeMakky e fiz por broadcast. Em globalevents/scripts crie um arquivo e nele coloque: local delay1 = 5 * 60 -- tempo em segundos que um player deve esperar entre as mensagens local delay2 = 30 -- tempo em segundos entre cada mensagens considerando todos os players local players = {} -- salva quando o player mandou o pedido local last = 0 -- salva quando foi enviada a ultima mensagem function onSay(cid, words, param, channel) if os.time() - last > delay1 then players = {} end local uid = getPlayerGUID(cid) local cont = (players[uid] or 0) + delay1 if players[uid] ~= nil and type(players[uid]) == "number" and cont > os.time() then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce so pode mandar outra mensagem daqui " .. cont - os.time() .. " segundos!") return true end local cont = last + delay2 if cont > os.time() then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Espere " .. cont - os.time() .. " segundos para mandar a mensagem!") return true end doBroadcastMessage(getPlayerName(cid) .. "have called the GOD !") last = os.time() table.insert(players, uid, os.time()) return true end E em globalevents.xml coloque a tag: <talkaction log="yes" words="GOD" script="nome do seu arquivo.lua"/> E quanto ao accept invite, acho desnecessário pois para isso ter um verdadeiro significado, a cada pedido deveria salvar em algum lugar, se nao salvar vai ser so mais um /goto, como salvar é algo desnecessário recomendo utilizar o /goto mesmo para ir ate o player
  • Quem Está Navegando   0 membros estão online

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