Ir para conteúdo

Reds

Membro
  • Registro em

  • Última visita

Tudo que Reds postou

  1. Qual a versão do tfs? Consegue ver a rev também?
  2. O tk tava fora ai não postei antes.. Script: function onUse(cid, item, fromPosition, itemEx, toPosition) if (itemEx.itemid == idDaGrowth) then doSendMagicEffect(toPosition, CONST_ME_POFF) destroyItem(cid, itemEx, toPosition) return true end return false end E no XML: <action itemid="idMachete" event="script" value="machet.lua"/> Isso resolve a machete, para não remover wild growth, você precisa identificar a Action que existe dela e modificar.
  3. Script em action: function onUse(cid, item, fromPosition, itemEx, toPosition) if (itemEx.itemid == idDaGrowth) then doSendMagicEffect(toPosition, CONST_ME_POFF) destroyItem(cid, itemEx, toPosition) return true end return false end Action.xml: <action itemid="idMachete" event="script" value="machet.lua"/> Caso de um erro avise
  4. local combat = createCombatObject() arr = { {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 3, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, } local area = createCombatArea(arr) setCombatArea(combat, area) function spellCallback(param) if (isCreature(cid) then local skill = getPlayerSkillLevel(param.cid, 0) local level = getPlayerLevel(param.cid) local minimo = (skill + level)/2 local maximo = skill + level if param.count > 0 or math.random(0, 1) == 1 then doSendMagicEffect(param.pos, CONST_ME_GROUNDSHAKER) doAreaCombatHealth(param.cid, COMBAT_PHYSICALDAMAGE, param.pos, 0, -minimo, -maximo, CONST_ME_HITAREA) end if(param.count < 1) then doSendMagicEffect(param.pos, CONST_ME_GROUNDSHAKER) doAreaCombatHealth(param.cid, COMBAT_PHYSICALDAMAGE, param.pos, 0, -minimo, -maximo, CONST_ME_HITAREA) param.count = param.count + 1 addEvent(spellCallback, math.random(100, 2000), param) end end end function onTargetTile(cid, pos) local param = {} param.cid = cid param.pos = pos param.count = 0 spellCallback(param) end setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Testa ai
  5. Reds postou uma resposta no tópico em Suporte Tibia OTServer
    Sim, inclusive algumas trocam de graça X vezes por mês, depende de emrpesa para empresa. Tem algumas regras do otland: We do not accept servers with modified/false information (i.e. number of online players, record and uptime). Usually such servers are instantly detected and banned from otservlist including ip ban so it is harder to add a server in the future. Adding login servers (summing online players from a few servers) and counting quit players (e.g. on trainers) is also prohibited. Outras coisas: Coloca kicktime de 15 minutos Coloca áreas de logout (PZ e etc..)
  6. Estou trazendo 1 script por semana (geralmente na terça-feira) e caso você tenha alguma sugestão, poste aqui ou mande em mensagem privada a ideia, podendo ser o da próxima semana. Olá pessoal, estou trazendo outro script para o TibiaKing, este NPC faz parte de uma série de NPC's que eu posicionei em meu servidor em locais estratégicos, concedendo bônus diferentes para os jogadores. Em seus NPC's, crie um arquivo XML e coloque o seguinte: <?xml version="1.0" encoding="UTF-8"?> <npc name="Luke" script="data/npc/scripts/speedbuff.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="152" head="95" body="95" legs="29" feet="56" addons="2" corpse="6080"/> <parameters> <parameter key="message_greet" value="Ola, voce gostaria de um bonus?" /> </parameters> </npc> E dentro da pasta de scripts dos seus NPC's crie um arquivo LUA e coloque: 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 local config ={ effectTime = 10, -- tempo em minutos maxLevel = 125, -- level maximo para receber influencer = 2, -- multiplicador da velocidade aumentada timeStorage = 319203 -- storage para o tempo } local function downSpeed(cid, speed) doChangeSpeed(cid, -speed) 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 if msgcontains(msg, "bonus") then local level = getPlayerLevel(cid) if level < config.maxLevel then if os.time() > getPlayerStorageValue(cid, config.timeStorage) then setPlayerStorageValue(cid, config.timeStorage, config.effectTime * 60 + os.time()) local speed = config.maxLevel - level doChangeSpeed(cid, speed * config.influencer) addEvent(downSpeed, 60 * config.effectTime, cid, speed * config.influencer) selfSay('Voce recebeu um bonus de velocidade.', cid) else local minutesText local secondsText local seconds = math.floor((getPlayerStorageValue(cid, config.timeStorage) - os.time()) % 60) + 1 local minutes = math.floor((getPlayerStorageValue(cid, config.timeStorage) - os.time()) / 60) minutesText = minutes .." minutos e " secondsText = seconds .." segundos." if seconds == 60 then minutes = minutes + 1 end if minutes == 0 then minutesText = "" end if seconds == 0 or seconds == 60 then if minutes > 0 then minutesText = minutes .." minutos." end secondsText = "" end selfSay('Voce ja possui o bonus, ele expira em ' ..minutesText ..secondsText, cid) end else selfSay('O bonus de velocidade so e aplicado para jogadores de level menor de que '..config.maxLevel..".", cid) end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Explicando o código: com essas configurações o NPC irá: - Conceder ao jogador 10 minutos de bônus de velocidade para jogadores level 125 ou menos. - O jogador que receber o bônus terá velocidade igual a um jogador de level 125. - Impedir o jogador de pegar o bônus diversas vezes. - Todas as configurações podem ser alteradas na variável "config" no topo do código. Qualquer dúvida deixe nos comentários e lembre de enviar a sua sugestão
  7. tem sources que não funcionam essa função para pegar atributos
  8. Estou no celular e fica ruim de ver, mas acho que tá dando problema para verificar se é casado. if getPlayerNameByGUID(getPlayerPartner(cid), false, false) ~= nil then string = string..' You are '.. (getPlayerSex(cid) == 0 and 'wife' or 'husband') ..' of '.. getPlayerNameByGUID(getPlayerPartner(cid)) ..'.' end Apaga isso, ou tenta trocar a sua verificação de nulo: if getPlayerNameByGUID(getPlayerPartner(cid), false, false) ~= nil then
  9. Reds postou uma resposta no tópico em Suporte Tibia OTServer
    Tem que liberar as portas do seu roteador
  10. são outros métodos que fazem o insert no banco, tenta encontrar outras alternativas: permitir nulos no banco
  11. O banco foi criado para não permitir nulos na coluna checkdata, provavelmente você não está passando esse dado..
  12. Acho que é uma questão de Path só
  13. Concatena certo no href pra pegar a vocação: /' . $vocation['id'] .
  14. Teria que ver os logs para entender, mas oq vc precisa é +- aquilo
  15. Tenta o outro que coloquei
  16. que erro deu no servidor? tenta assim: <img src="caminhodapastaquetaoascoisas/<?php echo getVocationName($player->getVocation(), $player->getPromotion()); ?>.jpg">
  17. coloca depois de: try { $created = $player->getCreated(); } catch (Exception $e) { $created = time()-36000;} isso: $playerVoc = getVocationName($player->getVocation(), $player->getPromotion()); e depois para puxar imagem de acordo com a voc do player, faz isso: <img src="caminhodapastaquetaoascoisas/<?php echo $playerVoc; ?>.jpg">
  18. Olá pessoa, estou aqui outra vez trazendo o código semanal, para essa semana vou apresentar uma modificação nas sources que permite que o attack speed do jogador seja modificado. Para fazer isso, é necessário primeiro compilar as sources que permitam essa funcionalidade. Então abra o arquivo player.cpp e de CTRL + F na função uint32_t Player::getAttackSpeed() const e substitua por: uint32_t Player::getAttackSpeed() const { int32_t attackSpeedValue = 0; std::string value; this->getStorage("8500", value); if (value != "-1") { attackSpeedValue = atoi(value.c_str()) * 5; } int32_t vocationAttackSpeed = vocation->getAttackSpeed(); if (attackSpeedValue > vocationAttackSpeed/2){ attackSpeedValue = vocationAttackSpeed/2; } return vocation->getAttackSpeed() - attackSpeedValue; } Lembrando que esse script foi feito e testado a partir das sources: tfs 0.4 rev 3884 e também tfs 0.4 rev 3777. Porém deve com poucas modificações deve funcionar em outras versões. O que ele faz: ele verifica o valor da storage número 8500 do jogador e faz o seguinte cálculo: attackSpeedDaVocacao - valorStorage * 5 Sendo que o máximo de speed attack que o jogador pode atingir é o dobro da configurada na sua vocação. Após isso é só compilar e utilizar em qualquer outro script, para aumentar o speed attack do jogador. Para fazer isso é só alterar o valor da storage número 8500 do player. Para utilizar isso, pode ser criada uma spell, eu fiz da seguinte maneira: 1) Na sua pasta de spells crie um arquivo e coloque isso dentro: local config = { time = 3, -- segundos que ira durar o efeito value = 100 -- quantos milisegundos / 5 que ira aumentar } function onCastSpell(cid, var) setPlayerStorageValue(cid, 8500, config.value); addEvent(finishSpell, config.time, cid) doSendMagicEffect(getPlayerPosition(cid), 11) return true end function finishSpell(cid) if (isCreature(cid)) then setPlayerStorageValue(cid, 8500, 0) doSendMagicEffect(getPlayerPosition(cid), 4) end end 2) Configure no spells.xml: <instant name="Nome da spell" words="exeta kor" lvl="25" manapercent="20" prem="1" aggressive="0" exhaustion="1000" needlearn="0" event="script" value="caminho de onde voce deixou o codigo"> <vocation id="4"/> </instant> Porém fazendo isso tem um problema, caso o jogador solte a spell e deslogue, ele ficaria para sempre com a attack speed daquela forma.. Então vamos adicionar no login.lua o seguinte: if getPlayerStorageValue(cid, 8500) ~= 0 then setPlayerStorageValue(cid, 8500, 0) end Pronto, agora você pode utilizar uma spell que aumenta o speed attack do seu personagem. Para criar itens que deem attack speed: 1) Após compilar as sources, crie um arquivo em movements e coloque o seguinte código: local items = { [2500] = 5, -- amazon armor, onde 2500 e o id da amazon armor e 5 e a quantidade de attack speed /5 do que vai ser aumentado [2499] = 10, -- amazon helmet, 2499 e o id do helmet e 10 a quantidade de attack speed/5 do que vai ser aumentado [2506] = 15 -- dragon scale helmet, igual aos de cima.. } local config = { storage = 8500, } function onEquip(cid, item, slot) local quantity = (items[item.itemid]); setPlayerStorageValue(cid, (config.storage), quantity) return true end function onDeEquip(cid, item, slot) local quantity = (items[item.itemid]) setPlayerStorageValue(cid, (config.storage), 0) return true end 2) Em movements.xml adicione: <movevent type="Equip" itemid="ID DO ITEM" slot="armor" function="onEquipItem" script="caminho do scriot" /> <movevent type="DeEquip" itemid="ID DO ITEM" slot="armor" function="onDeEquipItem" script="caminho do script" /> Note que você precisa apenas um arquivo .lua para todas as configurações de itens.. É isso ai, lembrando que as TFS testadas foram 0.4 rev 3884 e 0.4 rev 3777. Qualquer modificação que vocês quiserem para tfs 0.4, deixem nos comentários. Caso alguém não saiba compilar, sigam esse tutorial: https://tibiaking.com/forums/topic/33548-dev-c-compilando-tfs-no-windows/
  19. odeio muito php, porém lembro de que na página de personagem, é carregada a informação da vocação, provavelmente ele faz um select do personagem para verificar essas e outras informações, tem como você postar aqui a parte em que é montada as informações de personagem?
  20. Reds postou uma resposta no tópico em Suporte Tibia OTServer
    O windows não muda nada, mas nunca mexi em otx para auxiliar, o que você está seguindo para compilar?
  21. Vou postar no tibiaking de noite e coloco o link aqui, ai se você quiser diferente, comenta lá que eu adapto..
  22. como tem essa limitação, teria que fazer por talkaction por exemplo.. não sei se ficaria legal

Informação Importante

Confirmação de Termo