亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? playuser.pas

?? 飄飄M2 本人更新加入英雄系統 修正BUG 全套的源碼上傳 不看要后悔??!
?? PAS
字號:
unit PlayUser;

interface
uses
  Windows, Classes, SysUtils, StrUtils, ExtCtrls, EngineAPI, EngineType;
const
  MAXBAGITEM = 46;
  RM_MENU_OK = 10309;

procedure InitPlayUser();
procedure UnInitPlayUser();
procedure LoadCheckItemList();
procedure UnLoadCheckItemList();

procedure InitMsgFilter();
procedure UnInitMsgFilter();
procedure LoadMsgFilterList();
procedure UnLoadMsgFilterList();

function IsFilterMsg(var sMsg: string): Boolean;
procedure FilterMsg(PlayObject: TObject; pszSrcMsg: PChar; pszDestMsg: PChar; nDestLen: Integer); stdcall;

function CheckCanDropItem(PlayObject: TPlayObject; pszItemName: PChar): Boolean; stdcall;
function CheckCanDealItem(PlayObject: TPlayObject; pszItemName: PChar): Boolean; stdcall;
function CheckCanStorageItem(PlayObject: TPlayObject; pszItemName: PChar): Boolean; stdcall;
function CheckCanRepairItem(PlayObject: TPlayObject; pszItemName: PChar): Boolean; stdcall;
implementation

uses HUtil32, PlugShare;

procedure InitPlayUser();
begin
  LoadCheckItemList();
  TPlayObject_SetCheckClientDropItem(CheckCanDropItem);
  TPlayObject_SetCheckClientDealItem(CheckCanDealItem);
  TPlayObject_SetCheckClientStorageItem(CheckCanStorageItem);
  TPlayObject_SetCheckClientRepairItem(CheckCanRepairItem);
end;

procedure UnInitPlayUser();
begin
  TPlayObject_SetCheckClientDropItem(nil);
  TPlayObject_SetCheckClientDealItem(nil);
  TPlayObject_SetCheckClientStorageItem(nil);
  TPlayObject_SetCheckClientRepairItem(nil);
  UnLoadCheckItemList();
end;

procedure LoadCheckItemList();
var
  I: Integer;
  sFileName: string;
  LoadList: Classes.TStringList;
  sLineText: string;
  sItemName: string;
  sCanDrop: string;
  sCanDeal: string;
  sCanStorage: string;
  sCanRepair: string;
  CheckItem: pTCheckItem;
