99Max综合娱乐网站(旧版)

 找回密码
 立即注册
查看: 4548|回复: 25

分享一个可以先看外观然后用材料脱换的NPC商店!

[复制链接]

升级   100%

发表于 2012-4-9 13:19:38 | 显示全部楼层 |阅读模式
本帖最后由 ˉ宝贝ˉ 于 2012-4-9 21:35 编辑

我见很多人都需要!可以先看外观,试带,看图你就明白了!















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
温馨提示:
1. 本站模拟器源于网络,经 99Max.mE 二次开发,仅供个人学习娱乐使用,切勿用于商业用途,否则后果自负!
2. 如需更好体验游戏内容,请前往官方游戏!不具备合法的运营模式,都是强盗,请勿擅自搭建私服!
3. 如本站内容有侵犯您的权益,请发送信息至QQ:372607220 或 EMAIL:372607220@qq.com ,我们会及时删除。

升级   0%

发表于 2012-4-9 19:38:16 | 显示全部楼层
本帖最后由 一生一叹一痕沙 于 2012-4-9 20:11 编辑

相当好的学习资料

新了解到一个函数npcshopattach


刚刚去看了相关说明,发现个很好玩的东西


限制出售的物品数量,这个例子里只限制了每次开服后卖10个红水,卖完后就玩家就没法在买了。可以研究下加些条件变成每天只能出售10个,这个对高级物品有很好的限制作用

再加个,把里面的ZENY可以改成#CASHPOINTS就可以用到P点,或者其他你自己设置的积分

更多的自己发掘吧。这个例子我个人觉得很好,开拓性很高

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

升级   100%

 楼主| 发表于 2012-4-9 20:25:16 | 显示全部楼层
呵呵,这个想法不错喔,可以尝试下,对了,我之前发帖,我说的错误就是着脚本,估计是物品的错误,把物品改了,应该就可以!

升级   0%

发表于 2012-4-9 21:34:16 | 显示全部楼层
研究了下脚本,报错应该是和compare的这个用法有关系,作者应该这个函数用法有错误了,看例子只说了字符串可以比较,但数组就不知道可不可以了,也许和物品无关,他写的太凌乱了

升级   100%

 楼主| 发表于 2012-4-9 21:38:28 | 显示全部楼层
但是在游戏上完全正常,可以制作,试带没问题的,我之前有一个脚本也是象这个脚本的报错类型,我把物品全部改了就不报错了,但是我心想,原本作者写的物品咱们也有的DB,怎么会报错,所以想不通~!

升级   100%

 楼主| 发表于 2012-4-9 21:39:48 | 显示全部楼层
如果你改好了,别忙发下上来,呵呵

升级   100%

发表于 2012-4-10 11:24:34 | 显示全部楼层
本来不想说啥的,报错的原因是countitem到了非法字符的问题,而此问题在以前版本的EA中是没有的,新版本的EA中,源码中加入了检查字段

/*==========================================
* Loads an item from the db. If not found, it will return the dummy item.
*------------------------------------------*/
struct item_data* itemdb_search(int nameid)
{
        struct item_data* id;
        if( nameid >= 0 && nameid < ARRAYLENGTH(itemdb_array) )
                id = itemdb_array[nameid];
        else
                id = (struct item_data*)idb_get(itemdb_other, nameid);

        if( id == NULL)
        {
                if(battle_config.battle_debug_itemnull) {
                        ShowWarning("itemdb_search: 道具ID %d 不存在 item_db. 使用虚拟数据.\n", nameid);
                }
                id = &dummy_item;
                dummy_item.nameid = nameid;
        }
        return id;
}

当然这是我改过的,加入了一个开关,在测试服务器的时候打开来检测是否有错误的ID,开服后在关闭。
此段程序就检测为NULL的ID,那那个ID变成了NULL了呢??
其实就是SZeny

升级   100%

 楼主| 发表于 2012-4-10 11:51:41 | 显示全部楼层
感谢回答,那灵巧儿姐姐意思说要修改源码?  可不可以直接修改脚本呢?

升级   0%

发表于 2012-4-10 12:17:56 | 显示全部楼层
原来这样的,可惜对着源码里看了下,还是没有看懂。惭愧

升级   0%

发表于 2012-4-10 21:21:57 | 显示全部楼层
本帖最后由 一生一叹一痕沙 于 2012-4-10 21:29 编辑

今天回来后正好要更新RA源码,把那段源码if语句加到itemdb.c里,生成失败,他说battle_debug_itemnull不属于battle.......后面几个英文忘了,吃饭前弄的,忘了说了,服务端用的是RA15839
然后就照原来那个脚本自己也做了一个,去掉countitem还是出错。就是灵巧儿源码里的那段警告,就是在把东西拖进窗口点购买后就会显示,制作扣东西都不会再报错了。今天上班一有空就再研究callsub,特别是当中起初判断需要什么材料前的那段if(@bought_nameid == .shop[@i]),一直没理解了,研究了好久才开了一点窍,主要还是没能理解callsub的运用

后来还是用回自己比较熟悉的callfunc

-        shop        qqj_shop        -1,512:50
prontera,150,172,4        script        头饰制作        446,{
        mes "[裁缝]";
        mes "这里我可以为你做很多头饰,";
        mes "但要东西哦";
        callshop "qqj_shop",1;
        npcshopattach "qqj_shop";
        end;

OnBuyItem:
        if(@bought_nameid == 5353) callfunc "HandDo",0,@bought_nameid;
        if(@bought_nameid == 2629) callfunc "HandDo",1,@bought_nameid;



OnInit:
        npcshopitem "qqj_shop",5353,1,2629,1;
        end;
}



function        script        HandDo        {
        switch(getarg(0)) {
                case 0:        setarray @shop[0],500000,502,1,503,1,504,1,0;break;
                case 1:        setarray @shop[0],500000,502,1,503,1,504,1,505,1,0;break;
        }
        mes "- 制作 "+getitemname(getarg(1))+"";
        mes "- 请准备好下面的材料!";
        for(set @e,1;@shop[@e] != 0;set @e,@e+2) {
                mes " "+getitemname(@shop[@e])+"  x" + countitem(@shop[@e]) +"/"+ @shop[@e+1] +(countitem(@shop[@e]) >= @shop[@e+1]?("已完成"):("未完成"));
        }
        mes "需要"+@shop[0]+"Z";
        next;
        switch(select("制作","看样子","结束对话")) {
        case 1:        if(Zeny <= @shop[0]) goto L_nomoney;
                set zeny,zeny-@shop[0];
                for(set @e,1;@shop[@e] != 0;set @e,@e+2) {
                        if(countitem(@shop[@e]) < @shop[@e+1]) goto L_nomoney;
                        delitem @shop[@e],@shop[@e+1];
                }
                mes "制作成功";
                getitem getarg(1),1;
                close;
        case 2:        mes "制作成功";
                close;
        case 3:        close;
L_nomoney:
        mes "get out!";
        close;
        }
}

测试了没错误,其他的自己根据原来的东西加吧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|99Max综合娱乐网站(旧版) ( 沪ICP备11024206号-1 )

GMT+8, 2025-1-18 18:48 , Processed in 0.250987 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表