item.c
来自「CS反恐精英1.6的部分C源代码。」· C语言 代码 · 共 429 行 · 第 1/2 页
C
429 行
//
// PvPGN YARE MOD V1.0 (Yeat Another Ragnarok Emulator) - (Server)
// Copyright (c) Project-YARE & PvPGN 2003
// www.project-yare.com
// forum.project-yare.net
// www.pvpgn.org
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// item.c - File for including special items, etc.
{
// searching for itemID
int search_item(int object){
char file_name[40];
char strgat[80];
char gomi[40];
FILE *fp;
int scount=0,fcount=0,nameid=0;
printf("object:%d\n",object);
if(object==1){
strcpy(file_name,"item_all.list");
scount = (int)(((double)rand()/(double)RAND_MAX)*1061.0);
printf("scount:%d\n",scount);
}else if(object==2){
strcpy(file_name,"item_equipment.list");
scount = (int)(((double)rand()/(double)RAND_MAX)*490.0);
}else if(object==3){
strcpy(file_name,"item_card.list");
scount = (int)(((double)rand()/(double)RAND_MAX)*149.0);
}else if(object==4){
strcpy(file_name,"item_present.list");
scount = (int)(((double)rand()/(double)RAND_MAX)*77.0);
}
if((fp = fopen(file_name,"r"))==NULL){
printf("Opened Successfully!\n");
}
for(fcount=0;fcount<scount;fcount++){//the file乫s scount to susumu(?)(峴栚傑偱偡偡傓)
fgets(strgat,80,fp);
}
fclose(fp);
sscanf(strgat,"%d%s",&nameid,gomi);
printf("itemID:%d item name:%s\n",nameid,gomi);
return nameid;
}
// check to see if itemID exists
int is_item(int object){
char str[80];
FILE *fp;
int item_id=0,result=0;
if((fp = fopen("item_all.list","r"))==NULL){
printf("Opened Successfully!\n");
}
while(fgets(str,80,fp)!=NULL){
sscanf(str,"%d",&item_id);
if(item_id==object){
result=1;//found
break;
}
}
fclose(fp);
return result;
}
/**********************************************************************************************/
// item use
int nameid=p->inventory[RFIFOW(fd,2)-2].nameid;
short option;
double bonus=0;//Vit recovery
item_num = itemdb_type(p->inventory[RFIFOW(fd,2)-2].nameid);//inventory baggage
p=&sd->status;
if(item_num==0){//if recovery item
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;
}
//recovery amount丂=丂乮amount of recovery item乯*乮1 + VIT/100 + recovery skill level/10)
if(p->skill[3].lv >= 1){
bonus = ((double)p->skill[3].lv)/10.0;
}
bonus += ((double)(p->vit+100)/(double)100);
//srand((unsigned)time(NULL));//random number
if(nameid==501){//red potion
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 44)+30) * bonus;
}else if(nameid==502){//orange potion
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 69)+50) * bonus;
}else if(nameid==503){//yellow potion
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 104)+80) * bonus;
}else if(nameid==504){//white potion
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 120)+149) * bonus;
}else if(nameid==505){//blue potion
p->sp += (double)((((double)rand()/(double)RAND_MAX) * 45)+53);
}else if(nameid==506){//green potion(poison recovery)
option = 0x0038;
p->option = p->option & option;// turn off flag unless peco or cart
WFIFOW(fd,0)=0x0119;
WFIFOL(fd,2)=sd->account_id;
WFIFOW(fd,6)=0;
WFIFOW(fd,8)=0;
WFIFOW(fd,10)=p->option;
mmo_map_sendarea( fd, WFIFOP(fd,0),packet_len_table[0x0119], 0 );
}else if(nameid==507){//red herb
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 12)+19) * bonus;
}else if(nameid==508){//yellow herb
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 21)+29) * bonus;
}else if(nameid==509){//white herb
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 50)+50) * bonus;
}else if(nameid==510){//blue herb
p->sp += (double)((((double)rand()/(double)RAND_MAX) * 10)+17);
}else if(nameid==511){//green herb(poison recovery)
option = 0x0038;
p->option = p->option & option;//turn off flag unless peco or cart
WFIFOW(fd,0)=0x0119;
WFIFOL(fd,2)=sd->account_id;
WFIFOW(fd,6)=0;
WFIFOW(fd,8)=0;
WFIFOW(fd,10)=p->option;
mmo_map_sendarea( fd, WFIFOP(fd,0),packet_len_table[0x0119], 0 );
}else if(nameid==512){//apple
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 12)+15) * bonus;
}else if(nameid==513){//banana
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 11)+15) * bonus;
}else if(nameid==514){//grape
p->sp += (double)((((double)rand()/(double)RAND_MAX) * 8)+11);
}else if(nameid==515){//carrot
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 13)+15) * bonus;
}else if(nameid==516){//potato
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 10)+14) * bonus;
}else if(nameid==517){//meat
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 41)+55) * bonus;
}else if(nameid==518){//honey
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 46)+66) * bonus;
p->sp += (double)((((double)rand()/(double)RAND_MAX) * 5)+9);
}else if(nameid==519){//milk
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 15)+22) * bonus;
}else if(nameid==520){//leaf of hinale
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 60)+22) * bonus;
}else if(nameid==521){//leaf of aloe
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 150)+25) * bonus;
}else if(nameid==522){//fruit of mastela
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 200)+200) * bonus;
}else if(nameid==523){//holy water(zombie destroyer)
option = 0x0038;
p->option = p->option & option;//turn off flag unless peco or cart
WFIFOW(fd,0)=0x0119;
WFIFOL(fd,2)=sd->account_id;
WFIFOW(fd,6)=0;
WFIFOW(fd,8)=0;
WFIFOW(fd,10)=p->option;
mmo_map_sendarea( fd, WFIFOP(fd,0),packet_len_table[0x0119], 0 );
}else if(nameid==525){//panacea(recover abnormal status)
option = 0x0038;
p->option = p->option & option;//turn off flag unless peco or cart
WFIFOW(fd,0)=0x0119;
WFIFOL(fd,2)=sd->account_id;
WFIFOW(fd,6)=0;
WFIFOW(fd,8)=0;
WFIFOW(fd,10)=p->option;
mmo_map_sendarea( fd, WFIFOP(fd,0),packet_len_table[0x0119], 0 );
}else if(nameid==526){//royal jelly(HP/SP recovery)
p->sp = p->max_sp;
p->hp = p->max_hp;
}else if(nameid==528){//monster feed
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 41)+55) * bonus;
}else if(nameid==529){//candy
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 30)+44) * bonus;
}else if(nameid==530){//candy stripper
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 60)+88) * bonus;
}else if(nameid==531){//apple juice
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 15)+22) * bonus;
}else if(nameid==532){//banana juice
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 15)+22) * bonus;
}else if(nameid==533){//grape juice
p->sp += (double)((((double)rand()/(double)RAND_MAX) * 30)+22);
}else if(nameid==534){//carrot juice
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 15)+22) * bonus;
}else if(nameid==535){//pumpkin
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 12)+15) * bonus;
}else if(nameid==536){//ice cream
p->sp += (double)((((double)rand()/(double)RAND_MAX) * 150)+10) * bonus;
}else if(nameid==538){//well baked cookie
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 500)+10) * bonus;
}else if(nameid==539){//cake
p->hp += (double)((((double)rand()/(double)RAND_MAX) * 1500)+10) * bonus;
}
if(p->hp > p->max_hp){//when max HP is reached
p->hp = p->max_hp;//set to max HP
}
if(p->sp > p->max_sp){//when max SP is reached
p->sp = p->max_sp;//set to max SP
}
/*
R 00b0 <type>.w <val>.l
Below are the renewal of various ability values. type: corresponds with numeric values
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?