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

📄 citemctrl.cpp

📁 国外网络游戏 《The Kingdom of the Winds》 的服务端源码C+编写 有兴趣的可以
💻 CPP
字号:
// cItemCtrl.cpp: implementation of the cItemCtrl class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Wox2head.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

cItemCtrl::cItemCtrl()
{

}

cItemCtrl::~cItemCtrl()
{

}

void cItemCtrl::PreLoadItems()
{
	itemcount=0;
	Fi->openscript("Wox2.itm");
	do
	{
		Fi->read2();
		if (!(strcmp(Fi->script1, "亲格")))
		{
			LoadItems();
			itemcount++;
		}
	}
	while (strcmp(Fi->script1, "EOF"));
	printf("Wox2: %i俺狼 酒捞袍阑 佬菌嚼聪促\n",itemcount);
	Fi->closescript();


}

void cItemCtrl::LoadItems()
{
	defitem[itemcount].name[0] = 0; //捞抚
	defitem[itemcount].type = ETC; //鸥蕾(use,equip,etc)

	defitem[itemcount].color = 0; //祸
	defitem[itemcount].pict = 0; //弊覆
	
	defitem[itemcount].def = 0; //规绢仿

	defitem[itemcount].Str = 0; //塞
	defitem[itemcount].Dex = 0; //刮酶己
	defitem[itemcount].Int = 0; //瘤仿
	defitem[itemcount].hp  = 0; //眉仿
	defitem[itemcount].mhp = 0; //弥眉
	defitem[itemcount].mp  = 0; //付仿
	defitem[itemcount].mmp = 0; //弥付

	defitem[itemcount].cdur = 0; //郴备仿
	defitem[itemcount].mdur = 0; //郴备仿

	int i = 0;
	int curLock = 0;
	
	do
	{
		Fi->read2();
		if (!(strcmp(Fi->script1, "捞抚")))
		{
			strcpy(defitem[itemcount].name, Fi->script2);
		}
		else if (!(strcmp(Fi->script1, "鸥涝")))
		{
			defitem[itemcount].type = atoi(Fi->script2);
		}
		else if (!(strcmp(Fi->script1, "祸")))
		{
			defitem[itemcount].color = atoi(Fi->script2);
		}
		else if (!(strcmp(Fi->script1, "弊覆")))
		{
			defitem[itemcount].pict = atoi(Fi->script2);
		}
		else if (!(strcmp(Fi->script1, "规绢")))
		{
			defitem[itemcount].def = atoi(Fi->script2);
		}
		else if (!(strcmp(Fi->script1, "塞")))
		{
			defitem[itemcount].Str = atoi(Fi->script2);
		}
		else if (!(strcmp(Fi->script1, "刮酶")))
		{
			defitem[itemcount].Dex = atoi(Fi->script2);
		}
		else if (!(strcmp(Fi->script1, "瘤仿")))
		{
			defitem[itemcount].Int = atoi(Fi->script2);
		}
		else if (!(strcmp(Fi->script1, "眉仿")))
		{
			defitem[itemcount].hp = atoi(Fi->script2);
		}
		else if (!(strcmp(Fi->script1, "弥眉")))
		{
			defitem[itemcount].mhp = atoi(Fi->script2);
		}
		else if (!(strcmp(Fi->script1, "付仿")))
		{
			defitem[itemcount].mp = atoi(Fi->script2);
		}
		else if (!(strcmp(Fi->script1, "弥付")))
		{
			defitem[itemcount].mmp = atoi(Fi->script2);
		}
		else if (!(strcmp(Fi->script1, "泅郴备仿")))
		{
			defitem[itemcount].cdur = atoi(Fi->script2);
		}		
		else if (!(strcmp(Fi->script1, "弥郴备仿")))
		{
			defitem[itemcount].mdur = atoi(Fi->script2);
		}		
	}
	while (strcmp(Fi->script1, "}") && strcmp(Fi->script1, "EOF"));
}

void cItemCtrl::SaveItems()
{
	int i;
	
	Fi->o=fopen("Wox2.Itm","w");
	if (Fi->o)
	{
		for (i=0;i<itemcount;i++)
		{
				fprintf(Fi->o, "亲格 酒捞袍\n");
				fprintf(Fi->o,"{\n");
				fprintf(Fi->o,"捞抚 %s\n",defitem[i].name);
				fprintf(Fi->o,"鸥涝 %d\n",defitem[i].type);
				fprintf(Fi->o,"祸 %d\n",defitem[i].color);
				fprintf(Fi->o,"弊覆 %d\n",defitem[i].pict);
				fprintf(Fi->o,"规绢 %d\n",defitem[i].def);
				fprintf(Fi->o,"塞 %d\n",defitem[i].Str);
				fprintf(Fi->o,"刮酶 %d\n",defitem[i].Dex);
				fprintf(Fi->o,"瘤仿 %d\n",defitem[i].Int);
				fprintf(Fi->o,"眉仿 %d\n",defitem[i].hp);
				fprintf(Fi->o,"弥眉 %d\n",defitem[i].mhp);
				fprintf(Fi->o,"付仿 %d\n",defitem[i].mp);
				fprintf(Fi->o,"弥付 %d\n",defitem[i].mmp);
				fprintf(Fi->o,"泅郴备仿 %d\n",defitem[i].cdur);
				fprintf(Fi->o,"弥郴备仿 %d\n",defitem[i].mdur);

				fprintf(Fi->o, "}\n");
		}
		fprintf(Fi->o,"\n\nEOF\n\n");
		fclose(Fi->o);
	}
	else
	{
		printf("俊矾, Wox2.Itm 甫 凯荐绝嚼聪促.. 泅犁 静绊 乐唱, 酒聪搁 欺固记阑 犬牢窍技夸.\n");
	}

}

