item.c

来自「CS反恐精英1.6的部分C源代码。」· C语言 代码 · 共 429 行 · 第 1/2 页

C
429
字号
	0000:speed 0003:evildoing value 0004:manner points 0005:HP 0006:MaxHP
	0007:SP 0008:MaxSP 0009:status point 000b:base level
	000c:skill point 0018:weight(10x input)
	0019:maximum weight(10x input)
	0029:ATK(before) 002a:ATK(after) 002b:MATK(before) 002c:MATK(after)
	002d:DEF(before) 002e:DEF(after) 002f:MDEF(before) 0030:MDEF(after)
	0031:HIT 0032:FLEE(before) 0033:FLEE(after) 0034:critical
	0035:ASPD(2ms?) 0037:job level
	0082:unsure...ATK(same as after)?
*/
				WFIFOW(fd,0) = 0xb0;
				WFIFOW(fd,2) = 0005;
				WFIFOL(fd,4) = p->hp;
				WFIFOSET(fd,8);
				
				WFIFOW(fd,0) = 0xb0;
				WFIFOW(fd,2) = 0007;
				WFIFOL(fd,4) = p->sp;
				WFIFOSET(fd,8);
				
     }else if(item_num==2){//if item has special effect
     	 	WFIFOW(fd,0) = 0xa8;
			WFIFOW(fd,2) = RFIFOW(fd,2);
			WFIFOW(fd,4) = --p->inventory[RFIFOW(fd,2)-2].amount;
			WFIFOB(fd,6) = 01;
			WFIFOSET(fd,7);
			if(p->inventory[RFIFOW(fd,2)-2].amount <= 0){
				p->inventory[RFIFOW(fd,2)-2].nameid=0;
			}
			if(nameid==602){//wing of butterfly
				mmo_map_changemap(fd,sd,p->save_point.map,p->save_point.x,p->save_point.y,2);
			}else if(nameid==601){//僿ing of fly
				do {
				sd->x=rand()%(map_data[sd->mapno].xs-2)+1;
				sd->y=rand()%(map_data[sd->mapno].ys-2)+1;
				} while(map_data[sd->mapno].gat[sd->x+sd->y*map_data[sd->mapno].xs]==1 || map_data[sd->mapno].gat[sd->x+sd->y*map_data[sd->mapno].xs]==5);
				mmo_map_changemap(fd,sd,sd->mapname,sd->x,sd->y,2);
			}else if(nameid==611){//magnifying glass
				int i,c;
				WFIFOW(fd,0) = 0x177;
				for(i=c=0;i<100;i++)
					//if item hasn乫t been appraised
					if(sd->status.inventory[i].identify != 1)
					{
						WFIFOW(fd,4+c*2) = i+2;//sd->status.inventory[i].nameid;
						c++;
					}
				WFIFOW(fd,2) = 4+c*2;
				WFIFOSET(fd,4+c*2);
			}else if(nameid==604){//dead branch(summons random enemy)
				/*
				int mapno,npc;
				unsigned char buf[256];
				mapno = sd->mapno;
				npc = (double)(((double)rand()/(double)RAND_MAX) * 250) + 1001;
				map_data[sd->mapno].npc[npc]->x = sd->x;
				map_data[sd->mapno].npc[npc]->y = sd->y;
				map_data[mapno].npc[map_data[mapno].npc_num]=malloc(sizeof(struct npc_data));
			    map_data[mapno].npc[map_data[mapno].npc_num]->u.mons.speed=200;
				map_data[mapno].npc[map_data[mapno].npc_num]->class=npc;
				map_data[mapno].npc[map_data[mapno].npc_num]->id=npc;
				map_data[mapno].npc[map_data[mapno].npc_num]->block.subtype=MONS;
				map_data[mapno].npc[map_data[mapno].npc_num]->u.mons.hp=10;
				map_data[mapno].npc[map_data[mapno].npc_num]->u.mons.script = 1;
				memcpy(map_data[mapno].npc[map_data[mapno].npc_num]->name,npc,24);
				respawn_mons2(mapno,map_data[mapno].npc_num);
				map_data[mapno].npc_num++;
				*/
			}else if(nameid==605){//anodyne
				WFIFOW(fd,0) = 0x147;
				WFIFOW(fd,2) = 8;
				WFIFOW(fd,4) = skill_db[8].type_inf;
				WFIFOW(fd,6) = 0;
				WFIFOW(fd,8) = 1;
				WFIFOW(fd,10) = skill_db[8].sp;
				WFIFOW(fd,12) = skill_db[8].range;
				memcpy(WFIFOP(fd,14),"Anodyne",24);
				WFIFOB(fd,38) = 0;
				mmo_map_sendarea(fd,WFIFOP(fd,0),39,0);
			}else if(nameid==606){//aloebera(full SP recovery)
				p->sp = p->max_sp;
				WFIFOW(fd,0) = 0xb0;
				WFIFOW(fd,2) = 0007;
				WFIFOL(fd,4) = p->sp;
				WFIFOSET(fd,8);
			}else if(nameid==607){//yggdrasilberry(full HP/SP recovery)
					p->hp = p->max_hp;
					p->sp = p->max_sp;
					WFIFOW(fd,0) = 0xb0;
					WFIFOW(fd,2) = 0005;
					WFIFOL(fd,4) = p->hp;
					WFIFOSET(fd,8);
				
					WFIFOW(fd,0) = 0xb0;
					WFIFOW(fd,2) = 0007;
					WFIFOL(fd,4) = p->sp;
					WFIFOSET(fd,8);
			}else if(nameid==608){//seed of yggdrasil(semi HP/SP recovery) 
					p->hp += p->max_hp/2;
					p->sp += p->max_sp/2;
					if(p->hp > p->max_hp)p->hp = p->max_hp;
					if(p->sp > p->max_sp)p->sp = p->max_sp;
					WFIFOW(fd,0) = 0xb0;
					WFIFOW(fd,2) = 0005;
					WFIFOL(fd,4) = p->hp;
					WFIFOSET(fd,8);
				
					WFIFOW(fd,0) = 0xb0;
					WFIFOW(fd,2) = 0007;
					WFIFOL(fd,4) = p->sp;
					WFIFOSET(fd,8);
			}else if(nameid==609){//amulet
				
			}else if(nameid==610){//leaf of yggdrasil(resurrect w/1hp)
				WFIFOW(fd,0) = 0x147;
				WFIFOW(fd,2) = 54;
				WFIFOW(fd,4) = skill_db[54].type_inf;
				WFIFOW(fd,6) = 0;
				WFIFOW(fd,8) = 1;
				WFIFOW(fd,10) = skill_db[54].sp;
				WFIFOW(fd,12) = skill_db[54].range;
				memcpy(WFIFOP(fd,14),"Leaf of Yggdrasil",24);
				WFIFOB(fd,38) = 0;
				mmo_map_sendarea(fd,WFIFOP(fd,0),39,0);
			}else if(nameid==603){//old blue box(random item generation)
					int i1=502,i2=1,len=0;
					struct item tmp_item;
				i1 = search_item(1);
				if(i1>7000 || (619 <= i1 && i1 <= 643) || 
					(1256 <= i1 && i1<=1261)){i1=644;}//becomes unstable after 7000
      			memset(&tmp_item,0,sizeof(tmp_item));
      			tmp_item.nameid=i1;
      			tmp_item.amount=i2;
      			tmp_item.identify=1;
      			len=mmo_map_item_get(fd,WFIFOP(fd,0),&tmp_item);
      			if(len>0) WFIFOSET(fd,len);
			}else if(nameid==616){//old card (random card generation)
					int i1=502,i2=1,len=0;
					struct item tmp_item;
				i1 = search_item(3);
				if(i1>7000 || (619 <= i1 && i1 <= 643) || 
					(1256 <= i1 && i1<=1261)){i1=644;}//becomes unstable after 7000
      			memset(&tmp_item,0,sizeof(tmp_item));
      			tmp_item.nameid=i1;
      			tmp_item.amount=i2;
      			tmp_item.identify=1;
      			len=mmo_map_item_get(fd,WFIFOP(fd,0),&tmp_item);
      			if(len>0) WFIFOSET(fd,len);
			}else if(nameid==617){//old purple box(random equipment generation)
					int i1=502,i2=1,len=0;
					struct item tmp_item;
				i1 = search_item(2);
				if(i1>7000 || (619 <= i1 && i1 <= 643) || 
					(1256 <= i1 && i1<=1261)){i1=644;}//becomes unstable after 7000
      			memset(&tmp_item,0,sizeof(tmp_item));
      			tmp_item.nameid=i1;
      			tmp_item.amount=i2;
      			tmp_item.identify=1;
      			len=mmo_map_item_get(fd,WFIFOP(fd,0),&tmp_item);
      			if(len>0) WFIFOSET(fd,len);
			}else if(nameid==618){//屆偄姫暔
					int i1=502,i2=1,len=0;
					struct item tmp_item;
				i1 = search_item(3);
				if(i1>7000 || (619 <= i1 && i1 <= 643) || 
					(1256 <= i1 && i1<=1261)){i1=644;}//becomes unstable after 7000
      			memset(&tmp_item,0,sizeof(tmp_item));
      			tmp_item.nameid=i1;
      			tmp_item.amount=i2;
      			tmp_item.identify=1;
      			len=mmo_map_item_get(fd,WFIFOP(fd,0),&tmp_item);
      			if(len>0) WFIFOSET(fd,len);
			}else if(nameid==644){//present box(random card丄equipment丄consumable generation)
					int i1=502,i2=1,len=0;
					struct item tmp_item;
				i1 = search_item(4);
				if(i1>7000 || (619 <= i1 && i1 <= 643) || 
					(1256 <= i1 && i1<=1261)){i1=644;}//becomes unstable after 7000
      			memset(&tmp_item,0,sizeof(tmp_item));
      			tmp_item.nameid=i1;
      			tmp_item.amount=i2;
      			tmp_item.identify=1;
      			len=mmo_map_item_get(fd,WFIFOP(fd,0),&tmp_item);
      			if(len>0) WFIFOSET(fd,len);
			}else if(nameid == 643){// ADDED on 04/09/2003 --------------
				int i,c;
				WFIFOW(fd,0) = 0x1a6;
				for(i=c=0;i<100;i++)
					//if egg
					if((sd->status.inventory[i].nameid >= 9001)&&(sd->status.inventory[i].nameid <=9024))
					{
						WFIFOW(fd,4+c*2) = i+2;//sd->status.inventory[i].nameid;
						c++;
					}
				WFIFOW(fd,2) = 4+c*2;
				WFIFOSET(fd,4+c*2);


				//WFIFOW(fd,0) = 0x1a6;
				//WFIFOW(fd,2) = 6;
				//WFIFOW(fd,4) = RFIFOW(fd,2);
				//WFIFOSET(fd,6);
				//printf("index=%d\n",RFIFOW(fd,2));
				// --------------------------------------------------
			}
     }else{
     	 	if(nameid==714){//emperium (to start a guild)
     	 		
     	 	}
     }

}
/********************************************************************************************/

⌨️ 快捷键说明

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