魔力宝贝

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

[GP] namechanger.lua;--在线改名卡(物品编号可进入namechanger.lua进...

[复制链接]
发表于 前天 02:53 | 显示全部楼层 |阅读模式
--                 【【【基础NPC设置】】】
------------------------------------------------------------------------------
local NpcName = "账号管理员"                        --Npc名称(同时也是脚本名称)
local NpcMapPos = {0, 1000, 66, 83}                --Npc地图坐标
local NpcImage =99261                                        --Npc图档104561
local NpcDir = 4                                                --Npc方向(0为左上,顺时针转)
nameChangerNPC=0;
------------------------------------------------------------------------------
------------------------------------------------------------------------------
--                 【【【积分提取设置】】】
------------------------------------------------------------------------------
local ItemName = "改名卡"                        --物品名称(积分卡)
local ItemID = 50408                                --物品ID(积分卡ID)
local ItemNum = 1                                --消耗道具数量
------------------------------------------------------------------------------
Global_Reg.RegInit("MateChage_Init");
function dyyGQGet_Item_pos(Char_Index,Item_Index)
        local number,pos=-1;
        for number=8,27 do
                if(Char.GetItemIndex(Char_Index,number) == Item_Index)then
                        pos = number;
                        break;                       
                end

        end
        return pos;
end
function MateChage_Init()
        initchanger();
        return 0;
end
function GPDDitemMy(CharIndex,ItemIndex)
        if(Item.GetData(ItemIndex,%道具_ID%)== ItemID)then
                nameChangerTalked(nameChangerNPC,CharIndex);
                return -1;
        end
        return 0;
end

function trim (s)
   return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end

function getIntPart(x)
if x <= 0 then
   return math.ceil(x);
end

if math.ceil(x) == x then
   x = math.ceil(x);
else
   x = math.ceil(x) - 1;
end
return x;
end
function MateChageNpc_Init(index)
        return true;
end


function initchanger(nameChangerNPC)

                nameChangerNPC = NL.CreateNpc(nil, "MateChageNpc_Init");
                Char.SetData(nameChangerNPC,%对象_形象%,NpcImage);
                Char.SetData(nameChangerNPC,%对象_原形%,NpcImage);
                Char.SetData(nameChangerNPC,%对象_X%,NpcMapPos[3]);
                Char.SetData(nameChangerNPC,%对象_Y%,NpcMapPos[4]);
                Char.SetData(nameChangerNPC,%对象_地图%,NpcMapPos[2]);
                Char.SetData(nameChangerNPC,%对象_方向%,NpcDir);
                Char.SetData(nameChangerNPC,%对象_原名%,NpcName);
                LuaNpcIndex["nameChanger_index"]=nameChangerNPC;
                InstallNpc("nameChanger_index",nameChangerNPC);
                Char.SetWindowTalkedEvent(nil,"nameChangerWTalked",nameChangerNPC);
                Char.SetTalkedEvent(nil,"nameChangerTalked", nameChangerNPC);
                NLG.UpChar(nameChangerNPC);
                return true
end

function nameChangerTalked(_MeIndex,_PlayerIndex)
       

    local NameChanged = 0;
    local jinbinum = tonumber(Char.ItemNum(_PlayerIndex,ItemID));

        if(jinbinum <ItemNum)then
                NLG.ShowWindowTalked(_PlayerIndex,%视窗_讯息框%,%按钮_取消%,0,"\n        ◆" .. NpcName .. "◆\n\n您好,"..Char.GetData(_PlayerIndex,%对象_原名%).." 这里是改名服务NPC。\\n\\n我可以帮您改名,每次改名费用是"..ItemNum..""..ItemName.."。\\n\\n似乎您的"..ItemName.."数量不足呢!\\n谢谢您对魔力的支持!\\n",_MeIndex);
                return;
        else
                NLG.ShowWindowTalked(_PlayerIndex,%视窗_输入框%,%按钮_确定%,1,"\n        ◆" .. NpcName .. "◆\n\n您好,"..Char.GetData(_PlayerIndex,%对象_原名%).." 这里是改名服务NPC。\\n\\n我可以帮您改名。\\n\\n您可以直接在下面输入您想要改的名字,然后按下确定按钮。\\n\\n谢谢您对魔力的支持!\\n",_MeIndex);
                return;
        end
end

function nameChangerWTalked(_MeIndex,_PlayerIndex,_seqno,_select,_data)
       

        if(tonumber(_seqno)==1 and tonumber(_select)==%按钮_确定% and _data~="")then
                local toname = trim(_data);
                local length = string.len(toname);

                 local jinbinum = tonumber(Char.ItemNum(_PlayerIndex,ItemID));

               
                local NameChanged=0;
                local level = Char.GetData(_PlayerIndex,%对象_等级%);
               
                if(_data == Char.GetData(_PlayerIndex,%对象_原名%))then
                        NLG.ShowWindowTalked(_PlayerIndex,%视窗_讯息框%,%按钮_取消%,0,"\n        ◆" .. NpcName .. "◆\n\n那个...似乎你要改的名字和现在的名字没有什么变化呢...\\n\\n您在确定下您的新名字吧!\\n\\n谢谢您对魔力的支持!\\n",_MeIndex);
                        return;
                end

                if(jinbinum<ItemNum)then
                        NLG.ShowWindowTalked(_PlayerIndex,%视窗_讯息框%,%按钮_取消%,0,"\n        ◆" .. NpcName .. "◆\n\n您好,"..Char.GetData(_PlayerIndex,%对象_原名%).." 这里是改名服务。\\n\\n我可以帮您改名,每次改名费用是"..ItemNum..""..ItemName.."。\\n\\n似乎您的"..ItemName.."数量不足呢!\\n谢谢您对魔力的支持!\\n",_MeIndex);
                        return;
                end

                if(length<=1)then
                        NLG.ShowWindowTalked(_PlayerIndex,%视窗_讯息框%,%按钮_取消%,0,"\n        ◆" .. NpcName .. "◆\n\n提交的名字长度太短了哦!不要全是空格哦!\n\\n\\n\\n谢谢您对魔力的支持!\\n",_MeIndex);
                        return;
                end

                if(string.find(_data,"%%")~=nil or string.find(_data,"%'")~=nil or string.find(_data,"%`")~=nil or string.find(_data,"%\"")~=nil or string.find(_data,"%;")~=nil or string.find(_data,"%\\/")~=nil or string.find(_data,"%\\")~=nil or string.find(_data,"%[")~=nil or string.find(_data,"%]")~=nil or string.find(_data,"% ")~=nil)then
                        NLG.ShowWindowTalked(_PlayerIndex,%视窗_讯息框%,%按钮_取消%,0,"\n        ◆" .. NpcName .. "◆\n\n提交的名字包含了禁止的字符哦!请修改!\\n谢谢您对魔力的支持!\\n(请不要含有空格哦)",_MeIndex);
                        return;
                end
                local keyword = {'gm','GM','G-M','Gm','群','君羊','家','你妈','逼','艹','操','傻','族','服','草',' '};
                for i = 1, #keyword do
                        if string.find(_data, keyword[i]) ~= nil then
                                NLG.ShowWindowTalked(_PlayerIndex,%视窗_讯息框%,%按钮_取消%,0,"\n        ◆" .. NpcName .. "◆\n\n提交的名字包含了禁止的字符哦!请修改!\\n谢谢您对魔力的支持!\\n",_MeIndex);       
                                --break;
                                return
                        end       
                end
               
                local query = "select `Name` from tbl_character Where Name='".._data.."'";
                local ret = SQL.Run(query);
                if(type(ret)=="table" and ret["0_0"]~=nil)then
                        NLG.ShowWindowTalked(_PlayerIndex,%视窗_讯息框%,%按钮_取消%,0,"\n        ◆" .. NpcName .. "◆\n\n提交的名字已经有人在用了哦!?胄薷南拢\n谢谢您对魔力的支持!\\n",_MeIndex);
                        return;
                end
                local newstr, count = string.gsub(_data, "[&#]+[0-9]+[;]", "**");
                local totalLength = string.len(newstr);
                if(totalLength>16)then
                        NLG.ShowWindowTalked(_PlayerIndex,%视窗_讯息框%,%按钮_取消%,0,"\n        ◆" .. NpcName .. "◆\n\n提交的名字太长了哦!请修改!\\n\\n最大长度是16个半角字符或8个全角字符\\n也就是16个字母或8个中文哦!\\n谢谢您对魔力的支持!\\n",_MeIndex);
                        return;
                end
                NLG.DelItem(_PlayerIndex,tonumber(ItemID),ItemNum);
                NLG.SystemMessage(_PlayerIndex,"名称更换成功感谢您对魔力的支持");
                local query = "Update tbl_character set `Name` = '".._data.."' Where Cdkey = '"..Char.GetData(_PlayerIndex,%对象_帐号%).."' and Name='"..Char.GetData(_PlayerIndex,%对象_原名%).."'";
                local ret = SQL.Run(query);
                Char.SetData(_PlayerIndex,%对象_原名%,_data);
                NLG.UpChar(_PlayerIndex);
               
                NLG.ShowWindowTalked(_PlayerIndex,%视窗_讯息框%,%按钮_取消%,3,"\n        ◆" .. NpcName .. "◆\n\n恭喜您,您的名字已经成功的改为了".._data.."哦!\\n\\n",_MeIndex);
                return;
        end

        return;
end
function runsql(n,query)
  n =coro.transfer(coro.main,SQL.Run(query));

end

回复

使用道具 举报

Archiver|魔力研究社

GMT+8, 2025-5-12 18:59 , Processed in 0.099858 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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