[Função] Quests.xml

Beeki
Por Beeki
em Linguagens de Programação

Beeki

Ex-Coordenador XDev
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 12/03/11Posts: 1900Gênero: MasculinoChar no Tibia: Nokte

Bem vim trazer essa função aqui pra vocês é bem util pra quem está afim de criar um otserver completo!

 

Vá até quests.cpp e procure por.

 

std::string Mission::getDescription(Player* player)

 

Depois de achar, substitua por isso.

std::string Mission::getDescription(Player* player)
{
std::string value;
int32_t find_storage;
player->getStorage(storageId, value);
if(state.size())
{
	std::string ret = state;
	while((find_storage=ret.find("|STORAGE:"))>-1)
	{
		  int32_t parsing_storage = find_storage+9;
		  std::string temp;
		  while((int) ret[parsing_storage] != (int)'|')
		  {
			   temp += ret[parsing_storage];
			   parsing_storage++;
		  }
		  parsing_storage -=find_storage-1;
		  player->getStorage(atoi(temp.c_str()), temp);
		  ret.replace(find_storage, parsing_storage, temp);
	}
	replaceString(ret, "|STATE|", value);
	return ret;
}
if(atoi(value.c_str()) >= endValue)
{
	std::string ret = states.rbegin()->second;
	while((find_storage=ret.find("|STORAGE:"))>-1)
	{
		  int32_t parsing_storage = find_storage+9;
		  std::string temp;
		  while((int) ret[parsing_storage] != (int)'|')
		  {
			   temp += ret[parsing_storage];
			   parsing_storage++;
		  }
		  parsing_storage -=find_storage-1;
		  player->getStorage(atoi(temp.c_str()), temp);
		  ret.replace(find_storage, parsing_storage, temp);
	}
	replaceString(ret, "|STATE|", value);
	return ret;
}
for(int32_t i = endValue; i >= startValue; --i)
{
	player->getStorage(storageId, value);
	if(atoi(value.c_str()) != i)
		continue;
	std::string ret = states[i - startValue];
	while((find_storage=ret.find("|STORAGE:"))>-1)
	{
		  int32_t parsing_storage = find_storage+9;
		  std::string temp;
		  while((int) ret[parsing_storage] != (int)'|')
		  {
			   temp += ret[parsing_storage];
			   parsing_storage++;
		  }
		  parsing_storage -=find_storage-1;
		  player->getStorage(atoi(temp.c_str()), temp);
		  ret.replace(find_storage, parsing_storage, temp);
	}
	replaceString(ret, "|STATE|", value);
	return ret;
}
return "Couldn't retrieve any mission description, please report to a gamemaster.";
}

 

Pronto depois só compilar.

 

Aqui está um exemplo de como adicionar novas quests no arquivo.xml

 

<mission name="The head of Kiper" storageid="1001" startvalue="1" endvalue="3">
<missionstate id="0" description="Kill Rotworms to summon a Kiper!! You've killed already |STORAGE:1002|/50 Rotworms and |STORAGE:1500|/2 Carrion Rotworms."/>
<missionstate id="1" description="Give his head to Talaturen!"/>
<missionstate id="2" description="Take the medal you got from Talaturen to Ruly!"/>
</mission>

 

Creditos:

 

Beeki ( por trazer )

QuaS ( OTland )

 

@Edit

 

testei somente no tfs 0.4 e no 0.3.6 pl1

Fabio Augustus - Infraestrutura

Skype: guhsvasc

Vinc

The white fox
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 30/10/11Posts: 625Gênero: Masculino

isso vai aparece naquele janelinha que abre no cliente quando clica em quests?

^w^

Beeki

Ex-Coordenador XDev
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 12/03/11Posts: 1900Gênero: MasculinoChar no Tibia: Nokte

Isso mesmo.

Fabio Augustus - Infraestrutura

Skype: guhsvasc

Vinc

The white fox
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 30/10/11Posts: 625Gênero: Masculino

muito bom rep+,isso pode ajudar muito os players

^w^

Beeki

Ex-Coordenador XDev
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 12/03/11Posts: 1900Gênero: MasculinoChar no Tibia: Nokte

Obrigado ai, qualquer dúvida só postar.

Fabio Augustus - Infraestrutura

Skype: guhsvasc

Vinc

The white fox
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 30/10/11Posts: 625Gênero: Masculino

n é relacionado ao topico

mas vc conseguiria fase uma lua function para dar reload num player(reload na sql ou mysql)?tipo o load que da quando o player loga mas que de reload em uma table especifica,coluna ou todas,isso seria muito util, daria pra fsaer varios sistemas sem muda te que mexe nas sourcers

^w^

kriller12

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 18/12/11Posts: 40Char no Tibia: speelbiding circle

cara ajuda,eu não entendi a ultima parte que:

<mission name="The head of Kiper" storageid="1001" startvalue="1" endvalue="3">

<missionstate id="0" description="Kill Rotworms to summon a Kiper!! You've killed already |STORAGE:1002|/50 Rotworms and |STORAGE:1500|/2 Carrion Rotworms."/>

<missionstate id="1" description="Give his head to Talaturen!"/>

<missionstate id="2" description="Take the medal you got from Talaturen to Ruly!"/>

</mission>

 

 

onde eu coloco isso?

34TNfb.jpg

Beeki

Ex-Coordenador XDev
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 12/03/11Posts: 1900Gênero: MasculinoChar no Tibia: Nokte

@Kriller

 

Cara isso ai é só um exemplo de como adicionar uma quest no quests.xml apos ser feito a introdução do código acima em sua source.

 

@Lordbug

 

um exemplo para o que você quer é isso aqui.

 

db.executeQuery("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) + count .."' WHERE `name` ='"..getPlayerAccount(cid).."'")

 

função db.executeQuery

Fabio Augustus - Infraestrutura

Skype: guhsvasc

claudio17

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 10/01/13Posts: 33Char no Tibia: Adm AlvesBr

aeew cara os primeiros player funcionou normal mais depois ele não aparece mais no quest log ...