Jump to content

[C++, SQL] FIX BUG KILL AND DROP War Total


asusta099
 Share

Recommended Posts

Buenas,

 

Como saben la guerra total es un evento creado hace mucho tiempo por Rinnegan el cual vendía meramente en quest, pero tenía un gran defecto el cual consistía en que necesitabas alubias para no terminar cruel en plena guerra total, aveces un usuario al no poder consumir esa alubia en buen tiempo terminaba dropeando parte de su equipo y causaba la molestia o perdida de objetos, un evento defectuoso, además de no poder conocer como quedaba el resto de los jugadores o ver quién ha ganado esto, por lo que en su tiempo igualmente me dí a la tarea de poner un parche en el código fuente que espero les sirva.

 

 

Primero debemos buscar y abrir el archivo:

char_battle.cpp

Buscamos:

#include "threeway_war.h"

Después de colocamos:

#define ZONE_WAR(map)		(236==(map))

En caso de no querer el drop de objetos si uno tiene karma negativo.

 

Buscamos:

TItemDropPenalty aItemDropPenalty_kor[9] =

Y lo reemplazamos por:

TItemDropPenalty aItemDropPenalty_kor[9] =
{
		{   0,   0,  0,  0 },	// ¼±¿Õ
		{   0,   0,  0,  0 },	// ¿µ¿õ
		{   0,   0,  0,  0 },	// ¼ºÀÚ
		{   0,   0,  0,  0 },	// ÁöÀÎ
		{   0,   0,  0,  0 },	// ¾ç¹Î
		{   0,   0,  0,  0 },	// ³¶ÀÎ
		{   0,   0,  0,  0 },	// ¾ÇÀÎ
		{   0,   0,  0,  0 },	// ¸¶µÎ
		{   0,   0,  0,  0 },	// ÆпÕ
};

Buscamos:

	}
	if (!isAgreedPVP && !isUnderGuildWar && !IsKillerMode() && GetAlignment() >= 0 && !isDuel && !isForked)

Y antes de esto colocamos:

				if (ZONE_WAR(GetMapIndex()))
				{
					std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery("SELECT pID FROM ranking_zone_war WHERE pID = %u", pkKiller->GetPlayerID()));
					if (pMsg->Get()->uiNumRows == 0)
					{
						std::auto_ptr<SQLMsg> pMsgK (DBManager::instance().DirectQuery("INSERT INTO ranking_zone_war%s(pID) VALUES('%d')", get_table_postfix(), pkKiller->GetPlayerID()));
						if (pMsgK->uiSQLErrno != 0)
						{
							ChatPacket(CHAT_TYPE_NOTICE, "[WAR] You can't update kill in this moment!");
						}
					}
					else
					{
						SQLMsg *pMsgKill;
						pMsgKill = DBManager::instance().DirectQuery("UPDATE player.ranking_zone_war SET lkill_point = lkill_point + '1' WHERE pID = %u", pkKiller->GetPlayerID());
						if (pMsgKill->uiSQLErrno != 0)
						{
							ChatPacket(CHAT_TYPE_NOTICE, "[WAR] You can't update kill in this moment!");
						}
					}	

Buscamos:

							else
							{	
								FPartyAlignmentCompute f(-20000, pkKiller->GetX(), pkKiller->GetY());
								pkKiller->GetParty()->ForEachOnlineMember(f);

								if (f.m_iCount == 0)
									pkKiller->UpdateAlignment(-20000);

Y antes de eso colocamos:

							if (ZONE_WAR(GetMapIndex()))
							{
								// NO RETURN (BUG DEAD)
							}

Buscamos:

								FPartyAlignmentCompute f(-20000, pkKiller->GetX(), pkKiller->GetY());
								pkKiller->GetParty()->ForEachOnlineMember(f);

								if (f.m_iCount == 0)
									pkKiller->UpdateAlignment(-20000);
								else
								{
									sys_log(0, "ALIGNMENT PARTY count %d amount %d", f.m_iCount, f.m_iAmount);

									f.m_iStep = 1;
									pkKiller->GetParty()->ForEachOnlineMember(f);
								}
							}
						}
						else
						{

Y antes de eso colocamos:

							if (ZONE_WAR(GetMapIndex()))
							{
								// NO RETURN (BUG DEAD)
							}

Ahora vamos a nuestra base de datos y colocamos el siguiente SQL dentro de la carpeta player:

/*
Navicat MySQL Data Transfer

Source Server         : TestServer
Source Server Version : 50634
Source Host           : 5.149.2.39:3306
Source Database       : player

Target Server Type    : MYSQL
Target Server Version : 50634
File Encoding         : 65001

Date: 2017-01-05 12:19:42
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `ranking_zone_war`
-- ----------------------------
DROP TABLE IF EXISTS `ranking_zone_war`;
CREATE TABLE `ranking_zone_war` (
  `pID` int(11) NOT NULL,
  `lkill_point` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`pID`),
  KEY `pID` (`pID`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of ranking_zone_war
-- ----------------------------

Con esto ya podrían quitar que la quest de alubias y además las consuma, el mapa debe ser el Index 236, en caso de no serlo o cambiarlo, deben cambiarlo en el define del principio.

 

Adjunto archivo guía si es complicado seguir los pasos.

 

Saludos!

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

Link to comment
Share on other sites

  • 5 years later...

Creo que es más optimo que no actualice el rank en ese mapa, ya que mucha gente perdería su rank positivo. Y ya no tenéis tantos problemas, de si dropea o no. Si alguien entra en cruel pues F.

Ahí dejo para quien lo quiera.

void CHARACTER::UpdateAlignment(int iAmount)
{
  //FIX
	if (ZONE_WAR(GetMapIndex()))
		return;
  //FIX
	bool bShow = false;

	if (m_iAlignment == m_iRealAlignment)
		bShow = true;

	int i = m_iAlignment / 10;

	m_iRealAlignment = MINMAX(-200000, m_iRealAlignment + iAmount, 200000);

	if (bShow)
	{
		m_iAlignment = m_iRealAlignment;

		if (i != m_iAlignment / 10)
			UpdatePacket();
	}
}
Link to comment
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.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...