Ir para conteúdo

Wise

Membro
  • Registro em

  • Última visita

Tudo que Wise postou

  1. Wise respondeu ao post em um tópico de nathalys2 em Suporte Tibia OTServer
    Porquê a compilação não deu certo? Qual(is) o(s) erro(s)? Se você estiver utilizando o Dev-C++, verifique se fez as atualizações disponíveis para ele, há uma possibilidade desse ser o problema (se não houver bugs na source).
  2. Use uma munição que contenha esse efeito de shoot type (CONST_ANI_SHIVERARROW). Se você no caso não tiver o item com esse efeito, basta adicionar então em items.xml, como os membros disseram. Exemplo do uso no infernal bolt: <item id="6529" article="an" name="infernal bolt" plural="infernal bolts"> <attribute key="weight" value="90" /> <attribute key="slotType" value="ammo" /> <attribute key="attack" value="43" /> <attribute key="maxHitChance" value="90" /> <attribute key="weaponType" value="ammunition" /> <attribute key="ammoType" value="bolt" /> <attribute key="shootType" value="shivearrow" /> <attribute key="ammoAction" value="removecount" /> </item>
  3. Valeu, amigo. @macenamt2 As linguagens usadas no Open Tibia são basicamente Lua, C, C++, Sql, XML. Aqui no fórum, há áreas em que você pode aprender sobre scripting e programação Open Tibia com vários tutoriais. Dê uma olhada nelas (e qualquer dúvida que tiver, crie um tópico na área referente ao suporte em questão): Tutoriais de Scripting Tutoriais de Programação
  4. Obrigado, @DeathRocks.
  5. Não foi minha intenção prejudicar ninguém com a imagem, amigo. Clique em Ignorar assinaturas de Suicide, em um X logo abaixo, do lado direito.
  6. Olá, caros tibianos. Como vão? Bom, hoje eu inicio o meu estágio no TibiaKing e antes de falar um pouco sobre mim, quero deixar bem claro que enquanto eu pertencer a essa comunidade, me esforçarei ao máximo para contribuir com o conteúdo do fórum. Fazendo parte da equipe ou não, sempre vou ajudar com o que eu puder. Primeiramente, o meu nome é Renan e eu tenho 17 anos. Estudo algumas linguagens de programação e conto com um grande apoio do meu caro amigo xWhiteWolf, sempre que preciso. Eu pretendo me tornar um programador; e com todo o conhecimento que eu obter nessa minha jornada, tenho como intuito, trazer mais e mais informações que contribuam para nossa grande comunidade tibiana que é o TibiaKing. Se precisar de ajuda, crie um tópico na área referente ao que se trata; e se eu puder, com toda certeza vou te ajudar. Obrigado, é um prazer ter a oportunidade de propor desenvolvimento ao fórum.
  7. Um detalhe ou outro ficou um tanto quanto confuso, então me avise se eu não entendi muito bem o que você quis dizer. Se por exemplo, todos os rings habilitassem determinada spell, então você poderia fazer uma checagem do slot antes do callback da mesma: if getPlayerSlotItem(cid, CONST_SLOT_RING).uid < 1 then doPlayerSendCancel(cid, "You can't cast the spell without using a ring.") return false end Se forem spells pra itens distintos, você pode fazer o uso de storages. Criando movements com callback de onEquip e onDeEquip que atribuam ao player um valor dessas storages (quando ele equipar/remover o item). Depois é só fazer a checagem do valor da storage no callback da spell. Exemplo: movement script: local stor = 12345 -- storage function onEquip(cid, item, slot) setPlayerStorageValue(cid, stor, 1) return true end function onDeEquip(cid, item, slot) setPlayerStorageValue(cid, stor, -1) return true end Checagem na spell light healing (exura): local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setHealingFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 1.5, 2) function onCastSpell(cid, var) local stor = 12345 -- storage if getPlayerStorageValue(cid, stor) < 1 then doPlayerSendCancel(cid, "You can't cast the spell without using the item that allows it.") return false end return doCombat(cid, combat, var) end
  8. Faça o teste com algum desses programas.
  9. Disponha.. Sim, mas acredito que não vai solucionar. Pelo que observei no script, estando em fly/ride/surf, o summon (pokemon) é removido. Então continuaria deslogando. De qualquer forma, seria: function onLogout(cid) if #getCreatureSummons(cid) > 0 then doPlayerSendCancel(cid, 'You cannot logout with your pokemon outside the pokeball.') return false end return true end
  10. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
    Adicione os creature events, é o que determinará um player como sendo um "zombie". Já a outra parte, você decide como vai querer que o player retorne a forma "humana". Daí fica a seu critério se será por uma action (item/alavanca) ou por um movement (portal/tile); basta adicionar o script referente a sua escolha.
  11. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
    Com base nos códigos do membro, a alavanca ficaria: zombielever.lua function onUse(cid, item, frompos, item2, topos) local stor = {12128, 12129} -- {storage zombie, storage humana} if getPlayerStorageValue(cid, stor[1]) > 0 or getPlayerStorageValue(cid, stor[2]) > 0 then setPlayerStorageValue(cid, stor[1], -1) setPlayerStorageValue(cid, stor[2], -1) doRemoveCondition(cid, CONDITION_OUTFIT) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(fromPos, CONST_ME_TELEPORT) else doPlayerSendCancel(cid, "Você não está morto para usar esta alavanca.") end return true end Tag: <action actionid="ACTIONID" script="zombielever.lua"/> E o portal (sem coordenadas pré determinadas nele, apenas contendo o actionID da tag): zombieportal.lua (data/movements/scripts): function onStepIn(cid, item, pos, fromPos) local stor = {12128, 12129} -- {storage zombie, storage humana} if isPlayer(cid) and getPlayerStorageValue(cid, stor[1]) > 0 or getPlayerStorageValue(cid, stor[2]) > 0 then setPlayerStorageValue(cid, stor[1], -1) setPlayerStorageValue(cid, stor[2], -1) doRemoveCondition(cid, CONDITION_OUTFIT) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(fromPos, CONST_ME_TELEPORT) else doTeleportThing(cid, fromPos, true) doSendMagicEffect(fromPos, CONST_ME_POFF) doPlayerSendCancel(cid, "Você não está morto para entrar no portal.") end return true end Tag: <movevent type="StepIn" actionid="ACTIONID" event="script" value="zombieportal.lua"/>
  12. donateaccess.lua (data/talkactions/scripts): function onSay(cid, words, param, channel) local stor = 12345 -- storage local p = string.explode(param, ",") local pid, ts, tn = getPlayerByNameWildcard(p[1]), tostring(p[1]), tonumber(p[2]) if (param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Enter the name of the player and the number of days you want to give access to it. Thus: /donate Player, 30') end if (not ts or not tn or p[3]) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Invalid parameter specified.') end if (tn < 1) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You need to assign to the player at least one day of access.') end if (not pid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player '..ts..' not found.') end setPlayerStorageValue(pid, stor, os.time() + (tn * 86400)) doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Were assigned '..tn..' day(s) of donate access to your account.') doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'You have assigned '..tn..' day(s) of donate access to the player '..ts) return true end Tag - talkactions.xml (data/talkactions): <talkaction log="yes" words="/donate" access="5" event="script" value="donateaccess.lua"/>
  13. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
    Embora não saibamos qual distro você usa e que versão é a dele, deve funcionar sim. Caso acuse alguma função como nula, poste uma screenshot aqui. A adição dos scripts é simples (códigos do Adriano SwaTT): zombieplayer.lua (data/creaturescripts/scripts): local morto = {lookType = 48} -- lookType local cemitery = {x=177, y=168, z=7} -- Coordenada do Cemitério local stor = {12128, 12129} -- {Storage Salva que é Fantasma, Storage de Controle} local condition_outfit = createConditionObject(CONDITION_OUTFIT) setConditionParam(condition_outfit, CONDITION_PARAM_OUTFIT, true) setConditionParam(condition_outfit, CONDITION_PARAM_TICKS, -1) addOutfitCondition(condition_outfit, morto) function onPrepareDeath(cid) if isPlayer(cid) then setPlayerStorageValue(cid, stor[1], 1) setPlayerStorageValue(cid, stor[2], -1) end return true end function onLogin(cid) if getPlayerStorageValue(cid, stor[2]) < 1 then if getPlayerStorageValue(cid, stor[1]) > 0 then setPlayerStorageValue(cid, stor[2], 1) doAddCondition(cid, condition_outfit) doTeleportThing(cid, cemitery) doPlayerSendTextMessage(cid, 4, "Agora és um fantasma.") end else doPlayerSendTextMessage(cid, 4, "Ainda és um fantasma.") doAddCondition(cid, condition_outfit) end return true end Registro do creature event (preparedeath) em login.lua (data/creaturescripts/scripts): registerCreatureEvent(cid, "TurnZombie") Tags - creaturescripts.xml (data/creaturescripts): <event type="preparedeath" name="TurnZombie" event="script" value="zombieplayer.lua"/> <event type="login" name="ZombieLogin" event="script" value="zombieplayer.lua"/> revive.lua (data/actions/scripts): function onUse(cid, item, frompos, item2, topos) local stor = {12128, 12129} -- {Storage Salva que é Fantasma, Storage de Controle} if getPlayerStorageValue(cid, stor[1]) > 0 or getPlayerStorageValue(cid, stor[2]) > 0 then setPlayerStorageValue(cid, stor[1], -1) setPlayerStorageValue(cid, stor[2], -1) doRemoveItem(item.uid, 1) doRemoveCondition(cid, CONDITION_OUTFIT) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) else doPlayerSendCancel(cid, "Você não está morto para usar este item.") end return true end Tag - actions.xml (data/actions): <action itemid="ITEMID" script="revive.lua"/>
  14. As storages estão de acordo com o seu sistema, a checagem delas corretas. Estranho. Que tal fazer com que os players só possam fazer logout se estiverem com a pokeball fora do slot da mesma? (Imagino que eles não possam retirar a pokeball enquanto estão em surf/ride/fly) Assim resolveria esse problema.. Pelo que vi em alguns servidores de pokemon tibia, o slot da pokeball é o que seria o slot da boots. Então: pokelogout.lua function onLogout(cid) if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid ~= 0 then doPlayerSendCancel(cid, 'You need to remove your pokeball from the slot to logout.') return false end return true end Não se esqueça da tag: <event type="logout" name="PokeLogout" event="script" value="pokelogout.lua"/>
  15. @narazaky Amigo, eu não preciso que me explique o que eu já sei. Se você colocou pra retornar true antes do fim do callback, então de que adiantou fazer a checagem? Não vou ficar dando aulinha. Se está tão certo dessa sua "lógica", pega e testa você mesmo. Quem sabe tirando a prova, não aprende melhor com seus erros.
  16. Se eu estou incluso nesses "outros", preste bem atenção. Não é porquê eu não te respondi mais que eu desisti de te ajudar ou que eu não sei como te ajudar, tenho compromissos e não sou obrigado a ficar atrás de você. Se quer que alguém faça algo pra você, então ao menos tenha mais respeito. O script do membro estava correto.
  17. Embora esteja correto, você não alterou absolutamente nada do script anterior lol
  18. Retornar true ao callback depois da checagem e retornar false no fim da função, não faz sentido. Isso faria com que o player que possui algumas das storages conseguisse fazer logout e os que não possuem, não. Você inverteu o correto.
  19. Agora que você postou os códigos do surf, a tabela está completa: Sendo as storages do fly, ride e surf, respectivamente. Tudo certo.
  20. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
    Como ele voltaria ao "normal" com esse item? Simplesmente usando-o ou uma talkaction, um npc..?
  21. Pelo que observei, não tem o "surf" incluso nesse script, deve estar separado. Então procure-o e poste aqui se possível. Já enquanto ao fly/ride, a tabela ficaria: function onLogout(cid) local sto = {17000, 17001} for x = 1, #sto do if getPlayerStorageValue(cid, sto[x]) < 1 then return true end end doPlayerSendCancel(cid, 'You cannot logout when you are in special situations such as surf/ride/fly.') return false end
  22. No caso do seu login.lua, os creature events registrados pelo comando for antes de retornar e encerrar o callback são os que estão na tabela events. Então sempre que adicionar um novo creature event ao creaturescripts.xml e o mesmo precisar ser registrado, apenas adicione ele à mesma tabela. local events = { 'pythiusDead', 'bossesGrayIsland', 'ElementalSpheres', 'ElementalSpheresKill', 'ElementalSpheresLogin', 'WarzoneThree', 'WarzoneTwo', 'bossesWarzone', 'SvargrondArenaKill', 'PharaoKillPortal', 'inServiceOfYalaharQuestsDiseased', 'inServiceOfYalaharQuestsMorik', 'inServiceOfYalaharQuestsQuara', 'inquisitionQuestBosses', 'inquisitionQuestUngreez', 'killingInTheNameOfQuestKills', 'TaskCustom', 'Yielothax', 'Energized', 'Raging', 'MastersVoiceServants', 'wrathBoss', 'wrathZalamon', 'PlayerDeath', 'ThievesGuildNomad', 'AdvanceSave', 'SpikeDrillworm', 'SecretServiceBlackKnight', 'PremiumRate', 'LootProtection', 'blesslvl20' } function onLogin(cid) local player = Player(cid) local loginStr = 'Welcome to ' .. configManager.getString(configKeys.SERVER_NAME) .. '!' if player:getLastLoginSaved() <= 0 then loginStr = loginStr .. ' Please choose your outfit.' player:sendTutorial(1) else if loginStr ~= '' then player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr) end loginStr = string.format('Your last visit was on %s.', os.date('%a %b %d %X %Y', player:getLastLoginSaved())) end player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr) for i = 1, #events do player:registerEvent(events[i]) end return true end
  23. Se ela opera por premium days, então não tem storage alguma, não é um "vip system". Você pode usar as próprias funções de premium contidas na source pra desenvolver esses creature events de look que você citou.
  24. Facilitaria se você postasse os códigos contidos nos arquivos desses sistemas.
  25. <npc name="Prof" script="data/npc/scripts/professor.lua" walkinterval="0"> <health now="1000" max="1000"/> <look type="520" head="94" body="45" legs="45" feet="90" addons="0"/> <parameters> <parameter key="message_greet" value="Ola! Onde voce quer começar sua jornada: {kanto}, {johto}, {hoenn}, {sinnoh}, {unova} ou {kalos}?" /> </parameters> </npc>

Informação Importante

Confirmação de Termo