예제 #1
0
파일: process_f012.cpp 프로젝트: roybai/poe
BYTE process_f1(BYTE* aPacket,DWORD len)
{
//	if(len==1 && *aPacket==0)
//		{showinfo("done from f1, id:%x,x=%d,y=%d---x=%d,y=%d",_monster.id,_monster.pos.x,_monster.pos.y,_monster.pos1.x,_monster.pos1.y);return 0;}
	//showinfo("in f1, command:%rnd",command);
/*
		case 3:	//life mana update
			if(_player.id==0) _player.id=object_id;
			if(_player.id==object_id)
			{
				_player.life = *(aPacket+8) * 256+*(aPacket+9);
				_player.mana = *(aPacket+17) * 256+*(aPacket+18);
				_player.shield = *(aPacket+26) * 256+*(aPacket+27);
				if(_player.mana_max<_player.mana) _player.mana_max=_player.mana;
				if(_player.life_max<_player.life) _player.life_max=_player.life;
				if(_player.life<_player.life_max/1.5) 
					if(DrinkLifePotion()) {
							sprintf_s(_tempbuf,"drink life potion, life: %d, life_max:%d",_player.life,_player.life_max);
							return _tempbuf;}
					if(_player.mana<_player.mana_max/4)
						if(DrinkManaPotion()) return "drink mana potion22";
					sprintf_s(_tempbuf,"player life: %d, mana: %d, shield:%d ",_player.life,_player.mana,_player.shield);
					
					}*/
	switch(_action.count)
	{
		case 0:
			break;
		case 1:
			_monster.id=htons(*((WORD*)(aPacket+2)));
//			showinfo("monster xx id:%x,%x",_monster.id,aPacket[0]);
			break;
		case 2:
//			showinfo("monster id:%x",_monster.id);
			_monster.action = *aPacket;	//7 behave;1 drink;3 life update;5 die
			if(_monster.action == 4) 
				{
//					showinfo("mouseter died:%x",_monster.id);
					MonsterDie(_monster.id);
					RemoveMonster(_monster.id);	
			}
			break;
		case 3:
			if(_monster.action==7) _monster.action1 = *aPacket;
			//action1:
			//2 stop and hit
			//0 stop and do nothing
			//3 hit
			//1 move
			if(_monster.action ==3)  _monster.life = *(aPacket+2)*256+*(aPacket+3);//life/mana/shield update
			break;
		case 4:
			if(_monster.action1 == 1 || _monster.action1==3) _monster.pos.x = htons(*((WORD*)(aPacket+2)));	//move pos
			break;
		case 5:
			if(_monster.action1 == 1  || _monster.action1==3)
			{
				_monster.pos.y = htons(*((WORD*)(aPacket+2)));
				//_monster.type = OBJ_MONSTER;
				UpdateMonster(&_monster);
			}
			
			break;
		case 6:
			if(_monster.action ==3)  _monster.mana = htons(*((WORD*)(aPacket+2)));//life/mana/shield update
			break;
		case 9:
			if(_monster.action1 == 1)	_monster.pos1.x = htons(*((WORD*)(aPacket+2)));
			if(_monster.action ==3) 
			{
				_monster.shield = htons(*((WORD*)(aPacket+2)));//life/mana/shield update
				if(_player.id==_monster.id)
				{
					_player.id=_monster.id;
					_player.life=_monster.life;
					_player.mana=_monster.mana;
					_player.shield=_monster.shield;

					if(_player.mana_max<_player.mana) _player.mana_max=_player.mana;
					if(_player.life_max<_player.life) _player.life_max=_player.life;
					if(_player.life<_player.life_max/1.5) 
					if(DrinkLifePotion()) showinfo("drink life potion, life: %d, life_max:%d",_player.life,_player.life_max);
							
					if(_player.mana<_player.mana_max/4) if(DrinkManaPotion()) showinfo("drink mana");


					for(int i=0;i<MAX_monster_array;i++)
					{
						if(_monster.id==_monster_array[i].id)
						{
							_player.pos.x=_monster_array[i].pos.x;
							_player.pos.y=_monster_array[i].pos.y;
							break;
						}
					}
				}
			}
			break;
		case 10:
			if(_monster.action1 == 1)	
			{
				_monster.pos1.y = htons(*((WORD*)(aPacket+2)));
				if(_monster.id==_player.id)
				{
					_player.pos.x=_monster.pos.x;
					_player.pos.y=_monster.pos.y;
				}
				//UpdateMonster(_monster.id,_monster.pos.x,_monster.pos.y);
				//showinfo("moving");
			}
			break;
		default:
			switch(_monster.action)				
			{
				case 7:
//					return process_f1_action7(aPacket,len,command,_monster);
					break;
				case 3: //life mana update
//					return process_f1_action3(aPacket,len,command,monster);
					break;
				case 1: // drink
//					return process_f1_action1(aPacket,len,command,monster);
					break;
			}
	}
//	showinfo("in f1: count:%d,action:%d",_action.count,_monster.action);
	return 0;
}
예제 #2
0
void NPCDie(Entity *self,Entity *other)
{
  /*put in player history*/
  MonsterDie(self,other);
}