Ir para conteúdo

Poccnn

Herói
  • Total de itens

    1418
  • Registro em

  • Última visita

  • Dias Ganhos

    48

Histórico de Reputação

  1. Upvote
    Poccnn recebeu reputação de spoockk em #4 - aula de scripting lua - estrutura de controle - IF   
    Palavras e caracteres reservados
     

     
    Link da aula anterior, caso não tenha lido.
    Palavras reservadas que será usado nessa aula:
    if, else, elseif, then, end, and, or, not
     
     
     
     
    Estrutura de controle (if)
     
     
    O if serve para criar uma condição; ele está precedido de outra palavra que finaliza a condição, que se chama “then”, e também de outra palavra para fechar o if, que se chama “end”.
    Caso a condição seja verdadeira, o bloco criado por if será executado, caso não seja verdadeira, ele passa para a próxima instrução.
     
     
    Exemplo:
     
    if (condição) then -- caso a condição seja verdadeira, executa as instruções abaixo.
    print(“condição verdadeira”)
    return true
    end -- finaliza o if.
     
     
    E se precisarmos de mais condições? Podemos usar dentro do if a palavra “and” que diz ao sistema que há mais condições para ser analisadas.
    if (condição) and (condição) then -- abertura do bloco.
    print(“as duas condições são verdadeiras”) -- evento dentro do bloco criado por then.
    end -- finaliza o if.
     
     
    Podemos também usar a palavra “or” que diz ao sistema que caso uma condição não seja verdadeira, ele tem que verificar se a próxima condição é verdadeira.
    if (condição) or (condição) then
    -- abertura do bloco.
     
    print(“uma, ou as duas condições é, são verdadeira\’s”) – evento dentro do bloco criado por then.
    end -- finaliza o if.
     
     
    O “elseif” faz a mesma coisa do “if”, ele cria uma nova condição e um novo bloco, e nela, podemos inserir instruções distintas para cada ocasião.
    valordaconta = 100
    if valordaconta > 100 then
             print(“não temos essa quantia”)
    elseif valordaconta <= 100 and valordaconta > 0 then
             print(“pague a conta”)
    elseif valordaconta <= 0 then
             print(“conta não tem valor, portanto não precisa paga-la”)
    end -- fecha o if. Não é necessário fechar os elseif’s, pois eles fazem parte do if.
     
     
    Existe outra palavra reservada que ajuda muito quando determinamos diversas condições, mas não são validas; O “else” é a ultima possibilidade de se criar um bloco de instruções caso nenhuma condição anterior seja valida.
    cor = “azul”
    if cor == “vermelha” then
             print(“sinal de pare”)
    elseif cor == “amarela” then
             print(“sinal de atenção”)
    elseif cor == “verde” then
             print(“sinal de liberado”)
    else -- executa o bloco, desde que as demais condições acima não sejam validas.
             print(“cor desconhecida”)
    end
     
     
    A palavra reservado “not” serve para inverte o valor da condição; caso a condição seja verdadeira, ao usar a palavra not, ela se torna falsa e assim vice-versa.
     if not 1+1 ~= 2 then -- 1+1 não é diferente de 2, portanto é uma condição falsa.
     print(“mesmo 1+1 não sendo diferente de 2, esse bloco foi executado porquê a palavra \“not\” inverteu o valor da condição de \“false\” para \”true\”.”)
    end
     
     
    Agora no código que vocês criaram nas aulas anteriores, acrescentem estruturas de controles com condições a eles.
    Inté a próxima aula.

  2. Thanks
    Poccnn recebeu reputação de clebao em rameres nao reconhece a spr quando carrega o mapa   
    tenta importar o mapa.
  3. Thanks
    Poccnn recebeu reputação de wenderotpoke em Moveevents Erro com Addon   
    local look = getCreatureOutfit(cid) look.lookType = newtype doSetCreatureOutfit(cid, look, -1)  
  4. Upvote
    Poccnn recebeu reputação de lSainty em novo XT   
    Esse novo layout do XT, pelo menos no modo escuro, ficou horrível.
    Sem contar que a visualização de mensagens ficou ruim.
    As janelas de texto que forem citadas ficam muito confusas pois não ficam nítidas a separação entre uma citação e o comentário.
  5. Upvote
    Poccnn recebeu reputação de Deadpool em Sistema avançado de Quest   
    Olá Homo-Sapiens.
     
    Resolvi trazer para vocês esse sistema de Quest que eu criei para resolver alguns inconvenientes em meu ot serv.
     
    Quais são as características dele?
     
    Ele é totalmente inserido através do mapper sem precisar criar scripts. Ele contém um sistema de parâmetros que podem ser usados para determinar a quem pode receber o prêmio. Ele não usa marcação por storage evitando assim conflitos com outros scripts que usam storage como marcação. Com esse sistema inserido vocês podem criar quest por vocação única, promovidos, mages ou kinas/palas.
    Como ela pode usar os items dentro do baú como items obtiveis de quest, ela aceita qualquer tipo de item inserido, mesmo keys e runas.
     
    Implementação
     
     
    Em actions.xml adicione:
    <!-- Quests baus --> <action fromid="1740" toid="1741" event="script" value="quests/quests.lua"/> <action fromid="1747" toid="1749" event="script" value="quests/quests.lua"/> <action fromid="1410" toid="1420" event="script" value="quests/quests.lua"/> <action actionid="2000" event="script" value="quests/quests.lua"/>  
    Agora em scripts/quests crie ou modifique seu quests.lua para esse:
    --[[ autor = Marcryzius data = segunda-feira, 28 de Dezembro de 2015 >> Alguns parametros de uso. item.uid = itemid << id do item que será ganho - caso o item esteja 'inside' no baú, não se faz nescessario usar o id do item na uid - para habilitar o bau com os items como sendo uma quest se faz necessario acrescentar uma AID. actionid = validação << o baú só será usado na forma de quest se tiver alguma aid. pode usar marcação de vocação como na instrução abaixo ou setar aid 2000 para validar o baú como uma quest. actionid = quantidade << desde que ela seja maior que 100 e menor que 200 (150 = 50 items, 200 = 100 items) actionid = vocação << o primeiro numero diz que é uma quest de vocação; o segundo habilita que, as vocações promovidas também podem fazer a quest; os dois ultimos numero é da vocação em questão. exemplo 1 = 1201 << sorceres e master sorceres -- promovidos exemplo 2 = 1200 << kina e EK -- promovidos exemplo 3 = 1102 << apenas druids e não elder druids -- vocação especifica exemplo 4 = 1000 << apenas knights e paladins. exemplo 5 = 1100 << apenas sorcerers e druids. inside = varios items << todos os items que forem colocados dentro do bau será usado como referencia do premio da quest; pode-se tambem usar aid para determinar a vocação nescessaria dessa quest. -- ### -- Com o uso da nova função, não está mais sendo "setado" no player a store da "quest" usando setPlayerStorageValue(). ]] function onUse(cid,item,pos) if(item.actionid >= 1000 and item.actionid < 3000)then if(item.actionid == 1000 and not(isPaladin(cid) or isKnight(cid)))then -- somente kina ou pala recebem o item return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") elseif(item.actionid-1000 == 100 and not(isSorcerer(cid) or isDruid(cid)))then -- somente mages recebem o item return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") elseif(item.actionid-1000 > 0 and item.actionid-1000 < 100 and not(getPlayerVocation(cid) == item.actionid-1000))then -- vocação especifica - kina pala. return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") elseif(item.actionid-1000 > 100 and item.actionid-1000 < 200 and not(getPlayerVocation(cid) == item.actionid-1100))then -- vocação especifica - mages. return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") elseif(item.actionid-1000 >= 200 and item.actionid-1000 < 300 and not(getPlayerVocation(cid) % 4 == item.actionid-1200))then -- vocações promovidas. return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") end elseif(item.uid > 12000 and item.actionid == 0)then -- um baú qualquer return false -- abre o baú para pegarem os items 'inside' sem marcar nada, como se fosse abrir um baú qualquer sem ser de quest. end local quests_quant = (item.actionid-100 < 1) and 1 or (item.actionid-100 > 100) and 100 or item.actionid-100--Defini a quantidade de items. local playerCap,cap = getPlayerFreeCap(cid),getItemWeightById(item.uid,quests_quant) or 0 if(item.uid > 1000 and cap > 0)then -- quest por uid if(getSaveQuestsInfor(item.uid,cid))then --Função não usa marcação (getPlayerStore...) if(playerCap >= cap)then if(item.uid == 2493)then setPlayerStorageValue(cid,2493,1) end -- compatibilidade, verificar uso > ???...D:::H...??? doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a '..((quests_quant == 1) and '' or quests_quant)..' '..getItemNameById(item.uid)..'.') saveQuestsInfor(item.uid,getItemNameById(item.uid),cid,"Quest system by uid.") doPlayerAddItemEx(cid,doCreateItemEx(item.uid, quests_quant),true) else return false,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a '..(quests_quant == 1 and '' or quests_quant)..' '..getItemNameById(item.uid)..' weighing '..math.floor(cap)..' oz it\'s too heavy.') end else--caso o player já tenha feito a quest, abri-se o baú de forma convencional, podendo obter os items que estejam dentro dele. return false end return true end local size,texto,rewards,peso = isContainer(item.uid) and getContainerSize(item.uid) or 0,'You have found a ',{},0 if(size > 0)then for i = size,0,-1 do local tmp = getContainerItem(item.uid, i) if(tmp.itemid > 0) then if(isItemContainer(tmp.itemid))then -- só é possível adicionar mais um inside. ou seja, uma bolsa com algo dentro desde que não tenha outra bolsa com mais coisas dentro, dentro dessa bolsa primária. table.insert(rewards,1,{[tmp.itemid] = {}}) texto = texto..' a '..getItemNameById(tmp.itemid)..''..(i+1<size and ',' or '.') for insize = getContainerSize(tmp.uid),0,-1 do local newtmp = getContainerItem(tmp.uid, insize) table.insert(rewards[1][tmp.itemid],{id=newtmp.itemid, val=(newtmp.actionid > 0 and newtmp.actionid or newtmp.type)}) end else --Foi feito dessa forma para não haver conflito com items do mesmo tipo. table.insert(rewards,{[tmp.itemid]=(tmp.actionid > 0 and tmp.actionid or tmp.type)}) if(tmp.type > 0)then texto = texto..' '..(tmp.type > 0 and tmp.type..' charges of ' or 1)..' '..getItemNameById(tmp.itemid)..''..(i+1<size and ',' or '.') elseif(tmp.actionid > 0)then texto = texto..' '..(tmp.type > 0 and tmp.type..' charges of ' or 1)..' '..getItemNameById(tmp.itemid)..''..(i+1<size and ',' or '.') else texto = texto..' '..getItemNameById(tmp.itemid)..''..(i+1<size and ',' or '.') end end peso = peso + getItemWeight(tmp.uid) end end if(getSaveQuestsInfor(tonumber(pos.x..''..pos.y..''..pos.z),cid))then --Função não usa marcação (getStore...)) if(playerCap >= peso)then for _,reward in pairs(rewards) do for item,valor in pairs(reward) do if(type(valor) == "table")then local bag = doCreateItemEx(item) for _,value in pairs(valor) do if(value and value.id > 0)then doAddContainerItemEx(bag,doCreateItemEx(value.id,(value.val<=0 and 1 or value.val))) end end doPlayerAddItemEx(cid,bag,true) elseif(isInArray(KEYS_DOOR,item))then -- se o item for uma key local ch = doCreateItemEx(item,1) doItemSetAttribute(ch,'aid',valor) doPlayerAddItemEx(cid,ch) else doPlayerAddItemEx(cid,doCreateItemEx(item, valor),true) end end end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, texto) saveQuestsInfor(tonumber((pos.x)..''..(pos.y)..''..(pos.z)),getItemNameById(table.maxn(rewards)),cid,"Quest system by Inside.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, texto..' weighing '..math.floor(peso)..' oz it\'s too heavy.' ) end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") end else return false, doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.") end return true end  
     
    Em lib/050-functions.lua adicione:
     
    function getSaveQuestsInfor(uid,cid) --[[( Marcryzius )]]-- local str = false if not(db.executeQuery("SELECT * FROM `server_quests`;"))then -- caso a table não exista, será criada db.executeQuery("CREATE TABLE `server_quests` (`uid` INTEGER, `name` VARCHAR(255), `name_player` VARCHAR(255), `pos` VARCHAR(255), `other` TEXT);") return getSaveQuestsInfor(uid,cid) end if(tonumber(uid))then str = db.getResult("SELECT * FROM `server_quests` WHERE `uid` = '"..uid.."' AND `name_player` = ".. db.escapeString(getCreatureName(cid))..";") elseif(type(uid) == 'string')then str = db.getResult("SELECT * FROM `server_quests` WHERE `name_player` = " ..db.escapeString(getCreatureName(cid)).. " AND `name` = '"..uid.."';") else return false,print('getSaveQuestInfor: tipo de uid invalido > '..tostring(type(uid))) end return (str:getID() == -1) and true or false end function saveQuestsInfor(uid,name,cid,other) --[[( Marcryzius )]]-- --[[ uid = Item.uid usado no bau(entre outros) para receber o item da Quest name = nome do item dado ao player ou nome da quest cid = identificacao do player other = informacoes adicionais para serem salvas junto a quest ]]-- if not(db.executeQuery("SELECT * FROM `server_quests`;"))then -- caso a table não exista, será criada db.executeQuery("CREATE TABLE `server_quests` (`uid` INTEGER, `name` VARCHAR(255), `name_player` VARCHAR(255), `pos` VARCHAR(255), `other` TEXT);") end -- caso o parametro uid seja numero, pega-se a posição do item ou, caso não, pega-se a posição do player. local other,pos2 = other or '','' local pos = type(uid) == 'number' and getThingPos(uid) or getCreaturePosition(cid) pos2 = 'x='..pos.x..', y='..pos.y..', z='..pos.z -- verifica se tudo está correto. if not(type(name) == 'string') or not(tonumber(cid))then return false, print('Funcao requer parametros: name,cid') end -- salva as informações na database. db.executeQuery("INSERT INTO `server_quests` (`uid`, `name`, `name_player`,`pos`,`other`) VALUES ("..(uid or tonumber(pos.x..''..pos.y..''..pos.z))..",'"..name.."', '"..getCreatureName(cid).."','"..pos2.."','"..other.."');") return true end  
    Exemplos de uso do sistema
    Quest na qual dá o prêmio de 100 gps:
    Quest na qual dá o prêmio apenas para knights (e não para EKs e outras promoções de knight):
    Quest na qual dá o prêmio apenas para paladins e suas promotions:
    Ressalva: Caso queira fazer para knights use o id 0 (zero) e não 4 (quatro).
    Quest na qual dá o prêmio apenas para todos:
    Nesse caso você pode usar AID 0 (zero) ou AID (2000).
    Caso usem o metodo 'inside' de items no baú pode-se também usar esses mesmos parâmetros para estabelecer a quem pode ganhar os items inseridos no baú. Lembre-se que em quests 'insides' não se usa UID, mantenha ela em 0 (zero):
    Utilizando o metodo 'inside' ela só se tornará uma quest caso tenha alguma AID para válidar como quest. Então para fazer uma validação na qual qualquer player possa obter os itens 'inside' como sendo uma quest, adicione a AID 2000 ao baú:
     
    Bem, é isso pessoal.
    Para finalizar, aqui vai uma crítica ao xtibia. MELHOREM ESSE SISTEMA DE EDIÇÃO DE TEXTO.
  6. Thanks
    Poccnn recebeu reputação de XZero em Sistema avançado de Quest   
    Olá Homo-Sapiens.
     
    Resolvi trazer para vocês esse sistema de Quest que eu criei para resolver alguns inconvenientes em meu ot serv.
     
    Quais são as características dele?
     
    Ele é totalmente inserido através do mapper sem precisar criar scripts. Ele contém um sistema de parâmetros que podem ser usados para determinar a quem pode receber o prêmio. Ele não usa marcação por storage evitando assim conflitos com outros scripts que usam storage como marcação. Com esse sistema inserido vocês podem criar quest por vocação única, promovidos, mages ou kinas/palas.
    Como ela pode usar os items dentro do baú como items obtiveis de quest, ela aceita qualquer tipo de item inserido, mesmo keys e runas.
     
    Implementação
     
     
    Em actions.xml adicione:
    <!-- Quests baus --> <action fromid="1740" toid="1741" event="script" value="quests/quests.lua"/> <action fromid="1747" toid="1749" event="script" value="quests/quests.lua"/> <action fromid="1410" toid="1420" event="script" value="quests/quests.lua"/> <action actionid="2000" event="script" value="quests/quests.lua"/>  
    Agora em scripts/quests crie ou modifique seu quests.lua para esse:
    --[[ autor = Marcryzius data = segunda-feira, 28 de Dezembro de 2015 >> Alguns parametros de uso. item.uid = itemid << id do item que será ganho - caso o item esteja 'inside' no baú, não se faz nescessario usar o id do item na uid - para habilitar o bau com os items como sendo uma quest se faz necessario acrescentar uma AID. actionid = validação << o baú só será usado na forma de quest se tiver alguma aid. pode usar marcação de vocação como na instrução abaixo ou setar aid 2000 para validar o baú como uma quest. actionid = quantidade << desde que ela seja maior que 100 e menor que 200 (150 = 50 items, 200 = 100 items) actionid = vocação << o primeiro numero diz que é uma quest de vocação; o segundo habilita que, as vocações promovidas também podem fazer a quest; os dois ultimos numero é da vocação em questão. exemplo 1 = 1201 << sorceres e master sorceres -- promovidos exemplo 2 = 1200 << kina e EK -- promovidos exemplo 3 = 1102 << apenas druids e não elder druids -- vocação especifica exemplo 4 = 1000 << apenas knights e paladins. exemplo 5 = 1100 << apenas sorcerers e druids. inside = varios items << todos os items que forem colocados dentro do bau será usado como referencia do premio da quest; pode-se tambem usar aid para determinar a vocação nescessaria dessa quest. -- ### -- Com o uso da nova função, não está mais sendo "setado" no player a store da "quest" usando setPlayerStorageValue(). ]] function onUse(cid,item,pos) if(item.actionid >= 1000 and item.actionid < 3000)then if(item.actionid == 1000 and not(isPaladin(cid) or isKnight(cid)))then -- somente kina ou pala recebem o item return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") elseif(item.actionid-1000 == 100 and not(isSorcerer(cid) or isDruid(cid)))then -- somente mages recebem o item return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") elseif(item.actionid-1000 > 0 and item.actionid-1000 < 100 and not(getPlayerVocation(cid) == item.actionid-1000))then -- vocação especifica - kina pala. return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") elseif(item.actionid-1000 > 100 and item.actionid-1000 < 200 and not(getPlayerVocation(cid) == item.actionid-1100))then -- vocação especifica - mages. return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") elseif(item.actionid-1000 >= 200 and item.actionid-1000 < 300 and not(getPlayerVocation(cid) % 4 == item.actionid-1200))then -- vocações promovidas. return true,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") end elseif(item.uid > 12000 and item.actionid == 0)then -- um baú qualquer return false -- abre o baú para pegarem os items 'inside' sem marcar nada, como se fosse abrir um baú qualquer sem ser de quest. end local quests_quant = (item.actionid-100 < 1) and 1 or (item.actionid-100 > 100) and 100 or item.actionid-100--Defini a quantidade de items. local playerCap,cap = getPlayerFreeCap(cid),getItemWeightById(item.uid,quests_quant) or 0 if(item.uid > 1000 and cap > 0)then -- quest por uid if(getSaveQuestsInfor(item.uid,cid))then --Função não usa marcação (getPlayerStore...) if(playerCap >= cap)then if(item.uid == 2493)then setPlayerStorageValue(cid,2493,1) end -- compatibilidade, verificar uso > ???...D:::H...??? doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a '..((quests_quant == 1) and '' or quests_quant)..' '..getItemNameById(item.uid)..'.') saveQuestsInfor(item.uid,getItemNameById(item.uid),cid,"Quest system by uid.") doPlayerAddItemEx(cid,doCreateItemEx(item.uid, quests_quant),true) else return false,doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a '..(quests_quant == 1 and '' or quests_quant)..' '..getItemNameById(item.uid)..' weighing '..math.floor(cap)..' oz it\'s too heavy.') end else--caso o player já tenha feito a quest, abri-se o baú de forma convencional, podendo obter os items que estejam dentro dele. return false end return true end local size,texto,rewards,peso = isContainer(item.uid) and getContainerSize(item.uid) or 0,'You have found a ',{},0 if(size > 0)then for i = size,0,-1 do local tmp = getContainerItem(item.uid, i) if(tmp.itemid > 0) then if(isItemContainer(tmp.itemid))then -- só é possível adicionar mais um inside. ou seja, uma bolsa com algo dentro desde que não tenha outra bolsa com mais coisas dentro, dentro dessa bolsa primária. table.insert(rewards,1,{[tmp.itemid] = {}}) texto = texto..' a '..getItemNameById(tmp.itemid)..''..(i+1<size and ',' or '.') for insize = getContainerSize(tmp.uid),0,-1 do local newtmp = getContainerItem(tmp.uid, insize) table.insert(rewards[1][tmp.itemid],{id=newtmp.itemid, val=(newtmp.actionid > 0 and newtmp.actionid or newtmp.type)}) end else --Foi feito dessa forma para não haver conflito com items do mesmo tipo. table.insert(rewards,{[tmp.itemid]=(tmp.actionid > 0 and tmp.actionid or tmp.type)}) if(tmp.type > 0)then texto = texto..' '..(tmp.type > 0 and tmp.type..' charges of ' or 1)..' '..getItemNameById(tmp.itemid)..''..(i+1<size and ',' or '.') elseif(tmp.actionid > 0)then texto = texto..' '..(tmp.type > 0 and tmp.type..' charges of ' or 1)..' '..getItemNameById(tmp.itemid)..''..(i+1<size and ',' or '.') else texto = texto..' '..getItemNameById(tmp.itemid)..''..(i+1<size and ',' or '.') end end peso = peso + getItemWeight(tmp.uid) end end if(getSaveQuestsInfor(tonumber(pos.x..''..pos.y..''..pos.z),cid))then --Função não usa marcação (getStore...)) if(playerCap >= peso)then for _,reward in pairs(rewards) do for item,valor in pairs(reward) do if(type(valor) == "table")then local bag = doCreateItemEx(item) for _,value in pairs(valor) do if(value and value.id > 0)then doAddContainerItemEx(bag,doCreateItemEx(value.id,(value.val<=0 and 1 or value.val))) end end doPlayerAddItemEx(cid,bag,true) elseif(isInArray(KEYS_DOOR,item))then -- se o item for uma key local ch = doCreateItemEx(item,1) doItemSetAttribute(ch,'aid',valor) doPlayerAddItemEx(cid,ch) else doPlayerAddItemEx(cid,doCreateItemEx(item, valor),true) end end end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, texto) saveQuestsInfor(tonumber((pos.x)..''..(pos.y)..''..(pos.z)),getItemNameById(table.maxn(rewards)),cid,"Quest system by Inside.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, texto..' weighing '..math.floor(peso)..' oz it\'s too heavy.' ) end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") end else return false, doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.") end return true end  
     
    Em lib/050-functions.lua adicione:
     
    function getSaveQuestsInfor(uid,cid) --[[( Marcryzius )]]-- local str = false if not(db.executeQuery("SELECT * FROM `server_quests`;"))then -- caso a table não exista, será criada db.executeQuery("CREATE TABLE `server_quests` (`uid` INTEGER, `name` VARCHAR(255), `name_player` VARCHAR(255), `pos` VARCHAR(255), `other` TEXT);") return getSaveQuestsInfor(uid,cid) end if(tonumber(uid))then str = db.getResult("SELECT * FROM `server_quests` WHERE `uid` = '"..uid.."' AND `name_player` = ".. db.escapeString(getCreatureName(cid))..";") elseif(type(uid) == 'string')then str = db.getResult("SELECT * FROM `server_quests` WHERE `name_player` = " ..db.escapeString(getCreatureName(cid)).. " AND `name` = '"..uid.."';") else return false,print('getSaveQuestInfor: tipo de uid invalido > '..tostring(type(uid))) end return (str:getID() == -1) and true or false end function saveQuestsInfor(uid,name,cid,other) --[[( Marcryzius )]]-- --[[ uid = Item.uid usado no bau(entre outros) para receber o item da Quest name = nome do item dado ao player ou nome da quest cid = identificacao do player other = informacoes adicionais para serem salvas junto a quest ]]-- if not(db.executeQuery("SELECT * FROM `server_quests`;"))then -- caso a table não exista, será criada db.executeQuery("CREATE TABLE `server_quests` (`uid` INTEGER, `name` VARCHAR(255), `name_player` VARCHAR(255), `pos` VARCHAR(255), `other` TEXT);") end -- caso o parametro uid seja numero, pega-se a posição do item ou, caso não, pega-se a posição do player. local other,pos2 = other or '','' local pos = type(uid) == 'number' and getThingPos(uid) or getCreaturePosition(cid) pos2 = 'x='..pos.x..', y='..pos.y..', z='..pos.z -- verifica se tudo está correto. if not(type(name) == 'string') or not(tonumber(cid))then return false, print('Funcao requer parametros: name,cid') end -- salva as informações na database. db.executeQuery("INSERT INTO `server_quests` (`uid`, `name`, `name_player`,`pos`,`other`) VALUES ("..(uid or tonumber(pos.x..''..pos.y..''..pos.z))..",'"..name.."', '"..getCreatureName(cid).."','"..pos2.."','"..other.."');") return true end  
    Exemplos de uso do sistema
    Quest na qual dá o prêmio de 100 gps:
    Quest na qual dá o prêmio apenas para knights (e não para EKs e outras promoções de knight):
    Quest na qual dá o prêmio apenas para paladins e suas promotions:
    Ressalva: Caso queira fazer para knights use o id 0 (zero) e não 4 (quatro).
    Quest na qual dá o prêmio apenas para todos:
    Nesse caso você pode usar AID 0 (zero) ou AID (2000).
    Caso usem o metodo 'inside' de items no baú pode-se também usar esses mesmos parâmetros para estabelecer a quem pode ganhar os items inseridos no baú. Lembre-se que em quests 'insides' não se usa UID, mantenha ela em 0 (zero):
    Utilizando o metodo 'inside' ela só se tornará uma quest caso tenha alguma AID para válidar como quest. Então para fazer uma validação na qual qualquer player possa obter os itens 'inside' como sendo uma quest, adicione a AID 2000 ao baú:
     
    Bem, é isso pessoal.
    Para finalizar, aqui vai uma crítica ao xtibia. MELHOREM ESSE SISTEMA DE EDIÇÃO DE TEXTO.
  7. Upvote
    Poccnn recebeu reputação de crazdraco em [Ajuda] Script Nurse Joy   
    Ele está dizendo que não encontrou a tabela. provavelmente o erro está na função getPokeballincontainer.
    Agora tu tem que verificar porque isso está ocorrendo. verifica se a função está funionando, se o player tem as pokeballs e etc. Só fazendo testes para saber qual é o problema.
  8. Upvote
    Poccnn recebeu reputação de amarelax em erro sistema de guild house   
    provavelmente o termo ghguild esteja escrito errado. verifique o termo correto.
  9. Upvote
    Poccnn recebeu reputação de amarelax em erro sistema de guild house   
    Não sei. 
    Parece que o termo ghguild faz referencia a getHouseGuild.
    Teria que ver em seu servidor quais as funções que ele dispõe.
  10. Upvote
    Poccnn recebeu reputação de Deadpool em [Resolvido] [Supporte] Vocation Door + Level Door   
    Não sei se esse negócio de rep ainda funciona. o XT é sempre bugado.
     
  11. Upvote
    Poccnn recebeu reputação de Yan Liima em Script jogo das almofadinhas !!   
    Eu fiz esse script para meu servidor, mas como foi especifico para mim ele não tem o algorítimo para embaralhar as almofadas.

    esse código é referente somente ao jogo das cores. 
    PS. lembre-se de fazer as devidas alterações no script para suas exigências. 
    function onStepIn(cid, item, pos, fPos) local tabela = {} if(item.actionid == 6301)then -- tiles do oeste -- carrega os dados do jogo pos.x = pos.x+1 for x = 1,6 do local piece = getThingFromPos({x=pos.x+x,y=pos.y,z=pos.z,stackpos=1}) if(piece and piece.uid > 0)then tabela[x] = piece.itemid doRemoveItem(piece.uid,1) end end -- modifica as posições local piece = tabela[6] table.remove(tabela,6) table.insert(tabela,1,piece) -- atualiza in-game os dados for _,piece in ipairs(tabela) do pos.x = pos.x+1 doCreateItem(piece, 1, pos) end elseif(item.actionid == 6302)then -- tiles do norte -- carrega os dados do jogo pos.y = pos.y+1 for y = 1,6 do local piece = getThingFromPos({x=pos.x,y=pos.y+y,z=pos.z,stackpos=1}) if(piece and piece.uid > 0)then tabela[y] = piece.itemid doRemoveItem(piece.uid,1) end end -- modifica as posições local piece = tabela[6] table.remove(tabela,6) table.insert(tabela,1,piece) -- atualiza in-game os dados for _,piece in ipairs(tabela) do pos.y = pos.y+1 doCreateItem(piece, 1, pos) end end return false end  
    Esse código se refere ao porta, mas ele não tem o algoritmo para embaralhar as cores.
    PS. não adicione ao teleporte pelo mapa editor uma posição para teleportar o player, o script faz isso. Lembre-se de fazer as devidas alterações no script para suas exigências.
    local items,pass = {1686,1687,1688,1689},true for X = 1,6 do for Y = 1,6 do local item = 0 if(X < 4 and Y < 4)then item = items[1] elseif(X < 4 and Y > 3)then item = items[2] elseif(X > 3 and Y < 4)then item = items[3] elseif(X > 3 and Y > 3)then item = items[4] end local piece = getTileItemById({x=32817+X,y=32333+Y,z=9},item) if not(piece.itemid == 0)then pass = false end end end if(pass)then doTeleportThing(cid,{x=32750,y=32345,z=14}) end  
  12. Amei
    Poccnn recebeu reputação de Senju uchira em Sistema de recompensa por porcentagem ao matar boss   
    pelo o que eu saiba, sim. se tu se interessar em testar tal versão, faz favor de enviar um feedback para nós.
  13. Upvote
    Poccnn recebeu reputação de BrunooMaciell em (Bug) AutoLoot   
    isso pode ocorrer porque o corpo não possa "abrir".
  14. Upvote
    Poccnn recebeu reputação de Yonie em Criação, configuração e edição de Source   
    eu gostei do modo que ele rege um texto. é um dos poucos que vejo que fazem bem ao jus de saber a gramática.
     
    Com relação aos duvidas do prezado, irei elucidar alguns pontos.
     
    O que de fato é uma Source? É somente um apanhando de dados e caminhos, que ao final se interligam criando um executável para startar todos os arquivos contidos dentro da pasta do Server?
    Source é o código fonte primário que após ser compilado se torna um programa executável. Dentro da source existem os códigos escritos/digitados em alguma linguagem que o computador entenda para fazer com que o sistema a qual foi criado seja executado.
     
    Por onde começar? Scripts do OtServ? Criação ou edição de uma Open Source?
    se tu não tem conhecimento algum sobre linguagem de programação, eu sugiro que comece pelo mais simples como edição de scripts em linguagem Lua ou Xml.
     
    Somente linguagem C/C++ já me basta?
    Isso ai vai depender do que você pretende fazer. você pode criar todo um sistema usando somente uma linguagem de programação. 
     
    Caso seja melhor editar uma Open Source ao invés de criar uma do zero, como identificar erros? Todos sabemos que sources já vindas dos servidores estão recheadas de bugs e erros propositais. Não acho interessante nem produtivo ir na tentativa e erro, ao ficar compilando e toda hora concertando erro por erro que aparecer no compilador, sendo que por muita vezes bugs não aparecerão e passarão direto.
    Para não ter esse tipo de problema, sugiro que aprenda primariamente  a redigir um código ou programa em linguagem alvo, c++, por exemplo, e posteriormente ir a edição de alguma source, assim se houver problemas tu saberá por experiencia e prática como resolver.
     
    Espero ter ajudado em suas questões. 
  15. Upvote
    Poccnn recebeu reputação de BrunooMaciell em (Bug) NPC   
    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) 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 talkState = {} local _,_,itemName = nil,nil,'' local function getCount(str) --[[( Marcryzius )]] return tonumber(str:match('(%d+)')) or 0 end local function tradeSay(str) --[[( Marcryzius )]]-- local tab,str = {},str:lower() tab[1] = str:match('sell') or str:match('buy') or '' -- Retorna se vai comprar ou vender. tab[2] = getCount(str) < 1 and 1 or getCount(str) -- Retorna a quantidade. tab[3] = str:match(tab[1]..(str:match('(%d+)') and "%s%d+%s" or " ").."(.+)") -- Retorna o nome do item. if not(tab[3])then local name = '' for nome in str:gmatch("(%a+)") do if(nome)then name = name..(name ~= '' and ' ' or '')..nome end end tab[3] = name end return unpack(tab) end local function getTabNames(tab) --[[( Marcryzius )]]-- -- Essa função retornar o valor dos index de uma tabela. local str = {} for t,v in pairs(tab) do if v then str[#str+1] = t end end return table.concat(str,', ')..'.' end ------------------- Configuração dos Itens ----------------------- local bonuscoin = 5984548 local tab = { --[nome] = {qte=quantidade de bonus coin,ID=ID dos Itens} ["pokeball"] = {qte=10,ID=12683}, ["greatball"] = {qte=12,ID=12682}, ["superball"] = {qte=15,ID=12684}, ["facebook"] = {qte=20,ID=12681}, ["holding"] = {qte=25,ID=2365}, ["love teddy"] = {qte=30,ID=15600}, ["dogs house"] = {qte=40,ID=23828}, ["music box"] = {qte=50,ID=17069}, } function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local _,_,prod = tradeSay(msg) ------------------- MESSAGES INICIAIS ---------------------------------------- if(tab[prod])then itemName = prod selfSay('Deseja comprar um {'..getItemNameById(tab[itemName].ID)..'} Por '..(tab[itemName].qte)..' online points?', cid) selfSay('Para saber quantos pontos possui digite {!opshop}.', cid) talkState[talkUser] = 1 elseif (msgcontains(msg, 'negociar') or msgcontains(msg, 'trade')) then selfSay('No momento tenho disponivel em meu estoque os seguintes itens: '..getTabNames(tab), cid) talkState[talkUser] = 0 ---------------------- NEGOCIAÇÃO ------------------------------- elseif talkState[talkUser] == 1 then if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then if getPlayerStorageValue(cid, bonuscoin) >= tab[itemName].qte then setPlayerStorageValue(cid, bonuscoin, getPlayerStorageValue(cid, bonuscoin) - tab[itemName].qte) doPlayerAddItem(cid, tab[itemName].ID, 1) selfSay('Parabéns, voce acabou de adquirir 1x '..getItemNameById(tab[itemName].ID)..'!', cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Agora voce tem: " .. getPlayerStorageValue(cid,bonuscoin) .. " Online Bonus.") else selfSay('Voce precisa de '..(tab[itemName].qte)..' online bonus para adquirir esse item.', cid) end else selfSay('Morra! FDP!', cid) end talkState[talkUser] = 0 else npcHandler:say('Foda-se! nao sei o que tu quer.', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())  
  16. Upvote
    Poccnn recebeu reputação de wevertonvrb em ajuda editar script   
    function onUse(player, item) if(getPlayerItemCount(player, 32255) >= 1)then doPlayerRemoveItem(player, 32255, 1) local itx = doCreateItemEx(32256,1) doItemSetAttribute(itx, "description", "Item comprado por " .. getCreatureName(player)) doPlayerAddItemEx(player, itx) else doPlayerSendCancel(player, "Voce não possui coins suficiente para pegar esse item") end return true end  
  17. Upvote
    Poccnn recebeu reputação de BrunooMaciell em Comando   
    function onSay(cid, words, param) if(getPlayerPremiumDays(cid) <= 0)then return true,doPlayerSendCancel(cid, 'Need premium.')end if exhaustion.get(cid, 501) then doPlayerSendCancel(cid, 'Você precisa espera 10 segundos para usar novamente.') elseif getPlayerStorageValue(cid, 32001) == 1 or getPlayerStorageValue(cid, 17000) == 1 or getPlayerStorageValue(cid, 17001) == 1 then doPlayerSendCancel(cid, "Você não pode usar bike e correr ao mesmo tempo") return false elseif isCreature(cid) then doCreatureSay(cid, "correr", TALKTYPE_ORANGE_1) setPlayerStorageValue(cid, 19000, 1) doChangeSpeed(cid, 1 * 5000) doSendMagicEffect(getPlayerPosition(cid), 1) exhaustion.set(cid, 501, 10) addEvent(function() setPlayerStorageValue(cid, 19000, 0) doRegainSpeed(cid) end, 15000) -- Tempo que vai durar a talkaction end return true end  
    local minutes = 15 -- Minutos function onSay(cid, words, param) if(getPlayerPremiumDays(cid) <= 0)then return true,doPlayerSendCancel(cid, 'Need premium.')end doSetCreatureLight(cid, 50000, 2000, minutes*60*1000) doSendAnimatedText(getCreaturePosition(cid), "Luz", math.random(1, 255)) return true end  
  18. Upvote
    Poccnn recebeu reputação de Darwiinxp em [Resolvido] Item ñao da attributtes   
    quando ele diz: duplicate move event found: ..... ele está dizendo que o codigo foi duplicado e por isso ele não sabe o que fazer. 
    busca onde está o codigo duplicado através dos ids  (8906,8907) e remove o que estiver duplicado.
  19. Thanks
    Poccnn recebeu reputação de Senju uchira em elementos do tibia   
    trabalhoso.
  20. Thanks
    Poccnn recebeu reputação de davidwcr99 em Npc set focus on player   
    Hail Xtibianos!
     
    Desenvolvi esse sistema pois achei legal o npc fazer isso.
     
    O que o sistema faz?
    Ele seta o focus do npc em um player quando o player se aproxima dele e espera por 5 segundos.
    Se o player não "falar" com o npc, o npc ignora ele (não foca mais o player). 
    Mas o player pode "falar" com o npc quando quiser (não interfere em nada nesse sistema).
     
    Em npchandler.lua:
    Procure:
     
    Adicione dentro da tabela:
     
    Procure:
     
    Antes da função:
     
    Adicione:
     
    Procure:
     
    Dentro do escopo de:
     
    Adicione:
     
    Pronto. Adicionado.
     
  21. Thanks
    Poccnn deu reputação a gabriel28 em Utilidade pública   
    Desculpem pelo título chamativo e/ou pela área está incorreta, mas enfim, lhes trago a solução definitiva pros problemas de bug relacionados a conteiners, como ficar comprando bp's infinitamente até crashar o server, stackar várias bps dentro de bps, jogar dentro da casa e usar o comando !leavehouse (ou algo do tipo) o que causa lag (talvez crash?) por conta da database ter que processar tantos itens saindo da house pro dp ou qualquer outra merda desse tipo.

    Vá em  ...\data\npc\lib\npcsystem procure por: -- Handles onBuy events. If you wish to handle this yourself, use the CALLBACK_ONBUY callback.

    Substitua toda a função por:
     

    Explicando: 
    Se o player tentar comprar mais de X itens de id Y, o npc não irá vender. Quando o player comprar uma quantidade menor que X, ganhará um cooldown de Z segundos até poder comprar novamente. Tudo isso configurável na tabela.
    Pra te prejudicar com esse tipo de bug agora, só se o "player" tiver com uma puta vontade de te foder.
    Testado e totalmente funcional em TFS 0.4 rev 3884, mas qualquer coisa é só adaptar pra outras versões que tenho certeza que funciona.

    EDIT: Não sei se já tem script similar por ai, mas esse ai é de minha autoria.
  22. Upvote
    Poccnn recebeu reputação de nbb147 em Sistema de Ferreiro - inovador.   
    Hail Xtibianos.
    Eu estava/estou atualizando alguns scripts meus bem antigos, então resolvi compartilhar para vocês que priorizam um jogo mais ao estilo: segunda vida na idade média. 
     
    Bom... tu terás que fazer uma sala parecida como essa e com esses ids (pois já foram implementados no código).

     
    Agora vamos implementar os códigos:
    Vá em data/actions.xml e insira essas tags:
     
    Em data/actions/scripts/tools; insira todos esses códigos cada um com seus respectivos nomes:
     
    ferreiro.lua
     
    bellow.lua
     
    wood:
     
    Pronto. Instalados os scripts; agora irei explicar como funciona o sistema.
     
    Para acender o crucible, você precisa usar o fire bug (5468) no crucible (8642) até ele acender.

     
    Agora você põe a arma em cima da bancada e clica no bellow para ele 'aquecer' a arma para forja.

     
    Depois de 'esquentar' a arma, voce forja ela no anvil (bigorna de id 2555) por um tempo (tempo esse determinado pelo uso do crucible).

     
    Se o crucible 'apagar', voce clica no bellow até ele voltar a 'acender', mas isso só pode ser feito algumas vezes.
     

     
    Se você clicar muitas vezes e ele não 'acender', então tu terás que usar o fire bug de novo no crucible.
     
     
    Novo sistema de forja adicionado.
    Agora tu poderás adicionar materiais a forja para obter outros items.
     
    Explicação desse novo sistema:
    Primeiro tu põe a arma base para adição de novos compostos na mesa.
     

     
    adicione o item em cima da arma.
    Clique no bellow e o item de adição desaparecera.
     

     
    Leve o item "aquecido" para a bigorna.
    Use a marreta nele até sair um efeito verde.
     

     
    Caso ele peça para por de volta na fornalha a arma, não adicione outro item, apenas aqueça-o.
     
    Faça esse mesmo procedimento adicionando compostos até que o item seja criado.
     

     
    aqui um manual de forja feito a parti da tabela forja no script ferreiro.lua
     
    Tu poderás adicionar mais compostos para obter outros items a seu critério.
     
     
    Nova atualização!
    Agora a sala de forja ficou assim:

     
    Agora é possível forjar/fundir items:
     
    Adicione os compostos necessário para forja um por um (desde que ele não seja agrupaveis) na bancada do crucible e clique no bellow até ele sumir. adicione todos os items necessários e ao final clique no crucible:
     
    Resultado ao clicar no crucible com os compostos:

     
    Resultado da forja com os compostos:

     
    Onde edito ou ponho novos compostos no script?
    No script bellow.lua existe a lista de compostos e suas respectivas forjas. É só copiar uma nova instrução e editar os valores para novos items que possam ser forjados.
     
    ATENÇÃO! Todos os compostos precisam ser exatos para a receita funcionar, nem mais nem menos.
     
     
    Função requerida:
     
     
    É isso pessoal, depois posto mais scripts atualizados meu; espero que gostem; qualquer erro ou dúvida deixem no comentário abaixo.
     
     
     
     
    Um vídeo explicando como fazer objetos de fundição:
     
     
     
     
  23. Thanks
    Poccnn recebeu reputação de raulcdj em Aulas de scripting lua   
    Hail xtibianos!
     
    Gostaria de saber se vocês se interessam em ter aulas de scripting lua.
     

     
    Já temos cerca de oito aulas prontas para o primeiro módulo,.
     
    As aulas são compostas de teoria e prática, métodos e tarefas para fixar o conhecimento aos alunos.
    Serão disponibilizados aulas em três módulos: conceito e aplicações básicas, técnicas e conceitos intermediarios, spoo lua; disponibilizado em uma gama de aulas que serão postas todos os sábados até o final do módulo vigente.
     
    Ao final, pretendemos dar uma "pip" de scripting lua para todos os alunos que completarem o(s) módulo(s).
     
    Dependendo da quantidade de interessados, poderemos iniciar as aulas em princípios do mês subsequente. 
     
    Deixem nos comentários seu aval ou sua queixa. Esperamos que tenham bastante participantes. 
     
    Obrigado.



  24. Upvote
    Poccnn recebeu reputação de raulcdj em Sistema de Ferreiro - inovador.   
    Hail Xtibianos.
    Eu estava/estou atualizando alguns scripts meus bem antigos, então resolvi compartilhar para vocês que priorizam um jogo mais ao estilo: segunda vida na idade média. 
     
    Bom... tu terás que fazer uma sala parecida como essa e com esses ids (pois já foram implementados no código).

     
    Agora vamos implementar os códigos:
    Vá em data/actions.xml e insira essas tags:
     
    Em data/actions/scripts/tools; insira todos esses códigos cada um com seus respectivos nomes:
     
    ferreiro.lua
     
    bellow.lua
     
    wood:
     
    Pronto. Instalados os scripts; agora irei explicar como funciona o sistema.
     
    Para acender o crucible, você precisa usar o fire bug (5468) no crucible (8642) até ele acender.

     
    Agora você põe a arma em cima da bancada e clica no bellow para ele 'aquecer' a arma para forja.

     
    Depois de 'esquentar' a arma, voce forja ela no anvil (bigorna de id 2555) por um tempo (tempo esse determinado pelo uso do crucible).

     
    Se o crucible 'apagar', voce clica no bellow até ele voltar a 'acender', mas isso só pode ser feito algumas vezes.
     

     
    Se você clicar muitas vezes e ele não 'acender', então tu terás que usar o fire bug de novo no crucible.
     
     
    Novo sistema de forja adicionado.
    Agora tu poderás adicionar materiais a forja para obter outros items.
     
    Explicação desse novo sistema:
    Primeiro tu põe a arma base para adição de novos compostos na mesa.
     

     
    adicione o item em cima da arma.
    Clique no bellow e o item de adição desaparecera.
     

     
    Leve o item "aquecido" para a bigorna.
    Use a marreta nele até sair um efeito verde.
     

     
    Caso ele peça para por de volta na fornalha a arma, não adicione outro item, apenas aqueça-o.
     
    Faça esse mesmo procedimento adicionando compostos até que o item seja criado.
     

     
    aqui um manual de forja feito a parti da tabela forja no script ferreiro.lua
     
    Tu poderás adicionar mais compostos para obter outros items a seu critério.
     
     
    Nova atualização!
    Agora a sala de forja ficou assim:

     
    Agora é possível forjar/fundir items:
     
    Adicione os compostos necessário para forja um por um (desde que ele não seja agrupaveis) na bancada do crucible e clique no bellow até ele sumir. adicione todos os items necessários e ao final clique no crucible:
     
    Resultado ao clicar no crucible com os compostos:

     
    Resultado da forja com os compostos:

     
    Onde edito ou ponho novos compostos no script?
    No script bellow.lua existe a lista de compostos e suas respectivas forjas. É só copiar uma nova instrução e editar os valores para novos items que possam ser forjados.
     
    ATENÇÃO! Todos os compostos precisam ser exatos para a receita funcionar, nem mais nem menos.
     
     
    Função requerida:
     
     
    É isso pessoal, depois posto mais scripts atualizados meu; espero que gostem; qualquer erro ou dúvida deixem no comentário abaixo.
     
     
     
     
    Um vídeo explicando como fazer objetos de fundição:
     
     
     
     
  25. Upvote
    Poccnn recebeu reputação de Dasdor em Look at attack   
    Eu criei esse sistema de look at attack porquê eu acho ridículo quando o character fica atacando o oponente sem estar "olhando" para ele.
     
    O que ele faz? Ele volta o character que esteja atacando um oponente para o oponente. Ele não impede de andar ou de mudar de direção, porém ele vai ficar mantendo a direção voltada ao oponente.
     
    Vamos adicionar o sistema.
    Em: creaturescript/creaturescript.xml, adicione essa tag:
     
    Agora em: creaturescript/scripts, crie um arquivo lua e adicione isso:
     
    Dentro do mesmo diretório, abra o arquivo login.lua e adicione isso a ele onde existe outros semelhantes.
     
    Pronto. Instalado o seus sistema de look at attack. 
    Agora quando o player atacar algum oponente,  ele ficará "olhando" para ele.
     
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...