Tudo que Henriquegb postou
-
[Duvida] registrar informações
mas pelo que eu entendi isso ai vai armazenas a storage, não? a ideia era que armazenasse o resultado dos math.random. você poderia me explicar o que acontece na parte do "-----aqui-----" porque eu n entendi bem ( pra ser sincero entendi nada). a ideia era bem mais simples que isso, era simplesmente armazenar o resultado dos 3 math.randoms que correspondem ao ataque, pra depois poder formar um numero com os 3. tipo: math.random 1 = 1 math.random 2 = 1 math.random 3 = 1 se eu conseguisse armazenar os math.random ( o resultado deles ) poderia retornar o numero "111" no script. entende? é como se eu formasse uma sequencia de numeros com numeros previos retirados aleatoriamente. pra mim parece q eu expliquei tão bem, mas só pra mim hahaha. edit-- tenho grandes convicções para acreditar que eu expliquei mal e vc fez um script baseado na minha mal explicação. ou eu não entendi mesmo edit2-- colocar pra fazer oque vc quiser com o valor do storage, está salvo nessa variável. eu preciso fazer exatamente isso, porem com o valor do math random. salvar o valor dos 3 math.random em 1 variavel, fazendo assim, eu poder retornar o valor a qualquer hora. será mt complexo?
- Diferença entre cooldown na utilizaçõao de itens
- [Duvida] registrar informações
-
[Duvida] registrar informações
veja, eu não entendi muito bem as duas formas, mas deixa eu tentar explicar melhor. o script está assim (não está terminado, mas da pra ter uma base) local damageperna = math.floor((getCreatureMaxHealth(attacker)*5)/5) function onStatsChange(cid, attacker, type, combat, value) if math.random(1, 100) <= 10 then if isCreature(cid) and getCreatureName(cid) == 'Dicer' then if getPlayerStorageValue(attacker, 9000) == 0 then doCreatureSay(uid, "Então você escolheu o combate, vamos ver o que a sorte tem para você", TALKTYPE_MONSTER_YELL) doSendMagicEffect(getCreaturePosition(cid), 26) setPlayerStorageValue(attacker, 9000) elseif getPlayerStorageValue(attacker, 9000) == 1 then doCreatureSay(uid, "onde é que paramos?", TALKTYPE_MONSTER_YELL) doSendMagicEffect(getCreaturePosition(cid), 26) end local dice = math.random(1, 6) if dice == 1 then addEvent(function() if isCreature(cid) then doCreatureSay(uid, "1! haha, o jogo diz que você deve perder a perna", TALKTYPE_MONSTER_YELL) doAddCondition(attacker, paralyse) doSendMagicEffect(getCreaturePosition(attacker), 0) doCreatureAddHealth(attacker, -(damageperna)) addEvent(doCreatureSay, 1000, "Então o que me diz? vamos continuar jogando? HAHA", TALKTYPE_MONSTER_YELL) if getPlayerStorageValue(attacker, 9002) == 0 and getPlayerStorageValue(attacker, 9003) == 0 and getPlayerStorageValue(attacker, 9004) == 0 then setPlayerStorageValue(attacker, 9002) elseif getPlayerStorageValue(attacker, 9003) == 0 and getPlayerStorageValue(attacker, 9004) == 0 then setPlayerStorageValue(attacker, 9003) elseif getPlayerStorageValue(attacker, 9004) == 0 then setPlayerStorageValue(attacker, 9004) end end end, 1500) elseif dice == 2 then addEvent(function() if isCreature(cid) then doCreatureSay(uid, "2! haha, o jogo diz que eu devo arrancar seu braço! HAHAHAHA", TALKTYPE_MONSTER_YELL) parei ai mas o sistema seria o mesmo até chegar no storage maximo que é 9004. acredito que ficou uma gambiarra bem feia no fim das contas, mas vou tentar explicar. local dice = math.random(1, 6) if dice == x then local dice seria a base pra fazer o jogo ser randomico (bem obvio). agora : if getPlayerStorageValue(attacker, 9002) == 0 and getPlayerStorageValue(attacker, 9003) == 0 and getPlayerStorageValue(attacker, 9004) == 0 then setPlayerStorageValue(attacker, 9002) elseif getPlayerStorageValue(attacker, 9003) == 0 and getPlayerStorageValue(attacker, 9004) == 0 then setPlayerStorageValue(attacker, 9003) elseif getPlayerStorageValue(attacker, 9004) == 0 then setPlayerStorageValue(attacker, 9004) end essa é a parte que bagunça um pouco mas da pra entender (como não ta pronto, ainda não testei) funcionaria assim : o script verifica o storage do jogador e se ele não tiver nenhum dos 3 storages que são setados a cada ataque ele recebe o storage 1 ( que seria o primeiro ataque ). se a primeira condição for falsa, significa que ele possui algum storage, ai eu fui excluindo scripts dos ataques anteriores um por um de forma que vá identificando bem qual o estagio do jogo. AGORA viria a parte que eu não consigo fazer nem pensar como fazer. se o jogador tiver o storage 9004 que é o ultimo ataque ( o terceiro ). o script verificaria o storage e traria a função (que não existe) que eu disse: getAllRandomValues(math1, math2, math3) if math1 * math2 * math3 <= xxx then alguma coisa elseif math1 * math2 * math3 == xxx then alguma coisa elseif math1 * math2 *math3 >= then alguma coisa
-
[Duvida] registrar informações
eu imaginei mesmo que fosse bem complexo. segue a ideia estou bolando um creaturescript que o monstro tem 10% de chances (dado inutil) de iniciar uma mecanica mecanica : ele faz um math.random (1, 6). e finaliza dps tem mais 10% de chances de de fazer dnv e assim consecutivamente. assim por 3x. ou seja, ele fez 3 math.random(1, 6) ( bolei uma forma bem feia de contar as vezes mas, enfim.) queria que na quarta vez eu pudesse usar o valor dos math.random na formula por exemplo. getAllRandomValues(math1, math2, math3) if math1 * math2 * math3 <= xxx then alguma coisa elseif math1 * math2 * math3 == xxx then alguma coisa elseif math1 * math2 *math3 >= then alguma coisa se eu soubesse como, poderia fazer até uma função para isso hahaha pois parece bem util. ou então uma forma de inserir os valores em uma tabela, porque ai seria possivel usar o table.concat fazendo um sistema igualmente interessante. table.insert(maths, 1, math1) and tableinsert (maths, 2, math2) and table.insert (maths, 3, math3) local finaljudge = table.concat (maths) if finaljudge <= XXX then bla bla bla toda aquela historia porque acredito que o table.concat retornaria a junção dos 3 numeros, por exemplo. math1 = 2 math2 = 1 math3 = 6 table.concat retornaria 216. estou certo? acho que deu pra entender haha
- [Duvida] registrar informações
-
(Resolvido)Como colocar Sistema de Matar Player em Poketibia
function onDeath(cid, corpse, killer) if isPlayer(cid) then doCreatureSetSkullType(killer, skull) else end end você adiciona isso na sua pasta creaturescripts. e adiciona isso no creaturescripts.xml <event type="death" name="NOMEAQUI" script="NOMEDOARQUIVOAQUI.lua"/> e usa aquela tabelinha de skull que eu te mostrei. não sei se servidores derivados retornam skull_white para não entrar em pz. teste.
-
[Duvida] registrar informações
Olá galera, Como ficou explicito no titulo, gostaria de saber se existe alguma forma de registrar informações que foram geradas ou informadas dentro do script. deixe-me exemplificar para facilitar. Situação1 math.random(x, y) supondo que um script possua vários math.random durante sua execução, é possível registrar seus respectivos resultados? eu já vi scripts em que as pessoas declaram uma tabela vazia, e a o decorrer do script inserem e retiram valores dela. acredito que esse seja um dos métodos mas não consigo entender como. Situação2 getCreaturePosition(cid) essa linda função que retorna a posição da criatura em x,y e z. é possivel registrar a posição inicial do jogador ao executar o script? vi um script do Wolf que ele usa a função de inserir em tabela, mas igual a situação1 não consigo compreender apenas ao ler o script. ---enfim, o pedido é praticamente pra ensinar a usar uma função especifica, mas caso haja outro modo, gostaria de saber. aguardo dicas haha, obrigado galera.
-
(Resolvido)Como colocar Sistema de Matar Player em Poketibia
Servidores normais são os de puro tibia. Servidores derivados são os de poketibia, narutibia, digitibia e todas essas coisas. se você editar o script que eu te passei da seguinte forma : function onDeath(cid, corpse, killer) if isPlayer(cid) then doPlayerAddLevel(killer, 1) doCreatureSetSkullType(attacker, skull) else end end você troca "skull" pela skull que deseja, sendo elas : SKULL_NONE = 0 SKULL_YELLOW = 1 SKULL_GREEN = 2 SKULL_WHITE = 3 SKULL_RED = 4 SKULL_BLACK = 5 SKULL_LAST = SKULL_BLACK teste isso e veja se ele poderá entrar em pz com skull_white, se puder será mais complicado. procure também no seu config.lua por isso : pzLocked = 60 * 1000 e veja como está, se tiver 0 pode ser isso. ( esta linha do config.lua vai definir quanto tempo o player pega pzlock ) se nada disso funcionar, teremos problemas kkk boa sorte. -- e antes que me pergunte: essa linha pode resolver um possivel bug que só pensei agora: addEvent(doCreatureSetSkullType, 60 * 1000, attacker, SKULL_NONE)
-
(Resolvido)Como colocar Sistema de Matar Player em Poketibia
vamos por partes porque eu não entendo muito de servidores derivados. a função PK (skull) ainda funciona no servidor derivado? ou seja, quando vc mata alguem vc fica com skull? se a resposta for sim da pra fazer algo acredito.
-
(Resolvido)Como colocar Sistema de Matar Player em Poketibia
Você deve colocar na sua pasta Creaturescripts. e também deve criar uma tag no arquivo Creaturescripts.xml
-
(Resolvido)Como colocar Sistema de Matar Player em Poketibia
Os players quando morrem geralmente perdem Exp, acredito q isso seja no config.lua. mas, esse script deve funcionar para o seu fim. (ao matar player ganhar 1 lvl) function onDeath(cid, corpse, killer) if isPlayer(cid) then doPlayerAddLevel(killer, 1) else end end nem testei, e nem sei se é exatamente isso q quer. teste e diga.
-
Regen Soul
Fiz uma segunda busca para encontrar algum possível conflito, e de fato n encontrei nada. Mas a certeza só vira com o teste porém, eu n me atrevo a brincar MT com as sources. Acredito q o vankk tenha razão. Boa sorte
-
Tibia Guitar Hero [0.3.6~0.4]
Embora seja um sistema 4fun (no meu ponto de vista), e impressionante a forma como vc domina a linguagem Lua, sigo cada trabalho q vc posta pois por mais q eu n vá usar, servem de estudo. Acredito que muitos, assim como eu, também façam isso. No mais, parabéns por essa engenhosa produção.
-
Glacier Set dando conditions em área
estou extremamente confuso. Acho q eu me confundi, acho que não da dano se estiver com a mãozinha aberta. Preciso testar, chegando em casa verificarei. -edit não abre pk mesmo não, viajei legal :c
-
Glacier Set dando conditions em área
Bom, teria q fazer o script verificar se o alvo é player e SOMENTE se fosse player seguisse para verificar skull. Caso o alvo não possuia skull verificasse se o próprio player possui skull Caso não fosse criatura seguisse normalmente. Acho que fazer por spell não mudaria nesse caso, se não me engano ataques em área abrem PK da mesma forma. Se estiver ilegível me perdoem (estou pelo cell)
-
Glacier Set dando conditions em área
Acho q deveria verificar skull nos 2 players. No que possui o set e na vítima do condition, do contrário se o usuário do set abrir pk em cima de outro acho que não iria acertar os efeitos no player q n tem skull. Posso estar errado haha, mas pela lógica parece correto.
-
(Resolvido)Script infuncional (com e sem erro no distro)
bom, fazem quase 24hrs desde o meu ultimo post. consegui resolver o problema de distro que eu estava enfrentando e decidi q ia testar o script agora. mas ao bater o olho no script percebi um engano. acompanhe comigo: local storage, escudo = 40955, 2520 function onCastSpell(cid, var) local slot1, slot2 = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid, getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid local target, pos = getCreatureTarget(cid), getCreaturePosition if isPlayer(target) then if slot1 == escudo or slot2 == escudo then setPlayerStorageValue(target, storage, 1) doCreatureSay(target, 'Charged!', TALKTYPE_MONSTER) doSendMagicEffect(pos(target), CONST_ME_STUN) addEvent(function() setPlayerStorageValue(target, storage, -1) doCreatureSay(target, 'Charged lost!', TALKTYPE_MONSTER) doSendMagicEffect(pos(target), CONST_ME_MAGIC_GREEN) end, 4000) else doSendMagicEffect(pos(cid), CONST_ME_POFF) return doPlayerSendCancel(cid, 'Você só pode usar esta magia com o escudo "'.. getItemNameById(escudo) ..'" equiipado.') and false end else doSendMagicEffect(pos(cid), CONST_ME_POFF) return doPlayerSendCancel(cid, 'Você só pode usar em jogadores.') and false end return true end provavelmente eu expliquei errado, mas não é o player que ataca que precisa ter escudo, mas sim o player que recebe a magia. ele só pode conseguir o storage caso tenha determinado escudo, mas acho que é bem mais simples de resolver, veja se estou certo. local storage, escudo = 40955, 2520 function onCastSpell(cid, var) local target, pos = getCreatureTarget(cid), getCreaturePosition local slot1, slot2 = getPlayerSlotItem(target, CONST_SLOT_RIGHT).itemid, getPlayerSlotItem(target, CONST_SLOT_LEFT).itemid if isPlayer(target) then if slot1 == escudo or slot2 == escudo then setPlayerStorageValue(target, storage, 1) doCreatureSay(target, 'Charged!', TALKTYPE_MONSTER) doSendMagicEffect(pos(target), CONST_ME_STUN) addEvent(function() setPlayerStorageValue(target, storage, -1) doCreatureSay(target, 'Charged lost!', TALKTYPE_MONSTER) doSendMagicEffect(pos(target), CONST_ME_MAGIC_GREEN) end, 4000) else return false end else doSendMagicEffect(pos(cid), CONST_ME_POFF) return doPlayerSendCancel(cid, 'Você só pode usar em jogadores.') and false end return true end no caso eu mudei o local slot para que o player que seja verificado seja o Target e não o cid(player que executa a ação). julguei preciso mudar a ordem do local target, acredito q ele precise ser declarado antes de ser usado (talvez tenha sido irrelevante). e no else que retornava a função, deletei completamente as informações dele pois o player que está atacando n precisa receber nenhuma mensagem do tipo. diga-me se errei em algo haha (por favor).
-
Rings não funcionam em alguns chars
os 3 personagens que vc citou bugam com todos os aneis citados? e não ocorre nenhum erro no distro quando vc equipa eles com os personagens citados? já experimentou criar outro elite knight e testar se o bug repete? notei também que alguns dos rings não possuem function="onDeEquipItem"/> dê uma investigada se os IDS dos rings que bugam batem com os que não possuem a função. <movevent event="Equip" itemid="2165" slot="ring" function="onEquipItem"/> <movevent event="Equip" itemid="2166" slot="ring" function="onEquipItem"/> <movevent event="Equip" itemid="2167" slot="ring" function="onEquipItem"/> <movevent event="Equip" itemid="2168" slot="ring" function="onEquipItem"/> <movevent event="Equip" itemid="2169" slot="ring" function="onEquipItem"/> <movevent event="Equip" itemid="2207" slot="ring" function="onEquipItem"/> <movevent event="Equip" itemid="2208" slot="ring" function="onEquipItem"/> <movevent event="Equip" itemid="2209" slot="ring" function="onEquipItem"/> <movevent event="Equip" itemid="2213" slot="ring" function="onEquipItem"/> <movevent event="Equip" itemid="2214" slot="ring" function="onEquipItem"/> <movevent event="Equip" itemid="6300" slot="ring" function="onEquipItem"/> <movevent event="Equip" itemid="18408" level="120" slot="ring" function="onEquipItem"/> <movevent event="Equip" itemid="10310" level="100" slot="ring" script="others/noxiousclaw.lua"/> Caso o ID bata com algum dos que bugam faça alguns testes em cima disso. (já adianto que o ID 2168 é o life ring) o bug pode ser a falta do DeEquip (pouco provavel) mas provavelmente o bug deve estar nos aneis que não possuem a função. se eu estiver certo é uma mão na roda, na procura do bug. bom, foi um palpite. boa sorte, espero alguma resposta.
-
Glacier Set dando conditions em área
Wolf, existe alguma diferença tecnica entre transformar um item que está equipado em outro e equipar um novo item? doTransformItem(uid, toitemid[, count/subtype]) sei que faz bastante tempo q esse topico foi criado mas, se o usuario duplicar o item no seu client e items.otb e xml. fizer um action que transforma um item no outro. daria pra fazer um (on/off) o que "solucionaria" o problema de abrir pk atoa ao estar fullset. meu medo é que quando transforme o item acabe bufando tendo que tirar e equipar dnv ( o que tornaria feio ). mas é possivel também que seja irrelevante porque não vi nenhuma função que gire em torno de equipar ou desequipar. enfim, é uma teoria.
-
Regen Soul
verifiquei aqui, e o local onde determina esse ganho de souls realmente é em player.CPP pra ser mais especifico, este codigo: //soul regeneration if(gainExp >= level) { if(Condition* condition = Condition::createCondition( CONDITIONID_DEFAULT, CONDITION_SOUL, 4 * 60 * 1000)) { condition->setParam(CONDITIONPARAM_SOULGAIN, vocation->getGainAmount(GAIN_SOUL)); condition->setParam(CONDITIONPARAM_SOULTICKS, (vocation->getGainTicks(GAIN_SOUL) * 1000)); addCondition(condition); } } se for realmente editar suas sourcers, sugiro que dê uma olhada também nos outros codigos que também citam as souls (condition.cpp, condition.h e muitos outros) só pra garantir que não dê nenhum conflito ( o que é pouco provavel, porque o pouco que busquei conclui que o que vc pediu se resolve somente nesse codigo ai que se localiza em player.cpp) Boa sorte. --edit caso isso resolva seu problema escolha como melhor resposta, a resposta do Vankk. afinal o conhecimento do assunto era dele. boa sorte².
-
(Resolvido)Script infuncional (com e sem erro no distro)
Eu entendi perfeitamente a explicação, não posso testar o script agora. encontrei uns erros na minha distro e estou investindo tempo procurando e tentando editar outras. mas, acredito que funcione. Somente pela "aula" que recebi já da pra dar o topico como sanado. Uma correção (no caso tinha tanto erro que não foi bem uma correção) explica tão bem quanto os proprios tutoriais. OBRIGADO PELA ATENÇÃO rep+
-
(Resolvido)Script infuncional (com e sem erro no distro)
testarei logo logo, no momento estou lendo o script de cima a baixo algumas 50vezes, para detectar todos os erros. inclusive não sabia que podia usar mais de 1 else... mas pelo visto é possivel declarar 1 else para cada if que foi aberto, correto? todavia fiquei curioso a respeito dessa linha especifica: return doPlayerSendCancel(cid, 'Você só pode usar esta magia com o escudo "'.. getItemNameById(escudo) ..'" equiipado.') and false para declarara uma função no meio de uma frase essa é a "formula"? colocar entre "'. . XXyyXyxyX . .'"? haha, há tantas coisas para aprender... obs-- uma outra (ultima!?) pergunta, nesse addevents : addEvent(function() setPlayerStorageValue(target, storage, -1) doCreatureSay(target, 'Charged lost!', TALKTYPE_MONSTER) doSendMagicEffect(pos(target), CONST_ME_MAGIC_GREEN) end, 4000) caso o player mude seu target durante os 4 segundos, acho que o script vai retirar o storage de um terceiro player. estou certo?
-
(Resolvido)Script infuncional (com e sem erro no distro)
Bom dia/tarde/noite. pra ser direto ao ponto... Eu tive uma ideia de um sistema muito interessante para meu servidor. após algum tempo estudando formas de faze-lo eu descobri uma forma (bem feia) de fazer. Após algum tempo trabalhando no script cheguei a um resultado... porém não funcional vejamos: Primeiro a ideia: esse script ,era pra ser bem simples, seria uma skill target que quando atingisse o inimigo deixaria nele um storage value por determinado tempo. sairia um texto animado por puro capricho. passado o tempo esse storage value seria removido e sairia outro texto animado. Esse sistema que pretendo fazer funcionaria somente se o player tivesse equipado com um item, mas tornou-se muito mais problematico do que eu imaginava. vou postar os 2 pois acredito que o erro seja o mesmo então... não muda muito haha. Verifica se X item está equipado: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -2, -1, -3, -2) local inimigo = {} local escudo = 2520 local slot1 = getPlayerSlotItem(getCreatureTarget(cid), 5) local slot2 = getPlayerSlotItem(getCreatureTarget(cid), 6) local storage = 199901 function onCastSpell(cid, var) table.insert(inimigo, getCreatureTarget(cid)) if isPlayer then if slot1 or slot2 == 2520 then setPlayerStorageValue(#inimigo, storage, 1) doSendAnimatedText(getCreaturePosition(cid), 'Charged', 180) else return doCombat(cid, combar, var) end addEvent(function() if isCreature(cid) then setPlayerStorageValue(#inimigo, storage, 0) doSendAnimatedText(getCreaturePosition(cid), 'Charge lost', 180) end end,4000) return doCombat(cid, combat, var) end end Não verifica se item está equipado: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -2, -1, -3, -2) local inimigo = {} local storage = 199901 function onCastSpell(cid, var) table.insert(inimigo, getCreatureTarget(cid)) if isPlayer then setPlayerStorageValue(#inimigo, storage, 1) doSendAnimatedText(getCreaturePosition(cid), 'Charged', 180) else return doCombat(cid, combat, var) end addEvent(function() if isCreature(cid) then setPlayerStorageValue(#inimigo, storage, 0) doSendAnimatedText(getCreaturePosition(cid), 'Charge lost', 180) end end,4000) return doCombat(cid, combat, var) end O que me intriga muito nos 2 scripts é o fato de não ter nenhum erro no debugger (OtScriptLive) e nem no distro do servidor. o unico erro aparente é quano o player usa que aparece o erro avisando que o player está sem mana... porém baixei o custo de mana da magia pra 0 e testei em 2 personagens com mais de 5k de mana... eu sou um scripter iniciante (MUITO iniciante... NOVATO... NEWBA) portanto deve ser um erro ridiculo... alguem tem alguma solução? haha
-
[HELP] Opcode error na compilação
up :C