📄 script.c
字号:
struct item_data *item_data = itemdb_searchname(name);
nameid=512;
if( item_data )
nameid=item_data->nameid;
}else
nameid=conv_num(st,data);
for(i=0,count=0;i<MAX_INVENTORY;i++){
if(sd->status.inventory[i].nameid==nameid)
count+=sd->status.inventory[i].amount;
}
push_val(st->stack,C_INT,count);
return 0;
}
/*==========================================
* 廳検僠僃僢僋
*------------------------------------------
*/
int buildin_checkweight(struct script_state *st)
{
int nameid,amount;
struct map_session_data *sd;
struct script_data *data;
sd = script_rid2sd(st);
data=&(st->stack->stack_data[st->start+2]);
get_val(st,data);
if( data->type==C_STR || data->type==C_CONSTSTR ){
const char *name=conv_str(st,data);
struct item_data *item_data = itemdb_searchname(name);
nameid=512;
if( item_data )
nameid=item_data->nameid;
}else
nameid=conv_num(st,data);
amount=conv_num(st,& (st->stack->stack_data[st->start+3]));
sd=script_rid2sd(st);
if(itemdb_weight(nameid)*amount + sd->weight > sd->max_weight){
push_val(st->stack,C_INT,0);
} else {
push_val(st->stack,C_INT,1);
}
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int buildin_getitem(struct script_state *st)
{
int nameid,amount,flag = 0;
struct item item_tmp;
struct map_session_data *sd;
struct script_data *data;
sd = script_rid2sd(st);
data=&(st->stack->stack_data[st->start+2]);
get_val(st,data);
if( data->type==C_STR || data->type==C_CONSTSTR ){
const char *name=conv_str(st,data);
struct item_data *item_data = itemdb_searchname(name);
nameid=512;
if( item_data )
nameid=item_data->nameid;
}else
nameid=conv_num(st,data);
amount=conv_num(st,& (st->stack->stack_data[st->start+3]));
if(nameid<0) { // 儔儞僟儉
nameid=itemdb_searchrandomid(-nameid);
flag = 1;
}
if(nameid > 0) {
memset(&item_tmp,0,sizeof(item_tmp));
item_tmp.nameid=nameid;
if(!flag)
item_tmp.identify=1;
else
item_tmp.identify=!itemdb_isequip3(nameid);
if((flag = pc_additem(sd,&item_tmp,amount))) {
clif_additem(sd,0,0,flag);
map_addflooritem(&item_tmp,amount,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
}
}
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int buildin_getitem2(struct script_state *st)
{
int nameid,amount,flag = 0;
int iden,ref,attr,c1,c2,c3,c4;
struct item_data *item_data;
struct item item_tmp;
struct map_session_data *sd;
struct script_data *data;
sd = script_rid2sd(st);
data=&(st->stack->stack_data[st->start+2]);
get_val(st,data);
if( data->type==C_STR || data->type==C_CONSTSTR ){
const char *name=conv_str(st,data);
struct item_data *item_data = itemdb_searchname(name);
nameid=512;
if( item_data )
nameid=item_data->nameid;
}else
nameid=conv_num(st,data);
amount=conv_num(st,& (st->stack->stack_data[st->start+3]));
iden=conv_num(st,& (st->stack->stack_data[st->start+4]));
ref=conv_num(st,& (st->stack->stack_data[st->start+5]));
attr=conv_num(st,& (st->stack->stack_data[st->start+6]));
c1=conv_num(st,& (st->stack->stack_data[st->start+7]));
c2=conv_num(st,& (st->stack->stack_data[st->start+8]));
c3=conv_num(st,& (st->stack->stack_data[st->start+9]));
c4=conv_num(st,& (st->stack->stack_data[st->start+10]));
if(nameid<0) { // 儔儞僟儉
nameid=itemdb_searchrandomid(-nameid);
flag = 1;
}
if(nameid > 0) {
memset(&item_tmp,0,sizeof(item_tmp));
item_data=itemdb_search(nameid);
if(item_data->type==4 || item_data->type==5){
if(ref > 10) ref = 10;
}
else if(item_data->type==7) {
iden = 1;
ref = 0;
}
else {
iden = 1;
ref = attr = 0;
}
item_tmp.nameid=nameid;
if(!flag)
item_tmp.identify=iden;
else if(item_data->type==4 || item_data->type==5)
item_tmp.identify=0;
item_tmp.refine=ref;
item_tmp.attribute=attr;
item_tmp.card[0]=c1;
item_tmp.card[1]=c2;
item_tmp.card[2]=c3;
item_tmp.card[3]=c4;
if((flag = pc_additem(sd,&item_tmp,amount))) {
clif_additem(sd,0,0,flag);
map_addflooritem(&item_tmp,amount,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
}
}
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int buildin_delitem(struct script_state *st)
{
int nameid,amount,i;
struct map_session_data *sd;
struct script_data *data;
sd = script_rid2sd(st);
data=&(st->stack->stack_data[st->start+2]);
get_val(st,data);
if( data->type==C_STR || data->type==C_CONSTSTR ){
const char *name=conv_str(st,data);
struct item_data *item_data = itemdb_searchname(name);
nameid=512;
if( item_data )
nameid=item_data->nameid;
}else
nameid=conv_num(st,data);
amount=conv_num(st,& (st->stack->stack_data[st->start+3]));
sd=script_rid2sd(st);
for(i=0;i<MAX_INVENTORY;i++){
if(sd->status.inventory[i].nameid==nameid){
if(sd->status.inventory[i].amount>amount){
pc_delitem(sd,i,amount,0);
break;
} else {
amount-=sd->status.inventory[i].amount;
pc_delitem(sd,i,sd->status.inventory[i].amount,0);
}
}
}
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int buildin_readparam(struct script_state *st)
{
int type;
struct map_session_data *sd;
type=conv_num(st,& (st->stack->stack_data[st->start+2]));
sd=script_rid2sd(st);
push_val(st->stack,C_INT,pc_readparam(sd,type));
return 0;
}
/*==========================================
*僉儍儔娭學偺ID庢摼
*------------------------------------------
*/
int buildin_getcharid(struct script_state *st)
{
int num;
struct map_session_data *sd;
num=conv_num(st,& (st->stack->stack_data[st->start+2]));
sd=script_rid2sd(st);
if(num==0)
push_val(st->stack,C_INT,sd->status.char_id);
if(num==1)
push_val(st->stack,C_INT,sd->status.party_id);
if(num==2)
push_val(st->stack,C_INT,sd->status.guild_id);
if(num==3)
push_val(st->stack,C_INT,sd->status.account_id);
return 0;
}
/*==========================================
*巜掕ID偺PT柤庢摼
*------------------------------------------
*/
char *buildin_getpartyname_sub(int party_id)
{
struct party *p;
p=NULL;
p=party_search(party_id);
if(p!=NULL){
char *buf;
buf=calloc(24, 1);
if(buf==NULL){
if(battle_config.error_log)
printf("out of memory : buildin_getguildname_sub\n");
exit(1);
}
strcpy(buf,p->name);
return buf;
}
return 0;
}
int buildin_getpartyname(struct script_state *st)
{
char *name;
int party_id;
party_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
name=buildin_getpartyname_sub(party_id);
if(name!=0)
push_str(st->stack,C_STR,name);
else
push_str(st->stack,C_STR,"null");
return 0;
}
/*==========================================
*巜掕ID偺僊儖僪柤庢摼
*------------------------------------------
*/
char *buildin_getguildname_sub(int guild_id)
{
struct guild *g=NULL;
g=guild_search(guild_id);
if(g!=NULL){
char *buf;
buf=calloc(24, 1);
if(buf==NULL){
if(battle_config.error_log)
printf("out of memory : buildin_getguildname_sub\n");
exit(1);
}
strcpy(buf,g->name);
return buf;
}
return 0;
}
int buildin_getguildname(struct script_state *st)
{
char *name;
int guild_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
name=buildin_getguildname_sub(guild_id);
if(name!=0)
push_str(st->stack,C_STR,name);
else
push_str(st->stack,C_STR,"null");
return 0;
}
/*==========================================
*巜掕ID偺GuildMaster柤庢摼
*------------------------------------------
*/
char *buildin_getguildmaster_sub(int guild_id)
{
struct guild *g=NULL;
g=guild_search(guild_id);
if(g!=NULL){
char *buf;
buf=calloc(24, 1);
if(buf==NULL){
if(battle_config.error_log)
printf("out of memory : buildin_getguildmaster_sub\n");
exit(1);
}
strncpy(buf,g->master, 23);
return buf;
}
return 0;
}
int buildin_getguildmaster(struct script_state *st)
{
char *master;
int guild_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
master=buildin_getguildmaster_sub(guild_id);
if(master!=0)
push_str(st->stack,C_STR,master);
else
push_str(st->stack,C_STR,"null");
return 0;
}
int buildin_getguildmasterid(struct script_state *st)
{
char *master;
struct map_session_data *sd=NULL;
int guild_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
master=buildin_getguildmaster_sub(guild_id);
if(master!=0){
if((sd=map_nick2sd(master)) == NULL){
push_val(st->stack,C_INT,0);
return 0;
}
push_val(st->stack,C_INT,sd->status.char_id);
}else{
push_val(st->stack,C_INT,0);
}
return 0;
}
/*==========================================
* 僉儍儔僋僞偺柤慜
*------------------------------------------
*/
int buildin_strcharinfo(struct script_state *st)
{
struct map_session_data *sd;
int num;
sd=script_rid2sd(st);
num=conv_num(st,& (st->stack->stack_data[st->start+2]));
if(num==0){
char *buf;
buf=calloc(24, 1);
if(buf==NULL){
printf("out of memory : buildin_strcharinfo\n");
exit(1);
}
strncpy(buf,sd->status.name, 23);
push_str(st->stack,C_STR,buf);
}
if(num==1){
char *buf;
buf=buildin_getpartyname_sub(sd->status.party_id);
if(buf!=0)
push_str(st->stack,C_STR,buf);
}
if(num==2){
char *buf;
buf=buildin_getguildname_sub(sd->status.guild_id);
if(buf!=0)
push_str(st->stack,C_STR,buf);
}
return 0;
}
unsigned int equip[10]={0x0100,0x0010,0x0020,0x0002,0x0004,0x0040,0x0008,0x0080,0x0200,0x0001};
/*==========================================
* 憰旛柤暥帤楍乮惛楤儊僯儏乕梡乯
*------------------------------------------
*/
int buildin_getequipname(struct script_state *st)
{
int i,num;
struct map_session_data *sd;
struct item_data* item;
char *buf;
buf=calloc(64, 1);
if(buf==NULL){
printf("out of memory : buildin_getequipname\n");
exit(1);
}
sd=script_rid2sd(st);
num=conv_num(st,& (st->stack->stack_data[st->start+2]));
i=pc_checkequip(sd,equip[num-1]);
if(i >= 0){
item=sd->inventory_data[i];
if(item)
sprintf(buf,"%s-[%s]",pos[num-1],item->jname);
else
sprintf(buf,"%s-[%s]",pos[num-1],pos[10]);
}else{
sprintf(buf,"%s-[%s]",pos[num-1],pos[10]);
}
push_str(st->stack,C_STR,buf);
return 0;
}
/*==========================================
* 憰旛僠僃僢僋
*------------------------------------------
*/
int buildin_getequipisequiped(struct script_state *st)
{
int i,num;
struct map_session_data *sd;
num=conv_num(st,& (st->stack->stack_data[st->start+2]));
sd=script_rid2sd(st);
i=pc_checkequip(sd,equip[num-1]);
if(i >= 0){
push_val(st->stack,C_INT,1);
}else{
push_val(st->stack,C_INT,0);
}
return 0;
}
/*==========================================
* 憰旛昳惛楤壜擻僠僃僢僋
*------------------------------------------
*/
int buildin_getequipisenableref(struct script_state *st)
{
int i,num;
struct map_session_data *sd;
num=conv_num(st,& (st->stack->stack_data[st->start+2]));
sd=script_rid2sd(st);
i=pc_checkequip(sd,equip[num-1]);
if(i >= 0 && num<7 && sd->inventory_data[i] && (num!=1 || sd->inventory_data[i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -