Jump to content
Sign in to follow this  
caanmasu

¡Arregla la boda de tu server privado de una vez por todas!

Recommended Posts

¡Hola mi gente!

 

Soy yo de nuevo

[ADM]Dark me pidió que le arreglara un bug y casualmente en mi servidor tenía ese mismo bug, así que le di manos a la obra y lo he logrado resolver.

 

Voy a ayudarles a reparar la boda de sus servidores.

 

Quest:

Había un problema hablando con la anciana y era que en el when había una función que no tenemos. Así que debes cambiar pc.is_engage_or_married() por (pc.is_engage() or pc.is_married()).

Actualmente está así:

		when oldwoman.chat.gameforge.marriage_manage._10_npcChat with not pc.is_engaged_or_married() begin

Y debe quedar más o menos así:

		when oldwoman.chat.gameforge.marriage_manage._10_npcChat with not (pc.is_engaged() or pc.is_married()) begin

En tu quest probablemente tengas 9006 en vez de oldwoman, y "Quiero casarme" en vez de chat.gameforge... pero es lo mismo, no te asustes, solo cambia la función que te puse arriba.

 

Source:

Es muy probable que tengas un error de nil en la función npc.lock (la quest usa esto para que se bloquee el npc mientras otro pj lo usa). La solución no es quitarlo, por supuesto. Debes ir al source de server y abrir el archivo questlua_npc.cpp.

Busca este bloque:

	int npc_lock(lua_State* L)
	{
		CQuestManager& q = CQuestManager::instance();
		LPCHARACTER ch = q.GetCurrentCharacterPtr();
		LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();

		if (!npc || npc->IsPC())
		{
			lua_pushboolean(L, TRUE);
			return 1;
		}

		if (npc->GetQuestNPCID() == 0 || npc->GetQuestNPCID() == ch->GetPlayerID())
		{
			npc->SetQuestNPCID(ch->GetPlayerID());
			lua_pushboolean(L, TRUE);
		}
		else
		{
			lua_pushboolean(L, FALSE);
		}

		return 1;
	}

En donde dice TRUE, cámbialo por true; y donde dice FALSE, cámbialo por false. C++ toma el valor del booleano solo en minúscula. (Tú mismo te darás cuenta por el cambio de color)

Debe quedar así:

	int npc_lock(lua_State* L)
	{
		CQuestManager& q = CQuestManager::instance();
		LPCHARACTER ch = q.GetCurrentCharacterPtr();
		LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();

		if (!npc || npc->IsPC())
		{
			lua_pushboolean(L, true);
			return 1;
		}

		if (npc->GetQuestNPCID() == 0 || npc->GetQuestNPCID() == ch->GetPlayerID())
		{
			npc->SetQuestNPCID(ch->GetPlayerID());
			lua_pushboolean(L, true);
		}
		else
		{
			lua_pushboolean(L, false);
		}

		return 1;
	}

 

Cliente:

También hubo un problema al hacer el confirm. El confirm es el cuadro que le va a llegar a la novia cuando se le pide el matrimonio y ella elige si aceptar o rechazar. El error es que a una función se le está enviando un parámetro pero debería enviar dos.

Ve al root/game.py y busca este bloque:

	# QUEST_CONFIRM
	def BINARY_OnQuestConfirm(self, msg, timeout, pid):
		confirmDialog = uiCommon.QuestionDialogWithTimeLimit()
		confirmDialog.SetText1(msg)
		confirmDialog.Open(timeout)
		confirmDialog.SetAcceptEvent(lambda answer=True, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide())
		confirmDialog.SetCancelEvent(lambda answer=False, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide())
		self.confirmDialog = confirmDialog
	# END_OF_QUEST_CONFIRM

El error es que a la función Open (de la clase QuestionDialogWithTimeLimit) recibe solo un parámetro cuando debería recibir dos. Aquí les muestro:

	def Open(self, msg, timeout):
		self.SetCenterPosition()
		self.SetTop()
		self.Show()

		self.SetText1(msg)
		self.endTime = app.GetTime() + timeout

uicommon.py

 

Ven que recibe msg y timeout? ok, entonces la solución es:

	# QUEST_CONFIRM
	def BINARY_OnQuestConfirm(self, msg, timeout, pid):
		confirmDialog = uiCommon.QuestionDialogWithTimeLimit()
		confirmDialog.SetText1(msg)
		confirmDialog.Open(msg, timeout) #fix bug
		confirmDialog.SetAcceptEvent(lambda answer=True, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide())
		confirmDialog.SetCancelEvent(lambda answer=False, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide())
		self.confirmDialog = confirmDialog
	# END_OF_QUEST_CONFIRM

Agregarle el msg de primero.

 

Y recuerden tener el index del mapa de bodas bien puesto.

 

Foto de prueba para no morir en el olvido:

image.png

 

Esto es todo, que disfruten casándose con sus chamanas :v 

 

¡Éxitos para todos!

Share this post


Link to post
Share on other sites

La función que no tenías:

 

	ALUA(pc_is_engaged_or_married)
	{
		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
		lua_pushboolean(L, marriage::CManager::instance().IsEngagedOrMarried(ch->GetPlayerID()));
		return 1;
	}

 

Un saludo.

Share this post


Link to post
Share on other sites

Los TRUE y FALSE, son una definición de los true  y false

image.png

libthecore\include\stdafx.h

Varias funciones del SRC utilizan estos TRUE y FALSE, ¿porque? quien sabe, se podría eliminar el contenido de la foto, solo tendrías que editar los TRUE y FALSE

Share this post


Link to post
Share on other sites
hace 4 horas, Break dijo:

La función que no tenías:

 

	ALUA(pc_is_engaged_or_married)
	{
		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
		lua_pushboolean(L, marriage::CManager::instance().IsEngagedOrMarried(ch->GetPlayerID()));
		return 1;
	}

 

Un saludo.

Sí, correcto.

#marriage.cpp

	bool CManager::IsEngagedOrMarried(DWORD dwPlayerID) 
	{ 
		return Get(dwPlayerID) != NULL; 
	}

 

 

hace 1 hora, Johan™ dijo:

Los TRUE y FALSE, son una definición de los true  y false

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

libthecore\include\stdafx.h

Varias funciones del SRC utilizan estos TRUE y FALSE, ¿porque? quien sabe, se podría eliminar el contenido de la foto, solo tendrías que editar los TRUE y FALSE

En mis files va perfecto esa parte. Revisé otros files que daban problema por eso. Seguro no tenían esa definición.
Gracias por el aporte.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...