Jump to content

HOSIN

Members
  • Posts

    2
  • Joined

  • Last visited

1 Follower

About HOSIN

  • Birthday 05/19/1991

Profile Information

  • Gender
    Male
  • Location
    Hungary
  • Server
    ragnarokhungary

Contact Methods

Recent Profile Visitors

1775 profile views

HOSIN's Achievements

Poring

Poring (1/15)

0

Reputation

  1. Special Thank you: zephyrus_cr and judas On npc.c add: /*========================================== * Cash Shop Buy List *------------------------------------------*/ int npc_cashshop_buylist(struct map_session_data *sd, int points, int count, unsigned short* item_list) { int i, j, nameid, amount, new_, w, vt; struct npc_data *nd = (struct npc_data *)map_id2bl(sd->npc_shopid); if( !nd || nd->subtype != CASHSHOP ) return 1; if( sd->state.trading ) return 4; new_ = 0; w = 0; vt = 0; // Global Value // Validating Process ---------------------------------------------------- for( i = 0; i < count; i++ ) { nameid = item_list[i*2+1]; amount = item_list[i*2+0]; if( !itemdb_exists(nameid) || amount <= 0 ) return 5; ARR_FIND(0,nd->u.shop.count,j,nd->u.shop.shop_item[j].nameid == nameid); if( j == nd->u.shop.count || nd->u.shop.shop_item[j].value <= 0 ) return 5; if( !itemdb_isstackable(nameid) && amount > 1 ) { ShowWarning("Player %s (%d:%d) sent a hexed packet trying to buy %d of nonstackable item %d!n", sd->status.name, sd->status.account_id, sd->status.char_id, amount, nameid); amount = item_list[i*2+0] = 1; } switch( pc_checkadditem(sd,nameid,amount) ) { case ADDITEM_NEW: new_++; break; case ADDITEM_OVERAMOUNT: return 3; } vt += nd->u.shop.shop_item[j].value * amount; w += itemdb_weight(nameid) * amount; } if( w + sd->weight > sd->max_weight ) return 3; if( pc_inventoryblank(sd) < new_ ) return 3; if( points > vt ) points = vt; // Payment Process ---------------------------------------------------- if( sd->kafraPoints < points || sd->cashPoints < (vt - points) ) return 6; pc_paycash(sd,vt,points); // Delivery Process ---------------------------------------------------- for( i = 0; i < count; i++ ) { struct item item_tmp; nameid = item_list[i*2+1]; amount = item_list[i*2+0]; memset(&item_tmp,0,sizeof(item_tmp)); if( !pet_create_egg(sd,nameid) ) { item_tmp.nameid = nameid; item_tmp.identify = 1; pc_additem(sd,&item_tmp,amount); } if( log_config.enable_logs&0x20 ) log_pick_pc(sd, "S", nameid, amount, NULL); } return 0; } On npc.h add: int npc_cashshop_buylist(struct map_session_data *sd, int points, int count, unsigned short* item_list) And on clic.c replace with: void clif_parse_cashshop_buy(int fd, struct map_session_data *sd) { int fail = 0; struct npc_data *nd; nullpo_retv(sd); if( sd->state.trading || !sd->npc_shopid ) fail = 1; else { #if PACKETVER < 20101116 short nameid = RFIFOW(fd,2); short amount = RFIFOW(fd,4); int points = RFIFOL(fd,6); fail = npc_cashshop_buy(sd, nameid, amount, points); #else int len = RFIFOW(fd,2); int points = RFIFOL(fd,4); int count = RFIFOW(fd,8); unsigned short* item_list = (unsigned short*)RFIFOP(fd,10); if( len < 10 || len != 10 + count * 4) { ShowWarning("Player %u sent incorrect cash shop buy packet (len %u:%u)!n", sd->status.char_id, len, 10 + count * 4); return; } fail = npc_cashshop_buylist(sd,points,count,item_list); #endif } clif_cashshop_ack(sd,fail); } And by last, on packet_db.txt //2010-11-24aRagexeRE packet_ver: 26 +0x0288,-1,cashshopbuy,4:8 0x0436,19,wanttoconnection,2:6:10:14:18 NOTE: The msgstringtable.txt may be needed to bypass any gravity errors when purchasing through cash shop. Attached File(s) msgstringtable.txt (64.11K) packet_db.txt (29.77K)
  2. Yeah pls guide and patch file thx =)
×
×
  • Create New...