搜索
LUA

LUA

本版块未设置版块简介!请后台版块编辑添加。
  •  帖子: 115
  •  讨论: 115
  •  关注: 0

FengBao.lua--封包NPC

GA 发表于 2025-5-10 02:04:16 | 显示全部楼层 |阅读模式
102 0
tbl_gl = tbl_gl or {};
tbl_gl["哥布林"] = 1;
tbl_gl["红帽哥布林"] = 1;
tbl_gl["新手宠"] = 1;


Delegate.RegInit("FengBao_Init");

function Init_FengBao(_index)
        return 1;
end

function DelS(s)
        assert(type(s)=="string")
        return s:match("^%s+(.-)%s+$")
end

function FengBao_Init()
        if (FengBao_index == nil) then
                FengBao_index = NL.CreateNpc("lua/Module/FengBao.lua", "Init_FengBao");
                Char.SetData(FengBao_index,%对象_形象%,10414);
                Char.SetData(FengBao_index,%对象_原形%,10414);
                Char.SetData(FengBao_index,%对象_X%,78);
                Char.SetData(FengBao_index,%对象_Y%,77);
                Char.SetData(FengBao_index,%对象_地图%,777);
                Char.SetData(FengBao_index,%对象_方向%,4);
                Char.SetData(FengBao_index,%对象_名字%,"封包NPC");
                NLG.UpChar(FengBao_index);
                Char.SetWindowTalkedEvent("lua/Module/FengBao.lua", "FengBao_WindowEvent", FengBao_index);
        end
        if (PetMarket_index == nil) then
                PetMarket_index = NL.CreateNpc("lua/Module/FengBao.lua", "Init_FengBao");
                Char.SetData(PetMarket_index,%对象_形象%,10414);
                Char.SetData(PetMarket_index,%对象_原形%,10414);
                Char.SetData(PetMarket_index,%对象_X%,78);
                Char.SetData(PetMarket_index,%对象_Y%,77);
                Char.SetData(PetMarket_index,%对象_地图%,777);
                Char.SetData(PetMarket_index,%对象_方向%,4);
                Char.SetData(PetMarket_index,%对象_名字%,"封包NPC");
                NLG.UpChar(PetMarket_index);
                Char.SetWindowTalkedEvent("lua/Module/FengBao.lua", "PetMarket_WindowEvent", PetMarket_index);
        end
        Protocol.OnRecv("lua/Module/FengBao.lua", "DropPet_Recv", %RECV_DP%);
        Protocol.OnRecv("lua/Module/FengBao.lua", "PickItem_Recv", %RECV_PI%);
        Protocol.OnRecv("lua/Module/FengBao.lua", "KN_Recv", %RECV_KN%);
        Protocol.OnRecv("lua/Module/FengBao.lua", "KS_Recv", %RECV_KS%);
end

function KS_Recv(fd,head,packet)
        local player = Protocol.GetCharByFd(fd);
        for i=0,4 do
                local PetPtr = Char.GetPet(player,i);
                local PetName = Char.GetData(PetPtr,%对象_宠名%);
                if check_msg(PetName,"售-") or check_msg(PetName,"0") then
                        NLG.SystemMessage(player,"这不是一个合法的宠物名字!");
                        return 1;
                end
        end
        return 0;
end

function KN_Recv(fd,head,packet)
        local player = Protocol.GetCharByFd(fd);
        local SplitArray = Split(packet,":");
        local PetName = SplitArray[2];

        if check_msg(PetName,"售-") or check_msg(PetName,"0") or check_msg(PetName,"-") then
                NLG.SystemMessage(player,"这不是一个合法的宠物名字!");
                return 1;
        end
       
        return 0;
end

