IZ
dúvida

Como adpatar essa função c++

Por izac ximenes, 09 de set. de 2015 em Resolvidos

15
2.2k
09 de setembro de 2015 às 20:21

galera queria adaptar essa função

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;
}

eu queria que quando essa função foce usada em um montros essa linha:

 

lua_pushstring(L, creature->getName().c_str());

 

foce substituída por:

 

lua_pushstring(L, monster->nomereal.c_str());

 

 

 

 

dragonfightD
09 de setembro de 2015 às 20:54

qual a finalidade? o que voce pretende fazer? nao entendi seu pedido

10 de setembro de 2015 às 07:38

a finalidade e seguinte eu adicionei um sistema de level no meu esse servidor 8.54(sistema aqui) so que quando usar essa função o level do pokemon vem junto ex:oddish [1] o certo e so oddish.

Felipe MoraesF
10 de setembro de 2015 às 10:43

Ao que parece, vendo o código lá, você só tem que alterar essa linha, em seu map.cpp

monster->name = monster->getName() + " [" + itoa(level, buffer, 10) + "]";

Altere para

monster->name = monster->getName();

O monstro continuará com o level, mas não será exibido ao clicar sobre ele.

10 de setembro de 2015 às 16:10

Serio? tipo vai aparece ele do lado do pokemon tipo assim oddish [1] mais na descrição nao? e assim que tu quer dizer?

BrunoB
10 de setembro de 2015 às 16:54

Serio? tipo vai aparece ele do lado do pokemon tipo assim oddish [1] mais na descrição nao? e assim que tu quer dizer?

Isso mesmo, faça essa alteração que o pokemon não irá parecer com o level na frente, embora ainda continuará com o level.

11 de setembro de 2015 às 08:01

num tem uma forma do level aparece?sem causa erro getcreaturaname()

BrunoB
11 de setembro de 2015 às 09:03

num tem uma forma do level aparece?sem causa erro getcreaturaname()

 

Eu não sei se você tem a função split, mas é uma solução:

vector<string> split(const string &s, char delim) {
    stringstream ss(s);
    string item;
    vector<string> tokens;
    while (getline(ss, item, delim)) {
        tokens.push_back(item);
    }
    return tokens;
}

Ai você usa assim:

std::vector<std::string> name = split(creature->getName().c_str(), '[');

Ficando assim:

int32_t LuaScriptInterface::luaGetCreatureName(lua_State* L)
{
	//getCreatureName(cid)
	ScriptEnviroment* env = getEnv();
	std::vector<std::string> name = split(creature->getName().c_str(), '[');
	if(Creature* creature = env->getCreatureByUID(popNumber(L)))
		lua_pushstring(L, name[1]);
	else
	{
		errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
		lua_pushboolean(L, false);
	}
	return 1;
}

Lembrando: Não testei e nem sei se vai funcionar, como não tenho como testar aqui, faz ai o teste.

dalvorsnD
14 de setembro de 2015 às 13:48

 

Eu não sei se você tem a função split, mas é uma solução:

vector<string> split(const string &s, char delim) {
    stringstream ss(s);
    string item;
    vector<string> tokens;
    while (getline(ss, item, delim)) {
        tokens.push_back(item);
    }
    return tokens;
}

Ai você usa assim:

std::vector<std::string> name = split(creature->getName().c_str(), '[');

Ficando assim:

int32_t LuaScriptInterface::luaGetCreatureName(lua_State* L)
{
	//getCreatureName(cid)
	ScriptEnviroment* env = getEnv();
	std::vector<std::string> name = split(creature->getName().c_str(), '[');
	if(Creature* creature = env->getCreatureByUID(popNumber(L)))
		lua_pushstring(L, name[1]);
	else
	{
		errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
		lua_pushboolean(L, false);
	}
	return 1;
}

Lembrando: Não testei e nem sei se vai funcionar, como não tenho como testar aqui, faz ai o teste.

 

como adicionio a função split na source ?

BrunoB
14 de setembro de 2015 às 15:13

 

como adicionio a função split na source ?

 

Tenta colocar no arquivo header (.h).

15 de setembro de 2015 às 09:10

 

Tenta colocar no arquivo header (.h).

 

voce poderia fazer mini tutorial de como adicionar essa função pfv

dalvorsnD
16 de setembro de 2015 às 11:21

Precisa disso não vei, é so acessar o nome do monsterType, que é o que carrega quando da load no monster

 

int32_t LuaScriptInterface::luaGetCreatureName(lua_State* L) {
    //getCreatureName(cid)
    ScriptEnviroment* env = getEnv();
    if(Creature* creature = env->getCreatureByUID(popNumber(L))) {
        if(Monster* monster = creature->getMonster())
                    lua_pushstring(L, monster->getMonsterType()->name.c_str() );
            else
                    lua_pushstring(L, creature->getName().c_str());
        } else {
        errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
        lua_pushboolean(L, false);
    }
    return 1;
}
nociamN
16 de setembro de 2015 às 12:31

Mano eu ja dei pra vc a diga sobre arrumar isso no seu outro topico?

 

http://www.xtibia.com/forum/topic/236653-getcreaturenamecid-com-sistema-de-level-poketibia/#entry1667770

 

 

1 mês depois...
LumusL
26 de outubro de 2015 às 23:25

Tópico Movido
Este tópico foi movido de "OTServSuporte OTServSuporte Programação"
para "OTServSuporte OTServSuporte ProgramaçãoPedidos e dúvidas resolvidos - Programação".