UID313189
帖子
精華
主題
積分226
現金
積極性
威望
違規
熱心
推廣次數
閱讀權限5
註冊時間2011-6-12
在線時間 小時
最後登錄1970-1-1
TA的每日心情 | 開心 2011-6-25 01:53 PM |
---|
簽到天數: 10 天 連續簽到: 0 天 [LV.3]偶爾看看II
|
- void atcommand_giveitem_sub(struct map_session_data *sd,struct item_data *item_data,int number)
- {
- int loop = 1,i,get_count,flag;
- struct item item_tmp;
- if(sd && item_data){
- if (!itemdb_isstackable2(item_data))
- { //如果不可叠加
- loop = number; //循环次数等于物品数量
- get_count = 1; //每次给与物品等于1
- }
- for (i = 0; i < loop; i++) { //分配物品
- memset(&item_tmp, 0, sizeof(item_tmp));
- item_tmp.nameid = item_data->nameid;
- item_tmp.identify = 1;
- if ((flag = pc_additem(sd, &item_tmp, get_count)))
- clif_additem(sd, 0, 0, flag);
- }
- }
- return;
- }
- ACMD_FUNC(giveitem)
- {
- char item_name[100];
- int number = 0, item_id;
- char flag[100];
- struct item_data *item_data;
- struct map_session_data *pl_sd;
- struct s_mapiterator* iter;
- nullpo_retr(-1, sd);
- memset(item_name, '\0', sizeof(item_name));
- if (!message || !*message || (
- sscanf(message, ""%99[^"]" %d "%99[^"]"", item_name, &number,flag) < 3 &&
- sscanf(message, "%99s %d %99s", item_name, &number,flag) < 3
- )) {
- clif_displaymessage(fd, "请输入物品Id,数量,对象 例:@Giveitem 501 100 MAP)");
- return -1;
- }
- if(number < 1)
- number = 1; //设置最小数量为1
- if ((item_data = itemdb_searchname(item_name)) == NULL &&
- (item_data = itemdb_exists(atoi(item_name))) == NULL)
- {
- clif_displaymessage(fd, msg_txt(19)); // 未找到相应名称或Id的物品
- return -1;
- }
- if (!itemdb_isstackable2(item_data))
- number = 1; //如果不可叠加,数量为1,否则保持默认
- item_id = item_data->nameid;
- if(strcmp(flag,"MAP")==0)//如果是当前地图
- {
- iter = mapit_getallusers(); //取得Map内所有玩家
- while( (pl_sd = (TBL_PC*)mapit_next(iter)) != NULL ) {
- if (sd->status.account_id != pl_sd->status.account_id && pc_isGM(sd) >= pc_isGM(pl_sd) && pl_sd->bl.m == sd->bl.m)
- {//条件判断:目标Aid != 自身Aid 且 自身Gm等级大于对方 且 对方与自己在同一地图
- if ( pl_sd->vender_id || pl_sd->chatID )
- continue;
- else if (pc_isdead(pl_sd))
- continue;
- else
- atcommand_giveitem_sub(pl_sd,item_data,number);
- }
- }
- mapit_free(iter); //释放
- } else if(strcmp(flag,"ALL")==0) {//全服发放
- iter = mapit_getallusers(); //取得Map内所有玩家
- while( (pl_sd = (TBL_PC*)mapit_next(iter)) != NULL ) {
- if (sd->status.account_id != pl_sd->status.account_id && pc_isGM(sd) >= pc_isGM(pl_sd))
- {//条件判断:目标Aid != 自身Aid 且 自身Gm等级大于对方
- if ( pl_sd->vender_id || pl_sd->chatID ) //在挂店或者聊天室内
- continue;
- else if (pc_isdead(pl_sd)) //死亡
- continue;
- else
- atcommand_giveitem_sub(pl_sd,item_data,number); //发放物品
- }
- }
- mapit_free(iter); //释放
- } else if((pl_sd=map_nick2sd(flag)) && (pl_sd=map_charid2sd(atoi(flag)))){
- if(pl_sd != sd)
- atcommand_giveitem_sub(pl_sd,item_data,number); //发放物品
- } else
- return -1;
- return 0;
- }
複製代碼
|
|