⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stall 2.cpp.svn-base

📁 絲路server源碼 Silk Road server source
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:


#include "StdAfx.h"

#define BASERESOURCESGAIN 10
#define RESOURCESWARNINGTHRESHOLD 1800
#define RESOURCESWINVAL 2000
#define RESOURCESTOGAINBH 200
#define BASEBHGAIN 14
uint32 buffentrys[3] = {180380,180362,180146};
// AB define's
#define ABCAPTUREDSTABLES_EUROPEANS		0x6E7 //1767
#define ABCAPTUREDSTABLES_CHINESE		   0x6E8 //1768
#define ABCAPTURINGSTABLES_EUROPEANS	   0x6E9 //1769
#define ABCAPTURINGSTABLES_CHINESE		  0x6EA //1770
// 0x6EB is unknown
#define ABCAPTUREDFARM_EUROPEANS		   0x6EC //1772 // 1 is captured by the _EUROPEANS
#define ABCAPTUREDFARM_CHINESE			  0x6ED // 1773 / 1 is captured by the _CHINESE
#define ABCAPTURINGFARM_EUROPEANS		  0x6EE // 1774 1 is capturing by the _EUROPEANS
#define ABCAPTURINGFARM_CHINESE			 0x6EF // 1775 1 is capturing by the _CHINESE

#define ABCAPTUREDBLACKSMITH_EUROPEANS	 0x6F6 // 1782
#define ABCAPTUREDBLACKSMITH_CHINESE		0x6F7 //1783
#define ABCAPTURINGBLACKSMITH_EUROPEANS	0x6F8 //1784
#define ABCAPTURINGBLACKSMITH_CHINESE	   0x6F9 //1785
// 0x6FA is unknown
#define ABCAPTUREDGOLDMINE_EUROPEANS	   0x6FB //1787
#define ABCAPTUREDGOLDMINE_CHINESE		  0x6FC//1788
#define ABCAPTURINGGOLDMINE_EUROPEANS	  0x6FD//1789
#define ABCAPTURINGGOLDMINE_CHINESE		 0x6FE//1790
// 0x6FF is unknown
#define ABCAPTUREDLUMBERMILL_EUROPEANS	 0x700//1792
#define ABCAPTUREDLUMBERMILL_CHINESE		0x701//1793
#define ABCAPTURINGLUMBERMILL_EUROPEANS	0x702//1794
#define ABCAPTURINGLUMBERMILL_CHINESE	   0x703//1795

#define ABSHOWSTABLEICON				 0x732//1842
#define ABSHOWGOLDMINEICON			   0x733//1843
#define ABSHOWLUMBERMILLICON			 0x734//1844
#define ABSHOWFARMICON				   0x735//1845
#define ABSHOWBACKSMITHICON			  0x736//1846

