
Pedrok22
Membro
-
Registro em
-
Última visita
Histórico de Curtidas
-
Pedrok22 deu reputação a xWhiteWolf em Experience Weapon SystemEai galera, hoje eu to trazendo pra vocês o meu Experience Weapon System. Pra quem não conhece é um sistema em que conforme você vai matando os monstros sua arma vai adquirindo parte da experiencia e upando de nível junto com você!
Eu abri um tópico pra sugestões mas os players foram tão criativos que eu decidi seguir meus instintos e fazer da minha própria maneira se não ia ficar muito ruim pra servers que não fossem derivados.
Testado em TFS 0.3.6 mas deve funcionar em qualquer um que tenha getThing(Pos) e onAttack e onKill ;]
Foi decidido por mim então fazer da seguinte maneira:
• Axes/ Swords/ Bows/ Crossbows:
Tem 5% de chance (pra cada nivel) de ferir gravemente o oponente e deixar ele sangrando, o nível do ferimento é proporcional ao nível da arma.
• Clubs:
Tem 5% de chance (pra cada nivel) de bater com tanta força que faça todos ao redor sentirem o tremor do seu ataque e levarem um dano baseado no nivel da arma e no ataque da mesma.
• Wands/ Rods:
Tem 5% de chance (pra cada nivel) de retirar uma quantidade de mana do player (proporcional ao nivel da arma) e ficar recuperando mana mais rapidamente durante 5 segundos após isso
Dito isso vamos ao que interessa:
Adiciona essas duas linhas no seu creaturescripts.xml:
<event type="kill" name="itemexp" script="itemexp.lua"/> <event type="attack" name="conditionitem" script="conditionitem.lua"/> e no login.lua:
--------------- Experience System ---------------- registerCreatureEvent(cid,"itemexp") registerCreatureEvent(cid,"conditionitem") Agora crie um arquivo em data\lib\ chamado 037 - Experience System.lua e coloque isso dentro dele:
Feito isso crie um arquivo em creaturescripts\scripts chamado itemexp.lua e adicione isso daqui:
Agora crie outro arquivo em creaturescripts\scripts, adicione isso daqui nele e chame de conditionitem.lua:
Agora configurando:
Bom, é isso aí, a minha idéia era trazer um pouco a mais de RPG e fazer o pessoal pensar 2x antes de sair trocando suas armas pela primeira que ele dropa que tenha + ataque que a dele pois assim ele passa a ter que valorizar mais os itens que já possui a um bom tempo;
Outro motivo é que agora os items vão valer mais e agora seu server vai ter mais movimento nas trocas ;]
Espero que tenham gostado e qualquer coisa é só falar nos comentários. Abraço do lobinho.
Ps: aqui tem duas fotinhas mas o resto só instalando mesmo porque tem bastante coisa pra mostrar.
E lembrando, se te ajudei clica em Gostei aqui embaixo. Fuis
-
Pedrok22 deu reputação a najatheus em Sistema de roleta ( Tfs 1.x )Sistema funciona da seguinte maneira, ao clicar na alavanca, vai gerar um numero de 1 a quantidade de mesa ou piso que for configurado na tabela, esse numero sera a posição do item até o ponto que o player vai receber o item, assim si o player tirar o menor numero possivel ele podera ter a sorte de receber os stacks do items, vou estar deixando um video aqui em baixo mostrando o sistema
agora vamo instalar o codigo :
Em data/actions/script/, crie um arquivo chamado roleta.lua, dentro dele coloque :
local configuration_table = { storage_pos_item = 0; -- não mexa level_requeriment = { -- requimento para poder girar alavanca min = 1; max = 100; }; count = 0; -- não mexa count_gire_item = 0; bag_id = 1991; count_remove = 0; -- não mexa floor_id_or_table = 10449; -- id da mesa ou piso que vão ficar os item por cima items = {3000, 2012, 13042, 13045, 13047, 13051, 13044, 13041}; -- items da roleta que vai ser usado na roleta effect_item = 8; -- efeito de quando estiver gerando o item effect_addItem = 1; -- efeito de qnd o player receber o item effect_addItem_remove = 32; -- efeito de qnd o item for pro slot do player effect_removeItem = 36; -- efeito de qnd for remover os item da mesa ou piso time_create_item = 200; -- tempo para criar um a um item na mesa ou piso time_calcule_pos_item = 300; -- tempo para mover o item para a proxima posição time_count_calcule_pos_item = 1600; -- tempo para começar a mover o item ( obs o calculo min tem que ser a quantidade de mesa que vai ter x o tempo time_create_item) position = { -- configuração dos movimentos e posição create_item = { -- posição para criar os items [1] = {x = 981, y = 945, z = 7}; [2] = {x = 981, y = 946, z = 7}; [3] = {x = 982, y = 945, z = 7}; [4] = {x = 982, y = 946, z = 7}; [5] = {x = 983, y = 945, z = 7}; [6] = {x = 983, y = 946, z = 7}; [7] = {x = 984, y = 945, z = 7}; [8] = {x = 984, y = 946, z = 7}; }; roleta = { -- giros da roleta [1] = { [1] = {x = 0, y = 1, z = 0}; [2] = {x = 1, y = -1, z = 0}; [3] = {x = 0, y = 1, z = 0}; [4] = {x = 1, y = -1, z = 0}; [5] = {x = 0, y = 1, z = 0}; [6] = {x = 1, y = -1, z = 0}; [7] = {x = 0, y = 1, z = 0}; [8] = {x = 3, y = 0, z = 0}; }; [2] = { [1] = {x = 0, y = 0, z = 0}; [2] = {x = 1, y = -1, z = 0}; [3] = {x = 0, y = 1, z = 0}; [4] = {x = 1, y = -1, z = 0}; [5] = {x = 0, y = 1, z = 0}; [6] = {x = 1, y = -1, z = 0}; [7] = {x = 0, y = 1, z = 0}; [8] = {x = 3, y = 0, z = 0}; }; [3] = { [1] = {x = 0, y = 0, z = 0}; [2] = {x = 0, y = 0, z = 0}; [3] = {x = 0, y = 1, z = 0}; [4] = {x = 1, y = -1, z = 0}; [5] = {x = 0, y = 1, z = 0}; [6] = {x = 1, y = -1, z = 0}; [7] = {x = 0, y = 1, z = 0}; [8] = {x = 3, y = 0, z = 0}; }; [4] = { [1] = {x = 0, y = 0, z = 0}; [2] = {x = 0, y = 0, z = 0}; [3] = {x = 0, y = 0, z = 0}; [4] = {x = 1, y = -1, z = 0}; [5] = {x = 0, y = 1, z = 0}; [6] = {x = 1, y = -1, z = 0}; [7] = {x = 0, y = 1, z = 0}; [8] = {x = 3, y = 0, z = 0}; }; [5] = { [1] = {x = 0, y = 0, z = 0}; [2] = {x = 0, y = 0, z = 0}; [3] = {x = 0, y = 0, z = 0}; [4] = {x = 0, y = 0, z = 0}; [5] = {x = 0, y = 1, z = 0}; [6] = {x = 1, y = -1, z = 0}; [7] = {x = 0, y = 1, z = 0}; [8] = {x = 3, y = 0, z = 0}; }; [6] = { [1] = {x = 0, y = 0, z = 0}; [2] = {x = 0, y = 0, z = 0}; [3] = {x = 0, y = 0, z = 0}; [4] = {x = 0, y = 0, z = 0}; [5] = {x = 0, y = 0, z = 0}; [6] = {x = 1, y = -1, z = 0}; [7] = {x = 0, y = 1, z = 0}; [8] = {x = 3, y = 0, z = 0}; }; [7] = { [1] = {x = 0, y = 0, z = 0}; [2] = {x = 0, y = 0, z = 0}; [3] = {x = 0, y = 0, z = 0}; [4] = {x = 0, y = 0, z = 0}; [5] = {x = 0, y = 0, z = 0}; [6] = {x = 0, y = 0, z = 0}; [7] = {x = 0, y = 1, z = 0}; [8] = {x = 3, y = 0, z = 0}; }; [8] = { [1] = {x = 0, y = 0, z = 0}; [2] = {x = 0, y = 0, z = 0}; [3] = {x = 0, y = 0, z = 0}; [4] = {x = 0, y = 0, z = 0}; [5] = {x = 0, y = 0, z = 0}; [6] = {x = 0, y = 0, z = 0}; [7] = {x = 0, y = 0, z = 0}; [8] = {x = 3, y = 0, z = 0}; }; } } } local function createItemPos() if(configuration_table.count >= #configuration_table.position.create_item)then configuration_table.count = 0 return end configuration_table.count = configuration_table.count + 1 local item = Game.createItem(configuration_table.items[math.random(1, #configuration_table.items)], 1, configuration_table.position.create_item[configuration_table.count]) local pos_item = item:getPosition() pos_item:sendMagicEffect(configuration_table.effect_item) item:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, "Item do evento da roleta") addEvent(createItemPos, configuration_table.time_create_item) end local function removeItemPos() if(configuration_table.count_remove >= #configuration_table.position.create_item)then configuration_table.count_remove = 0 return nil end configuration_table.count_remove = configuration_table.count_remove + 1 local tile = Tile(configuration_table.position.create_item[configuration_table.count_remove]) if not tile then return nil end local item = tile:getTopVisibleThing() if not item then return nil end if(item:getId() == configuration_table.floor_id_or_table)then return removeItemPos() end item:getPosition():sendMagicEffect(configuration_table.effect_removeItem) item:remove() removeItemPos() end local function addItemPlayer(player_uid) local player = Player(player_uid) if not player then return nil end local tile = Tile(configuration_table.storage_pos_item) if not tile then return nil end local item = tile:getTopVisibleThing() if not item then return nil end local player_pos = player:getPosition() local item_pos = item:getPosition() local bag = player:addItem(configuration_table.bag_id, 1, true, 1, 3) bag:addItem(item:getId(), item:getCount(), true, 1, 3) player_pos:sendMagicEffect(configuration_table.effect_addItem) item_pos:sendMagicEffect(configuration_table.effect_addItem_remove) item:remove(item:getCount()) end local function calculePosItem(value, player_uid) if(configuration_table.count_gire_item >= #configuration_table.position.create_item)then removeItemPos() addItemPlayer(player_uid) configuration_table.count_gire_item = 0 return nil end configuration_table.count_gire_item = configuration_table.count_gire_item + 1 local tile = Tile(configuration_table.position.create_item[configuration_table.count_gire_item]) if not tile then return nil end local item = tile:getTopVisibleThing() if not item then return nil end if(item:getId() == configuration_table.floor_id_or_table)then return nil end local pos = item:getPosition() local item_pos_x = pos.x local item_pos_y = pos.y local item_pos_z = pos.z local pos_ = configuration_table.position.roleta[value] local position = Position(item_pos_x + pos_[configuration_table.count_gire_item].x, item_pos_y + pos_[configuration_table.count_gire_item].y, item_pos_z) if not position then return nil end configuration_table.storage_pos_item = position item:moveTo(position) addEvent(calculePosItem, configuration_table.time_calcule_pos_item, value, player_uid) end function onUse(player, item, fromPosition, target, toPosition, isHotkey) if(player:getLevel() > configuration_table.level_requeriment.max)then return(not(player:sendTextMessage(MESSAGE_INFO_DESCR, player:getName() .. " your level(" .. player:getLevel() .. ") needs to be bigger(" .. configuration_table.level_requeriment.max .. ")"))) end if(player:getLevel() < configuration_table.level_requeriment.min)then return(not(player:sendTextMessage(MESSAGE_INFO_DESCR, player:getName() .. " your level(" .. player:getLevel() .. ") needs to be smaller(" .. configuration_table.level_requeriment.min .. ")"))) end if(configuration_table.count_gire_item >= 1) or (configuration_table.count >= 1) or (configuration_table.count_remove >= 1)then return(not(player:sendTextMessage(MESSAGE_INFO_DESCR, player:getName() .. " wait the roulette is in action, wait for it to finish"))) end local random = math.random(1, #configuration_table.position.roleta) configuration_table.storage_pos_item = 0 createItemPos() addEvent(calculePosItem, configuration_table.time_count_calcule_pos_item, random, player.uid) Game.sendAnimatedText("Spin number will be: " .. random, player:getPosition(), math.random(1, 255)) player:sendTextMessage(MESSAGE_INFO_DESCR, player:getName() .. " item of the day is on the rocks there") return true end
Agora em data/actions/actions.xml, coloque :
<action itemid="o id da alavanca do seu servidor" script="roleta.lua" />
20211004_171313.mp4
-
Pedrok22 deu reputação a leoarlia em GesiorACC 2019 8.60 UPDATE 29/06/2019Olá Natanael.
Inicialmente gostaria de parabeniza-lo pelos projetos que tem realizado e pela gentileza de disponibiliza-los a todos.
Estou enfrentando um problema com esse shop.lua que indicou no post. O sistema não interrompe a entrega do item.
Em globalevents:
<globalevent name="shop" interval="6000" event="script" value="shop.lua"/> Na distro apresenta o seguinte problema:
Linha 71: function onThink(interval, lastExecution)
Linha 109: db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
No banco de dados:
No servidor estamos desta forma:
Informação adicional:
Tomei a liberdade de fazer algumas edições nesta versão de Gesior, porém acredito que não foi isso que causou o problema.
Ao meu ver o problema se da no ato da exclusão do item no banco de dados.
O Servidor que estou desenvolvendo possui um sistema de VIP no jogo e Premiium Account por doações.
É isso, espero que possa ajudar com este problema, que talvez outros possam vir a passar.
Até!
Oi. Boa tarde a todos. Consegui resolver este problema!
Lendo a linha de códigos reparei que o shop.lua não estava configurado para o meu servidor, então eu reeditei a linguagem que você disponibilizou.
Mudanças:
Antes: local result_plr = db.getResult("SELECT * FROM z_ots_comunication") Depois: local result_plr = db.getResult("SELECT * FROM z_ots_comunication WHERE `type` = 'login';") Antes: id = tonumber(result_plr:getDataInt("id")) Depois: local id = tonumber(result_plr:getDataInt("id")) Aantes: local cid = getPlayerByName(tostring(result_plr:getDataString("name"))) Depois: local cid = getCreatureByName(tostring(result_plr:getDataString("name"))) Antes: db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";") Depois: db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";") Seu shop.lua também está sem a Query que faz UPDATE na tabela 'z_shop_history_item'.
Então eu a adicionei:
db.query("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";") No caso agora meu problema se transformou em outro.
>> Como seria a query para gravar na página History a compra de outfits, items e outras opções? <<
shop.lua
-
Pedrok22 deu reputação a ITALOx em [8.60] Wodbo Wars v5.9 + Site + Client DownloadCrie um tópico, assim, o yan, ou eu, poderá te ajudar,ou então, mande um print aqui do que está dando erro, ele poderá ajudar. rs
-
Pedrok22 deu reputação a mullino em (Resolvido)Tirar Dano Em Areaobgd
-
Pedrok22 deu reputação a mullino em (Resolvido)Tirar Dano Em AreaBom Dia Galerinha Do Tk
Voces Podem Me Ajudar Tirar O Dano em area desse script e colocar para dar o dano so no targent?
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ETHEREALSPEAR) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, -98859, 0, -98859) local area = createCombatArea( { {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } ) setCombatArea(combat, area) function onUseWeapon(cid, var) return doCombat(cid, combat, var) end obrigado + Rep
-
Pedrok22 deu reputação a mullino em (Resolvido)ajuda Criando scriptobrigado mano
eu estou tentando criar o meu propio pra entender mais como funciona as funçoes tibia e como usalas
mas obrigado pela ajuda ..
consegui fazer o meu era as ordems das funçoes que estavao erradas
o meu ficou assim
--- vou confiar em meus scripts ----by ADM Indio local config = { resets = 5, msgWelcomeReset = "Bem-Vindo A Area Reset!", msgCancel = "Vc Precisa ter 5 Resets Para Passar" } function onStepIn(cid, item, position, fromPosition) resets = db.getResult("SELECT `resets` FROM `players` WHERE `id` = " ..getPlayerGUID(cid)):getDataInt("resets") if getPlayerResets(cid) >= config.resets then doPlayerSendTextMessage(cid, 22, config.msgWelcomeReset) else doTeleportThing(cid, fromPosition, FALSE) doPlayerPopupFYI(cid, config.msgCancel) end return true end
-
Pedrok22 deu reputação a aicilopmes123 em DUAL Igual do THOTfuncionou perfeito, obrigado bro tava muito tempo atrás disso