UID7297
阅读权限120
威望 点
积分2017
注册时间2010-11-7
最后登录1970-1-1
听众
收听
升级
100%
|
第五步:- npc.c
- static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath)
复制代码 在原:- CREATE(nd, struct npc_data, 1);
- CREATE(nd->u.shop.shop_item, struct npc_item_list, i);
- memcpy(nd->u.shop.shop_item, items, sizeof(struct npc_item_list)*i);
- nd->u.shop.count = i;
- nd->bl.prev = nd->bl.next = NULL;
- nd->bl.m = m;
- nd->bl.x = x;
- nd->bl.y = y;
- nd->bl.id = npc_get_new_npc_id();
- npc_parsename(nd, w3, start, buffer, filepath);
- nd->class_ = m==-1?-1:atoi(w4);
- nd->speed = 200;
复制代码 加入:- //========================================================================================
- //现金商店修改(官方现金商店)
- if (type == CASHSHOP && !strcasecmp(w2,"cashshop") ){
- nd->u.shop.cash_var = aStrdup("#CASHPOINTS");
- nd->u.shop.point_var = aStrdup("#KAFRAPOINTS");
- nd->u.shop.cash_vartype = 2;
- nd->u.shop.point_vartype = 2;
- }
- else if (type == CASHSHOP) { //Variables were defined as cashshop(<cashpoints>{,<kafrapoints>})
- char cashvarname_temp[32];
- char pointvarname_temp[32];
- if (sscanf(w2,"cashshop(%32[^,],%32[^)])",cashvarname_temp,pointvarname_temp) == 2){
- nd->u.shop.cash_var = aStrdup(cashvarname_temp);
- nd->u.shop.point_var = aStrdup(pointvarname_temp);
- }
- else if (sscanf(w2,"cashshop(%32[^)])",cashvarname_temp) == 1){
- nd->u.shop.cash_var = aStrdup(cashvarname_temp);
- nd->u.shop.point_var = aStrdup("#KAFRAPOINTS");
- }
- else{
- nd->u.shop.cash_var = aStrdup("#CASHPOINTS");
- nd->u.shop.point_var = aStrdup("#KAFRAPOINTS");
- ShowError("npc_parse_shop: 未知的现金商店 w2 "%s", 假设正常的变量\n",w2);
- }
-
- //得到变量性质
- if (nd->u.shop.cash_var[0] == '#' && nd->u.shop.cash_var[1] == '#')
- nd->u.shop.cash_vartype = 1;
- else if (nd->u.shop.cash_var[0] == '#')
- nd->u.shop.cash_vartype = 2;
- else
- nd->u.shop.cash_vartype = 3;
-
- if (nd->u.shop.point_var[0] == '#' && nd->u.shop.point_var[1] == '#')
- nd->u.shop.point_vartype = 1;
- else if (nd->u.shop.point_var[0] == '#')
- nd->u.shop.point_vartype = 2;
- else
- nd->u.shop.point_vartype = 3;
- }
- //========================================================================================
-
复制代码 第六步:- npc.c
- const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath)
-
复制代码 原:- case SHOP:
- case CASHSHOP:
- ++npc_shop;
- nd->u.shop.shop_item = dnd->u.shop.shop_item;
- nd->u.shop.count = dnd->u.shop.count;
- break;
复制代码 改:- case CASHSHOP:
- nd->u.shop.cash_var = dnd->u.shop.cash_var;
- nd->u.shop.cash_vartype = dnd->u.shop.cash_vartype;
- nd->u.shop.point_var = dnd->u.shop.point_var;
- nd->u.shop.point_vartype = dnd->u.shop.point_vartype;
- case SHOP:
- ++npc_shop;
- nd->u.shop.shop_item = dnd->u.shop.shop_item;
- nd->u.shop.count = dnd->u.shop.count;
- break;
复制代码 第七步:- clif.c
- void clif_cashshop_show(struct map_session_data *sd, struct npc_data *nd)
-
复制代码 原:- WFIFOL(fd,4) = sd->cashPoints; // Cash Points
- #if PACKETVER >= 20070711
- WFIFOL(fd,8) = sd->kafraPoints; // Kafra Points
复制代码 改:- //==========================================================================================
- WFIFOL(fd,4) = pc_readregistry(sd,nd->u.shop.cash_var,nd->u.shop.cash_vartype); // 现金点数
- #if PACKETVER >= 20070711
- WFIFOL(fd,8) = pc_readregistry(sd,nd->u.shop.point_var,nd->u.shop.point_vartype);; // 卡普拉点数
- //==========================================================================================
复制代码 第八步:- clif.c
- void clif_cashshop_ack(struct map_session_data* sd, int error) {
复制代码 原:- WFIFOL(fd,2) = sd->cashPoints;
- #if PACKETVER < 20070711
- WFIFOW(fd,6) = TOW(error);
- #else
- WFIFOL(fd,6) = sd->kafraPoints;
- WFIFOW(fd,10) = TOW(error);
- #endif
复制代码 改:- WFIFOL(fd,2) = pc_readregistry(sd,nd->u.shop.cash_var,nd->u.shop.cash_vartype);
- #if PACKETVER < 20070711
- WFIFOW(fd,6) = TOW(error);
- #else
- WFIFOL(fd,6) = pc_readregistry(sd,nd->u.shop.point_var,nd->u.shop.point_vartype);
- WFIFOW(fd,10) = TOW(error);
- #endif
复制代码 第九步:加入:- BUILDIN_FUNC(setcashpoints)
- {
- const char* npcname = script_getstr(st,2);
- struct npc_data* nd = npc_name2id(npcname);
- const char* newcashvar = script_getstr(st,3);
- size_t len;
-
- if( !nd || nd->subtype != CASHSHOP )
- { //Not found.
- script_pushint(st,0);
- return 0;
- }
-
- len = strlen(newcashvar)+1;
- if (len < 32){
- RECREATE(nd->u.shop.cash_var, char, len);
- memcpy(nd->u.shop.cash_var, newcashvar, len*sizeof(char));
- }
- else{ //variable name too long
- script_pushint(st,0);
- ShowError("setcashpoints: 无法设置现金变量 %s 到 %s 由于字符长度.\n",npcname,newcashvar);
- return 0;
- }
- if (newcashvar[0] == '#' && newcashvar[1] == '#')
- nd->u.shop.cash_vartype = 1;
- else if (newcashvar[0] == '#')
- nd->u.shop.cash_vartype = 2;
- else
- nd->u.shop.cash_vartype = 3;
- script_pushint(st,1);
- return 0;
- }
- BUILDIN_FUNC(setfreepoints)
- {
- const char* npcname = script_getstr(st,2);
- struct npc_data* nd = npc_name2id(npcname);
- const char* newcashvar = script_getstr(st,3);
- size_t len;
- if( !nd || nd->subtype != CASHSHOP )
- { //Not found.
- script_pushint(st,0);
- return 0;
- }
-
- len = strlen(newcashvar)+1;
- if (len < 32){
- RECREATE(nd->u.shop.point_var, char, len);
- memcpy(nd->u.shop.point_var, newcashvar, len*sizeof(char));
- }
- else{ //variable name too long
- script_pushint(st,0);
- ShowError("setfreepoints: 无法设置现金变量 %s 到 %s 由于字符长度.\n",npcname,newcashvar);
- return 0;
- }
- if (newcashvar[0] == '#' && newcashvar[1] == '#')
- nd->u.shop.point_vartype = 1;
- else if (newcashvar[0] == '#')
- nd->u.shop.point_vartype = 2;
- else
- nd->u.shop.point_vartype = 3;
- script_pushint(st,1);
- return 0;
- }
复制代码- void script_parse_builtin(void) {
复制代码 在原:- struct script_function BUILDIN[] = {
复制代码 加入:- //自定义商城点数变量
- BUILDIN_DEF(setcashpoints,"ss"),
- BUILDIN_DEF(setfreepoints,"ss"),
复制代码 格式:- prontera.gat,147,125,5 cashshop 官方现金商店 89,12210:10 //扣除官方现金点数
- prontera.gat,147,125,5 cashshop(jifen) 积分商店 89,12210:10 //扣除自定义的变量(jifen)
- 类似于官方的现金商店在官方现金商店的基础上加了()中的变量名
复制代码 此系统主要针对与自定义商店系统
自定义商店系统针对的是玩家的露天商店
而此系统针对的是官方的现金商店 |
温馨提示:
1. 本站模拟器源于网络,经 99Max.mE 二次开发,仅供个人学习娱乐使用,切勿用于商业用途,否则后果自负!
2. 如需更好体验游戏内容,请前往官方游戏!不具备合法的运营模式,都是强盗,请勿擅自搭建私服!
3. 如本站内容有侵犯您的权益,请发送信息至QQ:372607220 或 EMAIL:372607220@qq.com ,我们会及时删除。
|