Sobre o item está configurado para ganhar um item já local prize_id = 1234 -- id do item que vai ganhar
E sobre duelar uma vez vc quer que o player depois que ganhou o prêmio ele não possa duelar mais?
Sobre o item está configurado para ganhar um item já local prize_id = 1234 -- id do item que vai ganhar
E sobre duelar uma vez vc quer que o player depois que ganhou o prêmio ele não possa duelar mais?
o item q vai ganhar varia de NPC, isso eu edito.. e sim. depois de vencer não poderá duelar mais.
Lembrando q a base é kpdo
grato
tente assim:
Obrigado, mas obtive o mesmo erro, attempt to call global getthis.
Acho que seria mais interessante alterar um npc de GYM para que ele funcione normalmente.. bastaria tirar o teleport dele, e configurar os pokemons.. já tentei fazer.. mas parece que os npcs de gym procuram outros arquivos de script além do .lua deles.. então não consegui;
Segue abaixo um modelo de GYM que funciona no server:
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 focus = 0
function creatureSayCallback(cid, type, msg)
local testar = getNpcCid()
if getPlayerStorageValue(testar, 5000) == 1 then
return false
end
if not npcHandler:isFocused(cid) then
return false
elseif msgcontains(msg, 'duel') or msgcontains(msg, 'battle') or msgcontains(msg, 'yes') then
if getPlayerStorageValue(cid, 9355) == 1 then
selfSay('Hey Man you Defeated me, dont come Back here')
npcHandler:releaseFocus(cid)
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
talkState[talkUser] = 1
if #getCreatureSummons(cid) >= 1 then
local pos = getNpcPos()
pos.stackpos = 0
pos.z = 7
pos.x = 1092
pos.y = 897
local posplayer = getNpcPos()
posplayer.stackpos = 0
posplayer.z = 7
posplayer.x = 1095
posplayer.y = 897
if getPlayerGroupId(cid) <= 9 then
setPlayerGroupId(cid, 7)
end
setPlayerStorageValue(cid, 4982, 1093)
setPlayerStorageValue(cid, 4983, 906)
setPlayerStorageValue(cid, 4984, 7)
setPlayerStorageValue(cid, 19987,1)
local rand = ginasio["Misty"]["poke"]
local randomico = math.random(1,rand.poke)
local monster = ginasio["Misty"][randomico]
gopoke = monster.poke
--doTeleportThing(k, pos)
doTeleportThing(getCreatureSummons(cid)[1], posplayer)
doTeleportThing(testar, pos)
doTeleportThing(cid, posplayer)
local k = doCreateMonster(gopoke, getNpcPos())
local vids = (getCreatureHealth(k) - 2)
doCreatureAddHealth(k, -vids)
setCreatureMaxHealth(k, monster.Health)
doCreatureAddHealth(k, monster.Health)
doMonsterSetTarget(k, getCreatureSummons(cid)[1])
--registerCreatureEvent(k, "Gambiarra")
setPlayerStorageValue(cid, 9999, testar)
setPlayerStorageValue(cid, 8888, 1)
setPlayerStorageValue(cid, 4578, 0)
setPlayerStorageValue(cid, 6569, k)
setPlayerStorageValue(cid, 6578, getNpcName())
setPlayerStorageValue(k, 4555, 1)
setPlayerStorageValue(k, 4559, monster.level)
setPlayerStorageValue(k, 4655, testar)
setPlayerStorageValue(k, 9548, cid)
setPlayerStorageValue(cid, 8333, 1)
registerCreatureEvent(k, "Summonkill")
registerCreatureEvent(k, "Summondeath")
registerCreatureEvent(k, "Summonthink")
setPlayerStorageValue(cid, 7787, 6)
--setPlayerGroupId(cid, 1)
--doCreatureSetNoMove(cid, 1)
--registerCreatureEvent(k, "Gambiarra")
setPlayerStorageValue(testar, 5000, 1)
setPlayerStorageValue(testar, 4982, 1093)
setPlayerStorageValue(testar, 4983, 906)
setPlayerStorageValue(testar, 4984, 7)
--registerCreatureEvent(cid, "Gymkill")
npcHandler:releaseFocus(cid)
else
selfSay('Please go you pokemon for battle')
end
end
return true
end
npcHandler:setMessage(MESSAGE_GREET, "Hello |PLAYERNAME|, I just a pokemon trainer and I Leader Gym Cerulean,like to fight, go battle a me?")
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Editado Novembro 17 por Bepovi
se quiser adicionar mais premios, é só adicionar mais tags, exemplo:
[2] = {{itemid = 2393, count = 40}, {itemid = 2392, count = 30}},
[3] = {{itemid = 2393, count = 50}, {itemid = 2392, count = 40}},
[4] = {{itemid = 2393, count = 60}, {itemid = 2392, count = 50}},
[5] = {{itemid = 2393, count = 70}, {itemid = 2392, count = 60}},
[6] = {{itemid = 2393, count = 80}, {itemid = 2392, count = 70}}}
OBS: no final da última tem q ter 3 chaves.
script:
Editado Novembro 20 por Vodk
info
Grupo: Herói
Registrado: 25/10/11
Posts: 2.2k
Reputação: +862
Gênero: Masculino
Char no Tibia: Sociopata

