caotic 393 Postado Janeiro 24, 2014 Share Postado Janeiro 24, 2014 (editado) Tudo bem galera xtibiana? Resolvi trazer a vocês um sistema de nick que permite mudar o nome do monstro in-game. A função e simples de se usar e não tem nenhum tipo de limitação ela foi desenvolvida na versão 8.6 com a tfs 0.3.6. Lets go: Vá em monster.h e procure isto: typedef std::list<Creature*> CreatureList; class Monster : public Creature { private: Monster(MonsterType* _mType); public: #ifdef __ENABLE_SERVER_DIAGNOSTIC__ static uint32_t monsterCount; #endif virtual ~Monster(); E coloque este codigo em baixo: std::string nick,realname; Continue em monster.h e procure: static Monster* createMonster(const std::string& name); E coloque embaixo: static Monster* createMonsterNick(const std::string& name, std::string nick); Procure também: virtual const std::string& getName() const {return mType->name;} E substitua por isto: virtual const std::string& getName() const {return nick;} Depois vá em monster.cpp e procure: Monster* Monster::createMonster(const std::string& name) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; return createMonster(mType); } Substitua por: Monster* Monster::createMonster(const std::string& name) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; mType->name = name; return createMonster(mType); } Monster* Monster::createMonsterNick(const std::string& name, std::string nick) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; if (!(nick == "")) { mType->name = nick; } return createMonster(mType); } Continuando em monster.cpp procure: currentOutfit = mType->outfit; Adicionar embaixo: nick = mType->name; Vá em luascript.h e procure isto static int32_t luaDoCreateNpc(lua_State* L); Embaixo coloque: static int32_t luaDoCreateMonsterNick(lua_State* L); static int32_t luaGetCreatureNickRealName(lua_State* L); Em luascript.cpp procure: //doPlayerSetIdleTime(cid, amount) lua_register(m_luaState, "doPlayerSetIdleTime", LuaScriptInterface::luaDoPlayerSetIdleTime); Coloque embaixo: //doCreateMonster(monster, nick, pos) lua_register(m_luaState, "doCreateMonsterNick", LuaScriptInterface::luaDoCreateMonsterNick); Continue em luascript.cpp e procure isto: int32_t LuaScriptInterface::luaGetCreatureName(lua_State* L) { //getCreatureName(cid) ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) lua_pushstring(L, creature->getName().c_str()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Coloque isto: int32_t LuaScriptInterface::luaGetCreatureNickRealName(lua_State* L) { //getCreatureNickRealName(cid) ScriptEnviroment* env = getEnv(); if(Monster* monster = env->getCreatureByUID(popNumber(L))->getMonster()) lua_pushstring(L, monster->realname.c_str()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaScriptInterface::luaDoCreateMonsterNick(lua_State* L) { //doCreateMonsterNick(monster, nick, pos) ScriptEnviroment* env = getEnv(); PositionEx pos; popPosition(L, pos); std::string nick = popString(L); const std::string name = popString(L).c_str(); Monster* monster = Monster::createMonsterNick(name, nick); if(!monster) { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); return 1; } if(!g_game.placeCreature(monster, pos)) { delete monster; errorEx("Cannot create monster: " + name); lua_pushboolean(L, false); return 1; } monster->realname = name; lua_pushnumber(L, env->addThing((Thing*)monster)); return 1; } -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Exemplo de uso: function onSay(cid, words, param, channel) local t = string.explode(param, ",") doCreateMonsterNick(t[1], t[2], getThingPos(cid)) return true end Editado Março 11, 2014 por caotic Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/ Compartilhar em outros sites More sharing options...
Shoguns 119 Postado Janeiro 24, 2014 Share Postado Janeiro 24, 2014 muito grande, deu ate preguiça de ler mas Parece um sistema muito bom, parabéns Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1607485 Compartilhar em outros sites More sharing options...
Hyaki 20 Postado Janeiro 24, 2014 Share Postado Janeiro 24, 2014 Muito obrigado, eu estava atras dessa função já tinha algum tempo! Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1607536 Compartilhar em outros sites More sharing options...
Strogman 90 Postado Janeiro 24, 2014 Share Postado Janeiro 24, 2014 isso nao causaria um erro? ScriptEnvir oment* env = getEnv(); nao seria assim não? ScriptEnviroment* env = getEnv(); Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1607601 Compartilhar em outros sites More sharing options...
caotic 393 Postado Janeiro 24, 2014 Autor Share Postado Janeiro 24, 2014 (editado) isso nao causaria um erro? ScriptEnvir oment* env = getEnv(); nao seria assim não? ScriptEnviroment* env = getEnv(); Deve ser na hora de eu copiar e acabei clicando em espaço sem perceber Editado Janeiro 24, 2014 por caotic Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1607620 Compartilhar em outros sites More sharing options...
Hyaki 20 Postado Janeiro 24, 2014 Share Postado Janeiro 24, 2014 Era por isso que eu não conseguia compilar :s Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1607693 Compartilhar em outros sites More sharing options...
Lordfire 309 Postado Janeiro 25, 2014 Share Postado Janeiro 25, 2014 Eu trocaria Monster* Monster::createMonsterNick(const std::string& name, std::string nick) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; if (!(nick == "")) { mType->name = nick; } return createMonster(mType); }por Monster* Monster::createMonsterNick(const std::string& name, std::string nick) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType || nick.empty()) return NULL; mType->name = nick; return createMonster(mType); }Porque não vejo utilidade na função se for dado um "nick" vazio. Assim você mata um if e algumas linhas. Também dá pra reduzir um pouco aqui e continuar legível: Monster* Monster::createMonster(const std::string& name) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; return createMonster(mType); }por Monster* Monster::createMonster(const std::string& name) { MonsterType* mType = g_monsters.getMonsterType(name); return mType ? createMonster(mType) : NULL; } Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1607804 Compartilhar em outros sites More sharing options...
caotic 393 Postado Janeiro 25, 2014 Autor Share Postado Janeiro 25, 2014 (editado) Eu trocaria Monster* Monster::createMonsterNick(const std::string& name, std::string nick) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; if (!(nick == "")) { mType->name = nick; } return createMonster(mType); }por Monster* Monster::createMonsterNick(const std::string& name, std::string nick) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType || nick.empty()) return NULL; mType->name = nick; return createMonster(mType); }Porque não vejo utilidade na função se for dado um "nick" vazio. Assim você mata um if e algumas linhas. Também dá pra reduzir um pouco aqui e continuar legível: Monster* Monster::createMonster(const std::string& name) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; return createMonster(mType); }por Monster* Monster::createMonster(const std::string& name) { MonsterType* mType = g_monsters.getMonsterType(name); return mType ? createMonster(mType) : NULL; } if(!mType || nick.empty()) return NULL; A possiblidade do cara colocar uma string vazia logo o mType do monstro seria ignorado. Diminuição de linha é encheção de linguiça. Editado Janeiro 25, 2014 por caotic Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1607929 Compartilhar em outros sites More sharing options...
Maenilse 86 Postado Janeiro 26, 2014 Share Postado Janeiro 26, 2014 Realmente otimo este codigo, parabens Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1608818 Compartilhar em outros sites More sharing options...
nociam 90 Postado Fevereiro 15, 2014 Share Postado Fevereiro 15, 2014 Alguém testo em serve de pokemon PDA e funciona? Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1614123 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Fevereiro 17, 2014 Share Postado Fevereiro 17, 2014 @nociam Cara, como alguém vai adicionar essa função no PDA sem as sources? Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1614619 Compartilhar em outros sites More sharing options...
SmiX 265 Postado Fevereiro 17, 2014 Share Postado Fevereiro 17, 2014 kkkk Isso já tem no PDA. Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1614651 Compartilhar em outros sites More sharing options...
Junior001 362 Postado Fevereiro 19, 2014 Share Postado Fevereiro 19, 2014 Belo sistema Caotic irei testar aqui Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1615063 Compartilhar em outros sites More sharing options...
LuaniTa 0 Postado Fevereiro 20, 2014 Share Postado Fevereiro 20, 2014 Eu não entendi muito bem. Ele da 1 nick ao monster? Isso quer dizer o que exatamente? .-. Troca o nome dele por outro? Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1615155 Compartilhar em outros sites More sharing options...
nociam 90 Postado Fevereiro 25, 2014 Share Postado Fevereiro 25, 2014 Uhm falei errado tenho as sources do pda versao 5 ai gostaria de saber se isso pode funcionar. Entao tem esse erro nao aparece o nome de nenhum mostro Link para o comentário https://xtibia.com/forum/topic/227752-docreatemonsternickmonster-nick-pos/#findComment-1616399 Compartilhar em outros sites More sharing options...
Posts Recomendados