-
Total de itens
20 -
Registro em
-
Última visita
-
Dias Ganhos
1
Tudo que JuniorPavani postou
-
Boa tarde grande amigos do Xtibia Estou com um erro no Script da Pokedex no meu servidor , esse erro da quando tento usar a pokedex em mim mesmo Erro no Console Script Pokedex Obrigado! Obs: Erro do Portrait Ja foi resolvido.
-
Olá amigos do Xtibia Vim trazer alguns Callbacks , irei fazer uma lista com eles , caso haja alguns outro editarei o topico. Bom vamos Começar ! ACTIONS onUse(cid, item, fromPosition, itemEx, toPosition) CREATURE SCRIPTS onLogin(cid) onLogout(cid) onAdvance(cid, skill, oldLevel, newLevel) onStatsChange(cid, attacker, type, combat, value) onDirection(cid, old, current) onOutfit(cid, old, current) onSendMail(cid, receiver, item, openBox) onReceiveMail(cid, sender, item, openBox) onTradeRequest(cid, target, item) onTradeAccept(cid, target, item, targetItem) onJoinChannel(cid, channel, users) onLeaveChannel (cid, channel, users) onLook(cid, thing, position, lookDistance) onThink(cid, interval) onTextEdit(cid, item, newText) onReportBug(cid, comment) onAreaCombat(cid, tileItem, tilePosition, isAggressive) onPush(cid, target) onTarget(cid, target) onFollow(cid, target) onCombat(cid, target) onAttack(cid, target) onCast(cid, target) onKill(cid, target, lastHit) onDeath(cid, corpse, deathList) onPrepareDeath(cid, deathList) GLOBAL EVENTS onThink(interval) onStartup() onShutdown() onGlobalSave() onRecord(current, old, cid) onTime() MOVEMENTS onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor) onEquip(cid, item, slot) onDeEquip(cid, item, slot) onAddItem(moveItem, tileItem, position, cid) onRemoveItem(moveItem, tileItem, position, cid) SPELLS onCastSpell(cid, var) TALKACTIONS onSay(cid, words, param, channel) WEAPONS onUseWeapon(cid, var) • Retirado do SCRIPTSYSTEM_HELP, doc das Sources do TFS Espero que ajude !
-
script [Tutorial] Básico Sobre CreatureScripts
tópico respondeu ao JuniorPavani de JuniorPavani em Tutoriais de Scripting
Muito obrigado pelo Rep logo logo trarei mais alguns tutoriais para o Xtibia- 12 respostas
-
- tutorial
- creaturescripts
-
(e 2 mais)
Tags:
-
[Encerrado] Queria resolver esses bugs
tópico respondeu ao lol08 de JuniorPavani em Tópicos Sem Resposta
o problema é , é uma base para servidores grandes mas essa base terá que ser totalmente editada para o Poketibia, pois é uma base de tibia. caso lhe interesse essa base Ot server 0.6.1 -
[Encerrado] Queria resolver esses bugs
tópico respondeu ao lol08 de JuniorPavani em Tópicos Sem Resposta
servidor grande e bem feito? baixa a base otserv 0.6.1 no sourceforge. é uma otima base para servidores -
[Encerrado] Queria resolver esses bugs
tópico respondeu ao lol08 de JuniorPavani em Tópicos Sem Resposta
provavelmente esse bug no atk.lua é devido alguma source nao existir ou estar errada. Nao aconselho a usar bases PDA pelo motivo de o dono ter perdido as sources. -
[Encerrado] Queria resolver esses bugs
tópico respondeu ao lol08 de JuniorPavani em Tópicos Sem Resposta
Qual base vc usa? e tambem poste o script atk.lua -
script [Tutorial] Básico Sobre CreatureScripts
tópico respondeu ao JuniorPavani de JuniorPavani em Tutoriais de Scripting
Ok obrigado irei alterar o tutorial, muito obrigado pelas dicas- 12 respostas
-
- tutorial
- creaturescripts
-
(e 2 mais)
Tags:
-
script [Tutorial] Básico Sobre CreatureScripts
tópico respondeu ao JuniorPavani de JuniorPavani em Tutoriais de Scripting
Obrigado! topico Editado. grato pela ajuda.- 12 respostas
-
- tutorial
- creaturescripts
-
(e 2 mais)
Tags:
-
script [Tutorial] Básico Sobre CreatureScripts
um tópico no fórum postou JuniorPavani Tutoriais de Scripting
Tutorial Básico sobre CreatureScripts CreatureScripts = São scripts que serão ativados após uma determinada ação criada pelo monstro ou personagem. Essas ações são determinadas como funções. Existem varias funções utilizadas para a criação de creaturescripts e estas são: onDeath(cid, corpse, killer)-- que é executada ao morrer. onPrepareDeath(cid, lastHitKiller, mostDamageKiller) -- semelhante a onDeath. onAttack(cid, target) -- executa ao atacar. onCombat(cid, target) -- semelhante ao onAttack. onLogin(cid) -- executa ao logar. onLook(cid, thing, position, lookDistance) -- executa ao dar look. onAdvance(cid, skill, oldLevel, newLevel) -- executa ao upar skills/levels. onStatsChange(cid, attacker, type, combat, value) -- executa ao perder ou ganhar life/mana/condições. onLogout(cid) -- executa ao deslogar. onKill(cid, target, lastHit) -- executa ao matar. onThink(cid, interval) -- executa em determinado tempo. onJoinChannel(cid, channelId, users) -- executa ao entrar em um chat. onReceiveMail(cid, sender, item, openBox) -- executa ao receber um parcel/carta. onReportBug(cid, comment) -- executa ao reportar bug. Para criar esse tipo de script, primeiramente vai na pasta data/creaturescripts/scripts e duplica um arquivo e salve com "nomedesejado"; Agora você vai determinar que função você vai precisar para criação do seu script. Para exemplo vou usar a função "onAdvance"(ao upar). Neste exemplo, quando o player upar level 100 ele irá ganhar 1kk: 1 function onAdvance(cid, skill, oldLevel, newLevel) 2 if getPlayerLevel(cid) >= 100 and getPlayerStorageValue(cid, 1234) < 1 then -- checa level e storage 3 doPlayerAddItem(cid, 2160, 100) -- entraga a premiação 4 setPlayerStorageValue(cid, 1234, 1) -- define a storage para 1, para evitar entregar o premio mais de uma vez 5 doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Parabéns, você ganhou 1kk por atingir level 100!") 6 doSendMagicEffect(getCreaturePosition(cid), 30) 7 end 8 return true 9 end Numerei as linhas para melhor entendimento, nos seus scripts vocês não devem numerar. linha 1 = Inicio da função onAdvance, essa linha recebe algumas informações do player que upou, como seu cid, seus skills o velho level e o novo level. Obs: cid = creature id, numero de identificação do player/monstro. linha 2 = Inicia-se um if onde verifica se o level do player é igual a 100 e verifica a storage do player . Se for verdadeiro, o script executa as linhas 3,4 e 5, senão pula direto a linha 6. linha 3 = Adiciona 100 itens com o id 2160 ao player. linha 4 = define a storage do player para que não pegue o premio duas vezes linha 5 = Manda uma mensagem parabenizando o player linha 6 = Solta o efeito de numero 30, na posição em que o player esta. linha 7 = Finaliza a verificação do if. linha 8 = Retorna verdadeiro. Obs: sempre é necessario ela linha no final de seu código. linha 9 = Finaliza a função onAdvance. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Por fim para funcionamento do seu script é necessario adicionar 2 tags: 1º- No "data/creaturescripts/creaturescripts.xml" 2º- No arquivo "data/creaturescripts/scripts/login.lua", Obs: se o script que você for fazer for de função onLogin, não precisa adicionar a segunda tag. 1º Tag: Vai em data/creaturescripts/creaturescripts.xml e cole a tag: <event type="advance" name="QualquerNome" event="script" value="nomedesejado.lua"/> O type="" , será o nome da função de seu script após a palavra "on" e sempre tudo em minusculo. O name="", use qualquer nome porem esse nome vai ser usado para registrar no script onLogin na tag2. O value="", é o nome com qual você salvou seu script. Agora em data/creaturescripts/scripts/login.lua, sempre antes do último return true: registerCreatureEvent(cid, "QualquerNome") QualquerNome é o name que você adicionou na tag1 do creaturescripts.xml. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Acho que é isso aew, espero ter ajudado a galera que esta iniciando. Dica para criação de scripts: Para melhor edição e organização use Notepad++: http://www.baixaki.c...ad/notepad-.htm E sempre pesquise por scripts prontos e tutoriais para ter uma base. CREDITOS: JHON pelo tutorial completo!- 12 respostas
-
- tutorial
- creaturescripts
-
(e 2 mais)
Tags:
-
action Talkaction !rank [Personalizado]
tópico respondeu ao JuniorPavani de JuniorPavani em Actions e Talkactions
Provavelmente não , pois percebi uma grande diferenca nos scripts. -
action [Tutorial] Básico sobre Lua
tópico respondeu ao JuniorPavani de JuniorPavani em Lixeira Pública
Muito obrigado! grato em estar ajudando -
action Talkaction !rank [Personalizado]
tópico respondeu ao JuniorPavani de JuniorPavani em Actions e Talkactions
Acompanhou todos os passos corretamente adicionando todos os itens necessarios? pois testei no meu servidor e está 100%. -
Como o Nome Diz, Ele Serve Para Mudar Seu Nome Dentro Do Jogo. Vá Em data/talkactions/scripts, Copie Um Arquivo, Renomeie-o Para changename.lua, e Cole Isso Nele - local config = { item = { Id = 1111, count = 0, }, maxTextLenght = 15, blacklistParam = {"account manager", "god", "cm", "gm", "tutor", "tester"}, minWordLenght = 3, delay = 2 } function onSay(cid, words, param, channel) local textCancel, t = config.text, string.explode(param, ",") if(param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") elseif((getPlayerGUIDByName(t[1]) ~= nil) and (not getBooleanFromString(t[2]))) then textCancel = "That name is already in use." elseif(getPlayerItemCount(cid, config.item.Id) < config.item.count) then textCancel = "You do not fulfill the requirements." elseif(not getTilePzInfo(getCreaturePosition(cid))) then textCancel = "You must be inside a protection zone to use this command." elseif(string.len(tostring(t[1])) >= config.maxTextLenght) then textCancel = "You can only use a maximum of " .. config.maxTextLenght .. " characters." elseif(string.find(t[1]:lower(), "[^%l%s]") ~= nil) then textCancel = "You cannot use symbols." else for blacklist = 1, table.maxn(config.blacklistParam) do if(string.find(t[1]:lower(), config.blacklistParam[blacklist]) ~= nil) then textCancel = "Invalid name entry." break end end end if(config.text ~= textCancel) then doPlayerSendCancel(cid, textCancel) return true end local paramTemp, space, oldName = '', '', getCreatureName(cid) for word in string.gmatch(t[1], "%a+") do if(string.len(word) < config.minWordLenght) then doPlayerSendCancel(cid, "Each word must have a minimum of " .. config.minWordLenght .. " characters.") return true end paramTemp = "" .. paramTemp .. "" .. space .. "" .. word .. "" if(space == '') then space = " " end end local guid = getPlayerGUID(cid) t[1] = paramTemp doPlayerRemoveItem(cid, config.item.Id, config.item.count) if(pcall(doPlayerChangeName, guid, oldName, t[1]) == false) then db.executeQuery("INSERT INTO `player_namelocks` (`player_id`, `name`, `new_name`, `date`) VALUES (" .. guid .. ", " .. db.escapeString(oldName) .. ", " .. db.escapeString(t[1]) .. ", " .. os.time() .. ");") db.executeQuery("UPDATE `players` SET `name` = " .. db.escapeString(t[1]) .. " WHERE `id` = " .. guid .. " LIMIT 1;") end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your name has been changed successfully. You will be kicked in " .. config.delay .. " seconds.") addEvent(function(cid, forceLogout) if(isPlayer(cid)) then doRemoveCreature(cid, forceLogout) end end, config.delay * 1000, cid, false) return true end Em talkactions.xml Adicione Essa Tag - <talkaction words="!changename;/changename;!namechange;/namechange" script="changename.lua" /> Créditos - Ratser
-
action Talkaction !rank [Personalizado]
um tópico no fórum postou JuniorPavani Actions e Talkactions
Creditos: Critico (vodkart) Comando !rank atualizado com novo rank que é o !rank frags, onde mostra os maiores matadores do ot. Ranks: Skills Level Magic Health Mana Frags Exemplo: !rank frags !rank magic Crie ranks.lua em data/talkactions/scripts. e cole o script abaixo local config = { MaxPlayer = 20, fight_skills = { ['fist'] = 0, ['club'] = 1, ['sword'] = 2, ['axe'] = 3, ['distance'] = 4, ['shielding'] = 5, ['fishing'] = 6, ['dist'] = 4, ['shield'] = 5, ['fish'] = 6, }, other_skills = { [''] = "level", ['level'] = "level", ['magic'] = "maglevel", ['health'] = "healthmax", ['mana'] = "manamax" }, vocations = { ['sorcerer'] = {1,5}, ['druid'] = {2,6}, ['paladin'] = {3,7}, ['knight'] = {4,8} }, storages = { ['frags'] = 824544 } } function onSay(cid, words, param) local store,exausted = 156201,30 local param,str = string.lower(param),"" if not config.fight_skills[param] and not config.other_skills[param] and not config.vocations[param] and not config.storages[param] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "this ranking does not exists.") return true elseif getPlayerStorageValue(cid, store) >= os.time() then doPlayerSendCancel(cid, "wait " .. getPlayerStorageValue(cid, store) - os.time() .. " seconds to use this command again.") return true end str = "--[ RANK "..(param == "" and "LEVEL" or string.upper(param)).." ]--\n\n" query = config.fight_skills[param] and db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = "..config.fight_skills[param].." ORDER BY `value` DESC;") or config.other_skills[param] and db.getResult("SELECT `name`, `"..config.other_skills[param].."` FROM `players` WHERE `id` > 6 AND `group_id` < 2 ORDER BY `"..config.other_skills[param].."` DESC, `name` ASC;") or config.storages[param] and db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = "..config.storages[param].." ORDER BY cast(value as INTEGER) DESC;") or db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` <= 2 AND `vocation` = "..config.vocations[param][1].." or `vocation` = "..config.vocations[param][2].." ORDER BY `level` DESC;") if (query:getID() ~= -1) then k = 1 while true do str = str .. "\n " .. k .. ". "..(config.fight_skills[param] and getPlayerNameByGUID(query:getDataString("player_id")) or config.storages[param] and getPlayerNameByGUID(query:getDataString("player_id")) or query:getDataString("name")).." - [" .. query:getDataInt((config.fight_skills[param] and "value" or config.storages[param] and "value" or config.vocations[param] and "level" or config.other_skills[param])) .. "]" k = k + 1 if not(query:next()) or k > config.MaxPlayer then break end end query:free() end doShowTextDialog(cid,6500, str) setPlayerStorageValue(cid, store, os.time()+exausted) return true end Em data/lib/050-function.lua adicione: function setFrags(cid) if not isCreature(cid) then return LUA_ERROR end setPlayerStorageValue(cid, 824544, getPlayerFrags(cid)) return doPlayerSave(cid) end Crie rankfrags.lua em data/creaturescripts/scripts e cole o script abaixo function onKill(cid, target, lastHit) if isPlayer(cid) and isPlayer(target) then addEvent(setFrags, 1, cid) end return true end E em data/creaturescripts/login.lua adicione: registerCreatureEvent(cid, "Rankfrags") setFrags(cid) Se ajudei REP + E todos ficamos Felizes! -
Nome Do Autor : Xisto Versão Testada : 8.54 -- Pokemon Dash Advanced / Centurion Explicação : Um sistema de pesca em que e obrigatorio o uso de uma certa roupa.Créditos : Xisto 1 - Script local storage = 15458 local storageP = 154580 local bonus = 1 local limite = 80 local function doFish(cid, pos, ppos, chance, interval, number) if not isCreature(cid) then return false end if getThingPos(cid).x ~= ppos.x or getThingPos(cid).y ~= ppos.y then return false end if getPlayerStorageValue(cid, storage) ~= number then return false end doSendMagicEffect(pos, CONST_ME_LOSEENERGY) local peixe = 0 local playerpos = getClosestFreeTile(cid, getThingPos(cid)) local fishes = {} local randomfish = "" --alterado!! if getPlayerSkillLevel(cid, 6) < limite then doPlayerAddSkillTry(cid, 6, 20) end for a, b in pairs (fishing) do if getPlayerSkillLevel(cid, 6) >= b.skill then table.insert(fishes, a) end end if math.random(1, 100) <= chance then if getPlayerSkillLevel(cid, 6) < limite then doPlayerAddSkillTry(cid, 6, bonus) end randomfish = fishes[math.random(#fishes)] peixe = doSummonCreature(randomfish, playerpos) if not isCreature(peixe) then addEvent(doFish, interval, cid, pos, ppos, chance, interval, number) return true end doSetMonsterPassive(peixe) doWildAttackPlayer(peixe, cid) if #getCreatureSummons(cid) >= 1 then doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173) ---- 1 e o efeito que ira sair ao usar a rod na agua. doChallengeCreature(getCreatureSummons(cid)[1], peixe) else doSendMagicEffect(getThingPos(cid), 173) doChallengeCreature(cid, peixe) end setPlayerStorageValue(cid, storageP, 1) doCreatureSetNoMove(cid, false) doRemoveCondition(cid, CONDITION_OUTFIT) return true end addEvent(doFish, interval, cid, pos, ppos, chance, interval, number) setPlayerStorageValue(cid, storageP, 1) doCreatureSetNoMove(cid, true) return true end local waters = {4614, 4615, 4616, 4617, 4618, 4619, 4608, 4609, 4610, 4611, 4612, 4613, 7236, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825} function onUse(cid, item, fromPos, itemEx, toPos) if getPlayerGroupId(cid) == 11 then return true end local checkPos = toPos checkPos.stackpos = 0 if getTileThingByPos(checkPos).itemid <= 0 then doPlayerSendCancel(cid, '!') return true end if not isInArray(waters, getTileInfo(toPos).itemid) then return true end if (getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 63215) >= 1) and not canFishWhileSurfingOrFlying then doPlayerSendCancel(cid, "You can't fish while surfing/flying.") return true end if isInArray(waters, getTileInfo(getThingPos(cid)).itemid) then doPlayerSendCancel(cid, "You can't fish while surfing neither flying above water.") return true end if getTileInfo(getThingPos(getCreatureSummons(cid)[1] or cid)).protection then doPlayerSendCancel(cid, "You can't fish pokémons if you or your pokémon is in protection zone.") return true end if getPlayerStorageValue(cid, storageP) > 0 then doPlayerSendTextMessage(cid, 27, "You are already fishing.") return true end if getPlayerSex(cid) == 1 then if getCreatureOutfit(cid).lookType ~= 520 then ---- Outfit necessaria para usar o fishing doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need fisher outfit for fishing.") return false end else if getCreatureOutfit(cid).lookType ~= 521 then ---- Outfit necessaria para usar o fishing doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need fisher outfit for fishing.") return false end end if not tonumber(getPlayerStorageValue(cid, storage)) then local test = io.open("data/sendtobrun123.txt", "a+") local read = "" if test then read = test:read("*all") test:close() end read = read.."\n[fishing.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, storage).."" local reopen = io.open("data/sendtobrun123.txt", "w") reopen:write(read) reopen:close() setPlayerStorageValue(cid, storage, 1) end setPlayerStorageValue(cid, storage, getPlayerStorageValue(cid, storage) + 1) if getPlayerStorageValue(cid, storage) >= 800 then setPlayerStorageValue(cid, storage, 1) end local delay = 3500 - getPlayerSkillLevel(cid, 6) * 25 local chance = 10 + getPlayerSkillLevel(cid, 6) / 2.5 outfit = getCreatureOutfit(cid) if getPlayerSex(cid) == 0 then out = 1467 --- Outfit de Pesca FEMININA else out = 1468 --- Outfit de Pesca MASCULINA end doSetCreatureOutfit(cid, {lookType = out, lookHead = outfit.lookHead, lookBody = outfit.lookBody, lookLegs = outfit.lookLegs, lookFeet = outfit.lookFeet}, -1) doFish(cid, toPos, getThingPos(cid), chance, delay, getPlayerStorageValue(cid, storage)) return true end 2 - Tag do Actions.xml A tag ja existe no server baixado por voce. Mais caso queira estarei postando as que eu uso: <action itemid="2580" event="script" value="tools/fishing.lua" allowfaruse="1"/> <action itemid="10223" event="script" value="tools/fishing.lua" allowfaruse="1"/> 3 - Modificações Local para mudar o ID das roupas com a vara de pesca: out = 1467 --- Outfit de Pesca FEMININA else out = 1468 --- Outfit de Pesca MASCULINA Caso nao tenham a outfit busquem no client da PxG 3.1 - Efeitos Caso queira mudar o efeito que apareçe ao pescar mude aqui: doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173) 1 em vermelho e o efeito Esse script pode ser modificado facilmente por alguem experiente....
-
ATENÇÃO! Este tutorial foi feito pelo tibiaa4e, portanto os créditos são 100% dele! Parte I – Básico do básico de Lua Começaremos por LUA porque é uma linguagem simples, que não precisa declarar variáveis e tudo mais. Aqui não explicarei as funções do otserver e sim como montar um script. Nessa primeira parte usarei o Português Estruturado que sinceramente não é útil quando você aprende a sintaxe da linguagem, porém é ótimo para você que está começando aprender o que está fazendo e não só copiando e colando. LEMBRANDO QUE PORTUGUÊS ESTRUTURADO NÃO É UMA LINGUAGEM É APENAS UM JEITO DE VOCÊ ENTENDER A SINTAXE DAS LINGUAGENS. Começando vamos explicar a sintaxe de um script bem básico mesmo. Aquele script que quando você da use em 100 gps ele vira 1 platinum coin Citar Em português estruturado ele ficaria assim : Citar Com português estruturado da para entender essa action Agora da para explicar melhor a estrutura de um arquivo lua de actions : ► Essa parte é a que diz ao servidor que essa função vai se ativar quando o player usar o item indicado no actions.xml. No caso é a função aoUsar ou seja quando o player clicar com o direito nesse item irá acontecer algo. ► O SE é uma condição, se estiver tudo certo dentro dele ele faz a condição contida no caso o id (numerodoitem) tem que ser 2148 (Gold Coin) e tem que ser do tipo 100 (No caso de itens juntáveis o tipo é a quantidade), faça remova ele e adicione UM item 2152 (platinum coin). ► Senão ou seja, se o item não for 2148 ou não ter tipo 100, não retorne ao começo do script e finalize. Espero que essa parte tenha esclarecido um pouquinho mais sobre actions. Agora vou explicar um pouco mais sobre algumas condições e suas sintaxes. Sintaxe do IF, Else e Elseif. A condição if de longe é a mais importante de todas as programações e é essencial para um script um pouco mais complexo ou para evitar que você faça 200 scripts para certas funções (comida do tibia por exemplo). Vocabulário do tio Ta4e Citar Única coisa que o lua pede é que cada item tenha um end para cada if colocado tenha um end, você também tem que entender a questão do if encadeado que será tema da próxima aula aqui. Mais para ela se tem que saber o básico de um If normal. Esse é o script anterior com adição de uma condição que se o player tiver 100 platinum coin ele se transforme em uma crustal coin. function onUse(cid, item, fromPosition, itemEx, toPosition) if item.itemid == 2148 and item.type == 100 then doRemoveItem(item.uid,1) doPlayerAddItem(cid, 2152, 1) elseif item.itemid == 2152 and item.type == 100 then doRemoveItem(item.uid,1) doPlayerAddItem(cid, 2160, 1) else return FALSE end return TRUE endVocê percebe que eu alinhei o if e elseif a seu end, isso chama-se Estruturação, isso é muito importante já que para achar um erro será muito mais fácil E fica mais organizado seu script Você percebe que o IF tem um end no final da sua cadeia, pois todo IF tem que ter um end porém o ELSEIF se enquadra dentro do IF. O ELSEIF ajuda pois você diminui linhas de scripts e serve para outras funções mais avançadas que serão vistas nas próximas aulas. Lembrando também que a função toda função também tem seu END, isso ajuda no caso de você querer colocar duas funções no mesmo script (muito usado em movements). IF Encadeado O if encadeado ou cadeia de if, indica funções pouco mais complexas que o if solitário, porém não é nenhum bicho de 7 cabeças, se você fazer a estruturação do script. Aqui vai o script de exemplo, é um script muito mais complexo do que os do gps Citar Esse script é o que eu uso para minhas quest. Esse é um ótimo exemplo de if encadeado. Perceba que ele está estruturado. Claro que colorido é muito simples identificar cada else e end Agora vou explicar a sintaxe. ►A primeira parte pede que o uniqueid (é um numero especial usado apenas uma vez no mapa inteiro), seja 2300. ►Essa parte do queststatus é uma variável que será explicado a parte ►Esse If, checa se o player tem o valor da variável listada acima, senão ele manda a mensagem o “the chest is empty”. ►Esse outro if checa se o player tem a capacidade 29.50, senão ele manda a mensagem “You have found a demon helmet. Weighing 29.50 oz it is too heavy”. ►Chama-se cadeia de if porque as funções em preto só serão executados se todos os IFS forem verdadeiros, se apenas um não for ele já acusa o erro. Seria mais ou menos como tirar um RG Se você tiver Certidão de nascimento faça Se você tiver Foto 3x4 faça Se você tiver o papel faça Criar RG Senão pegue o papel no balcão Senão tire uma foto 3x4 Senão tirei certidão primeiro ,já que você não existe Perceba que você terá que ter tudo isso para fazer o RG senão tiver você não consegue tirar ►Voltando ao script perceba que todos tem seu respectivo end, isso é importantíssimo Variáveis Variáveis é uma parte da memoria na qual se guarda um valor ou informação, em outras linguagens elas tem tipos como de números inteiros, reais ou de letras, porém em lua não existe isso. O que facilita muito nossas vidas as variáveis são maneiras ou jeitos de você fazer scripts para outras pessoas ou por pura preguiça mesmo... São extremamente necessárias em scripts grandes na qual um item de mesmo id é repetido muitas vezes, e talvez depois seja necessário muda-lo Lembra do script anterior da quest a parte que da questatus Citar A quest status é uma variável, que pergunta ao servidor se o player tem o valor nele Se não tiver faça, ou seja -1 é igual a negativo ou negação, no caso se o programador quisesse que ele tivesse colocava 1 Essa parte é bem simples de se entender, já que variáveis servem para simplificar a vida de não programadores, porém deixam seu servidor mais pesado, não é coisa grande, porém como já disse a variável ocupa memoria, em torno de 3kb cada uma, mais em um otserver básico possuem muitas variáveis Elas podem ser indicadas em qualquer parte do script, e elas sempre recebem dados ou perguntam. Pode se fazer cálculos nas variáveis ou usar outras variáveis dentro dela sem problema nenhum. Sinais Matemáticos e de comparação Aqui vai uma coisa que confunde muita gente : ►= - Faz o item anterior receber algo Exemplo : gold = 2148 ►== - Verificação. É para checar Exemplo : if item.itemid == 2555 then ► Os sinais matemáticos são +, -, / e * . ►E como toda linguagem não existe , entre números 1,5 é 1.5 virgula é só para separar variáveis ►Para se checar pode ser usar == (igual a ), >= (maior ou igual a ), <= (menor ou igual a ) o sinal de diferente é agora com certeza é ~=. ►Pode se calcular os itens dentro de variáveis ou até dentro de funções. IF com varias condições Você já deve entender um pouco mais de scripts portanto agora colocarei scripts cortados Vamos a um exemplo : if item.itemid == 2694 then if item2.itemid == 1381 or item2.itemid == 1382 or item2.itemid == 1383 or item2.itemid == 1384 then doRemoveItem(item.uid,1) doPlayerAddItem(cid,2692,1) else return 0 end Nesse caso o item.itemid é aqueles itens que você pode dar use with (vara de pescar por exemplo) e o item2.itemid é o local a ser clicado. Então seria Se o item for 2694 e o segundo item for 1381 ou 1382 ou 1383 ou 1384 faça. Ou seja qualquer um desses itens é considerado válido. Essa é a básica desse tipo porém pode-se fazer umas mais complexas como essa debaixo que não existe em actions e é só para explicar : Citar Nesse caso o player teria que usar o item 1381 e o 1382 juntos ou o 1383 e 1384 juntos. É usado em movements, npcs e talk actions muito frequentemente. Parece fácil mais da para se confundir facinho ai. Quando usar IF e quando usar ELSEIF Essa parte é a final desse primeiro tutorial e serve apenas para dar uma idéia de como melhor seu script básico Como eu já disse o Elseif é uma é a junção de else + if e ele só vai executado depois se o if primário for falso. Ou seja ele é usado quando apenas uma das condicionais vai ser verdadeira , eu uso muito isso em npcs para o quests de npcs, mais podemos mostrar uns exemplos em actions. Já o if sempre será checado, bom para os ifs encadeados já que eles tem todos estarem certos ou errados. Exemplo de If e Elseif junto Citar ►Perceba que nesse caso é usado o elseif porque é impossível que o mesmo bau tenha o mesmo uniqueid (Como disse anteriormente cada uniqueid é usado apenas 1 vez no mapa e um item só tem 1 uniqueid). Então ou é um ou é outro. E ELSEIF não tem end. ►Nesse caso todos tem que ser reais para poder se executar o script, então é necessários ser if e ter seus ENDS. Comentários Para inserir comentários na linguagem lua é necessário adicionar – 2 hifens. Pode ser em qualquer parte do script (pelo amor de deus não coloque dentro de um if) normalmente usado para explicar o script ou colocar créditos Siglas e Dicionario id – Identificador ou seja no caso de otserver é o numero do item para o tibia. cid – Creature Id :Identificador da criatura, no caso a criatura que executa a ação, no caso o player. uid – Unique Id : Identificador único usado uma vez no mapa (em algumas funções ele serve como para indicar um id. actionid – Identificador de ação pode ser usado varias vezes no mapa, usado principalmente para aquele chão que afunda perto do DP.
-
poketibia Ajuda erro move1.lua Poketibia 8.54
tópico respondeu ao JuniorPavani de JuniorPavani em Lixeira Pública
entao tipo , eu teria que trocar toda a base do move ? Fiz diversos testes e a base que eu tenho é quando alguns players estao no PVP se atacando , e quando 3 ou mais pessoas atacam o mesmo pokemon. -
poketibia Ajuda erro move1.lua Poketibia 8.54
tópico respondeu ao JuniorPavani de JuniorPavani em Lixeira Pública
Erro da source no PDA? e como eu resolveria isso? -
poketibia Ajuda erro move1.lua Poketibia 8.54
um tópico no fórum postou JuniorPavani Lixeira Pública
Bom amigos do Xtibia , hoje vim ver se alguem aqui poderia me ajudar com um erro que está muito chato ja , e causa um lag imenso para quem está jogando. Erro do Console. Script a seguir Serei grato a quem conseguir me ajudar e é claro um REP + Obrigado.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.