você ta fazendo errado! Kkk, na pasta lib tem um arquivo lua, GymLib ou Gym algo assim, lá você tem que adicionar o NPC que você criou e tals.. To cell, mas da uma olhadinha lá..
o problema é que no servidor kpdo, quando se tenta alterar algum arquivo da pasta lib, buga o server.. preciso de um script que não dependa disso, tendeu?
info
Grupo: Herói
Registrado: 25/10/11
Posts: 2.2k
Reputação: +862
Gênero: Masculino
Char no Tibia: Sociopata

Kkk impossível, é que se você erra um carácter se quer, a distro não ler os códigos que possui no arquivo mexido.. Haha
Editado Novembro 24 por Overllord
cara.. to falando.. qualquer coisa que mexe buga. vc pode até pegar um texto por exemplo:
Teste
alterar pra
Test
e voltar pra Teste, se você salvar.. mesmo que IGUAL, buga o server, e vc tem que pegar um backup pra voltar ao normal..
eu entendo o basico de script.. nao ia cometer essa cagada de errar um caracter..ou dar um espaço a mais neste caso.. eu testei muitas vezes.. a pasta LIB do KPDO é horrivel, apenas alguns arquivos podem editar. KPDO é uma merda pra editar isso.
o grande problema é justamente que o arquivo de ginásio tbm não aceita mudança
Editado Novembro 25 por Bepovi
info
Grupo: Herói
Registrado: 28/11/10
Posts: 3.4k
Reputação: +585
Gênero: Masculino