begin
  sFileName := '.\CheckItemList.txt';

  if g_CheckItemList <> nil then begin
    UnLoadCheckItemList();
  end;
  g_CheckItemList := Classes.TList.Create;
  if not FileExists(sFileName) then begin
    LoadList := Classes.TStringList.Create();
    LoadList.Add(';引擎插件禁止物品配置文件');
    LoadList.Add(';物品名稱'#9'扔'#9'交易'#9'存'#9'修');
    LoadList.SaveToFile(sFileName);
    LoadList.Free;
    Exit;
  end;
  LoadList := Classes.TStringList.Create();
  LoadList.LoadFromFile(sFileName);
  for I := 0 to LoadList.Count - 1 do begin
    sLineText := LoadList.Strings[I];
    if (sLineText <> '') and (sLineText[1] <> ';') then begin
      sLineText := GetValidStr3(sLineText, sItemName, [' ', #9]);
      sLineText := GetValidStr3(sLineText, sCanDrop, [' ', #9]);
      sLineText := GetValidStr3(sLineText, sCanDeal, [' ', #9]);
      sLineText := GetValidStr3(sLineText, sCanStorage, [' ', #9]);
      sLineText := GetValidStr3(sLineText, sCanRepair, [' ', #9]);
      if (sItemName <> '') then begin
        New(CheckItem);
        CheckItem.szItemName := sItemName;
        CheckItem.boCanDrop := sCanDrop = '1';
        CheckItem.boCanDeal := sCanDeal = '1';
        CheckItem.boCanStorage := sCanStorage = '1';
        CheckItem.boCanRepair := sCanRepair = '1';
        g_CheckItemList.Add(CheckItem);
      end;
    end;
  end;
  LoadList.Free;
end;
procedure UnLoadCheckItemList();
var
  I: Integer;
  CheckItem: pTCheckItem;
begin
  for I := 0 to g_CheckItemList.Count - 1 do begin
    CheckItem := g_CheckItemList.Items[I];
    Dispose(CheckItem);
  end;
  g_CheckItemList.Free;
  g_CheckItemList := nil;
end;
function CheckCanDropItem(PlayObject: TPlayObject; pszItemName: PChar): Boolean; stdcall;
resourcestring
  sMsg = '此物品禁止扔在地上?。。?#039;;
var
  I: Integer;
  CheckItem: pTCheckItem;
  NormNpc: TNormNpc;
begin
  Result := True;
  for I := 0 to g_CheckItemList.Count - 1 do begin
    CheckItem := g_CheckItemList.Items[I];
    if (CheckItem.boCanDrop) and (CompareText(CheckItem.szItemName, pszItemName) = 0) then begin
      NormNpc := TNormNpc_GetManageNpc();
      TBaseObject_SendMsg(PlayObject, NormNpc, RM_MENU_OK, 0, Integer(PlayObject), 0, 0, PChar(sMsg));
      Result := False;
      break;
    end;
  end;
end;
function CheckCanDealItem(PlayObject: TPlayObject; pszItemName: PChar): Boolean; stdcall;
resourcestring
  sMsg = '此物品禁止交易?。。?#039;;
var
  I: Integer;
  CheckItem: pTCheckItem;
  NormNpc: TNormNpc;
begin
  Result := True;
  for I := 0 to g_CheckItemList.Count - 1 do begin
    CheckItem := g_CheckItemList.Items[I];
    if (CheckItem.boCanDeal) and (CompareText(CheckItem.szItemName, pszItemName) = 0) then begin
      NormNpc := TNormNpc_GetManageNpc();
      TBaseObject_SendMsg(PlayObject, NormNpc, RM_MENU_OK, 0, Integer(PlayObject), 0, 0, PChar(sMsg));
      Result := False;
      break;
    end;
  end;
end;
function CheckCanStorageItem(PlayObject: TPlayObject; pszItemName: PChar): Boolean; stdcall;
resourcestring
  sMsg = '此物品禁止存倉庫?。。?#039;;
var
  I: Integer;
  CheckItem: pTCheckItem;
  NormNpc: TNormNpc;
begin
  Result := True;
  for I := 0 to g_CheckItemList.Count - 1 do begin
    CheckItem := g_CheckItemList.Items[I];
    if (CheckItem.boCanStorage) and (CompareText(CheckItem.szItemName, pszItemName) = 0) then begin
      NormNpc := TNormNpc_GetManageNpc();
      TBaseObject_SendMsg(PlayObject, NormNpc, RM_MENU_OK, 0, Integer(PlayObject), 0, 0, PChar(sMsg));
      Result := False;
      break;
    end;
  end;
end;
function CheckCanRepairItem(PlayObject: TPlayObject; pszItemName: PChar): Boolean; stdcall;
resourcestring
  sMsg = '此物品禁止修理?。?!';
var
  I: Integer;
  CheckItem: pTCheckItem;
  NormNpc: TNormNpc;
begin
  Result := True;
  for I := 0 to g_CheckItemList.Count - 1 do begin
    CheckItem := g_CheckItemList.Items[I];
    if (CheckItem.boCanRepair) and (CompareText(CheckItem.szItemName, pszItemName) = 0) then begin
      NormNpc := TNormNpc_GetManageNpc();
      TBaseObject_SendMsg(PlayObject, NormNpc, RM_MENU_OK, 0, Integer(PlayObject), 0, 0, PChar(sMsg));
      Result := False;
      break;
    end;
  end;
end;
//==============================================================================
function IsFilterMsg(var sMsg: string): Boolean;
var
  I: Integer;
  nLen: Integer;
  sReplaceText: string;
  sFilterText: string;
  FilterMsg: pTFilterMsg;
begin
  Result := False;
  if g_MsgFilterList = nil then begin
    Result := True;
    Exit;
  end;
  for I := 0 to g_MsgFilterList.Count - 1 do begin
    FilterMsg := g_MsgFilterList.Items[I];
    if (FilterMsg.sFilterMsg <> '') and (AnsiContainsText(sMsg, FilterMsg.sFilterMsg)) then begin
      sMsg := AnsiReplaceText(sMsg, FilterMsg.sFilterMsg, FilterMsg.sNewMsg);
      Result := True;
      break;
    end;
  end;
end;

procedure FilterMsg(PlayObject: TObject; pszSrcMsg: PChar; pszDestMsg: PChar; nDestLen: Integer);
var
  sSrcMsg: string;
begin
  sSrcMsg := StrPas(pszSrcMsg);
  IsFilterMsg(sSrcMsg);
  nDestLen := Length(sSrcMsg);
  Move(sSrcMsg[1], pszDestMsg^, nDestLen);
end;

procedure LoadMsgFilterList();
var
  I: Integer;
  sFileName: string;
  LoadList: Classes.TStringList;
  sLineText: string;
  sFilterMsg: string;
  sNewMsg: string;
  FilterMsg: pTFilterMsg;
begin
  sFileName := '.\MsgFilterList.txt';
  g_MsgFilterList.Clear;
  if not FileExists(sFileName) then begin
    LoadList := Classes.TStringList.Create;
    LoadList.Add(';引擎插件消息過濾配置文件');
    LoadList.Add(';過濾消息'#9'替換消息');
    LoadList.SaveToFile(sFileName);
    LoadList.Free;
    Exit;
  end;
  LoadList := Classes.TStringList.Create();
  LoadList.LoadFromFile(sFileName);
  for I := 0 to LoadList.Count - 1 do begin
    sLineText := LoadList.Strings[I];
    if (sLineText <> '') and (sLineText[1] <> ';') then begin
      sLineText := GetValidStr3(sLineText, sFilterMsg, [' ', #9]);
      sLineText := GetValidStr3(sLineText, sNewMsg, [' ', #9]);
      if (sFilterMsg <> '') then begin
        New(FilterMsg);
        FilterMsg^.sFilterMsg := sFilterMsg;
        FilterMsg^.sNewMsg := sNewMsg;
        g_MsgFilterList.Add(FilterMsg);
      end;
    end;
  end;
  LoadList.Free;
end;

procedure UnLoadMsgFilterList();
var
  I: Integer;
begin
  for I := 0 to g_MsgFilterList.Count - 1 do begin
    Dispose(g_MsgFilterList.Items[I]);
  end;
  g_MsgFilterList.Free;
  g_MsgFilterList := nil;
end;

procedure InitMsgFilter();
begin
  g_MsgFilterList := Classes.TList.Create;
  LoadMsgFilterList();
  TPlayObject_SetHookFilterMsg(FilterMsg);
end;

procedure UnInitMsgFilter();
begin
  TPlayObject_SetHookFilterMsg(nil);
  UnLoadMsgFilterList();
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
自拍偷拍欧美激情| 免费在线观看不卡| 久久草av在线| 色国产综合视频| 2017欧美狠狠色| 亚洲国产日韩综合久久精品| 成人国产视频在线观看| 精品日韩99亚洲| 视频一区国产视频| 在线免费观看成人短视频| 国产亚洲欧美在线| 韩国精品主播一区二区在线观看| 欧美怡红院视频| 亚洲三级小视频| 成人污污视频在线观看| 国产午夜精品福利| 国产精品乡下勾搭老头1| 日韩欧美一区在线| 免费观看30秒视频久久| 91麻豆精品久久久久蜜臀| 综合欧美一区二区三区| 成人高清视频免费观看| 中文字幕不卡的av| 国产成人亚洲精品狼色在线| 久久婷婷色综合| 精品亚洲欧美一区| 亚洲精品一区二区三区影院| 美腿丝袜在线亚洲一区| 欧美一区二区精美| 日韩黄色一级片| 日韩一区二区高清| 黑人巨大精品欧美黑白配亚洲| 日韩免费成人网| 麻豆成人久久精品二区三区红| 日韩欧美色电影| 国产一区二区免费在线| 欧美精彩视频一区二区三区| 成人伦理片在线| 亚洲精品v日韩精品| 欧美三级电影在线观看| 日韩电影在线观看一区| 日韩精品一区二| 成人免费毛片a| 亚洲欧美国产毛片在线| 欧美日韩精品三区| 久久精品国产99久久6| 国产亚洲视频系列| 色偷偷久久一区二区三区| 亚洲一二三四久久| 欧美大片日本大片免费观看| 国产激情91久久精品导航| 最新中文字幕一区二区三区| 欧美日韩国产综合一区二区| 久久不见久久见免费视频7| 日本一区二区三区四区在线视频| 色哟哟一区二区三区| 另类人妖一区二区av| 中文字幕不卡一区| 4438成人网| 懂色av中文字幕一区二区三区| 中文字幕一区二区日韩精品绯色| 精品视频一区 二区 三区| 九色综合狠狠综合久久| 亚洲日本乱码在线观看| 91精品国产91热久久久做人人| 国产成人精品aa毛片| 亚洲成人在线免费| 久久久国产精品麻豆| 欧美性大战久久久久久久蜜臀 | 欧美久久高跟鞋激| 国产美女视频91| 亚洲成人av在线电影| 久久久精品免费网站| 欧美在线不卡视频| 成人免费看片app下载| 男人操女人的视频在线观看欧美| 国产精品久久久久一区二区三区共| 欧美女孩性生活视频| jizzjizzjizz欧美| 国产一区二区视频在线| 午夜欧美电影在线观看| 中文字幕一区二区日韩精品绯色| 日韩三级伦理片妻子的秘密按摩| 色综合 综合色| 成人免费高清视频| 激情小说欧美图片| 天堂久久久久va久久久久| 中文字幕亚洲欧美在线不卡| 久久―日本道色综合久久| 欧美日韩mp4| 色狠狠桃花综合| 不卡视频在线看| 国产精品一区一区| 亚洲视频在线观看三级| 美女网站一区二区| 亚洲蜜臀av乱码久久精品蜜桃| 久久蜜桃av一区精品变态类天堂| 欧美精品高清视频| 欧洲精品一区二区三区在线观看| 91在线视频免费91| 成人丝袜高跟foot| 国产成人在线视频免费播放| 国内精品久久久久影院薰衣草| 五月天激情综合| 亚洲va天堂va国产va久| 亚洲美女屁股眼交| 一区二区三区在线不卡| 最好看的中文字幕久久| 专区另类欧美日韩| 亚洲欧美日韩久久| 亚洲色图一区二区| 亚洲靠逼com| 亚洲精品久久久久久国产精华液| 亚洲私人影院在线观看| 国产精品第四页| 亚洲色图20p| 亚洲最色的网站| 天天色综合天天| 日韩中文字幕区一区有砖一区| 日韩高清在线电影| 久久草av在线| 国产精品一区免费在线观看| 国产98色在线|日韩| 高清国产一区二区三区| 99久久综合狠狠综合久久| 99热国产精品| 欧美视频三区在线播放| 欧美男女性生活在线直播观看| 欧美久久高跟鞋激| 久久久久九九视频| 亚洲欧洲国产日本综合| 一区二区三区精品在线| 丝袜a∨在线一区二区三区不卡| 日本不卡一区二区三区高清视频| 激情综合色播激情啊| 成人精品国产一区二区4080| 色综合天天做天天爱| 欧美日韩免费高清一区色橹橹| 91精品国产综合久久蜜臀| 久久久久久久久久久久久久久99| 中文无字幕一区二区三区| 亚洲视频中文字幕| 日韩高清不卡一区| 国产精品1区2区| 欧美中文字幕不卡| 久久网这里都是精品| 亚洲视频一区二区在线观看| 日韩精品一二三| 成人丝袜18视频在线观看| 欧美日韩中文字幕一区二区| 久久精品综合网| 亚洲码国产岛国毛片在线| 日韩国产在线观看| 99久久免费精品高清特色大片| 欧美男人的天堂一二区| 中文字幕高清一区| 日韩国产精品91| 91色在线porny| 欧美成人精精品一区二区频| 亚洲视频你懂的| 九九国产精品视频| 欧美性一二三区| 国产欧美一区二区精品秋霞影院| 午夜精彩视频在线观看不卡| 福利一区在线观看| 日韩女优毛片在线| 亚洲精品高清在线| 丰满岳乱妇一区二区三区| 精品视频在线免费看| 国产精品国产三级国产普通话蜜臀 | 欧美这里有精品| 国产精品天美传媒| 日本中文一区二区三区| 99riav久久精品riav| 久久久久88色偷偷免费| 蜜臀av一级做a爰片久久| 色噜噜狠狠色综合欧洲selulu| 欧美精品一区二区在线观看| 天天综合网天天综合色| 91丨porny丨最新| 国产人伦精品一区二区| 美女视频黄久久| 91精品一区二区三区在线观看| 一区二区三区四区视频精品免费 | 成人免费一区二区三区在线观看 | 久久久精品黄色| 久久国产生活片100| 欧美一级黄色录像| 亚洲福利一区二区| 欧美天堂一区二区三区| 亚洲男人的天堂av| 91原创在线视频| 国产精品国产三级国产| 国产高清不卡一区| 国产亚洲精品中文字幕| 久久99国产精品久久99果冻传媒| 日韩精品一区二区三区视频在线观看| 午夜欧美大尺度福利影院在线看 | 欧美aa在线视频| 日韩午夜电影av|