function PickItem_Recv(fd,head,packet)
        local player = Protocol.GetCharByFd(fd);
        local num, playertbl = NLG.GetFrontChar(player, %对象类型_宠%);
        if (num == 0) then
                return;
        end
        local PetPtr = playertbl[1];
        local PetName = Char.GetData(PetPtr,%对象_宠名%);

        local PetMoney = 0;
        local PetMoneyLen = 0;
        local PetMoneyType = "K";
        local PetCDK = "";
        local PlayerCDK = "";
        local PlayerName = "";
        local RealName = "";

        if check_msg(PetName,"售-") then
                local SplitArray = Split(PetName,"-");
                PetMoney = SplitArray[3];

                if check_msg(PetMoney,".") then
                        return 0;
                end
               
                PetMoneyLen = tonumber(string.len(PetMoney))-1;
                PetMoneyType = string.sub(PetMoney,PetMoneyLen+1,PetMoneyLen+1);
                PetMoney = string.sub(PetMoney,1,PetMoneyLen);
       
                PetCDK = Char.GetData(PetPtr,%对象_主人CDK%);
                PlayerCDK = Char.GetData(player,%对象_账号%);
                PlayerName = Char.GetData(player,%对象_名字%);
                RealName = Char.GetData(PetPtr,%对象_名字%);
               
                if (PetCDK==PlayerCDK) then
                        Char.SetData(PetPtr,%对象_宠名%,PetMoney);
                        return 0;
                end
        else
                if (PetCDK==PlayerCDK) then
                        return 0;
                end
        end
       
        if check_msg(PetName,"售-") then

                local pet_indexA = PetPtr;
                local petIndex = Char.GetData(pet_indexA,1);
                local arr_rank1 = Pet.GetArtRank(pet_indexA,%宠档_体成%);
                local arr_rank11 = Pet.FullArtRank(pet_indexA,%宠档_体成%);
                local arr_rank2 = Pet.GetArtRank(pet_indexA,%宠档_力成%);
                local arr_rank21 = Pet.FullArtRank(pet_indexA,%宠档_力成%);
                local arr_rank3 = Pet.GetArtRank(pet_indexA,%宠档_强成%);
                local arr_rank31 = Pet.FullArtRank(pet_indexA,%宠档_强成%);
                local arr_rank4 = Pet.GetArtRank(pet_indexA,%宠档_敏成%);
                local arr_rank41 = Pet.FullArtRank(pet_indexA,%宠档_敏成%);
                local arr_rank5 = Pet.GetArtRank(pet_indexA,%宠档_魔成%);
                local arr_rank51 = Pet.FullArtRank(pet_indexA,%宠档_魔成%);
                local a1 = math.abs(arr_rank1 - arr_rank11);
                local a2 = math.abs(arr_rank2 - arr_rank21);
                local a3 = math.abs(arr_rank3 - arr_rank31);
                local a4 = math.abs(arr_rank4 - arr_rank41);
                local a5 = math.abs(arr_rank5 - arr_rank51);
                local a6 = a1 + a2+ a3+ a4+ a5;
                local OneLevel = Char.GetData(pet_indexA,52);
                local writestr = "";
                if (OneLevel > 1) then
                        writestr = "野生:是,"
                else
                        writestr = "野生:否,"
                end
                if(a6==0)then
                        writestr = writestr.."宠物名:"..RealName..",等级:"..Char.GetData(PetPtr,%对象_等级%)..",技能栏:"..Char.GetData(PetPtr,%宠物_技能栏%).."\\n销售价:"..PetMoney..PetMoneyType..""
                                        .."\\n";
                                        local XZNum1 = Char.GetData(pet_indexA,%对象_闪躲%);
                                        local XZNum2 = Char.GetData(pet_indexA,%对象_命中%);
                                        local XZNum3 = Char.GetData(pet_indexA,%对象_反击%);
                                        local XZNum4 = Char.GetData(pet_indexA,%对象_必杀%);       
                                        writestr = writestr.."闪躲:"..XZNum1..",命中:"..XZNum2..",反击:"..XZNum3..",必杀:"..XZNum4.."\\n";
                                        XZNum1 = Char.GetData(pet_indexA,%对象_抗毒%);
                                        XZNum2 = Char.GetData(pet_indexA,%对象_抗睡%);
                                        XZNum3 = Char.GetData(pet_indexA,%对象_抗石%);
                                        XZNum4 = Char.GetData(pet_indexA,%对象_抗醉%);       
                                        local XZNum5 = Char.GetData(pet_indexA,%对象_抗乱%);
                                        local XZNum6 = Char.GetData(pet_indexA,%对象_抗忘%);
                                        writestr = writestr.."毒:"..XZNum1..",睡:"..XZNum2..",石:"..XZNum3..",醉:"..XZNum4..",乱:"..XZNum5..",忘:"..XZNum6.."\\n"
                                        .."\\n该宠物总掉档数: 掉["..a6.."]档\\n\\n是否购买?";
                else
                        writestr = writestr.."宠物名:"..RealName..",等级:"..Char.GetData(PetPtr,%对象_等级%)..",技能栏:"..Char.GetData(PetPtr,%宠物_技能栏%).."\\n销售价:"..PetMoney..PetMoneyType..""
                                        .."\\n体力["..arr_rank1.."/"..arr_rank11.."]档(-"..a1..")\\n"
                                        .."力量["..arr_rank2.."/"..arr_rank21.."]档(-"..a2..")\\n防御["..arr_rank3.."/"..arr_rank31.."]档(-"..a3..")\\n"
                                        .."敏捷["..arr_rank4.."/"..arr_rank41.."]档(-"..a4..")\\n魔法["..arr_rank5.."/"..arr_rank51.."]档(-"..a5..")\\n";
                                        local XZNum1 = Char.GetData(pet_indexA,%对象_闪躲%);
                                        local XZNum2 = Char.GetData(pet_indexA,%对象_命中%);
                                        local XZNum3 = Char.GetData(pet_indexA,%对象_反击%);
                                        local XZNum4 = Char.GetData(pet_indexA,%对象_必杀%);       
                                        writestr = writestr.."闪躲:"..XZNum1..",命中:"..XZNum2..",反击:"..XZNum3..",必杀:"..XZNum4.."\\n";
                                        XZNum1 = Char.GetData(pet_indexA,%对象_抗毒%);
                                        XZNum2 = Char.GetData(pet_indexA,%对象_抗睡%);
                                        XZNum3 = Char.GetData(pet_indexA,%对象_抗石%);
                                        XZNum4 = Char.GetData(pet_indexA,%对象_抗醉%);       
                                        local XZNum5 = Char.GetData(pet_indexA,%对象_抗乱%);
                                        local XZNum6 = Char.GetData(pet_indexA,%对象_抗忘%);
                                        writestr = writestr.."毒:"..XZNum1..",睡:"..XZNum2..",石:"..XZNum3..",醉:"..XZNum4..",乱:"..XZNum5..",忘:"..XZNum6.."\\n"
                                        .."该宠物总档数: ["..(arr_rank1+arr_rank2+arr_rank3+arr_rank4+arr_rank5).."/"..(arr_rank11+arr_rank21+arr_rank31+arr_rank41+arr_rank51).."]掉("..a6..")档\\n\\n是否购买?";
                end
                NLG.ShowWindowTalked( player, PetMarket_index, %窗口_信息框%, %按钮_确定关闭%, PetPtr, writestr);
                return 1;
        else
                return 0;
        end
end

function DropPet_Recv(fd,head,packet)
        local player = Protocol.GetCharByFd(fd);
       
       
        if Char.GetData(player,%对象_地图%) ~= 10 or Char.GetData(player,%对象_地图%) ~= 1000 then
                local SplitArray = Split(packet,":");
                local PetSlot = tonumber(SplitArray[3]);
                local _Pet = Char.GetPet(player,PetSlot);
                local bh = Char.GetData(_Pet,%对象_原名%);


                if tbl_gl[bh] ~= nil then
                        Char.DelSlotPet(player,PetSlot)
                        NLG.SystemMessage(player,"这类宠物丢地直接消失了。");
                        return 1;
                end
        end       
       
       
       
        local SplitArray = Split(packet,":");
        local PetSlot = tonumber(SplitArray[3]);
        local _Pet = Char.GetPet(player,PetSlot);
        local PetName = Char.GetData(_Pet,%对象_名字%);
        local PetUserName = Char.GetData(_Pet,%对象_宠名%);

        if check_msg(PetUserName,"售-") then
                NLG.SystemMessage(player,"请先更改宠物的名字再放出!");
                return 1;
        end

        if tonumber(PetUserName)~=nil then
                local pet_indexA = _Pet;

                local petIndex = Char.GetData(pet_indexA,1);
                local arr_rank1 = Pet.GetArtRank(pet_indexA,%宠档_体成%);
                local arr_rank11 = Pet.FullArtRank(pet_indexA,%宠档_体成%);
                local arr_rank2 = Pet.GetArtRank(pet_indexA,%宠档_力成%);
                local arr_rank21 = Pet.FullArtRank(pet_indexA,%宠档_力成%);
                local arr_rank3 = Pet.GetArtRank(pet_indexA,%宠档_强成%);
                local arr_rank31 = Pet.FullArtRank(pet_indexA,%宠档_强成%);
                local arr_rank4 = Pet.GetArtRank(pet_indexA,%宠档_敏成%);
                local arr_rank41 = Pet.FullArtRank(pet_indexA,%宠档_敏成%);
                local arr_rank5 = Pet.GetArtRank(pet_indexA,%宠档_魔成%);
                local arr_rank51 = Pet.FullArtRank(pet_indexA,%宠档_魔成%);
                local a1 = math.abs(arr_rank1 - arr_rank11);
                local a2 = math.abs(arr_rank2 - arr_rank21);
                local a3 = math.abs(arr_rank3 - arr_rank31);
                local a4 = math.abs(arr_rank4 - arr_rank41);
                local a5 = math.abs(arr_rank5 - arr_rank51);
                local a6 = a1 + a2+ a3+ a4+ a5;

                local actural_price = math.floor(tonumber(PetUserName));
               
                if actural_price > 999 then
                Char.SetData(_Pet,%对象_宠名%,"售-"..a6.."D-"..tostring(actural_price).."G");
                else
                Char.SetData(_Pet,%对象_宠名%,"售-"..a6.."D-"..tostring(actural_price).."K");
                end

                NLG.SystemMessage(player,"如未售出,请于48小时内(2天)领回,否则宠物将消失(无法找回)!");
        end

        return 0;
end

function PetMarket_WindowEvent( _index_me, _index_tome, _sequence, _select, _data)       
        if (Pet.IsPet(_sequence) and _select == %按钮_确定%) then
                local PetPtr = _sequence;
                local PlayerName = Char.GetData(_index_tome,%对象_名字%);
                local PlayerCDK = Char.GetData(_index_tome,%对象_账号%);
                local RealName = Char.GetData(PetPtr,%对象_名字%);
                local PetName = Char.GetData(PetPtr,%对象_宠名%);
                local PetOwner = Char.GetData(PetPtr,%对象_主人CDK%);

                local SplitArray = Split(PetName,"-");
                local PetMoney = SplitArray[3];
                local PetMoneyLen = tonumber(string.len(PetMoney))-1;
                local PetMoneyType = string.sub(PetMoney,PetMoneyLen+1,PetMoneyLen+1);
                PetMoney = string.sub(PetMoney,1,PetMoneyLen);
                PetMoney = tonumber(PetMoney);

                if PetMoneyType == "K" then
                if (Char.ItemNum(_index_tome,622848)<PetMoney or PetMoney<1) then
                        NLG.SystemMessage(_index_tome,"您的金卡不够!");
                        return
                end
                if (Char.DelItem(_index_tome,622848,PetMoney)==0) then
                        NLG.SystemMessage(_index_tome,"您的金卡不够!");
                        return
                end

                local query = "Update tbl_user Set PetMoney=PetMoney+"..PetMoney.." Where CdKey='"..PetOwner.."'";
                local Result = SQL.Run(query);
                end

                if PetMoneyType == "G" then
                local PlayerMoney = Char.GetData(_index_tome,%对象_金币%);
                if (PlayerMoney<PetMoney or PetMoney<1) then
                        NLG.SystemMessage(_index_tome,"您的魔币不够!");
                        return
                end

                Char.SetData(_index_tome,%对象_金币%,PlayerMoney-PetMoney);
                NLG.UpChar(_index_tome);

                local query = "Update tbl_user Set PetMB=PetMB+"..PetMoney.." Where CdKey='"..PetOwner.."'";
                local Result = SQL.Run(query);
                end

                Char.SetData(PetPtr,%对象_主人CDK%,PlayerCDK);
                Char.SetData(PetPtr,%对象_账号%,PlayerCDK);
                Char.SetData(PetPtr,%对象_名字%,RealName);
                Char.SetData(PetPtr,%对象_宠名%,RealName);
               
                NLG.SystemMessage(_index_tome,RealName.."购买成功!请再次点击该宠物领走它!");
                return;
        end
end


回复

使用道具 举报

全部评论

暂无评论,期待您打破宁静

TA的帖子
相关帖子
  • admin 2025-5-10

    #先到阿斯提亞鎮 打完UD找到NPC卡蓮 拿到給LBLS 的信 然後去打LBLS 再打完 LBLS以後 ...

  • admin 2025-5-10

    用本目录下文件"内容"覆盖服务器data目录下同名文件相应"内容" 请勿直接覆盖文件本身 ...

  • admin 2025-5-11

    ############## 城城的武器强化系统 ############## #剑1 block StrCmpChat == 700 W ...

  • admin 2025-5-11

    魔力宝贝手动架设中遇到的问题及解决方法魔力宝贝手动架设教程—魔力私服,魔力宝贝私 ...

  • admin 2025-5-12

    起始地点法兰城的竞技场的贝贝(34.36)头目战╳ 必要条件---必要等级Lv1 职业限定---建 ...

  • admin 2025-5-12

    1.与里谢里雅堡的H1N1防疫宣传员(28,77)说话,取得"防疫小口罩"。 图例物品名称等级种 ...

  • admin 2025-5-12

    魅惑的哈密瓜无取得宠物「哈密瓜公主」╳╳○ 起始地点魔法大学头目战╳ 必要条件--- ...

  • admin 2025-5-12

    起始地点法兰城的里谢里雅堡头目战○ 必要条件---必要等级--- 职业限定---建议等级--- ...

  • admin 2025-5-12

    起始地点法兰城的里谢里雅堡头目战○ 必要条件---必要等级--- 职业限定---建议等级--- ...

  • admin 2025-5-12

    起始地点法兰城的冒险者旅馆头目战○ 必要条件---必要等级--- 职业限定---建议等级LV8 ...

发布 联系QQ