/* AB Battleground Data */

	static float GraveyardLocations[ABNUMCONTROLPOINTS][3] = {
		{ 1201.869507f, 1163.130615f, 56.285969f },												// STABLES
		{ 834.726379f, 784.978699f, 57.081944f },													// FARM
		{ 1016.588318f, 955.184692f, 42.828693f },													// BLACKSMITH
		{ 1211.523682f, 781.556946f, 82.709511f },													// MINE
		{ 772.755676f, 1213.113770f, 15.797392f },													// LUMBERMILL
	};

	static float NoBaseGYLocations[2][3] = {
		{ 1354.699951f, 1270.270020f, 11.129100f },												// _EUROPEANS
		{ 713.710022f, 638.364014f, 10.599900f },													// _CHINESE
	};

	static const char * ControlPointNames[ABNUMCONTROLPOINTS] = {
		"Stable",																					// STABLE
		"Farm",																						// FARM
		"Blacksmith",																				// BLACKSMITH
		"Mine",																						// MINE
		"Lumber Mill",																				// LUMBERMILL
	};

	static uint32 ControlPointGoIds[ABNUMCONTROLPOINTS][ABNUMSPAWNTYPES] = {
		  // NEUTRAL    _EUROPEANSATTACK    _CHINESEATTACK    _EUROPEANSCONTROLLED    _CHINESECONTROLLED
		{ 180087,       180085,            180086,         180076,                180078 },			// STABLE	
		{ 180089,       180085,            180086,         180076,                180078 },			// FARM
		{ 180088,       180085,            180086,         180076,                180078 },			// BLACKSMITH
		{ 180091,       180085,            180086,         180076,                180078 },			// MINE
		{ 180090,       180085,            180086,         180076,                180078 },			// LUMBERMILL
	};

	static float ControlPointCoordinates[ABNUMCONTROLPOINTS][4] = {
		{ 1166.779541f, 1200.147583f, 56.701763f, 2.251474f },									// STABLE
		{ 806.2484741f, 874.2167358f, 55.9936981f, 0.8377580f },									// FARM
		{ 977.0503540f, 1046.5208740f, 44.8276138f, 0.5410520f },									// BLACKSMITH
		{ 1146.9224854f, 848.1899414f, 110.9200210f, 2.4260077f },									// MINE
		{ 856.141907f, 1148.902100f, 11.184692f, 2.303835f },										// LUMBERMILL
	};

	static float ControlPointRotations[ABNUMCONTROLPOINTS][2] = {
		{ 0.9025853f, 0.4305111f },																// STABLE
		{ 0.4067366f, 0.9135454f },																	// FARM
		{ 0.2672384f, 0.9636304f },																	// BLACKSMITH
		{ 0.9366722f, 0.3502073f },																	// MINE
		{ 0.9135455f, 0.4067366f },																// LUMBERMILL
	};

	static float BuffCoordinates[ABNUMCONTROLPOINTS][4] = {
		{ 1185.56616210938f, 1184.62854003906f, 56.3632850646973f, 2.30383467674255f },			// STABLE
		{ 990.113098144531f, 1008.73028564453f, 42.6032752990723f, 0.820304811000824f },			// FARM
		{ 816.906799f, 842.339844f, 56.538746f, 3.272740f },										// BLACKSMITH
		{ 808.846252441406f, 1185.41748046875f, 11.9216051101685f, 0.663225054740906f },			// MINE
		{ 1147.09057617188f, 816.836242675781f, 98.3989562988281f, 0.226892784237862f },			// LUMBERMILL
	};

	static float BuffRotations[ABNUMCONTROLPOINTS][2] = {
		{ 0.913545489311218f, 0.406736612319946f },													// STABLE
		{ 0.39874908328056f, 0.917060077190399f },													// FARM
		{ 0.913545489311218f, 0.406736612319946f },													// BLACKSMITH
		{ 0.325568109750748f, 0.945518612861633f },												// MINE
		{ 0.113203197717667f, 0.993571877479553f },												// LUMBERMILL
	};

	static uint32 AssaultFields[ABNUMCONTROLPOINTS][2] = {
		{ ABCAPTURINGSTABLES_EUROPEANS, ABCAPTURINGSTABLES_CHINESE },								// STABLE
		{ ABCAPTURINGFARM_EUROPEANS, ABCAPTURINGFARM_CHINESE },									// FARM
		{ ABCAPTURINGBLACKSMITH_EUROPEANS, ABCAPTURINGBLACKSMITH_CHINESE },						// BLACKSMITH
		{ ABCAPTURINGGOLDMINE_EUROPEANS, ABCAPTURINGGOLDMINE_CHINESE },							// MINE
		{ ABCAPTURINGLUMBERMILL_EUROPEANS, ABCAPTURINGLUMBERMILL_CHINESE },						// LUMBERMILL
	};

	static uint32 OwnedFields[ABNUMCONTROLPOINTS][2] = {
		{ ABCAPTUREDSTABLES_EUROPEANS, ABCAPTUREDSTABLES_CHINESE },								// STABLE
		{ ABCAPTUREDFARM_EUROPEANS, ABCAPTUREDFARM_CHINESE },										// FARM
		{ ABCAPTUREDBLACKSMITH_EUROPEANS, ABCAPTUREDBLACKSMITH_CHINESE },							// BLACKSMITH
		{ ABCAPTUREDGOLDMINE_EUROPEANS, ABCAPTUREDGOLDMINE_CHINESE },								// MINE
		{ ABCAPTUREDLUMBERMILL_EUROPEANS, ABCAPTUREDLUMBERMILL_CHINESE },							// LUMBERMILL
	};

	static uint32 NeutralFields[ABNUMCONTROLPOINTS] = {
		ABSHOWSTABLEICON,
		ABSHOWFARMICON,
		ABSHOWBACKSMITHICON,
		ABSHOWGOLDMINEICON,
		ABSHOWLUMBERMILLICON,
	};

	static uint32 ResourceUpdateIntervals[6] = {
		0,
		12000,
		9000,
		6000,
		3000,
		1000,
	};

	static uint32 PointBonusPerUpdate[6] = {
		0,
		10,
		10,
		10,
		10,
		30,
	};

/* End BG Data */

