Creaturescript
-
Quem Está Navegando 0 membros estão online
Nenhum usuário registrado visualizando esta página.
-
Conteúdo Similar
-
Por Imperius
O propósito é criar uma nova função em creaturescripts que será acionada toda vez que um novo report (CTRL + R) for aberto.
Eu implementei para enviar uma notificação no grupo do Telegram, contendo os dados do report.
Isso garantirá que os GMs tenham acesso aos reports dos jogadores mesmo quando não estiverem logados, e também evitará que algum report seja perdido caso o jogador saia do servidor.
A parte do Telegram é apenas um exemplo. Você pode ajustar o script para executar outras ações desejadas.
creatureevent.cpp:
Dentro deste arquivo, localize a função:
uint32_t CreatureEvent::executeChannelLeave(Player* player, uint16_t channelId, UsersMap usersMap)
abaixo dela, adicione:
uint32_t CreatureEvent::executeOpenRuleViolation(Player* player, std::string message) { if (!m_interface->reserveEnv()) { std::clog << "[Error - CreatureEvent::executeOpenRuleViolation] Call stack overflow." << std::endl; return 0; } ScriptEnviroment* env = m_interface->getEnv(); env->setScriptId(m_scriptId, m_interface); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushstring(L, message.c_str()); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; }
Após, procure por:
std::string CreatureEvent::getScriptEventName() const
abaixo de:
case CREATURE_EVENT_CHANNEL_LEAVE: return "onLeaveChannel";
adicione:
case CREATURE_EVENT_OPEN_RULE_VIOLATION: return "onOpenRuleViolation";
Agora, procure por:
std::string CreatureEvent::getScriptEventParams() const
abaixo de:
case CREATURE_EVENT_CHANNEL_LEAVE: return "cid, channel, users";
adicione:
case CREATURE_EVENT_OPEN_RULE_VIOLATION: return "cid, message";
Procure por:
bool CreatureEvent::configureEvent(xmlNodePtr p)
abaixo de:
else if(tmpStr == "leavechannel") m_type = CREATURE_EVENT_CHANNEL_LEAVE;
adicione:
else if(tmpStr == "openruleviolation") m_type = CREATURE_EVENT_OPEN_RULE_VIOLATION;
creatureevent.h:
Dentro deste arquivo, localize:
enum CreatureEventType_t
adicione "CREATURE_EVENT_OPEN_RULE_VIOLATION" como o último item de enum CreatureEventType_t
Exemplo:
enum CreatureEventType_t { // ... CREATURE_EVENT_OPEN_RULE_VIOLATION };
Agora, procure por:
uint32_t executeChannelLeave(Player* player, uint16_t channelId, UsersMap usersMap);
abaixo dela, adicione:
uint32_t executeOpenRuleViolation(Player* player, std::string message);
game.cpp:
Dentro deste arquivo, localize:
bool Game::playerReportRuleViolation(Player* player, const std::string& text)
e substitua por:
bool Game::playerReportRuleViolation(Player* player, const std::string& text) { //Do not allow reports on multiclones worlds since reports are name-based if(g_config.getNumber(ConfigManager::ALLOW_CLONES)) { player->sendTextMessage(MSG_INFO_DESCR, "Rule violation reports are disabled."); return false; } cancelRuleViolation(player); boost::shared_ptr<RuleViolation> rvr(new RuleViolation(player, text, time(NULL))); ruleViolations[player->getID()] = rvr; ChatChannel* channel = g_chat.getChannelById(CHANNEL_RVR); if(!channel) return false; for(UsersMap::const_iterator it = channel->getUsers().begin(); it != channel->getUsers().end(); ++it) it->second->sendToChannel(player, SPEAK_RVR_CHANNEL, text, CHANNEL_RVR, rvr->time); CreatureEventList joinEvents = player->getCreatureEvents(CREATURE_EVENT_OPEN_RULE_VIOLATION); for(CreatureEventList::iterator it = joinEvents.begin(); it != joinEvents.end(); ++it) (*it)->executeOpenRuleViolation(player, text); return true; }
Agora é só compilar a source.
depois em "data > creaturescripts > creaturescripts.xml", adicione:
<event type="login" name="loginNotifyRuleViolation" script="notifyRuleViolation.lua"/> <event type="openruleviolation" name="openNotifyRuleViolation" script="notifyRuleViolation.lua"/>
em "data > creaturescripts > scripts", crie um arquivo notifyRuleViolation.lua e adicione:
function onOpenRuleViolation(cid, message) local config = { token = "", -- Token do seu BOT no Telegram chatId = "" -- ID do chat do Telegram que será enviado a notificação. } local message = "Player: "..getCreatureName(cid).."\n\nReport:\n"..message.."" message = string.gsub(message, "\n", "%%0A") local url = "https://api.telegram.org/bot"..config.token.."/sendMessage" local data = "chat_id="..config.chatId.."&text="..message.."" local curl = io.popen('curl -d "'..data..'" "'..url..'"'):read("*a") return true end function onLogin(cid) registerCreatureEvent(cid, "openNotifyRuleViolation") return true end
Demonstração:
1. Jogador abre um novo report (CTRL + R)
2. notifyRuleViolation.lua, definido em creaturescripts.xml, é acionado para enviar uma notificação ao grupo do Telegram.
-
Por ILex WilL
Olá, Alguém poderia me ajudar com uns Scripts? nem que seja cobrando, dependendo eu pago para me ajudar...
-
Por Kill of sumoners
Boa noite, estou com um erro ao atacar um player em meu sv eu nao pego pk, nem sai magia, aparece a mensagem "voce so pode usar isso em criaturas"
obs: magia em area acerta e pega pk, apenas as targets ou hits de arma nao vao
-
Por Ghaz
Fala pessoal tudo bem?
Estou com dificuldades em um script e preciso da ajuda dos magos do LUA rs.
Tenho um script que quando o player morre (onDeath), ele faz algumas coisas e depois ele chama uma função que deveria retornar uma table (array) para eu fazer o for com o ipairs certinho. Segue abaixo o código:
Segue abaixo a função getPlayersInArea:
Acontece que no código de cima (do primeiro spoiler) eu dou um print no retorno da função getPlayersInArea, porém ela não tá me retornando a table, tá me retornando só: 2
Alguém consegue me ajudar em, como raios eu faço a função retornar a lista de players ao invés da quantidade? Acredito que ta retornando o count da table, e não os itens do array.
Agradeço desde já, valeu tchurma!
-
Por Jpminatel
Estou com os seguintes erros ; e procuro quem poça ajudar ai a eliminar esses 3 erros , erro 1 e 2 acontece qnd um pokemon usa ps e o erro 3 é nas potions
[Error - TalkAction Interface]
[30/01/2022 17:04:25] data/talkactions/scripts/move1.lua:onSay
[30/01/2022 17:04:25] Description:
[30/01/2022 17:04:25] data/lib/some functions.lua:338: attempt to call global 'hasTile' (a nil value)
[30/01/2022 17:04:25] stack traceback:
[30/01/2022 17:04:25] data/lib/some functions.lua:338: in function 'getThingFromPosWithProtect'
Erro 2 ;
[30/01/2022 18:08:53] [Error - Spell Interface]
[30/01/2022 18:08:53] In a timer event called from:
[30/01/2022 18:08:53] data/spells/scripts/ps/Earthquake.lua:onCastSpell
[30/01/2022 18:08:53] Description:
[30/01/2022 18:08:53] data/lib/some functions.lua:338: attempt to call global 'hasTile' (a nil value)
[30/01/2022 18:08:53] stack traceback:
[30/01/2022 18:08:53] data/lib/some functions.lua:338: in function 'getThingFromPosWithProtect'
[30/01/2022 18:08:53] data/lib/newStatusSyst.lua:844: in function 'doMoveInArea2'
[30/01/2022 18:08:53] data/lib/pokemon moves.lua:1355: in function <data/lib/pokemon moves.lua:1351>
[30/01/2022 18:08:54] [Error - Spell Interface]
[30/01/2022 18:08:54] In a timer event called from:
[30/01/2022 18:08:54] data/spells/scripts/ps/Earthquake.lua:onCastSpell
[30/01/2022 18:08:54] Description:
[30/01/2022 18:08:54] data/lib/some functions.lua:338: attempt to call global 'hasTile' (a nil value)
[30/01/2022 18:08:54] stack traceback:
[30/01/2022 18:08:54] data/lib/some functions.lua:338: in function 'getThingFromPosWithProtect'
[30/01/2022 18:08:54] data/lib/newStatusSyst.lua:844: in function 'doMoveInArea2'
[30/01/2022 18:08:54] data/lib/pokemon moves.lua:1355: in function <data/lib/pokemon moves.lua:1351>
[30/01/2022 18:18:20] [Error - TalkAction Interface]
[30/01/2022 18:18:20] data/talkactions/scripts/move1.lua:onSay
[30/01/2022 18:18:20] Description:
[30/01/2022 18:18:20] data/lib/some functions.lua:338: attempt to call global 'hasTile' (a nil value)
[30/01/2022 18:18:20] stack traceback:
[30/01/2022 18:18:20] data/lib/some functions.lua:338: in function 'getThingFromPosWithProtect'
[30/01/2022 18:18:20] data/lib/newStatusSyst.lua:1119: in function 'doMoveInAreaMulti'
[30/01/2022 18:18:20] data/lib/pokemon moves.lua:458: in function 'docastspell'
[30/01/2022 18:18:20] data/talkactions/scripts/move1.lua:173: in function <data/talkactions/scripts/move1.lua:20>
Erro 3 ;
erro potion
[30/01/2022 18:48:35] [Error - Action Interface]
[30/01/2022 18:48:35] data/actions/scripts/potion.lua:onUse
[30/01/2022 18:48:35] Description:
[30/01/2022 18:48:35] data/lib/some functions.lua:338: attempt to call global 'hasTile' (a nil value)
[30/01/2022 18:48:35] stack traceback:
[30/01/2022 18:48:35] data/lib/some functions.lua:338: in function 'getThingFromPosWithProtect'
[30/01/2022 18:48:35] data/actions/scripts/potion.lua:45: in function <data/actions/scripts/potion.lua:43>
[30/01/2022 18:48:39] [Error - Action Interface]
[30/01/2022 18:48:39] data/actions/scripts/potion.lua:onUse
[30/01/2022 18:48:39] Description:
[30/01/2022 18:48:39] data/lib/some functions.lua:338: attempt to call global 'hasTile' (a nil value)
[30/01/2022 18:48:39] stack traceback:
[30/01/2022 18:48:39] data/lib/some functions.lua:338: in function 'getThingFromPosWithProtect'
[30/01/2022 18:48:39] data/actions/scripts/potion.lua:45: in function <data/actions/scripts/potion.lua:43>
-
Posts Recomendados
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.