info
Grupo: Campones
Registrado: 24/11/05
Posts: 58
Reputação: 0
Bom dia, gostaria de um script basico de um treinador que aceita duels, e que ao vencer ganha um item. (só pode duelar 1x)
Base KPDO
Já tentei usar scripts de outras bases, mas sempre da erro dizendo attempt to call global "getthis"
Usei o seguinte:
local prize_id = 1234 -- id do item que vai ganhar local focus = 0 local max_distance = 8 local talk_start = 0 local conv = 0 local fighting = false local challenger = 0 local afk_limit_time = 30 -- seconds local afk_time = 0 -- don't change local battle_turn = 1 -- don't change local challenger_turn = 0 -- don't change local pokemons = { {name = "Clone Blastoise", optionalLevel = 100, sex = SEX_MALE, nick = "", ball = "super"}, {name = "Clone Charizard", optionalLevel = 100, sex = SEX_MALE, nick = "", ball = "super"}, {name = "Clone Gengar", optionalLevel = 100, sex = SEX_MALE, nick = "", ball = "super"}, {name = "Clone Venusaur", optionalLevel = 100, sex = SEX_MALE, nick = "", ball = "super"}, } local function doSummonGymPokemon(npc) local this = npc if #getCreatureSummons(this) >= 1 or focus == 0 then return true end local it = pokemons[battle_turn] doSummonMonster(this, it.name) local summon = getCreatureSummons(this)[1] local balleffect = pokeballs["normal"].effect if it.ball and pokeballs[it.ball] then balleffect = pokeballs[it.ball].effect end doSendMagicEffect(getThingPos(summon), balleffect) setPlayerStorageValue(summon, 10000, balleffect) setPlayerStorageValue(summon, 10001, gobackmsgs[math.random(#gobackmsgs)].back:gsub("doka", it.nick ~= "" and it.nick or it.name)) setPlayerStorageValue(summon, 1007, it.nick ~= "" and it.nick or it.name) doSetMonsterGym(summon, focus) addEvent(adjustWildPoke, 15, summon, it.optionalLevel) local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name doCreatureSay(this, gobackmsgs[math.random(#gobackmsgs)].go:gsub("doka", getPlayerStorageValue(summon, 1007)), 1) fighting = true battle_turn = battle_turn + 1 end local function doWinDuel(cid, npc) if not isCreature(cid) then return true end doPlayerAddItem(cid, prize_id, 1) doCreatureSay(npc, "You won the duel! Congratulations, take this "..getItemNameById(prize_id).." as a prize.", 1) end function onCreatureSay(cid, type, msg) local msg = string.lower(msg) if focus == cid then talk_start = os.clock() end if msgcontains(msg, 'hi') and focus == 0 and getDistanceToCreature(cid) <= 4 then focus = cid talk_start = os.clock() conv = 1 selfSay("Olhe so "..getCreatureName(cid)..", mais um viajante fracassado,voce veio aqui por vontade propria,mais para sair sera obrigado a seguir minhas regras,diga {duel} para acabarmos logo com isso") return true end if isDuelMsg(msg) and conv == 1 and focus == cid then --if getPlayerItemCount(cid, gymbadges[getCreatureName(getThis())]) >= 1 then -- selfSay("You have already won my Marsh Badge, maybe some other day we can fight.") -- focus = 0 --return true --end if not hasPokemon(cid) then selfSay("Solte seu pokemon para comecarmos a batalha.") return true end selfSay("You are challenging me to a battle. It will be a "..#pokemons.." pokemon limit battle, let's start?") conv = 2 return true end if isConfirmMsg(msg) and conv == 2 and focus == cid then challenger = focus setPlayerStorageValue(cid, 990, 1) selfSay("Yea, let's fight!") talk_start = os.clock() addEvent(doSummonGymPokemon, 850, getThis()) conv = 3 return true end if isNegMsg(msg) and conv == 2 and focus == cid then focus = 0 selfSay("Era melhor sevoce tivesse ficado fora do meu caminho!") return true end if msgcontains(msg, 'bye') and focus == cid then selfSay('Bye and do your best trainer!') setPlayerStorageValue(focus, 990, -1) focus = 0 return true end end local afk_warning = false function onThink() --doSendAnimatedText(getThingPos(getThis()), getCreatureName(getThis()), 215) if focus == 0 then selfTurn(2) fighting = false challenger = 0 challenger_turn = 0 battle_turn = 1 afk_time = 0 afk_warning = false if #getCreatureSummons(getThis()) >= 1 then setPlayerStorageValue(getCreatureSummons(getThis())[1], 1006, 0) doCreatureAddHealth(getCreatureSummons(getThis())[1], -getCreatureMaxHealth(getCreatureSummons(getThis())[1])) end return true else if not isCreature(focus) then focus = 0 return true end if fighting then talk_start = os.clock() if not isCreature(getCreatureTarget(getThis())) then if #getCreatureSummons(challenger) >= 1 then if getCreatureOutfit(getCreatureSummons(challenger)[1]).lookType ~= 2 then --alterado v1.6 selfAttackCreature(getCreatureSummons(challenger)[1]) challenger_turn = challenger_turn + 1 afk_time = 0 end else afk_time = afk_time + 0.5 end end if afk_time > afk_limit_time then setPlayerStorageValue(focus, 990, -1) focus = 0 selfSay("Fraco!Ja esperava isso de viajantes desse tipo!") return true end if not afk_warning and afk_time > afk_limit_time / 2 then selfSay("Where's your pokemon? Let's fight!") afk_warning = true end if #getCreatureSummons(getThis()) == 0 then if battle_turn > #pokemons then addEvent(doWinDuel, 1000, focus, getThis()) setPlayerStorageValue(focus, 990, -1) focus = 0 return true end addEvent(doSummonGymPokemon, 1000, getThis()) end if not hasPokemon(challenger) or challenger_turn >= 7 or challenger_turn > #pokemons then selfSay("You lost our duel! Maybe some other time you'll defeat me.") setPlayerStorageValue(focus, 990, -1) focus = 0 return true end end local npcpos = getThingPos(getThis()) local focpos = getThingPos(focus) if npcpos.z ~= focpos.z then setPlayerStorageValue(focus, 990, -1) focus = 0 selfSay("Bye then.") return true end if (os.clock() - talk_start) > 30 then selfSay("Good bye and keep training!") setPlayerStorageValue(focus, 990, -1) focus = 0 end if getDistanceToCreature(focus) > max_distance then setPlayerStorageValue(focus, 990, -1) focus = 0 return true end local dir = doRedirectDirection(getDirectionTo(npcpos, focpos)) selfTurn(dir) end return true endObrigado!
Editado Novembro 16 por Bepovi