Newbie Spellweaver
- Joined
- Jan 13, 2010
- Messages
- 98
- Reaction score
- 118
I think for someone it will be usefull.
Source was completed by 70-75%.
100% sure that have bugs but check it
GensSystemProtocol.h
GensSystem.h
GensSystem.cpp
Credit: Me, Brain Aka Mr.Kernighan
Thanks: HermeX 4 Viewport Packet
Source was completed by 70-75%.
100% sure that have bugs but check it
GensSystemProtocol.h
Code:
#ifndef GENSSYSTEMPROTOCOL_H
#define GENSSYSTEMPROTOCOL_H
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
enum INFLUENCE_TYPE
{
//-----
LEAVED_INFLUENCE = -1,
//-----
NONE_INFLUENCE = 0,
//-----
VANERT_INFLUENCE = 1,
//-----
DUPRIAN_INFLUENCE = 2
//-----
};
enum USER_BATTLE_ZONE
{
//-----
BATTLE_ZONE_BLOCK = 0,
//-----
BATTLE_ZONE_UNBLOCK = 1
//-----
};
//--------------------------------------------------
struct _tagPMSG_REQ_REG_GENS_MEMBER
{
PBMSG_HEAD2 h; //0
BYTE bResult; //4
};
struct _tagPMSG_REQ_SEGEDE_GENS_MEMBER
{
PBMSG_HEAD h; //0
BYTE bResult; //3
};
struct _tagPMSG_GENS_REWARD_CODE
{
PBMSG_HEAD2 h; //0
BYTE bReward; //4
};
struct _tagPMSG_REQ_GENS_INFO
{
};
//--------------------------------------------------
struct _tagPMSG_ANS_GENS_INFO_EXDB
{
PBMSG_HEAD2 h;
BYTE bInfluence;
WORD wIndexH;
WORD wIndexL;
int iContributePoint;
int iGensClass;
int iGensRanking;
};
struct _tagPMSG_ANS_REG_GENS_MEBMER
{
PBMSG_HEAD2 h; //0
BYTE bResult; //4
BYTE iInfluence; //5
};
struct _tagPMSG_ANS_SECEDE_GENS_MEMBER_EXDB
{
PBMSG_HEAD2 h; //0
BYTE bResult; //4
BYTE bIndexH; //5
BYTE bIndexL; //6
};
struct _tagPMSG_ANS_ABUSING_INFO //9A (154)
{
PBMSG_HEAD h; //2
BYTE bResult; //3
char Name[0x0A]; //13
char szCharNames[100]; //113
int iKillUserCount; //114
BYTE bIndexH; //154
BYTE bIndexL; //155
int KillCount[10]; //166
//i150
//i154
//b154
//b155
};
struct _tagPMSG_ANS_GENS_REWARD_EXDB
{
PBMSG_HEAD h;
BYTE b3;
BYTE bResult; //4
BYTE b5;
BYTE b6;
BYTE b7;
int iGensClass; //8
BYTE bIndexH; //12
BYTE bIndexL; //13
};
struct _tagPMSG_ANS_GENS_MEMBER_COUNT_EXDB //0xA (10)
{
PBMSG_HEAD2 h;
int iVanertMemberCount;
int iDuprianMemberCount;
};
struct _tagPMSG_ANS_GENS_REWARD_DAY_CHECK_EXDB
{
PBMSG_HEAD h;
BYTE bResult;
BYTE bIndexH;
BYTE bIndexL;
int iRewardDay;
};
//--------------------------------------------------
struct _tagPMSG_REQ_REG_GENS_MEMBER_EXDB //0x20 (32)
{
PBMSG_HEAD2 h;
BYTE bResult;
char Name[0x0A];
BYTE bMessage;
BYTE bInfluence;
WORD wNumberH;
WORD wNumberL;
BYTE bIndexH;
BYTE bIndexL;
};
struct _tagPMSG_ANS_REG_GENS_MEMBER_EXDB
{
PBMSG_HEAD2 h; //0
BYTE bResult; //4
BYTE bInfluence; //5
BYTE bIndexH; //6
BYTE bIndexL; //7
};
struct _tagPMSG_REQ_SECEDE_GENS_MEMBER_EXDB //0x16 (22)
{
PBMSG_HEAD2 h;
char Name[10];
BYTE bResult;
WORD wNumberH;
WORD wNumberL;
BYTE bIndexH;
BYTE bIndexL;
};
struct _tagPMSG_REQ_ABUSING_INFO //0x10 (16)
{
PBMSG_HEAD2 h;
char Name[0x0A];
BYTE bResult;
BYTE bIndexH;
BYTE bIndexL;
};
struct _tagPMSG_REQ_SAVE_CONTRIBUTE_POINT_EXDB //0x1A (24)
{
PBMSG_HEAD h;
char Name[0x0D];
BYTE bResult;
int iContributePoint;
int iGensClass;
};
struct _tagPMSG_REQ_SAVE_ABUSING_KILLUSER_EXDB //0xB0 (176)
{
PBMSG_HEAD h; //
char AccountID[0x0D];
BYTE bResult;
char Name[0x0A];
char KillName[100];
int KillCount[10];
//i150
//i154
//b154
//b155
};
struct _tagGENS_RANKING
{
PBMSG_HEAD h;
BYTE bRanking;
};
struct _tagPMSG_GENS_MEMBER_VIEWPORT_INFO // 0x10
{
BYTE btInfluence; // +0x0(0x1)
BYTE NumberH; // +0x1(0x1)
BYTE NumberL; // +0x2(0x1)
int iGensRanking; // +0x4(0x4)
int iGensClass; // +0x8(0x4)
int iContributePoint; // +0xc(0x4)
};
extern _tagPMSG_GENS_MEMBER_VIEWPORT_INFO pGensMsg;
struct _tagPMSG_SEND_GENS_MEMBER_VIEWPORT // 0x6
{
struct PWMSG_HEAD2 h; // +0x0(0x5)
BYTE Count; // +0x5(0x1)
};
extern _tagPMSG_SEND_GENS_MEMBER_VIEWPORT pGensCount;
//--------------------------------------------------
struct _tagPMSG_SEND_GENS_INFO //0x16 (20)
{
PBMSG_HEAD2 h;
BYTE bInfluence;
int iGensRanking;
int iGensClass;
int iContributePoint;
int iNextContributePoint;
};
struct _tagPMSG_REQ_GENS_REWARD_CHECK_EXDB //0x18 (24)
{
PBMSG_HEAD h;
char Name[0x0D];
BYTE bResult;
WORD wIndexH;
WORD wIndexL;
int iInfluence;
};
struct _tagPMSG_REQ_GENS_REWARD_COMPLETE_EXDB //0x14 (20)
{
PBMSG_HEAD h;
BYTE bResult;
char Name[0x0B];
WORD wIndexH;
WORD wIndexL;
};
struct _tagPMSG_SEND_GENS_REWARD //0x8 (8)
{
PBMSG_HEAD h;
BYTE bResult;
BYTE bItemType;
};
struct _tagPMSG_REQ_GENS_MEMBER_COUNT //0x14 (20)
{
PBMSG_HEAD h;
BYTE bResult;
char Name[0x0D];
WORD wIndexH;
WORD wIndexL;
};
struct _tagPMSG_SET_GENS_REWARD_DAY_EXDB
{
PBMSG_HEAD h;
BYTE bRewardDay;
};
struct _tagPMSG_REQ_GENS_REWARD_DAY
{
PBMSG_HEAD h;
WORD bRewardDay;
BYTE bIndexH, bIndexL;
};
#endif
GensSystem.h
Code:
#ifndef GENSSYSTEM_H
#define GENSSYSTEM_H
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "GensSystemProtocol.h"
const int MAX_VIEWPORT_INFO = 0x7FC + 1;
extern BOOL g_GensSystemIsEnabled;
extern int g_GensAbusingResetTime;
extern int g_GensInitialContributePoint;
extern int g_BattleZoneAddExp;
extern int g_GensMasterLevelBattleZoneAddExp;
extern int g_PkPenaltyAddNeedZenMapMove;
//--------------------------------------------------
void CGReqRegGensMember(_tagPMSG_REQ_REG_GENS_MEMBER *lpMsg, int iIndex);
void CGReqSecedeGensMember(_tagPMSG_REQ_SEGEDE_GENS_MEMBER *lpMsg, int iIndex);
void CGReqGensReward(_tagPMSG_GENS_REWARD_CODE *lpMsg, int iIndex);
void CGReqGensMemberInfo(_tagPMSG_REQ_GENS_INFO *lpMsg, int iIndex);
//--------------------------------------------------
//--------------------------------------------------
void DGAnsGensInfo(_tagPMSG_ANS_GENS_INFO_EXDB *lpMsg);
void DGAnsRegGensMember(_tagPMSG_ANS_REG_GENS_MEMBER_EXDB *lpMsg);
void DGAnsSecedeGensMember(_tagPMSG_ANS_SECEDE_GENS_MEMBER_EXDB *lpMsg);
void DGAnsAbusingInfo(_tagPMSG_ANS_ABUSING_INFO *lpMsg);
void DGAnsGensReward(_tagPMSG_ANS_GENS_REWARD_EXDB *lpMsg);
void DGAnsGensMemberCount(_tagPMSG_ANS_GENS_MEMBER_COUNT_EXDB *lpMsg);
void DGAnsGensRewardDayCheck(_tagPMSG_ANS_GENS_REWARD_DAY_CHECK_EXDB *lpMsg);
//--------------------------------------------------
//--------------------------------------------------
class GensSystem
{
public:
GensSystem(void);
virtual ~GensSystem(void);
int GDReqAbusingInfo(LPOBJ lpObj);
int ReqExDBGensInfo(LPOBJ lpObj);
void ReqRegGensMember(LPOBJ lpObj, unsigned char btInfluence);
int AnsRegGensMember(int iObjIndex, unsigned char btResult);
bool IsInfluenceNPC(LPOBJ lpObj);
int ReqSecedeGensMember(LPOBJ lpObj);
int SendGensInfo(LPOBJ lpObj);
int AnsSecedeGensMember(int iObjIndex, BYTE btResult);
int SendPkPenaltyMapMove(LPOBJ lpObj);
int GDReqSaveContributePoint(LPOBJ lpObj);
int DBSaveAbusingKillUserName(LPOBJ lpObj);
int BattleZoneChatMsgSend(LPOBJ lpObj, LPBYTE Msg, int size);
signed int IsMoveMapBattleZone(int iMapIndex);
void GensViewportListProtocol(LPOBJ lpObj);
signed int IsMapBattleZone(int iMapIndex);
void SetGensInfluence(LPOBJ lpObj, int iInfluence);
signed int IsPkEnable(LPOBJ lpObj, LPOBJ lpTargetObj);
signed int GetGensInfluence(LPOBJ lpObj);
char *GetGensInfluenceName(LPOBJ lpObj);
bool IsRegGensInfluence(LPOBJ lpObj);
int SetUserBattleZoneEnable(LPOBJ lpObj, int bBattleZoneEnable);
int IsUserBattleZoneEnable(LPOBJ lpObj);
int SetContributePoint(LPOBJ lpObj, int iContributePoint);
int AddContributePoint(LPOBJ lpObj, int iContributePoint);
int SubContributePoint(LPOBJ lpObj, int iContributePoint);
int GetContributePoint(LPOBJ lpObj);
signed int PkPenaltyAddNeedZenMapMove(LPOBJ lpObj);
void PkPenaltyDropInvenItem(LPOBJ lpObj);
void PkPenaltyDropZen(LPOBJ lpObj);
int SendPKPenaltyDebuff(LPOBJ lpObj);
void CalcContributePoint(LPOBJ lpObj, LPOBJ lpTargetObj);
signed int ChkKillUserName(LPOBJ lpObj, char *szCharName);
signed int AbusingPenalty(LPOBJ lpObj, int iKillUserIndex);
int InsertKillUserName(LPOBJ lpObj, char *szCharName);
void MoveInBattleZonePartySplit(LPOBJ lpObj);
void AbusingInfoReset(LPOBJ lpObj);
signed int CalGensClass(LPOBJ lpObj);
int SetGensRanking(LPOBJ lpObj, int iGensRanking);
int SetGensClass(LPOBJ lpObj, int iGensClass);
int GetGensClass(LPOBJ lpObj);
int GetNextContributePoint(LPOBJ lpObj);
int SetGensMemberCount(int iInfluence, int iMemberCount);
signed int GetGensMemberCount(int iInfluence);
int ReqExDBGensRewardCheck(LPOBJ lpObj, int iInfluence);
int ReqExDBGensRewardComplete(LPOBJ lpObj);
int SendGensReward(LPOBJ lpObj, unsigned char btResult);
signed int SendGensRewardItem(LPOBJ lpObj, int iGensClass);
bool GensRewardInventoryCheck(LPOBJ lpObj, int iItemCount);
int ReqExDBGensMemberCount(LPOBJ lpObj);
int ReqExDBSetGensRewardDay(void);
int ReqExDBSetGensRanking(void);
int LoadData(char *lpszFileName);
int ReqGensRewardDay(LPOBJ lpObj);
//_tagGENS_RANKING::_tagGENS_RANKING(void) //0050B9F0
//_tagPMSG_REQ_REG_GENS_MEMBER_EXDB::_tagPMSG_REQ_REG_GENS_MEMBER_EXDB(void) //0050BA60
//_tagPMSG_REQ_SECEDE_GENS_MEMBER_EXDB::_tagPMSG_REQ_SECEDE_GENS_MEMBER_EXDB(void) //0050BAE0
//_tagPMSG_REQ_SAVE_CONTRIBUTE_POINT_EXDB::_tagPMSG_REQ_SAVE_CONTRIBUTE_POINT_EXDB(void) //0050BB40
//_tagPMSG_REQ_SAVE_ABUSING_KILLUSER_EXDB::_tagPMSG_REQ_SAVE_ABUSING_KILLUSER_EXDB(void) //0050BBA0
//_tagPMSG_REQ_ABUSING_INFO::_tagPMSG_REQ_ABUSING_INFO(void) //0050BC20
private:
BOOL b_PkPenaltyDropZen;
BOOL b_PkPenaltyDropInvenItem;
int iVanertMemberCount;
int iDuprianMemberCount;
int iIndex;
protected:
};
extern GensSystem g_GensSystem;
//--------------------------------------------------
#endif //GENSSYSTEM_H
GensSystem.cpp
Code:
#include "StdAfx.h"
#include "SQLConnect.h"
#include "DBSockMng.h"
#include "GameMain.h"
#include "GuildClass.h"
#include "logproc.h"
#include "DSProtocol.h"
#include "user.h"
#include "BuffManager.h"
#include "..\common\winutil.h"
#include "..\common\ReadScript.h"
#include "GensSystem.h"
#include "GensSystemProtocol.h"
//--------------------------------------------------
_tagPMSG_GENS_MEMBER_VIEWPORT_INFO pGensMsg;
_tagPMSG_SEND_GENS_MEMBER_VIEWPORT pGensCount;
BOOL g_GensSystemIsEnabled = GetPrivateProfileIntA("GensSystem", "GensSystemIsEnabled", 1, "..\\Data\\Events\\GensSystem\\GensSystem.ini");
int g_GensAbusingResetTime = GetPrivateProfileIntA("GensSystem", "GensSystemAbusingResetTime", 60, "..\\Data\\Events\\GensSystem\\GensSystem.ini");
int g_GensInitialContributePoint = GetPrivateProfileIntA("GensSystem", "GensSystemInitialContributePoint", 10, "..\\Data\\Event\\GensSystem\\GensSystem.ini");
int g_BattleZoneAddExp = GetPrivateProfileIntA("GensSystem", "GensSystemBattleZoneAddExp", 25, "..\\Data\\Event\\GensSystem\\GensSystem.ini");
int g_GensMasterLevelBattleZoneAddExp = GetPrivateProfileIntA("GensSystem", "GensSystemMasterLevelBattleZoneAddExp", 50, "..\\Data\\Event\\GensSystem\\GensSystem.ini");
int g_PkPenaltyAddNeedZenMapMove = GetPrivateProfileIntA("GensSystem", "GensSystemPkPenaltyAddNeedZenMapMove", 50, "..\\Data\\Event\\GensSystem\\GensSystem.ini");
char *szInfluence[] = { "NONE_INFLUENCE", "Vanert", "Duprian" };
GensSystem g_GensSystem;
GensSystem::GensSystem() {};
GensSystem::~GensSystem() {};
//-> Completed
int GensSystem::GDReqAbusingInfo(LPOBJ lpObj)
{
if (!OBJMAX_RANGE(lpObj->m_Index))
return 0;
if (gObjIsConnected(lpObj))
{
_tagPMSG_REQ_ABUSING_INFO pMsg;
PHeadSetB((LPBYTE)&pMsg, 0xF8, sizeof(pMsg));
memcpy(pMsg.Name, lpObj->Name, 0x0A);
pMsg.bIndexH = SET_NUMBERH(lpObj->m_Index);
pMsg.bIndexL = SET_NUMBERL(lpObj->m_Index);
pMsg.bResult = 9;
if (wsJServerCli.DataSend((char*)&pMsg, pMsg.h.size))
return true;
}
return false;
};
//-> Completed
int GensSystem::ReqExDBGensInfo(LPOBJ lpObj)
{
if (!OBJMAX_RANGE(lpObj->m_Index)) return 0;
if (gObjIsConnected(lpObj))
{
_tagPMSG_REQ_ABUSING_INFO pMsg;
PHeadSubSetB((LPBYTE)&pMsg, 0xF8, 0x1, sizeof(pMsg));
pMsg.bResult = 0;
memcpy(pMsg.Name, lpObj->Name, 0x0A);
pMsg.bIndexH = SET_NUMBERH(lpObj->m_Index);
pMsg.bIndexL = SET_NUMBERL(lpObj->m_Index);
if (cDBSMng.Send((char*)&pMsg, pMsg.h.size)) return true;
}
return false;
};
//-> Completed
void GensSystem::ReqRegGensMember(LPOBJ lpObj, unsigned char btInfluence)
{
//-----
_GUILD_INFO_STRUCT *lpGuildInfo = lpObj->lpGuild;
//-----
if (!OBJMAX_RANGE(lpObj->m_Index)) return;
if (gObjIsConnected(lpObj->m_Index))
{
if (btInfluence == VANERT_INFLUENCE || btInfluence == DUPRIAN_INFLUENCE)
{
//-----
_tagPMSG_REQ_REG_GENS_MEMBER_EXDB pMsg;
//-----
if (btInfluence == VANERT_INFLUENCE || btInfluence == DUPRIAN_INFLUENCE)
{
//-----
PHeadSubSetB((LPBYTE)&pMsg, 0xF8, 0x03, sizeof(pMsg));
//-----
//memcpy(pMsg.AccountID, lpObj->AccountID, sizeof(lpObj->AccountID));
//-----
//pMsg.bResult = 0;
//-----
memcpy(pMsg.Name, lpObj->Name, sizeof(lpObj->Name));
//-----
pMsg.bMessage = 0;
//-----
pMsg.bInfluence = btInfluence;
//-----
if (lpGuildInfo)
{
pMsg.wNumberH = SET_NUMBERHW(lpGuildInfo->Number);
pMsg.wNumberL = SET_NUMBERLW(lpGuildInfo->Number);
}
//-----
pMsg.bIndexH = SET_NUMBERH(lpObj->m_Index);
//-----
pMsg.bIndexL = SET_NUMBERL(lpObj->m_Index);
//-----
if (cDBSMng.Send((char*)&pMsg, pMsg.h.size)) return;
}
}
else
{
LogAddTD("[GensSystem] - Error - %s %s Line: %d", "btInfluence", __FILE__, __LINE__);
}
}
};
//-> Completed
int GensSystem::AnsRegGensMember(int iObjIndex, unsigned char btResult)
{
return 0;
};
//-> Completed
bool GensSystem::IsInfluenceNPC(LPOBJ lpObj)
{
return (lpObj->TargetNumber == 543 && this->GetGensInfluence(lpObj) == VANERT_INFLUENCE
|| lpObj->TargetNumber == 544 && this->GetGensInfluence(lpObj) == DUPRIAN_INFLUENCE);
};
//-> Completed
int GensSystem::ReqSecedeGensMember(LPOBJ lpObj)
{
if (gObjIsConnected(lpObj->m_Index))
{
//-----
_tagPMSG_REQ_SECEDE_GENS_MEMBER_EXDB pMsg;
//-----
PHeadSubSetBE((LPBYTE)&pMsg, 0xF8, 0x4, sizeof(pMsg));
//-----
pMsg.bResult = 0; //[GensSystem] [%s][%s] Gens Request - Leave [%s]
//-----
pMsg.bIndexH = SET_NUMBERH(lpObj->m_Index);
//-----
pMsg.bIndexL = SET_NUMBERL(lpObj->m_Index);
//-----
memcpy(pMsg.Name, lpObj->Name, sizeof(lpObj->Name));
//-----
if (cDBSMng.Send((char*)&pMsg, sizeof(pMsg))) return true;
}
return false;
};
//-> Completed
int GensSystem::SendGensInfo(LPOBJ lpObj)
{
if (!OBJMAX_RANGE(lpObj->m_Index))
return 0;
if (gObjIsConnected(lpObj))
{
_tagPMSG_SEND_GENS_INFO pMsg;
PHeadSubSetB((LPBYTE)&pMsg, 0xF8, 0x7, sizeof(pMsg));
pMsg.bInfluence = this->GetGensInfluence(lpObj);
pMsg.iGensRanking = lpObj->m_GensRanking;
pMsg.iGensClass = lpObj->m_GensClass;
pMsg.iContributePoint = lpObj->m_ContributePoint;
pMsg.iNextContributePoint = this->GetNextContributePoint(lpObj);
if (DataSend(lpObj->m_Index, (LPBYTE)&pMsg, pMsg.h.size))
return true;
}
return false;
};
//-> Completed
int GensSystem::AnsSecedeGensMember(int iObjIndex, BYTE btResult)
{
//int iRet;
return 0;
};
//-> Completed
int GensSystem::SendPkPenaltyMapMove(LPOBJ lpObj)
{
if (!OBJMAX_RANGE(lpObj->m_Index))
return 0;
if (gObjIsConnected(lpObj))
{
BYTE pMsg[4] = { 0xC1, 0x04, 0xF8, 0x08 };
DataSend(lpObj->m_Index, (LPBYTE)&pMsg, pMsg[1]);
return true;
}
return false;
};
//-> Completed
int GensSystem::GDReqSaveContributePoint(LPOBJ lpObj)
{
if (!OBJMAX_RANGE(lpObj->m_Index))
return false;
if (gObjIsConnected(lpObj))
{
if (this->IsRegGensInfluence(lpObj))
{
_tagPMSG_REQ_SAVE_CONTRIBUTE_POINT_EXDB pMsg;
PHeadSetB((LPBYTE)&pMsg, 0xF8, sizeof(pMsg));
memcpy(pMsg.Name, lpObj->Name, 0x0A);
pMsg.iContributePoint = this->GetContributePoint(lpObj);
pMsg.bResult = 7;
pMsg.iGensClass = this->GetGensClass(lpObj);
if (wsJServerCli.DataSend((char*)&pMsg, pMsg.h.size))
return true;
}
}
return false;
};
//-> Completed
int GensSystem::DBSaveAbusingKillUserName(LPOBJ lpObj)
{
if (!OBJMAX_RANGE(lpObj->m_Index))
return false;
if (gObjIsConnected(lpObj))
{
if (this->IsRegGensInfluence(lpObj))
{
EnterCriticalSection(&criti);
_tagPMSG_REQ_SAVE_ABUSING_KILLUSER_EXDB pMsg;
pMsg.bResult = 0;
for (int i = 0; i < 10; ++i)
{
pMsg.KillName[i * 11] = 0;
pMsg.KillCount[i] = lpObj->m_KillUserCnt;
memcpy(&pMsg.KillName[i * 11], lpObj->Name, 0x0A);
}
memcpy(pMsg.AccountID, lpObj->AccountID, 0x0A);
memcpy(pMsg.Name, lpObj->Name, 0x0A);
PHeadSetB((LPBYTE)&pMsg, 0xF8, sizeof(pMsg));
pMsg.bResult = 8;
LeaveCriticalSection(&criti);
if (wsJServerCli.DataSend((char*)&pMsg, pMsg.h.size))
return true;
}
}
return false;
};
//-> Completed
int GensSystem::BattleZoneChatMsgSend(LPOBJ lpObj, LPBYTE Msg, int size)
{
int iTarInfluence = 0;
if (this->IsMapBattleZone(lpObj->MapNumber))
{
iTarInfluence = this->GetGensInfluence(lpObj);
for (int n = 0; n < MAX_VIEWPORT; ++n)
{
if (lpObj->VpPlayer[n].type == OBJ_USER && lpObj->VpPlayer[n].state == PLAYER_CONNECTED && (this->GetGensInfluence((LPOBJ)lpObj->VpPlayer[n].number) == iTarInfluence || CheckAuthorityCondition(98, lpObj) || CheckAuthorityCondition(98, (LPOBJ)lpObj->VpPlayer2[n].number)))
{
DataSend(lpObj->VpPlayer[n].number, (LPBYTE)&Msg, size);
}
iTarInfluence = n + 1;
}
}
return iTarInfluence;
};
//-> Completed
signed int GensSystem::IsMoveMapBattleZone(int iMapIndex)
{
if (gPkLimitFree)
{
switch (iMapIndex)
{
case 11:
case 12:
case 13:
case 25:
case 27:
case 28:
case 29:
case 33:
case 42:
case 45:
return 1;
default:
break;
}
}
return !gPkLimitFree && iMapIndex == 42;
};
//-> Completed
unsigned char lpViewportAdd[MAX_VIEWPORT_INFO];
void GensSystem::GensViewportListProtocol(LPOBJ lpObj)
{
unsigned char btInfluence;
int iGensCount = 0;
int iViewportSize = 0x06;
memset(&lpViewportAdd, 0, MAX_VIEWPORT_INFO);
if ((lpObj->Authority & 32) != 32 || gObjSearchActiveEffect(lpObj, AT_INVISIBILITY) != AT_MONSTER_GENERAL)
{
pGensMsg.btInfluence = this->GetGensInfluence(lpObj);
btInfluence = pGensMsg.btInfluence;
pGensMsg.NumberH = HIBYTE(lpObj->m_Index);
pGensMsg.NumberL = LOBYTE(lpObj->m_Index);
pGensMsg.iGensRanking = 1; //lpObj->m_GensRanking;
pGensMsg.iGensClass = 1; //this->GetGensClass(lpObj);
pGensMsg.iContributePoint = 1; // this->GetContributePoint(lpObj);
memcpy((BYTE*)lpViewportAdd + iViewportSize, &pGensMsg, 16);
iViewportSize += 16; ++iGensCount;
PHeadSubSetW((LPBYTE)&pGensCount, 0xF8, 0x05, iViewportSize);
pGensCount.Count = iGensCount;
memcpy((BYTE*)lpViewportAdd, &pGensCount, 6);
for (int n = 0; n < MAX_VIEWPORT; ++n)
{
if (lpObj->VpPlayer[n].type == OBJ_USER)
{
switch (lpObj->VpPlayer[n].state)
{
case 1:
case 2:
case 3:
{
int tObjNum = lpObj->VpPlayer[n].number;
if (tObjNum > 0)
{
DataSend(tObjNum, (LPBYTE)&lpViewportAdd, iViewportSize);
}
}
break;
}
}
}
}
};
//-> Completed
signed int GensSystem::IsMapBattleZone(int iMapIndex)
{
if (gNonPK)
{
return FALSE;
}
if (gPkLimitFree)
{
switch (iMapIndex)
{
case 7:
case 33:
case 37:
case 56:
case 63:
return TRUE;
break;
default:
break;
}
}
return (!gPkLimitFree && iMapIndex == 63);
};
//-> Completed
void GensSystem::SetGensInfluence(LPOBJ lpObj, int iInfluence)
{
if (iInfluence != VANERT_INFLUENCE && iInfluence != DUPRIAN_INFLUENCE && iInfluence != LEAVED_INFLUENCE)
{
LogAddTD("[GensSystem] - Error - [%s][%s] Influence[%d] %s %d",
lpObj->AccountID, lpObj->Name, iInfluence, __FILE__, __LINE__);
}
else
{
if (iInfluence == LEAVED_INFLUENCE) iInfluence = NONE_INFLUENCE;
lpObj->m_GensInfluence = iInfluence;
}
};
//-> Completed
signed int GensSystem::IsPkEnable(LPOBJ lpObj, LPOBJ lpTargetObj)
{
if (this->IsMapBattleZone(lpObj->MapNumber))
{
if (lpObj->Type != 1 || lpTargetObj->Type != 1)
{
return this->GetGensInfluence(lpObj) != this->GetGensInfluence(lpTargetObj);
}
else
{
return 1;
}
}
return 1;
};
//-> Completed
signed int GensSystem::GetGensInfluence(LPOBJ lpObj)
{
if (lpObj->m_GensInfluence == LEAVED_INFLUENCE || lpObj->m_GensInfluence < NONE_INFLUENCE || lpObj->m_GensInfluence > DUPRIAN_INFLUENCE)
{
LogAddTD("[GensSystem] Error [%s][%s] GensInfluence [%d]", lpObj->AccountID, lpObj->Name, lpObj->m_GensInfluence); return 0;
}
return lpObj->m_GensInfluence;
};
//-> Completed
char *GensSystem::GetGensInfluenceName(LPOBJ lpObj)
{
if (lpObj->m_GensInfluence == LEAVED_INFLUENCE || lpObj->m_GensInfluence < NONE_INFLUENCE || lpObj->m_GensInfluence > DUPRIAN_INFLUENCE)
{
LogAddTD("[GensSystem] Error [%s][%s] GensInfluence [%d]", lpObj->AccountID, lpObj->Name, lpObj->m_GensInfluence);
return NULL;
}
return szInfluence[lpObj->m_GensInfluence];
};
//-> Completed
bool GensSystem::IsRegGensInfluence(LPOBJ lpObj)
{
if (this->GetGensInfluence(lpObj) == VANERT_INFLUENCE || this->GetGensInfluence(lpObj) == DUPRIAN_INFLUENCE)
{
return true;
}
return false;
};
//-> Completed
int GensSystem::SetUserBattleZoneEnable(LPOBJ lpObj, int bBattleZoneEnable)
{
return lpObj->m_UserBattleZoneEnable = bBattleZoneEnable;
};
//-> Completed
int GensSystem::IsUserBattleZoneEnable(LPOBJ lpObj)
{
return lpObj->m_UserBattleZoneEnable;
};
//-> Completed
int GensSystem::SetContributePoint(LPOBJ lpObj, int iContributePoint)
{
return lpObj->m_ContributePoint = iContributePoint;
};
//-> Completed
int GensSystem::AddContributePoint(LPOBJ lpObj, int iContributePoint)
{
lpObj->m_ContributePoint += iContributePoint;
return this->GDReqSaveContributePoint(lpObj);
};
//-> Completed
int GensSystem::SubContributePoint(LPOBJ lpObj, int iContributePoint)
{
lpObj->m_ContributePoint -= iContributePoint;
if (lpObj->m_ContributePoint < 0)
{
lpObj->m_ContributePoint = 0;
}
return this->GDReqSaveContributePoint(lpObj);
};
//-> Completed
int GensSystem::GetContributePoint(LPOBJ lpObj)
{
return lpObj->m_ContributePoint;
};
//-> Completed
signed int GensSystem::PkPenaltyAddNeedZenMapMove(LPOBJ lpObj)
{
if (gPkLimitFree)
{
if (this->IsMapBattleZone(lpObj->MapNumber))
{
return 1;
}
return 1;
}
return 0;
};
//-> Completed
void GensSystem::PkPenaltyDropInvenItem(LPOBJ lpObj)
{
if (gPkLimitFree)
{
if (this->IsMapBattleZone(lpObj->MapNumber))
{
this->b_PkPenaltyDropInvenItem = TRUE;
}
}
this->b_PkPenaltyDropInvenItem = FALSE;
};
//-> Completed
void GensSystem::PkPenaltyDropZen(LPOBJ lpObj)
{
if (gPkLimitFree)
{
if (this->IsMapBattleZone(lpObj->MapNumber))
{
this->b_PkPenaltyDropZen = TRUE;
}
}
this->b_PkPenaltyDropZen = FALSE;
};
//-> Completed
int GensSystem::SendPKPenaltyDebuff(LPOBJ lpObj)
{
if (lpObj->Type)
{
if (gPkLimitFree)
{
return this->IsMapBattleZone(lpObj->MapNumber);
}
}
return 0;
};
//-> Completed
void GensSystem::CalcContributePoint(LPOBJ lpObj, LPOBJ lpTargetObj)
{
int iInfluence;
int iTarInfluence;
int iContributePoint;
int iKillerContributePoint;
int iCalcLv;
int iAddValue;
int iSubValue;
int iAddBonusValue;
int iGensClassGap;
char szName[0x0B];
if (lpObj->Type && lpTargetObj->Type && this->IsMapBattleZone(lpObj->MapNumber) && this->IsMapBattleZone(lpTargetObj->MapNumber))
{
iInfluence = this->GetGensInfluence(lpObj);
iTarInfluence = this->GetGensInfluence(lpTargetObj);
if (iInfluence && iTarInfluence)
{
if (iInfluence != iTarInfluence)
{
memcpy(szName, lpTargetObj->Name, sizeof(lpTargetObj->Name));
if (this->ChkKillUserName(lpObj, szName) == 0)
{
iKillerContributePoint = this->GetContributePoint(lpTargetObj);
iContributePoint = this->GetContributePoint(lpObj);
if (iKillerContributePoint > 0 || iContributePoint <= 0)
{
iAddValue = 0; iAddBonusValue = 0;
if (lpObj->Level == lpTargetObj->Level)
{
iAddValue = 5; iAddBonusValue = 3;
}
else
{
if (lpObj->Level >= lpTargetObj->Level)
{
if (lpObj->Level > lpTargetObj->Level)
{
iCalcLv = lpObj->Level - lpTargetObj->Level;
if (iCalcLv < 51)
{
if (iCalcLv < 31 || iCalcLv > 50)
{
if (iCalcLv < 11 || iCalcLv > 30)
{
if (iCalcLv > 0 && iCalcLv <= 10)
{
iAddValue = 5; iSubValue = 3;
}
}
else
{
iAddValue = 3; iSubValue = 3;
}
}
else
{
iAddValue = 2; iSubValue = 1;
}
}
else
{
iAddValue = 1; iSubValue = 1;
}
}
}
else
{
iCalcLv = lpTargetObj->Level - lpObj->Level;
if (iCalcLv < 51)
{
if (iCalcLv < 31 || iCalcLv > 50)
{
if (iCalcLv < 11 || iCalcLv > 30)
{
if (iCalcLv > 0 && iCalcLv <= 10)
{
iAddValue = 5; iSubValue = 3;
}
}
else
{
iAddValue = 6; iSubValue = 3;
}
}
else
{
iAddValue = 6; iSubValue = 3;
}
}
else
{
iAddValue = 7; iSubValue = 3;
}
}
}
iAddBonusValue = 0;
iGensClassGap = lpObj->m_GensClass - lpTargetObj->m_GensClass;
if (iGensClassGap == 1)
{
if (lpObj->m_GensClass >= 9)
{
iAddBonusValue = 1;
}
else
{
iAddBonusValue = 3;
}
}
else
{
if (iGensClassGap == 2)
{
if (lpObj->m_GensClass >= 9)
{
iAddBonusValue = 2;
}
else
{
iAddBonusValue = 4;
}
}
else
{
if (iGensClassGap >= 3)
{
if (lpObj->m_GensClass >= 9)
{
iAddBonusValue = 3;
}
else
{
iAddBonusValue = 5;
}
}
}
if (lpObj->m_GensClass > 9 && iAddBonusValue + iAddValue >= this->GetNextContributePoint(lpObj))
{
GCServerMsgStringSend(lMsg.Get(3470), lpObj->m_Index, 1);
}
this->AddContributePoint(lpObj, iAddValue);
LogAddTD("[GensSystem] [%s][%s] Add ContributePoint[%d] - Result : Lv [%d] GensName [%s] / Lv [%d] GensName [%s]",
lpTargetObj->AccountID, lpTargetObj->Name, iAddValue, lpTargetObj->Level, this->GetGensInfluenceName(lpTargetObj), lpObj->Level, this->GetGensInfluenceName(lpObj));
this->SubContributePoint(lpObj, iSubValue);
LogAddTD("[GensSystem] [%s][%s] Sub ContributePoint[%d] - Result : Lv [%d] GensName [%s] / Lv [%d] GensName [%s]",
lpTargetObj->AccountID, lpTargetObj->Name, iSubValue, lpTargetObj->Level, this->GetGensInfluenceName(lpTargetObj), lpObj->Level, this->GetGensInfluenceName(lpObj));
if (iAddBonusValue > 0)
{
this->AddContributePoint(lpObj, iAddBonusValue);
GCServerMsgStringSend(lMsg.Get(3472), lpObj->m_Index, 1);
LogAddTD("[GensSystem] [%s][%s] Add BonusCP[%d] - Result : Lv [%d] GensName [%s] / Lv [%d] GensName [%s]",
lpObj->AccountID, lpObj->Name, iAddBonusValue, lpObj->Level, this->GetGensInfluenceName(lpObj), lpTargetObj->Level, this->GetGensInfluenceName(lpTargetObj));
}
}
}
}
}
else
{
LogAddTD("[GensSystem] - Error NONE_INFLUENCE - %s Line: %d", __FILE__, __LINE__);
}
}
}
};
//-> Completed
signed int GensSystem::ChkKillUserName(LPOBJ lpObj, char *szCharName)
{
int i = 0;
while (true)
{
if (i >= 10)
{
EnterCriticalSection((LPCRITICAL_SECTION)&criti);
this->InsertKillUserName(lpObj, szCharName);
LeaveCriticalSection((LPCRITICAL_SECTION)&criti);
return 0;
}
if (!strcmp(gObj[lpObj->m_Index].m_szCharName, szCharName))
break;
i++;
}
EnterCriticalSection((LPCRITICAL_SECTION)&criti);
++lpObj->m_KillUserCnt;
LeaveCriticalSection((LPCRITICAL_SECTION)&criti);
if (this->AbusingPenalty(lpObj, i))
return true;
return false;
};
//-> Completed
signed int GensSystem::AbusingPenalty(LPOBJ lpObj, int iKillUserIndex)
{
int iKillUserCnt = lpObj->m_KillUserCnt;
int bDBSave = 0;
if (lpObj->m_ContributePoint > 0)
{
bDBSave = 1;
}
// WebZen разработчики... :D
if (iKillUserCnt >= 3)
{
if (iKillUserCnt < 3 || iKillUserCnt > 5)
{
if (iKillUserCnt >= 6)
{
GCServerMsgStringSend(lMsg.Get(3450), lpObj->m_Index, 1);
}
EnterCriticalSection((LPCRITICAL_SECTION)&criti);
if (lpObj->m_KillUserCnt < 0)
{
lpObj->m_KillUserCnt = 0;
}
LeaveCriticalSection((LPCRITICAL_SECTION)&criti);
if (bDBSave)
{
this->GDReqSaveContributePoint(lpObj); return true;
}
return true;
}
else
{
GCServerMsgStringSend(lMsg.Get(3449), lpObj->m_Index, 1);
return false;
}
}
return false;
};
//-> Completed
int GensSystem::InsertKillUserName(LPOBJ lpObj, char *szCharName)
{
int iKillUserToCnt = lpObj->m_KillUserTotCnt;
if (iKillUserToCnt >= 10)
{
lpObj->m_KillUserTotCnt = 0; iKillUserToCnt = 0;
}
memset(lpObj->m_szCharName, 0, 0x0B);
strcpy(lpObj->m_szCharName, szCharName);
++lpObj->m_KillUserCnt;
++lpObj->m_KillUserTotCnt;
for (int i = 0; i < lpObj->m_KillUserTotCnt; ++i)
{
LogAddTD("[GensSystem] Abusing List [%s][%s] KillUserName[%s] Cnt[%d]", lpObj->AccountID, lpObj->Name, lpObj->m_szCharName, lpObj->m_KillUserCnt);
iKillUserToCnt = i + 1;
}
return iKillUserToCnt;
};
//-> Completed
void GensSystem::MoveInBattleZonePartySplit(LPOBJ lpObj)
{
PMSG_PARTYDELUSER pMsg;
if (gPkLimitFree != TRUE && lpObj->PartyNumber >= 0)
{
int pindex = gParty.GetIndex(lpObj->PartyNumber, lpObj->m_Index, lpObj->DBNumber);
if (pindex >= 0)
{
pMsg.Number = pindex;
CGPartyDelUser(&pMsg, lpObj->m_Index); GCResultSend(lpObj->m_Index, 0x41, 0x7);
}
}
};
//-> Completed
void GensSystem::AbusingInfoReset(LPOBJ lpObj)
{
if (!OBJMAX_RANGE(lpObj->m_Index))
return;
if (!gObjIsConnected(lpObj->m_Index))
{
if (this->IsRegGensInfluence(lpObj))
{
if (g_GensAbusingResetTime > 0 && GetTickCount() - lpObj->m_GensAbusingTick >= 60000 * g_GensAbusingResetTime)
{
EnterCriticalSection((LPCRITICAL_SECTION)&criti);
lpObj->m_GensAbusingTick = GetTickCount();
for (int i = 0; i < 10; ++i)
{
lpObj->m_KillUserCnt = 0;
memset(lpObj->m_szCharName, 0, 0x0B);
}
lpObj->m_KillUserTotCnt = 0;
LeaveCriticalSection((LPCRITICAL_SECTION)&criti);
}
}
else
{
lpObj->m_GensAbusingTick = GetTickCount();
}
}
};
//-> Completed
signed int GensSystem::CalGensClass(LPOBJ lpObj)
{
if (lpObj->m_ContributePoint < 200)
{
if (lpObj->m_ContributePoint < 224)
{
if (lpObj->m_ContributePoint < 248)
{
if (lpObj->m_ContributePoint < 272)
{
if (lpObj->m_ContributePoint < 296)
{
if (lpObj->m_ContributePoint < 320)
{
return 0;
}
else
{
return 14;
}
}
else
{
return 13;
}
}
else
{
return 12;
}
}
else
{
return 11;
}
}
else
{
return 10;
}
}
else
{
if (lpObj->m_ContributePoint > 8)
{
if (lpObj->m_ContributePoint > 32)
{
if (lpObj->m_ContributePoint > 56)
{
if (lpObj->m_ContributePoint > 80)
{
if (lpObj->m_ContributePoint > 104)
{
if (lpObj->m_ContributePoint > 128)
{
if (lpObj->m_ContributePoint > 152)
{
if (lpObj->m_ContributePoint > 176)
{
return 9;
}
else
{
return 8;
}
}
else
{
return 7;
}
}
else
{
return 6;
}
}
else
{
return 5;
}
}
else
{
return 4;
}
}
else
{
return 3;
}
}
else
{
return 2;
}
}
else
{
return 1;
}
}
return 0;
};
//-> Completed
int GensSystem::SetGensRanking(LPOBJ lpObj, int iGensRanking)
{
return lpObj->m_GensRanking = iGensRanking;
};
//-> Completed
int GensSystem::SetGensClass(LPOBJ lpObj, int iGensClass)
{
return lpObj->m_GensClass = iGensClass;
};
//-> Completed
int GensSystem::GetGensClass(LPOBJ lpObj)
{
return lpObj->m_GensClass;
};
//-> Completed
int GensSystem::GetNextContributePoint(LPOBJ lpObj)
{
if (this->IsRegGensInfluence(lpObj))
{
if (lpObj->m_NextContributePoint > 499)
{
if (lpObj->m_NextContributePoint > 1499)
{
if (lpObj->m_NextContributePoint > 2999)
{
if (lpObj->m_NextContributePoint > 5999)
{
if (lpObj->m_NextContributePoint > 9999)
{
return -2;
}
else
{
return 10000 - lpObj->m_NextContributePoint;
}
}
else
{
return 6000 - lpObj->m_NextContributePoint;
}
}
else
{
return 3000 - lpObj->m_NextContributePoint;
}
}
else
{
return 1500 - lpObj->m_NextContributePoint;
}
}
else
{
return 500 - lpObj->m_NextContributePoint;
}
}
else
{
return -1;
}
return 0;
};
//-> Completed
int GensSystem::SetGensMemberCount(int iInfluence, int iMemberCount)
{
if (iInfluence == VANERT_INFLUENCE)
{
this->iVanertMemberCount = iMemberCount;
}
else
{
if (iInfluence == DUPRIAN_INFLUENCE)
this->iDuprianMemberCount = iMemberCount;
}
return NONE_INFLUENCE;
};
//-> Completed
signed int GensSystem::GetGensMemberCount(int iInfluence)
{
if (iInfluence == VANERT_INFLUENCE)
{
return this->iVanertMemberCount;
}
else if (iInfluence == DUPRIAN_INFLUENCE)
{
return this->iDuprianMemberCount;
}
else
{
return -1;
}
};
//-> Completed
int GensSystem::ReqExDBGensRewardCheck(LPOBJ lpObj, int iInfluence)
{
if (!OBJMAX_RANGE(lpObj->m_Index))
return false;
if (gObjIsConnected(lpObj))
{
_tagPMSG_REQ_GENS_REWARD_CHECK_EXDB pMsg;
PHeadSetB((LPBYTE)&pMsg, 0xF8, sizeof(pMsg));
pMsg.bResult = 12;
strcpy(pMsg.Name, lpObj->Name);
pMsg.wIndexH = SET_NUMBERH(lpObj->m_Index);
pMsg.wIndexL = SET_NUMBERL(lpObj->m_Index);
pMsg.iInfluence = iInfluence;
if (wsJServerCli.DataSend((char*)&pMsg, pMsg.h.size))
return true;
}
return false;
};
//-> Completed
int GensSystem::ReqExDBGensRewardComplete(LPOBJ lpObj)
{
if (!OBJMAX_RANGE(lpObj->m_Index))
return false;
if (gObjIsConnected(lpObj))
{
_tagPMSG_REQ_GENS_REWARD_COMPLETE_EXDB pMsg;
PHeadSetB((LPBYTE)&pMsg, 0xF8, sizeof(pMsg));
pMsg.bResult = 14;
memcpy(pMsg.Name, lpObj->Name, 0x0A);
pMsg.wIndexH = SET_NUMBERHW(lpObj->m_Index);
pMsg.wIndexL = SET_NUMBERLW(lpObj->m_Index);
if (wsJServerCli.DataSend((char*)&pMsg, pMsg.h.size))
return true;
}
return false;
};
//-> Completed
int GensSystem::SendGensReward(LPOBJ lpObj, unsigned char btResult)
{
if (!OBJMAX_RANGE(lpObj->m_Index))
return false;
if (gObjIsConnected(lpObj))
{
_tagPMSG_SEND_GENS_REWARD pMsg;
PHeadSetB((LPBYTE)&pMsg, 0xF8, sizeof(pMsg));
pMsg.bResult = 10;
pMsg.bItemType = btResult;
if (DataSend(lpObj->m_Index, (LPBYTE)&pMsg, pMsg.h.size))
return true;
}
return false;
};
//-> Completed
signed int GensSystem::SendGensRewardItem(LPOBJ lpObj, int iGensClass)
{
int iIndex = lpObj->m_Index;
int iItemCount = iGensClass - 1;
if (iItemCount - 1 >= 0)
{
iItemCount = this->iIndex * iItemCount + 5;
if (iItemCount > 0)
{
int iItemNumber = ((this->iIndex * iItemCount + 4) + (this->iIndex * iItemCount + 3)) << 9;
if (this->GensRewardInventoryCheck(lpObj, iItemCount))
{
for (int i = 0; i < iItemCount; ++i)
{
ItemSerialCreateSend(iIndex, 240, 0, 0, iItemNumber, 0, 0, 0, 0, 0, 0, 0, 0);
}
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
return false;
};
//-> Completed
bool GensSystem::GensRewardInventoryCheck(LPOBJ lpObj, int iItemCount)
{
unsigned char blank = NULL;
int iCount = 0;
for (int h = 0; h < 8; ++h)
{
for (int w = 0; w < 8; ++w)
{
if (*(BYTE*)(lpObj->pInventoryMap + (h) * 8 + (w)) == 255)
{
if (gObjOnlyInventoryRectCheck(lpObj->m_Index, w, h, 1, 1))
{
++iCount;
}
}
}
}
return iItemCount <= iCount;
};
//-> Completed
int GensSystem::ReqExDBGensMemberCount(LPOBJ lpObj)
{
if (!OBJMAX_RANGE(lpObj->m_Index))
return false;
if (gObjIsConnected(lpObj))
{
_tagPMSG_REQ_GENS_MEMBER_COUNT pMsg;
PHeadSetB((LPBYTE)&pMsg, 0xF8, sizeof(pMsg));
pMsg.bResult = 15;
pMsg.wIndexH = SET_NUMBERHW(lpObj->m_Index);
pMsg.wIndexL = SET_NUMBERLW(lpObj->m_Index);
if (wsJServerCli.DataSend((char*)&pMsg, pMsg.h.size))
return true;
}
return false;
};
//-> Completed
int GensSystem::ReqExDBSetGensRewardDay(void)
{
_tagPMSG_SET_GENS_REWARD_DAY_EXDB pMsg;
PHeadSetB((LPBYTE)&pMsg, 0xF8, sizeof(pMsg));
pMsg.bRewardDay = 17;
return wsJServerCli.DataSend((char*)&pMsg, pMsg.h.size);
};
//-> Completed
int GensSystem::ReqExDBSetGensRanking(void)
{
_tagGENS_RANKING pMsg;
PHeadSetB((LPBYTE)&pMsg, 0xF8, sizeof(pMsg));
pMsg.bRanking = 18;
return wsJServerCli.DataSend((char*)&pMsg, pMsg.h.size);
};
//-> Not Completed
int GensSystem::LoadData(char *lpszFileName)
{
int iType = 0;
SMDToken Token = GetToken();
int i = 0;
unsigned long dwError = 0;
int iGensClass = 0;
int iRewardItemType = 0;
int iRewardItemCount = 0;
unsigned char btRankingKind = NULL;
int iRankingValue = 0;
int iRewardItemNumber = 0;
return 0;
};
//-> Completed
int GensSystem::ReqGensRewardDay(LPOBJ lpObj)
{
_tagPMSG_REQ_GENS_REWARD_DAY pMsg;
PHeadSetB((LPBYTE)&pMsg, 0xF8, sizeof(pMsg));
pMsg.bRewardDay = 19;
pMsg.bIndexH = SET_NUMBERH(lpObj->m_Index);
pMsg.bIndexL = SET_NUMBERL(lpObj->m_Index);
return wsJServerCli.DataSend((char*)&pMsg, pMsg.h.size);
};
//--------------------------------------------------
//--------------------------------------------------
//void ProtocolCore(BYTE protoNum, BYTE * aRecv, int aLen, int aIndex, BOOL Encrypt, int serial)
//-> Completed
void CGReqRegGensMember(_tagPMSG_REQ_REG_GENS_MEMBER *lpMsg, int iIndex)
{
unsigned char bRet;
LPOBJ lpObj = &gObj[iIndex];
_GUILD_INFO_STRUCT *lpGuildInfo = gObj[iIndex].lpGuild;
if (!OBJMAX_RANGE(iIndex)) return;
if (gObjIsConnected(iIndex))
{
_tagPMSG_ANS_REG_GENS_MEMBER_EXDB pMsg;
pMsg.bInfluence = lpMsg->bResult;
//[GensSystem] [%s][%s] Gens Request - Join [%s]
if (!g_GensSystem.GetGensInfluence(lpObj))
{
pMsg.bResult = 0; bRet = 1;
}
//GensSystem] [%s][%s] Gens Joining Failed to Gens be Same : [%s]
if (g_GensSystem.GetGensInfluence(lpObj) > 0)
{
pMsg.bResult = 1; bRet = 0;
}
//[GensSystem] [%s][%s] Gens Joining Failed to Below Gens leaving Time
//if (g_GensAbusingResetTime < 60)
//{
// pMsg.bResult = 2; bRet = 1;
//}
//[GensSystem] [%s][%s] Gens Joining Failed to Below 50Lv
if (lpObj->Level < 50)
{
pMsg.bResult = 3; bRet = 0;
}
//[GensSystem] [%s][%s] Gens Joining Failed to Gens be Different Guild Leader [%s]
if (lpObj->GuildStatus >= 0)
{
pMsg.bResult = 4; bRet = 0;
}
//[GensSystem] [%s][%s] Gens Joining Failed to Not Register Guild Leader GuildName [%s]
if (lpObj->GuildStatus == GUILD_MASTER)
{
pMsg.bResult = 5; bRet = 0;
}
//[GensSystem] [%s][%s] Gens Joining Failed to Already Partymember
if (lpObj->PartyNumber >= 0)
{
pMsg.bResult = 6; bRet = 0;
}
//[GensSystem] [%s][%s] Gens Joining Failed to Union GuildMaster
if (lpGuildInfo != NULL && lpGuildInfo->iGuildUnion)
{
pMsg.bResult = 7; bRet = 0;
}
if (bRet)
{
g_GensSystem.ReqRegGensMember(lpObj, lpMsg->bResult);
}
else
{
pMsg.bIndexH = SET_NUMBERH(iIndex);
pMsg.bIndexL = SET_NUMBERL(iIndex);
DGAnsRegGensMember((_tagPMSG_ANS_REG_GENS_MEMBER_EXDB*)&pMsg);
}
}
}
//-> Completed
void CGReqSecedeGensMember(_tagPMSG_REQ_SEGEDE_GENS_MEMBER *lpMsg, int iIndex)
{
if (!OBJMAX_RANGE(iIndex))
return;
LPOBJ lpObj = &gObj[iIndex];
unsigned char bRet = 1;
if (gObjIsConnected(iIndex))
{
_tagPMSG_ANS_SECEDE_GENS_MEMBER_EXDB pMsg;
if (!g_GensSystem.IsInfluenceNPC(lpObj))
{
pMsg.bResult = 3; bRet = 0;
}
//[GensSystem] [%s][%s] Gens Leaving Failed to Not Register Gens
if (!g_GensSystem.GetGensInfluence(lpObj))
{
pMsg.bResult = 1; bRet = 0;
}
else
{
pMsg.bResult = 0; bRet = 1;
}
if (bRet)
{
g_GensSystem.ReqSecedeGensMember(lpObj);
}
else
{
pMsg.bIndexH = SET_NUMBERH(iIndex);
pMsg.bIndexL = SET_NUMBERL(iIndex);
DGAnsSecedeGensMember((_tagPMSG_ANS_SECEDE_GENS_MEMBER_EXDB*)&pMsg);
}
}
}
//-> Completed
void CGReqGensReward(_tagPMSG_GENS_REWARD_CODE *lpMsg, int iIndex)
{
if (!OBJMAX_RANGE(iIndex))
return;
unsigned char bRet = 0; //Not Used
LPOBJ lpObj = &gObj[iIndex];
if (gObjIsConnected(lpObj))
{
g_GensSystem.ReqExDBGensRewardCheck(lpObj, lpMsg->bReward);
}
}
//-> Completed
void CGReqGensMemberInfo(_tagPMSG_REQ_GENS_INFO *lpMsg, int iIndex)
{
if (!OBJMAX_RANGE(iIndex)) return;
LPOBJ lpObj = &gObj[iIndex];
if (gObjIsConnected(lpObj))
{
if (g_GensSystem.IsRegGensInfluence(lpObj))
{
g_GensSystem.ReqExDBGensInfo(lpObj);
}
}
}
//--------------------------------------------------
//--------------------------------------------------
// void ExDataServerProtocolCore(BYTE protoNum, LPBYTE aRecv, int aLen)
//-> Completed
void DGAnsGensInfo(_tagPMSG_ANS_GENS_INFO_EXDB *lpMsg)
{
int iObjIndex = MAKE_NUMBERW(lpMsg->wIndexH, lpMsg->wIndexL);
LPOBJ lpObj = &gObj[iObjIndex];
if (gObjIsConnectedGP(iObjIndex))
{
if (lpMsg->iGensClass)
{
g_GensSystem.SetUserBattleZoneEnable(lpObj, BATTLE_ZONE_BLOCK);
g_GensSystem.SetGensInfluence(lpObj, NONE_INFLUENCE);
g_GensSystem.SetContributePoint(lpObj, 0);
}
else
{
if (lpMsg->bInfluence != LEAVED_INFLUENCE && lpMsg->bInfluence)
{
g_GensSystem.SetUserBattleZoneEnable(lpObj, BATTLE_ZONE_UNBLOCK);
}
g_GensSystem.SetGensInfluence(lpObj, lpMsg->bInfluence);
g_GensSystem.SetContributePoint(lpObj, lpMsg->iContributePoint);
g_GensSystem.SetGensRanking(lpObj, lpMsg->iGensRanking);
g_GensSystem.SetGensClass(lpObj, lpMsg->iGensClass);
g_GensSystem.GensViewportListProtocol(lpObj);
}
LogAddTD("[GensSystem] Get DB GensInfo [%s][%s] GensName [%s]", lpObj->AccountID, lpObj->Name, g_GensSystem.GetGensInfluenceName(lpObj));
g_GensSystem.SendGensInfo(lpObj);
if (g_GensSystem.IsMapBattleZone(lpObj->MapNumber))
{
if (!g_GensSystem.IsUserBattleZoneEnable(lpObj))
{
gObjTeleport(lpObj->m_Index, 0, 140, 125);
GCServerMsgStringSend(lMsg.Get(3451), lpObj->m_Index, 1);
}
}
}
else
{
LogAddTD("error-L2 : Index %s %d", __FILE__, __LINE__);
}
}
//-> Completed
void DGAnsRegGensMember(_tagPMSG_ANS_REG_GENS_MEMBER_EXDB *lpMsg)
{
int iObjIndex = MAKE_NUMBERW(lpMsg->bIndexH, lpMsg->bIndexL);
LPOBJ lpObj = &gObj[iObjIndex];
if (gObjIsConnectedGP(lpObj->m_Index))
{
_tagPMSG_ANS_REG_GENS_MEBMER pMsg;
if (!lpMsg->bResult)
{
g_GensSystem.SetGensInfluence(lpObj, lpMsg->bInfluence);
g_GensSystem.SetUserBattleZoneEnable(lpObj, BATTLE_ZONE_UNBLOCK);
g_GensSystem.GensViewportListProtocol(lpObj);
g_GensSystem.SetContributePoint(lpObj, g_GensInitialContributePoint);
g_GensSystem.GDReqSaveContributePoint(lpObj);
}
PHeadSubSetBE((LPBYTE)&pMsg, 0xF8, 0x02, sizeof(pMsg));
pMsg.bResult = lpMsg->bResult;
pMsg.iInfluence = lpMsg->bInfluence;
DataSend(lpObj->m_Index, (LPBYTE)&pMsg, pMsg.h.size);
switch (lpMsg->bResult)
{
case 0:
LogAddTD("[GensSystem] [%s][%s] Gens Request - Join [%s]", lpObj->AccountID, lpObj->Name, g_GensSystem.GetGensInfluenceName(lpObj));
break;
case 1:
LogAddTD("[GensSystem] [%s][%s] Gens Joining Failed to Gens be Same : [%s]", lpObj->AccountID, lpObj->Name);
break;
case 2:
LogAddTD("[GensSystem] [%s][%s] Gens Joining Failed to Below Gens leaving Time", lpObj->AccountID, lpObj->Name);
break;
case 3:
LogAddTD("[GensSystem] [%s][%s] Gens Joining Failed to Below 50Lv", lpObj->AccountID, lpObj->Name);
break;
case 4:
LogAddTD("[GensSystem] [%s][%s] Gens Joining Failed to Gens be Different Guild Leader [%s]", lpObj->AccountID, lpObj->Name, lpObj->lpGuild->Names);
break;
case 5:
LogAddTD("[GensSystem] [%s][%s] Gens Joining Failed to Not Register Guild Leader GuildName [%s]", lpObj->AccountID, lpObj->Name, lpObj->lpGuild->Name);
break;
case 6:
LogAddTD("[GensSystem] [%s][%s] Gens Joining Failed to Already Partymember", lpObj->AccountID, lpObj->Name);
break;
case 7:
LogAddTD("[GensSystem] [%s][%s] Gens Joining Failed to Union GuildMaster", lpObj->AccountID, lpObj->Name);
break;
default:
return;
}
}
else
{
LogAddTD("error-L2 : Index %s %d", __FILE__, __LINE__);
}
}
//-> Completed
void DGAnsSecedeGensMember(_tagPMSG_ANS_SECEDE_GENS_MEMBER_EXDB *lpMsg)
{
int iObjIndex = MAKE_NUMBERW(lpMsg->bIndexH, lpMsg->bIndexL);
LPOBJ lpObj = &gObj[iObjIndex];
if (gObjIsConnectedGP(lpObj->m_Index))
{
switch (lpMsg->bResult)
{
case 0:
LogAddTD("[GensSystem] [%s][%s] Gens Request - Leave [%s]", lpObj->AccountID, lpObj->Name, g_GensSystem.GetGensInfluenceName(lpObj));
break;
case 1:
LogAddTD("[GensSystem] [%s][%s] Gens Leaving Failed to Not Register Gens", lpObj->AccountID, lpObj->Name);
break;
case 2:
LogAddTD("[GensSystem] [%s][%s] Gens Leaving Failed to GuildMaster GensName [%s]", lpObj->AccountID, lpObj->Name, g_GensSystem.GetGensInfluenceName(lpObj));
break;
case 3:
LogAddTD("[GensSystem] [%s][%s] Gens Leaving Failed to Not Influence NPC : [%s]", lpObj->AccountID, lpObj->Name, g_GensSystem.GetGensInfluenceName(lpObj));
break;
default:
break;
}
if (!lpMsg->bResult)
{
g_GensSystem.SetGensInfluence(lpObj, LEAVED_INFLUENCE);
g_GensSystem.SetUserBattleZoneEnable(lpObj, BATTLE_ZONE_BLOCK);
g_GensSystem.SetContributePoint(lpObj, 0);
memset(lpObj->m_szCharName, 0, sizeof(lpObj->m_szCharName));
lpObj->m_KillUserCnt = 0; lpObj->m_KillUserTotCnt = 0;
g_GensSystem.GensViewportListProtocol(lpObj);
g_GensSystem.SetGensClass(lpObj, 0);
g_GensSystem.SetGensRanking(lpObj, 0);
}
_tagPMSG_ANS_SECEDE_GENS_MEMBER_EXDB pMsg;
PHeadSubSetBE((LPBYTE)&pMsg, 0xF8, 0x04, sizeof(pMsg));
pMsg.bResult = lpMsg->bResult;
DataSend(lpObj->m_Index, (LPBYTE)&pMsg, 0x05);
}
else
{
LogAddTD("error-L2 : Index %s %d", __FILE__, __LINE__);
}
}
//-> Completed
void DGAnsAbusingInfo(_tagPMSG_ANS_ABUSING_INFO *lpMsg)
{
//int iObjIndex = MAKE_NUMBERW(lpMsg->bIndexH, lpMsg->bIndexL);
//LPOBJ lpObj = &gObj[iObjIndex];
//if (gObjIsConnectedGP(iObjIndex))
//{
// for (int i = 0; i < 10; ++i)
// {
// if (strlen(lpMsg->Name) > 0)
// {
// //lpObj->m_szTargetCharName[0] = 0;
// //memcpy(lpObj->m_szCharName, &lpMsg->Name[0], 0x0A);
// //lpObj->m_KillUserCnt = lpMsg->iKillUserCount;
// //++lpObj->m_KillUserTotCnt;
// }
// }
//}
//else
//{
// LogAddTD("error-L2 : Index %s %d", __FILE__, __LINE__);
//}
}
//-> Completed
void DGAnsGensReward(_tagPMSG_ANS_GENS_REWARD_EXDB *lpMsg)
{
unsigned char btResult;
int iObjIndex = MAKE_NUMBERW(0, 0);
LPOBJ lpObj = &gObj[iObjIndex];
if (gObjIsConnectedGP(iObjIndex))
{
if (lpMsg->bResult)
{
btResult = lpMsg->bResult;
}
else
{
if (g_GensSystem.SendGensRewardItem(lpObj, lpMsg->iGensClass))
{
btResult = 0;
g_GensSystem.ReqExDBGensRewardComplete(lpObj);
}
else
{
btResult = 3;
}
}
LogAddTD("[GensSystem] Send Gens Ranking Reward [%s][%s] Result [%d]", lpObj->AccountID, lpObj->Name, btResult);
g_GensSystem.SendGensReward(lpObj, btResult);
}
else
{
LogAddTD("error-L2 : Index %s %d", __FILE__, __LINE__);
}
}
//-> Completed
void DGAnsGensMemberCount(_tagPMSG_ANS_GENS_MEMBER_COUNT_EXDB *lpMsg)
{
g_GensSystem.SetGensMemberCount(1, lpMsg->iVanertMemberCount);
g_GensSystem.SetGensMemberCount(2, lpMsg->iDuprianMemberCount);
}
//-> Completed
void DGAnsGensRewardDayCheck(_tagPMSG_ANS_GENS_REWARD_DAY_CHECK_EXDB *lpMsg)
{
int iObjIndex = MAKE_NUMBERW(lpMsg->bIndexH, lpMsg->bIndexL);
LPOBJ lpObj = &gObj[iObjIndex];
if (gObjIsConnectedGP(iObjIndex))
{
if (lpMsg->iRewardDay)
{
GCServerMsgStringSend(lMsg.Get(3459), iObjIndex, 1);
}
}
else
{
LogAddTD("error-L2 : Index %s %d", __FILE__, __LINE__);
}
}
//--------------------------------------------------
Credit: Me, Brain Aka Mr.Kernighan
Thanks: HermeX 4 Viewport Packet