void cItemCtrl::ThrowItem(int s,int slots)
{
	int slot = slots-1;
	//07:0 1 0 1F 0 6 0 6 C FFFFFF8A FFFFFFC0 2 0 0 0
	char temp[256];
	char temp2[256];
	char temp3[256];
	int encs = 0;
	if(chr[Gs->acc[s]].ItemBag[slot][1] == 0)
	{
		Cw->SendMiniText(s,"酒捞袍捞 绝嚼聪促");
	} else
	{
	//10:1 1 0 3 0
	//1A:0 5 FFFFFFD3 FFFFFF95 4 0 32 0 0
	temp[0] = lit(Gs->acc[s],1);
	temp[1] = lit(Gs->acc[s],2);
	temp[2] = lit(Gs->acc[s],3);
	temp[3] = lit(Gs->acc[s],4);
	temp[4] = 4;
	temp[5] = 0;
	temp[6] = 32;
	temp[7] = 0;
	//1 1 0 3 0

	temp2[0] = slot%256+1;
	temp2[1] = 1;
	temp2[2] = 0;
	temp2[3] = 3;
	temp2[4] = 0;
	//0 5 D3 95 4 0 32 0 0
	//0 1 0 1F 0 6 0 6 C FFFFFF8A FFFFFFC0 2 0 0 0
	temp3[0] = 0;
	temp3[1] = 1;
	temp3[2] = chr[Gs->acc[s]].backx>>8;
	temp3[3] = (chr[Gs->acc[s]].backx%256);
	temp3[4] = chr[Gs->acc[s]].backy>>8;
	temp3[5] = (chr[Gs->acc[s]].backy%256);
	//老访锅龋(酒捞袍竿啊柳芭)
	temp3[6] = lit(item[chr[Gs->acc[s]].ItemBag[slot][0]].itemserial,1);
	temp3[7] = lit(item[chr[Gs->acc[s]].ItemBag[slot][0]].itemserial,2);
	temp3[8] = lit(item[chr[Gs->acc[s]].ItemBag[slot][0]].itemserial,3);
	temp3[9] = lit(item[chr[Gs->acc[s]].ItemBag[slot][0]].itemserial,4);
	temp3[10] = (0xC0+(item[chr[Gs->acc[s]].ItemBag[slot][0]].pict>>8))%256;
	temp3[11] = item[chr[Gs->acc[s]].ItemBag[slot][0]].pict%256;
	temp3[12] = 0;
	temp3[13] = 0;
	temp3[14] = 0;

	mapitem[Cw->worlditemcount] = item[chr[Gs->acc[s]].ItemBag[slot][0]];
	memset((void *)&item[chr[Gs->acc[s]].ItemBag[slot][0]],0,sizeof(item[chr[Gs->acc[s]].ItemBag[slot][0]]));
	
	chr[Gs->acc[s]].ItemBag[slot][1]--;
	if(chr[Gs->acc[s]].ItemBag[slot][1] == 0)
		chr[Gs->acc[s]].ItemBag[slot][0] = 0;
	
	
	m[mapnumber[chr[Gs->acc[s]].lastmap ] ][map[mapnumber[chr[Gs->acc[s]].lastmap]].map_y * chr[Gs->acc[s]].backy + chr[Gs->acc[s]].backx] = (unsigned short)Cw->worlditemcount;
	iv[Cw->worlditemcount].x = chr[Gs->acc[s]].backx;
	iv[Cw->worlditemcount].y = chr[Gs->acc[s]].backy;
	iv[Cw->worlditemcount].map = chr[Gs->acc[s]].lastmap;
	iv[Cw->worlditemcount].itemnum = mapitem[Cw->worlditemcount].itemserial*100;

	int i =0;
	for(i = 0;i < Gs->now;i++)
	{
		if(chr[Gs->acc[i]].lastmap == chr[Gs->acc[s]].lastmap)
		{
			if(Cw->inr(Gs->acc[i],Gs->acc[s]))
			{
				encs = Xc->Enc_Pack(i,temp,8,0x1A,3);
				send(Gs->client[i],Encrypted_Messages[i],encs,0);
				
				encs = Xc->Enc_Pack(i,temp3,15,0x07,3);
				send(Gs->client[i],Encrypted_Messages[i],encs,0);
			}
		}
	}	
	if((chr[Gs->acc[s]].ItemBag[slot][1] > 1) || (chr[Gs->acc[s]].ItemBag[slot][1] < 0))
	{
		chr[Gs->acc[s]].ItemBag[slot][1]--;
		GetItem(s,slot);		
	} else
	{
		chr[Gs->acc[s]].ItemBag[slot][0] = 0;
		chr[Gs->acc[s]].ItemBag[slot][1]--;
		encs =Xc->Enc_Pack(s,temp2,5,0x10,3);
		send(Gs->client[s],Encrypted_Messages[s],encs,0);
	}
	}

	Cw->worlditemcount++;
}


