
Tudo que Wise postou
- onMoveItem(cid, item, count, toContainer, fromContainer, ...)
-
(Resolvido)preciso de um comando de gerar items
@danihcv Amigo, algumas observações: Tanto no primeiro script, quanto no segundo, você fechou o escopo antes e acabou deixando algumas funções e estruturas de controle de fora. E no segundo você declarou uma variável como sendo a storage, mas não fez uso dela (?). Seria: function onSay(cid) local itemid = 2160 if getPlayerItemCount(cid, itemid) > 0 then doPlayerRemoveItem(cid, itemid, 1) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "MENSAGEM QUANDO O PLAYER RECEBER O PREMIO!") doSendMagicEffect(getThingPos(cid), CONST_ME_GIFT_WRAPS) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "MENSAGEM QUANDO O PLAYER NÃO TIVER O ITEM!") end return true end E: function onSay(cid) local itemid, stor = 2160, 69169 -- ID, storage if getPlayerItemCount(cid, itemid) > 0 then if getPlayerStorageValue(cid, stor) < 1 then setPlayerStorageValue(cid, stor, 1) doPlayerRemoveItem(cid, itemid, 1) doSendMagicEffect(getThingPos(cid), CONST_ME_GIFT_WRAPS) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "MENSAGEM QUANDO O PLAYER RECEBER O PREMIO!") else doPlayerSendCancel(cid, "Desculpe, voce ja usou isso uma vez.") end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "MENSAGEM QUANDO O PLAYER NÃO TIVER O ITEM!") end return true end Mesmo assim, qual a função desses 2 scripts? Remove um item do cid (caso ele tenha), envia uma mensagem e um efeito mágico. É muito bom ver que você se dispõe a ajudar outros membros, só tenha cuidado com o uso das estruturas de controle. Dá uma lida nesse tutorial, pode te ajudar a aumentar seu conhecimento ;] @namerso18 Não entendi muito bem. Usar uma talkaction somente uma vez, que faz com que o player receba um item e uma quantidade de premium days? local t = { pd = 10, -- premium days stor = 54321, -- storage item = {1234, 5} -- {itemID, amount} } function onSay(cid) if getPlayerStorageValue(cid, t.stor) < 1 then setPlayerStorageValue(cid, t.stor, 1) doPlayerAddPremiumDays(cid, t.pd) doPlayerAddItem(cid, t.item[1], t.item[2]) doSendMagicEffect(getThingPos(cid), CONST_ME_GIFT_WRAPS) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You received '..t.item[2]..' '..getItemNameById(t.item[1])..' and '..t.pd..' days of premium account.') else doPlayerSendCancel(cid, 'Sorry, you already have used this command.') end return true end
-
Backpack só para potions
Vi que você e mais alguns membros precisavam desse creature event, então eu criei um tópico pra que todos possam ver sobre ele de forma simples. Aqui, amigo.
-
onMoveItem(cid, item, count, toContainer, fromContainer, ...)
Notei que alguns membros precisavam desse creature event pra desenvolver alguns sistemas, então eu resolvi compartilhá-lo com vocês. Na source, em creatureevent.cpp Abaixo de: else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH; Adicione: else if(tmpStr == "moveitem") m_type = CREATURE_EVENT_MOVEITEM; Abaixo de: case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath"; Adicione: case CREATURE_EVENT_MOVEITEM: return "onMoveItem"; Abaixo de: case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList"; Adicione: case CREATURE_EVENT_MOVEITEM: return "cid, item, count, toContainer, fromContainer, fromPos, toPos"; Antes de: bool CreatureEvents::playerLogout(Player* player, bool forceLogout) Adicione: uint32_t CreatureEvent::executeMoveItem(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack) { //onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(player->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; env->streamThing(scriptstream, "item", item, env->addThing(item)); scriptstream << "local count = " << count << std::endl; env->streamThing(scriptstream, "toContainer", toContainer, env->addThing(toContainer)); env->streamThing(scriptstream, "fromContainer", fromContainer, env->addThing(fromContainer)); env->streamPosition(scriptstream, "fromPos", fromPos, fstack); env->streamPosition(scriptstream, "toPos", toPos, 0); scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[30]; sprintf(desc, "%s", player->getName().c_str()); env->setEvent(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(player->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); LuaInterface::pushThing(L, item, env->addThing(item)); lua_pushnumber(L, count); LuaInterface::pushThing(L, toContainer, env->addThing(toContainer)); LuaInterface::pushThing(L, fromContainer, env->addThing(fromContainer)); LuaInterface::pushPosition(L, fromPos, fstack); LuaInterface::pushPosition(L, toPos, 0); bool result = m_interface->callFunction(7); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } } Agora, em creatureevent.h Abaixo de: uint32_t executePrepareDeath(Creature* creature, DeathList deathList); Adicione: uint32_t executeMoveItem(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack); Procure por: CREATURE_EVENT_PREPAREDEATH Substitua por: CREATURE_EVENT_PREPAREDEATH, CREATURE_EVENT_MOVEITEM E em game.cpp Depois de: if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } Adicione: bool success = true; CreatureEventList moveitemEvents = player->getCreatureEvents(CREATURE_EVENT_MOVEITEM); for(CreatureEventList::iterator it = moveitemEvents.begin(); it != moveitemEvents.end(); ++it) { Item* toContainer = toCylinder->getItem(); Item* fromContainer = fromCylinder->getItem(); if(!(*it)->executeMoveItem(player, item, count, fromPos, toPos, (toContainer ? toContainer : 0), (fromContainer ? fromContainer : 0), fromStackpos) && success) success = false; } if(!success) return false; Um exemplo BEM simples do uso desse creature event: Tag: <event type="moveitem" name="MoveItem" event="script" value="moveitem.lua"/> moveitem.lua function onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) local item = 12345 if item.itemid == item and getPlayerAccess(cid) < 4 then return doPlayerSendCancel(cid, 'You are not allowed to move this item.') and false end return true end Nessa estrutura de controle, se o item for o de ID 12345 e o cid tiver acesso menor do que 4, retornará false e ele não poderá mover o item. Se não for o caso, a checagem feita será false e retornará true, então o cid poderá mover o item. Esse callback registra creature event? Sim: registerCreatureEvent(cid, "MoveItem") Créditos: Summ.
-
(Resolvido)Script para Dar Cargos e Renomear os Nomes!
Ops, removi a variável por engano: local cargos = { ["tutor"] = {prefixNick = "[TUTOR]", group = 2}, ["gm"] = {prefixNick = "[GM]", group = 4}, ["cm"] = {prefixNick = "[GM]", group = 5}, ["adm"] = {prefixNick = "[ADM]", group = 6} } function onSay(cid, words, param, channel) local t = string.explode(param, ",") if param == "" or not tostring(t[1]) or not tostring(t[2]) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Digite o nome do jogador e o nome do cargo que deseja atribuir à ele, separados por vírgula. Exemplo: /cargo Player, GM") end local p = getPlayerByNameWildcard(t[1]) if not p then return doPlayerSendCancel(cid, "Este player não está online, ou não existe.") end local c = cargos[t[2]:lower()] if not c then return doPlayerSendCancel(cid, "Cargo inexistente.") end db.executeQuery("UPDATE `players` SET `name` = '["..c.prefixNick.."] "..getCreatureName(p).."' WHERE `players`.`id`= "..getPlayerGUID(t[1]).."") doPlayerSetGroupId(p, c.group) addEvent(function() if isPlayer(p) then doRemoveCreature(p, true) end end, 5 * 1000) doPlayerSendTextMessage(p, MESSAGE_STATUS_CONSOLE_BLUE, "Voce sera kikado em 5 segundos.") return true end Hahah quando eu cliquei em responder, apareceu a notificação de nova resposta. Obrigado xWhiteWolf.
-
ajuda npc que nace serto dia tal hora e fca por 10 minutos e some
@gil Se o seu pedido foi atendido, por favor clique no botão que está localizado abaixo do post de quem te ajudou. Automaticamente ele irá ficar destacado como a melhor resposta e o tópico ficará com o prefixo "Resolvido" no início do título.
-
como colocar outra vocação pra usa mastermind potion
Vá ao diretório das actions scripts (data/actions), abra o arquivo actions.xml e procure pelos IDs das potions. Na tag delas, você vai poder ver o nome do arquivo e onde ele se localiza (estará em data/actions/scripts ou em pastas desse diretório), pegue os códigos do(s) arquivo(s) da(s) potion(s) e poste aqui.
-
[HELPE] Como fazer esse sistema
Eu não disse que você me ofendeu. Alias não tem motivo algum pra você me citar num comentário consideravelmente inútil para o tópico, amigo. Releia com mais atenção: Agora pessoal, por favor mantenham a ordem e só respondam no tópico caso vocês tenham alguma informação que seja relevante para o pedido do membro.
-
[HELPE] Como fazer esse sistema
No caso eu estava pelo celular via 4g no momento, e um texto iria garantir que pessoas na minha ocasião também possam ajudar. Além de que seria melhor para entender o pedido pelas palavras de quem o pediu, do que por um vídeo. @SiriusBlacks004 Não seja infantil, não precisa ofender ninguém pra expressar sua opinião.
-
[HELPE] Como fazer esse sistema
Relate especificamente o que você quer, senão fica difícil de entender e de poder te ajudar.
-
(Resolvido)[PEDIDO] Alguem tem esse scrpit ?
@KekezitoLHP Já que o pedido foi atendido, clique no botão que está localizado abaixo do post de quem te ajudou. Automaticamente ele irá ficar destacado como a melhor resposta e o tópico ficará com o prefixo "Resolvido" no início do título. Disponha.
-
(Resolvido)[PEDIDO] Alguem tem esse scrpit ?
Não é porque ele se nomeia um scripter que ele não pode fazer um pedido de um script. E se ele for um iniciante? function onStepIn(cid) if not isPlayer(cid) then return false end return true end
-
(Pedido) Não poder deslogar estando em: Surf, Ride e Fly!
Só fiz uma correção de uma função no escopo dentro do for: pokelogout.lua function onLogout(cid) local sto = {17000, 17001, 63215} for x = 1, #sto do if getPlayerStorageValue(cid, sto[x]) < 1 then return true end end doPlayerSendCancel(cid, 'You cannot logout when you are in special situations such as surf/ride/fly.') return false end Tag: <event type="logout" name="PokeLogout" event="script" value="pokelogout.lua"/>
-
(Resolvido)Script para Dar Cargos e Renomear os Nomes!
É, o erro da localização da variável foi meu mesmo, não observei bem. Agora o primeiro erro que acusou foi pra fechar o parâmetro da função doPlayerSetGroupId, e foi um erro seu que eu não tinha visto: Obrigado pela correção, mas eu não vejo motivos pra rir de mim. Teste: local cargos = { ["tutor"] = {prefixNick = "[TUTOR]", group = 2}, ["gm"] = {prefixNick = "[GM]", group = 4}, ["cm"] = {prefixNick = "[GM]", group = 5}, ["adm"] = {prefixNick = "[ADM]", group = 6} } function onSay(cid, words, param, channel) local t = string.explode(param, ",") if param == "" or not tostring(t[1]) or not tostring(t[2]) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Digite o nome do jogador e o nome do cargo que deseja atribuir à ele, separados por vírgula. Exemplo: /cargo Player, GM") end local p = getPlayerByNameWildcard(t[1]) if not p then return doPlayerSendCancel(cid, "Este player não está online, ou não existe.") end local c = cargos[t[2]:lower()] if not c then return doPlayerSendCancel(cid, "Cargo inexistente.") end db.executeQuery("UPDATE `players` SET `name` = '"..c.prefixNick.." "..getCreatureName(p).."' WHERE `players`.`id`= "..getPlayerGUID(p).."") doPlayerSetGroupId(p, c.group) addEvent(function() if isPlayer(p) then doRemoveCreature(p, true) end end, 5 * 1000) doPlayerSendTextMessage(p, MESSAGE_STATUS_CONSOLE_BLUE, "Voce sera desconectado em 5 segundos.") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu acesso "..c.group.." para "..t[1]..", que agora é "..c.prefixNick) return true end
-
(Resolvido)[Ajuda Urgente] Itens que fazer as skills
Sim, na verdade não seria uma condição e sim uma estrutura de controle com tabela. Eu não havia pensado nisso já que fiz de imediato, obrigado.
-
(Resolvido)[Ajuda Urgente] Itens que fazer as skills
Então, o valor 1 e -1 foram exemplos, você pode atribuir o id do valor da storage como preferir (desde que coincida com a estrutura de controle). Não tem de quê, disponha ;]
-
Como adicionar bike no meu poketibia ?
Não vejo erros no script. Você não fez alguma alteração incorreta? Poste os códigos do arquivo, se possível. E talvez assim você consiga configurar com mais facilidade (códigos do Nogard): local t = { outfit = 129, speed = 474, stor = 32001 } function onUse(cid, item) if getPlayerStorageValue(cid, t.stor) < 1 then setPlayerStorageValue(cid, t.stor, 1) doChangeSpeed(cid, t.speed) doSetCreatureOutfit(cid, {lookType = t.outfit}, -1) doCreatureSay(cid, 'BIKE ON!', TALKTYPE_ORANGE_1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Você montou na bike.') else setPlayerStorageValue(cid, t.stor, -1) doChangeSpeed(cid, -t.speed) doRemoveCondition(cid, CONDITION_OUTFIT) doCreatureSay(cid, 'BIKE OFF!', TALKTYPE_ORANGE_1) doPlayerSendTextMessage(cid, MESSSAGE_STATUS_CONSOLE_BLUE, 'Voce desmontou da bike.') end return true end
-
(Resolvido)Script para Dar Cargos e Renomear os Nomes!
Provavelmente quem tiver um acesso considerável pra fazer esse tipo de ação. Mas de qualquer forma isso é apenas uma preferência de restrição, basta alterar o valor na tag. Você quer dizer, que tenha os privilégios de todas as flags / customflags? Basta calcular o valor delas pelo Flags Calculator e modificar em seu groups.xml (data/XML). Calculei uma de exemplo, que tem todos os privilégios (só selecionei algumas restrições comuns de não ter ganho de exp/hp/mana/skill): <group id="6" name="Owner" flags="513744660570104" customFlags="134217727" access="5" violationReasons="23" nameViolationFlags="170" statementViolationFlags="213" depotLimit="5000" maxVips="500" outfit="302"/>
-
(Resolvido)Script para Dar Cargos e Renomear os Nomes!
O seu pedido é de um comando, correto? Então sim, é uma talkaction. Códigos do Orochi Elf cargo.lua (data/talkactions/scripts): local cargos = { ["tutor"] = {prefixNick = "[TUTOR]", group = 2}, ["gm"] = {prefixNick = "[GM]", group = 4}, ["cm"] = {prefixNick = "[GM]", group = 5}, ["adm"] = {prefixNick = "[ADM]", group = 6} } function onSay(cid, words, param, channel) local t = string.explode(param, ",") if param == "" or not tostring(t[1]) or not tostring(t[2]) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Digite o nome do jogador e o nome do cargo que deseja atribuir à ele, separados por vírgula. Exemplo: /cargo Player, GM") end local p = getPlayerByNameWildcard(t[1]) if not p then return doPlayerSendCancel(cid, "Este player não está online, ou não existe.") end local c = cargos[t[2]:lower()] if not c then return doPlayerSendCancel(cid, "Cargo inexistente.") end db.executeQuery("UPDATE `players` SET `name` = '"..c.prefixNick.." "..getCreatureName(p).."' WHERE `players`.`id`= "..getPlayerGUID(p).."") doPlayerSetGroupId(p, c.group) addEvent(function() if isPlayer(p) then doRemoveCreature(p, true) end end, 5 * 1000) doPlayerSendTextMessage(p, MESSAGE_STATUS_CONSOLE_BLUE, "Voce sera desconectado em 5 segundos.") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu acesso "..c.group.." para "..t[1]..", que agora é "..c.prefixNick) return true end Tag - talkactions.xml (data/talkactions): <talkaction log="yes" words="/cargo" access="5" event="script" value="cargo.lua"/>
-
(Resolvido)[Ajuda Urgente] Itens que fazer as skills
Você cria um movement script que atribui ao player determinado valor de uma storage ao equipar/remover o item de determinado slot. local stor = 12345 -- storage function onEquip(cid, item, slot) setPlayerStorageValue(cid, stor, 1) -- já que é no callback de equipar, ele recebe o valor de ID 1 (como sendo positivo para a checagem do uso da spell) return true end function onDeEquip(cid, item, slot) setPlayerStorageValue(cid, stor, -1) -- ao remover o item, ele recebe o valor de ID -1 (como sendo negativo para a checagem do uso da spell) return true end Configure as tags como movevents Equip / DeEquip. Ex: <movevent type="Equip" itemid="ITEMID" slot="ring" event="script" value="filename.lua"/> <movevent type="DeEquip" itemid="ITEMID" slot="ring" event="script" value="filename.lua"/> local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setHealingFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 1.5, 2) function onCastSpell(cid, var) local stor = 12345 -- storage if getPlayerStorageValue(cid, stor) < 1 then -- checa se o valor da storage no player é menor que 1 (sendo que 1 seria o necessário) doPlayerSendCancel(cid, "You can't cast the spell without using the item that allows it.") -- a informação de que ele nao pode conjurar a spell é dada return false -- retorna false ao callback, resultando em não conjurar a spell end return doCombat(cid, combat, var) -- se a checagem acima for false, ou seja, maior ou igual a 1 (valor necessário), então significa que o player está com o item necessário equipado e a conjuração da spell é feita end Qualquer dúvida ou problema, é só relatar por aqui.
-
(Resolvido)Regeneração de Soul Points
function onThink(interval, lastExecution) local soul = 15 if getWorldCreatures(0) > 0 then for _, all in ipairs(getPlayersOnline()) do doPlayerAddSoul(all, soul) end end return true end
-
[Pedido] Poket
Já que é uma action, basta incluir ao escopo como preferir (de acordo com a ação que você fizer): local effect = 45 doSendDistanceShoot(getCreaturePosition(cid), toPos, effect) Ajuste o parâmetro toPos de acordo com o que você usou no callback, seja ele topos / toPos / toPosition, iguale o uso dele nas funções para que tudo coincida. Se não souber como aplicar, poste o script que deseja o distance effect e explique como você o quer. Eu não sei como o seu servidor é, então se essa ação for feita por algum script na lib (como o membro citou), poste os códigos do arquivo.
-
[Globalevents] Efeito Coração
Amigo, crie um tópico na área Suporte de Scripts e faça o seu pedido.
-
[PEDIDO] script de cadeia!
prision.lua function onSay(cid, words, param, channel) local stor = 50505 -- storage local prisionpos = {x=123, y=456, z=7} -- pos local player = getPlayerByNameWildcard(param) if (words == '/imprison') then if (param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Enter the player name you want to imprison.') end if (not tostring(param)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Invalid param specified.') end if (not player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player '..param..' not found.') end if (getPlayerStorageValue(player, stor) > 0) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'The player '..param..' is already imprisoned.') end if (getPlayerAccess(player) > 3) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You cannot imprison a player with access higher than 3.') end setPlayerStorageValue(player, stor, 1) doTeleportThing(player, prisionpos) doSendMagicEffect(getThingPos(player), CONST_ME_TELEPORT) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'You have imprisoned the player '..param) elseif (words == '/release') then if (param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Enter the player name you want to imprison.') end if (not tostring(param)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Invalid param specified.') end if (not player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player '..param..' not found.') end if (getPlayerStorageValue(player, stor) < 1) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'The player '..param..' is not imprisoned.') end setPlayerStorageValue(player, stor, -1) doTeleportThing(player, getTownTemplePosition(getPlayerTown(player))) doSendMagicEffect(getThingPos(player), CONST_ME_TELEPORT) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'You have released the player '..param) end return true end <talkaction log="yes" words="/imprison;/release" access="5" event="script" value="prision.lua"/> Prender: /imprison Player Libertar: /release Player
-
(Resolvido)Sistema de Presente
Eu só disse pra você não levar a crítica para o lado pessoal. Obrigado pela contribuição. Abraços.