[Release] zTeam Season 8 Episode 2 (Source)

Page 199 of 216 FirstFirst ... 99149189191192193194195196197198199200201202203204205206207209 ... LastLast
Results 2,971 to 2,985 of 3226
  1. #2971
    Apprentice jprey7 is offline
    MemberRank
    Jun 2012 Join Date
    23Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    Code:
    #include "stdafx.h"
    #include "CommandManager.h"
    #include "..\pugixml\pugixml.hpp"
    #include "GameMain.h"
    #include "DSProtocol.h"
    #include "BuffEffectSlot.h"
    #include "..\common\winutil.h"
    #include "CastleSiege.h"
    #include "Crywolf.h"
    #include "MoveCommand.h"
    #include "Gate.h"
    #include "MultiWareHouseSystem.h"
    #include "SProtocol.h"
    #if (ENABLE_CUSTOM_OFFLINETRADE == 1)
    #include "OfflineTrade.h"
    #endif
    #include "ObjUseSkill.h"
    // -------------------------------------------------------------------------------
    
    CLogToFile g_GMChatLog("GMSystem", ".\\LOG\\GMLog", TRUE);
    CLogToFile g_USystemLog("USystem", ".\\LOG\\ULog", TRUE);
    CLogToFile g_PostLog("Post", ".\\LOG\\Post", TRUE);
    
    
    using namespace pugi;
    CommandManager g_CommandManager;
    // -------------------------------------------------------------------------------
    
    CommandManager::CommandManager()
    {
    
    }
    // -------------------------------------------------------------------------------
    
    CommandManager::~CommandManager()
    {
    
    }
    // -------------------------------------------------------------------------------
    			//int tempindex;
    			//int aIndex;
    
    void CommandManager::Init()
    {
    	this->m_CommandInfo.clear();
    	if( this->m_CommandInfo.capacity() > 0 )
    	{
    		std::vector<CommandInfo>().swap(this->m_CommandInfo);
    	}
    }
    // -------------------------------------------------------------------------------
    
    void CommandManager::Load()
    {
    	this->Init();
    	this->Read(gDirPath.GetNewPath(FILE_CUSTOM_COMMANDMANAGER));
    }
    // -------------------------------------------------------------------------------
    
    void CommandManager::Read(LPSTR File)
    {
    	xml_document Document;
    	xml_parse_result Result = Document.load_file(File);
    	// ----
    	if( Result.status != status_ok )
    	{
    		MsgBox("[CommandManager] File %s not found! %d", File, Result.status);
    		return;
    	}
    	// ----
    	xml_node CommandManager = Document.child("commandmanager");
    	xml_node CommandList = CommandManager.child("commandlist");
    	// ----
    	for( xml_node Node = CommandList.child("command"); Node; Node = Node.next_sibling() )
    	{
    		CommandInfo lpCommand = { 0 };
    		lpCommand.Index = Node.attribute("id").as_int();
    		lpCommand.Access = Node.attribute("access").as_int();
    		lpCommand.MinLevel = Node.attribute("minlevel").as_int();
    		lpCommand.MinReset = Node.attribute("minreset").as_int();
    		lpCommand.PriceType = Node.attribute("pricetype").as_int();
    		lpCommand.Price = Node.attribute("price").as_int();
    		lpCommand.PremiumAccess = Node.attribute("premium").as_int();
    		strcpy(lpCommand.Text, Node.text().as_string());
    		this->m_CommandInfo.push_back(lpCommand);
    	}
    }
    // -------------------------------------------------------------------------------
    
    void CommandManager::Run(LPOBJ lpUser, LPSTR Text)
    {
    	if (g_SelfDefenseOn)
    	{
    		if ((GetTickCount() - lpUser->MySelfDefenseTime) < g_SelfDefenseTime * 1000) 
    		{
    			GCServerMsgStringSend(lMsg.Get(1133), lpUser->m_Index, 1);
    			return;
    		}
    	}
    	// ----
    	LPSTR Command = { 0 };
    	char Buffer[250];
    	char Separator[2] = " ";
    	// ----
    	strcpy(Buffer, Text);
    	Command = strtok(Buffer, Separator);
    	// ----
    	CommandInfo* lpCommand = this->GetCommand(Command);
    	BYTE CheckStatus = this->CheckCommand(lpUser, Command);	
    
    	if (lpCommand == NULL) {
    		return;
    	}
    
    	if( CheckStatus != 1)
    	{
    		if( CheckStatus == 0 )
    		{
    			MsgOutput(lpUser->m_Index, "Wrong command");
    		}
    		else if( CheckStatus == 2 )
    		{
    			MsgOutput(lpUser->m_Index, "Your access code is wrong for this command");
    		}
    		else if( CheckStatus == 3 
    			&& lpCommand->Index != Command::PKReset) // special calculation
    		{
    			MsgOutput(lpUser->m_Index, "You are short money for this command");
    		}
    		else if( CheckStatus == 4 )
    		{
    			MsgOutput(lpUser->m_Index, "Your premium access code is wrong for this command");
    		}
    		else if( CheckStatus == 5 )
    		{
    			MsgOutput(lpUser->m_Index, "Your level is small for use this command");
    		}
    		else if( CheckStatus == 6 )
    		{
    			MsgOutput(lpUser->m_Index, "Your reset is small for use this command");
    		}
    		// ----
    		return;
    	}
    	// ----
    	
    	// ----
    	switch(lpCommand->Index)
    	{
    	case Command::BanChat:
    		{
    			LPSTR UserName = this->GetTokenString();
    			int Time = this->GetTokenNumber();
    			// ----
    			if( UserName == 0 || Time == -1 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    			
    
    			//LogAddTD("[GMSystem] [BanChat] GMName: [%s] -> Name: [%s]", lpUser->Name, lpTarget->Name);
    			g_GMChatLog.Output("[GMSystem] [BanChat] GMName: [%s] -> Name: [%s]", lpUser->Name, lpTarget->Name);
    
    			// ----
    			lpTarget->ChatLimitTime = Time;
    
    		}
    		break;
    		// --
    	case Command::BanUser: //Need DB request for set new ctrlcode
    		{
    			MsgOutput(lpUser->m_Index, "Command temporarily not working");
    			return;
    			/*LPSTR UserName = this->GetTokenString();
    			// ----
    			if( UserName == 0 )
    			{
    			MsgOutput(lpUser->m_Index, "Syntax error in command");
    			return;
    			}
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			// ----
    			if( !lpTarget )
    			{
    			return;
    			}
    			// ----
    			lpTarget->Authority = 1;*/
    		}
    		break;
    		// --
    	case Command::BanAccount:
    		{
    			MsgOutput(lpUser->m_Index, "Command temporarily not working");
    			return;
    		}
    		break;
    		// --
    	case Command::Disconnect:
    		{
    			LPSTR UserName = this->GetTokenString();
    			// ----
    			if( UserName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			LPOBJ lpObj;
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    
    			//LogAddTD("[GMSystem] [Disconnect] GMName: [%s] -> Name: [%s] ", lpUser->Name, lpTarget->Name);
    			g_GMChatLog.Output("[GMSystem] [Disconnect] GMName: [%s] -> Name: [%s] ", lpUser->Name, lpTarget->Name);
    
    			// ----
    			CloseClient(lpTarget->m_Index);
    
    #if (ENABLE_CUSTOM_OFFLINETRADE == 1)
    			if( lpTarget->bOffTrade )
    			{
    				gObjDel(lpTarget->m_Index);
    			}
    #endif
    		}
    		break;
    		// --
    	case Command::PKSet:
    		{
    			LPSTR UserName = this->GetTokenString();
    			int Level = this->GetTokenNumber();
    			// ----
    			if( UserName == 0 || Level == -1 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    			// ----
    			lpTarget->m_PK_Level = Level;
    			// ----
    			if( lpTarget->PartyNumber >= 0 )
    			{
    				gParty.SetPkLevel(lpTarget->PartyNumber, lpTarget->m_Index, lpTarget->DBNumber, lpTarget->m_PK_Level);
    				gParty.SetPkCount(lpTarget->PartyNumber);
    			}
    			// ----
    			GCPkLevelSend(lpTarget->m_Index, lpTarget->m_PK_Level);
    		}
    		break;
    
    		/* // Old
    		// --
    	case Command::PKReset:
    		{
    			LPSTR UserName = this->GetTokenString();
    			// ----
    			if( UserName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    			// ----
    			if (lpUser->Money < lpCommand->Price * lpTarget->m_PK_Count) {
    				MsgOutput(lpUser->m_Index, "You are short of money");
    				return;
    			}
    
    			lpUser->Money -= lpCommand->Price * lpTarget->m_PK_Count;
    			GCMoneySend(lpUser->m_Index, lpUser->Money);
    			
    			lpTarget->m_PK_Count = 0;
    			lpTarget->m_PK_Level = 3;
    			lpTarget->m_PK_Time	= 0;
    			// ----
    			if( lpTarget->PartyNumber >= 0 )
    			{
    				gParty.SetPkLevel(lpTarget->PartyNumber, lpTarget->m_Index, lpTarget->DBNumber, lpTarget->m_PK_Level);
    				gParty.SetPkCount(lpTarget->PartyNumber);
    			}
    			// ----
    			GCPkLevelSend(lpTarget->m_Index, lpTarget->m_PK_Level);
    		}
    		break;
    		// --
    
    		*/
    		case Command::PKReset:
    		{
    			// ----
    
    			if ( lpUser->m_PK_Level <= 3 )
    			{
    				MsgOutput(lpUser->m_Index, "You are not PK.");
    				return;
    			}
    
    			if (lpUser->Money < lpCommand->Price * lpUser->m_PK_Count) {
    				MsgOutput(lpUser->m_Index, "You are short of money");
    				return;
    			}
    
    			lpUser->Money -= lpCommand->Price * lpUser->m_PK_Count;
    			GCMoneySend(lpUser->m_Index, lpUser->Money);
    			
    			lpUser->m_PK_Count = 0;
    			lpUser->m_PK_Level = 3;
    			lpUser->m_PK_Time	= 0;
    			// ----
    			if( lpUser->PartyNumber >= 0 )
    			{
    				gParty.SetPkLevel(lpUser->PartyNumber, lpUser->m_Index, lpUser->DBNumber, lpUser->m_PK_Level);
    				gParty.SetPkCount(lpUser->PartyNumber);
    			}
    			// ----
    
    			GCPkLevelSend(lpUser->m_Index, lpUser->m_PK_Level);
    		}
    		break;
    		// --
    
    	case Command::MoneySet:
    		{
    			LPSTR UserName = this->GetTokenString();
    			int Money = this->GetTokenNumber();
    			// ----
    
    			if( UserName == 0 || Money == -1 || Money == 1000000000)
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    			// ----
    			lpTarget->Money = Money;
    
    			//LogAddTD("[GMSystem] [MoneySet] GMName: [%s] -> Name: [%s] Money: [%d] ", lpUser->Name, lpTarget->Name, lpTarget->Money);
    			g_GMChatLog.Output("[GMSystem] [MoneySet] GMName: [%s] -> Name: [%s] Money: [%d] ", lpUser->Name, lpTarget->Name, lpTarget->Money);
    
    			GCMoneySend(lpTarget->m_Index, lpTarget->Money);
    		}
    		break;
    		// --
    	case Command::MakeItem:
    		{
    			int EBP798;
    			int EBP79C = 0;
    			int EBP7A0 = 0;
    			int EBP7A4 = 0;
    			BYTE EBP7A8 = 0;
    			int iDur = (BYTE)-1;//7AC
    			int EBP7B0;
    
    			int ItemCount = this->GetTokenNumber();
    			int ItemType  = this->GetTokenNumber();
    			int ItemIndex  = this->GetTokenNumber();
    			EBP798 = this->GetTokenNumber();
    			iDur = this->GetTokenNumber();
    			EBP79C = this->GetTokenNumber();
    			EBP7A0 = this->GetTokenNumber();
    			EBP7B0 = this->GetTokenNumber();
    
    			if( ItemCount <= 0 )
    			{
    				ItemCount = 1;
    			}
    
    			if( ItemCount > 10 )
    			{
    				ItemCount = 10;
    			}
    
    			if( ItemType < 0 || ItemType > 15 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			if( ItemIndex < 0 || ItemIndex > 512 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			
    			int ItemCode = ITEMGET(ItemType, ItemIndex);
    			
    			if( ItemCode < ITEMGET(0, 0) || ItemCode > ITEMGET(15, 512) )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			if( !ItemAttribute[ItemCode].HaveItemInfo )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			if(ItemType == 13 && ItemIndex == 3)
    			{
    				if(	EBP7B0 < 8)
    				{
    					EBP7A4 = EBP7B0;
    				}
    			}
    			else
    			{
    				if( EBP7B0 >= 4 )
    				{
    					EBP7A4 = EBP7B0 / 4;
    				}
    				else
    				{
    					EBP7B0 = 0;
    				}
    			}
    
    			int EBP7B4 = this->GetTokenNumber();
    			int EBP7B8 = this->GetTokenNumber();
    
    			if(EBP7B4 != 0 )
    			{
    				if( EBP7B8 == 0)
    				{
    					if((rand()%100) < 80)
    					{
    						EBP7B4 |= 4; 
    					}
    					else
    					{
    						EBP7B4 |= 8; 
    					}
    				}
    				else if (EBP7B8 == 1) 
    				{
    					EBP7B4 |= 4; 
    				}
    				else
    				{
    					EBP7B4 |= 8; 
    				}
    			}
    
    			int EBP7BC = this->GetTokenNumber();
    
    			if(EBP7BC > 0)
    			{
    				EBP7A8 |= 0x20;
    			}
    
    			int EBP7C0 = this->GetTokenNumber();
    
    			if(EBP7C0 > 0)
    			{
    				EBP7A8 |= 0x10;
    			}
    
    			int EBP7C4 = this->GetTokenNumber();
    
    			if(EBP7C4 > 0)
    			{
    				EBP7A8 |= 0x08;
    			}
    
    			int EBP7C8 = this->GetTokenNumber();
    
    			if(EBP7C8 > 0)
    			{
    				EBP7A8 |= 0x04;
    			}
    
    			int EBP7CC = this->GetTokenNumber();
    
    			if(EBP7CC > 0)
    			{
    				EBP7A8 |= 0x02;
    			}
    
    			int EBP7D0 = this->GetTokenNumber();
    
    			if(EBP7D0 > 0)
    			{
    				EBP7A8 |= 0x01;
    			}
    
    			if( ItemType >= 0 && ItemType < 512 &&
    				ItemIndex >= 0 && ItemIndex < 512)
    			{
    				int iItemNumber = ItemGetNumberMake(ItemType, ItemIndex);
    
    				if( iItemNumber == ITEMGET(0,19) || 
    					iItemNumber == ITEMGET(4,18) || 
    					iItemNumber == ITEMGET(5,10) || 
    					iItemNumber == ITEMGET(2,13))
    				{
    					EBP7A8 = 63;	
    				}
    
    
    				//LogAddTD("[GMSystem] [Item Create] Name: [%s] Map: [%d] X: [%d] Y: [%d] Item: [%d] Level: [%d] Dur: [%d] Skill: [%d] Luck: [%d] Opt: [%d] ExcOpt: [%d] AncOpt: [%d]", lpUser->Name, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber, EBP798, iDur, EBP79C, EBP7A0, EBP7A4, EBP7A8, EBP7B4);
    				g_GMChatLog.Output("[GMSystem] [Item Create] Name: [%s] Map: [%d] X: [%d] Y: [%d] Item: [%d] Level: [%d] Dur: [%d] Skill: [%d] Luck: [%d] Opt: [%d] ExcOpt: [%d] AncOpt: [%d]", lpUser->Name, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber, EBP798, iDur, EBP79C, EBP7A0, EBP7A4, EBP7A8, EBP7B4);
    
    				for( int i =0;i < ItemCount; i++ )
    				{
    					ItemSerialCreateSend(lpUser->m_Index, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber, EBP798, iDur, EBP79C, EBP7A0, EBP7A4, -1, EBP7A8, EBP7B4); 
    				}
    
    			}
    		}
    		break;
    		// --
    	case Command::MakeRandomSet:
    		{
    			int Count = this->GetTokenNumber();
    			// ----
    			if( Count == -1 || Count > 10)
    			{
    				MsgOutput(lpUser->m_Index, "Out of range 1-10");
    				return;
    			}
    
    			if( Count <= 0 )
    			{
    				Count = 1;
    			}
    
    			if( Count > 10 )
    			{
    				Count = 10;
    			}
    
    			// ----
    
    			//LogAddTD("[GMSystem] [RandomSet] GMName: [%s] Count: [%d]", lpUser->Name, Count);
    			g_GMChatLog.Output("[GMSystem] [RandomSet] GMName: [%s] Count: [%d]", lpUser->Name, Count);
    
    			for( int i = 0; i < Count; i++ )
    			{
    				MakeRandomSetItem(lpUser->m_Index);
    			}
    		}
    		break;
    		// ---
    	case Command::HideOn:
    		{
    			gObjAddBuffEffect(lpUser, BUFF_INVISIBILITY, 0, 0, 0, 0, -10);
    			gObjViewportListProtocolDestroy(lpUser);
    		}
    		break;
    		// ---
    	case Command::HideOff:
    		{
    			gObjRemoveBuffEffect(lpUser, BUFF_INVISIBILITY);
    			gObjViewportListProtocolCreate(lpUser);
    		}
    		break;
    		// --
    	case Command::ClearDrop:
    		{
    			int Distance = this->GetTokenNumber();
    			// ----
    			if( Distance == -1 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			MapC[lpUser->MapNumber].ClearItem(lpUser, Distance);
    		}
    		break;
    		// --
    	case Command::ClearInventory:
    		{
    			LPSTR UserName = this->GetTokenString();
    			// ----
    			if( UserName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    			//LogAddTD("[GMSystem] [ClearInv] GMName: [%s] -> Name: [%s] ", lpUser->Name, lpTarget->Name);
    			g_GMChatLog.Output("[GMSystem] [ClearInv] GMName: [%s] -> Name: [%s] ", lpUser->Name, lpTarget->Name);
    			// ----
    			for( int i = INVETORY_WEAR_SIZE; i < MAIN_INVENTORY_SIZE; i++ )
    			{
    				if( lpTarget->pInventory[i].IsItem() )
    				{
    					gObjInventoryDeleteItem(lpTarget->m_Index, i);
    				}
    			}
    			// ----
    			GCItemListSend(lpTarget->m_Index);
    		}
    		break;
    		// --
    	case Command::Skin:
    		{
    			LPSTR UserName = this->GetTokenString();
    			int SkinNumber = this->GetTokenNumber();
    			// ----
    			if( UserName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			//To test
    
    			if(SkinNumber > 675 || SkinNumber < -1)
    			{
    				MsgOutput(lpUser->m_Index, "Skin out of range -1 - 675");
    				return;
    			}
    
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    			// ----
    
    			lpTarget->m_Change = SkinNumber;
    
    			//LogAddTD("[GMSystem] [Skin] GMName: [%s] -> Name: [%s] Skin: [%d]", lpUser->Name, lpTarget->Name, SkinNumber);
    			g_GMChatLog.Output("[GMSystem] [Skin] GMName: [%s] -> Name: [%s] Skin: [%d]", lpUser->Name, lpTarget->Name, SkinNumber);
    			gObjViewportListProtocolCreate(lpTarget);
    		}
    		break;
    		// --
    	case Command::PartyInfo:
    		{
    			LPSTR UserName = this->GetTokenString();
    			char Text[80] = { 0 };
    			// ----
    			if( UserName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    			// ----
    			if( lpTarget->PartyNumber < 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Party not found");
    				return;
    			}
    			// ----
    			PARTY_STRUCT* lpParty = &gParty.m_PartyS[lpTarget->PartyNumber];
    			// ----
    			if( !lpParty )
    			{
    				MsgOutput(lpUser->m_Index, "Party data not found");
    				return;
    			}
    			// ----
    			MsgOutput(lpUser->m_Index, "Party:");
    			// ----
    			int PartyCount = 0;
    			int PartyNumber = -1;
    			// ----
    			for( int i = 0; i < 5; i++ )
    			{
    				PartyNumber = lpParty->Number[i];
    				// ----
    				if( PartyNumber < 0 )
    				{
    					continue;
    				}
    				// ----
    				LPOBJ lpPartyObj = &gObj[PartyNumber];
    				// ----
    				if( lpPartyObj != NULL )
    				{
    					if( lpPartyObj->Connected >= PLAYER_PLAYING )
    					{
    						PartyCount++;
    						strcat(Text, lpPartyObj->Name);
    						// ----
    						if( i == 0 )
    						{
    							strcat(Text, "(Leader)");
    						}
    						// ----
    						if( lpParty->Count > PartyCount)
    						{
    							strcat(Text, ", ");
    						}
    					}
    				}
    			}
    			// ----
    			MsgOutput(lpUser->m_Index, Text);
    		}
    		break;
    		// --
    	case Command::FireCrack:
    		{
    			for( int i = 0; i < 3; i++ )
    			{
    				PMSG_SERVERCMD ServerCmd = { 0 };
    				PHeadSubSetB((LPBYTE)&ServerCmd, 0xF3, 0x40, sizeof(ServerCmd));
    				ServerCmd.CmdType = 0;
    				ServerCmd.X = lpUser->X + (rand() % 5) * 2 - 4;
    				ServerCmd.Y = lpUser->Y + (rand() % 5) * 2 - 4;
    				MsgSendV2(lpUser, (LPBYTE)&ServerCmd, sizeof(ServerCmd));
    				DataSend(lpUser->m_Index, (LPBYTE)&ServerCmd, sizeof(ServerCmd));
    			}
    		}
    		break;
    		// --
    	case Command::Trans:
    		{
    			LPSTR UserName = this->GetTokenString();
    			int MapNumber = this->GetTokenNumber();
    			int X = this->GetTokenNumber();
    			int Y = this->GetTokenNumber();
    			// ---
    			if( UserName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    
    			if (MapNumber > 92 || MapNumber < 0)
    			{
    				MsgOutput(lpUser->m_Index, "Map out of range use only 0 - 92");
    				return;
    			}
    
    			if (X < 1 || Y < 1 || X > 255 || Y > 255)
    			{
    				MsgOutput(lpUser->m_Index, "Coords out of range use only 1 - 255");
    				return;
    			}
    
    			// ----
    			LPOBJ lpObj;
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    			// ----
    
    			//LogAddTD("[GMSystem] [GMove] GMName: [%s] -> Name: [%s] Map: [%d] X: [%d] Y: [%d]", lpUser->Name, lpTarget->Name, MapNumber, X, Y);
    			g_GMChatLog.Output("[GMSystem] [GMove] GMName: [%s] -> Name: [%s] Map: [%d] X: [%d] Y: [%d]", lpUser->Name, lpTarget->Name, MapNumber, X, Y);
    
    			gObjTeleport(lpTarget->m_Index, MapNumber, X, Y);
    		}
    		break;
    		// --
    	case Command::Track:
    		{
    			LPSTR UserName = this->GetTokenString();
    			// ---
    			if( UserName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    			// ----
    			gObjTeleport(lpTarget->m_Index, lpUser->MapNumber, lpUser->X, lpUser->Y);
    		}
    		break;
    		// --
    	case Command::Trace:
    		{
    			LPSTR UserName = this->GetTokenString();
    			// ---
    			if( UserName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    			// ----
    			gObjTeleport(lpUser->m_Index, lpTarget->MapNumber, lpTarget->X, lpTarget->Y);
    		}
    		break;
    		// --
    	case Command::CastleSiege1:
    		{
    			LPSTR GuildName = this->GetTokenString();
    			// ---
    			if( GuildName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			g_CastleSiege.OperateGmCommand(lpUser->m_Index, 0, GuildName);
    		}
    		break;
    		// --
    	case Command::CastleSiege2:
    		{
    			g_CastleSiege.OperateGmCommand(lpUser->m_Index, 1, 0);
    		}
    		break;
    		// --
    	case Command::CastleSiege3:
    		{
    			g_CastleSiege.OperateGmCommand(lpUser->m_Index, 2, 0);
    		}
    		break;
    		// --
    	case Command::CastleSiege4:
    		{
    			g_CastleSiege.OperateGmCommand(lpUser->m_Index, 3, 0);
    		}
    		break;
    		// --
    	case Command::CastleSiege5:
    		{
    			g_CastleSiege.OperateGmCommand(lpUser->m_Index, 4, 0);
    		}
    		break;
    		// --
    	case Command::CastleSiege6:
    		{
    			g_CastleSiege.OperateGmCommand(lpUser->m_Index, 5, 0);
    		}
    		break;
    		// --
    	case Command::CastleSiege7:
    		{
    			g_CastleSiege.OperateGmCommand(lpUser->m_Index, 6, 0);
    		}
    		break;
    		// --
    	case Command::CastleSiege8:
    		{
    			LPSTR GuildName = this->GetTokenString();
    			// ---
    			if( GuildName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			g_CastleSiege.OperateGmCommand(lpUser->m_Index, 8, GuildName);
    		}
    		break;
    		// --
    	case Command::Crywolf1:
    		{
    			g_Crywolf.OperateGmCommand(lpUser->m_Index, 1);
    		}
    		break;
    		// --
    	case Command::Crywolf2:
    		{
    			g_Crywolf.OperateGmCommand(lpUser->m_Index, 2);
    		}
    		break;
    		// --
    	case Command::Crywolf3:
    		{
    			g_Crywolf.OperateGmCommand(lpUser->m_Index, 3);
    		}
    		break;
    		// --
    	case Command::Crywolf4:
    		{
    			g_Crywolf.OperateGmCommand(lpUser->m_Index, 0);
    		}
    		break;
    		// --
    	case Command::Request:
    		{
    			LPSTR Mode = this->GetTokenString();
    			// ---
    			if( Mode == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			BYTE State = 3;
    			// ---
    			if( strcmp(Mode, "on" ) == 0 )
    			{
    				State = 1;
    			}
    			else if( strcmp(Mode, "off") == 0 )
    			{
    				State = 0;
    			}
    			// ---
    			if( State >= FALSE && State <= TRUE )
    			{
    				gObjSetTradeOption(lpUser->m_Index, State);
    				gObjSetDuelOption(lpUser->m_Index, State);
    			}
    		}
    		break;
    		// --
    	case Command::PartyLeader:
    		{
    			LPSTR TargetName	= this->GetTokenString();
    			int TargetIndex		= gObjGetIndex(TargetName);
    			// ----
    			if( !gParty.SetLeader(lpUser->m_Index, TargetIndex) )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    		}
    		break;
    		// --
    	case Command::Move:
    		{
    			LPSTR MapName = this->GetTokenString();
    			// ---
    			if( MapName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			if( lpUser->Teleport != 0 )
    			{
    				GCServerMsgStringSend(lMsg.Get(MSGGET(6, 68)), lpUser->m_Index, 1);
    				return;
    			}
    			// ----
    			if( (lpUser->m_IfState.use) != 0 )
    			{
    				if( lpUser->m_IfState.type  == 3 )
    				{
    					lpUser->TargetShopNumber = -1;
    					lpUser->m_IfState.type = 0;
    					lpUser->m_IfState.use = 0;
    				}
    			}
    			// ----
    			if (lpUser->m_RecallMon >= 0)
    			{
    			GCRecallMonLife(lpUser->m_Index, 60, 0);
    			gObjMonsterCallKill(lpUser->m_Index);
    			}
    			// ----
    			if( lpUser->m_IfState.use > 0 )
    			{
    				GCServerMsgStringSend(lMsg.Get(MSGGET(6, 68)), lpUser->m_Index, 1);
    				return;
    			}
    			// ----
    			//PK can move
    			if( lpUser->m_PK_Level > 6 )
    			{
    				GCServerMsgStringSend(lMsg.Get(MSGGET(4, 101)), lpUser->m_Index, 1);
    				return;
    			}
    			// ----
    			gMoveCommand.Move(lpUser, MapName);
    		}
    		break;
    		// --
    	case Command::Post:
    		{
    			if (lpUser->ChatLimitTime > 0) {
    				MsgOutput(lpUser->m_Index, lMsg.Get(MSGGET(4, 223)), lpUser->ChatLimitTime);
    				return;
    			}
    
    			if(g_bPostFloodProtect == 1)
    			{
    				if(lpUser->m_dwPostTickCount != 0)
    				{
    					if ( 1000 * g_bPostFloodProtectTime >= GetTickCount() - lpUser->m_dwPostTickCount )
    					{
    						MsgOutput(lpUser->m_Index, "Please wait 3 seconds before next post.");
    						return;
    					}
    				}
    			}
    
    			lpUser->m_dwPostTickCount = GetTickCount();
    			
    			BroadCastMessageInfo lpRequest = { 0 };
    			lpRequest.h.set((LPBYTE)&lpRequest, 0xCD, sizeof(lpRequest));
    			lpRequest.Type = 1;
    			strcat(lpRequest.Text, &Text[strlen(Command) + 1]);
    
    			g_PostLog.Output("Name: [%s] Message: [%s]", lpUser->Name, Text);
    
    			CopyMemory(lpRequest.Sender, lpUser->Name, 10);
    			
    			wsJServerCli.DataSend((PCHAR)&lpRequest, sizeof(BroadCastMessageInfo));
    
    			/*USER_REQ_POST lpInfo = { 0 };
    			PHeadSetB((LPBYTE)&lpInfo, 0, sizeof(lpInfo));
    			lpInfo.h.headcode = 2;
    			lpInfo.chatmsg[0] = '!';
    			memcpy(lpInfo.id, lpUser->Name, 10);
    			strcat(lpInfo.chatmsg, &Text[strlen(Command) + 1]);
    			DataSendAll((LPBYTE)&lpInfo, sizeof(lpInfo));*/
    		}
    		break;
    		// --
    	case Command::AddStr:
    	case Command::AddAgi:
    	case Command::AddVit:
    	case Command::AddEne:
    	case Command::AddCom:
    		{
    			int AddValue = this->GetTokenNumber();
    			// ----
    			if( AddValue < 0 || AddValue >= g_MaxStatValue )
    			{
    				MsgOutput(lpUser->m_Index, "Wrong value for add.");
    				return;
    			}
    			// ----
    			if( lpUser->LevelUpPoint < AddValue )
    			{
    				MsgOutput(lpUser->m_Index, "You do not have enough level up points!");
    				return;
    			}
    			// ----
    			if(		lpCommand->Index == Command::AddCom 
    				&&	lpUser->Class != CLASS_DARKLORD )
    			{
    				MsgOutput(lpUser->m_Index, "Your class in invalid for this command");
    				return;
    			}
    			// ----
    			PMSG_LVPOINTADDRESULT pMsg;
    			PHeadSubSetB((LPBYTE)&pMsg, 0xF3, 0x06, sizeof(pMsg));
    			// ----
    			if( lpCommand->Index == Command::AddStr )
    			{
    				if( lpUser->Strength + AddValue > g_MaxStatValue )
    				{
    					return;
    				}
    				lpUser->Strength += AddValue;
    				pMsg.NewValue = lpUser->Strength;
    				pMsg.ResultType = 0x15;
    			}
    			else if( lpCommand->Index == Command::AddAgi )
    			{
    				if( lpUser->Dexterity + AddValue > g_MaxStatValue )
    				{
    					return;
    				}
    				lpUser->Dexterity += AddValue;
    				pMsg.NewValue = lpUser->Dexterity;
    				pMsg.ResultType = 0x16;
    			}
    			else if( lpCommand->Index == Command::AddVit )
    			{
    				if( lpUser->Vitality + AddValue > g_MaxStatValue )
    				{
    					return;
    				}
    				lpUser->Vitality += AddValue;
    				pMsg.NewValue = lpUser->Vitality;
    				lpUser->MaxLife += lpUser->VitalityToLife * AddValue;
    				pMsg.MaxLifeAndMana = (WORD)(lpUser->MaxLife + lpUser->AddLife);
    				pMsg.MAXHPANDMANA = (int)(lpUser->MaxLife + lpUser->AddLife);
    				pMsg.ResultType = 0x17;
    			}
    			else if( lpCommand->Index == Command::AddEne )
    			{
    				if( lpUser->Energy + AddValue > g_MaxStatValue )
    				{
    					return;
    				}
    				lpUser->Energy += AddValue;
    				pMsg.NewValue = lpUser->Energy;
    				lpUser->MaxMana += lpUser->EnergyToMana * AddValue;
    				pMsg.MaxLifeAndMana = (WORD)(lpUser->MaxMana + lpUser->AddMana);
    				pMsg.MAXHPANDMANA = (int)(lpUser->MaxMana + lpUser->AddMana);
    				pMsg.ResultType = 0x18;
    			}
    			else if( lpCommand->Index == Command::AddCom )
    			{
    				if( lpUser->Leadership + AddValue > g_MaxStatValue )
    				{
    					return;
    				}
    				lpUser->Leadership += AddValue;
    				pMsg.NewValue = lpUser->Leadership;
    				pMsg.ResultType = 0x19;
    			}
    			// ----
    			gObjCalCharacter(lpUser->m_Index);
    			gObjSetBP(lpUser->m_Index);
    			pMsg.wMaxShield = lpUser->iMaxShield + lpUser->iAddShield;
    			pMsg.MaxBP = lpUser->MaxBP + lpUser->AddBP;
    			pMsg.MAXSD = lpUser->iMaxShield + lpUser->iAddShield;
    			lpUser->LevelUpPoint -= AddValue;
    			pMsg.LvlUpPt = lpUser->LevelUpPoint;
    			DataSend(lpUser->m_Index, (LPBYTE)&pMsg, pMsg.h.size);
    			MsgOutput(lpUser->m_Index, "%d point(s) has been used", AddValue);
    		}
    		break;
    		// --
    	case Command::Offtrade:
    		{
    #if (ENABLE_CUSTOM_OFFLINETRADE == 1)
    			g_OfflineTrade.ProcStart(lpUser);
    #endif
    		}
    		break;
    	case Command::MultiVault:
    		{
    			int iVaultNumber = this->GetTokenNumber();
    
    			if (iVaultNumber > 5 || iVaultNumber < 0)
    			{
    				GCServerMsgStringSend("Warehouse range: 0-5", lpUser->m_Index,1);
    				return;
    			}
    
    			if(g_bVaultFloodProtect == 1)
    			{
    				if(lpUser->m_dwVaultTickCount != 0)
    				{
    					if ( 1000 * g_bVaultFloodProtectTime >= GetTickCount() - lpUser->m_dwVaultTickCount )
    					{
    						MsgOutput(lpUser->m_Index, "Please wait 15 seconds before change vault.");
    						return;
    					}
    				}
    			}
    
    			lpUser->m_dwVaultTickCount = GetTickCount();
    
    			// ----
    			if (	lpUser->WarehouseSave != 0 
    				|| lpUser->m_ReqWarehouseOpen != 0
    				|| (lpUser->m_IfState.use >= 1 && lpUser->m_IfState.type >=1) )
    			{
    				return;
    			}
    			// ----
    			if (lpUser->RecvSendWare != 0)
    			{
    				return;
    			}
    
    			lpUser->RecvSendWare = 1;
    			gWareHouseSYSTEM.DBSendVaultInfo(lpUser->m_Index, lpUser->AccountID, (BYTE)iVaultNumber);
    		}
    		break;
    	case Command::GuildWar:
    		{
    			LPSTR pId = this->GetTokenString();
    
    			if ( pId != NULL )
    			{
    				if ( strlen(pId) >= 1 )
    				{
    					::GCGuildWarRequestResult(pId, lpUser->m_Index, 0);
    				}
    			}
    		}
    		break;
    	case Command::BattleSoccer:
    		{
    			if ( gEnableBattleSoccer != FALSE )
    			{
    				LPSTR pId = this->GetTokenString();
    
    				if ( pId != NULL )
    				{
    					if ( strlen(pId) >= 1 )
    					{
    						::GCGuildWarRequestResult(pId, lpUser->m_Index, 1);
    					}
    				}
    			}
    		}
    		break;
    
    
    		case Command::Info:
    		{
    			MsgOutput(lpUser->m_Index, "Project v1.0.0.9");
    			Sleep(1000);
    		}
    		break;
    		// --
    
    			case Command::SkinPlayer:
    		{
    			int SkinNumber = this->GetTokenNumber();
    
    			if( SkinNumber == 80 || SkinNumber == 15 || SkinNumber == 79 || SkinNumber == 82 || SkinNumber == -1 )
    			{
    			lpUser->m_Change = SkinNumber;
    			//LogAddTD("[USystem] [Skin] -> Name: [%s] ", lpUser->Name);
    			gObjViewportListProtocolCreate(lpUser);
    			}
    			else 
    			{
    				MsgOutput(lpUser->m_Index, "These skins are not allowed!");
    				return;
    			}
    		}
    		break;
    
    		// New Command Starts Here
    		case Command::EAnger:
    		{
    				LPOBJ lpObj;
    
    					BYTE SocketBonus = 0x14;
    					BYTE SocketOption[5];
    					SocketOption[0] = 0xA1;
    					SocketOption[1] = 0xA4;
    					SocketOption[2] = 0xA1;
    					SocketOption[3] = 0xA1;
    					SocketOption[4] = 0xA1;
    
    
    				//LogAddTD("[GMSystem] [EAnger] -> GMName: [%s] ", lpUser->Name);
    				g_GMChatLog.Output("[GMSystem] [EAnger] -> GMName: [%s] ", lpUser->Name);
    
    				ItemSerialCreateSend(lpUser->m_Index, lpUser->MapNumber, lpUser->X, lpUser->Y, ITEMGET(12,221), 0, 1, 0, 0, 0, -1, 0, 0, SocketBonus, SocketOption);
    				
    		}
    		break;
    
    
    		case Command::Status:
    		{
    			LPSTR UserName = this->GetTokenString();
    			// ----
    			if( UserName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			LPOBJ lpObj;
    			LPOBJ lpTargetObj;
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    
    			MsgOutput(lpUser->m_Index, "Name:[%s] Acc: [%s] Map:[%d] X:[%d] Y:[%d] IP: [%s]",lpTarget->Name, lpTarget->AccountID, lpTarget->MapNumber, lpTarget->X, lpTarget->Y, lpTarget->Ip_addr);
    		}
    		break;
    
    
    		case Command::Online:
    		{
    
    			int oncount = 0;
    			int gmoncount = 0;
    
    			for (int g = OBJ_STARTUSERINDEX; g < OBJMAX; g++)
    			{
    				if (gObj[g].Connected == 3)
    				{
    					oncount++;
    				}
    
    				if (gObj[g].Connected == 3 && gObj[g].Authority == 32)
    				{
    					gmoncount++;
    				}
    			}
    				MsgOutput(lpUser->m_Index, "Players Online: [%d] GM Online: [%d]",oncount, gmoncount);
    				//return TRUE;
    		}
    		break;
    
    		case Command::ClearInventoryUser:
    		{
    			LPOBJ lpObj;
    
    			for( int i = 12; i < 76; i++ )
    			{
    				if( lpUser->pInventory[i].IsItem() )
    				{
    					gObjInventoryDeleteItem(lpUser->m_Index, i);
    				}
    			}
    			// ----
    
    			//LogAddTD("[USystem] [ClearInvent] -> Name: [%s] ", lpUser->Name);
    			g_USystemLog.Output("[USystem] [ClearInvent] -> Name: [%s] ", lpUser->Name);
    
    			MsgOutput(lpUser->m_Index, "Successfully cleared your Part1 Inventory.");
    			GCItemListSend(lpUser->m_Index);
    		}
    		break;
    
    		case Command::ClearStore:
    		{
    			LPOBJ lpObj;
    
    			for( int i = 204; i < 235; i++ )
    			{
    				if( lpUser->pInventory[i].IsItem() )
    				{
    					gObjInventoryDeleteItem(lpUser->m_Index, i);
    				}
    			}
    			// ----
    
    			//LogAddTD("[USystem] [ClearStore] -> Name: [%s] ", lpUser->Name);
    			g_USystemLog.Output("[USystem] [ClearStore] -> Name: [%s] ", lpUser->Name);
    
    			MsgOutput(lpUser->m_Index, "Successfully cleared your Store.");
    			GCItemListSend(lpUser->m_Index);
    		}
    		break;
    
    		case Command::ClearInvAll:
    		{
    			LPOBJ lpObj;
    
    			for( int i = 12; i < 204; i++ )
    			{
    				if( lpUser->pInventory[i].IsItem() )
    				{
    					gObjInventoryDeleteItem(lpUser->m_Index, i);
    				}
    			}
    			// ----
    
    			//LogAddTD("[USystem] [ClearWholeInventory] -> Name: [%s] ", lpUser->Name);
    			g_USystemLog.Output("[USystem] [ClearWholeInventory] -> Name: [%s] ", lpUser->Name);
    
    			MsgOutput(lpUser->m_Index, "Successfully cleared your whole inventory.");
    			GCItemListSend(lpUser->m_Index);
    		}
    		break;
    
    		//Wind Ertels only
    		case Command::ErtelW:
    		{
    
    					BYTE SocketBonus = 0x14;
    					BYTE SocketOption[5];
    					SocketOption[0] = 0xA1;
    					SocketOption[1] = 0xA1;
    					SocketOption[2] = 0xA1;
    					SocketOption[3] = 0xA1;
    					SocketOption[4] = 0xA1;
    
    			int ItemType  = this->GetTokenNumber();
    			int ItemIndex  = this->GetTokenNumber();
    
    			if( ItemType != 12 )
    			{
    				MsgOutput(lpUser->m_Index, "Type can be only 12.");
    				return;
    			}
    
    			int ItemCode = ITEMGET(ItemType, ItemIndex);
    			
    			if( ItemCode < ITEMGET(0, 0) || ItemCode > ITEMGET(15, 512) )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			if( !ItemAttribute[ItemCode].HaveItemInfo )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			if (ItemIndex == 221 || ItemIndex == 231 || ItemIndex == 241 || ItemIndex == 251 || ItemIndex == 261)
    				{
    			
    				int iItemNumber = ItemGetNumberMake(ItemType, ItemIndex);
    
    				//LogAddTD("[GMSystem] [EWDCreate] Name: [%s] Map: [%d] X: [%d] Y: [%d] Item: [%d]", lpUser->Name, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber);
    				g_GMChatLog.Output("[GMSystem] [EWDCreate] Name: [%s] Map: [%d] X: [%d] Y: [%d] Item: [%d]", lpUser->Name, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber);
    
    				ItemSerialCreateSend(lpUser->m_Index, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber, 0, 1, 0, 0, 0, -1, 0, 0, SocketBonus, SocketOption);
    				}
    			else
    				{
    				MsgOutput(lpUser->m_Index, "Index can be only: 221/231/241/251/261.");
    				return;
    				}
    			//}
    		}
    		break;
    
    		//Darkness Errtel
    
    		case Command::ErtelD:
    		{
    
    					BYTE SocketBonus = 0x15;
    					BYTE SocketOption[5];
    					SocketOption[0] = 0xA1;
    					SocketOption[1] = 0xA1;
    					SocketOption[2] = 0xA1;
    					SocketOption[3] = 0xA1;
    					SocketOption[4] = 0xA1;
    
    			int ItemType  = this->GetTokenNumber();
    			int ItemIndex  = this->GetTokenNumber();
    
    			if( ItemType != 12 )
    			{
    				MsgOutput(lpUser->m_Index, "Type can be only 12.");
    				return;
    			}
    
    			int ItemCode = ITEMGET(ItemType, ItemIndex);
    			
    			if( ItemCode < ITEMGET(0, 0) || ItemCode > ITEMGET(15, 512) )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			if( !ItemAttribute[ItemCode].HaveItemInfo )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			if (ItemIndex == 221 || ItemIndex == 231 || ItemIndex == 241 || ItemIndex == 251 || ItemIndex == 261)
    				{
    			
    				int iItemNumber = ItemGetNumberMake(ItemType, ItemIndex);
    
    				//LogAddTD("[GMSystem] [EDCreate] Name: [%s] Map: [%d] X: [%d] Y: [%d] Item: [%d]", lpUser->Name, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber);
    				g_GMChatLog.Output("[GMSystem] [EDCreate] Name: [%s] Map: [%d] X: [%d] Y: [%d] Item: [%d]", lpUser->Name, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber);
    
    				ItemSerialCreateSend(lpUser->m_Index, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber, 0, 1, 0, 0, 0, -1, 0, 0, SocketBonus, SocketOption);
    				}
    			else
    				{
    				MsgOutput(lpUser->m_Index, "Index can be only: 221/231/241/251/261.");
    				return;
    				}
    			//}
    		}
    		break;
    
    		case Command::ErtelE:
    		{
    
    					BYTE SocketBonus = 0x13;
    					BYTE SocketOption[5];
    					SocketOption[0] = 0xA1;
    					SocketOption[1] = 0xA1;
    					SocketOption[2] = 0xA1;
    					SocketOption[3] = 0xA1;
    					SocketOption[4] = 0xA1;
    
    			int ItemType  = this->GetTokenNumber();
    			int ItemIndex  = this->GetTokenNumber();
    
    			if( ItemType != 12 )
    			{
    				MsgOutput(lpUser->m_Index, "Type can be only 12.");
    				return;
    			}
    
    			int ItemCode = ITEMGET(ItemType, ItemIndex);
    			
    			if( ItemCode < ITEMGET(0, 0) || ItemCode > ITEMGET(15, 512) )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			if( !ItemAttribute[ItemCode].HaveItemInfo )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    
    
    			if (ItemIndex == 221 || ItemIndex == 231 || ItemIndex == 241 || ItemIndex == 251 || ItemIndex == 261)
    				{
    			
    				int iItemNumber = ItemGetNumberMake(ItemType, ItemIndex);
    
    				//LogAddTD("[GMSystem] [EECreate] Name: [%s] Map: [%d] X: [%d] Y: [%d] Item: [%d]", lpUser->Name, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber);
    				g_GMChatLog.Output("[GMSystem] [EECreate] Name: [%s] Map: [%d] X: [%d] Y: [%d] Item: [%d]", lpUser->Name, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber);
    
    				ItemSerialCreateSend(lpUser->m_Index, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber, 0, 1, 0, 0, 0, -1, 0, 0, SocketBonus, SocketOption);
    				}
    			else
    				{
    				MsgOutput(lpUser->m_Index, "Index can be only: 221/231/241/251/261.");
    				return;
    				}
    			//}
    		}
    		break;
    
    		case Command::ErtelWater:
    		{
    
    					BYTE SocketBonus = 0x12;
    					BYTE SocketOption[5];
    					SocketOption[0] = 0xA1;
    					SocketOption[1] = 0xA1;
    					SocketOption[2] = 0xA1;
    					SocketOption[3] = 0xA1;
    					SocketOption[4] = 0xA1;
    
    			int ItemType  = this->GetTokenNumber();
    			int ItemIndex  = this->GetTokenNumber();
    
    			if( ItemType != 12 )
    			{
    				MsgOutput(lpUser->m_Index, "Type can be only 12.");
    				return;
    			}
    
    			int ItemCode = ITEMGET(ItemType, ItemIndex);
    			
    			if( ItemCode < ITEMGET(0, 0) || ItemCode > ITEMGET(15, 512) )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			if( !ItemAttribute[ItemCode].HaveItemInfo )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    
    
    			if (ItemIndex == 221 || ItemIndex == 231 || ItemIndex == 241 || ItemIndex == 251 || ItemIndex == 261)
    				{
    			
    				int iItemNumber = ItemGetNumberMake(ItemType, ItemIndex);
    
    				//LogAddTD("[GMSystem] [EWCreate] Name: [%s] Map: [%d] X: [%d] Y: [%d] Item: [%d]", lpUser->Name, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber);
    				g_GMChatLog.Output("[GMSystem] [EWCreate] Name: [%s] Map: [%d] X: [%d] Y: [%d] Item: [%d]", lpUser->Name, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber);
    
    				ItemSerialCreateSend(lpUser->m_Index, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber, 0, 1, 0, 0, 0, -1, 0, 0, SocketBonus, SocketOption);
    				}
    			else
    				{
    				MsgOutput(lpUser->m_Index, "Index can be only: 221/231/241/251/261.");
    				return;
    				}
    			//}
    		}
    		break;
    
    		case Command::ErtelF:
    		{
    
    					BYTE SocketBonus = 0x11;
    					BYTE SocketOption[5];
    					SocketOption[0] = 0xA1;
    					SocketOption[1] = 0xA1;
    					SocketOption[2] = 0xA1;
    					SocketOption[3] = 0xA1;
    					SocketOption[4] = 0xA1;
    
    			int ItemType  = this->GetTokenNumber();
    			int ItemIndex  = this->GetTokenNumber();
    
    			if( ItemType != 12 )
    			{
    				MsgOutput(lpUser->m_Index, "Type can be only 12.");
    				return;
    			}
    
    			int ItemCode = ITEMGET(ItemType, ItemIndex);
    			
    			if( ItemCode < ITEMGET(0, 0) || ItemCode > ITEMGET(15, 512) )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			if( !ItemAttribute[ItemCode].HaveItemInfo )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    
    			if (ItemIndex == 221 || ItemIndex == 231 || ItemIndex == 241 || ItemIndex == 251 || ItemIndex == 261)
    				{
    			
    				int iItemNumber = ItemGetNumberMake(ItemType, ItemIndex);
    
    				//LogAddTD("[GMSystem] [EFCreate] Name: [%s] Map: [%d] X: [%d] Y: [%d] Item: [%d]", lpUser->Name, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber);
    				g_GMChatLog.Output("[GMSystem] [EFCreate] Name: [%s] Map: [%d] X: [%d] Y: [%d] Item: [%d]", lpUser->Name, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber);
    
    				ItemSerialCreateSend(lpUser->m_Index, lpUser->MapNumber, lpUser->X, lpUser->Y, iItemNumber, 0, 1, 0, 0, 0, -1, 0, 0, SocketBonus, SocketOption);
    				}
    			else
    				{
    				MsgOutput(lpUser->m_Index, "Index can be only: 221/231/241/251/261.");
    				return;
    				}
    			//}
    		}
    		break;
    
    	case Command::Money:
    		{
    			lpUser->Money = 100000000;
    
    
    			//LogAddTD("[USystem] [Money] Name: [%s] ", lpUser->Name);
    			g_USystemLog.Output("[USystem] [Money] Name: [%s] ", lpUser->Name);
    
    			GCMoneySend(lpUser->m_Index, lpUser->Money);
    
    		}
    		break;
    		// --
    
    
    
    		case Command::HpSd:
    		{
    			LPSTR UserName = this->GetTokenString();
    			// ----
    			if( UserName == 0 )
    			{
    				MsgOutput(lpUser->m_Index, "Syntax error in command");
    				return;
    			}
    			// ----
    			LPOBJ lpTarget = this->GetUserInfo(lpUser, UserName);
    			LPOBJ lpObj;
    			LPOBJ lpTargetObj;
    			// ----
    			if( !lpTarget )
    			{
    				return;
    			}
    
    			MsgOutput(lpUser->m_Index, "Name:[%s] Life:[%d]",lpTarget->Name, lpTarget->Life);
    		}
    		break;
    
    	
    	//}
    	// ----
    	
    	case Command::Summon:
    		{
    
    		int getMonsterID = this->GetTokenNumber();
    
    		if (getMonsterID == -1) { //Removing Of Pet
    			g_USystemLog.Output("[USystem] [Pet] [Kill] Name: [%s] ", lpUser->Name);
    			GCRecallMonLife(lpUser->m_Index, 60, 0);
    			gObjMonsterCallKill(lpUser->m_Index);
    			MsgOutput(lpUser->m_Index, "Pet has been removed");
    		}
    		if (getMonsterID == 1) { //Satyros
    			GCRecallMonLife(lpUser->m_Index, 60, 0);
    			gObjMonsterCallKill(lpUser->m_Index);
    			g_USystemLog.Output("[USystem] [Pet] [Satyros] Name: [%s] ", lpUser->Name);
    			gObjUseSkill.SkillMonsterCalls(lpUser->m_Index, 353, lpUser->X - 1, lpUser->Y + 1);
    			MsgOutput(lpUser->m_Index, "Pet [Satyros] created");
    		}
    		if (getMonsterID == 2) { //Blade Hunter
    			GCRecallMonLife(lpUser->m_Index, 60, 0);
    			gObjMonsterCallKill(lpUser->m_Index);
    			g_USystemLog.Output("[USystem] [Pet] [Blade Hunter] Name: [%s] ", lpUser->Name);
    			gObjUseSkill.SkillMonsterCalls(lpUser->m_Index, 354, lpUser->X - 1, lpUser->Y + 1);
    			MsgOutput(lpUser->m_Index, "Pet [Blade Hunter] created");
    		}
    		if (getMonsterID == 3) { //Kentauros
    			GCRecallMonLife(lpUser->m_Index, 60, 0);
    			gObjMonsterCallKill(lpUser->m_Index);
    			g_USystemLog.Output("[USystem] [Pet] [Kentauros] Name: [%s] ", lpUser->Name);
    			gObjUseSkill.SkillMonsterCalls(lpUser->m_Index, 355, lpUser->X - 1, lpUser->Y + 1);
    			MsgOutput(lpUser->m_Index, "Pet [Kentauros] created");
    		}
    		
    		}
    		break;
    	// ----	
    	
    	if( lpCommand->Price <= 0 )
    	{
    		return;
    	}
    	// ----
    	switch(lpCommand->PriceType)
    	{
    		case 0: //Zen
    			{
    				if (lpCommand->Index != Command::PKReset) {
    
    				lpUser->Money -= lpCommand->Price;
    				GCMoneySend(lpUser->m_Index, lpUser->Money);
    				}
    			}
    			break;
    			// --
    		case 1: //WCoinC
    			{
    				//lpUser->m_wcCashPoint
    			}
    			break;
    			// --
    		case 2: //WCoinP
    			{
    				//lpUser->m_wpCashPoint
    			}
    			break;
    			// --
    		case 3: //WCoinG
    			{
    				//lpUser->m_wgCashPoint
    			}
    			break;
    	}
      }
    }
    // -------------------------------------------------------------------------------
    
    BYTE CommandManager::CheckCommand(LPOBJ lpUser, LPSTR Text)
    {
    	CommandInfo* lpCommand = this->GetCommand(Text);
    	// ----
    	if( !lpCommand )
    	{
    		return 0;
    	}
    	// ----
    	if( lpUser->Authority < lpCommand->Access )
    	{
    		return 2;
    	}
    	// ----
    	if( lpCommand->Price > 0 )
    	{
    		switch(lpCommand->PriceType)
    		{
    		case 0: //Zen
    			{
    				if( lpUser->Money < lpCommand->Price )
    				{
    					return 3;
    				}
    			}
    			break;
    			// --
    		case 1: //WCoinC
    			{
    				if( lpUser->m_wcCashPoint < lpCommand->Price )
    				{
    					return 3;
    				}
    			}
    			break;
    			// --
    		case 2: //WCoinP
    			{
    				if( lpUser->m_wpCashPoint < lpCommand->Price )
    				{
    					return 3;
    				}
    			}
    			break;
    			// --
    		case 3: //WCoinG
    			{
    				if( lpUser->m_wgCashPoint < lpCommand->Price )
    				{
    					return 3;
    				}
    			}
    			break;
    		}
    	}
    	// ----
    	if( lpCommand->PremiumAccess >= 0 )
    	{
    		if( m_ObjBill[lpUser->m_Index].GetPayCode() < lpCommand->PremiumAccess )
    		{
    			return 4;
    		}
    	}
    	// ----
    	if( lpUser->Level < lpCommand->MinLevel )
    	{
    		return 5;
    	}
    	// ----
    	if( lpUser->iResetCount < lpCommand->MinReset )
    	{
    		return 6;
    	}
    	// ----
    	return 1;
    }
    // -------------------------------------------------------------------------------
    
    LPOBJ CommandManager::GetUserInfo(LPOBJ lpUser, LPSTR UserName)
    {
    	for( int i = OBJ_STARTUSERINDEX; i < OBJMAX; i++ )
    	{
    		if( gObj[i].Connected >= PLAYER_PLAYING )
    		{
    			if( gObj[i].Name[0] == *UserName )
    			{
    				if( strcmp(gObj[i].Name, UserName) == 0 )
    				{
    					return &gObj[i];
    				}
    			}
    		}
    	}
    	// ----
    	MsgOutput(lpUser->m_Index, "Target user not found");
    	return NULL;
    }
    // -------------------------------------------------------------------------------
    
    LPSTR CommandManager::GetTokenString()
    {
    	char Separator[2] = " ";
    	return strtok(0, Separator);
    }
    // -------------------------------------------------------------------------------
    
    int CommandManager::GetTokenNumber()
    {
    	char Separator[2] = " ";
    	LPSTR Token = strtok(0, Separator);
    	// ----
    	if( Token != NULL )
    	{
    		return atoi(Token);
    	}
    	// ----
    	return -1;
    }
    // -------------------------------------------------------------------------------
    
    CommandInfo* CommandManager::GetCommand(int Index)
    {
    
    	for( unsigned int i = 0; i < this->m_CommandInfo.size(); i++ )
    
    	{
    		if( this->m_CommandInfo[i].Index == Index )
    		{
    			return &m_CommandInfo[i];
    		}
    	}
    	// ----
    	return NULL;
    }
    // -------------------------------------------------------------------------------
    
    CommandInfo* CommandManager::GetCommand(LPSTR Text)
    {
    
    	for( unsigned int i = 0; i < this->m_CommandInfo.size(); i++ )
    
    	{
    		if( strcmp(this->m_CommandInfo[i].Text, Text) == 0 )
    		{
    			return &m_CommandInfo[i];
    		}
    	}
    	// ----
    	return NULL;
    }
    // -------------------------------------------------------------------------------

  2. #2972
    Valued Member bopoh1987 is online now
    MemberRank
    Feb 2014 Join Date
    Рига, LatviLocation
    118Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    Thanks man but its the same, debug error .

  3. #2973
    Apprentice jprey7 is offline
    MemberRank
    Jun 2012 Join Date
    23Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    Quote Originally Posted by bopoh1987 View Post
    Thanks man but its the same, debug error .
    compile release mode

  4. #2974
    Valued Member bopoh1987 is online now
    MemberRank
    Feb 2014 Join Date
    Рига, LatviLocation
    118Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    im in release mode.

    - - - Updated - - -

    Finaly i do it. Just need some configuration for compilator ,кecently installed vs2015 , I am studying it more.

  5. #2975
    Novice zjjcmnv is offline
    MemberRank
    Jul 2011 Join Date
    4Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    Quote Originally Posted by bopoh1987 View Post
    im in release mode.

    - - - Updated - - -

    Finaly i do it. Just need some configuration for compilator ,кecently installed vs2015 , I am studying it more.
    hey man what do you do to copile the files?

    --can someone help me in inbox?
    Last edited by zjjcmnv; 16-02-16 at 02:44 AM.

  6. #2976
    Valued Member bopoh1987 is online now
    MemberRank
    Feb 2014 Join Date
    Рига, LatviLocation
    118Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    Any new update?

  7. #2977

    thumbs up re: [Release] zTeam Season 8 Episode 2 (Source)

    Quote Originally Posted by Omaruu View Post
    Enigma Protector:
    Software Protection, Software Licensing, Software Virtualization
    It's have cracked version on internet.
    It's tested by me long time ago and it pack Common.z, .dll, main.exe and all work without problems.
    It was even have some guy that sell that "protection" with free packer for money.....
    How Pack common.z with Enigma, you MP please!
    I need learn. I had files 80% fix but i need pack common.z
    I get Enigma.

  8. #2978
    -( . ) ( . )- clerigz is offline
    MemberRank
    Mar 2012 Join Date
    1,365Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    anyone fix gift system in cash shop?

    anyone know how to fix this?




  9. #2979
    Apprentice Golden Dragon is offline
    MemberRank
    Jan 2016 Join Date
    19Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    Quote Originally Posted by clerigz View Post
    anyone fix gift system in cash shop?

    anyone know how to fix this?




    I can try track and fix it but i dont have "gift" option active. I changed it inclient and server banners and "gift" button still disabled.

  10. #2980
    Valued Member Omaruu is offline
    MemberRank
    Jan 2008 Join Date
    141Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    My new repack(update):
    http://dox.bg/files/dw?a=38108d99b7

  11. #2981
    Proficient Member x00000 is offline
    MemberRank
    Jun 2012 Join Date
    MoldovaLocation
    160Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    great, thx Omaruu
    some test:
    - can disable Z button in client(when disable MUHelper)
    - can disable X buttno in client(when disable CashShop)
    - disable in client Sum and RF to create(don't apear)
    - explain item option in comonserver.cfg
    CHAOSMIX_PLUSITEMLEVEL_TYPE1_1 = 50 //like this )
    CHAOSMIX_PLUSITEMLEVEL_TYPE2_1 = 50
    CHAOSMIX_PLUSITEMLEVEL_TYPE3_1 = 50
    CHAOSMIX_PLUSITEMLEVEL_TYPE1_2 = 40
    CHAOSMIX_PLUSITEMLEVEL_TYPE2_2 = 40
    CHAOSMIX_PLUSITEMLEVEL_TYPE3_2 = 40
    CHAOSMIX_PLUSITEMLEVEL_TYPE1_3 = 20
    CHAOSMIX_PLUSITEMLEVEL_TYPE2_3 = 20
    CHAOSMIX_PLUSITEMLEVEL_TYPE3_3 = 20 //..
    and this
    EB_DefenseLevelDiv = 5 //?
    EB_DefenseStart = 50
    EB_AttackLevelDiv = 3
    EB_AttackStart = 45
    EB_BuffTime = 1800

    -how to use monsterspawner.xml ?
    and visual bug box+2+3+4+5

  12. #2982
    -( . ) ( . )- clerigz is offline
    MemberRank
    Mar 2012 Join Date
    1,365Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    change log on this update?

  13. #2983
    Alpha Member ianvalls90 is offline
    MemberRank
    Apr 2007 Join Date
    ArgentinaLocation
    1,829Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    Quote Originally Posted by clerigz View Post
    change log on this update?
    Its on the readme file bro....

    Enviado desde mi GT-S5301L usando Tapatalk 2

  14. #2984
    Valued Member Omaruu is offline
    MemberRank
    Jan 2008 Join Date
    141Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    New Update:
    DOX.bg - Файл организатор за лесно споделяне и съхранение на файлове

    Bug fixes:
    - Your premium access code is wrong for this command bug Fixed
    - Ertel RankUp +3 to +5 Fixed(Need client update replace files from Client->Data->Local(Folder))

  15. #2985
    Proficient Member Kevin Teran is offline
    MemberRank
    Aug 2012 Join Date
    VenezuelaLocation
    152Posts

    re: [Release] zTeam Season 8 Episode 2 (Source)

    Quote Originally Posted by Omaruu View Post
    New Update:
    DOX.bg - Файл организатор за лесно споделяне и съхранение на файлове

    Bug fixes:
    - Your premium access code is wrong for this command bug Fixed
    - Ertel RankUp +3 to +5 Fixed(Need client update replace files from Client->Data->Local(Folder))

    Hello men good release.!

    I am new to compile , try to compile the GS but I get error. Might explain how. or raise the GS compiled thanks in advance :D



Advertisement