-
Total de itens
350 -
Registro em
-
Última visita
-
Dias Ganhos
1
Tudo que nbb147 postou
-
tfs 0.3 Npc Simples que da item se for level 25+
pergunta respondeu ao elias vieira alves de nbb147 em Scripts
cria um arquivo xml com o nome "npc", na pasta npcs e coloca isso dentro: <?xml version="1.0" encoding="UTF-8"?><npc name="NPC" script="data/npc/scripts/NPC.lua" walkinterval="2000" floorchange="0"> <mana now="100" max="100"/> <health now="100" max="100"/> <look type="100"/> <parameters> <parameter key="module_shop" value="0" /> <parameter key="message_greet" value=" Ola |PLAYER|, carrego pedras muito preciosas comigo e posso te dar uma se você for digno e for level 25+ voce acha que pode ter esse level? " /> </parameters></npc> cria um arquivo lua com o nome "npc", na pasta npcs/scripts e coloca isso dentro: local keywordHandler = KeywordHandler:new()local npcHandler = NpcHandler:new(keywordHandler)NpcSystem.parseParameters(npcHandler)local talkState = {}function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) endfunction onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) endfunction onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) endfunction onThink() npcHandler:onThink() endfunction creatureSayCallback(cid, type, msg)local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cidif(not npcHandler:isFocused(cid)) thenreturn falseendif getPlayerStorage(cid, 5151) == 1 thennpcHandler:say("Você já recebeu o item.", cid)return falseendlocal iditem = 1234 -- id do item que o player irá receberlocal quant = 1 -- quantidade de itensif msgcontains(msg, "yes") or msgcontains(msg, "sim") thenif getPlayerLevel(cid) >= 25 thennpcHandler:say("Ótimo treinador, você é level 25+ e como recompensa te dou um pedra de evolução use ela como quiser até mais treinador .", cid)doPlayerAddItem(cid, iditem, quant )setPlayerStorageValue(cid, 5151, 1)elseselfSay('Desculpe mas você não é digno e não tem level 25+ tente avançar de level e venha falar comigo novamente boa sorte treinador.', cid)return trueendnpcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)npcHandler:addModule(FocusModule:new()) -
print('11112 > '..getPlayerStorageValue(cid, sto) or 'nil')player que possui a sto:[01/08/2016 09:23:11] 11112 > -1player que não possui a sto:nesse caso não retorna nenhuma sto print('800000 > '..getPlayerStorageValue(cid, sto) or 'nil')player que possui a storage 11112:[01/08/2016 09:26:07] 800000 > 300player que não possui a storage 11112:nesse caso tbm não retorna nada caso não tenha compreendido a minha explicação, posso tentar explicar de uma outra maneira.
-
no caso eu teria que usar qual sto? a da velocidade(800000) ou a que verifica se o monstro vai correr ou não atrás (11112)?
-
simplesmente perfeito, gostaria muito de compreender os scripts como você compreende, vou continuar estudando pra alcançar esse nível, muito obrigado e rep+
-
eu testei e é possível aumentar e diminuir a velocidade da criatura, intrigante isso, bem complexo de se entender msmo, faz tempo que analiso e tento modificar, mas sempre sem sucesso..
-
há foi mesmo, perdão, bom ficou do mesmo jeito, o monstro continua aumenta a velocidade e o monstro ainda corre atrás de quem não tem a storage, não entendo porque acontece isso
-
fiz de uma maneira aqui que ela sem o getsto funciona perfeitamente, agora quando coloco diz que a não reconhece a criatura: [31/07/2016 15:14:36] [Error - CreatureScript Interface] [31/07/2016 15:14:36] data/creaturescripts/scripts/ryuuthemonk.lua:onDeath[31/07/2016 15:14:36] Description: [31/07/2016 15:14:36] (luaGetCreatureStorage) Creature not found e o script ficou assim: function onDeath(cid, corpse, deathList)local monstName,players = "Ashar", {}if isMonster(cid) and string.lower(getCreatureName(cid)) == string.lower(monstName) and getCreatureStorage(check, storage) == 2 thendoCreatureSay(cid, "Você matou Ashar o líder da ceita.", TALKTYPE_ORANGE_1)for _, check in pairs(deathList) doif isPlayer(check) thensetPlayerStorageValue(check, 92000, 3)return trueendend endend agora me explica uma coisa, você disse para eu remover o isplayer e o getsto do if, bom o isplayer eu até entendi o porque, mas o getsto porque eu iria retirar? como eu iria fazer a checagem da storage?
-
se eu colocar return true ou retira-lo isso não ira atrapalhar no processo de checagem? pois essa parte é a parte que checa se o player pode atacar ou não, isso não iria influenciar e acabar bugando? bom, essa storage o player ganha através de missões.
-
como eu poderia fazer isso? dessa forma? for _, check in pairs(deathList) doif isPlayer(check) thentable.insert(players, check)
-
concertei a parte da storage, e depois removi essa checagem, já que é inútil, e não funcionou, agora até mesmo sem a checagem da sto o player não recebe a nova sto.
-
sim, só nessa parte, mas agora ficou com o seguinte problema, o monstro fica com uma velocidade absurda a cada vez que chega um personagem que não tem storage e depois um que tem, a velocidade vai só aumentando, e o monstro fica seguindo quem não tem a storage, não acerta dano, mas fica perseguindo
-
ficou do mesmo jeito, eu percebi que o problema está na checagem da storage, pois quando tiro a checagem funciona normalmente.
-
e ai pessoal, eu estava montando um creaturescript pra quando o player matar um monstro checar se ele(o player) possui uma storage e caso ele tenha, ser adicionado uma outra storage por cima, no caso a storage só é adicionada ao matar o monstro, se o player possuir uma devida storage, sou uma bosta em montar creaturescript, eles nunca funcionam como eu imagino que funcionam venho aqui pedir a ajuda de alguém mais experiente : O agradeço desde já qualquer ajuda, script: function onDeath(cid, corpse, deathList)local Storage,monstName,players = 92000, "Ashar", {}if isMonster(cid) and string.lower(getCreatureName(cid)) == string.lower(monstName) and isPlayer(target) and getCreatureStorage(target, storage) == 2 thendoCreatureSay(cid, "Você matou Ashar o líder da ceita.", TALKTYPE_ORANGE_1)for _, check in pairs(deathList) doif isPlayer(check) thentable.insert(players, check)endendfor _, var in pairs(players) dosetPlayerStorageValue(var, Storage, 3)endend return trueend
-
olha essa parte do script e eu vou explicando: local name, storage = 'fire devil', 11112local sto = 800000local speedchange = 0function onAttack(cid, target)if isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) < 0 thensetPlayerStorageValue(cid, sto, getCreatureSpeed(cid))doChangeSpeed(cid, -getCreatureSpeed(cid))doChangeSpeed(cid, speedchange)return falseendif isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) > 1 then -- O ERRO PERTENCE A ESSA PARTEdoChangeSpeed(cid, -getCreatureSpeed(cid))local oldspeed = getPlayerStorageValue(cid, sto) == -1 and getCreatureBaseSpeed(cid) or getPlayerStorageValue(cid, sto)doChangeSpeed(cid, oldspeed)return false -- O PROBLEMA ESTA AQUIendreturn trueend no onAttack existem dois if de checagem de storage no player, é feito uma checagem no player ao ser atacado pelo monstro, checa o nome da criatura(fire devil) para saber se é ela que está atacando, checa a storage no target(o player no caso), então é setada uma storage salvando a velocidade da criatura(setPlayerStorageValue(cid, sto, getCreatureSpedd(cid))), então a velocidade é alterada com o doChangeSpeed(cid, -getCreatureSpeed(cid)) e com o doChangeSpeed(cid, speedchange). o próximo if, é para checar novamente, faz a mesma checagem, só que com uma pequena diferença chega se a storage é positiva que é o valor necessário para o monstro conseguir atacar e voltar a velocidade(essa checagem tbm é feita no player isPlayer(target)), então se o player tiver a storage e for a criatura fire devil que atacou ele a velocudade retornará ao que era antes, pois havia salvado. resumindo a storage ganha pelo monstro depende da checagem que é feita da storage do player, espero que tenha entendido kkkkk valeu
-
exatamente, sim, certeza ela adiciona pois como eu disse ela funciona até certo ponto, e eu sei que funciona pois já usei em outras ocasiões, tipo é feito duas checagens a primeira na linha do if é pra saber se o player possui a storage, e a que adiciona ou tira a velocidade do monstro depende da checagem feito no jogador, tipo, checa a storage do jogador se ele possuir, é feito a checagem do monstro e nesse processo é adquirido a sto de velocidade, estou com pressa agora, qualquer coisa te explico mais tarde
-
Bom, vou explicar cada parte "onAttack", "onCombat" e o "onKill": O onAttack checa se o player possui certa storage e se ele não tiver o monstro não consegue atacar o ele(nessa parte o player faz uma checagem da velocidade do monstro e guarda ela a ligando a uma storage), se ele tiver a storage o monstro consegue ataca-lo, e caso chegue primeiro um player que não possua ele ficará parado, em seguida se aparecer um player que tenha a storage ele faz a checagem novamente só que retornando a velocidade que o monstro tinha, pois ele guardou pois ele havia guardo. O onCombat ele faz com que o player não consiga atacar o monstro se ele não possuir storage, se ele possuir simplesmente consegue ataca-lo. O onKill simplesmente retira uma storage e adiciona outra ao matar a criatura. Obrigado por tentar ajudar.
-
@Poccnn por favor cara, olha mesmo, por que tá foda, já endoidei muito com esse script, acho que apenas não tenho conhecimento o suficiente ainda para fazer o que desejo, agradeço desde já a sua colaboração. @ricardo231 como? isso evitaria do return false deixar de atrapalhar o 'onAttack'?
-
quando coloca return true ele fica bugando(travando), acho que é porque o script retorna tudo como verdadeiro, até a parte que tira a speed, conhece algum método de fazer isso sem dar esse problema? ; /
-
--------------------------EDIT---------------------- o monstro está seguindo o jogador, mas como tem um return false na segunda checagem do onAttack o monstro não ataca o jogador que possui a storage(ou seja, persegue mas não acerta o dano), queria saber como faço para não precisar desse return false, pois ele retorna dizendo que a função onAttack é falsa ;c, com o meu baixo conhecimento sobre script não vejo um meio de fazer isso ;c
-
mais ai é que ta cara, eu tentei fazer isso, eu relacionei a velocidade que ele estava a uma storage(800000), dessa maneira salvando a velocidade dele, entende?
-
E ai galera, esses dias eu estava tentando fazer um script que o pessoal procura muito que é o famoso sistema de saga, que consiste no seguinte, o player só pode atacar e ser atacado por uma devida criatura se possuir certa storage caso contrario a criatura não ira se mover, bom, consegui fazer quase tudo em lua, só que existe um pequeno problema, que é o seguinte, esse problema está na parte que retorna a speed da criatura, a speed não retorna, tudo funciona corretamente exceto essa parte, peça a ajuda de vocês e agradeço desde já, script: local name, storage = 'fire devil', 11112local sto = 800000local speedchange = 0function onAttack(cid, target)if isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) < 0 thensetPlayerStorageValue(cid, sto, getCreatureSpeed(cid))doChangeSpeed(cid, -getCreatureSpeed(cid))doChangeSpeed(cid, speedchange)return falseendif isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) > 1 then -- O ERRO PERTENCE A ESSA PARTEdoChangeSpeed(cid, -getCreatureSpeed(cid))local oldspeed = getPlayerStorageValue(cid, sto) == -1 and getCreatureBaseSpeed(cid) or getPlayerStorageValue(cid, sto)doChangeSpeed(cid, oldspeed)return false -- O PROBLEMA ESTA AQUIendreturn trueendfunction onCombat(cid, target)if isPlayer(cid) and getCreatureStorage(cid, storage) < 0 and isMonster(target) and getCreatureName(target):lower() == name thendoPlayerSendCancel(cid, 'You cannot attack this monster.')return falseend if isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) < 0 thenreturn falseendreturn trueendfunction onKill(cid, target, lastHit)if isMonster(target) and getCreatureName(target):lower() == name and isPlayer(cid) and getCreatureStorage(cid, storage) > 0 thendoCreatureSetStorage(cid, storage, -1)endreturn trueend
-
eu não entendo como eu poderia fazer essa checagem, dessa maneira não está funcionando, não manjo muito de loop pra dizer se funcionaria ou não, você acha que daria para eu fazer o que quero com loop? olha só: local x = getCreatureSummons(cid)if getCreatureName(x) == "Fire devil" thendoPlayerSendCancel(cid,"Você não pode invocar dois ou mais fire devil.")return falseend
-
E ai galera, eu sou iniciante em montar scripts e tal, e estou com uma dúvida, eu gostaria de saber como faço para checar se o player está com uma especifica summon no momento, por exemplo: if getCreatureSummons(cid, "fire devil") then Bom, eu sei que dessa maneira o comando não é válido, pois ela não é capaz de exercer a função na qual necessito, então humildemente peço a ajuda do pessoal mais experiente e agradeço desde já qualquer boa intenção
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.