Tudo que premii postou
-
Erro no script eggs de exp
Olá, como não informou a versão que utiliza seu servidor, deduzi ser 0.4 faça o teste com esse abaixo: Script aqui local potions = { [6541] = {needLevel = 100, rate = 3.0, duration = 1800}, [6542] = {needLevel = 200, rate = 5.0, duration = 1800}, [6543] = {needLevel = 300, rate = 7.0, duration = 1800}, [6544] = {needLevel = 400, rate = 9.0, duration = 1800}, [6545] = {needLevel = 500, rate = 11.0, duration = 1800}, [2328] = {needLevel = 550, rate = 13.0, duration = 1800}, } if not expPotions then expPotions = {playerData = {}} end function expPotions:onUse(cid, item, fromPosition, itemEx, toPosition) local itemId = item.itemid local potion = potions[itemId] if not potion then return false end if getPlayerLevel(cid) < potion.needLevel then doPlayerSendCancel(cid, ('Você precisa ser level %d+ para usar esta potion.'):format(potion.needLevel)) return true end local guid = getPlayerGUID(cid) -- Verifica se o playerData do player existe if not self.playerData[guid] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, 'É necessário relogar para atualizar.') return true end local expData = self.playerData[guid][itemId] -- Verifica se a entrada para o item existe if not expData then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, 'É necessário relogar para atualizar.') return true end local now = os.time() if expData.duration > now then doCreatureSay(cid, 'Aguarde o bônus atual acabar para usar novamente.', TALKTYPE_ORANGE_1, false, cid) return true end expData.rate = potion.rate -- aplica apenas o novo bônus expData.duration = now + potion.duration doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, ('Agora você tem +%d%% de experiência por %s.'):format( potion.rate * 100, string.diff(potion.duration, true) )) doRemoveItem(item.uid, 1) return true end function expPotions:onLogin(cid) local guid = getPlayerGUID(cid) self.playerData[guid] = {} for itemId in pairs(potions) do self.playerData[guid][itemId] = {rate = 0, duration = 0} end return true end function expPotions:getCombo(cid) local playerData = self.playerData[getPlayerGUID(cid)] local potionsCombo = 1 if playerData then for _, expData in pairs(playerData) do potionsCombo = potionsCombo + expData.rate end end return potionsCombo end function expPotions:onSay(cid, words, param) local str = 'Experience Potion Combos:\n' local playerData = self.playerData[getPlayerGUID(cid)] if playerData then for itemId, expData in pairs(playerData) do str = str .. ('\n%s - %d%%'):format(getItemInfo(itemId).name, expData.rate * 100) end end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str) return true end
-
Erro Sql ao abrir otserver
Olá, verifica se no seu config.lua existe a opção sqlHost = "127.0.0.1" ou sqlHost = "localhost" teste uma dessas e veja se ocorre diferença, também verifique seu usuário e senha do mysql, pelo erro indicado obteve "Acesso negado", é sempre bom configurar com senha o phpmyadmin. No aguardo se coneguiu resolver...
-
error real castle
Olá, uma recomendação é passar a utilizar o chatGPT para resolver esses erros de "Nil Value" envie parte do código e terá a possível solução, talvez seu código esteja incompleto ou com indentação errada... faz o teste.
- [OTX 2.x / 8.60] - OTSERVER
- [OTX 2.x / 8.60] - OTSERVER
-
[OTX 2.x / 8.60] - OTSERVER
Boa tarde á todos, eu baixei a source pelo github e abri pelo visual studio 2017, pediu para fazer upgrade pra uma boost mais atualizada do windows 10 etc, eu selecionei para não fazer o update, utilizei a boost 1_71_0 do próprio OTX e consegui compilar sem problemas ou erros irei deixar abaixo o download do executável já compilado e o scan no vírus total, peço desculpas caso esteja errado não tenho muita prática com tópicos. OTX Windows 64 bits LINK: https://www.mediafire.com/file/ce2vwbuopgyakro/TheOTXServer-64-bits-windows.rar/file Scan: https://www.virustotal.com/gui/file/070c1fe14de7d967d2c210fbb890ffb9c0650a453c52d5f3c1b4a1aedead2a8c?nocache=1
-
TFS 1.5 {8.6} Nekiro Downgrade com montarias e modal window apenas para OTClient.
Me tira essa dúvida, é possível conseguir essa DLL ou apenas comprando de quem sabe fazer ?
-
TFS 1.5 {8.6} Nekiro Downgrade com montarias e modal window apenas para OTClient.
Boa noite, existe a possibilidade dessa função mount e modal window ser adicionada no old client da cipsoft (via DLL) ? Agradeço a atenção. 😄
-
AJUDA COM EFEITOS
Boa noite, pelo que entendi na versão 8.0 esses efeitos não existem na source do servidor e no cliente do tibia(8.0) você vai precisar adicionar manualmente e dá um trabalho considerável, existem tutoriais aqui no fórum mais focado pra versão 8.6 não tenho certeza se a base é a mesma mas poderia usar como "guia" pra entender oque é preciso fazer
-
Bom galera nao sei se aki pode postar isso mais la vou eu sou novo aki e tenho essas duvidas no meu server
Olá, poste o arquivo login.lua que está localizado na pasta creaturescripts/scripts
-
(Resolvido)-=[TFS]=- 0.4 8.60 Quando player usa magia em area ou mata um player com sword wand rod etc servidor trava volta trava e volta trava no jogo depois volta eu não sei o que é isso
Olá, testa remover ou comentar essa linha e verifica se o erro persiste. único script que possui statschange relacionado ao ataque. <event type="statschange" name="Critical" event="script" value="critical.lua"/>
-
SCRIPT EXP HIT PARA TFS 1.X
.Qual servidor ou website você utiliza como base? Servidor styller tfs 1.5 Qual o motivo deste tópico? Reescrever script de EXP POR HIT de 0.4 para tfs 1.x Está surgindo algum erro? Se sim coloque-o aqui. Você tem o código disponível? Se tiver publique-o aqui: -- CONFIGURAÇÕES DE EXPERIENCIA -- useStages = true -- Usar sistema de Stages , true/false premiumMultipliqueExp = 1.1 -- Players Premiums terão exp multiplicada, caso não querer deixe 1. rateExp = 500 -- Exp caso não for usar stages. --TABELA DOUBLE EXP. PARA EVENTO --local stages = { -- ["DELEVEL-ATELEVEL"] = EXP, (OBS: NUNCA REPETIR O MSM NUMERO, SEMPRE COLOCAR UM A MAIS.) --["1-23"] = 100, --["24-30"] = 50, --["31-44"] = 36, --["45-150"] = 20, --["151-220"] = 16, --["221-240"] = 12, --["241-260"] = 8, --["261-290"] = 4, --["291-370"] = 2, --["371-500"] = 1.8, --["501-2000"] = 1.2, --} --TABELA ORIGINAL, VOLTAR APÓS DOUBLE EXP. local stages = { -- ["DELEVEL-ATELEVEL"] = EXP, (OBS: NUNCA REPETIR O MSM NUMERO, SEMPRE COLOCAR UM A MAIS.) ["1-23"] = 100, ["24-30"] = 25, ["31-44"] = 18, ["45-150"] = 10, ["151-220"] = 8, ["221-240"] = 6, ["241-260"] = 4, ["261-290"] = 2, ["291-370"] = 1, ["371-500"] = 0.9, ["501-2000"] = 0.6, } ultimateExp = 0.1 -- exp que vai usar caso o level do player não tiver mais na tabela . -- CONFIGURAÇÕES DA PARTY partyPorcent = 1 -- Quantos Porcento da exp vai para os membros da party levelBlockParty = 40 -- Diferença Maxima de Level permitida para membro da party ganhar exp. expShareRadiusX = 30 -- Distancia maxima permitida no eixo X para membro da party ganhar exp. expShareRadiusY = 30 -- Distancia maxima permitida no eixo Y para membro da party ganhar exp. expShareRadiusZ = 1 -- Distancia maxima permitida no eixo Z para membro da party ganhar exp. -- CONFIGURAÇÕES DE RINGS -- local rings = { -- [ID DO ANEL] = EXP MULTIPLICADA POR X EXP. [12673] = 1.5, } -- FIM DAS CONFIGURAÇÕES -- function CalculeExp(monsterhp, exptotal, hit) hit = hit <= monsterhp and math.ceil(exptotal * hit / monsterhp) or 0 return hit < 0 and 0 or hit end function isSummon(cid) return getCreatureMaster(cid) end function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and isMonster(cid) then if getCreatureStorage(cid, 50001) ~= 1 then doCreatureSetStorage(cid, 50002, getMonsterInfo(getCreatureName(cid)).experience * rateExp) doCreatureSetStorage(cid, 50001, 1) end end if type == STATSCHANGE_HEALTHLOSS then if isMonster(cid) then if isCreature(attacker) then local _cid = isSummon(attacker) and getCreatureMaster(attacker) or attacker if isPlayer(_cid) then if useStages then for strstage, experience in pairs(stages) do tabstage = string.explode(strstage, "-") if getPlayerLevel(_cid) >= tonumber(tabstage[1]) and getPlayerLevel(_cid) <= tonumber(tabstage[2]) then ultimateExp = experience end end experienceRate = ultimateExp else experienceRate = rateExp end local expgain = CalculeExp(getCreatureMaxHealth(cid), getMonsterInfo(getCreatureName(cid)).experience * experienceRate, value) if getCreatureStorage(cid, 50002) > 0 then if getCreatureStorage(cid, 50002) - expgain < 0 then expgain = getCreatureStorage(cid, 50002) end doCreatureSetStorage(cid, 50002, getCreatureStorage(cid, 50002) - expgain) local ringexp = 1 for idring, expring in pairs(rings) do if getPlayerSlotItem(_cid, 9).itemid == idring then ringexp = expring break end end local premiumMultipliqueExp = isPremium(_cid) and premiumMultipliqueExp or 1 expgain = expgain * ringexp * premiumMultipliqueExp local party = false if isInParty(_cid) and canUseSharedExperience(_cid) and isPartySharedExperienceActive(_cid) then local partyMembers = getPartyMembers(getPartyLeader(_cid)) local sorc,druid,paladin,knight = 0,0,0,0 for i = 1, #partyMembers do if isSorcerer(partyMembers[i]) then sorc = 1 else if isDruid (partyMembers[i]) then druid = 1 else if isPaladin (partyMembers[i]) then paladin = 1 else if isKnight (partyMembers[i]) then knight = 1 end end end end end local soma = knight + druid + sorc + paladin if (soma == 1) then partyExpMultiplier = 0.1 else if (soma == 2) then partyExpMultiplier = 0.8 else if (soma == 3) then partyExpMultiplier = 0.9 else if (soma == 4) then partyExpMultiplier = 1.1 end end end end local partyMembers, expParty = getPartyMembers(getPartyLeader(_cid)), expgain / partyPorcent for indice, partyMember in pairs(partyMembers) do attackerLevel, partyLevel = getPlayerLevel(_cid), getPlayerLevel(partyMember) attackerPos, partyPos = getThingPos(_cid), getThingPos(partyMember) x = false if math.abs(attackerLevel - partyLevel) > levelBlockParty then x = true elseif math.abs(attackerPos.x - partyPos.x) > expShareRadiusX then x = true elseif math.abs(attackerPos.y - partyPos.y) > expShareRadiusY then x = true elseif attackerPos.z ~= partyPos.z then x = true elseif _cid == partyMember then x = true end if x then partyMembers[indice] = nil end end if #partyMembers ~= 0 then expgain = math.ceil(expgain * partyExpMultiplier) expParty = math.ceil(expgain * partyPorcent) expmember = math.ceil(expParty) for _, member in pairs(partyMembers) do if member ~= _cid then doPlayerSendTextMessage(member, 12, "You received "..expmember.." party exp.") doPlayerAddExp(member, expmember) end end doPlayerSendTextMessage(_cid, 12, "You gain "..expgain.." exp.") doPlayerAddExp(_cid, expgain + expParty) party = true else party = false end end if not party then doPlayerAddExp(_cid, expgain) doSendAnimatedText(getThingPos(_cid), expgain, 215) end end end end end end return true end function onCombat(cid, target) if isMonster(target) and not isSummon(target) and not isPlayer(target) then registerCreatureEvent(target, "ExpGain") end return true end Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
-
[Castle War 24H] Conquiste o trono!
Para aqueles que teve problemas em definir as posições do Castle para mover os players que não fossem donos do Castle é bem simples como nosso amigo Henrique Freitas disse: {x = xxx, y = xxx, z = 1}, {x = xxx, y = xxx, z = 7} selecione um quadrado em volta do castelo e marque duas posições 1° do canto superior esquerdo e 2° do canto inferior direito. Espero ter ajudado.
- Addon/Mount para Shopsystem por Storage
- [Source] Comando "/reload all" para TFS 1.0
-
Tibia | Warcraft. [RPG]
uma dúvida tentei abrir o mapa aqui e o items.otb do meu rme não foi... poderia disponibilizar o seu ? Obrigado pela atenção.
- ShopGuild Points 100% add em player offline. Atualizado