void cItemCtrl::SendItemBox(int s)
{
	int i = 0;
	int encs = 0;
	for(i=0;i<((int)chr[Gs->acc[s]].count[0]);i++)
	{
		GetItem(s,i);
	}
}

void cItemCtrl::GetItem(int s, int slot)
{
	//0F: 01 C0 B3 0E
	//0F: 0B C2 CB 10 捞抚
	char itemtemp[256];
	char temp[256];

	memset(itemtemp,0,256);
	memset(temp,0,256);
	if(chr[Gs->acc[s]].ItemBag[slot][1] > 1)
		sprintf(itemtemp,"%s %d俺",item[chr[Gs->acc[s]].ItemBag[slot][0]].name,chr[Gs->acc[s]].ItemBag[slot][1]);
	else sprintf(itemtemp,"%s",item[chr[Gs->acc[s]].ItemBag[slot][0]].name);

	temp[0] = (slot%256)+1;
	temp[1] = (0xC0+(item[chr[Gs->acc[s]].ItemBag[slot][0]].pict>>8))%256;
	temp[2] = item[chr[Gs->acc[s]].ItemBag[slot][0]].pict%256;
	// temp[2] = '\x50';
	temp[3] = strlen(itemtemp);
	memcpy(temp+4,itemtemp,strlen(itemtemp));

//	memcpy(MapItem,temp,(strlen(itemtemp)+4));
	chr[Gs->acc[s]].ItemBag[slot][0] = Cw->WorldItemSerial;
	if(item[chr[Gs->acc[s]].ItemBag[slot][0]].itemserial == 0)
	{
	item[chr[Gs->acc[s]].ItemBag[slot][0]].itemserial = Cw->WorldItemSerial;
	}
	else item[chr[Gs->acc[s]].ItemBag[slot][0]].itemserial++;

	if(chr[Gs->acc[s]].ItemBag[slot][1] > 1)
	{
		Cw->WorldItemSerial+=chr[Gs->acc[s]].ItemBag[slot][1];
	}else Cw->WorldItemSerial++;
	int encs = Xc->Enc_Pack( s,temp,(strlen(itemtemp)+4),0x0F,3);
	send(Gs->client[s],Encrypted_Messages[s],encs,0);
}

void cItemCtrl::PickUpMapItem(int s)
{
	//窍促 富篮 凛扁风凭
	char temp[256];
//	0 5 FFFFFFD3 FFFFFF95 4 0 32 0 0

	int trss = m[mapnumber[chr[Gs->acc[s]].lastmap ] ][map[mapnumber[chr[Gs->acc[s]].lastmap]].map_y * chr[Gs->acc[s]].backy + chr[Gs->acc[s]].backx];	
	item[Cw->worldnextitem] = mapitem[iv[trss].itemnum];
	for(unsigned int i = iv[trss].itemnum;i < Cw->worlditemcount;i++)
		mapitem[i] = mapitem[i+1];
	memset((void *)&mapitem[i+1],0,sizeof(mapitem[i+1]));
	Cw->worlditemcount--;
	int ss = nextslot(s);
	for(i = 0;i < Cw->worlditemcount;i++)
	{
		if(chr[Gs->acc[s]].lastmap == iv[i].map)
		if(chr[Gs->acc[s]].backx == iv[i].x)
		{
			if(chr[Gs->acc[s]].backy == iv[i].y)
			{
				if(
				chr[Gs->acc[s]].ItemBag[nextslot(s)][0] ==
				mapitem[iv[trss].itemnum].itemserial)
				{
				chr[Gs->acc[s]].ItemBag[nextslot(s)][1]++;
				break;
				}
				else
				{
				chr[Gs->acc[s]].ItemBag[nextslot(s)][0] = item[s].itemserial*100;
				item[Cw->worldnextitem].owner = Gs->acc[s];
				}
			}
		}
	}
	
	temp[0] = lit(Gs->acc[s],1);
	temp[1] = lit(Gs->acc[s],2);
	temp[2] = lit(Gs->acc[s],3);
	temp[3] = lit(Gs->acc[s],4);
	temp[4] = 4;
	temp[5] = 0;
	temp[6] = 32;
	temp[7] = 0;
	temp[8] = 0;

	chr[Gs->acc[s]].ItemBag[i][0] = item[Cw->worldnextitem].itemserial*100;	
	Cw->worldnextitem++;
}

⌨️ 快捷键说明

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