Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BUILDIN_FUNC(checkweight2)
- {
- int nameid=-1, amount=-1, nbitems=0, weight=0;
- int i=0, amount2=0, slots=0;
- struct item_data* id = NULL;
- TBL_PC *sd = script_rid2sd(st);
- nullpo_retr(1,sd);
- nbitems = script_lastdata(st);
- if(nbitems%2){
- ShowError("buildin_checkweight2: Invalid nbitem='%d', must be a multiple of 2.\n", nbitems);
- script_pushint(st,0);
- return 1;
- }
- slots = pc_inventoryblank(sd);
- for(i=2; i<nbitems+1; i=i+2){
- nameid = script_getnum(st,i);
- if( (id = itemdb_exists(nameid)) == NULL )
- {
- ShowError("buildin_checkweight2: Invalid item '%d'.\n", nameid);
- script_pushint(st,0);
- return 1;
- }
- amount = script_getnum(st,i+1);
- if( amount < 1 )
- {
- ShowError("buildin_checkweight2: Invalid amount '%d'.\n", amount);
- script_pushint(st,0);
- return 1;
- }
- weight += itemdb_weight(nameid)*amount;
- if( weight + sd->weight > sd->max_weight )
- {// too heavy
- script_pushint(st,0);
- return 0;
- }
- switch( pc_checkadditem(sd, nameid, amount) )
- {
- case ADDITEM_EXIST: // item is already in inventory, but there is still space for the requested amount
- break;
- case ADDITEM_NEW:
- if( itemdb_isstackable(nameid) )
- {// stackable
- amount2++;
- if( slots < amount2 ){
- script_pushint(st,0);
- return 0;
- }
- }
- else
- {// non-stackable
- amount2 += amount; //amount of new non stackables
- if( slots < amount2 ){ //do we still have enough place in inventory for them
- script_pushint(st,0);
- return 0;
- }
- }
- break;
- case ADDITEM_OVERAMOUNT:
- script_pushint(st,0);
- return 0;
- }
- }
- script_pushint(st,1);
- return 0;
- }
Add Comment
Please, Sign In to add comment