void ArathiBasin::SpawnBuff(uint32 x)
{
	uint32 chosenbuffid = buffentrys[RandomUInt(2)];
	GameObjectInfo * goi = GameObjectNameStorage.LookupEntry(chosenbuffid);
	if(goi == NULL)
		return;

	if(mbuffs[x] == NULL)
	{
		mbuffs[x] = SpawnGameObject(chosenbuffid, mmapMgr>GetMapId(), BuffCoordinates[x][0], BuffCoordinates[x][1], BuffCoordinates[x][2],
			BuffCoordinates[x][3], 0, 114, 1);

		mbuffs[x]>SetFloatValue(GAMEOBJECTROTATION02, BuffRotations[x][0]);
		mbuffs[x]>SetFloatValue(GAMEOBJECTROTATION03, BuffRotations[x][1]);
		mbuffs[x]>SetUInt32Value(GAMEOBJECTSTATE, 1);
		mbuffs[x]>SetUInt32Value(GAMEOBJECTTYPEID, 6);
		mbuffs[x]>SetUInt32Value(GAMEOBJECTANIMPROGRESS, 100);
		mbuffs[x]>PushToWorld(mmapMgr);
	}
	else
	{
		// only need to reassign guid if the entry changes.
		if(mbuffs[x]>IsInWorld())
			mbuffs[x]>RemoveFromWorld(false);

		if(chosenbuffid != mbuffs[x]>GetEntry())
		{
			mbuffs[x]>SetNewGuid(mmapMgr>GenerateGameobjectGuid());
			mbuffs[x]>SetUInt32Value(OBJECTFIELDENTRY, chosenbuffid);
			mbuffs[x]>SetInfo(goi);
		}

		mbuffs[x]>PushToWorld(mmapMgr);
	}
}

void ArathiBasin::SpawnControlPoint(uint32 Id, uint32 Type)
{
	GameObjectInfo * gi, * giaura;
	gi = GameObjectNameStorage.LookupEntry(ControlPointGoIds[Id][Type]);
	if(gi == NULL)
		return;

	giaura = gi>sound3 ? GameObjectNameStorage.LookupEntry(gi>sound3) : NULL;

	if(mcontrolPoints[Id] == NULL)
	{
		mcontrolPoints[Id] = SpawnGameObject(gi>ID, mmapMgr>GetMapId(), ControlPointCoordinates[Id][0], ControlPointCoordinates[Id][1],
			ControlPointCoordinates[Id][2], ControlPointCoordinates[Id][3], 0, 35, 1.0f);

		mcontrolPoints[Id]>SetFloatValue(GAMEOBJECTROTATION02, ControlPointRotations[Id][0]);
		mcontrolPoints[Id]>SetFloatValue(GAMEOBJECTROTATION03, ControlPointRotations[Id][1]);
		mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTSTATE, 1);
		mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTTYPEID, gi>Type);
		mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTANIMPROGRESS, 100);
		mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTDYNFLAGS, 1);
		mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTDISPLAYID, gi>DisplayID);

		switch(Type)
		{
		case ABSPAWNTYPE_EUROPEANSASSAULT:
		case ABSPAWNTYPE_EUROPEANSCONTROLLED:
			mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTFACTION, 2);
			break;

		case ABSPAWNTYPE_CHINESEASSAULT:
		case ABSPAWNTYPE_CHINESECONTROLLED:
			mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTFACTION, 1);
			break;

		default:
			mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTFACTION, 35);		// neutral
			break;
		}

		mcontrolPoints[Id]>bannerslot = Id;
		mcontrolPoints[Id]>PushToWorld(mmapMgr);
	}
	else
	{
		if(mcontrolPoints[Id]>IsInWorld())
			mcontrolPoints[Id]>RemoveFromWorld(false);

		// assign it a new guid (client needs this to see the entry change?)
		mcontrolPoints[Id]>SetNewGuid(mmapMgr>GenerateGameobjectGuid());
		mcontrolPoints[Id]>SetUInt32Value(OBJECTFIELDENTRY, gi>ID);
		mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTDISPLAYID, gi>DisplayID);
		mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTTYPEID, gi>Type);

		switch(Type)
		{
		case ABSPAWNTYPE_EUROPEANSASSAULT:
		case ABSPAWNTYPE_EUROPEANSCONTROLLED:
			mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTFACTION, 2);
			break;

		case ABSPAWNTYPE_CHINESEASSAULT:
		case ABSPAWNTYPE_CHINESECONTROLLED:
			mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTFACTION, 1);
			break;

		default:
			mcontrolPoints[Id]>SetUInt32Value(GAMEOBJECTFACTION, 35);		// neutral
			break;
		}

		mcontrolPoints[Id]>SetInfo(gi);
		mcontrolPoints[Id]>PushToWorld(mmapMgr);
	}

	if(giaura==NULL)
	{
		// remove it if it exists
		if(mcontrolPointAuras[Id]!=NULL && mcontrolPointAuras[Id]>IsInWorld())
			mcontrolPointAuras[Id]>RemoveFromWorld(false);
			
		return;
	}

	if(mcontrolPointAuras[Id] == NULL)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -