魔力宝贝

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

[GA] FengBao.lua--封包NPC

[复制链接]
发表于 前天 02:04 | 显示全部楼层 |阅读模式
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


回复

使用道具 举报

Archiver|魔力研究社

GMT+8, 2025-5-12 18:24 , Processed in 0.115936 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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