Ir para conteúdo

FeeTads

Membro
  • Registro em

  • Última visita

Tudo que FeeTads postou

  1. boa, o meu é assim a função: void Player::onChangeZone(ZoneType_t zone) { if(!hasFlag(PlayerFlag_IgnoreProtectionZone)) { if(zone == ZONE_PROTECTION) { if(attackedCreature) { setAttackedCreature(NULL); onTargetDisappear(false); } removeCondition(CONDITION_INFIGHT); } } g_game.updateCreatureWalkthrough(this); sendIcons(); }
  2. há algum monstro/treiner etc.. dentro do PZ ou perto do player? o battle pode contar até com monstros a 15 SQM do player.
  3. o efeito tem que ser colocado em creatureScripts creaturescripts = coisas que acontecem nos players globalEvents = coisas que acontecem no OT em GERAL então: data > creaturescripts > scripts > effectStorage.lua function sendVipEffect(cid) if not isCreature(cid) then return true end if getPlayerStorageValue(cid, 19332) > 0 then doSendMagicEffect(getThingPos(cid), 66) addEvent(sendVipEffect, 200, cid) end end function onLogin(cid) sendVipEffect(cid) return true end
  4. acho que esse erro ai é de outro script, não foi mexido nada nele. function isWeapon(uid) -- By Killua return getItemWeaponType(uid) ~= 0 end local itemDeDano = 1522 -- ID do item que irá no slot function onStatsChange(cid, attacker, type, combat, value) if not isPlayer(cid) then return false end if (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) and (combat ~= COMBAT_HEALING and value > 0) then local itemEquipado = getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid -- pega o ID do ring no slot local armaEquipadaEsquerda = getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid -- pega uid doq ta na mão esquerda local armaEquipadaDireita = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid -- pega uid doq ta na mão direita if isWeapon(armaEquipadaEsquerda) or isWeapon(armaEquipadaDireita) then -- se tiver arma na mão direita ou esquerda if itemEquipado and itemEquipado == ringDeDano then -- se tiver ring equipado E o ring for o escolhido local dano = value*0.5 -- 0.5 = 50% a mais de dano, 1 = 100% a mais.... local target = getCreatureTarget(cid) doTargetCombatHealth(cid, target, combat, -dano, -dano, 255) -- função de dar dano end end end return true end
  5. Este tópico foi movido para a seção de Suporte Otserv Alternativo consegue postar os scripts que puxam essas funções? vai ser mais facil pra averiguar
  6. funfou? algum erro no console?
  7. ai regista no XML <event type="statschange" name="RingMaisDano" event="script" value="NOME-DO-SCRIPT.lua"/> E registrar ele la no login.lua registerCreatureEvent(cid, "RingMaisDano") creatureScripts
  8. Este tópico foi movido para a seção de Suporte Otserv. pra isso seria necessário talvez uma modificação na source, mas acho que da pra fazer com movements de Equip item, ou um creatureScripts de StatsChange, mas stats change é meio "pesadinho" pro servidor. function isWeapon(uid) -- By Killua return getItemWeaponType(uid) ~= 0 end local ringDeDano = 1522 -- ID do ring function onStatsChange(cid, attacker, type, combat, value) if not isPlayer(cid) then return false end if (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) and (combat ~= COMBAT_HEALING and value > 0) then local ringEquipado = getPlayerSlotItem(cid, CONST_SLOT_RING).itemid -- pega o ID do ring no slot local armaEquipadaEsquerda = getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid -- pega uid doq ta na mão esquerda local armaEquipadaDireita = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid -- pega uid doq ta na mão direita if isWeapon(armaEquipadaEsquerda) or isWeapon(armaEquipadaDireita) then -- se tiver arma na mão direita ou esquerda if ringEquipado and ringEquipado == ringDeDano then -- se tiver ring equipado E o ring for o escolhido local dano = value*0.5 -- 0.5 = 50% a mais de dano, 1 = 100% a mais.... local target = getCreatureTarget(cid) doTargetCombatHealth(cid, target, combat, -dano, -dano, 255) -- função de dar dano end end end return true end
  9. você tem essa modificação na source? caso não tenha, faz uma busca no teu OT por "getPlayerBalance" E "doPlayerSetBalance" ve se existe essas funções na em alguma LIB sua, ou na sua source. obs: getPlayerBalance e setBalance são funções da source, tenta ver se existem na sua source. caso não tenha, procura por "doPlayerRemoveMoney" caso tenha essas funções, fazer um script é bem simples, PORÉM é necessário ter elas
  10. FeeTads postou uma resposta no tópico em Suporte Tibia OTServer
    Este tópico foi movido para a seção de Suporte Otserv. veja o tutorial do luan luciano CLICANDO AQUI, tenta ver se o make list que ele passou do github funciona. se não der certo, tenta esse: CMakeLists.txt eu uso esse num server global, de ubuntu 20, não sei se ira funcionar, e não sei como funciona pra ubuntu 16. outra, pq não atualiza sua source pra funcionar em ubuntu 20?
  11. tenho um script que funciona, porém eh necessário vc criar uma coluna na DB chamada "online_bonus", pq ele checa no máximo 4 por IP. O que acho valido pois a otservList só aceita 4 IP's validos, e não deixa que abram varios MC's no mesmo PC, isso meio que vai ajudar o servidor. local reward = 2157 --id do item que vai dar local quantidade = 1 -- quantidade de item (isso só serve pra item stackavel, se o item não for stackavel tipo armadura, não vai adiantar colocar numeros maiores) function addOnlineBonus(cid, horas, bonus_contador, bonus_max) if not isPlayer(cid) then return false end if getPlayerIp(cid) == 0 or not isCreature(cid) then return true end setPlayerStorageValue(cid, bonus_contador, getPlayerStorageValue(cid, bonus_contador) + 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Por completar uma hora online sem deslogar, você ganhou 1 Online Bônus. Total: ".. getPlayerStorageValue(cid,bonus_contador) .. ".") if getPlayerStorageValue(cid, bonus_contador) >= bonus_max then doPlayerSendTextMessage(cid, 19, "Seus ".. bonus_max .." Online Bônus foram convertidos em 1 Premium Account!") doPlayerAddItem(cid, reward, quantidade) -- ITEM QUE VAI DAR AO COMPLETAR A QUANTIDADE DE HORAS setPlayerStorageValue(cid, bonus_contador, 0) end addEvent(addOnlineBonus, horas * 3600 * 1000, cid, horas, bonus_contador, bonus_max) end function onLogin(cid) registerCreatureEvent(cid, "onlinebonuslogout") local checkIP = getPlayerIp(cid) local players = {} for _, pid in pairs (getPlayersOnline()) do if getPlayerIp(pid) == checkIP then table.insert(players, pid) end end if #players < 5 then local func = db.query or db.executeQuery func('UPDATE players set online_bonus = 1 where id = '..getPlayerID(cid)) end local result = db.getResult('SELECT `online_bonus` FROM `players` WHERE `id` = ' ..getPlayerID(cid)) local online = 0 if result:getID() ~= -1 then online = tonumber(result:getDataInt('online_bonus')) result:free() end if online == 0 then addEvent(function() doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "[Online Bonus]: Você já tem 4 chares logados com o mesmo IP, este não irá contar!") return true end, 1100) else local bonus_contador = 72702 -- Storage que vai guardar quantos online bonus o char possui. local horas = 1 -- Quantidade de horas o char precisa ficar logado pra receber cada online bonus. local bonus_max = 24 -- HORAS ONLINE Quantidade de bonus que o char precisa atingir para ganhar 1 dia de premium account, zerando o contador. if getPlayerStorageValue(cid, bonus_contador) > 0 then doPlayerSendTextMessage(cid,22,"Você está com: " .. getPlayerStorageValue(cid,bonus_contador) .. " Online Bônus. Ao completar 24 você ganhará 1 premium points!") else setPlayerStorageValue(cid, bonus_contador, 0) addEvent(function() doPlayerSendTextMessage(cid,19,"Você está com: 0 Online Bônus. Ao completar 24h online você ganhará 1 premium points!") end, 1000) end addEvent(addOnlineBonus, horas * 3600 * 1000, cid, horas, bonus_contador, bonus_max) end return true end function onLogout(cid) local result = db.getResult('SELECT `online_bonus` FROM `players` WHERE `id` = ' ..getPlayerID(cid)) local online = 0 if result:getID() ~= -1 then online = tonumber(result:getDataInt('online_bonus')) result:free() end local func = db.query or db.executeQuery func('UPDATE players set online_bonus = 0 where id = '..getPlayerID(cid)) return true end adicionar as tags no creaturescripts.xml <!-- Online Bonus --> <event type="login" name="onlinebonus" event="script" value="onlinebonus.lua"/> <event type="logout" name="onlinebonuslogout" event="script" value="onlinebonus.lua"/>
  12. mas isso é literalmente o life leech, life leech retorna vida em todo hit que vc acerta, mais facil doq fazer por onHealthChange mas caso queira fazer por isso coloca pra diferenciar creature ~= attacker, e ve se o type é ~= lifeLoss
  13. deu algum erro no console? pq testei aqui e funcionou perfeitamente.
  14. provavelmente vc tem outro script de "look" ja funcionando, e está sobscrevendo após esse
  15. Este tópico foi movido para a seção de Suporte Otserv. eu uso o comando bless da pra vc tentar modificar pra NPC cada bless, ou um que de todas: local bless = {1, 2, 3, 4, 5} local cost = 80000 function onSay(cid, words, param) for i = 1, table.maxn(bless) do if(getPlayerBlessing(cid, bless[i])) then doPlayerSendCancel(cid, "Voce ja tem todas as bless.") return TRUE end end if(getPlayerMoney(cid) >= cost and doPlayerRemoveMoney(cid, cost) == TRUE) then for i = 1, table.maxn(bless) do doPlayerAddBlessing(cid, bless[i]) end doCreatureSay(cid, "You are now blessed!" ,19) doSendMagicEffect(getPlayerPosition(cid), 49) else doPlayerSendCancel(cid, "Voce precisa de 80k NA BACKPACK para a bless.") end return TRUE end
  16. seria o ideal, fiz fixo, pq adicionar no configManager ou luaScript pra add por comando, ou ate no config.lua mesmo, MASSSSS como isso daria um trabalho mais chato, fiz fixo mesmo. então, basicamente duplicar a função tipo assim: lugar 1: int x1 = //POSIÇÃO X SUPERIOR ESQUERDA int y1 = 1000//POSIÇÃO Y SUPERIOR ESQUERDA int x2 = 1000//POSIÇÃO X INFERIOR DIREITA int y2 = 1000//POSIÇÃO Y INFERIOR DIREITA //essas 4 posições formam o quadrado int z = 7//POS EM Z; for(int i = x1; i <= x2; i++){ for(int j = y1; j <= y2; j++){ if (posi.x == i && posi.y == j && posi.z == z){ return true; } } } ai pra nova area, add um lugar 2 assim: int novox1 = //POSIÇÃO X SUPERIOR ESQUERDA int novoy1 = 3000//POSIÇÃO Y SUPERIOR ESQUERDA int novox2 = 3000//POSIÇÃO X INFERIOR DIREITA int novoy2 = 3000//POSIÇÃO Y INFERIOR DIREITA //essas 4 posições formam o quadrado int novoz = 7//POS EM Z; for(int i = novox1; i <= novox2; i++){ for(int j = novoy1; j <= novoy2; j++){ if (posi.x == i && posi.y == j && posi.z == z){ return true; } } } você pode fazer o "int x1 = " ser um vetor tbm, ai da pra add varias posições em apenas uma variavel, massss ai precisa de outro for pra checar kkkkkkk
  17. FeeTads postou uma resposta no tópico em Suporte Tibia OTServer
    Este tópico foi movido para a seção de Suporte Otserv. ve se seu OT ta com o modo de non PVP, digita no god /mode 2
  18. cria um arquivo ou coloca dentro de algum que ja exista, EXEMPLO: data > creaturescripts > scripts > onLook.lua Cola esse código dentro do arquivo. depois vai em creaturescripts.xml data > creaturescripts > creaturescripts.xml cola essa tag: <event type="look" name="newOnLook" script="onLook.lua"/> <event type="login" name="newlook" event="script" value="onLook.lua" /> ai da /reload creature e reloga, que ja vai aparecer. OBS: CHECA se já não existe algum arquivo de "look", pq pode sobescrever e tirar algo que vc ja usa. onde ta isso ^ bota isso: function onLogin(cid) registerCreatureEvent(cid, "newOnLook") registerCreatureEvent(cid, "newlook") return true end
  19. testou esse script que fiz e deu reload talk? local config = { storage = 19400, -- storage em que será salvo o tempo cor = "red", -- de acordo com o constant.lua da lib tempo = 3, -- em minutos price = 20000, -- quantidade de dinheiro que irá custar level = 10 -- level pra poder utilizar o broadcast } function onSay(cid, words, param) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if getPlayerLevel(cid) >= config.level then if getPlayerStorageValue(cid, config.storage) - os.time() <= 0 then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo*10)) local pid = getPlayersOnline() for i=1, #pid do doPlayerSendTextMessage(pid[i], MESSAGE_STATUS_CONSOLE_RED, "[/all]: ["..getCreatureName(cid).."]: "..param.."") end else doPlayerSendCancel(cid, "You don't have " ..config.price.. " gp's for broadcasting.") return true end else doPlayerSendCancel(cid, "You have to wait " ..(getPlayerStorageValue(cid, config.storage) - os.time()).. " seconds until you can broadcast again.") return true end else doPlayerSendCancel(cid, "You have to be level " ..config.level.. " or more in order to use broadcast.") end return true end
  20. sua source nao deve ter a função de mandar no default então, vai ter que fazer isso de outra forma Tenta assim: local config = { storage = 19400, -- storage em que será salvo o tempo cor = "red", -- de acordo com o constant.lua da lib tempo = 3, -- em minutos price = 20000, -- quantidade de dinheiro que irá custar level = 10 -- level pra poder utilizar o broadcast } function onSay(cid, words, param) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if getPlayerLevel(cid) >= config.level then if getPlayerStorageValue(cid, config.storage) - os.time() <= 0 then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo*10)) local pid = getPlayersOnline() for i=1, #pid do doPlayerSendTextMessage(pid[i], MESSAGE_STATUS_CONSOLE_RED, "[/all]: ["..getCreatureName(cid).."]: "..param.."") end else doPlayerSendCancel(cid, "You don't have " ..config.price.. " gp's for broadcasting.") return true end else doPlayerSendCancel(cid, "You have to wait " ..(getPlayerStorageValue(cid, config.storage) - os.time()).. " seconds until you can broadcast again.") return true end else doPlayerSendCancel(cid, "You have to be level " ..config.level.. " or more in order to use broadcast.") end return true end
  21. meio estranho, pq isso faz mandar no default, tenta ver se aparece algum erro no console, ou tenta reabrir o OT.
  22. Tenta assim: local config = { storage = 19400, -- storage em que será salvo o tempo cor = "red", -- de acordo com o constant.lua da lib tempo = 3, -- em minutos price = 20000, -- quantidade de dinheiro que irá custar level = 10 -- level pra poder utilizar o broadcast } function onSay(cid, words, param) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if getPlayerLevel(cid) >= config.level then if getPlayerStorageValue(cid, config.storage) - os.time() <= 0 then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo*10)) doBroadcastMessage("[/all]: ["..getCreatureName(cid).."]: "..param.."", MESSAGE_STATUS_CONSOLE_RED) --pra mostrar em VERMELHO pra todos no default --doBroadcastMessage("[/all]: ["..getCreatureName(cid).."]: "..param.."", MESSAGE_STATUS_CONSOLE_ORANGE) --pra mostrar em LARANJA pra todos no default --doBroadcastMessage("[/all]: ["..getCreatureName(cid).."]: "..param.."", MESSAGE_STATUS_CONSOLE_BLUE) --pra mostrar em AZUL pra todos no default else doPlayerSendCancel(cid, "You don't have " ..config.price.. " gp's for broadcasting.") return true end else doPlayerSendCancel(cid, "You have to wait " ..(getPlayerStorageValue(cid, config.storage) - os.time()).. " seconds until you can broadcast again.") return true end else doPlayerSendCancel(cid, "You have to be level " ..config.level.. " or more in order to use broadcast.") end end
  23. Este tópico foi movido para a seção de Suporte Otserv. Essa é a aba de donate ou é um shop? Esses Tibia coins caem na bolsa do personagem? Pq podem ser diferentes as páginas
  24. funcionou 100%?

Informação Importante

Confirmação de Termo